Difference between pages "AI War:AI Story" and "Starward Rogue:XML - Enum Reference"

From Arcen Wiki
(Difference between pages)
Jump to navigation Jump to search
m (clean up, replaced: AI_War:Fleet_Command → AI War:AI War (3))
 
 
Line 1: Line 1:
<big>'''How Does The AI Think?'''</big>
 
  
'''Q:''' From a story sense, if the AI were smart, wouldn't it just kill me immediately with all those shipsI get why the current system makes for good gameplay, but if I were playing the AI side I would win in under 5 minutes.
+
==GameEntityCategory==
 +
Oi!  What is this thingDepending on what you say, it will be parsed differently.
  
'''A:''' This is a complex question, so let's break this down into parts:
+
*Ship
 +
**Player hulls or enemy ships.
 +
*Shot
 +
**An actual bullet (you won’t use this much, if at all).
 +
*ItemPickup
 +
**What it says on the tin.
 +
*Obstacle
 +
**Funky stuff you won’t use much, if at all.
 +
*NonSim
 +
**Is not added into ANY of the normal lists and thus does not impact the normal sim logic for entities, and is not serialized. Just for use in non-sim bullet patterns that are purely for visual effect.
  
'''Humans Have Already Lost And Are Now Considered Insignificant:'''
+
==ShipCategory==
The AI does behave realistically, if you assume that it is occupied doing something else largely. It is doing whatever non-war projects it fancies -- it's already won the war, for crying out loud -- and it doesn't really care about the remaining meatheads except insofar as it swats the ones that come up.
+
What sort of ship is this, and how should it thus seed in rooms? This is a required field for any ship.
  
When ants invade your house, you kill them when you see them, you put out traps or poison to kill them as they come through, but you don't really spend much interest on them. They're ants!  When small dogs and wolverines and bears start coming into your house, you react very differently.  The AI Progress reflects the AI's estimation of your threat level moreso than anything else.  If you get to the point where it sees you as a bear in its house, you had better be prepared to kill it very quickly or it will kill you.
+
Note that ones that end in 1x1 should have a pessimistic bounding box that fits in a 64px square, ones that end in 3x3 should fit in a 192px square, 5x5 in 320px, 7x7 in 448px, and 9x9 in 576 (this is what bosses are allowed to use up to).
  
'''The AI Is Busy Doing Something Else:''' In this specific scenario, the AI is also quite occupied with other pursuitsAgain, the ant example is apt: you probably have a job, or go to school, or have something else occupying your daily attention even if you're retiredYou have a family, friends, and other social interests and obligationsYou're trying to make a mark on the world, and provide for yourself and yours, same as the rest of us. The AI is similarly engaged outside the galaxy, although what exactly the AI is up to out there won't be revealed until a future expansionOne side effect of the AI's activities outside the galaxy is a lot of new weapons and technology, though: all of the core/ mark V ships result from their extracurricular pursuits, as do most of the AI superweapons such as attrition emitters, exo-galaxy wormholes, ion cannons, and so on.
+
*Player
 +
**This is for player hulls that the player can choose from.  It’s not an enemy ship.
 +
*PlayerFamiliar
 +
**Used for familiars and other little followers that are your allies.
 +
*EnemyFamiliar
 +
**Used for familiars and other little followers that are attached to an enemy instead of you.
 +
*Boss
 +
**Goes in the end-of-floor boss rooms.
 +
** Default ability point drop: 100
 +
*BossLaterStage
 +
**These aren’t independent enemies, per se.  Rather, if there is a multi-stage boss or miniboss, the later stages should be flagged as this.
 +
** Default ability point drop: 100
 +
*RegularEnemyLaterStage
 +
**These aren’t independent enemies, per se.  Rather, if there is a multi-stage enemy, the later stages should be flagged as this -- NOT as BossLaterStage, or it will trigger certain boss logic you don't want here.
 +
** Default ability point drop: 7
 +
*BossBuddy
 +
**Sometimes bosses have multiple parts to themselves.  This defines one of the other parts.
 +
** Default ability point drop: 100
 +
*FinalBoss
 +
**This is the "last boss," although not really.  It's the last boss for the early runs (floor 5), and then a major speedbump in later runs.
 +
**It's perfectly fine to have more than one of these; the game will choose between them at random.
 +
** Default ability point drop: 300
 +
*SuperFinalBoss
 +
**This is the TRUE last boss.  It's only on floor 7, and you only encounter it after having beaten the fake-ish "last boss" a certain number of times.
 +
**It's perfectly fine to have more than one of these; the game will choose between them at random.
 +
** Default ability point drop: 500
 +
*Miniboss
 +
**Goes in miniboss rooms.
 +
** Default ability point drop: 50
 +
*CondemnedRoomBoss
 +
**The centerpiece of condemned rooms.
 +
** Default ability point drop: 50
 +
*Pursuer_1x1
 +
**Little fast guys that chase you around and generally harass you in some fashion if you don’t move fast.
 +
** Default ability point drop: 2
 +
*LocalGuard_1x1
 +
**Little immobile (or nearly so) guys that hang out in an area and make it hard to go into that area somehow.
 +
** Default ability point drop: 2
 +
*Jumpscare_1x1
 +
**Little guys that don’t move at all or much until you get near them, and then bad things happen.  So they may make part of the room effectively inaccessible until the player has dealt with other hazards in the room.
 +
** Default ability point drop: 4
 +
*Sniper_3x3
 +
**These guys likely don’t move much or at least not fast, but they lay down long range dangerous attacksMust be super careful with these, as we want to make sure even players on small monitors get a chance to see these guys before these guys are able to shoot at them.  Assume they cannot shoot over any obstacles.
 +
** Default ability point drop: 2
 +
*LocalAOE_3x3
 +
**Rather like the LocalGuard, but more explosive in some fashion.  May be able to use this fact against other enemies in the room, may not be.  Assume they can shoot over everything except indestructible walls.
 +
** Default ability point drop: 3
 +
*Wander_3x3
 +
**This is sort of the “bread and butter” enemy that is most common.  These guys “wander around and do stuff.”  They don’t chase you, but they probably track you with weapons and such if you go near them (or they wander near you).
 +
*Attacker_3x3
 +
**These guys actively hunt you through the room, although not in a true pathfinding sense.  So you need to get in the general vicinity of them for them to come after you, but when you do they are then going to converge and stay on you.
 +
** Default ability point drop: 3
 +
*ChaosAdder_3x3
 +
**These guys do… who knows what.  Whatever it is, it makes a big mess of everything else around them.  Probably lots and lots of bullets, or something else that makes everything else 10x harderUse sparingly per room. ;)
 +
** Default ability point drop: 4
 +
*Challenge_5x5
 +
**These guys are crazier than the average bear, and need to be only used in challenge roomsThese are basically enemies that are harder than expected.
 +
** Default ability point drop: 25
 +
*Wander_5x5
 +
**Same as the smaller wanderer, except needs more room to move about and is also larger, better armored, probably more damaging, etc.
 +
** Default ability point drop: 3
 +
*Attacker_5x5
 +
**Same as the smaller attacker, except needs more room to move about and is also larger, better armored, probably more damaging, etc.
 +
** Default ability point drop: 5
 +
*ChaosAdder_5x5
 +
**Same as the smaller chaos adder, except needs more room to move and is also larger, better armored, probably even more chaos results, etc.
 +
** Default ability point drop: 7
 +
*Fearsome_7x7
 +
**Whatever this is, it is very very badThese are the biggest boys outside of bosses and minibosses.
 +
** Default ability point drop: 15
 +
*EnemySpawer_Spawnee
 +
**These are small and numerous, and generally should die in one hit.  They come pouring out of enemy spawners at a rate of 1 every 2 seconds.
 +
** Default ability point drop: 0
 +
*CondemnedRoom_1x1
 +
** ONLY should be used in condemned rooms.  Make sure they have a health drain set on them.
 +
** Little fast guys that chase you around and can get through all the nooks and crannies to chase you.
 +
** Default ability point drop: 0
 +
*CondemnedRoom_5x5
 +
** ONLY should be used in condemned rooms.  Make sure they have a health drain set on them.
 +
** Larger scary guys that may or may not be able to get through the nooks and crannies, but instead make certain parts of the room that you REALLY don't want to go in.
 +
** Default ability point drop: 0
 +
*RobotShopkeeper
 +
** ONLY should be used in robot shops.  Very specialized and really shouldn't be used beyond what the basics were set up for.
 +
*CheapItemShopkeeper
 +
** ONLY should be used in cheap item shops.  Very specialized and really shouldn't be used beyond what the basics were set up for.
 +
*WeaponsShopkeeper
 +
** ONLY should be used in weapon shops.  Very specialized and really shouldn't be used beyond what the basics were set up for.
 +
*RandomFloatingChunksOfStuff
 +
** Used by Antigravitate Blockage/Shards in order to not proc on death effects.
  
'''The AI Is Not A Centralized Intelligence:''' The AI is not omniscient about everything that is going on with all of its ships.  Generally it knows that humans are nearby when humans border one of its planets -- hence the AI going on alert at those planets -- but other planets out in the galaxy may have no idea there is a fight going on at all.  The AI Progress measures the AI's global awareness of you, as well as its global estimation of you, and that creeps upwards over time as you damage it to an increasing degree (or "scare it" with massive weapons of your own, such as warheads or golems).
+
==ItemPool==
  
Think of the AI as a distributed cloud network; it's the only way to efficiently have a database of that size. Take Google as an example, for instance: they have hundreds of thousands of servers (or more), each with various data and processing capacityIn order to run a search, the input of a large number of those servers are needed. There is redundancy built in for any data of importance, but if all of the servers are down that have a particular datum, you won't get that datum in your search resultsThe AI in AI War is fairly similar, in that all of the ships are not aware of everything in the galaxy at once. Note that this is in no way a technical limitation -- as you see in many RTS games, often the problem is the AI knowing too much, and thus seeming unrealistic. In AI War, the realistic, gameplay-enhancing way was to simulate the AI as if it were a huge cloud network or bureaucracy; any other design and it wouldn't make much sense that it doesn't crush you immediately.
+
*AfterRoomMinor
 +
**This will appear after some rooms are complete, but it’s a super duper minor sort of reward.  Basically health or energy or something.  Not even a consumable weapon.
 +
*AfterRoomConsumable
 +
**This will appear after some rooms are complete, and are always consumable weapon/item slot items of some sort.  Note that NOT all consumable items need to be in this pool: many of them may very well be too rare to be here.  These are just the ones that you should find semi-commonly.
 +
*[Consumable freestanding pools]
 +
**These are directly placed in certain rooms as an enticement to go to some part of the room.  Usually something the player has to expend some missiles to get to, or undertake some other risk.
 +
**These should be overlapping a lot with the after-room consumables, but perhaps with a few more uncommon things thrown in here from time to time, and minus the super-basic consumables perhaps.
 +
