diff --git a/doc/changelogs/nyan_api/v0.5.0.md b/doc/changelogs/nyan_api/v0.5.0.md new file mode 100644 index 0000000000..127a2b4d37 --- /dev/null +++ b/doc/changelogs/nyan_api/v0.5.0.md @@ -0,0 +1,27 @@ +# [0.5.0] - 2024-07-29 +All notable changes for version [v0.5.0] are documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## Renamed +### Ability module +- Rename `Hitbox` to `Collision` + +## Added +### Ability module +- Add `Pathable(Ability)` object; defines pathing costs for the game entity when the ability is active +- Add `path_type : PathType` member to `Move` + +### Utility module +- Add `PathType(Object)` object; associates move abilities with pathfinding grids +- Add `path_costs : dict(children(PathType), int)` member to `Terrain`; defines pathing costs for the terrain + +### Removed +### Ability module +- Remove `Passable(Ability)` object; functionality superceded by `Pathable` + + +## Reference visualization + +* [Gamedata](https://github.com/SFTtech/openage/blob/f1967c3c002d444510e50f54c9cdbb83419a9ec4/doc/nyan/aoe2_nyan_tree.svg) diff --git a/doc/nyan/aoe2_nyan_tree.svg b/doc/nyan/aoe2_nyan_tree.svg index 8a50988dbe..27360da9cf 100644 --- a/doc/nyan/aoe2_nyan_tree.svg +++ b/doc/nyan/aoe2_nyan_tree.svg @@ -9,13 +9,13 @@ >PathTypeNextCommandMoveNextCommandIdleCommandInQueueConditionnext : NodeCommandInQueueWaitAbilityconstruction_progress : set(Progress)TransformCarryRestockHarvestConstructare game entitiesProjectileBarracksSwordsmanRelicTreeTruePatchPropertyResetProgressPropertymultiplier : floatModifierPropertyNOTSUBSETMAXsize : intAnyAnyAnyTechTypethreshold : floatNyanPatchMeanDistributionTypeblacklisted_entities : set(GameEntity)NormalGatestances : set (DiplomaticStance)PassableModeallowed_types : set(GameEntityType)blacklisted_entities : set(GameEntity)Hitboxradius_x : floatradius_y : floatradius_z : floatProjectileHitTerrainstances : set(DiplomaticStance)SUBSETMINsize : intexclude : set(ResearchableTech)Creatablesexclude : set(CreatableGameEntity)ProductionModeProductionQueuesize : intproduction_modes : set(ProductionMode)container : EntityContainerNoStackLinearshift_x : intshift_y : intscale_factor : floatHyperbolicshift_x : intshift_y : intscale_factor : floatCalculationTypeStackedstack_limit : intcalculation_type : CalculationTypedistribution_type : DistributionTypeTerrainTypeMostHerdingLongestTimeInRangeClosestHerdingHerdableModeShadowTimeRelativeProgressIncreaseTimeRelativeProgressDecreaseTimeRelativeProgressIncreaseTimeRelativeProgressDecreaseAttributeChangePaymentModeResearchAttributeCostattributes : set(Attribute)researchables : set(ResearchableTech)CreationAttributeCostattributes : set(Attribute)creatables : set(CreatableGameEntity)payment_mode : PaymentModeUnconditionalUnconditionalTimeRelativeProgressChangeTimeRelativeAttributeChangePricePoolDynamicchange_value : floatmin_price : floatmax_price : floatPriceModeDepositResourcesOnProgressprogress_type : ProgressTyperesources : set(Resource)affected_types : set(GameEntityType)blacklisted_entities : set(GameEntity)Attributename : TranslatedStringabbreviation : TranslatedStringOverlayTerrainterrain_overlay : TerrainTerrainRequirementallowed_types : set(TerrainType)blacklisted_terrains : set(Terrain)state_change : StateChangerAoE1TradeRouteexchange_resources : set(Resource)trade_amount : intProgressTypeTimeRelativeProgressChangetype : ProgressTypeFlatAttributeIncreaseFlatAttributeDecreaseTimeRelativeAttributeChangetype : AttributeChangeTypeTimeRelativeProgressChangetype : ProgressTypetotal_change_time : floatTimeRelativeAttributeIncreaseTimeRelativeAttributeDecreaseTimeRelativeAttributeChangetype : AttributeChangeTypetotal_change_time : floatignore_protection : set(ProtectingAttribute)progress : floatRefundOnConditioncondition : set(LogicElement)refund_amount : set(ResourceAmount)sounds : set(Sound)InverseLinearAdjacentTilesVariantnorth : optional(GameEntity)north_east : optional(GameEntity)east : optional(GameEntity)south_east : optional(GameEntity)south : optional(GameEntity)south_west : optional(GameEntity)west : optional(GameEntity)north_west : optional(GameEntity)Placetile_snap_distance : floatclearance_size_x : floatclearance_size_y : floatallow_rotation : boolmax_elevation_difference : intPlacementModeSendToContainerTypeLureTypeDiplomaticLineOfSightdiplomatic_stance : DiplomaticStanceNormalInContainerDiscreteEffectcontainers : set(EntityContainer)ability : ApplyDiscreteEffectInContainerContinuousEffectcontainers : set(EntityContainer)ability : ApplyContinuousEffectStateChangerenable_abilities : set(Ability)disable_abilities : set(Ability)enable_modifiers : set(Modifier)disable_modifiers : set(Modifier)transform_pool : optional(TransformPool) = Nonepriority : intopenage nyan data API v0.4.1openage nyan data API v0.5.0blacklisted_entities : set(GameEntity)Standardresource_spot : ResourceSpotAoE2ProjectileAmountprovider_abilities : set(ApplyDiscreteEffect)receiver_abilities : set(ApplyDiscreteEffect)change_types : set(AttributeChangeType)Orange elements:Effects/Resistances that canbe applied on other gameentitiesRevealline_of_sight : floataffected_types : set(GameEntityType)blacklisted_entities : set(GameEntity)ResearchTimeresearchables : set(ResearchableTech)StorageElementCapacitystorage_element : StorageElementDefinitionEntityContainerCapacitycontainer : EntityContainerHerdrange : floatstrength : intallowed_types : set(GameEntityType)blacklisted_entities : set(GameEntity)condition : set(LogicElement)ResearchResourceCostresources : set(Resource)researchables : set(ResearchableTech)CreationResourceCostresources : set(Resource)creatables : set(CreatableGameEntity)CreationTimecreatables : set(CreatableGameEntity)resource_spot : ResourceSpotAbsoluteProjectileAmountamount : floatStrayMoveModeModifierScopeExpectedPositionCurrentPositionTargetModeSendToContainertype : SendToContainerTypesearch_range : floatignore_containers : set(EntityContainer)SendToContainertype : SendToContainerTypestorages : set(EntityContainer)Scopedstances : set(DiplomaticStance)scope : ModifierScopesubformations : set(Subformation)FlatAttributeIncreaseFlatAttributeDecreaseFlatAttributeIncreaseFlatAttributeDecreaseFlatAttributeIncreaseFlatAttributeDecreaseFlatAttributeIncreaseFlatAttributeDecreaseAoE2TradeRouteend_trade_post : GameEntityTechtypes : set(TechType)name : TranslatedStringdescription : TranslatedMarkupFilelong_description : TranslatedMarkupFileupdates : orderedset(Patch)FallbackLinearNoDropoffDropoffTypecost : CostEntityContainerallowed_types : set(GameEntityType)blacklisted_entities : set(GameEntity)storage_element_defs : set(StorageElementDefinition)slots : intcarry_progress : set(Progress)string : textLuretype : LureTypestances : set(DiplomaticStance)DiplomaticStanceExitContainerallowed_containers : set(EntityContainer)EnterContainerallowed_containers : set(EntityContainer)allowed_types : set(GameEntityType)blacklisted_entities : set(GameEntity)max_range : intHuntConvertTypemax_range : intMakeHarvestableresource_spot : ResourceSpotresist_condition : set(LogicElement)MakeHarvestableresource_spot : ResourceSpotGatherauto_resume : boolresume_search_range : floattargets : set(ResourceSpot)gather_rate : ResourceRatecontainer : ResourceContainerMonkHealApplyContinuousEffecteffects : set(ContinuousEffect)application_delay : floatallowed_types : set(GameEntityType)blacklisted_entities : set(GameEntity)ApplyDiscreteEffectbatches : set(EffectBatch)reload_time : floatapplication_delay : floatallowed_types : set(GameEntityType)blacklisted_entities : set(GameEntity)FlatAttributeChangetype : AttributeChangeTypeblock_rate : AttributeRateContinuousResistancerate : floatDiscreteResistanceDiscreteEffectFlatAttributeChangetype : AttributeChangeTypemin_change_rate : optional(AttributeRate) = Nonemax_change_rate : optional(AttributeRate) = Nonechange_rate : AttributeRateignore_protection : set(ProtectingAttribute)ContinuousEffectAoE2Convertguaranteed_resist_rounds : intprotected_rounds : intprotection_round_recharge_time : floatAoE2Convertskip_guaranteed_rounds : intskip_protected_rounds : intConverttype : ConvertTypechance_resist : floatConverttype : ConvertTypemin_chance_success : optional(float) = Nonemax_chance_success : optional(float) = Nonechance_success : floatcost_fail : optional(Cost) = NoneAttributeChangeTypeFlatAttributeChangetype : AttributeChangeTypeblock_value : AttributeAmountFlatAttributeChangetype : AttributeChangeTypemin_change_value : optional(AttributeAmount) = Nonemax_change_value : optional(AttributeAmount) = Nonechange_value : AttributeAmountignore_protection : set(ProtectingAttribute)Effectors' sideResistors' sideproperties : dict(EffectProperty, EffectProperty) = {}Resistanceproperties : dict(ResistanceProperty, ResistanceProperty) = {}amount : intAccuracyaccuracy : floataccuracy_dispersion : floatdispersion_dropoff : DropOffTypetarget_types : set(GameEntityType)blacklisted_entities : set(GameEntity)protects : AttributeAttributeSettingattribute : Attributemin_value : intmax_value : intstarting_value : intsprite : fileCreatableGameEntitygame_entity : GameEntityvariants : set(Variant)cost : Costcreation_time : floatcreation_sounds : set(Sound)condition : set(LogicElement)placement_modes : set(PlacementMode)scope : LiteralScopeProjectilearc : intaccuracy : set(Accuracy)target_mode : TargetModeignored_types : set(GameEntityType)unignore_entities : set(GameEntity)change_progress : set(Progress)HitboxCollisionhitbox : HitboxNamedname : TranslatedStringdescription : TranslatedMarkupFilelong_description : TranslatedMarkupFileblacklisted_entities : set(GameEntity)Herdableadjacent_discover_range : floatmode : HerdableModeStopPassablePathablehitbox : Hitboxmode : PassableModepath_costs : dict(PathType, int)angle : intRestockauto_restock : booltarget : ResourceSpotrestock_time : floatmanual_cost : Costauto_cost : Costamount : intPassiveStandGroundAggressiveTradePosttrade_routes : set(TradeRoute)PatrolGameEntityStancesearch_range : floatability_preference : orderedset(Ability)type_preference : orderedset(GameEntityType)stances: set(GameEntityStance)SendBackToTaskallowed_types : set(GameEntityType)blacklisted_entities : set(GameEntity)TransferStoragestorage_element : GameEntitysource_container : EntityContainertarget_container : EntityContainerGameEntityProgressgame_entity : GameEntitystatus : ProgressStatuspriority : intActiveTransformTotarget_state : StateChangertransform_time : floattransform_progress : set(Progress)Selectableselection_box : SelectionBoxRallyPointWhite elements:AoE2 specific objectsYellow elements:Modifiers (handled by engineimplementation)Green elements:Abilities (handled by engineimplementation)Pink elements:Basic nyan API objectsmin_elevation_difference : optional(float) = NoneFlyoverrelative_angle : floatflyover_types : set(GameEntityType)blacklisted_entities : set(GameEntity)sprite : fileVillager Gather abilities canoverride the graphics ofIdle,Move,Die and Despawnvia CarryProgress objects withAnimationOverridesAbilities andStorageElementscan use theseOverride typesto change anyother ability'sanimation.If min_projectiles is greater thanthe number of Projectiles inprojectiles, the last projectilein the orderedset should be usedIn AoE2 there is onlyone HarvestProgress Statein the interval [0,100],but AoM had more.Stores what happens aftera percentage ofconstruction, damage,transformation, etc. isreachedProgressproperties : dict(ProgressProperty, ProgressProperty) = {}type : ProgressTypeleft_boundary : floatright_boundary : floatetc.)RemoveStoragecontainer : EntityContainerstorage_elements : set(GameEntity)CollectStoragecontainer : EntityContainerstorage_elements : set(GameEntity)StorageElementDefinitionstorage_element : GameEntityelements_per_slot : intconflicts : set(StorageElementDefinition)state_change : optional(StateChanger) = NoneStoragecontainer : EntityContainerempty_condition : set(LogicElement)chance_share : floatResearchresearchables : set(ResearchableTech)container : ResourceContainerCreatecreatables : set(CreatableGameEntity)RelicBonusattribute : AttributeFeitoriaBonusFoodAmountWoodAmountStoneAmountGoldAmountrates : set(ResourceRate)Modifier should only be usedin cases where Patches don'twork. For example, if thebonus is a percentage valueor continuously stacks (likeresources from the Feitoria).Modifier objects can still bepatched.IdlePlayerSetupname : TranslatedStringdescription : TranslatedMarkupFilelong_description : TranslatedMarkupFileleader_names : set(TranslatedString)modifiers : set(Modifier)starting_resources : set(ResourceAmount)game_setup : orderedset(Patch)Despawnactivation_condition : set(LogicElement)despawn_condition : set(LogicElement)despawn_time : floatstate_change : optional(StateChanger) = NoneTauntactivation_message : textdisplay_message : TranslatedStringsound : Soundattributes : set(AttributeSetting)Harvestableresources : ResourceSpotharvest_progress : set(Progress)restock_progress : set(Progress)gatherer_limit : intharvestable_by_default : boolPassiveTransformTocondition : set(LogicElement)transform_time : floattarget_state : StateChangertransform_progress : set(Progress)resistances : set(Resistance)ShootProjectileprojectiles : orderedset(GameEntity)min_projectiles : intmax_projectiles : intmin_range : intmax_range : intreload_time : floatspawn_delay : floatprojectile_delay : floatrequire_turning : boolmanual_aiming_allowed : boolspawning_area_offset_x : floatspawning_area_offset_y : floatspawning_area_offset_z : floatspawning_area_width : floatspawning_area_height : floatspawning_area_randomness : floatallowed_types : set(GameEntityType)blacklisted_entities : set(GameEntity)rate : AttributeRateFormationformations : set(GameEntityFormation)Movespeed : floatmodes : set(MoveMode)path_type : PathTypeanimations : set(Animation)Abilityproperties : dict(AbilityProperty, AbilityProperty) = {}patches : orderedset(Patch)Patchproperties : dict(PatchProperty, PatchProperty) = {}patch : NyanPatchModifierproperties : dict(ModifierProperty, ModifierProperty) = {}sounds : orderedset(file)TerrainAmbientmax_density : intTerrainname : TranslatedStringtypes : set(TerrainType)terrain_graphic : Terrainsound : Soundambience : set(TerrainAmbient)path_costs : dict(PathType, int)ResearchableTechtech : Techcost : Costresearch_time : floatresearch_sounds : set(Sound)condition : set(LogicElement)TranslatedSoundtranslations : set(LanguageSoundPair)TranslatedMarkupFiletranslations : set(LanguageMarkupPair)TranslatedObjectTranslatedStringtranslations : set(LanguageTextPair)max_storage : intResourceSpotresource : Resourcemax_amount : intstarting_amount : intdecay_rate : floatDropSiteaccepts_from : set(ResourceContainer)GameEntitytypes : set(GameEntityType)abilities : set(Ability)modifiers : set(Modifier)variants : set(Variant)Object UMLClass 1330 - 3730 + 3710 320 - 130 + 150 *Terrain* bg=pink @@ -242,13 +242,14 @@ name : TranslatedString types : set(TerrainType) terrain_graphic : Terrain sound : Sound -ambience : set(TerrainAmbient) +ambience : set(TerrainAmbient) +path_costs : dict(PathType, int) UMLClass - 1510 + 1530 3900 190 80 @@ -387,14 +388,15 @@ sounds : set(Sound) 4310 3840 180 - 80 + 100 *Move* bg=green -- speed : float -modes : set(MoveMode) +modes : set(MoveMode) +path_type : PathType @@ -557,7 +559,7 @@ changes : orderedset(Patch) Relation - 1540 + 1580 3850 30 70 @@ -582,10 +584,10 @@ changes : orderedset(Patch) 1470 3620 30 - 130 + 110 lt=- - 10.0;10.0;10.0;110.0 + 10.0;10.0;10.0;90.0 UMLClass @@ -1934,16 +1936,16 @@ foundation_terrain : Terrain UMLClass 5100 - 4310 + 4320 220 - 90 + 80 - *Passable* + *Pathable* bg=green -- hitbox : Hitbox -mode : PassableMode +path_costs : dict(PathType, int) @@ -2016,11 +2018,11 @@ long_description : TranslatedMarkupFile UMLClass 5100 - 4410 - 140 + 4420 + 220 80 - *Hitbox* + *Collision* bg=green -- @@ -3829,10 +3831,10 @@ bg=pink UMLClass - 1100 - 3980 + 1040 + 4100 270 - 120 + 130 *Tech* bg=pink @@ -3851,10 +3853,10 @@ updates : orderedset(Patch) 1230 3650 30 - 350 + 470 lt=<<- - 10.0;10.0;10.0;330.0 + 10.0;10.0;10.0;450.0 UMLClass @@ -4524,7 +4526,7 @@ ignore_containers : set(EntityContainer) Relation 5060 - 4440 + 4450 60 30 @@ -4612,7 +4614,7 @@ ignore_containers : set(EntityContainer) Relation 5060 - 4340 + 4350 60 30 @@ -5502,7 +5504,7 @@ blacklisted_entities : set(GameEntity) 230 30 - openage nyan data API v0.4.1 + openage nyan data API v0.5.0 @@ -7118,7 +7120,7 @@ bg=pink UMLClass - 1350 + 1400 3900 120 60 @@ -7131,7 +7133,7 @@ bg=pink Relation - 1400 + 1450 3850 30 70 @@ -7809,8 +7811,8 @@ bg=pink UMLClass - 5280 - 4410 + 5380 + 4420 140 100 @@ -7823,105 +7825,17 @@ radius_y : float radius_z : float - - Relation - - 5230 - 4440 - 70 - 30 - - lt=<. - 50.0;10.0;10.0;10.0 - - - UMLClass - - 5380 - 4310 - 320 - 90 - - *PassableMode* -bg=pink - --- -allowed_types : set(GameEntityType) -blacklisted_entities : set(GameEntity) - - Relation 5310 - 4340 + 4450 90 30 lt=<. 70.0;10.0;10.0;10.0 - - UMLClass - - 5600 - 4490 - 220 - 80 - - *Gate* -bg=pink - --- -stances : set (DiplomaticStance) - - - - UMLClass - - 5600 - 4420 - 110 - 60 - - -*Normal* -bg=pink - - - - Relation - - 5560 - 4390 - 30 - 150 - - lt=<<- - 10.0;10.0;10.0;130.0 - - - Relation - - 5560 - 4440 - 60 - 30 - - lt=- - 10.0;10.0;40.0;10.0 - - - Relation - - 5560 - 4510 - 60 - 30 - - lt=- - 10.0;10.0;40.0;10.0 - UMLClass @@ -8116,17 +8030,6 @@ stack_limit : int lt=<<- 10.0;10.0;10.0;270.0 - - Relation - - 1230 - 3920 - 140 - 30 - - lt=- - 10.0;10.0;120.0;10.0 - Relation @@ -8293,7 +8196,7 @@ game_entities : set(GameEntity) UMLClass 1070 - 3870 + 4000 120 60 @@ -8306,7 +8209,7 @@ bg=pink Relation 1180 - 3890 + 4020 80 30 @@ -8317,18 +8220,18 @@ bg=pink Relation 1120 - 3920 + 4050 30 - 80 + 70 lt=<. - 10.0;10.0;10.0;60.0 + 10.0;10.0;10.0;50.0 UMLClass 1090 - 3780 + 3910 100 60 @@ -8337,22 +8240,11 @@ bg=pink bg=pink - - Relation - - 1180 - 3800 - 80 - 30 - - lt=- - 10.0;10.0;60.0;10.0 - Relation 1130 - 3830 + 3960 30 60 @@ -8362,7 +8254,7 @@ bg=pink UMLClass - 1400 + 1410 3990 100 60 @@ -8375,7 +8267,7 @@ bg=pink Relation - 1430 + 1450 3950 30 60 @@ -10633,4 +10525,28 @@ bg=pink lt=- 10.0;10.0;30.0;10.0 + + UMLClass + + 4340 + 3980 + 120 + 60 + + +*PathType* +bg=pink + + + + Relation + + 4390 + 3930 + 30 + 70 + + lt=<. + 10.0;50.0;10.0;10.0 + diff --git a/doc/nyan/api_reference/reference_ability.md b/doc/nyan/api_reference/reference_ability.md index 098492089e..dfddc1c82f 100644 --- a/doc/nyan/api_reference/reference_ability.md +++ b/doc/nyan/api_reference/reference_ability.md @@ -259,6 +259,18 @@ Container the target game entity will be inserted into. A `Storage` ability with **storage_elements** Game entities that can be inserted into the container. The container must allow the `GameEntity` objects. +## ability.type.Collision + +```python +Collision(Ability): + hitbox : Hitbox +``` + +Adds collision behaviour to a game entity. + +**hitbox** +Defines the size (x, y, z) of the collision hitbox. + ## ability.type.Constructable ```python @@ -567,18 +579,6 @@ When other herdables are in this range around the herded game entity, they will **mode** Determines who gets ownership of the herdable game entity when multiple game entities using `Herd` are in range. -## ability.type.Hitbox - -```python -Hitbox(Ability): - hitbox : Hitbox -``` - -Adds a hitbox to a game entity that is used for collision with other game entities. - -**hitbox** -Defines the size (x, y, z) of the hitbox. - ## ability.type.Idle ```python @@ -628,8 +628,9 @@ Lock pools definitions. ```python Move(Ability): - speed : float - modes : set(MoveMode) + speed : float + modes : set(MoveMode) + path_type : children(PathType) ``` Allows a game entity to move around the map. @@ -638,7 +639,10 @@ Allows a game entity to move around the map. Speed of movement. **modes** -Type of movements that can be used. +Modes of movements that can be used. + +**path_type** +Path type determining which pathfinding grid is searched to find a path from the start to the goal location. ## ability.type.Named @@ -672,22 +676,6 @@ Temporarily replace the map terrain the game entity is positioned on with a spec **terrain_overlay** Terrain that is temporily replaces the existing map terrain. -## ability.type.Passable - -```python -Passable(Ability): - hitbox : Hitbox - mode : PassableMode -``` - -Deactivates a specified hitbox of the game entity for movement of other game entities. The hitbox is still relevant for the game entity's own movement. - -**hitbox** -Reference to the hitbox that should be deactivated. - -**mode** -Defines the game entities for which the hitbox is deactivated. - ## ability.type.PassiveTransformTo ```python @@ -712,6 +700,28 @@ State change activated after `transform_time` has passed. **transform_progress** Can alter the game entity while the transformation is in progress. The objects in the set must have progress type `Transform`. +## ability.type.Pathable + +```python +Pathable(Ability): + hitbox : Hitbox + path_costs : dict(children(PathType), int) +``` + +Lets a game entity influence the pathing costs on the (static) pathfinding grid. + +This ability should only be used for game entitie that never (or rarely) change positions as pathfinding grid recalculations are expensive. For dynamic pathfinding effects, using the `Collision` ability should be preferred. + +**hitbox** +Hitbox around the game entity that affects the underlying pathfinding grids. All grid cells that are covered by this hitbox ae influenced by the cost definitions in the `path_costs` attribute. + +**path_costs** +Costs of traversing the area defined by the `hitbox` attribute on the pathfinding grid. + +Keys are `PathType` objects that are associated with a pathfinding grid in the pathfinder. + +Values represent the pathing cost for the terrain on the pathfinding grid. Each value must be an integer between `1` and `255`. `1` defines the *minimum* possible cost and `254` represents the *maximum* possible cost. `255` signifies that the terrain is impassable for the specified path type. + ## ability.type.ProductionQueue ```python diff --git a/doc/nyan/api_reference/reference_util.md b/doc/nyan/api_reference/reference_util.md index 66fced3ff6..dd9646e862 100644 --- a/doc/nyan/api_reference/reference_util.md +++ b/doc/nyan/api_reference/reference_util.md @@ -1491,43 +1491,6 @@ Patrol(MoveMode): Lets player set two or more waypoints that the game entity will follow. Stances from `GameEntityStance` ability are considered during movement. -## util.passable_mode.PassableMode - -```python -PassableMode(Object): - allowed_types : set(children(GameEntityType)) - blacklisted_entities : set(GameEntity) -``` - -Generalization object for all passable modes. Define passability options for the `Passable` ability. - -**allowed_types** -Lists the game entities types which can pass the hitbox. - -**blacklisted_entities** -Used to blacklist game entities that have one of the types listed in `allowed_types`, but should not be covered by this `PassableMode` object. - -## util.passable_mode.type.Gate - -```python -Gate(PassableMode): - stances : set(children(DiplomaticStance)) -``` - -Lets all compatible game entities from players with the specified stances pass through the hitbox. Game entities of players with other stances can also pass through while any unit is passing through. - -**stances** -Stances of players whose game entities are always allowed to pass though the hitbox. - -## util.passable_mode.type.Normal - -```python -Normal(PassableMode): - pass -``` - -Lets all compatible game entities pass through the hitbox. - ## util.patch.NyanPatch ```python @@ -1578,6 +1541,15 @@ The patch is applied to all players that have the specified diplomatic stances. **stances** Diplomatic stances of the players the patch should apply to. +## util.path_type.PathType + +```python +PathType(Object): + pass +``` + +Path type that is associated with an internal pathfinding grid at runtime. + ## util.payment_mode.PaymentMode ```python @@ -2413,6 +2385,7 @@ Terrain(Object): terrain_graphic : Terrain sound : Sound ambience : set(TerrainAmbient) + path_costs : dict(children(PathType), int) ``` Terrains define the properties of the ground which the game entities are placed on. @@ -2432,6 +2405,15 @@ Ambient sound played when the camera of the player is looking onto the terrain. **ambience** Ambient objects placed on the terrain. +**path_costs** +Base costs of traversing the pathfinding grid on map areas where the terrain is placed. + +Keys are `PathType` objects that are associated with a pathfinding grid in the pathfinder. + +Values represent the pathing cost for the terrain on the pathfinding grid. Each value must be an integer between `1` and `255`. `1` defines the *minimum* possible cost and `254` represents the *maximum* possible cost. `255` signifies that the terrain is impassable for the specified path type. + +For `PathType` objects that exist in the modpack but are not keys in this dict, a default cost value of `1` is assumed. + ## util.terrain.TerrainAmbient ```python