Moved TYPE_MATCHUP_TABLE to C

This commit is contained in:
AnonymousRandomPerson 2025-09-21 22:43:05 -04:00
parent f303fbba9d
commit 78ff1a2a8f
15 changed files with 6467 additions and 6459 deletions

View File

@ -0,0 +1,136 @@
#pragma once
.public DoMoveAbsorb
.public DoMoveAttract
.public DoMoveBeatUp
.public DoMoveBlastBurn
.public DoMoveBlazeKick
.public DoMoveBlock
.public DoMoveBlowback
.public DoMoveBrickBreak
.public DoMoveBrine
.public DoMoveCaptivate
.public DoMoveChargeBeam
.public DoMoveCharm
.public DoMoveCloseCombat
.public DoMoveConfuse
.public DoMoveCopycat
.public DoMoveCrunch
.public DoMoveCrushClaw
.public DoMoveCurse
.public DoMoveDamageBoostAllStats
.public DoMoveDamageBurn10FlameWheel
.public DoMoveDamageConfuse10
.public DoMoveDamageConfuse30
.public DoMoveDamageConstrict10
.public DoMoveDamageCringe10
.public DoMoveDamageCringe20
.public DoMoveDamageCringe30
.public DoMoveDamageDrain
.public DoMoveDamageEatItem
.public DoMoveDamageHpDependent
.public DoMoveDamageLowerAccuracy40
.public DoMoveDamageLowerSpecialDefense50
.public DoMoveDamageLowerSpeed100
.public DoMoveDamageLowerSpeed20
.public DoMoveDamageMultihitFatigue
.public DoMoveDamageParalyze10
.public DoMoveDamageParalyze20
.public DoMoveDamagePoison18
.public DoMoveDamagePoison40
.public DoMoveDamageStealItem
.public DoMoveDamageWeightDependent
.public DoMoveDamageWithRecoil
.public DoMoveDamage__02325DC0
.public DoMoveDamage__0232A500
.public DoMoveDamage__0232B8B0
.public DoMoveDamage__0232DD88
.public DoMoveDefog
.public DoMoveDestinyBond
.public DoMoveDoubleEdge
.public DoMoveDragonRage
.public DoMoveDreamEater
.public DoMoveDynamicPunch
.public DoMoveEmbargo
.public DoMoveEncore
.public DoMoveEndeavor
.public DoMoveEruption
.public DoMoveFacade
.public DoMoveFakeOut
.public DoMoveFakeTears
.public DoMoveFeatherDance
.public DoMoveFeint
.public DoMoveFireFang
.public DoMoveFissure
.public DoMoveFlareBlitz
.public DoMoveFlatter
.public DoMoveFrustration
.public DoMoveGastroAcid
.public DoMoveGuardSwap
.public DoMoveGust
.public DoMoveGyroBall
.public DoMoveHammerArm
.public DoMoveHeadSmash
.public DoMoveHeadbutt
.public DoMoveHeartSwap
.public DoMoveHiddenPower
.public DoMoveHornDrill
.public DoMoveHurl
.public DoMoveIceFang
.public DoMoveIronTail
.public DoMoveKnockOff
.public DoMoveLastResort
.public DoMoveLeechSeed
.public DoMoveLowerAccuracy1
.public DoMoveLowerDefense1
.public DoMoveLowerSpeed1
.public DoMoveMagnitude
.public DoMoveMetalSound
.public DoMoveMiracleEye
.public DoMoveMistBall
.public DoMoveMudSlap
.public DoMoveNaturalGift
.public DoMoveNightmare
.public DoMoveOhko
.public DoMovePainSplit
.public DoMoveParalyze__02326E80
.public DoMoveParalyze__0232B434
.public DoMovePause
.public DoMovePayDay
.public DoMovePoison
.public DoMovePoisonFang
.public DoMovePoisonTail
.public DoMovePowerSwap
.public DoMovePresent
.public DoMovePsychoShift
.public DoMoveRapidSpin
.public DoMoveReturn
.public DoMoveReversal
.public DoMoveRolePlay
.public DoMoveSacredFire
.public DoMoveSecretPower
.public DoMoveSeismicToss
.public DoMoveSkillSwap
.public DoMoveSmellingSalt
.public DoMoveSmokescreen
.public DoMoveSpite
.public DoMoveSuperFang
.public DoMoveSuperpower
.public DoMoveSwagger
.public DoMoveSwapItems
.public DoMoveTaunt
.public DoMoveThunderFang
.public DoMoveThunderWave
.public DoMoveThundershock
.public DoMoveTickle
.public DoMoveTorment
.public DoMoveToxic
.public DoMoveTriAttack
.public DoMoveTripleKick
.public DoMoveTrumpCard
.public DoMoveTwineedle
.public DoMoveTwister
.public DoMoveWakeUpSlap
.public DoMoveWhirlpool
.public DoMoveWillOWisp
.public DoMoveWrap
.public DoMoveYawn