** Actual types:
 +
*** FreestandingCommonConsumable (95% chance)
 +
*** FreestandingRareConsumable (5% chance)
 +
*[major freestanding pools]
 +
**These are the major "treasure room" items.
 +
**The different categories each have a certain number of "raffle tickets" (so to speak) put into a grab bag, and then one ticket is randomly chosenAn item from within the chosen category is used.  The more tickets, the more likely the category is to show up.
 +
** Actual types:
 +
*** FreestandingCommonMain (100 tickets)
 +
*** FreestandingRareMain (5 tickets)
 +
*** FreestandingCommonSecondary (200 tickets)
 +
*** FreestandingRareSecondary (10 tickets)
 +
*** FreestandingCommonPowerUp (400 tickets)
 +
*** FreestandingRarePowerUp (20 tickets)
 +
*UnlockedChest
 +
**If a minor chest that is not locked from the start is opened, then one of these things will appear.  These might be some sort of minor item, a consumable, a weakish ammo weapon or familiar, or who knows.  Nothing too exciting, but also not so basic that the chests are not exciting.
 +
*LockedChest
 +
**We had to use a keycard to get whatever this is, so there ought to be some worth to it.
 +
*MinibossDrop
 +
**We just killed a miniboss.  What are we going to get next?? ;)
 +
*BossDrop
 +
**Dead boss at the end of the floor!  Now let’s show him his reward, Jim...
 +
*RegularEnemyDrop
 +
**Regular enemies have a low chance of dropping these things, as do certain shootable obstacles.  Nothing at all exciting here; pretty much just the minor ammo and missile and credit drops.
 +
*RobotShop
 +
**Sell me robots or things to help upgrade robots!
 +
*WeaponsShop
 +
**Sell me weapons or things to help upgrade weapons!
 +
*DefensiveShop
 +
**Sell me things to help my defense!
 +
*CheapItemShop
 +
**Sell me cheap sort of stuff!
 +
*SecretRoom
 +
**These are items found only in secret free-loot roomsGive me something worthy of my discovery!
 +
*HealthShards
 +
**These are items found only in the bombable blocks.
 +
*HealthForItemsShop
 +
**Sell me super awesome stuff that I have to sacrifice health to buy.
 +
*MeleeWeapons
 +
*BulletWeapons
 +
*NeedleWeapons
 +
*BeamWeapons
 +
*ExplosiveWeapons
 +
*FireWeapons
 +
*SpecialWeapons
 +
*UltraRareWeapons
 +
*ModuleAttachmentsStandard
 +
*ModuleAttachmentsUncommon
 +
*ModuleAttachmentsRare
 +
*ConsumableWeaponsStandard
 +
*ConsumableWeaponsUncommon
 +
*ConsumableWeaponsRare
 +
*ConsumableItemsStandard
 +
*ConsumableItemsUncommon
 +
*ConsumableItemsRare
 +
*CodeItems
 +
*StatPowerupsStandard
 +
*StatPowerupsUncommon
 +
*StatPowerupsRare
 +
*HealthUpgradeRoom
 +
** These should all be health upgrades or similar.
 +
*Incredibilities
 +
** These are the really major items that change the whole flow of the game.
 +
** You can only find these after killing shopkeepers.
 +
*EmptyShop
 +
** Junk stuff that shows up in shops where you previously killed the shopkeeper for that kind of shop.
 +
*ProbationPedestal
 +
** Probation items that give you an item with a bonus on reaching the next floor if you choose to take it.
  
[[AI War:AI War]]
+
==AbilityPointCost==
  
==What Does AI Progress Really Represent?==
+
* IncrediCheapAlreadyUnlocked = 40
 +
* LowAlreadyUnlocked = 100
 +
* AverageAlreadyUnlocked = 200
 +
* HighAlreadyUnlocked = 500
 +
* VeryHighAlreadyUnlocked = 900
 +
* SuperHighAlreadyUnlocked = 2000
 +
* UltraHighAlreadyUnlocked = 5000
  
'''Q:''' Why the generic term "AI Progress" instead of something like "AI Alert," "AI Alarm," or even "AI Disgruntlement" (kidding)?
+
* IncrediCheapLocked = 80
 +
* LowLocked = 200
 +
* AverageLocked = 400
 +
* HighLocked = 1000
 +
* VeryHighLocked = 1800
 +
* SuperHighLocked = 4000
 +
* UltraHighLocked = 10000
  
'''A:''' AI Progress is the most general encompassing term, given its many interrelated meanings.  Some people have referred to it as the AI "rageometer," which is amusing but misleading.  The AI Progress is really a measure of the following combined factors:
+
==EntitySystemCategory==
 +
*Weapon
 +
**The default
 +
**This will work on a player entity, but it will target and fire automatically, paying no attention to player input
 +
*PlayerDirectedWeapon
 +
**Only for weapons you want to trigger on the left mouse button (or firing stick).
 +
**This will work on a non-player entity, like an familiar, but it only fire when you fire and will generally fire at the cursor
 +
*DirectUseSystem
 +
**basically it's like a weapon in terms of obeying reload times, ammo requirements, etc, but it doesn't do any targeting or emit any shots; its behavior is defined by other stuff
 +
**right now the only point is in conjunction with OnUse_ParentEntity modifiers
 +
**doesn't require shot_type, damage_type, shots_per_salvo, attack_power, range_actual, targeting_logic
 +
**if the system also has required_item_type and required_item_amount, it will require and deduct that amount of that item from the player to work
  
- How annoyed the AI is at you (rageometer).
+
==DamageType==
- How big a threat it thinks you are (being frightened by things such as golems or warheads).
+
* Ballistic
- How ready it is to do anything about that (how much of its production potential is devoted to thwarting you).
+
* Tracking
 +
* Gravity
 +
* Deployment
 +
* Laser
 +
* Energy
 +
* Ion
 +
* Concussive
 +
* Piercing
 +
* Poison
 +
* Fire
 +
* Acid
 +
* Lightning
 +
*Explosive
 +
** "Explosive" gets the MissileShotDamage modifier and not the NormalShotDamage one, and vice versa for non-Explosive.
 +
** "Explosive" shots can reveal secret doors on direct collision
 +
*LowExplosive
 +
** This lets you have explosive-style stuff that you might provide immunities to without the weapon being able to break walls.
  
From a design standpoint, the game could perhaps could have split out those sorts of things into multiple meters (AI Rage, AI Intimidatedness, AI Preparedness, etc), but in practice that likely would have been prohibitively complex without much added value to the game itself.
+
==DifficultyType==
 +
*VeryEasy
 +
*Easy
 +
*Normal
 +
*Hard
 +
*Misery
  
[[AI War:AI War]]
+
==FiringTiming==
 +
* AllTheTime
 +
** always fires if there's any eligible target at all, even if not in range
 +
* OnlyInRange
 +
** only fires when there's something in range
 +
* WhenParentEntityHit
 +
** only fires when the parent entity is hit by something (which authorizes one salvo)
 +
* Never
 +
** never does normal salvo logic; useful with systems with category=DirectUseSystem
  
==Why Does The AI Progress Go Up When The AI Destroys Key Structures Of Mine?==
+
==TargetingLogic==
 +
* Direct
 +
** fires at where the target is now
 +
* Lead
 +
** fires at where this shot would intercept the target at its present speed and course. If the target is travelling too fast for the shot to intercept at any angle, this just shoots at the target's current location.
 +
* Dumbfire
 +
** fires in a straight line from the firing ship at the angle the firing ship is currently facing
  
'''Q:''' I am just wondering why the AIP goes up if a Golem is killed, or a human settlement is nuked? And similar structures I own that the AI would really benefit if I lost. I understand a Golem being repaired makes AIP go up, and the AI is in its right to get scared of that, but why when it dies?
+
==FourDirection==
 +
* North
 +
* East
 +
* South
 +
* West
  
'''A:''' First please make sure that you have read the above entry, about what AI Progress really means.  From that perspective, in these cases it's not anger, but rather the AI seeing you as more of a threat to itself.  To cite another animal example: Suppose you have a cat, and it has claws, but never attacks you.  Your estimation of that cat as a threat is very low.  But, let's suppose that cat then does something threatening, like arching its back or swatting at you -- even if it does not hurt you in any way, you still think of it as being more of a danger.  In many ways, this is why the Golems, even when dying, are considered a threat by the AI.  It thinks to itself: "Okay, ''that'' golem is dead, but these human build golems now, evidently.  So, logically, if I killed the one are they going to try something else that I don't know about yet?"
+
==RoomType==
 +
* Starting
 +
* StartingForFirstFloor
 +
* MonsterFree
 +
* Item
 +
* HealthUpgradeRoom
 +
* SecretFreeLoot
 +
* HealthForItemsShop
 +
* CheapItemShop
 +
* RobotShop
 +
* WeaponsShop
 +
* Miniboss
 +
* Condemned
 +
* Boss_Rectangle
 +
* Boss_Large
 +
* Boss_Giant
 +
* Boss_TallFromSouth
 +
* Standard
 +
* StandardEW
 +
* StandardNS
 +
* TunnelWide
 +
* TunnelTall
 +
* Quad
 +
* QuadEE
 +
* QuadWW
 +
* QuadNN
 +
* QuadSS
 +
* FatVertical
 +
* FatHorizontal
 +
* Square
 +
* SquareNE
 +
* SquareSW
 +
* Boss_Square
 +
* Boss_RectEdged
 +
* SquareNE
 +
* SquareSW
 +
* StandardEW
 +
* StandardNS
  
The other case, regarding the captive human settlements, again works best as a pet analogy.  Let's suppose you have a dog that you keep in the house, and he is known for trying to escape out the door when you open it.  That makes you take steps to try to contain him, and thus puts you more on guard with the dog not because of danger to yourself, but because you want to keep him contained and he is trying to thwart that.  With the captive human settlements and rebel colonies, those were presumably captive for a reason, and so if the AI then is losing control of them, that is cause for concern to it.  The dog is escaping, or got out and then got itself killed.  The AI has a lot of captive human settlements, and an uprising or an escape in one (especially if one is annihilated) might logically spawn rebellions or trouble in the others.  Hence, the AI's level of concern again rises -- just what are those pesky humans up to, and what might they do next?
+
==EntityModifierProbationType==
  
[[AI War:AI War]]
+
* NoMissileUse
 +
* NoEnergyUse
 +
* NoTakingDamage
 +
* NoHealingHull
 +
* NoUsingConsumable
 +
* NoDying
 +
**This probation can't actually be violated, but allows the use of disabled_during_probation when you just want it to be "survive to end of room" or "survive to end of floor" to get the benefit.
 +
*MakeItToNextFloorWithinTimeLimit
 +
**if (probation_magnitude) seconds pass before the end of the probation, the probation is failed
 +
*HaveZeroCreditsWhenMovingToNextFloor
 +
