//
//  
//   NESS
//   Version 8.1.2
//   Spawn Readme
//
//
//   Neshke Narovken (Original Author)
//
//   Cereborn (Maintainer)
//
//*******************************************************************
//     
//
// INCLUDES:
//
//   Do NOT Modify Main Script:
//
//     Spawn:           'spawn_main'
//
//   Do NOT Modify Helper Scripts:
//
//     Information:     'spawn__readme'
//     Functions:       'spawn_functions'
//     Corpse Death:    'spawn_corpse_dth'
//     Corpse Decay:    'spawn_corpse_dcy'
//     Global Defaults: 'spawn_defaults'
//     Flag Parsing:    'spawn_flags'
//     Pseudo-heartbeat 'spawn_pseudohb"
//
//   Lootable corpse event scripts:

//     Corpse On Open:   'spawn_onopencrp'
//     Corpse On Closed: 'spawn_oncloscrp'
//     Corpse disturbed: 'spawn_dist_corps' 
//     Corpse used:      'spawn_used_corps'               
//
//
// CONFIGURATION:
//
//   Modify Configuration Includes if Needed
//   Only where Specified in Each File:
//
//     Spawn Flags:     'spawn_cfg_flag'
//     Spawn Groups:    'spawn_cfg_group'
//     Loot Tables:     'spawn_cfg_loot'
//     Spawn Camps:     'spawn_cfg_camp'
//     Spawn Effects:   'spawn_cfg_fxsp'
//     Area Effects:    'spawn_cfg_fxae'
//     Object Effects:  'spawn_cfg_fxobj'
//     User Defaults:   'spawn_cfg_global'
//     Custom Flags:    'spawn_cfg_cusflg'
//
//   Modify Check Includes if Needed
//   Only where Specified in each File:
//
//     Check PCs:       'spawn_chk_pcs'
//     Custom Check:    'spawn_chk_custom'
//
//   Modify Scripting Includes if Needed
//   Only where Specified in Each File:
//
//     Spawn/Despawn:   'spawn_sc_spawn'
//     Heartbeat:       'spawn_sc_hbeat'
//     Death:           'spawn_sc_death'
//     Deactivation:    'spawn_sc_deactiv'
//     Camp Trigger:    'spawn_sc_cmptrig'
//     Patrol Stops:    'spawn_sc_patrol'
//
//
// USAGE:
//
//   Add Following to Area Heartbeat:
//
//     Sample Script:   'spawn_sample_hb'
//
//     #include "spawn_main"
//     Spawn();
//
//   Add Spawn Waypoints
//   All Switches Optional
//
//   Waypoint Name:
//     SP_<Spawn Flags>
//
//   Waypoint Tag:
//     Child Object Tag/ResRef
//     Group Designation
//     Camp Designation
//
//   Note:
//     For Custom Creatures
//     You must use the ResRef
//
//   Available Flags:
//     SPnOn_ISnDn_IDn_FTn_SNnMn_SAnMn_SRnMnP_SDnMn_CLnMn
//     _RGnMnCn_RWRn_DYnTn_HRnTn_DOD_NOD_PCnR_SF_SUnIn_FXnDn
//     _PRnTn_PLnTn_EEnRn_EXnRn_SG_CDnTnRnD_LTnAnBnCn_DSnSn_DIn_CMDn
//     _SSnDn_CCn_CPnRn_TRnDn_AEnDn_OEnDn_RSn_FCn
//     _ALnSn_HBn_SLnRnI_RHDn_DTn_HLnE_IT_ST_PT_SM_CF
//     _SXn_NL_SB_ELn
//
//
//   Format:
//     Flag|OptionalFlag
//
//
//   SPn|On
//   : Designates Spawn Waypoint
//   : SP is Required on all Spawn Waypoints
//   : Performs Spawn processing every SP1 to SP99 heartbeats
//   : Default is SP1 Heartbeat : ~6 Seconds
//   : SP00 Defaults to SP01
//   : Optional Flag: On
//   : Offset processing spawn from first process by n heartbeats.
//   : Used to stagger spawn processing within an area
//
//   ISn|Dn
//   : Initial State
//   : Type 0 : Inactive
//   : Type 1 : Default : Active
//   : Optional Flag: D000
//   :   Delay Initial Spawn D000 Minutes
//
//   IDn
//   : SpawnID
//   : Sets LocalInt "SpawnID" to SpawnID
//   : On Spawn Waypoint Object
//
//   FTn
//   : Flag Table
//   : Use Flags from Table FT00
//   : Flags are Defined in 'spawn_cfg_flag'
//
//
//   SNn|Mn
//   : Spawn Number
//   : Maintains a Spawn of SN00 to SN99 Children
//   : Despawns Extra Children
//   : Optional Flag: M00
//   :   Minimum Children
//   :   Will Randomly Spawn between M00 and SN00 Children
//
//   SA|n|Mn
//   : Spawn All at Once
//   : Default is Spawn One Child per Cycle
//   : Optional Flag: 00
//   :   Spawn 00 Children per Cycle
//   : Optional Flag: M00
//   :   Spawn Minimum M00 per Cycle
//
//   SRn|Mn|P
//   : Spawn Radius
//   : Randomly Spawns Children in a
//   : Location SR00 to SR99 Meters from Waypoint
//   : Optional Flag: M00
//   :   Minimum Radius, M00 to SR99 Meters
//   : Optional Flag: P
//   :   Spawn Center is Near a Random PC in Area
//
//   SDn|Mn|P
//   : Spawn Delay
//   : Delay SD00 to SD99 Minutes between Spawns
//   : Optional Flag: M00
//   :   Minimum Delay, M00 to SD99 Minutes
//   : Optional Flag: P
//   :   This flag sets up a spawn period, whereas the default spawn delay
//   :   specifies a spacing between spawns.
//   :   This is particularly useful with PL3 (keep the times the same on
//   :   each) it will cause the placeable to refresh if alive or respawn
//   :   if not on a regular schedule. Note that if the P subflag is used,
//   :   the M subflag is ignored.
//
//
//   CLn|Mn
//   : Child Lifespan
//   : Child will Despawn after CL00 Minutes
//   : Optional Flag: M00
//   :   Child will Despawn after M00 to CL00 Minutes
//
//   DYn|Tn
//   : Spawn Day
//   : Spawn Only on Day DY00 to DY28
//   : Children are Despawned during Invalid Days
//   : Optional Flag: T00
//   :   Spawn from Day DY00 to Day T00
//
//   HRn|Tn
//   : Spawn Hour
//   : Spawn Only during Hour HR00 to HR24
//   : Children are Despawned during Invalid Hours
//   : Optional Flag: T00
//   :  Spawn from Hour HR00 to Hour T00
//
//   DO|D
//   : Day Only
//   : Only Spawns at Day
//   : Optional Flag: D
//   :   Despawn Children at Nightfall
//
//   NO|D
//   : Night Only
//   : Only Spawns at Night
//   : Optional Flag: D
//   :   Despawn Children at Daybreak
//
//   RW|Rn
//   : Random Walk
//   : Children Wander Randomly
//   : Optional Flag: R00
//   :   WARNING:  This is Resource Intensive!!
//   :   Wander Range, R00 to R99 Meters
//
//   PC|n|R
//   : PC Check
//   : Only Spawn Children if PCs are in Area
//   : Children are Despawned if no PCs in Area
//   : Optional Flag: PC00
//   :   Depawn if no PCs in Area for PC00 Minutes
//   : Optional Flag: R
//   :   Reset Spawn Point if no PCs are Present
//
//   RGn|Mn|Cn
//   : Random Gold
//   : Generates Random Amount of Gold on Children
//   : From RG000 to RG999 Gold
//   : Optional Flag: M00
//   :   Minimum Gold Amount
//   : Optional Flag: C00
//   :   Gold Chance C00% to C99%
//   :   Default 100% chance
//
//   SF
//   : Spawn Facing
//   : Set Facing of Children to Match Waypoint
//   : Default Random Facing
//
//   SUn|In
//   : Spawn Unseen
//   : Only Spawn if PCs are not within SU00 to SU99 Meters
//   : Optional flag: I00
//   :   Use the location of each individual child to determine if that
//   :   child can spawn, instead of using to location of the spawn itself.
//   :   If using SR or SL|R, I00 to I99 additional random locations will be
//   :   attempted
//
//   FXn|Dn
//   : Spawn Effect
//   : Spawn in with Effect FX001 to FX999
//   : Effects are Defined in 'spawn_cfg_fxsp'
//   : Optional Flag: D000
//   :   Despawn with Effect D001 to D999
//
//   PRn|Tn|C
//   : Patrol Route
//   : Assign Waypoints Route PR00 to PR99
//   : Optional Flag: T0
//   :   Route Type
//   :   0 - Sequential
//   :   1 - Circular
//   :   2 - Random
//   :   3 - Walk Once/Despawn
//   : Optional Flag C
//   :   Start at closest waypoint. Does not apply to T2 (random)
//   :
//   : Route Name: Variable
//   : Route Tag: PR00_SN00_PS000_RN_FC_DO_NO_SC000
//   :
//   : PR - Route Number 00 to 99
//   : SN - Stop Number 00 to 99
//   : PS - Pause 000 to maxint seconds at Stop
//   : RP - Random additional amount (0 - maxint) added to PS
//   : RN - Run to Stop
//   : RR - Percentage chance a Stop will be visited (skipped otherwise)
//   : SF - Face the Waypoint Direction
//   : DO - Only Stop here during the Day
//   : NO - Only Stop here during the Night
//   : SC - Run script 000 to 999
//   :      Scripts are Defined in 'spawn_sc_patrol'
//
//   EEn|Rn
//   : Entrance/Exit
//   : Enter and Exit at Waypoint EE00
//   : Optional Flag: R
//   :   Choose Random Entrance Exit
//   :   from R00 to EE00
//   :
//   : Entrance/Exit Name: Variable
//   : Entrance/Exit Tag: EE00
//
//   EXn|Rn
//   : Exit
//   : Exit at Waypoint EX00
//   : Optional Flag: R
//   :   Choose Random Exit
//   :   from R00 to EX00
//   :
//   : Exit Name: Variable
//   : Exit Tag: EX00
//
//   PLn|Tn|Pn
//   : Placeable Object
//   : Spawns a Placeable Object with Behavior
//   :   Behavior 0: Default Behavior
//   :   Behavior 1: Despawn if Empty
//   :   Behavior 2: Refill if Empty (after spawn delay minutes!)
//   :   Behavior 3: Refresh (despawn/respawn) every P000 minutes; default
//   :   (if no Pn specified) is 60 minutes
//   : Optional Flag: T00
//   :   Trap Disabled Chance
//   :   00% to 99% chance of Trap Disabled
//   :   Trap must already be part of Placeable's Template
//   :   Default 100% Chance Trap is Disabled
//   : Optional Flag: P00
//   :   Refresh period (in minutes)
//
//   SG
//   : Spawn Group
//   : Spawn Children from Group
//   : Waypoint Tag is Defined Group
//   : Groups are Defined in 'spawn_cfg_group'
//
//   CDn|Tn|Rn|D
//   : Corpse Decay
//   : Decay Corpse after CD000 to CD999 Seconds
//   : Default No Corpse, Standard Loot Bag
//   : Optional Flag: T
//   :   Corpse Inventory Type
//   :   Type 0: Inventory Items
//   :   Type 1: Inventory & Equipped Items
//   :   Type 2: Inventory Items, if PC Killed
//   :   Type 3: Inventory & Equipped Items, if PC Killed
//   : Optional Flag: R
//   :   Remains Type
//   :   Type 0: Loot bag
//   :   Type 1: Body
//   :   Type 2: Bones
//   :   Type 3: Potion
//   :   Type 4: Pouch
//   :   Type 5: Scroll
//   :   Type 6: Treasure
//   :   Type 7: None (destroy loot on decay)
//   : Optional Flag: D
//   :   Drop wielded weapons
//
//  LTn|An|Bn|Cn
//   : Loot Table
//   : Spawn Loot on Children from Table LT000 to LT999
//   : Loot Tables are Defined in 'spawn_cfg_loot'
//   : LT500 to LT999 currently reserved for merchant-based
//   : loot tables
//   : Optional Flag: A000
//   :   When using merchant-based loot tables, the percentage chance that
//   :   only 1 item will spawn.  Default is 50%. Values over 100% are truncated
//   :   to 100%
//   : Optional Flag: B000
//   :   When using merchant-based loot tables, the percentage chance that
//   :   2 items will spawn.  Default is 15%. Values over 100% are truncated
//   :   to 100%
//   : Optional Flag: C000
//   :   When using merchant-based loot tables, the percentage chance that
//   :   3 items will spawn.  Default is 05%. Values over 100% are truncated
//   :   to 100%
//
//   DSn|Sn
//   : Deactivate Spawn
//   : Deactivate Spawn based on Condition
//   :   Type 0: Deactivate if all Children are Dead
//   :   Type 1: Deactivate if Spawn Number has been Spawned
//   :   Type 2: Deactive Spawn until all Children are Dead
//   :   Type 3: Deactivate Spawn after DI00 Children
//   :   Type 4: Deactivate Spawn after DI00 Minutes
//   :   Type 5: Deactivate Spawn after DI00 Cycles
//   :   Type 6: Deactivate when Spawn Count == Spawn Number
//   : Optional Flag: S000
//   :   Run Script 000 to 999 when Spawn Deactivated
//   :   Scripts are Defined in 'spawn_sc_deactiv'
//   :
//   : Can Reactivate by Manually Calling:
//   :   SetLocalInt(oSpawn, "SpawnDeactivated", FALSE);
//
//   DIn
//   : Deactivation Information
//
//   CM|Dn
//   : Spawn Camp
//   : Spawns Camp of Creatures and Placeables
//   : Waypoint Tag is Defined Camp
//   : Despawns Camp when all Children Dead
//   : Camps are Defined in 'spawn_cfg_camp'
//   : Optional Flag: D000
//   :   Placeables Decay 000 Seconds after Camp Despawn
//   :
//   : Camp Children Flags:
//   :
//   :   RW       : Random Walk
//   :   SF       : Spawn Facing Camp
//   :   SG       : Spawn Group
//   :   LT00     : Loot Table
//   :   CD000|T0 : Corpse Decay
//   :   PL0|T00  : Placeable Type
//   :             Placeable Trap Disabled
//
//   SSn|Dn
//   : Spawn Script
//   : Run Script 001 to 999 on Spawn
//   : Scripts are Defined in 'spawn_sc_spawn'
//   : Optional Flag: D000
//   :   Run Script 001 to 999 on Despawn
//
//   DTn
//   : Death Script
//   : Run Script 001 to 999 on Death
//   : Scripts are Defined in 'spawn_sc_death'
//
//   CPn|Rn
//   : Spawn Check PCs
//   : Check Custom Code to see if Spawn Proceeds
//   : Custom Code is Defined in 'spawn_chk_pcs'
//   : Optional Flag: R00
//   :   Check all PCs in Radius R00
//   :   Default Check all PCs in Area
//
//   CCn
//   : Spawn Check Custom
//   : Check Custom Code to see if Spawn Proceeds
//   : Custom Code is Defined in 'spawn_chk_custom'
//
//   TRn|Dn
//   : Spawn Trigger
//   : Only Spawns if PC is within 00 Meters
//   : Optional Flag: D00
//   :   Despawns if PC is not within D00 Meters
//
//   AEn|Dn
//   : Spawn Area Effect
//   : Area Effects are Defined in 'spawn_cfg_fxae'
//   : Waypoint Tag can be "AE" to Spawn only Area Effect
//   : Optional Flag: D000
//   :   Area Effect Duration of 000 to 999 Seconds
//   :   Duration of 000 means Permanent Area Effect
//   :   Default Duration is 005 Seconds
//
//   OEn|Dn
//   : Object Effect
//   : Object Effects are Defined in 'spawn_cfg_fxobj'
//   : Optional Flag: D000
//   :   Object Effect Duration of 000 to 999 Seconds
//   :   Duration of 000 means Permanent Object Effect
//   :   Default Duration is Permanent
//
//   RSn
//   : Random Spawn
//   : Percentage Chance Spawn will Occur
//   : Default 100% Chance
//
//   FCn
//   : Spawn Faction
//   : Change Faction of Children:
//   :   Faction 0: COMMONER
//   :   Faction 1: DEFENDER
//   :   Faction 2: MERCHANT
//   :   Faction 3: HOSTILE
//   :   Faction 4: CUSTOM
//   :     Change Faction to Same as Nearest
//   :     Object with Tag 'SpawnFaction'
//
//   ALn|Sn
//   : Spawn Alignment
//   : Shift Alignment of Children
//   :   Alignment 0: Neutral
//   :   Alignment 1: Law
//   :   Alignment 2: Chaos
//   :   Alignment 3: Good
//   :   Alignment 4: Evil
//   :   Alignment 5: All
//   : Optional Flag: S00
//   :   Shift Alignment by S00
//   :   Default Shift by 10
//
//   HBn
//   : Heartbeat Script
//   : Children will Run Script HB000 each Cycle
//   : Scripts are Defined in 'spawn_sc_hbeat'
//
//   SLn|Rn|I
//   : Spawn Location
//   : Spawn Children at Waypoint SL00
//   : Optional Flag: R
//   :   Choose Random Location
//   :   from R00 to SL00
//   : Optional Flag: I
//   :   When spawning multiple children, each child takes the next
//   :   waypoint, In order - (first child spawns at SL00, next at SL01, etc.)
//   :
//   : Location Name: Variable
//   : Location Tag: SL00
//
//   RH|Dn
//   : Return Home
//   : Child will always Return to Home
//   : Optional Flag: D00
//   :   Child will Return to Home
//   :   Only if further than D00 Meters
//
//   HL|n|E
//   : Heal Children if Not in Combat
//   : Optional Value: 00
//   :   Heal 00% per Cycle
//
//   IT
//   : Spawn Item
//   : Spawnpoint Tag is Item Template
//
//   ST
//   : Spawn Sit
//   : Children will Sit in Nearest Unoccupied Sittable
//   : Sittable's Tag must be 'Seat'
//
//   PT
//   : Spawn Plot
//   : Sets Children as Plot
//
//   SM
//   : Spawn Merchant
//   : Spawnpoint Tag is Merchant Template
//
//   CF
//   : Custom Flag
//   : Everything in Spawn Name after CF
//   : Is Stored in LocalString "CustomFlag"
//   : On Each Spawned Child
//
//
//
//