View File

@ -1,136 +1 @@
#pragma once
.public DoMoveAbsorb
.public DoMoveAttract
.public DoMoveBeatUp
.public DoMoveBlastBurn
.public DoMoveBlazeKick
.public DoMoveBlock
.public DoMoveBlowback
.public DoMoveBrickBreak
.public DoMoveBrine
.public DoMoveCaptivate
.public DoMoveChargeBeam
.public DoMoveCharm
.public DoMoveCloseCombat
.public DoMoveConfuse
.public DoMoveCopycat
.public DoMoveCrunch
.public DoMoveCrushClaw
.public DoMoveCurse
.public DoMoveDamage__02325DC0
.public DoMoveDamage__0232A500
.public DoMoveDamage__0232B8B0
.public DoMoveDamage__0232DD88
.public DoMoveDamageBoostAllStats
.public DoMoveDamageBurn10FlameWheel
.public DoMoveDamageConfuse10
.public DoMoveDamageConfuse30
.public DoMoveDamageConstrict10
.public DoMoveDamageCringe10
.public DoMoveDamageCringe20
.public DoMoveDamageCringe30
.public DoMoveDamageDrain
.public DoMoveDamageEatItem
.public DoMoveDamageHpDependent
.public DoMoveDamageLowerAccuracy40
.public DoMoveDamageLowerSpecialDefense50
.public DoMoveDamageLowerSpeed100
.public DoMoveDamageLowerSpeed20
.public DoMoveDamageMultihitFatigue
.public DoMoveDamageParalyze10
.public DoMoveDamageParalyze20
.public DoMoveDamagePoison18
.public DoMoveDamagePoison40
.public DoMoveDamageStealItem
.public DoMoveDamageWeightDependent
.public DoMoveDamageWithRecoil
.public DoMoveDefog
.public DoMoveDestinyBond
.public DoMoveDoubleEdge
.public DoMoveDragonRage
.public DoMoveDreamEater
.public DoMoveDynamicPunch
.public DoMoveEmbargo
.public DoMoveEncore
.public DoMoveEndeavor
.public DoMoveEruption
.public DoMoveFacade
.public DoMoveFakeOut
.public DoMoveFakeTears
.public DoMoveFeatherDance
.public DoMoveFeint
.public DoMoveFireFang
.public DoMoveFissure
.public DoMoveFlareBlitz
.public DoMoveFlatter
.public DoMoveFrustration
.public DoMoveGastroAcid
.public DoMoveGuardSwap
.public DoMoveGust
.public DoMoveGyroBall
.public DoMoveHammerArm
.public DoMoveHeadbutt
.public DoMoveHeadSmash
.public DoMoveHeartSwap
.public DoMoveHiddenPower
.public DoMoveHornDrill
.public DoMoveHurl
.public DoMoveIceFang
.public DoMoveIronTail
.public DoMoveKnockOff
.public DoMoveLastResort
.public DoMoveLeechSeed
.public DoMoveLowerAccuracy1
.public DoMoveLowerDefense1
.public DoMoveLowerSpeed1
.public DoMoveMagnitude
.public DoMoveMetalSound
.public DoMoveMiracleEye
.public DoMoveMistBall
.public DoMoveMudSlap
.public DoMoveNaturalGift
.public DoMoveNightmare
.public DoMoveOhko
.public DoMovePainSplit
.public DoMoveParalyze__02326E80
.public DoMoveParalyze__0232B434
.public DoMovePause
.public DoMovePayDay
.public DoMovePoison
.public DoMovePoisonFang
.public DoMovePoisonTail
.public DoMovePowerSwap
.public DoMovePresent
.public DoMovePsychoShift
.public DoMoveRapidSpin
.public DoMoveReturn
.public DoMoveReversal
.public DoMoveRolePlay
.public DoMoveSacredFire
.public DoMoveSecretPower
.public DoMoveSeismicToss
.public DoMoveSkillSwap
.public DoMoveSmellingSalt
.public DoMoveSmokescreen
.public DoMoveSpite
.public DoMoveSuperFang
.public DoMoveSuperpower
.public DoMoveSwagger
.public DoMoveSwapItems
.public DoMoveTaunt
.public DoMoveThunderFang
.public DoMoveThundershock
.public DoMoveThunderWave
.public DoMoveTickle
.public DoMoveTorment
.public DoMoveToxic
.public DoMoveTriAttack
.public DoMoveTripleKick
.public DoMoveTrumpCard
.public DoMoveTwineedle
.public DoMoveTwister
.public DoMoveWakeUpSlap
.public DoMoveWhirlpool
.public DoMoveWillOWisp
.public DoMoveWrap
.public DoMoveYawn