**if the player has non-zero credits when the probation ends, the probation is failed
 +
*BuyItemsBeforeMovingToNextFloor
 +
**if the player has not bought (probation_magnitude) items before the end of the probation, the probation is failed
 +
*CollectAllHealthShardsBeforeMovingToNextFloor
 +
**if the player has not visited all rooms, broken all health-shard-containing blocks, and picked up all health shards on the current floor before the probation ends, the probation is failed
 +
*OpenAllChestsBeforeMovingToNextFloor
 +
**if the player has not visited all rooms and opened all chests (locked and unlocked) on the current floor before the probation ends, the probation is failed
 +
*BuyAllCheapItemsBeforeMovingToNextFloor
 +
**if the player has not visited all cheap-item-shop rooms on the current floor and bought all the items in them before the probation ends, the probation is failed
 +
*HaveFamiliarsWhenMovingToNextFloor
 +
**if the player does not have at least (probation_magnitude) familiars at the end of the probation, the probation is failed
 +
*BuyAllHealthCostItemsBeforeMovingToNextFloor
 +
**if the player has not visited all buy-with-health-shop rooms on the current floor and bought all the items in them before the probation ends, the probation is failed
 +
 
 +
==FamiliarType==
 +
 
 +
* NormalOrbit
 +
** stays relative to the master ship, never collides with walls, moves around in smooth-ish arcs from random offset to random offset (similar to movement of armadas around planets on the TLF metamap)
 +
* SimpleCircleOrbit
 +
** stays relative to the master ship, never collides with walls, moves around in a smooth-ish circle around the master ship
 +
* NormalShipBehavior
 +
** basically acts like a normal ship, according to the behavior flag. For example, you could use this with behavior=Wanderer or behavior=CardinalMover
 +
** will spawn on top of the master entity
 +
* PtarthianOrbit
 +
** behaves like SimpleCircleOrbit, but doesn't try to automatically space out the familiars in a ring.
 +
** only works properly for a familiar defined by a familiar sub-node on an entity, won't work well if just put in the normal "familiars" list or otherwise deployed
 +
 
 +
==EntityModifierType==
 +
 
 +
=== These require attributes "math" and "magnitude" ===
 +
 
 +
* MaxHealth
 +
* MaxShields
 +
* Range
 +
** Range that shots will live, specifically. Doesn't do much for BulletPattern stuff.
 +
* FireRate
 +
* MovementSpeed
 +
* ShotSize
 +
** Applies to the size of shots generated by this entity, not to the entity itself.
 +
* MySize
 +
** Applies to the entity itself. So if you want a system that causes its shots to be huge you can give it:
 +
*** <modifier target="MyShots" type="MySize" math="Multiply" magnitude="4" />
 +
* NormalShotDamage
 +
** Applies to the damage of shots generated by this entity, not to the entity itself.
 +
** doesn't apply to melee damage, or the player's missiles
 +
* MissileShotDamage
 +
** Applies to the damage of shots generated by this entity, not to the entity itself.
 +
* AreaOfEffect_Self
 +
**only makes sense on shots, forces the shot to be aoe
 +
* MeleeDamage
 +
**Applies to the damage of shots generated by this entity, not to the entity itself.
 +
**this is the implicit "on-touch" damage that happens when the player's hitbox overlaps an enemy hitbox
 +
* IncomingDamage
 +
**accepts (but does not require) the damage_type attribute
 +
***if specified, only applies to damage from that source
 +
***if not specified, applies to all damage
 +
* Acceleration
 +
* Deceleration
 +
** this refers to how quickly an entity slows down from its current speed to zero.
 +
** If you want to adjust how fast an entity moves, you want MovementSpeed instead.
 +
* InventoryChangePerSecond
 +
** also requires "related_item" attribute, see below
 +
** only does anything when it applies to the player's entity
 +
* DamagePerSecond
 +
**does damage to the thing with the modifier every sim-step
 +
**uses damage_type
 +
* DamagePerSecond_IfMoving
 +
**similar to DamagePerSecond, but only has an impact if the ship is moving under power (not decelerating or being knocked back or whatever)
 +
* MyOwnDamage
 +
**unlike NormalShotDamage, which only impacts shots generated by the entity with that modifier, this one is for the shots themselves, and modifies the damage it does on impact
 +
*AddsWeaknessVsAmmoWeapons
 +
**When applied to shot, causes it to change the weakness-to-energy-weapons of the thing(s) hit by this amount, where 0 is no change and 1 is "increase damage by 100%"
 +
***This only impacts the next hit from an energy weapon
 +
**For a player main gun, if it has no modifier of this type targeting MyShots, it implicitly gets one with Add and 0.01
 +
*AddsWeaknessVsAmmoWeapons_Cap
 +
**When applied to shot, causes the effect of the previous modifier to never increase the target's weakness above this amount
 +
**For a player main gun, if it has no modifier of this type targeting MyShots, it implicitly gets one with Add and 0.1
 +
* ItemCosts
 +
**modifies requires_item_amount values where related_item matches requires_item_type
 +
**notably, used with Energy, this can make energy weapons cost more or less energy to fire
 +
* ItemGains
 +
**modifies on_pickup_grants_amount values where related_item matches on_pickup_grants_item
 +
**notably, used with Credits, this can increase the value of future credit drops
 +
* InventoryCapacity
 +
**modifies the max amount of related_item that you can store
 +
**notably, used with Energy, this can increase or decrease the player's energy storage capacity
 +
* HealthGainOnEnemyKill
 +
**when an entity (not system) with this kills a ship, it gains this much health
 +
**partial gain (less than one point) is stored and can be applied as actual health gain if a later kill brings it up to a full point (if it happens in the same room)
 +
* ItemGainOnEnemyKill
 +
**when an entity (not system) with this kills a ship, the player's inventory of related_item changes by this amount (can be negative, if you wanted a credit fine for killing something, for example)
 +
* ItemGainChanceOnEnemyKill
 +
** when an entity (not system) with this kills a ship, the player's inventory of related_item has this percent chance (expressed between 0 and 100) of gaining 1 of that inventory item type.
 +
* HardensAfterTimeStationary
 +
**when an entity has this modifier, and has not moved under power, it shifts towards a dark gray color (maxing out when time not under power >= the value of this modifier)
 +
**when its time not under power >= the value of this modifier, the ship cannot take damage
 +
* StoreItemPrices
 +
**if the player has this, it modifies all credit_cost values
 +
* Inaccuracy
 +
**When on a ship or a system, modifies that system's inaccuracy_spread.
 +
*ShotsDriftTowardsHostileShips_Range
 +
**if on a system, modifies shots_drift_towards_hostile_ships_range for that system
 +
**if on an entity, does so for all systems on that entity
 +
*ShotsDriftTowardsHostileShips_Speed
 +
**if on a system, modifies shots_drift_towards_hostile_ships_speed for that system
 +
**if on an entity, does so for all systems on that entity
 +
*GravityTowardsEnemyShots_PullPerSecond
 +
**only works on entity, modifies gravity_pull_per_second
 +
**also effectively sets gravity_affects_shots to true
 +
**use negative values for repulsion
 +
*GravityTowardsEnemyShots_FalloffPerUnitDistance
 +
**only works on entity, modifies gravity_falloff_per_unit_distance
 +
**also effectively sets gravity_affects_shots to true
 +
*CriticalHitChance
 +
**Applies to the damage of shots generated by this entity/system, not to the entity itself
 +
**If the result of this modifier is > 0, shots emitted by this entity or system have that percent chance (out of 100) of doing double damage on hit, and showing "Crit!" on the thing it hit
 +
**Note that if this value winds up >= 100 every hit will be a crit
 +
*CriticalHitDamage
 +
**Applies to the damage of critical hit shots generated by this entity/system, not to the entity itself
 +
**Base Critical Hit damage is 2
 +
*TimeDilation
 +
**when applied to an entity, makes that entity behave as if the simulation were going faster or slower
 +
**so if you apply multiply,0.5 with this, the entity will act as if the simulation were going half as fast
 +
**probably don't try giving this adds, or multiplying by zero or negatives
 +
*AvoidDamageChance
 +
**whenever the affected entity would take damage, it has this percent (out of 100) chance of taking zero damage instead
 +
*LootFloorIndex
 +
