Object Types

This commit is contained in:
intns 2021-11-01 03:12:36 +00:00
parent 6f563bc890
commit a695f8cf15
5 changed files with 139 additions and 208 deletions

View File

@ -105,6 +105,7 @@ When compiling the project, this patch is automatically applied, if it fails to
- plugProjectKandoU
- <a href="https://github.com/doldecomp/pikmin2/tree/main/src/plugProjectKandoU/gamePlatMgr.cpp">plugProjectKandoU/gamePlatMgr.cpp</a>
- <a href="https://github.com/doldecomp/pikmin2/tree/main/src/plugProjectKandoU/interactBattle.cpp">plugProjectKandoU/interactBattle.cpp</a>
- <a href="https://github.com/doldecomp/pikmin2/tree/main/src/plugProjectKandoU/objectTypes.cpp">plugProjectKandoU/objectTypes.cpp</a>
- plugProjectHikinoU
- plugProjectEbisawaU
- <a href="https://github.com/doldecomp/pikmin2/tree/main/src/plugProjectEbisawaU/ebiP2TitleCamera.cpp">plugProjectEbisawaU/ebiP2TitleCamera.cpp</a>

View File

@ -1,174 +0,0 @@
.include "macros.inc"
.section .rodata # 0x804732E0 - 0x8049E220
.balign 0x8
.global lbl_8047EA80
lbl_8047EA80:
.asciz "pikihead"
.skip 0x3
.global lbl_8047EA8C
lbl_8047EA8C:
.asciz "fountain"
.skip 0x3
.global lbl_8047EA98
lbl_8047EA98:
.asciz "bigfountain"
.global lbl_8047EAA4
lbl_8047EAA4:
.asciz "treasure"
.skip 0x3
.global lbl_8047EAB0
lbl_8047EAB0:
.asciz "downfloor"
.skip 0x2
.global lbl_8047EABC
lbl_8047EABC:
.asciz "ujamushi"
.skip 0x3
.section .data, "wa" # 0x8049E220 - 0x804EFC20
.balign 0x8
.global infos
infos:
.4byte 0x00000000
.4byte lbl_80518B60
.4byte 0x00010000
.4byte lbl_80518B68
.4byte 0x00020000
.4byte lbl_80518B70
.4byte 0x04010000
.4byte lbl_80518B78
.4byte 0x04020000
.4byte lbl_80518B80
.4byte 0x04030000
.4byte lbl_80518B88
.4byte 0x04040000
.4byte lbl_80518B8C
.4byte 0x04050000
.4byte lbl_80518B94
.4byte 0x04060000
.4byte lbl_80518B9C
.4byte 0x04070000
.4byte lbl_8047EA80
.4byte 0x04080000
.4byte lbl_80518BA4
.4byte 0x04090000
.4byte lbl_80518BAC
.4byte 0x040A0000
.4byte lbl_80518BB4
.4byte 0x040B0000
.4byte lbl_8047EA8C
.4byte 0x040C0000
.4byte lbl_8047EA98
.4byte 0x040D0000
.4byte lbl_80518BBC
.4byte 0x040E0000
.4byte lbl_8047EAA4
.4byte 0x040F0000
.4byte lbl_8047EAB0
.4byte 0x04110000
.4byte lbl_8047EABC
.4byte 0x04120000
.4byte lbl_80518BC4
.4byte 0x04130000
.4byte lbl_80518BCC
.4byte 0xFFFE0000
.4byte lbl_80518BD4
.4byte 0xFFFF0000
.4byte lbl_80518BDC
.section .sdata2, "a" # 0x80516360 - 0x80520E40
.balign 0x8
.global lbl_80518B60
lbl_80518B60:
.asciz "piki"
.skip 0x3
.global lbl_80518B68
lbl_80518B68:
.asciz "navi"
.skip 0x3
.global lbl_80518B70
lbl_80518B70:
.asciz "teki"
.skip 0x3
.global lbl_80518B78
lbl_80518B78:
.asciz "pellet"
.skip 0x1
.global lbl_80518B80
lbl_80518B80:
.asciz "onyon"
.skip 0x2
.global lbl_80518B88
lbl_80518B88:
.asciz "ufo"
.global lbl_80518B8C
lbl_80518B8C:
.asciz "gate"
.skip 0x3
.global lbl_80518B94
lbl_80518B94:
.asciz "hole"
.skip 0x3
.global lbl_80518B9C
lbl_80518B9C:
.asciz "honey"
.skip 0x2
.global lbl_80518BA4
lbl_80518BA4:
.asciz "plant"
.skip 0x2
.global lbl_80518BAC
lbl_80518BAC:
.asciz "rock"
.skip 0x3
.global lbl_80518BB4
lbl_80518BB4:
.asciz "cave"
.skip 0x3
.global lbl_80518BBC
lbl_80518BBC:
.asciz "bridge"
.skip 0x1
.global lbl_80518BC4
lbl_80518BC4:
.asciz "weed"
.skip 0x3
.global lbl_80518BCC
lbl_80518BCC:
.asciz "ball"
.skip 0x3
.global lbl_80518BD4
lbl_80518BD4:
.asciz "undef"
.skip 0x2
.global lbl_80518BDC
lbl_80518BDC:
.asciz "end"
.section .text, "ax" # 0x800056C0 - 0x80472F00
.global getName__Q24Game7ObjTypeFUs
getName__Q24Game7ObjTypeFUs:
/* 8017D3F8 0017A338 3C 80 80 4B */ lis r4, infos@ha
/* 8017D3FC 0017A33C 54 60 04 3E */ clrlwi r0, r3, 0x10
/* 8017D400 0017A340 38 64 2C 88 */ addi r3, r4, infos@l
/* 8017D404 0017A344 38 A0 00 00 */ li r5, 0
lbl_8017D408:
/* 8017D408 0017A348 A0 83 00 00 */ lhz r4, 0(r3)
/* 8017D40C 0017A34C 28 04 FF FF */ cmplwi r4, 0xffff
/* 8017D410 0017A350 40 82 00 0C */ bne lbl_8017D41C
/* 8017D414 0017A354 38 60 00 00 */ li r3, 0
/* 8017D418 0017A358 4E 80 00 20 */ blr
lbl_8017D41C:
/* 8017D41C 0017A35C 7C 00 20 40 */ cmplw r0, r4
/* 8017D420 0017A360 40 82 00 1C */ bne lbl_8017D43C
/* 8017D424 0017A364 3C 60 80 4B */ lis r3, infos@ha
/* 8017D428 0017A368 54 A0 18 38 */ slwi r0, r5, 3
/* 8017D42C 0017A36C 38 63 2C 88 */ addi r3, r3, infos@l
/* 8017D430 0017A370 7C 63 02 14 */ add r3, r3, r0
/* 8017D434 0017A374 80 63 00 04 */ lwz r3, 4(r3)
/* 8017D438 0017A378 4E 80 00 20 */ blr
lbl_8017D43C:
/* 8017D43C 0017A37C 38 63 00 08 */ addi r3, r3, 8
/* 8017D440 0017A380 38 A5 00 01 */ addi r5, r5, 1
/* 8017D444 0017A384 4B FF FF C4 */ b lbl_8017D408
/* 8017D448 0017A388 4E 80 00 20 */ blr

