mirror of
https://github.com/Xeeynamo/sotn-decomp.git
synced 2024-10-06 18:13:30 +00:00
PlayerIsWithinHitbox deduplication for no0, st0, nz0 (#1755)
Some checks are pending
Format code / format (push) Waiting to run
Build C code / extract-assets (push) Waiting to run
Build C code / build-linux (push) Blocked by required conditions
Build C code / build-macos (push) Blocked by required conditions
Build C code / build-windows (push) Blocked by required conditions
Build C code / build-linux-lle (push) Blocked by required conditions
Build Saturn version / build-and-test-saturn (push) Waiting to run
Build Saturn version / function-finder-saturn (push) Waiting to run
Build Debug Module tool / build (push) Waiting to run
Build PSX and PSP version / build-and-test (pspeu, hd) (push) Waiting to run
Build PSX and PSP version / build-and-test (pspeu, pspeu) (push) Waiting to run
Build PSX and PSP version / build-and-test (us, us) (push) Waiting to run
Build PSX and PSP version / generate-progress-report (pspeu, hd) (push) Blocked by required conditions
Build PSX and PSP version / generate-progress-report (pspeu, pspeu) (push) Blocked by required conditions
Build PSX and PSP version / generate-progress-report (us, us) (push) Blocked by required conditions
Build PSX and PSP version / generate-duplicates-report (us, us) (push) Blocked by required conditions
Build PSX and PSP version / generate-duplicates-report-psp (pspeu, pspeu) (push) Blocked by required conditions
Some checks are pending
Format code / format (push) Waiting to run
Build C code / extract-assets (push) Waiting to run
Build C code / build-linux (push) Blocked by required conditions
Build C code / build-macos (push) Blocked by required conditions
Build C code / build-windows (push) Blocked by required conditions
Build C code / build-linux-lle (push) Blocked by required conditions
Build Saturn version / build-and-test-saturn (push) Waiting to run
Build Saturn version / function-finder-saturn (push) Waiting to run
Build Debug Module tool / build (push) Waiting to run
Build PSX and PSP version / build-and-test (pspeu, hd) (push) Waiting to run
Build PSX and PSP version / build-and-test (pspeu, pspeu) (push) Waiting to run
Build PSX and PSP version / build-and-test (us, us) (push) Waiting to run
Build PSX and PSP version / generate-progress-report (pspeu, hd) (push) Blocked by required conditions
Build PSX and PSP version / generate-progress-report (pspeu, pspeu) (push) Blocked by required conditions
Build PSX and PSP version / generate-progress-report (us, us) (push) Blocked by required conditions
Build PSX and PSP version / generate-duplicates-report (us, us) (push) Blocked by required conditions
Build PSX and PSP version / generate-duplicates-report-psp (pspeu, pspeu) (push) Blocked by required conditions
1. func_801B0AA4 decompilation 2. PlayerIsWithinHitbox deduplication for no0, st0, nz0
This commit is contained in:
parent
fffde1f095
commit
5fab2ecb0e
@ -43,6 +43,7 @@ unk14_startFrame = 0x80181BF0;
|
||||
unk14_lifetime = 0x80181BF4;
|
||||
g_olroxDroolCollOffsets = 0x80181BFC;
|
||||
g_UnkEntityAnimData = 0x80181C04;
|
||||
g_StoneDoorTiles = 0x80181C90;
|
||||
anim_bone_rot = 0x801821DC;
|
||||
steps = 0x801825AC;
|
||||
init_velocity_x = 0x801825B4;
|
||||
@ -52,7 +53,7 @@ sensors_special = 0x8018275C;
|
||||
sensors_move = 0x80182764;
|
||||
sprites_nz0_3 = 0x801BEBB0;
|
||||
g_UnkPrimHelperRot = 0x801C184C;
|
||||
func_801A7E2C = 0x801C1968;
|
||||
PlayerIsWithinHitbox = 0x801C1968;
|
||||
func_801B0AA4 = 0x801C19EC;
|
||||
MakeExplosions = 0x801C3334;
|
||||
EntityWargExplosionPuffOpaque = 0x801C33F4;
|
||||
|
@ -7,6 +7,7 @@ g_HeartDropArray = 0x801813B0;
|
||||
actor_names = 0x8018146C;
|
||||
g_eBlueDoorUV = 0x801826B8;
|
||||
g_eBlueDoorTiles = 0x801826D0;
|
||||
PlayerIsWithinHitbox = 0x801B0A20;
|
||||
EntityWargExplosionPuffOpaque = 0x801B3C38;
|
||||
EntityBossFightManager = 0x801B3FCC;
|
||||
EntityBossRoomBlock = 0x801B4518;
|
||||
|
@ -18,6 +18,7 @@ D_80183D1C = 0x80183D1C;
|
||||
D_80197F80 = 0x80197F80;
|
||||
D_8019A40C = 0x8019A40C;
|
||||
c_HeartPrizes = 0x801A7C84;
|
||||
PlayerIsWithinHitbox = 0x801A7E2C;
|
||||
EntityLockCamera = 0x801A7EB0;
|
||||
ST0_EntityCutscene = 0x801A9210;
|
||||
EntityCutscene = 0x801AA290;
|
||||
|
@ -3,21 +3,148 @@
|
||||
|
||||
INCLUDE_ASM("st/no0/nonmatchings/first_c_file", func_us_801C1854);
|
||||
|
||||
bool func_801A7E2C(Entity* self) {
|
||||
s16 diffX = PLAYER.posX.i.hi - self->posX.i.hi;
|
||||
#include "../player_is_within_hitbox.h"
|
||||
|
||||
diffX = abs(diffX);
|
||||
if (self->hitboxWidth >= diffX) {
|
||||
diffX = PLAYER.posY.i.hi - self->posY.i.hi;
|
||||
diffX = abs(diffX);
|
||||
return self->hitboxHeight >= diffX;
|
||||
extern u16 D_us_80180ADC[];
|
||||
extern u8 D_us_80180E94[];
|
||||
extern u8 D_us_80180E9C[];
|
||||
extern u16 D_us_80180EA4[];
|
||||
|
||||
void func_801B0AA4(Entity* self) {
|
||||
Tilemap* tilemap = &g_Tilemap;
|
||||
u16* dataPtr;
|
||||
// These vars are all reused for things; hard to make good names :(
|
||||
u16 var_s2;
|
||||
u16 var_s3;
|
||||
s16 var_s4;
|
||||
|
||||
var_s3 = self->params;
|
||||
if (!self->step) {
|
||||
InitializeEntity(D_us_80180ADC);
|
||||
self->hitboxState = 1;
|
||||
var_s2 = self->ext.et_801B0AA4.unk7C = D_us_80180E9C[var_s3];
|
||||
if (var_s2) {
|
||||
self->hitboxWidth = D_us_80180E94[var_s3];
|
||||
self->hitboxHeight = 0x14;
|
||||
} else {
|
||||
self->hitboxWidth = 0x14;
|
||||
self->hitboxHeight = D_us_80180E94[var_s3];
|
||||
}
|
||||
self->ext.et_801B0AA4.unk88 = 2;
|
||||
}
|
||||
|
||||
if (PlayerIsWithinHitbox(self)) {
|
||||
var_s2 = GetSideToPlayer();
|
||||
if (self->ext.et_801B0AA4.unk7C) {
|
||||
var_s2 &= 2;
|
||||
var_s2 *= 2;
|
||||
} else {
|
||||
var_s2 &= 1;
|
||||
var_s2 *= 4;
|
||||
}
|
||||
if (var_s2 != self->ext.et_801B0AA4.unk88) {
|
||||
self->ext.et_801B0AA4.unk88 = var_s2;
|
||||
var_s3 = (var_s3 << 3) + var_s2;
|
||||
dataPtr = &D_us_80180EA4[var_s3];
|
||||
self->ext.et_801B0AA4.unk7E = 0;
|
||||
self->ext.et_801B0AA4.unk8A = 0x10;
|
||||
var_s3 = tilemap->scrollX.i.hi;
|
||||
if (var_s3 != *dataPtr && self->ext.et_801B0AA4.unk7C) {
|
||||
self->ext.et_801B0AA4.unk7E = 1;
|
||||
tilemap->x = var_s3;
|
||||
} else {
|
||||
tilemap->x = *dataPtr;
|
||||
}
|
||||
self->ext.et_801B0AA4.unk80 = *dataPtr++;
|
||||
var_s2 = tilemap->scrollY.i.hi - 4;
|
||||
if (var_s2 != *dataPtr && !self->ext.et_801B0AA4.unk7C) {
|
||||
self->ext.et_801B0AA4.unk7E |= 2;
|
||||
tilemap->y = var_s2;
|
||||
} else {
|
||||
tilemap->y = *dataPtr;
|
||||
}
|
||||
self->ext.et_801B0AA4.unk82 = *dataPtr++;
|
||||
var_s3 += 0x100;
|
||||
if (var_s3 != *dataPtr && self->ext.et_801B0AA4.unk7C) {
|
||||
self->ext.et_801B0AA4.unk7E |= 4;
|
||||
tilemap->width = var_s3;
|
||||
} else {
|
||||
tilemap->width = *dataPtr;
|
||||
}
|
||||
self->ext.et_801B0AA4.unk84 = *dataPtr++;
|
||||
var_s2 += 0x100;
|
||||
if (var_s2 != *dataPtr && !self->ext.et_801B0AA4.unk7C) {
|
||||
self->ext.et_801B0AA4.unk7E |= 8;
|
||||
tilemap->height = var_s2;
|
||||
} else {
|
||||
tilemap->height = *dataPtr;
|
||||
}
|
||||
self->ext.et_801B0AA4.unk86 = *dataPtr;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
self->ext.et_801B0AA4.unk88 = 2;
|
||||
}
|
||||
// Unique for NO0
|
||||
if (self->params == 4) {
|
||||
self->ext.et_801B0AA4.unk8A = 1U;
|
||||
}
|
||||
|
||||
if (self->ext.et_801B0AA4.unk7E) {
|
||||
if (!(--self->ext.et_801B0AA4.unk8A)) {
|
||||
tilemap->x = self->ext.et_801B0AA4.unk80;
|
||||
tilemap->y = self->ext.et_801B0AA4.unk82;
|
||||
tilemap->width = self->ext.et_801B0AA4.unk84;
|
||||
tilemap->height = self->ext.et_801B0AA4.unk86;
|
||||
self->ext.et_801B0AA4.unk7E = 0;
|
||||
return;
|
||||
}
|
||||
var_s4 = (self->ext.et_801B0AA4.unk80 - tilemap->x) / 2;
|
||||
if (var_s4) {
|
||||
if (var_s4 > 0) {
|
||||
tilemap->x += 2;
|
||||
} else {
|
||||
tilemap->x -= 2;
|
||||
}
|
||||
} else {
|
||||
tilemap->x = self->ext.et_801B0AA4.unk80;
|
||||
self->ext.et_801B0AA4.unk7E &= ~1;
|
||||
}
|
||||
var_s4 = (self->ext.et_801B0AA4.unk82 - tilemap->y) / 2;
|
||||
if (var_s4) {
|
||||
if (var_s4 > 0) {
|
||||
tilemap->y += 2;
|
||||
} else {
|
||||
tilemap->y -= 2;
|
||||
}
|
||||
} else {
|
||||
tilemap->y = self->ext.et_801B0AA4.unk82;
|
||||
self->ext.et_801B0AA4.unk7E &= ~2;
|
||||
}
|
||||
var_s4 = (self->ext.et_801B0AA4.unk84 - tilemap->width) / 2;
|
||||
if (var_s4) {
|
||||
if (var_s4 > 0) {
|
||||
tilemap->width += 2;
|
||||
} else {
|
||||
tilemap->width -= 2;
|
||||
}
|
||||
} else {
|
||||
tilemap->width = self->ext.et_801B0AA4.unk84;
|
||||
self->ext.et_801B0AA4.unk7E &= ~4;
|
||||
}
|
||||
var_s4 = (self->ext.et_801B0AA4.unk86 - tilemap->height) / 2;
|
||||
if (var_s4) {
|
||||
if (var_s4 > 0) {
|
||||
tilemap->height += 2;
|
||||
} else {
|
||||
tilemap->height -= 2;
|
||||
}
|
||||
} else {
|
||||
tilemap->height = self->ext.et_801B0AA4.unk86;
|
||||
self->ext.et_801B0AA4.unk7E &= ~8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM("st/no0/nonmatchings/first_c_file", func_801B0AA4);
|
||||
|
||||
INCLUDE_ASM("st/no0/nonmatchings/first_c_file", func_us_801C1E48);
|
||||
|
||||
s16 func_us_801C1F98(Primitive* prim, s16 arg1) {
|
||||
|
@ -30,6 +30,7 @@ typedef enum EntityIDs {
|
||||
/* 0x15 */ E_GREY_PUFF = 0x15,
|
||||
/* 0x17 */ E_BG_LIGHTNING = 0x17,
|
||||
/* 0x1E */ E_CAVERN_DOOR_LEVER_UNK0 = 0x1E,
|
||||
/* 0x20 */ E_DUMMY_20 = 0x20,
|
||||
/* 0x27 */ E_FALLING_ROCK_2 = 0x27,
|
||||
/* 0x2E */ E_ID_2E = 0x2E,
|
||||
/* 0x30 */ E_ID_30 = 0x30,
|
||||
|
@ -26,18 +26,7 @@ void func_801B0958(Entity* self) {
|
||||
AnimateEntity(objInit->animFrames, self);
|
||||
}
|
||||
|
||||
bool func_801B0A20(Entity* self) {
|
||||
s16 diffX = PLAYER.posX.i.hi - self->posX.i.hi;
|
||||
|
||||
diffX = abs(diffX);
|
||||
if (self->hitboxWidth >= diffX) {
|
||||
diffX = PLAYER.posY.i.hi - self->posY.i.hi;
|
||||
diffX = abs(diffX);
|
||||
return self->hitboxHeight >= diffX;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
#include "../player_is_within_hitbox.h"
|
||||
|
||||
void func_801B0AA4(Entity* self) {
|
||||
Tilemap* tilemap = &g_Tilemap;
|
||||
@ -62,7 +51,7 @@ void func_801B0AA4(Entity* self) {
|
||||
self->ext.et_801B0AA4.unk88 = 2;
|
||||
}
|
||||
|
||||
if (func_801B0A20(self)) {
|
||||
if (PlayerIsWithinHitbox(self)) {
|
||||
var_s2 = GetSideToPlayer();
|
||||
if (self->ext.et_801B0AA4.unk7C) {
|
||||
var_s2 &= 2;
|
||||
|
13
src/st/player_is_within_hitbox.h
Normal file
13
src/st/player_is_within_hitbox.h
Normal file
@ -0,0 +1,13 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
bool PlayerIsWithinHitbox(Entity* self) {
|
||||
s16 diffX = PLAYER.posX.i.hi - self->posX.i.hi;
|
||||
|
||||
diffX = abs(diffX);
|
||||
if (self->hitboxWidth >= diffX) {
|
||||
diffX = PLAYER.posY.i.hi - self->posY.i.hi;
|
||||
diffX = abs(diffX);
|
||||
return self->hitboxHeight >= diffX;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
@ -21,18 +21,7 @@ void func_801A7D64(Entity* self) {
|
||||
AnimateEntity(obj->animFrames, self);
|
||||
}
|
||||
|
||||
bool func_801A7E2C(Entity* self) {
|
||||
s16 diffX = PLAYER.posX.i.hi - self->posX.i.hi;
|
||||
|
||||
diffX = abs(diffX);
|
||||
if (self->hitboxWidth >= diffX) {
|
||||
diffX = PLAYER.posY.i.hi - self->posY.i.hi;
|
||||
diffX = abs(diffX);
|
||||
return self->hitboxHeight >= diffX;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
#include "../player_is_within_hitbox.h"
|
||||
|
||||
extern u16 D_801805B0[];
|
||||
extern u8 D_8018065C[];
|
||||
@ -75,7 +64,7 @@ void EntityLockCamera(Entity* self) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (func_801A7E2C(self) != 0) {
|
||||
if (PlayerIsWithinHitbox(self) != 0) {
|
||||
facingLeft = GetSideToPlayer();
|
||||
if (self->ext.lockCamera.unk7C) {
|
||||
facingLeft &= 2;
|
||||
|
Loading…
Reference in New Issue
Block a user