**if on the player, when the player gets loot, acts like the floor is more or less than it is (so adding 1 causes it to consider loot you'd normally only find on the next floor, etc)
 +
*HealthGains
 +
**modifies the impact of health pickups
 +
*RoomWinLootChance
 +
**modifies the base 10% chance of a room with after-win loot spots having those spots populated after a win
 +
*NonBossEnemySpawnRate
 +
**modifies the number of non-boss enemies spawned when a room is entered for the first time
 +
**if this is less than 1 it randomly doesn't seed stuff on the corresponding % of spots
 +
**if this is greater than 1 it randomly seeds more enemies on the existing spots (still obeying the normal ship category rules)
 +
*DoubleItemGainChance
 +
**Whenever you pick up something that gives a positive amount of some item, you have this chance of getting double.
 +
*Diffuse_A, Diffuse_R, Diffuse_G, and Diffuse_B
 +
* Added support for modifier tags to have the types Diffuse_A, Diffuse_R, Diffuse_G, and Diffuse_B.
 +
** These modify the color of the targeted entity accordingly. Note that the final values range from 0 to 1, where white is 1,1,1,1, black is 1,0,0,0, and transparent is anything where A=0. White is generally the "starting point" you will be working with, so most changes will be you suppressing the colors you don't want, or changing the transparency.
 +
** Example:
 +
*** If you have a system with:
 +
**** <modifier target="MyShots" type="Diffuse_G" math="Multiply" magnitude="0.2" />
 +
**** <modifier target="OnUse_ParentEntity" type="Diffuse_R" math="Multiply" magnitude="0.3" duration="0.5" />
 +
*** This will make the shots look more red/blue (depending on their original image), and make the firing entity briefly turn more blue/green.
 +
 
 +
 
 +
=== These require that "math" and "magnitude" be absent, as they're just on/off flags ===
 +
* ReflectsOffTerrain
 +
**Comes back at the opposite angle it came in on.
 +
* RicochetsOffTerrain
 +
**Comes back at a different angle than it came in on (if it was a shallow angle of incidence, the angle of reflection is shallow, etc)
 +
* IgnoresCollisionWithNonWallTerrain
 +
**Passes through Shootable and Bombable obstacles, but not the Indestructible obstacles (look like walls) or the exterior wall that bounds the room.
 +
* NonMeleeCannotFire
 +
**Prevents all its normal weapons from firing; only the implicit on-touch-damage systems will work during the duration
 +
* DestroysTouchingShootables
 +
**If touches a shootable while this modifier is applied, that shootable is destroyed.
 +
* DestroysTouchingBombables
 +
**Same deal with bombables.
 +
* IgnoresCollisionWithWallTerrain
 +
**Passes through Indestructible obstacles (look like walls) and the exterior wall that bounds the room. Does not pass through shootables or bombables (but you can set that flag too)
 +
* SystemDisabledAndInvisible
 +
**System doesn't render or do anything while this is applied.
 +
* PhasedOut
 +
**entity draws at half alpha
 +
**entity cannot be hit by shots
 +
**entity is immune to damage
 +
*PhasedOut_JustTheShotAvoidance
 +
*PhasedOut_JustTheTransparency
 +
* Self_DestroyEnemyShots
 +
**when on a shot, makes it behave like its firing system had shot_destroys_other_shots
 +
* Self_NotDestroyedOnCollisionWithShip
 +
**when on a shot, makes it behave like its firing system had shot_is_not_stopped_by_hitting
 +
* SystemAutoFireDuringSprint
 +
**while sprinting, if this system is on the player ship and would not normally be fired (its key isn't being held or whatever), it fires anyway and the shots are aimed directly behind the ship
 +
* RevealsWholeMap
 +
**when the player has this modifier, the whole map for the current floor is revealed; if the player still has this modifier after a floor transition it reveals that new floor as well
 +
* RevealsShopsItemRoomsAndBossRoom
 +
**similar to RevealsWholeMap, but just for shop, item, and boss rooms
 +
* SystemCannotBeDropped
 +
**if the player has this on their ammo system, they cannot pick up any item that would cause their ammo system to be destroyed or swapped out
 +
***same deal with consumable system
 +
***similar with main gun system (no pickups destroy it, but some can swap it out)
 +
* CannotPickUpItems
 +
**if the player has this, they cannot pick up any items
 +
*SystemShotsInheritEntityMomentum
 +
**Shots fired by a system modified with this inherit the momentum of the firing ship, and will continue to move in that direction (in addition to any other movement they would do) for their whole duration. Doesn't impact time-to-live, so firing in the direction of movement makes the shots travel further, etc.
 +
*SteeringDisabled
 +
**Prevents the entity from changing direction.
 +
*MustGoAsFastAsPossible
 +
**Forces the entity to go as fast as possible in whatever direction it's facing (probably best used with SteeringDisabled)
 +
*TemporarilyGrantSystem
 +
**Gives the entity this system. If this modifier expires for whatever reason, that system is removed.
 +
*IgnoresLocks
 +
**Only matters on the player. If present, the player does not need keycards to open locked doors or chests.
 +
*HideMinimap
 +
**Only works on the player. As long as this modifier remains on the player, the minimap will simply not be rendered.
 +
*MovesTowardReticule
 +
**Makes the ship or shot move towards the reticule at a speed and acceleration based on that entity. The effects are generally pretty wacky.
 +
*GetAlternateLoot
 +
**if on the player, when the player opens an unlocked chest they get loot as if it were a locked chest
 +
*RevealsSecretHealthRooms
 +
**if on the player, sacrifical shops are always known
 +
*MinibossAndCondemnedBossSkipChance
 +
**if on the player, when entering a miniboss/condemned room for the first time, the boss has this % chance of not seeding
 +
*ReplacesEntityTypeWithItemsFromPool
 +
**if this is on the player, when a room is populated, all (related_entity) seeded are replaced with something from (related_item_pool)
 +
**if the item pool is none, it doesn't replace the entity, it just doesn't seed it
 +
*IgnoresCollisionWithGlassAndOneWay
 +
**an entity affected by this can pass through glass walls and one-way tiles
 +
*ReplacesItemPoolWithOtherItemPool
 +
**if this is on the player when the game is spawning an item from (related_item_pool) it instead pulls from (related_item_pool_2)
 +
**only applies when game logic calls for seeding from a pool; if it just calls for seeding a specific entity type that happens to be in pool then that doesn't count
 +
**if none, related_item_pool_2 is none, just skips seeeding the item rather than replacing it
 +
*ReplacesShipCategoryWithOtherShipCategory
 +
**if this is on the player when the game is spawning an enemy from (related_ship_category) it instead pulls from (related_ship_category_2)
 +
**unlike the item pool one, this applies to specific-entity spawns as well as category-based spawns
 +
**if none, related_ship_category_2 is none, just skips seeding the entity rather than replacing it
 +
 
 +
==FlockBehaviorType==
 +
*Attacker
 +
** It comes chasing after you, but moving directly for you and not paying attention to walls. 
 +
**Not going to work well in enclosed areas.  Once it gets in firing range it will stop, and it will move out of range if you get a bit closer to it.  It’s kiting you, basically.
 +
* Stationary
 +
** sits there without moving.
 +
* Wanderer
 +
** wanders around from point to point at random. 
 +
** Changes direction when it hits an obstacle or wall, or when it goes a certain distance (defined below).
 +
**Totally separate properties that are only relevant when using wanderer (so I’ll show them here):
 +
***wander_distance_min (int)
 +
***wander_distance_max (int)
 +
***These two properties, default 300 and 600 respectively, say how far the enemy will move before considering changing directions (assuming it doesn’t hit something else first).
 +
***In other words, when it starts moving it chooses a target that is rand(min,max) distance away.
 +
* PathfindingAttacker
 +
** More sophisticated tracking of you, trying to come after you. 
 +
**Will collide with walls as if was 64x64 in size when in this mode, so big enemies using this may wind up seeming to go through impossible gaps if you use this on them.  Best for smaller enemies.
 +
* LineOfSightAttacker
 +
**Same as Attacker mode, but will move toward the player if it has line of sight on the player.  This will work well in any sort of space, but mainly for enemies that lurk.
 +
**Note: has no impact on whether or not the entity's weapons fire. To make the weapons require LOS on the player use requires_line_of_sight_of_player_to_fire="true" on the weapon system(s).
 +
* CardinalMover
 +
**Moves around in the four cardinal directions only, turning in a new direction when it hits an obstruction.  If moves for 5 seconds with no collision, will potentially change direction.
 +
**Totally separate property that is only relevant when using cardinal mover (so I’ll show it here):
 +
***cardinal_mover_random_turn_interval (float)
 +
***Default 5.  This is what sets the “if moves for x seconds with no collision, will potentially change direction” number.
 +
* Zamboni
 +
**travels up until it hits a wall
 +
**then goes one tile right
 +
**then goes down until it hits a wall
 +
**then goes one tile right
 +
**repeat
 +
**if it ever hits a situation where it cannot go right, it repeats the above with "left" instead; and vice versa
 +
* FamiliarFollower
 +
**like Attacker
 +
**on entity: familiar_follower_leash_distance (int)
 +
***if this entity is at least this far from the player, it pathfinds to the player
 +
***if this entity is pathfinding to the player, and is no longer at least this far from the player, that path order is cleared and it falls back on Attacker behavior
 +
*FamiliarCreditGathering
 +
**pathfinds to the credit drop that it has the shortest path to
 +
**if it can't find a path to any credit drop it reverts to FamiliarFollower for the rest of the room (to avoid frequent path checks to all the inaccessible credit drops, if any)
 +
**if it touches a credit drop, it does the normal player-picked-it-up logic
 +
**on entity: familiar_credit_gatherer_does_something_every_x_credits (int)
 +
***every time this entity's total gathered credits (in this room; familiar state is not retained between rooms) reaches this value, it does "something" (not yet defined)
 +
*FamiliarRam
 +
**like FamiliarFollower
 +
**on entity: familiar_ram_charge_distance (int)
 +
***if this entity is within this distance of a hostile target that it can hit, it pathfinds to that entity
 +
***used in conjunction with a short-ranged attack with an aoe and the destroys_firing_entity flag, it can make a kamikaze ram; otherwise it can be given guns to harass the target
 +
*FamiliarBeelineFollower, FamiliarAttacksTowardPlayer
 +
**Basically the same, and works like FamiliarFollower but is more singleminded about reaching the player.
 +
 
 +
==InventoryItemType==
 +
*Energy
 +
*Keycard
 +
*Missile
 +
*Credit
 +
*HealthShard
 +
*ExperiencePoint
 +
 
 +
==MathType==
 +
 
 +
*Add
 +
**Just adds to whatever base value is there.
 +
*AdditiveMultiplier
 +
**Variant combination of Add and Multiply. All modifers with AdditiveMultiplier are added together beforing multiplying the value (applies after Add and before Multiply).
 +
*Multiply
 +
**Multiplies the result. Note: all multiply modifiers are applied AFTER all add modifiers.
 +
*AddAfterMultipliers
 +
**similar to Add, but applied after multipliers rather than before
 +
*Floor
 +
**Prevents the result from being below this value, unless a Set modifier is used to make it so.
 +
**If multiple Floor modifiers are involved in the same computation, the highest floor takes precedence.
 +
*Ceiling
 +
**Prevents the result from being above this value, unless a Set modifier is used to make it so.
 +
**If multiple Ceiling modifiers are involved in the same computation, the lowest ceiling takes precedence.
 +
*Set
 +
**Sets the result to this value, completely ignoring the base value and any add or multiply modifiers.
 +
**If there's more than one Set modifier for a particular modifier type applying at once, the one with the lowest (non-negative) value takes precedence
 +
***this allows for capping MaxHealth, where the thing that can override the cap is a lower cap
 +
**doesn't work with negative values (that support can be added if necessary, but it didn't fit the framework naturally)
 +
 
 +
==AnchorLocation==
 +
*Center
 +
*Left
 +
*Right
 +
*Up
 +
*Down
 +
*UpLeft
 +
*UpRight
 +
*DownLeft
 +
*DownRight
 +
*CenterLeft
 +
*CenterRight
 +
 
 +
==ShaderType==
 +
*Normal
 +
*Additive
 +
*PartialBlend
 +
*Multiplicative
 +
*InverseAdditive
 +
*InverseAdditiveWithAlpha
 +
*Experimental
 +
*ExperimentalCutoff
 +
*HSV
 +
*HSVAdditive
 +
*InverseSubtractive
 +
*Graycolored
 +
*Grayscale
 +
 
 +
==SystemSlotType==
 +
*None
 +
*Energy
 +
*Consumable
 +
*Attachment
 +
*MainGun
 +
*Missile
 +
*Incredibility
 +
 
 +
==EffectType==
 +
*RerollShopItems
 +
**Only works inside shops. Any items on the ground that still require purchasing are removed and replaced with other items the shop could normally roll.
 +
**If related_item_pool is set to something other than none, the reroll uses that specified pool instead.
 +
*ChangeCurrentHullHealth
 +
**Changes (target)'s hull health by (magnitude). Can be positive or negative.
 +
**You can use math="Set" with this to make it just set the health to that value rather than adding/subtracting.
 +
*ChangeCurrentShieldHealth
 +
**Changes (target)'s shield health by (magnitude). Can be positive or negative.
 +
**You can use math="Set" with this to make it just set the health to that value rather than adding/subtracting.
 +
*CopyModifiers
 +
**Copies the modifiers defined as sub-nodes of this effect to (target)'s modifier list.
 +
*CopyModifiersToWorldToAffect
 +
**Similar to CopyModifiers, but instead of copying them to all currently existing entities in the target group (entities that come into existence after the CopyModifiers effect's execution are not impacted), it copies them to the world and all entities within the target group will check that global list whenever they need to compute something. In this way it affects all current and future entities in that group.
 +
** The duration on the modifiers still works, whether timed or on-room-transition or on-floor-transition. The UntilWoken duration doesn't really mean anything here though.
 +
*AddSystem
 +
**Adds a random item from (related_systems) to each entity matching (targeting).
 +
**This is an inherently permanent addition, as opposed to EntityModifierType.TemporarilyGrantSystem. So if you want the system to "expire" it will need is_destroyed_after_finite_uses or something like that.
 +
*RemoveSystem
 +
**Removes all systems of the types in (related_systems), if present, from each entity matching (targeting). Does not care how those systems came to be there, or what the consequences will be from removing them.
 +
*SpawnEnemy
 +
**Spawns a random pick from (related_entities) within (magnitude) of the related entity.
 +
**Also gives that entity a momentum between (second_magnitude) and (third_magnitude) at a random angle, if second_magnitude > 0 and third_magnitude >= second_magnitude
 +
**"the related entity" is the parent entity of the related system if applicable, or of the related entity otherwise, or just the player if neither of those is applicable.
 +
*StartMovementDrivingPattern
 +
**any target entity that isn't currently following bullet pattern logic starts following the first bullet in (related_pattern)
 +
**effect tags with type StartMovementDrivingPattern now support related_pattern having a list of patterns to be randomly selected from on each triggering.
 +
*ChangeCurrentInventory
 +
**instantly changes the player's inventory of (related_item) by (magnitude) according to (math, default Add)
 +
**normally EntityModifierType.InventoryChangePerSecond takes care of any need for this, but when you want to add an exact amount (like with the probation rewards) this avoids that modifier's imprecision.
 +
*WinRoom
 +
**When used, the player automatically wins the current room.
 +
 
 +
==EffectTiming==
 +
*OnUse
 +
**For effects on a system. Means the effect happens every time the system is activated. So if it's a shot-firing system, that's when the shot is emitted, not when it hits whatever.
 +
*OnRoomSwitch
 +
**For effects on a system. Means the effect happens every time the player switches rooms.
 +
*OnRoomSwitch_OnlyFirstTimeInRoom
 +
**For effects on a system. Similar to OnRoomSwitch, but only applies the first time a given room is entered.
 +
*OnModifierAdded
 +
**For effects on a modifier. Means the effect happens once, when the modifier is added to an entity.
 +
*OnModifierRemoved
 +
**For effects on a modifier. Means the effect happens once, when the modifier is removed (for whatever reason, not specific to probation) from an entity.
 +
*OnEnemyKilled_ByAnySystem
 +
**For effects on a system. Means the effect happens every time this system's parent entity kills something.
 +
*OnEnemyKilled_ByMe
 +
**For effects on a system. Means the effect happens every time this system kills something.
 +
*OnEntry
 +
**For effects on a floor or on a (player) system. Means the effect happens once, when the player enters the floor.
 +
*OnLeaving
 +
**For effects on a floor or on a (player) system. Means the effect happens once, when the player leaves the floor.
 +
 
 +
==EffectTargeting==
 +
*Player
 +
**Targets the player entity, regardless of where this effect is.
 +
*AllEnemies
 +
*AllPlayerFamiliars
 +
*AllShots
 +
*AllEnemyShots
 +
*AllPlayerShots
 +
*Self
 +
**Targets the parent entity of the related system, if any, or the related entity if there's no specific system
 +
*AllNormalEnemiesAndShots
 +
*NonCondemnedBossesAndShots
 +
*AllAutoPickups
 +
 
 +
==ConditionType==
 +
*PlayerHasNoShields
 +
*PlayerIsMoving
 +
*EntityIsAtFullHealth, EntityIsNotAtFullHealth
 +
**If this effect is on a system, refers to that system's parent entity
 +
**Otherwise, refers to the player
 +
 
 +
==BulletConditionalSpawnRule==
 +
*OnlyOnWindow
 +
**if the spawn point is not on a window tile, the bullet does not spawn
 +
*OnlyOnNonWindowSolid
 +
**if the spawn point is on a window tile (or no tile at all), the bullet does not spawn
 +
*OnlyInOuterSpace
 +
**if the room's environment is not OpenSpace, the bullet does not spawn
 +
 
 +
==The Meaning Of Floor Numbers (Not Really An Enum)==
 +
* 1
 +
** The first floor is always the easiest, and is the first one you visit.  Naturally.
 +
* 5
 +
** For some time, runs end after 5 floors.  After winning 10 runs, further floors open up.
 +
** This floor has the "final" boss in it.
 +
* 7
 +
** This floor has the REAL final boss in it, but is only accessible after winning 10 of the shorter runs.
 +
 
 +
 
 +
[[Category:Starward Rogue]][[Category:Starward Rogue XML]]

Revision as of 18:31, 10 July 2017

GameEntityCategory

Oi! What is this thing? Depending on what you say, it will be parsed differently.

  • Ship
    • Player hulls or enemy ships.
  • Shot
    • An actual bullet (you won’t use this much, if at all).
  • ItemPickup
    • What it says on the tin.
  • Obstacle
    • Funky stuff you won’t use much, if at all.
  • NonSim
    • Is not added into ANY of the normal lists and thus does not impact the normal sim logic for entities, and is not serialized. Just for use in non-sim bullet patterns that are purely for visual effect.

ShipCategory

What sort of ship is this, and how should it thus seed in rooms? This is a required field for any ship.

Note that ones that end in 1x1 should have a pessimistic bounding box that fits in a 64px square, ones that end in 3x3 should fit in a 192px square, 5x5 in 320px, 7x7 in 448px, and 9x9 in 576 (this is what bosses are allowed to use up to).

  • Player
    • This is for player hulls that the player can choose from. It’s not an enemy ship.
  • PlayerFamiliar
    • Used for familiars and other little followers that are your allies.
  • EnemyFamiliar
    • Used for familiars and other little followers that are attached to an enemy instead of you.
  • Boss
    • Goes in the end-of-floor boss rooms.
    • Default ability point drop: 100
  • BossLaterStage
    • These aren’t independent enemies, per se. Rather, if there is a multi-stage boss or miniboss, the later stages should be flagged as this.
    • Default ability point drop: 100
  • RegularEnemyLaterStage
    • These aren’t independent enemies, per se. Rather, if there is a multi-stage enemy, the later stages should be flagged as this -- NOT as BossLaterStage, or it will trigger certain boss logic you don't want here.
    • Default ability point drop: 7
  • BossBuddy
    • Sometimes bosses have multiple parts to themselves. This defines one of the other parts.
    • Default ability point drop: 100
  • FinalBoss
    • This is the "last boss," although not really. It's the last boss for the early runs (floor 5), and then a major speedbump in later runs.
    • It's perfectly fine to have more than one of these; the game will choose between them at random.
    • Default ability point drop: 300
  • SuperFinalBoss
    • This is the TRUE last boss. It's only on floor 7, and you only encounter it after having beaten the fake-ish "last boss" a certain number of times.
    • It's perfectly fine to have more than one of these; the game will choose between them at random.
    • Default ability point drop: 500
  • Miniboss
    • Goes in miniboss rooms.
    • Default ability point drop: 50
  • CondemnedRoomBoss
    • The centerpiece of condemned rooms.
    • Default ability point drop: 50
  • Pursuer_1x1
    • Little fast guys that chase you around and generally harass you in some fashion if you don’t move fast.
    • Default ability point drop: 2
  • LocalGuard_1x1
    • Little immobile (or nearly so) guys that hang out in an area and make it hard to go into that area somehow.
    • Default ability point drop: 2
  • Jumpscare_1x1
    • Little guys that don’t move at all or much until you get near them, and then bad things happen. So they may make part of the room effectively inaccessible until the player has dealt with other hazards in the room.
    • Default ability point drop: 4
  • Sniper_3x3
    • These guys likely don’t move much or at least not fast, but they lay down long range dangerous attacks. Must be super careful with these, as we want to make sure even players on small monitors get a chance to see these guys before these guys are able to shoot at them. Assume they cannot shoot over any obstacles.
    • Default ability point drop: 2
  • LocalAOE_3x3
    • Rather like the LocalGuard, but more explosive in some fashion. May be able to use this fact against other enemies in the room, may not be. Assume they can shoot over everything except indestructible walls.
    • Default ability point drop: 3
  • Wander_3x3
    • This is sort of the “bread and butter” enemy that is most common. These guys “wander around and do stuff.” They don’t chase you, but they probably track you with weapons and such if you go near them (or they wander near you).
  • Attacker_3x3
    • These guys actively hunt you through the room, although not in a true pathfinding sense. So you need to get in the general vicinity of them for them to come after you, but when you do they are then going to converge and stay on you.
    • Default ability point drop: 3
  • ChaosAdder_3x3
    • These guys do… who knows what. Whatever it is, it makes a big mess of everything else around them. Probably lots and lots of bullets, or something else that makes everything else 10x harder. Use sparingly per room. ;)
    • Default ability point drop: 4
  • Challenge_5x5
    • These guys are crazier than the average bear, and need to be only used in challenge rooms. These are basically enemies that are harder than expected.
    • Default ability point drop: 25
  • Wander_5x5
    • Same as the smaller wanderer, except needs more room to move about and is also larger, better armored, probably more damaging, etc.
    • Default ability point drop: 3
  • Attacker_5x5
    • Same as the smaller attacker, except needs more room to move about and is also larger, better armored, probably more damaging, etc.
    • Default ability point drop: 5
  • ChaosAdder_5x5
    • Same as the smaller chaos adder, except needs more room to move and is also larger, better armored, probably even more chaos results, etc.
    • Default ability point drop: 7
  • Fearsome_7x7
    • Whatever this is, it is very very bad. These are the biggest boys outside of bosses and minibosses.
    • Default ability point drop: 15
  • EnemySpawer_Spawnee
    • These are small and numerous, and generally should die in one hit. They come pouring out of enemy spawners at a rate of 1 every 2 seconds.
    • Default ability point drop: 0
  • CondemnedRoom_1x1
    • ONLY should be used in condemned rooms. Make sure they have a health drain set on them.
    • Little fast guys that chase you around and can get through all the nooks and crannies to chase you.
    • Default ability point drop: 0
  • CondemnedRoom_5x5
    • ONLY should be used in condemned rooms. Make sure they have a health drain set on them.
    • Larger scary guys that may or may not be able to get through the nooks and crannies, but instead make certain parts of the room that you REALLY don't want to go in.
    • Default ability point drop: 0
  • RobotShopkeeper
    • ONLY should be used in robot shops. Very specialized and really shouldn't be used beyond what the basics were set up for.
  • CheapItemShopkeeper
    • ONLY should be used in cheap item shops. Very specialized and really shouldn't be used beyond what the basics were set up for.
  • WeaponsShopkeeper
    • ONLY should be used in weapon shops. Very specialized and really shouldn't be used beyond what the basics were set up for.
  • RandomFloatingChunksOfStuff
    • Used by Antigravitate Blockage/Shards in order to not proc on death effects.

ItemPool

  • AfterRoomMinor
    • This will appear after some rooms are complete, but it’s a super duper minor sort of reward. Basically health or energy or something. Not even a consumable weapon.
  • AfterRoomConsumable
    • This will appear after some rooms are complete, and are always consumable weapon/item slot items of some sort. Note that NOT all consumable items need to be in this pool: many of them may very well be too rare to be here. These are just the ones that you should find semi-commonly.
  • [Consumable freestanding pools]
    • These are directly placed in certain rooms as an enticement to go to some part of the room. Usually something the player has to expend some missiles to get to, or undertake some other risk.
    • These should be overlapping a lot with the after-room consumables, but perhaps with a few more uncommon things thrown in here from time to time, and minus the super-basic consumables perhaps.
    • Actual types:
      • FreestandingCommonConsumable (95% chance)
      • FreestandingRareConsumable (5% chance)
  • [major freestanding pools]
    • These are the major "treasure room" items.
    • The different categories each have a certain number of "raffle tickets" (so to speak) put into a grab bag, and then one ticket is randomly chosen. An item from within the chosen category is used. The more tickets, the more likely the category is to show up.
    • Actual types:
      • FreestandingCommonMain (100 tickets)
      • FreestandingRareMain (5 tickets)
      • FreestandingCommonSecondary (200 tickets)
      • FreestandingRareSecondary (10 tickets)
      • FreestandingCommonPowerUp (400 tickets)
      • FreestandingRarePowerUp (20 tickets)
  • UnlockedChest
    • If a minor chest that is not locked from the start is opened, then one of these things will appear. These might be some sort of minor item, a consumable, a weakish ammo weapon or familiar, or who knows. Nothing too exciting, but also not so basic that the chests are not exciting.
  • LockedChest
    • We had to use a keycard to get whatever this is, so there ought to be some worth to it.
  • MinibossDrop
    • We just killed a miniboss. What are we going to get next?? ;)
  • BossDrop
    • Dead boss at the end of the floor! Now let’s show him his reward, Jim...
  • RegularEnemyDrop
    • Regular enemies have a low chance of dropping these things, as do certain shootable obstacles. Nothing at all exciting here; pretty much just the minor ammo and missile and credit drops.
  • RobotShop
    • Sell me robots or things to help upgrade robots!
  • WeaponsShop
    • Sell me weapons or things to help upgrade weapons!
  • DefensiveShop
    • Sell me things to help my defense!
  • CheapItemShop
    • Sell me cheap sort of stuff!
  • SecretRoom
    • These are items found only in secret free-loot rooms. Give me something worthy of my discovery!
  • HealthShards
    • These are items found only in the bombable blocks.
  • HealthForItemsShop
    • Sell me super awesome stuff that I have to sacrifice health to buy.
  • MeleeWeapons
  • BulletWeapons
  • NeedleWeapons
  • BeamWeapons
  • ExplosiveWeapons
  • FireWeapons
  • SpecialWeapons
  • UltraRareWeapons
  • ModuleAttachmentsStandard
  • ModuleAttachmentsUncommon
  • ModuleAttachmentsRare
  • ConsumableWeaponsStandard
  • ConsumableWeaponsUncommon
  • ConsumableWeaponsRare
  • ConsumableItemsStandard
  • ConsumableItemsUncommon
  • ConsumableItemsRare
  • CodeItems
  • StatPowerupsStandard
  • StatPowerupsUncommon
  • StatPowerupsRare
  • HealthUpgradeRoom
    • These should all be health upgrades or similar.
  • Incredibilities
    • These are the really major items that change the whole flow of the game.
    • You can only find these after killing shopkeepers.
  • EmptyShop
    • Junk stuff that shows up in shops where you previously killed the shopkeeper for that kind of shop.
  • ProbationPedestal
    • Probation items that give you an item with a bonus on reaching the next floor if you choose to take it.

