Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
inspect_icon.c File Reference

Go to the source code of this file.

Data Structures

struct  InspectIconData
 

Enumerations

enum  { INSPECT_ICON_APPEAR = 0 , INSPECT_ICON_HOLD = 1 , INSPECT_ICON_IDLE = 2 , INSPECT_ICON_VANISH = 3 }
 

Functions

 INCLUDE_IMG ("inspect_icon.png", inspect_icon_img)
 
 INCLUDE_PAL ("inspect_icon.pal", inspect_icon_pal)
 
void interact_inspect_update (void)
 
void interact_inspect_dismiss (void)
 
void interact_inspect_setup (void)
 
void appendGfx_interact_prompt (void)
 
s32 should_continue_inspect (void)
 
void update_inspect_icon_pos (void)
 

Variables

s32 D_8010C950
 
BSS InspectIconData InspectIcon
 
InspectIconDataInspectIconPtr = &InspectIcon
 

Data Structure Documentation

◆ InspectIconData

struct InspectIconData
Data Fields
Vec3f pos
f32 yaw
f32 scale
s32 holdTime
char unk_18[0x4]
s32 alpha
char unk_20[0x1]
s8 iconBounceVel
s8 iconBounceDir
u8 state
u8 brightness
char unk_25[0x3]

Enumeration Type Documentation

◆ anonymous enum

Enumerator
INSPECT_ICON_APPEAR 
INSPECT_ICON_HOLD 
INSPECT_ICON_IDLE 
INSPECT_ICON_VANISH 

Definition at line 23 of file inspect_icon.c.

23 {
28};
@ INSPECT_ICON_APPEAR
@ INSPECT_ICON_VANISH
@ INSPECT_ICON_HOLD
@ INSPECT_ICON_IDLE

Function Documentation

◆ INCLUDE_IMG()

INCLUDE_IMG ( "inspect_icon.png" ,
inspect_icon_img  )

◆ INCLUDE_PAL()

INCLUDE_PAL ( "inspect_icon.pal" ,
inspect_icon_pal  )

◆ interact_inspect_update()

void interact_inspect_update ( void )

Definition at line 196 of file inspect_icon.c.

196 {
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}
BSS s32 PopupMenu_SelectedIndex
s32 N GetIconBrightnessForAngle(f32 angle)
@ PS_FLAG_PAUSED
Definition enums.h:3074
@ 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
Entity * get_entity_by_index(s32 index)
Definition entity.c:530
s32 should_continue_inspect(void)
InspectIconData * InspectIconPtr
void update_inspect_icon_pos(void)
void interact_inspect_dismiss(void)
#define COLLISION_WITH_ENTITY_BIT
Definition macros.h:163
PlayerStatus gPlayerStatus
Definition 77480.c:38
void(* InteractNotificationCallback)(void)
Definition 77480.c:35

Referenced by interact_inspect_setup().

◆ interact_inspect_dismiss()

void interact_inspect_dismiss ( void )

Definition at line 267 of file inspect_icon.c.

267 {
273 func_800EF3D4(0);
275}
void func_800EF3D4(s32)
Definition partners.c:2411
void partner_reset_tether_distance(void)
Definition partners.c:2402
#define NO_COLLIDER
Definition macros.h:167
PlayerStatus * gPlayerStatusPtr

Referenced by interact_inspect_update().

◆ interact_inspect_setup()

void interact_inspect_setup ( void )

Definition at line 43 of file inspect_icon.c.

43 {
45
48 D_8010C950 = -1;
50 InspectIconPtr->pos.y = playerStatus->pos.y + playerStatus->colliderHeight +
51 (!(playerStatus->animFlags & PA_FLAG_USING_PEACH_PHYSICS) ? 8.0f : 2.0f);
53 InspectIconPtr->scale = 0.4f;
58 InspectIconPtr->alpha = 255;
59 }
60}
#define mem_clear
@ PA_FLAG_USING_PEACH_PHYSICS
Definition enums.h:3137
@ PA_FLAG_INTERACT_PROMPT_AVAILABLE
! prompt
Definition enums.h:3129
void interact_inspect_update(void)
s32 D_8010C950
Definition 77480.c:36
Camera gCameras[4]
Definition cam_main.c:16
s32 gCurrentCameraID
Definition cam_math.c:5

Referenced by check_for_interactables().

◆ appendGfx_interact_prompt()

void appendGfx_interact_prompt ( void )

Definition at line 62 of file inspect_icon.c.

62 {
65
73
77
78 ifxImg.raster = inspect_icon_img;
79 ifxImg.palette = inspect_icon_pal;
82 ifxImg.xOffset = -16;
83 ifxImg.yOffset = 26;
84 ifxImg.alpha = 255;
90
92 }
93}
Mtx matrixStack[0x200]
f32 Matrix4f[4][4]
#define guRotateF
#define guMtxF2L
#define guTranslateF
#define guMtxCatF
#define guScaleF
@ IMGFX_SET_COLOR
Definition enums.h:4708
@ IMGFX_CLEAR
Definition enums.h:4702
@ IMGFX_FLAG_40
Definition enums.h:4684
@ IMGFX_FLAG_400
Definition enums.h:4688
@ IMGFX_FLAG_8
Definition enums.h:4681
s32 imgfx_appendGfx_component(s32, ImgFXTexture *, u32, Matrix4f)
Definition imgfx.c:705
void imgfx_update(u32, ImgFXType, s32, s32, s32, s32, s32)
Definition imgfx.c:486
Gfx * gMainGfxPos
Definition cam_main.c:14
u16 gMatrixListPos
Definition main_loop.c:44
DisplayContext * gDisplayContext
Definition cam_main.c:15

Referenced by render_interact_prompt().

◆ should_continue_inspect()

s32 should_continue_inspect ( void )

Definition at line 96 of file inspect_icon.c.

96 {
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}
@ 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
@ NPC_FLAG_USE_INSPECT_ICON
Definition enums.h:3060
s32 phys_can_player_interact(void)
Definition 7BB60.c:1159
u32 get_entity_type(s32 arg0)
Definition entity.c:568
s32 should_collider_allow_interact(s32)
Definition trigger.c:281
#define COLLISION_WITH_NPC_BIT
Definition macros.h:162
s32 flags
CollisionStatus gCollisionStatus
Definition 7BB60.c:5

Referenced by interact_inspect_update().

◆ update_inspect_icon_pos()

void update_inspect_icon_pos ( void )

Definition at line 161 of file inspect_icon.c.

161 {
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}

Referenced by interact_inspect_dismiss(), and interact_inspect_update().

Variable Documentation

◆ D_8010C950

s32 D_8010C950
extern

Definition at line 36 of file 77480.c.

Referenced by func_800E06C0(), and interact_inspect_setup().

◆ InspectIcon

BSS InspectIconData InspectIcon

Definition at line 35 of file inspect_icon.c.

◆ InspectIconPtr