Add a script to generate actInfoCommon

It's too tedious to write by hand
This commit is contained in:
Léo Lam 2021-01-22 15:36:19 +01:00
parent 5410a56d20
commit 5d36832608
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
5 changed files with 374 additions and 12 deletions

View File

@ -73263,8 +73263,8 @@
0x0000007100d2d7c8,act::getWeaponCommonPoweredSharpAddAtkMax,20,_ZN4ksys3act36getWeaponCommonPoweredSharpAddAtkMaxERKN2al9ByamlIterE
0x0000007100d2d7dc,act::getWeaponCommonPoweredSharpAddLifeMin,20,_ZN4ksys3act37getWeaponCommonPoweredSharpAddLifeMinERKN2al9ByamlIterE
0x0000007100d2d7f0,act::getWeaponCommonPoweredSharpAddLifeMax,20,_ZN4ksys3act37getWeaponCommonPoweredSharpAddLifeMaxERKN2al9ByamlIterE
0x0000007100d2d804,act::getWeaponCommonPoweredSharpAddGuardMin,20,_ZN4ksys3act38getWeaponCommonPoweredSharpAddGuardMinERKN2al9ByamlIterE
0x0000007100d2d818,act::getWeaponCommonPoweredSharpAddGuardMax,20,_ZN4ksys3act38getWeaponCommonPoweredSharpAddGuardMaxERKN2al9ByamlIterE
0x0000007100d2d804,act::getWeaponCommonPoweredSharpAddGuardMin,20,_ZN4ksys3act44getWeaponCommonPoweredSharpWeaponAddGuardMinERKN2al9ByamlIterE
0x0000007100d2d818,act::getWeaponCommonPoweredSharpAddGuardMax,20,_ZN4ksys3act44getWeaponCommonPoweredSharpWeaponAddGuardMaxERKN2al9ByamlIterE
0x0000007100d2d82c,act::getWeaponCommonPoweredSharpAddThrowMin,20,_ZN4ksys3act38getWeaponCommonPoweredSharpAddThrowMinERKN2al9ByamlIterE
0x0000007100d2d840,act::getWeaponCommonPoweredSharpAddThrowMax,20,_ZN4ksys3act38getWeaponCommonPoweredSharpAddThrowMaxERKN2al9ByamlIterE
0x0000007100d2d854,act::getWeaponCommonPoweredSharpAddSpreadFire,20,_ZN4ksys3act40getWeaponCommonPoweredSharpAddSpreadFireERKN2al9ByamlIterE

Can't render this file because it is too large.

View File