54
include/ObjectTypes.h Normal file
View File

@ -0,0 +1,54 @@
#ifndef _OBJECTTYPES_H
#define _OBJECTTYPES_H
#include "types.h"
#define OBJTYPE_PROTAGONIST 0x0000
#define OBJTYPE_GAMEOBJECT 0x0400
#define OBJTYPE_INVALID 0xFFF0
enum ObjTypes {
// Protagonists
OBJTYPE_Piki = OBJTYPE_PROTAGONIST + 0x0,
OBJTYPE_Navi = OBJTYPE_PROTAGONIST + 0x1,
OBJTYPE_Teki = OBJTYPE_PROTAGONIST + 0x2,
// Gameobjects
OBJTYPE_Pellet = OBJTYPE_GAMEOBJECT + 0x1,
OBJTYPE_Onyon = OBJTYPE_GAMEOBJECT + 0x2,
OBJTYPE_Ufo = OBJTYPE_GAMEOBJECT + 0x3,
OBJTYPE_Gate = OBJTYPE_GAMEOBJECT + 0x4,
OBJTYPE_Hole = OBJTYPE_GAMEOBJECT + 0x5,
OBJTYPE_Honey = OBJTYPE_GAMEOBJECT + 0x6,
OBJTYPE_Pikihead = OBJTYPE_GAMEOBJECT + 0x7,
OBJTYPE_Plant = OBJTYPE_GAMEOBJECT + 0x8,
OBJTYPE_Rock = OBJTYPE_GAMEOBJECT + 0x9,
OBJTYPE_Cave = OBJTYPE_GAMEOBJECT + 0xA,
OBJTYPE_Fountain = OBJTYPE_GAMEOBJECT + 0xB,
OBJTYPE_BigFountain = OBJTYPE_GAMEOBJECT + 0xC,
OBJTYPE_Bridge = OBJTYPE_GAMEOBJECT + 0xD,
OBJTYPE_Treasure = OBJTYPE_GAMEOBJECT + 0xE,
OBJTYPE_Downfloor = OBJTYPE_GAMEOBJECT + 0xF,
OBJTYPE_Ujamushi = OBJTYPE_GAMEOBJECT + 0x11,
OBJTYPE_Weed = OBJTYPE_GAMEOBJECT + 0x12,
OBJTYPE_Ball = OBJTYPE_GAMEOBJECT + 0x13,
// Invalid (end of list identifiers)
OBJTYPE_Undef = OBJTYPE_INVALID + 0xE,
OBJTYPE_End = OBJTYPE_INVALID + 0xF,
};
struct ObjTypeInfo {
u16 m_type; // _00
char* m_name; // _04
};
extern ObjTypeInfo infos[];
namespace Game {
namespace ObjType {
char* getName(u16 type);
} // namespace ObjType
} // namespace Game
#endif

