Alchemy
Loading...
Searching...
No Matches

tolbi_interiors.c

Go to the documentation of this file.
1/// @file
2/// Tolbi's interiors: the houses, inns, shops and sanctum of the festival
3/// town. Like the town outside, the rooms change with the Colosso story
4/// flags: the festival, finals day and the quiet after Colosso.
5
6#include "game_state.h"
10#include "tolbi_interiors.h"
11#include "field_event.h"
12#include "text/msg_ids.h"
13#include "types.h"
14#include "ability_ids.h"
15#include "edition.h"
16#include "field_scene.h"
17#include "item_ids.h"
18#include "objcmd.h"
19#include "songs.h"
20
21// Place flags: Scene_ResetFlagsOnEnter clears 0x300 to 0x3ff when the party
22// enters another place group, and other places use the numbers for their own.
23#define FLAG_TOLBI_INTERIORS_SAILORS_SEEN 0x300 ///< their argument has played
24
25#if !TBS_PATCH_1
26#define TOLBI_INTERIORS_INN_CAMERA_MAX_Z 736
27#define TOLBI_INTERIORS_EAST_ROOM_CAMERA_MAX_X 944
28#define TOLBI_INTERIORS_SOUTH_ROOM_CAMERA_MAX_Z 928
29#else
30#define TOLBI_INTERIORS_INN_CAMERA_MAX_Z 744
31#define TOLBI_INTERIORS_EAST_ROOM_CAMERA_MAX_X 952
32#define TOLBI_INTERIORS_SOUTH_ROOM_CAMERA_MAX_Z 936
33#endif
34
35/// The shop rows and door triggers used by the room event tables below.
36enum {
42};
43
44/// Asks a yes/no question, then answers with the message after the question
45/// for yes or the one after that for no.
46static inline void TolbiInteriors_AskYesNo(s32 question, s32 speaker) {
47 Engine_EventSetMessage(question);
48 Engine_EventOpenMessage(speaker, 0);
49 if (Engine_EventChooseYesNo(0, 0) == 0) {
51 Engine_EventSetMessage(question + 1);
52 } else {
53 Engine_EventSetMessage(question + 2);
54 }
55 Engine_EventShowMessage(speaker, 0);
56}
57
60}
61
62const struct SceneRegion *TolbiInteriors_GetRegions(void) { return 0; }
63
65
66/// After Colosso the rooms hold a different crowd.
70 }
72}
73
74#if TBS_PATCH_4
75/// The Spanish and Italian editions add a question on finals day: was Babi
76/// missing at all, since he showed himself at the finals?
77static void TolbiInteriors_AskWhetherBabiWasMissing(s32 speaker) {
78 TolbiInteriors_AskYesNo(MsgTolbiInteriorsBabiShowedHimselfAtFinals, speaker);
79}
80#endif
81
82/// Picks the event table for the current point in the Colosso story.
86 }
89 }
91}
92
93/// Leaves through a window transition of 24 frames. No event uses it.
95 struct EventWork *work = gEventWork;
96
98 work->transitionFrames = 24;
100}
101
102/// Walking into one of the four doors at triggers 14 to 17: every placed
103/// actor stops, the door opens and the leader walks through it.
104static void TolbiInteriors_EnterDoor(void) {
105 u32 actorId;
106 struct FieldActor *actor;
107 struct EventWork *work;
108 s16 *trigger;
109 s32 doorIndex;
110
111 work = gEventWork;
112 // Stop the room's actors before animating the selected doorway.
113 for (actorId = ACTOR_FIRST_PLACED; actorId < TOLBI_INTERIORS_ACTOR_SLOT_END;
114 actorId++) {
115 actor = Object_GetById(actorId);
116 if (actor != 0) {
117 actor->motionFlags = 0;
118 }
119 }
120 trigger = &work->touchedTrigger;
121 doorIndex = *trigger - TOLBI_INTERIORS_FIRST_DOOR_TRIGGER;
123 Map_AnimateCells(gTolbiInteriorsDoors[doorIndex].steps,
124 gTolbiInteriorsDoors[doorIndex].x,
125 gTolbiInteriorsDoors[doorIndex].y);
129 Engine_EventRequestExit(*trigger);
130}
131
132/// After Colosso, entering by entrance 19: a woman finds something on the
133/// floor, is startled to see the party and hides it in the barrel behind the
134/// trash pile. "Hey, what's this?" The thing is a Lucky Medal, found later in
135/// that barrel.
137 struct FieldActor *sparkle;
138
140 Engine_EventSetMessage(MsgTolbiHeyWhatsThis);
141
142 // A sparkle on the floor where she finds it.
144 sparkle = Engine_ObjectCreate(0x11c, PIXELS(600), 0, PIXELS(824));
145 Engine_ActorSetSpriteFlags(sparkle, 0);
146 Object_SetMode(sparkle, 6);
148 Object_SetMode(sparkle, 1);
152
153 // She runs to it and picks it up.
165
166 // She notices the party.
185
186 // She hides it and comes back, then leaves.
201}
202
203/// After Colosso, entering by entrance 16: three sailors argue about their
204/// captain, who won't sail the ship.
207 Engine_EventSetMessage(MsgTolbiHeWontSailShipEven);
213
231}
232
233/// Sets up the rooms on entry. After Colosso: a row of three map cells takes
234/// new attributes, two of the sailors are drawn at a fixed priority, the medal
235/// woman stands where she hid the medal, the two short scenes play once each
236/// on their entrances, and the would-be warrior and actor 36 have left once
237/// the docks refunded the tickets.
239 s32 clearedPriorityFlags;
240 struct FieldActor *actor;
241
244 // Restore the changed room tiles and the sailors' fixed draw priority.
245 Map_CopyCellAttributes(51, 47, 3, 1, 51, 45);
247 // Stored as a plain byte: the field store allocates the zero differently.
248 *(u8 *)&actor->priorityFlags = clearedPriorityFlags = 0;
249 ((struct TolbiInteriorsSpriteAttr *)actor->sprite)->priority = 2;
251 actor->priorityFlags = clearedPriorityFlags;
252 ((struct TolbiInteriorsSpriteAttr *)actor->sprite)->priority = 2;
256 }
257 // Each short scene plays once, only when entering its room.
258 if (gGameState.entrance == 19) {
263 }
264 }
265 if (gGameState.entrance == 16) {
270 }
271 }
272 // Once the docks' confrontation (the refund) is seen, these two have left.
275 Engine_ActorSetPosition(36, 0, 0);
276 }
277 }
278 return 0;
279}
280
281/// The item shopkeeper: from across the counter (the leader facing west) opens
282/// shop 28; from elsewhere talks about the finals.
287 } else if (Engine_GameFlagIsSet(FLAG_COLOSSO_OVER) != 0) {
288 Engine_EventSetMessage(MsgTolbiRightOneWell);
289 Engine_EventShowMessage(speaker, 0);
290 } else if (Engine_GameFlagIsSet(FLAG_BABI_SAVED) != 0) {
291 Engine_EventSetMessage(MsgTolbiRequireLotHealing);
292 Engine_EventShowMessage(speaker, 0);
293 } else {
294 TolbiInteriors_AskYesNo(MsgTolbiFirstTimeTolbi, speaker);
295 }
296}
297
298/// The weapon shopkeeper: across the counter (the leader facing north)
299/// opens the shop; otherwise talks about Colosso.
304 } else if (Engine_GameFlagIsSet(FLAG_COLOSSO_OVER) != 0) {
305 TolbiInteriors_AskYesNo(MsgTolbiComeWayKalay, speaker);
306 } else if (Engine_GameFlagIsSet(FLAG_BABI_SAVED) != 0) {
307 Engine_EventSetMessage(MsgTolbiColossoFinalsFinally);
308 Engine_EventShowMessage(speaker, 0);
309 } else {
310 Engine_EventSetMessage(MsgTolbiLookStrongGo);
311 Engine_EventShowMessage(speaker, 0);
312 Engine_ActorShowEmote(speaker, EMOTE_IN_FRONT | 6, 0);
314 Engine_EventShowMessage(speaker, 0);
315 }
316}
317
318/// The armor shopkeeper: across the counter (the leader facing north)
319/// opens the shop; otherwise talks about the finals.
324 } else {
326 Engine_EventSetMessage(MsgTolbiWasntAbleWatch);
327 Engine_EventShowMessage(speaker, 0);
328 } else if (Engine_GameFlagIsSet(FLAG_BABI_SAVED) != 0) {
329 Engine_EventSetMessage(MsgTolbiMaybeCloseShop);
330 Engine_EventShowMessage(speaker, 0);
331 } else {
332 Engine_EventSetMessage(MsgTolbiIfCanMakeNameFor);
333 Engine_EventShowMessage(speaker, 0);
334 }
335 }
336}
337
338/// The chef asks whether the party watched Colosso, which he missed.
339static void TolbiInteriors_TalkToChef(s32 speaker) {
341 TolbiInteriors_AskYesNo(MsgTolbiLookLikeWarrior, speaker);
343}
344
345/// After Colosso, a waiter grumbles about the chef's bad mood.
346static void TolbiInteriors_TalkToWaiter(s32 speaker) {
348 Engine_EventSetMessage(MsgTolbiGrrrChefInBadMood);
349 Engine_EventShowMessage(speaker, 0);
351}
352
353/// During the festival, a resident offers the party a bed.
354static void TolbiInteriors_TalkToHost(s32 speaker) {
356 TolbiInteriors_AskYesNo(MsgTolbiWantStay, speaker);
358}
359
360/// The woman who hid the Lucky Medal. Until the party takes it from the
361/// barrel she teases; once it is gone she greets them, startled, the first
362/// time, and then claims she is fine.
366 TolbiInteriors_AskYesNo(MsgTolbiHeeHeeLook, speaker);
367 } else {
370 Engine_EventSetMessage(MsgTolbiHello);
371 Event_ShowMessage(speaker, 0);
375 }
376 Engine_EventSetMessage(MsgTolbiHoHumFine);
377 Event_ShowMessage(speaker, 0);
378 }
380}
381
382/// Mind Read on the medal woman gives the hiding place away.
386 Engine_EventSetMessage(MsgTolbiHehHehSheJustHid);
387 } else {
388 Engine_EventSetMessage(MsgTolbiThingFoundDefinitelySameAs);
389 }
392}
393
394/// The angry sailor complains the ships won't sail after Colosso.
397 Engine_EventSetMessage(MsgTolbiGrrrScamWhyWontThey);
399 Event_ShowMessage(speaker, 0);
401}
402
403/// After Colosso, the would-be warrior asks whether the party remembers him.
406 TolbiInteriors_AskYesNo(MsgTolbiWarriorRemember, speaker);
408}
409
410/// The priest: across the counter (the leader facing north) opens the
411/// sanctum; otherwise talks about the festival.
412static void TolbiInteriors_TalkToPriest(s32 speaker) {
415 Engine_SanctumOpen(speaker);
416 } else {
418 Engine_EventSetMessage(MsgTolbiShipsArentGoing);
419 Engine_EventShowMessage(speaker, 0);
420 } else if (Engine_GameFlagIsSet(FLAG_BABI_SAVED) != 0) {
421 Engine_EventSetMessage(MsgTolbiMissFinalsTolbis);
422 Engine_EventShowMessage(speaker, 0);
423 } else {
424 Engine_EventSetMessage(MsgTolbiWasteStuckHereWhenSuch);
425 Engine_EventShowMessage(speaker, 0);
426 }
427 }
428}
429
430/// An actor that squashes and stretches twice, then rests 40 frames.
432 SC_SET(SW_SCALE_X, 0x10000),
433 SC_SET(SW_SCALE_Y, 0x10000),
434 SC_ADD(SW_SCALE_X, -0x5000),
435 SC_ADD(SW_SCALE_Y, 0x1000),
436 SC_WAIT(1),
437 SC_ADD(SW_SCALE_X, 0x2800),
438 SC_ADD(SW_SCALE_Y, -2048),
439 SC_WAIT(1),
440 SC_ADD(SW_SCALE_X, 0x1400),
441 SC_ADD(SW_SCALE_Y, -1024),
442 SC_WAIT(1),
443 SC_ADD(SW_SCALE_X, 0x1400),
444 SC_ADD(SW_SCALE_Y, -1024),
445 SC_WAIT(1),
446 SC_ADD(SW_SCALE_X, -0x5000),
447 SC_ADD(SW_SCALE_Y, 0x1000),
448 SC_WAIT(1),
449 SC_ADD(SW_SCALE_X, 0x2800),
450 SC_ADD(SW_SCALE_Y, -2048),
451 SC_WAIT(1),
452 SC_ADD(SW_SCALE_X, 0x1400),
453 SC_ADD(SW_SCALE_Y, -1024),
454 SC_WAIT(1),
455 SC_ADD(SW_SCALE_X, 0x1400),
456 SC_ADD(SW_SCALE_Y, -1024),
457 SC_WAIT(40),
459};
460
462 {0, CONDITION_ALWAYS, 172, 0, 149, FACING_SOUTH, 0, -1, -1, -1, -1, 0},
463 {1, CONDITION_ALWAYS, 160, 0, 216, FACING_NORTH, 0, 0, 0, 256, 256, 0},
464 {2, CONDITION_ALWAYS, 336, 0, 200, FACING_NORTH, 0, 248, 64, 488, 216, 0},
465 {3, CONDITION_ALWAYS, 544, 0, 200, FACING_NORTH, 0, 520, 48, 696, 216, 0},
466 {4, CONDITION_ALWAYS, 792, 0, 216, FACING_NORTH, 0, 688, 0, 960, 240, 0},
467 {5, CONDITION_ALWAYS, 544, 0, 424, FACING_NORTH, 0, 488, 264, 696, 448, 0},
468 {6, CONDITION_ALWAYS, 312, 0, 472, FACING_NORTH, 0, 208, 272, 456, 488, 0},
469 {8, CONDITION_ALWAYS, 824, 0, 528, FACING_NORTH, 0, 688, 248, 944, 568, 0},
470 {9, CONDITION_ALWAYS, 128, 0, 768, FACING_NORTH, 0, 0, 536, 304, 800, 0},
471 {10, CONDITION_ALWAYS, 56, 0, 608, FACING_NORTH, 0, 0, 536, 304, 800, 0},
472 {11, CONDITION_ALWAYS, 464, 0, 624, FACING_SOUTH, 0, 320, 568, 616,
474 {12, CONDITION_ALWAYS, 392, 0, 728, FACING_NORTH, 0, 320, 568, 616,
476 {13, CONDITION_ALWAYS, 536, 0, 728, FACING_NORTH, 0, 320, 568, 616,
478 {14, CONDITION_ALWAYS, 392, 0, 680, FACING_SOUTH, 0, 320, 568, 616,
480 {15, CONDITION_ALWAYS, 536, 0, 680, FACING_SOUTH, 0, 320, 568, 616,
482 {16, CONDITION_ALWAYS, 808, 0, 664, FACING_SOUTH, 0, 704, 608,
484 {17, CONDITION_ALWAYS, 840, 0, 824, FACING_SOUTH, 0, 704, 768,
486 {18, CONDITION_ALWAYS, 440, 0, 920, FACING_NORTH, 0, 288, 768, 528,
488 {19, CONDITION_ALWAYS, 584, 0, 920, FACING_NORTH, 0, 496, 768, 736,
490
491 {30, CONDITION_ALWAYS, 824, 0, 352, FACING_NORTH, 0, 688, 248, 944, 568, 0},
493};
494
496 SCENE_EXITS(136), SCENE_EXIT(1, 135, 2), SCENE_EXIT(2, 135, 3),
497 SCENE_EXIT(3, 135, 4), SCENE_EXIT(4, 135, 5), SCENE_EXIT(5, 135, 6),
498 SCENE_EXIT(6, 135, 7), SCENE_EXIT(7, 135, 8), SCENE_EXIT(8, 135, 9),
499 SCENE_EXIT(9, 135, 10), SCENE_EXIT(10, 136, 11), SCENE_EXIT(11, 136, 10),
500 SCENE_EXIT(12, 136, 17), SCENE_EXIT(13, 136, 16), SCENE_EXIT(14, 136, 18),
501 SCENE_EXIT(15, 136, 19), SCENE_EXIT(16, 136, 13), SCENE_EXIT(17, 136, 12),
502 SCENE_EXIT(18, 136, 14), SCENE_EXIT(19, 136, 15), SCENE_EXITS_END,
503};
504
505// clang-format off
530 PIXELS(280), 0, PIXELS(360), FACING_SOUTH, TALK_FACE_PARTY, 0 },
532 PIXELS(392), 0, PIXELS(360), FACING_SOUTH, TALK_FACE_PARTY, 0 },
534 PIXELS(264), 0, PIXELS(440), FACING_EAST, TALK_FACE_PARTY, 0 },
536 PIXELS(106), 0, PIXELS(696), FACING_SOUTHEAST, TALK_FACE_PARTY, 0 },
552 PIXELS(824), 0, PIXELS(328), FACING_SOUTH, TALK_FACE_PARTY, 0 },
553 { SCENE_TABLE_END },
554};
555
580 PIXELS(280), 0, PIXELS(360), FACING_SOUTH, TALK_FACE_PARTY, 0 },
582 PIXELS(392), 0, PIXELS(360), FACING_SOUTH, TALK_FACE_PARTY, 0 },
584 PIXELS(264), 0, PIXELS(440), FACING_EAST, TALK_FACE_PARTY, 0 },
586 PIXELS(106), 0, PIXELS(696), FACING_SOUTHEAST, TALK_FACE_PARTY, 0 },
596 PIXELS(230), 0, PIXELS(648), FACING_NORTH, TALK_KEEP_FACING, 0 },
602 PIXELS(824), 0, PIXELS(328), FACING_SOUTH, TALK_FACE_PARTY, 0 },
604 PIXELS(848), 0, PIXELS(712), FACING_WEST, TALK_FACE_PARTY, 0 },
606 PIXELS(816), 0, PIXELS(712), FACING_EAST, TALK_FACE_PARTY, 0 },
608 PIXELS(848), 0, PIXELS(688), FACING_SOUTH, TALK_FACE_PARTY, 0 },
615 { SCENE_TABLE_END },
616};
617
619 { EVENT_EXIT, 1, CONDITION_ALWAYS, 1 },
620 { EVENT_EXIT, 2, CONDITION_ALWAYS, 2 },
621 { EVENT_EXIT, 3, CONDITION_ALWAYS, 3 },
622 { EVENT_EXIT, 4, CONDITION_ALWAYS, 4 },
623 { EVENT_EXIT, 5, CONDITION_ALWAYS, 5 },
624 { EVENT_EXIT, 6, CONDITION_ALWAYS, 6 },
625 { EVENT_EXIT, 7, CONDITION_ALWAYS, 7 },
626 { EVENT_EXIT, 8, CONDITION_ALWAYS, 8 },
627 { EVENT_EXIT, 9, CONDITION_ALWAYS, 9 },
628 { EVENT_EXIT, 10, CONDITION_ALWAYS, 10 },
629 { EVENT_EXIT, 11, CONDITION_ALWAYS, 11 },
630 { EVENT_EXIT, 12, CONDITION_ALWAYS, 12 },
631 { EVENT_EXIT, 13, CONDITION_ALWAYS, 13 },
636 { EVENT_EXIT, 18, CONDITION_ALWAYS, 18 },
637 { EVENT_EXIT, 19, CONDITION_ALWAYS, 19 },
638 { EVENT_TALK, 8, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsTolbiIsPackedWithTouristsDuring) },
640 { EVENT_TALK, 10, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsICouldntSleepAtAllLast) },
641 { EVENT_TALK, 11, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsTheCrowdsAtTheColosseumMade) },
642 { EVENT_TALK, 12, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsWePaidGoodMoneyToRent) },
643 { EVENT_TALK, 13, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIReallyWantToSeeColosso) },
644 { EVENT_TALK, 14, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsWahhhIWantToSeeColosso) },
645 { EVENT_TALK, 15, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIWonderIfTheyReallyCant) },
646 { EVENT_TALK, 16, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsBabiWasntAtColossoAccordingTo) },
647 { EVENT_TALK, 17, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsWereGoingToMakeSomeMoney) },
648 { EVENT_TALK, 18, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIHeardBabiIsUsingThe) },
652 { EVENT_TALK, 22, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsWereFullyBookedWithReservationsDuring) },
653 { EVENT_TALK, 23, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsColossoIsTheBusiestTimeOf) },
654 { EVENT_TALK, 24, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsWereSoBusyRunningTheInn) },
655 { EVENT_TALK, TOLBI_INTERIORS_MEDAL_WOMAN, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsATourGroupCameFromKalay) },
656 { EVENT_TALK, TOLBI_INTERIORS_CHEF, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsWeArentGoingToGetTo) },
657 { EVENT_TALK, TOLBI_INTERIORS_WAITER, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsImNotVeryInterestedInColosso) },
658 { EVENT_TALK, 28, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsOhNoWeBarelyMadeIt) },
659 { EVENT_TALK, 29, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIfWedGottenHereJustA) },
660 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 8, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsOnceColossoStartsWereGoingTo) },
661 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 9, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsItsTooLateToStartLooking) },
662 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 10, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIfICouldHaveSleptLast) },
663 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 11, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsHuhUhCrowdsAreADefinite) },
664 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 12, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsWeGetToStayHereUntil) },
665 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 13, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIWasStubbornISaidIm) },
666 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 14, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIKeepOnCryingButDaddy) },
667 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 15, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsItsStrangeThatBabisSoldiersAre) },
668 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 16, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsItsStrangeBabiLovesColossoBut) },
669 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 17, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsHeJustTakesACutOf) },
670 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 18, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsNamingTheLighthouseHeBuiltAfter) },
671 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 19, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIGuessINeverWouldHave) },
672 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 21, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsTheyHaveSomeNiceThingsFor) },
673 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 20, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsBabiChoosesColossosVictorsToBe) },
674 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 22, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsTheTourGroupIsFeelingCramped) },
675 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 23, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsWeCantHandleTooManyMore) },
676 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 24, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsImGoingToGoToThe) },
677 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 25, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsThereArentEnoughBedsForThe) },
678 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 26, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsTheInnkeeperToldMeToCook) },
679 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 27, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIHaveAHeadacheJustThinking) },
680 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 28, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsEvenThoughICantEnterColosso) },
681 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 29, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIfWeCouldHaveEnteredColosso) },
683 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 30, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIWonderHowTheTryoutsAre) },
686 { SEARCH(SEARCH_OVEN), TOLBI_INTERIORS_PIZZA_OVEN, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgTolbiInteriorsShesMakingTheWorldRenownedTolbi)) },
687 { SEARCH(SEARCH_OVEN), TOLBI_INTERIORS_PASTA_OVEN, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgTolbiInteriorsHeIsBoilingThePastaIt)) },
688 { SEARCH(SEARCH_OVEN), TOLBI_INTERIORS_SEAFOOD_PASTA_OVEN, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgTolbiInteriorsItsTolbiSeafoodPastaWithLots)) },
689 { SEARCH(SEARCH_UNNAMED), TOLBI_INTERIORS_INN_SIGN, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgTolbiInteriorsIsaacCheckedTheSignInnFull)) },
691};
692
694 { EVENT_EXIT, 1, CONDITION_ALWAYS, 1 },
695 { EVENT_EXIT, 2, CONDITION_ALWAYS, 2 },
696 { EVENT_EXIT, 3, CONDITION_ALWAYS, 3 },
697 { EVENT_EXIT, 4, CONDITION_ALWAYS, 4 },
698 { EVENT_EXIT, 5, CONDITION_ALWAYS, 5 },
699 { EVENT_EXIT, 6, CONDITION_ALWAYS, 6 },
700 { EVENT_EXIT, 7, CONDITION_ALWAYS, 7 },
701 { EVENT_EXIT, 8, CONDITION_ALWAYS, 8 },
702 { EVENT_EXIT, 9, CONDITION_ALWAYS, 9 },
703 { EVENT_EXIT, 10, CONDITION_ALWAYS, 10 },
704 { EVENT_EXIT, 11, CONDITION_ALWAYS, 11 },
705 { EVENT_EXIT, 12, CONDITION_ALWAYS, 12 },
706 { EVENT_EXIT, 13, CONDITION_ALWAYS, 13 },
711 { EVENT_EXIT, 18, CONDITION_ALWAYS, 18 },
712 { EVENT_EXIT, 19, CONDITION_ALWAYS, 19 },
713 { EVENT_TALK, 8, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsSoColossoHasAlreadyReachedThe) },
714 { EVENT_TALK, TOLBI_INTERIORS_HOST, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsTheFestivalScheduleWasDelayedFor) },
715 { EVENT_TALK, 10, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsThatsStrangeIWonderWhatHappened) },
716 { EVENT_TALK, 11, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIJustSawBabiTheTowns) },
717 { EVENT_TALK, 12, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsHereIAmInTolbiFor) },
718 { EVENT_TALK, 13, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsImGoingToWatchTheFinals) },
719 { EVENT_TALK, 14, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsHoorayWereGoingToColossoNow) },
720#if TBS_PATCH_4
721 { EVENT_TALK, 15, CONDITION_ALWAYS, EVENT_SCRIPT(TolbiInteriors_AskWhetherBabiWasMissing) },
722 { EVENT_TALK, 16, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsBabiDecidedShowUpForFinals) },
723#else
724 { EVENT_TALK, 15, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsWellIGuessSoSinceHes) },
725 { EVENT_TALK, 16, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsHuhThenTheyFoundHimIn) },
726#endif
727 { EVENT_TALK, 17, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsBabiApparentlyHasSomeReasonFor) },
728 { EVENT_TALK, 18, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIHeardBabiIsSearchingFor) },
732 { EVENT_TALK, 22, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsOnceTheFinalsBeginEveryoneTries) },
733 { EVENT_TALK, 23, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsThisYearImNotLettingAnyone) },
734 { EVENT_TALK, 24, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsTheWifeHasACloseEye) },
735 { EVENT_TALK, TOLBI_INTERIORS_MEDAL_WOMAN, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsHmmIThoughtAllMenLoved) },
736 { EVENT_TALK, TOLBI_INTERIORS_CHEF, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsTheMomentIHearTheFinals) },
737 { EVENT_TALK, TOLBI_INTERIORS_WAITER, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsSoColossoIsEndingSoonIts) },
738 { EVENT_TALK, 28, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsTheColossoFinalsAreStartingSoon) },
739 { EVENT_TALK, 29, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsMaybeIllDoSomeResearchOn) },
740 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 8, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsAreWeMakingMoreMoneyNow) },
741 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 9, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsSoTheyDidExtendTheFestival) },
742 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 10, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsICantAffordToStayHere) },
743 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 11, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsTheAirInTheColosseumIs) },
744 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 12, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIfSomebodyElseWouldWatchThe) },
745 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 13, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsColossoIsAlreadyAtTheFinals) },
746 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 14, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsSinceWeDidntGetToSee) },
747 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 15, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsSoWhatWereBabisSoldiersDoing) },
748 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 16, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsMaybeWatchingTheTrialsIsToo) },
749 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 17, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsBeforeHeStartedTheLighthouseBabi) },
750 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 18, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsBabiHasBeenMakingStrangeReferences) },
751 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 19, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsTheTouristsAllBuyWeaponsAnd) },
752 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 21, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsYouCouldSayTheWarriorsIn) },
753 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 20, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIfMomFindsOutIWent) },
754 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 22, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsImTheOneWhoReallyWants) },
755 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 23, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsOnceThingsSettleDownImSure) },
756 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 24, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIfTheMasterSlipsOutThe) },
757 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 25, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsWeWomenAreTheOnlyOnes) },
758 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 26, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsHasntTheMasterGoneToColosso) },
759 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 27, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIDontHaveAnyParticularInterest) },
760 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 28, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIWantToSeeTheFinals) },
761 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 29, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsTheTrialBattlesWerentQuiteLike) },
763 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 30, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIfYoureNotInterestedInThe) },
766 { SEARCH(SEARCH_OVEN), TOLBI_INTERIORS_PIZZA_OVEN, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgTolbiInteriorsShesMakingTheWorldRenownedTolbi)) },
767 { SEARCH(SEARCH_OVEN), TOLBI_INTERIORS_PASTA_OVEN, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgTolbiInteriorsHeIsBoilingThePastaIt)) },
768 { SEARCH(SEARCH_OVEN), TOLBI_INTERIORS_SEAFOOD_PASTA_OVEN, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgTolbiInteriorsItsTolbiSeafoodPastaWithLots)) },
769 { SEARCH(SEARCH_UNNAMED), TOLBI_INTERIORS_INN_SIGN, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgTolbiInteriorsIsaacCheckedTheSignInnFull)) },
771};
772
774 { EVENT_EXIT, 1, CONDITION_ALWAYS, 1 },
775 { EVENT_EXIT, 2, CONDITION_ALWAYS, 2 },
776 { EVENT_EXIT, 3, CONDITION_ALWAYS, 3 },
777 { EVENT_EXIT, 4, CONDITION_ALWAYS, 4 },
778 { EVENT_EXIT, 5, CONDITION_ALWAYS, 5 },
779 { EVENT_EXIT, 6, CONDITION_ALWAYS, 6 },
780 { EVENT_EXIT, 7, CONDITION_ALWAYS, 7 },
781 { EVENT_EXIT, 8, CONDITION_ALWAYS, 8 },
782 { EVENT_EXIT, 9, CONDITION_ALWAYS, 9 },
783 { EVENT_EXIT, 10, CONDITION_ALWAYS, 10 },
784 { EVENT_EXIT, 11, CONDITION_ALWAYS, 11 },
785 { EVENT_EXIT, 12, CONDITION_ALWAYS, 12 },
786 { EVENT_EXIT, 13, CONDITION_ALWAYS, 13 },
791 { EVENT_EXIT, 18, CONDITION_ALWAYS, 18 },
792 { EVENT_EXIT, 19, CONDITION_ALWAYS, 19 },
793 { EVENT_TALK, 8, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsNowThatColossoIsOverWeve) },
794 { EVENT_TALK, TOLBI_INTERIORS_HOST, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsWeHadALotOfGuests) },
795 { EVENT_TALK, 10, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIRentedMyHouseToA) },
796 { EVENT_TALK, 11, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsTheTouristsAreAllInA) },
797 { EVENT_TALK, 13, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIWasSoMovedByThis) },
798 { EVENT_TALK, 14, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsThatLittleGuyJumpedStraightInto) },
799 { EVENT_TALK, 15, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsDidYouKnowMtAlephErupted) },
800 { EVENT_TALK, 16, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsMaybeAlephsEruptionCausedThoseSea) },
801 { EVENT_TALK, 17, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsTheWarriorsSaidTheyWouldRush) },
802 { EVENT_TALK, 18, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsThereWontBeManyCustomersUntil) },
806 { EVENT_TALK, 22, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIThoughtWedHaveSomeFree) },
807 { EVENT_TALK, 23, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsTheSpectatorsFromTheEastCant) },
808 { EVENT_TALK, 24, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsItsBusyAllDayEveryDay) },
812 { EVENT_TALK, 28, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIWentToThePortBut) },
813 { EVENT_TALK, 29, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsColossoHasEndedButWeStill) },
814 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 8, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsSighMakingTheBedsHasWorn) },
815 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 9, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIdLoveAVacationButWhere) },
816 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 10, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsOnceTheShipsStartSailingAgain) },
817 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 11, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIHeardOfACaveThat) },
818 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 13, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsTheWarriorsWhoFoughtInThe) },
819 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 14, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsDaringAndBraveryAreNiceAnd) },
820 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 15, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsTheSparklingStonesThatRainedFrom) },
821 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 16, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIllBetTheMonstersWereFrightened) },
822 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 17, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsItBothersMeABitThat) },
823 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 18, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsThereArentManyMerchantsAtThe) },
824 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 19, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsEvenWithoutTheShipsICould) },
825 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 21, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsDidAllTheWarriorsWhoFought) },
826 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 20, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsImGonnaWatchTheFinalsNext) },
827 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 22, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsSinceTheShipsArentSailingThe) },
828 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 23, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsHeeHeeItsGreatTheInns) },
829 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 24, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsEveryoneIsWorkingOnBabiLighthouse) },
831 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 26, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsGrrrIDidntGetToSee) },
832 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 27, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsHeyChefSoWhatIfYou) },
833 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 28, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsITriedGoingToTheEastern) },
834 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 29, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsYoudThinkYouCouldGetThrough) },
836 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 30, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsYouAllGotToSeeColosso) },
838 { EVENT_TALK, 32, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsOnceThisGuyGetsMadTheres) },
839 { EVENT_TALK, 33, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIWonderIfThisReallyIs) },
840 { EVENT_TALK, 34, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsTolbiGetsSoBoringOnceThe) },
841 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 31, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsYoureSayingIfWeRowWe) },
842 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 32, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsTheCrewIsSayingThatIf) },
843 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 33, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsImSickOfStayingAtThis) },
844 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 34, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIfMomHadJustBoughtMe) },
846 { EVENT_TALK, 36, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsIGotToSeeColossoSo) },
847 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 35, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsThatVoyageAcrossTheSeaWas) },
848 { PSYNERGY_ON_ACTOR(ABILITY_MIND_READ), 36, CONDITION_ALWAYS, MSGNO(MsgTolbiInteriorsNoMatterWhatHappensImComing) },
851 { SEARCH(SEARCH_OVEN), TOLBI_INTERIORS_PIZZA_OVEN, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgTolbiInteriorsShesMakingTheWorldRenownedTolbi)) },
852 { SEARCH(SEARCH_OVEN), TOLBI_INTERIORS_PASTA_OVEN, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgTolbiInteriorsHeIsBoilingThePastaIt)) },
853 { SEARCH(SEARCH_OVEN), TOLBI_INTERIORS_SEAFOOD_PASTA_OVEN, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgTolbiInteriorsItsTolbiSeafoodPastaWithLots)) },
854 { SEARCH(SEARCH_UNNAMED), TOLBI_INTERIORS_INN_SIGN, CONDITION_ALWAYS, FIND_MESSAGE(MSGNO(MsgTolbiInteriorsIsaacCheckedTheSignInnFull)) },
857};
858// clang-format on
859
861 MAP_CELL_STEP(2, 123, 1, 2, 6),
862 MAP_CELL_STEP(4, 123, 1, 2, 6),
864};
865
871};
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.
void Engine_ActorSetSpriteFlags(struct FieldActor *, s32)
struct FieldActor * Engine_ObjectCreate(s32, s32, s32, s32)
The edition's language, for C to compare (LANGUAGE == LANGUAGE_GERMAN).
The scene script layer: the engine services a scene's events call, declared once (Engine_EventBegin,...
@ ANIM_WALK
Definition field_event.h:44
@ ANIM_NOD
Definition field_event.h:45
@ ANIM_SHAKE_HEAD
Definition field_event.h:46
static void Actor_FaceDirection(s32 actor, s32 facing, s32 frames)
void Engine_ActorSetAnimationAndWait(s32 actor, s32 animation)
void Engine_SanctumOpen(s32 priest)
void Object_SetMode(struct FieldActor *object, s32 animation)
static void Map_AnimateCells(const u16 *steps, s32 destX, s32 destY)
s32 Engine_EventChooseYesNo(s32 actor, s32 flags)
#define GameFlag_IsSet
static void Actor_WalkToAndWait(s32 actor, s32 x, s32 z)
void Engine_ActorJump(s32 actor, s32 height, s32 frames)
#define EMOTE_IN_FRONT
Definition field_event.h:49
#define MAP_CELL_STEP(srcX, srcY, width, height, frames)
Definition field_event.h:59
void Engine_ActorSetSpeed(s32 actor, s32 speed, s32 acceleration)
void Engine_ObjectDispatchRelease(struct FieldActor *object)
#define GameFlag_Set
static void Actor_ShowEmote(s32 actor, s32 emote, s32 frames)
static void Actor_WalkByAndWait(s32 actor, s32 dx, s32 dz)
void Engine_EventOpenScreen(void)
s32 Engine_EventOpenMessage(s32 speaker, s32 flags)
void Engine_GameFlagSet(s32 flag)
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_ShowMessage(s32 speaker, s32 flags)
#define MAP_CELL_STEPS_END
Definition field_event.h:61
s32 Engine_GameFlagIsSet(s32 flag)
static void Actor_SetSpeed(s32 actor, s32 speed, s32 acceleration)
void Engine_ShopOpen(s32 shop, s32 keeper)
static void Actor_SetPosition(s32 actor, s32 fixed_x, s32 fixed_z)
void Engine_EventWait(s32 frames)
@ 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
@ FACING_STEP
Definition field_scene.h:36
#define SCENE_EXITS(scene)
Definition field_scene.h:72
#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
#define TOUCH_WALKING_INTO(facing)
@ 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_OVEN
@ SEARCH_UNNAMED
@ SEARCH_BARREL
#define FLAG_COLOSSO_OVER
the Colosso finals have been fought
Definition flags.h:191
#define FLAG_BABI_SAVED
The party has saved Babi in Altmiller Cave with his Mystic Draught; Tolbi then holds the Colosso fina...
Definition flags.h:170
#define FLAG_TOLBI_INTERIORS_MEDAL_MISSED
she has greeted them since
Definition flags.h:393
#define FLAG_TOLBI_DOCKS_CONFRONTATION_SEEN
The passengers confronted the tour guides and their bodyguard.
Definition flags.h:256
#define FLAG_TOLBI_INTERIORS_MEDAL_TAKEN
the party took it
Definition flags.h:392
#define FLAG_TOLBI_INTERIORS_MEDAL_HIDDEN
she hid it in the barrel
Definition flags.h:391
GameState, the game's state: play time, coins, the scene and the leader's position,...
struct GameState gGameState
Item numbers, named from the English release.
@ ITEM_VIAL
Definition item_ids.h:42
@ ITEM_LUCKY_MEDAL
Definition item_ids.h:70
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_LOOP(n, to)
Repeat up to n times.
Definition objcmd.h:28
#define SC_FOREVER
Definition objcmd.h:14
#define SC_ADD(w, v)
Definition objcmd.h:38
#define SC_WAIT(n)
Wait n frames.
Definition objcmd.h:16
#define SC_TOP
Script start.
Definition objcmd.h:13
@ SW_SCALE_Y
Definition objcmd.h:63
@ SW_SCALE_X
Definition objcmd.h:62
Song and sound effect ids, indices into gSound_SongTable.
#define SE_DOOR_OPEN
Definition songs.h:153
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_ActorShowEmote()
void Engine_EventSetMessage()
void Engine_EventShowMessage()
#define FACING_NEAREST_CARDINAL(facing)
A facing rounded to the nearest of east, south, west and north.
@ TOLBI_INTERIORS_MEDAL_BARREL
@ TOLBI_INTERIORS_VIAL_BARREL
@ TOLBI_INTERIORS_INN_SIGN
the inn's sign. "Inn Full / No Vacancies"
@ TOLBI_INTERIORS_PIZZA_OVEN
@ TOLBI_INTERIORS_SEAFOOD_PASTA_OVEN
@ TOLBI_INTERIORS_PASTA_OVEN
@ TOLBI_INTERIORS_HIDDEN_MEDAL_BARREL
where the woman hid her find
@ TOLBI_INTERIORS_PRIEST
@ TOLBI_INTERIORS_WEAPON_SHOPKEEPER
@ TOLBI_INTERIORS_ANGRY_SAILOR
@ TOLBI_INTERIORS_MEDAL_WOMAN
@ TOLBI_INTERIORS_CHEF
@ TOLBI_INTERIORS_SAILOR_C
@ TOLBI_INTERIORS_ARMOR_SHOPKEEPER
@ TOLBI_INTERIORS_SAILOR_B
@ TOLBI_INTERIORS_WAITER
@ TOLBI_INTERIORS_ITEM_SHOPKEEPER
@ TOLBI_INTERIORS_HOST
offers a stay. "Do you want to stay with us?"
@ TOLBI_INTERIORS_WOULD_BE_WARRIOR
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
s16 touchedTrigger
the step event a touch or exit event answers
Definition event_work.h:26
s32 transitionFrames
frames
Definition event_work.h:45
A field actor: a person or thing on the field with a position, motion toward a target,...
Definition field_obj.h:30
u8 motionFlags
ActorMotionFlag bits; zero is free flight in 3D, and 3 is set on creation.
Definition field_obj.h:83
u8 priorityFlags
ActorPriorityFlag bits, read by the scrolling camera.
Definition field_obj.h:51
u16 facing
1/65536 turns
Definition field_obj.h:34
s16 entrance
Definition game_state.h:37
Cell replacement: procedure and destination cells.
Definition field_event.h:64
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 byte of a sprite's attributes that holds its priority, as the code stores it.
const struct ScenePlacement * TolbiInteriors_SelectPlacements(void)
After Colosso the rooms hold a different crowd.
#define TOLBI_INTERIORS_INN_CAMERA_MAX_Z
static void TolbiInteriors_ReadMedalWomanMind(void)
Mind Read on the medal woman gives the hiding place away.
static void TolbiInteriors_TalkToItemShopkeeper(s32 speaker)
The item shopkeeper: from across the counter (the leader facing west) opens shop 28; from elsewhere t...
static void TolbiInteriors_WatchWomanHideMedal(void)
After Colosso, entering by entrance 19: a woman finds something on the floor, is startled to see the ...
const u32 * TolbiInteriors_GetExits(void)
struct MapCellAnim gTolbiInteriorsDoors[]
struct ScenePlacement gTolbiInteriorsPlacements[]
struct SceneEntrance gTolbiInteriorsEntrances[]
s32 gTolbiInteriorsSquashStretch[]
An actor that squashes and stretches twice, then rests 40 frames.
static void TolbiInteriors_TalkToChef(s32 speaker)
The chef asks whether the party watched Colosso, which he missed.
static void TolbiInteriors_TalkToHost(s32 speaker)
During the festival, a resident offers the party a bed.
static void TolbiInteriors_TalkToAngrySailor(s32 speaker)
The angry sailor complains the ships won't sail after Colosso.
static void TolbiInteriors_TalkToWeaponShopkeeper(s32 speaker)
The weapon shopkeeper: across the counter (the leader facing north) opens the shop; otherwise talks a...
u16 gTolbiInteriorsDoorOpening[]
u32 gTolbiInteriorsExits[]
struct SceneEvent gTolbiInteriorsEventsFinalsDay[]
static UNUSED void TolbiInteriors_ExitThroughWindow(void)
Leaves through a window transition of 24 frames. No event uses it.
static void TolbiInteriors_TalkToMedalWoman(s32 speaker)
The woman who hid the Lucky Medal.
static void TolbiInteriors_TalkToWouldBeWarrior(s32 speaker)
After Colosso, the would-be warrior asks whether the party remembers him.
s32 TolbiInteriors_ApplyEntryState(void)
Sets up the rooms on entry.
static void TolbiInteriors_EnterDoor(void)
Walking into one of the four doors at triggers 14 to 17: every placed actor stops,...
static void TolbiInteriors_TalkToPriest(s32 speaker)
The priest: across the counter (the leader facing north) opens the sanctum; otherwise talks about the...
static void TolbiInteriors_TalkToWaiter(s32 speaker)
After Colosso, a waiter grumbles about the chef's bad mood.
static void TolbiInteriors_TalkToArmorShopkeeper(s32 speaker)
The armor shopkeeper: across the counter (the leader facing north) opens the shop; otherwise talks ab...
const struct SceneRegion * TolbiInteriors_GetRegions(void)
@ TOLBI_INTERIORS_ITEM_SHOP
@ TOLBI_INTERIORS_FIRST_DOOR_TRIGGER
@ TOLBI_INTERIORS_ACTOR_SLOT_END
@ TOLBI_INTERIORS_WEAPON_SHOP
@ TOLBI_INTERIORS_ARMOR_SHOP
struct SceneEvent gTolbiInteriorsEventsFestival[]
static void TolbiInteriors_WatchSailorsArgue(void)
After Colosso, entering by entrance 16: three sailors argue about their captain, who won't sail the s...
static void TolbiInteriors_AskYesNo(s32 question, s32 speaker)
Asks a yes/no question, then answers with the message after the question for yes or the one after tha...
struct SceneEvent gTolbiInteriorsEventsAfterColosso[]
const struct SceneEvent * TolbiInteriors_SelectEvents(void)
Picks the event table for the current point in the Colosso story.
struct ScenePlacement gTolbiInteriorsPlacementsAfterColosso[]
const struct SceneEntrance * TolbiInteriors_GetEntrances(void)
#define TOLBI_INTERIORS_SOUTH_ROOM_CAMERA_MAX_Z
#define FLAG_TOLBI_INTERIORS_SAILORS_SEEN
their argument has played
#define TOLBI_INTERIORS_EAST_ROOM_CAMERA_MAX_X
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
#define UNUSED
Definition types.h:22
unsigned char u8
Definition types.h:11