Esempio n. 1
0
 def __call__(self, entry) -> FieldDisplayInfo:
     if entry[self.type_field_name] == BEHAVIOR_REF_TYPE.Default:
         return FieldDisplayInfo(
             self.name,
             "Attack",
             True,
             AttackParam,
             "Attack ID triggered by behavior.",
         )
     elif entry[self.type_field_name] == BEHAVIOR_REF_TYPE.Bullet:
         return FieldDisplayInfo(
             self.name,
             "Bullet",
             True,
             BulletParam,
             "Bullet ID triggered by behavior.",
         )
     elif entry[self.type_field_name] == BEHAVIOR_REF_TYPE.SpecialEffect:
         return FieldDisplayInfo(
             self.name,
             "SpecialEffect",
             True,
             SpecialEffectParam,
             "Special Effect ID triggered by behavior. (Never used; may not work.)",
         )
     else:
         return FieldDisplayInfo(
             self.name,
             "UnknownRef",
             True,
             int,
             "Could not determine reference ID type (usually Attack or Bullet).",
         )
Esempio n. 2
0
 def __call__(self, entry) -> FieldDisplayInfo:
     if entry[self.type_field_name] == BEHAVIOR_REF_TYPE.Default:
         return FieldDisplayInfo(
             self.name,
             "NoReference",
             True,
             int,
             "This value should be -1 when 'Default' reference type is selected.",
         )
     elif entry[self.type_field_name] == BEHAVIOR_REF_TYPE.Bullet:
         return FieldDisplayInfo(
             self.name,
             "Bullet",
             True,
             BulletParam,
             "Bullet triggered by casting spell (which may simply be targeted at self).",
         )
     elif entry[self.type_field_name] == BEHAVIOR_REF_TYPE.SpecialEffect:
         return FieldDisplayInfo(
             self.name,
             "SpecialEffect",
             True,
             SpecialEffectParam,
             "Special effect triggered (on self) by casting spell.",
         )
     else:
         return FieldDisplayInfo(
             self.name,
             "UnknownReferenceID",
             True,
             int,
             "Could not determine spell reference type (usually Bullet or SpecialEffect).",
         )
Esempio n. 3
0
 def __call__(self, entry) -> FieldDisplayInfo:
     item_type = entry[self.type_field_name]
     if item_type == SHOP_LINEUP_EQUIPTYPE.Weapon:
         return FieldDisplayInfo(self.name, f"Weapon", True, WeaponParam,
                                 f"Weapon to be listed in shop menu.")
     if item_type == SHOP_LINEUP_EQUIPTYPE.Armor:
         return FieldDisplayInfo(self.name, f"Armor", True, ArmorParam,
                                 f"Armor to be listed in shop menu.")
     if item_type == SHOP_LINEUP_EQUIPTYPE.Ring:
         return FieldDisplayInfo(self.name, f"Ring", True, RingParam,
                                 f"Ring to be listed in shop menu.")
     if item_type == SHOP_LINEUP_EQUIPTYPE.Good:
         return FieldDisplayInfo(self.name, f"Good", True, GoodParam,
                                 f"Good to be listed in shop menu.")
     if item_type == SHOP_LINEUP_EQUIPTYPE.Spell:
         return FieldDisplayInfo(self.name, f"Spell", True, SpellParam,
                                 f"Spell to be listed in attunement menu.")
     else:
         return FieldDisplayInfo(
             self.name,
             f"ItemID",
             True,
             int,
             f"Item to be listed in shop/attunement menu (unknown item type {item_type}).",
         )
Esempio n. 4
0
 def __call__(self, entry) -> FieldDisplayInfo:
     n = "2" if self.type_field_name.endswith("2") else "1"
     if entry[self.type_field_name] == OBJACT_SP_QUALIFIED_TYPE.NoCondition:
         return FieldDisplayInfo(
             self.name,
             f"NoCondition{n}",
             True,
             int,
             f"No condition type selected.",
         )
     elif entry[self.type_field_name] == OBJACT_SP_QUALIFIED_TYPE.HasGood:
         return FieldDisplayInfo(
             self.name,
             f"RequiredGood{n}",
             True,
             GoodParam,
             f"Condition: object action will succeed if user has this good in their inventory (does not "
             "include Bottomless Box).",
         )
     elif entry[
             self.
             type_field_name] == OBJACT_SP_QUALIFIED_TYPE.HasSpecialEffect:
         return FieldDisplayInfo(
             self.name,
             f"RequiredSpecialEffect{n}",
             True,
             SpecialEffectParam,
             "Condition: object action will succeed if user has this special effect.",
         )
     else:
         return FieldDisplayInfo(
             self.name,
             f"UnknownCondition{n}",
             True,
             int,
             "Could not determine success condition ID type (usually HasGood or HasSpecialEffect).",
         )