@ -144,8 +144,8 @@ bool WeaponModifierRanges::loadTierYellow(const sead::SafeString& actor) {
addLifeMin = ksys::act::getWeaponCommonPoweredSharpAddLifeMin(iter);
addLifeMax = ksys::act::getWeaponCommonPoweredSharpAddLifeMax(iter);
addGuardMin = ksys::act::getWeaponCommonPoweredSharpAddGuardMin(iter);
addGuardMax = ksys::act::getWeaponCommonPoweredSharpAddGuardMax(iter);
addGuardMin = ksys::act::getWeaponCommonPoweredSharpWeaponAddGuardMin(iter);
addGuardMax = ksys::act::getWeaponCommonPoweredSharpWeaponAddGuardMax(iter);
addThrowMin = ksys::act::getWeaponCommonPoweredSharpAddThrowMin(iter);
addThrowMax = ksys::act::getWeaponCommonPoweredSharpAddThrowMax(iter);

View File

@ -1,6 +1,8 @@
#include "KingSystem/ActorSystem/actInfoCommon.h"
#include "KingSystem/ActorSystem/actInfoData.h"
// DO NOT EDIT. This file is automatically generated by actInfoCommon.py.
namespace ksys::act {
bool getSystemIsGetItemSelf(InfoData* data, const char* actor) {
@ -23,94 +25,190 @@ int getEnemyRank(InfoData* data, const char* actor) {
return data->getInt(actor, "enemyRank");
}
int getEnemyRank(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "enemyRank");
}
int getAttackPower(InfoData* data, const char* actor) {
return data->getInt(actor, "attackPower");
}
int getAttackPower(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "attackPower");
}
int getWeaponCommonGuardPower(InfoData* data, const char* actor) {
return data->getInt(actor, "weaponCommonGuardPower");
}
int getWeaponCommonGuardPower(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "weaponCommonGuardPower");
}
float getWeaponCommonSharpWeaponPer(InfoData* data, const char* actor) {
return data->getFloat(actor, "weaponCommonSharpWeaponPer", 10.0);
}
float getWeaponCommonSharpWeaponPer(const al::ByamlIter& iter) {
return InfoData::getFloatByKey(iter, "weaponCommonSharpWeaponPer", 10.0);
}
int getWeaponCommonSharpWeaponAddAtkMin(InfoData* data, const char* actor) {
return data->getInt(actor, "weaponCommonSharpWeaponAddAtkMin");
}
int getWeaponCommonSharpWeaponAddAtkMin(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "weaponCommonSharpWeaponAddAtkMin");
}
int getWeaponCommonSharpWeaponAddAtkMax(InfoData* data, const char* actor) {
return data->getInt(actor, "weaponCommonSharpWeaponAddAtkMax");
}
int getWeaponCommonSharpWeaponAddAtkMax(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "weaponCommonSharpWeaponAddAtkMax");
}
int getWeaponCommonSharpWeaponAddLifeMin(InfoData* data, const char* actor) {
return data->getInt(actor, "weaponCommonSharpWeaponAddLifeMin");
}
int getWeaponCommonSharpWeaponAddLifeMin(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "weaponCommonSharpWeaponAddLifeMin");
}
int getWeaponCommonSharpWeaponAddLifeMax(InfoData* data, const char* actor) {
return data->getInt(actor, "weaponCommonSharpWeaponAddLifeMax");
}
int getWeaponCommonSharpWeaponAddLifeMax(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "weaponCommonSharpWeaponAddLifeMax");
}
bool getWeaponCommonSharpWeaponAddCrit(InfoData* data, const char* actor) {
return data->getBool(actor, "weaponCommonSharpWeaponAddCrit");
}
bool getWeaponCommonSharpWeaponAddCrit(const al::ByamlIter& iter) {
return InfoData::getBoolByKey(iter, "weaponCommonSharpWeaponAddCrit");
}
int getWeaponCommonSharpWeaponAddGuardMin(InfoData* data, const char* actor) {
return data->getInt(actor, "weaponCommonSharpWeaponAddGuardMin");
}
int getWeaponCommonSharpWeaponAddGuardMin(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "weaponCommonSharpWeaponAddGuardMin");
}
int getWeaponCommonSharpWeaponAddGuardMax(InfoData* data, const char* actor) {
return data->getInt(actor, "weaponCommonSharpWeaponAddGuardMax");
}
int getWeaponCommonSharpWeaponAddGuardMax(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "weaponCommonSharpWeaponAddGuardMax");
}
int getWeaponCommonPoweredSharpAddAtkMin(InfoData* data, const char* actor) {
return data->getInt(actor, "weaponCommonPoweredSharpAddAtkMin");
}
int getWeaponCommonPoweredSharpAddAtkMin(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "weaponCommonPoweredSharpAddAtkMin");
}
int getWeaponCommonPoweredSharpAddAtkMax(InfoData* data, const char* actor) {
return data->getInt(actor, "weaponCommonPoweredSharpAddAtkMax");
}
int getWeaponCommonPoweredSharpAddAtkMax(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "weaponCommonPoweredSharpAddAtkMax");
}
int getWeaponCommonPoweredSharpAddLifeMin(InfoData* data, const char* actor) {
return data->getInt(actor, "weaponCommonPoweredSharpAddLifeMin");
}
int getWeaponCommonPoweredSharpAddLifeMin(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "weaponCommonPoweredSharpAddLifeMin");
}
int getWeaponCommonPoweredSharpAddLifeMax(InfoData* data, const char* actor) {
return data->getInt(actor, "weaponCommonPoweredSharpAddLifeMax");
}
int getWeaponCommonPoweredSharpAddLifeMax(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "weaponCommonPoweredSharpAddLifeMax");
}
int getWeaponCommonPoweredSharpAddGuardMin(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "weaponCommonPoweredSharpAddGuardMin");
int getWeaponCommonPoweredSharpWeaponAddGuardMin(InfoData* data, const char* actor) {
return data->getInt(actor, "weaponCommonPoweredSharpWeaponAddGuardMin");
}
int getWeaponCommonPoweredSharpAddGuardMax(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "weaponCommonPoweredSharpAddGuardMax");
int getWeaponCommonPoweredSharpWeaponAddGuardMin(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "weaponCommonPoweredSharpWeaponAddGuardMin");
}
int getWeaponCommonPoweredSharpWeaponAddGuardMax(InfoData* data, const char* actor) {
return data->getInt(actor, "weaponCommonPoweredSharpWeaponAddGuardMax");
}
int getWeaponCommonPoweredSharpWeaponAddGuardMax(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "weaponCommonPoweredSharpWeaponAddGuardMax");
}
float getWeaponCommonPoweredSharpAddThrowMin(InfoData* data, const char* actor) {
return data->getFloat(actor, "weaponCommonPoweredSharpAddThrowMin", 1.0);
}
float getWeaponCommonPoweredSharpAddThrowMin(const al::ByamlIter& iter) {
return InfoData::getFloatByKey(iter, "weaponCommonPoweredSharpAddThrowMin", 1.0);
}
float getWeaponCommonPoweredSharpAddThrowMax(InfoData* data, const char* actor) {
return data->getFloat(actor, "weaponCommonPoweredSharpAddThrowMax", 1.0);
}
float getWeaponCommonPoweredSharpAddThrowMax(const al::ByamlIter& iter) {
return InfoData::getFloatByKey(iter, "weaponCommonPoweredSharpAddThrowMax", 1.0);
}
bool getWeaponCommonPoweredSharpAddSpreadFire(InfoData* data, const char* actor) {
return data->getBool(actor, "weaponCommonPoweredSharpAddSpreadFire");
}
bool getWeaponCommonPoweredSharpAddSpreadFire(const al::ByamlIter& iter) {
return InfoData::getBoolByKey(iter, "weaponCommonPoweredSharpAddSpreadFire");
}
bool getWeaponCommonPoweredSharpAddZoomRapid(InfoData* data, const char* actor) {
return data->getBool(actor, "weaponCommonPoweredSharpAddZoomRapid");
}
bool getWeaponCommonPoweredSharpAddZoomRapid(const al::ByamlIter& iter) {
return InfoData::getBoolByKey(iter, "weaponCommonPoweredSharpAddZoomRapid");
}
float getWeaponCommonPoweredSharpAddRapidFireMin(InfoData* data, const char* actor) {
return data->getFloat(actor, "weaponCommonPoweredSharpAddRapidFireMin", 1.0);
}
float getWeaponCommonPoweredSharpAddRapidFireMin(const al::ByamlIter& iter) {
return InfoData::getFloatByKey(iter, "weaponCommonPoweredSharpAddRapidFireMin", 1.0);
}
float getWeaponCommonPoweredSharpAddRapidFireMax(InfoData* data, const char* actor) {
return data->getFloat(actor, "weaponCommonPoweredSharpAddRapidFireMax", 1.0);
}
float getWeaponCommonPoweredSharpAddRapidFireMax(const al::ByamlIter& iter) {
return InfoData::getFloatByKey(iter, "weaponCommonPoweredSharpAddRapidFireMax", 1.0);
}
bool getWeaponCommonPoweredSharpAddSurfMaster(InfoData* data, const char* actor) {
return data->getBool(actor, "weaponCommonPoweredSharpAddSurfMaster");
}
bool getWeaponCommonPoweredSharpAddSurfMaster(const al::ByamlIter& iter) {
return InfoData::getBoolByKey(iter, "weaponCommonPoweredSharpAddSurfMaster");
}
@ -119,18 +217,38 @@ const char* getBowArrowName(InfoData* data, const char* actor) {
return data->getString(actor, "bowArrowName");
}
const char* getBowArrowName(const al::ByamlIter& iter) {
return InfoData::getStringByKey(iter, "bowArrowName");
}
bool getBowIsLeadShot(InfoData* data, const char* actor) {
return data->getBool(actor, "bowIsLeadShot");
}
bool getBowIsLeadShot(const al::ByamlIter& iter) {
return InfoData::getBoolByKey(iter, "bowIsLeadShot");
}
int getBowLeadShotNum(InfoData* data, const char* actor) {
return data->getInt(actor, "bowLeadShotNum");
}
int getBowLeadShotNum(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "bowLeadShotNum");
}
bool getBowIsRapidFire(InfoData* data, const char* actor) {
return data->getBool(actor, "bowIsRapidFire");
}
bool getBowIsRapidFire(const al::ByamlIter& iter) {
return InfoData::getBoolByKey(iter, "bowIsRapidFire");
}
int getBowRapidFireNum(InfoData* data, const char* actor) {
return data->getInt(actor, "bowRapidFireNum");
}
int getBowRapidFireNum(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "bowRapidFireNum");
}
@ -139,26 +257,50 @@ int getMasterSwordTrueFormAttackPower(InfoData* data, const char* actor) {
return data->getInt(actor, "masterSwordTrueFormAttackPower", -1);
}
int getMasterSwordTrueFormAttackPower(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "masterSwordTrueFormAttackPower", -1);
}
float getMasterSwordSearchEvilDist(InfoData* data, const char* actor) {
return data->getFloat(actor, "masterSwordSearchEvilDist", -1.0);
}
float getMasterSwordSearchEvilDist(const al::ByamlIter& iter) {
return InfoData::getFloatByKey(iter, "masterSwordSearchEvilDist", -1.0);
}
const char* getMasterSwordSleepActorName(InfoData* data, const char* actor) {
return data->getString(actor, "masterSwordSleepActorName");
}
const char* getMasterSwordSleepActorName(const al::ByamlIter& iter) {
return InfoData::getStringByKey(iter, "masterSwordSleepActorName");
}
const char* getMasterSwordTrueFormActorName(InfoData* data, const char* actor) {
return data->getString(actor, "masterSwordTrueFormActorName");
}
const char* getMasterSwordTrueFormActorName(const al::ByamlIter& iter) {
return InfoData::getStringByKey(iter, "masterSwordTrueFormActorName");
}
const char* getArmorNextRankName(InfoData* data, const char* actor) {
return data->getString(actor, "armorNextRankName", sead::SafeString::cEmptyString);
return data->getString(actor, "armorNextRankName");
}
const char* getArmorNextRankName(const al::ByamlIter& iter) {
return InfoData::getStringByKey(iter, "armorNextRankName");
}
int getItemStainColor(InfoData* data, const char* actor) {
return data->getInt(actor, "itemStainColor", -1);
}
int getItemStainColor(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "itemStainColor", -1);
}
int getCureItemHitPointRecover(InfoData* data, const char* actor) {
return data->getInt(actor, "cureItemHitPointRecover");
}
@ -167,8 +309,13 @@ int getCureItemHitPointRecover(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "cureItemHitPointRecover");
}
int getMonsterShopSellMamo(InfoData* data, const char* actor) {
return data->getInt(actor, "monsterShopSellMamo");
}
int getMonsterShopSellMamo(const al::ByamlIter& iter) {
return InfoData::getIntByKey(iter, "monsterShopSellMamo");
}
} // namespace ksys::act

