Moved IQ_SKILL_RESTRICTIONS to C

This commit is contained in:
AnonymousRandomPerson 2025-12-04 23:36:51 -05:00
parent a24bde3d06
commit 4c89a2c02f
7 changed files with 94 additions and 17 deletions

View File

@ -49,15 +49,3 @@ VERSION_EXCLUSIVE_MONSTERS:
.byte 0x19, 0x04, 0x00, 0x01, 0x0F, 0x00, 0x00, 0x01, 0x67, 0x02, 0x00, 0x01, 0xE9, 0x01, 0x01, 0x00
.byte 0x41, 0x04, 0x01, 0x00, 0xEA, 0x01, 0x01, 0x00, 0x42, 0x04, 0x01, 0x00, 0x16, 0x01, 0x01, 0x00
.byte 0x09, 0x02, 0x00, 0x01, 0x96, 0x00, 0x00, 0x01
.global IQ_SKILL_RESTRICTIONS
IQ_SKILL_RESTRICTIONS:
.byte 0x0F, 0x27, 0x04, 0x00, 0x01, 0x00, 0x02, 0x00
.byte 0x04, 0x00, 0x04, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08, 0x00, 0x09, 0x00, 0x09, 0x00, 0x09, 0x00
.byte 0x0A, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x0B, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x10, 0x00
.byte 0x14, 0x00, 0x09, 0x00, 0x11, 0x00, 0x06, 0x00, 0x18, 0x00, 0x19, 0x00, 0x1A, 0x00, 0x1B, 0x00
.byte 0x1C, 0x00, 0x1D, 0x00, 0x1E, 0x00, 0x1F, 0x00, 0x20, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, 0x00
.byte 0x24, 0x00, 0x25, 0x00, 0x26, 0x00, 0x27, 0x00, 0x28, 0x00, 0x29, 0x00, 0x2A, 0x00, 0x2B, 0x00
.byte 0x2C, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x2F, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00
.byte 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x3A, 0x00, 0x3B, 0x00
.byte 0x3C, 0x00, 0x3D, 0x00, 0x3E, 0x00, 0x3F, 0x00, 0x40, 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, 0x00
.byte 0x44, 0x00, 0x00, 0x00

View File

