Alchemy
Loading...
Searching...
No Matches

field_service.h

Go to the documentation of this file.
1#ifndef FIELD_SERVICE_H
2#define FIELD_SERVICE_H
3
4/// @file
5/// The scene service layer: one typed inline for each engine service a scene
6/// calls by its own name, passing it on to the main image's import (Actor_Jump
7/// calls Engine_ActorJump).
8///
9/// It is a habit of the whole game written once: a layer, not a
10/// compiler-steering device (AGENTS.md S2). A scene writes
11/// `Actor_Jump(ACTOR_VENUS_DJINNI, 4, 30);` and the inline makes the call.
12
13#include "unit/object/object.h"
15#include "unit/field/field.h"
17#include "field_event.h"
18#include "engine_call.h"
19#include "farcall.h"
20
21static inline void Actor_FaceEachOther(s32 actor, s32 other, s32 frames) {
22 Engine_ActorFaceEachOther(actor, other, frames);
23}
24
25static inline void Actor_Jump(s32 actor, s32 height, s32 frames) {
26 Engine_ActorJump(actor, height, frames);
27}
28
29static inline void Actor_RunRepeatedMotion(s32 actor, s32 repeats) {
30 Engine_ActorRunRepeatedMotion(actor, repeats);
31}
32
33static inline void Actor_SetAnimation(s32 actor, s32 animation) {
34 Engine_ActorSetAnimation(actor, animation);
35}
36
37static inline void Actor_SetAnimationAndWait(s32 actor, s32 animation) {
38 Engine_ActorSetAnimationAndWait(actor, animation);
39}
40
41static inline void Actor_SetSpriteFlags(struct FieldActor *actor, s32 flags) {
42 Engine_ActorSetSpriteFlags(actor, flags);
43}
44
45static inline void Actor_SetSpritePriority(s32 actor, s32 priority) {
46 Engine_ActorSetSpritePriority(actor, priority);
47}
48
49static inline void Actor_StartRepeatedMotion(s32 actor, s32 repeats) {
50 Engine_ActorStartRepeatedMotion(actor, repeats);
51}
52
53static inline void Actor_Stop(s32 actor) { Engine_ActorStop(actor); }
54
55static inline void Actor_WaitForMove(s32 actor) {
57}
58
59static inline void Camera_WaitForMove(void) { Engine_CameraWaitForMove(); }
60
61static inline void ColorBuffer_Interpolate(s32 frames) {
63}
64
65static inline void Event_Begin(void) { Engine_EventBegin(); }
66
67static inline s32 Event_ChooseYesNo(s32 actor, s32 flags) {
68 return Engine_EventChooseYesNo(actor, flags);
69}
70
71static inline void Event_End(void) { Engine_EventEnd(); }
72
73static inline struct FieldActor *Event_GetViewCenter(void) {
75}
76
77static inline void Event_OpenScreen(void) { Engine_EventOpenScreen(); }
78
79static inline void Event_RequestExit(s32 exit) {
81}
82
83static inline void Event_SetMessage(s32 message) {
85}
86
87static inline void Event_Wait(s32 frames) { Engine_EventWait(frames); }
88
89static inline void Event_WaitForScreen(void) { Engine_EventWaitForScreen(); }
90
91static inline void FieldObject_SetPosition(struct FieldActor *object,
92 s32 fixed_x, s32 fixed_y,
93 s32 fixed_z) {
94 Engine_ObjectSetPosition(object, fixed_x, fixed_y, fixed_z);
95}
96
97static inline void *Heap_Allocate(s32 slot, s32 size) {
98 return Engine_HeapAllocate(slot, size);
99}
100
101static inline void Heap_Release(s32 slot) { Engine_HeapRelease(slot); }
102
103static inline void Item_LoadIcon(s32 item) { Engine_ItemLoadIcon(item); }
104
105static inline void Item_ShowFound(s32 item, s32 height) {
106 Engine_ItemShowFound(item, height);
107}
108
109static inline void Map_Redraw(void) { Engine_MapRedraw(); }
110
111static inline s32 Math_Cos(s32 angle) { return Engine_MathCos(angle); }
112
113static inline s32 Math_Sin(s32 angle) { return Engine_MathSin(angle); }
114
115static inline void Message_ShowCentered(s32 message, s32 flags) {
116 Engine_MessageShowCentered(message, flags);
117}
118
119static inline s32 Party_GiveItem(s32 item, s32 flags) {
120 return Engine_PartyGiveItem(item, flags);
121}
122
123static inline void Psynergy_Cancel(void) { Engine_PsynergyCancel(); }
124
125/// Calls the main-image scheduler through engine_call.h.
126static inline s32 Task_AddCallback(void (*callback)(void), s32 priority) {
127 return FieldScheduler_AddCallback(callback, priority);
128}
129
130static inline void Task_Wait(s32 frames) { Engine_TaskWait(frames); }
131
132static inline s32 Vram_Load(s32 block, s32 size, const void *data) {
133 return Engine_VramLoad(block, size, data);
134}
135
137 s32 a2) {
139}
140
141static inline void
144}
145
146static inline void FieldObjectMotion_CenterOnColumn(s32 a0, s32 a1, s32 a2) {
147 ObjectMotion_CenterOnColumn(a0, a1, a2);
148}
149
151 s32 a2) {
152 Engine_ActorSetDestination(a0, a1, a2);
153}
154
156 s32 z) {
158}
159
160/// Calls the main-image scheduler through engine_call.h.
162 s32 priority) {
163 return FieldScheduler_AddCallback(callback, priority);
164}
165
166static inline void Field_SetMapCellCollision(s32 a0, s32 a1, s32 a2, s32 a3) {
167 SetMapCellCollision(a0, a1, a2, a3);
168}
169
170static inline void FieldMap_SetWindowCellTile(s32 a0, s32 a1, s32 a2, s32 a3) {
171 Map_SetWindowCellTile(a0, a1, a2, a3);
172}
173
174static inline void FieldMotion_LaunchFromFocusedObject(s32 actor, s32 dx,
175 s32 dz, s32 facing) {
177}
178
179static inline void FieldObject_SetTargetAndCallback(s32 object, s32 target,
180 const s32 *actions) {
181 Object_SetTargetAndCallback(object, target, actions);
182}
183
184static inline void FieldVector_AddPolarOffset(s32 radius, s32 heading,
185 struct FieldPosition *probe) {
186 Vector_AddPolarOffset(radius, heading, probe);
187}
188
189#endif
void ObjectMotion_CenterOnColumn(u32 objectId, s32 priority, s32 zOffset)
The event command "center actor and walk": walks the actor sideways to the middle of its 16-pixel col...
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.
void ObjectMotion_CommitPositionAndActivate(u32 objectId, s32 xOffset, s32 zOffset)
Walks the actor (xOffset, zOffset) pixels, waits for it to arrive and stands it still.
void Motion_LaunchFromFocusedObject(u32 objectId, s32 xOffset, s32 zOffset, s32 action)
Places an actor on the leader and sends it walking (xOffset, zOffset) pixels away at speed 0....
void(*) SchedulerCallback(void)
void Engine_ActorSetSpriteFlags(struct FieldActor *, s32)
The engine call layer: one typed inline for each of the thirteen main-image routines below that the s...
static s32 FieldScheduler_AddCallback(SchedulerCallback callback, s32 priority)
Registers a main-image scheduler callback.
Definition engine_call.h:36
Public interfaces to the engine's code banks.
void Map_SetWindowCellTile(s32 x, s32 y, s32 px, s32 py)
Puts world map tile (x / 16, y / 16) at cell (px / 16, py / 16) of the tile id grid,...
Definition world_map.c:271
The scene script layer: the engine services a scene's events call, declared once (Engine_EventBegin,...
void Engine_ObjectSetPosition(struct FieldActor *object, s32 fixed_x, s32 fixed_y, s32 fixed_z)
void Engine_ActorSetAnimationAndWait(s32 actor, s32 animation)
void Engine_ActorSetSpritePriority(s32 actor, s32 priority)
s32 Engine_EventChooseYesNo(s32 actor, s32 flags)
void Engine_MessageShowCentered(s32 message, s32 flags)
s32 Engine_PartyGiveItem(s32 item, s32 flags)
void Engine_ActorJump(s32 actor, s32 height, s32 frames)
void Engine_ItemLoadIcon(s32 item)
s32 Engine_MathSin(s32 angle)
void Engine_ItemShowFound(s32 item, s32 height)
void Engine_ActorSetDestination(s32 actor, s32 x, s32 z)
void Engine_HeapRelease(s32 slot)
s32 Engine_VramLoad(s32 block, s32 size, const void *data)
void Engine_PsynergyCancel(void)
void Engine_EventWaitForScreen(void)
void Engine_EventOpenScreen(void)
void Engine_CameraWaitForMove(void)
void Engine_ActorWaitForMove(s32 actor)
void * Engine_HeapAllocate(s32 slot, s32 size)
void Engine_ActorStop(s32 actor)
void Engine_ActorRunRepeatedMotion(s32 actor, s32 repeats)
void Engine_ActorStartRepeatedMotion(s32 actor, s32 repeats)
struct FieldActor * Engine_EventGetViewCenter(void)
s32 Engine_MathCos(s32 angle)
void Engine_ObjectMotionSetPositionAndCommit(s32 actor, s32 x, s32 z)
void Engine_MapRedraw(void)
void Engine_ColorBufferInterpolate(s32 frames)
void Engine_ActorSetDestinationOffset(s32 actor, s32 dx, s32 dz)
void Engine_ActorFaceEachOther(s32 actor, s32 other, s32 frames)
void Engine_EventWait(s32 frames)
static void Event_End(void)
static void FieldObject_SetTargetAndCallback(s32 object, s32 target, const s32 *actions)
static s32 Task_AddCallback(void(*callback)(void), s32 priority)
Calls the main-image scheduler through engine_call.h.
static void Psynergy_Cancel(void)
static void Actor_RunRepeatedMotion(s32 actor, s32 repeats)
static struct FieldActor * Event_GetViewCenter(void)
static s32 Vram_Load(s32 block, s32 size, const void *data)
static void Camera_WaitForMove(void)
static void Message_ShowCentered(s32 message, s32 flags)
static s32 Math_Cos(s32 angle)
static void Task_Wait(s32 frames)
static void Event_RequestExit(s32 exit)
static void Actor_Stop(s32 actor)
static void Event_Begin(void)
static void Item_ShowFound(s32 item, s32 height)
static void Actor_StartRepeatedMotion(s32 actor, s32 repeats)
static void FieldObjectMotion_CenterOnColumn(s32 a0, s32 a1, s32 a2)
static void Actor_SetSpriteFlags(struct FieldActor *actor, s32 flags)
static void ColorBuffer_Interpolate(s32 frames)
static void FieldObjectMotion_CommitPositionAndActivate(s32 a0, s32 a1, s32 a2)
static void Actor_WaitForMove(s32 actor)
static void FieldVector_AddPolarOffset(s32 radius, s32 heading, struct FieldPosition *probe)
static s32 Math_Sin(s32 angle)
static s32 Party_GiveItem(s32 item, s32 flags)
static void FieldMotion_LaunchFromFocusedObject(s32 actor, s32 dx, s32 dz, s32 facing)
static void Actor_SetSpritePriority(s32 actor, s32 priority)
static void Map_Redraw(void)
static void Actor_SetAnimation(s32 actor, s32 animation)
static void Actor_SetAnimationAndWait(s32 actor, s32 animation)
static void Event_Wait(s32 frames)
static void Event_WaitForScreen(void)
static void Item_LoadIcon(s32 item)
static s32 FieldScheduler_AddOrUpdateCallback(SchedulerCallback callback, s32 priority)
Calls the main-image scheduler through engine_call.h.
static void FieldObjectMotion_OffsetPositionAndResetMotion(s32 a0, s32 a1, s32 a2)
static void Heap_Release(s32 slot)
static void Actor_Jump(s32 actor, s32 height, s32 frames)
static s32 Event_ChooseYesNo(s32 actor, s32 flags)
static void Actor_FaceEachOther(s32 actor, s32 other, s32 frames)
static void FieldObject_MotionSetPositionAndCommit(s32 actor, s32 x, s32 z)
static void Event_SetMessage(s32 message)
static void Field_SetMapCellCollision(s32 a0, s32 a1, s32 a2, s32 a3)
static void FieldObjectMotion_ResetAndSetPosition(s32 a0, s32 a1, s32 a2)
static void FieldObject_SetPosition(struct FieldActor *object, s32 fixed_x, s32 fixed_y, s32 fixed_z)
static void FieldMap_SetWindowCellTile(s32 a0, s32 a1, s32 a2, s32 a3)
static void * Heap_Allocate(s32 slot, s32 size)
static void Event_OpenScreen(void)
void Vector_AddPolarOffset(s32 radius, s32 angle, void *position)
Moves the point position by radius in direction angle on the ground plane: x by the cosine,...
Definition math.c:23
void Engine_ActorSetAnimation()
void Engine_EventRequestExit()
void Engine_EventEnd(void)
void Engine_EventBegin(void)
void Engine_TaskWait()
void Engine_EventSetMessage()
A field actor: a person or thing on the field with a position, motion toward a target,...
Definition field_obj.h:30
u16 radius
Collision radius in pixels: 16, or half the sprite metadata's boxY, when created; the overlap checks ...
Definition field_obj.h:43
union FieldCoordinate x
16.16 fixed-point pixels
Definition field_obj.h:35
union FieldCoordinate z
16.16 fixed-point pixels
Definition field_obj.h:37
u16 facing
1/65536 turns
Definition field_obj.h:34
A position on the field.
void SetMapCellCollision(u32 layer, s32 x, s32 y, u32 collisionCode)
Sets the collision code of a layer's cell at (x, y) in 16.16 pixels.
Definition terrain.c:422
signed int s32
Definition types.h:14