diff --git a/code/ATMOSPHERICS/components/unary/outlet_injector.dm b/code/ATMOSPHERICS/components/unary/outlet_injector.dm index ee1379ac28..5e62fe5802 100644 --- a/code/ATMOSPHERICS/components/unary/outlet_injector.dm +++ b/code/ATMOSPHERICS/components/unary/outlet_injector.dm @@ -1,4 +1,4 @@ -//Basically a one way passive valve. If the pressure inside is greater than the environment then gas will flow passively, +//Basically a one way passive valve. If the pressure inside is greater than the environment then gas will flow passively, //but it does not permit gas to flow back from the environment into the injector. Can be turned off to prevent any gas flow. //When it receives the "inject" signal, it will try to pump it's entire contents into the environment regardless of pressure, using power. @@ -13,7 +13,7 @@ use_power = 0 idle_power_usage = 150 //internal circuitry, friction losses and stuff power_rating = 15000 //15000 W ~ 20 HP - + var/injecting = 0 var/volume_rate = 50 //flow rate limit @@ -26,7 +26,7 @@ /obj/machinery/atmospherics/unary/outlet_injector/New() ..() - air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 500 //Give it a small reservoir for injecting. Also allows it to have a higher flow rate limit than vent pumps, to differentiate injectors a bit more. + air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 500 //Give it a small reservoir for injecting. Also allows it to have a higher flow rate limit than vent pumps, to differentiate injectors a bit more. /obj/machinery/atmospherics/unary/outlet_injector/Destroy() unregister_radio(src, frequency) @@ -60,21 +60,21 @@ if((stat & (NOPOWER|BROKEN)) || !use_power) return - + var/power_draw = -1 var/datum/gas_mixture/environment = loc.return_air() - + if(environment && air_contents.temperature > 0) var/transfer_moles = (volume_rate/air_contents.volume)*air_contents.total_moles //apply flow rate limit power_draw = pump_gas(src, air_contents, environment, transfer_moles, power_rating) - + if (power_draw >= 0) last_power_draw = power_draw use_power(power_draw) - + if(network) network.update = 1 - + return 1 /obj/machinery/atmospherics/unary/outlet_injector/proc/inject() @@ -84,7 +84,7 @@ var/datum/gas_mixture/environment = loc.return_air() if (!environment) return 0 - + injecting = 1 if(air_contents.temperature > 0) @@ -155,4 +155,23 @@ update_icon() /obj/machinery/atmospherics/unary/outlet_injector/hide(var/i) - update_underlays() \ No newline at end of file + update_underlays() + +/obj/machinery/atmospherics/unary/outlet_injector/attack_hand(mob/user as mob) + to_chat(user, "You toggle \the [src].") + injecting = !injecting + use_power = injecting + update_icon() + +/obj/machinery/atmospherics/unary/outlet_injector/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if (!W.is_wrench()) + return ..() + + playsound(src, W.usesound, 50, 1) + to_chat(user, "You begin to unfasten \the [src]...") + if (do_after(user, 40 * W.toolspeed)) + user.visible_message( \ + "\The [user] unfastens \the [src].", \ + "You have unfastened \the [src].", \ + "You hear a ratchet.") + deconstruct() diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm index a741869b5b..9938fa20eb 100644 --- a/code/controllers/subsystems/garbage.dm +++ b/code/controllers/subsystems/garbage.dm @@ -240,9 +240,9 @@ SUBSYSTEM_DEF(garbage) time = TICK_DELTA_TO_MS(tick)/100 if (time > highest_del_time) highest_del_time = time - if (time > 10) - log_game("Error: [type]([refID]) took longer than 1 second to delete (took [time/10] seconds to delete)") - message_admins("Error: [type]([refID]) took longer than 1 second to delete (took [time/10] seconds to delete).") + if (time > 20) //VOREStation Edit + log_game("Error: [type]([refID]) took longer than 2 seconds to delete (took [time/10] seconds to delete)") //VOREStation Edit + message_admins("Error: [type]([refID]) took longer than 2 seconds to delete (took [time/10] seconds to delete).") //VOREStation Edit postpone(time) /datum/controller/subsystem/garbage/proc/HardQueue(datum/D) diff --git a/code/datums/supplypacks/misc.dm b/code/datums/supplypacks/misc.dm index b77d442e82..bf5b8ba53b 100644 --- a/code/datums/supplypacks/misc.dm +++ b/code/datums/supplypacks/misc.dm @@ -143,4 +143,30 @@ ) cost = 25 containertype = /obj/structure/closet/crate - containername = "Glucose Hypo Crate" \ No newline at end of file + containername = "Glucose Hypo Crate" + +/datum/supply_pack/misc/mre_rations + num_contained = 6 + name = "Emergency - MREs" + contains = list(/obj/item/weapon/storage/mre, + /obj/item/weapon/storage/mre/menu2, + /obj/item/weapon/storage/mre/menu3, + /obj/item/weapon/storage/mre/menu4, + /obj/item/weapon/storage/mre/menu5, + /obj/item/weapon/storage/mre/menu6, + /obj/item/weapon/storage/mre/menu7, + /obj/item/weapon/storage/mre/menu8, + /obj/item/weapon/storage/mre/menu9, + /obj/item/weapon/storage/mre/menu10) + cost = 50 + containertype = /obj/structure/closet/crate/freezer + containername = "ready to eat rations" + +/datum/supply_pack/misc/paste_rations + name = "Emergency - Paste" + contains = list( + /obj/item/weapon/storage/mre/menu11 = 2 + ) + cost = 25 + containertype = /obj/structure/closet/crate/freezer + containername = "emergency rations" diff --git a/code/datums/supplypacks/misc_vr.dm b/code/datums/supplypacks/misc_vr.dm index 613a01cfd4..9e4ee3879d 100644 --- a/code/datums/supplypacks/misc_vr.dm +++ b/code/datums/supplypacks/misc_vr.dm @@ -13,24 +13,6 @@ containername = "Belt-miner gear crate" access = access_mining -/datum/supply_pack/misc/rations - name = "Emergency rations" - contains = list( - /obj/item/weapon/reagent_containers/food/snacks/liquidfood = 4, - ) - cost = 20 - containertype = /obj/structure/closet/crate/freezer - containername = "emergency rations" - -/datum/supply_pack/misc/proteinrations - name = "Emergency meat rations" - contains = list( - /obj/item/weapon/reagent_containers/food/snacks/liquidprotein = 4, - ) - cost = 30 - containertype = /obj/structure/closet/crate/freezer - containername = "emergency meat rations" - /datum/supply_pack/misc/eva_rig name = "eva hardsuit (empty)" contains = list( diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index e9dbca2eea..b61ada6d18 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -573,4 +573,4 @@ for(var/reagent in S.processed_reagents) S.reagents.add_reagent(reagent,amount) S.chassis.use_power(energy_drain) - return 1 + return 1 \ No newline at end of file diff --git a/code/game/mecha/equipment/tools/medical_tools_vr.dm b/code/game/mecha/equipment/tools/medical_tools_vr.dm new file mode 100644 index 0000000000..19efa0a5fd --- /dev/null +++ b/code/game/mecha/equipment/tools/medical_tools_vr.dm @@ -0,0 +1,10 @@ +/obj/item/mecha_parts/mecha_equipment/weapon/energy/medigun + equip_cooldown = 6 + name = "\improper BL-3 \"Phoenix\" directed restoration system" + desc = "The BL-3 'Phoenix' is a portable medical system used to treat external injuries from afar." + icon_state = "mecha_medbeam" + energy_drain = 1000 + projectile = /obj/item/projectile/beam/medigun + fire_sound = 'sound/weapons/eluger.ogg' + equip_type = EQUIP_UTILITY + origin_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 5, TECH_BIO = 6, TECH_POWER = 6) \ No newline at end of file diff --git a/code/game/mecha/micro/mechfab_designs_vr.dm b/code/game/mecha/micro/mechfab_designs_vr.dm index 7a86d8d9ec..671e53b4da 100644 --- a/code/game/mecha/micro/mechfab_designs_vr.dm +++ b/code/game/mecha/micro/mechfab_designs_vr.dm @@ -185,3 +185,11 @@ id = "weasel_head" build_path = /obj/item/mecha_parts/micro/part/weasel_head materials = list(DEFAULT_WALL_MATERIAL = 7000, "glass" = 2500) + +/datum/design/item/mecha/medigun + name = "BL-3/P directed restoration system" + desc = "A portable medical system used to treat external injuries from afar." + id = "mech_medigun" + req_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 5, TECH_BIO = 6) + materials = list(DEFAULT_WALL_MATERIAL = 8000, "gold" = 2000, "silver" = 1750, "diamond" = 1500, "phoron" = 4000) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/medigun \ No newline at end of file diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 3b1584ca19..8b8bba5a9d 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -53,7 +53,7 @@ var/global/list/image/splatter_cache=list() blood_DNA |= B.blood_DNA.Copy() qdel(B) drytime = world.time + DRYING_TIME * (amount+1) - START_PROCESSING(SSobj, src) + START_PROCESSING(SSobj, src) /obj/effect/decal/cleanable/blood/process() if(world.time > drytime) @@ -93,7 +93,6 @@ var/global/list/image/splatter_cache=list() S.overlays += S.blood_overlay if(S.blood_overlay && S.blood_overlay.color != basecolor) S.blood_overlay.color = basecolor - S.overlays.Cut() S.overlays += S.blood_overlay S.blood_DNA |= blood_DNA.Copy() perp.update_inv_shoes() diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 8a9220e87f..04046985c6 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -44,3 +44,14 @@ icon_state = "explosionfast" duration = 4 // VOREStation Add End + +//VOREStation edit: medigun +/obj/effect/temp_visual/heal + name = "healing glow" + icon_state = "heal" + duration = 15 + +/obj/effect/temp_visual/heal/Initialize(mapload) + pixel_x = rand(-12, 12) + pixel_y = rand(-9, 0) +//VOREStation edit ends \ No newline at end of file diff --git a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm index 872c652356..d4f65fc9d1 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm @@ -79,3 +79,12 @@ light_range = 4 light_power = 3 light_color = "#3300ff" + +//VOREStation edit: medigun +/obj/effect/projectile/impact/medigun + icon = 'icons/obj/projectiles_vr.dmi' + icon_state = "impact_medbeam" + light_range = 2 + light_power = 0.5 + light_color = "#80F5FF" +//VOREStation edit ends \ No newline at end of file diff --git a/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm b/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm index 42511e6577..d901aeaa61 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm @@ -91,3 +91,12 @@ light_range = 4 light_power = 3 light_color = "#3300ff" + +//VOREStation edit: medigun +/obj/effect/projectile/muzzle/medigun + icon = 'icons/obj/projectiles_vr.dmi' + icon_state = "muzzle_medbeam" + light_range = 2 + light_power = 0.5 + light_color = "#80F5FF" +//VOREStation edit ends \ No newline at end of file diff --git a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm index 54fa41265f..fe9a0213e3 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm @@ -107,3 +107,12 @@ light_range = 4 light_power = 3 light_color = "#3300ff" + +//VOREStation edit: medigun +/obj/effect/projectile/tracer/medigun + icon = 'icons/obj/projectiles_vr.dmi' + icon_state = "medbeam" + light_range = 2 + light_power = 0.5 + light_color = "#80F5FF" +//VOREStation edit ends \ No newline at end of file diff --git a/code/game/objects/effects/temporary_visuals/temproary_visual.dm~1fb83e6... Merge pull request #5959 from elgeonmb_suit++ b/code/game/objects/effects/temporary_visuals/temproary_visual.dm~1fb83e6... Merge pull request #5959 from elgeonmb_suit++ deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index 3d9c4ea140..dd3ddb29ca 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -76,6 +76,10 @@ name = "\improper \"LiquidFood\" ration" icon_state = "liquidfood" +/obj/item/trash/liquidprotein + name = "\improper \"LiquidProtein\" ration" + icon_state = "liquidprotein" + /obj/item/trash/tastybread name = "bread tube" icon_state = "tastybread" diff --git a/code/game/objects/items/trash_vr.dm b/code/game/objects/items/trash_vr.dm index 43cadda3f7..20f7e32c4c 100644 --- a/code/game/objects/items/trash_vr.dm +++ b/code/game/objects/items/trash_vr.dm @@ -26,11 +26,6 @@ return ..() -/obj/item/trash/liquidprotein - name = "\improper \"LiquidProtein\" ration" - icon = 'icons/obj/trash_vr.dmi' - icon_state = "liquidprotein" - /obj/item/trash/fancyplate name = "dirty fancy plate" icon = 'icons/obj/trash_vr.dmi' diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 7d754d8f14..1d1934bf8a 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -67,6 +67,7 @@ item_state = "candlebox5" throwforce = 2 slot_flags = SLOT_BELT + max_storage_space = ITEMSIZE_COST_SMALL * 5 starts_with = list(/obj/item/weapon/flame/candle = 5) /obj/item/weapon/storage/fancy/whitecandle_box @@ -78,6 +79,7 @@ item_state = "whitecandlebox5" throwforce = 2 slot_flags = SLOT_BELT + max_storage_space = ITEMSIZE_COST_SMALL * 5 starts_with = list(/obj/item/weapon/flame/candle/white = 5) /obj/item/weapon/storage/fancy/blackcandle_box @@ -89,6 +91,7 @@ item_state = "blackcandlebox5" throwforce = 2 slot_flags = SLOT_BELT + max_storage_space = ITEMSIZE_COST_SMALL * 5 starts_with = list(/obj/item/weapon/flame/candle/black = 5) @@ -179,6 +182,21 @@ return ..() +/* + * Cracker Packet + */ + +/obj/item/weapon/storage/fancy/crackers + name = "\improper Getmore Crackers" + icon = 'icons/obj/food.dmi' + icon_state = "crackerbox" + icon_type = "cracker" + max_storage_space = ITEMSIZE_COST_TINY * 6 + max_w_class = ITEMSIZE_TINY + w_class = ITEMSIZE_SMALL + can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/cracker) + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/cracker = 6) + //////////// //CIG PACK// //////////// diff --git a/code/game/objects/items/weapons/storage/mre.dm b/code/game/objects/items/weapons/storage/mre.dm new file mode 100644 index 0000000000..c3adc484e0 --- /dev/null +++ b/code/game/objects/items/weapons/storage/mre.dm @@ -0,0 +1,276 @@ +/* +MRE Stuff + */ + +/obj/item/weapon/storage/mre + name = "standard MRE" + desc = "A vacuum-sealed bag containing a day's worth of nutrients for an adult in strenuous situations. There is no visible expiration date on the package." + icon = 'icons/obj/food.dmi' + icon_state = "mre" + max_storage_space = ITEMSIZE_COST_SMALL * 6 + max_w_class = ITEMSIZE_SMALL + var/opened = FALSE + var/meal_desc = "This one is menu 1, meat pizza." + starts_with = list( + /obj/item/weapon/storage/mrebag, + /obj/item/weapon/storage/mrebag/side, + /obj/item/weapon/storage/mrebag/dessert, + /obj/item/weapon/storage/fancy/crackers, + /obj/random/mre/spread, + /obj/random/mre/drink, + /obj/random/mre/sauce, + /obj/item/weapon/material/kitchen/utensil/spoon/plastic + ) + +/obj/item/weapon/storage/mre/examine(mob/user) + . = ..() + to_chat(user, meal_desc) + +/obj/item/weapon/storage/mre/update_icon() + if(opened) + icon_state = "[initial(icon_state)][opened]" + . = ..() + +/obj/item/weapon/storage/mre/attack_self(mob/user) + open(user) + +/obj/item/weapon/storage/mre/open(mob/user) + if(!opened) + to_chat(usr, "You tear open the bag, breaking the vacuum seal.") + opened = 1 + update_icon() + . = ..() + +/obj/item/weapon/storage/mre/menu2 + meal_desc = "This one is menu 2, margherita." + starts_with = list( + /obj/item/weapon/storage/mrebag/menu2, + /obj/item/weapon/storage/mrebag/side, + /obj/item/weapon/storage/mrebag/dessert, + /obj/item/weapon/storage/fancy/crackers, + /obj/random/mre/spread, + /obj/random/mre/drink, + /obj/random/mre/sauce, + /obj/item/weapon/material/kitchen/utensil/spoon/plastic + ) + +/obj/item/weapon/storage/mre/menu3 + meal_desc = "This one is menu 3, vegetable pizza." + starts_with = list( + /obj/item/weapon/storage/mrebag/menu3, + /obj/item/weapon/storage/mrebag/side, + /obj/item/weapon/storage/mrebag/dessert, + /obj/item/weapon/storage/fancy/crackers, + /obj/random/mre/spread, + /obj/random/mre/drink, + /obj/random/mre/sauce, + /obj/item/weapon/material/kitchen/utensil/spoon/plastic + ) + +/obj/item/weapon/storage/mre/menu4 + meal_desc = "This one is menu 4, hamburger." + starts_with = list( + /obj/item/weapon/storage/mrebag/menu4, + /obj/item/weapon/storage/mrebag/side, + /obj/item/weapon/storage/mrebag/dessert, + /obj/item/weapon/storage/fancy/crackers, + /obj/random/mre/spread, + /obj/random/mre/drink, + /obj/random/mre/sauce, + /obj/item/weapon/material/kitchen/utensil/spoon/plastic + ) + +/obj/item/weapon/storage/mre/menu5 + meal_desc = "This one is menu 5, taco." + starts_with = list( + /obj/item/weapon/storage/mrebag/menu5, + /obj/item/weapon/storage/mrebag/side, + /obj/item/weapon/storage/mrebag/dessert, + /obj/item/weapon/storage/fancy/crackers, + /obj/random/mre/spread, + /obj/random/mre/drink, + /obj/random/mre/sauce, + /obj/item/weapon/material/kitchen/utensil/spoon/plastic + ) + +/obj/item/weapon/storage/mre/menu6 + meal_desc = "This one is menu 6, meatbread." + starts_with = list( + /obj/item/weapon/storage/mrebag/menu6, + /obj/item/weapon/storage/mrebag/side, + /obj/item/weapon/storage/mrebag/dessert, + /obj/item/weapon/storage/fancy/crackers, + /obj/random/mre/spread, + /obj/random/mre/drink, + /obj/random/mre/sauce, + /obj/item/weapon/material/kitchen/utensil/spoon/plastic + ) + +/obj/item/weapon/storage/mre/menu7 + meal_desc = "This one is menu 7, salad." + starts_with = list( + /obj/item/weapon/storage/mrebag/menu7, + /obj/item/weapon/storage/mrebag/side, + /obj/item/weapon/storage/mrebag/dessert, + /obj/item/weapon/storage/fancy/crackers, + /obj/random/mre/spread, + /obj/random/mre/drink, + /obj/random/mre/sauce, + /obj/item/weapon/material/kitchen/utensil/spoon/plastic + ) + +/obj/item/weapon/storage/mre/menu8 + meal_desc = " This one is menu 8, hot chili." + starts_with = list( + /obj/item/weapon/storage/mrebag/menu8, + /obj/item/weapon/storage/mrebag/side, + /obj/item/weapon/storage/mrebag/dessert, + /obj/item/weapon/storage/fancy/crackers, + /obj/random/mre/spread, + /obj/random/mre/drink, + /obj/random/mre/sauce, + /obj/item/weapon/material/kitchen/utensil/spoon/plastic + ) + +/obj/item/weapon/storage/mre/menu9 + name = "vegan MRE" + meal_desc = "This one is menu 9, boiled rice (skrell-safe)." + icon_state = "vegmre" + starts_with = list( + /obj/item/weapon/storage/mrebag/menu9, + /obj/item/weapon/storage/mrebag/side, + /obj/item/weapon/storage/mrebag/dessert/menu9, + /obj/item/weapon/storage/fancy/crackers, + /obj/random/mre/spread/vegan, + /obj/random/mre/drink, + /obj/random/mre/sauce/vegan, + /obj/item/weapon/material/kitchen/utensil/spoon/plastic + ) + +/obj/item/weapon/storage/mre/menu10 + name = "protein MRE" + meal_desc = "This one is menu 10, protein." + icon_state = "meatmre" + starts_with = list( + /obj/item/weapon/storage/mrebag/menu10, + /obj/item/weapon/storage/mrebag/menu10, + /obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/protein, + /obj/random/mre/sauce/sugarfree, + /obj/item/weapon/material/kitchen/utensil/spoon/plastic + ) + +/obj/item/weapon/storage/mre/menu11 + name = "emergency MRE" + meal_desc = "This one is menu 11, nutriment paste. Only for emergencies." + icon_state = "crayonmre" + starts_with = list( + /obj/item/weapon/reagent_containers/food/snacks/liquidfood, + /obj/item/weapon/reagent_containers/food/snacks/liquidfood, + /obj/item/weapon/reagent_containers/food/snacks/liquidfood, + /obj/item/weapon/reagent_containers/food/snacks/liquidfood, + /obj/item/weapon/reagent_containers/food/snacks/liquidprotein, + /obj/item/weapon/reagent_containers/food/snacks/liquidprotein, + ) + +/obj/item/weapon/storage/mre/menu12 + name = "crayon MRE" + meal_desc = "This one doesn't have a menu listing. How very odd." + icon_state = "crayonmre" + starts_with = list( + /obj/item/weapon/storage/fancy/crayons, + /obj/item/weapon/storage/mrebag/dessert/menu11, + /obj/random/mre/sauce/crayon, + /obj/random/mre/sauce/crayon, + /obj/random/mre/sauce/crayon + ) + +/obj/item/weapon/storage/mre/random + meal_desc = "The menu label is faded out." + starts_with = list( + /obj/random/mre/main, + /obj/item/weapon/storage/mrebag/side, + /obj/item/weapon/storage/mrebag/dessert, + /obj/item/weapon/storage/fancy/crackers, + /obj/random/mre/spread, + /obj/random/mre/drink, + /obj/random/mre/sauce, + /obj/item/weapon/material/kitchen/utensil/spoon/plastic + ) + +/obj/item/weapon/storage/mrebag + name = "main course" + desc = "A vacuum-sealed bag containing the MRE's main course. Self-heats when opened." + icon = 'icons/obj/food.dmi' + icon_state = "pouch_medium" + storage_slots = 1 + w_class = ITEMSIZE_SMALL + max_w_class = ITEMSIZE_SMALL + var/opened = FALSE + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/slice/meatpizza/filled) + +/obj/item/weapon/storage/mrebag/Initialize() + . = ..() + +/obj/item/weapon/storage/mrebag/update_icon() + if(opened) + icon_state = "[initial(icon_state)][opened]" + . = ..() + +/obj/item/weapon/storage/mrebag/attack_self(mob/user) + open(user) + +/obj/item/weapon/storage/mrebag/open(mob/user) + if(!opened) + to_chat(usr, "The pouch heats up as you break the vaccum seal.") + opened = 1 + update_icon() + . = ..() + +/obj/item/weapon/storage/mrebag/menu2 + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/slice/margherita/filled) + +/obj/item/weapon/storage/mrebag/menu3 + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/slice/vegetablepizza/filled) + +/obj/item/weapon/storage/mrebag/menu4 + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/monkeyburger) + +/obj/item/weapon/storage/mrebag/menu5 + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/taco) + +/obj/item/weapon/storage/mrebag/menu6 + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/slice/meatbread/filled) + +/obj/item/weapon/storage/mrebag/menu7 + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/tossedsalad) + +/obj/item/weapon/storage/mrebag/menu8 + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/hotchili) + +/obj/item/weapon/storage/mrebag/menu9 + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/boiledrice) + +/obj/item/weapon/storage/mrebag/menu10 + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/meatcube) + +/obj/item/weapon/storage/mrebag/side + name = "side dish" + desc = "A vacuum-sealed bag containing the MRE's side dish. Self-heats when opened." + icon_state = "pouch_small" + starts_with = list(/obj/random/mre/side) + +/obj/item/weapon/storage/mrebag/side/menu10 + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/meatcube) + +/obj/item/weapon/storage/mrebag/dessert + name = "dessert" + desc = "A vacuum-sealed bag containing the MRE's dessert." + icon_state = "pouch_small" + starts_with = list(/obj/random/mre/dessert) + +/obj/item/weapon/storage/mrebag/dessert/menu9 + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit) + +/obj/item/weapon/storage/mrebag/dessert/menu11 + starts_with = list(/obj/item/weapon/pen/crayon/rainbow) diff --git a/code/game/objects/random/misc.dm b/code/game/objects/random/misc.dm index 790e5471d6..b058a6b918 100644 --- a/code/game/objects/random/misc.dm +++ b/code/game/objects/random/misc.dm @@ -173,6 +173,7 @@ prob(3);/obj/item/weapon/reagent_containers/syringe/antiviral, prob(5);/obj/item/weapon/reagent_containers/syringe/inaprovaline, prob(1);/obj/item/weapon/reagent_containers/hypospray, + prob(1);/obj/item/weapon/storage/firstaid/ml3m_pack_med, prob(1);/obj/item/weapon/storage/box/freezer, prob(2);/obj/item/stack/nanopaste) @@ -540,3 +541,150 @@ var/possible_object_paths = list(/obj/item/weapon/paper/carbon/cursedform) possible_object_paths |= subtypesof(/obj/item/clothing/head/psy_crown) return pick(possible_object_paths) + +//Random MRE stuff + +/obj/random/mre + name = "random MRE" + desc = "This is a random single MRE." + icon = 'icons/obj/food.dmi' + icon_state = "mre" + drop_get_turf = FALSE + +/obj/random/mre/item_to_spawn() + return pick(/obj/item/weapon/storage/mre, + /obj/item/weapon/storage/mre/menu2, + /obj/item/weapon/storage/mre/menu3, + /obj/item/weapon/storage/mre/menu4, + /obj/item/weapon/storage/mre/menu5, + /obj/item/weapon/storage/mre/menu6, + /obj/item/weapon/storage/mre/menu7, + /obj/item/weapon/storage/mre/menu8, + /obj/item/weapon/storage/mre/menu9, + /obj/item/weapon/storage/mre/menu10) + + +/obj/random/mre/main + name = "random MRE main course" + desc = "This is a random main course for MREs." + icon_state = "pouch" + drop_get_turf = FALSE + +/obj/random/mre/main/item_to_spawn() + return pick(/obj/item/weapon/storage/mrebag, + /obj/item/weapon/storage/mrebag/menu2, + /obj/item/weapon/storage/mrebag/menu3, + /obj/item/weapon/storage/mrebag/menu4, + /obj/item/weapon/storage/mrebag/menu5, + /obj/item/weapon/storage/mrebag/menu6, + /obj/item/weapon/storage/mrebag/menu7, + /obj/item/weapon/storage/mrebag/menu8) + +/obj/random/mre/side + name = "random MRE side dish" + desc = "This is a random side dish for MREs." + icon_state = "pouch" + drop_get_turf = FALSE + +/obj/random/mre/side/item_to_spawn() + return pick(/obj/item/weapon/reagent_containers/food/snacks/tossedsalad, + /obj/item/weapon/reagent_containers/food/snacks/boiledrice, + /obj/item/weapon/reagent_containers/food/snacks/poppypretzel, + /obj/item/weapon/reagent_containers/food/snacks/twobread, + /obj/item/weapon/reagent_containers/food/snacks/jelliedtoast) + +/obj/random/mre/dessert + name = "random MRE dessert" + desc = "This is a random dessert for MREs." + icon_state = "pouch" + drop_get_turf = FALSE + +/obj/random/mre/dessert/item_to_spawn() + return pick(/obj/item/weapon/reagent_containers/food/snacks/candy, + /obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar, + /obj/item/weapon/reagent_containers/food/snacks/donut/normal, + /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly, + /obj/item/weapon/reagent_containers/food/snacks/chocolatebar, + /obj/item/weapon/reagent_containers/food/snacks/cookie) + +/obj/random/mre/dessert/vegan + name = "random vegan MRE dessert" + desc = "This is a random vegan dessert for MREs." + +/obj/random/mre/dessert/vegan/item_to_spawn() + return pick(/obj/item/weapon/reagent_containers/food/snacks/candy, + /obj/item/weapon/reagent_containers/food/snacks/chocolatebar, + /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly, + /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit) + +/obj/random/mre/drink + name = "random MRE drink" + desc = "This is a random drink for MREs." + icon_state = "packet" + drop_get_turf = FALSE + +/obj/random/mre/drink/item_to_spawn() + return pick(/obj/item/weapon/reagent_containers/food/condiment/small/packet/coffee, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/tea, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/cocoa, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/grape, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/orange, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/watermelon, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/apple) + +/obj/random/mre/spread + name = "random MRE spread" + desc = "This is a random spread packet for MREs." + icon_state = "packet" + drop_get_turf = FALSE + +/obj/random/mre/spread/item_to_spawn() + return pick(/obj/item/weapon/reagent_containers/food/condiment/small/packet/jelly, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/honey) + +/obj/random/mre/spread/vegan + name = "random vegan MRE spread" + desc = "This is a random vegan spread packet for MREs" + +/obj/random/mre/spread/vegan/item_to_spawn() + return pick(/obj/item/weapon/reagent_containers/food/condiment/small/packet/jelly) + +/obj/random/mre/sauce + name = "random MRE sauce" + desc = "This is a random sauce packet for MREs." + icon_state = "packet" + drop_get_turf = FALSE + +/obj/random/mre/sauce/item_to_spawn() + return pick(/obj/item/weapon/reagent_containers/food/condiment/small/packet/salt, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/pepper, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/sugar, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/capsaicin, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/ketchup, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/mayo, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/soy) + +/obj/random/mre/sauce/vegan/item_to_spawn() + return pick(/obj/item/weapon/reagent_containers/food/condiment/small/packet/salt, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/pepper, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/sugar, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/soy) + +/obj/random/mre/sauce/sugarfree/item_to_spawn() + return pick(/obj/item/weapon/reagent_containers/food/condiment/small/packet/salt, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/pepper, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/capsaicin, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/ketchup, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/mayo, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/soy) + +/obj/random/mre/sauce/crayon/item_to_spawn() + return pick(/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/generic, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/red, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/orange, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/yellow, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/green, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/blue, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/purple, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/grey, + /obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/brown) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index da686ad455..43f50a8387 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -97,6 +97,7 @@ /obj/item/clothing/glasses/meson, /obj/item/weapon/cartridge/engineering, /obj/item/taperoll/engineering, + /obj/item/clothing/head/hardhat, /obj/item/clothing/suit/storage/hooded/wintercoat/engineering, /obj/item/clothing/shoes/boots/winter/engineering, /obj/item/weapon/tank/emergency/oxygen/engi, @@ -125,6 +126,7 @@ starts_with = list( /obj/item/clothing/accessory/storage/brown_vest, /obj/item/clothing/suit/fire/firefighter, + /obj/item/clothing/head/hardhat/red, /obj/item/device/flashlight, /obj/item/weapon/extinguisher, ///obj/item/clamp, //VOREStation Removal: without leaks those are pointless, diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index aafa6f85f3..6517dda8f8 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -346,7 +346,7 @@ desc = "A crate of emergency rations." starts_with = list( - /obj/item/weapon/reagent_containers/food/snacks/liquidfood = 4) + /obj/random/mre = 6) /obj/structure/closet/crate/bin diff --git a/code/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm index f69d676ccd..d6e36b30e2 100644 --- a/code/game/turfs/flooring/flooring_decals.dm +++ b/code/game/turfs/flooring/flooring_decals.dm @@ -469,8 +469,8 @@ var/list/floor_decals = list() /obj/effect/floor_decal/corner/grey/bordercorner icon_state = "bordercolorcorner" -/obj/effect/floor_decal/corner/grey/bordercorner - icon_state = "bordercolorcorner" +/obj/effect/floor_decal/corner/grey/bordercorner2 + icon_state = "bordercolorcorner2" /obj/effect/floor_decal/corner/grey/borderfull icon_state = "bordercolorfull" diff --git a/code/game/turfs/unsimulated/sky_vr.dm b/code/game/turfs/unsimulated/sky_vr.dm index 8ba1cf0cb5..d012d08b6c 100644 --- a/code/game/turfs/unsimulated/sky_vr.dm +++ b/code/game/turfs/unsimulated/sky_vr.dm @@ -1,67 +1,69 @@ -/////////////////// -// Generic skyfall turf -// Really only works well if the map doesn't have 'indoor' areas otherwise they can fall into one. -// TODO: Fix that. -/turf/unsimulated/floor/sky - name = "the sky" - desc = "It's the sky! Be careful!" - icon = 'icons/turf/floors.dmi' - icon_state = "sky_slow" - dir = SOUTH - initialized = FALSE - var/does_skyfall = TRUE - var/list/skyfall_levels - -/turf/unsimulated/floor/sky/Initialize() - . = ..() - if(does_skyfall && !LAZYLEN(skyfall_levels)) - error("[x],[y],[z], [get_area(src)] doesn't have skyfall_levels defined! Can't skyfall!") - if(locate(/turf/simulated) in orange(src,1)) - set_light(2, 2, color) - -/turf/unsimulated/floor/sky/Entered(atom/movable/AM,atom/oldloc) - . = ..() - if(!does_skyfall) - return //We don't do that - if(isobserver(AM)) - return //Don't ghostport, very annoying - if(AM.throwing) - return //Being thrown over, not fallen yet - - var/mob/living/L - if(isliving(AM)) - L = AM - if(L.is_floating) - return //Flyers/nograv can ignore it - - do_fall(AM) - -/turf/unsimulated/floor/sky/hitby(var/atom/movable/AM, var/speed) - . = ..() - - if(!does_skyfall) - return //We don't do that - - do_fall(AM) - -/turf/unsimulated/floor/sky/proc/do_fall(atom/movable/AM) - //Bye - var/attempts = 100 - var/turf/simulated/T - while(attempts && !T) - var/turf/simulated/candidate = locate(rand(5,world.maxx-5),rand(5,world.maxy-5),pick(skyfall_levels)) - if(candidate.density) - attempts-- - continue - - T = candidate - break - - if(!T) - return - - AM.forceMove(T) - if(isliving(AM)) - var/mob/living/L = AM - message_admins("\The [AM] fell out of the sky.") - L.fall_impact(T, 42, 90, FALSE, TRUE) //You will not be defibbed from this. +/////////////////// +// Generic skyfall turf +// Really only works well if the map doesn't have 'indoor' areas otherwise they can fall into one. +// TODO: Fix that. +/turf/unsimulated/floor/sky + name = "the sky" + desc = "It's the sky! Be careful!" + icon = 'icons/turf/floors.dmi' + icon_state = "sky_slow" + dir = SOUTH + initialized = FALSE + var/does_skyfall = TRUE + var/list/skyfall_levels + +/turf/unsimulated/floor/sky/Initialize() + . = ..() + if(does_skyfall && !LAZYLEN(skyfall_levels)) + error("[x],[y],[z], [get_area(src)] doesn't have skyfall_levels defined! Can't skyfall!") + if(locate(/turf/simulated) in orange(src,1)) + set_light(2, 2, color) + +/turf/unsimulated/floor/sky/Entered(atom/movable/AM,atom/oldloc) + . = ..() + if(!does_skyfall) + return //We don't do that + if(isobserver(AM)) + return //Don't ghostport, very annoying + if(AM.throwing) + return //Being thrown over, not fallen yet + if(/obj/item/projectile) + return // Bullets/lasers/pewpew should not fall out of the sky. pew. + + var/mob/living/L + if(isliving(AM)) + L = AM + if(L.is_floating) + return //Flyers/nograv can ignore it + + do_fall(AM) + +/turf/unsimulated/floor/sky/hitby(var/atom/movable/AM, var/speed) + . = ..() + + if(!does_skyfall) + return //We don't do that + + do_fall(AM) + +/turf/unsimulated/floor/sky/proc/do_fall(atom/movable/AM) + //Bye + var/attempts = 100 + var/turf/simulated/T + while(attempts && !T) + var/turf/simulated/candidate = locate(rand(5,world.maxx-5),rand(5,world.maxy-5),pick(skyfall_levels)) + if(candidate.density) + attempts-- + continue + + T = candidate + break + + if(!T) + return + + AM.forceMove(T) + if(isliving(AM)) + var/mob/living/L = AM + message_admins("\The [AM] fell out of the sky.") + L.fall_impact(T, 42, 90, FALSE, TRUE) //You will not be defibbed from this. diff --git a/code/global.dm b/code/global.dm index b2ec06109d..5950ccfd14 100644 --- a/code/global.dm +++ b/code/global.dm @@ -53,7 +53,7 @@ var/list/lastsignalers = list() // Keeps last 100 signals here in format: "[src] var/list/lawchanges = list() // Stores who uploaded laws to which silicon-based lifeform, and what the law was. var/list/reg_dna = list() -var/mouse_respawn_time = 5 // Amount of time that must pass between a player dying as a mouse and repawning as a mouse. In minutes. +var/mouse_respawn_time = 2.5 // Amount of time that must pass between a player dying as a mouse and repawning as a mouse. In minutes. Vorestation Edit - Changed to 2.5 minutes, half of 5, in accordance with mouse nerfs and realignment. var/list/monkeystart = list() var/list/wizardstart = list() diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 3475e60314..72e2b3b39b 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -368,7 +368,7 @@ Traitors and the like can also be revived with the previous role mostly intact. return var/location = alert(src,"Please specify where to spawn them.", "Location", "Right Here", "Arrivals", "Cancel") - if(!location) + if(location == "Cancel" || !location) return var/announce = alert(src,"Announce as if they had just arrived?", "Announce", "Yes", "No", "Cancel") diff --git a/code/modules/catalogue/cataloguer_vr.dm b/code/modules/catalogue/cataloguer_vr.dm new file mode 100644 index 0000000000..d1dfac5dea --- /dev/null +++ b/code/modules/catalogue/cataloguer_vr.dm @@ -0,0 +1,56 @@ +/obj/item/device/cataloguer/compact + name = "compact cataloguer" + icon = 'icons/vore/custom_items_vr.dmi' + icon_state = "tricorder" + action_button_name = "Toggle Cataloguer" + var/deployed = TRUE + scan_range = 1 + toolspeed = 1.2 + +/obj/item/device/cataloguer/compact/update_icon() + if(busy) + icon_state = "[initial(icon_state)]_s" + else + icon_state = initial(icon_state) + +/obj/item/device/cataloguer/compact/ui_action_click() + toggle() + +/obj/item/device/cataloguer/compact/verb/toggle() + set name = "Toggle Cataloguer" + set category = "Object" + + if(busy) + to_chat(usr, span("warning", "\The [src] is currently scanning something.")) + return + deployed = !(deployed) + if(deployed) + w_class = ITEMSIZE_NORMAL + icon_state = "[initial(icon_state)]" + to_chat(usr, span("notice", "You flip open \the [src].")) + else + w_class = ITEMSIZE_SMALL + icon_state = "[initial(icon_state)]_closed" + to_chat(usr, span("notice", "You close \the [src].")) + + if (ismob(usr)) + var/mob/M = usr + M.update_action_buttons() + +/obj/item/device/cataloguer/compact/afterattack(atom/target, mob/user, proximity_flag) + if(!deployed) + to_chat(user, span("warning", "\The [src] is closed.")) + return + return ..() + +/obj/item/device/cataloguer/compact/pulse_scan(mob/user) + if(!deployed) + to_chat(user, span("warning", "\The [src] is closed.")) + return + return ..() + +/obj/item/device/cataloguer/compact/pathfinder + name = "pathfinder's cataloguer" + icon_state = "tricorder_med" + scan_range = 3 + toolspeed = 1 diff --git a/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm b/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm index 719ba98a38..e7bb0493f3 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm @@ -1,9 +1,3 @@ -/datum/gear/suit/roles/poncho/cloak/research - allowed_roles = list("Research Director","Scientist", "Roboticist", "Xenobiologist", "Explorer", "Pathfinder") - -/datum/gear/suit/roles/poncho/cloak/medical - allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist", "Field Medic") - /datum/gear/suit/wintercoat/medical allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist", "Field Medic") diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index a940620636..50dac4bb1d 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -293,6 +293,17 @@ punch_force = initial(punch_force) wearer = null +/obj/item/clothing/gloves + var/datum/unarmed_attack/special_attack = null //do the gloves have a special unarmed attack? + var/special_attack_type = null + +/obj/item/clothing/gloves/New() + ..() + if(special_attack_type && ispath(special_attack_type)) + special_attack = new special_attack_type + + + ///////////////////////////////////////////////////////////////////// //Rings @@ -502,6 +513,7 @@ if(usr.put_in_hands(holding)) usr.visible_message("\The [usr] pulls a knife out of their boot!") holding = null + overlays -= image(icon, "[icon_state]_knife") else usr << "Your need an empty, unbroken hand to do that." holding.forceMove(src) @@ -546,7 +558,6 @@ update_icon() /obj/item/clothing/shoes/update_icon() - overlays.Cut() if(holding) overlays += image(icon, "[icon_state]_knife") if(ismob(usr)) diff --git a/code/modules/clothing/gloves/gauntlets.dm b/code/modules/clothing/gloves/gauntlets.dm index b65884d3f9..8807fb93ad 100644 --- a/code/modules/clothing/gloves/gauntlets.dm +++ b/code/modules/clothing/gloves/gauntlets.dm @@ -18,6 +18,10 @@ var/mob/living/carbon/human/H = user if(H.gloves) gloves = H.gloves + if(!istype(gloves)) + to_chat(user, "You are unable to wear \the [src] as \the [H.gloves] are in the way.") + gloves = null + return 0 if(gloves.overgloves) to_chat(user, "You are unable to wear \the [src] as \the [H.gloves] are in the way.") gloves = null diff --git a/code/modules/food/food/condiment.dm b/code/modules/food/food/condiment.dm index a6625ccf30..522f79b89b 100644 --- a/code/modules/food/food/condiment.dm +++ b/code/modules/food/food/condiment.dm @@ -182,6 +182,198 @@ . = ..() reagents.add_reagent("sugar", 20) +//MRE condiments and drinks. + +/obj/item/weapon/reagent_containers/food/condiment/small/packet + icon_state = "packet_small" + w_class = ITEMSIZE_TINY + possible_transfer_amounts = "1;5;10" + amount_per_transfer_from_this = 1 + volume = 5 + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/salt + name = "salt packet" + desc = "Contains 5u of table salt." + icon_state = "packet_small_white" + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/salt/Initialize() + . = ..() + reagents.add_reagent("sodiumchloride", 5) + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/pepper + name = "pepper packet" + desc = "Contains 5u of black pepper." + icon_state = "packet_small_black" + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/pepper/Initialize() + . = ..() + reagents.add_reagent("blackpepper", 5) + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/sugar + name = "sugar packet" + desc = "Contains 5u of refined sugar." + icon_state = "packet_small_white" + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/sugar/Initialize() + . = ..() + reagents.add_reagent("sugar", 5) + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/jelly + name = "jelly packet" + desc = "Contains 10u of cherry jelly. Best used for spreading on crackers." + icon_state = "packet_medium" + volume = 10 + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/jelly/Initialize() + . = ..() + reagents.add_reagent("cherryjelly", 10) + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/honey + name = "honey packet" + desc = "Contains 10u of honey." + icon_state = "packet_medium" + volume = 10 + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/honey/Initialize() + . = ..() + reagents.add_reagent("honey", 10) + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/capsaicin + name = "hot sauce packet" + desc = "Contains 5u of hot sauce. Enjoy in moderation." + icon_state = "packet_small_red" + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/capsaicin/Initialize() + . = ..() + reagents.add_reagent("capsaicin", 5) + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/ketchup + name = "ketchup packet" + desc = "Contains 5u of ketchup." + icon_state = "packet_small_red" + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/ketchup/Initialize() + . = ..() + reagents.add_reagent("ketchup", 5) + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/mayo + name = "mayonnaise packet" + desc = "Contains 5u of mayonnaise." + icon_state = "packet_small_white" + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/mayo/Initialize() + . = ..() + reagents.add_reagent("mayo", 5) + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/soy + name = "soy sauce packet" + desc = "Contains 5u of soy sauce." + icon_state = "packet_small_black" + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/soy/Initialize() + . = ..() + reagents.add_reagent("soysauce", 5) + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/coffee + name = "coffee powder packet" + desc = "Contains 5u of coffee powder. Mix with 25u of water and heat." + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/coffee/Initialize() + . = ..() + reagents.add_reagent("coffeepowder", 5) + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/tea + name = "tea powder packet" + desc = "Contains 5u of black tea powder. Mix with 25u of water and heat." + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/tea/Initialize() + . = ..() + reagents.add_reagent("tea", 5) + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/cocoa + name = "cocoa powder packet" + desc = "Contains 5u of cocoa powder. Mix with 25u of water and heat." + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/cocoa/Initialize() + . = ..() + reagents.add_reagent("coco", 5) + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/grape + name = "grape juice powder packet" + desc = "Contains 5u of powdered grape juice. Mix with 15u of water." + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/grape/Initialize() + . = ..() + reagents.add_reagent("instantgrape", 5) + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/orange + name = "orange juice powder packet" + desc = "Contains 5u of powdered orange juice. Mix with 15u of water." + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/orange/Initialize() + . = ..() + reagents.add_reagent("instantorange", 5) + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/watermelon + name = "watermelon juice powder packet" + desc = "Contains 5u of powdered watermelon juice. Mix with 15u of water." + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/watermelon/Initialize() + . = ..() + reagents.add_reagent("instantwatermelon", 5) + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/apple + name = "apple juice powder packet" + desc = "Contains 5u of powdered apple juice. Mix with 15u of water." + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/apple/Initialize() + . = ..() + reagents.add_reagent("instantapple", 5) + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/protein + name = "protein powder packet" + desc = "Contains 10u of powdered protein. Mix with 20u of water." + icon_state = "packet_medium" + volume = 10 + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/protein/Initialize() + . = ..() + reagents.add_reagent("protein", 10) + +/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon + name = "crayon powder packet" + desc = "Contains 10u of powdered crayon. Mix with 30u of water." + volume = 10 +/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/generic/Initialize() + . = ..() + reagents.add_reagent("crayon_dust", 10) +/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/red/Initialize() + . = ..() + reagents.add_reagent("crayon_dust_red", 10) +/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/orange/Initialize() + . = ..() + reagents.add_reagent("crayon_dust_orange", 10) +/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/yellow/Initialize() + . = ..() + reagents.add_reagent("crayon_dust_yellow", 10) +/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/green/Initialize() + . = ..() + reagents.add_reagent("crayon_dust_green", 10) +/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/blue/Initialize() + . = ..() + reagents.add_reagent("crayon_dust_blue", 10) +/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/purple/Initialize() + . = ..() + reagents.add_reagent("crayon_dust_purple", 10) +/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/grey/Initialize() + . = ..() + reagents.add_reagent("crayon_dust_grey", 10) +/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/brown/Initialize() + . = ..() + reagents.add_reagent("crayon_dust_brown", 10) + +//End of MRE stuff. + /obj/item/weapon/reagent_containers/food/condiment/flour name = "flour sack" desc = "A big bag of flour. Good for baking!" diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm index fc37fb2064..379a151051 100644 --- a/code/modules/food/food/snacks.dm +++ b/code/modules/food/food/snacks.dm @@ -21,12 +21,7 @@ /obj/item/weapon/reagent_containers/food/snacks/Initialize() . = ..() if(nutriment_amt) - reagents.add_reagent("nutriment",nutriment_amt,nutriment_desc) - -/obj/item/weapon/reagent_containers/food/snacks/Initialize() - . = ..() - if(nutriment_amt) - reagents.add_reagent("nutriment", nutriment_amt) + reagents.add_reagent("nutriment",(nutriment_amt*2),nutriment_desc) //Placeholder for effect that trigger on eating that aren't tied to reagents. /obj/item/weapon/reagent_containers/food/snacks/proc/On_Consume(var/mob/M) @@ -3087,6 +3082,7 @@ filling_color = "#F5DEB8" center_of_mass = list("x"=16, "y"=6) nutriment_desc = list("salt" = 1, "cracker" = 2) + w_class = ITEMSIZE_TINY nutriment_amt = 1 @@ -3737,6 +3733,33 @@ reagents.add_reagent("iron", 3) bitesize = 4 +/obj/item/weapon/reagent_containers/food/snacks/liquidprotein + name = "\improper LiquidProtein Ration" + desc = "A variant of the liquidfood ration, designed for obligate carnivore species. Only barely more appealing than regular liquidfood. Should this be crunchy?" + icon_state = "liquidprotein" + trash = /obj/item/trash/liquidprotein + filling_color = "#A8A8A8" + survivalfood = TRUE + center_of_mass = list("x"=16, "y"=15) + +/obj/item/weapon/reagent_containers/food/snacks/liquidprotein/Initialize() + ..() + reagents.add_reagent("protein", 30) + reagents.add_reagent("iron", 3) + bitesize = 4 + +/obj/item/weapon/reagent_containers/food/snacks/meatcube + name = "cubed meat" + desc = "Fried, salted lean meat compressed into a cube. Not very appetizing." + icon_state = "meatcube" + filling_color = "#7a3d11" + center_of_mass = list("x"=16, "y"=16) + +/obj/item/weapon/reagent_containers/food/snacks/meatcube/Initialize() + . = ..() + reagents.add_reagent("protein", 15) + bitesize = 3 + /obj/item/weapon/reagent_containers/food/snacks/tastybread name = "bread tube" desc = "Bread in a tube. Chewy...and surprisingly tasty." diff --git a/code/modules/food/food/snacks_vr.dm b/code/modules/food/food/snacks_vr.dm index 8106c52dfd..a283a6bafe 100644 --- a/code/modules/food/food/snacks_vr.dm +++ b/code/modules/food/food/snacks_vr.dm @@ -607,19 +607,3 @@ /obj/item/pizzabox/meat/Initialize() pizza = new /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatcargo(src) - -/obj/item/weapon/reagent_containers/food/snacks/liquidprotein - name = "\improper LiquidProtein Ration" - desc = "A variant of the liquidfood ration, designed for obligate carnivore species. Only barely more appealing than regular liquidfood. Should this be crunchy?" - icon = 'icons/obj/food_vr.dmi' - icon_state = "liquidprotein" - trash = /obj/item/trash/liquidprotein - filling_color = "#A8A8A8" - survivalfood = TRUE - center_of_mass = list("x"=16, "y"=15) - -/obj/item/weapon/reagent_containers/food/snacks/liquidprotein/Initialize() - ..() - reagents.add_reagent("protein", 20) - reagents.add_reagent("iron", 3) - bitesize = 4 diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm index 22b4b2e6c6..c1c7ebedaf 100644 --- a/code/modules/holodeck/HolodeckObjects.dm +++ b/code/modules/holodeck/HolodeckObjects.dm @@ -126,6 +126,38 @@ slot_r_hand_str = 'icons/mob/items/righthand_gloves.dmi', ) item_state = "boxing" + special_attack_type = /datum/unarmed_attack/holopugilism + +datum/unarmed_attack/holopugilism + sparring_variant_type = /datum/unarmed_attack/holopugilism + +datum/unarmed_attack/holopugilism/unarmed_override(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/zone) + user.do_attack_animation(src) + var/damage = rand(0, 9) + if(!damage) + playsound(target.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) + target.visible_message("[user] has attempted to punch [target]!") + return TRUE + var/obj/item/organ/external/affecting = target.get_organ(ran_zone(user.zone_sel.selecting)) + var/armor_block = target.run_armor_check(affecting, "melee") + var/armor_soak = target.get_armor_soak(affecting, "melee") + + if(HULK in user.mutations) + damage += 5 + + playsound(target.loc, "punch", 25, 1, -1) + + target.visible_message("[user] has punched [target]!") + + if(armor_soak >= damage) + return TRUE + + target.apply_damage(damage, HALLOSS, affecting, armor_block, armor_soak) + if(damage >= 9) + target.visible_message("[user] has weakened [target]!") + target.apply_effect(4, WEAKEN, armor_block) + + return TRUE /obj/structure/window/reinforced/holowindow/attackby(obj/item/W as obj, mob/user as mob) if(!istype(W)) @@ -262,8 +294,8 @@ spark_system.set_up(5, 0, user.loc) spark_system.start() playsound(user.loc, 'sound/weapons/blade1.ogg', 50, 1) - return 1 - return 0 + return TRUE + return FALSE /obj/item/weapon/holo/esword/New() item_color = pick("red","blue","green","purple") diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index b616d456b6..c362054cfa 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -438,7 +438,7 @@ var/list/name_to_material // Very rare alloy that is reflective, should be used sparingly. /material/durasteel name = "durasteel" - stack_type = /obj/item/stack/material/durasteel + stack_type = /obj/item/stack/material/durasteel/hull integrity = 600 melting_point = 7000 icon_base = "metal" @@ -460,6 +460,9 @@ var/list/name_to_material explosion_resistance = 90 reflectivity = 0.9 +/material/durasteel/hull/place_sheet(var/turf/target) //Deconstructed into normal durasteel sheets. + new /obj/item/stack/material/durasteel(target) + /material/plasteel/titanium name = MAT_TITANIUM stack_type = /obj/item/stack/material/titanium @@ -475,6 +478,9 @@ var/list/name_to_material icon_base = "hull" icon_reinf = "reinf_mesh" +/material/plasteel/titanium/hull/place_sheet(var/turf/target) //Deconstructed into normal titanium sheets. + new /obj/item/stack/material/titanium(target) + /material/glass name = "glass" stack_type = /obj/item/stack/material/glass diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 56abb25dd2..c771b53d6d 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -599,9 +599,9 @@ turf/simulated/mineral/floor/light_corner if(is_clean) X = new /obj/item/weapon/archaeological_find(src, new_item_type = F.find_type) else - X = new /obj/item/weapon/ore/strangerock(src, inside_item_type = F.find_type) + X = new /obj/item/weapon/strangerock(src, inside_item_type = F.find_type) geologic_data.UpdateNearbyArtifactInfo(src) - var/obj/item/weapon/ore/strangerock/SR = X + var/obj/item/weapon/strangerock/SR = X SR.geologic_data = geologic_data //some find types delete the /obj/item/weapon/archaeological_find and replace it with something else, this handles when that happens diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 3a26503f99..311e0976ca 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -8,6 +8,14 @@ return soft_type return src.default_attack // VOREStation Edit - End + if(src.gloves) + var/obj/item/clothing/gloves/G = src.gloves + if(istype(G) && G.special_attack && G.special_attack.is_usable(src, target, hit_zone)) + if(pulling_punches) + var/datum/unarmed_attack/soft_type = G.special_attack.get_sparring_variant() + if(soft_type) + return soft_type + return G.special_attack for(var/datum/unarmed_attack/u_attack in species.unarmed_attacks) if(u_attack.is_usable(src, target, hit_zone)) if(pulling_punches) @@ -47,41 +55,11 @@ H.do_attack_animation(src) playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) visible_message("[H] reaches for [src], but misses!") - return 0 + return FALSE if(H != src && check_shields(0, null, H, H.zone_sel.selecting, H.name)) H.do_attack_animation(src) - return 0 - - if(istype(H.gloves, /obj/item/clothing/gloves/boxing/hologlove)) - H.do_attack_animation(src) - var/damage = rand(0, 9) - if(lacertusol) - damage = rand(5, 12) - if(!damage) - playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - visible_message("[H] has attempted to punch [src]!") - return 0 - var/obj/item/organ/external/affecting = get_organ(ran_zone(H.zone_sel.selecting)) - var/armor_block = run_armor_check(affecting, "melee") - var/armor_soak = get_armor_soak(affecting, "melee") - - if(HULK in H.mutations) - damage += 5 - - playsound(loc, "punch", 25, 1, -1) - - visible_message("[H] has punched [src]!") - - if(armor_soak >= damage) - return - - apply_damage(damage, HALLOSS, affecting, armor_block, armor_soak) - if(damage >= 9) - visible_message("[H] has weakened [src]!") - apply_effect(4, WEAKEN, armor_block) - - return + return FALSE if(istype(M,/mob/living/carbon)) var/mob/living/carbon/C = M @@ -130,7 +108,7 @@ else if(!(M == src && apply_pressure(M, M.zone_sel.selecting))) help_shake_act(M) - return 1 + return TRUE if(I_GRAB) if(M == src || anchored) @@ -157,7 +135,8 @@ //VORESTATION EDIT visible_message("[M] has grabbed [src] [(M.zone_sel.selecting == BP_L_HAND || M.zone_sel.selecting == BP_R_HAND)? "by [(gender==FEMALE)? "her" : ((gender==MALE)? "his": "their")] hands": "passively"]!") //VORESTATION END END - return 1 + + return TRUE if(I_HURT) @@ -185,7 +164,7 @@ if(!affecting || affecting.is_stump()) M << "They are missing that limb!" - return 1 + return TRUE switch(src.a_intent) if(I_HELP) @@ -259,7 +238,10 @@ // See what attack they use var/datum/unarmed_attack/attack = H.get_unarmed_attack(src, hit_zone) if(!attack) - return 0 + return FALSE + + if(attack.unarmed_override(H, src, hit_zone)) + return FALSE H.do_attack_animation(src) if(!attack_message) @@ -272,7 +254,7 @@ add_attack_logs(H,src,"Melee attacked with fists (miss/block)") if(miss_type) - return 0 + return FALSE var/real_damage = rand_damage var/hit_dam_type = attack.damage_type @@ -282,7 +264,7 @@ var/obj/item/clothing/gloves/G = H.gloves real_damage += G.punch_force hit_dam_type = G.punch_damtype - if(H.pulling_punches) //SO IT IS DECREED: PULLING PUNCHES WILL PREVENT THE ACTUAL DAMAGE FROM RINGS AND KNUCKLES, BUT NOT THE ADDED PAIN + if(H.pulling_punches && !attack.sharp && !attack.edge) //SO IT IS DECREED: PULLING PUNCHES WILL PREVENT THE ACTUAL DAMAGE FROM RINGS AND KNUCKLES, BUT NOT THE ADDED PAIN, BUT YOU CAN'T "PULL" A KNIFE hit_dam_type = AGONY real_damage *= damage_multiplier rand_damage *= damage_multiplier @@ -373,7 +355,7 @@ var/armor_soak = get_armor_soak(affecting, armor_type, armor_pen) apply_damage(damage, BRUTE, affecting, armor_block, armor_soak, sharp = a_sharp, edge = a_edge) updatehealth() - return 1 + return TRUE //Used to attack a joint through grabbing /mob/living/carbon/human/proc/grab_joint(var/mob/living/user, var/def_zone) @@ -384,43 +366,43 @@ break if(!has_grab) - return 0 + return FALSE if(!def_zone) def_zone = user.zone_sel.selecting var/target_zone = check_zone(def_zone) if(!target_zone) - return 0 + return FALSE var/obj/item/organ/external/organ = get_organ(check_zone(target_zone)) if(!organ || organ.dislocated > 0 || organ.dislocated == -1) //don't use is_dislocated() here, that checks parent - return 0 + return FALSE user.visible_message("[user] begins to dislocate [src]'s [organ.joint]!") if(do_after(user, 100)) organ.dislocate(1) src.visible_message("[src]'s [organ.joint] [pick("gives way","caves in","crumbles","collapses")]!") - return 1 - return 0 + return TRUE + return FALSE //Breaks all grips and pulls that the mob currently has. /mob/living/carbon/human/proc/break_all_grabs(mob/living/carbon/user) - var/success = 0 + var/success = FALSE if(pulling) visible_message("[user] has broken [src]'s grip on [pulling]!") - success = 1 + success = TRUE stop_pulling() if(istype(l_hand, /obj/item/weapon/grab)) var/obj/item/weapon/grab/lgrab = l_hand if(lgrab.affecting) visible_message("[user] has broken [src]'s grip on [lgrab.affecting]!") - success = 1 + success = TRUE spawn(1) qdel(lgrab) if(istype(r_hand, /obj/item/weapon/grab)) var/obj/item/weapon/grab/rgrab = r_hand if(rgrab.affecting) visible_message("[user] has broken [src]'s grip on [rgrab.affecting]!") - success = 1 + success = TRUE spawn(1) qdel(rgrab) return success @@ -435,11 +417,11 @@ /mob/living/carbon/human/proc/apply_pressure(mob/living/user, var/target_zone) var/obj/item/organ/external/organ = get_organ(target_zone) if(!organ || !(organ.status & ORGAN_BLEEDING) || (organ.robotic >= ORGAN_ROBOT)) - return 0 + return FALSE if(organ.applied_pressure) user << "Someone is already applying pressure to [user == src? "your [organ.name]" : "[src]'s [organ.name]"]." - return 0 + return FALSE var/datum/gender/TU = gender_datums[user.get_visible_gender()] @@ -460,4 +442,4 @@ else user.visible_message("\The [user] stops applying pressure to [src]'s [organ.name]!", "You stop applying pressure to [src]'s [organ.name]!") - return 1 + return TRUE diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm index f3526983ef..43a5ae66f2 100644 --- a/code/modules/mob/living/carbon/human/unarmed_attack.dm +++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm @@ -25,18 +25,18 @@ var/global/list/sparring_attack_cache = list() /datum/unarmed_attack/proc/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) if(user.restrained()) - return 0 + return FALSE // Check if they have a functioning hand. var/obj/item/organ/external/E = user.organs_by_name["l_hand"] if(E && !E.is_stump()) - return 1 + return TRUE E = user.organs_by_name["r_hand"] if(E && !E.is_stump()) - return 1 + return TRUE - return 0 + return FALSE /datum/unarmed_attack/proc/get_unarmed_damage() return damage @@ -105,6 +105,9 @@ var/global/list/sparring_attack_cache = list() return user.visible_message("[user] attempts to press [TU.his] [eye_attack_text] into [target]'s eyes, but [TT.he] [TT.does]n't have any!") +/datum/unarmed_attack/proc/unarmed_override(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/zone) + return FALSE //return true if the unarmed override prevents further attacks + /datum/unarmed_attack/bite attack_verb = list("bit") attack_sound = 'sound/weapons/bite.ogg' @@ -121,7 +124,7 @@ var/global/list/sparring_attack_cache = list() return 0 if (user == target && (zone == BP_HEAD || zone == O_EYES || zone == O_MOUTH)) return 0 - return 1 + return TRUE /datum/unarmed_attack/punch attack_verb = list("punched") @@ -187,20 +190,20 @@ var/global/list/sparring_attack_cache = list() /datum/unarmed_attack/kick/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) if (user.legcuffed) - return 0 + return FALSE if(!(zone in list("l_leg", "r_leg", "l_foot", "r_foot", BP_GROIN))) - return 0 + return FALSE var/obj/item/organ/external/E = user.organs_by_name["l_foot"] if(E && !E.is_stump()) - return 1 + return TRUE E = user.organs_by_name["r_foot"] if(E && !E.is_stump()) - return 1 + return TRUE - return 0 + return FALSE /datum/unarmed_attack/kick/get_unarmed_damage(var/mob/living/carbon/human/user) var/obj/item/clothing/shoes = user.shoes @@ -231,23 +234,23 @@ var/global/list/sparring_attack_cache = list() /datum/unarmed_attack/stomp/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) if (user.legcuffed) - return 0 + return FALSE if(!istype(target)) - return 0 + return FALSE if (!user.lying && (target.lying || (zone in list("l_foot", "r_foot")))) if(target.grabbed_by == user && target.lying) - return 0 + return FALSE var/obj/item/organ/external/E = user.organs_by_name["l_foot"] if(E && !E.is_stump()) - return 1 + return TRUE E = user.organs_by_name["r_foot"] if(E && !E.is_stump()) - return 1 + return TRUE - return 0 + return FALSE /datum/unarmed_attack/stomp/get_unarmed_damage(var/mob/living/carbon/human/user) var/obj/item/clothing/shoes = user.shoes diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index ac2417a077..b6d4052a5f 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -35,7 +35,8 @@ "Fox" = "pai-fox", "Parrot" = "pai-parrot", "Rabbit" = "pai-rabbit", - "Bear" = "pai-bear" //VOREStation Edit + "Bear" = "pai-bear", //VOREStation Edit + "Fennec" = "pai-fen" // VOREStation Edit - Rykka ) var/global/list/possible_say_verbs = list( diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/giant_spider_vr.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/giant_spider_vr.dm index 2ff8c55598..4e86b1c68a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/giant_spider_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/giant_spider_vr.dm @@ -11,7 +11,7 @@ base_attack_cooldown = 10 projectilesound = 'sound/weapons/taser2.ogg' - projectiletype = /obj/item/projectile/ion/small + projectiletype = /obj/item/projectile/ion/pistol melee_damage_lower = 8 melee_damage_upper = 15 diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm index 70afdaf910..e1cb92ada3 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm @@ -112,4 +112,4 @@ /datum/say_list/mouse speak = list("Squeek!","SQUEEK!","Squeek?") emote_hear = list("squeeks","squeaks","squiks") - emote_see = list("runs in a circle", "shakes", "scritches at something") \ No newline at end of file + emote_see = list("runs in a circle", "shakes", "scritches at something") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse_vr.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse_vr.dm new file mode 100644 index 0000000000..4b4cdcade4 --- /dev/null +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse_vr.dm @@ -0,0 +1,18 @@ +/mob/living/simple_mob/animal/passive/mouse + no_vore = 1 //Mice can't eat others due to the amount of bugs caused by it. + vore_taste = "cheese" + + can_pull_size = ITEMSIZE_TINY // Rykka - Uncommented these. Not sure why they were commented out in the original Polaris files, maybe a mob rework mistake? + can_pull_mobs = MOB_PULL_NONE // Rykka - Uncommented these. Not sure why they were commented out in the original Polaris files, maybe a mob rework mistake? + + desc = "A small rodent, often seen hiding in maintenance areas and making a nuisance of itself. And stealing cheese, or annoying the chef. SQUEAK! <3" + +/mob/living/simple_mob/animal/passive/mouse/attack_hand(mob/living/hander) + if(hander.a_intent == I_HELP) //if lime intent + get_scooped(hander) //get scooped + +/obj/item/weapon/holder/mouse/attack_self(var/mob/U) + for(var/mob/living/simple_mob/M in src.contents) + if((I_HELP) && U.canClick()) //a little snowflakey, but makes it use the same cooldown as interacting with non-inventory objects + U.setClickCooldown(U.get_attack_speed()) //if there's a cleaner way in baycode, I'll change this + U.visible_message("[U] [M.response_help] \the [M].") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/fluffy_vr.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/fluffy_vr.dm index c821cf4a56..8507480f01 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/fluffy_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/fluffy_vr.dm @@ -18,6 +18,7 @@ see_in_dark = 5 mob_size = MOB_TINY makes_dirt = FALSE // No more dirt + mob_bump_flag = 0 response_help = "scritches" response_disarm = "bops" diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/worm.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/worm.dm index 4022198fdf..9fbb2926bb 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/worm.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/worm.dm @@ -411,7 +411,7 @@ /obj/random/bomb_supply = 7, /obj/random/contraband = 3, /obj/random/unidentified_medicine/old_medicine = 7, - /obj/item/weapon/ore/strangerock = 3, + /obj/item/weapon/strangerock = 3, /obj/item/weapon/ore/phoron = 7, /obj/random/handgun = 1, /obj/random/toolbox = 4, diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/viscerator.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/viscerator.dm index 4098d9ff9c..3d6d43e575 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/viscerator.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/viscerator.dm @@ -83,4 +83,6 @@ if(!.) if(isrobot(L)) // They ignore synths. return TRUE + if(istype(L, /mob/living/simple_mob/mechanical/ward/monitor/crew)) // Also ignore friendly monitor wards + return TRUE return L.assess_perp(src, FALSE, FALSE, TRUE, FALSE) <= 3 diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm b/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm new file mode 100644 index 0000000000..0aa1b700a6 --- /dev/null +++ b/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm @@ -0,0 +1,171 @@ +#define MORPH_COOLDOWN 50 + +/mob/living/simple_mob/vore/hostile/morph + name = "morph" + real_name = "morph" + desc = "A revolting, pulsating pile of flesh." + tt_desc = "morphus shapeshiftus" + icon = 'icons/mob/animal_vr.dmi' + icon_state = "morph" + icon_living = "morph" + icon_dead = "morph_dead" + movement_cooldown = 1 + status_flags = CANPUSH + pass_flags = PASSTABLE + mob_bump_flag = 0 + + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + + minbodytemp = 0 + maxHealth = 150 + health = 150 + melee_damage_lower = 20 + melee_damage_upper = 20 + see_in_dark = 8 + attacktext = "glomps" + attack_sound = 'sound/effects/blobattack.ogg' + + meat_amount = 2 + meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat + + showvoreprefs = 0 + vore_active = 1 + + var/morphed = FALSE + var/tooltip = TRUE + var/melee_damage_disguised = 0 + var/eat_while_disguised = FALSE + var/atom/movable/form = null + var/morph_time = 0 + var/our_size_multiplier = 1 + var/static/list/blacklist_typecache = typecacheof(list( + /obj/screen, + /obj/singularity, + /mob/living/simple_mob/vore/hostile/morph, + /obj/effect)) + +/mob/living/simple_mob/vore/hostile/morph/Initialize() + verbs += /mob/living/proc/ventcrawl + return ..() + +/mob/living/simple_mob/vore/hostile/morph/proc/allowed(atom/movable/A) + return !is_type_in_typecache(A, blacklist_typecache) && (isobj(A) || ismob(A)) + +/mob/living/simple_mob/vore/hostile/morph/examine(mob/user) + if(morphed) + form.examine(user) + if(get_dist(user,src)<=3) + to_chat(user, "It doesn't look quite right...") + else + ..() + return + +/mob/living/simple_mob/vore/hostile/morph/ShiftClickOn(atom/movable/A) + if(Adjacent(A)) + if(morph_time <= world.time && !stat) + if(A == src) + restore() + return + if(istype(A) && allowed(A)) + assume(A) + else + to_chat(src, "Your chameleon skin is still repairing itself!") + else + ..() + +/mob/living/simple_mob/vore/hostile/morph/proc/assume(atom/movable/target) + if(morphed) + to_chat(src, "You must restore to your original form first!") + return + morphed = TRUE + form = target + + visible_message("[src] suddenly twists and changes shape, becoming a copy of [target]!") + appearance = target.appearance + copy_overlays(target) + alpha = max(alpha, 150) //fucking chameleons + transform = initial(transform) + our_size_multiplier = size_multiplier + if(isobj(target)) + size_multiplier = 1 + icon_scale_x = target.icon_scale_x + icon_scale_y = target.icon_scale_y + update_transform() + else if(ismob(target)) + var/mob/living/M = target + resize(M.size_multiplier) + pixel_y = initial(pixel_y) + pixel_x = initial(pixel_x) + density = target.density + + //Morphed is weaker + melee_damage_lower = melee_damage_disguised + melee_damage_upper = melee_damage_disguised + movement_cooldown = 5 + + morph_time = world.time + MORPH_COOLDOWN + return + +/mob/living/simple_mob/vore/hostile/morph/proc/restore() + if(!morphed) + to_chat(src, "You're already in your normal form!") + return + morphed = FALSE + form = null + alpha = initial(alpha) + color = initial(color) + layer = initial(layer) + plane = initial(plane) + maptext = null + + visible_message("[src] suddenly collapses in on itself, dissolving into a pile of green flesh!") + name = initial(name) + desc = initial(desc) + icon = initial(icon) + icon_state = initial(icon_state) + size_multiplier = 0 + resize(our_size_multiplier) + overlays.Cut() + density = initial(density) + + //Baseline stats + melee_damage_lower = initial(melee_damage_lower) + melee_damage_upper = initial(melee_damage_upper) + movement_cooldown = initial(movement_cooldown) + + morph_time = world.time + MORPH_COOLDOWN + +/mob/living/simple_mob/vore/hostile/morph/death(gibbed) + if(morphed) + visible_message("[src] twists and dissolves into a pile of green flesh!") + restore() + ..() + +/mob/living/simple_mob/vore/hostile/morph/will_show_tooltip() + return (!morphed) + +/mob/living/simple_mob/vore/hostile/morph/resize(var/new_size, var/animate = TRUE) + if(morphed && !ismob(form)) + return + return ..() + +/mob/living/simple_mob/vore/hostile/morph/update_icons() + if(morphed) + return + return ..() + +/mob/living/simple_mob/vore/hostile/morph/update_transform() + if(morphed) + var/matrix/M = matrix() + M.Scale(icon_scale_x, icon_scale_y) + M.Turn(icon_rotation) + src.transform = M + else + ..() diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 441ee77234..749a88dba6 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -114,7 +114,7 @@ if(href_list["observe"]) - if(alert(src,"Are you sure you wish to observe? You will have to wait 5 minute before being able to respawn!","Player Setup","Yes","No") == "Yes") //Vorestation edit + if(alert(src,"Are you sure you wish to observe? You will have to wait 60 seconds before being able to respawn!","Player Setup","Yes","No") == "Yes") //Vorestation edit - Rykka corrected to 60 seconds to match current spawn time if(!client) return 1 //Make a new mannequin quickly, and allow the observer to take the appearance diff --git a/code/modules/projectiles/guns/energy/special_vr.dm b/code/modules/projectiles/guns/energy/special_vr.dm index e1cfcaf5c9..73e878eed6 100644 --- a/code/modules/projectiles/guns/energy/special_vr.dm +++ b/code/modules/projectiles/guns/energy/special_vr.dm @@ -2,4 +2,26 @@ projectile_type = /obj/item/projectile/ion/pistol // still packs a punch but no AoE /obj/item/weapon/gun/energy/ionrifle/weak - projectile_type = /obj/item/projectile/ion/small \ No newline at end of file + projectile_type = /obj/item/projectile/ion/small + +/obj/item/weapon/gun/energy/medigun //Adminspawn/ERT etc + name = "directed restoration system" + desc = "The BL-3 'Phoenix' is an adaptation on the ML-3 'Medbeam' design that channels the power of the beam into a single healing laser. It is highly energy-inefficient, but its medical power cannot be denied." + force = 5 + icon_state = "medbeam" + item_state = "medbeam" + icon = 'icons/obj/gun_vr.dmi' + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_guns_vr.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_guns_vr.dmi', + ) + slot_flags = SLOT_BELT + accuracy = 100 + fire_delay = 12 + fire_sound = 'sound/weapons/eluger.ogg' + + projectile_type = /obj/item/projectile/beam/medigun + + accept_cell_type = /obj/item/weapon/cell + cell_type = /obj/item/weapon/cell/high + charge_cost = 2500 \ No newline at end of file diff --git a/code/modules/projectiles/projectile/beams_vr.dm b/code/modules/projectiles/projectile/beams_vr.dm index b6ec5cbe0b..8930260e9e 100644 --- a/code/modules/projectiles/projectile/beams_vr.dm +++ b/code/modules/projectiles/projectile/beams_vr.dm @@ -41,3 +41,37 @@ muzzle_type = /obj/effect/projectile/muzzle/laser_blue tracer_type = /obj/effect/projectile/tracer/laser_blue impact_type = /obj/effect/projectile/impact/laser_blue + +/obj/item/projectile/beam/medigun + name = "healing beam" + icon_state = "healbeam" + damage = 0 //stops it damaging walls + nodamage = TRUE + no_attack_log = TRUE + damage_type = BURN + check_armour = "laser" + light_color = "#80F5FF" + + combustion = FALSE + + muzzle_type = /obj/effect/projectile/muzzle/medigun + tracer_type = /obj/effect/projectile/tracer/medigun + impact_type = /obj/effect/projectile/impact/medigun + +/obj/item/projectile/beam/medigun/on_hit(var/atom/target, var/blocked = 0) + if(istype(target, /mob/living/carbon/human)) + var/mob/living/carbon/human/M = target + if(M.health < M.maxHealth) + var/obj/effect/overlay/pulse = new /obj/effect/overlay(get_turf(M)) + pulse.icon = 'icons/effects/effects.dmi' + pulse.icon_state = "heal" + pulse.name = "heal" + pulse.anchored = 1 + spawn(20) + qdel(pulse) + to_chat(target, "As the beam strikes you, your injuries close up!") + M.adjustBruteLoss(-15) + M.adjustFireLoss(-15) + M.adjustToxLoss(-5) + M.adjustOxyLoss(-5) + return 1 \ No newline at end of file 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 0da87f2d0c..48afe19b7e 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -148,6 +148,24 @@ if(!istype(T, /turf/space)) new /obj/effect/decal/cleanable/flour(T) +/datum/reagent/nutriment/coffee + name = "Coffee Powder" + id = "coffeepowder" + description = "A bitter powder made by grinding coffee beans." + taste_description = "bitterness" + taste_mult = 1.3 + nutriment_factor = 1 + color = "#482000" + +/datum/reagent/nutriment/tea + name = "Tea Powder" + id = "teapowder" + description = "A dark, tart powder made from black tea leaves." + taste_description = "tartness" + taste_mult = 1.3 + nutriment_factor = 1 + color = "#101000" + /datum/reagent/nutriment/coco name = "Coco Powder" id = "coco" @@ -158,6 +176,41 @@ nutriment_factor = 5 color = "#302000" +/datum/reagent/nutriment/instantjuice + name = "Juice Powder" + id = "instantjuice" + description = "Dehydrated, powdered juice of some kind." + taste_mult = 1.3 + nutriment_factor = 1 + +/datum/reagent/nutriment/instantjuice/grape + name = "Grape Juice Powder" + id = "instantgrape" + description = "Dehydrated, powdered grape juice." + taste_description = "dry grapes" + color = "#863333" + +/datum/reagent/nutriment/instantjuice/orange + name = "Orange Juice Powder" + id = "instantorange" + description = "Dehydrated, powdered orange juice." + taste_description = "dry oranges" + color = "#e78108" + +/datum/reagent/nutriment/instantjuice/watermelon + name = "Watermelon Juice Powder" + id = "instantwatermelon" + description = "Dehydrated, powdered watermelon juice." + taste_description = "dry sweet watermelon" + color = "#b83333" + +/datum/reagent/nutriment/instantjuice/apple + name = "Apple Juice Powder" + id = "instantapple" + description = "Dehydrated, powdered apple juice." + taste_description = "dry sweet apples" + color = "#c07c40" + /datum/reagent/nutriment/soysauce name = "Soysauce" id = "soysauce" diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index a903454801..01de315c2d 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -1200,6 +1200,20 @@ new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location) return +/datum/chemical_reaction/drinks/coffee + name = "Coffee" + id = "coffee" + result = "coffee" + required_reagents = list("water" = 5, "coffeepowder" = 1) + result_amount = 5 + +/datum/chemical_reaction/drinks/tea + name = "Black tea" + id = "tea" + result = "tea" + required_reagents = list("water" = 5, "teapowder" = 1) + result_amount = 5 + /datum/chemical_reaction/drinks/hot_coco name = "Hot Coco" id = "hot_coco" @@ -1214,6 +1228,34 @@ required_reagents = list("soymilk" = 4, "sacid" = 1) result_amount = 5 +/datum/chemical_reaction/drinks/grapejuice + name = "Grape Juice" + id = "grapejuice" + result = "grapejuice" + required_reagents = list("water" = 3, "instantgrape" = 1) + result_amount = 3 + +/datum/chemical_reaction/drinks/orangejuice + name = "Orange Juice" + id = "orangejuice" + result = "orangejuice" + required_reagents = list("water" = 3, "instantorange" = 1) + result_amount = 3 + +/datum/chemical_reaction/drinks/watermelonjuice + name = "Watermelon Juice" + id = "watermelonjuice" + result = "watermelonjuice" + required_reagents = list("water" = 3, "instantwatermelon" = 1) + result_amount = 3 + +/datum/chemical_reaction/drinks/applejuice + name = "Apple Juice" + id = "applejuice" + result = "applejuice" + required_reagents = list("water" = 3, "instantapple" = 1) + result_amount = 3 + /datum/chemical_reaction/food/ketchup name = "Ketchup" id = "ketchup" diff --git a/code/modules/vore/fluffstuff/custom_guns_vr.dm b/code/modules/vore/fluffstuff/custom_guns_vr.dm index 7a0b26d176..f99910a123 100644 --- a/code/modules/vore/fluffstuff/custom_guns_vr.dm +++ b/code/modules/vore/fluffstuff/custom_guns_vr.dm @@ -730,7 +730,7 @@ icon_state = "r357" ammo_type = /obj/item/ammo_casing/a44/rubber -//Expedition pistol +//Expedition Frontier Phaser /obj/item/weapon/gun/energy/frontier name = "frontier phaser" desc = "An extraordinarily rugged laser weapon, built to last and requiring effectively no maintenance. Includes a built-in crank charger for recharging away from civilization." @@ -746,6 +746,7 @@ unacidable = 1 var/recharging = 0 + var/phase_power = 75 projectile_type = /obj/item/projectile/beam firemodes = list( @@ -764,7 +765,7 @@ if(!do_after(user, 10, src)) break playsound(get_turf(src),'sound/items/change_drill.ogg',25,1) - if(power_supply.give(60) < 60) + if(power_supply.give(phase_power) < phase_power) break recharging = 0 @@ -835,13 +836,14 @@ return ..() -//Expeditionary Holdout Phaser +//Expeditionary Holdout Phaser Pistol /obj/item/weapon/gun/energy/frontier/locked/holdout name = "holdout frontier phaser" desc = "An minaturized weapon designed for the purpose of expeditionary support to defend themselves on the field. Includes a built-in crank charger for recharging away from civilization. This one has a safety interlock that prevents firing while in proximity to the facility." icon = 'icons/obj/gun_vr.dmi' icon_state = "holdoutkill" item_state = null + phase_power = 100 w_class = ITEMSIZE_SMALL charge_cost = 600 diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index da0133d719..2f00fe479a 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -1243,7 +1243,8 @@ w_class = ITEMSIZE_SMALL origin_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 5, TECH_ILLEGAL = 7) - var/obj/item/weapon/cell/device/weapon/power_source + var/cell_type = /obj/item/weapon/cell/device/weapon + var/obj/item/weapon/cell/power_source var/charge_cost = 800 // cell/device/weapon has 2400 var/list/beacons = list() @@ -1258,7 +1259,10 @@ /obj/item/device/perfect_tele/New() ..() flags |= NOBLUDGEON - power_source = new (src) + if(cell_type) + power_source = new cell_type(src) + else + power_source = new /obj/item/weapon/cell/device(src) spk = new(src) spk.set_up(5, 0, src) spk.attach(src) @@ -1275,7 +1279,7 @@ /obj/item/device/perfect_tele/update_icon() if(!power_source) icon_state = "[initial(icon_state)]_o" - else if(ready && power_source.check_charge(charge_cost)) + else if(ready && (power_source.check_charge(charge_cost) || power_source.fully_charged())) icon_state = "[initial(icon_state)]" else icon_state = "[initial(icon_state)]_w" @@ -1337,7 +1341,7 @@ return /obj/item/device/perfect_tele/attackby(obj/W, mob/user) - if(istype(W,/obj/item/weapon/cell/device/weapon) && !power_source) + if(istype(W,cell_type) && !power_source) power_source = W power_source.update_icon() //Why doesn't a cell do this already? :| user.unEquip(power_source) @@ -1366,7 +1370,7 @@ return FALSE //Check for charge - if(!power_source.check_charge(charge_cost)) + if((!power_source.check_charge(charge_cost)) && (!power_source.fully_charged())) to_chat(user,"\The [src] does not have enough power left!") return FALSE @@ -1397,10 +1401,13 @@ //No, you can't port to or from away missions. Stupidly complicated check. var/turf/uT = get_turf(user) var/turf/dT = get_turf(destination) + var/list/dat = list() + dat["z_level_detection"] = using_map.get_map_levels(uT.z) + if(!uT || !dT) return FALSE - if( (uT.z != dT.z) && ( (uT.z > max_default_z_level() ) || (dT.z > max_default_z_level()) ) ) + if( (uT.z != dT.z) && (!(dT.z in dat["z_level_detection"])) ) to_chat(user,"\The [src] can't teleport you that far!") return FALSE @@ -1561,14 +1568,17 @@ desc = "A more limited translocator with a single beacon, useful for some things, like setting the mining department on fire accidentally. Legal for use in the pursuit of NanoTrasen interests, namely mining and exploration." icon_state = "minitrans" beacons_left = 1 //Just one - charge_cost = 2400 //One per + cell_type = /obj/item/weapon/cell/device + origin_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 5) +/* /obj/item/device/perfect_tele/one_beacon/teleport_checks(mob/living/target,mob/living/user) var/turf/T = get_turf(destination) if(T && user.z != T.z) to_chat(user,"\The [src] is too far away from the beacon. Try getting closer first!") return FALSE return ..() +*/ //InterroLouis: Ruda Lizden /obj/item/clothing/accessory/badge/holo/detective/ruda @@ -2007,7 +2017,7 @@ /obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask/fluff/viktor/Initialize() ..() reagents.add_reagent("pwine", 60) - + //RadiantAurora: Tiemli Kroto /obj/item/clothing/glasses/welding/tiemgogs name = "custom-fitted welding goggles" diff --git a/code/modules/vore/fluffstuff/guns/nsfw.dm b/code/modules/vore/fluffstuff/guns/nsfw.dm index 48e7f889f8..514fee5014 100644 --- a/code/modules/vore/fluffstuff/guns/nsfw.dm +++ b/code/modules/vore/fluffstuff/guns/nsfw.dm @@ -1,15 +1,11 @@ // -------------- NSFW ------------- -/obj/item/weapon/gun/projectile/nsfw +/obj/item/weapon/gun/projectile/nsfw //this one can load both medical and security cells! for ERT/admin use. name = "cell-loaded revolver" - desc = "Variety is the spice of life! The KHI-102b 'Nanotech Selectable-Fire Weapon', or NSFW for short, is an unholy hybrid of an ammo-driven \ - energy weapon that allows the user to mix and match their own fire modes. Up to three combinations of \ + desc = "Variety is the spice of life! This weapon is a hybrid of the KHI-102b 'Nanotech Selectable-Fire Weapon' and the Vey-Med ML-3 'Medigun', dubbed the 'NSFW-ML3M'. \ + It can fire both harmful and healing cells with an internal nanite fabricator and energy weapon cell loader. Up to three combinations of \ energy beams can be configured at once. Ammo not included." catalogue_data = list(/datum/category_item/catalogue/information/organization/khi) - description_info = "This gun is an energy weapon that uses interchangable microbatteries in a magazine. Each battery is a different beam type, and up to three can be loaded in the magazine. Each battery usually provides four discharges of that beam type, and multiple from the same type may be loaded to increase the number of shots for that type." - description_fluff = "The Kitsuhana 'Nanotech Selectable Fire Weapon' allows one to customize their loadout in the field, or before deploying, to achieve various results in a weapon they are already familiar with wielding." - description_antag = "" - icon = 'icons/vore/custom_guns_vr.dmi' icon_state = "nsfw" @@ -142,14 +138,44 @@ charge_bar.color = batt_color add_overlay(charge_bar) +/obj/item/weapon/gun/projectile/nsfw/combat + name = "cell-loaded revolver" + desc = "Variety is the spice of life! The KHI-102b 'Nanotech Selectable-Fire Weapon', or NSFW for short, is an unholy hybrid of an ammo-driven \ + energy weapon that allows the user to mix and match their own fire modes. Up to three combinations of \ + energy beams can be configured at once. Ammo not included." + catalogue_data = list(/datum/category_item/catalogue/information/organization/khi) + + description_info = "This gun is an energy weapon that uses interchangable microbatteries in a magazine. Each battery is a different beam type, and up to three can be loaded in the magazine. Each battery usually provides four discharges of that beam type, and multiple from the same type may be loaded to increase the number of shots for that type." + description_fluff = "The Kitsuhana 'Nanotech Selectable Fire Weapon' allows one to customize their loadout in the field, or before deploying, to achieve various results in a weapon they are already familiar with wielding." + description_antag = "" + allowed_magazines = list(/obj/item/ammo_magazine/nsfw_mag/combat) + + +/obj/item/weapon/gun/projectile/nsfw/medical + name = "\improper ML-3 \'Medigun\'" + desc = "The ML-3 'Medigun', or ML3M for short, is a powerful cell-based ranged healing device based on the KHI-102b NSFW. \ + It uses an internal nanite fabricator, powered and controlled by discrete cells, to deliver a variety of effects at range. Up to three combinations of \ + healing beams can be configured at once. Ammo not included." + catalogue_data = list(/datum/category_item/catalogue/information/organization/vey_med) + + icon_state = "ml3m" + description_info = "This is a ranged healing device that uses interchangable nanite discharge cells in a magazine. Each cell is a different healing beam type, and up to three can be loaded in the magazine. Each battery usually provides four discharges of that beam type, and multiple from the same type may be loaded to increase the number of shots for that type." + description_fluff = "The Vey-Med ML-3 'Medigun' allows one to customize their loadout in the field, or before deploying, to allow emergency response personnel to deliver a variety of ranged healing options." + description_antag = "" + allowed_magazines = list(/obj/item/ammo_magazine/nsfw_mag/medical) + +/obj/item/weapon/gun/projectile/nsfw/medical/cmo + name = "\improper Advanced ML-3 \'Medigun\'" + desc = "This is a variation on the ML-3 'Medigun', a powerful cell-based ranged healing device based on the KHI-102b NSFW. \ + It has an extended sight for increased accuracy, and is capable of holding large magazines. Ammo not included." + + icon_state = "ml3m_cmo" + + // The Magazine // /obj/item/ammo_magazine/nsfw_mag name = "microbattery magazine" - desc = "A microbattery holder for the \'NSFW\'" - catalogue_data = list(/datum/category_item/catalogue/information/organization/khi) - - description_info = "This magazine holds NSFW microbatteries to power the NSFW handgun. Up to three can be loaded at once, and each provides four shots of their respective energy type. Loading multiple of the same type will provide additional shots of that type. The batteries can be recharged in a normal recharger." - + desc = "A microbattery holder for a cell-based variable weapon." icon = 'icons/obj/ammo_vr.dmi' icon_state = "nsfw_mag" caliber = "nsfw" @@ -157,6 +183,9 @@ ammo_type = /obj/item/ammo_casing/nsfw_batt initial_ammo = 0 max_ammo = 3 + var/x_offset = 5 //for update_icon() shenanigans- moved here so it can be adjusted for bigger mags + var/capname = "nsfw_mag" //as above + var/chargename = "nsfw_mag" //as above mag_type = MAGAZINE var/list/modes = list() @@ -166,24 +195,45 @@ if(!stored_ammo.len) return //Why bother - var/x_offset = 5 var/current = 0 for(var/B in stored_ammo) var/obj/item/ammo_casing/nsfw_batt/batt = B - var/image/cap = image(icon, icon_state = "[initial(icon_state)]_cap") + var/image/cap = image(icon, icon_state = "[capname]_cap") cap.color = batt.type_color cap.pixel_x = current * x_offset //Caps don't need a pixel_y offset add_overlay(cap) if(batt.shots_left) var/ratio = CEILING(((batt.shots_left / initial(batt.shots_left)) * 4), 1) //4 is how many lights we have a sprite for - var/image/charge = image(icon, icon_state = "[initial(icon_state)]_charge-[ratio]") + var/image/charge = image(icon, icon_state = "[chargename]_charge-[ratio]") charge.color = "#29EAF4" //Could use battery color but eh. charge.pixel_x = current * x_offset add_overlay(charge) current++ //Increment for offsets +/obj/item/ammo_magazine/nsfw_mag/combat //security + name = "microbattery magazine" + desc = "A microbattery holder for the \'NSFW\'" + catalogue_data = list(/datum/category_item/catalogue/information/organization/khi) + description_info = "This magazine holds NSFW microbatteries to power the NSFW handgun. Up to three can be loaded at once, and each provides four shots of their respective energy type. Loading multiple of the same type will provide additional shots of that type. The batteries can be recharged in a normal recharger." + ammo_type = /obj/item/ammo_casing/nsfw_batt/combat + +/obj/item/ammo_magazine/nsfw_mag/medical //medical + name = "nanite magazine" + desc = "A nanite fabrication magazine for the \'ML-3/M\'" + catalogue_data = list(/datum/category_item/catalogue/information/organization/vey_med) + description_info = "This magazine holds self-charging nanite fabricators to power the ML-3 'Medigun'. Up to three can be loaded at once, and each provides four shots of their respective healing type. Loading multiple of the same type will provide additional shots of that type. The batteries can be recharged in a normal recharger." + ammo_type = /obj/item/ammo_casing/nsfw_batt/medical + icon_state = "ml3m_mag" + +/obj/item/ammo_magazine/nsfw_mag/medical/advanced + name = "advanced nanite magazine" + desc = "A nanite discharge cell for the \'ML-3/M\'. This one is a more advanced version which can hold six individual nanite discharge cells." + max_ammo = 6 + x_offset = 3 + icon_state = "ml3m_mag_extended" + // The Casing // /obj/item/ammo_casing/nsfw_batt name = "\'NSFW\' microbattery - UNKNOWN" @@ -194,10 +244,10 @@ slot_flags = SLOT_BELT | SLOT_EARS throwforce = 1 w_class = ITEMSIZE_TINY + var/shots_left = 4 leaves_residue = 0 caliber = "nsfw" - var/shots_left = 4 var/type_color = null var/type_name = null projectile_type = /obj/item/projectile/beam @@ -219,31 +269,38 @@ shots_left-- // Specific batteries // -/obj/item/ammo_casing/nsfw_batt/lethal +// Security (Combat) // + +/obj/item/ammo_casing/nsfw_batt/combat + name = "\'NSFW\' microbattery - UNKNOWN" + desc = "A miniature battery for an energy weapon." + catalogue_data = list(/datum/category_item/catalogue/information/organization/khi) + +/obj/item/ammo_casing/nsfw_batt/combat/lethal name = "\'NSFW\' microbattery - LETHAL" type_color = "#bf3d3d" type_name = "LETHAL" projectile_type = /obj/item/projectile/beam -/obj/item/ammo_casing/nsfw_batt/stun +/obj/item/ammo_casing/nsfw_batt/combat/stun name = "\'NSFW\' microbattery - STUN" type_color = "#0f81bc" type_name = "STUN" projectile_type = /obj/item/projectile/beam/stun/blue -/obj/item/ammo_casing/nsfw_batt/net +/obj/item/ammo_casing/nsfw_batt/combat/net name = "\'NSFW\' microbattery - NET" type_color = "#43f136" type_name = "NET" projectile_type = /obj/item/projectile/beam/energy_net -/obj/item/ammo_casing/nsfw_batt/xray +/obj/item/ammo_casing/nsfw_batt/combat/xray name = "\'NSFW\' microbattery - XRAY" type_color = "#32c025" type_name = "XRAY" projectile_type = /obj/item/projectile/beam/xray -/obj/item/ammo_casing/nsfw_batt/shotstun +/obj/item/ammo_casing/nsfw_batt/combat/shotstun name = "\'NSFW\' microbattery - SCATTERSTUN" type_color = "#88ffff" type_name = "SCATTERSTUN" @@ -261,13 +318,13 @@ sharp = 0 check_armour = "melee" -/obj/item/ammo_casing/nsfw_batt/ion +/obj/item/ammo_casing/nsfw_batt/combat/ion name = "\'NSFW\' microbattery - ION" type_color = "#d084d6" type_name = "ION" projectile_type = /obj/item/projectile/ion/small -/obj/item/ammo_casing/nsfw_batt/stripper +/obj/item/ammo_casing/nsfw_batt/combat/stripper name = "\'NSFW\' microbattery - STRIPPER" type_color = "#fc8d0f" type_name = "STRIPPER" @@ -297,7 +354,7 @@ //Hats can stay! Most other things fall off with removing these. ..() -/obj/item/ammo_casing/nsfw_batt/final +/obj/item/ammo_casing/nsfw_batt/combat/final name = "\'NSFW\' microbattery - FINAL OPTION" type_color = "#fcfc0f" type_name = "FINAL OPTION" //Doesn't look good in yellow in chat @@ -327,45 +384,366 @@ L.gib() ..() -/* -/obj/item/ammo_casing/nsfw_batt/shrink - name = "\'NSFW\' microbattery - SHRINK" - type_color = "#910ffc" - type_name = "SHRINK" - projectile_type = /obj/item/projectile/beam/shrinklaser -/obj/item/ammo_casing/nsfw_batt/grow - name = "\'NSFW\' microbattery - GROW" - type_color = "#fc0fdc" - type_name = "GROW" - projectile_type = /obj/item/projectile/beam/growlaser -*/ /obj/item/weapon/storage/secure/briefcase/nsfw_pack name = "\improper KHI-102b \'NSFW\' gun kit" desc = "A storage case for a multi-purpose handgun. Variety hour!" + w_class = ITEMSIZE_NORMAL max_w_class = ITEMSIZE_NORMAL /obj/item/weapon/storage/secure/briefcase/nsfw_pack/New() ..() - new /obj/item/weapon/gun/projectile/nsfw(src) - new /obj/item/ammo_magazine/nsfw_mag(src) - for(var/path in subtypesof(/obj/item/ammo_casing/nsfw_batt)) + new /obj/item/weapon/gun/projectile/nsfw/combat(src) + new /obj/item/ammo_magazine/nsfw_mag/combat(src) + for(var/path in subtypesof(/obj/item/ammo_casing/nsfw_batt/combat)) new path(src) /obj/item/weapon/storage/secure/briefcase/nsfw_pack_hos name = "\improper KHI-102b \'NSFW\' gun kit" desc = "A storage case for a multi-purpose handgun. Variety hour!" + w_class = ITEMSIZE_NORMAL max_w_class = ITEMSIZE_NORMAL /obj/item/weapon/storage/secure/briefcase/nsfw_pack_hos/New() ..() - new /obj/item/weapon/gun/projectile/nsfw(src) - new /obj/item/ammo_magazine/nsfw_mag(src) - new /obj/item/ammo_magazine/nsfw_mag(src) - new /obj/item/ammo_casing/nsfw_batt/lethal(src) - new /obj/item/ammo_casing/nsfw_batt/lethal(src) - new /obj/item/ammo_casing/nsfw_batt/stun(src) - new /obj/item/ammo_casing/nsfw_batt/stun(src) - new /obj/item/ammo_casing/nsfw_batt/net(src) - new /obj/item/ammo_casing/nsfw_batt/ion(src) + new /obj/item/weapon/gun/projectile/nsfw/combat(src) + new /obj/item/ammo_magazine/nsfw_mag/combat(src) + new /obj/item/ammo_casing/nsfw_batt/combat/lethal(src) + new /obj/item/ammo_casing/nsfw_batt/combat/lethal(src) + new /obj/item/ammo_casing/nsfw_batt/combat/stun(src) + new /obj/item/ammo_casing/nsfw_batt/combat/stun(src) + new /obj/item/ammo_casing/nsfw_batt/combat/net(src) + new /obj/item/ammo_casing/nsfw_batt/combat/ion(src) +/obj/item/weapon/storage/firstaid/ml3m_pack_med + name = "\improper ML-3 \'Medigun\' kit" + desc = "A storage case for a multi-purpose healing gun. Variety hour!" + w_class = ITEMSIZE_NORMAL + max_w_class = ITEMSIZE_NORMAL + icon_state = "pinky" + +/obj/item/weapon/storage/firstaid/ml3m_pack_med/New() + ..() + new /obj/item/weapon/gun/projectile/nsfw/medical(src) + new /obj/item/ammo_magazine/nsfw_mag/medical(src) + new /obj/item/ammo_casing/nsfw_batt/medical/brute(src) + new /obj/item/ammo_casing/nsfw_batt/medical/burn(src) + new /obj/item/ammo_casing/nsfw_batt/medical/stabilize(src) + +/obj/item/weapon/storage/firstaid/ml3m_pack_cmo + name = "\improper Advanced ML-3 \'Medigun\' kit" + desc = "A storage case for a multi-purpose healing gun. Variety hour!" + w_class = ITEMSIZE_NORMAL + max_w_class = ITEMSIZE_NORMAL + icon_state = "clottingkit" + +/obj/item/weapon/storage/firstaid/ml3m_pack_cmo/New() + ..() + new /obj/item/weapon/gun/projectile/nsfw/medical/cmo(src) + new /obj/item/ammo_magazine/nsfw_mag/medical/advanced(src) + new /obj/item/ammo_casing/nsfw_batt/medical/brute2(src) + new /obj/item/ammo_casing/nsfw_batt/medical/brute2(src) + new /obj/item/ammo_casing/nsfw_batt/medical/burn2(src) + new /obj/item/ammo_casing/nsfw_batt/medical/burn2(src) + new /obj/item/ammo_casing/nsfw_batt/medical/stabilize2(src) + new /obj/item/ammo_casing/nsfw_batt/medical/stabilize2(src) + + +// Medical // + +/obj/item/ammo_casing/nsfw_batt/medical + name = "\'ML-3/M\' nanite cell - UNKNOWN" + desc = "A miniature nanite fabricator for a medigun." + catalogue_data = list(/datum/category_item/catalogue/information/organization/vey_med) + icon_state = "ml3m_batt" + +/obj/item/projectile/beam/ML3M + name = "\improper healing beam" + icon_state = "medbeam" + nodamage = 1 + damage = 0 + check_armour = "laser" + light_color = "#80F5FF" + + combustion = FALSE + + muzzle_type = /obj/effect/projectile/muzzle/medigun + tracer_type = /obj/effect/projectile/tracer/medigun + impact_type = /obj/effect/projectile/impact/medigun + +/obj/item/projectile/beam/ML3M/on_hit(var/mob/living/carbon/human/target) //what does it do when it hits someone? + return + +/obj/item/ammo_casing/nsfw_batt/medical/brute + name = "\'ML-3/M\' nanite cell - BRUTE" + type_color = "#BF0000" + type_name = "BRUTE" + projectile_type = /obj/item/projectile/beam/ML3M/brute + +/obj/item/projectile/beam/ML3M/brute/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + target.adjustBruteLoss(-10) + else + return 1 + +/obj/item/ammo_casing/nsfw_batt/medical/burn + name = "\'ML-3/M\' nanite cell - BURN" + type_color = "#FF8000" + type_name = "BURN" + projectile_type = /obj/item/projectile/beam/ML3M/burn + +/obj/item/projectile/beam/ML3M/burn/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + target.adjustFireLoss(-10) + else + return 1 + +/obj/item/ammo_casing/nsfw_batt/medical/stabilize + name = "\'ML-3/M\' nanite cell - STABILIZE" //Disinfects all open wounds, cures oxy damage + type_color = "#0080FF" + type_name = "STABILIZE" + projectile_type = /obj/item/projectile/beam/ML3M/stabilize + +/obj/item/projectile/beam/ML3M/stabilize/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + target.adjustOxyLoss(-30) + for(var/name in list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO)) + var/obj/item/organ/external/O = target.organs_by_name[name] + for (var/datum/wound/W in O.wounds) + if (W.internal) + continue + W.disinfect() + target.add_modifier(/datum/modifier/stabilize, 20 SECONDS) + else + return 1 + +/datum/modifier/stabilize + name = "stabilize" + desc = "Your injuries are stabilized and your pain abates!" + mob_overlay_state = "cyan_sparkles" + stacks = MODIFIER_STACK_EXTEND + pain_immunity = TRUE + bleeding_rate_percent = 0.1 //only a little + incoming_oxy_damage_percent = 0 + +/obj/item/ammo_casing/nsfw_batt/medical/tox + name = "\'ML-3/M\' nanite cell - TOX" + type_color = "#00A000" + type_name = "TOX" + projectile_type = /obj/item/projectile/beam/ML3M/tox + +/obj/item/projectile/beam/ML3M/tox/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + target.adjustToxLoss(-10) + else + return 1 + +/obj/item/ammo_casing/nsfw_batt/medical/omni + name = "\'ML-3/M\' nanite cell - OMNI" + type_color = "#8040FF" + type_name = "OMNI" + projectile_type = /obj/item/projectile/beam/ML3M/omni + +/obj/item/projectile/beam/ML3M/omni/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + target.adjustBruteLoss(-5) + target.adjustFireLoss(-5) + target.adjustToxLoss(-5) + target.adjustOxyLoss(-15) + else + return 1 + +/obj/item/ammo_casing/nsfw_batt/medical/antirad + name = "\'ML-3/M\' nanite cell - OMNI" + type_color = "#008000" + type_name = "ANTIRAD" + projectile_type = /obj/item/projectile/beam/ML3M/antirad + +/obj/item/projectile/beam/ML3M/antirad/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + target.adjustToxLoss(-5) + target.radiation = max(target.radiation - 350, 0) //same as 5 units of arithrazine, sans the brute damage + else + return 1 + + +/obj/item/ammo_casing/nsfw_batt/medical/brute2 + name = "\'ML-3/M\' nanite cell - BRUTE-II" + type_color = "#BF0000" + type_name = "BRUTE-II" + projectile_type = /obj/item/projectile/beam/ML3M/brute2 + +/obj/item/projectile/beam/ML3M/brute2/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + target.adjustBruteLoss(-20) + else + return 1 + +/obj/item/ammo_casing/nsfw_batt/medical/burn2 + name = "\'ML-3/M\' nanite cell - BURN-II" + type_color = "#FF8000" + type_name = "BURN-II" + projectile_type = /obj/item/projectile/beam/ML3M/burn2 + +/obj/item/projectile/beam/ML3M/burn2/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + target.adjustFireLoss(-20) + else + return 1 + +/obj/item/ammo_casing/nsfw_batt/medical/stabilize2 + name = "\'ML-3/M\' nanite cell - STABILIZE-II" //Disinfects and bandages all open wounds, cures all oxy damage + type_color = "#0080FF" + type_name = "STABILIZE-II" + projectile_type = /obj/item/projectile/beam/ML3M/stabilize2 + +/obj/item/projectile/beam/ML3M/stabilize2/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + target.adjustOxyLoss(-200) + for(var/name in list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO)) + var/obj/item/organ/external/O = target.organs_by_name[name] + for (var/datum/wound/W in O.wounds) + if(W.internal) + continue + if(O.is_bandaged() == FALSE) + W.bandage() + if(O.is_salved() == FALSE) + W.salve() + W.disinfect() + target.add_modifier(/datum/modifier/stabilize, 20 SECONDS) + else + return 1 + +/obj/item/ammo_casing/nsfw_batt/medical/omni2 + name = "\'ML-3/M\' nanite cell - OMNI-II" + type_color = "#8040FF" + type_name = "OMNI-II" + projectile_type = /obj/item/projectile/beam/ML3M/omni2 + +/obj/item/projectile/beam/ML3M/omni2/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + target.adjustBruteLoss(-10) + target.adjustFireLoss(-10) + target.adjustToxLoss(-10) + target.adjustOxyLoss(-30) + else + return 1 + +/obj/item/ammo_casing/nsfw_batt/medical/tox2 + name = "\'ML-3/M\' nanite cell - TOX-II" + type_color = "#00A000" + type_name = "TOX-II" + projectile_type = /obj/item/projectile/beam/ML3M/tox2 + +/obj/item/projectile/beam/ML3M/tox2/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + target.adjustToxLoss(-20) + else + return 1 + +/obj/item/ammo_casing/nsfw_batt/medical/haste + name = "\'ML-3/M\' nanite cell - HASTE" + type_color = "#FF3300" + type_name = "HASTE" + projectile_type = /obj/item/projectile/beam/ML3M/haste + +/obj/item/projectile/beam/ML3M/haste/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + target.add_modifier(/datum/modifier/ml3mhaste, 20 SECONDS) + else + return 1 + +/datum/modifier/ml3mhaste + name = "haste" + desc = "You can move much faster!" + mob_overlay_state = "haste" + stacks = MODIFIER_STACK_EXTEND + slowdown = -1 //a little faster! + evasion = 1.25 //and a little harder to hit! + +/obj/item/ammo_casing/nsfw_batt/medical/resistance + name = "\'ML-3/M\' nanite cell - RESIST" + type_color = "#555555" + type_name = "RESIST" + projectile_type = /obj/item/projectile/beam/ML3M/resistance + +/obj/item/projectile/beam/ML3M/resistance/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + target.add_modifier(/datum/modifier/resistance, 20 SECONDS) + else + return 1 + +/datum/modifier/resistance + name = "resistance" + desc = "You resist 25% of all incoming damage and stuns!" + mob_overlay_state = "repel_missiles" + stacks = MODIFIER_STACK_EXTEND + disable_duration_percent = 0.75 + incoming_damage_percent = 0.75 + +/obj/item/ammo_casing/nsfw_batt/medical/revival + name = "\'ML-3/M\' nanite cell - REVIVAL" + type_color = "#669900" + type_name = "REVIVAL" + projectile_type = /obj/item/projectile/beam/ML3M/revival + +/obj/item/projectile/beam/ML3M/revival/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + if(target.stat == DEAD) + target.adjustBruteLoss(-50) + target.adjustFireLoss(-50) + target.adjustToxLoss(-50) + target.adjustOxyLoss(-200) + else + return 1 + +/datum/modifier/resistance + name = "resistance" + desc = "You resist 25% of all incoming damage and stuns!" + mob_overlay_state = "repel_missiles" + stacks = MODIFIER_STACK_EXTEND + disable_duration_percent = 0.75 + incoming_damage_percent = 0.75 + +// Illegal cells! +/obj/item/ammo_casing/nsfw_batt/medical/shrink + name = "\'ML-3/M\' nanite cell - SHRINK" + type_color = "#910ffc" + type_name = "SHRINK" + projectile_type = /obj/item/projectile/beam/ML3M/shrink + +/obj/item/projectile/beam/ML3M/shrink/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + target.resize(0.5) + target.show_message(" The beam fires into your body, changing your size!") + target.updateicon() + else + return 1 + +/obj/item/ammo_casing/nsfw_batt/medical/grow + name = "\'ML-3/M\' nanite cell - GROW" + type_color = "#fc0fdc" + type_name = "GROW" + projectile_type = /obj/item/projectile/beam/ML3M/grow + +/obj/item/projectile/beam/ML3M/grow/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + target.resize(2.0) + target.show_message(" The beam fires into your body, changing your size!") + target.updateicon() + else + return 1 + +/obj/item/ammo_casing/nsfw_batt/medical/normalsize + name = "\'ML-3/M\' nanite cell - NORMALSIZE" + type_color = "#C70FEC" + type_name = "NORMALSIZE" + projectile_type = /obj/item/projectile/beam/ML3M/normalsize + +/obj/item/projectile/beam/ML3M/normalsize/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + target.resize(1) + target.show_message(" The beam fires into your body, changing your size!") + target.updateicon() + else + return 1 \ No newline at end of file diff --git a/code/modules/vore/resizing/sizegun_vr.dm b/code/modules/vore/resizing/sizegun_vr.dm index 705bf3538d..984e05f8ed 100644 --- a/code/modules/vore/resizing/sizegun_vr.dm +++ b/code/modules/vore/resizing/sizegun_vr.dm @@ -82,3 +82,11 @@ H.updateicon() else return 1 + + +/obj/item/projectile/beam/sizelaser/shrink + set_size = 0.5 //50% of current size + + +/obj/item/projectile/beam/sizelaser/grow + set_size = 2.0 //200% of current size \ No newline at end of file diff --git a/code/modules/xenoarcheaology/finds/finds.dm b/code/modules/xenoarcheaology/finds/finds.dm index ab5d00e786..8e89dcd947 100644 --- a/code/modules/xenoarcheaology/finds/finds.dm +++ b/code/modules/xenoarcheaology/finds/finds.dm @@ -14,20 +14,22 @@ clearance_range = rand(4, 12) dissonance_spread = rand(1500, 2500) / 100 -/obj/item/weapon/ore/strangerock +/obj/item/weapon/strangerock name = "Strange rock" desc = "Seems to have some unusal strata evident throughout it." icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "strange" + var/datum/geosample/geologic_data origin_tech = list(TECH_MATERIAL = 5) -/obj/item/weapon/ore/strangerock/New(loc, var/inside_item_type = 0) - ..(loc) +/obj/item/weapon/strangerock/New(loc, var/inside_item_type = 0) + pixel_x = rand(0,16)-8 + pixel_y = rand(0,8)-8 if(inside_item_type) new /obj/item/weapon/archaeological_find(src, new_item_type = inside_item_type) -/obj/item/weapon/ore/strangerock/attackby(var/obj/item/I, var/mob/user) +/obj/item/weapon/strangerock/attackby(var/obj/item/I, var/mob/user) if(istype(I, /obj/item/weapon/pickaxe/brush)) var/obj/item/inside = locate() in src if(inside) diff --git a/html/changelogs/Novacat - MREs.yml b/html/changelogs/Novacat - MREs.yml new file mode 100644 index 0000000000..869135e3fb --- /dev/null +++ b/html/changelogs/Novacat - MREs.yml @@ -0,0 +1,37 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Novacat + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Ports MREs from Baystation, and adds a few supply crates with them to cargo." + - rscadd: "Adds liquidprotein rations, currently only found in emergency MREs." \ No newline at end of file diff --git a/icons/mecha/mecha_equipment_vr.dmi b/icons/mecha/mecha_equipment_vr.dmi index 7bb519d706..ec23292b90 100644 Binary files a/icons/mecha/mecha_equipment_vr.dmi and b/icons/mecha/mecha_equipment_vr.dmi differ diff --git a/icons/mob/animal_vr.dmi b/icons/mob/animal_vr.dmi index 2d8cd7a6a1..801f3ddf33 100644 Binary files a/icons/mob/animal_vr.dmi and b/icons/mob/animal_vr.dmi differ diff --git a/icons/mob/items/lefthand_guns_vr.dmi b/icons/mob/items/lefthand_guns_vr.dmi index c64d1453e4..76ad8ebf31 100644 Binary files a/icons/mob/items/lefthand_guns_vr.dmi and b/icons/mob/items/lefthand_guns_vr.dmi differ diff --git a/icons/mob/items/righthand_guns_vr.dmi b/icons/mob/items/righthand_guns_vr.dmi index 193d6ee292..42d935f760 100644 Binary files a/icons/mob/items/righthand_guns_vr.dmi and b/icons/mob/items/righthand_guns_vr.dmi differ diff --git a/icons/mob/pai_vr.dmi b/icons/mob/pai_vr.dmi index e6591e1326..cb494851af 100644 Binary files a/icons/mob/pai_vr.dmi and b/icons/mob/pai_vr.dmi differ diff --git a/icons/obj/ammo_vr.dmi b/icons/obj/ammo_vr.dmi index b5defc3782..2fa66e4424 100644 Binary files a/icons/obj/ammo_vr.dmi and b/icons/obj/ammo_vr.dmi differ diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi index 65d92bbe67..de2f69b813 100644 Binary files a/icons/obj/food.dmi and b/icons/obj/food.dmi differ diff --git a/icons/obj/food_vr.dmi b/icons/obj/food_vr.dmi index 7a6d3c5226..ea92af4493 100644 Binary files a/icons/obj/food_vr.dmi and b/icons/obj/food_vr.dmi differ diff --git a/icons/obj/gun_vr.dmi b/icons/obj/gun_vr.dmi index bb393fc1f7..ecb1e88d4b 100644 Binary files a/icons/obj/gun_vr.dmi and b/icons/obj/gun_vr.dmi differ diff --git a/icons/obj/projectiles_vr.dmi b/icons/obj/projectiles_vr.dmi index 91baf24807..ecc3445c92 100644 Binary files a/icons/obj/projectiles_vr.dmi and b/icons/obj/projectiles_vr.dmi differ diff --git a/icons/obj/trash.dmi b/icons/obj/trash.dmi index 4585d41d70..2fe1a91c98 100644 Binary files a/icons/obj/trash.dmi and b/icons/obj/trash.dmi differ diff --git a/icons/obj/trash_vr.dmi b/icons/obj/trash_vr.dmi index 17004c289d..2c7fed4c7a 100644 Binary files a/icons/obj/trash_vr.dmi and b/icons/obj/trash_vr.dmi differ diff --git a/icons/vore/custom_guns_vr.dmi b/icons/vore/custom_guns_vr.dmi index c09ac65d22..2fa1627876 100644 Binary files a/icons/vore/custom_guns_vr.dmi and b/icons/vore/custom_guns_vr.dmi differ diff --git a/maps/southern_cross/structures/closets/misc_vr.dm b/maps/southern_cross/structures/closets/misc_vr.dm index 384aa93134..033a5384ef 100644 --- a/maps/southern_cross/structures/closets/misc_vr.dm +++ b/maps/southern_cross/structures/closets/misc_vr.dm @@ -61,7 +61,8 @@ /obj/item/taperoll/medical, /obj/item/device/gps/medical, /obj/item/device/geiger, - /obj/item/bodybag/cryobag) + /obj/item/bodybag/cryobag, + /obj/item/device/cataloguer/compact) /obj/structure/closet/secure_closet/pilot starts_with = list( @@ -83,7 +84,8 @@ /obj/item/weapon/storage/box/flare, /obj/item/weapon/cell/device, /obj/item/device/radio, - /obj/item/device/gps/explorer) + /obj/item/device/gps/explorer, + /obj/item/device/cataloguer/compact) /obj/structure/closet/secure_closet/pathfinder name = "pathfinder locker" @@ -118,7 +120,7 @@ /obj/item/clothing/accessory/holster/machete, /obj/item/weapon/reagent_containers/food/snacks/liquidfood, /obj/item/weapon/reagent_containers/food/snacks/liquidprotein, - /obj/item/device/cataloguer) + /obj/item/device/cataloguer/compact/pathfinder) /obj/structure/closet/secure_closet/pathfinder/Initialize() if(prob(50)) diff --git a/maps/tether/submaps/beach/_beach.dm b/maps/tether/submaps/beach/_beach.dm index 1759fb0f02..5650c8db96 100644 --- a/maps/tether/submaps/beach/_beach.dm +++ b/maps/tether/submaps/beach/_beach.dm @@ -155,6 +155,7 @@ //And some special areas, including our shuttle landing spot (must be unique) /area/shuttle/excursion/away_beach name = "\improper Excursion Shuttle - Beach" + base_turf = /turf/simulated/floor/beach/sand/desert dynamic_lighting = 0 /area/tether_away/beach diff --git a/maps/tether/tether-01-surface1.dmm b/maps/tether/tether-01-surface1.dmm index a46007713f..b438943428 100644 --- a/maps/tether/tether-01-surface1.dmm +++ b/maps/tether/tether-01-surface1.dmm @@ -3603,6 +3603,9 @@ /obj/effect/floor_decal/borderfloor/corner2{ dir = 10 }, +/obj/effect/floor_decal/corner/grey/bordercorner2{ + dir = 10 + }, /turf/simulated/floor/tiled, /area/crew_quarters/visitor_laundry) "aga" = ( @@ -4676,8 +4679,6 @@ /area/tether/surfacebase/north_stairs_one) "aib" = ( /obj/structure/table/glass, -/obj/item/weapon/storage/fancy/vials, -/obj/item/device/reagent_scanner, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, @@ -4690,6 +4691,7 @@ /obj/effect/floor_decal/corner/mauve/border{ dir = 8 }, +/obj/machinery/portable_atmospherics/powered/reagent_distillery, /turf/simulated/floor/tiled/white, /area/rnd/chemistry_lab) "aic" = ( @@ -4900,8 +4902,6 @@ /area/tether/surfacebase/atrium_one) "aip" = ( /obj/structure/table/glass, -/obj/item/weapon/storage/box/beakers, -/obj/item/clothing/glasses/science, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, @@ -4911,6 +4911,9 @@ /obj/effect/floor_decal/corner/mauve/border{ dir = 8 }, +/obj/item/weapon/storage/fancy/vials, +/obj/item/weapon/storage/box/beakers, +/obj/item/clothing/glasses/science, /turf/simulated/floor/tiled/white, /area/rnd/chemistry_lab) "aiq" = ( @@ -5091,14 +5094,15 @@ /area/rnd/chemistry_lab) "aiJ" = ( /obj/structure/table/glass, -/obj/item/weapon/storage/box/syringes, -/obj/item/weapon/reagent_containers/spray/cleaner, /obj/effect/floor_decal/borderfloor{ dir = 10 }, /obj/effect/floor_decal/corner/mauve/border{ dir = 10 }, +/obj/item/weapon/storage/box/syringes, +/obj/item/device/reagent_scanner, +/obj/item/weapon/reagent_containers/spray/cleaner, /turf/simulated/floor/tiled/white, /area/rnd/chemistry_lab) "aiK" = ( @@ -7498,6 +7502,26 @@ }, /turf/simulated/floor/tiled/techfloor, /area/maintenance/lower/mining_eva) +"anr" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/grey/border{ + icon_state = "bordercolor"; + dir = 8 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/effect/floor_decal/corner/grey/bordercorner2{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitor_laundry) "anw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -25135,23 +25159,6 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_7) -"chl" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/grey/border{ - icon_state = "bordercolor"; - dir = 8 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 8 - }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/visitor_laundry) "chm" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -47242,7 +47249,7 @@ ceK afZ cfL cgk -chl +anr rEC chO cje diff --git a/maps/tether/tether-02-surface2.dmm b/maps/tether/tether-02-surface2.dmm index 394dbcdc46..7e9c9b11f5 100644 --- a/maps/tether/tether-02-surface2.dmm +++ b/maps/tether/tether-02-surface2.dmm @@ -3475,64 +3475,51 @@ /turf/simulated/wall, /area/tether/surfacebase/fish_farm) "hE" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = 4; - pixel_y = -24 - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/north_staires_two) -"hF" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/north_staires_two) -"hG" = ( +/obj/structure/table/rack, +/obj/item/weapon/material/fishing_rod/modern/cheap, +/obj/item/weapon/material/fishing_rod/modern/cheap, +/obj/item/weapon/material/fishing_rod/modern/cheap, +/obj/item/weapon/material/fishing_rod/modern/cheap, +/obj/item/weapon/material/fishing_rod/modern/cheap, /obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -25 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor/glass/hidden/steel{ - dir = 1 + dir = 4; + pixel_x = 24 }, /turf/simulated/floor/tiled, -/area/tether/surfacebase/north_staires_two) +/area/tether/surfacebase/fish_farm) +"hF" = ( +/obj/structure/railing{ + icon_state = "railing0"; + dir = 4 + }, +/turf/simulated/floor/water/deep/indoors, +/area/tether/surfacebase/fish_farm) +"hG" = ( +/obj/structure/table/rack, +/obj/item/stack/cable_coil/pink, +/obj/item/stack/cable_coil/pink, +/obj/item/stack/cable_coil/pink, +/obj/item/stack/cable_coil/pink, +/obj/item/stack/cable_coil/pink, +/obj/machinery/alarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/fish_farm) "hH" = ( /obj/structure/cable{ - icon_state = "0-4"; - d2 = 4 + icon_state = "2-4" }, -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -28 +/obj/effect/floor_decal/borderfloor{ + dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 9 }, /turf/simulated/floor/tiled, -/area/tether/surfacebase/north_staires_two) +/area/tether/surfacebase/atrium_two) "hI" = ( /obj/machinery/door/airlock/maintenance/common, /obj/structure/cable{ @@ -3930,7 +3917,14 @@ /area/maintenance/lower/rnd) "iy" = ( /obj/structure/cable{ - icon_state = "2-4" + icon_state = "4-8" + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 1 }, /turf/simulated/floor/tiled, /area/tether/surfacebase/atrium_two) @@ -3938,14 +3932,35 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/atrium_two) "iA" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "4-8" }, +/obj/effect/floor_decal/borderfloor{ + dir = 1; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 1 + }, /turf/simulated/floor/tiled, -/area/tether/surfacebase/north_staires_two) +/area/tether/surfacebase/atrium_two) "iB" = ( /obj/structure/cable{ icon_state = "4-8" @@ -10041,16 +10056,27 @@ /turf/simulated/floor/tiled, /area/engineering/lower/atmos_lockers) "tU" = ( -/obj/effect/floor_decal/rust, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "4-8" }, +/obj/effect/floor_decal/borderfloor{ + dir = 1; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lightgrey/bordercorner2{ + dir = 1 + }, +/obj/machinery/door/firedoor/glass/hidden/steel{ + dir = 2 + }, /turf/simulated/floor/tiled, -/area/tether/surfacebase/atrium_two) +/area/tether/surfacebase/north_staires_two) "tV" = ( /turf/simulated/floor/tiled/monotile, /area/engineering/atmos) @@ -10104,7 +10130,9 @@ dir = 2 }, /obj/structure/cable{ - icon_state = "4-8" + d1 = 2; + d2 = 8; + icon_state = "2-8" }, /turf/simulated/floor/tiled, /area/tether/surfacebase/north_staires_two) @@ -10121,14 +10149,12 @@ /turf/simulated/floor/tiled/techmaint, /area/tether/surfacebase/east_stairs_two) "ue" = ( -/obj/structure/table/rack, -/obj/item/weapon/material/fishing_rod/modern/cheap, -/obj/item/weapon/material/fishing_rod/modern/cheap, -/obj/item/weapon/material/fishing_rod/modern/cheap, -/obj/item/weapon/material/fishing_rod/modern/cheap, -/obj/item/weapon/material/fishing_rod/modern/cheap, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "warning"; + dir = 1 + }, /turf/simulated/floor/tiled, -/area/tether/surfacebase/fish_farm) +/area/tether/surfacebase/north_staires_two) "uf" = ( /obj/effect/floor_decal/corner_techfloor_grid{ dir = 9 @@ -10204,9 +10230,7 @@ icon_state = "warning"; dir = 1 }, -/obj/structure/cable{ - icon_state = "4-8" - }, +/obj/effect/floor_decal/steeldecal/steel_decals4, /turf/simulated/floor/tiled, /area/tether/surfacebase/north_staires_two) "up" = ( @@ -10230,24 +10254,6 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/fish_farm) "us" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "warning"; - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals6{ - dir = 10 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/north_staires_two) -"ut" = ( -/turf/simulated/floor/tiled/techfloor, -/area/tether/surfacebase/fish_farm) -"uu" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -10257,9 +10263,18 @@ /obj/machinery/camera/network/tether{ dir = 4 }, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/atrium_two) -"uv" = ( +"ut" = ( +/turf/simulated/floor/tiled/techfloor, +/area/tether/surfacebase/fish_farm) +"uu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, @@ -10270,6 +10285,26 @@ dir = 4; icon_state = "pipe-c" }, +/obj/effect/floor_decal/borderfloor/corner, +/obj/effect/floor_decal/corner/lightgrey/bordercorner, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/atrium_two) +"uv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/atrium_two) "uw" = ( @@ -10295,14 +10330,20 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/fish_farm) "uz" = ( -/obj/structure/table/rack, -/obj/item/stack/cable_coil/pink, -/obj/item/stack/cable_coil/pink, -/obj/item/stack/cable_coil/pink, -/obj/item/stack/cable_coil/pink, -/obj/item/stack/cable_coil/pink, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/disposalpipe/junction, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, /turf/simulated/floor/tiled, -/area/tether/surfacebase/fish_farm) +/area/tether/surfacebase/atrium_two) "uA" = ( /obj/structure/railing, /obj/structure/railing{ @@ -10663,22 +10704,23 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = 4; + pixel_y = -24 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/atrium_two) "vi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/machinery/door/firedoor/glass/hidden/steel{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, -/area/tether/surfacebase/atrium_two) +/area/tether/surfacebase/north_staires_two) "vj" = ( /obj/effect/floor_decal/industrial/warning{ dir = 8 @@ -10695,18 +10737,17 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/fish_farm) "vk" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/disposalpipe/junction, /turf/simulated/floor/tiled, -/area/tether/surfacebase/atrium_two) +/area/tether/surfacebase/north_staires_two) "vl" = ( /obj/structure/railing{ icon_state = "railing0"; @@ -10780,14 +10821,25 @@ /turf/simulated/floor/tiled, /area/engineering/lower/atmos_eva) "vs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/machinery/power/apc{ + dir = 2; + name = "south bump"; + pixel_y = -28 + }, +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, /turf/simulated/floor/tiled, -/area/tether/surfacebase/atrium_two) +/area/tether/surfacebase/north_staires_two) "vt" = ( /obj/effect/floor_decal/borderfloor{ dir = 6 @@ -10809,21 +10861,28 @@ /turf/simulated/floor/tiled, /area/engineering/lower/atmos_eva) "vu" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_x = 0; + pixel_y = -25 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass/hidden/steel{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0 }, -/obj/effect/floor_decal/steeldecal/steel_decals6{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, /obj/structure/cable{ d1 = 1; d2 = 4; @@ -10931,20 +10990,26 @@ /turf/simulated/floor/tiled/monotile, /area/engineering/atmos) "vD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25 + }, /obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 }, /turf/simulated/floor/tiled, -/area/tether/surfacebase/atrium_two) +/area/tether/surfacebase/north_staires_two) "vE" = ( /obj/machinery/light{ dir = 8 @@ -11012,14 +11077,13 @@ /turf/simulated/floor/plating, /area/maintenance/engineering/pumpstation) "vM" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/alarm{ + dir = 4; + icon_state = "alarm0"; + pixel_x = -22 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/atrium_two) +/turf/simulated/floor/tiled/techfloor, +/area/tether/surfacebase/fish_farm) "vN" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/door/airlock/maintenance/common, @@ -11120,31 +11184,72 @@ /turf/simulated/floor/beach/sand/desert, /area/tether/surfacebase/fish_farm) "vX" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lightgrey/bordercorner2{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/atrium_two) "vY" = ( -/obj/structure/railing{ - icon_state = "railing0"; +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/camera/network/civilian, -/turf/simulated/floor/water/deep/indoors, -/area/tether/surfacebase/fish_farm) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/atrium_two) "vZ" = ( /obj/structure/cable{ - icon_state = "1-2" + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/lower/rnd) +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/effect/floor_decal/corner/lightgrey/bordercorner2{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/north_staires_two) "wa" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -11389,18 +11494,43 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/fish_farm) "wu" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/machinery/light{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/effect/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lightgrey/bordercorner{ dir = 1 }, /turf/simulated/floor/tiled, /area/tether/surfacebase/atrium_two) "wv" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 4 }, /turf/simulated/floor/tiled, /area/tether/surfacebase/atrium_two) @@ -11782,6 +11912,28 @@ }, /turf/simulated/floor/tiled, /area/engineering/atmos) +"wR" = ( +/obj/machinery/camera/network/tether{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/tether/surfacebase/fish_farm) +"wS" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/effect/floor_decal/borderfloor/corner2, +/obj/effect/floor_decal/corner/lightgrey/bordercorner2, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/atrium_two) "wT" = ( /obj/effect/floor_decal/borderfloor{ dir = 1; @@ -11882,6 +12034,17 @@ }, /turf/simulated/floor/tiled, /area/engineering/atmos) +"wX" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/atrium_two) "wY" = ( /obj/structure/railing{ dir = 8 @@ -11894,6 +12057,30 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/techmaint, /area/tether/surfacebase/east_stairs_two) +"wZ" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/atrium_two) +"xa" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/effect/floor_decal/borderfloor{ + dir = 6 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/atrium_two) "xb" = ( /obj/effect/floor_decal/borderfloor{ dir = 4 @@ -12012,6 +12199,16 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/maintenance/asmaint2) +"xm" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/rust, +/turf/simulated/floor/plating, +/area/maintenance/lower/rnd) "xn" = ( /obj/structure/table/rack/shelf/steel, /obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager, @@ -25464,8 +25661,8 @@ ac hD vE ut -ut -ut +vM +wR ut vE hD @@ -26030,7 +26227,7 @@ hs hs ho ul -vY +hF uB uO uO @@ -28584,12 +28781,12 @@ cW cW hD tR -ue +hE ur -uz +hG hD -vs -vM +vX +wS dY iO je @@ -28730,8 +28927,8 @@ hD hD hD hD -vs -vM +vY +wX dY iB jf @@ -28870,10 +29067,10 @@ gK gZ ha dY -iy -uu -vD -vX +hH +us +wu +wZ dY iP iT @@ -29012,10 +29209,10 @@ gL ha hm dY -iz -uv -vi +iy +uu wv +xa dY iP jf @@ -29154,8 +29351,8 @@ gM gZ hn dY -iz -vh +iy +uv dY dY dY @@ -29296,7 +29493,7 @@ gN hb ap dY -wu +iz vh dY ii @@ -29438,10 +29635,10 @@ gs gF gO hI -tU -vk +iA +uz vK -vZ +xm we iR ji @@ -29580,8 +29777,8 @@ ge ge ge hc -iA -hf +tU +vi wC ii wf @@ -29723,7 +29920,7 @@ gt gt hd iC -hE +vk ge ik wj @@ -29865,7 +30062,7 @@ gt gP gt iD -hF +vs ge il wk @@ -30007,7 +30204,7 @@ ge ge he uc -hG +vu ge im wk @@ -30148,8 +30345,8 @@ gu ge gQ hf -uo -hH +ue +vD ge il wl @@ -30290,8 +30487,8 @@ gu ge gQ hf -us -vu +uo +vZ vN wa wn diff --git a/maps/tether/tether-05-station1.dmm b/maps/tether/tether-05-station1.dmm index 4eda0973a8..e2fdc2a867 100644 --- a/maps/tether/tether-05-station1.dmm +++ b/maps/tether/tether-05-station1.dmm @@ -22222,9 +22222,6 @@ /obj/machinery/portable_atmospherics/canister/oxygen, /turf/simulated/floor/tiled, /area/engineering/engine_eva) -"cbM" = ( -/turf/simulated/mineral/vacuum, -/area/space) "cbY" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -26857,8 +26854,8 @@ aac aac aac aac -cbM -cbM +aac +aac ayp ayp ayp diff --git a/maps/tether/tether-06-station2.dmm b/maps/tether/tether-06-station2.dmm index 251de4e3f1..eccdca6560 100644 --- a/maps/tether/tether-06-station2.dmm +++ b/maps/tether/tether-06-station2.dmm @@ -7210,9 +7210,9 @@ /area/tether/exploration/hallway) "kC" = ( /obj/item/weapon/material/twohanded/spear/foam, -/obj/item/weapon/storage/fancy/crayons{ +/obj/item/weapon/storage/mre/menu12{ desc = "Special food for special warriors of the expedition force."; - name = "spearman ration" + name = "spearman MRE" }, /turf/simulated/floor, /area/tether/exploration/hallway) diff --git a/maps/tether/tether-07-station3.dmm b/maps/tether/tether-07-station3.dmm index cebc944428..c08a89bb3a 100644 --- a/maps/tether/tether-07-station3.dmm +++ b/maps/tether/tether-07-station3.dmm @@ -28961,10 +28961,8 @@ dir = 1 }, /obj/structure/closet/crate/freezer/rations, -/obj/item/weapon/reagent_containers/food/snacks/liquidprotein, -/obj/item/weapon/reagent_containers/food/snacks/liquidprotein, -/obj/item/weapon/reagent_containers/food/snacks/liquidprotein, -/obj/item/weapon/reagent_containers/food/snacks/liquidprotein, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu10, /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/excursion/tether) "Vi" = ( diff --git a/maps/tether/tether-10-colony.dmm b/maps/tether/tether-10-colony.dmm index 517c9d7b21..66fcd2daec 100644 --- a/maps/tether/tether-10-colony.dmm +++ b/maps/tether/tether-10-colony.dmm @@ -414,18 +414,12 @@ /area/centcom/specops) "aI" = ( /obj/structure/closet/crate/medical, -/obj/item/weapon/reagent_containers/food/snacks/liquidfood, -/obj/item/weapon/reagent_containers/food/snacks/liquidfood, -/obj/item/weapon/reagent_containers/food/snacks/liquidfood, -/obj/item/weapon/reagent_containers/food/snacks/liquidfood, -/obj/item/weapon/reagent_containers/food/snacks/liquidfood, -/obj/item/weapon/reagent_containers/food/snacks/liquidfood, -/obj/item/weapon/reagent_containers/food/snacks/liquidfood, -/obj/item/weapon/reagent_containers/food/snacks/liquidfood, -/obj/item/weapon/reagent_containers/food/snacks/liquidfood, -/obj/item/weapon/reagent_containers/food/snacks/liquidfood, -/obj/item/weapon/reagent_containers/food/snacks/liquidfood, -/obj/item/weapon/reagent_containers/food/snacks/liquidfood, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, /turf/unsimulated/floor{ icon_state = "vault"; dir = 5 @@ -471,6 +465,7 @@ /obj/item/bodybag/cryobag, /obj/item/bodybag/cryobag, /obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/glass/beaker/large, /turf/unsimulated/floor{ icon_state = "vault"; dir = 5 @@ -1281,14 +1276,14 @@ /area/centcom/specops) "bW" = ( /obj/structure/table/reinforced, -/obj/item/ammo_casing/nsfw_batt/stun, -/obj/item/ammo_casing/nsfw_batt/stun, -/obj/item/ammo_casing/nsfw_batt/stun, -/obj/item/ammo_casing/nsfw_batt, -/obj/item/ammo_casing/nsfw_batt, -/obj/item/ammo_casing/nsfw_batt, -/obj/item/ammo_casing/nsfw_batt/net, -/obj/item/ammo_casing/nsfw_batt/net, +/obj/item/ammo_casing/nsfw_batt/combat/stun, +/obj/item/ammo_casing/nsfw_batt/combat/stun, +/obj/item/ammo_casing/nsfw_batt/combat/stun, +/obj/item/ammo_casing/nsfw_batt/medical/brute2, +/obj/item/ammo_casing/nsfw_batt/medical/burn2, +/obj/item/ammo_casing/nsfw_batt/medical/stabilize2, +/obj/item/ammo_casing/nsfw_batt/combat/net, +/obj/item/ammo_casing/nsfw_batt/combat/net, /obj/item/ammo_magazine/nsfw_mag, /obj/item/weapon/gun/projectile/nsfw, /turf/unsimulated/floor/steel{ diff --git a/vorestation.dme b/vorestation.dme index 354003ff55..53bbdeaaa5 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -881,6 +881,7 @@ #include "code\game\mecha\combat\phazon.dm" #include "code\game\mecha\equipment\mecha_equipment.dm" #include "code\game\mecha\equipment\tools\medical_tools.dm" +#include "code\game\mecha\equipment\tools\medical_tools_vr.dm" #include "code\game\mecha\equipment\tools\tools.dm" #include "code\game\mecha\equipment\weapons\weapons.dm" #include "code\game\mecha\medical\medical.dm" @@ -1191,6 +1192,7 @@ #include "code\game\objects\items\weapons\storage\laundry_basket.dm" #include "code\game\objects\items\weapons\storage\lockbox.dm" #include "code\game\objects\items\weapons\storage\misc.dm" +#include "code\game\objects\items\weapons\storage\mre.dm" #include "code\game\objects\items\weapons\storage\quickdraw.dm" #include "code\game\objects\items\weapons\storage\secure.dm" #include "code\game\objects\items\weapons\storage\storage.dm" @@ -1555,6 +1557,7 @@ #include "code\modules\catalogue\catalogue_data_vr.dm" #include "code\modules\catalogue\cataloguer.dm" #include "code\modules\catalogue\cataloguer_visuals.dm" +#include "code\modules\catalogue\cataloguer_vr.dm" #include "code\modules\client\client defines.dm" #include "code\modules\client\client procs.dm" #include "code\modules\client\movement.dm" @@ -2420,6 +2423,7 @@ #include "code\modules\mob\living\simple_mob\subtypes\animal\passive\lizard.dm" #include "code\modules\mob\living\simple_mob\subtypes\animal\passive\misc.dm" #include "code\modules\mob\living\simple_mob\subtypes\animal\passive\mouse.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\mouse_vr.dm" #include "code\modules\mob\living\simple_mob\subtypes\animal\passive\passive.dm" #include "code\modules\mob\living\simple_mob\subtypes\animal\passive\penguin.dm" #include "code\modules\mob\living\simple_mob\subtypes\animal\pets\bird.dm" @@ -2524,6 +2528,7 @@ #include "code\modules\mob\living\simple_mob\subtypes\vore\wolf.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\wolfgirl.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\zz_vore_overrides.dm" +#include "code\modules\mob\living\simple_mob\subtypes\vore\morph\morph.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\shadekin\_defines.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\shadekin\ability_objects.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\shadekin\ability_procs.dm"