Redesigning the Monster Spawner

Anything and everything related to the Evolution server.
Post Reply
DW_Ant
DW Clan Member
Posts: 2679
Joined: Sat Jun 21, 2008 11:00 pm
Location: North Carolina

Attention all Monster Evolution mappers, I'm currently redesigning the monster spawner to make it easier for you to build your maps. I'm calling for your attention to make sure that this new tool suits your needs.

This is the first draft. Let me know if you believe something should change/should be added/removed.

The goal:
  • Easier to use: Lesser learning curve.
    All variables should be self explanatory. When the spawner is triggered, it should behave the way you imagined it to be.
  • Faster to use: It should be nearly ready to go when you place the spawner by setting the default variables to appropriate variables.
    Lesser variables that aren't really being used should be put off to the side or removed altogether. If you want to make a quick conversion, the only changes you should set for the monster spawner is: what to spawn, where to spawn, when to spawn, and how many to spawn.
  • Flexibility: This monster spawner should have more functions. Because the old spawner had multiple conflicting properties, it could not have the new functionalities this new monster spawner has.
  • Independent: Minimal influence from external monster spawners. Monsters or other monster spawners should not influence the spawner.
  • Optimized: Improve several algorithms to make the monster spawner more efficient. Make the computers happy.


Here are the changes I plan to make:
Monster Listing
The Monster spawner will track the monsters it spawns. Instead of having a timer function count every single monster to check its parent factory, it'll be much faster to simply track all of its monsters in a single list.
This will fix the following:
  • The monster spawners will no longer consider monsters that spawned from other monsters (meaning that monster spawners will no longer have to share item counts when considering if it spawned enough monsters or not).
  • Lesser for each iterations means it'll be faster to compute.
  • Enable the monster spawner influence its monsters even after their spawn.
Dynamic Spawn Points
The old monster spawner limits the mapper to at most 16 spawn points. This monster spawner can have infinite number of spawn points.

Linking other Monster Spawners
You can choose if you want the monster spawners to talk to each other. That way you can choose if you want the spawners to share monster counts, attributes, difficulty adjustments, etc...

Dynamic Difficulty
This monster spawner can adjust multiple properties based on not only the number of players but also on player levels, other spawner states, map progression, time, chance, player states (dead or num player monsters), etc...

bEnabled Property
The monster spawner will have a property that may pause all production. This will give the mapper greater control when to spawn monsters even after it spawned monsters. This will also make the monster spawner reset-friendly. Instead of destroying the monster spawner, simply disable it. This is useful in case you want to reset the monster spawner for multiple uses, or when playing a game with multiple rounds.

Multiple Trigger Types
Spawn all monsters when triggered
Spawn groups of monsters per trigger
Toggle pause or continue spawning monsters
The choice is yours.




List of Hidden Categories
  • Advanced
  • Collision
  • Force
  • Karma
  • LightColor
  • Lighting
  • Movement
  • Sound

List of Active Categories
  • Display
  • Difficulty Changes
  • Events
  • Monster Adv Customization
  • Monster AI
  • Monster Attributes
  • Monster Events
  • Monster Sounds
  • Monster Spawning
  • Spawning Requirements
  • Object
  • Unique

List of property changes
Display
Draw Scale: Size of the spawner itself. Only visible in the editor.
Default value = 2 (ultimately depends on what texture is selected for the sprite).
Texture (changes the display how the sprite appears in the editor). I simply plan on changing the visual appearance for the sprite to make it appear different from any keypoint actor.