Esempio n. 5
0
    "TONE_MAP_BANK",
    "TONE_CORRECT_BANK",
    "SHADOW_BANK",
]

from soulstruct.base.params.utils import FieldDisplayInfo, pad_field

FOG_BANK = {
    "paramdef_name":
    "FOG_BANK",
    "file_name":
    "FogBank",
    "nickname":
    "Fog",
    "fields": [
        FieldDisplayInfo("fogBeginZ", "FogStartDistance", True, int,
                         "Distance (m) at which fog begins."),
        FieldDisplayInfo("fogEndZ", "FogEndDistance", True, int,
                         "Distance (m) at which fog ends."),
        FieldDisplayInfo("degRotZ", "RotationZ", True, int,
                         "Rotation of fog around the Z axis."),
        FieldDisplayInfo("degRotW", "RotationW", True, int,
                         "Rotation of fog around the W axis."),
        FieldDisplayInfo("colR", "Red", True, int,
                         "Red color channel (0-255)."),
        FieldDisplayInfo("colG", "Green", True, int,
                         "Green color channel (0-255)."),
        FieldDisplayInfo("colB", "Blue", True, int,
                         "Blue color channel (0-255)."),
        FieldDisplayInfo("colA", "Alpha", True, int, "Alpha channel (0-255)."),
    ],
}
Esempio n. 6
0
                "Could not determine spell reference type (usually Bullet or SpecialEffect).",
            )


