Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
inspect_icon.c
Go to the documentation of this file.
1#include "common.h"
2#include "include_asset.h"
3
4extern s32 D_8010C950; //TODO never read, consider removing
5
6#define NAMESPACE inspect_icon
7
8typedef struct InspectIconData {
9 /* 0x00 */ Vec3f pos;
10 /* 0x0C */ f32 yaw;
11 /* 0x10 */ f32 scale;
12 /* 0x14 */ s32 holdTime;
13 /* 0x18 */ char unk_18[0x4];
14 /* 0x1C */ s32 alpha; // unused
15 /* 0x20 */ char unk_20[0x1];
16 /* 0x21 */ s8 iconBounceVel;
17 /* 0x22 */ s8 iconBounceDir;
18 /* 0x23 */ u8 state;
19 /* 0x24 */ u8 brightness;
20 /* 0x25 */ char unk_25[0x3];
21} InspectIconData; // size = 0x28
22
23enum {
28};
29
30#include "inspect_icon.png.h"
31INCLUDE_IMG("inspect_icon.png", inspect_icon_img);
32INCLUDE_PAL("inspect_icon.pal", inspect_icon_pal);
33#include "inspect_icon.gfx.inc.c"
34
37
39
42
61
94
95// similar to check_for_interactables
100 Npc* npc = playerStatus->encounteredNPC;
101
104
105 if (floor >= 0 && (floor & COLLISION_WITH_ENTITY_BIT)) {
107 switch (get_entity_type(floor)) {
116 break;
117 }
118 } else if (!(playerStatus->flags & PS_FLAG_INPUT_DISABLED)
120 && (npc != nullptr)
122 ) {
124 if (playerStatus->interactingWithID == curInteraction) {
125 return true;
126 }
127 } else {
128 playerStatus->interactingWithID = NO_COLLIDER;
130 return false;
131 }
132 } else {
136 playerStatus->interactingWithID = NO_COLLIDER;
138 return false;
139 }
140 }
141 } else {
143 playerStatus->interactingWithID = NO_COLLIDER;
145 return false;
146 }
147 }
148 }
149 if (playerStatus->interactingWithID == curInteraction) {
150 if ((playerStatus->flags & PS_FLAG_INTERACTED)) {
151 return false;
152 }
153 } else {
155 }
156
157 playerStatus->interactingWithID = curInteraction;
158 return true;
159}
160
166 f32 delta;
167
168 // this bouncing behavior is never seen because dir is never changed from zero
170
171 if (InspectIconPtr->iconBounceVel > 4) {
174 }
175 if (InspectIconPtr->iconBounceVel < -4) {
178 }
179
180 delta = (playerStatus->pos.x - InspectIconPtr->pos.x) * 0.666f;
181 InspectIconPtr->pos.x += delta;
182 delta = (playerStatus->pos.z - InspectIconPtr->pos.z) * 0.666f;
183 InspectIconPtr->pos.z += delta;
184
185 playerHeadY = playerStatus->pos.y + playerStatus->colliderHeight;
188 if (!(playerStatus->animFlags & PA_FLAG_USING_PEACH_PHYSICS)) {
189 delta = (playerHeadY + 8.0f + bounceDeltaY - lastPosY) * 0.25f;
190 } else {
191 delta = (playerHeadY + 2.0f + bounceDeltaY - lastPosY) * 0.25f;
192 }
193 InspectIconPtr->pos.y += delta;
194}
195
198 s32 brightness = 255;
199 f32 angle;
200 s32 actionState;
201
203
204 switch (InspectIconPtr->state) {
206 InspectIconPtr->yaw = 0.0f;
207 InspectIconPtr->scale += 0.05;
208 if (InspectIconPtr->scale >= 0.55) {
209 InspectIconPtr->scale = 0.55f;
212 }
213 break;
215 InspectIconPtr->yaw = 0.0f;
217 if (InspectIconPtr->holdTime <= 0) {
219 }
220 break;
222 angle = InspectIconPtr->yaw;
223 angle += 10.0f;
224 if (angle >= 360.0f) {
225 angle -= 360.0f;
226 }
227 InspectIconPtr->yaw = angle;
228 brightness = N(GetIconBrightnessForAngle)(angle);
229 break;
231 angle = InspectIconPtr->yaw;
232 angle += 25.0f;
233 if (angle >= 360.0f) {
234 angle -= 360.0f;
235 }
236 InspectIconPtr->yaw = angle;
237 InspectIconPtr->alpha -= 25;
238 if (InspectIconPtr->alpha < 0) {
240 }
241 if ((angle >= 70.0f && angle <= 110.0f) || (angle >= 250.0f && angle <= 290.0f)) {
242 // only dimiss when the icon is rotated away from view
244 }
245 brightness = N(GetIconBrightnessForAngle)(angle);
246 break;
247 }
248 InspectIconPtr->brightness = brightness;
249
250 actionState = playerStatus->actionState;
252 || (playerStatus->inputDisabledCount != 0)
253 || (playerStatus->flags & PS_FLAG_PAUSED)
254 || !(actionState == ACTION_STATE_IDLE || actionState == ACTION_STATE_WALK || actionState == ACTION_STATE_RUN)
255 ) {
257 }
258
259 if ((playerStatus->interactingWithID >= 0)
260 && (playerStatus->interactingWithID & COLLISION_WITH_ENTITY_BIT)
262 ) {
264 }
265}
266
BSS s32 PopupMenu_SelectedIndex
s32 N GetIconBrightnessForAngle(f32 angle)
Mtx matrixStack[0x200]
f32 Matrix4f[4][4]
#define guRotateF
#define guMtxF2L
#define guTranslateF
#define guMtxCatF
#define mem_clear
#define guScaleF
@ IMGFX_SET_COLOR
Definition enums.h:4708
@ IMGFX_CLEAR
Definition enums.h:4702
@ PS_FLAG_PAUSED
Definition enums.h:3074
@ PS_FLAG_INTERACTED
Definition enums.h:3111
@ PS_FLAG_INPUT_DISABLED
Definition enums.h:3086
@ PS_FLAG_HAS_CONVERSATION_NPC
Definition enums.h:3108
@ ENTITY_TYPE_PUSH_BLOCK
Definition enums.h:2541
@ ENTITY_TYPE_PADLOCK
Definition enums.h:2532
@ ENTITY_TYPE_SIGNPOST
Definition enums.h:2574
@ ENTITY_TYPE_CHEST
Definition enums.h:2573
@ ENTITY_TYPE_PADLOCK_RED_FACE
Definition enums.h:2534
@ ENTITY_TYPE_PADLOCK_RED_FRAME
Definition enums.h:2533
@ ENTITY_TYPE_PADLOCK_BLUE_FACE
Definition enums.h:2535
@ PA_FLAG_USING_PEACH_PHYSICS
Definition enums.h:3137
@ PA_FLAG_INTERACT_PROMPT_AVAILABLE
! prompt
Definition enums.h:3129
@ ENTITY_FLAG_SHOWS_INSPECT_PROMPT
Definition enums.h:2611
@ ACTION_STATE_IDLE
Definition enums.h:2412
@ ACTION_STATE_WALK
Definition enums.h:2413
@ ACTION_STATE_RUN
Definition enums.h:2414
@ IMGFX_FLAG_40
Definition enums.h:4684
@ IMGFX_FLAG_400
Definition enums.h:4688
@ IMGFX_FLAG_8
Definition enums.h:4681
@ NPC_FLAG_USE_INSPECT_ICON
Definition enums.h:3060
Entity * get_entity_by_index(s32 index)
Definition entity.c:530
s32 phys_can_player_interact(void)
Definition 7BB60.c:1159
void func_800EF3D4(s32)
Definition partners.c:2411
s32 imgfx_appendGfx_component(s32, ImgFXTexture *, u32, Matrix4f)
Definition imgfx.c:705
u32 get_entity_type(s32 arg0)
Definition entity.c:568
s32 should_collider_allow_interact(s32)
Definition trigger.c:281
void imgfx_update(u32, ImgFXType, s32, s32, s32, s32, s32)
Definition imgfx.c:486
void partner_reset_tether_distance(void)
Definition partners.c:2402
#define INCLUDE_PAL(FILENAME, SYMBOLNAME)
#define INCLUDE_IMG(FILENAME, SYMBOLNAME)
s32 should_continue_inspect(void)
BSS InspectIconData InspectIcon
char unk_20[0x1]
void interact_inspect_update(void)
@ INSPECT_ICON_APPEAR
@ INSPECT_ICON_VANISH
@ INSPECT_ICON_HOLD
@ INSPECT_ICON_IDLE
void interact_inspect_setup(void)
InspectIconData * InspectIconPtr
void update_inspect_icon_pos(void)
s32 D_8010C950
Definition 77480.c:36
char unk_18[0x4]
char unk_25[0x3]
void appendGfx_interact_prompt(void)
void interact_inspect_dismiss(void)
#define COLLISION_WITH_ENTITY_BIT
Definition macros.h:163
#define BSS
Definition macros.h:6
#define NO_COLLIDER
Definition macros.h:167
#define COLLISION_WITH_NPC_BIT
Definition macros.h:162
s32 flags
PlayerStatus * gPlayerStatusPtr
CollisionStatus gCollisionStatus
Definition 7BB60.c:5
Camera gCameras[4]
Definition cam_main.c:16
Gfx * gMainGfxPos
Definition cam_main.c:14
u16 gMatrixListPos
Definition main_loop.c:44
PlayerStatus gPlayerStatus
Definition 77480.c:38
s32 gCurrentCameraID
Definition cam_math.c:5
void(* InteractNotificationCallback)(void)
Definition 77480.c:35
DisplayContext * gDisplayContext
Definition cam_main.c:15