6261
asm/overlay_10_022C5938.s Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,7 @@
#ifndef PMDSKY_DUNGEON_PARAMETERS_H
#define PMDSKY_DUNGEON_PARAMETERS_H
// The percentage chance of the AI not attacking when it is confused.
extern const s16 AI_CONFUSED_NO_ATTACK_CHANCE;
#endif //PMDSKY_DUNGEON_PARAMETERS_H

View File

@ -1,6 +1,7 @@
#ifndef PMDSKY_DUNGEON_PARAMETERS_1_H
#define PMDSKY_DUNGEON_PARAMETERS_1_H
// The chance of the Chatot Scarf bouncing back a move, as a percentage (20%).
extern const s16 CHATOT_SCARF_BOUNCE_CHANCE;
#endif //PMDSKY_DUNGEON_PARAMETERS_1_H

View File

@ -3,6 +3,7 @@
#include "enums.h"
// Maps each weather type (by index, see enum weather_id) to the corresponding Weather Ball type.
extern const enum type_id WEATHER_BALL_TYPE_TABLE[8];
#endif //PMDSKY_DUNGEON_PARAMETERS_1_H

View File

@ -3,17 +3,6 @@
#include "dungeon_mode.h"
// Type matchup table, not including TYPE_NEUTRAL.
// Note that Ghost's immunities seem to be hard-coded elsewhere. In this table, both Normal and
// Fighting are encoded as neutral against Ghost.
//
// Row index corresponds to the attack type and the column index corresponds to the defender type.
// C-style access: type_matchup_table[attack_type][target_type] or
// *(&type_matchup_table[0][0] + attack_type*18 + target_type)
struct type_matchup_table {
s16 matchups[NUM_TYPES][NUM_TYPES];
};
s16 GetTypeMatchup(struct entity *attacker, struct entity *defender, s16 target_type_idx, enum type_id attack_type);
#endif //PMDSKY_TYPE_EFFECTIVENESS_H

View File

@ -0,0 +1,18 @@
#ifndef PMDSKY_TYPE_MATCHUP_TABLE_H
#define PMDSKY_TYPE_MATCHUP_TABLE_H
#include "enums.h"
// Type matchup table, not including TYPE_NEUTRAL.
// Note that Ghost's immunities seem to be hard-coded elsewhere. In this table, both Normal and
// Fighting are encoded as neutral against Ghost.
// Row index corresponds to the attack type and the column index corresponds to the defender type.
struct type_matchup_table {
s16 matchups[NUM_TYPES][NUM_TYPES];
};
// Table of type matchups.
// Each row corresponds to the type matchups of a specific attack type, with each entry within the row specifying the type's effectiveness against a target type.
extern const struct type_matchup_table TYPE_MATCHUP_TABLE;
#endif //PMDSKY_TYPE_MATCHUP_TABLE_H