AbilityPointCost

  • IncrediCheapAlreadyUnlocked = 40
  • LowAlreadyUnlocked = 100
  • AverageAlreadyUnlocked = 200
  • HighAlreadyUnlocked = 500
  • VeryHighAlreadyUnlocked = 900
  • SuperHighAlreadyUnlocked = 2000
  • UltraHighAlreadyUnlocked = 5000
  • IncrediCheapLocked = 80
  • LowLocked = 200
  • AverageLocked = 400
  • HighLocked = 1000
  • VeryHighLocked = 1800
  • SuperHighLocked = 4000
  • UltraHighLocked = 10000

EntitySystemCategory

  • Weapon
    • The default
    • This will work on a player entity, but it will target and fire automatically, paying no attention to player input
  • PlayerDirectedWeapon
    • Only for weapons you want to trigger on the left mouse button (or firing stick).
    • This will work on a non-player entity, like an familiar, but it only fire when you fire and will generally fire at the cursor
  • DirectUseSystem
    • basically it's like a weapon in terms of obeying reload times, ammo requirements, etc, but it doesn't do any targeting or emit any shots; its behavior is defined by other stuff
    • right now the only point is in conjunction with OnUse_ParentEntity modifiers
    • doesn't require shot_type, damage_type, shots_per_salvo, attack_power, range_actual, targeting_logic
    • if the system also has required_item_type and required_item_amount, it will require and deduct that amount of that item from the player to work

