diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index d6dd254de1..0c937f7fdd 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -43,6 +43,13 @@ else if(LAZYLEN(prizes)) var/prizeselect = pickweight(prizes) + //VOREstation edit - Randomized map objects were put in loot piles, so handle them... + if(istype(prizeselect,/obj/random)) + var/obj/random/randy = prizeselect + var/new_I = randy.spawn_item() + qdel(prizeselect) + prizeselect = new_I // swap it + //VOREstation edit end new prizeselect(src.loc) if(istype(prizeselect, /obj/item/clothing/suit/syndicatefake)) //Helmet is part of the suit diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index cee7977ecb..76145b618a 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -132,6 +132,19 @@ Buildable meters src.set_dir(turn(src.dir, 270)) fixdir() +//VOREstation edit: counter-clockwise rotation +/obj/item/pipe/verb/rotate_counterclockwise() + set category = "Object" + set name = "Rotate Pipe Counter-Clockwise" + set src in view(1) + + if ( usr.stat || usr.restrained() || !usr.canmove ) + return + + src.set_dir(turn(src.dir, 90)) + fixdir() +//VOREstation edit end + // Don't let pulling a pipe straighten it out. /obj/item/pipe/binary/bendable/Move() var/old_bent = !IS_CARDINAL(dir) diff --git a/code/game/machinery/virtual_reality/vr_console.dm b/code/game/machinery/virtual_reality/vr_console.dm index e3258d1d19..2e2c610cfc 100644 --- a/code/game/machinery/virtual_reality/vr_console.dm +++ b/code/game/machinery/virtual_reality/vr_console.dm @@ -173,12 +173,18 @@ M.client.perspective = EYE_PERSPECTIVE M.client.eye = src M.loc = src - update_use_power(USE_POWER_ACTIVE) + // update_use_power(USE_POWER_ACTIVE) //VOREstation edit: borer VR crash fix occupant = M update_icon() - enter_vr() + //VOREstation edit - crashes borers + if(!M.has_brain_worms()) + update_use_power(USE_POWER_ACTIVE) + enter_vr() + else + to_chat(user, "\The [src] rejects [M] with a sharp beep.") + //VOREstation edit end return /obj/machinery/vr_sleeper/proc/go_out(var/forced = TRUE) diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 7b57ecd0e7..143422cd26 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -49,7 +49,13 @@ var/global/list/image/splatter_cache=list() if (B.blood_DNA) blood_DNA |= B.blood_DNA.Copy() qdel(B) - addtimer(CALLBACK(src, PROC_REF(dry)), DRYING_TIME * (amount+1)) + +//VOREstation edit - Moved timer call to Init, and made it not call on mapload +/obj/effect/decal/cleanable/blood/Initialize(var/mapload, var/_age) + . = ..() + if(!mapload) + addtimer(CALLBACK(src, PROC_REF(dry)), DRYING_TIME * (amount+1)) +//VOREstation edit end /obj/effect/decal/cleanable/blood/update_icon() if(basecolor == "rainbow") basecolor = get_random_colour(1) diff --git a/code/game/objects/items/contraband_vr.dm b/code/game/objects/items/contraband_vr.dm index ad39c1957f..e6110d1a21 100644 --- a/code/game/objects/items/contraband_vr.dm +++ b/code/game/objects/items/contraband_vr.dm @@ -7,91 +7,97 @@ w_class = ITEMSIZE_HUGE /obj/item/stolenpackage/attack_self(mob/user as mob) - // Another way of doing this. Commented out because the other method is better for this application. - /*var/spawn_chance = rand(1,100) - switch(spawn_chance) - if(0 to 49) - new /obj/random/gun/guarenteed(usr.loc) - to_chat(usr, "You got a thing!") - if(50 to 99) - new /obj/item/weapon/bikehorn/rubberducky(usr.loc) - new /obj/item/weapon/bikehorn(usr.loc) - to_chat(usr, "You got two things!") - if(100) - to_chat(usr, "The box contained nothing!") - return - */ - var/loot = pick(/obj/effect/landmark/costume, - /obj/item/clothing/glasses/thermal, - /obj/item/clothing/gloves/combat, - /obj/item/clothing/head/bearpelt, - /obj/item/clothing/mask/balaclava, - /obj/item/clothing/mask/horsehead, - /obj/item/clothing/mask/muzzle, - /obj/item/clothing/suit/armor/heavy, - /obj/item/clothing/suit/armor/laserproof, - /obj/item/clothing/suit/armor/vest, - /obj/item/device/chameleon, - /obj/item/device/pda/clown, - /obj/item/device/pda/mime, - /obj/item/device/pda/syndicate, - /obj/item/mecha_parts/chassis/phazon, - /obj/item/mecha_parts/part/phazon_head, - /obj/item/mecha_parts/part/phazon_left_arm, - /obj/item/mecha_parts/part/phazon_left_leg, - /obj/item/mecha_parts/part/phazon_right_arm, - /obj/item/mecha_parts/part/phazon_right_leg, - /obj/item/mecha_parts/part/phazon_torso, - /obj/item/weapon/circuitboard/mecha/phazon/targeting, - /obj/item/weapon/circuitboard/mecha/phazon/peripherals, - /obj/item/weapon/circuitboard/mecha/phazon/main, - /obj/item/device/bodysnatcher, - /obj/item/device/mindbinder, //CHOMPAdd - /obj/item/weapon/bluespace_harpoon, - /obj/item/clothing/accessory/permit/gun, - /obj/item/device/perfect_tele, - /obj/item/device/sleevemate, - /obj/item/weapon/disk/nifsoft/compliance, - /obj/item/weapon/implanter/compliance, - /obj/item/seeds/ambrosiadeusseed, - /obj/item/seeds/ambrosiavulgarisseed, - /obj/item/seeds/libertymycelium, - /obj/fiftyspawner/platinum, - /obj/item/toy/nanotrasenballoon, - /obj/item/toy/syndicateballoon, - /obj/item/weapon/aiModule/syndicate, - /obj/item/weapon/book/manual/wiki/engineering_hacking, // CHOMPEdit - /obj/item/weapon/card/emag, - /obj/item/weapon/card/emag_broken, - /obj/item/weapon/card/id/syndicate, - /obj/item/poster, - /obj/item/weapon/disposable_teleporter, - /obj/item/weapon/grenade/flashbang/clusterbang, - /obj/item/weapon/grenade/flashbang/clusterbang, - /obj/item/weapon/grenade/spawnergrenade/spesscarp, - /obj/item/weapon/melee/energy/sword, - /obj/item/weapon/melee/telebaton, - /obj/item/weapon/pen/reagent/paralysis, - /obj/item/weapon/pickaxe/diamonddrill, - /obj/item/weapon/reagent_containers/food/drinks/bottle/pwine, - /obj/item/weapon/reagent_containers/food/snacks/carpmeat, - /obj/item/weapon/reagent_containers/food/snacks/clownstears, - /obj/item/weapon/reagent_containers/food/snacks/xenomeat, - /obj/item/weapon/reagent_containers/glass/beaker/neurotoxin, - /obj/item/weapon/rig/combat, - /obj/item/weapon/shield/energy, - /obj/item/weapon/stamp/centcomm, - /obj/item/weapon/stamp/solgov, - /obj/item/weapon/storage/fancy/cigar/havana, - /obj/item/xenos_claw, - /obj/random/contraband, - /obj/random/contraband, - /obj/random/contraband, - /obj/random/contraband, - /obj/random/weapon/guarenteed) - new loot(usr.loc) - to_chat(user, "You unwrap the package.") - qdel(src) + // Another way of doing this. Commented out because the other method is better for this application. + /*var/spawn_chance = rand(1,100) + switch(spawn_chance) + if(0 to 49) + new /obj/random/gun/guarenteed(usr.loc) + to_chat(usr, "You got a thing!") + if(50 to 99) + new /obj/item/weapon/bikehorn/rubberducky(usr.loc) + new /obj/item/weapon/bikehorn(usr.loc) + to_chat(usr, "You got two things!") + if(100) + to_chat(usr, "The box contained nothing!") + return + */ + var/loot = pick(/obj/effect/landmark/costume, + /obj/item/clothing/glasses/thermal, + /obj/item/clothing/gloves/combat, + /obj/item/clothing/head/bearpelt, + /obj/item/clothing/mask/balaclava, + /obj/item/clothing/mask/horsehead, + /obj/item/clothing/mask/muzzle, + /obj/item/clothing/suit/armor/heavy, + /obj/item/clothing/suit/armor/laserproof, + /obj/item/clothing/suit/armor/vest, + /obj/item/device/chameleon, + /obj/item/device/pda/clown, + /obj/item/device/pda/mime, + /obj/item/device/pda/syndicate, + /obj/item/mecha_parts/chassis/phazon, + /obj/item/mecha_parts/part/phazon_head, + /obj/item/mecha_parts/part/phazon_left_arm, + /obj/item/mecha_parts/part/phazon_left_leg, + /obj/item/mecha_parts/part/phazon_right_arm, + /obj/item/mecha_parts/part/phazon_right_leg, + /obj/item/mecha_parts/part/phazon_torso, + /obj/item/weapon/circuitboard/mecha/phazon/targeting, + /obj/item/weapon/circuitboard/mecha/phazon/peripherals, + /obj/item/weapon/circuitboard/mecha/phazon/main, + /obj/item/device/bodysnatcher, + /obj/item/weapon/bluespace_harpoon, + /obj/item/clothing/accessory/permit/gun, + /obj/item/device/perfect_tele, + /obj/item/device/sleevemate, + /obj/item/weapon/disk/nifsoft/compliance, + /obj/item/weapon/implanter/compliance, + /obj/item/seeds/ambrosiadeusseed, + /obj/item/seeds/ambrosiavulgarisseed, + /obj/item/seeds/libertymycelium, + /obj/fiftyspawner/platinum, + /obj/item/toy/nanotrasenballoon, + /obj/item/toy/syndicateballoon, + /obj/item/weapon/aiModule/syndicate, + /obj/item/weapon/book/manual/wiki/engineering_hacking, // CHOMPEdit + /obj/item/weapon/card/emag, + /obj/item/weapon/card/emag_broken, + /obj/item/weapon/card/id/syndicate, + /obj/item/poster, + /obj/item/weapon/disposable_teleporter, + /obj/item/weapon/grenade/flashbang/clusterbang, + /obj/item/weapon/grenade/flashbang/clusterbang, + /obj/item/weapon/grenade/spawnergrenade/spesscarp, + /obj/item/weapon/melee/energy/sword, + /obj/item/weapon/melee/telebaton, + /obj/item/weapon/pen/reagent/paralysis, + /obj/item/weapon/pickaxe/diamonddrill, + /obj/item/weapon/reagent_containers/food/drinks/bottle/pwine, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat, + /obj/item/weapon/reagent_containers/food/snacks/clownstears, + /obj/item/weapon/reagent_containers/food/snacks/xenomeat, + /obj/item/weapon/reagent_containers/glass/beaker/neurotoxin, + /obj/item/weapon/rig/combat, + /obj/item/weapon/shield/energy, + /obj/item/weapon/stamp/centcomm, + /obj/item/weapon/stamp/solgov, + /obj/item/weapon/storage/fancy/cigar/havana, + /obj/item/xenos_claw, + /obj/random/contraband, + /obj/random/contraband, + /obj/random/contraband, + /obj/random/contraband, + /obj/random/weapon/guarenteed) + //VOREstation edit - Randomized map objects were put in loot piles, so handle them... + if(istype(loot,/obj/random)) + var/obj/random/randy = loot + var/new_I = randy.spawn_item() + qdel(loot) + loot = new_I // swap it + //VOREstation edit end + new loot(usr.loc) + to_chat(user, "You unwrap the package.") + qdel(src) /obj/item/weapon/miscdisc name = "strange artefact" diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 1aa4e7c1fa..150437be33 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -97,6 +97,8 @@ return if(W.loc != user) // This should stop mounted modules ending up outside the module. return + if(istype(W, /obj/item/weapon/grab)) //VOREstation edit: we don't want to drop grabs into the crate + return user.drop_item() if(W) W.forceMove(src.loc) @@ -746,4 +748,4 @@ icon = 'icons/obj/closets/miningcar.dmi' closet_appearance = null open_sound = 'sound/effects/wooden_closet_open.ogg' - close_sound = 'sound/effects/wooden_closet_close.ogg' \ No newline at end of file + close_sound = 'sound/effects/wooden_closet_close.ogg' diff --git a/code/game/objects/structures/gravemarker.dm b/code/game/objects/structures/gravemarker.dm index 1b48d96cea..1edcc6ee7b 100644 --- a/code/game/objects/structures/gravemarker.dm +++ b/code/game/objects/structures/gravemarker.dm @@ -127,3 +127,22 @@ src.set_dir(turn(src.dir, 270)) return + +//VOREstation edit: counter-clockwise rotation +/obj/structure/gravemarker/verb/rotate_counterclockwise() + set name = "Rotate Grave Marker Counter-Clockwise" + set category = "Object" + set src in oview(1) + + if(anchored) + return + + if(!usr || !isturf(usr.loc)) + return + if(usr.stat || usr.restrained()) + return + if(ismouse(usr) || (isobserver(usr) && !CONFIG_GET(flag/ghost_interaction))) // CHOMPEdit + return + + src.set_dir(turn(src.dir, 90)) + return diff --git a/code/game/objects/structures/loot_piles.dm b/code/game/objects/structures/loot_piles.dm index 31049b51ec..a4703fc00e 100644 --- a/code/game/objects/structures/loot_piles.dm +++ b/code/game/objects/structures/loot_piles.dm @@ -93,6 +93,14 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh else // Welp. loot = produce_common_item() + //VOREstation edit - Randomized map objects were put in loot piles, so handle them... + if(istype(loot,/obj/random)) + var/obj/random/randy = loot + var/new_I = randy.spawn_item() + qdel(loot) + loot = new_I // swap it + //VOREstation edit end + if(loot) searched_by |= user.ckey loot.forceMove(get_turf(src)) diff --git a/code/game/objects/structures/trash_pile_vr.dm b/code/game/objects/structures/trash_pile_vr.dm index 96f7a9f67f..34648f9227 100644 --- a/code/game/objects/structures/trash_pile_vr.dm +++ b/code/game/objects/structures/trash_pile_vr.dm @@ -159,6 +159,14 @@ else if(luck <= chance_alpha+chance_beta+chance_gamma) I = produce_gamma_item() + //VOREstation edit - Randomized map objects were put in loot piles, so handle them... + if(istype(I,/obj/random)) + var/obj/random/randy = I + var/new_I = randy.spawn_item() + qdel(I) + I = new_I // swap it + //VOREstation edit end + //We either have an item to hand over or we don't, at this point! if(I) searchedby += user.ckey diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 44bb6e45a7..e251aa38c3 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -290,6 +290,27 @@ update_icon() return +//VOREstation edit: counter-clockwise rotation +/obj/structure/windoor_assembly/verb/rotate_counterclockwise() + set name = "Rotate Windoor Assembly Counter-Clockwise" + set category = "Object" + set src in oview(1) + + if (src.anchored) + to_chat(usr,"It is fastened to the floor; therefore, you can't rotate it!") + return 0 + if(src.state != "01") + update_nearby_tiles(need_rebuild=1) //Compel updates before + + src.set_dir(turn(src.dir, 90)) + + if(src.state != "01") + update_nearby_tiles(need_rebuild=1) + + update_icon() + return +//VOREstation edit end + //Flips the windoor assembly, determines whather the door opens to the left or the right /obj/structure/windoor_assembly/verb/flip() set name = "Flip Windoor Assembly" diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 7c6ce61458..565be2abc1 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -139,6 +139,15 @@ set_dir(turn(dir, 270)) +//VOREstation edit: counter-clockwise rotation +/obj/item/device/assembly/infra/verb/rotate_counterclockwise() + set name = "Rotate Infrared Laser Counter-Clockwise" + set category = "Object" + set src in usr + + set_dir(turn(dir, 90)) +//VOREstation edit end + /***************************IBeam*********************************/ /obj/effect/beam/i_beam diff --git a/code/modules/economy/vending.dm b/code/modules/economy/vending.dm index 99178422c4..7363b67cd8 100644 --- a/code/modules/economy/vending.dm +++ b/code/modules/economy/vending.dm @@ -684,6 +684,23 @@ GLOBAL_LIST_EMPTY(vending_products) src.set_dir(turn(src.dir, 270)) return 1 +//VOREstation edit: counter-clockwise rotation +/obj/machinery/vending/verb/rotate_counterclockwise() + set name = "Rotate Vending Machine Counter-Clockwise" + set category = "Object" + set src in oview(1) + + if (src.can_rotate == 0) + to_chat(usr, "\The [src] cannot be rotated.") + return 0 + + if (src.anchored || usr:stat) + to_chat(usr, "It is bolted down!") + return 0 + src.set_dir(turn(src.dir, 90)) + return 1 +//VOREstation edit end + /obj/machinery/vending/verb/check_logs() set name = "Check Vending Logs" set category = "Object" diff --git a/code/modules/flufftext/look_up.dm b/code/modules/flufftext/look_up.dm index 271af34598..25d56d27f5 100644 --- a/code/modules/flufftext/look_up.dm +++ b/code/modules/flufftext/look_up.dm @@ -17,7 +17,7 @@ return else // They're outside and hopefully on a planet. - if(!(T.z in SSplanets.z_to_planet) || !(SSplanets.z_to_planet[T.z])) + if(T.z <= 0 || SSplanets.z_to_planet.len < T.z || !(SSplanets.z_to_planet[T.z])) //VOREstation edit - removed broken in list check; use length limit instead. to_chat(usr, span("warning", "You appear to be outside, but not on a planet... Something is wrong.")) return var/datum/planet/P = SSplanets.z_to_planet[T.z] diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index 99a8e8b1ab..6443e346d8 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -515,3 +515,18 @@ src.set_dir(turn(src.dir, 270)) return 1 + +//VOREstation edit: counter-clockwise rotation +/obj/machinery/mining/brace/verb/rotate_counterclockwise() + set name = "Rotate Brace Counter-Clockwise" + set category = "Object" + set src in oview(1) + + if(usr.stat) return + + if (src.anchored) + to_chat(usr, "It is anchored in place!") + return 0 + + src.set_dir(turn(src.dir, 90)) + return 1 diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm index 8fa5f0bd92..6497b18a9c 100644 --- a/code/modules/mob/living/bot/bot.dm +++ b/code/modules/mob/living/bot/bot.dm @@ -47,9 +47,9 @@ /mob/living/bot/New() ..() - update_icons() + //update_icons() //VOREstation edit: moved to Init - default_language = GLOB.all_languages[LANGUAGE_GALCOM] + //default_language = GLOB.all_languages[LANGUAGE_GALCOM] //VOREstation edit: moved to Init botcard = new /obj/item/weapon/card/id(src) botcard.access = botcard_access.Copy() @@ -66,6 +66,8 @@ . = ..() if(on) turn_on() // Update lights and other stuff + update_icons() //VOREstation edit - overlay runtime fix + default_language = GLOB.all_languages[LANGUAGE_GALCOM] //VOREstation edit - runtime fix /mob/living/bot/Life() ..() diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm index f125b59013..f64b596f3a 100644 --- a/code/modules/multiz/movement.dm +++ b/code/modules/multiz/movement.dm @@ -340,6 +340,11 @@ /obj/mecha/can_fall() return TRUE +// VOREstation edit - Falling vehicles. +/obj/vehicle/can_fall() + return TRUE +// VOREstation edit end + /obj/item/pipe/can_fall() . = ..() diff --git a/code/modules/power/lighting_vr.dm b/code/modules/power/lighting_vr.dm index cc4171120b..9950d42057 100644 --- a/code/modules/power/lighting_vr.dm +++ b/code/modules/power/lighting_vr.dm @@ -85,6 +85,16 @@ src.set_dir(turn(src.dir, 270)) +/obj/machinery/light_construct/floortube/verb/rotate_counterclockwise() + set name = "Rotate Fixture Counter-Clockwise" + set category = "Object" + set src in view(1) + + if (usr.stat || usr.restrained() || anchored) + return + + src.set_dir(turn(src.dir, 90)) + /obj/machinery/light_construct/floortube/update_icon() switch(stage) if(1) @@ -260,4 +270,3 @@ /obj/machinery/light/broken/small/Initialize() . = ..() broken() - diff --git a/code/modules/projectiles/guns/energy/cell_loaded_vr/cell_loaded.dm b/code/modules/projectiles/guns/energy/cell_loaded_vr/cell_loaded.dm index b1ac9f5085..e30a26c847 100644 --- a/code/modules/projectiles/guns/energy/cell_loaded_vr/cell_loaded.dm +++ b/code/modules/projectiles/guns/energy/cell_loaded_vr/cell_loaded.dm @@ -15,7 +15,7 @@ caliber = "nsfw" - origin_tech = list(TECH_COMBAT = 7, TECH_MATERIAL = 6, TECH_MAGNETS = 4) + origin_tech = list(TECH_COMBAT = 7, TECH_MATERIAL = 6, TECH_MAGNET = 4) fire_sound = 'sound/weapons/Taser.ogg' @@ -66,8 +66,8 @@ chambered = new_batt update_charge() update_icon() - var/mob/living/M = loc // TGMC Ammo HUD - if(istype(M)) // TGMC Ammo HUD + var/mob/living/M = loc // TGMC Ammo HUD + if(istype(M)) // TGMC Ammo HUD M?.hud_used.update_ammo_hud(M, src) /obj/item/weapon/gun/projectile/cell_loaded/attack_self(mob/user) @@ -144,7 +144,7 @@ desc = "A microbattery holder for a cell-based variable weapon." icon = 'icons/obj/ammo_vr.dmi' icon_state = "cell_mag" - origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 5, TECH_MAGNETS = 3) + origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 5, TECH_MAGNET = 3) caliber = "nsfw" ammo_type = /obj/item/ammo_casing/microbattery initial_ammo = 0 @@ -285,7 +285,7 @@ new /obj/item/ammo_casing/microbattery/medical/stabilize2(src) new /obj/item/ammo_casing/microbattery/medical/haste(src) new /obj/item/ammo_casing/microbattery/medical/resist(src) - + // TGMC Ammo HUD: Custom handling for cell-loaded weaponry. /* /obj/item/weapon/gun/projectile/cell_loaded/get_ammo_type() @@ -300,7 +300,7 @@ return 0 // We're not chambered, so we have 0 rounds loaded. var/obj/item/ammo_casing/microbattery/batt = chambered - + var/shots if(ammo_magazine) // Check how much ammo we have for(var/obj/item/ammo_casing/microbattery/bullet as anything in ammo_magazine.stored_ammo) @@ -311,4 +311,4 @@ else // We're out of shots. return 0 else // Else, we're unloaded/don't have a magazine. - return 0 \ No newline at end of file + return 0 diff --git a/code/modules/projectiles/guns/energy/cell_loaded_vr/ml3m_cells.dm b/code/modules/projectiles/guns/energy/cell_loaded_vr/ml3m_cells.dm new file mode 100644 index 0000000000..6a73a38e33 --- /dev/null +++ b/code/modules/projectiles/guns/energy/cell_loaded_vr/ml3m_cells.dm @@ -0,0 +1,356 @@ +// The Casing // +/obj/item/ammo_casing/microbattery/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" + origin_tech = list(TECH_BIO = 2, TECH_MATERIAL = 1, TECH_MAGNET = 2) + +/obj/item/projectile/beam/medical_cell + name = "\improper healing beam" + icon_state = "medbeam" + nodamage = 1 + damage = 0 + check_armour = "laser" + light_color = "#80F5FF" + hud_state = "laser_disabler" + + combustion = FALSE + + can_miss = 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/medical_cell/on_hit(var/mob/living/carbon/human/target) //what does it do when it hits someone? + return + +/obj/item/ammo_casing/microbattery/medical/brute + name = "\'ML-3/M\' nanite cell - BRUTE" + type_color = "#BF0000" + type_name = "BRUTE" + projectile_type = /obj/item/projectile/beam/medical_cell/brute + +/obj/item/projectile/beam/medical_cell/brute/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + if(target.stat != DEAD) + target.adjustBruteLoss(-10) + else + return 1 + +/obj/item/ammo_casing/microbattery/medical/burn + name = "\'ML-3/M\' nanite cell - BURN" + type_color = "#FF8000" + type_name = "BURN" + projectile_type = /obj/item/projectile/beam/medical_cell/burn + +/obj/item/projectile/beam/medical_cell/burn/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + if(target.stat != DEAD) + target.adjustFireLoss(-10) + else + return 1 + +/obj/item/ammo_casing/microbattery/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/medical_cell/stabilize + +/obj/item/projectile/beam/medical_cell/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/microbattery/medical/toxin + name = "\'ML-3/M\' nanite cell - TOXIN" + type_color = "#00A000" + type_name = "TOXIN" + projectile_type = /obj/item/projectile/beam/medical_cell/toxin + +/obj/item/projectile/beam/medical_cell/toxin/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + if(target.stat != DEAD) + target.adjustToxLoss(-10) + else + return 1 + +/obj/item/ammo_casing/microbattery/medical/omni + name = "\'ML-3/M\' nanite cell - OMNI" + type_color = "#8040FF" + type_name = "OMNI" + projectile_type = /obj/item/projectile/beam/medical_cell/omni + +/obj/item/projectile/beam/medical_cell/omni/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + if(target.stat != DEAD) + target.adjustBruteLoss(-5) + target.adjustFireLoss(-5) + target.adjustToxLoss(-5) + target.adjustOxyLoss(-20) + else + return 1 + +/obj/item/ammo_casing/microbattery/medical/antirad + name = "\'ML-3/M\' nanite cell - ANTIRAD" + type_color = "#008000" + type_name = "ANTIRAD" + projectile_type = /obj/item/projectile/beam/medical_cell/antirad + +/obj/item/projectile/beam/medical_cell/antirad/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + if(target.stat != DEAD) + 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/microbattery/medical/brute2 + name = "\'ML-3/M\' nanite cell - BRUTE-II" + type_color = "#BF0000" + type_name = "BRUTE-II" + projectile_type = /obj/item/projectile/beam/medical_cell/brute2 + +/obj/item/projectile/beam/medical_cell/brute2/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + if(target.stat != DEAD) + target.adjustBruteLoss(-20) + else + return 1 + +/obj/item/ammo_casing/microbattery/medical/burn2 + name = "\'ML-3/M\' nanite cell - BURN-II" + type_color = "#FF8000" + type_name = "BURN-II" + projectile_type = /obj/item/projectile/beam/medical_cell/burn2 + +/obj/item/projectile/beam/medical_cell/burn2/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + if(target.stat != DEAD) + target.adjustFireLoss(-20) + else + return 1 + +/obj/item/ammo_casing/microbattery/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/medical_cell/stabilize2 + +/obj/item/projectile/beam/medical_cell/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/microbattery/medical/omni2 + name = "\'ML-3/M\' nanite cell - OMNI-II" + type_color = "#8040FF" + type_name = "OMNI-II" + projectile_type = /obj/item/projectile/beam/medical_cell/omni2 + +/obj/item/projectile/beam/medical_cell/omni2/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + if(target.stat != DEAD) + target.adjustBruteLoss(-10) + target.adjustFireLoss(-10) + target.adjustToxLoss(-10) + target.adjustOxyLoss(-60) + else + return 1 + +/obj/item/ammo_casing/microbattery/medical/toxin2 + name = "\'ML-3/M\' nanite cell - TOXIN-II" + type_color = "#00A000" + type_name = "TOXIN-II" + projectile_type = /obj/item/projectile/beam/medical_cell/toxin2 + +/obj/item/projectile/beam/medical_cell/toxin2/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + if(target.stat != DEAD) + target.adjustToxLoss(-20) + else + return 1 + +/obj/item/ammo_casing/microbattery/medical/haste + name = "\'ML-3/M\' nanite cell - HASTE" + type_color = "#FF3300" + type_name = "HASTE" + projectile_type = /obj/item/projectile/beam/medical_cell/haste + +/obj/item/projectile/beam/medical_cell/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 = -0.5 //a little faster! + evasion = 1.15 //and a little harder to hit! + +/obj/item/ammo_casing/microbattery/medical/resist + name = "\'ML-3/M\' nanite cell - RESIST" + type_color = "#555555" + type_name = "RESIST" + projectile_type = /obj/item/projectile/beam/medical_cell/resist + +/obj/item/projectile/beam/medical_cell/resist/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 15% of all incoming damage and stuns!" + mob_overlay_state = "repel_missiles" + stacks = MODIFIER_STACK_EXTEND + disable_duration_percent = 0.85 + incoming_damage_percent = 0.85 + +/obj/item/ammo_casing/microbattery/medical/corpse_mend + name = "\'ML-3/M\' nanite cell - CORPSE MEND" + type_color = "#669900" + type_name = "CORPSE MEND" + projectile_type = /obj/item/projectile/beam/medical_cell/corpse_mend + +/obj/item/projectile/beam/medical_cell/corpse_mend/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 + +/obj/item/ammo_casing/microbattery/medical/brute3 + name = "\'ML-3/M\' nanite cell - BRUTE-III" + type_color = "#BF0000" + type_name = "BRUTE-III" + projectile_type = /obj/item/projectile/beam/medical_cell/brute3 + +/obj/item/projectile/beam/medical_cell/brute3/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + if(target.stat != DEAD) + target.adjustBruteLoss(-40) + else + return 1 + +/obj/item/ammo_casing/microbattery/medical/burn3 + name = "\'ML-3/M\' nanite cell - BURN-III" + type_color = "#FF8000" + type_name = "BURN-III" + projectile_type = /obj/item/projectile/beam/medical_cell/burn3 + +/obj/item/projectile/beam/medical_cell/burn3/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + if(target.stat != DEAD) + target.adjustFireLoss(-40) + else + return 1 + +/obj/item/ammo_casing/microbattery/medical/toxin3 + name = "\'ML-3/M\' nanite cell - TOXIN-III" + type_color = "#00A000" + type_name = "TOXIN-III" + projectile_type = /obj/item/projectile/beam/medical_cell/toxin3 + +/obj/item/projectile/beam/medical_cell/toxin3/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + if(target.stat != DEAD) + target.adjustToxLoss(-40) + else + return 1 + +/obj/item/ammo_casing/microbattery/medical/omni3 + name = "\'ML-3/M\' nanite cell - OMNI-III" + type_color = "#8040FF" + type_name = "OMNI-III" + projectile_type = /obj/item/projectile/beam/medical_cell/omni3 + +/obj/item/projectile/beam/medical_cell/omni3/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + if(target.stat != DEAD) + target.adjustBruteLoss(-20) + target.adjustFireLoss(-20) + target.adjustToxLoss(-20) + target.adjustOxyLoss(-120) + else + return 1 + +// Illegal cells! +/obj/item/ammo_casing/microbattery/medical/shrink + name = "\'ML-3/M\' nanite cell - SHRINK" + type_color = "#910ffc" + type_name = "SHRINK" + projectile_type = /obj/item/projectile/beam/medical_cell/shrink + +/obj/item/projectile/beam/medical_cell/shrink/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + target.resize(0.5) + target.show_message(span_blue("The beam fires into your body, changing your size!")) + target.update_icon() + else + return 1 + +/obj/item/ammo_casing/microbattery/medical/grow + name = "\'ML-3/M\' nanite cell - GROW" + type_color = "#fc0fdc" + type_name = "GROW" + projectile_type = /obj/item/projectile/beam/medical_cell/grow + +/obj/item/projectile/beam/medical_cell/grow/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + target.resize(2.0) + target.show_message(span_blue("The beam fires into your body, changing your size!")) + target.update_icon() + else + return 1 + +/obj/item/ammo_casing/microbattery/medical/normalsize + name = "\'ML-3/M\' nanite cell - NORMALSIZE" + type_color = "#C70FEC" + type_name = "NORMALSIZE" + projectile_type = /obj/item/projectile/beam/medical_cell/normalsize + +/obj/item/projectile/beam/medical_cell/normalsize/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + target.resize(1) + target.show_message(span_blue("The beam fires into your body, changing your size!")) + target.update_icon() + else + return 1 diff --git a/code/modules/projectiles/guns/energy/cell_loaded_vr/nerd_cells.dm b/code/modules/projectiles/guns/energy/cell_loaded_vr/nerd_cells.dm index 14e0c5dea2..4ae31c5d3b 100644 --- a/code/modules/projectiles/guns/energy/cell_loaded_vr/nerd_cells.dm +++ b/code/modules/projectiles/guns/energy/cell_loaded_vr/nerd_cells.dm @@ -4,7 +4,7 @@ desc = "A miniature nanite fabricator for a medigun." catalogue_data = list(/datum/category_item/catalogue/information/organization/vey_med) icon_state = "nerd_batt" // CH edit - Changes ML3M to NERD - origin_tech = list(TECH_BIO = 2, TECH_MATERIAL = 1, TECH_MAGNETS = 2) + origin_tech = list(TECH_BIO = 2, TECH_MATERIAL = 1, TECH_MAGNET = 2) /obj/item/projectile/beam/medical_cell name = "\improper healing beam" @@ -357,4 +357,4 @@ target.show_message(span_blue("The beam fires into your body, changing your size!")) target.update_icon() else - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/projectiles/guns/energy/cell_loaded_vr/nsfw.dm b/code/modules/projectiles/guns/energy/cell_loaded_vr/nsfw.dm index d8f9cfd57c..232165d88d 100644 --- a/code/modules/projectiles/guns/energy/cell_loaded_vr/nsfw.dm +++ b/code/modules/projectiles/guns/energy/cell_loaded_vr/nsfw.dm @@ -19,7 +19,7 @@ description_antag = "" allowed_magazines = list(/obj/item/ammo_magazine/cell_mag/combat/prototype) - origin_tech = list(TECH_COMBAT = 7, TECH_MATERIAL = 4, TECH_MAGNETS = 3) + origin_tech = list(TECH_COMBAT = 7, TECH_MATERIAL = 4, TECH_MAGNET = 3) // The Magazine // @@ -39,7 +39,7 @@ max_ammo = 2 x_offset = 6 catalogue_data = null - origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_MAGNETS = 2) + origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_MAGNET = 2) // The Pack // @@ -76,4 +76,4 @@ new /obj/item/ammo_casing/microbattery/combat/stun(src) new /obj/item/ammo_casing/microbattery/combat/stun(src) new /obj/item/ammo_casing/microbattery/combat/net(src) - new /obj/item/ammo_casing/microbattery/combat/ion(src) \ No newline at end of file + new /obj/item/ammo_casing/microbattery/combat/ion(src) diff --git a/code/modules/projectiles/guns/energy/cell_loaded_vr/nsfw_cells.dm b/code/modules/projectiles/guns/energy/cell_loaded_vr/nsfw_cells.dm index c74c8520e5..2a498a7344 100644 --- a/code/modules/projectiles/guns/energy/cell_loaded_vr/nsfw_cells.dm +++ b/code/modules/projectiles/guns/energy/cell_loaded_vr/nsfw_cells.dm @@ -3,7 +3,7 @@ name = "\'NSCW\' microbattery - UNKNOWN" desc = "A miniature battery for an energy weapon." catalogue_data = list(/datum/category_item/catalogue/information/organization/hephaestus) - origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 1, TECH_MAGNETS = 2) + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 1, TECH_MAGNET = 2) /obj/item/ammo_casing/microbattery/combat/lethal name = "\'NSCW\' microbattery - LETHAL" @@ -112,4 +112,4 @@ SStranscore.m_backup(L.mind,nif,one_time = TRUE) L.gib() - ..() \ No newline at end of file + ..() diff --git a/code/modules/reagents/machinery/dispenser/dispenser2.dm b/code/modules/reagents/machinery/dispenser/dispenser2.dm index 56ca5f7eda..aeafc256a1 100644 --- a/code/modules/reagents/machinery/dispenser/dispenser2.dm +++ b/code/modules/reagents/machinery/dispenser/dispenser2.dm @@ -47,6 +47,19 @@ src.set_dir(turn(src.dir, 270)) return 1 +//VOREstation edit: counter-clockwise rotation +/obj/machinery/chemical_dispenser/verb/rotate_counterclockwise() + set name = "Rotate Dispenser Counter-Clockwise" + set category = "Object" + set src in oview(1) + + if (src.anchored || usr:stat) + to_chat(usr, "It is fastened down!") + return 0 + src.set_dir(turn(src.dir, 90)) + return 1 +//VOREstation edit end + /obj/machinery/chemical_dispenser/proc/add_cartridge(obj/item/weapon/reagent_containers/chem_disp_cartridge/C, mob/user) if(!istype(C)) if(user) diff --git a/code/modules/reagents/machinery/dispenser/reagent_tank.dm b/code/modules/reagents/machinery/dispenser/reagent_tank.dm index 9196fc511d..89a97dc9fd 100644 --- a/code/modules/reagents/machinery/dispenser/reagent_tank.dm +++ b/code/modules/reagents/machinery/dispenser/reagent_tank.dm @@ -359,6 +359,19 @@ src.set_dir(turn(src.dir, 270)) return 1 +//VOREstation edit: counter-clockwise rotation +/obj/structure/reagent_dispensers/water_cooler/verb/rotate_counterclockwise() + set name = "Rotate Cooler Counter-Clockwise" + set category = "Object" + set src in oview(1) + + if (src.anchored || usr:stat) + to_chat(usr, "It is fastened to the floor!") + return 0 + src.set_dir(turn(src.dir, 90)) + return 1 +//VOREstation edit end + /obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/I as obj, mob/user as mob) if(I.has_tool_quality(TOOL_WRENCH)) src.add_fingerprint(user) diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index 9d8fe599f0..c3ea39c2ce 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -136,6 +136,23 @@ src.set_dir(turn(src.dir, 270)) update() +//VOREstation edit: counter-clockwise rotation +/obj/structure/disposalconstruct/verb/rotate_counterclockwise() + set category = "Object" + set name = "Rotate Pipe Counter-Clockwise" + set src in view(1) + + if(usr.stat) + return + + if(anchored) + to_chat(usr, "You must unfasten the pipe before rotating it.") + return + + src.set_dir(turn(src.dir, 90)) + update() +//VOREstation edit end + /obj/structure/disposalconstruct/verb/flip() set category = "Object" set name = "Flip Pipe" diff --git a/code/modules/shieldgen/shield_capacitor.dm b/code/modules/shieldgen/shield_capacitor.dm index f650a3d15b..35a1dc0bbf 100644 --- a/code/modules/shieldgen/shield_capacitor.dm +++ b/code/modules/shieldgen/shield_capacitor.dm @@ -146,3 +146,16 @@ src.set_dir(turn(src.dir, 270)) return + +//VOREstation edit: counter-clockwise rotation +/obj/machinery/shield_capacitor/verb/rotate_counterclockwise() + set name = "Rotate Capacitor Counter-Clockwise" + set category = "Object" + set src in oview(1) + + if (src.anchored) + to_chat(usr, "It is fastened to the floor!") + return + + src.set_dir(turn(src.dir, 90)) + return diff --git a/code/modules/vehicles/train.dm b/code/modules/vehicles/train.dm index 682eb8bea5..9509772ac6 100644 --- a/code/modules/vehicles/train.dm +++ b/code/modules/vehicles/train.dm @@ -38,6 +38,8 @@ unattach() /obj/vehicle/train/Bump(atom/Obstacle) + if(istype(Obstacle,/obj/structure/stairs)) // VOREstation edit - Stair support for towing vehicles + return ..() if(!istype(Obstacle, /atom/movable)) return var/atom/movable/A = Obstacle diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index 8fb4a77b4f..c9e95ccc1a 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -80,16 +80,20 @@ riding_datum.handle_vehicle_offsets() // So the person in back goes to the front. /obj/vehicle/Move(var/newloc, var/direction, var/movetime) - if(world.time < l_move_time + move_delay) //This AND the riding datum move speed limit? + // VOREstation edit - Zmoving for falling + var/turf/newturf = newloc + var/zmove = (newturf && z != newturf.z) + + if(!zmove && world.time < l_move_time + move_delay) //This AND the riding datum move speed limit? // VOREstation edit end return - if(mechanical && on && powered && cell.charge < charge_use) + if(!zmove && mechanical && on && powered && cell.charge < charge_use) // VOREstation edit - zmove doesn't run this turn_off() return . = ..() - if(mechanical && on && powered) + if(!zmove && mechanical && on && powered) // VOREstation edit - zmove doesn't run this cell.use(charge_use) //Dummy loads do not have to be moved as they are just an overlay diff --git a/code/modules/virus2/items_devices.dm b/code/modules/virus2/items_devices.dm index 208e2d3a01..358b88845f 100644 --- a/code/modules/virus2/items_devices.dm +++ b/code/modules/virus2/items_devices.dm @@ -56,8 +56,10 @@ /obj/item/weapon/virusdish/attackby(var/obj/item/weapon/W as obj,var/mob/living/carbon/user as mob) if(istype(W,/obj/item/weapon/hand_labeler) || istype(W,/obj/item/weapon/reagent_containers/syringe)) - return - ..() + //VOREstation edit - Actually functional virus dishes + // Originally this returns, THEN calls ..() instead of returning the value of ..() + return ..() + //VOREstation edit end if(prob(50)) to_chat(user, "\The [src] shatters!") if(virus2.infectionchance > 0) diff --git a/code/modules/vore/eating/stumblevore_vr.dm b/code/modules/vore/eating/stumblevore_vr.dm index a979c210a8..491f1c85e8 100644 --- a/code/modules/vore/eating/stumblevore_vr.dm +++ b/code/modules/vore/eating/stumblevore_vr.dm @@ -14,14 +14,14 @@ /mob/living/Bump(atom/movable/AM) //. = ..() if(istype(AM, /mob/living)) - if(((confused || is_blind()) && stat == CONSCIOUS && prob(50) && m_intent=="run") || flying && flight_vore) + if(buckled != AM && (((confused || is_blind()) && stat == CONSCIOUS && prob(50) && m_intent=="run") || flying && flight_vore)) AM.stumble_into(src) return ..() // Because flips toggle density /mob/living/Crossed(var/atom/movable/AM) if(istype(AM, /mob/living) && isturf(loc) && AM != src) var/mob/living/AMV = AM - if(((AMV.confused || AMV.is_blind()) && AMV.stat == CONSCIOUS && prob(50) && AMV.m_intent=="run") || AMV.flying && AMV.flight_vore) + if(AMV.buckled != src && (((AMV.confused || AMV.is_blind()) && AMV.stat == CONSCIOUS && prob(50) && AMV.m_intent=="run") || AMV.flying && AMV.flight_vore)) stumble_into(AMV) ..() diff --git a/code/modules/vore/smoleworld/smoleworld_vr.dm b/code/modules/vore/smoleworld/smoleworld_vr.dm index 753f0775a7..975831c338 100644 --- a/code/modules/vore/smoleworld/smoleworld_vr.dm +++ b/code/modules/vore/smoleworld/smoleworld_vr.dm @@ -132,6 +132,14 @@ return src.set_dir(turn(src.dir, 270)) +/obj/structure/smoletrack/verb/rotate_counterclockwise() + set name = "Rotate Road Counter-Clockwise" + set category = "Object" + set src in oview(1) + if(ismouse(usr) || (isobserver(usr) && !CONFIG_GET(flag/ghost_interaction))) // CHOMPEdit + return + src.set_dir(turn(src.dir, 90)) + //color roads /obj/structure/smoletrack/verb/colorpieces() set name = "Use Color Pieces" diff --git a/modular_chomp/code/game/machinery/virtual_reality/vr_console.dm b/modular_chomp/code/game/machinery/virtual_reality/vr_console.dm index 025e59f81b..4de8644050 100644 --- a/modular_chomp/code/game/machinery/virtual_reality/vr_console.dm +++ b/modular_chomp/code/game/machinery/virtual_reality/vr_console.dm @@ -178,12 +178,18 @@ M.client.perspective = EYE_PERSPECTIVE M.client.eye = src M.loc = src - update_use_power(USE_POWER_ACTIVE) + //update_use_power(USE_POWER_ACTIVE) occupant = M update_icon() - enter_vr() + //VOREstation edit - crashes borers + if(!M.has_brain_worms()) + update_use_power(USE_POWER_ACTIVE) + enter_vr() + else + to_chat(user, "\The [src] rejects [M] with a sharp beep.") + //VOREstation edit end return /obj/machinery/vr_sleeper/proc/go_out(var/forced = TRUE)