View File

@ -221,6 +221,8 @@ Overlay OVY_10
Object asm/overlay_10_rodata_022C490C.o
Object src/natural_gift_data.o
Object asm/overlay_10_rodata_022C593C.o
Object src/type_matchup_table.o
Object asm/overlay_10_022C5938.o
}
Overlay OVY_11
{

View File

@ -1,3 +1,3 @@
#include "dungeon_parameters.h"
#include "dungeon_parameters_1.h"
const s16 CHATOT_SCARF_BOUNCE_CHANCE = 20;

View File

@ -1,12 +1,12 @@
#include "dungeon_parameters_2.h"
const enum type_id WEATHER_BALL_TYPE_TABLE[8] = {
TYPE_NORMAL,
TYPE_FIRE,
TYPE_ROCK,
TYPE_NORMAL,
TYPE_WATER,
TYPE_ICE,
TYPE_NORMAL,
TYPE_ICE
TYPE_NORMAL, // WEATHER_CLEAR
TYPE_FIRE, // WEATHER_SUNNY
TYPE_ROCK, // WEATHER_SANDSTORM
TYPE_NORMAL, // WEATHER_CLOUDY
TYPE_WATER, // WEATHER_RAIN
TYPE_ICE, // WEATHER_HAIL
TYPE_NORMAL, // WEATHER_FOG
TYPE_ICE // WEATHER_SNOW
};

View File

@ -3,8 +3,7 @@
#include "overlay_29_0230A994.h"
#include "overlay_29_02318A4C.h"
#include "overlay_29_02338390.h"
extern struct type_matchup_table TYPE_MATCHUP_TABLE;
#include "type_matchup_table.h"
s16 GetTypeMatchup(struct entity *attacker, struct entity *defender, s16 target_type_idx, enum type_id attack_type)
{

31
src/type_matchup_table.c Normal file
View File

@ -0,0 +1,31 @@
#include "type_matchup_table.h"
// Type chart
#define IMMUNE MATCHUP_IMMUNE
#define RESIST MATCHUP_NOT_VERY_EFFECTIVE
#define NEUTRAL MATCHUP_NEUTRAL
#define SUPER MATCHUP_SUPER_EFFECTIVE
const struct type_matchup_table TYPE_MATCHUP_TABLE = {
{
// NONE NORMAL FIRE WATER GRASS ELECTRIC ICE FIGHTING POISON GROUND FLYING PSYCHIC BUG ROCK GHOST DRAGON DARK STEEL
[TYPE_NONE] = {NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL},
[TYPE_NORMAL] = {NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, RESIST, NEUTRAL, NEUTRAL, NEUTRAL, RESIST},
[TYPE_FIRE] = {NEUTRAL, NEUTRAL, RESIST, RESIST, SUPER, NEUTRAL, SUPER, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, SUPER, RESIST, NEUTRAL, RESIST, NEUTRAL, SUPER},
[TYPE_WATER] = {NEUTRAL, NEUTRAL, SUPER, RESIST, RESIST, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, SUPER, NEUTRAL, NEUTRAL, NEUTRAL, SUPER, NEUTRAL, RESIST, NEUTRAL, NEUTRAL},
[TYPE_GRASS] = {NEUTRAL, NEUTRAL, RESIST, SUPER, RESIST, NEUTRAL, NEUTRAL, NEUTRAL, RESIST, SUPER, RESIST, NEUTRAL, RESIST, SUPER, NEUTRAL, RESIST, NEUTRAL, RESIST},
[TYPE_ELECTRIC] = {NEUTRAL, NEUTRAL, NEUTRAL, SUPER, RESIST, RESIST, NEUTRAL, NEUTRAL, NEUTRAL, IMMUNE, SUPER, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, RESIST, NEUTRAL, NEUTRAL},
[TYPE_ICE] = {NEUTRAL, NEUTRAL, RESIST, RESIST, SUPER, NEUTRAL, RESIST, NEUTRAL, NEUTRAL, SUPER, SUPER, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, SUPER, NEUTRAL, RESIST},
[TYPE_FIGHTING] = {NEUTRAL, SUPER, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, SUPER, NEUTRAL, RESIST, NEUTRAL, RESIST, RESIST, RESIST, SUPER, NEUTRAL, NEUTRAL, SUPER, SUPER},
[TYPE_POISON] = {NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, SUPER, NEUTRAL, NEUTRAL, NEUTRAL, RESIST, RESIST, NEUTRAL, NEUTRAL, NEUTRAL, RESIST, RESIST, NEUTRAL, NEUTRAL, IMMUNE},
[TYPE_GROUND] = {NEUTRAL, NEUTRAL, SUPER, NEUTRAL, RESIST, SUPER, NEUTRAL, NEUTRAL, SUPER, NEUTRAL, IMMUNE, NEUTRAL, RESIST, SUPER, NEUTRAL, NEUTRAL, NEUTRAL, SUPER},
[TYPE_FLYING] = {NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, SUPER, RESIST, NEUTRAL, SUPER, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, SUPER, RESIST, NEUTRAL, NEUTRAL, NEUTRAL, RESIST},
[TYPE_PSYCHIC] = {NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, SUPER, SUPER, NEUTRAL, NEUTRAL, RESIST, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, IMMUNE, RESIST},
[TYPE_BUG] = {NEUTRAL, NEUTRAL, RESIST, NEUTRAL, SUPER, NEUTRAL, NEUTRAL, RESIST, RESIST, NEUTRAL, RESIST, SUPER, NEUTRAL, NEUTRAL, RESIST, NEUTRAL, SUPER, RESIST},
[TYPE_ROCK] = {NEUTRAL, NEUTRAL, SUPER, NEUTRAL, NEUTRAL, NEUTRAL, SUPER, RESIST, NEUTRAL, RESIST, SUPER, NEUTRAL, SUPER, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, RESIST},
[TYPE_GHOST] = {NEUTRAL, IMMUNE, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, SUPER, NEUTRAL, NEUTRAL, SUPER, NEUTRAL, RESIST, RESIST},
[TYPE_DRAGON] = {NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, SUPER, NEUTRAL, RESIST},
[TYPE_DARK] = {NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, RESIST, NEUTRAL, NEUTRAL, NEUTRAL, SUPER, NEUTRAL, NEUTRAL, SUPER, NEUTRAL, RESIST, RESIST},
[TYPE_STEEL] = {NEUTRAL, NEUTRAL, RESIST, RESIST, NEUTRAL, RESIST, SUPER, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, NEUTRAL, SUPER, NEUTRAL, NEUTRAL, NEUTRAL, RESIST}
}
};

View File

@ -11,11 +11,13 @@ parser = argparse.ArgumentParser()
parser.add_argument('asm_file')
parser.add_argument('split_symbol_name')
parser.add_argument('-f', '--split_file_name')
args = parser.parse_args()
symbol_location = args.asm_file
symbol_name = args.split_symbol_name
split_file_name = args.split_file_name
if symbol_location.endswith('.s'):
symbol_location = symbol_location[:-2]
@ -62,7 +64,10 @@ LSF_FILE_PATH = 'main.lsf'
with open(LSF_FILE_PATH, 'r') as lsf_file:
lsf_lines = lsf_file.readlines()
new_asm_base_name = f"{file_prefix}{data_type}_{new_symbol_address}"
if split_file_name is None:
new_asm_base_name = f"{file_prefix}{data_type}_{new_symbol_address}"
else:
new_asm_base_name = split_file_name
# If needed, add the extracted function's new .o file to main.lsf.
merge_prev_file = None