Refactored to a new coding style

Migrated a ton of data...
Build: OK
This commit is contained in:
Ogre 2023-09-16 23:40:25 +02:00
parent 875fe0f103
commit 42b7627502
16 changed files with 1004 additions and 287 deletions

1
.gitignore vendored
View File

@ -5,6 +5,7 @@ assets
build
.vscode
.idea
tools/build

View File

@ -24,11 +24,11 @@ typedef struct {
ASSERT_SIZE(AbilityData, 0x10);
extern AbilityData ABILITY_DATA[];
extern AbilityData obAbilityData[];
extern char *ability_get_name(u8 index);
extern char *obAbilityGetName(u8 index);
extern u8 ability_get_field_0x4(u8 index);
extern Element ability_get_element(u8 index, u16 arg1, u16 arg2, s32 arg3,
extern Element obAbilityGetElement(u8 index, u16 arg1, u16 arg2, s32 arg3,
u16 arg4);
#endif // __ABILITY_H__

View File

@ -1,11 +1,41 @@
#ifndef __COMMON_H__
#define __COMMON_H__
#include "PR/os.h"
#include "include_asm.h"
#include "ultratypes.h"
#include <ultra64.h>
typedef u8 qu08_t;
typedef u16 qu016_t;
typedef s16 qs48_t;
typedef s16 qs510_t;
typedef u16 qu510_t;
typedef u16 qs102_t;
typedef u16 qu102_t;
typedef s16 qs105_t;
typedef u16 qu105_t;
typedef s16 qs132_t;
typedef s16 qs142_t;
typedef s32 qs1516_t;
typedef s32 qs1616_t;
typedef s32 qs205_t;
#define qu08(n) ((qu08_t)((n)*0x100))
#define qu016(n) ((qu016_t)((n)*0x10000))
#define qs48(n) ((qs48_t)((n)*0x0100))
#define qs510(n) ((qs510_t)((n)*0x0400))
#define qu510(n) ((qu510_t)((n)*0x0400))
#define qs102(n) ((qs102_t)((n)*0x0004))
#define qu102(n) ((qu102_t)((n)*0x0004))
#define qs105(n) ((qs105_t)((n)*0x0020))
#define qu105(n) ((qu105_t)((n)*0x0020))
#define qs132(n) ((qs132_t)((n)*0x0004))
#define qs142(n) ((qs142_t)((n)*0x0004))
#define qs1516(n) ((qs1516_t)((n)*0x00010000))
#define qs1616(n) ((qs1616_t)((n)*0x00010000))
#define qs205(n) ((qs205_t)((n)*0x00000020))
extern OSDevMgr __osPiDevMgr;
extern OSPiHandle *__osCurrentHandle[2];
extern OSMesgQueue piEventQueue;
@ -31,9 +61,14 @@ typedef u8 bool;
#define true 1
#define MAX_BYTES_TO_READ 512
#define ARRAY_LENGTH(x) ((sizeof(x)) / (sizeof(x[0])))
#define SCREEN_WIDTH_MIN 320
#define SCREEN_HEIGHT_MIN 240
#define SCREEN_WIDTH_MAX 640
#define SCREEN_HEIGHT_MAX 480
#include "character.h"
typedef struct {
@ -487,89 +522,27 @@ typedef struct {
/* 0xb */ u8 field_0xb;
} ItemData; // size:0xc
extern ItemData ITEM_DATA[45];
extern ItemData obItemData[45];
extern char *item_get_name(u16 arg0);
extern char *obItemGetName(u16 arg0);
extern u8 item_get_field_0x4(u16 arg0);
extern u8 item_get_field_0x5(u16 arg0);
extern u8 item_get_field_0x8(u16 arg0);
extern u8 item_get_field_0x9(u16 arg0);
void func_80179354(); /* extern */
extern void func_80179354();
extern Gfx* PTR_DISPLAY_LIST;
extern Gfx DISPLAY_LIST_80186310[];
extern Gfx DISPLAY_LIST_80186330[];
extern Gfx DISPLAY_LIST_80186320[];
extern Gfx DISPLAY_LIST_80186358[];
extern Gfx DP_FILL_RECT_639x479[];
extern Gfx DL_DRAW_TEX_2560x1920[];
extern Gfx DISPLAY_LIST_801869C8[];
extern Gfx DISPLAY_LIST_80186BD0[];
extern Gfx DISPLAY_LIST_80186D90[];
extern Gfx DISPLAY_LIST_80186E70[];
extern Gfx DISPLAY_LIST_800A9EF0[];
extern Gfx DISPLAY_LIST_80186C60[];
extern Gfx DISPLAY_LIST_80186D00[];
extern Gfx DISPLAY_LIST_80186DD0[];
extern Gfx DISPLAY_LIST_80186E20[];
extern Gfx DISPLAY_LIST_800A96C8[];
extern Gfx DISPLAY_LIST_800A9790[];
extern Gfx DISPLAY_LIST_800A97C8[];
extern Gfx DISPLAY_LIST_800A9810[];
extern Gfx DISPLAY_LIST_8018FA70[];
extern Gfx DISPLAY_LIST_8018FC80[];
extern Gfx DISPLAY_LIST_8018FD10[];
extern Gfx DISPLAY_LIST_8018F3E0[];
extern Gfx DISPLAY_LIST_801EABF0[];
extern Gfx DISPLAY_LIST_801EAC40[];
extern Gfx DISPLAY_LIST_801EB1D0[];
extern Gfx DISPLAY_LIST_801ED650[];
extern Gfx DISPLAY_LIST_801FD0E8[];
extern Gfx DISPLAY_LIST_801FCF70[];
extern Gfx DISPLAY_LIST_801FCF98[];
extern Gfx DISPLAY_LIST_801FD280[];
extern Gfx DISPLAY_LIST_801FD328[];
extern Gfx DISPLAY_LIST_801FD3D0[];
extern Gfx DISPLAY_LIST_801FD3E8[];
extern Gfx DISPLAY_LIST_801FD400[];
extern Gfx DISPLAY_LIST_801FD450[];
extern Gfx DISPLAY_LIST_801FD4A0[];
extern Gfx DISPLAY_LIST_801FD4F0[];
extern Gfx DISPLAY_LIST_801FD598[];
extern Gfx DISPLAY_LIST_801FD5B0[];
extern Gfx DISPLAY_LIST_801FD640[];
extern Gfx DISPLAY_LIST_801FD658[];
extern Gfx DISPLAY_LIST_801FD6F8[];
extern Gfx DISPLAY_LIST_801FD740[];
extern Gfx DISPLAY_LIST_801FD7D0[];
extern Gfx DISPLAY_LIST_801FD7E8[];
extern Gfx DISPLAY_LIST_801FD878[];
extern Gfx DISPLAY_LIST_80213648[];
extern Gfx DISPLAY_LIST_8021F0C0[];
extern Gfx DISPLAY_LIST_8021F108[];
extern Gfx DISPLAY_LIST_80219C48[];
extern Gfx DISPLAY_LIST_80219CD0[];
extern Gfx DISPLAY_LIST_8021ABC0[];
extern Gfx DISPLAY_LIST_8021ABE8[];
extern Gfx DISPLAY_LIST_80216BF0[];
extern Gfx DISPLAY_LIST_80216C70[];
extern Gfx DISPLAY_LIST_80216F18[];
extern Gfx DISPLAY_LIST_8021C6E0[];
extern Gfx DISPLAY_LIST_8021C230[];
extern Gfx DISPLAY_LIST_8021C568[];
extern Gfx DISPLAY_LIST_8021C698[];
extern Gfx DISPLAY_LIST_8022A0B0[];
extern Gfx DISPLAY_LIST_8022A0D0[];
extern Gfx DISPLAY_LIST_80229FB8[];
extern Gfx DISPLAY_LIST_8022A030[];
extern Gfx DISPLAY_LIST_8022A068[];
extern Gfx DISPLAY_LIST_801B8218[];
extern Gfx DISPLAY_LIST_801B8268[];
extern Gfx DISPLAY_LIST_801B82B0[];
extern Gfx DISPLAY_LIST_801B8308[];
extern Gfx DISPLAY_LIST_801B8358[];
extern Gfx DISPLAY_LIST_801B8388[];
extern Vp obVpMinResolution;
extern Vp obVpMaxResolution;
extern Gfx obDlSetupMinResolution[];
extern Gfx obDlSetupMaxResolution[];
extern Lights2 LIGHTS_801869A0;
#endif

View File

@ -74,32 +74,32 @@ typedef struct {
ASSERT_SIZE(EquipmentData, 0x20);
extern char *EQUIPMENT_TYPE_NAMES[];
extern EquipmentData EQUIPMENT_DATA[];
extern s8 (*FP_EQUIPMENT_GET_RESISTANCE[])(EquipmentId index);
extern char *obEquipmentTypeName[];
extern EquipmentData obEquipmentData[];
extern s8 (*obEquipmentGetResistance[])(EquipmentId index);
extern char *equipment_get_name(EquipmentId index);
extern EquipmentType equipment_get_type(EquipmentId index);
extern Element equipment_get_element(EquipmentId index);
extern char *obEquipmentGetName(EquipmentId index);
extern EquipmentType obEquipmentGetType(EquipmentId index);
extern Element obEquipmentGetElement(EquipmentId index);
extern u8 equipment_get_field_0x6(EquipmentId index);
extern u16 equipment_get_buy_price(EquipmentId index);
extern u16 obEquipmentGetBuyPrice(EquipmentId index);
extern s8 equipment_get_field_0x10(EquipmentId index);
extern s8 equipment_get_strength(EquipmentId index);
extern s8 equipment_get_vitality(EquipmentId index);
extern s8 equipment_get_intelligence(EquipmentId index);
extern s8 equipment_get_mentality(EquipmentId index);
extern s8 equipment_get_agility(EquipmentId index);
extern s8 equipment_get_dexterity(EquipmentId index);
extern s8 obEquipmentGetStrength(EquipmentId index);
extern s8 obEquipmentGetVitality(EquipmentId index);
extern s8 obEquipmentGetIntelligence(EquipmentId index);
extern s8 obEquipmentGetMentality(EquipmentId index);
extern s8 obEquipmentGetAgility(EquipmentId index);
extern s8 obEquipmentGetDexterity(EquipmentId index);
extern s8 equipment_get_resistance_strike(EquipmentId index);
extern s8 equipment_get_resistance_wind(EquipmentId index);
extern s8 equipment_get_resistance_fire(EquipmentId index);
extern s8 equipment_get_resistance_earth(EquipmentId index);
extern s8 equipment_get_resistance_water(EquipmentId index);
extern s8 equipment_get_resistance_holy(EquipmentId index);
extern s8 equipment_get_resistance_dark(EquipmentId index);
extern s8 obEquipmentGetResistanceStrike(EquipmentId index);
extern s8 obEquipmentGetResistanceWind(EquipmentId index);
extern s8 obEquipmentGetResistanceFire(EquipmentId index);
extern s8 obEquipmentGetResistanceEarth(EquipmentId index);
extern s8 obEquipmentGetResistanceWater(EquipmentId index);
extern s8 obEquipmentGetResistanceVirtue(EquipmentId index);
extern s8 obEquipmentGetResistanceBane(EquipmentId index);
extern u8 equipment_get_field_0x18_b68(EquipmentId index);
extern u8 equipment_get_field_0x18_b46(EquipmentId index);
@ -113,12 +113,12 @@ extern u8 equipment_get_field_0x19_b12(EquipmentId index);
extern u8 equipment_get_field_0x1a_b7(EquipmentId index);
extern u8 equipment_is_weapon(EquipmentId index);
extern EquipmentId equipment_get_first_weapon(EquipmentId arg0,
extern u8 obEquipmentIsWeapon(EquipmentId index);
extern EquipmentId obEquipmentGetFirstWeapon(EquipmentId arg0,
EquipmentId arg1,
EquipmentId arg2,
EquipmentId arg3);
extern EquipmentId equipment_get_first_spellbook(EquipmentId arg0,
extern EquipmentId obEquipmentGetFirstSpellbook(EquipmentId arg0,
EquipmentId arg1,
EquipmentId arg2,
EquipmentId arg3);

10
include/str_decorate.h Normal file
View File

@ -0,0 +1,10 @@
#ifndef __STR_DECORATE_H__
#define __STR_DECORATE_H__
#define DECORATE(s) ("\x0E" s "\x0F");
// Newline
#define NEWLINE "\x10"
// Indent string
#define INDENT "\x63"
#endif // __STR_DECORATE_H__

View File

@ -459,17 +459,30 @@ segments:
- [0x5C1D0, asm]
- [0x5C210, .data, "dl"]
- [0x5C220, .data, "dl"]
- [0x5C230, .data, "dl"]
- [0x5C280, .data, "dl"]
- [0x5C510, .data, "dl"]
- [0x5C8A0, data]
- [0x5CD70, data]
# - [0x5C220, data]
# - [0x5C230, data]
# - [0x5C280, data]
# - [0x5C510, data]
# - [0x5C8A0, data]
# - [0x5CAD0, data]
# - [0x5CB60, data]
# - [0x5CC00, data]
# - [0x5CC90, data]
# - [0x5CCD0, data]
# - [0x5CD20, data]
# - [0x5CD70, data]
- [0x5CE70, .data, "strategy.data"]
- [0x5CEF0, data]
- [0x5CF00, data]
- [0x5CF20, data]
- [0x5CF30, data]
- [0x5D560, data]
- [0x5D560, .data, "5D560.data"]
# - [0x5D560, data]
# - [0x5D5C0, data]
- [0x5DB10, data]
- [0x613B0, data]
- [0x647F0, data]

86
src/5C8A0.data.c Normal file
View File

@ -0,0 +1,86 @@
#include "common.h"
#include "gbi.h"
/* 5C8A0 801869A0 */
Lights2 LIGHTS_801869A0 = gdSPDefLights2(
// ar, ag, ab
5, 5, 5,
// r1, g1, b1
100, 100, 0,
// x1, y1, z1
32, 64, 32,
// r2, g2, b2
50, 50, 0x00,
// x2, y2, z2
15, 30, 100
);
extern u8 D_6000000;
/* 5C8C8 801869C8 */
Gfx DISPLAY_LIST_801869C8[] = {
gsDPPipeSync(),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPPipeSync(),
gsSPViewport(&obVpMinResolution),
gsSPClearGeometryMode(
G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG |
G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR |
G_LOD | G_SHADING_SMOOTH | G_CLIPPING | 0x0040F9FA
),
gsSPTexture(0, 0, 0, G_TX_RENDERTILE, G_OFF),
gsSPSetGeometryMode(G_SHADE | G_SHADING_SMOOTH),
gsSPClipRatio(FRUSTRATIO_2),
gsSPFogPosition(900, 1000),
gsSPSetLights2(LIGHTS_801869A0),
gsDPPipeSync(),
{0xE3000800, 0x00000000},
gsDPPipeSync(),
{0xED000000, 0x004FC3BC},
gsDPPipeSync(),
{0xE3000F00, 0x00000000},
{0xE3001001, 0x00000000},
{0xE3000D01, 0x00000000},
{0xE3000C00, 0x00080000},
{0xE3001201, 0x00002000},
{0xE3001402, 0x00000C00},
{0xFCFFFFFF, 0xFFFE793C},
{0xE3001700, 0x00000000},
{0xE2001E01, 0x00000000},
{0xE200001C, 0x0F0A4000},
{0x00000000, 0x00000000},
{0xE3001801, 0x00000000},
{0xFB000000, 0x00000000},
{0xFA000000, 0x00000000},
{0xF9000000, 0x00000000},
{0xF8000000, 0x00000000},
{0xF7000000, 0x00000000},
{0xEE000000, 0x00000000},
{0xEC000000, 0x00000000},
{0xEB000000, 0x00000000},
{0xEA000000, 0x00000000},
{0xF5100000, 0x00000000},
{0xF5100000, 0x01000000},
{0xF5100000, 0x02000000},
{0xF5100000, 0x03000000},
{0xF5100000, 0x04000000},
{0xF5100000, 0x05000000},
{0xF5100000, 0x6000000},
{0xF5100000, 0x07000000},
gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, 0, 0),
{0xF2000000, 0x01000000},
{0xF2000000, 0x02000000},
{0xF2000000, 0x03000000},
{0xF2000000, 0x04000000},
{0xF2000000, 0x05000000},
gsDPSetTileSize(6, 0, 0, 0, 0),
gsDPSetTileSize(G_TX_LOADTILE, 0, 0, 0, 0),
gsSPSetLights2(LIGHTS_801869A0),
gsDPPipeSync(),
gsSPEndDisplayList(),
};

254
src/5D560.data.c Normal file
View File

@ -0,0 +1,254 @@
#include "common.h"
#include "str_decorate.h"
/* 5D560 80187660 */
char obElementNamePhysical[] = "Physical";
/* 5D56C 8018766C */
char obElementNameWind[] = "Wind";
/* 5D574 80187674 */
char obElementNameFlame[] = "Flame";
/* 5D57C 8018767C */
char obElementNameEarth[] = "Earth";
/* 5D584 80187684 */
char obElementNameWater[] = "Water";
/* 5D58C 8018768C */
char obElementNameVirtue[] = "Virtue";
/* 5D594 80187694 */
char obElementNameBane[] = "Bane";
/* 5D59C 8018769C */
char obElementNameDrakonite[] = "Drakonite";
/* 5D5A8 801876A8 */
char obElementNameVariable[] = "Variable";
/* 5D5B4 801876B4 */
char obElementNameWindFlame[] = "Wind+Flame";
/* 5D5C0 801876C0 */
char obElementNameFlameWind[] = "Flame+Wind";
/* 5D5CC 801876CC */
char obElementNameEarthFlame[] = "Earth+Flame";
/* 5D5D8 801876D8 */
char obElementNameWaterEarth[] = "Water+Earth";
/* 5D5E4 801876E4 */
char obElementNameWindBane[] = "Wind+Bane";
/* 5D5F0 801876F0 */
char obElementNameFlameBane[] = "Flame+Bane";
/* 5D5FC 801876FC */
char obAbilityNameThrust[] = "Thrust";
/* 5D604 80187704 */
char obAbilityNamePeck[] = "Peck";
/* 5D60C 8018770C */
char obAbilityNamePierce[] = "Pierce";
/* 5D614 80187714 */
char obAbilityNameSlash[] = "Slash";
/* 5D61C 8018771C */
char obAbilityNameCleave[] = "Cleave";
/* 5D624 80187724 */
char obAbilityNameRend[] = "Rend";
/* 5D62C 8018772C */
char obAbilityNameClaw[] = "Claw";
/* 5D634 80187734 */
char obAbilityNameBite[] = "Bite";
/* 5D63C 8018773C */
char obAbilityNameStrike[] = "Strike";
/* 5D644 80187744 */
char obAbilityNameCrush[] = "Crush";
/* 5D64C 8018774C */
char obAbilityNameSmash[] = "Smash";
/* 5D654 80187754 */
char obAbilityNameLash[] = "Lash";
/* 5D65C 8018775C */
char obAbilityNamePullStrings[] = "Pull Strings";
/* 5D66C 8018776C */
char obAbilityNameShoot[] = "Shoot";
/* 5D674 80187774 */
char obAbilityNameTakeAPeek[] = "Take a Peek";
/* 5D680 80187780 */
char obAbilityNameFlipOver[] = "Flip Over";
/* 5D68C 8018778C */
char obAbilityNameSonicBoom[] = "Sonic Boom";
/* 5D698 80187798 */
char obAbilityNameWindShot[] = "Wind Shot";
/* 5D6A4 801877A4 */
char obAbilityNameThunderArrow[] = DECORATE("Thunder" NEWLINE INDENT "Arrow");
/* 5D6B8 801877B8 */
char obAbilityNameWindStorm[] = "Wind Storm";
/* 5D6C4 801877C4 */
char obAbilityNameMesmerize[] = "Mesmerize";
/* 5D6D0 801877D0 */
char obAbilityNameLifeDrain[] = "Life Drain";
/* 5D6DC 801877DC */
char obAbilityNameThrowAKiss[] = "Throw a Kiss";
/* 5D6EC 801877EC */
char obAbilityNameGazeOfTerror[] = DECORATE("Gaze of" NEWLINE INDENT "Terror");
/* 5D700 80187800 */
char obAbilityNamePumpkinSmash[] = "Pumpkin Smash";
/* 5D710 80187810 */
char obAbilityNamePumpkinShower[] = DECORATE("Pumpkin" NEWLINE INDENT "Shower");
/* 5D724 80187824 */
char obAbilityNameBanish[] = "Banish";
/* 5D72C 8018782C */
char obAbilityNameJihad[] = "Jihad";
/* 5D734 80187834 */
char obAbilityNameMagicMissile[] = "Magic Missile";
/* 5D744 80187844 */
char obAbilityNameAbyss[] = "Abyss";
/* 5D74C 8018784C */
char obAbilityNameLightningBreath[] = DECORATE("Lightning" NEWLINE INDENT "Breath");
/* 5D760 80187860 */
char obAbilityNameFireBreath[] = "Fire Breath";
/* 5D76C 8018786C */
char obAbilityNameAcidBreath[] = "Acid Breath";
/* 5D778 80187878 */
char obAbilityNameBreathOfCold[] = "Breath of Cold";
/* 5D788 80187888 */
char obAbilityNameSacredBreath[] = "Sacred Breath";
/* 5D798 80187898 */
char obAbilityNameRottenBreath[] = "Rotten Breath";
/* 5D7A8 801878A8 */
char obAbilityNamePetrify[] = "Petrify";
/* 5D7B0 801878B0 */
char obAbilityNameRadiantGale[] = "Radiant Gale";
/* 5D7C0 801878C0 */
char obAbilityNameCrimsonNote[] = "Crimson Note";
/* 5D7D0 801878D0 */
char obAbilityNameEarthquake[] = "Earthquake";
/* 5D7DC 801878DC */
char obAbilityNameClearDisaster[] = DECORATE("Clear" NEWLINE INDENT "Disaster");
/* 5D7F0 801878F0 */
char obAbilityNameDivineRay[] = "Divine Ray";
/* 5D7FC 801878FC */
char obAbilityNameEvilDead[] = "Evil Dead";
/* 5D808 80187908 */
char obAbilityNameEvocation[] = "Evocation";
/* 5D814 80187914 */
char obAbilityNameNinjaArt[] = "Ninja Art";
/* 5D820 80187920 */
char obAbilityNameLightning[] = "Lightning";
/* 5D82C 8018792C */
char obAbilityNameThunderFlare[] = "Thunder Flare";
/* 5D83C 8018793C */
char obAbilityNameShockBolt[] = "Shock Bolt";
/* 5D848 80187948 */
char obAbilityNameThunderbird[] = "Thunderbird";
/* 5D854 80187954 */
char obAbilityNameFireball[] = "Fireball";
/* 5D860 80187960 */
char obAbilityNameFireStorm[] = "Fire Storm";
/* 5D86C 8018796C */
char obAbilityNameRayOfParalysis[] = DECORATE("Ray of" NEWLINE INDENT "Paralysis");
/* 5D880 80187980 */
char obAbilityNameSalamander[] = "Salamander";
/* 5D88C 8018798C */
char obAbilityNameAcidVapor[] = "Acid Vapor";
/* 5D898 80187998 */
char obAbilityNameCragPress[] = "Crag Press";
/* 5D8A4 801879A4 */
char obAbilityNamePoisonCloud[] = "Poison Cloud";
/* 5D8B4 801879B4 */
char obAbilityNameGnome[] = "Gnome";
/* 5D8BC 801879BC */
char obAbilityNameIceBlast[] = "Ice Blast";
/* 5D8C8 801879C8 */
char obAbilityNameIceField[] = "Ice Field";
/* 5D8D4 801879D4 */
char obAbilityNameSlumberMist[] = "Slumber Mist";
/* 5D8E4 801879E4 */
char obAbilityNameFenrir[] = "Fenrir";
/* 5D8EC 801879EC */
char obAbilityNameHealing[] = "Healing";
/* 5D8F4 801879F4 */
char obAbilityNameHealingPlus[] = "Healing Plus";
/* 5D904 80187A04 */
char obAbilityNameWordOfPain[] = "Word of Pain";
/* 5D914 80187A14 */
char obAbilityNameDarkQuest[] = "Dark Quest";
/* 5D920 80187A20 */
char obAbilityNameNightmare[] = "Nightmare";
/* 5D92C 80187A2C */
char obAbilityNameDarkLore[] = "Dark Lore";
/* 5D938 80187A38 */
char obAbilityNameTempest[] = "Tempest";
/* 5D940 80187A40 */
char obAbilityNameAnnihilation[] = "Annihilation";
/* 5D950 80187A50 */
char obAbilityNameMeteorStrike[] = "Meteor Strike";
/* 5D960 80187A60 */
char obAbilityNameWhiteMute[] = "White Mute";
/* 5D96C 80187A6C */
char obAbilityNameIonosphere[] = "Ionosphere";
/* 5D978 80187A78 */
char obAbilityNameAtmosphere[] = "Atmosphere";
/* 5D984 80187A84 */
char obAbilityNameDeepSleep[] = "Deep Sleep";
/* 5D990 80187A90 */
char obAbilityNamePlasmaBall[] = "Plasma Ball";
/* 5D99C 80187A9C */
char obAbilityNamePlasmaStorm[] = "Plasma Storm";
/* 5D9AC 80187AAC */
char obAbilityNameBindFlare[] = "Bind Flare";
/* 5D9B8 80187AB8 */
char obAbilityNameLavaShot[] = "Lava Shot";
/* 5D9C4 80187AC4 */
char obAbilityNameLavaFlow[] = "Lava Flow";
/* 5D9D0 80187AD0 */
char obAbilityNamePoisonPlant[] = "Poison Plant";
/* 5D9E0 80187AE0 */
char obAbilityNameClayAssault[] = "Clay Assault";
/* 5D9F0 80187AF0 */
char obAbilityNameBlueSpiral[] = "Blue Spiral";
/* 5D9FC 80187AFC */
char obAbilityNamePoisonLime[] = "Poison Lime";
/* 5DA08 80187B08 */
char obAbilityNameInfest[] = "Infest";
/* 5DA10 80187B10 */
char obAbilityNameInferno[] = "Inferno";
/* 5DA18 80187B18 */
char obAbilityNameBlackBreeze[] = "Black Breeze";
/* 5DA28 80187B28 */
char obAbilityNameDarkBlaze[] = "Dark Blaze";
/* 5DA34 80187B34 */
char obAbilityNameDarkFlame[] = "Dark Flame";
/* 5DA40 80187B40 */
char obAbilityNameDoom[] = "Doom";
/* 5DA48 80187B48 */
char obAbilityNameSonicBlast[] = "Sonic Blast";
/* 5DA54 80187B54 */
char obAbilityNameWindBlast[] = "Wind Blast";
/* 5DA60 80187B60 */
char obAbilityNameFireBlast[] = "Fire Blast";
/* 5DA6C 80187B6C */
char obAbilityNameEarthBlast[] = "Earth Blast";
/* 5DA78 80187B78 */
char obAbilityNameAquaBlast[] = "Aqua Blast";
/* 5DA84 80187B84 */
char obAbilityNameHolyBlast[] = "Holy Blast";
/* 5DA90 80187B90 */
char obAbilityNameDarkBlast[] = "Dark Blast";
/* 5DA9C 80187B9C */
char obAbilityNameSonicBlade[] = "Sonic Blade";
/* 5DAA8 80187BA8 */
char obAbilityNameIgnisFatuus[] = "Ignis Fatuus";
/* 5DAB8 80187BB8 */
char obAbilityNameMirageSlash[] = "Mirage Slash";
/* 5DAC8 80187BC8 */
char obAbilityNameFatalDance[] = "Fatal Dance";
/* 5DAD4 80187BD4 */
char* obElementName[] = {
obElementNamePhysical,
obElementNameWind,
obElementNameFlame,
obElementNameEarth,
obElementNameWater,
obElementNameVirtue,
obElementNameBane,
obElementNameDrakonite,
obElementNameVariable,
obElementNameWindFlame,
obElementNameFlameWind,
obElementNameEarthFlame,
obElementNameWaterEarth,
obElementNameWindBane,
obElementNameFlameBane
};

View File

@ -5,32 +5,32 @@
#include "class.h"
/* 44340 8016E440 */
char* ability_get_name(u8 index) {
return ABILITY_DATA[index].name;
char* obAbilityGetName(u8 index) {
return obAbilityData[index].name;
}
/* 44358 8016E458 */
u8 ability_get_field_0x4(u8 index) {
return ABILITY_DATA[index].field_0x4;
return obAbilityData[index].field_0x4;
}
/* 44370 8016E470 */
Element ability_get_element(u8 index, u16 arg1, u16 arg2, s32 arg3, u16 arg4) {
Element obAbilityGetElement(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 (obAbilityData[index].element != ELEMENT_INVALID && obAbilityData[index].element != 0xF)
return obAbilityData[index].element;
if (ABILITY_DATA[index].field_0x4 == 3) {
item_index = equipment_get_first_spellbook(arg1, arg2, arg3, arg4);
if (obAbilityData[index].field_0x4 == 3) {
item_index = obEquipmentGetFirstSpellbook(arg1, arg2, arg3, arg4);
} else {
item_index = equipment_get_first_weapon(arg1, arg2, arg3, arg4);
item_index = obEquipmentGetFirstWeapon(arg1, arg2, arg3, arg4);
}
if (item_index == 0)
return ELEMENT_PHYSICAL;
return equipment_get_element(item_index);
return obEquipmentGetElement(item_index);
}
@ -88,27 +88,27 @@ INCLUDE_ASM(const s32, "ability", __character_handle_levelup);
INCLUDE_ASM(const s32, "ability", __character_initialise);
/* 453E0 8016F4E0 */
char *item_get_name(u16 arg0) {
return ITEM_DATA[arg0].name;
char *obItemGetName(u16 arg0) {
return obItemData[arg0].name;
}
/* 45400 8016F500 */
u8 item_get_field_0x4(u16 arg0) {
return ITEM_DATA[arg0].field_0x4;
return obItemData[arg0].field_0x4;
}
/* 45420 8016F520 */
u8 item_get_field_0x5(u16 arg0) {
return ITEM_DATA[arg0].field_0x5;
return obItemData[arg0].field_0x5;
}
/* 45440 8016F540 */
u8 item_get_field_0x8(u16 arg0) {
return ITEM_DATA[arg0].field_0x8;
return obItemData[arg0].field_0x8;
}
/* 45460 8016F560 */
u8 item_get_field_0x9(u16 arg0) {
return ITEM_DATA[arg0].field_0x9;
return obItemData[arg0].field_0x9;
}

View File

@ -202,14 +202,14 @@ char* class_get_ability_front_name(u8 portrait, u8 class) {
var_v0 = CLASS_DATA[class].ability_front;
}
return ability_get_name(var_v0);
return obAbilityGetName(var_v0);
}
/* 44040 8016E140 */
char* class_get_ability_middle_name(u8 portrait, u8 class) {
// Possible a C macro wrapping?
do {
char* ret = ability_get_name(CLASS_DATA[class].ability_middle);
char* ret = obAbilityGetName(CLASS_DATA[class].ability_middle);
return ret;
} while(0);
}
@ -224,7 +224,7 @@ char* class_get_ability_back_name(u8 portrait, u8 class) {
var_v0 = CLASS_DATA[class].ability_back;
}
return ability_get_name(var_v0);
return obAbilityGetName(var_v0);
}
/* 440DC 8016E1DC */

295
src/dl.c
View File

@ -3,36 +3,39 @@
#include "common.h"
/* 5C210 80186310 */
Gfx DISPLAY_LIST_80186310[] = {
gsSPModifyVertex(240, 0x0080, 0x01FF0000),
gsSPModifyVertex(240, 0x0080, 0x01FF0000),
Vp obVpMinResolution = {
(SCREEN_WIDTH_MIN / 2) * 4, (SCREEN_HEIGHT_MIN / 2) * 4, 511, 0,
(SCREEN_WIDTH_MIN / 2) * 4, (SCREEN_HEIGHT_MIN / 2) * 4, 511, 0
};
/* 5C220 80186320 */
Gfx DISPLAY_LIST_80186320[] = {
// 0x050003C0, 0x01FF0000
{ 0x050003C0, 0x01FF0000 },
// { _SHIFTL(G_TRI1, 24, 8) | 0x000003C0, __gsSP1Triangle_w1f(25.5, 0, 0, 1) },
// 0x050003C0, 0x01FF0000
{ 0x050003C0, 0x01FF0000 },
// { _SHIFTL(G_TRI1, 24, 8) | 0x000003C0, __gsSP1Triangle_w1f(25.5, 0, 0, 1) },
Vp obVpMaxResolution = {
(SCREEN_WIDTH_MAX / 2) * 4, (SCREEN_HEIGHT_MAX / 2) * 4, 511, 0,
(SCREEN_WIDTH_MAX / 2) * 4, (SCREEN_HEIGHT_MAX / 2) * 4, 511, 0
};
/* 5C230 80186330 */
Gfx DISPLAY_LIST_80186330[] = {
gsDma1p(G_MOVEMEM, DISPLAY_LIST_80186310, 8, 8),
Gfx obDlSetupMinResolution[] = {
gsSPViewport(&obVpMinResolution),
gsDPPipeSync(),
gsDPSetScissorFrac(0, 0, 0, 1276, 956),
gsDPSetScissor(
G_SC_NON_INTERLACE,
0, 0,
SCREEN_WIDTH_MIN - 1, SCREEN_HEIGHT_MIN - 1
),
gsDPPipeSync(),
gsSPEndDisplayList(),
};
/* 5C258 80186358 */
Gfx DISPLAY_LIST_80186358[] = {
gsDma1p(G_MOVEMEM, DISPLAY_LIST_80186320, 8, 8),
// /* 5C258 80186358 */
Gfx obDlSetupMaxResolution[] = {
gsSPViewport(&obVpMaxResolution),
gsDPPipeSync(),
gsDPSetScissorFrac(0, 0, 0, 2560, 1920),
gsDPSetScissor(
G_SC_NON_INTERLACE,
0, 0,
SCREEN_WIDTH_MAX, SCREEN_HEIGHT_MAX
),
gsDPPipeSync(),
gsSPEndDisplayList(),
};
@ -209,34 +212,228 @@ Gfx DL_DRAW_TEX_2560x1920[] = {
gsSPEndDisplayList(),
};
// /* 65970 8018FA70 */
// const Gfx DISPLAY_LIST_8018FA70[] = {
//
// gsDPPipeSync(),
//
// gsDPPipeSync(),
// // 0xE3000A01, 0x00000000
// gsSPSetOtherMode(G_SETOTHERMODE_H, 10, 1, 0x0),
//
// gsDPPipeSync(),
// // 0xD9000000, 0x00000000
// { 0xD9000000, 0x00000000 },
// // 0xD9FFFFFF, 0x00200404
// { 0xD9FFFFFF, 0x00200404 },
// // 0xE200001C, 0x0F0A4000
// gsSPSetOtherMode(G_SETOTHERMODE_L, 0, 28, 0x0F0A4000),
// // 0xFC121824, 0xFF33FFFF
// gsDPSetCombine(0x121824,0xFF33FFFF),
// // 0xE3000C00, 0x00080000
// gsSPSetOtherMode(G_SETOTHERMODE_H, 12, 0, 0x80000),
// // 0xE2001E01, 0x00000000
// gsSPSetOtherMode(G_SETOTHERMODE_L, 30, 1, 0x0),
// // 0xDE000000, 0x80186330
// gsSPDisplayList(0x80186330),
// // 0xD7000002, 0x80008000
// gsSPTexture(0x8000, 0x8000, 0, 0, 2),
//
// gsDPPipeSync(),
//
// gsSPEndDisplayList(),
// };
/* 5C8A0 801869A0 */
Lights2 LIGHTS_801869A0 = gdSPDefLights2(
// ar, ag, ab
5, 5, 5,
// r1, g1, b1
100, 100, 0,
// x1, y1, z1
32, 64, 32,
// r2, g2, b2
50, 50, 0x00,
// x2, y2, z2
15, 30, 100
);
/* 5C8C8 801869C8 */
Gfx DISPLAY_LIST_801869C8[] = {
gsDPPipeSync(),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPPipeSync(),
gsSPViewport(&obVpMinResolution),
gsSPClearGeometryMode(
G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG |
G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR |
G_LOD | G_SHADING_SMOOTH | G_CLIPPING | 0x0040F9FA
),
gsSPTexture(0, 0, 0, G_TX_RENDERTILE, G_OFF),
gsSPSetGeometryMode(G_SHADE | G_SHADING_SMOOTH),
gsSPClipRatio(FRUSTRATIO_2),
gsSPFogPosition(900, 1000),
gsSPSetLights2(LIGHTS_801869A0),
gsDPPipeSync(),
{0xE3000800, 0x00000000},
gsDPPipeSync(),
{0xED000000, 0x004FC3BC},
gsDPPipeSync(),
{0xE3000F00, 0x00000000},
{0xE3001001, 0x00000000},
{0xE3000D01, 0x00000000},
{0xE3000C00, 0x00080000},
{0xE3001201, 0x00002000},
{0xE3001402, 0x00000C00},
{0xFCFFFFFF, 0xFFFE793C},
{0xE3001700, 0x00000000},
{0xE2001E01, 0x00000000},
{0xE200001C, 0x0F0A4000},
{0x00000000, 0x00000000},
{0xE3001801, 0x00000000},
{0xFB000000, 0x00000000},
{0xFA000000, 0x00000000},
{0xF9000000, 0x00000000},
{0xF8000000, 0x00000000},
{0xF7000000, 0x00000000},
{0xEE000000, 0x00000000},
{0xEC000000, 0x00000000},
{0xEB000000, 0x00000000},
{0xEA000000, 0x00000000},
{0xF5100000, 0x00000000},
{0xF5100000, 0x01000000},
{0xF5100000, 0x02000000},
{0xF5100000, 0x03000000},
{0xF5100000, 0x04000000},
{0xF5100000, 0x05000000},
{0xF5100000, 0x6000000},
{0xF5100000, 0x07000000},
gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, 0, 0),
{0xF2000000, 0x01000000},
{0xF2000000, 0x02000000},
{0xF2000000, 0x03000000},
{0xF2000000, 0x04000000},
{0xF2000000, 0x05000000},
gsDPSetTileSize(6, 0, 0, 0, 0),
gsDPSetTileSize(G_TX_LOADTILE, 0, 0, 0, 0),
gsSPSetLights2(LIGHTS_801869A0),
gsDPPipeSync(),
gsSPEndDisplayList(),
};
/* 5CAD0 80186BD0 */
Gfx DISPLAY_LIST_80186BD0[] = {
{ 0xE7000000, 0x00000000 },
{ 0xD7000000, 0x00000000 },
{ 0xD9000000, 0x00000000 },
{ 0xE7000000, 0x00000000 },
{ 0xE7000000, 0x00000000 },
{ 0xE3000A01, 0x00000000 },
{ 0xE7000000, 0x00000000 },
{ 0xE3000C00, 0x00000000 },
{ 0xE3000D01, 0x00000000 },
{ 0xE3000F00, 0x00000000 },
{ 0xE3001001, 0x00000000 },
{ 0xFCFFFFFF, 0xFFFCF279 },
{ 0xE200001C, 0x0F0A4000 },
{ 0xE3001201, 0x00000000 },
{ 0xF9000000, 0xFFFFFF01 },
{ 0xE2001E01, 0x00000001 },
{ 0xE7000000, 0x00000000 },
{ 0xDF000000, 0x00000000 }
};
/* 5CB60 80186C60 */
Gfx DISPLAY_LIST_80186C60[] = {
{ 0xE7000000, 0x00000000 },
{ 0xD7000000, 0x00000000 },
{ 0xD9000000, 0x00000000 },
{ 0xD9FFFFFF, 0x00200004 },
{ 0xE7000000, 0x00000000 },
{ 0xE7000000, 0x00000000 },
{ 0xE3000A01, 0x00000000 },
{ 0xE7000000, 0x00000000 },
{ 0xE3000C00, 0x00000000 },
{ 0xE3000D01, 0x00000000 },
{ 0xE3000F00, 0x00000000 },
{ 0xE3001001, 0x00000000 },
{ 0xF9000000, 0xFFFFFF01 },
{ 0xE3001700, 0x00000000 },
{ 0xE2001E01, 0x00000000 },
{ 0xE3001201, 0x00000000 },
{ 0xFCFFFFFF, 0xFFFCF279 },
{ 0xE200001C, 0x00504240 },
{ 0xE7000000, 0x00000000 },
{ 0xDF000000, 0x00000000 }
};
/* 5CC00 80186D00 */
Gfx DISPLAY_LIST_80186D00[] = {
{ 0xE7000000, 0x00000000 },
{ 0xD7000000, 0x00000000 },
{ 0xD9000000, 0x00000000 },
{ 0xE7000000, 0x00000000 },
{ 0xE7000000, 0x00000000 },
{ 0xE3000A01, 0x00000000 },
{ 0xE7000000, 0x00000000 },
{ 0xE3000C00, 0x00000000 },
{ 0xE3000D01, 0x00000000 },
{ 0xE3000F00, 0x00000000 },
{ 0xE3001001, 0x00000000 },
{ 0xFCFFFFFF, 0xFFFCF279 },
{ 0xE200001C, 0x0F0A4000 },
{ 0xE3001201, 0x00000000 },
{ 0xF9000000, 0xFFFFFF01 },
{ 0xE2001E01, 0x00000000 },
{ 0xE7000000, 0x00000000 },
{ 0xDF000000, 0x00000000 },
};
/* 5CC90 80186D90 */
Gfx DISPLAY_LIST_80186D90[] = {
{ 0xE7000000, 0x00000000 },
{ 0xE3001201, 0x00002000 },
{ 0xFCFFFFFF, 0xFFFE793C },
{ 0xE200001C, 0x0F0A4000 },
{ 0xE2001E01, 0x00000000 },
{ 0xE3000C00, 0x00080000 },
{ 0xE7000000, 0x00000000 },
{ 0xDF000000, 0x00000000 },
};
/* 5CCD0 80186DD0 */
Gfx DISPLAY_LIST_80186DD0[] = {
{ 0xE7000000, 0x00000000 },
{ 0xE7000000, 0x00000000 },
{ 0xE3000A01, 0x00000000 },
{ 0xE7000000, 0x00000000 },
{ 0xD9000000, 0x00000405 },
{ 0xE200001C, 0x00552078 },
{ 0xFCFFFFFF, 0xFFFDF6FB },
{ 0xD7000000, 0x00000000 },
{ 0xE7000000, 0x00000000 },
{ 0xDF000000, 0x00000000 },
};
/* 5CD20 80186E20 */
Gfx DISPLAY_LIST_80186E20[] = {
{ 0xE7000000, 0x00000000 },
{ 0xE7000000, 0x00000000 },
{ 0xE3000A01, 0x00000000 },
{ 0xE7000000, 0x00000000 },
{ 0xD9000000, 0x00200405 },
{ 0xE200001C, 0x00552078 },
{ 0xFCFFFFFF, 0xFFFE793C },
{ 0xD7000000, 0x00000000 },
{ 0xE7000000, 0x00000000 },
{ 0xDF000000, 0x00000000 },
};
/* 5CD70 80186E70 */
Gfx DISPLAY_LIST_80186E70[] = {
{ 0xE7000000, 0x00000000 },
{ 0xFB000000, 0x00000000 },
{ 0xFA000000, 0x00000000 },
{ 0xF9000000, 0x00000000 },
{ 0xF8000000, 0x00000000 },
{ 0xF7000000, 0x00000000 },
{ 0xEE000000, 0x00000000 },
{ 0xEC000000, 0x00000000 },
{ 0xEB000000, 0x00000000 },
{ 0xEA000000, 0x00000000 },
{ 0xFCFFFFFF, 0xFFFE793C },
{ 0xE7000000, 0x00000000 },
{ 0xED000000, 0x004FC3BC },
{ 0xE7000000, 0x00000000 },
{ 0xF5100000, 0x00000000 },
{ 0xF5100000, 0x01000000 },
{ 0xF5100000, 0x02000000 },
{ 0xF5100000, 0x03000000 },
{ 0xF5100000, 0x04000000 },
{ 0xF5100000, 0x05000000 },
{ 0xF5100000, 0x06000000 },
{ 0xF5100000, 0x07000000 },
{ 0xF2000000, 0x00000000 },
{ 0xF2000000, 0x01000000 },
{ 0xF2000000, 0x02000000 },
{ 0xF2000000, 0x03000000 },
{ 0xF2000000, 0x04000000 },
{ 0xF2000000, 0x05000000 },
{ 0xF2000000, 0x06000000 },
{ 0xF2000000, 0x07000000 },
{ 0xE7000000, 0x00000000 },
{ 0xDF000000, 0x00000000 },
};

View File

@ -5,29 +5,29 @@
/* 45480 8016F580 */
u8 equipment_get_field_0x1b(EquipmentId index) {
return EQUIPMENT_DATA[index].field_0x1b;
return obEquipmentData[index].field_0x1b;
}
/* 45498 8016F598 */
u8 equipment_get_field_0x1c(EquipmentId index) {
return EQUIPMENT_DATA[index].field_0x1c;
return obEquipmentData[index].field_0x1c;
}
/* 454B0 8016F5B0 */
char* equipment_get_name(EquipmentId index) {
return EQUIPMENT_DATA[index].name;
char* obEquipmentGetName(EquipmentId index) {
return obEquipmentData[index].name;
}
/* 454C8 8016F5C8 */
EquipmentType equipment_get_type(EquipmentId index) {
return EQUIPMENT_DATA[index].type;
EquipmentType obEquipmentGetType(EquipmentId index) {
return obEquipmentData[index].type;
}
/* 454E0 8016F5E0 */
Element equipment_get_element(EquipmentId index) {
Element obEquipmentGetElement(EquipmentId index) {
Element element;
element = EQUIPMENT_DATA[index].element;
element = obEquipmentData[index].element;
if (element == ELEMENT_UNKNOWN_0x10) {
element = CHARACTER_SLOT[0].element;
}
@ -36,168 +36,168 @@ Element equipment_get_element(EquipmentId index) {
/* 45514 8016F614 */
u8 equipment_get_field_0x6(EquipmentId index) {
return EQUIPMENT_DATA[index].field_0x6;
return obEquipmentData[index].field_0x6;
}
/* 4552C 8016F62C */
u16 equipment_get_buy_price(EquipmentId index) {
return EQUIPMENT_DATA[index].buy_price;
u16 obEquipmentGetBuyPrice(EquipmentId index) {
return obEquipmentData[index].buy_price;
}
/* 45544 8016F644 */
s8 equipment_get_field_0x10(EquipmentId index) {
return EQUIPMENT_DATA[index].field_0x10;
return obEquipmentData[index].field_0x10;
}
/* 4555C 8016F65C */
s8 equipment_get_strength(EquipmentId index) {
s8 obEquipmentGetStrength(EquipmentId index) {
s8 ret;
if (index == EQUIPMENT_ID_GALLANT_DOLL) {
ret = CHARACTER_SLOT[0].strength / 20;
} else {
ret = EQUIPMENT_DATA[index].strength;
ret = obEquipmentData[index].strength;
}
return ret;
}
/* 455AC 8016F6AC */
s8 equipment_get_vitality(EquipmentId index) {
s8 obEquipmentGetVitality(EquipmentId index) {
s8 ret;
if (index == EQUIPMENT_ID_GALLANT_DOLL) {
ret = CHARACTER_SLOT[0].vitality / 20;
} else {
ret = EQUIPMENT_DATA[index].vitality;
ret = obEquipmentData[index].vitality;
}
return ret;
}
/* 455FC 8016F6FC */
s8 equipment_get_intelligence(EquipmentId index) {
s8 obEquipmentGetIntelligence(EquipmentId index) {
s8 ret;
if (index == EQUIPMENT_ID_GALLANT_DOLL) {
ret = CHARACTER_SLOT[0].intelligence / 20;
} else {
ret = EQUIPMENT_DATA[index].intelligence;
ret = obEquipmentData[index].intelligence;
}
return ret;
}
/* 4564C 8016F74C */
s8 equipment_get_mentality(EquipmentId index) {
s8 obEquipmentGetMentality(EquipmentId index) {
s8 ret;
if (index == EQUIPMENT_ID_GALLANT_DOLL) {
ret = CHARACTER_SLOT[0].mentality / 20;
} else {
ret = EQUIPMENT_DATA[index].mentality;
ret = obEquipmentData[index].mentality;
}
return ret;
}
/* 4569C 8016F79C */
s8 equipment_get_agility(EquipmentId index) {
s8 obEquipmentGetAgility(EquipmentId index) {
s8 ret;
if (index == EQUIPMENT_ID_GALLANT_DOLL) {
ret = CHARACTER_SLOT[0].agility / 20;
} else {
ret = EQUIPMENT_DATA[index].agility;
ret = obEquipmentData[index].agility;
}
return ret;
}
/* 456EC 8016F7EC */
s8 equipment_get_dexterity(EquipmentId index) {
s8 obEquipmentGetDexterity(EquipmentId index) {
s8 ret;
if (index == EQUIPMENT_ID_GALLANT_DOLL) {
ret = CHARACTER_SLOT[0].dexterity / 20;
} else {
ret = EQUIPMENT_DATA[index].dexterity;
ret = obEquipmentData[index].dexterity;
}
return ret;
}
/* 4573C 8016F83C */
s8 equipment_get_resistance_strike(EquipmentId index) {
return EQUIPMENT_DATA[index].res_strike;
s8 obEquipmentGetResistanceStrike(EquipmentId index) {
return obEquipmentData[index].res_strike;
}
/* 45754 8016F854 */
s8 equipment_get_resistance_wind(EquipmentId index) {
return EQUIPMENT_DATA[index].res_wind;
s8 obEquipmentGetResistanceWind(EquipmentId index) {
return obEquipmentData[index].res_wind;
}
/* 4576C 8016F86C */
s8 equipment_get_resistance_fire(EquipmentId index) {
return EQUIPMENT_DATA[index].res_fire;
s8 obEquipmentGetResistanceFire(EquipmentId index) {
return obEquipmentData[index].res_fire;
}
/* 45784 8016F884 */
s8 equipment_get_resistance_earth(EquipmentId index) {
return EQUIPMENT_DATA[index].res_earth;
s8 obEquipmentGetResistanceEarth(EquipmentId index) {
return obEquipmentData[index].res_earth;
}
/* 4579C 8016F89C */
s8 equipment_get_resistance_water(EquipmentId index) {
return EQUIPMENT_DATA[index].res_water;
s8 obEquipmentGetResistanceWater(EquipmentId index) {
return obEquipmentData[index].res_water;
}
/* 457B4 8016F8B4 */
s8 equipment_get_resistance_holy(EquipmentId index) {
return EQUIPMENT_DATA[index].res_holy;
s8 obEquipmentGetResistanceVirtue(EquipmentId index) {
return obEquipmentData[index].res_holy;
}
/* 457CC 8016F8CC */
s8 equipment_get_resistance_dark(EquipmentId index) {
return EQUIPMENT_DATA[index].res_dark;
s8 obEquipmentGetResistanceBane(EquipmentId index) {
return obEquipmentData[index].res_dark;
}
/* 457E4 8016F8E4 */
u8 equipment_get_field_0x18_b68(EquipmentId index) {
return EQUIPMENT_DATA[index].field_0x18 >> 6;
return obEquipmentData[index].field_0x18 >> 6;
}
/* 45800 8016F900 */
u8 equipment_get_field_0x18_b46(EquipmentId index) {
return (EQUIPMENT_DATA[index].field_0x18 >> 4) & 3;
return (obEquipmentData[index].field_0x18 >> 4) & 3;
}
/* 45820 8016F920 */
u8 equipment_get_field_0x18_b24(EquipmentId index) {
return (EQUIPMENT_DATA[index].field_0x18 >> 2) & 3;
return (obEquipmentData[index].field_0x18 >> 2) & 3;
}
/* 45840 8016F940 */
u8 equipment_get_field_0x18_b12(EquipmentId index) {
return EQUIPMENT_DATA[index].field_0x18 & 3;
return obEquipmentData[index].field_0x18 & 3;
}
/* 4585C 8016F95C */
u8 equipment_get_field_0x19_b68(EquipmentId index) {
return EQUIPMENT_DATA[index].field_0x19 >> 6;
return obEquipmentData[index].field_0x19 >> 6;
}
/* 45878 8016F978 */
u8 equipment_get_field_0x19_b46(EquipmentId index) {
return (EQUIPMENT_DATA[index].field_0x19 >> 4) & 3;
return (obEquipmentData[index].field_0x19 >> 4) & 3;
}
/* 45898 8016F998 */
u8 equipment_get_field_0x19_b24(EquipmentId index) {
return (EQUIPMENT_DATA[index].field_0x19 >> 2) & 3;
return (obEquipmentData[index].field_0x19 >> 2) & 3;
}
/* 458B8 8016F9B8 */
u8 equipment_get_field_0x19_b12(EquipmentId index) {
return EQUIPMENT_DATA[index].field_0x19 & 3;
return obEquipmentData[index].field_0x19 & 3;
}
/* 458D4 8016F9D4 */
u8 equipment_get_field_0x1a_b7(EquipmentId index) {
return EQUIPMENT_DATA[index].field_0x1a >> 7;
return obEquipmentData[index].field_0x1a >> 7;
}
/* 458F0 8016F9F0 */
bool equipment_is_weapon(EquipmentId index) {
s32 type = EQUIPMENT_DATA[index].type;
bool obEquipmentIsWeapon(EquipmentId index) {
s32 type = obEquipmentData[index].type;
if (type != 0) {
if (type < EQUIPMENT_TYPE_SMALL_SHIELD) {
@ -211,20 +211,20 @@ bool equipment_is_weapon(EquipmentId index) {
return false;
}
INCLUDE_ASM(const s32, "equipment", equipment_get_first_weapon);
INCLUDE_ASM(const s32, "equipment", obEquipmentGetFirstWeapon);
/* 45A50 8016FB50 */
EquipmentId equipment_get_first_spellbook(EquipmentId arg0, EquipmentId arg1, EquipmentId arg2, EquipmentId arg3) {
if (EQUIPMENT_DATA[arg0].type == EQUIPMENT_TYPE_SPELLBOOK)
EquipmentId obEquipmentGetFirstSpellbook(EquipmentId arg0, EquipmentId arg1, EquipmentId arg2, EquipmentId arg3) {
if (obEquipmentData[arg0].type == EQUIPMENT_TYPE_SPELLBOOK)
return arg0;
if (EQUIPMENT_DATA[arg1].type == EQUIPMENT_TYPE_SPELLBOOK)
if (obEquipmentData[arg1].type == EQUIPMENT_TYPE_SPELLBOOK)
return arg1;
if (EQUIPMENT_DATA[arg2].type == EQUIPMENT_TYPE_SPELLBOOK)
if (obEquipmentData[arg2].type == EQUIPMENT_TYPE_SPELLBOOK)
return arg2;
if (EQUIPMENT_DATA[arg3].type == EQUIPMENT_TYPE_SPELLBOOK)
if (obEquipmentData[arg3].type == EQUIPMENT_TYPE_SPELLBOOK)
return arg3;
return 0;

35
src/strategy.data.c Normal file
View File

@ -0,0 +1,35 @@
#include "common.h"
#include "class.h"
#include "str_decorate.h"
/* 5CE70 80186F70 */
char obStrategyNameAutonomous[] = DECORATE("Autonomous");
/* 5CE80 80186F80 */
char obStrategyNameAttackStrongest[] = DECORATE("Attack" NEWLINE INDENT "Strongest");
/* 5CE94 80186F94 */
char obStrategyNameAttackLeader[] = DECORATE("Attack" NEWLINE INDENT "Leader");
/* 5CEA8 80186FA8 */
char obStrategyNameAttackWeakest[] = DECORATE("Attack" NEWLINE INDENT "Weakest");
/* 5CEBC 80186FBC */
u8 D_80186FBC[] = { 0x07, 0x02, 0x06, 0x03, 0x05, 0x04, 0x01, 0x00 };
/* 5CEC4 80186FC4 */
char* obStrategyName[] = {
obStrategyNameAutonomous,
obStrategyNameAttackStrongest,
obStrategyNameAttackLeader,
obStrategyNameAttackWeakest
};
/* 5CED4 80186FD4 */
u16 (*obClassGetItem[])(u8 portrait, u8 class) = {
class_get_item_upper_left,
class_get_item_upper_right,
class_get_item_lower_left,
class_get_item_lower_right
};

View File

@ -12,10 +12,12 @@ VTX_8021EF08 = 0x8021EF08; // rom:0x16FF48
PTR_DISPLAY_LIST = 0x800E9BA0;
DISPLAY_LIST_80186310 = 0x80186310; // rom:0x5C210
DISPLAY_LIST_80186330 = 0x80186330; // rom:0x5C230
DISPLAY_LIST_80186320 = 0x80186320; // rom:0x5C220
DISPLAY_LIST_80186358 = 0x80186358; // rom:0x5C258
obVpMinResolution = 0x80186310; // rom:0x5C210
obVpMaxResolution = 0x80186320; // rom:0x5C220
obDlSetupMinResolution = 0x80186330; // rom:0x5C230
obDlSetupMaxResolution = 0x80186358; // rom:0x5C258
DP_FILL_RECT_639x479 = 0x80186380; // rom:0x5C280
DL_DRAW_TEX_2560x1920 = 0x80186610; // rom:0x5C510
DISPLAY_LIST_801869C8 = 0x801869C8; // rom:0x5C8C8
@ -90,6 +92,7 @@ DISPLAY_LIST_801B8358 = 0x801B8358; // rom:0x1EE858
DISPLAY_LIST_801B8388 = 0x801B8388; // rom:0x1EE888
DISPLAY_LIST_8021F058 = 0x8021F058; // rom:0x170098
LIGHTS_801869A0 = 0x801869A0; // rom:0x5C8A0 size:40
__SOMETHING_FRAMEBUFFERS = 0x800A9EE0; // rom:0x3A2E0 size:0xC
@ -125,8 +128,6 @@ D_801977D8 = 0x801977D8; // size:0x1E
D_80197710 = 0x80197710; // size:0x64
__CONTAINS_BATTALION_NAME = 0x80196A58; // size:0x94
STR_FATAL_DANCE = 0x80187BC8; // rom:0x5DAC8 type:asciz size:0xc
DEFAULT_BATTALION_NAME = 0x80190EFC; // rom:0x66DFC type:asciz
STR_COMMAND_MOBILE_WALL = 0x80212FF0; // rom:0x164160 type:asciz
@ -153,25 +154,134 @@ STR_MEN_UP = 0x8021E000; // rom:0x1B2310
STR_CANNOT_BE_USED = 0x8021DF80; // rom:0x1B2290
STR_PETRIFICATION = 0x8021DFA0; // rom:0x1B22B0
ELEMENT_NAMES = 0x80187BD4; // rom:0x5DAD4 type:u32
STR_ELEMENT_PHYSICAL = 0x80187660; // rom:0x5D560 type:asciz
STR_ELEMENT_WIND = 0x8018766C; // rom:0x5D56C type:asciz
STR_ELEMENT_FLAME = 0x80187674; // rom:0x5D574 type:asciz
STR_ELEMENT_EARTH = 0x8018767C; // rom:0x5D57C type:asciz
STR_ELEMENT_WATER = 0x80187684; // rom:0x5D584 type:asciz
STR_ELEMENT_VIRTUE = 0x8018768C; // rom:0x5D58C type:asciz
STR_ELEMENT_BANE = 0x80187694; // rom:0x5D594 type:asciz
STR_ELEMENT_DRAKONITE = 0x8018769C; // rom:0x5D59C type:asciz
STR_ELEMENT_VARIABLE = 0x801876A8; // rom:0x5D5A8 type:asciz
STR_ELEMENT_WIND_FLAME = 0x801876B4; // rom:0x5D5B4 type:asciz
STR_ELEMENT_FLAME_WIND = 0x801876C0; // rom:0x5D5C0 type:asciz
STR_ELEMENT_EARTH_FLAME = 0x801876CC; // rom:0x5D5CC type:asciz
STR_ELEMENT_WATER_EARTH = 0x801876D8; // rom:0x5D5D8 type:asciz
STR_ELEMENT_WIND_BANE = 0x801876E4; // rom:0x5D5E4 type:asciz
STR_ELEMENT_FlAME_BANE = 0x801876F0; // rom:0x5D5F0 type:asciz
obStrategyName = 0x80186FC4; // rom:0x5CEC4 size:16
obStrategyNameAutonomous = 0x80186F70; // rom:0x5CE70 type:asciz
obStrategyNameAttackStrongest = 0x80186F80; // rom:0x5CE80 type:asciz
obStrategyNameAttackLeader = 0x80186F94; // rom:0x5CE94 type:asciz
obStrategyNameAttackWeakest = 0x80186FA8; // rom:0x5CEA8 type:asciz
obElementName = 0x80187BD4; // rom:0x5DAD4 type:u32
obElementNamePhysical = 0x80187660; // rom:0x5D560 type:asciz
obElementNameWind = 0x8018766C; // rom:0x5D56C type:asciz
obElementNameFlame = 0x80187674; // rom:0x5D574 type:asciz
obElementNameEarth = 0x8018767C; // rom:0x5D57C type:asciz
obElementNameWater = 0x80187684; // rom:0x5D584 type:asciz
obElementNameVirtue = 0x8018768C; // rom:0x5D58C type:asciz
obElementNameBane = 0x80187694; // rom:0x5D594 type:asciz
obElementNameDrakonite = 0x8018769C; // rom:0x5D59C type:asciz
obElementNameVariable = 0x801876A8; // rom:0x5D5A8 type:asciz
obElementNameWindFlame = 0x801876B4; // rom:0x5D5B4 type:asciz
obElementNameFlameWind = 0x801876C0; // rom:0x5D5C0 type:asciz
obElementNameEarthFlame = 0x801876CC; // rom:0x5D5CC type:asciz
obElementNameWaterEarth = 0x801876D8; // rom:0x5D5D8 type:asciz
obElementNameWindBane = 0x801876E4; // rom:0x5D5E4 type:asciz
obElementNameFlameBane = 0x801876F0; // rom:0x5D5F0 type:asciz
obAbilityNameThrust = 0x801876FC; // type:asciz rom:0x5D5FC size:7
obAbilityNamePeck = 0x80187704; // type:asciz rom:0x5D604 size:5
obAbilityNamePierce = 0x8018770C; // type:asciz rom:0x5D60C size:7
obAbilityNameSlash = 0x80187714; // type:asciz rom:0x5D614 size:6
obAbilityNameCleave = 0x8018771C; // type:asciz rom:0x5D61C size:7
obAbilityNameRend = 0x80187724; // type:asciz rom:0x5D624 size:5
obAbilityNameClaw = 0x8018772C; // type:asciz rom:0x5D62C size:5
obAbilityNameBite = 0x80187734; // type:asciz rom:0x5D634 size:5
obAbilityNameStrike = 0x8018773C; // type:asciz rom:0x5D63C size:7
obAbilityNameCrush = 0x80187744; // type:asciz rom:0x5D644 size:6
obAbilityNameSmash = 0x8018774C; // type:asciz rom:0x5D64C size:6
obAbilityNameLash = 0x80187754; // type:asciz rom:0x5D654 size:5
obAbilityNamePullStrings = 0x8018775C; // type:asciz rom:0x5D65C size:13
obAbilityNameShoot = 0x8018776C; // type:asciz rom:0x5D66C size:6
obAbilityNameTakeAPeek = 0x80187774; // type:asciz rom:0x5D674 size:12
obAbilityNameFlipOver = 0x80187780; // type:asciz rom:0x5D680 size:10
obAbilityNameSonicBoom = 0x8018778C; // type:asciz rom:0x5D68C size:11
obAbilityNameWindShot = 0x80187798; // type:asciz rom:0x5D698 size:10
obAbilityNameThunderArrow = 0x801877A4; // type:asciz rom:0x5D6A4 size:17
obAbilityNameWindStorm = 0x801877B8; // type:asciz rom:0x5D6B8 size:11
obAbilityNameMesmerize = 0x801877C4; // type:asciz rom:0x5D6C4 size:10
obAbilityNameLifeDrain = 0x801877D0; // type:asciz rom:0x5D6D0 size:11
obAbilityNameThrowAKiss = 0x801877DC; // type:asciz rom:0x5D6DC size:13
obAbilityNameGazeOfTerror = 0x801877EC; // type:asciz rom:0x5D6EC size:18
obAbilityNamePumpkinSmash = 0x80187800; // type:asciz rom:0x5D700 size:14
obAbilityNamePumpkinShower = 0x80187810; // type:asciz rom:0x5D710 size:18
obAbilityNameBanish = 0x80187824; // type:asciz rom:0x5D724 size:7
obAbilityNameJihad = 0x8018782C; // type:asciz rom:0x5D72C size:6
obAbilityNameMagicMissile = 0x80187834; // type:asciz rom:0x5D734 size:14
obAbilityNameAbyss = 0x80187844; // type:asciz rom:0x5D744 size:6
obAbilityNameLightningBreath = 0x8018784C; // type:asciz rom:0x5D74C size:20
obAbilityNameFireBreath = 0x80187860; // type:asciz rom:0x5D760 size:12
obAbilityNameAcidBreath = 0x8018786C; // type:asciz rom:0x5D76C size:12
obAbilityNameBreathOfCold = 0x80187878; // type:asciz rom:0x5D778 size:15
obAbilityNameSacredBreath = 0x80187888; // type:asciz rom:0x5D788 size:14
obAbilityNameRottenBreath = 0x80187898; // type:asciz rom:0x5D798 size:14
obAbilityNamePetrify = 0x801878A8; // type:asciz rom:0x5D7A8 size:8
obAbilityNameRadiantGale = 0x801878B0; // type:asciz rom:0x5D7B0 size:13
obAbilityNameCrimsonNote = 0x801878C0; // type:asciz rom:0x5D7C0 size:13
obAbilityNameEarthquake = 0x801878D0; // type:asciz rom:0x5D7D0 size:11
obAbilityNameClearDisaster = 0x801878DC; // type:asciz rom:0x5D7DC size:18
obAbilityNameDivineRay = 0x801878F0; // type:asciz rom:0x5D7F0 size:11
obAbilityNameEvilDead = 0x801878FC; // type:asciz rom:0x5D7FC size:10
obAbilityNameEvocation = 0x80187908; // type:asciz rom:0x5D808 size:10
obAbilityNameNinjaArt = 0x80187914; // type:asciz rom:0x5D814 size:10
obAbilityNameLightning = 0x80187920; // type:asciz rom:0x5D820 size:10
obAbilityNameThunderFlare = 0x8018792C; // type:asciz rom:0x5D82C size:14
obAbilityNameShockBolt = 0x8018793C; // type:asciz rom:0x5D83C size:11
obAbilityNameThunderbird = 0x80187948; // type:asciz rom:0x5D848 size:12
obAbilityNameFireball = 0x80187954; // type:asciz rom:0x5D854 size:9
obAbilityNameFireStorm = 0x80187960; // type:asciz rom:0x5D860 size:11
obAbilityNameRayOfParalysis = 0x8018796C; // type:asciz rom:0x5D86C size:20
obAbilityNameSalamander = 0x80187980; // type:asciz rom:0x5D880 size:11
obAbilityNameAcidVapor = 0x8018798C; // type:asciz rom:0x5D88C size:11
obAbilityNameCragPress = 0x80187998; // type:asciz rom:0x5D898 size:11
obAbilityNamePoisonCloud = 0x801879A4; // type:asciz rom:0x5D8A4 size:13
obAbilityNameGnome = 0x801879B4; // type:asciz rom:0x5D8B4 size:6
obAbilityNameIceBlast = 0x801879BC; // type:asciz rom:0x5D8BC size:10
obAbilityNameIceField = 0x801879C8; // type:asciz rom:0x5D8C8 size:10
obAbilityNameSlumberMist = 0x801879D4; // type:asciz rom:0x5D8D4 size:13
obAbilityNameFenrir = 0x801879E4; // type:asciz rom:0x5D8E4 size:7
obAbilityNameHealing = 0x801879EC; // type:asciz rom:0x5D8EC size:8
obAbilityNameHealingPlus = 0x801879F4; // type:asciz rom:0x5D8F4 size:13
obAbilityNameWordOfPain = 0x80187A04; // type:asciz rom:0x5D904 size:13
obAbilityNameDarkQuest = 0x80187A14; // type:asciz rom:0x5D914 size:11
obAbilityNameNightmare = 0x80187A20; // type:asciz rom:0x5D920 size:10
obAbilityNameDarkLore = 0x80187A2C; // type:asciz rom:0x5D92C size:10
obAbilityNameTempest = 0x80187A38; // type:asciz rom:0x5D938 size:8
obAbilityNameAnnihilation = 0x80187A40; // type:asciz rom:0x5D940 size:13
obAbilityNameMeteorStrike = 0x80187A50; // type:asciz rom:0x5D950 size:14
obAbilityNameWhiteMute = 0x80187A60; // type:asciz rom:0x5D960 size:11
obAbilityNameIonosphere = 0x80187A6C; // type:asciz rom:0x5D96C size:11
obAbilityNameAtmosphere = 0x80187A78; // type:asciz rom:0x5D978 size:11
obAbilityNameDeepSleep = 0x80187A84; // type:asciz rom:0x5D984 size:11
obAbilityNamePlasmaBall = 0x80187A90; // type:asciz rom:0x5D990 size:12
obAbilityNamePlasmaStorm = 0x80187A9C; // type:asciz rom:0x5D99C size:13
obAbilityNameBindFlare = 0x80187AAC; // type:asciz rom:0x5D9AC size:11
obAbilityNameLavaShot = 0x80187AB8; // type:asciz rom:0x5D9B8 size:10
obAbilityNameLavaFlow = 0x80187AC4; // type:asciz rom:0x5D9C4 size:10
obAbilityNamePoisonPlant = 0x80187AD0; // type:asciz rom:0x5D9D0 size:13
obAbilityNameClayAssault = 0x80187AE0; // type:asciz rom:0x5D9E0 size:13
obAbilityNameBlueSpiral = 0x80187AF0; // type:asciz rom:0x5D9F0 size:12
obAbilityNamePoisonLime = 0x80187AFC; // type:asciz rom:0x5D9FC size:12
obAbilityNameInfest = 0x80187B08; // type:asciz rom:0x5DA08 size:7
obAbilityNameInferno = 0x80187B10; // type:asciz rom:0x5DA10 size:8
obAbilityNameBlackBreeze = 0x80187B18; // type:asciz rom:0x5DA18 size:13
obAbilityNameDarkBlaze = 0x80187B28; // type:asciz rom:0x5DA28 size:11
obAbilityNameDarkFlame = 0x80187B34; // type:asciz rom:0x5DA34 size:11
obAbilityNameDoom = 0x80187B40; // type:asciz rom:0x5DA40 size:5
obAbilityNameSonicBlast = 0x80187B48; // type:asciz rom:0x5DA48 size:12
obAbilityNameWindBlast = 0x80187B54; // type:asciz rom:0x5DA54 size:11
obAbilityNameFireBlast = 0x80187B60; // type:asciz rom:0x5DA60 size:11
obAbilityNameEarthBlast = 0x80187B6C; // type:asciz rom:0x5DA6C size:12
obAbilityNameAquaBlast = 0x80187B78; // type:asciz rom:0x5DA78 size:11
obAbilityNameHolyBlast = 0x80187B84; // type:asciz rom:0x5DA84 size:11
obAbilityNameDarkBlast = 0x80187B90; // type:asciz rom:0x5DA90 size:11
obAbilityNameSonicBlade = 0x80187B9C; // type:asciz rom:0x5DA9C size:12
obAbilityNameIgnisFatuus = 0x80187BA8; // type:asciz rom:0x5DAA8 size:13
obAbilityNameMirageSlash = 0x80187BB8; // type:asciz rom:0x5DAB8 size:13
obAbilityNameFatalDance = 0x80187BC8; // type:asciz rom:0x5DAC8 size:12
D_80187BD4 = 0x80187BD4; // rom:0x5DAD4 type:u32
obClassGetItem = 0x80186FD4; // rom:0x5CED4 size:16
CLASS_DATA = 0x80187C14; // rom:0x5DB14 size:0x2E68 type:u32
class_get_field_0x2c = 0x8016DBD8; // rom:0x43AD8
class_get_ability_front = 0x8016DC2C; // rom:0x43B2C
@ -197,37 +307,38 @@ class_get_ability_hitcount = 0x8016E338; // rom:0x44238
FORMATION_COMMAND_NAMES = 0x8021315C; // rom:0x1642CC type:char*
ABILITY_DATA = 0x8018AA7C; // rom:0x6097C size:0xA20
ability_get_name = 0x8016E440;
obAbilityData = 0x8018AA7C; // rom:0x6097C size:0xA20
obAbilityGetName = 0x8016E440;
ability_get_field_0x4 = 0x8016E458; // rom:0x44358
ability_get_element = 0x8016E470;
obAbilityGetElement = 0x8016E470;
FP_EQUIPMENT_GET_RESISTANCE = 0x801EF2B0; // rom:0xDBD10
FP_EQUIPMENT_GET_ALL_STATS = 0x801EF298; // rom:0xDBCF8
obEquipmentGetResistance = 0x801EF2B0; // rom:0xDBD10
obEquipmentGetStat = 0x801EF298; // rom:0xDBCF8
obEquipmentTypeName = 0x802130A4; // rom:0x164214 type:char*
obEquipmentData = 0x8018C40C; // size:0x20
EQUIPMENT_TYPE_NAMES = 0x802130A4; // rom:0x164214 type:char*
EQUIPMENT_DATA = 0x8018C40C; // size:0x20
equipment_get_field_0x1b = 0x8016F580; // rom:0x45480
equipment_get_field_0x1c = 0x8016F598; // rom:0x45498
equipment_get_name = 0x8016F5B0;
equipment_get_type = 0x8016F5C8;
equipment_get_element = 0x8016F5E0;
obEquipmentGetName = 0x8016F5B0;
obEquipmentGetType = 0x8016F5C8;
obEquipmentGetElement = 0x8016F5E0;
equipment_get_field_0x6 = 0x8016F614;
equipment_get_buy_price = 0x8016F62C;
obEquipmentGetBuyPrice = 0x8016F62C;
equipment_get_field_0x10 = 0x8016F644;
equipment_get_strength = 0x8016F65C;
equipment_get_vitality = 0x8016F6AC;
equipment_get_intelligence = 0x8016F6FC;
equipment_get_mentality = 0x8016F74C;
equipment_get_agility = 0x8016F79C;
equipment_get_dexterity = 0x8016F7EC;
equipment_get_resistance_strike = 0x8016F83C;
equipment_get_resistance_wind = 0x8016F854;
equipment_get_resistance_fire = 0x8016F86C;
equipment_get_resistance_earth = 0x8016F884;
equipment_get_resistance_water = 0x8016F89C;
equipment_get_resistance_holy = 0x8016F8B4;
equipment_get_resistance_dark = 0x8016F8CC;
obEquipmentGetStrength = 0x8016F65C;
obEquipmentGetVitality = 0x8016F6AC;
obEquipmentGetIntelligence = 0x8016F6FC;
obEquipmentGetMentality = 0x8016F74C;
obEquipmentGetAgility = 0x8016F79C;
obEquipmentGetDexterity = 0x8016F7EC;
obEquipmentGetResistanceStrike = 0x8016F83C;
obEquipmentGetResistanceWind = 0x8016F854;
obEquipmentGetResistanceFire = 0x8016F86C;
obEquipmentGetResistanceEarth = 0x8016F884;
obEquipmentGetResistanceWater = 0x8016F89C;
obEquipmentGetResistanceVirtue = 0x8016F8B4;
obEquipmentGetResistanceBane = 0x8016F8CC;
equipment_get_field_0x18_b68 = 0x8016F8E4;
equipment_get_field_0x18_b46 = 0x8016F900;
equipment_get_field_0x18_b24 = 0x8016F920;
@ -237,12 +348,12 @@ equipment_get_field_0x19_b46 = 0x8016F978;
equipment_get_field_0x19_b24 = 0x8016F998;
equipment_get_field_0x19_b12 = 0x8016F9B8;
equipment_get_field_0x1a_b7 = 0x8016F9D4; // rom:0x458D4
equipment_is_weapon = 0x8016F9F0; // rom:0x458F0
equipment_get_first_weapon = 0x8016FA34; // rom:0x45934
equipment_get_first_spellbook = 0x8016FB50; // rom:0x45A50
obEquipmentIsWeapon = 0x8016F9F0; // rom:0x458F0
obEquipmentGetFirstWeapon = 0x8016FA34; // rom:0x45934
obEquipmentGetFirstSpellbook = 0x8016FB50; // rom:0x45A50
ITEM_DATA = 0x8018E6CC; // rom:0x645CC size:0x21C
item_get_name = 0x8016F4E0; // rom:0x453E0
obItemData = 0x8018E6CC; // rom:0x645CC size:0x21C
obItemGetName = 0x8016F4E0; // rom:0x453E0
item_get_field_0x4 = 0x8016F500; // rom:0x45400
item_get_field_0x5 = 0x8016F520; // rom:0x45420
item_get_field_0x8 = 0x8016F540; // rom:0x45440

View File

@ -16,7 +16,7 @@ def read_ability(index):
return unpack_from(ABILITY_FORMAT, read_rom(ability_start, ability_end))
MAX_ABILITIES = 162
MAX_ABILITIES = 159
for i in range(1, MAX_ABILITIES):
(name_vaddr, field_0x0, element, field_0x2, field_0x3, field_0x4,
@ -26,6 +26,8 @@ for i in range(1, MAX_ABILITIES):
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]
print(f"{name} ({i}):\t", (field_0x0, field_0x2, field_0x3, field_0x4, field_0x5,
field_0x6, field_0x7, field_0x8, field_0x9, field_0xa,
field_0xb))
print(f"{name} = 0x{name_vaddr:X}")
# print(f"({i}):\t", (field_0x0, field_0x2, field_0x3, field_0x4, field_0x5,
# field_0x6, field_0x7, field_0x8, field_0x9, field_0xa,
# field_0xb))

35
tools/ability_names.py Normal file
View File

@ -0,0 +1,35 @@
from ob import read_rom
import string
NAMES_START = 0x5D5FC;
NAMES_END = 0x5DAD4;
NAME_VADDR_START = 0x801876FC
data = read_rom(NAMES_START, NAMES_END)
def strip_name(name):
return ''.join(chr(ch) for ch in name if chr(ch).isalnum())
buf = bytearray()
for i, d in enumerate(data):
# Read until 0
if d != 0:
buf.append(d)
else:
if len(buf) == 0:
continue
clean_name = strip_name(buf)
offset = i - len(buf)
# print(f"// {bytes(buf)}")
print(f"obAbilityName{clean_name} = 0x{(NAME_VADDR_START + offset):X}; // rom:0x{(NAMES_START + offset):X} size:{(len(buf) + 1)}")
buf = bytearray()