diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 67ee71ecd8..f736d649dc 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -65,6 +65,7 @@
throw_range = 15
attack_verb = list("HONKED")
var/spam_flag = 0
+ var/honkSound = 'sound/items/bikehorn.ogg' //Chompstation ADD: Adding an adjustable variable for bikehorns >:D - Jon
/obj/item/weapon/c_tube
@@ -414,7 +415,7 @@
src.pixel_y = rand(-5.0, 5)
..()
-//Rank 1
+//Rating 1
/obj/item/weapon/stock_parts/console_screen
name = "console screen"
@@ -476,7 +477,7 @@
origin_tech = list(TECH_MATERIAL = 1)
matter = list(DEFAULT_WALL_MATERIAL = 80)
-//Rank 2
+//Rating 2
/obj/item/weapon/stock_parts/capacitor/adv
name = "advanced capacitor"
@@ -560,6 +561,48 @@
rating = 3
matter = list(DEFAULT_WALL_MATERIAL = 80)
+//Rating 4
+
+/obj/item/weapon/stock_parts/capacitor/quadratic
+ name = "quadratic capacitor"
+ desc = "A quadratic capacitor used in the construction of a variety of devices."
+ icon_state = "quadratic_capacitor"
+ origin_tech = list(TECH_POWER = 7, TECH_MATERIAL = 6)
+ rating = 4
+ matter = list(DEFAULT_WALL_MATERIAL = 100,"glass" = 100)
+
+/obj/item/weapon/stock_parts/scanning_module/triphasic
+ name = "triphasic scanning module"
+ desc = "A compact, high resolution phasic scanning module used in the construction of certain devices."
+ icon_state = "triphasic_scan_module"
+ origin_tech = list(TECH_MAGNET = 8)
+ rating = 4
+ matter = list(DEFAULT_WALL_MATERIAL = 100,"glass" = 50)
+
+/obj/item/weapon/stock_parts/manipulator/femto
+ name = "femto-manipulator"
+ desc = "A very little manipulator used in the construction of certain devices."
+ icon_state = "femto_mani"
+ origin_tech = list(TECH_MATERIAL = 7, TECH_DATA = 4)
+ rating = 4
+ matter = list(DEFAULT_WALL_MATERIAL = 60,"diamond" = 50)
+
+/obj/item/weapon/stock_parts/micro_laser/quad
+ name = "quad-ultra micro-laser"
+ icon_state = "quadultra_micro_laser"
+ desc = "A small, very high-power laser used in certain devices."
+ origin_tech = list(TECH_MAGNET = 8)
+ rating = 4
+ matter = list(DEFAULT_WALL_MATERIAL = 20,"glass" = 40,"uranium" = 30)
+
+/obj/item/weapon/stock_parts/matter_bin/bluespace
+ name = "bluespace matter bin"
+ desc = "A seemingly bottomless container for holding matter."
+ icon_state = "bluespace_matter_bin"
+ origin_tech = list(TECH_MATERIAL = 6, TECH_BLUESPACE = 5)
+ rating = 4
+ matter = list(DEFAULT_WALL_MATERIAL = 80,"phoron" = 30)
+
// Subspace stock parts
/obj/item/weapon/stock_parts/subspace/ansible
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index 251f82d00b..4103bcd500 100755
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -1007,6 +1007,13 @@ area/space/atmosalert()
icon_state = "entry_D2"
base_turf = /turf/space
+// Adding this here so that arrival shuttle doors don't get STUCK - Jon
+//
+// DOOR STUCK
+/area/hallway/secondary/entry/D2/shuttleDoors
+ name = "\improper Arrival Shuttle Dock doors"
+ requires_power = 0
+
/area/hallway/secondary/entry/D3
name = "\improper Shuttle Dock Hallway - Dock Three"
icon_state = "entry_D3"
diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index dbbb442bba..1e9cf1efff 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -46,12 +46,12 @@
icon_state = "mobcap0"
matter = list(DEFAULT_WALL_MATERIAL = 1000)
-
+
throwforce = 00
throw_speed = 4
throw_range = 20
force = 0
-
+
var/colorindex = 0
var/mob/living/capsuleowner = null //taken from Capsule Code
var/sizetouse = 0.25
@@ -66,7 +66,7 @@
sleep(10)
capsuleowner.resize(sizetouse)
sizetouse = rand(25,200)/100 //randmization occurs after press
-
+
/obj/item/device/buttonofnormal/throw_impact(atom/A, speed, mob/user)
..()
if(isliving(A))
@@ -75,8 +75,8 @@
sleep(5)
var/mob/living/capsulehit = A
capsulehit.resize(sizetouse)
- sizetouse = rand(25,200)/100 //randmization occurs after press
-
+ sizetouse = rand(25,200)/100 //randmization occurs after press
+
/obj/item/device/buttonofnormal/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/weapon/pen))
colorindex += 1
@@ -88,12 +88,14 @@
/obj/item/device/buttonofnormal/proc/nonrandom() //Secret ball randmoizer rig code
if(colorindex==1)
- sizetouse = RESIZE_HUGE
+ sizetouse = RESIZE_HUGE
if(colorindex==2)
- sizetouse = RESIZE_BIG
+ sizetouse = RESIZE_BIG
if(colorindex==3)
- sizetouse = RESIZE_NORMAL
+ sizetouse = RESIZE_NORMAL
if(colorindex==4)
- sizetouse = RESIZE_SMALL
+ sizetouse = RESIZE_SMALL
if(colorindex==5)
- sizetouse = RESIZE_TINY
+ sizetouse = RESIZE_TINY
+
+
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index d8252fe4a9..2706bf09a5 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -1,3 +1,5 @@
+//TFF: Port VoreStation fix for door repair/reinforcing for borgs/drones.
+
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
#define DOOR_REPAIR_AMOUNT 50 //amount of health regained per stack amount used
@@ -26,7 +28,7 @@
var/destroy_hits = 10 //How many strong hits it takes to destroy the door
var/min_force = 10 //minimum amount of force needed to damage the door with a melee weapon
var/hitsound = 'sound/weapons/smash.ogg' //sound door makes when hit with a weapon
- var/obj/item/stack/material/steel/repairing
+ var/repairing
var/block_air_zones = 1 //If set, air zones cannot merge across the door even when it is opened.
var/close_door_at = 0 //When to automatically close the door, if possible
@@ -205,17 +207,19 @@
/obj/machinery/door/attackby(obj/item/I as obj, mob/user as mob)
src.add_fingerprint(user)
- if (attempt_vr(src,"attackby_vr",list(I, user))) return
+ if(istype(I))
+ if(attackby_vr(I, user)) //VOREStation begin: Fireproofing
+ return //VOREStation begin: Fireproofing
if(istype(I, /obj/item/stack/material) && I.get_material_name() == src.get_material_name())
if(stat & BROKEN)
- user << "It looks like \the [src] is pretty busted. It's going to need more than just patching up now."
+ to_chat(user,"It looks like \the [src] is pretty busted. It's going to need more than just patching up now.")
return
if(health >= maxhealth)
- user << "Nothing to fix!"
+ to_chat(user,"Nothing to fix!")
return
if(!density)
- user << "\The [src] must be closed before you can repair it."
+ to_chat(user,"\The [src] must be closed before you can repair it.")
return
//figure out how much metal we need
@@ -223,44 +227,45 @@
amount_needed = (round(amount_needed) == amount_needed)? amount_needed : round(amount_needed) + 1 //Why does BYOND not have a ceiling proc?
var/obj/item/stack/stack = I
- var/transfer
- if (repairing)
- transfer = stack.transfer_to(repairing, amount_needed - repairing.amount)
- if (!transfer)
- user << "You must weld or remove \the [repairing] from \the [src] before you can add anything else."
+ var/amount_given = amount_needed - repairing
+ var/mats_given = stack.get_amount()
+ if(repairing && amount_given <= 0)
+ to_chat(user, "You must weld or remove \the [get_material_name()] from \the [src] before you can add anything else.")
else
- repairing = stack.split(amount_needed)
- if (repairing)
- repairing.loc = src
- transfer = repairing.amount
-
- if (transfer)
- user << "You fit [transfer] [stack.singular_name]\s to damaged and broken parts on \the [src]."
+ if(mats_given >= amount_given)
+ if(stack.use(amount_given))
+ repairing += amount_given
+ else
+ if(stack.use(mats_given))
+ repairing += mats_given
+ amount_given = mats_given
+ if(amount_given)
+ to_chat(user, "You fit [amount_given] [get_material_name()] sheets to damaged and broken parts on \the [src].")
return
if(repairing && istype(I, /obj/item/weapon/weldingtool))
if(!density)
- user << "\The [src] must be closed before you can repair it."
+ to_chat(user,"\The [src] must be closed before you can repair it.")
return
var/obj/item/weapon/weldingtool/welder = I
if(welder.remove_fuel(0,user))
- user << "You start to fix dents and weld \the [repairing] into place."
+ to_chat(user,"You start to fix dents and weld \the [get_material_name()] into place.")
playsound(src, welder.usesound, 50, 1)
- if(do_after(user, (5 * repairing.amount) * welder.toolspeed) && welder && welder.isOn())
- user << "You finish repairing the damage to \the [src]."
- health = between(health, health + repairing.amount*DOOR_REPAIR_AMOUNT, maxhealth)
+ if(do_after(user, (5 * repairing) * welder.toolspeed) && welder && welder.isOn())
+ to_chat(user,"You finish repairing the damage to \the [src].")
+ health = between(health, health + repairing*DOOR_REPAIR_AMOUNT, maxhealth)
update_icon()
- qdel(repairing)
- repairing = null
+ repairing = 0
return
if(repairing && istype(I, /obj/item/weapon/crowbar))
- user << "You remove \the [repairing]."
+ var/obj/item/stack/material/repairing_sheet = get_material().place_sheet(loc)
+ repairing_sheet.amount += repairing-1
+ repairing = 0
+ to_chat(user, "You remove \the [repairing_sheet].")
playsound(src, I.usesound, 100, 1)
- repairing.loc = user.loc
- repairing = null
return
//psa to whoever coded this, there are plenty of objects that need to call attack() on doors without bludgeoning them.
@@ -318,13 +323,13 @@
/obj/machinery/door/examine(mob/user)
. = ..()
if(src.health <= 0)
- user << "\The [src] is broken!"
+ to_chat(user,"\The [src] is broken!")
if(src.health < src.maxhealth / 4)
- user << "\The [src] looks like it's about to break!"
+ to_chat(user,"\The [src] looks like it's about to break!")
else if(src.health < src.maxhealth / 2)
- user << "\The [src] looks seriously damaged!"
+ to_chat(user,"\The [src] looks seriously damaged!")
else if(src.health < src.maxhealth * 3/4)
- user << "\The [src] shows signs of damage!"
+ to_chat(user,"\The [src] shows signs of damage!")
/obj/machinery/door/proc/set_broken()
diff --git a/code/game/machinery/doors/door_vr.dm b/code/game/machinery/doors/door_vr.dm
index 1e0dd1d470..ad5e6affd6 100644
--- a/code/game/machinery/doors/door_vr.dm
+++ b/code/game/machinery/doors/door_vr.dm
@@ -1,9 +1,11 @@
+//TFF: Port VoreStation fix for door repair/reinforcing for borgs/drones.
+
/turf/simulated/floor/proc/adjacent_fire_act_vr(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
for(var/obj/machinery/door/D in src) //makes doors next to fire affected by fire
D.fire_act(adj_air, adj_temp, adj_volume)
/obj/machinery/door
- var/obj/item/stack/material/plasteel/reinforcing //vorestation addition
+ var/reinforcing //vorestation addition
/obj/machinery/door/firedoor
heat_proof = 1
@@ -33,113 +35,68 @@
return ..()
+// Returns true only if one of the actions unique to reinforcing is done, otherwise false and continuing normal attackby
/obj/machinery/door/proc/attackby_vr(obj/item/I as obj, mob/user as mob)
- if(istype(I, /obj/item/stack/material) && I.get_material_name() == "plasteel") // Add heat shielding if it isn't already.
- if(!heat_proof)
- var/obj/item/stack/stack = I
- var/transfer
- var/amount_needed = 2
- if(stat & BROKEN)
- user << "It looks like \the [src] is pretty busted."
- if (reinforcing)
- transfer = stack.transfer_to(reinforcing, amount_needed - reinforcing.amount)
- if (!transfer)
- user << "You must weld or remove \the [reinforcing] from \the [src] before you can add anything else."
- return 1
+ if(istype(I, /obj/item/stack/material) && I.get_material_name() == "plasteel")
+ if(heat_proof)
+ to_chat(user, "\The [src] is already reinforced.")
+ return TRUE
+ if((stat & BROKEN) || (health < maxhealth))
+ to_chat(user, "It looks like \the [src] broken. Repair it before reinforcing it.")
+ return TRUE
+ if(!density)
+ to_chat(user, "\The [src] must be closed before you can reinforce it.")
+ return TRUE
+ var/amount_needed = 2
+
+ var/obj/item/stack/stack = I
+ var/amount_given = amount_needed - reinforcing
+ var/mats_given = stack.get_amount()
+ if(reinforcing && amount_given <= 0)
+ to_chat(user, "You must weld or remove \the plasteel from \the [src] before you can add anything else.")
+ else
+ if(mats_given >= amount_given)
+ if(stack.use(amount_given))
+ reinforcing += amount_given
else
- reinforcing = stack.split(amount_needed)
- if (reinforcing)
- reinforcing.loc = src
- transfer = reinforcing.amount
+ if(stack.use(mats_given))
+ reinforcing += mats_given
+ amount_given = mats_given
+ if(amount_given)
+ to_chat(user, "You fit [amount_given] [get_material_name()] sheets on \the [src].")
- if (transfer)
- user << "You fit [transfer] [stack.singular_name]\s to \the [src]."
- return 1
-
- if(istype(I, /obj/item/stack/material) && I.get_material_name() == src.get_material_name())
- if(stat & BROKEN)
- if(health >= maxhealth && destroy_hits >= 10)
- user << "The [src] is about as shored up as it's going to get."
- return 1
- if(!density)
- user << "\The [src] must be closed before you can repair it."
- return 1
-
- //figure out how much metal we need
- var/amount_needed = (maxhealth - health) / DOOR_REPAIR_AMOUNT
- if (destroy_hits < 10)
- amount_needed += (20*(10 - destroy_hits) / DOOR_REPAIR_AMOUNT)
- amount_needed = (round(amount_needed) == amount_needed)? amount_needed : round(amount_needed) + 1 //Why does BYOND not have a ceiling proc?
-
- var/obj/item/stack/stack = I
- var/transfer
- if (repairing)
- transfer = stack.transfer_to(repairing, amount_needed - repairing.amount)
- if (!transfer)
- user << "You must weld or remove \the [repairing] from \the [src] before you can add anything else."
- else
- repairing = stack.split(amount_needed)
- if (repairing)
- repairing.loc = src
- transfer = repairing.amount
-
- if (transfer)
- user << "\The [src] is completely broken inside, but you manage to fit [transfer] [stack.singular_name]\s to shore it up."
-
- return 1
-
- return 0
+ return TRUE
if(reinforcing && istype(I, /obj/item/weapon/weldingtool))
- var/amount_needed = 2
if(!density)
- user << "\The [src] must be closed before you can repair it."
- return 1
- if (reinforcing.amount < amount_needed)
- user << "You need [amount_needed] [reinforcing.singular_name]\s to reinforce \the [src]."
- return 1
+ to_chat(user, "\The [src] must be closed before you can reinforce it.")
+ return TRUE
+
+ if(reinforcing < 2)
+ to_chat(user, "You will need more plasteel to reinforce \the [src].")
+ return TRUE
+
var/obj/item/weapon/weldingtool/welder = I
if(welder.remove_fuel(0,user))
- user << "You start to weld \the [reinforcing] into place."
- playsound(src, 'sound/items/Welder.ogg', 100, 1)
- if(do_after(user, 5 * reinforcing.amount) && welder && welder.isOn())
- user << "You finish reinforcing \the [src]."
+ to_chat(user, "You start to weld \the plasteel into place.")
+ playsound(src, welder.usesound, 50, 1)
+ if(do_after(user, 10 * welder.toolspeed) && welder && welder.isOn())
+ to_chat(user, "You finish reinforcing \the [src].")
heat_proof = 1
update_icon()
- qdel(reinforcing)
- reinforcing = null
- return 1
-
- if(repairing && istype(I, /obj/item/weapon/weldingtool) && (stat & BROKEN))
- if(!density)
- user << "\The [src] must be closed before you can shore it up."
- return 1
-
- var/obj/item/weapon/weldingtool/welder = I
- if(welder.remove_fuel(0,user))
- user << "You start to weld \the [repairing] into place."
- playsound(src, 'sound/items/Welder.ogg', 100, 1)
- if(do_after(user, 5 * repairing.amount) && welder && welder.isOn())
- user << "You finish shoring up \the [src]. It'll hold for at least a little while."
- var/damagerepaired = repairing.amount*DOOR_REPAIR_AMOUNT
- if (destroy_hits < 10)
- var/severedamage = 10 - destroy_hits
- destroy_hits = between(destroy_hits, destroy_hits + (damagerepaired)/20, 10)
- damagerepaired -= 20 * severedamage
- health = between(health, health + damagerepaired, maxhealth)
- update_icon()
- qdel(repairing)
- repairing = null
- return 1
+ reinforcing = 0
+ return TRUE
if(reinforcing && istype(I, /obj/item/weapon/crowbar))
- user << "You remove \the [reinforcing]."
- playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
- reinforcing.loc = user.loc
- reinforcing = null
- return 1
- return 0
+ var/obj/item/stack/material/plasteel/reinforcing_sheet = new /obj/item/stack/material/plasteel(src.loc)
+ reinforcing_sheet.amount = reinforcing
+ reinforcing = 0
+ to_chat(user, "You remove \the [reinforcing_sheet].")
+ playsound(src, I.usesound, 100, 1)
+ return TRUE
+
+ return FALSE
/obj/machinery/door/blast/regular/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
return // blast doors are immune to fire completely.
diff --git a/code/game/machinery/kitchen/icecream.dm b/code/game/machinery/kitchen/icecream.dm
index 09cb3289ed..35b41bafbd 100644
--- a/code/game/machinery/kitchen/icecream.dm
+++ b/code/game/machinery/kitchen/icecream.dm
@@ -2,8 +2,10 @@
#define ICECREAM_CHOCOLATE 2
#define ICECREAM_STRAWBERRY 3
#define ICECREAM_BLUE 4
-#define CONE_WAFFLE 5
-#define CONE_CHOC 6
+#define ICECREAM_MATCHA 5
+#define CONE_WAFFLE 6
+#define CONE_CHOC 7
+
// Ported wholesale from Apollo Station.
@@ -29,6 +31,8 @@
return list("milk", "ice", "berryjuice")
if(ICECREAM_BLUE)
return list("milk", "ice", "singulo")
+ if(ICECREAM_MATCHA)
+ return list("milk", "ice", "matcha")
if(CONE_WAFFLE)
return list("flour", "sugar")
if(CONE_CHOC)
@@ -44,6 +48,8 @@
return "strawberry"
if(ICECREAM_BLUE)
return "blue"
+ if(ICECREAM_MATCHA)
+ return "matcha"
if(CONE_WAFFLE)
return "waffle"
if(CONE_CHOC)
@@ -54,7 +60,7 @@
/obj/machinery/icecream_vat/initialize()
. = ..()
create_reagents(100)
- while(product_types.len < 6)
+ while(product_types.len < 7)
product_types.Add(5)
reagents.add_reagent("milk", 5)
reagents.add_reagent("flour", 5)
@@ -72,7 +78,8 @@
dat += "Vanilla icecream: Select Make x5 [product_types[ICECREAM_VANILLA]] scoops left. (Ingredients: milk, ice)
"
dat += "Strawberry icecream: Select Make x5 [product_types[ICECREAM_STRAWBERRY]] dollops left. (Ingredients: milk, ice, berry juice)
"
dat += "Chocolate icecream: Select Make x5 [product_types[ICECREAM_CHOCOLATE]] dollops left. (Ingredients: milk, ice, coco powder)
"
- dat += "Blue icecream: Select Make x5 [product_types[ICECREAM_BLUE]] dollops left. (Ingredients: milk, ice, singulo)
"
+ dat += "Blue icecream: Select Make x5 [product_types[ICECREAM_BLUE]] dollops left. (Ingredients: milk, ice, singulo)
"
+ dat += "Matcha icecream: Select Make x5 [product_types[ICECREAM_MATCHA]] dollops left. (Ingredients: milk, ice, matcha)
"
dat += "
CONES
404: Station not found
" diff --git a/code/modules/admin/secrets/fun_secrets/break_all_lights.dm b/code/modules/admin/secrets/fun_secrets/break_all_lights.dm index ea54952a7e..b9671705a3 100644 --- a/code/modules/admin/secrets/fun_secrets/break_all_lights.dm +++ b/code/modules/admin/secrets/fun_secrets/break_all_lights.dm @@ -1,3 +1,4 @@ + /datum/admin_secret_item/fun_secret/break_all_lights name = "Break All Lights" diff --git a/code/modules/admin/secrets/fun_secrets/waddle_mode.dm b/code/modules/admin/secrets/fun_secrets/waddle_mode.dm new file mode 100644 index 0000000000..20346f88a0 --- /dev/null +++ b/code/modules/admin/secrets/fun_secrets/waddle_mode.dm @@ -0,0 +1,14 @@ +var/global/waddleToggle = 0 + +/datum/admin_secret_item/fun_secret/waddle_mode + name = "South Park Mode" + +/datum/admin_secret_item/fun_secret/waddle_mode/execute(var/mob/user) + ..() + if(!waddleToggle) + log_and_message_admins("[user] enabled waddling!", user) + waddleToggle = TRUE + else + log_and_message_admins("[user] disabled waddling!", user) + waddleToggle = FALSE + diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index c61ee1bb7f..3ecbcd4fb4 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -771,18 +771,19 @@ return 1 return 0 //we didn't do anything! +//TFF: Ports Polaris fix for kicking so you can cancel without it still executing the command. else if(href_list["boot2"]) var/mob/M = locate(href_list["boot2"]) if (ismob(M)) if(!check_if_greater_rights_than(M.client)) return - var/reason = sanitize(input("Please enter reason")) + var/reason = sanitize(input("Please enter reason.") as null|message) if(!reason) - M << "You have been kicked from the server" - else - M << "You have been kicked from the server: [reason]" - log_admin("[key_name(usr)] booted [key_name(M)].") - message_admins("[key_name_admin(usr)] booted [key_name_admin(M)].", 1) + return + + to_chat(M, span("critical", "You have been kicked from the server: [reason]")) + log_admin("[key_name(usr)] booted [key_name(M)] for reason: '[reason]'.") + message_admins("[key_name_admin(usr)] booted [key_name_admin(M)] for reason '[reason]'.", 1) //M.client = null qdel(M.client) diff --git a/code/modules/food/recipes_microwave_vr.dm b/code/modules/food/recipes_microwave_vr.dm index 475a25674f..5bfdcd66af 100644 --- a/code/modules/food/recipes_microwave_vr.dm +++ b/code/modules/food/recipes_microwave_vr.dm @@ -218,4 +218,10 @@ items = list( /obj/item/weapon/reagent_containers/food/snacks/steamrolltealeaf ) - result = /obj/item/weapon/reagent_containers/food/snacks/greentealeaf \ No newline at end of file + result = /obj/item/weapon/reagent_containers/food/snacks/greentealeaf + +/datum/recipe/tencha //TODO: Figure out how to make this recipe with a drying rack. + items = list( + /obj/item/weapon/reagent_containers/food/snacks/steamtealeaf + ) + result = /obj/item/weapon/reagent_containers/food/snacks/tencha \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 597fb2b94a..e1a120643f 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1117,7 +1117,8 @@ else usr << "You failed to check the pulse. Try again." -/mob/living/carbon/human/proc/set_species(var/new_species, var/default_colour, var/regen_icons = TRUE) +//TFF 14/4/19: Port VoreStation TF fix +/mob/living/carbon/human/proc/set_species(var/new_species, var/default_colour, var/regen_icons = TRUE, var/mob/living/carbon/human/example = null) //VOREStation Edit - send an example if(!dna) if(!new_species) @@ -1152,7 +1153,16 @@ if(species.default_language) add_language(species.default_language) - if(species.base_color) //VOREStation Edit - Always give them a basse color +//TFF 14/4/19: Port VoreStation TF fix + //if(species.icon_scale != 1) //VOREStation Removal + // update_transform() //VOREStation Removal + + if(example) //VOREStation Edit begin + if(!(example == src)) + r_skin = example.r_skin + g_skin = example.g_skin + b_skin = example.b_skin + else if(species.base_color) //VOREStation Edit end //Apply colour. r_skin = hex2num(copytext(species.base_color,2,4)) g_skin = hex2num(copytext(species.base_color,4,6)) @@ -1169,10 +1179,13 @@ gender = species.genders[1] //icon_state = lowertext(species.name) //Necessary? +//TFF 14/4/19: Port VoreStation TF fix + //VOREStation Edit start: swap places of those two procs + species.handle_post_spawn(src) + species.create_organs(src) - species.handle_post_spawn(src) maxHealth = species.total_health diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index b1557f3a28..52b91830bb 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -340,6 +340,10 @@ H.visible_message( \ "[H] shakes [target]'s hand.", \ "You shake [target]'s hand.", ) + else if(H.zone_sel.selecting == "mouth") // I ADDED BOOP-EH-DEH-NOSEH - Jon + H.visible_message( \ + "[H] boops [target]'s nose.", \ + "You boop [target] on the nose.", ) else H.visible_message("[H] hugs [target] to make [t_him] feel better!", \ "You hug [target] to make [t_him] feel better!") //End VOREStation Edit diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 98076e32a0..9731e94155 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -615,6 +615,7 @@ radio.attackby(W,user)//GTFO, you have your own procs else user << "Unable to locate a radio." + //TFF 14/4/19: Port VoreStation edit - Wallet/Micro usage to unlock borgs. else if (W.GetID()) // trying to unlock the interface with an ID card if(emagged)//still allow them to open the cover @@ -698,6 +699,7 @@ return 1 return 0 +//TFF 14/4/19: Port VoreStation edit - wallet/micro usage to unlock borgs /mob/living/silicon/robot/proc/check_access(obj/item/I) if(!istype(req_access, /list)) //something's very wrong return 1 diff --git a/code/modules/mob/living/simple_animal/vore/metroidsSimple.dm b/code/modules/mob/living/simple_animal/vore/metroidsSimple.dm index dc9a03bcb0..b24ebcff2a 100644 --- a/code/modules/mob/living/simple_animal/vore/metroidsSimple.dm +++ b/code/modules/mob/living/simple_animal/vore/metroidsSimple.dm @@ -2,10 +2,10 @@ name = "minetroid" desc = "Some sort of person eaty thing!" tt_desc = "Headamus Suckumus" - icon = 'icons/mob/vore.dmi' + icon = 'icons/mob/metroid/small.dmi' icon_dead = "metroid_dead" - icon_living = "mochtroid" - icon_state = "mochtroid" + icon_living = "metroid" + icon_state = "metroid" faction = "metroids" intelligence_level = SA_ANIMAL hovering = TRUE @@ -70,8 +70,8 @@ name = "Mochtroid" desc = "Some sort of person eaty thing! But weak compared to regular Metroids!" tt_desc = "Headamus Suckumus Weakamus" - icon = 'icons/mob/vore.dmi' - icon_dead = "mochtroid_dead" + icon = 'icons/mob/metroid/small.dmi' + icon_dead = "metroid_dead" icon_living = "mochtroid" icon_state = "mochtroid" @@ -230,7 +230,7 @@ melee_miss_chance = 5 gender = NEUTER faction = "metroids" - + //Alphas lose their vulnerability to cold. minbodytemp = 0 min_oxy = 0 @@ -277,8 +277,7 @@ -//------------------------------------------------------------------------------------------------------------ -/* +//------------------------------------------------------------------------------------------------------------ /mob/living/simple_animal/hostile/metroid/combat/gamma @@ -297,10 +296,15 @@ melee_miss_chance = 5 gender = NEUTER faction = "metroids" - ranged = 1 + + move_shoot = 1 //Move and shoot at the same time. + ranged_cooldown = 0 //What the starting cooldown is on ranged attacks + ranged_cooldown_time = 150 //How long, in deciseconds, the cooldown of ranged attacks is projectilesound = 'sound/weapons/taser2.ogg' projectiletype = /obj/item/projectile/beam/stun/weak firing_lines = 1 + cooperative = 1 + //Not affected by atmos. minbodytemp = 0 @@ -356,18 +360,25 @@ name = "zeta metroid" desc = "Some kind of feet stompy thing!" tt_desc = "Minimus Feetamus Walkamus" - icon = 'icons/mob/metroid/medium.dmi' + icon = 'icons/mob/metroid/small.dmi' icon_dead = "zeta_dead" icon_living = "zeta" icon_state = "zeta" intelligence_level = SA_ANIMAL - health = 375 - maxHealth = 375 + health = 350 + maxHealth = 350 melee_damage_lower = 15 melee_damage_upper = 25 melee_miss_chance = 5 gender = NEUTER faction = "metroids" + + move_shoot = 1 //Move and shoot at the same time. + ranged_cooldown = 0 //What the starting cooldown is on ranged attacks + ranged_cooldown_time = 15 //How long, in deciseconds, the cooldown of ranged attacks is + rapid = 1 // Three-round-burst fire mode + projectiletype = /obj/item/projectile/energy/piranhaspit // The projectiles I shoot + projectilesound = 'sound/weapons/thudswoosh.ogg' // The sound I make when I do it //Unaffected by atmos. minbodytemp = 0 @@ -395,7 +406,7 @@ cooperative = 1 evo_point = 1600 evo_limit = 1800 - next = "/mob/living/simple_animal/hostile/metroid/combat/omega" + next = "/mob/living/simple_animal/hostile/metroid/bosses/omega" /mob/living/simple_animal/hostile/metroid/combat/zeta/death() @@ -419,22 +430,29 @@ -/mob/living/simple_animal/hostile/metroid/combat/omega +/mob/living/simple_animal/hostile/metroid/bosses/omega name = "omega metroid" desc = "Some kind of head rammy thing!" tt_desc = "Maximus Feetamus Walkamus" - icon = 'icons/mob/metroid/large.dmi' + icon = 'icons/mob/metroid/small.dmi' icon_dead = "omega_dead" icon_living = "omega" icon_state = "omega" intelligence_level = SA_ANIMAL - health = 550 - maxHealth = 550 + health = 500 + maxHealth = 500 melee_damage_lower = 25 melee_damage_upper = 40 melee_miss_chance = 5 gender = NEUTER faction = "metroids" + + move_shoot = 1 //Move and shoot at the same time. + ranged_cooldown = 0 //What the starting cooldown is on ranged attacks + ranged_cooldown_time = 15 //How long, in deciseconds, the cooldown of ranged attacks is + rapid = 1 // Three-round-burst fire mode + projectiletype = /obj/item/projectile/energy/piranhaspit // The projectiles I shoot + projectilesound = 'sound/weapons/thudswoosh.ogg' // The sound I make when I do it //Unaffected by atmos. minbodytemp = 0 @@ -462,15 +480,15 @@ cooperative = 1 evo_point = 2600 evo_limit = 3000 - next = "/mob/living/simple_animal/hostile/metroid/combat/queen" + next = "/mob/living/simple_animal/hostile/metroid/bosses/queen" -/mob/living/simple_animal/hostile/metroid/combat/omega/death() +/mob/living/simple_animal/hostile/metroid/bosses/omega/death() playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1) ..() -/mob/living/simple_animal/hostile/metroid/combat/omega //active noms +/mob/living/simple_animal/hostile/metroid/bosses/omega //active noms vore_active = 1 vore_bump_chance = 0 vore_capacity = 2 @@ -486,23 +504,30 @@ -/mob/living/simple_animal/hostile/metroid/combat/queen +/mob/living/simple_animal/hostile/metroid/bosses/queen name = "queen metroid" desc = "The mother of all Metroids, allowed to have grown too far!" tt_desc = "Maximus Queenamus Deathamus" - icon = 'icons/mob/metroid/large.dmi' + icon = 'icons/mob/metroid/small.dmi' icon_dead = "queen_dead" icon_living = "queen" icon_state = "queen" intelligence_level = SA_ANIMAL - health = 1000 - maxHealth = 1000 + health = 575 + maxHealth = 575 melee_damage_lower = 30 melee_damage_upper = 60 melee_miss_chance = 5 gender = NEUTER faction = "metroids" - speed = 3 + speed = 5 + + move_shoot = 1 //Move and shoot at the same time. + ranged_cooldown = 0 //What the starting cooldown is on ranged attacks + ranged_cooldown_time = 15 //How long, in deciseconds, the cooldown of ranged attacks is + rapid = 1 // Three-round-burst fire mode + projectiletype = /obj/item/projectile/energy/piranhaspit // The projectiles I shoot + projectilesound = 'sound/weapons/thudswoosh.ogg' // The sound I make when I do it //Unaffected by atmos. minbodytemp = 0 @@ -533,16 +558,12 @@ next = "/mob/living/simple_animal/hostile/metroid/evolution/super" -var/list/queen_amount = list() //global queen list -/mob/living/simple_animal/hostile/metroid/combat/queen/New() - queen_amount += src - -/mob/living/simple_animal/hostile/metroid/combat/queen/death() +/mob/living/simple_animal/hostile/metroid/bosses/queen/death() playsound(src, 'sound/metroid/metroiddeath.ogg', 100, 1) ..() -/mob/living/simple_animal/hostile/metroid/combat/queen //active noms +/mob/living/simple_animal/hostile/metroid/bosses/queen //active noms vore_active = 1 vore_bump_chance = 0 vore_capacity = 4 @@ -552,7 +573,14 @@ var/list/queen_amount = list() //global queen list swallowTime = 3 SECONDS -*/ + + + + + + + + //LIFE STUFF, AND MECHANICS! //FOR THE BABY AND SUPER FORMS! @@ -572,7 +600,7 @@ var/list/queen_amount = list() //global queen list expand_troid() return -/mob/living/simple_animal/hostile/metroid/evolution/proc/expand_troid() +/mob/living/simple_animal/hostile/metroid/proc/expand_troid() visible_message("\The [src] suddenly evolves!") new next(get_turf(src)) qdel(src) @@ -859,25 +887,37 @@ var/list/queen_amount = list() //global queen list paralysis = 0 expand_troid() return -/* -/mob/living/simple_animal/hostile/metroid/combat/omega/Life() - if(prob(5) && canEvolve == 1 && nutrition >= evo_point && queen_amount >= 1) + + +/proc/metroid_queen_exists(var/ignore_self,var/mob/living/simple_animal/hostile/metroid/bosses/queen/self) + for(var/mob/living/simple_animal/hostile/metroid/bosses/queen in living_mob_list) + if(self && ignore_self && self == queen) + continue + if(!queen.key || !queen.client || queen.stat) + continue + return 1 + return 0 + +/mob/living/simple_animal/hostile/metroid/bosses/omega/Life() + if(metroid_queen_exists()) + src << "We already have an active queen." + return + + if(!metroid_queen_exists() && prob(5) && canEvolve == 1 && nutrition >= evo_point) playsound(src, 'sound/metroid/metroidgrow.ogg', 50, 1) expand_troid() - return -*/ -/mob/living/simple_animal/hostile/metroid/combat/queen/Life() + + + + +/mob/living/simple_animal/hostile/metroid/bosses/queen/Life() if(canEvolve == 1 && nutrition >= evo_point) playsound(src, 'sound/metroid/metroidgrow.ogg', 50, 1) birth_troid() return -/mob/living/simple_animal/hostile/metroid/combat/proc/expand_troid() - visible_message("\The [src] suddenly evolves!") - new next(get_turf(src)) - qdel(src) -/mob/living/simple_animal/hostile/metroid/combat/queen/proc/birth_troid() +/mob/living/simple_animal/hostile/metroid/proc/birth_troid() visible_message("\A nesting Metroid suddenly bursts out of of the [src]!") new next(get_turf(src)) @@ -939,4 +979,4 @@ var/list/queen_amount = list() //global queen list /mob/living/simple_animal/hostile/metroid/combat/ClosestDistance() if(target_mob.stat == DEAD) return 1 // Melee (eat) the target if dead, don't shoot it. //I don't think it actually eats the target. Maybe it does? - return ..() + return ..() \ No newline at end of file diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 2c82a53c32..2cf73080f4 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -323,6 +323,12 @@ move_delay += 2 return mob.buckled.relaymove(mob,direct) + if(waddleToggle) + if(!mob.buckled) + animate(mob, pixel_z = 4, time = 0) + animate(pixel_z = 0, transform = turn(matrix(), pick(-12, 0, 12)), time=2) + animate(pixel_z = 0, transform = matrix(), time = 0) + //We are now going to move moving = 1 //Something with pulling things diff --git a/code/modules/projectiles/guns/modular_guns.dm b/code/modules/projectiles/guns/modular_guns.dm index 8f81e971c4..c1a67cf984 100644 --- a/code/modules/projectiles/guns/modular_guns.dm +++ b/code/modules/projectiles/guns/modular_guns.dm @@ -18,12 +18,15 @@ /obj/item/weapon/stock_parts/capacitor/, /obj/item/weapon/stock_parts/capacitor/adv, /obj/item/weapon/stock_parts/capacitor/super, + /obj/item/weapon/stock_parts/capacitor/quadratic, /obj/item/weapon/stock_parts/micro_laser/, /obj/item/weapon/stock_parts/micro_laser/high, /obj/item/weapon/stock_parts/micro_laser/ultra, + /obj/item/weapon/stock_parts/micro_laser/quad, /obj/item/weapon/stock_parts/manipulator/, /obj/item/weapon/stock_parts/manipulator/nano, /obj/item/weapon/stock_parts/manipulator/pico, + /obj/item/weapon/stock_parts/manipulator/femto, ) //Excessively long because it won't accept subtypes for some reason! @@ -171,4 +174,4 @@ one_handed_penalty = 4 //dual wielding = no. cell_type = /obj/item/weapon/cell //We're bigger. We can use much larger power cells. origin_tech = list(TECH_COMBAT = 6, TECH_MAGNET = 6, TECH_MATERIAL = 5, TECH_BLUESPACE = 4) //its a damn cannon capable of holding a huge amount of parts. - burst_delay = 4 //preventing extreme silliness. \ No newline at end of file + burst_delay = 4 //preventing extreme silliness. diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm index d0534ee42b..4d4de7b0ab 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -807,7 +807,7 @@ adj_sleepy = -3 adj_temp = 20 - glass_name = "cup of tea" + glass_name = "tea" glass_desc = "Tasty black tea, it has antioxidants, it's good for you!" cup_icon_state = "cup_tea" @@ -945,6 +945,22 @@ cup_name = "cup of watermelon tea" cup_desc = "A tasty mixture of watermelon and tea. It's apparently good for you!" +/datum/reagent/drink/tea/matcha_latte //Putting this as tea to inherit tea variables. Should not have the same toxloss as matcha so it can be placed in a dispenser without breaking balance. + name = "Matcha latte" + id = "matcha_latte" + description = "A nice and tasty beverage to enjoy while studying." + taste_description = "creamy, vegetal sweetness" + color = "#b1c48c" + adj_temp = 5 + + glass_name = "matcha latte" + glass_desc = "A nice and refreshing beverage while you are studying." + + cup_icon_state = "cup_latte" + cup_name = "cup of matcha latte" + cup_desc = "A nice and refreshing beverage while you are studying." + + /datum/reagent/drink/coffee name = "Coffee" id = "coffee" @@ -1030,7 +1046,6 @@ glass_desc = "A nice and refreshing beverage while you are reading." glass_name = "soy latte" - glass_desc = "A nice and refrshing beverage while you are reading." cup_icon_state = "cup_latte" cup_name = "cup of soy latte" @@ -1049,11 +1064,11 @@ adj_temp = 5 glass_name = "cafe latte" - glass_desc = "A nice, strong and refreshing beverage while you are reading." + glass_desc = "A nice, strong, and refreshing beverage while you are reading." cup_icon_state = "cup_latte" cup_name = "cup of cafe latte" - cup_desc = "A nice and refreshing beverage while you are reading." + cup_desc = "A nice, strong, and refreshing beverage while you are reading." /datum/reagent/drink/coffee/cafe_latte/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -3295,7 +3310,7 @@ glass_name = "Sit on my face" glass_desc = "A drink made of irish coffee and nuts, mostly known for its vulgar name. Makes for a great pickup line though!" - + /datum/reagent/ethanol/hachi name = "Hachi" id = "hachi" @@ -3366,7 +3381,7 @@ name = "Instant green tea powder" id = "instantteapowdergreen" description = "Green tea powder missing all the goodness of green tea." //Heathen. - taste_description = "strongly bitter with a subtle chemical aftertaste" + taste_description = "strong bitterness with a subtle chemical aftertaste" color = "#56761d" glass_name = "tea powder" @@ -3376,7 +3391,7 @@ name = "Instant green tea" id = "instantteagreen" description = "Convenient green tea missing all the goodness of actual green tea." //It's not even hot. - taste_description = "bitter with a subtle chemical aftertaste" + taste_description = "bitterness with a subtle chemical aftertaste" color = "#cac162" glass_name = "green tea" @@ -3385,3 +3400,38 @@ cup_icon_state = "cup_tea" cup_name = "cup of tea" cup_desc = "Green tea. It smells a bit off." + +/datum/reagent/drink/matchapowder + name = "Matcha powder" + id = "matchapowder" + description = "Finely ground green tea. This is about the highest quality matcha you can prepare without traditional methods." + taste_description = "heavy bitterness" + color = "#86a443" + + glass_name = "matcha powder" + glass_desc = "Matcha powder, waiting for brewing." + +/datum/reagent/drink/matcha + name = "Matcha" + id = "matcha" + description = "A form of green tea where the leaf is ground and suspended in water rather than steeped. This is considered cooking grade." + taste_description = "floral, full-bodied bitterness with a subtle, earthy sweetness" + color = "#9bc265" + adj_dizzy = -4 + adj_drowsy = -1 + adj_sleepy = -3 + adj_temp = 20 + + glass_name = "matcha" + glass_desc = "Heavenly matcha. Good for body and spirit." + + cup_icon_state = "cup_tea" + cup_name = "cup of matcha" + cup_desc = "Heavenly matcha. Good for body and spirit." + +/datum/reagent/drink/matcha/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + ..() + if(alien == IS_DIONA) + return + M.adjustToxLoss(-3 * removed) //Almost on par with dylovene despite being harder to obtain in bulk. Nerf if this causes problems. + diff --git a/code/modules/reagents/Chemistry-Reagents_vr.dm b/code/modules/reagents/Chemistry-Reagents_vr.dm index 59ad74b118..c0259fba08 100644 --- a/code/modules/reagents/Chemistry-Reagents_vr.dm +++ b/code/modules/reagents/Chemistry-Reagents_vr.dm @@ -9,16 +9,27 @@ if(ishuman(M)) var/mob/living/carbon/human/H = M if(H.species.name != "Promethean") - M << "Your flesh rapidly mutates!" + //TFF 14/4/19: Port VoreStation TF fix + to_chat(M, "Your flesh rapidly mutates!") + + var/list/backup_implants = list() + for(var/obj/item/organ/I in H.organs) + for(var/obj/item/weapon/implant/backup/BI in I.contents) + backup_implants += BI + if(backup_implants.len) + for(var/obj/item/weapon/implant/backup/BI in backup_implants) + BI.forceMove(src) + H.set_species("Promethean") - H.verbs += /mob/living/carbon/human/proc/shapeshifter_select_shape - H.verbs += /mob/living/carbon/human/proc/shapeshifter_select_colour - H.verbs += /mob/living/carbon/human/proc/shapeshifter_select_hair - H.verbs += /mob/living/carbon/human/proc/shapeshifter_select_gender - H.verbs += /mob/living/carbon/human/proc/regenerate - H.verbs += /mob/living/proc/set_size H.shapeshifter_set_colour("#05FF9B") //They can still change their color. + //TFF 14/4/19: Port VoreStation TF fix + if(backup_implants.len) + var/obj/item/organ/external/torso = H.get_organ(BP_TORSO) + for(var/obj/item/weapon/implant/backup/BI in backup_implants) + BI.forceMove(torso) + torso.implants += BI + /datum/chemical_reaction/slime/sapphire_mutation name = "Slime Mutation Toxins" id = "slime_mutation_tox" @@ -59,14 +70,14 @@ strength = 10//Don't drink it mrate_static = TRUE -/datum/reagent/purplesap +/datum/reagent/purplesap name = "Purple sap" id = "purplesap" description = "Purple liquid. It is very sticky and smells of ammonia." color = "#7a48a0" taste_description = "Ammonia" -/datum/reagent/orangesap +/datum/reagent/orangesap name = "Orange sap" id = "orangesap" description = "Orange liquid. It wobbles around a bit like jelly." diff --git a/code/modules/reagents/Chemistry-Recipes_ch.dm b/code/modules/reagents/Chemistry-Recipes_ch.dm index 6ff79e224c..e8c6bff15c 100644 --- a/code/modules/reagents/Chemistry-Recipes_ch.dm +++ b/code/modules/reagents/Chemistry-Recipes_ch.dm @@ -47,4 +47,16 @@ id = "instantteagreen" result = "instantteagreen" required_reagents = list ("instantteapowdergreen" = 1, "water" = 9) - result_amount = 10 \ No newline at end of file + result_amount = 10 + +/datum/chemical_reaction/matcha + id = "matcha" + result = "matcha" + required_reagents = list ("matchapowder" = 1, "hotwater" = 2) + result_amount = 2 + +/datum/chemical_reaction/tea/matcha_latte + id = "matcha_latte" + result = "matcha_latte" + required_reagents = list ("matchapowder" = 1, "milk" = 5) + result_amount = 5 \ No newline at end of file diff --git a/code/modules/reagents/dispenser/cartridge_presets.dm b/code/modules/reagents/dispenser/cartridge_presets.dm index a29d7ac9f8..925a2c2519 100644 --- a/code/modules/reagents/dispenser/cartridge_presets.dm +++ b/code/modules/reagents/dispenser/cartridge_presets.dm @@ -71,6 +71,7 @@ cream spawn_reagent = "cream" mint spawn_reagent = "mint" berry spawn_reagent = "berryjuice" + matcha_latte spawn_reagent = "matcha_latte" // ERT inaprov spawn_reagent = "inaprovaline" diff --git a/code/modules/reagents/dispenser/dispenser2_energy.dm b/code/modules/reagents/dispenser/dispenser2_energy.dm index 4465b0b769..1038a02325 100644 --- a/code/modules/reagents/dispenser/dispenser2_energy.dm +++ b/code/modules/reagents/dispenser/dispenser2_energy.dm @@ -58,5 +58,5 @@ /obj/machinery/chemical_dispenser/bar_coffee dispense_reagents = list( "coffee", "cafe_latte", "soy_latte", "hot_coco", "milk", "cream", "tea", "ice", - "orangejuice", "lemonjuice", "limejuice", "berryjuice", "mint" + "orangejuice", "lemonjuice", "limejuice", "berryjuice", "mint", "matcha_latte" ) \ No newline at end of file diff --git a/code/modules/reagents/dispenser/dispenser_presets.dm b/code/modules/reagents/dispenser/dispenser_presets.dm index 05477d9cdd..6505eb36ab 100644 --- a/code/modules/reagents/dispenser/dispenser_presets.dm +++ b/code/modules/reagents/dispenser/dispenser_presets.dm @@ -137,6 +137,5 @@ /obj/item/weapon/reagent_containers/chem_disp_cartridge/lemon, /obj/item/weapon/reagent_containers/chem_disp_cartridge/lime, /obj/item/weapon/reagent_containers/chem_disp_cartridge/berry, - - + /obj/item/weapon/reagent_containers/chem_disp_cartridge/matcha_latte ) \ No newline at end of file diff --git a/code/modules/reagents/dispenser/supply.dm b/code/modules/reagents/dispenser/supply.dm index e183da7f79..8f7423dc31 100644 --- a/code/modules/reagents/dispenser/supply.dm +++ b/code/modules/reagents/dispenser/supply.dm @@ -120,7 +120,8 @@ /obj/item/weapon/reagent_containers/chem_disp_cartridge/milk, /obj/item/weapon/reagent_containers/chem_disp_cartridge/cream, /obj/item/weapon/reagent_containers/chem_disp_cartridge/tea, - /obj/item/weapon/reagent_containers/chem_disp_cartridge/ice + /obj/item/weapon/reagent_containers/chem_disp_cartridge/ice, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/matcha_latte ) cost = 50 containertype = /obj/structure/closet/crate diff --git a/code/modules/reagents/reagent_containers/food/snacks_vr.dm b/code/modules/reagents/reagent_containers/food/snacks_vr.dm index db27c59feb..6560f2a78a 100644 --- a/code/modules/reagents/reagent_containers/food/snacks_vr.dm +++ b/code/modules/reagents/reagent_containers/food/snacks_vr.dm @@ -378,7 +378,6 @@ /obj/item/weapon/reagent_containers/food/snacks/steamtealeaf/New() ..() - reagents.add_reagent("teamush", 3) bitesize = 1 /obj/item/weapon/reagent_containers/food/snacks/steamtealeaf/attackby(obj/item/weapon/W as obj, mob/user as mob) @@ -412,6 +411,34 @@ reagents.add_reagent("tealeavesgreen", 6) bitesize = 1 +/obj/item/weapon/reagent_containers/food/snacks/tencha + name = "Tencha" + desc = "A dried, crumbly green tea leaf. Needs deveined." + icon = 'icons/obj/food.dmi' + icon_state = "tencha" + slice_path = /obj/item/weapon/reagent_containers/food/snacks/matchaleaf + slices_num = 1 + nutriment_amt = 0 + nutriment_desc = list("nothing" = 1) + +/obj/item/weapon/reagent_containers/food/snacks/tencha/New() + ..() + bitesize = 1 + +/obj/item/weapon/reagent_containers/food/snacks/matchaleaf + name = "Matcha" + desc = "Low grade matcha. Ready for grinding." + icon = 'icons/obj/food.dmi' + icon_state = "matchaleaf" + nutriment_amt = 0 + nutriment_desc = list("nothing" = 0) + +/obj/item/weapon/reagent_containers/food/snacks/matchaleaf/New() + ..() + reagents.add_reagent("matchapowder", 5) + reagents.remove_reagent("teamush", 5) + bitesize = 1 + /obj/item/weapon/reagent_containers/food/snacks/monkeycube/sobakacube name = "sobaka cube" monkey_type = "Sobaka" diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 0d25cb909b..b0f78d7ce3 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -113,6 +113,13 @@ other types of metals and chemistry for reagents). build_path = /obj/item/weapon/stock_parts/capacitor/super sort_string = "CAAAC" +/datum/design/item/stock_part/quadratic_capacitor + id = "quadratic_capacitor" + req_tech = list(TECH_POWER = 10, TECH_MATERIAL = 9) + materials = list(DEFAULT_WALL_MATERIAL = 100, "glass" = 100, "gold" = 20) + build_path = /obj/item/weapon/stock_parts/capacitor/quadratic + sort_string = "CAAAD" + /datum/design/item/stock_part/micro_mani id = "micro_mani" req_tech = list(TECH_MATERIAL = 1, TECH_DATA = 1) @@ -134,6 +141,13 @@ other types of metals and chemistry for reagents). build_path = /obj/item/weapon/stock_parts/manipulator/pico sort_string = "CAABC" +/datum/design/item/stock_part/femto_mani + id = "femto_mani" + req_tech = list(TECH_MATERIAL = 10, TECH_DATA = 9) + materials = list(DEFAULT_WALL_MATERIAL = 30, "diamond" = 50) + build_path = /obj/item/weapon/stock_parts/manipulator/femto + sort_string = "CAABD" + /datum/design/item/stock_part/basic_matter_bin id = "basic_matter_bin" req_tech = list(TECH_MATERIAL = 1) @@ -154,6 +168,13 @@ other types of metals and chemistry for reagents). materials = list(DEFAULT_WALL_MATERIAL = 80) build_path = /obj/item/weapon/stock_parts/matter_bin/super sort_string = "CAACC" + +/datum/design/item/stock_part/bluespace_matter_bin + id = "bluespace_matter_bin" + req_tech = list(TECH_MATERIAL = 10, TECH_BLUESPACE = 9) + materials = list(DEFAULT_WALL_MATERIAL = 80,"phoron" = 30) + build_path = /obj/item/weapon/stock_parts/matter_bin/bluespace + sort_string = "CAACD" /datum/design/item/stock_part/basic_micro_laser id = "basic_micro_laser" @@ -176,6 +197,13 @@ other types of metals and chemistry for reagents). build_path = /obj/item/weapon/stock_parts/micro_laser/ultra sort_string = "CAADC" +/datum/design/item/stock_part/quad_ultra_micro_laser + id = "quadultra_micro_laser" + req_tech = list(TECH_MAGNET = 10, TECH_MATERIAL = 9) + materials = list(DEFAULT_WALL_MATERIAL = 20, "glass" = 40, "uranium" = 30) + build_path = /obj/item/weapon/stock_parts/micro_laser/quad + sort_string = "CAADD" + /datum/design/item/stock_part/basic_sensor id = "basic_sensor" req_tech = list(TECH_MAGNET = 1) @@ -196,6 +224,13 @@ other types of metals and chemistry for reagents). materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 20, "silver" = 10) build_path = /obj/item/weapon/stock_parts/scanning_module/phasic sort_string = "CAAEC" + +/datum/design/item/stock_part/triphasic_sensor + id = "triphasic_sensor" + req_tech = list(TECH_MAGNET = 10, TECH_MATERIAL = 9) + materials = list(DEFAULT_WALL_MATERIAL = 100, "glass" = 50, "silver" = 10) + build_path = /obj/item/weapon/stock_parts/scanning_module/triphasic + sort_string = "CAAED" /datum/design/item/stock_part/RPED name = "Rapid Part Exchange Device" diff --git a/code/modules/vore/eating/bellymodes_tf_vr.dm b/code/modules/vore/eating/bellymodes_tf_vr.dm index 1f638f4f98..fa23e95fa5 100644 --- a/code/modules/vore/eating/bellymodes_tf_vr.dm +++ b/code/modules/vore/eating/bellymodes_tf_vr.dm @@ -97,7 +97,7 @@ change_ears(P) change_tail_nocolor(P) change_wing_nocolor(P) - change_species(P,1) + change_species(P,1,1) //TFF 14/4/19: Port VoreStation TF fix ///////////////////////////// DM_TRANSFORM_REPLICA ///////////////////////////// else if(mode == DM_TRANSFORM_REPLICA) @@ -122,7 +122,7 @@ change_ears(P) change_tail(P) change_wing(P) - change_species(P,1) + change_species(P,1,2) //TFF 14/4/19: Port VoreStation TF fix ///////////////////////////// DM_TRANSFORM_CHANGE_SPECIES_AND_TAUR_EGG ///////////////////////////// else if(mode == DM_TRANSFORM_CHANGE_SPECIES_AND_TAUR_EGG) @@ -134,7 +134,7 @@ change_ears(P) change_tail_nocolor(P) change_wing_nocolor(P) - change_species(P,1) + change_species(P,1,1) //TFF 14/4/19: Port VoreStation TF fix continue if(!P.absorbed) @@ -177,7 +177,7 @@ change_ears(P) change_tail(P) change_wing(P) - change_species(P,1) + change_species(P,1,2) //TFF 14/4/19: Port VoreStation TF fix continue if(!P.absorbed) diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 4e845ccc33..a7bfc1af9c 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -329,6 +329,7 @@ if(!confirm == "Okay" || loc != B) return //Actual escaping + absorbed = 0 //Make sure we're not absorbed forceMove(get_turf(src)) //Just move me up to the turf, let's not cascade through bellies, there's been a problem, let's just leave. for(var/mob/living/simple_animal/SA in range(10)) SA.prey_excludes[src] = world.time diff --git a/code/modules/vore/eating/transforming_vr.dm b/code/modules/vore/eating/transforming_vr.dm index b978bf8963..a0398350fb 100644 --- a/code/modules/vore/eating/transforming_vr.dm +++ b/code/modules/vore/eating/transforming_vr.dm @@ -210,42 +210,44 @@ return 1 return 0 -/obj/belly/proc/change_species(var/mob/living/carbon/human/M, message=0) +//TFF: Port VoreStation TF fix +/obj/belly/proc/change_species(var/mob/living/carbon/human/M, message=0, color_action = 0) //color_action: 0 for default species, 1 to preserve, 2 to transfer from pred var/mob/living/carbon/human/O = owner if(!istype(M) || !istype(O)) return - if (M.species == "Promethean" && O.species != "Promethean") //If the person was a promethean before TF, remove all their verbs! - M.verbs -= /mob/living/carbon/human/proc/shapeshifter_select_shape - M.verbs -= /mob/living/carbon/human/proc/shapeshifter_select_colour - M.verbs -= /mob/living/carbon/human/proc/shapeshifter_select_hair - M.verbs -= /mob/living/carbon/human/proc/shapeshifter_select_gender - M.verbs -= /mob/living/carbon/human/proc/regenerate - M.verbs -= /mob/living/proc/set_size +//TFF: Port VoreStation TF fix + M.verbs -= M.species.inherent_verbs //Take away their unique stuff - M.species = O.species + var/list/backup_implants = list() + for(var/obj/item/organ/I in M.organs) + for(var/obj/item/weapon/implant/backup/BI in I.contents) + backup_implants += BI + if(backup_implants.len) + for(var/obj/item/weapon/implant/backup/BI in backup_implants) + BI.forceMove(src) + if(color_action == 1) + M.set_species(O.species.name,0,1,M) + else if(color_action == 2) + M.set_species(O.species.name,0,1,O) + else + M.set_species(O.species.name) M.custom_species = O.custom_species - M.species.create_organs(M) //This is the only way to make it so Unathi TF doesn't result in people dying from organ rejection. - for(var/obj/item/organ/I in M.organs) //This prevents organ rejection - I.species = O.species - for(var/obj/item/organ/I in M.internal_organs) //This prevents organ rejection - I.species = O.species - for(var/obj/item/organ/external/Z in M.organs)//Just in case. - Z.sync_colour_to_human(M) - M.fixblood() + +//TFF: Port VoreStation TF fix M.update_icons_body() M.update_tail_showing() + +//TFF: Port VoreStation TF fix. + if(backup_implants.len) + var/obj/item/organ/external/torso = M.get_organ(BP_TORSO) + for(var/obj/item/weapon/implant/backup/BI in backup_implants) + BI.forceMove(torso) + torso.implants += BI + if(message) to_chat(M, "You lose sensation of your body, feeling only the warmth of everything around you... ") to_chat(O, "Your body shifts as you make dramatic changes to your captive's body.") - if (M.species == "Promethean") //Did they get TF'd into a promethean? - M.verbs += /mob/living/carbon/human/proc/shapeshifter_select_shape - M.verbs += /mob/living/carbon/human/proc/shapeshifter_select_colour - M.verbs += /mob/living/carbon/human/proc/shapeshifter_select_hair - M.verbs += /mob/living/carbon/human/proc/shapeshifter_select_gender - M.verbs += /mob/living/carbon/human/proc/regenerate - M.verbs += /mob/living/proc/set_size - M.shapeshifter_select_shape() /obj/belly/proc/put_in_egg(var/atom/movable/M, message=0) var/mob/living/carbon/human/O = owner diff --git a/code/unit_tests/map_tests.dm b/code/unit_tests/map_tests.dm index 5950743cf6..5b7abf5aea 100644 --- a/code/unit_tests/map_tests.dm +++ b/code/unit_tests/map_tests.dm @@ -14,7 +14,9 @@ /area/mine, /area/vacant/vacant_shop, /area/turbolift, - /area/submap ) + /area/submap, + /area/hallway/secondary/entry/D2/shuttleDoors + ) var/list/exempt_from_atmos = typesof(/area/maintenance, /area/storage, diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi index c19c0925b5..2e99504823 100644 Binary files a/icons/obj/food.dmi and b/icons/obj/food.dmi differ diff --git a/icons/obj/stock_parts.dmi b/icons/obj/stock_parts.dmi index 2325f50fff..fda3b06335 100644 Binary files a/icons/obj/stock_parts.dmi and b/icons/obj/stock_parts.dmi differ diff --git a/maps/northern_star/northern_star_areas.dm b/maps/northern_star/northern_star_areas.dm index 3e79fe7c9e..bd64a2db61 100644 --- a/maps/northern_star/northern_star_areas.dm +++ b/maps/northern_star/northern_star_areas.dm @@ -19,4 +19,4 @@ name = "\improper Mime Office" /area/Clown - name = "\improper Clown Room" \ No newline at end of file + name = "\improper Clown Room" diff --git a/maps/northern_star/polaris-1.dmm b/maps/northern_star/polaris-1.dmm index bddcbe94b4..93b7c6a96b 100644 --- a/maps/northern_star/polaris-1.dmm +++ b/maps/northern_star/polaris-1.dmm @@ -9051,10 +9051,10 @@ "dsc" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_snorth_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = 26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dsd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dse" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/hidden,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "arrivals_dock_north_airlock"; name = "interior access button"; pixel_x = 26; pixel_y = 26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) -"dsf" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "arrivals_dock_north_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2) -"dsg" = (/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "arrivals_dock_north_airlock"; master_tag = "arrivals_dock"; pixel_y = 30; req_one_access = list(13); tag_airlock_mech_sensor = "arrivals_dock_north_mech"; tag_airpump = "arrivals_dock_north_pump"; tag_chamber_sensor = "arrivals_dock_north_sensor"; tag_exterior_door = "arrivals_dock_north_outer"; tag_interior_door = "arrivals_dock_north_inner"; tag_shuttle_mech_sensor = "shuttle_dock_north_mech"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) -"dsh" = (/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "arrivals_dock_north_pump"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "arrivals_dock_north_sensor"; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) -"dsi" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "arrivals_dock_north_outer"; locked = 1; name = "Arrivals Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "arrivals_dock_north_airlock"; name = "exterior access button"; pixel_x = 4; pixel_y = -26; req_one_access = list(13)},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "arrival_dock_north_mech"; pixel_y = -19},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2) +"dsf" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "arrivals_dock_north_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2/shuttleDoors) +"dsg" = (/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "arrivals_dock_north_airlock"; master_tag = "arrivals_dock"; pixel_y = 30; req_one_access = list(13); tag_airlock_mech_sensor = "arrivals_dock_north_mech"; tag_airpump = "arrivals_dock_north_pump"; tag_chamber_sensor = "arrivals_dock_north_sensor"; tag_exterior_door = "arrivals_dock_north_outer"; tag_interior_door = "arrivals_dock_north_inner"; tag_shuttle_mech_sensor = "shuttle_dock_north_mech"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2/shuttleDoors) +"dsh" = (/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "arrivals_dock_north_pump"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "arrivals_dock_north_sensor"; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2/shuttleDoors) +"dsi" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "arrivals_dock_north_outer"; locked = 1; name = "Arrivals Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "arrivals_dock_north_airlock"; name = "exterior access button"; pixel_x = 4; pixel_y = -26; req_one_access = list(13)},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "arrival_dock_north_mech"; pixel_y = -19},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2/shuttleDoors) "dsj" = (/obj/machinery/door/airlock/external{icon_state = "door_locked"; locked = 1; name = "Arrival Airlock"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3) "dsk" = (/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) "dsl" = (/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) @@ -9369,10 +9369,10 @@ "dyi" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_starboard_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2) "dyj" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_ssouth_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = -26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "dyk" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/hidden,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "arrivals_dock_south_airlock"; name = "interior access button"; pixel_x = 26; pixel_y = -26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) -"dyl" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "arrivals_dock_south_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2) -"dym" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "arrivals_dock_south_airlock"; master_tag = "arrivals_dock"; pixel_y = -30; req_one_access = list(13); tag_airlock_mech_sensor = "arrivals_dock_south_mech"; tag_airpump = "arrivals_dock_south_pump"; tag_chamber_sensor = "arrivals_dock_south_sensor"; tag_exterior_door = "arrivals_dock_south_outer"; tag_interior_door = "arrivals_dock_south_inner"; tag_shuttle_mech_sensor = "shuttle_dock_south_mech"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) -"dyn" = (/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "arrivals_dock_south_pump"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "arrivals_dock_south_sensor"; pixel_x = 0; pixel_y = 25},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) -"dyo" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "arrivals_dock_south_outer"; locked = 1; name = "Arrivals Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "arrivals_dock_south_airlock"; name = "exterior access button"; pixel_x = 4; pixel_y = 26; req_one_access = list(13)},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "arrivals_dock_south_mech"; pixel_y = 19},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2) +"dyl" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "arrivals_dock_south_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2/shuttleDoors) +"dym" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "arrivals_dock_south_airlock"; master_tag = "arrivals_dock"; pixel_y = -30; req_one_access = list(13); tag_airlock_mech_sensor = "arrivals_dock_south_mech"; tag_airpump = "arrivals_dock_south_pump"; tag_chamber_sensor = "arrivals_dock_south_sensor"; tag_exterior_door = "arrivals_dock_south_outer"; tag_interior_door = "arrivals_dock_south_inner"; tag_shuttle_mech_sensor = "shuttle_dock_south_mech"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2/shuttleDoors) +"dyn" = (/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "arrivals_dock_south_pump"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "arrivals_dock_south_sensor"; pixel_x = 0; pixel_y = 25},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2/shuttleDoors) +"dyo" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "arrivals_dock_south_outer"; locked = 1; name = "Arrivals Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "arrivals_dock_south_airlock"; name = "exterior access button"; pixel_x = 4; pixel_y = 26; req_one_access = list(13)},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "arrivals_dock_south_mech"; pixel_y = 19},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2/shuttleDoors) "dyp" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/obj/machinery/door/airlock/external{icon_state = "door_locked"; locked = 1; name = "Arrival Airlock"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3) "dyq" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) "dyr" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/item/tape/engineering,/obj/machinery/door/airlock/glass_external{icon_state = "door_locked"; locked = 1; name = "Arrival Airlock"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3) diff --git a/vorestation.dme b/vorestation.dme index da00d0c34c..7ed00d1b51 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1357,6 +1357,7 @@ #include "code\modules\admin\secrets\fun_secrets\triple_ai_mode.dm" #include "code\modules\admin\secrets\fun_secrets\turn_humans_into_corgies.dm" #include "code\modules\admin\secrets\fun_secrets\turn_humans_into_monkeys.dm" +#include "code\modules\admin\secrets\fun_secrets\waddle_mode.dm" #include "code\modules\admin\secrets\random_events\gravity.dm" #include "code\modules\admin\secrets\random_events\trigger_cordical_borer_infestation.dm" #include "code\modules\admin\secrets\random_events\trigger_xenomorph_infestation.dm"