DamageType

  • Ballistic
  • Tracking
  • Gravity
  • Deployment
  • Laser
  • Energy
  • Ion
  • Concussive
  • Piercing
  • Poison
  • Fire
  • Acid
  • Lightning
  • Explosive
    • "Explosive" gets the MissileShotDamage modifier and not the NormalShotDamage one, and vice versa for non-Explosive.
    • "Explosive" shots can reveal secret doors on direct collision
  • LowExplosive
    • This lets you have explosive-style stuff that you might provide immunities to without the weapon being able to break walls.

DifficultyType

  • VeryEasy
  • Easy
  • Normal
  • Hard
  • Misery

FiringTiming

  • AllTheTime
    • always fires if there's any eligible target at all, even if not in range
  • OnlyInRange
    • only fires when there's something in range
  • WhenParentEntityHit
    • only fires when the parent entity is hit by something (which authorizes one salvo)
  • Never
    • never does normal salvo logic; useful with systems with category=DirectUseSystem

TargetingLogic

  • Direct
    • fires at where the target is now
  • Lead
    • fires at where this shot would intercept the target at its present speed and course. If the target is travelling too fast for the shot to intercept at any angle, this just shoots at the target's current location.
  • Dumbfire
    • fires in a straight line from the firing ship at the angle the firing ship is currently facing

FourDirection

  • North
  • East
  • South
  • West

RoomType

  • Starting
  • StartingForFirstFloor
  • MonsterFree
  • Item
  • HealthUpgradeRoom
  • SecretFreeLoot
  • HealthForItemsShop
  • CheapItemShop
  • RobotShop
  • WeaponsShop
  • Miniboss
  • Condemned
  • Boss_Rectangle
  • Boss_Large
  • Boss_Giant
  • Boss_TallFromSouth
  • Standard
  • StandardEW
  • StandardNS
  • TunnelWide
  • TunnelTall
  • Quad
  • QuadEE
  • QuadWW
  • QuadNN
  • QuadSS
  • FatVertical
  • FatHorizontal
  • Square
  • SquareNE
  • SquareSW
  • Boss_Square
  • Boss_RectEdged
  • SquareNE
  • SquareSW
  • StandardEW
  • StandardNS

EntityModifierProbationType

  • NoMissileUse
  • NoEnergyUse
  • NoTakingDamage
  • NoHealingHull
  • NoUsingConsumable
  • NoDying
    • This probation can't actually be violated, but allows the use of disabled_during_probation when you just want it to be "survive to end of room" or "survive to end of floor" to get the benefit.
  • MakeItToNextFloorWithinTimeLimit
    • if (probation_magnitude) seconds pass before the end of the probation, the probation is failed
  • HaveZeroCreditsWhenMovingToNextFloor
    • if the player has non-zero credits when the probation ends, the probation is failed
  • BuyItemsBeforeMovingToNextFloor
    • if the player has not bought (probation_magnitude) items before the end of the probation, the probation is failed
  • CollectAllHealthShardsBeforeMovingToNextFloor
    • if the player has not visited all rooms, broken all health-shard-containing blocks, and picked up all health shards on the current floor before the probation ends, the probation is failed
  • OpenAllChestsBeforeMovingToNextFloor
    • if the player has not visited all rooms and opened all chests (locked and unlocked) on the current floor before the probation ends, the probation is failed
  • BuyAllCheapItemsBeforeMovingToNextFloor
    • if the player has not visited all cheap-item-shop rooms on the current floor and bought all the items in them before the probation ends, the probation is failed
  • HaveFamiliarsWhenMovingToNextFloor
    • if the player does not have at least (probation_magnitude) familiars at the end of the probation, the probation is failed
  • BuyAllHealthCostItemsBeforeMovingToNextFloor
    • if the player has not visited all buy-with-health-shop rooms on the current floor and bought all the items in them before the probation ends, the probation is failed

FamiliarType

  • NormalOrbit
    • stays relative to the master ship, never collides with walls, moves around in smooth-ish arcs from random offset to random offset (similar to movement of armadas around planets on the TLF metamap)
  • SimpleCircleOrbit
    • stays relative to the master ship, never collides with walls, moves around in a smooth-ish circle around the master ship
  • NormalShipBehavior
    • basically acts like a normal ship, according to the behavior flag. For example, you could use this with behavior=Wanderer or behavior=CardinalMover
    • will spawn on top of the master entity
  • PtarthianOrbit
    • behaves like SimpleCircleOrbit, but doesn't try to automatically space out the familiars in a ring.
    • only works properly for a familiar defined by a familiar sub-node on an entity, won't work well if just put in the normal "familiars" list or otherwise deployed

EntityModifierType