@ -2,7 +2,6 @@
#define PMDSKY_ENUMS_H
#define NUM_TACTICS TACTIC_NONE + 1
#define MAX_NUM_IQ_SKILLS 25
// Tactic ID. These are usually encoded as bitvectors.
enum tactic_id {

View File

@ -1,10 +1,14 @@
#ifndef PMDSKY_IQ_SKILLS_H
#define PMDSKY_IQ_SKILLS_H
#define NUM_IQ_SKILLS 69
#define NUM_IQ_SKILLS_PER_GROUP 25
#define NUM_IQ_GROUPS 16
#include "enums.h"
// Table of 4-byte values for each IQ skill that represent the required IQ value to unlock a skill.
extern const s32 IQ_SKILLS[69];
extern const enum iq_skill_id IQ_GROUP_SKILLS[16][25];
extern const s32 IQ_SKILLS[NUM_IQ_SKILLS];
extern const enum iq_skill_id IQ_GROUP_SKILLS[NUM_IQ_GROUPS][NUM_IQ_SKILLS_PER_GROUP];
#endif //PMDSKY_IQ_SKILLS_H

View File

@ -0,0 +1,9 @@
#ifndef PMDSKY_MONSTER_PARAMETERS_H
#define PMDSKY_MONSTER_PARAMETERS_H
#include "iq_skills.h"
// Table of 2-byte values for each IQ skill that represent a group. IQ skills in the same group can not be enabled at the same time.
extern const s16 IQ_SKILL_RESTRICTIONS[NUM_IQ_SKILLS + 1];
#endif //PMDSKY_MONSTER_PARAMETERS_H

View File

@ -108,6 +108,7 @@ Static main
Object asm/main_02051788.o
Object src/tactics_data.o
Object asm/main_rodata_020A190C.o
Object src/monster_parameters.o
Object src/secondary_terrain_types.o
Object asm/main_rodata_020A1BB0.o
Object src/iq_skills.o

View File

@ -3,6 +3,7 @@
#include "dungeon_parameters_3.h"
#include "dungeon_parameters_4.h"
#include "dungeon_util_static.h"
#include "iq_skills.h"
#include "main_02058CD8.h"
#include "main_02058E68.h"
#include "overlay_29_022FF898.h"
@ -58,7 +59,7 @@ void UpdateIqSkills(struct monster *monster)
monster->iq_skill_flags.flags[1] = 0;
monster->iq_skill_flags.flags[2] = 0;
for (s32 i = 0; i < MAX_NUM_IQ_SKILLS; i++)
for (s32 i = 0; i < NUM_IQ_SKILLS_PER_GROUP; i++)
{
enum iq_skill_id iq_skill = GetSpeciesIqSkill(monster->id, i);
if (iq_skill == IQ_NONE_2)
@ -93,7 +94,7 @@ void UpdateIqSkills(struct monster *monster)
monster->iq_skill_flags.flags[0] = 0;
monster->iq_skill_flags.flags[1] = 0;
monster->iq_skill_flags.flags[2] = 0;
for (s32 i = 0; i < MAX_NUM_IQ_SKILLS; i++)
for (s32 i = 0; i < NUM_IQ_SKILLS_PER_GROUP; i++)
{
enum iq_skill_id iq_skill = GetSpeciesIqSkill(monster->id, i);
if (iq_skill == IQ_NONE_2)

75
src/monster_parameters.c Normal file
View File

@ -0,0 +1,75 @@
#include "monster_parameters.h"
const s16 IQ_SKILL_RESTRICTIONS[NUM_IQ_SKILLS + 1] =
{
9999, // IQ_NONE
4, // IQ_TYPE_ADVANTAGE_MASTER
1, // IQ_ITEM_CATCHER
2, // IQ_COURSE_CHECKER
4, // IQ_SURE_HIT_ATTACKER
4, // IQ_QUICK_DODGER
6, // IQ_PP_CHECKER
7, // IQ_NONTRAITOR
8, // IQ_STATUS_CHECKER
9, // IQ_EXP_GO_GETTER
9, // IQ_EFFICIENCY_EXPERT
9, // IQ_WEAK_TYPE_PICKER
10, // IQ_ALL_TERRAIN_HIKER
10, // IQ_ABSOLUTE_MOVER
11, // IQ_TRAP_AVOIDER
11, // IQ_HOUSE_AVOIDER
14, // IQ_ENERGY_SAVER
14, // IQ_NONSLEEPER
14, // IQ_SELF_CURER
16, // IQ_TRAP_SEER
20, // IQ_LAVA_EVADER
9, // IQ_DEDICATED_TRAVELER
17, // IQ_ITEM_MASTER
6, // IQ_EXCLUSIVE_MOVE_USER
24, // IQ_ESCAPIST
25, // IQ_LOCK_PICKER
26, // IQ_STAIR_SENSOR
27, // IQ_COIN_WATCHER
28, // IQ_EXP_ELITE
29, // IQ_SHARPSHOOTER
30, // IQ_FAST_FRIEND
31, // IQ_PP_SAVER
32, // IQ_BODYGUARD
33, // IQ_CAUTIOUS_CREEPER
34, // IQ_AGGRESSOR
35, // IQ_DEFENDER
36, // IQ_INTIMIDATOR
37, // IQ_SURVIVALIST
38, // IQ_TRAP_BUSTER
39, // IQ_COUNTER_HITTER
40, // IQ_EXTRA_STRIKER
41, // IQ_HIT_AND_RUNNER
42, // IQ_PARRY_EXPERT
43, // IQ_QUICK_STRIKER
44, // IQ_NO_CHARGER
45, // IQ_WARY_FIGHTER
46, // IQ_GAP_PROBER
47, // IQ_POWER_PITCHER
48, // IQ_CONCENTRATOR
49, // IQ_COUNTER_BASHER
50, // IQ_CHEERLEADER
51, // IQ_NATURE_GIFTER
52, // IQ_WISE_HEALER
53, // IQ_QUICK_HEALER
54, // IQ_ACUTE_SNIFFER
55, // IQ_DEEP_BREATHER
56, // IQ_BRICK_TOUGH
57, // IQ_MULTITALENT
58, // IQ_TIME_TRIPPER
59, // IQ_ERRATIC_PLAYER
60, // IQ_PRACTICE_SWINGER
61, // IQ_NO_DEFEATIST
62, // IQ_HAGGLER
63, // IQ_CLUTCH_PERFORMER
64, // IQ_CRITICAL_DODGER
65, // IQ_MAP_SURVEYOR
66, // IQ_PIERCE_HURLER
67, // IQ_COLLECTOR
68, // IQ_TRUE_POWERIST
0, // IQ_NONE_2
};