Decompiled more code

Changed some tools
Build: OK
This commit is contained in:
Ogre 2023-09-08 01:20:21 +02:00
parent 222afbe87e
commit b4947f743f
7 changed files with 218 additions and 31 deletions

View File

@ -310,8 +310,13 @@ typedef struct {
/* 0x0a */ u8 field_0xa; /* 0x0a */ u8 field_0xa;
/* 0x0b */ u8 field_0xb; /* 0x0b */ u8 field_0xb;
/* 0x0c */ const char* name; /* 0x0c */ const char* name;
} MaybeAttackData; // size:0x10 } AbilityData; // size:0x10
extern MaybeAttackData __MAYBE_ATTACK_DATA[]; extern AbilityData ABILITY_DATA[];
Element ability_get_element(u8 index, u16 arg1, u16 arg2, s32 arg3, u16 arg4);
extern u16 func_8016FA34(u16, u16, u16, u16);
extern u16 func_8016FB50(u16, u16, u16, u16);
#endif #endif

View File

@ -1,18 +1,20 @@
#ifndef __ELEMENT_H__ #ifndef __ELEMENT_H__
#define __ELEMENT_H__ #define __ELEMENT_H__
typedef enum { #include <ultra64.h>
ELEMENT_PHYSICAL,
ELEMENT_WIND,
ELEMENT_FLAME,
ELEMENT_EARTH,
ELEMENT_WATER,
ELEMENT_VIRTUE,
ELEMENT_BANE,
ELEMENT_UNKNOWN_0x10 = 0x10, typedef u8 Element;
ELEMENT_INVALID = 0xFF, #define ELEMENT_PHYSICAL 0
} __attribute__ ((__packed__)) Element; #define ELEMENT_WIND 1
#define ELEMENT_FLAME 2
#define ELEMENT_EARTH 3
#define ELEMENT_WATER 4
#define ELEMENT_VIRTUE 5
#define ELEMENT_BANE 6
#define ELEMENT_UNKNOWN_0x10 0x10
#define ELEMENT_INVALID 0xFF
#endif #endif

View File

@ -104,15 +104,30 @@ INCLUDE_ASM(const s32, "item", func_8016E338);
INCLUDE_ASM(const s32, "item", func_8016E440); INCLUDE_ASM(const s32, "item", func_8016E440);
// INCLUDE_ASM(const s32, "item", func_8016E458);
/* 44358 8016E458 */ /* 44358 8016E458 */
u8 func_8016E458(u8 arg0) { u8 func_8016E458(u8 index) {
return __MAYBE_ATTACK_DATA[arg0].field_0x0; return ABILITY_DATA[index].field_0x0;
} }
/* 44370 8016E470 */
Element ability_get_element(u8 index, u16 arg1, u16 arg2, s32 arg3, u16 arg4) {
u16 item_index;
if (ABILITY_DATA[index].element != ELEMENT_INVALID && ABILITY_DATA[index].element != 0xF)
return ABILITY_DATA[index].element;
if (ABILITY_DATA[index].field_0x0 == 3) {
item_index = func_8016FB50(arg1, arg2, arg3, arg4);
} else {
item_index = func_8016FA34(arg1, arg2, arg3, arg4);
}
if (item_index == 0)
return 0;
return item_get_element(item_index);
}
INCLUDE_ASM(const s32, "item", func_8016E470);
INCLUDE_ASM(const s32, "item", func_8016E50C); INCLUDE_ASM(const s32, "item", func_8016E50C);

View File

@ -1,4 +1,4 @@
__MAYBE_ATTACK_DATA = 0x8018AA80; // rom:0x60980 size:0x10 ABILITY_DATA = 0x8018AA80; // rom:0x60980 size:0x10
STR_LEVEL_UP = 0x8021DFCC; // rom:0x1B22DC STR_LEVEL_UP = 0x8021DFCC; // rom:0x1B22DC
STR_MAXIMUM_HP_UP = 0x8021DFD8; // rom:0x1B22E8 STR_MAXIMUM_HP_UP = 0x8021DFD8; // rom:0x1B22E8
@ -13,6 +13,8 @@ STR_PHYSICAL = 0x80187660; // rom:0x5D560 type:asciz
ITEM_DATA = 0x8018C410; // size:0x20 ITEM_DATA = 0x8018C410; // size:0x20
ability_get_element = 0x8016E470;
item_get_field_0x0 = 0x8016F5C8; item_get_field_0x0 = 0x8016F5C8;
item_get_element = 0x8016F5E0; item_get_element = 0x8016F5E0;
item_get_field_0x2 = 0x8016F614; item_get_field_0x2 = 0x8016F614;

