diff options
Diffstat (limited to 'arm9/source/tapes.c')
-rw-r--r-- | arm9/source/tapes.c | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/arm9/source/tapes.c b/arm9/source/tapes.c new file mode 100644 index 0000000..adac3b6 --- /dev/null +++ b/arm9/source/tapes.c @@ -0,0 +1,175 @@ +/* + ds81 - Nintendo DS ZX81 emulator. + + Copyright (C) 2006 Ian Cowburn + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + $Id$ +*/ + +#include <nds.h> + +#include "tapes.h" +#include "framebuffer.h" +#include "zx81.h" + +#include "maze_bin.h" +#include "maze_inlay_bin.h" +#include "cpatrol_bin.h" +#include "cpatrol_inlay_bin.h" +#include "sabotage_bin.h" +#include "sabotage_inlay_bin.h" + + +/* ---------------------------------------- STATIC DATA +*/ +typedef struct +{ + const u8 *tape; + const u32 *tape_len; + sImage img; + void *source_pcx; + const char *text; +} Tape; + +#define NO_TAPES 3 + +static Tape tapes[NO_TAPES]= + { + { + maze_bin, + &maze_bin_size, + {0}, + maze_inlay_bin, + "%3d monster maze%\n" + "(c) 1983 Malcom E. Evans\n\n" + "Escape the maze and its T-Rex\n" + "\n\n" + "%note% when the screen goes grey\n" + "for 30-60 seconds this is not a\n" + "problem, and is the game creating\n" + "the lair of rex." + }, + { + cpatrol_bin, + &cpatrol_bin_size, + {0}, + cpatrol_inlay_bin, + "%city patrol%\n" + "(c) 1982 Don Priestley\n\n" + "Defend the city from the aliens.\n\n" + "yes - that parallax city was\n" + "done with a text mode and the\n" + "equivalent of a 0.8mhz z80" + }, + { + sabotage_bin, + &sabotage_bin_size, + {0}, + sabotage_inlay_bin, + "%sabotage%\n" + "(c) 1982 Don Priestley\n\n" + "Destroy the boxes before the\n" + "guard finds you.\n\n" + "or find the saboteur as the\n" + "guard.\n\n" + "while this game may not feature\n" + "the dazzling graphics of other\n" + "ZX81 games it more than makes\n" + "up with a simply joyous\n" + "gameplay mechanic.\n" + } + }; + + +static int current=0; + +/* ---------------------------------------- PRIVATE INTERFACES +*/ +static void InitTapes(void) +{ + static int init=FALSE; + int f; + + if (init) + { + return; + } + + init=TRUE; + + for(f=0;f<NO_TAPES;f++) + { + loadPCX(tapes[f].source_pcx,&tapes[f].img); + image8to16(&tapes[f].img); + } +} + +static void DisplayTape(Tape *t) +{ + FB_Clear(); + FB_Blit(&t->img,255-t->img.width,0); + + FB_Print("LEFT/RIGHT",0,0,FB_RGB(255,255,255),-1); + FB_Print("to choose",0,10,FB_RGB(255,255,255),-1); + FB_Print("A to select",0,30,FB_RGB(255,255,255),-1); + FB_Print("B to cancel",0,40,FB_RGB(255,255,255),-1); + + ZX81DisplayString(t->text); +} + +/* ---------------------------------------- PUBLIC INTERFACES +*/ +void SelectTape(void) +{ + int done=FALSE; + + InitTapes(); + + while(!done) + { + uint32 key=0; + + DisplayTape(tapes+current); + + do + { + swiWaitForVBlank(); + } while(!(key=keysDownRepeat())); + + if (key & KEY_LEFT) + { + if (--current<0) + { + current=NO_TAPES-1; + } + } + else if (key & KEY_RIGHT) + { + current=(current+1)%NO_TAPES; + } + else if (key & KEY_A) + { + done=TRUE; + ZX81SetTape(tapes[current].tape,*tapes[current].tape_len); + } + else if (key & KEY_B) + { + done=TRUE; + } + } +} + |