The Grand /TG Port - Part 6

This commit is contained in:
Casey
2022-04-02 23:31:31 -04:00
committed by CHOMPStation2
parent c08fe46e9a
commit de0be34c99
17 changed files with 432 additions and 7 deletions

View File

@@ -106,3 +106,16 @@
cost = 35
containertype = /obj/structure/closet/crate/aether
containername = "Emergency crate"
/datum/supply_pack/atmos/firefighting
name = "Firefighting equipment"
contains = list(
/obj/item/clothing/suit/fire/heavy = 2,
/obj/item/weapon/tank/oxygen/red = 2,
/obj/item/weapon/watertank/atmos = 2,
/obj/item/device/flashlight = 2,
/obj/item/clothing/head/hardhat/firefighter/atmos = 2
)
cost = 35
containertype = /obj/structure/closet/crate/aether
containername = "Firefighting crate"

View File

@@ -288,6 +288,16 @@
containername = "Riot armor crate"
access = access_armory
/datum/supply_pack/security/riot_sprayer
name = "Gear - Riot sprayer"
contains = list(
/obj/item/weapon/watertank/pepperspray
)
cost = 40
containertype = /obj/structure/closet/crate/secure/lawson
containername = "Riot sprayer crate"
access = access_armory
/datum/supply_pack/security/ablative_armor
name = "Armor - Ablative"
contains = list(

View File

@@ -59,7 +59,7 @@ var/list/random_useful_
if(prob(70)) // Misc. junk
if(!random_junk_)
random_junk_ = subtypesof(/obj/item/trash)
random_junk_ += /obj/effect/decal/cleanable/spiderling_remains
random_junk_ += /obj/effect/decal/cleanable/bug_remains
random_junk_ += /obj/effect/decal/remains/mouse
random_junk_ += /obj/effect/decal/remains/robot
random_junk_ += /obj/item/weapon/paper/crumpled

View File

@@ -24,7 +24,7 @@
/obj/effect/decal/cleanable/blood/gibs/robot,
/obj/effect/decal/cleanable/blood/oil,
/obj/effect/decal/cleanable/blood/oil/streak,
/obj/effect/decal/cleanable/spiderling_remains,
/obj/effect/decal/cleanable/bug_remains,
/obj/effect/decal/remains/mouse,
/obj/effect/decal/cleanable/vomit,
/obj/effect/decal/cleanable/blood/splatter,

View File

@@ -771,7 +771,7 @@
/obj/random/mouseremains/item_to_spawn()
return pick(/obj/item/device/assembly/mousetrap,
/obj/item/device/assembly/mousetrap/armed,
/obj/effect/decal/cleanable/spiderling_remains,
/obj/effect/decal/cleanable/bug_remains,
/obj/effect/decal/cleanable/ash,
/obj/item/trash/cigbutt,
/obj/item/trash/cigbutt/cigarbutt,

View File

@@ -97,7 +97,8 @@
starts_with = list(
/obj/item/clothing/suit/fire/heavy,
/obj/item/weapon/tank/oxygen/red,
/obj/item/weapon/extinguisher/atmo,
/obj/item/weapon/watertank/atmos,
/obj/item/device/flashlight,
/obj/item/clothing/head/hardhat/firefighter/atmos)
/*

View File

@@ -291,10 +291,12 @@
/obj/structure/mob_spawner/mouse_nest
name = "trash"
desc = "A small heap of trash, perfect for mice to nest in."
desc = "A small heap of trash, perfect for mice and other pests to nest in."
icon = 'icons/obj/trash_piles.dmi'
icon_state = "randompile"
spawn_types = list(/mob/living/simple_mob/animal/passive/mouse)
spawn_types = list(
/mob/living/simple_mob/animal/passive/mouse= 100,
/mob/living/simple_mob/animal/passive/cockroach = 25)
simultaneous_spawns = 1
destructible = 1
spawn_delay = 1 HOUR

View File

@@ -487,6 +487,7 @@
/obj/item/weapon/plantspray/pests = 20,
/obj/item/weapon/reagent_containers/syringe = 5,
/obj/item/weapon/reagent_containers/glass/beaker = 4,
/obj/item/weapon/watertank = 1,
/obj/item/weapon/storage/bag/plants = 5)
premium = list(/obj/item/weapon/reagent_containers/glass/bottle/ammonia = 10,
/obj/item/weapon/reagent_containers/glass/bottle/diethylamine = 5)
@@ -1533,7 +1534,8 @@
/obj/item/clothing/gloves/black = 5,
/obj/item/weapon/storage/belt/janitor = 5,
/obj/item/clothing/shoes/galoshes = 5,
/obj/item/weapon/cartridge/janitor = 5
/obj/item/weapon/cartridge/janitor = 5,
/obj/item/weapon/watertank/janitor = 1
)
req_log_access = access_hop
has_logs = 1

View File

@@ -17,6 +17,10 @@
name = "infestation - spiders"
event_type = /datum/event2/event/infestation/spiderlings
/datum/event2/event/infestation/cockroaches
vermin_string = "cockroaches"
max_vermin = 6
things_to_spawn = list(/mob/living/simple_mob/animal/passive/cockroach)
/datum/event2/event/infestation
var/vermin_string = null

View File

@@ -0,0 +1,295 @@
/*
* Hydroponics tank and base code
*/
/obj/item/weapon/watertank
name = "backpack water tank"
desc = "A S.U.N.S.H.I.N.E. brand watertank backpack with nozzle to water plants."
icon = 'icons/inventory/back/item.dmi'
icon_state = "waterbackpack"
item_state = "waterbackpack"
w_class = ITEMSIZE_LARGE
slot_flags = SLOT_BACK
slowdown = 0.5
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30)
var/obj/item/noz
var/volume = 500
/obj/item/weapon/watertank/Initialize()
. = ..()
create_reagents(volume, OPENCONTAINER)
noz = make_noz()
/obj/item/weapon/watertank/MouseDrop()
if(ismob(loc))
if(!CanMouseDrop(src))
return
var/mob/M = loc
if(!M.unEquip(src))
return
add_fingerprint(usr)
M.put_in_any_hand_if_possible(src)
/obj/item/weapon/watertank/Destroy()
QDEL_NULL(noz)
return ..()
/obj/item/weapon/watertank/ui_action_click(mob/user)
toggle_mister(user)
/obj/item/weapon/watertank/attack_hand(var/mob/user)
if(loc == user)
toggle_mister()
else
..()
/obj/item/weapon/watertank/item_action_slot_check(slot, mob/user)
if(slot == user.getBackSlot())
return 1
//checks that the base unit is in the correct slot to be used
/obj/item/weapon/watertank/proc/slot_check()
var/mob/M = loc
if(!istype(M))
return 0 //not equipped
if((slot_flags & SLOT_BACK) && M.get_equipped_item(slot_back) == src)
return 1
if((slot_flags & SLOT_BACK) && M.get_equipped_item(slot_s_store) == src)
return 1
return 0
/obj/item/weapon/watertank/verb/toggle_mister()
set name = "Toggle Mister"
set category = "Object"
var/mob/living/carbon/human/user = usr
if(!noz)
to_chat(user, "<span class='warning'>The mister is missing!</span>")
return
if(noz.loc != src)
remove_noz(user) //Remove from their hands and back onto the defib unit
return
if(!slot_check())
to_chat(user, "<span class='warning'>You need to equip [src] before taking out [noz].</span>")
else
if(!usr.put_in_hands(noz)) //Detach the handset into the user's hands
to_chat(user, "<span class='warning'>You need a free hand to hold the handset!</span>")
update_icon() //success
/obj/item/weapon/watertank/proc/make_noz()
return new /obj/item/weapon/reagent_containers/spray/mister(src)
/obj/item/weapon/watertank/equipped(mob/user, slot)
..()
if(slot != slot_back)
remove_noz()
/obj/item/weapon/watertank/proc/remove_noz(var/mob/user)
if(!noz) return
if(ismob(noz.loc))
var/mob/M = noz.loc
if(M.drop_from_inventory(noz, src))
to_chat(user, "<span class='notice'>\The [noz] snaps back into the main unit.</span>")
else
noz.forceMove(src)
/obj/item/weapon/watertank/attackby(obj/item/W, mob/user, params)
if(W == noz)
remove_noz()
return 1
else
return ..()
/obj/item/weapon/watertank/dropped(var/mob/user)
..()
remove_noz(user)
/*
* This mister item is intended as an extension of the watertank and always attached to it.
* Therefore, it's designed to be "locked" to the player's hands or extended back onto
* the watertank backpack. Allowing it to be placed elsewhere or created without a parent
* watertank object will likely lead to weird behaviour or runtimes.
*/
/*
* Hydroponics mister
*/
/obj/item/weapon/reagent_containers/spray/mister
name = "water mister"
desc = "A mister nozzle attached to a water tank."
icon_state = "mister"
item_state = "mister"
w_class = ITEMSIZE_LARGE
amount_per_transfer_from_this = 50
possible_transfer_amounts = list(50)
volume = 500
item_flags = NOBLUDGEON
slot_flags = NONE
var/obj/item/weapon/watertank/tank
/obj/item/weapon/reagent_containers/spray/mister/Initialize()
. = ..()
tank = loc
if(!istype(tank))
return INITIALIZE_HINT_QDEL
reagents = tank.reagents //This mister is really just a proxy for the tank's reagents
/obj/item/weapon/reagent_containers/spray/mister/doMove(atom/destination)
if(destination && (destination != tank.loc || !ismob(destination)))
if (loc != tank)
to_chat(tank.loc, "<span class = 'notice'>The mister snaps back onto the watertank.</span>")
destination = tank
..()
/obj/item/weapon/reagent_containers/spray/mister/afterattack(obj/target, mob/user, proximity)
if(target.loc == loc) //Safety check so you don't fill your mister with mutagen or something and then blast yourself in the face with it
return
..()
/*
* Janitor tank
*/
/obj/item/weapon/watertank/janitor
name = "backpack cleaner tank"
desc = "A janitorial cleaner backpack with nozzle to clean blood and graffiti."
icon_state = "waterbackpackjani"
item_state = "waterbackpackjani"
/obj/item/weapon/watertank/janitor/Initialize()
. = ..()
reagents.add_reagent("cleaner", 500)
/obj/item/weapon/watertank/janitor/make_noz()
return new /obj/item/weapon/reagent_containers/spray/mister/janitor(src)
/*
* Janitor mister
*/
/obj/item/weapon/reagent_containers/spray/mister/janitor
name = "janitor spray nozzle"
desc = "A janitorial spray nozzle attached to a watertank, designed to clean up large messes."
icon_state = "misterjani"
item_state = "misterjani"
amount_per_transfer_from_this = 5
possible_transfer_amounts = list(5,10)
spray_size = 4
/*
* Security tank
*/
/obj/item/weapon/watertank/pepperspray
name = "ANTI-TIDER-2500 suppression backpack"
desc = "The ultimate crowd-control device; this tool allows the user to quickly and efficiently pacify groups of hostile targets."
icon_state = "pepperbackpacksec"
item_state = "pepperbackpacksec"
volume = 1000
/obj/item/weapon/watertank/pepperspray/Initialize()
. = ..()
reagents.add_reagent("condensedcapsaicin", 1000)
/obj/item/weapon/watertank/pepperspray/make_noz()
return new /obj/item/weapon/reagent_containers/spray/mister/pepperspray(src)
/*
* Security mister
*/
/obj/item/weapon/reagent_containers/spray/mister/pepperspray
name = "security spray nozzle"
desc = "A pacifying spray nozzle attached to a pepperspray tank, designed to silence perps."
icon_state = "mistersec"
item_state = "mistersec"
amount_per_transfer_from_this = 5
possible_transfer_amounts = list(5,10)
spray_size = 6
/*
* Operative tank
*/
/obj/item/weapon/watertank/op
name = "uborka tank"
desc = "A Russian backpack spray for systematic cleansing of carbon lifeforms."
icon_state = "waterbackpackop"
item_state = "waterbackpackop"
w_class = ITEMSIZE_NORMAL
volume = 2000
slowdown = 0
/obj/item/weapon/watertank/op/Initialize()
. = ..()
reagents.add_reagent("fuel", 500)
reagents.add_reagent("cryptobiolin", 500)
reagents.add_reagent("phoron", 500)
reagents.add_reagent("condensedcapsaicin", 500)
/obj/item/weapon/watertank/op/make_noz()
return new /obj/item/weapon/reagent_containers/spray/mister/op(src)
/*
* Operative mister
*/
/obj/item/weapon/reagent_containers/spray/mister/op
name = "uborka spray nozzle"
desc = "A mister nozzle attached to several extended water tanks. It suspiciously has a compressor in the system and is labelled entirely in Cyrillic."
icon_state = "misterop"
item_state = "misterop"
w_class = ITEMSIZE_HUGE
volume = 2000
amount_per_transfer_from_this = 100
possible_transfer_amounts = list(75,100,150)
/*
* Atmos tank
*/
/obj/item/weapon/watertank/atmos
name = "backpack firefighter tank"
desc = "A pressurized backpack tank with extinguisher nozzle, intended to fight fires."
icon_state = "waterbackpackatmos"
item_state = "waterbackpackatmos"
volume = 200
/obj/item/weapon/watertank/atmos/Initialize()
. = ..()
reagents.add_reagent("water", 200)
/obj/item/weapon/watertank/atmos/make_noz()
return new /obj/item/weapon/reagent_containers/spray/mister/atmos(src)
/*
* Atmos hose
*/
/obj/item/weapon/reagent_containers/spray/mister/atmos
name = "extinguisher nozzle"
desc = "A heavy duty nozzle attached to a firefighter's backpack tank."
icon_state = "atmos_nozzle"
item_state = "nozzleatmos"
w_class = ITEMSIZE_HUGE
volume = 200
amount_per_transfer_from_this = 5
possible_transfer_amounts = list(5,10)
spray_size = null
/obj/item/weapon/reagent_containers/spray/mister/atmos/Spray_at(atom/A as mob|obj)
playsound(src, 'sound/effects/spray3.ogg', rand(50,1), -6)
var/direction = get_dir(src, A)
var/turf/T = get_turf(A)
var/turf/T1 = get_step(T,turn(direction, 90))
var/turf/T2 = get_step(T,turn(direction, -90))
var/list/the_targets = list(T, T1, T2)
for(var/a = 1 to 3)
spawn(0)
if(reagents.total_volume < 1) break
var/obj/effect/effect/water/chempuff/D = new/obj/effect/effect/water/chempuff(get_turf(src))
var/turf/my_target = the_targets[a]
D.create_reagents(amount_per_transfer_from_this)
if(!src)
return
reagents.trans_to_obj(D, amount_per_transfer_from_this)
D.set_color()
D.set_up(my_target, rand(6, 8), 2)
return

View File

@@ -202,6 +202,23 @@ var/list/slot_equipment_priority = list( \
drop_from_inventory(I, target)
return TRUE
//visibly unequips I but it is NOT MOVED AND REMAINS IN SRC
//item MUST BE FORCEMOVE'D OR QDEL'D
/mob/proc/temporarilyRemoveItemFromInventory(obj/item/I, force = FALSE, idrop = TRUE)
return u_equip(I, force, null, TRUE, idrop)
///sometimes we only want to grant the item's action if it's equipped in a specific slot.
/obj/item/proc/item_action_slot_check(slot, mob/user)
if(slot == SLOT_BACK || slot == LEGS) //these aren't true slots, so avoid granting actions there
return FALSE
return TRUE
///Get the item on the mob in the storage slot identified by the id passed in
/mob/proc/get_item_by_slot(slot_id)
return null
/mob/proc/getBackSlot()
return SLOT_BACK
//Attemps to remove an object on a mob.
/mob/proc/remove_from_mob(var/obj/O, var/atom/target)

View File

@@ -0,0 +1,76 @@
//Base cockroach
/mob/living/simple_mob/animal/passive/cockroach
name = "cockroach"
real_name = "cockroach"
desc = "This station is just crawling with bugs."
tt_desc = "E Blattella germanica"
icon_state = "cockroach"
item_state = "cockroach"
icon_living = "cockroach"
icon_dead = "cockroach_rest" //No real 'dead' sprite
icon_rest = "cockroach_rest"
maxHealth = 1
health = 1
movement_cooldown = 2.5
mob_size = MOB_MINISCULE
pass_flags = PASSTABLE
can_pull_mobs = MOB_PULL_NONE
layer = MOB_LAYER
density = FALSE
response_help = "pokes"
response_disarm = "shoos"
response_harm = "splats"
speak_emote = list("chitters")
//Cockroaches are enviromentally superior
min_oxy = 0
max_oxy = 0
min_tox = 0
max_tox = 0
min_co2 = 0
max_co2 = 0
min_n2 = 0
max_n2 = 0
minbodytemp = 0
maxbodytemp = 999999
var/squish_chance = 25
//Deletes the body upon death
/mob/living/simple_mob/animal/passive/cockroach/death()
new /obj/effect/decal/cleanable/bug_remains(src.loc)
qdel(src)
//Squish code
/mob/living/simple_mob/animal/passive/cockroach/Crossed(var/atom/movable/AM)
if(ismob(AM))
if(isliving(AM))
var/mob/living/A = AM
if(A.mob_size > MOB_SMALL)
if(prob(squish_chance))
A.visible_message("<span class='notice'>[A] squashed [src].</span>", "<span class='notice'>You squashed [src].</span>")
adjustBruteLoss(1) //kills a normal cockroach
else
visible_message("<span class='notice'>[src] avoids getting crushed.</span>")
else
if(isstructure(AM))
if(prob(squish_chance))
AM.visible_message("<span class='notice'>[src] was crushed under [AM].</span>")
adjustBruteLoss(1)
else
visible_message("<span class='notice'>[src] avoids getting crushed.</span>")
/mob/living/simple_mob/animal/passive/cockroach/ex_act() //Explosions are a terrible way to handle a cockroach.
return
//Custom stain so it's not "spiderling remains"
/obj/effect/decal/cleanable/bug_remains
name = "bug remains"
desc = "Green squishy mess."
icon = 'icons/effects/effects.dmi'
icon_state = "greenshatter"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 41 KiB

View File

@@ -2519,6 +2519,7 @@
#include "code\modules\holomap\holomap_datum.dm"
#include "code\modules\holomap\mapper.dm"
#include "code\modules\holomap\station_holomap.dm"
#include "code\modules\hydroponics\backtank.dm"
#include "code\modules\hydroponics\grown.dm"
#include "code\modules\hydroponics\grown_inedible.dm"
#include "code\modules\hydroponics\grown_predefined.dm"
@@ -3178,8 +3179,12 @@
#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\thermic.dm"
#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\tunneler.dm"
#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\webslinger.dm"
<<<<<<< HEAD
#include "code\modules\mob\living\simple_mob\subtypes\animal\hyena\hyena.dm"
#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\armadillo_ch.dm"
=======
#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\cockroach.dm"
>>>>>>> b9473ccb94... Merge pull request #12592 from GhostActual/tg-port-6
#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\crab.dm"
#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\fish.dm"
#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\fish_vr.dm"