Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
7B440.c
Go to the documentation of this file.
1#include "common.h"
2
11
13
14 // default move speeds
16f32 DefaultRunSpeed = 4.0f;
17f32 DefaultJumpSpeed = 32.0f;
18
20
22 PlayerStatus* playerStatus = &gPlayerStatus;
23 s32 inputBufPos = playerStatus->inputBufPos;
24
25 playerStatus->stickAxis[0] = gGameStatusPtr->stickX[0];
26 playerStatus->stickAxis[1] = gGameStatusPtr->stickY[0];
27 playerStatus->curButtons = gGameStatusPtr->curButtons[0];
29 playerStatus->heldButtons = gGameStatusPtr->heldButtons[0];
30
31 inputBufPos++;
32 if (inputBufPos >= 10) {
33 inputBufPos = 0;
34 }
35
36 playerStatus->stickXBuffer[inputBufPos] = playerStatus->stickAxis[0];
37 playerStatus->stickYBuffer[inputBufPos] = playerStatus->stickAxis[1];
38 playerStatus->curButtonsBuffer[inputBufPos] = playerStatus->curButtons;
39 playerStatus->pressedButtonsBuffer[inputBufPos] = playerStatus->pressedButtons;
40 playerStatus->heldButtonsBuffer[inputBufPos] = playerStatus->heldButtons;
41 playerStatus->inputBufPos = inputBufPos;
42
44 playerStatus->stickAxis[0] = 0;
45 playerStatus->stickAxis[1] = 0;
46 playerStatus->curButtons = 0;
47 playerStatus->pressedButtons = 0;
48 playerStatus->heldButtons = 0;
49 }
50
51 if (playerStatus->animFlags & PA_FLAG_FORCE_USE_PARTNER) {
53 playerStatus->pressedButtons |= 4;
54 }
55}
56
58 PlayerStatus* playerStatus = &gPlayerStatus;
59 MapSettings* mapSettings;
60
70 D_800F7B44 = 0;
72 PlayerNormalPitch = 0.0f;
73 playerStatus->availableDisguiseType = 1;
74 playerStatus->renderMode = RENDER_MODE_ALPHATEST;
75
76 playerStatus->curAlpha = 255;
77 playerStatus->prevAlpha = 255;
78 gGameStatusPtr->peachFlags &= ~PEACH_FLAG_BLOCK_NEXT_DISGUISE;
79 gGameStatusPtr->peachFlags &= ~PEACH_FLAG_DEPRESSED;
80
82 playerStatus->colliderHeight = 55;
83 playerStatus->colliderDiameter = 38;
85
89 }
90 } else {
91 playerStatus->colliderHeight = 37;
92 playerStatus->colliderDiameter = 26;
94 }
95
96 playerStatus->walkSpeed = DefaultWalkSpeed;
97 playerStatus->runSpeed = DefaultRunSpeed;
98 playerStatus->maxJumpSpeed = DefaultJumpSpeed;
99
101
102 playerStatus->curSpeed = 0.0f;
103 playerStatus->targetYaw = 0.0f;
104 playerStatus->overlapPushAmount = 0.0f;
105 playerStatus->overlapPushYaw = 0.0f;
106 playerStatus->anim = 0;
107 playerStatus->timeInAir = 0;
108 playerStatus->pos.x = 0.0f;
109 playerStatus->pos.y = 0.0f;
110 playerStatus->pos.z = 0.0f;
111 playerStatus->curYaw = 0.0f;
112 playerStatus->flipYaw[CAM_DEFAULT] = 0.0f;
113 playerStatus->flipYaw[CAM_BATTLE] = 0.0f;
114 playerStatus->flipYaw[CAM_TATTLE] = 0.0f;
115 playerStatus->flipYaw[CAM_HUD] = 0.0f;
116
117 ASSERT_MSG(gGameStatusPtr->areaID < ARRAY_COUNT(gAreas) - 1, "Invalid area ID %d", gGameStatusPtr->areaID);
119 ASSERT_MSG(gGameStatusPtr->mapID < area->mapCount, "Invalid map ID %d in %s", gGameStatusPtr->mapID, area->id);
120 mapSettings = area->maps[gGameStatusPtr->mapID].settings;
121
122 if (mapSettings->entryList != NULL) {
123 if (gGameStatusPtr->entryID < mapSettings->entryCount) {
124 playerStatus->pos.x = (*mapSettings->entryList)[gGameStatusPtr->entryID].x;
125 playerStatus->pos.y = (*mapSettings->entryList)[gGameStatusPtr->entryID].y;
126 playerStatus->pos.z = (*mapSettings->entryList)[gGameStatusPtr->entryID].z;
127 playerStatus->curYaw = (*mapSettings->entryList)[gGameStatusPtr->entryID].yaw;
128 }
129 }
130
131 gCameras[CAM_DEFAULT].targetPos.x = playerStatus->pos.x;
132 gCameras[CAM_DEFAULT].targetPos.y = playerStatus->pos.y;
133 gCameras[CAM_DEFAULT].targetPos.z = playerStatus->pos.z;
134
137}
138
139void player_input_to_move_vector(f32* outAngle, f32* outMagnitude) {
140 PlayerStatus* playerStatus = &gPlayerStatus;
141 f32 stickAxisX = playerStatus->stickAxis[0];
142 f32 stickAxisY = -playerStatus->stickAxis[1];
143 f32 maxRadius = 70.0f;
144 f32 magnitude;
145 f32 angle;
146
147 magnitude = dist2D(0.0f, 0.0f, stickAxisX, stickAxisY);
148 if (magnitude >= maxRadius) {
149 magnitude = maxRadius;
150 }
151
152 angle = clamp_angle(atan2(0.0f, 0.0f, stickAxisX, stickAxisY) + gCameras[CAM_DEFAULT].curYaw);
153 if (magnitude == 0.0f) {
154 angle = playerStatus->targetYaw;
155 }
156
157 *outAngle = angle;
158 *outMagnitude = magnitude;
159}
160
161void game_input_to_move_vector(f32* outAngle, f32* outMagnitude) {
162 f32 stickX = gGameStatusPtr->stickX[0];
163 f32 stickY = -gGameStatusPtr->stickY[0];
164 f32 maxRadius = 70.0f;
165 f32 magnitude;
166 f32 angle;
167
168 magnitude = dist2D(0.0f, 0.0f, stickX, stickY);
169 if (magnitude >= maxRadius) {
170 magnitude = maxRadius;
171 }
172
173 angle = clamp_angle(atan2(0.0f, 0.0f, stickX, stickY) + gCameras[CAM_DEFAULT].curYaw);
174 if (magnitude == 0.0f) {
175 angle = gPlayerStatus.targetYaw;
176 }
177
178 *outAngle = angle;
179 *outMagnitude = magnitude;
180}
181
184 f32 x = shadow->rot.x + 180.0;
185 f32 z = shadow->rot.z + 180.0;
186 Camera* camera = &gCameras[CAM_DEFAULT];
187 f32 rate;
188
189 if (x != 0.0f || z != 0.0f) {
190 switch (gPlayerStatus.actionState) {
193 rate = 32.0f;
194 camera->yinterpRate = rate;
195 break;
197 case ACTION_STATE_RUN:
198 if (camera->targetScreenCoords.y < 130) {
199 camera->yinterpRate = 3.0f;
200 break;
201 }
202 rate = 3.0f;
203 if (PlayerYInterpUpdateDelay++ <= 10) {
204 return;
205 }
207 camera->yinterpRate -= 2.0f;
208 if (camera->yinterpRate < rate) {
209 camera->yinterpRate = rate;
210 }
211 break;
213 rate = 3.0f;
214 camera->yinterpRate = rate;
215 break;
216 default:
217 rate = 3.0f;
219 camera->yinterpRate -= 2.0f;
220 if (camera->yinterpRate < rate) {
221 camera->yinterpRate = rate;
222 }
223 break;
224 }
225 } else {
226 switch (gPlayerStatus.actionState) {
228 case ACTION_STATE_RUN:
231 rate = 7.2f;
232 break;
233 default:
234 rate = 24.0f;
235 break;
236 }
237
238 camera->yinterpRate = rate;
239 }
240}
void reset_player_status(void)
Definition 7B440.c:57
s32 PeachDisguiseReapplyDelay
Definition 7E9D0.c:22
Entity * TweesterTouchingPartner
Definition 7B440.c:4
void game_input_to_move_vector(f32 *outAngle, f32 *outMagnitude)
Definition 7B440.c:161
s32 PrevPlayerDirection
Definition 7B440.c:6
void player_input_to_move_vector(f32 *outAngle, f32 *outMagnitude)
Definition 7B440.c:139
f32 PlayerNormalPitch
Definition 7B440.c:9
PlayerSpinState gPlayerSpinState
Definition 7B440.c:10
f32 DefaultWalkSpeed
Definition 7B440.c:15
f32 PlayerNormalYaw
Definition 7B440.c:8
void update_player_input(void)
Definition 7B440.c:21
BSS s32 PlayerYInterpUpdateDelay
Definition 7B440.c:12
f32 DefaultJumpSpeed
Definition 7B440.c:17
void calculate_camera_yinterp_rate(void)
Definition 7B440.c:182
s32 PlayerRunStateTime
Definition 7B440.c:7
Entity * TweesterTouchingPlayer
Definition 7B440.c:5
f32 DefaultRunSpeed
Definition 7B440.c:16
s32 PeachDisguiseNpcIndex
Definition 7B440.c:3
s8 availableDisguiseType
set in main map scripts
u32 pressedButtons[4]
s32 pressedButtonsBuffer[10]
s32 heldButtonsBuffer[10]
s32 curButtonsBuffer[10]
#define clamp_angle
#define atan2
#define mem_clear
@ PEACH_FLAG_DISGUISED
Definition enums.h:2489
@ PEACH_FLAG_IS_PEACH
Definition enums.h:2488
@ PS_FLAG_NO_STATIC_COLLISION
Definition enums.h:3051
@ PS_FLAG_INPUT_DISABLED
Definition enums.h:3052
@ PA_FLAG_FORCE_USE_PARTNER
triggers partner use when set
Definition enums.h:3094
@ PA_FLAG_USING_PEACH_PHYSICS
Definition enums.h:3103
@ PA_FLAG_PARTNER_USAGE_FORCED
Definition enums.h:3115
@ RENDER_MODE_ALPHATEST
Definition enums.h:3276
@ PEACH_BAKING_NONE
Definition enums.h:2496
@ ACTION_STATE_JUMP
Definition enums.h:2430
@ ACTION_STATE_IDLE
Definition enums.h:2426
@ ACTION_STATE_FALLING
Definition enums.h:2435
@ ACTION_STATE_SLIDING
Definition enums.h:2445
@ ACTION_STATE_WALK
Definition enums.h:2427
@ ACTION_STATE_RUN
Definition enums.h:2428
@ CAM_TATTLE
Definition enums.h:1802
@ CAM_DEFAULT
Definition enums.h:1800
@ CAM_HUD
Definition enums.h:1803
@ CAM_BATTLE
Definition enums.h:1801
void phys_reset_spin_history(void)
Definition 7E9D0.c:95
Shadow * get_shadow_by_index(s32 index)
Definition entity.c:534
f32 dist2D(f32 ax, f32 ay, f32 bx, f32 by)
Definition 43F0.c:668
void set_action_state(s32 actionState)
Definition 7E9D0.c:209
#define BSS
Definition macros.h:7
#define ARRAY_COUNT(arr)
Definition macros.h:40
#define ASSERT_MSG(condition, msg, args...)
Definition macros.h:66
s32 entryCount
Definition map.h:25
char * id
"area_xxx"
Definition map.h:57
s32 mapCount
Definition map.h:55
AreaConfig gAreas[29]
Zero-terminated.
Definition world.c:867
MapSettings * settings
Definition map.h:43
MapConfig * maps
Definition map.h:56
EntryList * entryList
Definition map.h:24
Fields other than main, entryList, entryCount, background, and tattle are initialised when the map lo...
Definition map.h:18
f32 yinterpRate
Vec3s targetScreenCoords
Vec3f targetPos
GameStatus * gGameStatusPtr
Definition main_loop.c:31
s32 D_800F7B44
Definition 7E9D0.c:32
void(* TalkNotificationCallback)(void)
Definition 77480.c:34
Camera gCameras[4]
Definition cam_main.c:16
s32 PrevPlayerCamRelativeYaw
Definition 7E9D0.c:31
void(* PulseStoneNotificationCallback)(void)
Definition 77480.c:33
PlayerStatus gPlayerStatus
Definition 77480.c:38
void(* InteractNotificationCallback)(void)
Definition 77480.c:35