This is a proof-of-concept for a design tool I'm playing around with for the Typhaeon Persistent World.
I've attached an example mod that shows how the idea can be deployed:
- For each of the zones listed here: if you kill specific monsters in a given area, the monsters that spawn in that area can change, and those changes will persist between server resets. This means your actions can change the world you're playing in.
- The Center Area has a helpful NPC who can tell you what monsters are appearing in the South Area. There are items in the crate designed to help DMs interact with the system.
- The East Area has four different bestiaries: calm (friendly NPCs spawn in the ruins), wolves, undead, and elementals. Kill the lead monster to progress through the different waves, or just use the DM widget in the crate.
- The North area can become 'settled' by friendly NPCs once its safe. You can ask the Merchant to leave so you can get back to killing wolves.
- The South area begins peacefully, but you can interact with a placeable object to trigger hostile waves. Note that this system allows you to trigger specific monster attacks, you don't have to progress in a linear fashion. You can use a special item (found in the crate in the starting zone) to purify the South Area. The item is designed to only function in a specific area.
There is a DM widget and builder guide included in the example module.
An erf has been provided with the release of v0.3.
Please use the example module and this page as a guide to creating your own bestiaries for each area but send me a PM if you'd like some help getting to grips with the system :)
---
Creature setup:
- the resref and tag of the creature blueprint being spawned must be identical.
- this means they cannot contain capital letters.
- this means that you can't use generic NWN creatures from the palette but you can easily use them if you 'edit copy' and give them a new unique blueprint.
- at least one creature should have the local variable integer "bDPL_keymonster" set to 1.
- Modify the script nw_c2_default7 (the default death script for NPCs). When this monster dies, it will cause the DPL handler to change which monsters spawn in the area.
Area setup:
- Any area that uses this system needs a DPL_handler object, a spawnhandler object and any number of unique waypoints named "meta1" through "meta999"
- You need to compile lists of monsters that will spawn in the area (format explained below). I think of these as "waves": each "wave" can consist of any number of monsters of different types. When a "wave" ends, the DPL_handler will replace all monsters in one wave with monsters from the next wave.
- nMetaStart is an int, will typically be set to 1. This is the first "wave" of monsters that will be used to populate the area. When an area first spawns monsters
- nMaxMetaCycle is equal to the total number of "waves" that will spawn in the area.
- DPL_W01_1_T is a string that's equal to the tag of the first object in a given wave. By convention this is typically the 'boss' monster of the area but it doesn't have to be: for example, you can spawn placeables and (I think) entire encounters. For example, "denmother" is the tag of the wolf boss that appears in several areas.
- DPL_W01_1_W is a string that's equal to the tag of the waypoint where the first object will spawn. This gives you some very powerful control over how often a monster will spawn in an area, and how many of those monsters will congregate around a waypoint.
For example, "60sdpl" is a waypoint that will respawn the monster every minute, if its dead. For a better idea of what you can create with this, dig into the uo_spawner_hb script.
- DPL_W01_1_N is an int that tells the DPL_handler how many of these waypoints to make.
For example, if we use "denmother" and "60sdpl" as the first two values and this number is equal to 1, the waypoint "meta1" will spawn a single Den Mother wolf. If this number is equal to 5, then meta1, meta2, meta3, meta4 and meta5 would *all* spawn a Den Mother wolf.
- DPL_W01_delay is a float that tells the DPL_handler how many seconds to wait before new monsters spawn. By default the number is '0' but that can mean that monsters will jump down from the sky and kill you as soon as you make a wave change.
- DPL_W01_2_* handles the second object in the wave (this can be wolf minions, but can also be placeable objects to provide visual interest for the merchant's area)
- DPL_W02_* handles the second wave: after the wolves are cleared out, what will replace them?
v0.2 Update
- DPL_W01_delay is a float that tells the DPL_handler how many seconds to wait after Wave 1 ends before starting the next wave (can be blank)
- DPL_W01_StartScript is a string that tells the DPL_handler the name of a script to fire when wave 1 begins (can be blank)
- DPL_W01_EndScript is a string that tells the DPL_handler which scripts to fire when wave 1 ends (can be blank)
- The DM book in the Center Area puts more information and power in the hands of your DM team.
- more functions migrated to "dpl_inc", better variable names.
v0.3 Update
- Bug fix (the system now handles multiple entries per wave better than it did before)
Notes:
- designed in Enhanced Edition.
- this hasn't been stress-tested and does use the campaign database (which I understand has decent performance in Enhanced Edition but might be slow if you're using 1.69).
- probably don't spawn 999 unique monsters in every zone.
- contains some basic DM functionality
- builder-centric
- built over Palor's UO-style spawner 2.2.2a from Jaga Te'lesin's seamless area transitioner project (the example mod is built on the seamless area transitioner demo)
Attachment | Size |
---|---|
![]() | 927.24 KB |
![]() | 311.53 KB |
This is a great idea. Eager to have a look and see how it works.
Seams to be interesting. Great idea!