//
// Functions for external control.  Please use these when possible instead
// of modifying variables directly in NESS.
//
// object NESS_GetSpawnByID(int nSpawnID, object oArea)
//   : Returns the spawn waypoint in area oArea with ID nSpawnID
//
// void   NESS_ActivateSpawnByID(int nSpawnID, object oArea)
//   : Activates the spawn in area oArea with ID nSpawnID
//
// void   NESS_DeactivateSpawnByID(int nSpawnID, object oArea)
//   : Deactivates the spawn in area oArea with ID nSpawnID
//
// void   NESS_ActivateSpawn(object oSpawn)
//   : Activates spawn oSpawn
//
// void   NESS_DeactivateSpawn(object oSpawn)
//   : Deactivates spawn oSpawn
//
// void   NESS_ForceProcess(object oSpawn)
//   : Force spawn oSpawn to be processed next heartbeat (regardless of
//   : SPxx value)
//
// void   NESS_TrackModuleSpawns(int nFlag=TRUE)
//   :  Enable (nFlag == TRUE) or Disable (nFlag == FALSE) Spawn Tracking
//
// int    NESS_IsModuleSpawnTracking()
//   :  Returns TRUE is spawn tracking is enabled, FALSE otherwise
//
//
// Some Tips and Pointers
// - with Thanks to Eliha for Creating this Section
//
// 1. The .erf script files we import for NWN usually contain .nss and
// .utp files.
//
// 1.1. The .nss files are the Nwn Source Scripts that are in plain text that
// we manipulate in the script editor.
//
// 1.2. The .utp file(s) are objects such as an invisible corpse object that
// automatically gets put in the right column of the toolset where you select
// the creatures, doors, placeables, etc. under the custom button.
//
// 2. After importing the .erf and ignoring that it couldn't find the .ncs files
// you'll need to save your module then reopen it for the new scripts to appear
// in the left column (due to the lack of a refresh button).
//
// 3. When working in the various configuration scripts you only need to save
// them, not compile them. They are just add-ons to the main spawn_sample_hb.nss
// script and attempts to compile them will result in errors. The spawn_sc_xxxx
// files will compile but even they should just be saved like all the other
// spawn_cfg_xxxx scripts.
//
// 4. When finished editing and saving the various configuration scripts you
// will then need to open the spawn_sample_hb script and compile it to integrate
// your new changes into the system. If you customized your scripts, saved them,
// saved the module, then loaded the game and find nothings working....chances are
// you forgot to compile the spawn_sample_hb script after making your changes.
//
// 5. You can usually tell which script needs to be compiled by noticing which
// one needs to be put in an area heartbeat or on an object somewhere, etc.. In
// this case, we are adding the spawn_sample_hb to the area heartbeat so it is the
// main file and requires compiling.
//


