Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
71432b3
Build All Versions Together
hohle Sep 9, 2025
ef27c5a
Separate DAI Asset Conflicts
hohle Oct 7, 2025
ccc2a0e
BO6 Richter Import
hohle Aug 30, 2025
654c5d7
BO6 Richter Import
hohle Aug 30, 2025
6cae929
bo6
hohle Apr 9, 2025
b2bfe94
segments
hohle Aug 11, 2025
1862896
found g_Ric, RIC, and the rest
hohle Aug 12, 2025
254a65f
a few more
hohle Aug 13, 2025
5147383
e_room_bg, e_lock_camera
hohle Aug 14, 2025
3acda71
Most of the BO6 Shared Segments and a Bit More
hohle Aug 21, 2025
6e07336
more bo6 wrangling
hohle Aug 21, 2025
48de57d
more richter
hohle Aug 25, 2025
e6b6a34
g_Ric symbols
hohle Aug 26, 2025
27af6e7
mapping ric steps
hohle Aug 28, 2025
d3dc680
more bo6
hohle Aug 28, 2025
f420f6c
moved import into separate branch
hohle Aug 30, 2025
75cd297
removing blit and e_collect2
hohle Sep 1, 2025
d93bf98
decompin
hohle Sep 3, 2025
270e493
more decompin
hohle Sep 3, 2025
7227044
more functions
hohle Sep 9, 2025
e1238a5
additional symbols
hohle Sep 9, 2025
f4f4123
cleanup
hohle Sep 10, 2025
0bd6e30
removed psp bo6. func_us_801A9944
hohle Sep 16, 2025
d2e4abc
more bo6
hohle Sep 17, 2025
52937cc
a few more
hohle Sep 18, 2025
527f132
more
hohle Sep 19, 2025
95cdfd3
a few more
hohle Sep 22, 2025
b4b52ff
more bo6
hohle Sep 27, 2025
99063bf
cutscene cleanup
hohle Sep 27, 2025
c4e8c54
additional functions, us_39144 split
hohle Sep 30, 2025
592c7be
more richter
hohle Oct 1, 2025
9ac78b0
duplicate richter functions
hohle Oct 3, 2025
344c717
mapping header, assets, etc.
hohle Oct 6, 2025
e9f7efd
duplicate
hohle Oct 6, 2025
e3c23d7
RicEntitySubwpnHolyWater
hohle Oct 7, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions .github/workflows/validate-and-report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,46 @@ jobs:
if: github.ref == 'refs/heads/master' && github.event_name == 'push'
run: .venv/bin/python3 tools/progress.py --version ${{ matrix.version }}

