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
" dat += "Waffle cones: Dispense Make x5 [product_types[CONE_WAFFLE]] cones left. (Ingredients: flour, sugar)
" dat += "Chocolate cones: Dispense Make x5 [product_types[CONE_CHOC]] cones left. (Ingredients: flour, sugar, coco powder)
" @@ -191,5 +198,6 @@ #undef FLAVOUR_CHOCOLATE #undef FLAVOUR_STRAWBERRY #undef FLAVOUR_BLUE +#undef FLAVOUR_MATCHA #undef CONE_WAFFLE #undef CONE_CHOC \ No newline at end of file diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm index 6da1b23deb..933c82f076 100644 --- a/code/game/objects/items/weapons/clown_items.dm +++ b/code/game/objects/items/weapons/clown_items.dm @@ -70,7 +70,7 @@ /obj/item/weapon/bikehorn/attack_self(mob/user as mob) if (spam_flag == 0) spam_flag = 1 - playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1) + playsound(src.loc, honkSound, 50, 1) src.add_fingerprint(user) spawn(20) spam_flag = 0 diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 268a8d5ad7..da995d9cf0 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -166,7 +166,7 @@ var/mob/living/carbon/human/H = target affecting = H.get_organ(hit_zone) - if(user.a_intent == I_HURT || user.a_intent == I_DISARM) + if(user.a_intent == I_HURT) . = ..() //whacking someone causes a much poorer electrical contact than deliberately prodding them. agony *= 0.5 diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm index 7263cc4c69..5b01ba6139 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm @@ -106,6 +106,10 @@ var/global/list/stool_cache = list() //haha stool material.place_sheet(get_turf(src)) if(padding_material) padding_material.place_sheet(get_turf(src)) + // Adding a safety net to prevent players from being perma-buckled to the stool..! - Jon + if(has_buckled_mobs()) + for(var/A in buckled_mobs) + user_unbuckle_mob(A, src) qdel(src) /obj/item/weapon/stool/attackby(obj/item/weapon/W as obj, mob/user as mob) @@ -148,3 +152,11 @@ var/global/list/stool_cache = list() //haha stool remove_padding() else ..() + +// Chompstation ADD: A new proc to allow mobs to be unbuckled when clicking on a stool. +/obj/item/weapon/stool/attack_hand(mob/living/user as mob) + if(has_buckled_mobs()) + for(var/A in buckled_mobs) + user_unbuckle_mob(A, user) + return + ..() \ No newline at end of file diff --git a/code/game/verbs/character_directory.dm b/code/game/verbs/character_directory.dm index 6f5a6debc2..072c7b14c0 100644 --- a/code/game/verbs/character_directory.dm +++ b/code/game/verbs/character_directory.dm @@ -29,6 +29,32 @@ html += "OOC notes" html += "" html += "" + +//TFF: Ports VoreStation addition of Borg/AI listing to display on Char Directory. Yay! + if(isAI(C.mob)) + var/mob/living/silicon/ai/A = C.mob + curID++ + html += "
" + html += "

[A.name] (Artificial Intelligence)


" + if(A.ooc_notes) + html += "OOC notes" + html += "" + html += "
" + if(isrobot(C.mob)) + var/mob/living/silicon/robot/R = C.mob + if(R.scrambledcodes || (R.module && R.module.hide_on_manifest)) + continue + curID++ + html += "
" + html += "

[R.name] ([R.modtype] [R.braintype])


" + if(R.flavor_text) + html += "Flavor text" + html += "" + if(R.ooc_notes) + html += "OOC notes" + html += "" + html += "
" + if(!curID) html += "

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"