mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-09 16:12:17 +00:00
Co-authored-by: Selis <12716288+ItsSelis@users.noreply.github.com> Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
100 lines
2.8 KiB
Plaintext
100 lines
2.8 KiB
Plaintext
/area
|
|
name = "\improper Unknown Location"
|
|
icon_state = "away"
|
|
var/list/valid_spawn_turfs = list()
|
|
var/list/valid_mobs = list()
|
|
var/list/valid_flora = list()
|
|
var/mobcountmax = 0
|
|
var/floracountmax = 0
|
|
var/semirandom = FALSE
|
|
var/semirandom_groups = 0
|
|
var/semirandom_group_min = 0
|
|
var/semirandom_group_max = 10
|
|
var/mob_intent = "default" //"default" uses default settings, use "hostile", "retaliate", or "passive" respectively
|
|
var/ghostjoin = FALSE //If true, enables ghost join on semirandom spawned mobs
|
|
|
|
/area/proc/EvalValidSpawnTurfs()
|
|
//Adds turfs to the valid)turfs list, used for spawning.
|
|
if(mobcountmax || floracountmax || semirandom)
|
|
for(var/turf/simulated/floor/F in src)
|
|
valid_spawn_turfs |= F
|
|
for(var/turf/unsimulated/floor/F in src)
|
|
valid_spawn_turfs |= F
|
|
|
|
/area/LateInitialize()
|
|
. = ..()
|
|
EvalValidSpawnTurfs()
|
|
|
|
if(!valid_spawn_turfs.len && (mobcountmax || floracountmax))
|
|
log_and_message_admins("Error! [src] does not have any turfs!")
|
|
return TRUE
|
|
|
|
//Handles random mob placement for mobcountmax, as defined/randomized in initialize of each individual area.
|
|
if(mobcountmax || semirandom)
|
|
spawn_mob_on_turf()
|
|
|
|
//Handles random flora placement for floracountmax, as defined/randomized in initialize of each individual area.
|
|
if(floracountmax)
|
|
spawn_flora_on_turf()
|
|
|
|
/area/proc/spawn_mob_on_turf()
|
|
if(!valid_mobs.len)
|
|
log_mapping("[src] does not have a set valid mobs list!")
|
|
return TRUE
|
|
|
|
var/mob/M
|
|
var/turf/Turf
|
|
if(semirandom)
|
|
for(var/groupscount = 1 to semirandom_groups)
|
|
var/ourgroup = pickweight(valid_mobs)
|
|
var/goodnum = rand(semirandom_group_min, semirandom_group_max)
|
|
for(var/mobscount = 1 to goodnum)
|
|
M = pickweight(ourgroup)
|
|
Turf = pick(valid_spawn_turfs)
|
|
valid_spawn_turfs -= Turf
|
|
var/mob/ourmob = new M(Turf)
|
|
adjust_mob(ourmob)
|
|
else
|
|
for(var/mobscount = 1 to mobcountmax)
|
|
M = pickweight(valid_mobs)
|
|
Turf = pick(valid_spawn_turfs)
|
|
valid_spawn_turfs -= Turf
|
|
var/mob/ourmob = new M(Turf)
|
|
adjust_mob(ourmob)
|
|
|
|
/area/proc/adjust_mob(var/mob/living/simple_mob/M)
|
|
if(!isanimal(M))
|
|
log_admin("[src] spawned [M.type], which is not a simplemob, FIXIT")
|
|
return
|
|
var/datum/ai_holder/our_ai_holder = M.ai_holder
|
|
if(ghostjoin)
|
|
M.ghostjoin = TRUE
|
|
M.ghostjoin_icon()
|
|
if(!our_ai_holder)
|
|
return
|
|
switch(mob_intent)
|
|
if("default")
|
|
return
|
|
if("hostile")
|
|
our_ai_holder.hostile = TRUE
|
|
our_ai_holder.retaliate = TRUE
|
|
if("retaliate")
|
|
our_ai_holder.hostile = FALSE
|
|
our_ai_holder.retaliate = TRUE
|
|
if("passive")
|
|
our_ai_holder.hostile = FALSE
|
|
our_ai_holder.retaliate = FALSE
|
|
|
|
/area/proc/spawn_flora_on_turf()
|
|
if(!valid_flora.len)
|
|
log_mapping("[src] does not have a set valid flora list!")
|
|
return TRUE
|
|
|
|
var/obj/F
|
|
var/turf/Turf
|
|
for(var/floracount = 1 to floracountmax)
|
|
F = pick(valid_flora)
|
|
Turf = pick(valid_spawn_turfs)
|
|
valid_spawn_turfs -= Turf
|
|
new F(Turf)
|