These require attributes "math" and "magnitude"

  • MaxHealth
  • MaxShields
  • Range
    • Range that shots will live, specifically. Doesn't do much for BulletPattern stuff.
  • FireRate
  • MovementSpeed
  • ShotSize
    • Applies to the size of shots generated by this entity, not to the entity itself.
  • MySize
    • Applies to the entity itself. So if you want a system that causes its shots to be huge you can give it:
      • <modifier target="MyShots" type="MySize" math="Multiply" magnitude="4" />
  • NormalShotDamage
    • Applies to the damage of shots generated by this entity, not to the entity itself.
    • doesn't apply to melee damage, or the player's missiles
  • MissileShotDamage
    • Applies to the damage of shots generated by this entity, not to the entity itself.
  • AreaOfEffect_Self
    • only makes sense on shots, forces the shot to be aoe
  • MeleeDamage
    • Applies to the damage of shots generated by this entity, not to the entity itself.
    • this is the implicit "on-touch" damage that happens when the player's hitbox overlaps an enemy hitbox
  • IncomingDamage
    • accepts (but does not require) the damage_type attribute
      • if specified, only applies to damage from that source
      • if not specified, applies to all damage
  • Acceleration
  • Deceleration
    • this refers to how quickly an entity slows down from its current speed to zero.
    • If you want to adjust how fast an entity moves, you want MovementSpeed instead.
  • InventoryChangePerSecond
    • also requires "related_item" attribute, see below
    • only does anything when it applies to the player's entity
  • DamagePerSecond
    • does damage to the thing with the modifier every sim-step
    • uses damage_type
  • DamagePerSecond_IfMoving
    • similar to DamagePerSecond, but only has an impact if the ship is moving under power (not decelerating or being knocked back or whatever)
  • MyOwnDamage
    • unlike NormalShotDamage, which only impacts shots generated by the entity with that modifier, this one is for the shots themselves, and modifies the damage it does on impact
  • AddsWeaknessVsAmmoWeapons
    • When applied to shot, causes it to change the weakness-to-energy-weapons of the thing(s) hit by this amount, where 0 is no change and 1 is "increase damage by 100%"
      • This only impacts the next hit from an energy weapon
    • For a player main gun, if it has no modifier of this type targeting MyShots, it implicitly gets one with Add and 0.01
  • AddsWeaknessVsAmmoWeapons_Cap
    • When applied to shot, causes the effect of the previous modifier to never increase the target's weakness above this amount
    • For a player main gun, if it has no modifier of this type targeting MyShots, it implicitly gets one with Add and 0.1
  • ItemCosts
    • modifies requires_item_amount values where related_item matches requires_item_type
    • notably, used with Energy, this can make energy weapons cost more or less energy to fire
  • ItemGains
    • modifies on_pickup_grants_amount values where related_item matches on_pickup_grants_item
    • notably, used with Credits, this can increase the value of future credit drops
  • InventoryCapacity
    • modifies the max amount of related_item that you can store
    • notably, used with Energy, this can increase or decrease the player's energy storage capacity
  • HealthGainOnEnemyKill
    • when an entity (not system) with this kills a ship, it gains this much health
    • partial gain (less than one point) is stored and can be applied as actual health gain if a later kill brings it up to a full point (if it happens in the same room)
  • ItemGainOnEnemyKill
    • when an entity (not system) with this kills a ship, the player's inventory of related_item changes by this amount (can be negative, if you wanted a credit fine for killing something, for example)
  • ItemGainChanceOnEnemyKill
    • when an entity (not system) with this kills a ship, the player's inventory of related_item has this percent chance (expressed between 0 and 100) of gaining 1 of that inventory item type.
  • HardensAfterTimeStationary
    • when an entity has this modifier, and has not moved under power, it shifts towards a dark gray color (maxing out when time not under power >= the value of this modifier)
    • when its time not under power >= the value of this modifier, the ship cannot take damage
  • StoreItemPrices
    • if the player has this, it modifies all credit_cost values
  • Inaccuracy
    • When on a ship or a system, modifies that system's inaccuracy_spread.
  • ShotsDriftTowardsHostileShips_Range
    • if on a system, modifies shots_drift_towards_hostile_ships_range for that system
    • if on an entity, does so for all systems on that entity
  • ShotsDriftTowardsHostileShips_Speed
    • if on a system, modifies shots_drift_towards_hostile_ships_speed for that system
    • if on an entity, does so for all systems on that entity
  • GravityTowardsEnemyShots_PullPerSecond
    • only works on entity, modifies gravity_pull_per_second
    • also effectively sets gravity_affects_shots to true
    • use negative values for repulsion
  • GravityTowardsEnemyShots_FalloffPerUnitDistance
    • only works on entity, modifies gravity_falloff_per_unit_distance
    • also effectively sets gravity_affects_shots to true
  • CriticalHitChance
    • Applies to the damage of shots generated by this entity/system, not to the entity itself
    • If the result of this modifier is > 0, shots emitted by this entity or system have that percent chance (out of 100) of doing double damage on hit, and showing "Crit!" on the thing it hit
    • Note that if this value winds up >= 100 every hit will be a crit
  • CriticalHitDamage
    • Applies to the damage of critical hit shots generated by this entity/system, not to the entity itself
    • Base Critical Hit damage is 2
  • TimeDilation
    • when applied to an entity, makes that entity behave as if the simulation were going faster or slower
    • so if you apply multiply,0.5 with this, the entity will act as if the simulation were going half as fast
    • probably don't try giving this adds, or multiplying by zero or negatives
  • AvoidDamageChance
    • whenever the affected entity would take damage, it has this percent (out of 100) chance of taking zero damage instead
  • LootFloorIndex
    • if on the player, when the player gets loot, acts like the floor is more or less than it is (so adding 1 causes it to consider loot you'd normally only find on the next floor, etc)
  • HealthGains
    • modifies the impact of health pickups
  • RoomWinLootChance
    • modifies the base 10% chance of a room with after-win loot spots having those spots populated after a win
  • NonBossEnemySpawnRate
    • modifies the number of non-boss enemies spawned when a room is entered for the first time
    • if this is less than 1 it randomly doesn't seed stuff on the corresponding % of spots
    • if this is greater than 1 it randomly seeds more enemies on the existing spots (still obeying the normal ship category rules)
  • DoubleItemGainChance
    • Whenever you pick up something that gives a positive amount of some item, you have this chance of getting double.
  • Diffuse_A, Diffuse_R, Diffuse_G, and Diffuse_B
  • Added support for modifier tags to have the types Diffuse_A, Diffuse_R, Diffuse_G, and Diffuse_B.
    • These modify the color of the targeted entity accordingly. Note that the final values range from 0 to 1, where white is 1,1,1,1, black is 1,0,0,0, and transparent is anything where A=0. White is generally the "starting point" you will be working with, so most changes will be you suppressing the colors you don't want, or changing the transparency.
    • Example:
      • If you have a system with:
        • <modifier target="MyShots" type="Diffuse_G" math="Multiply" magnitude="0.2" />
        • <modifier target="OnUse_ParentEntity" type="Diffuse_R" math="Multiply" magnitude="0.3" duration="0.5" />
      • This will make the shots look more red/blue (depending on their original image), and make the firing entity briefly turn more blue/green.


These require that "math" and "magnitude" be absent, as they're just on/off flags

  • ReflectsOffTerrain
    • Comes back at the opposite angle it came in on.
  • RicochetsOffTerrain
    • Comes back at a different angle than it came in on (if it was a shallow angle of incidence, the angle of reflection is shallow, etc)
  • IgnoresCollisionWithNonWallTerrain
    • Passes through Shootable and Bombable obstacles, but not the Indestructible obstacles (look like walls) or the exterior wall that bounds the room.
  • NonMeleeCannotFire
    • Prevents all its normal weapons from firing; only the implicit on-touch-damage systems will work during the duration
  • DestroysTouchingShootables
    • If touches a shootable while this modifier is applied, that shootable is destroyed.
  • DestroysTouchingBombables
    • Same deal with bombables.
  • IgnoresCollisionWithWallTerrain
    • Passes through Indestructible obstacles (look like walls) and the exterior wall that bounds the room. Does not pass through shootables or bombables (but you can set that flag too)
  • SystemDisabledAndInvisible
    • System doesn't render or do anything while this is applied.
  • PhasedOut
    • entity draws at half alpha
    • entity cannot be hit by shots
    • entity is immune to damage
  • PhasedOut_JustTheShotAvoidance
  • PhasedOut_JustTheTransparency
  • Self_DestroyEnemyShots
    • when on a shot, makes it behave like its firing system had shot_destroys_other_shots
  • Self_NotDestroyedOnCollisionWithShip
    • when on a shot, makes it behave like its firing system had shot_is_not_stopped_by_hitting
  • SystemAutoFireDuringSprint
    • while sprinting, if this system is on the player ship and would not normally be fired (its key isn't being held or whatever), it fires anyway and the shots are aimed directly behind the ship
  • RevealsWholeMap
    • when the player has this modifier, the whole map for the current floor is revealed; if the player still has this modifier after a floor transition it reveals that new floor as well
  • RevealsShopsItemRoomsAndBossRoom
    • similar to RevealsWholeMap, but just for shop, item, and boss rooms
  • SystemCannotBeDropped
    • if the player has this on their ammo system, they cannot pick up any item that would cause their ammo system to be destroyed or swapped out
      • same deal with consumable system
      • similar with main gun system (no pickups destroy it, but some can swap it out)
  • CannotPickUpItems
    • if the player has this, they cannot pick up any items
  • SystemShotsInheritEntityMomentum
    • Shots fired by a system modified with this inherit the momentum of the firing ship, and will continue to move in that direction (in addition to any other movement they would do) for their whole duration. Doesn't impact time-to-live, so firing in the direction of movement makes the shots travel further, etc.
  • SteeringDisabled
    • Prevents the entity from changing direction.
  • MustGoAsFastAsPossible
    • Forces the entity to go as fast as possible in whatever direction it's facing (probably best used with SteeringDisabled)
  • TemporarilyGrantSystem
    • Gives the entity this system. If this modifier expires for whatever reason, that system is removed.
  • IgnoresLocks
    • Only matters on the player. If present, the player does not need keycards to open locked doors or chests.
  • HideMinimap
    • Only works on the player. As long as this modifier remains on the player, the minimap will simply not be rendered.
  • MovesTowardReticule
    • Makes the ship or shot move towards the reticule at a speed and acceleration based on that entity. The effects are generally pretty wacky.
  • GetAlternateLoot
    • if on the player, when the player opens an unlocked chest they get loot as if it were a locked chest
  • RevealsSecretHealthRooms
    • if on the player, sacrifical shops are always known
  • MinibossAndCondemnedBossSkipChance
    • if on the player, when entering a miniboss/condemned room for the first time, the boss has this % chance of not seeding
  • ReplacesEntityTypeWithItemsFromPool
    • if this is on the player, when a room is populated, all (related_entity) seeded are replaced with something from (related_item_pool)
    • if the item pool is none, it doesn't replace the entity, it just doesn't seed it
  • IgnoresCollisionWithGlassAndOneWay
    • an entity affected by this can pass through glass walls and one-way tiles
  • ReplacesItemPoolWithOtherItemPool
    • if this is on the player when the game is spawning an item from (related_item_pool) it instead pulls from (related_item_pool_2)
    • only applies when game logic calls for seeding from a pool; if it just calls for seeding a specific entity type that happens to be in pool then that doesn't count
    • if none, related_item_pool_2 is none, just skips seeeding the item rather than replacing it
  • ReplacesShipCategoryWithOtherShipCategory
    • if this is on the player when the game is spawning an enemy from (related_ship_category) it instead pulls from (related_ship_category_2)
    • unlike the item pool one, this applies to specific-entity spawns as well as category-based spawns
    • if none, related_ship_category_2 is none, just skips seeding the entity rather than replacing it

FlockBehaviorType

  • Attacker
    • It comes chasing after you, but moving directly for you and not paying attention to walls.
    • Not going to work well in enclosed areas. Once it gets in firing range it will stop, and it will move out of range if you get a bit closer to it. It’s kiting you, basically.
  • Stationary
    • sits there without moving.
  • Wanderer
    • wanders around from point to point at random.
    • Changes direction when it hits an obstacle or wall, or when it goes a certain distance (defined below).
    • Totally separate properties that are only relevant when using wanderer (so I’ll show them here):
      • wander_distance_min (int)
      • wander_distance_max (int)
      • These two properties, default 300 and 600 respectively, say how far the enemy will move before considering changing directions (assuming it doesn’t hit something else first).
      • In other words, when it starts moving it chooses a target that is rand(min,max) distance away.
  • PathfindingAttacker
    • More sophisticated tracking of you, trying to come after you.
    • Will collide with walls as if was 64x64 in size when in this mode, so big enemies using this may wind up seeming to go through impossible gaps if you use this on them. Best for smaller enemies.
  • LineOfSightAttacker
    • Same as Attacker mode, but will move toward the player if it has line of sight on the player. This will work well in any sort of space, but mainly for enemies that lurk.
    • Note: has no impact on whether or not the entity's weapons fire. To make the weapons require LOS on the player use requires_line_of_sight_of_player_to_fire="true" on the weapon system(s).
  • CardinalMover
    • Moves around in the four cardinal directions only, turning in a new direction when it hits an obstruction. If moves for 5 seconds with no collision, will potentially change direction.
    • Totally separate property that is only relevant when using cardinal mover (so I’ll show it here):
      • cardinal_mover_random_turn_interval (float)
      • Default 5. This is what sets the “if moves for x seconds with no collision, will potentially change direction” number.
  • Zamboni
    • travels up until it hits a wall
    • then goes one tile right
    • then goes down until it hits a wall
    • then goes one tile right
    • repeat
    • if it ever hits a situation where it cannot go right, it repeats the above with "left" instead; and vice versa
  • FamiliarFollower
    • like Attacker
    • on entity: familiar_follower_leash_distance (int)
      • if this entity is at least this far from the player, it pathfinds to the player
      • if this entity is pathfinding to the player, and is no longer at least this far from the player, that path order is cleared and it falls back on Attacker behavior
  • FamiliarCreditGathering
    • pathfinds to the credit drop that it has the shortest path to
    • if it can't find a path to any credit drop it reverts to FamiliarFollower for the rest of the room (to avoid frequent path checks to all the inaccessible credit drops, if any)
    • if it touches a credit drop, it does the normal player-picked-it-up logic
    • on entity: familiar_credit_gatherer_does_something_every_x_credits (int)
      • every time this entity's total gathered credits (in this room; familiar state is not retained between rooms) reaches this value, it does "something" (not yet defined)
  • FamiliarRam
    • like FamiliarFollower
    • on entity: familiar_ram_charge_distance (int)
      • if this entity is within this distance of a hostile target that it can hit, it pathfinds to that entity
      • used in conjunction with a short-ranged attack with an aoe and the destroys_firing_entity flag, it can make a kamikaze ram; otherwise it can be given guns to harass the target
  • FamiliarBeelineFollower, FamiliarAttacksTowardPlayer
    • Basically the same, and works like FamiliarFollower but is more singleminded about reaching the player.

InventoryItemType

  • Energy
  • Keycard
  • Missile
  • Credit
  • HealthShard
  • ExperiencePoint

MathType

  • Add
    • Just adds to whatever base value is there.
  • AdditiveMultiplier
    • Variant combination of Add and Multiply. All modifers with AdditiveMultiplier are added together beforing multiplying the value (applies after Add and before Multiply).
  • Multiply
    • Multiplies the result. Note: all multiply modifiers are applied AFTER all add modifiers.
  • AddAfterMultipliers
    • similar to Add, but applied after multipliers rather than before
  • Floor
    • Prevents the result from being below this value, unless a Set modifier is used to make it so.
    • If multiple Floor modifiers are involved in the same computation, the highest floor takes precedence.
  • Ceiling
    • Prevents the result from being above this value, unless a Set modifier is used to make it so.
    • If multiple Ceiling modifiers are involved in the same computation, the lowest ceiling takes precedence.
  • Set
    • Sets the result to this value, completely ignoring the base value and any add or multiply modifiers.
    • If there's more than one Set modifier for a particular modifier type applying at once, the one with the lowest (non-negative) value takes precedence
      • this allows for capping MaxHealth, where the thing that can override the cap is a lower cap
    • doesn't work with negative values (that support can be added if necessary, but it didn't fit the framework naturally)

AnchorLocation

  • Center
  • Left
  • Right
  • Up
  • Down
  • UpLeft
  • UpRight
  • DownLeft
  • DownRight
  • CenterLeft
  • CenterRight

ShaderType

  • Normal
  • Additive
  • PartialBlend
  • Multiplicative
  • InverseAdditive
  • InverseAdditiveWithAlpha
  • Experimental
  • ExperimentalCutoff
  • HSV
  • HSVAdditive
  • InverseSubtractive
  • Graycolored
  • Grayscale

SystemSlotType

  • None
  • Energy
  • Consumable
  • Attachment
  • MainGun
  • Missile
  • Incredibility

EffectType

  • RerollShopItems
    • Only works inside shops. Any items on the ground that still require purchasing are removed and replaced with other items the shop could normally roll.
    • If related_item_pool is set to something other than none, the reroll uses that specified pool instead.
  • ChangeCurrentHullHealth
    • Changes (target)'s hull health by (magnitude). Can be positive or negative.
    • You can use math="Set" with this to make it just set the health to that value rather than adding/subtracting.
  • ChangeCurrentShieldHealth
    • Changes (target)'s shield health by (magnitude). Can be positive or negative.
    • You can use math="Set" with this to make it just set the health to that value rather than adding/subtracting.
  • CopyModifiers
    • Copies the modifiers defined as sub-nodes of this effect to (target)'s modifier list.
  • CopyModifiersToWorldToAffect
    • Similar to CopyModifiers, but instead of copying them to all currently existing entities in the target group (entities that come into existence after the CopyModifiers effect's execution are not impacted), it copies them to the world and all entities within the target group will check that global list whenever they need to compute something. In this way it affects all current and future entities in that group.
    • The duration on the modifiers still works, whether timed or on-room-transition or on-floor-transition. The UntilWoken duration doesn't really mean anything here though.
  • AddSystem
    • Adds a random item from (related_systems) to each entity matching (targeting).
    • This is an inherently permanent addition, as opposed to EntityModifierType.TemporarilyGrantSystem. So if you want the system to "expire" it will need is_destroyed_after_finite_uses or something like that.
  • RemoveSystem
    • Removes all systems of the types in (related_systems), if present, from each entity matching (targeting). Does not care how those systems came to be there, or what the consequences will be from removing them.
  • SpawnEnemy
    • Spawns a random pick from (related_entities) within (magnitude) of the related entity.
    • Also gives that entity a momentum between (second_magnitude) and (third_magnitude) at a random angle, if second_magnitude > 0 and third_magnitude >= second_magnitude
    • "the related entity" is the parent entity of the related system if applicable, or of the related entity otherwise, or just the player if neither of those is applicable.
  • StartMovementDrivingPattern
    • any target entity that isn't currently following bullet pattern logic starts following the first bullet in (related_pattern)
    • effect tags with type StartMovementDrivingPattern now support related_pattern having a list of patterns to be randomly selected from on each triggering.
  • ChangeCurrentInventory
    • instantly changes the player's inventory of (related_item) by (magnitude) according to (math, default Add)
    • normally EntityModifierType.InventoryChangePerSecond takes care of any need for this, but when you want to add an exact amount (like with the probation rewards) this avoids that modifier's imprecision.
  • WinRoom
    • When used, the player automatically wins the current room.

EffectTiming

  • OnUse
    • For effects on a system. Means the effect happens every time the system is activated. So if it's a shot-firing system, that's when the shot is emitted, not when it hits whatever.
  • OnRoomSwitch
    • For effects on a system. Means the effect happens every time the player switches rooms.
  • OnRoomSwitch_OnlyFirstTimeInRoom
    • For effects on a system. Similar to OnRoomSwitch, but only applies the first time a given room is entered.
  • OnModifierAdded
    • For effects on a modifier. Means the effect happens once, when the modifier is added to an entity.
  • OnModifierRemoved
    • For effects on a modifier. Means the effect happens once, when the modifier is removed (for whatever reason, not specific to probation) from an entity.
  • OnEnemyKilled_ByAnySystem
    • For effects on a system. Means the effect happens every time this system's parent entity kills something.
  • OnEnemyKilled_ByMe
    • For effects on a system. Means the effect happens every time this system kills something.
  • OnEntry
    • For effects on a floor or on a (player) system. Means the effect happens once, when the player enters the floor.
  • OnLeaving
    • For effects on a floor or on a (player) system. Means the effect happens once, when the player leaves the floor.

EffectTargeting

  • Player
    • Targets the player entity, regardless of where this effect is.
  • AllEnemies
  • AllPlayerFamiliars
  • AllShots
  • AllEnemyShots
  • AllPlayerShots
  • Self
    • Targets the parent entity of the related system, if any, or the related entity if there's no specific system
  • AllNormalEnemiesAndShots
  • NonCondemnedBossesAndShots
  • AllAutoPickups

ConditionType

  • PlayerHasNoShields
  • PlayerIsMoving
  • EntityIsAtFullHealth, EntityIsNotAtFullHealth
    • If this effect is on a system, refers to that system's parent entity
    • Otherwise, refers to the player

BulletConditionalSpawnRule

  • OnlyOnWindow
    • if the spawn point is not on a window tile, the bullet does not spawn
  • OnlyOnNonWindowSolid
    • if the spawn point is on a window tile (or no tile at all), the bullet does not spawn
  • OnlyInOuterSpace
    • if the room's environment is not OpenSpace, the bullet does not spawn

The Meaning Of Floor Numbers (Not Really An Enum)

  • 1
    • The first floor is always the easiest, and is the first one you visit. Naturally.
  • 5
    • For some time, runs end after 5 floors. After winning 10 runs, further floors open up.
    • This floor has the "final" boss in it.
  • 7
    • This floor has the REAL final boss in it, but is only accessible after winning 10 of the shorter runs.