# unlike the matrix build above, this task builds all versions of the
# game from the same build graph
build-all:
# Building and testing cannot work if the repository owner is not Xeeynamo
# due to the missing secrets to clone the CI dependencies
if: github.repository == 'Xeeynamo/sotn-decomp'
runs-on: ubuntu-latest
env:
DISCORD_PROGRESS_WEBHOOK: ${{ secrets.DISCORD_PROGRESS_WEBHOOK }}
steps:
- name: Install requirements
run: sudo apt-get install gcc-mipsel-linux-gnu
- name: Clone main repo (PR)
if: github.event_name == 'pull_request_target'
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
submodules: false
- name: Clone main repo
if: github.event_name != 'pull_request_target'
uses: actions/checkout@v4
with:
ref: ${{ github.ref }}
submodules: false
- name: Install tools requirements
run: make update-dependencies
- name: Get PSX dependencies
uses: actions/cache@v4
id: get-dependencies
with:
path: 'disks/dependencies'
key: sotn-pspeu-deps
- name: Setting up dependencies
working-directory: disks
run: cat dependencies/* | tar -zxf -
- name: Extract dependencies
run: make extract_disk
- name: Build binaries and check if they match
run: make

generate-duplicates-report:
strategy:
matrix:
Expand Down
11 changes: 5 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ endif

.PHONY: all
all: ##@ (Default) build and check
all: build check
all: build_all check

.PHONY: extract_assets
extract_assets:
Expand Down Expand Up @@ -157,19 +157,18 @@ build_pspeu: $(SOTNSTR_APP) $(SOTNASSETS) $(ALLEGREX) $(MWCCPSP) $(MWCCGAP_APP)
ninja
.PHONY: build_all
build_all:
$(MAKE) VERSION=us
$(MAKE) VERSION=pspeu
$(MAKE) VERSION=hd
$(PYTHON) tools/builds/gen.py
ninja

.PHONY: clean clean_asm
clean_asm:
git clean -fdx $(ASM_DIR)
clean: ##@ clean extracted files, assets, and build artifacts
clean: clean_asm
git clean -fdx assets/
git clean -fdx build/$(VERSION)/
git clean -fdx build/
git clean -fdx src/**/gen/
git clean -fdx config/*$(VERSION)*
git clean -fdx config/
git clean -fdx function_calls/
git clean -fdx sotn_calltree.txt

Expand Down
4 changes: 2 additions & 2 deletions config/assets.pspeu.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,7 @@ files:
- [0x2B328, layers, layers]
- [0x2B608, palette, pal_stained_glass, 16] # 0x204
- [0x2B628, paldef, palette_def]
- [0x2B6F8, gfx_banks, graphics_banks]
- [0x2B6F8, gfx_banks, psp/graphics_banks]
- [0x2B8E0, skip]
- [0x2BC20, rooms, rooms]
- [0x2BCF8, cutscene, cutscene_script_it]
Expand All @@ -350,7 +350,7 @@ files:
# These gfx palette assignments are unconfirmed.
# They match psx, but the .png does not render correctly for psp.
- [0x2C588, cmpgfx, gfx_stage_name_jp_sm, 128, 128, 4]
- [0x2C880, cmpgfx, gfx_stage_name_jp_lg, 128, 128, 4]
- [0x2C880, cmpgfx, psp/gfx_stage_name_jp_lg, 128, 128, 4]
- [0x2CD10, cmpgfx, gfx_confessional, 128, 128, 4]
- [0x2DF38, cmpgfx, gfx_chair, 128, 128, 4, 0x3ADF0]
- [0x2EB18, cmpgfx, gfx_corner_guard, 128, 128, 4, 0x3AE50]
Expand Down
8 changes: 6 additions & 2 deletions config/assets.us.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -257,14 +257,14 @@ files:
- [0x8C, palette, pal_stained_glass, 16] # 0x204
- [0xAC, paldef, palette_def]
- [0x178, layers, layers]
- [0x468, gfx_banks, graphics_banks]
- [0x468, gfx_banks, us/graphics_banks]
- [0x670, layout, entity_layouts]
- [0x818, skip]
- [0x2358, rooms, rooms]
- [0x2F44, skip]
- [0x3A94, cutscene, cutscene_script_psx]
- [0x3C18, binary, cutscene_data_psx] # May be gfx data, unsure
- [0x3F20, cmpgfx, gfx_stage_name_jp_lg, 128, 128, 4]
- [0x3F20, cmpgfx, us/gfx_stage_name_jp_lg, 128, 128, 4]
- [0x8498, cmpgfx, gfx_confessional, 128, 128, 4]
- [0x96BC, cmpgfx, gfx_chair, 128, 128, 4, 0x1692C]
- [0xA298, cmpgfx, gfx_corner_guard, 128, 128, 4, 0x16BAC]
Expand Down Expand Up @@ -874,6 +874,10 @@ files:
- start: 0
vram: 0x80180000
assets:
- [0xDC, layers, layers]
- [0x104, gfx_banks, graphics_banks]
- [0x180, layout, entity_layouts]
- [0x328, skip]
- [0x1204, rooms, rooms]
- [0x1210, skip]
- target: disks/us/BOSS/RBO3/RBO3.BIN
Expand Down
7 changes: 5 additions & 2 deletions config/splat.us.bobo6.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ segments:
align: 4
subalign: 4
subsegments:
- [0x0, data]
- [0x0, .data, header]
- [0x180, .data, gen/e_laydef]
- [0x328, .data, e_init]
- [0x4D8, data, background_block_init]
- [0x510, .data, e_red_door_tiles]
Expand All @@ -58,7 +59,7 @@ segments:
- [0x1210, data, richter]
- [0x1284, data, us_39144]
- [0x2F70, .data, e_life_up]
- [0x2FC4, data, gen/e_layout]
- [0x2FC4, .data, gen/e_layout]
- [0x303C, data]
- [0x1F9A0, data, tile_data]
- [0x239B0, data]
Expand All @@ -69,6 +70,7 @@ segments:
- [0x264BC, .rodata, e_stage_name]
- [0x264F0, .rodata, richter]
- [0x26C18, .rodata, us_39144]
- [0x26E20, .rodata, us_3E79C]
- [0x27044, .rodata, prim_helpers]
- [0x2704C, .rodata, e_life_up]
- [0x27068, c, e_room_bg]
Expand All @@ -90,6 +92,7 @@ segments:
- [0x34BD0, c, richter]
- [0x39134, c, unused]
- [0x39144, c, us_39144]
- [0x3E79C, c, us_3E79C]
- [0x4D674, c, prim_helpers]
- [0x4DEA4, c, e_life_up]
- [0x4E758, bss] # unused
Expand Down
66 changes: 66 additions & 0 deletions config/symbols.pspeu.bobo6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
CreateEntityFromLayout = 0x09237700; // source=match
CreateEntityWhenInVerticalRange = 0x09237820; // source=match
CreateEntityWhenInHorizontalRange = 0x092379B8; // source=match
FindFirstEntityToTheRight = 0x09237B50; // source=match
FindFirstEntityToTheLeft = 0x09237BC0; // source=match
CreateEntitiesToTheRight = 0x09237C48; // source=match
CreateEntitiesToTheLeft = 0x09237D88; // source=match
FindFirstEntityAbove = 0x09237EE0; // source=match
FindFirstEntityBelow = 0x09237F58; // source=match
CreateEntitiesAbove = 0x09237FE0; // source=match
CreateEntitiesBelow = 0x09238128; // source=match
InitRoomEntities = 0x09238288; // source=match
UpdateRoomPosition = 0x092384B8; // source=match
CreateEntityFromCurrentEntity = 0x09238598; // source=match
CreateEntityFromEntity = 0x09238620; // source=match
EntityStageNamePopup = 0x092386A8; // source=match
EntityIsNearPlayer = 0x09239528; // source=match
BO6_EntityRedDoor = 0x09239610; // source=match
Random = 0x0923A830; // source=match
Update = 0x0923A870; // source=match
UpdateStageEntities = 0x0923AC50; // source=match
func_psp_0923AD68 = 0x0923AD68; // source=match
func_psp_0923B2F0 = 0x0923B2F0; // source=match
EntitySoulStealOrb = 0x0923B780; // source=match
EntityEnemyBlood = 0x0923BCE0; // source=match
EntityUnkId13 = 0x09240540; // source=match
EntityExplosionVariants = 0x09240688; // source=match
EntityGreyPuff = 0x09240800; // source=match
EntityIntenseExplosion = 0x09240980; // source=match
HitDetection = 0x09240AF0; // source=match
EntityDamageDisplay = 0x092422C0; // source=match
BottomCornerText = 0x09242CC8; // source=match
EntityRoomForeground = 0x092432C0; // source=match
DestroyEntity = 0x092433D8; // source=match
PreventEntityFromRespawning = 0x09243470; // source=match
AnimateEntity = 0x092434F8; // source=match
GetSideToPlayer = 0x09243668; // source=match
MoveEntity = 0x092436F0; // source=match
FallEntity = 0x09243740; // source=match
AllocEntity = 0x09243778; // source=match
UnkEntityFunc0 = 0x092437E8; // source=match
GetAngleBetweenEntities = 0x09243890; // source=match
GetNormalizedAngle = 0x09243910; // source=match
SetStep = 0x09243A08; // source=match
InitializeEntity = 0x09243A58; // source=match
EntityDummy = 0x09243C00; // source=match
CheckFieldCollision = 0x09243C38; // source=match
ReplaceBreakableWithItemDrop = 0x09243DC8; // source=match
UnkPrimHelper = 0x09243EC0; // source=match
PrimResetNext = 0x092443C0; // source=match
UnkPolyFunc2 = 0x092444C8; // source=match
PrimDecreaseBrightness = 0x09244530; // source=match
EntityBreakable = 0x09244A00; // source=match
BO6_EntityBackgroundBlock = 0x092479C0; // source=match
BO6_EntityLockCamera = 0x092488C8; // source=match
func_8015C4AC = 0x0925ABB8; // source=match
func_8015C6D4 = 0x0925AE20; // source=match
RicSetStep = 0x0925B248; // source=match
RicSetAnimation = 0x0925B270; // source=match
RicDecelerateX = 0x0925B2B0; // source=match
RicCheckFacing = 0x0925B350; // source=match
RicSetSpeedX = 0x0925B448; // source=match
func_8015CAAC = 0x0925B498; // source=match
RicSetInvincibilityFrames = 0x0925B4E0; // source=match
DisableAfterImage = 0x0925B588; // source=match
func_8015CC28 = 0x0925B648; // source=match
31 changes: 26 additions & 5 deletions config/symbols.us.bobo6.txt
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,6 @@ EntityEnemyBlood = 0x801B4304;
EntityRoomForeground = 0x801B47B4;
BO6_CheckBladeDashInput = 0x801B4FA4;
BO6_CheckHighJumpInput = 0x801B502C;
BO6_RicMain = 0x801B50BC;
RichterThinking = 0x801B5A2C;
EntityRichter = 0x801B6AC4;
BO6_RicStepStand = 0x801B6BD8;
BO6_RicStepWalk = 0x801B6E3C;
Expand All @@ -115,7 +113,6 @@ BO6_RicStepHit = 0x801B7818;
BO6_RicStepDead = 0x801B7E80;
BO6_RicStepStandInAir = 0x801B8540;
BO6_RicStepEnableFlameWhip = 0x801B85DC;
BO6_RicStepHydrostorm = 0x801B8684;
BO6_RicStepGenericSubwpnCrash = 0x801B86B8;
BO6_RicStepThrowDaggers = 0x801B86EC;
BO6_RicStepSlide = 0x801B87B4;
Expand All @@ -125,15 +122,13 @@ BO6_RicStepHighJump = 0x801B8F78;
BO6_RicSetStep = 0x801B9928;
BO6_RicSetAnimation = 0x801B9940;
DecelerateX = 0x801B995C;
DecelerateY = 0x801B99A4;
BO6_RicCheckFacing = 0x801B99EC;
BO6_RicSetSpeedX = 0x801B9AA4;
BO6_RicSetInvincibilityFrames = 0x801B9AF4;
BO6_DisableAfterImage = 0x801B9B78;
BO6_RicSetCrouch = 0x801B9C5C;
BO6_RicSetStand = 0x801B9D2C;
BO6_RicSetFall = 0x801B9F38;
BO6_RicCheckSubwpnChainLimit = 0x801BA0E8;
BO6_RicDoSubweapon = 0x801BA168;
BO6_RicDoAttack = 0x801BA2A0;
BO6_RicDoCrash = 0x801BA598;
Expand Down Expand Up @@ -199,12 +194,21 @@ g_Ric_padHeld = 0x801D15E8;
g_Ric_padSim = 0x801D15EC;
g_Ric_demo_timer = 0x801D15F4;
g_Ric_timers_0 = 0x801D15F8;
g_Ric_timers_1 = 0x801D15FA;
g_Ric_timers_2 = 0x801D15FC;
g_Ric_timers_3 = 0x801D15FE;
g_Ric_timers_4 = 0x801D1600;
g_Ric_timers_5 = 0x801D1602;
g_Ric_timers_6 = 0x801D1604;
g_Ric_timers_7 = 0x801D1606;
g_Ric_timers_8 = 0x801D1608;
g_Ric_timers_9 = 0x801D160A;
g_Ric_timers_10 = 0x801D160C;
g_Ric_timers_11 = 0x801D160E;
g_Ric_timers_12 = 0x801D1610;
g_Ric_timers_13 = 0x801D1612;
g_Ric_timers_14 = 0x801D1614;
g_Ric_timers_15 = 0x801D1616;
g_Ric_vram_flag = 0x801D1618;
g_Ric_unk04 = 0x801D161C;
g_Ric_unk08 = 0x801D1620;
Expand All @@ -220,3 +224,20 @@ g_Ric_unk6C = 0x801D1684;
g_Ric_unk70 = 0x801D1688;
g_IsCutsceneDone = 0x801D1698;
g_ItemIconSlots = 0x801D16A8;

BO6_RicEntityCrashAxe = 0x801C560C;
anim_cross_boomerang = 0x80182970;
BO6_RicEntitySubwpnCross = 0x801C4200;
BO6_spriteBanks = 0x80180034;
BO6_cluts = 0x801800D8;
BO6_gfxBanks = 0x80180130;
richter_sprites = 0x8018303C;
BO6_rooms_layers = 0x801800FC;
BO6_Overlay = 0x80180000;
bo6_tilemap_0 = 0x8019F7A0;
bo6_tiledef_0 = 0x801A39A0;
D_8019DDA8 = 0x8019DDA8;
D_8019A4F4 = 0x8019A4F4;
D_8019ACC4 = 0x8019ACC4;
BO6_RicEntitySubwpnHolyWater = 0x801C32C4;
BO6_RicCheckHolyWaterCollision = 0x801C310C;
19 changes: 9 additions & 10 deletions config/symbols.us.txt
Original file line number Diff line number Diff line change
Expand Up @@ -846,7 +846,6 @@ g_Servant = 0x8006CBC4;
_svm_tn = 0x8006CBC8;
g_Clut = 0x8006CBCC; // size:0x6000
g_Player = 0x80072BD0; // size:0x3CE
g_Player_demo_timer = 0x80072EFC;
g_GfxLoad = 0x80072FA0;
g_GameStep = 0x80073060;
g_ServantLoaded = 0x80073064;
Expand Down Expand Up @@ -899,15 +898,15 @@ PLAYER_animCurFrame = 0x8007342E;
PLAYER_unk5A = 0x80073432;
PLAYER_unkA4 = 0x8007347C;
PLAYER_ext_player_anim = 0x80073484;
g_Entities_1 = 0x80073494;
g_Entities_19 = 0x800741CC;
g_Entities_32 = 0x80074B58;
g_Entities_64 = 0x800762D8;
g_Entities_96 = 0x80077A58;
g_Entities_128 = 0x800791D8;
g_Entities_160 = 0x8007A958;
g_Entities_192 = 0x8007C0D8;
g_Entities_224 = 0x8007D858;
g_Entities_1 = 0x80073494; // size:0xBC
g_Entities_19 = 0x800741CC; // size:0xBC
g_Entities_32 = 0x80074B58; // size:0xBC
g_Entities_64 = 0x800762D8; // size:0xBC
g_Entities_96 = 0x80077A58; // size:0xBC
g_Entities_128 = 0x800791D8; // size:0xBC
g_Entities_160 = 0x8007A958; // size:0xBC
g_Entities_192 = 0x8007C0D8; // size:0xBC
g_Entities_224 = 0x8007D858; // size:0xBC
g_EvHwCardEnd = 0x8007EFD8;
g_EvHwCardErr = 0x8007EFDC;
g_EvHwCardTmo = 0x8007EFE0;
Expand Down
1 change: 0 additions & 1 deletion include/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@
#define UNUSED
#endif
#define ASSERT(x) assert(x)

#elif defined(VERSION_PSP)
#define ASSERT(x)
#define STATIC_ASSERT(x, y)
Expand Down
11 changes: 11 additions & 0 deletions include/entity.h
Original file line number Diff line number Diff line change
Expand Up @@ -3556,6 +3556,16 @@ typedef struct {
/* 0x84 */ s16 castTimer;
} ET_HellfireBeastFlamePillar;

