Files
CHOMPStation2/code/game/area/Away Mission areas.dm
2025-09-14 20:05:26 +02:00

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)