void RandomEncounter() { mapdata m = Game->LoadMapDat(Game->GetCurMap(), Game->GetCurScreen()); npcdata e = Game->LoadNPCData(m-Enemy[Rand(10]l ffc f = Screen->LoadFFC(32); f->Script = Game->GetFFCScript("Battle"); f->InitD[0] = e; f->InitD[1] = m; //for drawing backdrops } ffc script Battle { void run(npcdata e, mapdata m) { bool waiting; int mode; int action; while(1) { // Draw background using 'm' // draw npc using 'e' // determine e's attacks using it's attributes; // draw menus // determine who goes first mode = Rand(1); //if 1, enemy goes first while(mode) { //do enemy actions //Waitframe(); } while(!mode) { //player actions waiting = true; while(waiting) { //do_menus(); action = BattleMenu(); Waitframe(); } //resolve stuff this round Waitframe(); } } } // There are certainly other ways to handle these... // Vars used by the Tango menu. int menuCommand; int menuArg; //Tango Menu Init void SetUpWindow(int slot, int style, int x, int y, int size) { SetStyleSize(style, size); Tango_ClearSlot(slot); Tango_SetSlotStyle(slot, style); Tango_SetSlotPosition(slot, x, y); } //Quick way to drop a string into a Tango dialogue box. void ShowString(int string, int slot, int style, int x, int y) { SetUpWindow(slot, style, x, y, SIZE_LARGE); Tango_LoadString(slot, string); Tango_ActivateSlot(slot); while(Tango_SlotIsActive(slot)) Waitframe(); } //The 'yes/no' menu called by the ffc. int BattleMenu() { int lineBreak[]="@26"; int line1[]="@choice(1)Attack@tab(40)@choice(2)Spell@26"; int line2[]="@choice(3)Item@tab(40)@choice(4)Item@domenu(1)@suspend()"; SetUpWindow(WINDOW_SLOT_1, WINDOW_STYLE_3, 32, 32, SIZE_LARGE); Tango_LoadString(WINDOW_SLOT_1, line1); Tango_AppendString(WINDOW_SLOT_1, line2); Tango_ActivateSlot(WINDOW_SLOT_1); while(!Tango_MenuIsActive()){ Waitframe(); } // Save the state again... int slotState[278]; int menuState[960]; int cursorPos; Tango_SaveSlotState(WINDOW_SLOT_1, slotState); Tango_SaveMenuState(menuState); int done = 0; int choice; while(true){ while( Tango_MenuIsActive() ) { cursorPos=Tango_GetMenuCursorPosition(); Waitframe(); } choice = Tango_GetLastMenuChoice(); if ( choice == 1 ) { // Item Info int text[256]; Game->GetMessage(msg,text); //Load msg into the buffer. ShowString(text, WINDOW_SLOT_2, WINDOW_STYLE_3, 48, 48); } else if ( choice == 2 ) { //Buy done = choice; menuArg = choice; } else if ( choice == 3 ) { //Cancel done = choice; } else if ( Link->PressEx1 ) { done = 1; } else done = 3; if ( done ) { break; // return choice; } else { Tango_RestoreSlotState(WINDOW_SLOT_1, slotState); Tango_RestoreMenuState(menuState); Tango_SetMenuCursorPosition(cursorPos); } } Tango_ClearSlot(WINDOW_SLOT_1); return done; }