mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-09 07:08:03 +01:00
162 lines
5.2 KiB
Plaintext
162 lines
5.2 KiB
Plaintext
#define MAINT_LOOT "maintenance_loot"
|
|
#define DUMPSTER_LOOT "dumpster_loot"
|
|
|
|
/obj/effect/spawner/random/maintenance
|
|
name = "maintenance loot spawner"
|
|
desc = "Come on Lady Luck, spawn me a pair of sunglasses."
|
|
icon_state = "loot"
|
|
remove_if_cant_spawn = FALSE //don't remove stuff from the global maint list, which other can use.
|
|
/// The global loot list we are going to use to spawn loot from
|
|
var/loot_table = MAINT_LOOT
|
|
// see code/_globalvars/lists/maintenance_loot.dm for loot table
|
|
|
|
/// A subtype of maintenance loot spawner that does not spawn any decals, for when you want to place them on chasm turfs and such
|
|
/// decals such as ashes will cause NeverShouldHaveComeHere() to fail on such turfs, which creates annoying rng based CI failures
|
|
/obj/effect/spawner/random/maintenance/no_decals
|
|
|
|
/obj/effect/spawner/random/maintenance/no_decals/can_spawn(loot)
|
|
if(ispath(loot, /obj/effect/decal))
|
|
return FALSE
|
|
return ..()
|
|
|
|
/obj/effect/spawner/random/maintenance/examine(mob/user)
|
|
. = ..()
|
|
. += span_info("This spawner has an effective loot count of [get_effective_lootcount()].")
|
|
|
|
/obj/effect/spawner/random/maintenance/Initialize(mapload)
|
|
switch(loot_table)
|
|
if(MAINT_LOOT)
|
|
loot = GLOB.maintenance_loot
|
|
if(DUMPSTER_LOOT)
|
|
loot = GLOB.dumpster_loot
|
|
//BUBBERSTATION CHANGE START: EMPTY MAINT LOOT TRAIT ONLY SPAWNS THE BEST LOOT
|
|
if(HAS_TRAIT(SSstation, STATION_TRAIT_EMPTY_MAINT))
|
|
if(prob(80))
|
|
loot = GLOB.uncommon_loot
|
|
else if(prob(80))
|
|
loot = GLOB.rarity_loot
|
|
else
|
|
loot = GLOB.oddity_loot
|
|
//BUBBERSTATION CHANGE END
|
|
return ..()
|
|
|
|
/obj/effect/spawner/random/maintenance/skew_loot_weights(list/loot_list, exponent)
|
|
///We only need to skew the weights once, since it's a global list used by all maint spawners.
|
|
var/static/already_done = FALSE
|
|
if(already_done)
|
|
switch(loot_table)
|
|
if(MAINT_LOOT)
|
|
if(loot_list == GLOB.maintenance_loot)
|
|
return
|
|
if(DUMPSTER_LOOT)
|
|
if(loot_list == GLOB.dumpster_loot)
|
|
return
|
|
|
|
already_done = TRUE
|
|
return ..()
|
|
|
|
/obj/effect/spawner/random/maintenance/proc/hide()
|
|
SetInvisibility(INVISIBILITY_OBSERVER)
|
|
alpha = 100
|
|
|
|
/obj/effect/spawner/random/maintenance/proc/get_effective_lootcount()
|
|
|
|
var/effective_lootcount = spawn_loot_count
|
|
|
|
//Blubberstation change: Makes it so that lots of loot only spawns on tables and such, and not bare floors.
|
|
if(src.loc && isfloorturf(src.loc)) //Putting a check for src.loc here because unittests spawn things in nullspace xd
|
|
for(var/atom/movable/M as anything in src.loc.contents)
|
|
if(GLOB.typecache_elevated_structures[M.type]) //Are we an elevated structure?
|
|
effective_lootcount *= 3
|
|
break
|
|
//End of blubberstation change.
|
|
|
|
if(HAS_TRAIT(SSstation, STATION_TRAIT_FILLED_MAINT))
|
|
effective_lootcount = FLOOR(spawn_loot_count * 1.5, 1)
|
|
|
|
else if(HAS_TRAIT(SSstation, STATION_TRAIT_EMPTY_MAINT))
|
|
//BUBBERSTATION CHANGE START: EMPTY MAINT LOOT TRAIT ONLY SPAWNS THE BEST LOOT. USUALLY
|
|
if(loot == GLOB.uncommon_loot )
|
|
effective_lootcount = min(effective_lootcount,3) //Maximum 3.
|
|
else if(effective_lootcount > 1)
|
|
effective_lootcount = 1
|
|
else
|
|
effective_lootcount = 0
|
|
//BUBBERSTATION CHANGE END: EMPTY MAINT LOOT TRAIT ONLY SPAWNS THE BEST LOOT. USUALLY
|
|
|
|
return effective_lootcount
|
|
|
|
/obj/effect/spawner/random/maintenance/spawn_loot(lootcount_override)
|
|
if(isnull(lootcount_override))
|
|
lootcount_override = get_effective_lootcount()
|
|
. = ..()
|
|
|
|
// In addition, closets that are closed will have the maintenance loot inserted inside.
|
|
for(var/obj/structure/closet/closet in get_turf(src))
|
|
if(!closet.opened)
|
|
closet.take_contents()
|
|
|
|
/obj/effect/spawner/random/maintenance/two
|
|
name = "2 x maintenance loot spawner"
|
|
spawn_loot_count = 2
|
|
|
|
/obj/effect/spawner/random/maintenance/three
|
|
name = "3 x maintenance loot spawner"
|
|
spawn_loot_count = 3
|
|
|
|
/obj/effect/spawner/random/maintenance/four
|
|
name = "4 x maintenance loot spawner"
|
|
spawn_loot_count = 4
|
|
|
|
/obj/effect/spawner/random/maintenance/five
|
|
name = "5 x maintenance loot spawner"
|
|
spawn_loot_count = 5
|
|
|
|
/obj/effect/spawner/random/maintenance/six
|
|
name = "6 x maintenance loot spawner"
|
|
spawn_loot_count = 6
|
|
|
|
/obj/effect/spawner/random/maintenance/seven
|
|
name = "7 x maintenance loot spawner"
|
|
spawn_loot_count = 7
|
|
|
|
/obj/effect/spawner/random/maintenance/eight
|
|
name = "8 x maintenance loot spawner"
|
|
spawn_loot_count = 8
|
|
|
|
/obj/effect/spawner/random/maintenance/no_decals/two
|
|
name = "2 x maintenance loot spawner"
|
|
spawn_loot_count = 2
|
|
|
|
/obj/effect/spawner/random/maintenance/no_decals/three
|
|
name = "3 x maintenance loot spawner"
|
|
spawn_loot_count = 3
|
|
|
|
/obj/effect/spawner/random/maintenance/no_decals/four
|
|
name = "4 x maintenance loot spawner"
|
|
spawn_loot_count = 4
|
|
|
|
/obj/effect/spawner/random/maintenance/no_decals/five
|
|
name = "5 x maintenance loot spawner"
|
|
spawn_loot_count = 5
|
|
|
|
/obj/effect/spawner/random/maintenance/no_decals/six
|
|
name = "6 x maintenance loot spawner"
|
|
spawn_loot_count = 6
|
|
|
|
/obj/effect/spawner/random/maintenance/no_decals/seven
|
|
name = "7 x maintenance loot spawner"
|
|
spawn_loot_count = 7
|
|
|
|
/obj/effect/spawner/random/maintenance/no_decals/eight
|
|
name = "8 x maintenance loot spawner"
|
|
spawn_loot_count = 8
|
|
|
|
/obj/effect/spawner/random/maintenance/dumpster
|
|
name = "dumpster loot spawner"
|
|
spawn_loot_count = 3
|
|
loot_table = DUMPSTER_LOOT
|
|
|
|
#undef MAINT_LOOT
|
|
#undef DUMPSTER_LOOT
|