MAGIC_PARAM_ST = {
    "paramdef_name":
    "MAGIC_PARAM_ST",
    "file_name":
    "Magic",
    "nickname":
    "Spells",
    "fields": [
        FieldDisplayInfo(
            "yesNoDialogMessageId",
            "ConfirmationMessage",
            True,
            EventText,
            "Message displayed in yes/no dialog box to confirm use of spell. Requires the Yes/No menu type.",
        ),
        FieldDisplayInfo(
            "limitCancelSpEffectId",
            "LimitRemoveSpecialEffect",
            False,
            SpecialEffectParam,
            "Unknown. Never used.",
        ),
        FieldDisplayInfo("sortId", "SortIndex", True, int,
                         "Index for automatic inventory sorting."),
        DynamicSpellRef("refId", "refCategory"),
        FieldDisplayInfo(
            "mp", "MPCost", False, int,
Esempio n. 7
0
from soulstruct.base.params.utils import FieldDisplayInfo, pad_field, bit_pad_field
from soulstruct.darksouls1ptde.game_types import *
from ..enums import *

SP_EFFECT_PARAM_ST = {
    "paramdef_name":
    "SP_EFFECT_PARAM_ST",
    "file_name":
    "SpEffectParam",
    "nickname":
    "SpecialEffects",
    "fields": [
        FieldDisplayInfo(
            "iconId",
            "StatusIcon",
            True,
            Texture,
            "Icon that appears in HUD under stamina bar while special effect is active. Set to -1 for no icon.",
        ),
        FieldDisplayInfo(
            "conditionHp",
            "MaxHPPercentageForEffect",
            True,
            float,
            "Special effect will only take effect if character's current HP is less than or equal to this "
            "percentage (from 0 to 100). Set to -1 for no HP condition.",
        ),
        FieldDisplayInfo(
            "effectEndurance",
            "EffectDuration",
            True,
Esempio n. 8
0
__all__ = ["ATK_PARAM_ST", "THROW_INFO_BANK"]

from soulstruct.base.params.utils import FieldDisplayInfo, pad_field, bit_pad_field
from soulstruct.game_types import *
from ..enums import *

ATK_PARAM_ST = {
    "paramdef_name":
    "ATK_PARAM_ST",
    "file_name":
    "AtkParam_Pc",  # also AtkParam_Npc
    "nickname":
    None,
    "fields": [
        FieldDisplayInfo("hit0_Radius", "Hitbox0Radius", True, float,
                         "Radius of sphere/capsule hitbox (slot 0)."),
        FieldDisplayInfo("hit1_Radius", "Hitbox1Radius", True, float,
                         "Radius of sphere/capsule hitbox (slot 1)."),
        FieldDisplayInfo("hit2_Radius", "Hitbox2Radius", True, float,
                         "Radius of sphere/capsule hitbox (slot 2)."),
        FieldDisplayInfo("hit3_Radius", "Hitbox3Radius", True, float,
                         "Radius of sphere/capsule hitbox (slot 3)."),
        FieldDisplayInfo("knockbackDist", "KnockbackDistance", True, float,
                         "Knockback distance of attack."),
        FieldDisplayInfo(
            "hitStopTime",
            "HitStopTime",
            True,
            float,
            "Unclear. This isn't hitbox duration, which is determined by the duration of the triggering TAE "
            "event. It may be the duration of the 'hit' flag on the target. Always set to 0, 0.08. or 0.11.",
Esempio n. 9
0
from soulstruct.base.params.utils import FieldDisplayInfo, pad_field
from soulstruct.bloodborne.params.enums import *
from soulstruct.game_types import *

EQUIP_GEN_PARAM_BOOL32 = bool  # override u32

GEM_CATEGORY_PARAM_ST = {
    "paramdef_name":
    "GEM_CATEGORY_PARAM_ST",
    "file_name":
    "GemCategoryParam",
    "nickname":
    "GemCategories",
    "fields": [
        FieldDisplayInfo("sortNo", "SortID", True, int, ""),
        FieldDisplayInfo("manifestRate", "ManifestRate", True, float, ""),
        FieldDisplayInfo("directionalId", "DirectionalID", True, int, ""),
        FieldDisplayInfo("cateGroupId", "CategoryGroupID", True, int, ""),
        FieldDisplayInfo("excludeGroupId", "ExcludeGroupID", True, int, ""),
        FieldDisplayInfo("isNegative:1", "IsNegative", True,
                         EQUIP_GEN_PARAM_BOOL32, ""),
        FieldDisplayInfo("enableSlotTypeA:1", "EnableSlotTypeA", True,
                         EQUIP_GEN_PARAM_BOOL32, ""),
        FieldDisplayInfo("enableSlotTypeB:1", "EnableSlotTypeB", True,
                         EQUIP_GEN_PARAM_BOOL32, ""),
        FieldDisplayInfo("enableSlotTypeC:1", "EnableSlotTypeC", True,
                         EQUIP_GEN_PARAM_BOOL32, ""),
        FieldDisplayInfo("enableSlotTypeD:1", "EnableSlotTypeD", True,
                         EQUIP_GEN_PARAM_BOOL32, ""),
        FieldDisplayInfo("enableSlotTypeE:1", "EnableSlotTypeE", True,
Esempio n. 10
0
__all__ = ["CHARACTER_INIT_PARAM", "NPC_PARAM_ST", "CACL_CORRECT_GRAPH_ST"]

from soulstruct.base.params.utils import FieldDisplayInfo, pad_field, bit_pad_field
from soulstruct.bloodborne.params.enums import *
from soulstruct.bloodborne.game_types import *

CHARACTER_INIT_PARAM = {
    "paramdef_name":
    "CHARACTER_INIT_PARAM",
    "file_name":
    "CharaInitParam",
    "nickname":
    "Players",
    "fields": [
        FieldDisplayInfo("baseRec_mp", "BaseRecMP", False, float, "Unknown."),
        FieldDisplayInfo("baseRec_sp", "BaseRecSP", False, float, "Unknown."),
        FieldDisplayInfo("red_Falldam", "RedFallDamage", False, float,
                         "Unknown."),
        FieldDisplayInfo("soul", "SoulCount", True, int,
                         "Starting soul count of character."),
        FieldDisplayInfo(
            "equip_Wep_Right",
            "RightHandWeapon1",
            True,
            WeaponParam,
            "First (default) weapon/shield equipped in right hand.",
        ),
        FieldDisplayInfo(
            "equip_Subwep_Right",
            "RightHandWeapon2",
            True,
Esempio n. 11
0
    "HOLYGRAIL_EX_PARAM_ST",
    "RITUAL_REQUIRED_MAT_PARAM",
]

from soulstruct.base.params.utils import FieldDisplayInfo, pad_field
from soulstruct.bloodborne.game_types import *

DUNGEON_FEATURE_PARAM_ST = {
    "paramdef_name":
    "DUNGEON_FEATURE_PARAM_ST",
    "file_name":
    "DungeonFeatureParam",
    "nickname":
    "DungeonFeatures",
    "fields": [
        FieldDisplayInfo("featureNameId", "FeatureNameID", True, int, ""),
        FieldDisplayInfo("subFeatureGroupId", "SubFeatureGroupID", True, int,
                         ""),
        FieldDisplayInfo("eventflagId", "EventFlagID", True, int, ""),
        FieldDisplayInfo("dungeonNamePriority", "DungeonNamePriority", True,
                         int, ""),
        FieldDisplayInfo("releaseFlagIdOffset", "ReleaseFlagIDOffset", True,
                         int, ""),
        FieldDisplayInfo("npcParamIdOffset", "CharacterParamOffset", True, int,
                         ""),
        FieldDisplayInfo("itemLotParamIdOffset", "ItemLotParamOffset", True,
                         int, ""),
        FieldDisplayInfo("eneSpeffectId", "EnemySpecialEffectID", True, int,
                         ""),
        FieldDisplayInfo("gemDropCorrectParamId", "GemDropCorrectionParamID",
                         True, int, ""),
Esempio n. 12
0
            return FieldDisplayInfo(
                self.name,
                f"ItemID",
                True,
                int,
                f"Item to be listed in shop/attunement menu (unknown item type {item_type}).",
            )


SHOP_LINEUP_PARAM = {
    "paramdef_name": "SHOP_LINEUP_PARAM",
    "file_name": "ShopLineupParam",
    "nickname": "Shops",
    "fields": [
        DynamicShopRef("equipId", "equipType"),
        FieldDisplayInfo("value", "SoulCost", True, int, "Cost of item, in souls."),
        FieldDisplayInfo(
            "mtrlId",
            "RequiredGood",
            True,
            GoodParam,
            "Good that must be possessed for item to be listed. Used to control appearance of spells in "
            "attunement menu.",
        ),
        FieldDisplayInfo(
            "eventFlag",
            "QuantityFlag",
            True,
            Flag,
            "Flag value that holds the count of this item that have been sold already.",
        ),
Esempio n. 13
0
__all__ = ["NPC_THINK_PARAM_ST"]

from soulstruct.base.params.utils import FieldDisplayInfo, pad_field
from soulstruct.darksouls1ptde.game_types import *
from ..enums import *

NPC_THINK_PARAM_ST = {
    "paramdef_name":
    "NPC_THINK_PARAM_ST",
    "file_name":
    "NpcThinkParam",
    "nickname":
    "AI",
    "fields": [
        FieldDisplayInfo("logicId", "LogicID", True, LogicAIScript,
                         "ID of logic (non-battle) Lua script."),
        FieldDisplayInfo(
            "battleGoalID",
            "BattleID",
            True,
            BattleAIScript,
            "Battle goal ID used to look up battle Lua script.",
        ),
        FieldDisplayInfo(
            "nearDist",
            "NearDistance",
            True,
            float,
            "Distance considered to be close range by this NPC (for scripts).",
        ),
        FieldDisplayInfo(
Esempio n. 14
0
                "Could not determine success condition ID type (usually HasGood or HasSpecialEffect).",
            )


OBJECT_PARAM_ST = {
    "paramdef_name":
    "OBJECT_PARAM_ST",
    "file_name":
    "ObjectParam",
    "nickname":
    "Objects",
    "fields": [
        FieldDisplayInfo(
            "hp",
            "ObjectHP",
            True,
            int,
            "Amount of damage object can take before it is destroyed. (Set to -1 for invulnerability.)",
        ),
        FieldDisplayInfo(
            "defense",
            "MinAttackForDamage",
            True,
            int,
            "Minimum attack power required to damage object. Attacks with less power than this will deal no "
            "damage.",
        ),
        FieldDisplayInfo(
            "extRefTexId",
            "ExternalTextureID",
            False,
Esempio n. 15
0
from soulstruct.base.params.utils import FieldDisplayInfo, pad_field
from soulstruct.game_types.param_types import *
from ..enums import *


BULLET_PARAM_ST = {
    "paramdef_name": "BULLET_PARAM_ST",
    "file_name": "Bullet",  # rare case in which file name does not end in "Param"
    "nickname": "Bullets",
    "fields": [
        FieldDisplayInfo(
            "atkId_Bullet",
            "BulletAttack",
            True,
            AttackParam,
            "Attack parameters for bullet impact. Only certain fields in the attack parameter are used. Could be "
            "directed to either PlayerAttacks table or NonPlayerAttacks table, depending on the bullet's owner. "
            "Set to 0 if bullet has no attack data (no damage).",
        ),
        FieldDisplayInfo("sfxId_Bullet", "ProjectileVFX", True, int, "Visual effect ID for bullet projectile."),
        FieldDisplayInfo("sfxId_Hit", "ImpactVFX", True, int, "Visual effect ID for bullet impact."),
        FieldDisplayInfo(
            "sfxId_Flick",
            "FlickVFX",
            True,
            int,
            "Visual effect ID for when bullet is blocked (I think). Used predominantly for arrows and throwing "
            "knives.",
        ),
        FieldDisplayInfo(
Esempio n. 16
0
                "UnknownRef",
                True,
                int,
                "Could not determine reference ID type (usually Attack or Bullet).",
            )


BEHAVIOR_PARAM_ST = {
    "paramdef_name":
    "BEHAVIOR_PARAM_ST",
    "file_name":
    "BehaviorParam",  # also BehaviorParam_PC
    "nickname":
    None,
    "fields": [
        FieldDisplayInfo("variationId", "VariationID", True, int,
                         ""),  # TODO: connect to model/TAE somehow.
        FieldDisplayInfo(
            "behaviorJudgeId",
            "BehaviorJudgeID",
            True,
            int,
            "This is the ID specified by TAE events that trigger behaviors.",
        ),
        FieldDisplayInfo("ezStateBehaviorType_old", "EzstateBehaviorType",
                         False, int, "Unused remnant from Demon's Souls."),
        FieldDisplayInfo("refType", "ReferenceType", True, BEHAVIOR_REF_TYPE,
                         "Is the reference ID below an Attack or Bullet ID?"),
        FieldDisplayInfo("pad0[2]", "Pad1", False, pad_field(2),
                         "Null padding."),
        DynamicBehaviorRef("refId", "refType"),
        FieldDisplayInfo("sfxVariationId", "VFXVariationID", True, int,
Esempio n. 17
0
from soulstruct.base.params.utils import FieldDisplayInfo, pad_field
from soulstruct.game_types import *
from ..enums import *

GAME_AREA_PARAM_ST = {
    "paramdef_name":
    "GAME_AREA_PARAM_ST",
    "file_name":
    "GameAreaParam",
    "nickname":
    "Bosses",
    "fields": [
        FieldDisplayInfo(
            "bonusSoul_single",
            "SingleplayerSoulReward",
            True,
            int,
            "Souls awarded (after delay) when boss is defeated with no summons.",
        ),
        FieldDisplayInfo(
            "bonusSoul_multi",
            "MultiplayerSoulReward",
            True,
            int,
            "Souls awarded to each player (after delay) when boss is defeated with summons.",
        ),
        FieldDisplayInfo(
            "humanityPointCountFlagIdTop",
            "FirstHumanityFlag",
            True,
            Flag,
Esempio n. 18
0
from soulstruct.base.params.utils import FieldDisplayInfo, pad_field
from soulstruct.darksouls1r.game_types import *
from ..enums import *

EQUIP_PARAM_WEAPON_ST = {
    "paramdef_name":
    "EQUIP_PARAM_WEAPON_ST",
    "file_name":
    "EquipParamWeapon",
    "nickname":
    "Weapons",
    "fields": [
        FieldDisplayInfo(
            "behaviorVariationId",
            "BehaviorVariationID",
            True,
            int,
            "Multiplied by 1000 and added to player behavior lookups (hitboxes, bullets) triggered by TAE.",
        ),
        FieldDisplayInfo("sortId", "SortIndex", True, int,
                         "Index for automatic inventory sorting."),
        FieldDisplayInfo("wanderingEquipId", "GhostWeaponReplacement", True,
                         WeaponParam, "Weapon replacement for ghosts."),
        FieldDisplayInfo("weight", "Weight", True, float, "Weight of weapon."),
        FieldDisplayInfo(
            "weaponWeightRate",
            "WeightRatio",
            True,
            float,
            "Unknown effect. Value is about evenly split between 0 and 1 across weapons, with no obvious pattern.",
        ),