typedef struct {
/* 0x7C */ s16 timer;
/* 0x7E */ s16 velocityAngle;
/* 0x80 */ s32 : 32;
/* 0x84 */ s32 : 32;
/* 0x88 */ s32 : 32;
/* 0x8C */ struct Entity* parent;
/* 0x90 */ s16 unkTimer;
} ET_ShaftOrb;

typedef union { // offset=0x7C
struct Primitive* prim;
ET_Placeholder ILLEGAL;
Expand Down Expand Up @@ -3863,6 +3873,7 @@ typedef union { // offset=0x7C
ET_HellfireBeast hellfireBeast;
ET_HellfireBeastThorsHammer hellfireBeastThorsHammer;
ET_HellfireBeastFlamePillar hellfireBeastFlamePillar;
ET_ShaftOrb shaftOrb;
} Ext;

#define SYNC_FIELD(struct1, struct2, field) \
Expand Down
2 changes: 1 addition & 1 deletion include/game.h
Original file line number Diff line number Diff line change
Expand Up @@ -1926,7 +1926,7 @@ typedef struct {
/* 80072BD0 */ Collider colFloor[NUM_HORIZONTAL_SENSORS];
/* 80072C60 */ Collider colCeiling[NUM_HORIZONTAL_SENSORS];
/* 80072CF0 */ Collider colWall[NUM_VERTICAL_SENSORS * 2];
/* 80072EE8 */ u32 padPressed;
/* 0x318 80072EE8 */ u32 padPressed;
/* 80072EEC */ u32 padTapped;
/* 80072EF0 */ u32 padHeld;
/* 80072EF4 */ u32 padSim; // simulate input to force player actions
Expand Down
Loading
Loading