mirror of
https://github.com/pmret/papermario.git
synced 2024-11-08 12:02:30 +01:00
95% (#881)
* fixes * 2 nusys funcs * warnings * appendGfx_npc_blur * clean * cleanup, standardize button macro
This commit is contained in:
parent
46add495eb
commit
5b5b8c579f
@ -1104,7 +1104,7 @@ typedef struct ModelAnimator {
|
||||
/* 0x2CC */ s32 treeIndexPos;
|
||||
/* 0x2D0 */ s32 savedTreePos;
|
||||
/* 0x2D4 */ void (*fpRenderCallback)(void*);
|
||||
/* 0x2D8 */ s32 renderCallbackArg;
|
||||
/* 0x2D8 */ void* renderCallbackArg;
|
||||
/* 0x2DC */ char unk_2DC[4];
|
||||
} ModelAnimator; // size = 0x2E0
|
||||
|
||||
@ -1743,7 +1743,7 @@ typedef struct AnimatedModel {
|
||||
/* 0x10 */ Vec3f rot;
|
||||
/* 0x1C */ Vec3f scale;
|
||||
/* 0x28 */ Mtx mtx;
|
||||
/* 0x68 */ u32 currentAnimData;
|
||||
/* 0x68 */ s16* currentAnimData;
|
||||
/* 0x6C */ char unk_6C[4];
|
||||
} AnimatedModel; // size = 0x70
|
||||
|
||||
|
@ -180,13 +180,13 @@ void delete_model_animator_nodes(ModelAnimator* animator);
|
||||
void delete_model_animator(ModelAnimator* animator);
|
||||
void render_animated_model_with_vertices(s32 animatorID, Mtx* rootTransform, s32 segment, void* baseAddr);
|
||||
void appendGfx_animator(ModelAnimator* animator);
|
||||
ModelAnimator* set_animator_render_callback(s32 animModelID, s32 callbackArg, void (*callbackFunc)(void*));
|
||||
ModelAnimator* set_animator_render_callback(s32 animModelID, void* callbackArg, void (*callbackFunc)(void*));
|
||||
void reload_mesh_animator_tree(ModelAnimator* animator);
|
||||
s32 step_mesh_animator(ModelAnimator* animator);
|
||||
|
||||
void set_custom_gfx_builders(s32 customGfxIndex, ModelCustomGfxBuilderFunc pre, ModelCustomGfxBuilderFunc post);
|
||||
void mdl_make_local_vertex_copy(s32 arg0, u16 treeIdx, s32);
|
||||
void play_model_animation_starting_from(s32 index, s32 animPos, s32 framesToSkip);
|
||||
void play_model_animation_starting_from(s32 index, s16* animPos, s32 framesToSkip);
|
||||
|
||||
void set_background_color_blend(u8 r, u8 g, u8 b, u8 a);
|
||||
|
||||
|
@ -461,7 +461,7 @@ void disable_npc_shadow(Npc* npc);
|
||||
|
||||
void update_npc_blur(Npc* npc);
|
||||
|
||||
void appendGfx_npc_blur(void* data);
|
||||
void appendGfx_npc_blur(Npc* npc);
|
||||
|
||||
void npc_enable_collisions(void);
|
||||
|
||||
|
@ -129,7 +129,7 @@ extern char wMapTexName[];
|
||||
extern char wMapHitName[];
|
||||
extern char wMapShapeName[];
|
||||
extern char wMapBgName[];
|
||||
extern struct ShapeFile* D_80210000; // shouldnt be a pointer
|
||||
extern struct ShapeFile D_80210000;
|
||||
extern u8 D_802D9D70; // player alpha1 copy?
|
||||
extern u8 D_802D9D71; // player alpha2 copy?
|
||||
|
||||
|
@ -221,7 +221,7 @@ void btl_state_update_normal_start(void) {
|
||||
|
||||
ASSERT(size <= 0x8000);
|
||||
|
||||
model = D_80210000;
|
||||
model = D_80210000.root;
|
||||
textureRom = get_asset_offset(stage->texture, &size);
|
||||
if (model != NULL) {
|
||||
load_data_for_models(model, textureRom, size);
|
||||
|
16
src/1A5830.c
16
src/1A5830.c
@ -1629,7 +1629,7 @@ ApiStatus RunToGoal(Evt* script, s32 isInitialCall) {
|
||||
return ApiStatus_DONE1;
|
||||
}
|
||||
|
||||
s32 IdleRunToGoal(Evt* script, s32 isInitialCall) {
|
||||
ApiStatus IdleRunToGoal(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
Actor* actor;
|
||||
ActorMovement* movement;
|
||||
@ -1714,7 +1714,7 @@ s32 IdleRunToGoal(Evt* script, s32 isInitialCall) {
|
||||
return ApiStatus_DONE1;
|
||||
}
|
||||
|
||||
s32 JumpPartTo(Evt* script, s32 isInitialCall) {
|
||||
ApiStatus JumpPartTo(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
Actor* actor;
|
||||
ActorPart* part;
|
||||
@ -1808,7 +1808,7 @@ s32 JumpPartTo(Evt* script, s32 isInitialCall) {
|
||||
}
|
||||
}
|
||||
|
||||
s32 FallPartTo(Evt* script, s32 isInitialCall) {
|
||||
ApiStatus FallPartTo(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
Actor* actor;
|
||||
ActorPart* part;
|
||||
@ -1897,7 +1897,7 @@ s32 FallPartTo(Evt* script, s32 isInitialCall) {
|
||||
}
|
||||
}
|
||||
|
||||
s32 LandJumpPart(Evt* script, s32 isInitialCall) {
|
||||
ApiStatus LandJumpPart(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
Actor* actor;
|
||||
ActorPart* part;
|
||||
@ -1944,7 +1944,7 @@ s32 LandJumpPart(Evt* script, s32 isInitialCall) {
|
||||
return ApiStatus_BLOCK;
|
||||
}
|
||||
|
||||
s32 RunPartTo(Evt* script, s32 isInitialCall) {
|
||||
ApiStatus RunPartTo(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
Actor* actor;
|
||||
ActorPart* part;
|
||||
@ -2074,7 +2074,7 @@ s32 RunPartTo(Evt* script, s32 isInitialCall) {
|
||||
f32 update_lerp_battle(s32 easing, f32 start, f32 end, s32 elapsed, s32 duration);
|
||||
INCLUDE_ASM(s32, "1A5830", update_lerp_battle);
|
||||
|
||||
s32 FlyToGoal(Evt* script, s32 isInitialCall) {
|
||||
ApiStatus FlyToGoal(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
Actor* actor;
|
||||
ActorState* actorState;
|
||||
@ -2229,7 +2229,7 @@ s32 FlyToGoal(Evt* script, s32 isInitialCall) {
|
||||
return ApiStatus_BLOCK;
|
||||
}
|
||||
|
||||
s32 IdleFlyToGoal(Evt* script, s32 isInitialCall) {
|
||||
ApiStatus IdleFlyToGoal(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
Actor* actor;
|
||||
ActorMovement* movement;
|
||||
@ -2330,7 +2330,7 @@ s32 IdleFlyToGoal(Evt* script, s32 isInitialCall) {
|
||||
return ApiStatus_BLOCK;
|
||||
}
|
||||
|
||||
s32 FlyPartTo(Evt* script, s32 isInitialCall) {
|
||||
ApiStatus FlyPartTo(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
Actor* actor;
|
||||
ActorPart* part;
|
||||
|
@ -1229,7 +1229,7 @@ s32 func_802A2C84(void) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (battleStatus->currentButtonsPressed & 0x4000) {
|
||||
if (battleStatus->currentButtonsPressed & BUTTON_B) {
|
||||
sfx_play_sound(SOUND_MENU_BACK);
|
||||
func_802A27E4();
|
||||
battle_menu_moveState = -2;
|
||||
|
@ -584,7 +584,7 @@ void peach_check_for_parasol_input(void) {
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (gGameStatusPtr->peachFlags & PEACH_STATUS_FLAG_HAS_PARASOL && playerStatus->pressedButtons & B_BUTTON) {
|
||||
} else if (gGameStatusPtr->peachFlags & PEACH_STATUS_FLAG_HAS_PARASOL && playerStatus->pressedButtons & BUTTON_B) {
|
||||
set_action_state(ACTION_STATE_USE_SNEAKY_PARASOL);
|
||||
}
|
||||
}
|
||||
|
@ -1083,7 +1083,7 @@ void check_input_midair_jump(void) {
|
||||
!(gPlayerStatus.animFlags & (PA_FLAGS_8BIT_MARIO | PA_FLAGS_USING_WATT)) &&
|
||||
gPlayerStatus.peakJumpTime >= 6 &&
|
||||
gPlayerStatus.timeInAir < 18 &&
|
||||
gPlayerStatus.pressedButtons & A_BUTTON) {
|
||||
gPlayerStatus.pressedButtons & BUTTON_A) {
|
||||
|
||||
switch (gPlayerData.bootsLevel) {
|
||||
case 0:
|
||||
|
@ -1258,7 +1258,7 @@ void create_popup_menu(PopupMenu* popup) {
|
||||
D_8010D650 = 255;
|
||||
D_8010D691 = 4;
|
||||
D_8010D692 = 6;
|
||||
D_8010D694 = create_worker_frontUI(popup_menu_update, NULL);
|
||||
D_8010D694 = create_worker_frontUI((void (*) (void)) popup_menu_update, NULL);
|
||||
}
|
||||
|
||||
void func_800F4FC4(PopupMenu* popup) {
|
||||
@ -1303,7 +1303,7 @@ void func_800F4FC4(PopupMenu* popup) {
|
||||
D_8010D650 = 255;
|
||||
D_8010D691 = 4;
|
||||
D_8010D692 = 6;
|
||||
D_8010D694 = create_worker_frontUI(popup_menu_update, NULL);
|
||||
D_8010D694 = create_worker_frontUI((void (*) (void)) popup_menu_update, NULL);
|
||||
}
|
||||
|
||||
void func_800F513C(PopupMenu* popup) {
|
||||
@ -1347,7 +1347,7 @@ void func_800F513C(PopupMenu* popup) {
|
||||
D_8010D650 = 255;
|
||||
D_8010D691 = 9;
|
||||
D_8010D692 = 2;
|
||||
D_8010D694 = create_worker_frontUI(popup_menu_update, NULL);
|
||||
D_8010D694 = create_worker_frontUI((void (*) (void)) popup_menu_update, NULL);
|
||||
}
|
||||
|
||||
void func_800F52BC(void) {
|
||||
|
@ -953,7 +953,7 @@ ModelAnimator* get_animator_by_index(s32 animModelID) {
|
||||
return (*gCurrentAnimMeshListPtr)[animModelID & ~0x800];
|
||||
}
|
||||
|
||||
ModelAnimator* set_animator_render_callback(s32 animModelID, s32 callbackArg, void (*callbackFunc)(void*)) {
|
||||
ModelAnimator* set_animator_render_callback(s32 animModelID, void* callbackArg, void (*callbackFunc)(void*)) {
|
||||
ModelAnimator* ret = (*gCurrentAnimMeshListPtr)[animModelID & ~0x800];
|
||||
|
||||
ret->fpRenderCallback = callbackFunc;
|
||||
@ -1021,7 +1021,7 @@ void play_model_animation(s32 index, s16* animPos) {
|
||||
animator->nextUpdateTime = 1.0f;
|
||||
}
|
||||
|
||||
void play_model_animation_starting_from(s32 index, s32 animPos, s32 framesToSkip) {
|
||||
void play_model_animation_starting_from(s32 index, s16* animPos, s32 framesToSkip) {
|
||||
s32 indexMasked = index & ~0x800;
|
||||
ModelAnimator* animator = (*gCurrentAnimMeshListPtr)[indexMasked];
|
||||
s32 i;
|
||||
@ -1030,8 +1030,8 @@ void play_model_animation_starting_from(s32 index, s32 animPos, s32 framesToSkip
|
||||
animPos = ((s32)animPos & 0xFFFFFF) + (s32)animator->animationBuffer; // TODO: array access?
|
||||
}
|
||||
|
||||
animator->animReadPos = (s16*) animPos;
|
||||
animator->savedReadPos = (s16*) animPos;
|
||||
animator->animReadPos = animPos;
|
||||
animator->savedReadPos = animPos;
|
||||
animator->treeIndexPos = 0;
|
||||
animator->nextUpdateTime = 1.0f;
|
||||
|
||||
|
@ -1390,10 +1390,18 @@ void render_entities(void) {
|
||||
if (entity->flags & ENTITY_FLAGS_HAS_ANIMATED_MODEL) {
|
||||
if (D_8014AFB0 == 0xFF) {
|
||||
if (entity->renderSetupFunc != NULL) {
|
||||
set_animator_render_callback(entity->virtualModelIndex, entity->listIndex, entity->renderSetupFunc);
|
||||
set_animator_render_callback(
|
||||
entity->virtualModelIndex,
|
||||
(void*)(u32) entity->listIndex,
|
||||
(void (*)(void*)) entity->renderSetupFunc
|
||||
);
|
||||
}
|
||||
} else {
|
||||
set_animator_render_callback(entity->virtualModelIndex, entity->listIndex, func_8010FE44);
|
||||
set_animator_render_callback(
|
||||
entity->virtualModelIndex,
|
||||
(void*)(u32) entity->listIndex,
|
||||
func_8010FE44
|
||||
);
|
||||
}
|
||||
|
||||
if (entity->gfxBaseAddr == NULL) {
|
||||
@ -1407,9 +1415,11 @@ void render_entities(void) {
|
||||
} else {
|
||||
if (D_8014AFB0 == 0xFF) {
|
||||
if (entity->renderSetupFunc != NULL) {
|
||||
bind_entity_model_setupGfx(entity->virtualModelIndex,
|
||||
bind_entity_model_setupGfx(
|
||||
entity->virtualModelIndex,
|
||||
(void*)(u32) entity->listIndex,
|
||||
entity->renderSetupFunc);
|
||||
(void (*)(void*)) entity->renderSetupFunc
|
||||
);
|
||||
} else {
|
||||
get_entity_model(entity->virtualModelIndex)->fpSetupGfxCallback = NULL;
|
||||
}
|
||||
@ -4477,7 +4487,28 @@ void mdl_get_vertex_count(Gfx* gfx, s32* numVertices, Vtx** baseVtx, s32* gfxCou
|
||||
}
|
||||
|
||||
void mdl_local_gfx_update_vtx_pointers(Gfx* nodeDlist, Vtx* baseVtx, Gfx* arg2, Vtx* arg3);
|
||||
#ifdef NON_MATCHING
|
||||
void mdl_local_gfx_update_vtx_pointers(Gfx* nodeDlist, Vtx* baseVtx, Gfx* arg2, Vtx* arg3) {
|
||||
u32 w0;
|
||||
u32 temp_v1;
|
||||
u32 w1;
|
||||
|
||||
do {
|
||||
w0 = (u32) nodeDlist->words.w0 >> 0;
|
||||
w1 = nodeDlist->words.w1;
|
||||
temp_v1 = w0 >> 0x18;
|
||||
nodeDlist++;
|
||||
if (temp_v1 == 1) {
|
||||
w1 = &arg3[(s32) (w1 - (s32)baseVtx) >> 4];
|
||||
}
|
||||
arg2->words.w0 = w0;
|
||||
arg2->words.w1 = w1;
|
||||
arg2++;
|
||||
} while (temp_v1 != G_ENDDL);
|
||||
}
|
||||
#else
|
||||
INCLUDE_ASM(s32, "a5dd0_len_114e0", mdl_local_gfx_update_vtx_pointers);
|
||||
#endif
|
||||
|
||||
void mdl_local_gfx_copy_vertices(Vtx* from, s32 num, Vtx* to) {
|
||||
u32 i;
|
||||
|
@ -118,7 +118,7 @@ void N(update)(void) {
|
||||
}
|
||||
}
|
||||
|
||||
if (battleStatus->currentButtonsPressed & A_BUTTON) {
|
||||
if (battleStatus->currentButtonsPressed & BUTTON_A) {
|
||||
s32 a = battleStatus->actionCmdDifficultyTable[actionCommandStatus->difficulty];
|
||||
s32 b = actionCommandStatus->targetWeakness * 850;
|
||||
s32 temp_v1_2 = (a * b) / 10000;
|
||||
|
@ -18,7 +18,7 @@ s32 N(D_802A10F0)[] = {
|
||||
EvtScript N(CheckForAPress) = {
|
||||
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_Mario_BeforeJump)
|
||||
EVT_LOOP(5)
|
||||
EVT_CALL(CheckButtonPress, A_BUTTON, LVar0)
|
||||
EVT_CALL(CheckButtonPress, BUTTON_A, LVar0)
|
||||
EVT_IF_EQ(LVar0, TRUE)
|
||||
EVT_BREAK_LOOP
|
||||
EVT_END_IF
|
||||
|
@ -18,7 +18,7 @@ s32 N(D_802A10F0)[] = {
|
||||
EvtScript N(CheckForAPress) = {
|
||||
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_Mario_BeforeJump)
|
||||
EVT_LOOP(5)
|
||||
EVT_CALL(CheckButtonPress, A_BUTTON, LVar0)
|
||||
EVT_CALL(CheckButtonPress, BUTTON_A, LVar0)
|
||||
EVT_IF_EQ(LVar0, TRUE)
|
||||
EVT_BREAK_LOOP
|
||||
EVT_END_IF
|
||||
|
@ -27,7 +27,7 @@ s32 D_802A1140_73D9A0[] = {
|
||||
EvtScript N(CheckForAPress) = {
|
||||
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_Mario_BeforeJump)
|
||||
EVT_LOOP(5)
|
||||
EVT_CALL(CheckButtonPress, A_BUTTON, LVar0)
|
||||
EVT_CALL(CheckButtonPress, BUTTON_A, LVar0)
|
||||
EVT_IF_EQ(LVar0, TRUE)
|
||||
EVT_BREAK_LOOP
|
||||
EVT_END_IF
|
||||
|
@ -245,8 +245,6 @@ void entity_StarBoxLauncher_init(Entity* entity) {
|
||||
data->basePosZ = entity->position.z;
|
||||
}
|
||||
|
||||
|
||||
|
||||
EntityScript Entity_StarBoxLauncher_Script = {
|
||||
es_SetCallback(entity_StarBoxLauncher_check_launch, 0)
|
||||
es_SetCallback(entity_StarBoxLauncher_shake_box, 4)
|
||||
|
@ -110,7 +110,7 @@ ApiStatus LoadAnimatedMesh(Evt* script, s32 isInitialCall) {
|
||||
ApiStatus PlayModelAnimation(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
s32 index = evt_get_variable(script, *args++);
|
||||
s32 var2 = evt_get_variable(script, *args++);
|
||||
s16* var2 = (s16*) evt_get_variable(script, *args++);
|
||||
AnimatedModel* model = (*gCurrentMeshAnimationListPtr)[index];
|
||||
|
||||
model->currentAnimData = var2;
|
||||
@ -122,7 +122,7 @@ ApiStatus PlayModelAnimation(Evt* script, s32 isInitialCall) {
|
||||
ApiStatus PlayModelAnimationStartingFrom(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
s32 index = evt_get_variable(script, *args++);
|
||||
s32 var2 = evt_get_variable(script, *args++);
|
||||
s16* var2 = (s16*) evt_get_variable(script, *args++);
|
||||
s32 var3 = evt_get_variable(script, *args++);
|
||||
AnimatedModel* model = (*gCurrentMeshAnimationListPtr)[index];
|
||||
|
||||
@ -135,7 +135,7 @@ ApiStatus PlayModelAnimationStartingFrom(Evt* script, s32 isInitialCall) {
|
||||
ApiStatus ChangeModelAnimation(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
s32 index = evt_get_variable(script, *args++);
|
||||
s32 var2 = evt_get_variable(script, *args++);
|
||||
s16* var2 = (s16*) evt_get_variable(script, *args++);
|
||||
AnimatedModel* model = (*gCurrentMeshAnimationListPtr)[index];
|
||||
|
||||
if (model->currentAnimData == var2) {
|
||||
|
77
src/npc.c
77
src/npc.c
@ -1025,7 +1025,82 @@ void update_npc_blur(Npc* npc) {
|
||||
motionBlur->index = index;
|
||||
}
|
||||
|
||||
INCLUDE_ASM(void, "npc", appendGfx_npc_blur, Npc* npc);
|
||||
void appendGfx_npc_blur(Npc* npc) {
|
||||
Matrix4f sp20, sp60;
|
||||
f32 x, y, z;
|
||||
f32 yaw;
|
||||
s32 var_s3;
|
||||
s32 var_s5;
|
||||
s32 index;
|
||||
NpcMotionBlur* blur;
|
||||
|
||||
var_s3 = 0;
|
||||
var_s5 = 0;
|
||||
blur = npc->blur.motion;
|
||||
index = blur->index;
|
||||
|
||||
while (TRUE) {
|
||||
index--;
|
||||
var_s3++;
|
||||
if (index < 0) {
|
||||
index = ARRAY_COUNT(blur->x) - 1;
|
||||
}
|
||||
if (index == blur->index) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (var_s3 >= 3) {
|
||||
var_s3 = 0;
|
||||
var_s5++;
|
||||
if (var_s5 >= 4) {
|
||||
break;
|
||||
}
|
||||
|
||||
x = blur->x[index];
|
||||
y = blur->y[index];
|
||||
z = blur->z[index];
|
||||
func_802DE894(npc->spriteInstanceID, 7, 255, 255, 255, 120 - (var_s5 * 20), 0);
|
||||
yaw = npc->renderYaw;
|
||||
guTranslateF(sp20, x, y, z);
|
||||
|
||||
if (npc->rotation.y != 0.0f) {
|
||||
guRotateF(sp60, npc->rotation.y, 0.0f, 1.0f, 0.0f);
|
||||
guMtxCatF(sp60, sp20, sp20);
|
||||
}
|
||||
if (npc->rotation.x != 0.0f) {
|
||||
guRotateF(sp60, npc->rotation.y, 0.0f, 1.0f, 0.0f);
|
||||
guMtxCatF(sp60, sp20, sp20);
|
||||
}
|
||||
if (npc->rotation.z != 0.0f) {
|
||||
guRotateF(sp60, npc->rotation.y, 0.0f, 1.0f, 0.0f);
|
||||
guMtxCatF(sp60, sp20, sp20);
|
||||
}
|
||||
|
||||
if (
|
||||
(npc->scale.x * SPRITE_WORLD_SCALE_D) != 1.0 ||
|
||||
((npc->scale.y * npc->verticalStretch) * SPRITE_WORLD_SCALE_D) != 1.0 ||
|
||||
(npc->scale.z * SPRITE_WORLD_SCALE_D) != 1.0)
|
||||
{
|
||||
guScaleF(
|
||||
sp60,
|
||||
npc->scale.x * SPRITE_WORLD_SCALE_D,
|
||||
(npc->scale.y * npc->verticalStretch) * SPRITE_WORLD_SCALE_D,
|
||||
npc->scale.z * SPRITE_WORLD_SCALE_D
|
||||
);
|
||||
guMtxCatF(sp60, sp20, sp20);
|
||||
}
|
||||
|
||||
if (!(npc->flags & NPC_FLAG_NO_ANIMS_LOADED)) {
|
||||
if (!(npc->flags & NPC_FLAG_1000000)) {
|
||||
spr_draw_npc_sprite(npc->spriteInstanceID, (s32) yaw, 0, 0, sp20);
|
||||
}
|
||||
} else {
|
||||
spr_draw_player_sprite(0x40000001, (s32) yaw, 0, 0, sp20);
|
||||
}
|
||||
}
|
||||
}
|
||||
func_8003D3BC(npc);
|
||||
}
|
||||
|
||||
void npc_enable_collisions(void) {
|
||||
D_800A0B94 = 1;
|
||||
|
@ -2,7 +2,7 @@
|
||||
#include "nu/nusys.h"
|
||||
|
||||
s32 contRetrace(void);
|
||||
s32 contReadData(void);
|
||||
s32 contReadData(s32* arg0);
|
||||
s32 contReadNW(void);
|
||||
s32 contQuery(void);
|
||||
|
||||
@ -10,7 +10,7 @@ u32 D_80093D20 = 0;
|
||||
|
||||
s32(*D_80093D24[4])(void) = {
|
||||
contRetrace,
|
||||
contReadData,
|
||||
(s32 (*) (void)) contReadData,
|
||||
contReadNW,
|
||||
contQuery,
|
||||
};
|
||||
@ -19,7 +19,7 @@ s32 D_80093D34 = 0;
|
||||
|
||||
NUCallBackList nuContCallBack = {
|
||||
NULL,
|
||||
&D_80093D24,
|
||||
(s32 (**)(NUSiCommonMesg*)) &D_80093D24,
|
||||
0x100,
|
||||
0,
|
||||
};
|
||||
|
@ -12,6 +12,7 @@ s32* D_80093B94 = D_80093B84;
|
||||
void nuScEventHandler(void);
|
||||
void nuScExecuteAudio(void);
|
||||
void nuScExecuteGraphics(void);
|
||||
void nuScWaitTaskReady(NUScTask* task);
|
||||
|
||||
extern u64 nuScStack[NU_SC_STACK_SIZE / sizeof(u64)];
|
||||
extern u64 nuScAudioStack[NU_SC_STACK_SIZE / sizeof(u64)];
|
||||
@ -65,9 +66,96 @@ void nuScCreateScheduler(u8 videoMode, u8 numFields) {
|
||||
osStartThread(&nusched.graphicsThread);
|
||||
}
|
||||
|
||||
INCLUDE_ASM(void, "os/nusys/nuSched", nuScExecuteAudio);
|
||||
void nuScExecuteAudio(void) {
|
||||
NUScTask* gfxTask;
|
||||
NUScTask* audioTask;
|
||||
OSMesg msg;
|
||||
u32 yieldFlag;
|
||||
|
||||
INCLUDE_ASM(void, "os/nusys/nuSched", nuScExecuteGraphics);
|
||||
while(1) {
|
||||
osRecvMesg(&nusched.audioRequestMQ, (OSMesg *) &audioTask, OS_MESG_BLOCK);
|
||||
if (nuScPreNMIFlag & NU_SC_BEFORE_RESET) {
|
||||
osSendMesg(audioTask->msgQ, audioTask->msg, OS_MESG_BLOCK);
|
||||
continue;
|
||||
}
|
||||
|
||||
osWritebackDCacheAll();
|
||||
|
||||
yieldFlag = 0;
|
||||
gfxTask = nusched.curGraphicsTask;
|
||||
|
||||
if (gfxTask != NULL) {
|
||||
osSpTaskYield();
|
||||
osRecvMesg(&nusched.rspMQ, &msg, OS_MESG_BLOCK);
|
||||
|
||||
if (osSpTaskYielded(&gfxTask->list)) {
|
||||
yieldFlag = 1;
|
||||
} else {
|
||||
yieldFlag = 2;
|
||||
}
|
||||
}
|
||||
|
||||
nusched.curAudioTask = audioTask;
|
||||
osSpTaskStart(&audioTask->list);
|
||||
|
||||
osRecvMesg(&nusched.rspMQ, &msg, OS_MESG_BLOCK);
|
||||
nusched.curAudioTask = NULL;
|
||||
|
||||
if( nusched.graphicsTaskSuspended )
|
||||
osSendMesg(&nusched.waitMQ, &msg, OS_MESG_BLOCK );
|
||||
|
||||
if (yieldFlag == 1) {
|
||||
osSpTaskStart(&gfxTask->list);
|
||||
} else if (yieldFlag == 2) {
|
||||
osSendMesg(&nusched.rspMQ, &msg, OS_MESG_BLOCK);
|
||||
}
|
||||
|
||||
osSendMesg(audioTask->msgQ, audioTask->msg, OS_MESG_BLOCK);
|
||||
}
|
||||
}
|
||||
|
||||
void nuScExecuteGraphics(void) {
|
||||
OSMesg msg;
|
||||
NUScTask* gfxTask;
|
||||
OSIntMask mask;
|
||||
|
||||
while (TRUE) {
|
||||
osRecvMesg(&nusched.graphicsRequestMQ, (OSMesg *) &gfxTask, OS_MESG_BLOCK);
|
||||
if(nuScPreNMIFlag & NU_SC_BEFORE_RESET){
|
||||
osSendMesg(gfxTask->msgQ, (OSMesg*) gfxTask, OS_MESG_BLOCK);
|
||||
continue;
|
||||
}
|
||||
|
||||
nuScWaitTaskReady(gfxTask);
|
||||
|
||||
mask = osSetIntMask(OS_IM_NONE);
|
||||
if (nusched.curAudioTask) {
|
||||
nusched.graphicsTaskSuspended = gfxTask;
|
||||
osSetIntMask(mask);
|
||||
osRecvMesg(&nusched.waitMQ, &msg, OS_MESG_BLOCK);
|
||||
mask = osSetIntMask(OS_IM_NONE);
|
||||
nusched.graphicsTaskSuspended = NULL;
|
||||
}
|
||||
osSetIntMask(mask);
|
||||
|
||||
mask = osSetIntMask(OS_IM_NONE);
|
||||
nusched.curGraphicsTask = gfxTask;
|
||||
osSetIntMask(mask);
|
||||
|
||||
osSpTaskStart(&gfxTask->list);
|
||||
|
||||
osRecvMesg(&nusched.rspMQ, &msg, OS_MESG_BLOCK);
|
||||
|
||||
mask = osSetIntMask(OS_IM_NONE);
|
||||
nusched.curGraphicsTask = NULL;
|
||||
osSetIntMask(mask);
|
||||
|
||||
if (!(gfxTask->flags & NU_SC_NORDP)) {
|
||||
osRecvMesg(&nusched.rdpMQ, &msg, OS_MESG_BLOCK);
|
||||
}
|
||||
osSendMesg(gfxTask->msgQ, (OSMesg*) gfxTask, OS_MESG_BLOCK);
|
||||
}
|
||||
}
|
||||
|
||||
void nuScAddClient(NUScClient* c, OSMesgQueue* mq, NUScMsg msgType) {
|
||||
s32 mask;
|
||||
@ -152,7 +240,51 @@ s32 nuScGetFrameRate(void) {
|
||||
INCLUDE_ASM(s32, "os/nusys/nuSched", nuScGetFrameRate, void);
|
||||
#endif
|
||||
|
||||
INCLUDE_ASM(void, "os/nusys/nuSched", nuScEventHandler);
|
||||
#ifdef NON_MATCHING
|
||||
void nuScEventHandler(void) {
|
||||
OSMesg msg;
|
||||
s32 beforeResetFrame;
|
||||
|
||||
nuScRetraceCounter = 0;
|
||||
|
||||
while (TRUE) {
|
||||
osRecvMesg(&nusched.retraceMQ, &msg, OS_MESG_BLOCK);
|
||||
|
||||
switch ((s32) msg) {
|
||||
case 666:
|
||||
nuScRetraceCounter++;
|
||||
|
||||
nuScEventBroadcast(&nusched.retraceMsg);
|
||||
|
||||
if (nuScPreNMIFlag){
|
||||
if (beforeResetFrame){
|
||||
beforeResetFrame--;
|
||||
} else {
|
||||
nuScPreNMIFlag |= NU_SC_BEFORE_RESET;
|
||||
osAfterPreNMI();
|
||||
osViSetYScale(1.0);
|
||||
osViBlack(TRUE);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 669:
|
||||
nuScPreNMIFlag = NU_SC_PRENMI_GET;
|
||||
nuScEventBroadcast(&nusched.prenmiMsg);
|
||||
|
||||
if (nuScPreNMIFunc != NULL){
|
||||
(*nuScPreNMIFunc)();
|
||||
}
|
||||
|
||||
beforeResetFrame = (nusched.frameRate / 2) / nusched.retraceCount - 3;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
INCLUDE_ASM(s32, "os/nusys/nuSched", nuScEventHandler, void);
|
||||
#endif
|
||||
|
||||
void nuScEventBroadcast(NUScMsg* msg) {
|
||||
NUScClient* clientList = nusched.clientList;
|
||||
|
@ -509,7 +509,7 @@ void pause_map_handle_input(MenuPanel* tab) {
|
||||
gPauseMapCameraY = -210.0f;
|
||||
}
|
||||
|
||||
if (gPausePressedButtons & B_BUTTON) {
|
||||
if (gPausePressedButtons & BUTTON_B) {
|
||||
sfx_play_sound(SOUND_MENU_BACK);
|
||||
gPauseMenuCurrentTab = 0;
|
||||
return;
|
||||
|
@ -173,7 +173,7 @@ ApiStatus func_802406C4_AF8014(Evt* script, s32 isInitialCall) {
|
||||
// fallthrough
|
||||
case 11:
|
||||
temp = D_80246538_kkj_19[D_80246550_kkj_19];
|
||||
if (gGameStatusPtr->pressedButtons[0] & A_BUTTON) {
|
||||
if (gGameStatusPtr->pressedButtons[0] & BUTTON_A) {
|
||||
dgb_08_npcGroup_80246528++;
|
||||
}
|
||||
if (dgb_08_npcGroup_80246528 > temp) {
|
||||
@ -210,7 +210,7 @@ ApiStatus func_802406C4_AF8014(Evt* script, s32 isInitialCall) {
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
||||
D_80246578[D_802465A0++] = gGameStatusPtr->pressedButtons[0] & A_BUTTON;
|
||||
D_80246578[D_802465A0++] = gGameStatusPtr->pressedButtons[0] & BUTTON_A;
|
||||
|
||||
if (D_802465A0 >= 10) {
|
||||
D_802465A0 = 0;
|
||||
|
@ -66,7 +66,7 @@ void func_80240A6C_BCF65C(void) {
|
||||
s32 idx;
|
||||
s32 i;
|
||||
|
||||
temp_v0->aPressed[temp_v0->unk_1C0] = gGameStatusPtr->pressedButtons[0] & A_BUTTON;
|
||||
temp_v0->aPressed[temp_v0->unk_1C0] = gGameStatusPtr->pressedButtons[0] & BUTTON_A;
|
||||
temp_v0->unk_1C0++;
|
||||
if (temp_v0->unk_1C0 >= ARRAY_COUNT(temp_v0->aPressed)) {
|
||||
temp_v0->unk_1C0 = 0;
|
||||
@ -384,7 +384,7 @@ moved:
|
||||
}
|
||||
|
||||
script->varTable[0] = 0;
|
||||
if (temp_v0->unk_1D8 >= 46 || (gGameStatusPtr->pressedButtons[0] & B_BUTTON)) {
|
||||
if (temp_v0->unk_1D8 >= 46 || (gGameStatusPtr->pressedButtons[0] & BUTTON_B)) {
|
||||
script->varTable[0] = 1;
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
@ -767,7 +767,7 @@ ApiStatus func_802BE724_322274(Evt* script, s32 isInitialCall) {
|
||||
} else {
|
||||
npc->duration--;
|
||||
if (npc->duration != 0) {
|
||||
if (partnerActionStatus->pressedButtons & (B_BUTTON | D_CBUTTONS) && lakilester_raycast_below()) {
|
||||
if (partnerActionStatus->pressedButtons & (BUTTON_B | D_CBUTTONS) && lakilester_raycast_below()) {
|
||||
D_802BFF14 = 3;
|
||||
}
|
||||
break;
|
||||
@ -791,7 +791,7 @@ ApiStatus func_802BE724_322274(Evt* script, s32 isInitialCall) {
|
||||
}
|
||||
|
||||
if (!(playerStatus->flags & PS_FLAGS_HIT_FIRE)) {
|
||||
if (partnerActionStatus->pressedButtons & (B_BUTTON | D_CBUTTONS)) {
|
||||
if (partnerActionStatus->pressedButtons & (BUTTON_B | D_CBUTTONS)) {
|
||||
if (lakilester_raycast_below()) {
|
||||
D_802BFF14 = 3;
|
||||
} else {
|
||||
|
@ -345,7 +345,7 @@ ApiStatus func_802BD754_31D2C4(Evt* script, s32 isInitialCall) {
|
||||
actionState == ACTION_STATE_RUN ||
|
||||
actionState == ACTION_STATE_LAND)
|
||||
{
|
||||
if (partnerActionStatus->pressedButtons & B_BUTTON) {
|
||||
if (partnerActionStatus->pressedButtons & BUTTON_B) {
|
||||
D_802BE304 = 2;
|
||||
}
|
||||
}
|
||||
|
@ -1,231 +0,0 @@
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
|
||||
.section .rodata
|
||||
|
||||
dlabel D_800984C0
|
||||
.double 0.7142857142857143
|
||||
|
||||
.section .text
|
||||
|
||||
glabel appendGfx_npc_blur
|
||||
/* 16238 8003AE38 27BDFF08 */ addiu $sp, $sp, -0xf8
|
||||
/* 1623C 8003AE3C F7BC00E8 */ sdc1 $f28, 0xe8($sp)
|
||||
/* 16240 8003AE40 4480E000 */ mtc1 $zero, $f28
|
||||
/* 16244 8003AE44 F7BA00E0 */ sdc1 $f26, 0xe0($sp)
|
||||
/* 16248 8003AE48 3C01800A */ lui $at, %hi(D_800984C0)
|
||||
/* 1624C 8003AE4C D43A84C0 */ ldc1 $f26, %lo(D_800984C0)($at)
|
||||
/* 16250 8003AE50 AFB000A0 */ sw $s0, 0xa0($sp)
|
||||
/* 16254 8003AE54 0080802D */ daddu $s0, $a0, $zero
|
||||
/* 16258 8003AE58 AFB300AC */ sw $s3, 0xac($sp)
|
||||
/* 1625C 8003AE5C 0000982D */ daddu $s3, $zero, $zero
|
||||
/* 16260 8003AE60 AFB500B4 */ sw $s5, 0xb4($sp)
|
||||
/* 16264 8003AE64 0260A82D */ daddu $s5, $s3, $zero
|
||||
/* 16268 8003AE68 AFB100A4 */ sw $s1, 0xa4($sp)
|
||||
/* 1626C 8003AE6C 27B10060 */ addiu $s1, $sp, 0x60
|
||||
/* 16270 8003AE70 AFB700BC */ sw $s7, 0xbc($sp)
|
||||
/* 16274 8003AE74 27B70020 */ addiu $s7, $sp, 0x20
|
||||
/* 16278 8003AE78 AFB400B0 */ sw $s4, 0xb0($sp)
|
||||
/* 1627C 8003AE7C 0260A02D */ daddu $s4, $s3, $zero
|
||||
/* 16280 8003AE80 AFBF00C0 */ sw $ra, 0xc0($sp)
|
||||
/* 16284 8003AE84 AFB600B8 */ sw $s6, 0xb8($sp)
|
||||
/* 16288 8003AE88 AFB200A8 */ sw $s2, 0xa8($sp)
|
||||
/* 1628C 8003AE8C F7BE00F0 */ sdc1 $f30, 0xf0($sp)
|
||||
/* 16290 8003AE90 F7B800D8 */ sdc1 $f24, 0xd8($sp)
|
||||
/* 16294 8003AE94 F7B600D0 */ sdc1 $f22, 0xd0($sp)
|
||||
/* 16298 8003AE98 F7B400C8 */ sdc1 $f20, 0xc8($sp)
|
||||
/* 1629C 8003AE9C 8E160020 */ lw $s6, 0x20($s0)
|
||||
/* 162A0 8003AEA0 3C013FF0 */ lui $at, 0x3ff0
|
||||
/* 162A4 8003AEA4 4481F800 */ mtc1 $at, $f31
|
||||
/* 162A8 8003AEA8 4480F000 */ mtc1 $zero, $f30
|
||||
/* 162AC 8003AEAC 82D20001 */ lb $s2, 1($s6)
|
||||
/* 162B0 8003AEB0 2652FFFF */ addiu $s2, $s2, -1
|
||||
.L8003AEB4:
|
||||
/* 162B4 8003AEB4 06410002 */ bgez $s2, .L8003AEC0
|
||||
/* 162B8 8003AEB8 26730001 */ addiu $s3, $s3, 1
|
||||
/* 162BC 8003AEBC 24120013 */ addiu $s2, $zero, 0x13
|
||||
.L8003AEC0:
|
||||
/* 162C0 8003AEC0 82C20001 */ lb $v0, 1($s6)
|
||||
/* 162C4 8003AEC4 1242009C */ beq $s2, $v0, .L8003B138
|
||||
/* 162C8 8003AEC8 2A620003 */ slti $v0, $s3, 3
|
||||
/* 162CC 8003AECC 5440FFF9 */ bnel $v0, $zero, .L8003AEB4
|
||||
/* 162D0 8003AED0 2652FFFF */ addiu $s2, $s2, -1
|
||||
/* 162D4 8003AED4 0000982D */ daddu $s3, $zero, $zero
|
||||
/* 162D8 8003AED8 26B50001 */ addiu $s5, $s5, 1
|
||||
/* 162DC 8003AEDC 2AA20004 */ slti $v0, $s5, 4
|
||||
/* 162E0 8003AEE0 10400095 */ beqz $v0, .L8003B138
|
||||
/* 162E4 8003AEE4 26940014 */ addiu $s4, $s4, 0x14
|
||||
/* 162E8 8003AEE8 24050007 */ addiu $a1, $zero, 7
|
||||
/* 162EC 8003AEEC 240600FF */ addiu $a2, $zero, 0xff
|
||||
/* 162F0 8003AEF0 00121080 */ sll $v0, $s2, 2
|
||||
/* 162F4 8003AEF4 02C21021 */ addu $v0, $s6, $v0
|
||||
/* 162F8 8003AEF8 C4540004 */ lwc1 $f20, 4($v0)
|
||||
/* 162FC 8003AEFC C4560054 */ lwc1 $f22, 0x54($v0)
|
||||
/* 16300 8003AF00 C45800A4 */ lwc1 $f24, 0xa4($v0)
|
||||
/* 16304 8003AF04 00C0102D */ daddu $v0, $a2, $zero
|
||||
/* 16308 8003AF08 AFA20010 */ sw $v0, 0x10($sp)
|
||||
/* 1630C 8003AF0C 24020078 */ addiu $v0, $zero, 0x78
|
||||
/* 16310 8003AF10 00541023 */ subu $v0, $v0, $s4
|
||||
/* 16314 8003AF14 AFA20014 */ sw $v0, 0x14($sp)
|
||||
/* 16318 8003AF18 AFA00018 */ sw $zero, 0x18($sp)
|
||||
/* 1631C 8003AF1C 8E040024 */ lw $a0, 0x24($s0)
|
||||
/* 16320 8003AF20 0C0B7A25 */ jal func_802DE894
|
||||
/* 16324 8003AF24 00C0382D */ daddu $a3, $a2, $zero
|
||||
/* 16328 8003AF28 4405A000 */ mfc1 $a1, $f20
|
||||
/* 1632C 8003AF2C 4406B000 */ mfc1 $a2, $f22
|
||||
/* 16330 8003AF30 4407C000 */ mfc1 $a3, $f24
|
||||
/* 16334 8003AF34 C6140034 */ lwc1 $f20, 0x34($s0)
|
||||
/* 16338 8003AF38 0C019E40 */ jal guTranslateF
|
||||
/* 1633C 8003AF3C 27A40020 */ addiu $a0, $sp, 0x20
|
||||
/* 16340 8003AF40 C6000048 */ lwc1 $f0, 0x48($s0)
|
||||
/* 16344 8003AF44 461C0032 */ c.eq.s $f0, $f28
|
||||
/* 16348 8003AF48 00000000 */ nop
|
||||
/* 1634C 8003AF4C 4501000B */ bc1t .L8003AF7C
|
||||
/* 16350 8003AF50 00000000 */ nop
|
||||
/* 16354 8003AF54 E7BC0010 */ swc1 $f28, 0x10($sp)
|
||||
/* 16358 8003AF58 8E050048 */ lw $a1, 0x48($s0)
|
||||
/* 1635C 8003AF5C 4406E000 */ mfc1 $a2, $f28
|
||||
/* 16360 8003AF60 3C073F80 */ lui $a3, 0x3f80
|
||||
/* 16364 8003AF64 0C019EC8 */ jal guRotateF
|
||||
/* 16368 8003AF68 0220202D */ daddu $a0, $s1, $zero
|
||||
/* 1636C 8003AF6C 0220202D */ daddu $a0, $s1, $zero
|
||||
/* 16370 8003AF70 27A50020 */ addiu $a1, $sp, 0x20
|
||||
/* 16374 8003AF74 0C019D80 */ jal guMtxCatF
|
||||
/* 16378 8003AF78 00A0302D */ daddu $a2, $a1, $zero
|
||||
.L8003AF7C:
|
||||
/* 1637C 8003AF7C C6000044 */ lwc1 $f0, 0x44($s0)
|
||||
/* 16380 8003AF80 461C0032 */ c.eq.s $f0, $f28
|
||||
/* 16384 8003AF84 00000000 */ nop
|
||||
/* 16388 8003AF88 4501000B */ bc1t .L8003AFB8
|
||||
/* 1638C 8003AF8C 00000000 */ nop
|
||||
/* 16390 8003AF90 E7BC0010 */ swc1 $f28, 0x10($sp)
|
||||
/* 16394 8003AF94 8E050048 */ lw $a1, 0x48($s0)
|
||||
/* 16398 8003AF98 4406E000 */ mfc1 $a2, $f28
|
||||
/* 1639C 8003AF9C 3C073F80 */ lui $a3, 0x3f80
|
||||
/* 163A0 8003AFA0 0C019EC8 */ jal guRotateF
|
||||
/* 163A4 8003AFA4 0220202D */ daddu $a0, $s1, $zero
|
||||
/* 163A8 8003AFA8 0220202D */ daddu $a0, $s1, $zero
|
||||
/* 163AC 8003AFAC 27A50020 */ addiu $a1, $sp, 0x20
|
||||
/* 163B0 8003AFB0 0C019D80 */ jal guMtxCatF
|
||||
/* 163B4 8003AFB4 00A0302D */ daddu $a2, $a1, $zero
|
||||
.L8003AFB8:
|
||||
/* 163B8 8003AFB8 C600004C */ lwc1 $f0, 0x4c($s0)
|
||||
/* 163BC 8003AFBC 461C0032 */ c.eq.s $f0, $f28
|
||||
/* 163C0 8003AFC0 00000000 */ nop
|
||||
/* 163C4 8003AFC4 4501000B */ bc1t .L8003AFF4
|
||||
/* 163C8 8003AFC8 00000000 */ nop
|
||||
/* 163CC 8003AFCC E7BC0010 */ swc1 $f28, 0x10($sp)
|
||||
/* 163D0 8003AFD0 8E050048 */ lw $a1, 0x48($s0)
|
||||
/* 163D4 8003AFD4 4406E000 */ mfc1 $a2, $f28
|
||||
/* 163D8 8003AFD8 3C073F80 */ lui $a3, 0x3f80
|
||||
/* 163DC 8003AFDC 0C019EC8 */ jal guRotateF
|
||||
/* 163E0 8003AFE0 0220202D */ daddu $a0, $s1, $zero
|
||||
/* 163E4 8003AFE4 0220202D */ daddu $a0, $s1, $zero
|
||||
/* 163E8 8003AFE8 27A50020 */ addiu $a1, $sp, 0x20
|
||||
/* 163EC 8003AFEC 0C019D80 */ jal guMtxCatF
|
||||
/* 163F0 8003AFF0 00A0302D */ daddu $a2, $a1, $zero
|
||||
.L8003AFF4:
|
||||
/* 163F4 8003AFF4 C6000054 */ lwc1 $f0, 0x54($s0)
|
||||
/* 163F8 8003AFF8 46000021 */ cvt.d.s $f0, $f0
|
||||
/* 163FC 8003AFFC 463A0002 */ mul.d $f0, $f0, $f26
|
||||
/* 16400 8003B000 00000000 */ nop
|
||||
/* 16404 8003B004 463E0032 */ c.eq.d $f0, $f30
|
||||
/* 16408 8003B008 00000000 */ nop
|
||||
/* 1640C 8003B00C 45000014 */ bc1f .L8003B060
|
||||
/* 16410 8003B010 00000000 */ nop
|
||||
/* 16414 8003B014 C6000058 */ lwc1 $f0, 0x58($s0)
|
||||
/* 16418 8003B018 C6020320 */ lwc1 $f2, 0x320($s0)
|
||||
/* 1641C 8003B01C 46020002 */ mul.s $f0, $f0, $f2
|
||||
/* 16420 8003B020 00000000 */ nop
|
||||
/* 16424 8003B024 46000021 */ cvt.d.s $f0, $f0
|
||||
/* 16428 8003B028 463A0002 */ mul.d $f0, $f0, $f26
|
||||
/* 1642C 8003B02C 00000000 */ nop
|
||||
/* 16430 8003B030 463E0032 */ c.eq.d $f0, $f30
|
||||
/* 16434 8003B034 00000000 */ nop
|
||||
/* 16438 8003B038 45000009 */ bc1f .L8003B060
|
||||
/* 1643C 8003B03C 00000000 */ nop
|
||||
/* 16440 8003B040 C600005C */ lwc1 $f0, 0x5c($s0)
|
||||
/* 16444 8003B044 46000021 */ cvt.d.s $f0, $f0
|
||||
/* 16448 8003B048 463A0002 */ mul.d $f0, $f0, $f26
|
||||
/* 1644C 8003B04C 00000000 */ nop
|
||||
/* 16450 8003B050 463E0032 */ c.eq.d $f0, $f30
|
||||
/* 16454 8003B054 00000000 */ nop
|
||||
/* 16458 8003B058 4501001C */ bc1t .L8003B0CC
|
||||
/* 1645C 8003B05C 00000000 */ nop
|
||||
.L8003B060:
|
||||
/* 16460 8003B060 C6060054 */ lwc1 $f6, 0x54($s0)
|
||||
/* 16464 8003B064 460031A1 */ cvt.d.s $f6, $f6
|
||||
/* 16468 8003B068 463A3182 */ mul.d $f6, $f6, $f26
|
||||
/* 1646C 8003B06C 00000000 */ nop
|
||||
/* 16470 8003B070 C604005C */ lwc1 $f4, 0x5c($s0)
|
||||
/* 16474 8003B074 46002121 */ cvt.d.s $f4, $f4
|
||||
/* 16478 8003B078 463A2102 */ mul.d $f4, $f4, $f26
|
||||
/* 1647C 8003B07C 00000000 */ nop
|
||||
/* 16480 8003B080 C6000058 */ lwc1 $f0, 0x58($s0)
|
||||
/* 16484 8003B084 C6020320 */ lwc1 $f2, 0x320($s0)
|
||||
/* 16488 8003B088 46020002 */ mul.s $f0, $f0, $f2
|
||||
/* 1648C 8003B08C 00000000 */ nop
|
||||
/* 16490 8003B090 46000021 */ cvt.d.s $f0, $f0
|
||||
/* 16494 8003B094 463A0002 */ mul.d $f0, $f0, $f26
|
||||
/* 16498 8003B098 00000000 */ nop
|
||||
/* 1649C 8003B09C 462031A0 */ cvt.s.d $f6, $f6
|
||||
/* 164A0 8003B0A0 46202120 */ cvt.s.d $f4, $f4
|
||||
/* 164A4 8003B0A4 44053000 */ mfc1 $a1, $f6
|
||||
/* 164A8 8003B0A8 44072000 */ mfc1 $a3, $f4
|
||||
/* 164AC 8003B0AC 46200020 */ cvt.s.d $f0, $f0
|
||||
/* 164B0 8003B0B0 44060000 */ mfc1 $a2, $f0
|
||||
/* 164B4 8003B0B4 0C019DF0 */ jal guScaleF
|
||||
/* 164B8 8003B0B8 0220202D */ daddu $a0, $s1, $zero
|
||||
/* 164BC 8003B0BC 0220202D */ daddu $a0, $s1, $zero
|
||||
/* 164C0 8003B0C0 27A50020 */ addiu $a1, $sp, 0x20
|
||||
/* 164C4 8003B0C4 0C019D80 */ jal guMtxCatF
|
||||
/* 164C8 8003B0C8 00A0302D */ daddu $a2, $a1, $zero
|
||||
.L8003B0CC:
|
||||
/* 164CC 8003B0CC 8E030000 */ lw $v1, ($s0)
|
||||
/* 164D0 8003B0D0 3C024000 */ lui $v0, 0x4000
|
||||
/* 164D4 8003B0D4 00621024 */ and $v0, $v1, $v0
|
||||
/* 164D8 8003B0D8 5440000E */ bnel $v0, $zero, .L8003B114
|
||||
/* 164DC 8003B0DC AFB70010 */ sw $s7, 0x10($sp)
|
||||
/* 164E0 8003B0E0 3C020100 */ lui $v0, 0x100
|
||||
/* 164E4 8003B0E4 00621024 */ and $v0, $v1, $v0
|
||||
/* 164E8 8003B0E8 5440FF72 */ bnel $v0, $zero, .L8003AEB4
|
||||
/* 164EC 8003B0EC 2652FFFF */ addiu $s2, $s2, -1
|
||||
/* 164F0 8003B0F0 4600A20D */ trunc.w.s $f8, $f20
|
||||
/* 164F4 8003B0F4 44054000 */ mfc1 $a1, $f8
|
||||
/* 164F8 8003B0F8 0000302D */ daddu $a2, $zero, $zero
|
||||
/* 164FC 8003B0FC AFB70010 */ sw $s7, 0x10($sp)
|
||||
/* 16500 8003B100 8E040024 */ lw $a0, 0x24($s0)
|
||||
/* 16504 8003B104 0C0B78F6 */ jal spr_draw_npc_sprite
|
||||
/* 16508 8003B108 00C0382D */ daddu $a3, $a2, $zero
|
||||
/* 1650C 8003B10C 0800EBAD */ j .L8003AEB4
|
||||
/* 16510 8003B110 2652FFFF */ addiu $s2, $s2, -1
|
||||
.L8003B114:
|
||||
/* 16514 8003B114 3C044000 */ lui $a0, 0x4000
|
||||
/* 16518 8003B118 34840001 */ ori $a0, $a0, 1
|
||||
/* 1651C 8003B11C 4600A20D */ trunc.w.s $f8, $f20
|
||||
/* 16520 8003B120 44054000 */ mfc1 $a1, $f8
|
||||
/* 16524 8003B124 0000302D */ daddu $a2, $zero, $zero
|
||||
/* 16528 8003B128 0C0B7710 */ jal spr_draw_player_sprite
|
||||
/* 1652C 8003B12C 00C0382D */ daddu $a3, $a2, $zero
|
||||
/* 16530 8003B130 0800EBAD */ j .L8003AEB4
|
||||
/* 16534 8003B134 2652FFFF */ addiu $s2, $s2, -1
|
||||
.L8003B138:
|
||||
/* 16538 8003B138 0C00F4EF */ jal func_8003D3BC
|
||||
/* 1653C 8003B13C 0200202D */ daddu $a0, $s0, $zero
|
||||
/* 16540 8003B140 8FBF00C0 */ lw $ra, 0xc0($sp)
|
||||
/* 16544 8003B144 8FB700BC */ lw $s7, 0xbc($sp)
|
||||
/* 16548 8003B148 8FB600B8 */ lw $s6, 0xb8($sp)
|
||||
/* 1654C 8003B14C 8FB500B4 */ lw $s5, 0xb4($sp)
|
||||
/* 16550 8003B150 8FB400B0 */ lw $s4, 0xb0($sp)
|
||||
/* 16554 8003B154 8FB300AC */ lw $s3, 0xac($sp)
|
||||
/* 16558 8003B158 8FB200A8 */ lw $s2, 0xa8($sp)
|
||||
/* 1655C 8003B15C 8FB100A4 */ lw $s1, 0xa4($sp)
|
||||
/* 16560 8003B160 8FB000A0 */ lw $s0, 0xa0($sp)
|
||||
/* 16564 8003B164 D7BE00F0 */ ldc1 $f30, 0xf0($sp)
|
||||
/* 16568 8003B168 D7BC00E8 */ ldc1 $f28, 0xe8($sp)
|
||||
/* 1656C 8003B16C D7BA00E0 */ ldc1 $f26, 0xe0($sp)
|
||||
/* 16570 8003B170 D7B800D8 */ ldc1 $f24, 0xd8($sp)
|
||||
/* 16574 8003B174 D7B600D0 */ ldc1 $f22, 0xd0($sp)
|
||||
/* 16578 8003B178 D7B400C8 */ ldc1 $f20, 0xc8($sp)
|
||||
/* 1657C 8003B17C 03E00008 */ jr $ra
|
||||
/* 16580 8003B180 27BD00F8 */ addiu $sp, $sp, 0xf8
|
@ -1,86 +0,0 @@
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
|
||||
glabel nuScExecuteAudio
|
||||
/* 39FE0 8005EBE0 27BDFFC8 */ addiu $sp, $sp, -0x38
|
||||
/* 39FE4 8005EBE4 AFB40028 */ sw $s4, 0x28($sp)
|
||||
/* 39FE8 8005EBE8 3C14800E */ lui $s4, %hi(D_800DA444)
|
||||
/* 39FEC 8005EBEC 2694A444 */ addiu $s4, $s4, %lo(D_800DA444)
|
||||
/* 39FF0 8005EBF0 AFB30024 */ sw $s3, 0x24($sp)
|
||||
/* 39FF4 8005EBF4 2693066C */ addiu $s3, $s4, 0x66c
|
||||
/* 39FF8 8005EBF8 AFB5002C */ sw $s5, 0x2c($sp)
|
||||
/* 39FFC 8005EBFC 269500A8 */ addiu $s5, $s4, 0xa8
|
||||
/* 3A000 8005EC00 AFB20020 */ sw $s2, 0x20($sp)
|
||||
/* 3A004 8005EC04 27B20014 */ addiu $s2, $sp, 0x14
|
||||
/* 3A008 8005EC08 AFBF0030 */ sw $ra, 0x30($sp)
|
||||
/* 3A00C 8005EC0C AFB1001C */ sw $s1, 0x1c($sp)
|
||||
/* 3A010 8005EC10 AFB00018 */ sw $s0, 0x18($sp)
|
||||
/* 3A014 8005EC14 0280202D */ daddu $a0, $s4, $zero
|
||||
.L8005EC18:
|
||||
/* 3A018 8005EC18 27A50010 */ addiu $a1, $sp, 0x10
|
||||
/* 3A01C 8005EC1C 0C0195BC */ jal osRecvMesg
|
||||
/* 3A020 8005EC20 24060001 */ addiu $a2, $zero, 1
|
||||
/* 3A024 8005EC24 3C02800A */ lui $v0, %hi(nuScPreNMIFlag)
|
||||
/* 3A028 8005EC28 9042A5B0 */ lbu $v0, %lo(nuScPreNMIFlag)($v0)
|
||||
/* 3A02C 8005EC2C 30420002 */ andi $v0, $v0, 2
|
||||
/* 3A030 8005EC30 14400031 */ bnez $v0, .L8005ECF8
|
||||
/* 3A034 8005EC34 00000000 */ nop
|
||||
/* 3A038 8005EC38 0C018634 */ jal osWritebackDCacheAll
|
||||
/* 3A03C 8005EC3C 0000802D */ daddu $s0, $zero, $zero
|
||||
/* 3A040 8005EC40 8E910668 */ lw $s1, 0x668($s4)
|
||||
/* 3A044 8005EC44 1220000B */ beqz $s1, .L8005EC74
|
||||
/* 3A048 8005EC48 00000000 */ nop
|
||||
/* 3A04C 8005EC4C 0C019714 */ jal osSpTaskYield
|
||||
/* 3A050 8005EC50 24100002 */ addiu $s0, $zero, 2
|
||||
/* 3A054 8005EC54 268400A8 */ addiu $a0, $s4, 0xa8
|
||||
/* 3A058 8005EC58 27A50014 */ addiu $a1, $sp, 0x14
|
||||
/* 3A05C 8005EC5C 0C0195BC */ jal osRecvMesg
|
||||
/* 3A060 8005EC60 24060001 */ addiu $a2, $zero, 1
|
||||
/* 3A064 8005EC64 0C01971C */ jal osSpTaskYielded
|
||||
/* 3A068 8005EC68 26240010 */ addiu $a0, $s1, 0x10
|
||||
/* 3A06C 8005EC6C 54400001 */ bnel $v0, $zero, .L8005EC74
|
||||
/* 3A070 8005EC70 24100001 */ addiu $s0, $zero, 1
|
||||
.L8005EC74:
|
||||
/* 3A074 8005EC74 8FA20010 */ lw $v0, 0x10($sp)
|
||||
/* 3A078 8005EC78 24440010 */ addiu $a0, $v0, 0x10
|
||||
/* 3A07C 8005EC7C 0C019684 */ jal osSpTaskLoad
|
||||
/* 3A080 8005EC80 AE620000 */ sw $v0, ($s3)
|
||||
/* 3A084 8005EC84 8FA40010 */ lw $a0, 0x10($sp)
|
||||
/* 3A088 8005EC88 0C019707 */ jal osSpTaskStartGo
|
||||
/* 3A08C 8005EC8C 24840010 */ addiu $a0, $a0, 0x10
|
||||
/* 3A090 8005EC90 02A0202D */ daddu $a0, $s5, $zero
|
||||
/* 3A094 8005EC94 0240282D */ daddu $a1, $s2, $zero
|
||||
/* 3A098 8005EC98 0C0195BC */ jal osRecvMesg
|
||||
/* 3A09C 8005EC9C 24060001 */ addiu $a2, $zero, 1
|
||||
/* 3A0A0 8005ECA0 8E620004 */ lw $v0, 4($s3)
|
||||
/* 3A0A4 8005ECA4 10400005 */ beqz $v0, .L8005ECBC
|
||||
/* 3A0A8 8005ECA8 AE600000 */ sw $zero, ($s3)
|
||||
/* 3A0AC 8005ECAC 2664FAAC */ addiu $a0, $s3, -0x554
|
||||
/* 3A0B0 8005ECB0 0240282D */ daddu $a1, $s2, $zero
|
||||
/* 3A0B4 8005ECB4 0C019608 */ jal osSendMesg
|
||||
/* 3A0B8 8005ECB8 24060001 */ addiu $a2, $zero, 1
|
||||
.L8005ECBC:
|
||||
/* 3A0BC 8005ECBC 24020001 */ addiu $v0, $zero, 1
|
||||
/* 3A0C0 8005ECC0 16020008 */ bne $s0, $v0, .L8005ECE4
|
||||
/* 3A0C4 8005ECC4 24020002 */ addiu $v0, $zero, 2
|
||||
/* 3A0C8 8005ECC8 26300010 */ addiu $s0, $s1, 0x10
|
||||
/* 3A0CC 8005ECCC 0C019684 */ jal osSpTaskLoad
|
||||
/* 3A0D0 8005ECD0 0200202D */ daddu $a0, $s0, $zero
|
||||
/* 3A0D4 8005ECD4 0C019707 */ jal osSpTaskStartGo
|
||||
/* 3A0D8 8005ECD8 0200202D */ daddu $a0, $s0, $zero
|
||||
/* 3A0DC 8005ECDC 08017B3E */ j .L8005ECF8
|
||||
/* 3A0E0 8005ECE0 00000000 */ nop
|
||||
.L8005ECE4:
|
||||
/* 3A0E4 8005ECE4 16020004 */ bne $s0, $v0, .L8005ECF8
|
||||
/* 3A0E8 8005ECE8 02A0202D */ daddu $a0, $s5, $zero
|
||||
/* 3A0EC 8005ECEC 0240282D */ daddu $a1, $s2, $zero
|
||||
/* 3A0F0 8005ECF0 0C019608 */ jal osSendMesg
|
||||
/* 3A0F4 8005ECF4 24060001 */ addiu $a2, $zero, 1
|
||||
.L8005ECF8:
|
||||
/* 3A0F8 8005ECF8 8FA20010 */ lw $v0, 0x10($sp)
|
||||
/* 3A0FC 8005ECFC 8C440050 */ lw $a0, 0x50($v0)
|
||||
/* 3A100 8005ED00 8C450054 */ lw $a1, 0x54($v0)
|
||||
/* 3A104 8005ED04 0C019608 */ jal osSendMesg
|
||||
/* 3A108 8005ED08 24060001 */ addiu $a2, $zero, 1
|
||||
/* 3A10C 8005ED0C 08017B06 */ j .L8005EC18
|
||||
/* 3A110 8005ED10 0280202D */ daddu $a0, $s4, $zero
|
@ -1,78 +0,0 @@
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
|
||||
glabel nuScExecuteGraphics
|
||||
/* 3A114 8005ED14 27BDFFD8 */ addiu $sp, $sp, -0x28
|
||||
/* 3A118 8005ED18 AFB00018 */ sw $s0, 0x18($sp)
|
||||
/* 3A11C 8005ED1C 3C10800E */ lui $s0, %hi(D_800DA47C)
|
||||
/* 3A120 8005ED20 2610A47C */ addiu $s0, $s0, %lo(D_800DA47C)
|
||||
/* 3A124 8005ED24 AFB1001C */ sw $s1, 0x1c($sp)
|
||||
/* 3A128 8005ED28 27B10014 */ addiu $s1, $sp, 0x14
|
||||
/* 3A12C 8005ED2C AFBF0020 */ sw $ra, 0x20($sp)
|
||||
/* 3A130 8005ED30 0200202D */ daddu $a0, $s0, $zero
|
||||
.L8005ED34:
|
||||
/* 3A134 8005ED34 27A50010 */ addiu $a1, $sp, 0x10
|
||||
/* 3A138 8005ED38 0C0195BC */ jal osRecvMesg
|
||||
/* 3A13C 8005ED3C 24060001 */ addiu $a2, $zero, 1
|
||||
/* 3A140 8005ED40 3C02800A */ lui $v0, %hi(nuScPreNMIFlag)
|
||||
/* 3A144 8005ED44 9042A5B0 */ lbu $v0, %lo(nuScPreNMIFlag)($v0)
|
||||
/* 3A148 8005ED48 30420002 */ andi $v0, $v0, 2
|
||||
/* 3A14C 8005ED4C 14400032 */ bnez $v0, .L8005EE18
|
||||
/* 3A150 8005ED50 00000000 */ nop
|
||||
/* 3A154 8005ED54 0C017C48 */ jal nuScWaitTaskReady
|
||||
/* 3A158 8005ED58 8FA40010 */ lw $a0, 0x10($sp)
|
||||
/* 3A15C 8005ED5C 0C018250 */ jal osSetIntMask
|
||||
/* 3A160 8005ED60 24040001 */ addiu $a0, $zero, 1
|
||||
/* 3A164 8005ED64 8E030634 */ lw $v1, 0x634($s0)
|
||||
/* 3A168 8005ED68 1060000C */ beqz $v1, .L8005ED9C
|
||||
/* 3A16C 8005ED6C 0040202D */ daddu $a0, $v0, $zero
|
||||
/* 3A170 8005ED70 8FA20010 */ lw $v0, 0x10($sp)
|
||||
/* 3A174 8005ED74 0C018250 */ jal osSetIntMask
|
||||
/* 3A178 8005ED78 AE020638 */ sw $v0, 0x638($s0)
|
||||
/* 3A17C 8005ED7C 260400E0 */ addiu $a0, $s0, 0xe0
|
||||
/* 3A180 8005ED80 27A50014 */ addiu $a1, $sp, 0x14
|
||||
/* 3A184 8005ED84 0C0195BC */ jal osRecvMesg
|
||||
/* 3A188 8005ED88 24060001 */ addiu $a2, $zero, 1
|
||||
/* 3A18C 8005ED8C 0C018250 */ jal osSetIntMask
|
||||
/* 3A190 8005ED90 24040001 */ addiu $a0, $zero, 1
|
||||
/* 3A194 8005ED94 0040202D */ daddu $a0, $v0, $zero
|
||||
/* 3A198 8005ED98 AE000638 */ sw $zero, 0x638($s0)
|
||||
.L8005ED9C:
|
||||
/* 3A19C 8005ED9C 0C018250 */ jal osSetIntMask
|
||||
/* 3A1A0 8005EDA0 00000000 */ nop
|
||||
/* 3A1A4 8005EDA4 0C018250 */ jal osSetIntMask
|
||||
/* 3A1A8 8005EDA8 24040001 */ addiu $a0, $zero, 1
|
||||
/* 3A1AC 8005EDAC 8FA30010 */ lw $v1, 0x10($sp)
|
||||
/* 3A1B0 8005EDB0 0040202D */ daddu $a0, $v0, $zero
|
||||
/* 3A1B4 8005EDB4 0C018250 */ jal osSetIntMask
|
||||
/* 3A1B8 8005EDB8 AE030630 */ sw $v1, 0x630($s0)
|
||||
/* 3A1BC 8005EDBC 8FA40010 */ lw $a0, 0x10($sp)
|
||||
/* 3A1C0 8005EDC0 0C019684 */ jal osSpTaskLoad
|
||||
/* 3A1C4 8005EDC4 24840010 */ addiu $a0, $a0, 0x10
|
||||
/* 3A1C8 8005EDC8 8FA40010 */ lw $a0, 0x10($sp)
|
||||
/* 3A1CC 8005EDCC 0C019707 */ jal osSpTaskStartGo
|
||||
/* 3A1D0 8005EDD0 24840010 */ addiu $a0, $a0, 0x10
|
||||
/* 3A1D4 8005EDD4 26040070 */ addiu $a0, $s0, 0x70
|
||||
/* 3A1D8 8005EDD8 0220282D */ daddu $a1, $s1, $zero
|
||||
/* 3A1DC 8005EDDC 0C0195BC */ jal osRecvMesg
|
||||
/* 3A1E0 8005EDE0 24060001 */ addiu $a2, $zero, 1
|
||||
/* 3A1E4 8005EDE4 0C018250 */ jal osSetIntMask
|
||||
/* 3A1E8 8005EDE8 24040001 */ addiu $a0, $zero, 1
|
||||
/* 3A1EC 8005EDEC 0040202D */ daddu $a0, $v0, $zero
|
||||
/* 3A1F0 8005EDF0 0C018250 */ jal osSetIntMask
|
||||
/* 3A1F4 8005EDF4 AE000630 */ sw $zero, 0x630($s0)
|
||||
/* 3A1F8 8005EDF8 8FA20010 */ lw $v0, 0x10($sp)
|
||||
/* 3A1FC 8005EDFC 8C420008 */ lw $v0, 8($v0)
|
||||
/* 3A200 8005EE00 30420002 */ andi $v0, $v0, 2
|
||||
/* 3A204 8005EE04 14400004 */ bnez $v0, .L8005EE18
|
||||
/* 3A208 8005EE08 260400A8 */ addiu $a0, $s0, 0xa8
|
||||
/* 3A20C 8005EE0C 0220282D */ daddu $a1, $s1, $zero
|
||||
/* 3A210 8005EE10 0C0195BC */ jal osRecvMesg
|
||||
/* 3A214 8005EE14 24060001 */ addiu $a2, $zero, 1
|
||||
.L8005EE18:
|
||||
/* 3A218 8005EE18 8FA50010 */ lw $a1, 0x10($sp)
|
||||
/* 3A21C 8005EE1C 8CA40050 */ lw $a0, 0x50($a1)
|
||||
/* 3A220 8005EE20 0C019608 */ jal osSendMesg
|
||||
/* 3A224 8005EE24 24060001 */ addiu $a2, $zero, 1
|
||||
/* 3A228 8005EE28 08017B4D */ j .L8005ED34
|
||||
/* 3A22C 8005EE2C 0200202D */ daddu $a0, $s0, $zero
|
@ -357,7 +357,7 @@ segments:
|
||||
- [0x6FA30, .data, os/seteventmesg]
|
||||
- [0x6FA40, .data, os/siacs]
|
||||
- [0x6FA50, .data, os/setthreadpri]
|
||||
- [0x6FA70, .data, os/timerintr] # libultra data
|
||||
- [0x6FA70, .data, os/timerintr]
|
||||
- [auto, .data, os/vimgr]
|
||||
- [auto, .data, os/vitbl]
|
||||
- [auto, .data, os/guRotate]
|
||||
|
Loading…
Reference in New Issue
Block a user