View File

@ -1,5 +1,7 @@
#pragma once
// DO NOT EDIT. This file is automatically generated by actInfoCommon.py.
namespace al {
class ByamlIter;
}
@ -15,51 +17,115 @@ int getGeneralLife(InfoData* data, const char* actor);
int getGeneralLife(const al::ByamlIter& iter);
int getEnemyRank(InfoData* data, const char* actor);
int getEnemyRank(const al::ByamlIter& iter);
int getAttackPower(InfoData* data, const char* actor);
int getAttackPower(const al::ByamlIter& iter);
int getWeaponCommonGuardPower(InfoData* data, const char* actor);
float getWeaponCommonSharpWeaponPer(InfoData* data, const char* actor);
int getWeaponCommonGuardPower(const al::ByamlIter& iter);
float getWeaponCommonSharpWeaponPer(InfoData* data, const char* actor);
float getWeaponCommonSharpWeaponPer(const al::ByamlIter& iter);
int getWeaponCommonSharpWeaponAddAtkMin(InfoData* data, const char* actor);
int getWeaponCommonSharpWeaponAddAtkMin(const al::ByamlIter& iter);
int getWeaponCommonSharpWeaponAddAtkMax(InfoData* data, const char* actor);
int getWeaponCommonSharpWeaponAddAtkMax(const al::ByamlIter& iter);
int getWeaponCommonSharpWeaponAddLifeMin(InfoData* data, const char* actor);
int getWeaponCommonSharpWeaponAddLifeMin(const al::ByamlIter& iter);
int getWeaponCommonSharpWeaponAddLifeMax(InfoData* data, const char* actor);
int getWeaponCommonSharpWeaponAddLifeMax(const al::ByamlIter& iter);
bool getWeaponCommonSharpWeaponAddCrit(InfoData* data, const char* actor);
bool getWeaponCommonSharpWeaponAddCrit(const al::ByamlIter& iter);
int getWeaponCommonSharpWeaponAddGuardMin(InfoData* data, const char* actor);
int getWeaponCommonSharpWeaponAddGuardMin(const al::ByamlIter& iter);
int getWeaponCommonSharpWeaponAddGuardMax(InfoData* data, const char* actor);
int getWeaponCommonSharpWeaponAddGuardMax(const al::ByamlIter& iter);
int getWeaponCommonPoweredSharpAddAtkMin(InfoData* data, const char* actor);
int getWeaponCommonPoweredSharpAddAtkMin(const al::ByamlIter& iter);
int getWeaponCommonPoweredSharpAddAtkMax(InfoData* data, const char* actor);
int getWeaponCommonPoweredSharpAddAtkMax(const al::ByamlIter& iter);
int getWeaponCommonPoweredSharpAddLifeMin(InfoData* data, const char* actor);
int getWeaponCommonPoweredSharpAddLifeMin(const al::ByamlIter& iter);
int getWeaponCommonPoweredSharpAddLifeMax(InfoData* data, const char* actor);
int getWeaponCommonPoweredSharpAddLifeMax(const al::ByamlIter& iter);
int getWeaponCommonPoweredSharpAddGuardMin(const al::ByamlIter& iter);
int getWeaponCommonPoweredSharpAddGuardMax(const al::ByamlIter& iter);
int getWeaponCommonPoweredSharpWeaponAddGuardMin(InfoData* data, const char* actor);
int getWeaponCommonPoweredSharpWeaponAddGuardMin(const al::ByamlIter& iter);
int getWeaponCommonPoweredSharpWeaponAddGuardMax(InfoData* data, const char* actor);
int getWeaponCommonPoweredSharpWeaponAddGuardMax(const al::ByamlIter& iter);
float getWeaponCommonPoweredSharpAddThrowMin(InfoData* data, const char* actor);
float getWeaponCommonPoweredSharpAddThrowMin(const al::ByamlIter& iter);
float getWeaponCommonPoweredSharpAddThrowMax(InfoData* data, const char* actor);
float getWeaponCommonPoweredSharpAddThrowMax(const al::ByamlIter& iter);
bool getWeaponCommonPoweredSharpAddSpreadFire(InfoData* data, const char* actor);
bool getWeaponCommonPoweredSharpAddSpreadFire(const al::ByamlIter& iter);
bool getWeaponCommonPoweredSharpAddZoomRapid(InfoData* data, const char* actor);
bool getWeaponCommonPoweredSharpAddZoomRapid(const al::ByamlIter& iter);
float getWeaponCommonPoweredSharpAddRapidFireMin(InfoData* data, const char* actor);
float getWeaponCommonPoweredSharpAddRapidFireMin(const al::ByamlIter& iter);
float getWeaponCommonPoweredSharpAddRapidFireMax(InfoData* data, const char* actor);
float getWeaponCommonPoweredSharpAddRapidFireMax(const al::ByamlIter& iter);
bool getWeaponCommonPoweredSharpAddSurfMaster(InfoData* data, const char* actor);
bool getWeaponCommonPoweredSharpAddSurfMaster(const al::ByamlIter& iter);
const char* getBowArrowName(InfoData* data, const char* actor);
const char* getBowArrowName(const al::ByamlIter& iter);
bool getBowIsLeadShot(InfoData* data, const char* actor);
bool getBowIsLeadShot(const al::ByamlIter& iter);
int getBowLeadShotNum(InfoData* data, const char* actor);
int getBowLeadShotNum(const al::ByamlIter& iter);
bool getBowIsRapidFire(InfoData* data, const char* actor);
bool getBowIsRapidFire(const al::ByamlIter& iter);
int getBowRapidFireNum(InfoData* data, const char* actor);
int getBowRapidFireNum(const al::ByamlIter& iter);
int getMasterSwordTrueFormAttackPower(InfoData* data, const char* actor);
int getMasterSwordTrueFormAttackPower(const al::ByamlIter& iter);
float getMasterSwordSearchEvilDist(InfoData* data, const char* actor);
float getMasterSwordSearchEvilDist(const al::ByamlIter& iter);
const char* getMasterSwordSleepActorName(InfoData* data, const char* actor);
const char* getMasterSwordSleepActorName(const al::ByamlIter& iter);
const char* getMasterSwordTrueFormActorName(InfoData* data, const char* actor);
const char* getMasterSwordTrueFormActorName(const al::ByamlIter& iter);
const char* getArmorNextRankName(InfoData* data, const char* actor);
const char* getArmorNextRankName(const al::ByamlIter& iter);
int getItemStainColor(InfoData* data, const char* actor);
int getItemStainColor(const al::ByamlIter& iter);
int getCureItemHitPointRecover(InfoData* data, const char* actor);
int getCureItemHitPointRecover(const al::ByamlIter& iter);
int getMonsterShopSellMamo(InfoData* data, const char* actor);
int getMonsterShopSellMamo(const al::ByamlIter& iter);
} // namespace ksys::act