//
// Package Header
//
/*
NESS Version 8.1.1

Cereborn

See 'spawn__readme' for Instructions
Ignore all 'Missing Resource' Errors
See the NWN Forums for More Info

Spawn Package:

 NESS Scripts:
- spawn__readme
- spawn__history
- spawn_cfg_camp
- spawn_cfg_flag
- spawn_cfg_fxae
- spawn_cfg_fxobj
- spawn_cfg_fxsp
- spawn_cfg_global
- spawn_cfg_group
- spawn_cfg_loot
- spawn_cfg_cusflg
- spawn_chk_pcs
- spawn_chk_custom
- spawn_corpse_dcy
- spawn_corpse_dth
- spawn_defaults
- spawn_dist_corps
- spawn_flags
- spawn_functions
- spawn_main
- spawn_onopencrp
- spawn_oncloscrp
- spawn_pseudohb
- spawn_sample_hb
- spawn_sc_cmptrig
- spawn_sc_deactiv
- spawn_sc_death
- spawn_sc_patrol
- spawn_sc_spawn
- spawn_smpl_onent
- spawn_smpl_onext
- spawn_timefuncs
- spawn_used_corps

 NESS Resources:
- invis_corpse_obj
- invis_corpse_bdy
- invis_corpse_bon
- invis_corpse_pot
- invis_corpse_pch
- invis_corpse_ser
- invis_corpse_tre

 Spawn Banner Scripts:
- spawnb_cc_activ
- spawnb_cc_dactiv
- spawnb_cc_dump
- spawnb_cc_nodump
- spawnb_cc_notrck
- spawnb_cc_nsclog
- spawnb_cc_nsdlog
- spawnb_cc_sclog
- spawnb_cc_sdlog
- spawnb_cc_trck
- spawnb_main
- spawnb_sample_ai
- spawnb_sc_activ
- spawnb_sc_dactiv
- spawnb_sc_disp
- spawnb_sc_dump
- spawnb_sc_nodump
- spawnb_sc_notrck
- spawnb_sc_nsdlog
- spawnb_sc_sclog
- spawnb_sc_sdlog
- spawnb_sc_snclog
- spawnb_sc_trck

 Spawn Banner Resources:
- spawn_ban_rod.uti
- spawn_banner.dlg
- spawn_ban_a.utp
- spawn_ban_d.utp


*/