View File

@ -500,6 +500,7 @@ KANDO:=\
$(BUILD_DIR)/asm/plugProjectKandoU/pelletMgr.o\
$(BUILD_DIR)/asm/plugProjectKandoU/routeMgr.o\
$(BUILD_DIR)/asm/plugProjectKandoU/onyonMgr.o\
$(BUILD_DIR)/src/plugProjectKandoU/objectTypes.o\
$(BUILD_DIR)/asm/plugProjectKandoU/objectTypes.o\
$(BUILD_DIR)/asm/plugProjectKandoU/naviState.o\
$(BUILD_DIR)/asm/plugProjectKandoU/pikiState.o\

View File

@ -1,40 +1,89 @@
#include "ObjectTypes.h"
/*
* --INFO--
* Address: 8017D3F8
* Size: 000054
*/
void Game::ObjType::getName((unsigned short))
{
// clang-format off
ObjTypeInfo infos[] = {
// Protagonists
{ OBJTYPE_Piki, "piki" },
{ OBJTYPE_Navi, "navi" },
{ OBJTYPE_Teki, "teki" },
// Gameobjects
{ OBJTYPE_Pellet, "pellet" },
{ OBJTYPE_Onyon, "onyon" },
{ OBJTYPE_Ufo, "ufo" },
{ OBJTYPE_Gate, "gate" },
{ OBJTYPE_Hole, "hole" },
{ OBJTYPE_Honey, "honey" },
{ OBJTYPE_Pikihead, "pikihead" },
{ OBJTYPE_Plant, "plant" },
{ OBJTYPE_Rock, "rock" },
{ OBJTYPE_Cave, "cave" },
{ OBJTYPE_Fountain, "fountain" },
{ OBJTYPE_BigFountain, "bigfountain" },
{ OBJTYPE_Bridge, "bridge" },
{ OBJTYPE_Treasure, "treasure" },
{ OBJTYPE_Downfloor, "downfloor" },
{ OBJTYPE_Ujamushi, "ujamushi" },
{ OBJTYPE_Weed, "weed" },
{ OBJTYPE_Ball, "ball" },
// Invalid (end of list identifiers)
{ OBJTYPE_Undef, "undef" },
{ OBJTYPE_End, "end" },
};
// clang-format on
namespace Game {
namespace ObjType {
/*
.loc_0x0:
lis r4, 0x804B
rlwinm r0,r3,0,16,31
addi r3, r4, 0x2C88
li r5, 0
* --INFO--
* Address: 8017D3F8
* Size: 000054
*/
char* getName(u16 type)
{
for (s32 i = 0;; i++) {
if (infos[i].m_type == 0xFFFF) {
return nullptr;
}
.loc_0x10:
lhz r4, 0x0(r3)
cmplwi r4, 0xFFFF
bne- .loc_0x24
li r3, 0
blr
if (type == infos[i].m_type) {
return infos[i].m_name;
}
}
}
} // namespace ObjType
} // namespace Game
.loc_0x24:
cmplw r0, r4
bne- .loc_0x44
lis r3, 0x804B
rlwinm r0,r5,3,0,28
addi r3, r3, 0x2C88
add r3, r3, r0
lwz r3, 0x4(r3)
blr
// /*
// .loc_0x0:
// lis r4, 0x804B
// rlwinm r0,r3,0,16,31
// addi r3, r4, 0x2C88
// li r5, 0
.loc_0x44:
addi r3, r3, 0x8
addi r5, r5, 0x1
b .loc_0x10
blr
*/
}
// .loc_0x10:
// lhz r4, 0x0(r3)
// cmplwi r4, 0xFFFF
// bne- .loc_0x24
// li r3, 0
// blr
// .loc_0x24:
// cmplw r0, r4
// bne- .loc_0x44
// lis r3, 0x804B
// rlwinm r0,r5,3,0,28
// addi r3, r3, 0x2C88
// add r3, r3, r0
// lwz r3, 0x4(r3)
// blr
// .loc_0x44:
// addi r3, r3, 0x8
// addi r5, r5, 0x1
// b .loc_0x10
// blr
// */
// }