import "std.zh"
dmapdata script dmapscript
{
void run()
{
int f;
while(1)
{
++f;
if (!(f%180))
{
TraceS("Dmap Script Before Waitdraw()"); TraceNL();
}
Waitdraw();
if (!(f%180))
{
TraceS("Dmap Script After Waitdraw()"); TraceNL();
}
Waitframe();
}
}
}
screendata script sd1
{
void run(){}
}
link script link_init1
{
void run()
{
TraceS("Running Link Init Script"); TraceNL();
Link->X = 100;
Link->Y = 60;
}
}
link script link_active
{
void run()
{
while(1)
{
//TraceS("Link Active Script Running"); TraceNL();
if ( Input->ReadKey[KEY_T] ) { ++Link->X; }
Waitframe();
}
}
}
npc script noanim
{
void run()
{
Trace(this->Animation);
this->Animation = false;
TraceB(this->Animation);
this->Tile = 11728;
}
}
eweapon script E2
{
void run(){}
}
eweapon script E
{
void run(int pow)
{
//TraceS("eweapon script E: this: "); Trace(this); TraceNL();
TraceS("InitD[0] is: "); Trace(pow); TraceNL();
int f;
Trace(this->ID);
while(this->isValid())
{
TraceS("EWeapon Script Running"); TraceNL();
++f;
if ( !(f%10) )
{
this->Dir = Rand(0,3);
TraceS("EWeapon Script Running"); TraceNL();
}
if ( !(this->isValid()) ) Quit();
Waitframe();
}
}
}
lweapon script L
{
void run()
{
TraceS("Script L: this: "); Trace(this); TraceNL();
int f = 0;
while(this->isValid())
{
++f;
if ( !(f%10) )
{
this->Dir = Rand(0,3);
TraceS("LWeapon Script Running"); TraceNL();
}
if ( !(this->isValid()) ) Quit();
Waitframe();
}
}
}
lweapon script sword
{
void run()
{
TraceS("Script sword: this: "); Trace(this); TraceNL();
Trace(this->ID);
while(this->isValid())
{
//this->X += 10;
TraceS("LWeapon Script Running"); TraceNL();
Waitframe();
}
}
}
lweapon script beam
{
void run()
{
//TraceS("Script beam: this: "); Trace(this); TraceNL();
int f;
Trace(this->ID);
while(this->isValid())
{
++f;
if ( !(f%10) )
{
this->Dir = Rand(0,3);
//TraceS("LWeapon Script Running"); TraceNL();
}
if ( !(this->isValid()) ) Quit();
Waitframe();
}
}
}
lweapon script bait
{
void run(int pow)
{
TraceS("Script bait: this: "); Trace(this); TraceNL();
TraceS("Bait InitD[0] is: "); Trace(pow); TraceNL();
int f = 0; int dir = Rand(0,3); int step = 2;
while(this->isValid())
{
++f; if (!(f%6)) { dir = Rand(0,3); step = Rand(2,6); }
switch(dir)
{
case DIR_UP: this->Y -= step; break;
case DIR_DOWN: this->Y += step; break;
case DIR_LEFT: this->X -= step; break;
case DIR_RIGHT: this->X += step; break;
default: break;
}
if ( !(this->isValid()) ) Quit();
Waitframe();
}
}
}
global script ab
{
void run()
{
dmapdata dd = Game->LoadDMapData(0);
int mp = dd->Map;
mapdata md = Game->LoadMapData(mp, 0);
while(1)
{
for ( int q = Screen->NumLWeapons(); q > 0; --q )
{
lweapon l = Screen->LoadLWeapon(q);
if ( l->ID == LW_SCRIPT1 )
{
//TraceS("Found LW_SCRIPT1"); TraceNL();
}
}
if ( Input->ReadKey[KEY_Y] )
{
for ( int q = 0; q < 176; ++q )
{
LogPrint("Mapdata->ComboD[%d] is: %d \n", q, md->ComboD[q]);
LogPrint("Mapdata->ComboT[%d] is: %d \n", q, md->ComboT[q]);
LogPrint("Mapdata->ComboC[%d] is: %d \n", q, md->ComboC[q]);
LogPrint("Mapdata->ComboS[%d] is: %d \n", q, md->ComboS[q]);
LogPrint("Mapdata->ComboF[%d] is: %d \n", q, md->ComboF[q]);
LogPrint("Mapdata->ComboI[%d] is: %d \n", q, md->ComboI[q]);
}
}
if ( Input->ReadKey[KEY_I] )
{
LogPrint("Getting mapdata combo information with GetCurScreen()%s \n", " ");
mapdata mdm = Game->LoadMapData(mp, Game->GetCurScreen());
for ( int q = 0; q < 176; ++q )
{
LogPrint("Mapdata->ComboD[ %d ] is: %d \n", q, mdm->ComboD[q]);
LogPrint("Mapdata->ComboT[ %d ] is: %d \n", q, mdm->ComboT[q]);
LogPrint("Mapdata->ComboC[ %d ] is: %d \n", q, mdm->ComboC[q]);
LogPrint("Mapdata->ComboS[ %d ] is: %d \n", q, mdm->ComboS[q]);
LogPrint("Mapdata->ComboF[ %d ] is: %d \n", q, mdm->ComboF[q]);
LogPrint("Mapdata->ComboI[ %d ] is: %d \n", q, mdm->ComboI[q]);
}
}
if ( Input->ReadKey[KEY_U] )
{
md->ComboD[0] = 100;
md->ComboF[0] = 15;
md->ComboT[0] = 2;
}
Waitframe();
}
}
}
lweapon script readcombos
{
void run()
{
dmapdata dd = Game->LoadDMapData(0);
int mp = dd->Map;
mapdata md = Game->LoadMapData(mp, 0);
while(this->isValid())
{
if ( Input->ReadKey[KEY_Y] )
{
for ( int q = 0; q < 176; ++q )
{
LogPrint("Mapdata->ComboD[%d] is: %d \n", q, md->ComboD[q]);
LogPrint("Mapdata->ComboT[%d] is: %d \n", q, md->ComboT[q]);
LogPrint("Mapdata->ComboC[%d] is: %d \n", q, md->ComboC[q]);
LogPrint("Mapdata->ComboS[%d] is: %d \n", q, md->ComboS[q]);
LogPrint("Mapdata->ComboF[%d] is: %d \n", q, md->ComboF[q]);
LogPrint("Mapdata->ComboI[%d] is: %d \n", q, md->ComboI[q]);
}
}
if ( Input->ReadKey[KEY_I] )
{
LogPrint("Getting mapdata combo information with GetCurScreen()%s \n", " ");
mapdata mdm = Game->LoadMapData(mp, Game->GetCurScreen());
for ( int q = 0; q < 176; ++q )
{
LogPrint("Mapdata->ComboD[ %d ] is: %d \n", q, mdm->ComboD[q]);
LogPrint("Mapdata->ComboT[ %d ] is: %d \n", q, mdm->ComboT[q]);
LogPrint("Mapdata->ComboC[ %d ] is: %d \n", q, mdm->ComboC[q]);
LogPrint("Mapdata->ComboS[ %d ] is: %d \n", q, mdm->ComboS[q]);
LogPrint("Mapdata->ComboF[ %d ] is: %d \n", q, mdm->ComboF[q]);
LogPrint("Mapdata->ComboI[ %d ] is: %d \n", q, mdm->ComboI[q]);
}
}
if ( Input->ReadKey[KEY_U] )
{
md->ComboD[0] = 100;
md->ComboF[0] = 15;
md->ComboT[0] = 2;
}
Waitframe();
}
}
}
lweapon script comboat
{
void run()
{
while(this->isValid())
{
mapdata mps = Game->LoadMapData(Game->GetCurMap(), Game->GetCurScreen());
LogPrint("Mapdata->ComboD[] at this lweapon location is: %d \n", mps->ComboD[ComboAt(this->X, this->Y)]);
Waitframe();
}
}
}
link script onWin
{
void run()
{
int q;
while(1)
{
++q;
Trace(q);
if ( q > 100 ) Quit();
Waitframe();
}
}
}
///////////////////////////////////////
/// Custom Game Over and F6 Screens ///
/// v1.4 for ZC 2.55 ///
/// 24th October, 2018 ///
/// By: ZoriaRPG ///
///////////////////////////////////////
//v1.4 : Added CONTINUE option to both screens. The user can enable or disable this.
typedef const int define;
typedef const int config;
define ON = 1;
define OFF = 0;
define YES = 1;
define NO = 0;
script typedef ffc namespace;
namespace script F6
{
define SELECTION_SAVE = 1;
define SELECTION_RETRY = 2;
define SELECTION_CANCEL = 3;
define SELECTION_CONTINUE = 4;
define CONTINUE_HP = 16*3;
define CONTINUE_MP = 32*3;
config ALLOW_F6_CONTINUE = YES;
config F6MIDI = -3;
void run(){}
const int FREEZE = 504; //Freeze Combo
void freeze(int state)
{
ffc f = Screen->LoadFFC(32);
if ( state ) f->Data = FREEZE;
else f->Data = 0;
}
//if ( F6.press() ) { F6.optiona(); }
bool press()
{
TraceS("User pressed F6"); TraceNL();
if ( Input->ReadKey[46+6] ) return true;
return false;
}
void draw(bool ALLOW_F6_CONTINUE)
{
gameover.draw(true, ALLOW_F6_CONTINUE);
}
int choice(bool ALLOW_F6_CONTINUE)
{
return gameover.get_choice(ALLOW_F6_CONTINUE);
}
void options()
{
Game->DisableActiveSubscreen = true;
freeze(ON);
int oldmidi = Game->GetMIDI();
Game->PlayMIDI(F6MIDI);
while(menu(CONTINUE_HP, YES, CONTINUE_MP, YES))
{
draw(true);
Waitdraw();
Waitframe();
}
Game->PlayMIDI(oldmidi);
freeze(OFF);
Link->PressStart = false; Link->InputStart = false;
}
//for HP, 0 will preserve Link's HP before continuing. For MAGIC, use -1 to do this.
bool menu(int cont_hp, bool hp_is_percent, int cont_mp, bool mp_is_percent)
{
int sel = choice(true);
switch(sel)
{
case SELECTION_SAVE:
{
Game->Save(); return false;
}
case SELECTION_RETRY:
{
freeze(OFF);
Game->End(); return false;
}
case SELECTION_CONTINUE:
{
freeze(OFF);
return do_continue(cont_hp, hp_is_percent, cont_mp, mp_is_percent);
}
case SELECTION_CANCEL:
{
return false;
}
}
return true;
}
bool do_continue(int hp, bool hp_percent, int mp, bool mp_percent)
{
//int entrancedmap = Game->LastEntranceDMap;
//Replace with WarpEx()
//Link->Warp(Game->GetCurDMap(), Game->DMapContinue[Game->GetCurDMap()]);
Link->Warp(Game->LastEntranceDMap, Game->LastEntranceScreen);
if ( hp > 0 ) Link->HP = ( Cond(hp_percent, Link->MaxHP*(hp/100), hp) );
if ( mp > -1 ) Link->MP = ( Cond(mp_percent, Link->MaxMP*(mp/100), hp) );
Link->Dir = DIR_DOWN;
Link->Action = LA_NONE;
return false;
}
}
namespace script gameover
{
config ALLOW_DEATH_CONTINUE = YES;
// Sounds and MIDIs
config SFX_WINKOUT = 38; //Sound to play during wink-out animation.
config SFX_LINKDEATH = 28; //Sound to play when Link dies.
config SFX_GAMEOVERSCREEN_CURSOR = 6; //Sound to play when the player moves the game over cursor.
config SFX_GAMEOVERSCREEN_SELECTION = 44; //Sound to play when the user selects a game over menu option.
config MIDI_GAMEOVER = -4; //MIDI to play on Game Over screen.
//Defaults: -3 is the internal Game Over, -2 is Level 9, -1 is Overworld
// Sprites (Weapons/Misc)
config SPR_DEATH = 88; //Sprite of Link Spinning
config SPR_DEATH_WINKOUT = 89; //Sprite of wink-out
// Sprite Timing
config END_DEATH_SPIN = 40; //Frames to display death spin animation.
config END_WINKOUT = 10; //Frames to display wink-out animation.
// Other Graphics and Colours
config TILE_SAVECURSOR = 20;
config TILE_SAVECURSOR_CSET = 1; //CSet for minitile cursor.
config BLACK = 0x0F; //Black in the current palette
config RED = 0x93; //Red in the current palette
config WHITE = 0x01; //White in the current palette
// Menu Object Positions and Settings
config DONT_SAVE_X = 102; //X position of the RETRY string.
config SAVE_X = 102; //X position of the SAVE string.
config DONT_SAVE_Y = 68; //Y position of the RETRY string.
config CANCEL_Y = 68+14; //Y position of the CANCEL string.
config CONTINUE_Y = 68+28; //Y position of the CONTINUE string.
config SAVE_Y = 54; //X position of the SAVE string.
config CURSOR_OFFSET = 26; //X offset of the cursor from the text.
//Global Variables and Arrays
//Indices for values[]
define MENU_SEL_STATE = 0; //The current selected menu option.
define MENU_SEL_POS_X = 1; //Stores where to draw menu selector.
define MENU_SEL_POS_Y = 2; //Stores where to draw menu selector.
define DEATH_LX = 3; //Cache of Link's last X position before death.
define DEATH_LY = 4; //Cache of Link's last Y position before death.
define DEATHFRAME = 5; //Timer for death animations.
define QUIT = 6; //The game 'QUIT' type, SAVE or RETRY
//gameover.QUIT Types
define quitSAVE = 1;
define quitRETRY = 2;
define quitCONTINUE = 4;
//Menu Selection types
define SELECTION_SAVE = 1;
define SELECTION_RETRY = 2;
define SELECTION_CANCEL = 3;
define SELECTION_CONTINUE = 4;
int values[8] = {1,SAVE_Y,DONT_SAVE_Y, 0,0};
void run(){}
bool check()
{
if ( Link->HP < 1 )
{
Link->HP = 1;
Link->Invisible = true;
Link->CollDetection = false;
values[DEATH_LX] = Link->X;
values[DEATH_LY] = Link->Y;
return true;
}
return false;
}
void clean_up()
{
int q;
if ( Screen->NumNPCs() )
{
for ( q = Screen->NumNPCs(); q > 0; --q )
{
npc n = Screen->LoadNPC(q); Remove(n);
}
}
if ( Screen->NumLWeapons() )
{
for ( q = Screen->NumLWeapons(); q > 0; --q )
{ lweapon n = Screen->LoadLWeapon(q); Remove(n); }
}
if ( Screen->NumEWeapons() )
{
for ( q = Screen->NumEWeapons(); q > 0; --q )
{ eweapon n = Screen->LoadEWeapon(q); Remove(n); }
}
if ( Screen->NumItems() )
{
for ( q = Screen->NumItems(); q > 0; --q )
{ item n = Screen->LoadItem(q); Remove(n); }
}
//clear all ffcs
for ( q = 1; q < 33; ++q )
{
ffc f = Screen->LoadFFC(q);
f->Data = 0; f->Script = 0;
}
}
void draw(bool cancel, bool can_continue)
{
//Draw black background with Rectangle()
Screen->Rectangle(5,0,0,256,256,BLACK,100, 0,0,0,true,128);
if ( !cancel )
{
if ( !can_continue )
{
switch ( values[MENU_SEL_STATE] )
{
case SELECTION_SAVE:
{
//int ss1[]="Drawing cursor and text.";
//TraceS(ss1);
Screen->FastTile(6,SAVE_X-CURSOR_OFFSET, SAVE_Y, TILE_SAVECURSOR, TILE_SAVECURSOR_CSET,128);
//draw strings, red for selected
Screen->DrawString(6,SAVE_X,SAVE_Y,0,RED, -1,0,"SAVE",128);
Screen->DrawString(6,DONT_SAVE_X,DONT_SAVE_Y,0,WHITE, -1,0,"RETRY",128);
break;
}
case SELECTION_RETRY:
{
//Draw cursor
Screen->FastTile(6,DONT_SAVE_X-CURSOR_OFFSET, DONT_SAVE_Y, TILE_SAVECURSOR, TILE_SAVECURSOR_CSET,128);
//draw strings, red for selected
Screen->DrawString(6,SAVE_X,SAVE_Y,0,WHITE, -1,0,"SAVE",128);
Screen->DrawString(6,DONT_SAVE_X,DONT_SAVE_Y,0,RED, -1,0,"RETRY",128);
break;
}
default: break;
}
}
else
{
switch ( values[MENU_SEL_STATE] )
{
case SELECTION_SAVE:
{
//int ss1[]="Drawing cursor and text.";
//TraceS(ss1);
Screen->FastTile(6,SAVE_X-CURSOR_OFFSET, SAVE_Y, TILE_SAVECURSOR, TILE_SAVECURSOR_CSET,128);
//draw strings, red for selected
Screen->DrawString(6,SAVE_X,SAVE_Y,0,RED, -1,0,"SAVE",128);
Screen->DrawString(6,DONT_SAVE_X,DONT_SAVE_Y,0,WHITE, -1,0,"CONTINUE",128);
Screen->DrawString(6,DONT_SAVE_X,CANCEL_Y,0,WHITE, -1,0,"RETRY",128);
break;
}
case SELECTION_CONTINUE:
{
//int ss1[]="Drawing cursor and text.";
//TraceS(ss1);
Screen->FastTile(6,SAVE_X-CURSOR_OFFSET, DONT_SAVE_Y, TILE_SAVECURSOR, TILE_SAVECURSOR_CSET,128);
//draw strings, red for selected
Screen->DrawString(6,SAVE_X,SAVE_Y,0,RED, -1,0,"SAVE",128);
Screen->DrawString(6,DONT_SAVE_X,DONT_SAVE_Y,0,WHITE, -1,0,"CONTINUE",128);
Screen->DrawString(6,DONT_SAVE_X,CANCEL_Y,0,WHITE, -1,0,"RETRY",128);
break;
}
case SELECTION_RETRY:
{
//Draw cursor
Screen->FastTile(6,DONT_SAVE_X-CURSOR_OFFSET, CANCEL_Y, TILE_SAVECURSOR, TILE_SAVECURSOR_CSET,128);
//draw strings, red for selected
Screen->DrawString(6,SAVE_X,SAVE_Y,0,WHITE, -1,0,"SAVE",128);
Screen->DrawString(6,DONT_SAVE_X,DONT_SAVE_Y,0,WHITE, -1,0,"CONTINUE",128);
Screen->DrawString(6,DONT_SAVE_X,CANCEL_Y,0,RED, -1,0,"RETRY",128);
break;
}
default: break;
}
}
}
else
{
if ( !can_continue )
{
switch(values[MENU_SEL_STATE])
{
case SELECTION_SAVE:
{
//int ss1[]="Drawing cursor and text.";
//TraceS(ss1);
Screen->FastTile(6,SAVE_X-CURSOR_OFFSET, SAVE_Y, TILE_SAVECURSOR, TILE_SAVECURSOR_CSET,128);
//draw strings, red for selected
Screen->DrawString(6,SAVE_X,SAVE_Y,0,RED, -1,0,"SAVE",128);
Screen->DrawString(6,DONT_SAVE_X,DONT_SAVE_Y,0,WHITE, -1,0,"RETRY",128);
Screen->DrawString(6,DONT_SAVE_X,CANCEL_Y,0,WHITE, -1,0,"CANCEL",128);
break;
}
case SELECTION_RETRY:
{
//Draw cursor
Screen->FastTile(6,DONT_SAVE_X-CURSOR_OFFSET, DONT_SAVE_Y, TILE_SAVECURSOR, TILE_SAVECURSOR_CSET,128);
//draw strings, red for selected
Screen->DrawString(6,SAVE_X,SAVE_Y,0,WHITE, -1,0,"SAVE",128);
Screen->DrawString(6,DONT_SAVE_X,DONT_SAVE_Y,0,RED, -1,0,"RETRY",128);
Screen->DrawString(6,DONT_SAVE_X,CANCEL_Y,0,WHITE, -1,0,"CANCEL",128);
break;
}
case SELECTION_CANCEL:
{
//Draw cursor
Screen->FastTile(6,DONT_SAVE_X-CURSOR_OFFSET, CANCEL_Y, TILE_SAVECURSOR, TILE_SAVECURSOR_CSET,128);
//draw strings, red for selected
Screen->DrawString(6,SAVE_X,SAVE_Y,0,WHITE, -1,0,"SAVE",128);
Screen->DrawString(6,DONT_SAVE_X,DONT_SAVE_Y,0,WHITE, -1,0,"RETRY",128);
Screen->DrawString(6,DONT_SAVE_X,CANCEL_Y,0,RED, -1,0,"CANCEL",128);
break;
}
default: break;
}
}
else //allow F6 continue
{
switch(values[MENU_SEL_STATE])
{
//I'm reusing the positional defines for cancel and continue, and transposing them
//to reorder the list. -Z
//I should rename these to LIST_1_Y, LIST_2_Y, and so forth.
case SELECTION_SAVE:
{
//int ss1[]="Drawing cursor and text.";
//TraceS(ss1);
Screen->FastTile(6,SAVE_X-CURSOR_OFFSET, SAVE_Y, TILE_SAVECURSOR, TILE_SAVECURSOR_CSET,128);
//draw strings, red for selected
Screen->DrawString(6,SAVE_X,SAVE_Y,0,RED, -1,0,"SAVE",128);
Screen->DrawString(6,DONT_SAVE_X,DONT_SAVE_Y,0,WHITE, -1,0,"RETRY",128);
Screen->DrawString(6,DONT_SAVE_X,CONTINUE_Y,0,WHITE, -1,0,"CANCEL",128);
Screen->DrawString(6,DONT_SAVE_X,CANCEL_Y,0,WHITE, -1,0,"CONTINUE",128);
break;
}
case SELECTION_RETRY:
{
//Draw cursor
Screen->FastTile(6,DONT_SAVE_X-CURSOR_OFFSET, DONT_SAVE_Y, TILE_SAVECURSOR, TILE_SAVECURSOR_CSET,128);
//draw strings, red for selected
Screen->DrawString(6,SAVE_X,SAVE_Y,0,WHITE, -1,0,"SAVE",128);
Screen->DrawString(6,DONT_SAVE_X,DONT_SAVE_Y,0,RED, -1,0,"RETRY",128);
Screen->DrawString(6,DONT_SAVE_X,CONTINUE_Y,0,WHITE, -1,0,"CANCEL",128);
Screen->DrawString(6,DONT_SAVE_X,CANCEL_Y,0,WHITE, -1,0,"CONTINUE",128);
break;
}
case SELECTION_CANCEL:
{
//Draw cursor
Screen->FastTile(6,DONT_SAVE_X-CURSOR_OFFSET, CANCEL_Y, TILE_SAVECURSOR, TILE_SAVECURSOR_CSET,128);
//draw strings, red for selected
Screen->DrawString(6,SAVE_X,SAVE_Y,0,WHITE, -1,0,"SAVE",128);
Screen->DrawString(6,DONT_SAVE_X,DONT_SAVE_Y,0,WHITE, -1,0,"RETRY",128);
Screen->DrawString(6,DONT_SAVE_X,CONTINUE_Y,0,RED, -1,0,"CANCEL",128);
Screen->DrawString(6,DONT_SAVE_X,CANCEL_Y,0,WHITE, -1,0,"CONTINUE",128);
break;
}
case SELECTION_CONTINUE:
{
//Draw cursor
Screen->FastTile(6,DONT_SAVE_X-CURSOR_OFFSET, CONTINUE_Y, TILE_SAVECURSOR, TILE_SAVECURSOR_CSET,128);
//draw strings, red for selected
Screen->DrawString(6,SAVE_X,SAVE_Y,0,WHITE, -1,0,"SAVE",128);
Screen->DrawString(6,DONT_SAVE_X,DONT_SAVE_Y,0,WHITE, -1,0,"RETRY",128);
Screen->DrawString(6,DONT_SAVE_X,CONTINUE_Y,0,WHITE, -1,0,"CANCEL",128);
Screen->DrawString(6,DONT_SAVE_X,CANCEL_Y,0,RED, -1,0,"CONTINUE",128);
break;
}
default: break;
}
}
}
}
bool choice(bool can_continue)
{
if ( !can_continue )
{
if ( Link->PressDown ) // || Link->PressUp )
{
switch(values[MENU_SEL_STATE])
{
case SELECTION_SAVE: //save
++values[MENU_SEL_STATE]; break;
case SELECTION_RETRY: //retry
--values[MENU_SEL_STATE]; break;
}
Game->PlaySound(SFX_GAMEOVERSCREEN_CURSOR);
return true;
}
if ( Link->PressUp )
{
switch(values[MENU_SEL_STATE])
{
case SELECTION_SAVE: //save
--values[MENU_SEL_STATE]; return true;;
case SELECTION_RETRY: //retry
++values[MENU_SEL_STATE]; return true;;
}
Game->PlaySound(SFX_GAMEOVERSCREEN_CURSOR);
return true;
}
}
else //save, continue, retry
{
if ( Link->PressDown ) // || Link->PressUp )
{
switch(values[MENU_SEL_STATE])
{
case SELECTION_SAVE: //save
values[MENU_SEL_STATE] = SELECTION_CONTINUE; break;
case SELECTION_CONTINUE: //save
values[MENU_SEL_STATE] = SELECTION_RETRY; break;
case SELECTION_RETRY: //retry
values[MENU_SEL_STATE] = SELECTION_SAVE; break;
}
Game->PlaySound(SFX_GAMEOVERSCREEN_CURSOR);
return true;
}
if ( Link->PressUp )
{
switch(values[MENU_SEL_STATE])
{
case SELECTION_SAVE: //save
values[MENU_SEL_STATE] = SELECTION_RETRY; break;
case SELECTION_CONTINUE: //save
values[MENU_SEL_STATE] = SELECTION_SAVE; break;
case SELECTION_RETRY: //retry
values[MENU_SEL_STATE] = SELECTION_CONTINUE; break;
}
Game->PlaySound(SFX_GAMEOVERSCREEN_CURSOR);
return true;
}
}
if ( Link->PressStart )
{
Game->PlaySound(SFX_GAMEOVERSCREEN_SELECTION);
if ( values[MENU_SEL_STATE] ) values[QUIT] = quitSAVE;
else values[QUIT] = quitRETRY; //no save
return false;
}
return true;
}
int get_choice(bool can_continue)
{
if ( !can_continue )
{
if ( Link->PressDown )
{
Game->PlaySound(SFX_GAMEOVERSCREEN_CURSOR);
switch(values[MENU_SEL_STATE])
{
case SELECTION_SAVE: //save
++values[MENU_SEL_STATE]; break;
case SELECTION_RETRY: //retry
++values[MENU_SEL_STATE]; break;
case SELECTION_CANCEL: //3
values[MENU_SEL_STATE] = 1; break;
default: //cance;
values[MENU_SEL_STATE] = 0; break;
}
}
if ( Link->PressUp )
{
Game->PlaySound(SFX_GAMEOVERSCREEN_CURSOR);
switch(values[MENU_SEL_STATE])
{
case 1: //save
values[MENU_SEL_STATE] = 3; break;
case 2: //retry
--values[MENU_SEL_STATE] ; break;
case SELECTION_CANCEL: //3
--values[MENU_SEL_STATE] ; break;
default: //cance;
values[MENU_SEL_STATE] = 0; break;
}
}
}
else //allow continue
{
if ( Link->PressDown )
{
Game->PlaySound(SFX_GAMEOVERSCREEN_CURSOR);
switch(values[MENU_SEL_STATE])
{
case SELECTION_SAVE: //save
++values[MENU_SEL_STATE]; break;
case SELECTION_RETRY: //retry
++values[MENU_SEL_STATE]; break;
case SELECTION_CANCEL: //3
++values[MENU_SEL_STATE] = 1; break;
case SELECTION_CONTINUE: //3
values[MENU_SEL_STATE] = 1; break;
default: //cance;
values[MENU_SEL_STATE] = 0; break;
}
}
if ( Link->PressUp )
{
Game->PlaySound(SFX_GAMEOVERSCREEN_CURSOR);
switch(values[MENU_SEL_STATE])
{
case 1: //save
values[MENU_SEL_STATE] = 4; break;
case 2: //retry
--values[MENU_SEL_STATE]; break;
case SELECTION_CANCEL: //3
--values[MENU_SEL_STATE]; break;
case SELECTION_CONTINUE: //3
--values[MENU_SEL_STATE]; break;
default: //cance;
values[MENU_SEL_STATE] = 0; break;
}
}
}
if ( Link->PressStart )
{
Game->PlaySound(SFX_GAMEOVERSCREEN_SELECTION);
int ret = values[MENU_SEL_STATE];
values[MENU_SEL_STATE] = 1;
return ret;
}
}
void animation()
{
if ( values[DEATHFRAME] == 0 ) Game->PlaySound(SFX_LINKDEATH);
lweapon death = Screen->CreateLWeapon(LW_SPARKLE);
death->UseSprite(SPR_DEATH);
death->X = values[DEATH_LX];
death->Y = values[DEATH_LY];
while ( values[DEATHFRAME] < END_DEATH_SPIN )
{
++values[DEATHFRAME];
//spin Link around by drawing his tiles, then make the wink out.
NoAction(); Waitdraw(); Waitframe();
}
Remove(death);
Game->PlaySound(SFX_WINKOUT);
lweapon death2 = Screen->CreateLWeapon(LW_SPARKLE);
death2->UseSprite(SPR_DEATH_WINKOUT);
death2->X = values[DEATH_LX];
death2->Y = values[DEATH_LY];
while ( values[DEATHFRAME] < END_DEATH_SPIN+END_WINKOUT )
{
++values[DEATHFRAME];
//wink-out
NoAction(); Waitdraw(); Waitframe();
}
Remove(death2);
}
}
//Global Active Script
link script noF6
{
void run()
{
while(true)
{
//Normal pre-waitdraw functions go here.
//UpdateGhostZH1();
//Put any health refull code above this!
//Run the check to see if Link is dying...
if ( F6.press() ) { Game->DisableActiveSubscreen = false; F6.options(); }
if ( gameover.check() ) break; //LAST before Waitdraw()
Waitdraw();
//Normal post-waitdraw functions go here.
//UpdateGhostZH2();
Waitframe();
}
while(!gameover.values[gameover.QUIT])
{
//gameover.values[gameover.DEATH_LX] = Link->X;
//gameover.values[gameover.DEATH_LY] = Link->Y;
//Set game music to a silent MIDI.
Link->HP = Link->MaxHP;
Link->Invisible = true;
Link->CollDetection = false;
//Clean up screen objects
gameover.clean_up();
//Do Link Death animation
gameover.animation();
bool menu = true;
Game->PlayMIDI(gameover.MIDI_GAMEOVER);//Play game over midi.
Game->DisableActiveSubscreen = true;
while(menu) //menu loop
{
// GAME OVER SCREEN
gameover.draw(false,false); //gameover.draw(true, ALLOW_F6_CONTINUE);
menu = gameover.choice(gameover.ALLOW_DEATH_CONTINUE);
Waitdraw();
Waitframe();
}
Waitdraw(); Waitframe();
}
switch(gameover.values[gameover.QUIT])
{
case gameover.quitSAVE:
{
++Game->NumDeaths;
Game->Save();
Game->End();
break;
}
case gameover.quitRETRY:
{
Game->End(); //Retry
break;
}
case gameover.quitCONTINUE:
{
F6.do_continue(F6.CONTINUE_HP, YES, F6.CONTINUE_MP, YES);
break;
}
default: break;
}
}
}
global script OnExit
{
void run()
{
Link->Invisible = false;
}
}
}
Comments