
The spawner systems in Sipher Odyssey determine where players and enemies appear within dungeon levels. These systems are crucial to gameplay experience, directly influencing combat flow and strategic positioning.
Player spawners are specific locations on the map designated as "spawn points" where players will appear when entering a dungeon level. These spawn points are strategically placed by level designers to ensure a balanced entry point to each encounter.
Spawn Point Allocation: The system requires a number of spawn points equal to the number of players.
Overflow Handling: If there are more players than available spawn points, the system will reuse spawn points starting from the first one.
Blockout Integration: Spawn points can be placed within Gameplay Scenario Blockouts. When a blockout is loaded, all spawn points maintain their relative positions within that blockout.
Spawn points are typically positioned near the Gate In of each level to ensure a smooth transition between maps, while avoiding placement near traps or obstacles that could cause immediate damage to players.
Enemy spawners are rectangular areas within the map where enemies can appear during encounters. Enemies spawn at random points within these designated areas, creating varied combat experiences with each playthrough.
Rectangular Spawning Areas: Each enemy spawner covers a specific rectangular area of the map.
Blockout Integration: Each Gameplay Scenario Blockout contains exactly 4 enemy spawners for consistent encounter configuration.
Room-Based Organization: The system detects and assigns all enemy spawners based on the room they are located in, creating a clear room-to-spawner relationship.
Proximity Detection: Currently, spawners are sorted based on proximity to player spawners. Future implementation aims to improve this by using room-based detection.
When the Dungeon Architect generates a dungeon, spawners are automatically detected and labeled according to their room location:
Spawners 1, 2, 3, 4 = Room 1
Spawners 5, 6, 7, 8 = Room 2
And so on...
The encounter system spawns one wave at a time (unless flagged as a concurrent wave), with each wave assigned to a specific enemy spawner in the appropriate room.
Each wave is assigned to one enemy spawner in its designated room
When all spawners in a room have been used, the system resets to the first spawner in that room
If a wave is configured for a non-existent room (e.g., Room 2 in a single-room dungeon), it defaults to Room 1
Waves in the encounter system are tagged to specific rooms:
Waves 1, 2, 3, 4 = Room 1
Waves 5, 6, 7, 8 = Room 1
Waves 9, 10, 11, 12 = Room 2
Waves 13, 14, 15, 16 = Room 2
The development team is exploring potential improvements to the spawning systems:
AI-Driven Spawning: Using artificial intelligence to determine optimal enemy spawn locations based on player positions, map layout, and other contextual factors.
Dynamic Spawn Adjustment: Real-time adjustments to spawning based on current battle conditions and player performance.
Room-Based Detection: Improving the detection system to identify spawners by room using Cover Blockout emitters from Dungeon Architect.
Enemy Spawner 2.0 is an enhanced system in Sipher Odyssey that governs how and where enemies appear during gameplay. This updated spawning system provides greater control and predictability for both designers and players, while enabling dynamic difficulty balancing through the Meta tool.
Each map level has one encounter file assigned to it, which defines the spawning behaviors for that level. The encounter system focuses on population control rather than traditional wave-based spawning.
Max Wave Population: Total number of enemies for a specific wave
Max Concurrent Enemy: Maximum number of active enemies from this wave on the map at once
Initial Wave Spawn Delay: Time before the wave begins spawning (default: 0)
Max Concurrent Spawn: Maximum number of enemies that can spawn simultaneously (default: 1)
Spawn Interval: Time between enemy spawns (in seconds, with 1 decimal point precision)
Is Counted Flag: Determines if enemies count toward the total enemies of the map
Is Concurrent: Allows waves to execute simultaneously for complex encounter design
Spawner Label: Optional specific spawner selection for strategic enemy placement
Enemy Type: List of potential enemies that can spawn in this wave
Weight: Chance of spawning each enemy type
Hit Count Modifier: Difficulty adjustment per enemy type
Hit Count Modifier: Difficulty adjustment for the entire wave
Enemy Spawner 2.0 supports four primary spawning algorithms:
The traditional spawning method where enemy groups appear in predetermined sequences.
Continuously spawns enemies based on defined conditions without an upper limit.
For win conditions such as Survive, Eliminate Target, and Protect Object, backfill maintains a constant enemy presence:
Setting Max Population = 0 (infinite) with Max Concurrent = 6 will maintain exactly 6 enemies on the map at all times
Multiple "infinite" waves can run concurrently (e.g., infinite melee spawner + infinite range spawner)
Wave start delays can stagger enemy types (e.g., bomber waves starting after melee waves)
Combines infinite waves with backfill mechanisms for persistent challenge.
Enemy Spawner 2.0 includes sophisticated logic for spawner management:
Exhaust and Reactivate: Once a spawner volume is used, it becomes temporarily unavailable for subsequent spawns
When all spawner volumes have been used, the system "reactivates" all spawners
Before reactivation, spawners are re-sorted based on player location
Solo Play: Uses the player's location (ignoring bots)
Multiplayer: Calculates the "center point" of all players' locations as a reference point
Spawners are organized into two categories:
Non-Label/Generic Spawners: Default spawning locations
Label Spawners: Specialized locations for specific enemy types
For waves WITHOUT a spawner label:
Only uses non-label spawners
Reactivates all non-label spawners when exhausted
For waves WITH a spawner label:
Looks for unused spawners with the matching label
If all labeled spawners are used, reactivates all spawners with that label
If no spawners with the required label exist, uses the next available non-label spawner
For advanced Entity Component System enemies:
Configure the EncounterManager with SipherMassEncounterDataModel
Create an Encounter Data table with type MassEncounterData
Use MassGroups instead of standard Groups