Alchemy
Loading...
Searching...
No Matches

suhalla_gate.c

Go to the documentation of this file.
1/// @file
2/// Suhalla Gate in three scenes: the gate with the house beside it, a second
3/// scene where a Djinni waits, and a third. Before Babi's audience after
4/// Colosso two guards keep the gate and step together to block the passage.
5/// After it, the party arrives with Iodem to find the guards beaten by strange
6/// wanderers: Iodem questions them and sets out after the attackers.
7
8#include "game_state.h"
9#include "version.h"
11#include "unit/object/object.h"
13#include "battle.h"
14#include "debug.h"
15#include "field.h"
16#include "game.h"
17#include "graphics.h"
18#include "menu.h"
19#include "minigame.h"
20#include "sound.h"
21#include "system.h"
22#include "suhalla_gate.h"
23#include "field_scene.h"
24#include "djinn_ids.h"
25#include "types.h"
26#include "field_event.h"
27#include "scene_ids.h"
28#include "text/msg_ids.h"
29#include "ability_ids.h"
30#include "objcmd.h"
31#include "flags.h"
32#include "songs.h"
33#include "item_ids.h"
34
35#if TBS_PATCH_3
36#define SUHALLA_GATE_RETREAT_SCENE(currentScene) ((s32)&SceneId_SuhallaGate1)
37#else
38#define SUHALLA_GATE_RETREAT_SCENE(currentScene) (currentScene)
39#endif
40
41/// The actors this scene's code names, by their place in the placement tables.
42enum {
43 /// At the gate itself.
46 /// After Babi's audience: the soldier east of the gate who tells of the
47 /// attack on Venus Lighthouse and vanishes, and Iodem.
49 IODEM = 11,
50 /// In the second scene.
51 DJINNI = 13
52};
53
54/// Arrivals in the first scene: from the world map south of the gate, out of
55/// the house beside it, and from the world map to the east.
57
58/// The house beside the gate is Lunpa Suhalla's entrance 10.
60
61/// Talking to the Djinni starts its battle.
62static void Event_FightDjinni(void) {
64}
65
66const struct SceneEntrance *Scene_GetEntrances(void) {
67 s16 scene = gGameState.scene;
68
69 if (scene == (s32)&SceneId_SuhallaGate2) {
71 }
72 if (scene == (s32)&SceneId_SuhallaGate3) {
74 }
76}
77
78const struct SceneRegion *Scene_GetRegions(void) { return NULL; }
79
80const u32 *Scene_GetExits(void) { return gSuhallaGateExits; }
81
82/// The guards, wounded after Babi's audience, and the Djinni.
84 s16 scene = gGameState.scene;
85
86 if (scene == (s32)&SceneId_SuhallaGate2) {
88 }
89 if (scene == (s32)&SceneId_SuhallaGate1) {
92 }
94 }
96}
97
98/// The events of the gate, the Djinni's scene or the third scene.
99const struct SceneEvent *Scene_GetEvents(void) {
100 s16 scene = gGameState.scene;
101
102 if (scene == (s32)&SceneId_SuhallaGate2) {
103 return gSuhallaGateEvents2;
104 }
105 if (scene == (s32)&SceneId_SuhallaGate3) {
106 return gSuhallaGateEvents3;
107 }
109}
110
111/// Sets the gate up as the party enters. Once the attack has been seen, the
112/// house beside the gate is the saved place. In the first scene the vanished
113/// soldier stays hidden, the side the party came in by is remembered for
114/// Retreat, and arriving from the south before Babi's audience changes cells
115/// by the passage. The Spanish, French and Italian editions also change cells
116/// around the wounded guards.
118 s32 scene;
119
123 }
124 scene = gGameState.scene;
125 if (scene == (s32)&SceneId_SuhallaGate1) {
128#if TBS_PATCH_3
130 Map_CopyCellAttributes(0, 0, 2, 1, 29, 18);
132 Map_CopyCellAttributes(0, 0, 2, 1, 8, 25);
133 Map_CopyCellAttributes(0, 0, 2, 1, 9, 26);
134 }
135#endif
136 // Out of the house, Retreat leads back to the side the party came in by,
137 // and the place's name is not shown again.
142 }
146 }
148 }
152 Map_CopyCellAttributes(6, 0, 2, 1, 8, 27);
153 }
156 } else if (scene == (s32)&SceneId_SuhallaGate2) {
162 Object_GetById(15)->scaleY = 0x19999;
163 Map_CopyCellAttributes(108, 38, 1, 1, 102, 56);
164 }
165 return 0;
166}
167
168/// The leader walks north into the house's door: it opens in two frames and
169/// the leader steps inside.
170static void Event_EnterHouse(void) {
171 s32 exitTrigger;
172 s32 cellSize;
173
174 exitTrigger = gEventWork->touchedTrigger;
175 Actor_Get(ACTOR_PARTY_LEADER)->motionFlags = 0;
176 cellSize = 2;
178 Map_CopyCellsTo(66, 36, 71, 8, cellSize, cellSize);
180 Map_CopyCellsTo(68, 36, 71, 8, cellSize, cellSize);
183 Engine_EventRequestExit(exitTrigger);
184}
185
186/// The party leaves for the world map by trigger 1 or 5, forgetting the side
187/// it came in by.
188static void Event_LeaveForWorldMap(void) {
189 s16 exitTrigger = gEventWork->touchedTrigger;
190
194 Engine_EventRequestExit(exitTrigger);
195}
196
197/// Before Babi's audience, as the party nears the passage: the two guards step
198/// together in front of it, and the map cells around them change.
199static void Event_GuardsBlockPassage(void) {
201 Actor_SetSpeed(GUARD_WEST, 65536, 32768);
202 Actor_SetSpeed(GUARD_EAST, 65536, 32768);
203 Actor_WalkTo(GUARD_WEST, 136, 384);
208 Map_CopyCellAttributes(6, 27, 1, 1, 7, 27);
209#if TBS_PATCH_3
210 Map_CopyCellAttributes(11, 26, 1, 1, 7, 26);
211 Map_CopyCellAttributes(11, 26, 1, 1, 8, 26);
212#else
213 Map_CopyCellAttributes(9, 26, 2, 1, 7, 26);
214#endif
216}
217
218/// After Babi's audience, on reaching the gate: Iodem steps out of the party
219/// and asks what happened. The wounded guards tell of a strange group without
220/// papers whose powers beat them; Iodem asks whether it was the party's foe,
221/// and the guards send the party on after the attackers. Iodem rejoins the
222/// party.
223static void Event_IodemQuestionsGuards(void) {
224 struct FieldActor *leader;
225#if !TBS_PATCH_3
226 s32 destinationColumn;
227#endif
228
230 Actor_SetSpeed(ACTOR_PARTY_LEADER, 0x19999, 0xcccc);
234 if (leader != 0) {
235 Actor_SetPosition(IODEM, leader->x.fixed, leader->z.fixed);
236 }
238 Actor_SetSpeed(IODEM, 0x19999, 0xcccc);
239 Actor_WalkToAndWait(IODEM, 108, 0x1af);
247 Engine_EventSetMessage(MsgSuhallaMeaning);
249 // The guards describe the attack before Iodem asks who was responsible.
253 Actor_WalkToAndWait(IODEM, 132, 0x1a4);
256 Actor_WalkToAndWait(IODEM, 138, 0x1a0);
266 Actor_WalkToAndWait(IODEM, 144, 0x1a4);
274 // Iodem: "It must have been ...!", and the party answers yes or no. Once he
275 // has heard the wounded soldiers in Suhalla he adds that they must find
276 // Sheba, then track down the monsters that did this.
283 } else {
284 gEventWork->message += 1;
285 }
291 Actor_WalkToAndWait(IODEM, 138, 0x1a0);
314 if (leader != 0) {
315 Actor_SetDestination(IODEM, leader->x.part.pixel, leader->z.part.pixel);
316 }
319#if TBS_PATCH_3
320 Map_CopyCellAttributes(6, 27, 1, 1, 7, 27);
321 Map_CopyCellAttributes(11, 26, 1, 1, 7, 26);
322 Map_CopyCellAttributes(11, 26, 1, 1, 8, 26);
323#else
324 destinationColumn = 7;
325 Map_CopyCellAttributes(6, 27, 1, 1, destinationColumn, 27);
326 Map_CopyCellAttributes(9, 26, 2, 1, destinationColumn, 26);
327#endif
330}
331
332/// Before the attack the east guard asks whether the party is bound for Babi
333/// Lighthouse. "Do you want to go to Babi Lighthouse?" Yes, and the party must
334/// show travel papers it does not have; no, and the guard calls them strange.
335/// Afterwards the guard vows to settle the score.
336static void Event_TalkToEastGuard(void) {
338
340 Engine_EventSetMessage(MsgSuhallaPityColossoVictor);
342 } else {
343 Engine_EventSetMessage(MsgSuhallaWantGoBabi);
344 {
345 s32 mode = 0;
346 s32 no = GUARD_EAST;
347
348 Engine_EventOpenMessage(no, mode);
349 }
350
355 } else {
356 gEventWork->message += 2;
358 }
359 }
360
362}
363
364/// The soldier east of the gate gasps that Venus Lighthouse was attacked by
365/// strange wanderers, then flickers, slowly and then fast, and vanishes.
366static void Event_SoldierVanishes(void) {
367 unsigned int beat;
368
370
371 Engine_EventSetMessage(MsgFieldVenusLighthouseWasAttackedBy);
373
374 beat = 0;
375 // Six slow blinks are followed by twelve fast ones.
376 do {
380
383 beat++;
385 } while (beat <= 5);
386
387 beat = 0;
388 do {
392
395 beat++;
397 } while (beat <= 11);
398
400
402
403#if TBS_PATCH_3
404 Map_CopyCellAttributes(29, 19, 2, 1, 29, 18);
405#endif
407}
408
409// How the wounded soldiers lie: animation argument 5, the west guard
410// mirrored. In the Spanish, French and Italian editions each script first
411// turns collision off and runs on into the one after it.
412#if TBS_PATCH_3
415};
416#endif
417
419 SC_ARG(5),
420 SC_END,
421};
422
423#if TBS_PATCH_3
426};
427#endif
428
430 SC_SET(SW_SCALE_X, -0x10000),
431 SC_ARG(5),
432 SC_END,
433};
434
436 {0, CONDITION_ALWAYS, 152, 0, 504, FACING_SOUTH, 0, 32, 32, 272, 544, 0},
437 {1, CONDITION_ALWAYS, 152, 0, 520, FACING_NORTH, 0, 32, 32, 272, 544, 0},
438 {2, CONDITION_ALWAYS, 248, 0, 280, FACING_WEST, 0, 32, 32, 272, 544, 0},
439 {3, CONDITION_ALWAYS, 136, 0, 304, FACING_SOUTH, 0, 32, 32, 272, 544, 0},
440 {4, CONDITION_ALWAYS, 360, 0, 296, FACING_EAST, 0, 336, 32, 736, 496, 0},
441 {5, CONDITION_ALWAYS, 664, 0, 424, FACING_WEST, 0, 336, 32, 736, 496, 0},
443};
444
446 {1, CONDITION_ALWAYS, 40, 0, 304, FACING_EAST, 0, 16, 32, 416, 480, 0},
447 {2, CONDITION_ALWAYS, 392, 0, 368, FACING_WEST, 0, 16, 32, 416, 480, 0},
448 {3, CONDITION_ALWAYS, 40, 0, 912, FACING_EAST, 0, 16, 608, 720, 1008, 0},
449 {4, CONDITION_ALWAYS, 680, 0, 904, FACING_WEST, 0, 16, 608, 720, 1008, 0},
450 {5, CONDITION_ALWAYS, 616, 0, 920, FACING_SOUTH, 0, 16, 608, 720, 1008, 0},
452};
453
455 {1, CONDITION_ALWAYS, 72, 0, 264, FACING_NORTH, 0, 24, 24, 280, 256, 0},
456 {2, CONDITION_ALWAYS, 184, 0, 168, FACING_SOUTH, 0, 24, 24, 280, 256, 0},
457 {3, CONDITION_ALWAYS, 280, 0, 344, FACING_SOUTH, 0, 208, 288, 704, 640, 0},
458 {4, CONDITION_ALWAYS, 664, 0, 616, FACING_NORTH, 0, 208, 288, 704, 640, 0},
460};
461
463 SCENE_EXITS(169), SCENE_EXIT(1, 2, 29), SCENE_EXIT(2, 170, 1),
464 SCENE_EXIT(3, 105, 10), SCENE_EXIT(4, 170, 4), SCENE_EXIT(5, 2, 42),
465 SCENE_EXIT(0, 170, 0), SCENE_EXIT(1, 169, 2), SCENE_EXIT(2, 170, 3),
466 SCENE_EXIT(3, 170, 2), SCENE_EXIT(4, 169, 4), SCENE_EXIT(5, 171, 1),
467 SCENE_EXIT(0, 171, 0), SCENE_EXIT(1, 170, 5), SCENE_EXIT(2, 171, 3),
468 SCENE_EXIT(3, 171, 2), SCENE_EXIT(4, 2, 33), SCENE_EXITS_END,
469};
470
473};
474
475// clang-format off
477 { 0xee, CONDITION_ALWAYS, 7,
479 { 0xee, CONDITION_ALWAYS, 7,
481 { 0xee, CONDITION_ALWAYS, 7,
483 { 0xee, CONDITION_ALWAYS, 7,
485 { 0xee, CONDITION_ALWAYS, 7,
487 { 0x5b, 0x4a, ACTOR_STAND,
488 PIXELS(264), 0, PIXELS(888), FACING_SOUTHEAST, TALK_FACE_PARTY, 0 },
489 { SCENE_TABLE_END },
490};
491
497 { SCENE_TABLE_END },
498};
499
501#if !TBS_PATCH_3
503 PIXELS(136), 0, PIXELS(408), FACING_SOUTH, TALK_FACE_PARTY, 0 },
505 PIXELS(168), 0, PIXELS(424), FACING_SOUTH, TALK_FACE_PARTY, 0 },
507 PIXELS(472), 0, PIXELS(304), FACING_SOUTH, TALK_FACE_PARTY, 0 },
508#else
510 PIXELS(140), 0, PIXELS(408), FACING_SOUTH, TALK_FACE_PARTY, 0 },
512 PIXELS(164), 0, PIXELS(424), FACING_SOUTH, TALK_FACE_PARTY, 0 },
514 PIXELS(476), 0, PIXELS(300), FACING_SOUTH, TALK_FACE_PARTY, 0 },
515#endif
517 0, 0, 0, FACING_EAST, TALK_KEEP_FACING, 0 },
518 { SCENE_TABLE_END },
519};
520
523 { EVENT_EXIT, 2, CONDITION_ALWAYS, 2 },
524 { EVENT_EXIT, 4, CONDITION_ALWAYS, 4 },
529 { EVENT_TALK, 8, FLAG_SUHALLA_GATE_ATTACK_SEEN, MSGNO(MsgSuhallaTravelPapersRequired) },
530 { EVENT_TALK, 8, CONDITION_ALWAYS, MSGNO(MsgSuhallaSendHelpFromTower) },
532 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 8, FLAG_SUHALLA_GATE_ATTACK_SEEN, MSGNO(MsgSuhallaObeyBabiOrders) },
533 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 8, CONDITION_ALWAYS, MSGNO(MsgSuhallaAshamedBeforeIodem) },
534 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 9, FLAG_SUHALLA_GATE_ATTACK_SEEN, MSGNO(MsgSuhallaSeeColossoNextYear) },
535 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 9, CONDITION_ALWAYS, MSGNO(MsgSuhallaSurvivedAttack) },
539};
540// clang-format on
541
549 {0xc413, 100, 0xfb4, FIND_ITEM(ITEM_MINT)},
550 {0x413, 100, 0xfb4, FIND_ITEM(ITEM_MINT)},
551 {0x8413, 100, 0xfb4, FIND_ITEM(ITEM_MINT)},
553};
554
557 {0x31, 2, CONDITION_ALWAYS, 2},
558 {0x21, 3, CONDITION_ALWAYS, 3},
562};
Ability numbers, named from the English release.
@ ABILITY_MIND_READ
Definition ability_ids.h:16
struct FieldActor * Object_GetById(s32 actor)
Returns an actor, or NULL if it does not exist.
const struct ScenePlacement * Scene_GetPlacements(void)
const struct SceneEntrance * Scene_GetEntrances(void)
const struct SceneEvent * Scene_GetEvents(void)
const u32 * Scene_GetExits(void)
Both scenes share one exit table.
const struct SceneRegion * Scene_GetRegions(void)
s32 Scene_Initialize(void)
Sets up whichever scene is being entered and runs its arrival events.
void Engine_ActorSetSpriteFlags(struct FieldActor *, s32)
The engine calls the debug menus import, and their palette swatch tiles.
Djinn numbers, named from the English release.
@ DJINNI_DEW
Definition djinn_ids.h:24
The scene script layer: the engine services a scene's events call, declared once (Engine_EventBegin,...
static void Actor_SetDestination(s32 actor, s32 x, s32 z)
static void Actor_FaceDirection(s32 actor, s32 facing, s32 frames)
void Engine_ActorSetAnimationAndWait(s32 actor, s32 animation)
static void Event_ShowMessageAndWait(s32 speaker, s32 flags, s32 frames)
s32 Engine_EventChooseYesNo(s32 actor, s32 flags)
#define GameFlag_IsSet
static void Actor_WalkToAndWait(s32 actor, s32 x, s32 z)
#define EMOTE_IN_FRONT
Definition field_event.h:49
static void Map_CopyCellsTo(s32 srcX, s32 srcY, s32 destX, s32 destY, s32 width, s32 height)
static void Actor_WalkTo(s32 actor, s32 x, s32 z)
#define GameFlag_Set
static void Actor_ShowEmote(s32 actor, s32 emote, s32 frames)
s32 Engine_EventOpenMessage(s32 speaker, s32 flags)
void Engine_GameFlagSet(s32 flag)
void Engine_GameFlagClear(s32 flag)
void Engine_ActorWaitForMove(s32 actor)
static void Map_CopyCellAttributes(s32 srcX, s32 srcY, s32 width, s32 height, s32 destX, s32 destY)
void Engine_ActorRunRepeatedMotion(s32 actor, s32 repeats)
static void Event_PlayCue(s32 cue)
static void Actor_SetChildValue(s32 actor, s32 value)
s32 Engine_GameFlagIsSet(s32 flag)
void Engine_ActorStartRepeatedMotion(s32 actor, s32 repeats)
static s32 Event_AskYesNo(s32 speaker, s32 flags)
static void Actor_CenterAndWalk(s32 actor, s32 priority, s32 dz)
static void Actor_SetSpeed(s32 actor, s32 speed, s32 acceleration)
static void Actor_SetPosition(s32 actor, s32 fixed_x, s32 fixed_z)
void Engine_EventWait(s32 frames)
static void Actor_SetAttachedEffect(s32 actor, s32 effect)
static struct FieldActor * Actor_Get(s32 actor)
The scene table formats: entrances, exits, placements and events, and the macros that write them.
#define SCENE_EVENTS_END
#define FIND_ITEM(item)
@ EVENT_TOUCH
@ EVENT_EXIT
@ EVENT_TALK
@ FACING_STEP
Definition field_scene.h:36
#define SCENE_EXITS(scene)
Definition field_scene.h:72
#define FIND_PSYNERGY_STONE
#define SCENE_EXIT(exit, scene, entrance)
Definition field_scene.h:73
@ ACTOR_PARTY_LEADER
@ SCENE_TABLE_END
Definition field_scene.h:43
@ CONDITION_ALWAYS
Definition field_scene.h:44
@ TALK_KEEP_FACING
@ TALK_FACE_PARTY
@ TALK_FACE_PARTY_AND_BACK
#define PSYNERGY_ON_ACTOR(ability)
#define EVENT_SCRIPT(script)
@ ACTOR_STAND
#define SEARCH(target)
#define SCENE_EXITS_END
Definition field_scene.h:77
#define TOUCH_WALKING_INTO(facing)
@ FACING_NORTHEAST
Definition field_scene.h:33
@ FACING_EAST
Definition field_scene.h:26
@ FACING_SOUTHEAST
Definition field_scene.h:27
@ FACING_NORTH
Definition field_scene.h:32
@ FACING_NORTHWEST
Definition field_scene.h:31
@ FACING_SOUTH
Definition field_scene.h:28
@ FACING_WEST
Definition field_scene.h:30
#define PIXELS(value)
@ SEARCH_UNNAMED
Game flags, named where their meaning is shown.
#define FLAG_IODEM_MET_WOUNDED_SOLDIERS
Set at Babi's palace as his audience after Colosso begins; afterwards Suhalla's people talk of the To...
Definition flags.h:370
#define FLAG_SHOW_LOCATION_NAME
Definition flags.h:94
#define FLAG_SUHALLA_GATE_ENTERED_FROM_SOUTH
The side the party last came through, which Retreat returns them to.
Definition flags.h:376
#define FLAG_SUHALLA_GATE_SOLDIER_VANISHED
after his last words
Definition flags.h:373
#define FLAG_BABI_SPOKE_AFTER_COLOSSO
Babi and Iodem have spoken with the party after Colosso.
Definition flags.h:209
#define FLAG_SUHALLA_GATE_ATTACK_SEEN
Iodem has questioned the guards.
Definition flags.h:374
#define FLAG_SUHALLA_GATE_ENTERED_FROM_EAST
Definition flags.h:377
GameState, the game's state: play time, coins, the scene and the leader's position,...
struct GameState gGameState
#define IODEM
The screen blend's globals and the graphics routines.
s32 gSuhallaGateWoundedFlippedNoCollision[]
s32 gSuhallaGateWoundedNoCollision[]
Item numbers, named from the English release.
@ ITEM_MINT
Definition item_ids.h:54
static void Event_TalkToEastGuard(void)
The east guard: wants authorization, or once the guards suspect Kalay, asks twice whether the party c...
Definition lunpa.c:259
The reel game's title lettering.
Field object scripts: one s32 command word, then its operands, as gScriptObject_CommandTable runs the...
#define SC_SET(w, v)
Write a work value.
Definition objcmd.h:37
#define SC_ARG(v)
Definition objcmd.h:44
#define SC_END
Return to the main script.
Definition objcmd.h:32
@ SW_COLLISION
Definition objcmd.h:79
@ SW_SCALE_X
Definition objcmd.h:62
void Field_RequestDjinnBattle(s32 flag, s32 no)
Sets up the battle with Djinni number no.
Definition requests.c:35
Scene numbers, named after their places.
char SceneId_SuhallaGate1
char SceneId_LunpaSuhalla
char SceneId_SuhallaGate2
char SceneId_SuhallaGate3
Song and sound effect ids, indices into gSound_SongTable.
#define SE_DOOR_OPEN
Definition songs.h:153
#define SE_MAP_EXIT
Definition songs.h:116
void Engine_ActorSetAnimation()
struct EventWork * gEventWork
void Engine_EventRequestExit()
void Engine_ActorSetPosition(u32 actor, s32 x, s32 z)
void Engine_EventEnd(void)
void Engine_AudioPlayCue()
void Engine_EventBegin(void)
void Engine_TaskWait()
void Engine_EventSetMessage()
void Engine_EventShowMessage()
#define NULL
Definition bilibin.h:6
s16 touchedTrigger
the step event a touch or exit event answers
Definition event_work.h:26
u16 message
the next message, advanced as each window opens
Definition event_work.h:47
A field actor: a person or thing on the field with a position, motion toward a target,...
Definition field_obj.h:30
union FieldCoordinate x
16.16 fixed-point pixels
Definition field_obj.h:35
union FieldCoordinate z
16.16 fixed-point pixels
Definition field_obj.h:37
s32 scaleY
16.16 fixed point, 0x10000 full size
Definition field_obj.h:40
s16 retreatEntrance
where Retreat goes; the group's first entrance
Definition game_state.h:109
s16 retreatScene
where Retreat goes; the group's first entrance
Definition game_state.h:108
s16 entrance
Definition game_state.h:37
s16 savedScene
where a defeat returns to without a defeat point
Definition game_state.h:38
s16 savedEntrance
where a defeat returns to without a defeat point
Definition game_state.h:39
A scene entrance: where and facing which way the party arrives, and the camera's bounds there (-1 for...
Definition field_scene.h:54
A scene event: its kind and detail, the trigger it answers, its condition and its value (a message or...
An actor a scene places: its sprite, the condition for placing it, how it behaves,...
Definition field_scene.h:81
A scene's exit region: the box that, while its condition holds, takes the party leader out through it...
@ DJINNI
static void Event_FightDjinni(void)
Talking to the Djinni starts its battle.
static void Event_IodemQuestionsGuards(void)
After Babi's audience, on reaching the gate: Iodem steps out of the party and asks what happened.
struct SceneEvent gSuhallaGateEventsOther[]
#define SUHALLA_GATE_RETREAT_SCENE(currentScene)
struct ScenePlacement gSuhallaGatePlacements2[]
struct SceneEvent gSuhallaGateEvents2[]
@ ENTRANCE_SOUTH
@ ENTRANCE_FROM_HOUSE
@ ENTRANCE_EAST
static void Event_EnterHouse(void)
The leader walks north into the house's door: it opens in two frames and the leader steps inside.
s32 gSuhallaGateWoundedFlipped[]
struct SceneEntrance gSuhallaGateEntrances3[]
@ LUNPA_SUHALLA_GATE_HOUSE
static void Event_LeaveForWorldMap(void)
The party leaves for the world map by trigger 1 or 5, forgetting the side it came in by.
struct SceneEntrance gSuhallaGateEntrancesOther[]
s32 gSuhallaGateWounded[]
struct ScenePlacement gSuhallaGatePlacements1[]
struct SceneEntrance gSuhallaGateEntrances2[]
struct ScenePlacement gSuhallaGatePlacements1AfterAudience[]
struct SceneEvent gSuhallaGateEvents3[]
static void Event_GuardsBlockPassage(void)
Before Babi's audience, as the party nears the passage: the two guards step together in front of it,...
u32 gSuhallaGateExits[]
struct ScenePlacement gSuhallaGatePlacementsOther[]
@ GUARD_WEST
At the gate itself.
@ VANISHING_SOLDIER
After Babi's audience: the soldier east of the gate who tells of the attack on Venus Lighthouse and v...
@ GUARD_EAST
static void Event_SoldierVanishes(void)
The soldier east of the gate gasps that Venus Lighthouse was attacked by strange wanderers,...
The system's routines and globals: interrupts, BIOS sound bias, random numbers and sleep.
The integer types, TRUE, UNUSED and the fixed-address macros.
signed int s32
Definition types.h:14
unsigned int u32
Definition types.h:15
signed short s16
Definition types.h:12
struct FieldCoordinate::@024321007066302143002254325121164243234242211074 part
s32 fixed
16.16 fixed-point pixels
The patch levels: our groups of the measured changes from the Japanese release.