Wolf3D-Mac/SnesMain.c

1 line
4.0 KiB
C
Raw Normal View History

#include "WolfDef.h" #include <string.h> #include <stdlib.h> #include <setjmp.h> #include <ctype.h> /********************************** Prepare the screen for game **********************************/ void SetupPlayScreen (void) { SetAPalette(rBlackPal); /* Force black palette */ ClearTheScreen(BLACK); /* Clear the screen to black */ BlastScreen(); firstframe = 1; /* fade in after drawing first frame */ GameViewSize = NewGameWindow(GameViewSize); } /********************************** Display the automap **********************************/ void RunAutoMap(void) { Word vx,vy; Word Width,Height; Word CenterX,CenterY; Word oldjoy,newjoy; MakeSmallFont(); /* Make the tiny font */ playstate = EX_AUTOMAP; vx = viewx>>8; /* Get my center x,y */ vy = viewy>>8; Width = (SCREENWIDTH/16); /* Width of map in tiles */ Height = (VIEWHEIGHT/16); /* Height of map in tiles */ CenterX = Width/2; CenterY = Height/2; if (vx>=CenterX) { vx -= CenterX; } else { vx = 0; } if (vy>=CenterY) { vy -= CenterY; } else { vy = 0; } oldjoy = joystick1; do { ClearTheScreen(BLACK); DrawAutomap(vx,vy); do { ReadSystemJoystick(); } while (joystick1==oldjoy); oldjoy &= joystick1; newjoy = joystick1 ^ oldjoy; if (newjoy & (JOYPAD_START|JOYPAD_SELECT|JOYPAD_A|JOYPAD_B|JOYPAD_X|JOYPAD_Y)) { playstate = EX_STILLPLAYING; } if (newjoy & JOYPAD_UP && vy) { --vy; } if (newjoy & JOYPAD_LFT && vx) { --vx; } if (newjoy & JOYPAD_RGT && vx<(MAPSIZE-1)) { ++vx; } if (newjoy & JOYPAD_DN && vy <(MAPSIZE-1)) { ++vy; } } while (playstate==EX_AUTOMAP); playstate = EX_STILLPLAYING; /* let the player scroll around until the start button is pressed again */ KillSmallFont(); /* Release the tiny font */ RedrawStatusBar(); ReadSystemJoystick(); mousex = 0; mousey = 0; mouseturn = 0; } /********************************** Begin a new game **********************************/ void StartGame(void) { if (playstate!=EX_LOADGAME) { /* Variables already preset */ NewGame(); /* init basic game stuff */ } SetupPlayScreen(); GameLoop(); /* Play the game */ StopSong(); /* Make SURE music is off */ } /********************************** Show the game logo **********************************/ Boolean TitleScreen (void) { Word RetVal; /* Value to return */ LongWord PackLen; LongWord *PackPtr; Byte *ShapePtr; playstate = EX_LIMBO; /* Game is not in progress */ NewGameWindow(1); /* Set to 512 mode */ FadeToBlack(); /* Fade out the video */ PackPtr = LoadAResource(rTitlePic); PackLen = PackPtr[0]; ShapePtr = (Byte *)AllocSomeMem(PackLen); DLZSS(ShapePtr,(Byte *) &PackPtr[1],PackLen); DrawShape(0,0,ShapePtr); ReleaseAResource(rTitlePic); FreeSomeMem(ShapePtr); BlastScreen(); StartSong(SongListPtr[0]); FadeTo(rTitlePal); /* Fade in the picture */ BlastScreen(); RetVal = WaitTicksEvent(0); /* Wait for event */ playstate = EX_COMPLETED; return TRUE; /* Return True if canceled */ } /********************************** Main entry point for the game (Called after InitTools) **********************************/ jmp_buf ResetJmp; Boolean JumpOK; extern Word NumberIndex; void main(void) { InitTools(); /* Init the system environment */ WaitTick(); /* Wait for a system tick to go by */ playstate = (exit_t)setjmp(ResetJmp); NumberIndex = 36; /* Force the score to redraw properly */ IntermissionHack = FALSE; if (playstate) { goto DoGame; /* Begin a new game or saved game */ } JumpOK = TRUE; /* Jump vector is VALID */ FlushKeys(); /* Allow a system event */ Intro(); /* Do the game intro */ for (;;) { if (TitleScreen()) { /* Show the game logo */ StartSong(SongListPtr[0]); ClearTheScreen(BLACK); /* Blank out the title page */ BlastScreen(); SetAPalette(rBlackPal); if (ChooseGameDiff()) { /* Choose your difficulty */ playstate = EX_NEWGAME; /* Start a new game */ DoGame: FadeToBlack(); /* Fade the screen */ StartGame(); /* Play the game */ } } } }