mirror of
https://github.com/Citadel-Station-13/Citadel-Station-13-RP.git
synced 2026-08-22 21:57:09 +01:00
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. --> <!-- You can view Contributing.MD for a detailed description of the pull request process. --> ## About The Pull Request Applies a nerf to Monarch's charge, no longer instantaneous. Lowers Monarch's burn/energy resist, burn should work better against it since Xenomorphs are weak to fire. Axes **any** and all mentions of natural spawn positions, this should never spawn naturally. It is a boss mob. <!-- Describe The Pull Request. Please be sure every change is documented or this can delay review and even discourage maintainers from merging your PR! --> ## Why It's Good For The Game This has been an issue for a while, but the natural spawn points for the Monarch were the last straw. Oopsies. <!-- Argue for the merits of your changes and how they benefit the game, especially if they are controversial and/or far reaching. If you can't actually explain WHY what you are doing will improve the game, then it probably isn't good for the game in the first place. --> ## Changelog <!-- If your PR modifies aspects of the game that can be concretely observed by players or admins you should add a changelog. If your change does NOT meet this description, remove this section. Please note that maintainers freely reserve the right to remove and add tags should they deem it appropriate. You can attempt to finagle the system all you want, but it's best to shoot for clear communication right off the bat. --> 🆑 balance: lowers Monarch's burn resist, makes charge not instant. fix: Removes any reference to the Monarch spawning naturally, probable or not. /🆑 <!-- Both 🆑's are required for the changelog to work! You can put your name to the right of the first 🆑 if you want to overwrite your GitHub username as author ingame. --> <!-- You can use multiple of the same prefix (they're only used for the icon ingame) and delete the unneeded ones. Despite some of the tags, changelogs should generally represent how a player might be affected by the changes rather than a summary of the PR's contents. -->
291 lines
11 KiB
Plaintext
291 lines
11 KiB
Plaintext
/obj/structure/largecrate
|
|
name = "large crate"
|
|
desc = "A hefty wooden crate."
|
|
icon = 'icons/obj/storage.dmi'
|
|
icon_state = "densecrate"
|
|
density = 1
|
|
worth_intrinsic = 200
|
|
var/list/starts_with
|
|
var/storage_capacity = 2 * MOB_LARGE //This is so that someone can't pack hundreds of items in a locker/crate
|
|
//then open it in a populated area to crash clients.
|
|
|
|
|
|
|
|
/obj/structure/largecrate/Initialize(mapload) //Shamelessly copied from closets.dm since the old Initializer didnt seem to function properly - Bloop
|
|
. = ..()
|
|
if(mapload)
|
|
addtimer(CALLBACK(src, PROC_REF(take_contents)), 0)
|
|
legacy_spawn_contents()
|
|
// Closets need to come later because of spawners potentially creating objects during init.
|
|
return INITIALIZE_HINT_LATELOAD
|
|
|
|
/obj/structure/largecrate/LateInitialize()
|
|
if(starts_with)
|
|
create_objects_in_loc(src, starts_with)
|
|
starts_with = null
|
|
update_icon()
|
|
|
|
/obj/structure/largecrate/proc/take_contents()
|
|
// if(istype(loc, /mob/living))
|
|
// return // No collecting mob organs if spawned inside mob
|
|
// I'll leave this out, if someone dies to this from voring someone who made a closet go yell at a coder to
|
|
// fix the fact you can build closets inside living people, not try to make it work you numbskulls.
|
|
var/obj/item/I
|
|
for(I in src.loc)
|
|
if(I.density || I.anchored || I == src) continue
|
|
I.forceMove(src)
|
|
// adjust locker size to hold all items with 5 units of free store room
|
|
var/content_size = 0
|
|
for(I in src.contents)
|
|
content_size += CEILING(I.w_class/2, 1)
|
|
if(content_size > storage_capacity-5)
|
|
storage_capacity = content_size + 5
|
|
|
|
/**
|
|
* The proc that fills the closet with its initial contents.
|
|
*/
|
|
/obj/structure/largecrate/proc/legacy_spawn_contents()
|
|
return
|
|
|
|
/* /// Doesnt work but im gonna leave this here commented out in case I broke something with the shameless copy pasta from above -Bloop
|
|
/obj/structure/largecrate/Initialize(mapload)
|
|
. = ..()
|
|
if(starts_with)
|
|
create_objects_in_loc(src, starts_with)
|
|
starts_with = null
|
|
for(var/obj/I in src.loc)
|
|
if(I.density || I.anchored || I == src || (I.atom_flags & ATOM_ABSTRACT))
|
|
continue
|
|
I.forceMove(src)
|
|
update_icon()
|
|
|
|
*/
|
|
|
|
/obj/structure/largecrate/attack_hand(mob/user, datum/event_args/actor/clickchain/e_args)
|
|
to_chat(user, "<span class='notice'>You need a crowbar to pry this open!</span>")
|
|
return
|
|
|
|
/obj/structure/largecrate/attackby(obj/item/W as obj, mob/user as mob)
|
|
var/turf/T = get_turf(src)
|
|
if(!T)
|
|
to_chat(user, "<span class='notice'>You can't open this here!</span>")
|
|
if(W.is_crowbar())
|
|
new /obj/item/stack/material/wood(src)
|
|
|
|
for(var/atom/movable/AM in contents)
|
|
if(!(AM.atom_flags & ATOM_ABSTRACT))
|
|
AM.forceMove(T)
|
|
|
|
user.visible_message("<span class='notice'>[user] pries \the [src] open.</span>", \
|
|
"<span class='notice'>You pry open \the [src].</span>", \
|
|
"<span class='notice'>You hear splitting wood.</span>")
|
|
qdel(src)
|
|
else
|
|
return attack_hand(user)
|
|
|
|
/obj/structure/largecrate/mule
|
|
name = "MULE crate"
|
|
|
|
/obj/structure/largecrate/hoverpod
|
|
name = "\improper Hoverpod assembly crate"
|
|
desc = "It comes in a box for the fabricator's sake. Where does the wood come from? ... And why is it lighter?"
|
|
icon_state = "mulecrate"
|
|
|
|
/obj/structure/largecrate/hoverpod/attackby(obj/item/W as obj, mob/user as mob)
|
|
if(W.is_crowbar())
|
|
var/obj/item/vehicle_module/ME
|
|
var/obj/vehicle/sealed/mecha/working/hoverpod/H = new (loc)
|
|
|
|
ME = new /obj/item/vehicle_module/tool/hydraulic_clamp
|
|
ME.attach(H)
|
|
ME = new /obj/item/vehicle_module/tool/passenger
|
|
ME.attach(H)
|
|
..()
|
|
|
|
/obj/structure/largecrate/vehicle
|
|
name = "vehicle crate"
|
|
desc = "It comes in a box for the consumer's sake. ..How is this lighter?"
|
|
icon_state = "vehiclecrate"
|
|
|
|
/obj/structure/largecrate/vehicle/bike
|
|
name = "spacebike crate"
|
|
starts_with = list(/obj/structure/vehiclecage/spacebike)
|
|
|
|
/obj/structure/largecrate/vehicle/quadbike
|
|
name = "\improper ATV crate"
|
|
starts_with = list(/obj/vehicle/ridden/quadbike/random,
|
|
/obj/item/key/quadbike)
|
|
|
|
/obj/structure/largecrate/vehicle/quadtrailer
|
|
name = "\improper ATV trailer crate"
|
|
starts_with = list(/obj/structure/vehiclecage/quadtrailer)
|
|
|
|
/obj/structure/largecrate/animal
|
|
icon_state = "lisacrate"
|
|
|
|
/obj/structure/largecrate/animal/mulebot
|
|
name = "Mulebot crate"
|
|
icon_state = "mulecrate"
|
|
starts_with = list(/mob/living/bot/mulebot)
|
|
|
|
/obj/structure/largecrate/animal/corgi
|
|
name = "corgi carrier"
|
|
starts_with = list(/mob/living/simple_mob/animal/passive/dog/corgi)
|
|
|
|
/obj/structure/largecrate/animal/cow
|
|
name = "cow crate"
|
|
starts_with = list(/mob/living/simple_mob/animal/passive/cow)
|
|
|
|
/obj/structure/largecrate/animal/goat
|
|
name = "goat crate"
|
|
starts_with = list(/mob/living/simple_mob/animal/goat)
|
|
|
|
/obj/structure/largecrate/animal/horse
|
|
name = "horse crate"
|
|
starts_with = list(/mob/living/simple_mob/horse)
|
|
|
|
/obj/structure/largecrate/animal/cat
|
|
name = "cat carrier"
|
|
starts_with = list(/mob/living/simple_mob/animal/passive/cat)
|
|
|
|
/obj/structure/largecrate/animal/cat/bones
|
|
starts_with = list(/mob/living/simple_mob/animal/passive/cat/bones)
|
|
|
|
/obj/structure/largecrate/animal/chick
|
|
name = "chicken crate"
|
|
starts_with = list(/mob/living/simple_mob/animal/passive/chick = 5)
|
|
|
|
/obj/structure/largecrate/animal/carp
|
|
name = "space carp crate"
|
|
starts_with = list(/mob/living/simple_mob/animal/space/carp = 3)
|
|
|
|
/obj/structure/largecrate/animal/spiders
|
|
name = "spider crate"
|
|
starts_with = list(/mob/living/simple_mob/animal/giant_spider= 3)
|
|
|
|
//! ## VR FILE MERGE ## !//
|
|
/obj/structure/largecrate/birds //This is an awful hack, but it's the only way to get multiple mobs spawned in one crate.
|
|
name = "Bird crate"
|
|
desc = "You hear chirping and cawing inside the crate. It sounds like there are a lot of birds in there..."
|
|
|
|
/obj/structure/largecrate/birds/attackby(obj/item/W as obj, mob/user as mob)
|
|
if(W.is_crowbar())
|
|
new /obj/item/stack/material/wood(src)
|
|
new /mob/living/simple_mob/animal/passive/bird(src)
|
|
new /mob/living/simple_mob/animal/passive/bird/parrot/kea(src)
|
|
new /mob/living/simple_mob/animal/passive/bird/parrot/eclectus(src)
|
|
new /mob/living/simple_mob/animal/passive/bird/parrot/grey_parrot(src)
|
|
new /mob/living/simple_mob/animal/passive/bird/parrot/black_headed_caique(src)
|
|
new /mob/living/simple_mob/animal/passive/bird/parrot/white_caique(src)
|
|
new /mob/living/simple_mob/animal/passive/bird/parrot/budgerigar(src)
|
|
new /mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/blue(src)
|
|
new /mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/bluegreen(src)
|
|
new /mob/living/simple_mob/animal/passive/bird/black_bird(src)
|
|
new /mob/living/simple_mob/animal/passive/bird/azure_tit(src)
|
|
new /mob/living/simple_mob/animal/passive/bird/european_robin(src)
|
|
new /mob/living/simple_mob/animal/passive/bird/goldcrest(src)
|
|
new /mob/living/simple_mob/animal/passive/bird/ringneck_dove(src)
|
|
new /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel(src)
|
|
new /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/white(src)
|
|
new /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/yellowish(src)
|
|
new /mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/grey(src)
|
|
new /mob/living/simple_mob/animal/passive/bird/parrot/sulphur_cockatoo(src)
|
|
new /mob/living/simple_mob/animal/passive/bird/parrot/white_cockatoo(src)
|
|
new /mob/living/simple_mob/animal/passive/bird/parrot/pink_cockatoo(src)
|
|
var/turf/T = get_turf(src)
|
|
for(var/atom/movable/AM in contents)
|
|
if(!(AM.atom_flags & ATOM_ABSTRACT))
|
|
AM.forceMove(T)
|
|
user.visible_message("<span class='notice'>[user] pries \the [src] open.</span>", \
|
|
"<span class='notice'>You pry open \the [src].</span>", \
|
|
"<span class='notice'>You hear splitting wood.</span>")
|
|
qdel(src)
|
|
else
|
|
return attack_hand(user)
|
|
/*
|
|
/obj/structure/largecrate/animal/pred
|
|
name = "Predator carrier"
|
|
starts_with = list(/mob/living/simple_mob/vore/catgirl)
|
|
*/
|
|
|
|
/obj/structure/largecrate/animal/pred/Initialize(mapload) //This is nessesary to get a random one each time.
|
|
starts_with = list(pick(/mob/living/simple_mob/vore/bee,
|
|
/mob/living/simple_mob/vore/aggressive/frog,
|
|
/mob/living/simple_mob/vore/aggressive/panther,
|
|
/mob/living/simple_mob/vore/aggressive/giant_snake,
|
|
/mob/living/simple_mob/animal/wolf,
|
|
/mob/living/simple_mob/animal/space/bear;0.5,
|
|
/mob/living/simple_mob/animal/space/carp,
|
|
/mob/living/simple_mob/vore/aggressive/mimic,
|
|
/mob/living/simple_mob/vore/aggressive/rat,
|
|
/mob/living/simple_mob/vore/aggressive/rat/tame,
|
|
// /mob/living/simple_mob/otie;0.5
|
|
))
|
|
return ..()
|
|
|
|
/obj/structure/largecrate/animal/dangerous
|
|
name = "Dangerous Predator carrier"
|
|
starts_with = list(/mob/living/simple_mob/animal/space/xenomorph/warrior)
|
|
|
|
/obj/structure/largecrate/animal/dangerous/Initialize(mapload)
|
|
starts_with = list(pick(/mob/living/simple_mob/animal/space/carp/large,
|
|
/mob/living/simple_mob/vore/aggressive/deathclaw,
|
|
/mob/living/simple_mob/vore/aggressive/dino,
|
|
/mob/living/simple_mob/animal/space/xenomorph/drone,
|
|
/mob/living/simple_mob/animal/space/xenomorph/neurotoxin_spitter,
|
|
/mob/living/simple_mob/vore/aggressive/corrupthound))
|
|
return ..()
|
|
|
|
/obj/structure/largecrate/animal/wolfgirl
|
|
name = "Wolfgirl Crate"
|
|
desc = "A sketchy looking crate with airholes that shakes and thuds every now and then. Someone seems to be demanding they be let out."
|
|
starts_with = list(/mob/living/simple_mob/vore/wolfgirl)
|
|
|
|
/obj/structure/largecrate/animal/fennec
|
|
name = "Fennec Crate"
|
|
desc = "Bounces around a lot. Looks messily packaged, were they in a hurry?"
|
|
starts_with = list(/mob/living/simple_mob/vore/fennec)
|
|
|
|
/obj/structure/largecrate/animal/fennec/Initialize(mapload)
|
|
starts_with = list(pick(/mob/living/simple_mob/vore/fennec,
|
|
/mob/living/simple_mob/vore/fennix;0.5))
|
|
return ..()
|
|
|
|
//Corporate Largecrates
|
|
|
|
/obj/structure/closet/crate/large/corporate/aether
|
|
desc = "A hefty metal crate, painted in Aether Atmospherics and Recycling colours."
|
|
icon_state = "aetherlarge"
|
|
icon_opened = "aetherlargeopen"
|
|
icon_closed = "aetherlarge"
|
|
|
|
/obj/structure/closet/crate/large/corporate/einstein
|
|
desc = "A hefty metal crate, with an Einstien Engines sticker, the company has since been bought out by Hephaestus Industries."
|
|
icon_state = "eelarge"
|
|
icon_opened = "eelargeopen"
|
|
icon_closed = "eelarge"
|
|
|
|
/obj/structure/closet/crate/large/corporate/nanotrasen
|
|
desc = "A hefty metal crate, painted in standard Nanotrasen livery."
|
|
icon_state = "ntlarge"
|
|
icon_opened = "ntlargeopen"
|
|
icon_closed = "ntlarge"
|
|
|
|
/obj/structure/closet/crate/large/corporate/xion
|
|
desc = "A hefty metal crate, painted in the orange of the former Xion Manufacturing Group, now a subsidiary of Aether Atmospherics and Recycling."
|
|
icon_state = "xionlarge"
|
|
icon_opened = "xionlargeopen"
|
|
icon_closed = "xionlarge"
|
|
|
|
/obj/structure/closet/crate/large/secure/corporate/heph
|
|
desc = "A hefty metal crate with an electronic locking system, marked with Hephaestus Industries colours."
|
|
icon_state = "hephlarge"
|
|
icon_opened = "hephlargeopen"
|
|
icon_closed = "hephlarge"
|
|
|
|
/obj/structure/closet/crate/large/secure/corporate/xion
|
|
desc = "A hefty metal crate with an electronic locking system, painted in the orange of the former Xion Manufacturing Group, now a subsidiary of Aether Atmospherics and Recycling."
|
|
icon_state = "xionlargesecure"
|
|
icon_opened = "xionlargesecureopen"
|
|
icon_closed = "xionlargesecure"
|