Alchemy
Loading...
Searching...
No Matches

xian_interiors.c

Go to the documentation of this file.
1/// @file
2/// Xian's houses, shops and inn, and the room behind Master Feh's school, where
3/// Master Feh, Feizhi and Hsu wait once Hsu is back.
4
5#include "game_state.h"
10#include "types.h"
11#include "field_event.h"
12#include "field_scene.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 "field_effect.h"
23#include "text/msg_ids.h"
24#include "field_obj.h"
25#include "flags.h"
26
27enum {
36};
37
38/// The room reached from Master Feh's school (scene 61's exit 4), where Master
39/// Feh, Feizhi and Hsu wait once Hsu is back: its own actors and events.
41
42/// The actors placed in that room, as its dialogue shows them: Master Feh
43/// says Feizhi's prediction came true, Feizhi welcomes the party, and Hsu was
44/// injured on his way from Lama Temple.
46
48#include "common/effect_spawn.h"
49#include "ability_ids.h"
50#include "item_ids.h"
51#include "objcmd.h"
52
55}
56
57const struct SceneRegion *XianInteriors_GetRegions(void) { return NULL; }
58
60
61/// The room behind the school places only Master Feh, Feizhi and Hsu.
65 }
68}
69
70/// Reads the leader's facing before a conversation changes actor state.
73 return leader->facing;
74}
75
76/// Opens the weapon shop from its counter side, or discusses martial arts.
78 u32 leaderFacing = XianInteriors_GetLeaderFacing();
79
81 if (leaderFacing >= FACING_NORTHWEST + 1 &&
82 leaderFacing <= FACING_NORTHEAST - 1) {
84 } else {
86 Engine_EventSetMessage(MsgXianXianHasMartialArtsBut);
87 } else {
88 Engine_EventSetMessage(MsgXianHsusInjuryTaughtGoodLesson);
89 }
91 }
93}
94
95/// Opens the armor shop from its counter side, or discusses armor and kung fu.
97 u32 leaderFacing = XianInteriors_GetLeaderFacing();
98
100 if (leaderFacing >= FACING_NORTHWEST + 1 &&
101 leaderFacing <= FACING_NORTHEAST - 1) {
103 } else {
105 Engine_EventSetMessage(MsgXianMartialArtistsCantUseHeavy);
106 } else {
107 Engine_EventSetMessage(MsgXianKungFuMakesQuickDoes);
108 }
110 }
112}
113
114/// Opens the item shop or asks whether the party will cross the desert.
116
117 u32 leaderFacing = XianInteriors_GetLeaderFacing();
118
120 if (leaderFacing >= FACING_NORTHWEST + 1 &&
121 leaderFacing <= FACING_NORTHEAST - 1) {
124 Engine_EventSetMessage(MsgXianXiansSpecialArmorNotSuited);
126 } else {
127 Engine_EventSetMessage(MsgXianDoPlanCrossDesertWarrior);
129 }
131}
132
133/// Offers a room from the counter side, or discusses travel through Xian.
135
136 u32 leaderFacing = XianInteriors_GetLeaderFacing();
137
139 if (leaderFacing < FACING_SOUTHEAST || leaderFacing > FACING_NORTHEAST) {
141 } else {
143 Engine_EventSetMessage(MsgXianWarriorsShouldLearnAboutTowns);
144 } else {
145 Engine_EventSetMessage(MsgXianWeHaveFewCustomersThese);
146 }
148 }
150}
151
152/// Asks the resident whether something is wrong on the Silk Road.
155 Engine_EventSetMessage(MsgXianSomethingWrongOnSilkRoad);
158}
159
160/// Asks what the party knows about the monsters in Altin.
163 Engine_EventSetMessage(MsgXianDidMonstersInAltinSpit);
166}
167
168/// Feizhi, when the party helped free Hsu, welcomes the party, looks at Hsu,
169/// then thanks the party and Master Hama. "Oh, warrior! Welcome!"
172 Engine_EventSetMessage(MsgXianWarriorWelcome);
180}
181
182/// The room behind the school has its own events.
186 }
188}
189
190/// Places the interiors' effect objects; in the room behind the school, Hsu
191/// takes his pose.
193 s16 entrance;
194
196 entrance = gGameState.entrance;
197 // Restore the ambient effects shared by connected interior entrances.
198 if (entrance == 4 || entrance == 7) {
200 } else if (entrance == 6) {
203 } else if (entrance == XIAN_INTERIORS_ENTRANCE_FROM_SCHOOL) {
206 }
207 return 0;
208}
209
211 SC_WAIT(1), SC_LOOP(22, SC_TOP), SC_WAIT(1),
212 SC_POS(0, 0, 0), SC_WAIT(1), SC_FREE,
213};
214
216 SC_WAIT(1), SC_LOOP(44, SC_TOP), SC_WAIT(1),
217 SC_POS(0, 0, 0), SC_WAIT(1), SC_FREE,
218};
219
221 SC_WAIT(1), SC_LOOP(126, SC_TOP), SC_WAIT(1),
222 SC_POS(0, 0, 0), SC_WAIT(1), SC_FREE,
223};
224
225const s32 *gEffectScripts[] = {
229};
230
232 {0, CONDITION_ALWAYS, 172, 0, 149, FACING_SOUTH, 0, -1, -1, -1, -1, 0},
233 {1, CONDITION_ALWAYS, 128, 0, 184, FACING_NORTH, 0, 24, 8, 248, 208, 0},
234 {2, CONDITION_ALWAYS, 448, 0, 200, FACING_NORTH, 0, 288, 8, 592, 224, 0},
235 {3, CONDITION_ALWAYS, 736, 0, 200, FACING_NORTH, 0, 608, 8, 848, 224, 0},
236 {4, CONDITION_ALWAYS, 160, 0, 472, FACING_NORTH, 0, 48, 288, 336, 496, 0},
237 {5, CONDITION_ALWAYS, 472, 0, 360, FACING_EAST, 0, 384, 288, 672, 496, 0},
238 {6, CONDITION_ALWAYS, 512, 0, 696, FACING_NORTH, 0, 352, 496, 656, 720, 0},
239 {7, CONDITION_ALWAYS, 120, 0, 360, FACING_EAST, 0, 48, 288, 336, 496, 0},
240 {8, CONDITION_ALWAYS, 120, 0, 696, FACING_NORTH, 0, 64, 544, 304, 744, 0},
242};
243
245 SCENE_EXITS(73), SCENE_EXIT(1, 72, 5), SCENE_EXIT(2, 72, 6),
246 SCENE_EXIT(3, 72, 7), SCENE_EXIT(4, 72, 8), SCENE_EXIT(5, 73, 7),
247 SCENE_EXIT(6, 72, 9), SCENE_EXIT(7, 73, 5), SCENE_EXIT(8, 61, 4),
249};
250
251// clang-format off
253 { 0xa0, 0x0, ACTOR_STAND,
254 PIXELS(144), 0, PIXELS(152), FACING_SOUTH, TALK_FACE_PARTY, 0 },
255 { 0xa2, 0x0, ACTOR_STAND,
257 { 0x9c, 0x0, ACTOR_STAND,
258 PIXELS(496), 0, PIXELS(72), FACING_SOUTH, TALK_FACE_PARTY, 0 },
259 { 0x9f, 0x0, ACTOR_WANDER,
260 PIXELS(368), 0, PIXELS(128), FACING_SOUTH, TALK_FACE_PARTY, 0 },
261 { 0xa4, 0x0, ACTOR_STAND,
262 PIXELS(760), 0, PIXELS(184), FACING_EAST, TALK_FACE_PARTY, 0 },
263 { 0xa6, 0x0, ACTOR_STAND,
265 { 0x7c, 0x0, ACTOR_STAND,
267 { 0x7d, 0x0, ACTOR_STAND,
269 { 0x76, 0x0, ACTOR_STAND,
271 { 0x77, 0x0, ACTOR_STAND,
273 { 0x80, 0x0, ACTOR_WANDER,
274 PIXELS(568), 0, PIXELS(416), FACING_SOUTH, TALK_FACE_PARTY, 0 },
275 { 0x7b, 0x0, ACTOR_STAND,
277 { SCENE_TABLE_END },
278};
279
286 PIXELS(224), 0, PIXELS(704), FACING_SOUTH, TALK_KEEP_FACING, 0 },
287 { SCENE_TABLE_END },
288};
289
291 { EVENT_EXIT, 1, CONDITION_ALWAYS, 1 },
292 { EVENT_EXIT, 2, CONDITION_ALWAYS, 2 },
293 { EVENT_EXIT, 3, CONDITION_ALWAYS, 3 },
294 { EVENT_EXIT, 4, CONDITION_ALWAYS, 4 },
295 { EVENT_EXIT, 5, CONDITION_ALWAYS, 5 },
296 { EVENT_EXIT, 6, CONDITION_ALWAYS, 6 },
297 { EVENT_EXIT, 7, CONDITION_ALWAYS, 7 },
298 { EVENT_TALK, 8, FLAG_XIAN_HEARD_HSU_TRAPPED, MSGNO(MsgXianInteriorsTheMulberryHarvestIsOverNow) },
299 { EVENT_TALK, 9, FLAG_XIAN_HEARD_HSU_TRAPPED, MSGNO(MsgXianInteriorsFarmWorkIsVeryHardWarriors) },
300 { EVENT_TALK, 10, FLAG_XIAN_HEARD_HSU_TRAPPED, MSGNO(MsgXianInteriorsXianSilkIsSentOnSilk) },
301 { EVENT_TALK, 11, FLAG_XIAN_HEARD_HSU_TRAPPED, MSGNO(MsgXianInteriorsSilkRoadEndsInTolbiIt) },
302 { EVENT_TALK, 12, FLAG_XIAN_HEARD_HSU_TRAPPED, MSGNO(MsgXianInteriorsFollowSilkRoadWhenYouSee) },
303 { EVENT_TALK, 13, FLAG_XIAN_HEARD_HSU_TRAPPED, MSGNO(MsgXianInteriorsThereIsAMineInAltin) },
308 { EVENT_TALK, 18, FLAG_XIAN_HEARD_HSU_TRAPPED, MSGNO(MsgXianInteriorsNormallyManyMerchantsComeToThe) },
309 { EVENT_TALK, 19, FLAG_XIAN_HEARD_HSU_TRAPPED, MSGNO(MsgXianInteriorsAllThePeopleWhoCameTo) },
310 { EVENT_TALK, 8, CONDITION_ALWAYS, MSGNO(MsgXianWhereAreTheMerchantsNoOne) },
311 { EVENT_TALK, 9, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsMerchantsBringUsCoinsTheyMust) },
313 { EVENT_TALK, 11, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsNoneCanPassThroughLamakanThis) },
315 { EVENT_TALK, 13, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsTheMineInAltinFilledWith) },
320 { EVENT_TALK, 18, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsWhenLamakanDesertBurnsItIs) },
321 { EVENT_TALK, 19, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsHotFoodIsGoodForCrossing) },
322 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 8, FLAG_XIAN_HEARD_HSU_TRAPPED, MSGNO(MsgXianInteriorsSoonMasterHammetWillComeHe) },
323 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 9, FLAG_XIAN_HEARD_HSU_TRAPPED, MSGNO(MsgXianInteriorsFarmWorkIsHardOnThe) },
324 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 10, FLAG_XIAN_HEARD_HSU_TRAPPED, MSGNO(MsgXianInteriorsSilkRoadIsFullOfSilk) },
325 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 11, FLAG_XIAN_HEARD_HSU_TRAPPED, MSGNO(MsgXianInteriorsMerchantsSayTolbiIsVeryBeautiful) },
326 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 12, FLAG_XIAN_HEARD_HSU_TRAPPED, MSGNO(MsgXianInteriorsAltinHasManyMenAllScary) },
327 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 13, FLAG_XIAN_HEARD_HSU_TRAPPED, MSGNO(MsgXianInteriorsMiningIsVeryHardWorkIt) },
328 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 14, FLAG_XIAN_HEARD_HSU_TRAPPED, MSGNO(MsgXianInteriorsSomeSayFightingWithWeaponsIs) },
329 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 15, FLAG_XIAN_HEARD_HSU_TRAPPED, MSGNO(MsgXianInteriorsInWarriorBattlesYouFightWith) },
330 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 16, FLAG_XIAN_HEARD_HSU_TRAPPED, MSGNO(MsgXianInteriorsXianIsAVillageOfCraftsmen) },
331 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 17, FLAG_XIAN_HEARD_HSU_TRAPPED, MSGNO(MsgXianInteriorsWhenYouGoToANew) },
332 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 18, FLAG_XIAN_HEARD_HSU_TRAPPED, MSGNO(MsgXianInteriorsWhenManyMerchantsComeMyBusiness) },
333 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 19, FLAG_XIAN_HEARD_HSU_TRAPPED, MSGNO(MsgXianInteriorsThereAreFewerTravelersSoFewer) },
334 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 8, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsWhyDoesMasterHammetNotCome) },
335 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 9, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsMerchantsSellSilkItIsLike) },
336 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 10, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsFeizhiSaidTheDesertBecameEvil) },
337 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 11, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsTheDesertWasVeryHotNow) },
338 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 12, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsTheVillageIsFloodedBecauseOf) },
339 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 13, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsWaterMonstersHowTerribleForAltin) },
340 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 14, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsHsuWasPummeledByHugeBoulders) },
341 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 15, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsWeShouldSellArmorToKung) },
342 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 16, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsYouLoseStrengthInHeatUse) },
343 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 17, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsCaravansCannotBringMerchantsHereWhen) },
344 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 18, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsTheMerchantsDoNotComeBecause) },
345 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 19, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsEatWarriorIWillAddMany) },
348 { SEARCH(SEARCH_OVEN), 200, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgXianInteriorsTheyreMakingStirFryTheCabbage)) },
349 { SEARCH(SEARCH_OVEN), 201, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgXianInteriorsItsTheXianGourmetTheBest)) },
350 { SEARCH(SEARCH_OVEN), 202, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgXianInteriorsTheyreSteamedDumplingsTheyreGreatPiping)) },
351 { SEARCH(SEARCH_OVEN), 203, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgXianInteriorsIsaacAndHisFriendsAreShocked)) },
352 { SEARCH(SEARCH_OVEN), 204, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgXianInteriorsHesMakingHotBeanCurdTastes)) },
353 { 0xc5b3, 205, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgXianInteriorsThereAreManyChopsticksButNot)) },
354 { SEARCH(SEARCH_SHELF), 206, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgXianInteriorsThereAreMedicinalHerbsTheyHave)) },
355 { SEARCH(SEARCH_SHELF), 207, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgXianInteriorsTheresAKimonoItLooksLike)) },
356 { SEARCH(SEARCH_SHELF), 208, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgXianInteriorsItsJustASalesReportIt)) },
358};
359
361 { EVENT_EXIT, 8, CONDITION_ALWAYS, 8 },
362 { EVENT_TALK, ACTOR_FEH, 0x8b3, MSGNO(MsgXianInteriorsFeizhisPredictionCameTrueNowI) },
364 { EVENT_TALK, ACTOR_HSU, 0x8b3, MSGNO(MsgXianInteriorsIWasInjuredByRocksOn) },
365 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), ACTOR_FEH, 0x8b3, MSGNO(MsgXianInteriorsFeizhisAbilityToSenseTroubleIs) },
366 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), ACTOR_FEIZHI, 0x8b3, MSGNO(MsgXianInteriorsMasterHamaHasGreatPowerYou) },
367 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), ACTOR_HSU, 0x8b3, MSGNO(MsgXianInteriorsIKnewHelpWouldComeWhen) },
368 { EVENT_TALK, ACTOR_FEH, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsFeizhisPredictionCameTrueNowIBelieve) },
369 { EVENT_TALK, ACTOR_FEIZHI, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsHsuWasTrappedUnderTheRocks) },
370 { EVENT_TALK, ACTOR_HSU, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsIWasInjuredByBouldersOn) },
371 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), ACTOR_FEH, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsFeizhisAbilityToForeseeIsReal) },
372 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), ACTOR_FEIZHI, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsMasterHamaHasGreatPowerSome) },
373 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), ACTOR_HSU, CONDITION_ALWAYS, MSGNO(MsgXianInteriorsIKnewHelpWouldComeWhenI) },
375};
376// clang-format on
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.
s32 gEffectScript0[]
const s32 * gEffectScripts[]
s32 gEffectScript1[]
s32 gEffectScript2[]
The engine calls the debug menus import, and their palette swatch tiles.
static UNUSED void * OverlayObject_CreateConfiguredObject(s32 x, s32 y, s32 z, s32 type)
A still effect in palette 15, at sprite priority 1, drawn under the actors.
void SceneTable_Prepare(struct ScenePlacement *placements)
Field effects, their scripts and the flags that spawn them.
The scene script layer: the engine services a scene's events call, declared once (Engine_EventBegin,...
void Engine_ActorFaceActor(s32 actor, s32 target, s32 frames)
void Engine_EventShowMessageAndWait(s32 speaker, s32 flags, s32 frames)
void Engine_InnOpen(s32 inn, s32 keeper)
s32 Engine_EventAskYesNo(s32 speaker, s32 flags)
void Engine_GameFlagClear(s32 flag)
s32 Engine_GameFlagIsSet(s32 flag)
void Engine_ShopOpen(s32 shop, s32 keeper)
void Engine_EventWait(s32 frames)
Field objects and actors, and the scene transition styles.
@ TRANSITION_WINDOW
Definition field_obj.h:17
#define SCENE_TRANSITION(style, variant)
Definition field_obj.h:20
The scene table formats: entrances, exits, placements and events, and the macros that write them.
#define SCENE_EVENTS_END
#define FIND_ITEM(item)
@ EVENT_EXIT
@ EVENT_TALK
#define SCENE_EXITS(scene)
Definition field_scene.h:72
#define IF_FLAG_SET(flag)
Definition field_scene.h:48
#define FIND_MESSAGE(message)
#define SCENE_EXIT(exit, scene, entrance)
Definition field_scene.h:73
@ ACTOR_FIRST_PLACED
@ 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_WANDER
@ ACTOR_STAND
#define SEARCH(target)
#define SCENE_EXITS_END
Definition field_scene.h:77
@ FACING_NORTHEAST
Definition field_scene.h:33
@ FACING_EAST
Definition field_scene.h:26
@ 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_OVEN
@ SEARCH_SHELF
@ SEARCH_JAR
@ SEARCH_BARREL
Game flags, named where their meaning is shown.
#define FLAG_SHOW_LOCATION_NAME
Definition flags.h:94
#define FLAG_XIAN_HEARD_HSU_TRAPPED
Definition flags.h:112
#define FLAG_XIAN_INTERIORS_SLEEP_BOMB_JAR
Definition flags.h:590
#define FLAG_XIAN_INTERIORS_ELIXIR_BARREL
Definition flags.h:589
GameState, the game's state: play time, coins, the scene and the leader's position,...
struct GameState gGameState
The screen blend's globals and the graphics routines.
Item numbers, named from the English release.
@ ITEM_ELIXIR
Definition item_ids.h:48
@ ITEM_SLEEP_BOMB
Definition item_ids.h:68
The reel game's title lettering.
Field object scripts: one s32 command word, then its operands, as gScriptObject_CommandTable runs the...
#define SC_LOOP(n, to)
Repeat up to n times.
Definition objcmd.h:28
#define SC_POS(x, y, z)
Set position.
Definition objcmd.h:18
#define SC_FREE
Release.
Definition objcmd.h:43
#define SC_WAIT(n)
Wait n frames.
Definition objcmd.h:16
#define SC_TOP
Script start.
Definition objcmd.h:13
void Engine_ActorSetAnimation()
struct EventWork * gEventWork
void Engine_EventEnd(void)
void Engine_EventBegin(void)
void Engine_EventSetMessage()
void Engine_EventShowMessage()
#define NULL
Definition bilibin.h:6
s32 startTransition
SCENE_TRANSITION(style, variant).
Definition event_work.h:43
A field actor: a person or thing on the field with a position, motion toward a target,...
Definition field_obj.h:30
u16 facing
1/65536 turns
Definition field_obj.h:34
s16 entrance
Definition game_state.h:37
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...
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
static void XianInteriors_AskAboutSilkRoad(void)
Asks the resident whether something is wrong on the Silk Road.
const u32 * XianInteriors_GetExits(void)
const struct SceneEvent * XianInteriors_GetEvents(void)
The room behind the school has its own events.
struct SceneEvent gXianInteriors_SchoolRoomEvents[]
@ ACTOR_FEH
static void XianInteriors_TalkToItemMerchant(void)
Opens the item shop or asks whether the party will cross the desert.
static u32 XianInteriors_GetLeaderFacing(void)
Reads the leader's facing before a conversation changes actor state.
struct ScenePlacement gXianInteriors_SchoolRoomPlacements[]
const struct ScenePlacement * XianInteriors_GetPlacements(void)
The room behind the school places only Master Feh, Feizhi and Hsu.
const struct SceneRegion * XianInteriors_GetRegions(void)
s32 XianInteriors_Initialize(void)
Places the interiors' effect objects; in the room behind the school, Hsu takes his pose.
static void XianInteriors_TalkToInnkeeper(void)
Offers a room from the counter side, or discusses travel through Xian.
u32 gXianInteriors_Exits[]
static void XianInteriors_TalkToArmorMerchant(void)
Opens the armor shop from its counter side, or discusses armor and kung fu.
struct ScenePlacement gXianInteriors_Placements[]
static void XianInteriors_FeizhiThanksParty(void)
Feizhi, when the party helped free Hsu, welcomes the party, looks at Hsu, then thanks the party and M...
static void XianInteriors_TalkToWeaponMerchant(void)
Opens the weapon shop from its counter side, or discusses martial arts.
struct SceneEntrance gXianInteriors_Entrances[]
const struct SceneEntrance * XianInteriors_GetEntrances(void)
struct SceneEvent gXianInteriors_Events[]
static void XianInteriors_AskAboutAltinMonsters(void)
Asks what the party knows about the monsters in Altin.
@ XIAN_INTERIORS_ENTRANCE_FROM_SCHOOL
@ ACTOR_XIAN_INNKEEPER
@ XIAN_WEAPON_STOCK
@ XIAN_ARMOR_STOCK
@ ACTOR_XIAN_ITEM_MERCHANT
@ ACTOR_XIAN_WEAPON_MERCHANT
@ XIAN_ITEM_STOCK
@ XIAN_INN
@ ACTOR_XIAN_ARMOR_MERCHANT