View File

@ -0,0 +1,149 @@
#!/usr/bin/env python3
# Generates actInfoCommon.h and actInfoCommon.cpp.
from typing import Any, List, Tuple
from pathlib import Path
# Section | Name | Type | Default value (optional)
PROPERTIES: List[Tuple[str, str, str, Any]] = [
("System", "IsGetItemSelf", "bool"),
("General", "Life", "int", 100),
("Enemy", "Rank", "int"),
("Attack", "Power", "int"),
("WeaponCommon", "GuardPower", "int"),
("WeaponCommon", "SharpWeaponPer", "float", 10.0),
("WeaponCommon", "SharpWeaponAddAtkMin", "int"),
("WeaponCommon", "SharpWeaponAddAtkMax", "int"),
("WeaponCommon", "SharpWeaponAddLifeMin", "int"),
("WeaponCommon", "SharpWeaponAddLifeMax", "int"),
("WeaponCommon", "SharpWeaponAddCrit", "bool"),
("WeaponCommon", "SharpWeaponAddGuardMin", "int"),
("WeaponCommon", "SharpWeaponAddGuardMax", "int"),
("WeaponCommon", "PoweredSharpAddAtkMin", "int"),
("WeaponCommon", "PoweredSharpAddAtkMax", "int"),
("WeaponCommon", "PoweredSharpAddLifeMin", "int"),
("WeaponCommon", "PoweredSharpAddLifeMax", "int"),
("WeaponCommon", "PoweredSharpWeaponAddGuardMin", "int"),
("WeaponCommon", "PoweredSharpWeaponAddGuardMax", "int"),
("WeaponCommon", "PoweredSharpAddThrowMin", "float", 1.0),
("WeaponCommon", "PoweredSharpAddThrowMax", "float", 1.0),
("WeaponCommon", "PoweredSharpAddSpreadFire", "bool"),
("WeaponCommon", "PoweredSharpAddZoomRapid", "bool"),
("WeaponCommon", "PoweredSharpAddRapidFireMin", "float", 1.0),
("WeaponCommon", "PoweredSharpAddRapidFireMax", "float", 1.0),
("WeaponCommon", "PoweredSharpAddSurfMaster", "bool"),
("Bow", "ArrowName", "const char*"),
("Bow", "IsLeadShot", "bool"),
("Bow", "LeadShotNum", "int"),
("Bow", "IsRapidFire", "bool"),
("Bow", "RapidFireNum", "int"),
("MasterSword", "TrueFormAttackPower", "int", -1),
("MasterSword", "SearchEvilDist", "float", -1.0),
("MasterSword", "SleepActorName", "const char*"),
("MasterSword", "TrueFormActorName", "const char*"),
("Armor", "NextRankName", "const char*"),
("Item", "StainColor", "int", -1),
("CureItem", "HitPointRecover", "int"),
("MonsterShop", "SellMamo", "int"),
]
def generate_declarations(props: list) -> str:
lines = []
for prop in props:
assert len(prop) == 3 or len(prop) == 4
section, name, type_, *_ = prop
lines.append(f"{type_} get{section}{name}(InfoData* data, const char* actor);")
lines.append(f"{type_} get{section}{name}(const al::ByamlIter& iter);")
lines.append("")
return "\n".join(lines)
def get_key_name(section: str, name: str) -> str:
return section[0].lower() + section[1:] + name
def generate_definitions(props: list) -> str:
_getters = {
"int": "getInt",
"bool": "getBool",
"float": "getFloat",
"const char*": "getString",
}
lines = []
for prop in props:
assert len(prop) == 3 or len(prop) == 4
if len(prop) == 3:
section, name, type_ = prop
key = get_key_name(section, name)
lines.append(f"{type_} get{section}{name}(InfoData* data, const char* actor) {{")
lines.append(f" return data->{_getters[type_]}(actor, \"{key}\");")
lines.append(f"}}")
lines.append("")
lines.append(f"{type_} get{section}{name}(const al::ByamlIter& iter) {{")
lines.append(f" return InfoData::{_getters[type_]}ByKey(iter, \"{key}\");")
lines.append(f"}}")
lines.append("")
else:
section, name, type_, default_ = prop
key = get_key_name(section, name)
default_str = f'"{default_}"' if isinstance(default_, str) else str(default_)
lines.append(f"{type_} get{section}{name}(InfoData* data, const char* actor) {{")
lines.append(f" return data->{_getters[type_]}(actor, \"{key}\", {default_str});")
lines.append(f"}}")
lines.append("")
lines.append(f"{type_} get{section}{name}(const al::ByamlIter& iter) {{")
lines.append(f" return InfoData::{_getters[type_]}ByKey(iter, \"{key}\", {str(default_str)});")
lines.append(f"}}")
lines.append("")
return "\n".join(lines)
header_contents = """\
#pragma once
// DO NOT EDIT. This file is automatically generated by actInfoCommon.py.
namespace al {
class ByamlIter;
}
namespace ksys::act {
class InfoData;
""" + generate_declarations(PROPERTIES) + """\
} // namespace ksys::act
"""
cpp_contents = """\
#include "KingSystem/ActorSystem/actInfoCommon.h"
#include "KingSystem/ActorSystem/actInfoData.h"
// DO NOT EDIT. This file is automatically generated by actInfoCommon.py.
namespace ksys::act {
""" + generate_definitions(PROPERTIES) + """\
} // namespace ksys::act
"""
this_dir = Path(__file__).parent
(this_dir / "actInfoCommon.h").write_text(header_contents)
(this_dir / "actInfoCommon.cpp").write_text(cpp_contents)