Difficulty Changes
  • AssociatedSpawners: A dynamic list of monster spawners that will affect this spawner's behavior. What they affect is determined based on the mapper specifications in the properties beneath this section.
    • AssociatedMonsterSpawner: The monster spawner that is affecting this spawner.
    • bSharedMaxMonstersAtOnce: If true, then this monster spawner will consider all of the monsters spawned from the other spawner and add all of this spawner's existing monsters to see if the total number of monsters are still below this spawner's MaxMonstersAtOnce property. Note, this spawner will actually go through the entire list of AssociatedSpawners and consider all spawners with bSharedMaxMonstersAtOnce that is set to true.
      Default value = false
    • PropertyAdjustments: List of properties that should change based on the AssociatedMonsterSpawner's current bEnabled property. These properties will change upon first trigger.
      • bAdjustProperties: If true, then the spawner will adjust its properties only if the spawner is either Enabled/disabled.
        Default value = false
      • bAdjustWhenEnabled: If the other spawner is enabled then adjust the properties. Otherwise only adjust the properties if the other spawner is disabled.
        Default value = true
      • NewChanceToSpawn: If greater than or equal to 0, then this will replace the ChanceToSpawn property with this value.
        Default value = -1
      • NewDamage: If greater than or equal to 0, then this will replace the DamageMultiplier property.
        Default value = -1
      • NewHealth: If greater than or equal to 0, then this will replace the HealthMultiplier property.
        Default value = -1
      • NewMonster: If not none, then this will replace the MonsterName with this value.
      • NewLives: If not default, then this property will replace the Lives property.
        Default value = -1 - (-1)
      • NewScore: If greater than or equal to 0, then this will replace the ScoreMultiplier property.
        Default value = -1
      • NewSpeed: If greater than or equal to 0, then this will replace the SpeedMultiplier property.
        Default value = -1
  • PlayerChanges: Adjusts the monster spawner's properties based on the number of players in the server.
    • bUsePlayerChanges: If true, then the spawner will adjust the game difficulty based on number of players.
      Default value = true
    • bCountDeadPlayers: If true, then the spawner will count the dead players.
      Default value = true
    • NewTriggerChance: Adjusts the TriggerChance property based on number of players. Formula is TriggerChance += (x * numPlayers)
      Default value = 0
    • NewDamageFactor: Adjusts the DamageMultiplier property based on number of players. Formula is DamageMultiplier += (x * numPlayers)
      Default value = 0
    • NewHealthFactor: Adjusts the HealthMultiplier property based on number of players.
      Formula is HealthMultiplier *= 1.5 + (ln(x*numPlayers)/2.303); Note, setting this value to 0 and below will disable this check (doesn't adjust monster health based on number of players).
      Default value = 0.5 (this is the current value when the server adjusts the monster's health based on number of players).
    • NewLives: Readjust the number of lives based on number of players
      • bRecalcExtraLives: If true, then the lives is adjusted based on number of players.
        Default value = true
      • Method: Determine which formula to use when adding lives.
        • AddWeight: Add weight to the lives randomization based on how full the server is. The greater the popularity, the greater the chance it will spawn max monsters. (Default)
        • Stacked: Basically adds additional monsters on top of the Lives property based on number of players. Uses factor property.
      • Factor: If Method equals to Stacked, then this is the factor when determine the number of monsters. This is the formula:
        NumMonsters = Rand(Lives.Max - Lives.Min) + Lives.Min + (Factor * numPlayers)
        Default value = 0.6
    • NewMonster: List of properties that overrides the monster class based on number of players. This is a list (dynamic array). If length is greater than 0, then the spawner will go through this list before spawning a monster.
      • PlayerRange: The range of players that must be before overriding the MonsterClass property.
      • NewMonsterClass: The name of the monster class if the player range is satisfied here.
    • NewSpeed: Adjusts the SpeedMultiplier property based on number of players. Formula is SpeedMultiplier += (x * numPlayers)
      Default value = 0
  • PlayerLevelChanges: Handles the spawner properties based on player levels.
    • bUsePlayerLevels: If true, then the spawner will consider the player levels before adjusting any property.
      Default value = false
    • ConsideredLevel: This determines what level is important to consider when calculating the new values. The options are: Lowest level, Average level, Highest Level.
      Default value = Average level
    • NewTriggerChance: Adjusts the TriggerChance property based on the level value. Formula is TriggerChance += (x * levelValue)
      Default value = 0
    • NewDamageFactor: Adjusts the DamageMultiplier property based on level value. Formula is DamageMultiplier += (x * levelValue)
      Default value = 0
    • NewHealthFactor: Adjusts the HealthMultiplier property based on level value.
      Formula is HealthMultiplier *= 1.5 + (ln(x*levelValue)/2.303); Note, setting this value to 0 and below will disable this check (doesn't adjust monster health based on levle value).
      Default value = 0.2
    • NewMonster: List of properties that overrides the monster class based on level value. This is a list (dynamic array). If length is greater than 0, then the spawner will go through this list before spawning a monster.
      • LevelRange: The range of levels that must be before overriding the MonsterClass property.
      • NewMonsterClass: The name of the monster class if the level range is satisfied here.
    • NewSpeed: Adjusts the SpeedMultiplier property based on level value. Formula is SpeedMultiplier += (x * levelValue)
      Default value = 0
  • VariableStorageChanges: With association with a variable storage actor, the mapper could set in the VariableStorage actor, the spawner will go through this list and adjust the monster properties if the required condition is satisfied.
    • ConditionalTriggerCheck: The mapper could place a ConditionalTrigger actor. Alone, that actor could check a variety of things such as variables and timing.
    • NewTriggerChance: if greater than or equal to 0, then this will Override the TriggerChance property.
      Default value = -1
    • NewDamageFactor: if greater than or equal to 0, this property will override the DamageMultiplier property.
      Default value = -1
    • NewHealthFactor: if greater than or equal to 0, this property will override the HealthMultiplier property.
      Default value = -1
    • NewMonster: If not null, then this property will override the monster class.
    • NewScale: If both (min and max) are greater than or equal to 0, this property will override the ScaleMultiplier property.
      Default value = -1 - (-1)
    • NewSpeed: If greater than or equal to 0, this property will override the SpeedMultiplier property.
      Default value = -1

Events
  • Event: The event to trigger when the spawner runs out of monsters to spawn.
    Default value = 'OutofMonsters'
  • FinishedEvent: The event to trigger when the spawner runs out of monsters to spawn, and all of its monsters are dead.
    Default value = 'AllMonstersDead'
  • NukingTag: When a scripted action (clear monsters) is executing, all spawners matching this tag will permanently disable itself and kill all of its monsters.
    Default value = 'ClearMonsters'
  • SpawnPointTag: Tag of the spawn points you want the spawner to consider. This determines where to place the monsters.
    Default value = 'SpawnPointTagHere'
  • Tag: When an event matching this tag is triggered, this monster spawner will respond to the message. By default it will spawn all of its monsters. See [anchor= goto=TriggerType]TriggerType[/anchor].
    Default value = 'SpawnMonsters'

Monster Adv Customization
  • AmmoClass: The AmmoClass is useful to tell the monster how to use their new projectiles. For example, if the monster is shooting an explosive projectile, the ammo class will tell the monster to aim at the player's feet for splash damage. Only consider this property if you are customizing the monster's projectiles.
  • DeathActors: This is a dynamic array that tells the monster to spawn these actors when it dies. These could be emitters, pickups, explosives.
  • MeleeAttack: A list of properties that handles melee customization. Leaving this to default will reference the monster's default melee properties.
    • bUseMeleeAttack: If true, then the spawner will give the monster the new melee properties.
    • DamageType: Determines the death message when the monster kills someone with this attack. This may also determine the element type (fire, cold, lightning, poison).
    • MeleeDamage: Determines the damage for each strike.
    • MeleeFX: Emitter to spawn when melee attacking (in case you want something like fire breath)
    • MeleeRangeMultiple: Multiplies the monster's melee range. Setting this to 2 doubles the monster's reach. 0.5 half.
      Default value = 1.0
  • Minion Summons: A list of properties that handles summoning/resurrecting minions. Allows mapper to customize what monster(s) this monster could summon.
    • bUseSummoning: If true, then the spawner will give the monster the summoning properties.
    • Max Summons: How many minions can be alive at once?
    • ResurrectionInterval: How often should this monster check to resurrect one of its fallen monsters. 0 means don't resurrect at all.
    • SummonAnim: Animation to play when summoning/resurrecting monsters. If null then it will use the monster's default animations.
    • SummonFX: Emitter to spawn for each monster it spawns. It's not attached to the minion. However the mapper can customize the emitter to attach itself to the owner upon spawn.
    • Summons: A list of monsters that this monster can summon. First time, it will spawn all of its monsters. When resurrecting dead monsters, it will randomly pick a monster from this list to replace the monster.
  • RangedAttacks: List of properties that overrides the monster's ranged attacks.
    • bUseRangedAttacks: If true, then the spawner will give the new ranged properties to the monster.
    • NewAttacks: A dynamic list of potential ranged attacks this monster can utilize.
      • AimError: Determines how accurate the monster should hit. 0 means perfect accuracy.
      • BeamFX: Emitter to spawn when shooting a hitscan beam.
      • bHitScan: If true, then this attack will be hitscan.
      • HitScanDamage: How much damage should each hit deal.
        Default value = 45-75
      • HitScanDamageType: Determines the death message if the monster managed to kill someone with this attack. This also determines the element type (fire, cold, lightning, poison).
      • HitScanRange: Determines how far should the beam reach.
        Default value = 8192
      • Projectile Class: What projectile should this monster shoot out. This property is only considered if bHitScan is false. The projectile, itself, holds information regarding to speed, damage, damagetypes, appearances, momentum, death messages, seeking, etc...
    • ShootSound: Sound to play when the monster is shooting its new attack.
  • SpawnActors: List of actors to spawn when the monster spawns. Inventory items will automatically be given to the monster. Controllers will automatically override the monster's current controller. Emitters will only be attached to the monster if the emitter's default physics is set to PHYS_Trailer.
    Default value=[0]: Class'XEffects.NewTransEffect' (basic teleportation emitter)
  • Spells: List of properties that handles what spells this monster could cast.
    • bUseSpellCasting: If true, then the spawner will give the monster the spell properties.
    • CastAnim: Animation to play when casting spells. If left null then the monster will use the default animations.
    • CastFX: Emitter to spawn when casting spells. If null then the monster will use the default FXSpellCast emitter.
    • CastInterval: How often should this monster cast a spell (in seconds).
      Default value = 12
    • Spells: A list of potential spells this monster could cast.
  • Teleportation: A list of properties that handle the monster's teleportation behavior.
    • ArrivalActor: Actor to spawn when the monster teleports. Location is determined on monster's new location. Actors could be anything that can be placed in map (emitters, explosions, etc...)
    • bUseTeleportation: If true, then the spawner will give the monster the teleport properties.
    • DepartureActor: Actor spawn when the monster teleports. Location is determined on the monster's old location. Actors could be anything that can be placed in map (emitters, explosions, etc...)
    • DistanceThreshold: Distance to consider when the monster is thinking if it should teleport or not. Behavior varies based on TeleportType.
    • TeleportAnim: Animation to play when teleporting. If null, then the monster will use default animations.
    • TeleportType: A list of different teleportation behaviors.
      • TA_SearchNavigationPoints (default): Goes through a list of navigation points (path nodes) and picks the node closest to its enemy. Monster will attempt to teleport if its enemy distance is greater than the DistanceThreshold.
      • TA_TeleportOnTopofEnemy: the monster will teleport very close to the enemy if enemy's distance is greater than the DistanceThreshold.
      • TA_TeleportAwayFromEnemy: the monster will teleport as far as it possibly can away from the enemy only if the enemy's distance is smaller than the DistanceThreshold.
      • TA_TeleportToCloserRange: The monster will teleport around the midpoint between the monster's old location and the enemy's location. It will attempt to teleport if the enemy's distance is greater than the DistanceThreshold.
Monster AI
  • AlarmTag: Tag of the alarm point the monster should run to when it spots an enemy.
  • Alertness: Sets the monster's reaction time when they see a player (ranges from -1 to 1)
    Default value = 0.25
  • AttitdueToPlayer: Monster's attitude when they see a player.
    Default value = Hate
  • bCanUse: If true, then the monster can interact with DWUseTriggers
    Default value = false
  • bDelayedPatrol: If true, the monster will not start patroling until it is triggered.
    Default value = false
  • bFriendlyFire: If true, then the monster can be harmed by teammates or other monsters with matching bFriendlyMonster bool
    Default value = false
  • bFriendlyMonster: If true, then the monster will be on the attacker's team.
    Default value = false
  • bIsTeamLeader: If this monster is in a team, then the this monster is the leader of the pack. For example, the leader in a group of dice playing Krall is the one responsible for spawning the die. If this is false and the monster is in a team, then this monster will follow its leader whenever possible.
    Default value = false
  • bNoCrushVehicle: If true, then this monster will resist getting crushed by vehicles (mantas, raptors, cicadas, etc...)
    Default value = true
  • bPlayerCanDamage: If true, then the attackers can damage this monster.
    Default value = true
  • bQuiet: If true, then the monster will not make extraneous sounds (such as the zombie's grunting sounds)
    Default value = false
  • bRespondToStealthAlerts: If true, then the monster will listen for any alerts (called by other monsters when they are under attack). If the alert is within the monster's hearing radius, then they will attack the shooter.
    Default value = true
  • HearingRadius: How far the monster can hear sounds. This also determines if this monster should be alert of the attackers presence if they strike a nearby monster.
    Default value = 2800
  • Orders: Set the monster's initial state. See Orders
    Default value = Waiting
  • OrderTag: Tag of the actor associated with the monster's order. Usually is tag of ambush points or patrol points.
  • SightRadius: How far can this monster see.
    Default value = 5000
    StartingAnim: If not null, then this monster loop through this animation at startup.
  • TeamTag: Name of the team this monster belongs to. If the team has a leader, then this monster will protect and follow the leader.

Monster Attributes
  • bDestroyWhenDie: If true, then the monster will immediately disappear when it dies. This is useful if you want any death emitters to replace the monster's death sequence.
    Default value = false
  • bIsBoss: If true, then this monster will have special properties. Bosses typically don't have uninterpretable animations, extra health based on number of players, more difficult to curse, etc... Should this go to the Monster AI category?
    Default value = false
  • ChanceToReflectProjectiles: If greater than or equal to 0, then the monster has a chance to deflect energetic projectiles (such as a gold angus deflecting a shock beam). 0 means 0% chance. 1 means 100% chance.
    If less than zero, then it'll use default monster chance to reflect properties.
    Default value = -1
  • DamageModifier: Multiply the damage this monster does with this number.
    Default value = 1
  • GibType: What kind of gibs should this monster shoot out when getting hit. For example, robot gibs appear purple and metallic. Aliens are green. Humans red. None uses default gibs.
  • HealthModifier: Multiply the monster's health with this number.
    Default value = 1
  • MonsterSkins: A static array of size 8 that contains a list of skins the monster should wear. It is static because clients must be able to replicate the array to display the monster's skin online properly. None slots means that the monster should wear default skins.
  • MonsterTypeOverride: Determines what kind of monster this is. Is it feral, sentient, undead, demon, robot, thing, etc...
    Default value = MT_None (uses monsters default type)
  • Resistances: A list of properties that handles the monster's resistances.
    • ColdResistance: If not default, then the monster's cold resistance is this number. 0.5 = 50%, 115 = 115%, -0.25 = 25%
      Default value = -0.000001
    • FireResistance: If not default, then the monster's fire resistance is this number. 0.5 = 50%, 115 = 115%, -0.25 = 25%
      Default value = -0.000001
    • LightningResistance: If not default, then the monster's lightning resistance is this number. 0.5 = 50%, 115 = 115%, -0.25 = 25%
      Default value = -0.000001
    • PhysicalResistance: If not default, then the monster's physical resistance is this number. 0.5 = 50%, 115 = 115%, -0.25 = 25%
      Default value = -0.000001
    • PoisonResistance: If not default, then the monster's poison resistance is this number. 0.5 = 50%, 115 = 115%, -0.25 = 25%
      Default value = -0.000001
    • SneakAttackDamageScale: When the monster is attacked while it's asleep or unaware of the attacker, then the damage is multiplied with this number.
      Default value = 2
    • VehicleResistance: Monster's resistance against any attack when the attacker is in a vehicle. If not default, then the monster's vehicle resistance is this number. 0.5 = 50%, 115 = 115%, -0.25 = 25%
      Default value = -0.000001
  • ScaleMultiplier: Adjusts the monster's size. It's a ranged value to allow variation. When there is a variation, some of the monster's attributes will automatically be adjusted based on the monster's relative size compared to the ScaleMultiplier's Min and Max values. The bigger monsters should be stronger than the smaller monster.
    Default value = 1-1
  • ScoreMultiplier: Multiply the monster's score value with this number. The monster's score value determines how much experience should be rewarded to the attackers. If 0, then the monster is considered a 0-score monster where several abilities (such as Life Siphon, Energy Leech, Paladin's Perk, and Necro's soul steal) will not work. If there is a precision issue (ie: 0.25 * monster's default score value = 0.001), then the score value will automatically be set to 1 to allow abilities to work. If this number is 0 or below, then the monster's score value is 0.
    Default value = 1
  • SpeedMultiplier: Multiply the monster's ground, flying, and swimming speed with this number.
    Default value = 1
  • TimeDuration: How long can this monster live for (in seconds). The monster will automatically disappear when its time duration runs out. If 0, then the monster will not have a time limit.
    Default value = 0

Monster Events
  • bAggroEventOnce: If true, then the monster can only trigger the AggroEvent at most one time.
    Default vlaue = false
  • bHateWhenTriggered: If true, then the monster will attack the event instigator.
    Default value = true
  • bKillMonsterWhenTriggered: If true, then the monster will die when it's triggered.
    Default value = false
  • bToggleVulnerability: If true, then the monster's god mode property will be toggled.
    Default value = false
  • AggroEvent: Event to trigger when the monster is aware of the enemy's presence.
  • KilledEvent: Event to trigger when the monster dies.
  • MonsterTag: Monster's tag.
  • SpawnEvent: Event to trigger when the monster spawns. Triggers every time a monster spawned from this spawner.
Monster Sounds
  • bFullVolume: If true, then the monster's sound volume is maxed.
    Default value = false
  • bPitchedBasedSize: If true, then the monster's pitch will vary based on the monster's size relative to the monster's default size. Small monster's have higher pitch. Big monsters have a lower pitch.
    Default value = true
  • ChallengeSounds: Sounds to play when the monster sees a player.
  • DeathSounds: Sounds to play when the monster dies.
  • HitSounds: Sounds to play when the monster takes damage.
  • MonsterAmbientSound: Sound to loop while the monster is alive.
  • SoundVolumeMultiplier: Multiply the monster's sound volume with this value.
    Default value = 1

Monster Spawning
  • bImmediateReplace: When a monster dies, the spawner will immediately attempt to spawn a replacement.
    Default value = true
  • Interval: Time interval needed to spawn another monster. If 0, the spawner will attempt to spawn all monsters simultaneously.
    Default value = 0
  • Lives: Number of spawns. If 0, then it's infinite monsters. Also this is a ranged number (completely replacing the RandomExtraLives property from the old spawner). It will randomly spawn monsters from min to max value. The max value will be adjusted based on the Difficulty Changes category.
    Default value = 1-1
  • MonsterClass: The name of the monster it should spawn. Reference the DWMonsterRoster for a list of monster names. This property will only be considered if MonsterIndex is not 0-0.
  • MonsterIndex: Spawns a range of monsters from Min to Max value. These numbers are the index numbers where the monster is positioned at the DWMonsterRoster.
    Default value=0-0 (Nali Cow)
  • MonsterPackage: The name of the package this monster belongs to. If spawning a monster based on MonsterClass, then this will be a helpful to narrow down the search.
    Default value='SearchWholeTable'
  • MonstersPerTrigger: If TriggerType is equal to GroupedTrigger, then every time the spawner is triggered, it will spawn this many monsters per trigger. If triggered multiple times, then the number of pending monsters is added to the existing pending monsters.
    Default value=1-1
  • MaxMonstersAtOnce: Limit the number of living monsters the spawner can have alive simultaneously.
    Default value = 32
  • [anchor=TriggerType goto=]TriggerType[/anchor]: Determines the spawner's behavior when it's triggered.
    • SpawnAll: when triggered, it will attempt to spawn all monsters. It will only pause when it reaches MaxMonstersAtOnce or when it runs out of lives. A monster will spawn once every Interval seconds. (this is default)
    • GroupedTrigger: when triggered, it will spawn groups of monsters. It will add to pending number of monsters based on the MonstersPerTrigger property. It will spawn 1 monster per Interval seconds. It will pause when it reaches MaxMonstersAtOnce, or when it runs out of lives, or when number of pending monsters reaches 0.
    • ToggleTrigger: when triggered, it will spawn monsters (at Interval seconds) until it is triggered again. It will only pause while it's enabled when it reaches MaxMonstersAtOnce or when it runs out of lives.

Spawning Requirements
  • ChanceToSpawn: Pure randomized chance to actually spawn monsters. This is determined only at the first trigger (this is not recalculated every time it's triggered). 1.0 = 100% chance to spawn. 0.25 = 25% chance to spawn. 0 = 0% chance to spawn.
    Default value = 1.0
  • PiercingRange: The strength of the piercing factor must range between these values to be considered. This is only checked upon first trigger.
    Default value = 0 - 1
  • PlayerMonsterCheck: This is a list of checks that handles the player monster conditions. The spawner will go through the entire list, if all conditions are satisfied, then the spawner will spawn its monsters.
    • bDedicatedOnly: If true, then only dedicated monsters are considered.
      Default value = false
    • bIncludeDedicated: If true, then the dedicated monsters are considered.
      Default value = true
    • bIncludeFriendlyPM: If true, then friendly player monsters are considered.
      Default value = false
    • PlayerMonsterRange: The number of player monsters must range between these values to satisify.
      Default value = 0 - 32
  • PlayerRange: The number of players must be between min and max value to be able to spawn its monsters. This is only considered upon first trigger.
    Default value = 0 - 32
  • Level checks: This is a list of level requirements. If all conditions are satisfied, then it will spawn its monsters. It is only checked upon first trigger.
    • LevelCheckType: Check which of the following: lowest level, average level, highest level.
      Default value = AverageLevel
    • LevelRange: Must be between min and max values to satisfy.
      Default value = 0 - 9999
  • TimerRange: The game time must be between these values to spawn its monsters. Set values to negative to exclude this check.
    Default value = (-1) - (-1)
  • TriggerChance: When it's triggered, this is the % chance of it actually responding to the signal. 1.0 = 100% chance to respond to the trigger. 0.25 = 25% chance to respond to the trigger.
    Default value = 1.0
Object
  • bDebug: if true, then the monster spawner will display many messages in the mapper's UT2004/System/UT2004.log file. It will inform the mapper which spawn points are associated with the spawner, when the spawner was triggered, if the monster spawner failed to spawn any monsters, refused to spawn (via spawn requirements), when the spawner changes (via Difficulty Changes), etc...
    Default value = false

Unique
  • bAdvSkeletalMage: for Skeletal Mages only. If true, then the skeletal mages may cast their alternative magic.
    Default value = false
  • bHasRangedAttack: for Dinotopia monsters. If true, then certain dinosaurs will used their ranged attacks.
    Default value = false
  • bRidable: for dragons only. If true, then the players can ride the dragons.
    Default value = false
  • bWallWalk: for Xenomorphs only. If true, then the xenomorph can walk on walls.
    Default value = true
  • bWearAltSkin: for monsters with multiple skin appearances, this will tell the monster to wear its alternative skin. For mole, it would be the green skin for example. For Dinosaurs, it'll be zombie skin.
    Default value = false
  • DinosaurGender: for Dinosaurs only. This will determine which skin to wear based on the dinosaur gender.
    Default value = DinoSkin_Random
  • DoomArchvileResurrect: If true, then the Archvile can resurrect fallen monsters.
    Default value = true
  • DoomArchvileCanSummon: If true, then the Archvile can summon monsters.
    Default value = true
  • DoomFatZombieThrowBarrel: If true, then the fat zombie can throw barrels.
    Default value = false
  • DoomMaledictCanSummon: If true, then the Maledict can summon Lost Souls.
    Default value = true
  • DoomSawyerDecapitateEnemy: If true, then the Sawyers can instantly kill its enemies if it manages to strike its head.
    Default value = true
  • MiniBossProjectiles: Override the miniboss's projectile appearances. Static array of size 3.
    • StaticMesh: The static Mesh appearance.
    • Sound: The sound this projectile will make when it lands.
    Default value = [0].StaticMesh = StaticMesh'AW-Junk.Pieces.HugeMech'
    [0].Sound = Sound'ONSVehicleSounds-S.CollisionSounds.VehicleCollision'
    [1].StaticMesh = StaticMesh'AW-Junk.Complex.SmashedGasTank'
    [1].Sound = Sound'GeneralAmbience.metalfx15'
    [2].StaticMesh = StaticMesh'AW-Junk.Metal.AW-TwistedBeam1'
    [2].Sound = Sound'GeneralAmbience.metalfx14'
  • NaliFighter_MonsterWeapon: Determines which set of weapons a NaliFighter could spawn with.
    • Default: Rocket launcher, Link Gun, Bio Rifle (default)
    • Custom: Uses NaliFighter_SpecificWeapon property
    • SpamBioLinkMiniAssault: Bio Rifle, Link Gun, Minigun, Assault Rifle
    • PrecisionShockLightningSniper: Shock Rifle, Lightning Gun, Sniper Rifle
    • HeavyFlakRockets: Flak Cannon, Rocket launcher
    • ExtraHeavyFlakRockCannon: Flak Cannon (extra shrapnel), Rocket Launcher, Shock Cannon, Heavy Cannon
    • Cannon: Shock Cannon, Heavy Cannon
    • SuperWeapons: Shock Cannon, Heavy Cannon, Redeemer
    • AllButSuper: All weapons excluding Shock Cannon, Heavy Cannon, Redeemer
    • AllButDeemer: All weapons excluding Redeemer
    • All: All weapons
    Note: Translocators, external weapons (such as U2Weapons), Super Shock Rifle, Ion Painters, Ball Launcher, AMRiL, AVRiL, and Target Painter are excluded. However, the mapper can choose if they want those weapons through the NaliFighter_SpecificWeapon property.
    NaliFighter_SpecificWeapon: This is a dynamic list where the mapper can set the name of the weapon(s). This will be set by class instead of string. This will save the mapper time from having to make sure to spell out each weapon correctly. This will also ensures that the weapons are loaded onto the map.
  • OSMBruteTurret: for Brutes only. The Brute will remain stationary and will shoot at any hostile within sight radius. (doesn't bother charging).
    Default value = false
  • OSMKrallDicePlayer: for Krall only. If true, then this Krall will attempt to play dice with other Krall with matching TeamTag.
    Default value = false
  • OSMKrallSleeping: for Krall only. If true, then the Krall will be in a sleeping state. The sleep animation is determined by StartingAnimation.
    Default value = false
  • OSMSkaarjButtonPusher: for Skaarj only. If true then the skaarj will loop through random button pushing animations. Reduces alertness until something aggros it.
    Default value = false
  • OSMSkaarjFeignDeath: for Skaarj only. If true, then the skaarj will lay down until aggroed.
    Default value = false
  • OSMWarlordhasMutilatingGib: for Warlords only. If true, then the Warlord will mutilate a gib until aggroed.
    Default value = false
  • OSMWarlordtacticalTeleporting: if true, then the Warlord will teleport to various navigation points in map depending on its situation.
    Default value = false
  • OSMWarlordTeleportWhenHurt: if true, then the Warlord will teleport away when it's injured.
    Default value = false
  • OSMNaliCowHasBaby: if true, then the Nali Cow will spawn with multiple babies.
    Default value = false

Again, this is the first draft. Anything can easily change here. Don't hesitate to make suggestions. Please let me know what you think before I start execution. I want to start around early December.
The difference between successful people from others is
not in the lack of strength,
not in the lack of knowledge,
but rather in the lack of will.

FFE466

_________________________
{F}{AH}{CivFR}{XC}{U}{DF}{CJ}{SD}
necro
Killer in Training
Posts: 34
Joined: Fri Feb 17, 2012 5:11 pm

I only took a quick read through, but I'll add a suggestion to include a "Random Monster" type of spawning. Provide a dynamic array of monsters, and randomly spawn the configured number of them. You could optionally include custom number of monsters, weighted monsters, etc..
DW_Ant
DW Clan Member
Posts: 2679
Joined: Sat Jun 21, 2008 11:00 pm
Location: North Carolina

Nice suggestion, Necro!

I should replace the MonsterName, MonsterIndex, and MonsterPackage property with the following property:

  • MonsterClass: Determines the monster class. This is a dynamic list. For each monster spawn attempt, it will randomly pick an element from this list. Each element can have a different method in obtaining the monster class.
    • aMethod: Determines which property to use. Can only pick one method per element.
      • ByName: Grab the monster's associated name that's set in the DWMonsterRoster (default).
      • ByClass: Ignores the DWMonsterRoster. This directly grabs the monster class. Very useful if you want custom monsters for your map.
      • ByIndex: Grab the monster's associated index position in the DWMonsterRoster.
    • MonsterIndex: This is a range of associated index values grabbed from the DWMonsterRoster. A random monster class will be chosen within this range every time this MonsterClass element is randomly selected. This property is only used when aMethod is ByIndex.
      Default value = 0-0
    • MonsterClass: This is the monster class you want to spawn. This property will be used only if aMethod is set to ByClass.
    • MonsterName: This is the name of the monster you want to get from the DWMonsterRoster. Used only when aMethod is set to ByName.
    • PackageName: Informs the spawner which package this monster belongs to. This property will help narrow down the search. Used only if aMethod is set to ByName.
      Default value = 'SearchWholeTable'
    Default value = [0].aMethod = ByIndex
    [0].MonsterIndex = 0-0
[/color]
The difference between successful people from others is
not in the lack of strength,
not in the lack of knowledge,
but rather in the lack of will.

FFE466

_________________________
{F}{AH}{CivFR}{XC}{U}{DF}{CJ}{SD}
Thwart
1337 Haxor
Posts: 153
Joined: Thu Jul 30, 2009 5:26 am
Location: Chicago, Illinois

I just like to sit around here, cybernetically speaking of course, and soak myself in threads like these so I can intentionally get cross-eyed.
It helps with these...
Image


Sorry to be sort of off topic
"To be positive: to be mistaken at the top of one's voice." -Ambrose Bierce
vinc3h
Camper
Posts: 54
Joined: Thu Sep 13, 2012 10:52 am

I would suggest including all the files associated with properly viewing monsters in testing, this would help. I know it would take some time, but not THAT much time, and in the long run it would probably save quite a bit of time for you when it comes to testing. For example, if i saw a krall spawning, i may not know if it was the monster i intended or not because i cannot see the monster itself. If i adjusted speeds / health / damage, i would not be able to accurately guage the reaction to those properties since im not seeing the actual monster set.

Lots of plus's for having the full package to map with, i for one have 2 maps in particular that im working on that would benefit highly from this package since it will be heavy on speed / health / damage multipliers by myself, otherwise it will be up to testing and the judgement of you if they are good or not, which may or may not end up how i intended the map to turn out, and would also eliminate an entire step of testing and adjusting multiple times to get it perfect in my own tests. Not to mention, if i could accurately guage experience gain myself and get something i feel is appropriate based off of my tests before i send it to you...

Overall, less in depth time consuming tests for you, or minor fixes and retests, more time for your own work. Not to mention, ik it would boost my moral to see my map as its intended instead of a bunch of shooting krall. Especially if your going for a certain feel, for instance, mapping for a xenomorph theme.. i imagine if ur using them you want a particular feel when playing against them, which isn't quite as easy to acheive with skaarj running about lol
3D Modeler, Texture Artist, Level Designer
DW_Ant
DW Clan Member
Posts: 2679
Joined: Sat Jun 21, 2008 11:00 pm
Location: North Carolina

The issue of that is that it'll reduce the flexibility of the monster spawner. The spawner references monsters from an external configuration file (DWMonsterRoster.ini)

That file, alone, holds the monster name and class in a table. This means that any editor could go to that file and change the monster class around. For example I could set element 4 in the roster to be Monster Name="Ninja Turtles" Monster Package="class'SomeUnknownPackage.TNinjaTurtles'"

One issue I do have is the MonsterPackage property where that is compiled in the monster spawner. The packages and the index values are currently hard-coded (meaning not flexible).
In the previous example, I may add Ninja Turtles in the roster, but the monster spawner will still look in the OSM Index values for the Ninja Turtles. Even worse, maybe the SomeUnknownPackage has a lot of monsters where there are about 40 monsters. There's no way 40 monsters could fit in the OSM package listing. The mapper will be forced to use SearchWholeTable value (unless they want to figure out if the Purple Turtle is listed in Satore section or OSM). This can get very messy/disorganized very quickly by adding a few additional monster packages.


::Spends a minute to think::

Just got an idea to fix this. The MonsterPackage will not be an enumerator. It will be a list. What I'll have to do is create classes that holds package information.

Code: Select all

Class Package_OSM extends Monster_Packages abstract;
var config int indexMin, indexMax;
What this says is that I will have to compile external classes for each package, but at least it'll be flexible. The spawner can dynamically load up classes inside the editor, and the index values can be configured (via: DWMonsterRoster) without any compiling.
The difference between successful people from others is
not in the lack of strength,
not in the lack of knowledge,
but rather in the lack of will.

FFE466

_________________________
{F}{AH}{CivFR}{XC}{U}{DF}{CJ}{SD}
vinc3h
Camper
Posts: 54
Joined: Thu Sep 13, 2012 10:52 am

Well i simply meant including the actual smartmonster pack and all its referenced files so i mappers could actually see the map as intended to help with testing (which i think would actually save a lot of time in some aspects of the whole design process from start to finalization.

As in, i see what i see on the server, all monsters, RPG menu, proper experience points given, monster properties, etc.

:D

Less testing for you, less required fixes as well, so even less testing :D
Mappers can get the monster setup exactly how they want without needing a test from you to guage it, balance out XP more closely to what you might want with proper values, etc

Edit: i dont know if your post is actually to me, but if so, kind of cool if i unwittingly suggested a new idea to you that would benefit the mappers :D
3D Modeler, Texture Artist, Level Designer
Post Reply