View File

@ -1,4 +1,4 @@
from ob import read_rom, ELEMENT_NAMES from ob import read_rom, ELEMENT_NAME
from struct import unpack_from from struct import unpack_from
@ -13,7 +13,7 @@ def read_attack(index):
length = 0x6136B - 0x60980 length = 0x6136B - 0x60980
for i in range(0, 30): for i in range(0, 130):
name_vaddr_start = 0x801876FC name_vaddr_start = 0x801876FC
name_addr_start = 0x5D5FC name_addr_start = 0x5D5FC
@ -24,10 +24,6 @@ for i in range(0, 30):
name_addr_diff = (name_vaddr - name_vaddr_start) + name_addr_start name_addr_diff = (name_vaddr - name_vaddr_start) + name_addr_start
name = read_rom(name_addr_diff, name_addr_diff + 32).split(b'\0', 1)[0] name = read_rom(name_addr_diff, name_addr_diff + 32).split(b'\0', 1)[0]
print(ELEMENT_NAMES[element]) print(f"{name}:\t", (field_0x0, field_0x2, field_0x3, field_0x4, field_0x5,
print(name) field_0x6, field_0x7, field_0x8, field_0x9, field_0xa,
print(field_0x0) field_0xb))
print(field_0x2)
print(field_0x3)
print(field_0x4)
print(field_0x5)

View File

@ -1,4 +1,4 @@
from ob import read_rom, ELEMENT_NAMES from ob import read_rom, ELEMENT_NAME
from struct import unpack_from from struct import unpack_from
@ -20,7 +20,7 @@ for i in range(0, 130):
(field_0xc, res_strike, res_wind, res_fire, res_earth, res_water, (field_0xc, res_strike, res_wind, res_fire, res_earth, res_water,
res_holy, res_dark, *rest) = rest; res_holy, res_dark, *rest) = rest;
print(f"Element: {ELEMENT_NAMES[element]}") print(f"Element: {ELEMENT_NAME[element]}")
print(f"STR: \t{strength} \tMEN: \t{mem}") print(f"STR: \t{strength} \tMEN: \t{mem}")
print(f"VIT: \t{vitality} \tAGI: \t{agility}") print(f"VIT: \t{vitality} \tAGI: \t{agility}")
print(f"INT: \t{intelligence} \tDEX: \t{dexterity}") print(f"INT: \t{intelligence} \tDEX: \t{dexterity}")

View File

