32#include "text/msg_ids.h"
128 s32 firstMessage = MsgValeFolksSeemKnow;
386 viewCenter =
event->viewCenter;
409 firstMessage = MsgValeWake;
428 (*eventSlot)->transitionFrames = 64;
515 (*eventSlot)->message++;
526 (*eventSlot)->transitionFrames = 16;
549 sprite = actor->sprite;
633 for (i = 0; i <= 15; i++) {
674 if ((
u32)(actor->
facing + -0x2000) > 0x9000) {
801 firstMessage = MsgValeWhoToldIll;
879 message = MsgValeUnnOhhKyle;
915 sprite = actor->sprite;
917 sprite->
count = clear;
992 for (effectIndex = 0; effectIndex < 2; ++effectIndex) {
995 pair[effectIndex] =
child;
998 part =
child->sprite;
999 child->motionFlags = 0;
1001 child->linkedObject = parent;
1022 effectActor->
update = Effect_AnimateVerticalNegative;
1030 effectActor->
update = Effect_AnimateVerticalPositive;
1155 SC_CALL(Scene_TurnTowardTarget),
1199 {0,
CONDITION_ALWAYS, 120, 0, 100,
FACING_SOUTH, 0, -1, -1, -1, -1, 0},
1200 {1,
CONDITION_ALWAYS, 160, 0, 228,
FACING_NORTH, 0, 24, 0, 248, 256, 0},
1201 {2,
CONDITION_ALWAYS, 480, 0, 176,
FACING_NORTH, 0, 264, 8, 560, 240, 0},
1202 {3,
CONDITION_ALWAYS, 721, 0, 192,
FACING_NORTH, 0, 584, 0, 848, 224, 0},
1203 {4,
CONDITION_ALWAYS, 144, 0, 494,
FACING_NORTH, 0, 8, 256, 320, 528, 0},
1204 {5,
CONDITION_ALWAYS, 119, 0, 340,
FACING_SOUTH, 0, 8, 256, 320, 528, 0},
1205 {6,
CONDITION_ALWAYS, 416, 0, 528,
FACING_NORTH, 0, 344, 272, 640, 560, 0},
1206 {7,
CONDITION_ALWAYS, 408, 0, 371,
FACING_SOUTH, 0, 344, 272, 640, 560, 0},
1207 {8,
CONDITION_ALWAYS, 184, 0, 633,
FACING_EAST, 0, 8, 576, 320, 736, 0},
1208 {9,
CONDITION_ALWAYS, 408, 0, 665,
FACING_EAST, 0, 328, 600, 624, 816, 0},
1209 {10,
CONDITION_ALWAYS, 528, 0, 683,
FACING_SOUTH, 0, 328, 600, 624, 816, 0},
1210 {11,
CONDITION_ALWAYS, 705, 0, 817,
FACING_NORTH, 0, 640, 552, 952, 864, 0},
1211 {12,
CONDITION_ALWAYS, 879, 0, 765,
FACING_NORTH, 0, 640, 552, 952, 864, 0},
1212 {16,
CONDITION_ALWAYS, 538, 0, 683,
FACING_SOUTH, 0, 328, 600, 624, 816, 0},
1213 {19,
CONDITION_ALWAYS, 760, 0, 328,
FACING_SOUTH, 0, 672, 272, 960, 488, 0},
1214 {20,
CONDITION_ALWAYS, 567, 0, 676,
FACING_EAST, 0, 1024, 576, 1024, 576,
1216 {21,
CONDITION_ALWAYS, 408, 0, 371,
FACING_SOUTH, 0, 344, 272, 640, 560, 0},
1217 {22,
CONDITION_ALWAYS, 480, 0, 176,
FACING_NORTH, 0, 264, 8, 560, 240, 0},
Ability numbers, named from the English release.
void Object_RefreshSelectorById(u32 objectId)
Waits, at most 300 frames, for an actor's script to reach its end (command 0x10).
void Object_SetTargetAndCallback(u32 objectId, s32 targetId, const void *script)
Links an actor to the actor in the low 8 bits of targetId and starts script on it.
struct FieldActor * Object_GetById(s32 actor)
Returns an actor, or NULL if it does not exist.
Animated sprites: their layers, frames and colour modes, and the resource slots they draw from.
B5Context, the object context a battle routine reads; most of its fields are still unnamed.
s32 Object_InitializeMode(struct AnimationObject *state, s32 flags)
static void Event_TalkToInnkeeper(void)
Opens the inn across the counter, or discusses the curse in Kolima.
Calls through a function pointer, by argument count.
The engine calls the debug menus import, and their palette swatch tiles.
FacingObject, the view of an object that turns to face a target.
void ObjectDispatch_RegisterChildMetadata(struct DispatchObject *object, s32 animationId)
Adds a layer of animation id animationId to a one-sprite object's sprite.
void ObjectSystem_ResumeProjectionAndHideLayers(void)
Resumes the object camera updates and hides BG1-3 and the sprites.
void ObjectDispatch_WaitForValue16(void *rawObject)
Waits until the object's script reaches SC_END (0x10), at most 300 frames.
void ObjectSystem_SuspendProjectionAndShowSprites(void)
Suspends the object camera updates, starts the palette back to normal and, a frame later,...
void FieldScene_PrepareActors(struct ScenePlacement *entry)
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,...
#define SPEAKER_PORTRAIT_LEFT
static s32 Event_OpenMessage(s32 speaker, s32 flags)
void Engine_ActorFaceActor(s32 actor, s32 target, s32 frames)
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)
void Engine_ActorSetSpritePriority(s32 actor, s32 priority)
void Engine_PsynergyBegin(s32 ability, s32 flags)
static void Event_ShowMessageAndWait(s32 speaker, s32 flags, s32 frames)
s32 Engine_EventChooseYesNo(s32 actor, s32 flags)
void Engine_MessageShowCentered(s32 message, s32 flags)
void Engine_ObjectSetPartPalettes(struct FieldActor *object, s32 palette)
void Engine_EventShowMessageAndWait(s32 speaker, s32 flags, s32 frames)
void Engine_CameraSetSpeed(s32 speed, s32 acceleration)
static void Actor_WalkToAndWait(s32 actor, s32 x, s32 z)
static void Camera_SetSpeed(s32 speed, s32 acceleration)
void Engine_CameraMoveTo(s32 fixed_x, s32 fixed_y, s32 fixed_z, s32 pan)
void Engine_PsynergyRaiseHands(void)
void Engine_PsynergyLowerHands(void)
void Engine_ActorMoveToAndWait(s32 actor, s32 x, s32 z)
void Engine_ActorJump(s32 actor, s32 height, s32 frames)
void Engine_ItemLoadIcon(s32 item)
static void Actor_MoveToAndWait(s32 actor, s32 x, s32 z)
void Engine_ActorFaceDirection(s32 actor, s32 facing, s32 frames)
void Engine_InnOpen(s32 inn, s32 keeper)
void Engine_EventCloseScreen(void)
void Engine_ObjectDispatchRelease(struct FieldActor *object)
void Engine_ActorSetDestination(s32 actor, s32 x, s32 z)
static void Actor_RunActionScriptAndWait(s32 actor, const s32 *script)
Runs a script, waiting at most 300 frames for its final command.
static void Map_CopyCellsTo(s32 srcX, s32 srcY, s32 destX, s32 destY, s32 width, s32 height)
void Engine_ActorWalkToAndWait(s32 actor, s32 x, s32 z)
static void Actor_FaceActor(s32 actor, s32 target, s32 frames)
#define SPEAKER_WINDOW_BELOW
void Engine_HeapRelease(s32 slot)
s32 Engine_VramLoad(s32 block, s32 size, const void *data)
void Engine_EventWaitForScreen(void)
static void Actor_ShowEmote(s32 actor, s32 emote, s32 frames)
s32 Engine_EventAskYesNo(s32 speaker, s32 flags)
void Engine_ObjectSetScript(struct FieldActor *object, const s32 *script)
void Engine_EventOpenScreen(void)
s32 Engine_EventOpenMessage(s32 speaker, s32 flags)
void Engine_GameFlagSet(s32 flag)
void Engine_GameFlagClear(s32 flag)
void Engine_CameraWaitForMove(void)
static void Actor_SetActionScript(s32 actor, const s32 *script)
The engine encodes either a built-in action or an action-script address.
void Engine_CameraFollowActor(s32 actor, s32 keep_position)
void * Engine_HeapAllocate(s32 slot, s32 size)
static void Map_CopyCellAttributes(s32 srcX, s32 srcY, s32 width, s32 height, s32 destX, s32 destY)
void Engine_ActorRunRepeatedMotion(s32 actor, s32 repeats)
void Engine_ActorWalkTo(s32 actor, s32 x, s32 z)
static void Event_ShowMessage(s32 speaker, s32 flags)
void Engine_ActorSetAttachedEffect(s32 actor, s32 effect)
void Engine_ActorSetChildValue(s32 actor, s32 value)
static void Map_SetShake(s32 horizontal, s32 vertical, s32 decay)
Sets shake amplitudes in fixed-point pixels and the per-frame decay factor.
s32 Engine_GameFlagIsSet(s32 flag)
void Engine_PsynergyPlayEffect(s32 effect)
void Engine_ActorStartRepeatedMotion(s32 actor, s32 repeats)
static s32 Event_AskYesNo(s32 speaker, s32 flags)
static void Actor_SetSpeed(s32 actor, s32 speed, s32 acceleration)
void Engine_MapRedraw(void)
static void Camera_MoveTo(s32 fixed_x, s32 fixed_y, s32 fixed_z, s32 pan)
static void Actor_SetPosition(s32 actor, s32 fixed_x, s32 fixed_z)
void Engine_ActorFaceEachOther(s32 actor, s32 other, s32 frames)
void Engine_EventWait(s32 frames)
static void Actor_SetAttachedEffect(s32 actor, s32 effect)
void Engine_PsynergySetTarget(s32 caster, s32 target)
static void Object_SetScript(struct FieldActor *object, const s32 *script)
Field objects and actors, and the scene transition styles.
@ TRANSITION_BACKDROP_FADE
@ ACTOR_PRIORITY_AUTOMATIC
The sprite takes its priority from the map cell under it.
#define SCENE_TRANSITION(style, variant)
@ ACTOR_FACES_MOTION
turns toward its velocity, 1/16 turn a frame
The scene table formats: entrances, exits, placements and events, and the macros that write them.
#define SCENE_EXITS(scene)
#define FIND_MESSAGE(message)
#define FIND_PSYNERGY_STONE
#define SCENE_EXIT(exit, scene, entrance)
@ TALK_FACE_PARTY_AND_BACK
#define PSYNERGY_ON_ACTOR(ability)
#define EVENT_SCRIPT(script)
#define FIND_COINS(coins)
16.16 fixed-point constants, sine and cosine, and the library division.
#define Q16_ONE
One in the engine's signed 16.16 fixed-point format.
Game flags, named where their meaning is shown.
#define FLAG_SHOW_LOCATION_NAME
#define FLAG_COLOSSO_OVER
the Colosso finals have been fought
#define FLAG_SCENE_TEMP_03
#define FLAG_VALE_BARREL_COIN
1 coin
#define FLAG_REACHED_KALAY
Set whenever Kalay is entered; Vale's villagers then talk of the party's journey.
#define FLAG_BABI_PALACE_HARD_NUT
A jar in the scholars' room, which is drawn on Vale's map (vale_babi.c).
#define FLAG_VALE_BARREL_COINS
123 coins
#define FLAG_VISITED_SICK_DORA
Isaac visited Dora in her sickbed and she got up.
#define FLAG_VALE_WOODEN_BOX_HERB
The containers, set once each is searched; the last three hold their finds only once the party is bac...
#define FLAG_VALE_STORM
The prologue's stormy night: lightning over Vale, the rockslide and the monsters loose in the village...
#define FLAG_KEEP_PARTY_POSITION
#define FLAG_VALE_JAR_COINS
5 coins
#define FLAG_ISAAC_WEARS_TUNIC
The young Isaac wears the tunic Dora made him take on the stormy night: placed child sprites get its ...
#define FLAG_VALE_PSYNERGY_STONE
#define FLAG_READ_THOUGHTS_ABOUT_DORA
Back from Kalay, Mind Read showed that Dora is ill.
#define FLAG_VALE_JAR_VIAL
volatile u32 gFrameCount
Frames WaitFrames has finished.
BattleFxScene, the work of a battle or field Psynergy effect scene, and its arc objects.
FieldBlendWork, the field's colour blend work.
GameState, the game's state: play time, coins, the scene and the leader's position,...
struct GameState gGameState
void * gEffectWork
Slot 56: points to a scene-specific structure.
Font glyphs and their palettes.
The screen blend's globals and the graphics routines.
The heap's work slots and HeapState.
#define WORK_SLOT(n)
Reads slots through their own addresses; adjacent slots are reached by offsets.
The hardware's I/O registers and their bits, as pret names them.
#define BLDCNT_EFFECT_BLEND
weighted by REG_BLDALPHA
#define BLEND_ALPHA(top, bottom)
A REG_BLDALPHA value: top and bottom are the two targets' weights, out of 16.
Io_Write16, a 16-bit write to a register or memory.
#define Io_Write16(v, reg)
Writes a value to a 16-bit register or memory location.
Item numbers, named from the English release.
void DisplayBlend_SuspendScript(void)
Suspends the blend script.
void Map_SetLayerEntryFlag(u32 channelIndex)
Pauses tile animation channel channelIndex by setting its paused byte.
void Map_ClearLayerEntryFlag(u32 channelIndex)
Resumes tile animation channel channelIndex by clearing its paused byte.
The reel game's title lettering.
Field object scripts: one s32 command word, then its operands, as gScriptObject_CommandTable runs the...
#define SC_LABEL(n)
Branch destination.
#define SC_SET(w, v)
Write a work value.
#define SC_LOOP(n, to)
Repeat up to n times.
#define SC_POS(x, y, z)
Set position.
#define SC_SYNC
Wait for arrival.
#define SC_MOVE(x, y, z)
Move toward the target.
#define SC_WAIT(n)
Wait n frames.
#define SC_TOP
Script start.
#define SC_END
Return to the main script.
void Ui_SetMessageVoiceFromActor(s32 actor)
Sets the voice of the messages that follow to that of actor's sprite, at the rate the message speed o...
void BattleEffect_CleanupSceneObjects(void)
Ends a Psynergy effect: frees the effect slots still in use and, unless another effect is being resol...
The work pointers in the gWorkSlot table, by name.
#define Ram_SceneMapStateOffset
Song and sound effect ids, indices into gSound_SongTable.
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()
Vale, its home, storm and Babi scenes, Sol Sanctum's eruption and Venus Lighthouse's aerie: Psynergy ...
u8 frame
frame shown, frameBase plus the facing offset; 255 none
An animated sprite: its image and shadow, scale, rotation, size and up to four animation layers.
struct AnimationSpritePart image
u16 rotation
1/65536 turns
u8 flags
bits: 1 outlined in ObjectSystemWork's edge and fill colours | 0 shadow drawn (set when created)
u8 slot
VRAM cache entry holding its tiles.
struct AnimationEntry * entries[4]
its layers; empty ones null
u8 count
layers in use, up to the last one present
u8 retainCacheEntry
Keeps the VRAM cache entry when it is released or off screen.
u16 fullColor
256 colours; set for both parts when created
u16 tile
first sprite tile in VRAM
u16 priority
2 when created
The work of a Psynergy effect scene: its caster and target, where it takes place, the map state it re...
u16 tileSlot
resource entry holding the spark tiles
void * child
the target's object, or NULL
A field object as the object dispatcher's far calls take it.
The running scene's event work: its placement and event tables, its actors, the triggers and exit it ...
s32 startTransition
SCENE_TRANSITION(style, variant).
s32 transitionFrames
frames
u16 message
the next message, advanced as each window opens
A field actor: a person or thing on the field with a position, motion toward a target,...
u8 steeringFlags
ActorSteeringFlag bits.
u8 motionFlags
ActorMotionFlag bits; zero is free flight in 3D, and 3 is set on creation.
union FieldCoordinate x
16.16 fixed-point pixels
union FieldCoordinate y
16.16 fixed-point pixels
u8 priorityFlags
ActorPriorityFlag bits, read by the scrolling camera.
s32 terrainHeight
16.16 fixed-point pixels
union FieldCoordinate z
16.16 fixed-point pixels
void(*) update(union FieldObject *object)
Called each frame before the object's script, while the object is live.
The storm's lightning work: the colours it flashes between and their difference, the countdown to the...
s16 loud
nonzero plays the louder thunderclap, SE_172 for SE_171
A scene entrance: where and facing which way the party arrives, and the camera's bounds there (-1 for...
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,...
A scene's exit region: the box that, while its condition holds, takes the party leader out through it...
u16 offset
bytes from the start of OBJ VRAM
The system's routines and globals: interrupts, BIOS sound bias, random numbers and sleep.
The integer types, TRUE, UNUSED and the fixed-address macros.
s32 fixed
16.16 fixed-point pixels
An object on the field, read as an actor or as an effect.
static void Event_ExitSoutheastArea(void)
Reached by cell code 11; takes exit 11, to ValeStorm's entrance 13.
static void ValeBabi_SpawnEffectPair(union FieldObject *object)
Copies the parent's terrain height into two oppositely moving vertical effects.
static void Event_ExitWestAreaNorth(void)
Reached by cell code 5; takes exit 5, to this scene's entrance 8.
struct SceneEvent gValeBabi_StormEvents[]
struct SceneEvent gValeBabi_Events[]
s32 gValeBabi_Actor10FallsScript[]
static UNUSED void ValeBabi_CyclePaletteWithParticles(void)
s32 gValeBabi_DoraFacesIsaacScript[]
static void Event_ReadThoughtsAboutDorasIllness(void)
Mind Read on the neighbour: Dora was struck with illness.
static void Event_ScholarAsksAboutKraden(s32 speakerId)
A scholar asks whether the party knows Kraden.
s32 gValeBabi_MythrilBagRisesScript[]
struct SceneEvent gValeBabi_EventsAfterKalay[]
s32 ValeBabi_Initialize(void)
Sets up the stormy night or the villagers of the story, and plays the scenes of entrances 20 to 22.
static void Event_HurryToThePlaza(void)
Kyle calls to Isaac and Dora to hurry; actor 10 shakes, falls and fades as they run to the plaza.
s32 gValeBabi_DoraRunsAheadScript[]
s32 gValeBabi_IsaacRunsAheadScript[]
const struct SceneEntrance * ValeBabi_GetEntrances(void)
Returns the entrances, among them the scenes played on arrival: 19 from Babi's palace (its exit 11),...
u32 gValeBabi_StormExits[]
static void Event_ExitNorthwestArea(void)
Reached by cell code 1; takes exit 1, to ValeHome's entrance 6.
struct ScenePlacement gValeBabi_Placements[]
static void ValeBabi_RestoreRoomPatch(void)
Restores the room's tiles and collision patch outside the storm sequence.
static void Event_ExitCenterAreaSouth(void)
Reached by cell code 6; takes exit 6, to Vale's entrance 8, or on the stormy night to ValeStorm's.
static void Event_DoraWakesIsaac(void)
Dora wakes Isaac on the stormy night, makes him take his tunic, and leads him out into the storm.
static void Event_ExitSouthAreaWest(void)
Reached by cell code 9; takes exit 9, to this scene's entrance 7.
static void Event_TalkToDora(void)
Talking to Dora: in her sickbed she murmurs Kyle's name; once up, she tells Isaac not to worry.
static void ValeBabi_DemonstrateCatch(void)
Catch's effect plays on Dora, then its objects are released.
s32 gValeBabi_IsaacLeavesScript[]
static void Event_AskIsaacHisBusiness(void)
The neighbour asks whether Isaac has business with him, and sends him off either way.
static void Event_VisitSickDora(void)
Back from Kalay, Isaac visits Dora in her sickbed; she asks who told him she was ill,...
static void Event_NeighborSeesIsaacHasGrown(void)
Back from Kalay, the neighbour remarks how much Isaac has grown.
s32 gValeBabi_LeaveHouseScript[]
static void Event_ReadInnkeepersThoughts(void)
Mind Read on the innkeeper: Dora would not let Isaac stay in Vale.
struct SceneEvent gValeBabi_EventsAfterLeaving[]
static void ValeBabi_CloseScreenAndExit(s32 exitId)
Stops storm lightning before fading through the requested exit.
static void Event_AskWhetherMaskedManWasFelix(void)
A villager asks whether the masked man was Felix, and wonders whether Jenna can be trusted.
static void Event_ExitNortheastArea(void)
Reached by cell code 3; takes exit 3, to ValeHome's entrance 2.
const u32 * ValeBabi_GetExits(void)
On the stormy night the exits lead into the storm.
static void Event_ShowMythrilBag(void)
The Mythril Bag rises and wobbles before Kraden, with no text.
const struct ScenePlacement * ValeBabi_GetPlacements(void)
Places Babi's scholars, or Vale's villagers as the story has left them.
struct SceneEvent gValeBabi_ScholarsLaterEvents[]
const struct SceneEvent * ValeBabi_GetEvents(void)
Chooses the events: Babi's scholars talk differently once the Colosso finals are over; Vale's village...
static void Event_ExitSouthwestArea(void)
Reached by cell code 8; takes exit 8, to this scene's entrance 5.
struct ScenePlacement gValeBabi_PlacementsAfterKalay[]
s32 gValeBabi_IsaacRunsBackScript[]
static UNUSED void ValeBabi_CyclePaletteWithoutParticles(void)
s32 gValeBabi_DoraLeavesScript[]
static void Event_ExitNorthArea(void)
Reached by cell code 2; takes exit 2, to Kraden's cottage (ValeKraden's entrance 3).
static void ValeBabi_CyclePaletteAndSpawnPair(union FieldObject *object)
Cycles six palettes on odd frames and periodically emit paired effects.
s32 gValeBabi_RunToPlazaScript[]
struct SceneEvent gValeBabi_ScholarsEvents[]
static void Event_ExitCenterAreaNorth(void)
Reached by cell code 7; takes exit 7, to this scene's entrance 9.
static UNUSED void ValeBabi_FlashPaletteAndSpawnPair(union FieldObject *object)
Flashes between two palettes and emits a paired effect every sixteen frames.
static __inline__ void SetBlendTarget(u32 value)
Selects the hardware blend targets for the storm sequence.
static void ValeBabi_CyclePaletteOnOddFrames(union FieldObject *object)
Advances deterministically through six palettes on odd frames.
ValeBabiActor
Vale's placed actors, numbered in the order of gValeBabi_Placements (the scholars of entrance 19 are ...
@ ACTOR_NEIGHBOR
A neighbour who tells Isaac to be off, and who knows of Dora's illness once the party is back from Ka...
@ ACTOR_KYLE
Isaac's father (sprite 0x35, Kyle in vale_storm.c).
struct ScenePlacement gValeBabi_PlacementsAfterLeaving[]
ValeBabiPlaceFlag
Vale's place flags this scene keeps while the party is in Vale.
@ FLAG_VALE_NEIGHBOR_SAW_ISAAC_GROWN
Back from Kalay, the neighbour remarked how much Isaac has grown.
@ FLAG_VALE_INNKEEPER_WELCOMED_ISAAC
Back from Kalay, the innkeeper welcomed Isaac home.
static __inline__ void SetBlendAlpha(u32 value)
s32 gValeBabi_DoraRunsBackScript[]
s32 gValeBabi_Actor10ShakesScript[]
static void Event_ExitWestAreaSouth(void)
Reached by cell code 4; takes exit 4, to ValeHome's entrance 7.
const struct SceneRegion * ValeBabi_GetRegions(void)
s32 gValeBabi_MythrilBagWobblesScript[]
static void Event_ExitSouthAreaSouth(void)
Reached by cell code 10; takes exit 10, to ValeStorm's entrance 12.
struct SceneEntrance gValeBabi_Entrances[]
struct ScenePlacement gValeBabi_ScholarsPlacements[]
Declares nothing of its own: it only includes the window, battle command, resource and VRAM table hea...
s32 Resource_ResetEntry(u32 no)
Frees cache entry no: its blocks go back and the entry is marked free (offset 0xffff).
The sprite VRAM block cache and its owners.
struct VramBlockCacheEntry gVramBlockCache[]
void FieldFx_ResumeLightning(void)
Restarts the lightning: the next flash in 128 frames, repeating.
void FieldFx_StartLightning(void)
Starts the storm's lightning (FieldFx_UpdateLightning): builds the dark (0x10003) and lit (0x10005) p...
void FieldFx_StopLightning(void)
Stops the lightning: no flash for 0x7fff frames, and none after.
void FieldFx_LastLightning(void)
One last flash of lightning in 12 frames, then no more.
void UiText_ShowCenteredMessage(s32 message, s32 mode, s32 yOffset)
Shows a message centred on the screen (yOffset tiles lower) and waits until it is typed out,...