Alchemy
Loading...
Searching...
No Matches

kolima_interiors.c

Go to the documentation of this file.
1/// @file
2/// Kolima's houses and shops, whose residents stand as trees while the curse
3/// lasts.
4
5#include "game_state.h"
6#include "flags.h"
10#include "battle.h"
11#include "debug.h"
12#include "field.h"
13#include "game.h"
14#include "graphics.h"
15#include "menu.h"
16#include "minigame.h"
17#include "sound.h"
18#include "system.h"
19#include "types.h"
20#include "field_event.h"
21
22#include "text/msg_ids.h"
23#include "ability_ids.h"
24#include "field_scene.h"
25#include "item_ids.h"
26
34};
35
36/// Replaces the cursed residents' sprites and disables their movement and
37/// turning.
38static void
40 u32 villagerIndex;
41 u8 talkFacing;
42 s32 behavior;
43 u16 treeSprite;
44 u16 alternateTreeSprite;
45
46 villagerIndex = 0;
47 talkFacing = TALK_KEEP_FACING;
48 behavior = ACTOR_STAND;
49 treeSprite = 0x69;
50 alternateTreeSprite = 0x6E;
51 do {
52 placement->talkFacing = talkFacing;
53 placement->behavior = behavior;
54 placement->sprite = treeSprite;
55 if (villagerIndex == 4 || villagerIndex == 7) {
56 placement->sprite = alternateTreeSprite;
57 }
58 villagerIndex++;
59 placement++;
60 } while (villagerIndex < ACTOR_LAST_VILLAGER - ACTOR_FIRST_VILLAGER + 1);
61}
62
65}
66
67const struct SceneRegion *KolimaInteriors_GetRegions(void) { return NULL; }
68
69/// Returns the doors and stairs linking the interiors.
71
72/// Applies the curse before preparing the residents' placement records.
74 struct ScenePlacement *placements;
75
78 }
79 placements = gKolimaInteriors_Placements;
80 FieldScene_PrepareActors(placements);
81 return placements;
82}
83
84/// Offers weapons at the counter or discusses Fuchin Temple.
87
91 } else {
92 Engine_EventSetMessage(MsgKolimaFuchinTempleOnOtherSide);
94 }
96}
97
98/// Offers armor at the counter or discusses the bridge.
101
103 if (FACING_IS_NORTH(facing)) {
105 } else {
106 Engine_EventSetMessage(MsgKolimaGrandBridgeAcrossRiverPride);
108 }
110}
111
112/// Offers items at the counter or discusses life after the curse.
115
117 if (FACING_IS_NORTH(facing)) {
119 } else {
120 Engine_EventSetMessage(MsgKolimaWhenWasTreeLearnedAppreciate);
122 }
124}
125
126/// Offers a room at the counter or discusses McCoy's construction.
129
131
132 if (FACING_IS_NORTH(facing)) {
134 } else {
135 Engine_EventSetMessage(MsgKolimaTheySayMccoyHaltedConstruction);
137 }
138
140}
141
142/// Returns the residents' conversations, thoughts and searchable objects.
145}
146
147/// Clears resident sprite flags and selects the room layout for this entrance.
149 struct EventWork *work = gEventWork;
150 s32 actorId;
151 u32 entrance;
152
154
155 // The residents remain visible as trees, with their sprite flags cleared.
157 actorId = ACTOR_FIRST_VILLAGER;
158 do {
159 struct FieldActor *actor = Object_GetById(actorId);
160
161 actorId++;
163 } while ((u32)actorId <= ACTOR_LAST_VILLAGER);
164 }
165
166 entrance = (u16)gGameState.entrance;
167
168 // Entrance 7 uses one layout; entrances 8 and 9 use the other.
169 // The unsigned packed comparison below tests the low 16-bit difference.
170 if ((s16)entrance == 7) {
171 s32 height;
172 s32 width;
173 width = 13;
174 height = 8;
175 Map_CopyCellsTo(34, 34, 18, 16, width, height);
176 Map_CopyCellsTo(34, 94, 18, 76, width, height);
177 Map_CopyCellsTo(94, 34, 78, 16, width, height);
178 } else if (((entrance - 8) << 16) <= (1u << 16)) {
179 s32 height;
180 s32 width;
181 width = 11;
182 height = 8;
183 Map_CopyCellsTo(34, 43, 19, 23, width, height);
184 Map_CopyCellsTo(34, 94, 19, 83, width, height);
185 Map_CopyCellsTo(94, 34, 79, 23, width, height);
186 Engine_ActorSetPosition(10, 0, 0);
187 Engine_ActorSetPosition(11, 0, 0);
188 Engine_ActorSetPosition(12, 0, 0);
189 }
190 return 0;
191}
192
194 {0, CONDITION_ALWAYS, 172, 0, 149, FACING_SOUTH, 0, -1, -1, -1, -1, 0},
195 {1, CONDITION_ALWAYS, 128, 0, 192, FACING_EAST, 0, 16, 56, 256, 216, 0},
196 {2, CONDITION_ALWAYS, 192, 0, 168, FACING_SOUTHWEST, 0, 16, 56, 256, 216,
197 0},
198 {3, CONDITION_ALWAYS, 392, 0, 200, FACING_NORTH, 0, 288, 64, 512, 232, 0},
199 {4, CONDITION_ALWAYS, 648, 0, 200, FACING_NORTH, 0, 528, 64, 768, 232, 0},
200 {5, CONDITION_ALWAYS, 704, 0, 168, FACING_SOUTHWEST, 0, 528, 64, 768, 224,
201 0},
202 {6, CONDITION_ALWAYS, 128, 0, 416, FACING_EAST, 0, 16, 280, 256, 440, 0},
203 {7, CONDITION_ALWAYS, 392, 0, 472, FACING_NORTH, 0, 288, 264, 512, 504, 0},
204 {8, CONDITION_ALWAYS, 392, 0, 328, FACING_SOUTH, 0, 288, 264, 512, 496, 0},
205 {9, CONDITION_ALWAYS, 392, 0, 344, FACING_NORTH, 0, 288, 264, 512, 496, 0},
206 {10, CONDITION_ALWAYS, 648, 0, 424, FACING_NORTH, 0, 528, 288, 768, 456, 0},
207 {11, CONDITION_ALWAYS, 704, 0, 392, FACING_SOUTHWEST, 0, 528, 288, 768, 448,
208 0},
209 {12, CONDITION_ALWAYS, 128, 0, 688, FACING_EAST, 0, 16, 552, 256, 712, 0},
210 {13, CONDITION_ALWAYS, 192, 0, 664, FACING_SOUTHWEST, 0, 16, 552, 256, 712,
211 0},
212 {14, CONDITION_ALWAYS, 400, 0, 688, FACING_NORTH, 0, 288, 552, 528, 712, 0},
214};
215
217 SCENE_EXITS(37), SCENE_EXIT(1, 37, 11), SCENE_EXIT(2, 37, 14),
218 SCENE_EXIT(3, 36, 4), SCENE_EXIT(4, 36, 3), SCENE_EXIT(5, 37, 12),
219 SCENE_EXIT(6, 37, 13), SCENE_EXIT(7, 36, 5), SCENE_EXIT(8, 36, 7),
220 SCENE_EXIT(9, 36, 6), SCENE_EXIT(10, 37, 1), SCENE_EXIT(11, 37, 5),
221 SCENE_EXIT(12, 37, 6), SCENE_EXIT(13, 37, 2), SCENE_EXIT(14, 38, 1),
223};
224
225// clang-format off
227 { 0x67, 0, ACTOR_WANDER,
228 PIXELS(166), 0, PIXELS(184), FACING_SOUTH, TALK_FACE_PARTY, 0 },
229 { 0x6f, 0, ACTOR_STAND,
230 PIXELS(88), 0, PIXELS(144), FACING_EAST, 3, 0 },
231 { 0x65, 0, ACTOR_STAND,
232 PIXELS(408), 0, PIXELS(472), FACING_WEST, TALK_FACE_PARTY, 0 },
233 { 0x73, 0, ACTOR_STAND,
234 PIXELS(360), 0, PIXELS(440), FACING_EAST, TALK_FACE_PARTY, 0 },
235 { 0x6b, 0, 3,
236 PIXELS(440), 0, PIXELS(456), FACING_SOUTH, TALK_FACE_PARTY, 0 },
237 { 0x74, 0, ACTOR_STAND,
238 PIXELS(376), 0, PIXELS(616), FACING_SOUTH, TALK_FACE_PARTY, 0 },
239 { 0x6a, 0, ACTOR_STAND,
240 PIXELS(448), 0, PIXELS(680), FACING_WEST, TALK_FACE_PARTY, 0 },
241 { 0x6b, 0, ACTOR_WANDER,
242 PIXELS(424), 0, PIXELS(648), FACING_WEST, TALK_FACE_PARTY, 0 },
243 { 0x7c, 0, ACTOR_STAND,
245 { 0x7d, 0, ACTOR_STAND,
247 { 0x76, 0, ACTOR_STAND,
249 { 0x77, 0, ACTOR_STAND,
251 { 0x80, 0, ACTOR_WANDER,
252 PIXELS(624), 0, PIXELS(200), FACING_EAST, TALK_FACE_PARTY, 0 },
253 { 0x74, 0, ACTOR_WANDER,
254 PIXELS(120), 0, PIXELS(656), FACING_SOUTH, TALK_FACE_PARTY, 0 },
255 { 0xab, 0, ACTOR_STAND,
256 PIXELS(144), 0, PIXELS(368), FACING_SOUTH, TALK_FACE_PARTY, 0 },
257 { SCENE_TABLE_END },
258};
259
261 { EVENT_EXIT, 1, CONDITION_ALWAYS, 1 },
262 { EVENT_EXIT, 2, CONDITION_ALWAYS, 2 },
263 { EVENT_EXIT, 3, CONDITION_ALWAYS, 3 },
264 { EVENT_EXIT, 4, CONDITION_ALWAYS, 4 },
265 { EVENT_EXIT, 5, CONDITION_ALWAYS, 5 },
266 { EVENT_EXIT, 6, CONDITION_ALWAYS, 6 },
267 { EVENT_EXIT, 7, CONDITION_ALWAYS, 7 },
268 { EVENT_EXIT, 8, CONDITION_ALWAYS, 8 },
269 { EVENT_EXIT, 9, CONDITION_ALWAYS, 9 },
270 { EVENT_EXIT, 10, CONDITION_ALWAYS, 10 },
271 { EVENT_EXIT, 11, CONDITION_ALWAYS, 11 },
272 { EVENT_EXIT, 12, CONDITION_ALWAYS, 12 },
273 { EVENT_EXIT, 13, CONDITION_ALWAYS, 13 },
274 { EVENT_EXIT, 14, CONDITION_ALWAYS, 14 },
275 { EVENT_TALK, 8, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsIHeardThatTravelingWarriorsFrom) },
276 { EVENT_TALK, 9, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsBigStrongWarriorsWithGreatBeards) },
277 { EVENT_TALK, 10, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsYouSavedKolimaWowThatMakes) },
278 { EVENT_TALK, 11, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsMyHusbandSeemsToBeKeeping) },
279 { EVENT_TALK, 12, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsDaddyToldMeHisSecret) },
280 { EVENT_TALK, 13, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsImNeverGoingToUseAn) },
281 { EVENT_TALK, 14, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsDadWillYouPleaseGoBack) },
282 { EVENT_TALK, 15, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsDadHowAreWeGoingTo) },
287 { EVENT_TALK, 20, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsWithNoMoreWorkHereKolima) },
288 { EVENT_TALK, 21, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsIveBeenALumberjackForYears) },
289 { EVENT_TALK, 22, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsImOnlyAMerchantButI) },
290 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 8, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsIDontReallyKnowButYou) },
291 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 9, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsAllWarriorsAreBigAndAll) },
292 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 10, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsItsHiddenDeepInTheForest) },
293 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 11, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsIThinkHeFoundSomethingValuable) },
294 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 12, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsStillTellingMeItsOutsideThe) },
295 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 13, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsPeopleTurnedIntoTreesBecauseOf) },
296 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 14, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsKnowingMyDadHellStartWorking) },
297 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 15, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsHowAmISupposedToGrow) },
298 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), ACTOR_WEAPON_MERCHANT, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsFuchinTemplesMasterNyunpaIsSaid) },
299 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), ACTOR_ARMOR_MERCHANT, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsItsAShameWeHadTo) },
300 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), ACTOR_ITEM_MERCHANT, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsItFeltSoGoodWhenMy) },
301 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), ACTOR_INNKEEPER, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsTheVillageWasReallyBoomingWith) },
302 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 20, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsRemainingAQuietVillageMeansRemaining) },
303 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 21, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsImALumberjackAndImOkay) },
304 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 22, IF_FLAG_SET(FLAG_KOLIMA_CURSE_LIFTED), MSGNO(MsgKolimaInteriorsIWishIdGrabbedSomeOf) },
305 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 8, CONDITION_ALWAYS, MSGNO(MsgKolimaInteriorsWhatAreTheyStaringAtThey) },
306 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 9, CONDITION_ALWAYS, MSGNO(MsgKolimaInteriorsIDreamtThatAMightyWarrior) },
307 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 10, CONDITION_ALWAYS, MSGNO(MsgKolimaInteriorsWhatWillHappenToMyTreasure) },
308 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 11, CONDITION_ALWAYS, MSGNO(MsgKolimaInteriorsSoonAllOfKolimaWillBe) },
309 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 12, CONDITION_ALWAYS, MSGNO(MsgKolimaInteriorsIWonderWhatFathersSecretIs) },
310 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 13, CONDITION_ALWAYS, MSGNO(MsgKolimaInteriorsMaybeWeTurnedIntoTreesBecause) },
311 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 14, CONDITION_ALWAYS, MSGNO(MsgKolimaInteriorsAtLeastMyFatherWasntThe) },
312 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 15, CONDITION_ALWAYS, MSGNO(MsgKolimaInteriorsTheHolyTreeOfKolimaHas) },
313 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), ACTOR_WEAPON_MERCHANT, CONDITION_ALWAYS, MSGNO(MsgKolimaInteriorsIUsedToCarveWeaponsOut) },
314 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), ACTOR_ARMOR_MERCHANT, CONDITION_ALWAYS, MSGNO(MsgKolimaInteriorsManImStuckInsideThatMeans) },
315 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), ACTOR_ITEM_MERCHANT, CONDITION_ALWAYS, MSGNO(MsgKolimaInteriorsNoIDontWantToBe) },
316 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), ACTOR_INNKEEPER, CONDITION_ALWAYS, MSGNO(MsgKolimaInteriorsWhoCausedAllThisSomeoneMust) },
317 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 20, CONDITION_ALWAYS, MSGNO(MsgKolimaInteriorsHowAmISupposedToCharge) },
318 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 21, CONDITION_ALWAYS, MSGNO(MsgKolimaInteriorsTheVillagersWereRightINever) },
319 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 22, CONDITION_ALWAYS, MSGNO(MsgKolimaInteriorsIfOnlyIdLeftTownA) },
320 { SEARCH(SEARCH_JAR), 100, 0xf59, FIND_ITEM(ITEM_LUCKY_MEDAL) },
321 { SEARCH(SEARCH_BARREL), 101, 0xf5a, FIND_COINS(7) },
322 { SEARCH(SEARCH_BOOKCASE), 200, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgKolimaInteriorsTheresABookEntitledTheHoly)) },
323 { SEARCH(SEARCH_BOOKCASE), 201, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgKolimaInteriorsTheresABookEntitledDictionaryOf)) },
324 { SEARCH(SEARCH_BOOKCASE), 202, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgKolimaInteriorsTheresABookEntitledTheArt)) },
326};
327// 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.
@ ACTOR_INNKEEPER
Definition altin.c:82
void Engine_ActorSetSpriteFlags(struct FieldActor *, s32)
The engine calls the debug menus import, and their palette swatch tiles.
void FieldScene_PrepareActors(struct ScenePlacement *entry)
The scene script layer: the engine services a scene's events call, declared once (Engine_EventBegin,...
void Engine_InnOpen(s32 inn, s32 keeper)
static void Map_CopyCellsTo(s32 srcX, s32 srcY, s32 destX, s32 destY, s32 width, s32 height)
s32 Engine_GameFlagIsSet(s32 flag)
void Engine_ShopOpen(s32 shop, s32 keeper)
@ 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_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
#define FACING_IS_NORTH(facing)
Definition field_scene.h:38
@ FACING_EAST
Definition field_scene.h:26
@ FACING_NORTH
Definition field_scene.h:32
@ FACING_SOUTHWEST
Definition field_scene.h:29
@ FACING_SOUTH
Definition field_scene.h:28
@ FACING_WEST
Definition field_scene.h:30
#define PIXELS(value)
@ SEARCH_BOOKCASE
@ SEARCH_JAR
@ SEARCH_BARREL
#define FIND_COINS(coins)
Game flags, named where their meaning is shown.
#define FLAG_KOLIMA_CURSE_LIFTED
Definition flags.h:103
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.
@ ACTOR_ITEM_MERCHANT
Definition imil.c:62
@ ACTOR_ARMOR_MERCHANT
Definition imil.c:60
@ ACTOR_WEAPON_MERCHANT
Definition imil.c:59
Item numbers, named from the English release.
@ ITEM_LUCKY_MEDAL
Definition item_ids.h:70
s32 KolimaInteriors_Initialize(void)
Clears resident sprite flags and selects the room layout for this entrance.
const struct ScenePlacement * KolimaInteriors_GetPlacements(void)
Applies the curse before preparing the residents' placement records.
struct ScenePlacement gKolimaInteriors_Placements[]
KolimaInteriorActor
@ ACTOR_LAST_VILLAGER
@ ACTOR_FIRST_VILLAGER
struct SceneEvent gKolimaInteriors_Events[]
struct SceneEntrance gKolimaInteriors_Entrances[]
static void KolimaInteriors_TalkToInnkeeper(void)
Offers a room at the counter or discusses McCoy's construction.
const struct SceneEvent * KolimaInteriors_GetEvents(void)
Returns the residents' conversations, thoughts and searchable objects.
u32 gKolimaInteriors_Exits[]
const struct SceneRegion * KolimaInteriors_GetRegions(void)
const struct SceneEntrance * KolimaInteriors_GetEntrances(void)
static void KolimaInteriors_TalkToArmorMerchant(void)
Offers armor at the counter or discusses the bridge.
const u32 * KolimaInteriors_GetExits(void)
Returns the doors and stairs linking the interiors.
static void KolimaInteriors_TalkToItemMerchant(void)
Offers items at the counter or discusses life after the curse.
static void KolimaInteriors_TurnVillagersIntoTrees(struct ScenePlacement *placement)
Replaces the cursed residents' sprites and disables their movement and turning.
static void KolimaInteriors_TalkToWeaponMerchant(void)
Offers weapons at the counter or discusses Fuchin Temple.
The reel game's title lettering.
struct EventWork * gEventWork
void Engine_ActorSetPosition(u32 actor, s32 x, s32 z)
void Engine_EventEnd(void)
void Engine_EventBegin(void)
void Engine_EventSetMessage()
void Engine_EventShowMessage()
#define NULL
Definition bilibin.h:6
The running scene's event work: its placement and event tables, its actors, the triggers and exit it ...
Definition event_work.h:20
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
u16 facing
1/65536 turns (enum Facing)
Definition field_scene.h:94
u8 talkFacing
enum ActorTalkFacing; 3 follows the leader afterwards
Definition field_scene.h:95
s16 sprite
The actor's sprite; 0 to 7 are the party's characters, each in its own actor slot,...
Definition field_scene.h:84
s32 behavior
A built-in action (enum ActorBehavior, 1 to 7) or an action script, for ObjectMotion_SetActionCallbac...
Definition field_scene.h:90
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
unsigned short u16
Definition types.h:13
unsigned char u8
Definition types.h:11