@ -1,6 +1,6 @@
# OgreBattle util # OgreBattle util
ELEMENT_NAMES = { ELEMENT_NAME = {
0: "Physical", 0: "Physical",
1: "Wind", 1: "Wind",
2: "Flame", 2: "Flame",
@ -23,6 +23,173 @@ ELEMENT_NAMES = {
255: "Invalid" 255: "Invalid"
} }
CLASS_NAME = {
0x01: "Soldier",
0x02: "Fighter",
0x03: "Lycanthrope",
0x04: "Amazon",
0x05: "Knight",
0x06: "Berserker",
0x07: "Fencer",
0x08: "Phalanx",
0x09: "BeastTamer",
0x0A: "DollMaster",
0x0B: "Ninja",
0x0C: "Wizard",
0x0D: "Archer",
0x0E: "DragonTamer",
0x0F: "Valkyrie",
0x10: "Witch",
0x11: "Sorceress",
0x12: "Cleric",
0x13: "Paladin",
0x14: "Dragoon",
0x15: "BlackKnight",
0x16: "SwordMaster",
0x17: "Cataphract",
0x18: "BeastMaster",
0x19: "Enchanter",
0x1A: "NinjaMaster",
0x1B: "Archmage",
0x1C: "Diana",
0x1D: "DragonMaster",
0x1E: "Freya",
0x1F: "Siren",
0x20: "Priest",
0x21: "Princess",
0x22: "Centurion",
0x23: "Centurion",
0x24: "AngelKnight",
0x25: "Seraph",
0x26: "Lich",
0x27: "Hawkman",
0x28: "Vultan",
0x29: "Raven",
0x2A: "Werewolf",
0x2B: "Vampire",
0x2C: "Vampire",
0x2D: "Zombie",
0x2E: "Zombie",
0x2F: "Skeleton",
0x30: "Ghost",
0x31: "Gorgon",
0x32: "Pumpkinhead",
0x33: "Faerie",
0x34: "Gremlin",
0x35: "Goblin",
0x36: "Saturos",
0x37: "Ogre",
0x38: "YoungDragon",
0x39: "ThunderDragon",
0x3A: "RedDragon",
0x3B: "EarthDragon",
0x3C: "BlueDragon",
0x3D: "PlatinumDragon",
0x3E: "BlackDragon",
0x3F: "Quetzalcoatl",
0x40: "Flarebrass",
0x41: "AhziDahaka",
0x42: "Hydra",
0x43: "Bahamut",
0x44: "Tiamat",
0x45: "Wyrm",
0x46: "Wyvern",
0x47: "Griffin",
0x48: "Opinincus",
0x49: "Cockatrice",
0x4A: "Sphinx",
0x4B: "Hellhound",
0x4C: "Cerberus",
0x4D: "Giant",
0x4E: "Golem",
0x4F: "StoneGolem",
0x50: "BaldrGolem",
0x51: "Gladiator",
0x52: "Vanguard",
0x53: "General",
0x54: "Gladiator",
0x55: "Warrior",
0x56: "BlazeKnight",
0x57: "RuneKnight",
0x58: "Lord",
0x59: "General",
0x5A: "BeastMaster",
0x5B: "Priest",
0x5C: "Warlock",
0x5D: "Grappler",
0x5E: "Centurion",
0x5F: "Lycanthrope",
0x60: "Werewolf",
0x61: "Solidblade",
0x62: "Overlord",
0x63: "DarkPrince",
0x64: "SpecialClass",
0x65: "FlailMonarch",
0x66: "DeathTemplar",
0x67: "TempleCommander",
0x68: "TempleCommander",
0x69: "TempleCommander",
0x6A: "TempleCommander",
0x6B: "TempleCommander",
0x6C: "Vanity",
0x6D: "Vanity",
0x6E: "Vanity",
0x6F: "SuperiorKnight",
0x70: "SuperiorKnight",
0x71: "Gatekeeper",
0x72: "Grappler",
0x73: "KnightTemplar",
0x74: "Daemon",
0x75: "Phalanx",
0x76: "Berserker",
0x77: "Cleric",
0x78: "Archer",
0x79: "Hawkman",
0x7A: "Siren",
0x7B: "Enchanter",
0x7C: "BlackKnight",
0x7D: "SpecialClass",
0x7E: "SpecialClass",
0x7F: "SpecialClass",
0x80: "SpecialClass",
0x81: "SpecialClass",
0x82: "Barkeep",
0x83: "ElderlyMan",
0x84: "Commoner",
0x85: "Commoner",
0x86: "Danika",
0x87: "Danika_01",
0x88: "Danika_02",
0x89: "Archer",
0x8A: "Berserker",
0x8B: "BeastTamer",
0x8C: "Valkyrie",
0x8D: "Wizard",
0x8E: "Phalanx",
0x8F: "Berserker",
0x90: "Knight",
0x91: "NinjaMaster",
0x92: "DollMaster",
0x93: "KnightTemplar",
0x94: "Archmage",
0x95: "Priest",
0x96: "BlackKnight",
0x97: "DragonMaster",
0x98: "Siren",
0x99: "Saturos",
0x9A: "SwordMaster",
0x9B: "KnightTemplar",
0x9C: "Dragoon",
0x9D: "Gorgon",
0x9E: "Lich",
0x9F: "Daemon",
0xA0: "Plaladin",
0xA1: "Danika",
0xA2: "Paladin",
0xA3: "Witch",
0xA4: "DeathBahamut",
}
def read_rom(start, end): def read_rom(start, end):
chunksize = end - start chunksize = end - start
with open("baserom.z64", "rb") as f: with open("baserom.z64", "rb") as f: