From 4e94afffdaeef1967c3bf31524702eca0d53b213 Mon Sep 17 00:00:00 2001 From: Cerebulon Date: Mon, 23 Apr 2018 22:23:48 +0100 Subject: [PATCH 01/54] Removed ugly blood pools from sif mobs --- icons/jungle.dmi | Bin 72141 -> 72414 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/jungle.dmi b/icons/jungle.dmi index 484decf75eef8871b84ecd7922db3ff8064764a2..556b9ea6f3869ccbb1600801ecced50e72f92a5c 100644 GIT binary patch delta 23972 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 delta 23697 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 Date: Wed, 25 Apr 2018 07:38:01 +1000 Subject: [PATCH 02/54] Fixed tilted sprites --- code/game/turfs/turf.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 58da7d1129..724799ebde 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -137,6 +137,8 @@ turf/attackby(obj/item/weapon/W as obj, mob/user as mob) animate(O, transform = turn(O.transform, -40), time = 4) sleep(4) animate(O, transform = turn(O.transform, 20), time = 2) + sleep(2) + O.update_transform() /turf/Enter(atom/movable/mover as mob|obj, atom/forget as mob|obj|turf|area) if(movement_disabled && usr.ckey != movement_disabled_exception) From 3f6ed1cea729745b78d2a02671e8e727738940e0 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Wed, 25 Apr 2018 20:47:17 -0400 Subject: [PATCH 03/54] Fixes an exploit with circuit printers Allows you to print literally anything. --- code/modules/integrated_electronics/core/printer.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm index 3f83f07ec4..4dfd4e989a 100644 --- a/code/modules/integrated_electronics/core/printer.dm +++ b/code/modules/integrated_electronics/core/printer.dm @@ -168,6 +168,8 @@ else if(ispath(build_type, /obj/item/integrated_circuit)) var/obj/item/integrated_circuit/IC = build_type cost = initial(IC.w_class) + else + return if(metal - cost < 0) to_chat(usr, "You need [cost] metal to build that!.") From 9e4a625f18cc6d20324c8541fc4f7988f91356ca Mon Sep 17 00:00:00 2001 From: Anewbe Date: Wed, 25 Apr 2018 18:42:59 -0500 Subject: [PATCH 04/54] Hides jobs with the Never pref on late join --- code/modules/mob/new_player/new_player.dm | 19 ++++++++-- html/changelogs/Anewbe - Late Join Hidden.yml | 36 +++++++++++++++++++ 2 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 html/changelogs/Anewbe - Late Join Hidden.yml diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index ce34765ac0..99036e2e9d 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -2,9 +2,10 @@ /mob/new_player var/ready = 0 - var/spawning = 0//Referenced when you want to delete the new_player later on in the code. - var/totalPlayers = 0 //Player counts for the Lobby tab + var/spawning = 0 //Referenced when you want to delete the new_player later on in the code. + var/totalPlayers = 0 //Player counts for the Lobby tab var/totalPlayersReady = 0 + var/show_hidden_jobs = 0 //Show jobs that are set to "Never" in preferences var/datum/browser/panel universal_speak = 1 @@ -115,7 +116,7 @@ if(alert(src,"Are you sure you wish to observe? You will have to wait 5 minutes before being able to respawn!","Player Setup","Yes","No") == "Yes") if(!client) return 1 - + //Make a new mannequin quickly, and allow the observer to take the appearance var/mob/living/carbon/human/dummy/mannequin = new() client.prefs.dress_preview_mob(mannequin) @@ -285,6 +286,10 @@ handle_server_news() return + if(href_list["hidden_jobs"]) + show_hidden_jobs = !show_hidden_jobs + LateChoices() + /mob/new_player/proc/handle_server_news() if(!client) return @@ -412,10 +417,18 @@ dat += "The station is currently undergoing crew transfer procedures.
" dat += "Choose from the following open/valid positions:
" + dat += "[show_hidden_jobs ? "Hide":"Show"] Hidden Jobs.
" for(var/datum/job/job in job_master.occupations) if(job && IsJobAvailable(job.title)) + // Checks for jobs with minimum age requirements if(job.minimum_character_age && (client.prefs.age < job.minimum_character_age)) continue + // Checks for jobs set to "Never" in preferences //TODO: Figure out a better way to check for this + if(!(client.prefs.GetJobDepartment(job, 1) & job.flag)) + if(!(client.prefs.GetJobDepartment(job, 2) & job.flag)) + if(!(client.prefs.GetJobDepartment(job, 3) & job.flag)) + if(!show_hidden_jobs && job.title != "Assistant") // Assistant is always an option + continue var/active = 0 // Only players with the job assigned and AFK for less than 10 minutes count as active for(var/mob/M in player_list) if(M.mind && M.client && M.mind.assigned_role == job.title && M.client.inactivity <= 10 * 60 * 10) diff --git a/html/changelogs/Anewbe - Late Join Hidden.yml b/html/changelogs/Anewbe - Late Join Hidden.yml new file mode 100644 index 0000000000..2f6c711597 --- /dev/null +++ b/html/changelogs/Anewbe - Late Join Hidden.yml @@ -0,0 +1,36 @@ +################################ +# 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: Anewbe + +# 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: + - tweak: "Jobs that are set to Never on your preferences are hidden by default on the Late Join selection menu. There is a button to reveal them." \ No newline at end of file From c32bcf785aaf5ae508b10b8b5bd611079768cfc5 Mon Sep 17 00:00:00 2001 From: Woodratt Date: Wed, 25 Apr 2018 22:10:39 -0700 Subject: [PATCH 05/54] PoI Stage 0.5 Doing this in smaller bits - New random sif mob selector, peaceful animals - Drone lootpile (basic placeholder loot right now until we figure out how to give them proper drone loot) - New random spider mob selector, nurse spider and nurse hat spider (hat spider has 10 more health points and is a rare chance to spawn, woo) - New spacesuit random spawn, medical space suits - New Random Shotgun spawn - New random gun spawns - Fixed icon for random medicine spawn - Fixed broken icon for 44 magazines - Fixed Ice Cave dungeon walls being called 'steel' - Added new Crystal type, to avoid the SM style crystal from spawning in crystal PoIs --- code/game/objects/random/guns_and_ammo.dm | 278 +++++++++++++++++- code/game/objects/random/mapping.dm | 4 +- code/game/objects/random/misc.dm | 4 +- code/game/objects/random/mob.dm | 29 ++ code/game/objects/random/spacesuits.dm | 25 ++ code/game/objects/structures/loot_piles.dm | 39 +++ code/game/turfs/simulated/dungeon/wall.dm | 3 + .../simple_animal/animals/giant_spider.dm | 9 + .../projectiles/ammunition/magazines.dm | 2 +- .../projectiles/guns/projectile/shotgun.dm | 3 + code/modules/xenoarcheaology/finds/misc.dm | 14 + icons/obj/ammo.dmi | Bin 25616 -> 25635 bytes 12 files changed, 403 insertions(+), 7 deletions(-) diff --git a/code/game/objects/random/guns_and_ammo.dm b/code/game/objects/random/guns_and_ammo.dm index a910881a76..62dde5a3df 100644 --- a/code/game/objects/random/guns_and_ammo.dm +++ b/code/game/objects/random/guns_and_ammo.dm @@ -1,6 +1,16 @@ +/obj/random/gun/random + name = "Random Weapon" + desc = "This is a random energy or ballistic weapon." + icon = 'icons/obj/gun.dmi' + icon_state = "energystun100" + +/obj/random/gun/random/item_to_spawn() + return pick(prob(5);/obj/random/energy, + prob(5);/obj/random/projectile/random) + /obj/random/energy name = "Random Energy Weapon" - desc = "This is a random security weapon." + desc = "This is a random weapon." icon = 'icons/obj/gun.dmi' icon_state = "energykill100" @@ -83,6 +93,18 @@ prob(2);/obj/item/weapon/gun/projectile/automatic/wt550, prob(1);/obj/item/weapon/gun/projectile/shotgun/pump/combat) +/obj/random/projectile/shotgun + name = "Random Projectile Weapon" + desc = "This is a random projectile weapon." + icon = 'icons/obj/gun.dmi' + icon_state = "shotgun" + +/obj/random/projectile/item_to_spawn() + return pick(prob(4);/obj/item/weapon/gun/projectile/shotgun/doublebarrel, + prob(3);/obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn, + prob(3);/obj/item/weapon/gun/projectile/shotgun/pump, + prob(1);/obj/item/weapon/gun/projectile/shotgun/pump/combat) + /obj/random/handgun name = "Random Handgun" desc = "This is a random sidearm." @@ -126,4 +148,256 @@ prob(4);/obj/item/ammo_magazine/m45/rubber, prob(4);/obj/item/ammo_magazine/m45/flash, prob(2);/obj/item/ammo_magazine/m9mmt, - prob(6);/obj/item/ammo_magazine/m9mmt/rubber) \ No newline at end of file + prob(6);/obj/item/ammo_magazine/m9mmt/rubber) + +/obj/random/projectile/random + name = "Random Projectile Weapon" + desc = "This is a random weapon." + icon = 'icons/obj/gun.dmi' + icon_state = "revolver" + +/obj/random/projectile/random/item_to_spawn() + return pick(prob(3);/obj/random/multiple/gun/projectile/handgun, + prob(2);/obj/random/multiple/gun/projectile/smg, + prob(2);/obj/random/multiple/gun/projectile/shotgun, + prob(1);/obj/random/multiple/gun/projectile/rifle) + +/obj/random/multiple/gun/projectile/smg + name = "random smg projectile gun" + desc = "Loot for PoIs." + icon = 'icons/obj/gun.dmi' + icon_state = "saber" + +/obj/random/multiple/gun/projectile/smg/item_to_spawn() + return pick( + prob(3);list( + /obj/item/weapon/gun/projectile/automatic/wt550, + /obj/item/ammo_magazine/m9mmt, + /obj/item/ammo_magazine/m9mmt + ), + prob(3);list( + /obj/item/weapon/gun/projectile/automatic/mini_uzi, + /obj/item/ammo_magazine/m45uzi, + /obj/item/ammo_magazine/m45uzi + ), + prob(3);list( + /obj/item/weapon/gun/projectile/automatic/tommygun, + /obj/item/ammo_magazine/m45tommy, + /obj/item/ammo_magazine/m45tommy + ), + prob(2);list( + /obj/item/weapon/gun/projectile/automatic/c20r, + /obj/item/ammo_magazine/m10mm, + /obj/item/ammo_magazine/m10mm + ), + prob(1);list( + /obj/item/weapon/gun/projectile/automatic/p90, + /obj/item/ammo_magazine/m9mmp90 + ) + ) + +/obj/random/multiple/gun/projectile/rifle + name = "random rifle projectile gun" + desc = "Loot for PoIs." + icon = 'icons/obj/gun.dmi' + icon_state = "carbine" + +//Concerns about the bullpup, but currently seems to be only a slightly stronger z8. But we shall see. + +/obj/random/multiple/gun/projectile/rifle/item_to_spawn() + return pick( + prob(2);list( + /obj/item/weapon/gun/projectile/automatic/sts35, + /obj/item/ammo_magazine/m545, + /obj/item/ammo_magazine/m545 + ), + prob(2);list( + /obj/item/weapon/gun/projectile/automatic/z8, + /obj/item/ammo_magazine/m762, + /obj/item/ammo_magazine/m762 + ), + prob(4);list( + /obj/item/weapon/gun/projectile/shotgun/pump/rifle, + /obj/item/ammo_magazine/clip/c762, + /obj/item/ammo_magazine/clip/c762 + ), + prob(3);list( + /obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever, + /obj/item/ammo_magazine/clip/c762, + /obj/item/ammo_magazine/clip/c762 + ), + prob(1);list( + /obj/item/weapon/gun/projectile/garand, + /obj/item/ammo_magazine/m762garand, + /obj/item/ammo_magazine/m762garand + ), + prob(1);list( + /obj/item/weapon/gun/projectile/automatic/bullpup, + /obj/item/ammo_magazine/m762, + /obj/item/ammo_magazine/m762 + ) + ) + +/obj/random/multiple/gun/projectile/handgun + name = "random handgun projectile gun" + desc = "Loot for PoIs." + icon = 'icons/obj/gun.dmi' + icon_state = "revolver" + +/obj/random/multiple/gun/projectile/handgun/item_to_spawn() + return pick( + prob(5);list( + /obj/item/weapon/gun/projectile/colt, + /obj/item/ammo_magazine/m45, + /obj/item/ammo_magazine/m45 + ), + prob(4);list( + /obj/item/weapon/gun/projectile/contender, + /obj/item/ammo_magazine/s357, + /obj/item/ammo_magazine/s357 + ), + prob(3);list( + /obj/item/weapon/gun/projectile/contender/tacticool, + /obj/item/ammo_magazine/s357, + /obj/item/ammo_magazine/s357 + ), + prob(2);list( + /obj/item/weapon/gun/projectile/deagle, + /obj/item/ammo_magazine/m44, + /obj/item/ammo_magazine/m44 + ), + prob(1);list( + /obj/item/weapon/gun/projectile/deagle/camo, + /obj/item/ammo_magazine/m44, + /obj/item/ammo_magazine/m44 + ), + prob(1);list( + /obj/item/weapon/gun/projectile/deagle/gold, + /obj/item/ammo_magazine/m44, + /obj/item/ammo_magazine/m44 + ), + prob(4);list( + /obj/item/weapon/gun/projectile/derringer, + /obj/item/ammo_magazine/s357, + /obj/item/ammo_magazine/s357 + ), + prob(5);list( + /obj/item/weapon/gun/projectile/luger, + /obj/item/ammo_magazine/m9mm/compact, + /obj/item/ammo_magazine/m9mm/compact + ), + prob(4);list( + /obj/item/weapon/gun/projectile/luger/brown, + /obj/item/ammo_magazine/m9mm/compact, + /obj/item/ammo_magazine/m9mm/compact + ), + prob(5);list( + /obj/item/weapon/gun/projectile/sec, + /obj/item/ammo_magazine/m45, + /obj/item/ammo_magazine/m45 + ), + prob(4);list( + /obj/item/weapon/gun/projectile/sec/wood, + /obj/item/ammo_magazine/m45, + /obj/item/ammo_magazine/m45 + ), + prob(5);list( + /obj/item/weapon/gun/projectile/p92x, + /obj/item/ammo_magazine/m9mm, + /obj/item/ammo_magazine/m9mm + ), + prob(4);list( + /obj/item/weapon/gun/projectile/p92x/brown, + /obj/item/ammo_magazine/m9mm, + /obj/item/ammo_magazine/m9mm + ), + prob(2);list( + /obj/item/weapon/gun/projectile/p92x/large, + /obj/item/ammo_magazine/m9mm/large, + /obj/item/ammo_magazine/m9mm/large + ), + prob(5);list( + /obj/item/weapon/gun/projectile/pistol, + /obj/item/ammo_magazine/m9mm/compact, + /obj/item/ammo_magazine/m9mm/compact + ), + prob(2);list( + /obj/item/weapon/gun/projectile/silenced, + /obj/item/ammo_magazine/m45, + /obj/item/ammo_magazine/m45 + ), + prob(2);list( + /obj/item/weapon/gun/projectile/revolver, + /obj/item/ammo_magazine/s357, + /obj/item/ammo_magazine/s357 + ), + prob(4);list( + /obj/item/weapon/gun/projectile/revolver/deckard, + /obj/item/ammo_magazine/s38, + /obj/item/ammo_magazine/s38 + ), + prob(4);list( + /obj/item/weapon/gun/projectile/revolver/detective, + /obj/item/ammo_magazine/s38, + /obj/item/ammo_magazine/s38 + ), + prob(2);list( + /obj/item/weapon/gun/projectile/revolver/judge, + /obj/item/ammo_magazine/clip/c12g, + /obj/item/ammo_magazine/clip/c12g, + /obj/item/ammo_magazine/clip/c12g + ), + prob(2);list( + /obj/item/weapon/gun/projectile/revolver/lemat, + /obj/item/ammo_magazine/s38, + /obj/item/ammo_magazine/s38, + /obj/item/ammo_magazine/clip/c12g + ), + prob(2);list( + /obj/item/weapon/gun/projectile/revolver/mateba, + /obj/item/ammo_magazine/s357, + /obj/item/ammo_magazine/s357 + ), + prob(2);list( + /obj/item/weapon/gun/projectile/revolver/webley, + /obj/item/ammo_magazine/s44, + /obj/item/ammo_magazine/s44 + ), + prob(1);list( + /obj/item/weapon/gun/projectile/revolver/webley/auto, + /obj/item/ammo_magazine/s44, + /obj/item/ammo_magazine/s44 + ) + ) + +/obj/random/multiple/gun/projectile/shotgun + name = "random shotgun projectile gun" + desc = "Loot for PoIs." + icon = 'icons/obj/gun.dmi' + icon_state = "shotgun" + +/obj/random/multiple/gun/projectile/shotgun/item_to_spawn() + return pick( + prob(4);list( + /obj/item/weapon/gun/projectile/shotgun/doublebarrel/pellet, + /obj/item/ammo_magazine/clip/c12g/pellet, + /obj/item/ammo_magazine/clip/c12g/pellet, + /obj/item/ammo_magazine/clip/c12g/pellet, + /obj/item/ammo_magazine/clip/c12g/pellet + ), + prob(3);list( + /obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn, + /obj/item/ammo_magazine/clip/c12g/pellet, + /obj/item/ammo_magazine/clip/c12g/pellet, + /obj/item/ammo_magazine/clip/c12g/pellet, + /obj/item/ammo_magazine/clip/c12g/pellet + ), + prob(3);list( + /obj/item/weapon/gun/projectile/shotgun/pump/slug, + /obj/item/weapon/storage/box/shotgunammo + ), + prob(1);list( + /obj/item/weapon/gun/projectile/shotgun/pump/combat, + /obj/item/weapon/storage/box/shotgunammo + ) + ) \ No newline at end of file diff --git a/code/game/objects/random/mapping.dm b/code/game/objects/random/mapping.dm index 57ff7acdcd..aba62d0806 100644 --- a/code/game/objects/random/mapping.dm +++ b/code/game/objects/random/mapping.dm @@ -92,8 +92,8 @@ /obj/random/multiple/minevault name = "random vault loot" desc = "Loot for mine vaults." - icon = 'icons/misc/mark.dmi' - icon_state = "rup" + icon = 'icons/obj/storage.dmi' + icon_state = "crate" /obj/random/multiple/minevault/item_to_spawn() return pick( diff --git a/code/game/objects/random/misc.dm b/code/game/objects/random/misc.dm index 29b597d460..c918425221 100644 --- a/code/game/objects/random/misc.dm +++ b/code/game/objects/random/misc.dm @@ -159,8 +159,8 @@ /obj/random/medical name = "Random Medicine" desc = "This is a random medical item." - icon = 'icons/obj/items.dmi' - icon_state = "advfirstaid" + icon = 'icons/obj/stacks.dmi' + icon_state = "traumakit" /obj/random/medical/item_to_spawn() return pick(prob(21);/obj/random/medical/lite, diff --git a/code/game/objects/random/mob.dm b/code/game/objects/random/mob.dm index 2043ef0240..3aefa9a84c 100644 --- a/code/game/objects/random/mob.dm +++ b/code/game/objects/random/mob.dm @@ -74,6 +74,23 @@ prob(1);/mob/living/simple_animal/hostile/goose, prob(20);/mob/living/simple_animal/giant_crab) + +/obj/random/mob/sif/peaceful + name = "Random Peaceful Sif Animal" + desc = "This is a random peaceful cold weather animal." + icon_state = "penguin" + + mob_returns_home = 1 + mob_wander_distance = 12 + +/obj/random/mob/sif/peaceful/item_to_spawn() + return pick(prob(30);/mob/living/simple_animal/retaliate/diyaab, + prob(15);/mob/living/simple_animal/crab, + prob(15);/mob/living/simple_animal/penguin, + prob(15);/mob/living/simple_animal/mouse, + prob(15);/mob/living/simple_animal/corgi/tamaskan, + prob(20);/mob/living/simple_animal/giant_crab) + /obj/random/mob/sif/hostile name = "Random Hostile Sif Animal" desc = "This is a random hostile cold weather animal." @@ -97,6 +114,18 @@ prob(33);/mob/living/simple_animal/hostile/giant_spider/hunter, prob(45);/mob/living/simple_animal/hostile/giant_spider) +/obj/random/mob/spider/nurse + name = "Random Nurse Spider" + desc = "This is a random nurse spider." + icon_state = "nurse" + + mob_returns_home = 1 + mob_wander_distance = 4 + +/obj/random/mob/spider/nurse/item_to_spawn() + return pick(prob(22);/mob/living/simple_animal/hostile/giant_spider/nurse/hat, + prob(45);/mob/living/simple_animal/hostile/giant_spider/nurse) + /obj/random/mob/spider/mutant name = "Random Mutant Spider" desc = "This is a random mutated spider." diff --git a/code/game/objects/random/spacesuits.dm b/code/game/objects/random/spacesuits.dm index cb4ec6d4e9..29bd799c5c 100644 --- a/code/game/objects/random/spacesuits.dm +++ b/code/game/objects/random/spacesuits.dm @@ -97,6 +97,31 @@ ) ) +/obj/random/multiple/voidsuit/medical + name = "Random Mining Voidsuit" + desc = "This is a random mining voidsuit." + icon = 'icons/obj/clothing/suits.dmi' + icon_state = "rig-mining" + +/obj/random/multiple/voidsuit/medical/item_to_spawn() + return pick( + prob(5);list( + /obj/item/clothing/suit/space/void/medical, + /obj/item/clothing/head/helmet/space/void/medical + ), + prob(1);list( + /obj/item/clothing/suit/space/void/medical/alt, + /obj/item/clothing/head/helmet/space/void/medical/alt + ), + prob(3);list( + /obj/item/clothing/suit/space/void/medical/bio, + /obj/item/clothing/head/helmet/space/void/medical/bio + ), + prob(4);list( + /obj/item/clothing/suit/space/void/medical/emt, + /obj/item/clothing/head/helmet/space/void/medical/emt + ) + ) /obj/random/rigsuit name = "Random rigsuit" diff --git a/code/game/objects/structures/loot_piles.dm b/code/game/objects/structures/loot_piles.dm index 353dbe31a7..96416e0229 100644 --- a/code/game/objects/structures/loot_piles.dm +++ b/code/game/objects/structures/loot_piles.dm @@ -830,3 +830,42 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh /obj/item/mecha_parts/mecha_equipment/repair_droid, /obj/item/mecha_parts/mecha_equipment/teleporter ) + +/obj/structure/loot_pile/surface/drone + name = "drone wreckage" + desc = "The ruins of some unfortunate drone. Perhaps something is salvageable." + icon = 'icons/mob/animal.dmi' + icon_state = "drone_dead" + +// Since the actual drone loot is a bit stupid in how it is handled, this is a sparse and empty list with items I don't exactly want in it. But until we can get the proper items in . . . + + common_loot = list( + /obj/random/tool, + /obj/item/stack/cable_coil/random, + /obj/random/tank, + /obj/random/tech_supply/component, + /obj/item/stack/material/steel{amount = 25}, + /obj/item/stack/material/glass{amount = 10}, + /obj/item/stack/material/plasteel{amount = 5}, + /obj/item/weapon/cell, + /obj/item/weapon/material/shard + ) + + uncommon_loot = list( + /obj/item/weapon/cell/high, + /obj/item/robot_parts/robot_component/actuator, + /obj/item/robot_parts/robot_component/armour, + /obj/item/robot_parts/robot_component/binary_communication_device, + /obj/item/robot_parts/robot_component/camera, + /obj/item/robot_parts/robot_component/diagnosis_unit, + /obj/item/robot_parts/robot_component/radio + ) + + rare_loot = list( + /obj/item/weapon/cell/super, + /obj/item/borg/upgrade/restart, + /obj/item/borg/upgrade/jetpack, + /obj/item/borg/upgrade/tasercooler, + /obj/item/borg/upgrade/syndicate, + /obj/item/borg/upgrade/vtec + ) \ No newline at end of file diff --git a/code/game/turfs/simulated/dungeon/wall.dm b/code/game/turfs/simulated/dungeon/wall.dm index 156fddac6a..176c10142c 100644 --- a/code/game/turfs/simulated/dungeon/wall.dm +++ b/code/game/turfs/simulated/dungeon/wall.dm @@ -13,6 +13,9 @@ return /turf/simulated/wall/solidrock //for more stylish anti-cheese. + name = "solid rock" + desc = "This rock seems dense, impossible to drill." + description_info = "Probably not going to be able to drill or bomb your way through this, best to try and find a way around." icon_state = "bedrock" var/base_state = "bedrock" block_tele = TRUE diff --git a/code/modules/mob/living/simple_animal/animals/giant_spider.dm b/code/modules/mob/living/simple_animal/animals/giant_spider.dm index 439e401e08..26c35c1ba3 100644 --- a/code/modules/mob/living/simple_animal/animals/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/animals/giant_spider.dm @@ -82,6 +82,15 @@ Nurse Family var/atom/cocoon_target var/egg_inject_chance = 5 +/mob/living/simple_animal/hostile/giant_spider/nurse/hat + desc = "Furry and beige, it makes you shudder to look at it. This one has brilliant green eyes and a tiny nurse hat" + icon_state = "nursemed" + icon_living = "nursemed" + icon_dead = "nursemed_dead" + + maxHealth = 50 + health = 50 + /mob/living/simple_animal/hostile/giant_spider/nurse/queen desc = "Absolutely gigantic, this creature is horror itself." icon = 'icons/mob/64x64.dmi' diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index 94cf0ab21e..0c3c76caaf 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -472,7 +472,7 @@ /obj/item/ammo_magazine/m44 name = "magazine (.44)" - icon_state = "44" + icon_state = "m44" origin_tech = list(TECH_COMBAT = 2) mag_type = MAGAZINE caliber = ".44" diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 087543091d..183ead39d1 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -41,6 +41,9 @@ update_icon() +/obj/item/weapon/gun/projectile/shotgun/pump/slug + ammo_type = /obj/item/ammo_casing/a12g + /obj/item/weapon/gun/projectile/shotgun/pump/combat name = "combat shotgun" desc = "Built for close quarters combat, the Hephaestus Industries KS-40 is widely regarded as a weapon of choice for repelling boarders. Uses 12g rounds." diff --git a/code/modules/xenoarcheaology/finds/misc.dm b/code/modules/xenoarcheaology/finds/misc.dm index 129033bf6e..cc02a7f41b 100644 --- a/code/modules/xenoarcheaology/finds/misc.dm +++ b/code/modules/xenoarcheaology/finds/misc.dm @@ -19,6 +19,20 @@ else set_light(3, 3, "#33CC33") +/obj/machinery/crystal/alt + name = "Crystal" + icon = 'icons/obj/mining.dmi' + icon_state = "crystal" + density = TRUE + anchored = TRUE + +/obj/machinery/crystal/alt/New() + if(prob(50)) + icon_state = "crystal2" + set_light(3, 3, "#CC00CC") + else + set_light(3, 3, "#33CC33") + /obj/machinery/crystal/ice //slightly more thematic crystals name = "ice crystal" desc = "A large crystalline ice formation." diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index ceea8bf2b7ecc9a53b4f7c1543523532599af852..7c7082c2ba2df5882d6aa43dcd98b3ffab1b7b48 100644 GIT binary patch delta 1165 zcmV;81akY3$N{6s0gxnrX?j#xbVOxyV{&P5bZKvH004NLt(n1Y+c*%0&-POY?X_B% z5=mPJUy2lq9MXf=cY~2=nJC8=L^|8#>Gwb-WnI|w8`zr-d>jpD$oYrl=i=+PzaPIB z4^NNt7dr-bIu`3f{v*XUv5MS95QUxGW zeK=U}L97geJw_IO#%w;{Wz&O3{XJF(%;<2B&HYWAv%@Kd;S`H?A(}5${pF95w?A`h zyrtym&UoI<90q59_C5p#LAwFWZMZA9A)b$*-FFhT{5ra0Z_CzwSMynCy?HIxh02%Dwq5~6TdDw3yp!8{1yE82KmfM&3ZSG4fJ|)b z6-e=7B2@q>UUIhe3ZSG4fG}Y{CzZ%Nc1b57;)ao{PSt_sKBWicN)2`cl3){|M(7vSsH2y(?mi?t& zd6T=edWDu^1!P$YsKN`VDhsII3Z#-s0aa1~RX>5$H7WQVrZxXHtu+vLtu+vLtu+vL ztu+vLtu+vTcda!Lcda!Lcda!L_b1c;GgveJf1s#$2jP+9TW6bqtK@DWKI(5fwn zfPya;L_ki(f(TfWOFr*Q1$ebYG|ecfN(FKf*2of?aR_XnLBBXTJ0%oqb`4VyM{kWL)G1QN$DsKoKhvom81 zyFkW!)XRwmeVu5~#EV46md#x>AE%t=OHoeqvCV046HYX^3nv=fh7%3$!-)nr;zaX#k0+wn zvK!C*HBmyz00)Dk@u&7jdvN?ky{P)uyW!ayUc)jL2wP6`VasXYDlF01GiwgxekUA% zc0A#@=l%@6%)YaC`0daA9d7&c)%V(r?pqJ6rM~qJc|uAYU%C>31Aa--{9GfP?D~tpOhq-|15D3*q+xSKaws feEa@TJUl(l{{vr1os(l)PjLVMAOK0Thy;jV`YarY delta 1165 zcmV;81akYM$N`YZ0gxnrR(e!ebVOxyV{&P5bZKvH004NL?U})j<0ue@&&g9*GuQFT z*g)b#E~_4``p|R8<{r^DvC%?e0qLFYr{4qa9wwut{z!A&TOxgwi@%_%fX~IBU;ldi zRy;gCE?=|{=5#DJ1^=U3F8(!r9E(lS)XT-F%`nFFCqxx>u_-=(eOfMh<3q72*m803 z%IWm`18AKinMSP23ZfW9)ezM{6o)7QQ4*q72t_i!>q#a|TKD#(dhPexP4Sf+!9@Tf zHH1-H3u0xM^f8j~GiLMoE}IrKYVWZ+VMeEWY#wgfT#Tm}rc*371#7?5&6i(B-u}$3 z@!BOv_sY_4<}f&av-cq|2-*!`Y{Ol#4e@*g?Y@(!l@ z6vpbIWOUYK^>A(X*ULq(t$Hmsg~*rBu2};~n~MNaw3EAL4NzPJpaATeH9&C@fHJXb z)*wX}6D|Ts(IscstO1IP02HQOv&JakdnKa_4Hv-YxPaz=2MG#9kPB$ZKx-7*6hJ|4 zzq58KY1P~Bterq>^jAaKsbG#-mRjEiFH_|e+@p5=op#N^YS?xLgZ8zXK;s`IXxU!c z%RjZr> z5xZVzfg zp?(%>prMW(I!H87#R7^4N2&rx3JgbT6-UY*M=B_PM~X2ARNBH6{lP8d`xcU63n{vV zg0qFU^`UuPQhc&34))8%bYd9Y>}>7LyoWx`=4#|bXV;1qD%^#espUPc2_y!7Qt z(&3nYIb>dlIfvUqHTpo26T5Q}=`vd9BGNY|j-GbwTtqGkoQptuXq}7TWJzdhX+u+6 zl?}cAr?vvTI+zz7^ou_JriKDIK>pu#bkbGI{ARd7^2H3&TFoFm^%(?b0_327#Gz9`XM#=yT*{LP@kG~#j4j){Xj-S7 zrgKnE)7s`VxCv((+=Vj@Zo`=d_u))~8*!%TxW|)ouVwGg^zBeWodV7SM`cglKiz2P z`*~Imoi)?5R&?pgSU|R%re(`%;07$w*z0Nz<9;U`c0A#@=k^Re$iB08_-)U_9d6ry z^VMhCj2=1*tfir|26;J39G$unN2j60(FrJVbm~bQopcgMr<=sl5lkE%yTpMndHciJ z+F;)39_eQsslFE@&;g?v#!i86hwpUB=!Nj}fUE9&F1~(yC?1|3m;V9EZJECNA8fDy f03ZNKL_t(|ob26ud=&M)KmOO`wh)rDt^{>oxtB4^ From 3b4b9ea988f6eb7d82f17d0645f5029bba65fde0 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Wed, 25 Apr 2018 20:47:17 -0400 Subject: [PATCH 06/54] Fixes an exploit with circuit printers Allows you to print literally anything. --- code/modules/integrated_electronics/core/printer.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm index 3f83f07ec4..4dfd4e989a 100644 --- a/code/modules/integrated_electronics/core/printer.dm +++ b/code/modules/integrated_electronics/core/printer.dm @@ -168,6 +168,8 @@ else if(ispath(build_type, /obj/item/integrated_circuit)) var/obj/item/integrated_circuit/IC = build_type cost = initial(IC.w_class) + else + return if(metal - cost < 0) to_chat(usr, "You need [cost] metal to build that!.") From d05163baba0841484eafc58452d11efc51868a72 Mon Sep 17 00:00:00 2001 From: Leshana Date: Wed, 25 Apr 2018 22:16:28 -0400 Subject: [PATCH 07/54] Fix missing descriptions on guns. examine() is supposed to return a value, these ones did not. --- code/modules/projectiles/gun.dm | 2 +- code/modules/projectiles/guns/energy.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 7cc4b3fab0..663f5f7878 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -712,7 +712,7 @@ recoil = initial(recoil) /obj/item/weapon/gun/examine(mob/user) - ..() + . = ..() if(firemodes.len > 1) var/datum/firemode/current_mode = firemodes[sel_mode] to_chat(user, "The fire selector is set to [current_mode.name].") diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 207d64e6f6..c87c37a085 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -144,7 +144,7 @@ return null /obj/item/weapon/gun/energy/examine(mob/user) - ..(user) + . = ..() if(power_supply) var/shots_remaining = round(power_supply.charge / charge_cost) user << "Has [shots_remaining] shot\s remaining." From f8b2d3e4d62c84bf0119300e83a5fb2d9f1940db Mon Sep 17 00:00:00 2001 From: Leshana Date: Fri, 27 Apr 2018 09:20:51 -0400 Subject: [PATCH 08/54] Alternative way to avoid tooltips on mimics. --- code/modules/mob/living/simple_animal/aliens/mimic.dm | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/code/modules/mob/living/simple_animal/aliens/mimic.dm b/code/modules/mob/living/simple_animal/aliens/mimic.dm index c13e1721ce..fff75ecbe7 100644 --- a/code/modules/mob/living/simple_animal/aliens/mimic.dm +++ b/code/modules/mob/living/simple_animal/aliens/mimic.dm @@ -49,10 +49,7 @@ qdel(src) /mob/living/simple_animal/hostile/mimic/MouseEntered(location, control, params) - ..() - closeToolTip(usr) - // ideally, we'd remove the code in ..() that opens the tooltip, - // but then we'd need to duplicate all the other code in ..() + return // Do not call parent: Mimics shouldn't have tooltips! // // Crate Mimic From 78efe65c1caf9f806777fc5f6453c7e160fdf531 Mon Sep 17 00:00:00 2001 From: Mewchild Date: Fri, 27 Apr 2018 12:12:24 -0500 Subject: [PATCH 09/54] Fixes miners not being able to take supply snowsuit --- code/modules/client/preference_setup/loadout/loadout_suit.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm index 6b32034b31..9276384602 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm @@ -455,4 +455,4 @@ datum/gear/suit/duster /datum/gear/suit/snowsuit/cargo display_name = "snowsuit, supply" path = /obj/item/clothing/suit/storage/snowsuit/cargo - allowed_roles = list("Quartermaster","shaft Miner","Cargo Technician","Head of Personnel") \ No newline at end of file + allowed_roles = list("Quartermaster","Shaft Miner","Cargo Technician","Head of Personnel") \ No newline at end of file From 3c931ad535323f73571a9c83a5ecf4c4e8d66973 Mon Sep 17 00:00:00 2001 From: ReddeyfishVor <36580397+ReddeyfishVor@users.noreply.github.com> Date: Fri, 27 Apr 2018 17:10:41 -0700 Subject: [PATCH 10/54] Prevent negative weight events from happening --- code/modules/events/event_container.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index 9ddfd6c214..578c28e20f 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -60,7 +60,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT var/list/possible_events = list() for(var/datum/event_meta/EM in available_events) var/event_weight = get_weight(EM, active_with_role) - if(event_weight) + if(event_weight > 0) possible_events[EM] = event_weight if(possible_events.len == 0) From 1d0aeb95bd0922970c338dc904ae9a569a56e167 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 27 Apr 2018 20:16:57 -0400 Subject: [PATCH 11/54] Increase zealousness of Portable Freezer item whitelist --- code/game/objects/items/weapons/storage/boxes.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index f7e43ac718..6105095d65 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -445,7 +445,7 @@ item_state_slots = list(slot_r_hand_str = "medicalpack", slot_l_hand_str = "medicalpack") foldable = null max_w_class = ITEMSIZE_NORMAL - can_hold = list(/obj/item/organ, /obj/item/weapon/reagent_containers/food, /obj/item/weapon/reagent_containers/glass) + can_hold = list(/obj/item/organ) max_storage_space = ITEMSIZE_COST_NORMAL * 5 // Formally 21. Odd numbers are bad. use_to_pickup = 1 // for picking up broken bulbs, not that most people will try From 47d958b12ebeb828325910362569a02b04cb5341 Mon Sep 17 00:00:00 2001 From: atermonera Date: Fri, 27 Apr 2018 20:58:54 -0700 Subject: [PATCH 12/54] Renamed "vaguesplotch" to "fuel" --- icons/effects/effects.dmi | Bin 401570 -> 401565 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index d9a7f0bd00b0a0e36e74d7e56eb135936d8546ca..b735173878facc55dccbbb1a995515651daeb4dd 100644 GIT binary patch delta 325 zcmV-L0lNO8!5E#v7?30Zn6V{^0)HN`Pqo0kLR}TInx$R|qz^3#KiT?e+dlx{y`rtX zX4pyTbE3PjK3gZtTaIKRPCOK`!70PhV0p_;f3?C!!gBE#1-zJ%1D6t6jW)qXT;Qq| zkZGFxuPn<&8hznKjk0>*BIWxu$tr3gm*NEI-Wh*6G}NF04vj=DBIWQ=Uw@b1773Oq z-PW}f=%(_+2H!-E*CHVW^jM%3HT9aP*uhVH1yhh4CI#i6ZQ7f;o}0}G&UB1Dm-~zw zL-Qjt0<7Y=d?z)0-1D|IhC|j-g(u3sPb?$rCjc?ihM{cZ)aMlY25iWL&dfrQX+sS| z_#t&vij^uwnQ$BTUBIt~Ga21fpr+m9@5%Gqj_h7v=6?ZCm$O9^$GUcd$^(bW0|AH1 X0|JN20|ST30|bZ40|mFr0|wX}!0Mb! delta 298 zcmV+_0oDGU!5E^!7?30Zov|f}0)Ot`r%tqNK{s5Q0J~ikvZAG438Wt_2|wxj>DxaD z;Ju=)y>8ga>2ssIz&=|j%Uh0QBu+e3vB9as(P(+gO@GD0M#FOP7zMnTkpq_!S&=ru zMqJ>k6_9C~`>!s`MH+qKMUAq0-y-GvG|4JzA(!F==>8dhIW*Lu0S=8sEt4n%5Lm|Y z!v^0(j@Ke11@u^;6*cv`sMx_zfCW>K8zu$ipKaQky`CG+2+nkjJ(v588bk9VG77BX zxO_J?eB5)lHHJghQH3YUzE>n8v)(}tmJ-Se_gh&6n!Q&gT(`f#RCC{#RCF|#RCI}#RCL~#RCPm#RCS|9IG;pO8@`> From e3e1a7ad9cc877c55f02f8d6b388809fcc07396b Mon Sep 17 00:00:00 2001 From: Neerti Date: Sat, 28 Apr 2018 23:40:11 -0400 Subject: [PATCH 13/54] Upgrades Planetary Weather to vis_contents (#5170) * Upgrades Planetary Weather to vis_contents Makes the weather on Sif use vis_contents instead of overlays, which should fix all weather-related icon issues, and may or may not be faster. Weather updates instantly now. Fixes indoor PoIs having outdoor weather. * Tries to appease Travis --- code/__defines/planets.dm | 5 ++--- code/controllers/Processes/planet.dm | 15 ++------------- code/game/turfs/simulated/floor_icon.dm | 3 --- code/game/turfs/simulated/outdoors/outdoors.dm | 10 +--------- code/game/turfs/turf_changing.dm | 7 ------- code/modules/planet/weather.dm | 12 +++++++++++- 6 files changed, 16 insertions(+), 36 deletions(-) diff --git a/code/__defines/planets.dm b/code/__defines/planets.dm index e8f526382e..98b10b328a 100644 --- a/code/__defines/planets.dm +++ b/code/__defines/planets.dm @@ -10,6 +10,5 @@ #define WEATHER_HOT "hot" #define WEATHER_BLOOD_MOON "blood moon" // For admin fun or cult later on. -#define PLANET_PROCESS_WEATHER 0x1 -#define PLANET_PROCESS_SUN 0x2 -#define PLANET_PROCESS_TEMP 0x4 \ No newline at end of file +#define PLANET_PROCESS_SUN 0x1 +#define PLANET_PROCESS_TEMP 0x2 \ No newline at end of file diff --git a/code/controllers/Processes/planet.dm b/code/controllers/Processes/planet.dm index 9ab541c80d..770b3a5e87 100644 --- a/code/controllers/Processes/planet.dm +++ b/code/controllers/Processes/planet.dm @@ -21,6 +21,7 @@ var/datum/controller/process/planet/planet_controller = null for(var/datum/planet/P in planets) if(OT.z in P.expected_z_levels) P.planet_floors |= OT + OT.vis_contents |= P.weather_holder.visuals break outdoor_turfs.Cut() //Why were you in there INCORRECTLY? @@ -36,6 +37,7 @@ var/datum/controller/process/planet/planet_controller = null var/datum/planet/P = planet if(T.z in P.expected_z_levels) P.planet_floors -= T + T.vis_contents -= P.weather_holder.visuals /datum/controller/process/planet/doWork() if(outdoor_turfs.len || planetary_walls.len) @@ -44,19 +46,6 @@ var/datum/controller/process/planet/planet_controller = null for(var/datum/planet/P in planets) P.process(schedule_interval / 10) SCHECK //Your process() really shouldn't take this long... - //Weather style needs redrawing - if(P.needs_work & PLANET_PROCESS_WEATHER) - P.needs_work &= ~PLANET_PROCESS_WEATHER - var/image/new_overlay = image(icon = P.weather_holder.current_weather.icon, icon_state = P.weather_holder.current_weather.icon_state) - new_overlay.plane = PLANE_PLANETLIGHTING - //Redraw weather icons - for(var/T in P.planet_floors) - var/turf/simulated/turf = T - // turf.overlays -= turf.weather_overlay - turf.weather_overlay = new_overlay - // turf.overlays += turf.weather_overlay - turf.update_icon() - SCHECK //Sun light needs changing if(P.needs_work & PLANET_PROCESS_SUN) diff --git a/code/game/turfs/simulated/floor_icon.dm b/code/game/turfs/simulated/floor_icon.dm index e1b49762ec..e65c15ae19 100644 --- a/code/game/turfs/simulated/floor_icon.dm +++ b/code/game/turfs/simulated/floor_icon.dm @@ -84,9 +84,6 @@ var/image/no_ceiling_image = null if(!isnull(burnt) && (flooring.flags & TURF_CAN_BURN)) add_overlay(get_flooring_overlay("[flooring.icon_base]-burned-[burnt]","[flooring.icon_base]_burned[burnt]")) - if(weather_overlay) - add_overlay(weather_overlay) - if(update_neighbors) for(var/turf/simulated/floor/F in range(src, 1)) if(F == src) diff --git a/code/game/turfs/simulated/outdoors/outdoors.dm b/code/game/turfs/simulated/outdoors/outdoors.dm index 34a07ef9c4..969c77f4fb 100644 --- a/code/game/turfs/simulated/outdoors/outdoors.dm +++ b/code/game/turfs/simulated/outdoors/outdoors.dm @@ -7,8 +7,6 @@ var/list/outdoor_turfs = list() var/edge_blending_priority = 0 // Outdoors var determines if the game should consider the turf to be 'outdoors', which controls certain things such as weather effects. var/outdoors = FALSE - // This holds the image for the current weather effect. - var/image/weather_overlay = null /turf/simulated/floor/outdoors name = "generic ground" @@ -32,7 +30,7 @@ var/list/outdoor_turfs = list() /turf/simulated/floor/Destroy() if(outdoors) planet_controller.unallocateTurf(src) - ..() + return ..() /turf/simulated/proc/make_outdoors() outdoors = TRUE @@ -44,20 +42,14 @@ var/list/outdoor_turfs = list() planet_controller.unallocateTurf(src) else // This is happening during map gen, if there's no planet_controller (hopefully). outdoor_turfs -= src - if(weather_overlay) - cut_overlay(weather_overlay) - qdel_null(weather_overlay) - update_icon() /turf/simulated/post_change() ..() // If it was outdoors and still is, it will not get added twice when the planet controller gets around to putting it in. if(outdoors) make_outdoors() - // outdoor_turfs += src else make_indoors() - // planet_controller.unallocateTurf(src) /turf/simulated/proc/update_icon_edge() if(edge_blending_priority) diff --git a/code/game/turfs/turf_changing.dm b/code/game/turfs/turf_changing.dm index 84d832b45c..115a789987 100644 --- a/code/game/turfs/turf_changing.dm +++ b/code/game/turfs/turf_changing.dm @@ -37,7 +37,6 @@ var/old_dynamic_lighting = dynamic_lighting var/old_affecting_lights = affecting_lights var/old_lighting_overlay = lighting_overlay - var/old_weather_overlay = weather_overlay var/old_corners = corners //world << "Replacing [src.type] with [N]" @@ -56,9 +55,6 @@ if(old_fire) fire = old_fire - if(old_weather_overlay) - W.weather_overlay = old_weather_overlay - if (istype(W,/turf/simulated/floor)) W.RemoveLattice() @@ -83,9 +79,6 @@ if(old_fire) old_fire.RemoveFire() - if(old_weather_overlay) - W.weather_overlay = old_weather_overlay - if(tell_universe) universe.OnTurfChange(W) diff --git a/code/modules/planet/weather.dm b/code/modules/planet/weather.dm index 4b7e50a2a5..11c902f77f 100644 --- a/code/modules/planet/weather.dm +++ b/code/modules/planet/weather.dm @@ -8,6 +8,9 @@ var/list/roundstart_weather_chances = list() var/next_weather_shift = null + // Holds the weather icon, using vis_contents. Documentation says an /atom/movable is required for placing inside another atom's vis_contents. + var/atom/movable/weather_visuals/visuals = null + /datum/weather_holder/New(var/source) ..() our_planet = source @@ -15,6 +18,7 @@ var/datum/weather/W = allowed_weather_types[A] if(istype(W)) W.holder = src + visuals = new() /datum/weather_holder/proc/change_weather(var/new_weather) var/old_light_modifier = null @@ -41,7 +45,7 @@ current_weather.process_effects() /datum/weather_holder/proc/update_icon_effects() - our_planet.needs_work |= PLANET_PROCESS_WEATHER + visuals.icon_state = current_weather.icon_state /datum/weather_holder/proc/update_temperature() temperature = Interpolate(current_weather.temp_low, current_weather.temp_high, weight = our_planet.sun_position) @@ -65,3 +69,9 @@ /datum/weather/proc/process_effects() return + +// All this does is hold the weather icon. +/atom/movable/weather_visuals + icon = 'icons/effects/weather.dmi' + mouse_opacity = 0 + plane = PLANE_PLANETLIGHTING From ea96783d760273c409f0f7d2a61621e04bd26a38 Mon Sep 17 00:00:00 2001 From: atermonera Date: Sat, 28 Apr 2018 23:20:36 -0700 Subject: [PATCH 14/54] Updates changelog --- html/changelog.html | 25 +++++++++++++ html/changelogs/.all_changelog.yml | 18 +++++++++ html/changelogs/Anewbe - Communicators.yml | 36 ------------------ html/changelogs/Anewbe - Late Join Hidden.yml | 36 ------------------ html/changelogs/Cerebulon - pumpkins.yml | 8 ---- html/changelogs/arokha - pol-limbprint.yml | 37 ------------------- .../changelogs/atermonera-refactorexamine.yml | 4 -- html/changelogs/schnayy-plushietweak.yml | 9 ----- 8 files changed, 43 insertions(+), 130 deletions(-) delete mode 100644 html/changelogs/Anewbe - Communicators.yml delete mode 100644 html/changelogs/Anewbe - Late Join Hidden.yml delete mode 100644 html/changelogs/Cerebulon - pumpkins.yml delete mode 100644 html/changelogs/arokha - pol-limbprint.yml delete mode 100644 html/changelogs/atermonera-refactorexamine.yml delete mode 100644 html/changelogs/schnayy-plushietweak.yml diff --git a/html/changelog.html b/html/changelog.html index 6f16ef8461..ae3d6222bd 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -53,6 +53,31 @@ -->
+

28 April 2018

+

Anewbe updated:

+
    +
  • Communicator visibility (the thing that lets people see your communicator when you're a ghost) is now saved to character slots, rather than globally.
  • +
  • Jobs that are set to Never on your preferences are hidden by default on the Late Join selection menu. There is a button to reveal them.
  • +
+

Arokha updated:

+
    +
  • Nerve reattaching surgery now works correctly. (Hemostat on limb)
  • +
  • Limbs dropped by people have appropriate flags.
  • +
+

Atermonera updated:

+
    +
  • Human examine code has received a major refactor. If you encounter unusual behaviour that seems wrong, please report it.
  • +
+

Cerebulon updated:

+
    +
  • Pumpkins are no longer green ovals. They now grow on actual vines.
  • +
+

schnayy updated:

+
    +
  • Space carp plushies now load sprites and are all selectable from loadout.
  • +
  • Adds several newer plushies to the gift vendor as well as adjusting cost of gift vendor's contents.
  • +
+

19 April 2018

Anewbe updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 098cc09e28..e35e5c6296 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -4088,3 +4088,21 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - tweak: RD office now has its telescreen back. lorwp: - bugfix: Pilot headsets can now fallback to shortwave radio +2018-04-28: + Anewbe: + - tweak: Communicator visibility (the thing that lets people see your communicator + when you're a ghost) is now saved to character slots, rather than globally. + - tweak: Jobs that are set to Never on your preferences are hidden by default on + the Late Join selection menu. There is a button to reveal them. + Arokha: + - bugfix: Nerve reattaching surgery now works correctly. (Hemostat on limb) + - bugfix: Limbs dropped by people have appropriate flags. + Atermonera: + - tweak: Human examine code has received a major refactor. If you encounter unusual + behaviour that seems wrong, please report it. + Cerebulon: + - bugfix: Pumpkins are no longer green ovals. They now grow on actual vines. + schnayy: + - bugfix: Space carp plushies now load sprites and are all selectable from loadout. + - tweak: Adds several newer plushies to the gift vendor as well as adjusting cost + of gift vendor's contents. diff --git a/html/changelogs/Anewbe - Communicators.yml b/html/changelogs/Anewbe - Communicators.yml deleted file mode 100644 index 0982267786..0000000000 --- a/html/changelogs/Anewbe - Communicators.yml +++ /dev/null @@ -1,36 +0,0 @@ -################################ -# 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: Anewbe - -# 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: - - tweak: "Communicator visibility (the thing that lets people see your communicator when you're a ghost) is now saved to character slots, rather than globally." \ No newline at end of file diff --git a/html/changelogs/Anewbe - Late Join Hidden.yml b/html/changelogs/Anewbe - Late Join Hidden.yml deleted file mode 100644 index 2f6c711597..0000000000 --- a/html/changelogs/Anewbe - Late Join Hidden.yml +++ /dev/null @@ -1,36 +0,0 @@ -################################ -# 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: Anewbe - -# 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: - - tweak: "Jobs that are set to Never on your preferences are hidden by default on the Late Join selection menu. There is a button to reveal them." \ No newline at end of file diff --git a/html/changelogs/Cerebulon - pumpkins.yml b/html/changelogs/Cerebulon - pumpkins.yml deleted file mode 100644 index 42edb7ad6f..0000000000 --- a/html/changelogs/Cerebulon - pumpkins.yml +++ /dev/null @@ -1,8 +0,0 @@ - -author: Cerebulon - - -delete-after: True - -changes: - - bugfix: "Pumpkins no longer green ovals. Now grow on actual vines." diff --git a/html/changelogs/arokha - pol-limbprint.yml b/html/changelogs/arokha - pol-limbprint.yml deleted file mode 100644 index b80cbe68d0..0000000000 --- a/html/changelogs/arokha - pol-limbprint.yml +++ /dev/null @@ -1,37 +0,0 @@ -################################ -# 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: Arokha - -# 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: - - bugfix: "Nerve reattaching surgery now works correctly. (Hemostat on limb)" - - bugfix: "Limbs dropped by people don't have appropriate flags." diff --git a/html/changelogs/atermonera-refactorexamine.yml b/html/changelogs/atermonera-refactorexamine.yml deleted file mode 100644 index 46b0c302c4..0000000000 --- a/html/changelogs/atermonera-refactorexamine.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Atermonera -delete-after: True -changes: - - tweak: "Human examine code has received a major refactor. If you encounter unusual behaviour that seems wrong, please report it." \ No newline at end of file diff --git a/html/changelogs/schnayy-plushietweak.yml b/html/changelogs/schnayy-plushietweak.yml deleted file mode 100644 index 45e93e5e4f..0000000000 --- a/html/changelogs/schnayy-plushietweak.yml +++ /dev/null @@ -1,9 +0,0 @@ -# Your name. -author: schnayy - -# 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. - - bugfix: "Space carp plushies now load sprites and are all selectable from loadout." - - tweak: "Adds several newer plushies to the gift vendor as well as adjusting cost of gift vendor's contents." \ No newline at end of file From 3b3599dd0f3e1ce697dedac13b1ae9d7eb475f04 Mon Sep 17 00:00:00 2001 From: PrismaticGynoid Date: Sun, 29 Apr 2018 12:45:46 -0700 Subject: [PATCH 15/54] Skrell hardsuit helmet sprites Adds a number of new sprites to the skrell versions of hardsuit helmets, most of which were using the human sprites. Some of these were ported from Aurora, and some were edited to fit skrell heads better. No longer will skrell be forced to squish their headtails into uncomfortable human-shaped hardsuit helmets. --- ...smaticGynoid-hardsuitsforsquishyskrell.yml | 4 ++++ icons/mob/species/skrell/helmet.dmi | Bin 43104 -> 53054 bytes 2 files changed, 4 insertions(+) create mode 100644 html/changelogs/PrismaticGynoid-hardsuitsforsquishyskrell.yml diff --git a/html/changelogs/PrismaticGynoid-hardsuitsforsquishyskrell.yml b/html/changelogs/PrismaticGynoid-hardsuitsforsquishyskrell.yml new file mode 100644 index 0000000000..a3f9aabe06 --- /dev/null +++ b/html/changelogs/PrismaticGynoid-hardsuitsforsquishyskrell.yml @@ -0,0 +1,4 @@ +author: PrismaticGynoid +delete-after: True +changes: + - rscadd: "Adds new skrell sprites to hardsuit helmets that were missing them." diff --git a/icons/mob/species/skrell/helmet.dmi b/icons/mob/species/skrell/helmet.dmi index 31f409043fa938f679862f59164747a485c322c4..fcd81366b48884ab1d79bc3c47e4ff835f53ab39 100644 GIT binary patch literal 53054 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
  • $+^~sMgd-O3g(~N{>9TR7nxBc8cWpj`M&(h4d>vzQScPt z*KjFyr16rhZjX+Ff)xuFHxjN9bTGTa*C=(tb!A-rB6z`)`!d(pL!pc)uf zDI7`L@9F6ZtU75#4QeieUhw#bgoiSmhp@1jWof2VJ~o*w-$HNyPGaXhqgSE)h&~LW z*w$Q6^oqNa5d7d^?!DzAp1}Sd`i;JAMdzyakaCRpMx^2Csoe64AT_S1os77L&s~h1RmeZe4{nr zu^GQLKQGeF7Zd^A1E;D3QqH$>dX=1Z(I{6$dX}UmxKVhPm{AERAV^zAR zcM(8mbUTYjyF4Sa3qppc>T4b7F#d%VLdYed0ItV1(_irJa7Y4su`6Ia=~l~Vzwzt? zb}I<|uy%Eco)6H7kzkIsD;flPp@ZW@zb>6h#lMP0V{>~RXn59(2Qt$zioI(`7b&vs zA=)P{cMXWJ|nvH8%4ib>B%~0S8rDY`SXe|s zfUF-m<2w>HM4`tNj7jQc6@Rx*k7x^T`j@R+2;e&?**eZBhbJfkUnzl^Dz&!!pH-`E znO;w`(4cZ~3izdxv;tMjhO~uH@S=nfW);l;2WCbQ#r~fFp8sF*?pRm?V5f^R9Muk$ zynh{5{W1dmhfe=4UIcKK+q2qR;ho#jo#bC;?X&9}YF(`7d^hpmas(+}CMI{*P^%lI z>FG&fc@&u{IxQP~bk~7SEO~gSD-*>3I}5;rM!"|^?j^6-?{K8k$2;uruzLP7ul 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 From fea679888a90496c4d27fc49e24515feb89dc63c Mon Sep 17 00:00:00 2001 From: kcin2001 Date: Sun, 29 Apr 2018 16:07:32 -0700 Subject: [PATCH 16/54] Adds Micro mechs --- code/datums/supplypacks/robotics_vr.dm | 34 + .../micro/mecha_construction_paths_vr.dm | 768 ++++++++++++++++++ code/game/mecha/micro/mecha_parts_vr.dm | 141 ++++ code/game/mecha/micro/mecha_vr.dm | 47 ++ code/game/mecha/micro/mechfab_designs_vr.dm | 187 +++++ code/modules/research/designs_vr.dm | 55 ++ icons/mecha/mech_construct_vr.dmi | Bin 0 -> 2682 bytes icons/mecha/mech_construction_vr.dmi | Bin 0 -> 6497 bytes vorestation.dme | 4 + 9 files changed, 1236 insertions(+) create mode 100644 code/datums/supplypacks/robotics_vr.dm create mode 100644 code/game/mecha/micro/mecha_construction_paths_vr.dm create mode 100644 code/game/mecha/micro/mecha_parts_vr.dm create mode 100644 code/game/mecha/micro/mecha_vr.dm create mode 100644 code/game/mecha/micro/mechfab_designs_vr.dm create mode 100644 icons/mecha/mech_construct_vr.dmi create mode 100644 icons/mecha/mech_construction_vr.dmi diff --git a/code/datums/supplypacks/robotics_vr.dm b/code/datums/supplypacks/robotics_vr.dm new file mode 100644 index 0000000000..e03bdc6ca8 --- /dev/null +++ b/code/datums/supplypacks/robotics_vr.dm @@ -0,0 +1,34 @@ +/datum/supply_packs/robotics/mecha_gopher + name = "Circuit Crate (\"Gopher\" APLU)" + contains = list( + /obj/item/weapon/circuitboard/mecha/gopher/main, + /obj/item/weapon/circuitboard/mecha/gopher/peripherals + ) + cost = 25 + containertype = /obj/structure/closet/crate/secure/science + containername = "APLU \"Gopher\" Circuit Crate" + access = access_robotics + +/datum/supply_packs/robotics/mecha_polecat + name = "Circuit Crate (\"Polecat\" APLU)" + contains = list( + /obj/item/weapon/circuitboard/mecha/polecat/main, + /obj/item/weapon/circuitboard/mecha/polecat/peripherals, + /obj/item/weapon/circuitboard/mecha/polecat/targeting + ) + cost = 25 + containertype = /obj/structure/closet/crate/secure/science + containername = "APLU \"Polecat\" Circuit Crate" + access = access_robotics + +/datum/supply_packs/robotics/mecha_weasel + name = "Circuit Crate (\"Weasel\" APLU)" + contains = list( + /obj/item/weapon/circuitboard/mecha/weasel/main, + /obj/item/weapon/circuitboard/mecha/weasel/peripherals, + /obj/item/weapon/circuitboard/mecha/weasel/targeting + ) + cost = 25 + containertype = /obj/structure/closet/crate/secure/science + containername = "APLU \"Weasel\" Circuit Crate" + access = access_robotics diff --git a/code/game/mecha/micro/mecha_construction_paths_vr.dm b/code/game/mecha/micro/mecha_construction_paths_vr.dm new file mode 100644 index 0000000000..305cdfcf92 --- /dev/null +++ b/code/game/mecha/micro/mecha_construction_paths_vr.dm @@ -0,0 +1,768 @@ + +/datum/construction/mecha/polecat_chassis + steps = list(list("key"=/obj/item/mecha_parts/micro/part/polecat_torso),//1 + list("key"=/obj/item/mecha_parts/micro/part/polecat_left_arm),//2 + list("key"=/obj/item/mecha_parts/micro/part/polecat_right_arm),//3 + list("key"=/obj/item/mecha_parts/micro/part/polecat_left_leg),//4 + list("key"=/obj/item/mecha_parts/micro/part/polecat_right_leg)//5 + ) + + custom_action(step, atom/used_atom, mob/user) + user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]") + holder.overlays += used_atom.icon_state+"+o" + qdel(used_atom) + return 1 + + action(atom/used_atom,mob/user as mob) + return check_all_steps(used_atom,user) + + spawn_result() + var/obj/item/mecha_parts/chassis/const_holder = holder + const_holder.construct = new /datum/construction/reversible/mecha/polecat(const_holder) + const_holder.icon = 'icons/mecha/mech_construction_vr.dmi' + const_holder.icon_state = "polecat0" + const_holder.density = 1 + const_holder.overlays.len = 0 + spawn() + qdel(src) + return + + +/datum/construction/reversible/mecha/polecat + result = "/obj/mecha/micro/sec/polecat" + steps = list( + //1 + list("key"=/obj/item/weapon/weldingtool, + "backkey"=/obj/item/weapon/wrench, + "desc"="External armor is wrenched."), + //2 + list("key"=/obj/item/weapon/wrench, + "backkey"=/obj/item/weapon/crowbar, + "desc"="External armor is installed."), + //3 + list("key"=/obj/item/mecha_parts/micro/part/polecat_armour, + "backkey"=/obj/item/weapon/weldingtool, + "desc"="Internal armor is welded."), + //4 + list("key"=/obj/item/weapon/weldingtool, + "backkey"=/obj/item/weapon/wrench, + "desc"="Internal armor is wrenched"), + //5 + list("key"=/obj/item/weapon/wrench, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Internal armor is installed"), + //6 + list("key"=/obj/item/stack/material/steel, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="Advanced capacitor is secured"), + //7 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Advanced capacitor is installed"), + //8 + list("key"=/obj/item/weapon/stock_parts/capacitor/adv, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="Advanced scanner module is secured"), + //9 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Advanced scanner module is installed"), + //10 + list("key"=/obj/item/weapon/stock_parts/scanning_module/adv, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="Targeting module is secured"), + //11 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Targeting module is installed"), + //12 + list("key"=/obj/item/weapon/circuitboard/mecha/polecat/targeting, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="Peripherals control module is secured"), + //13 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Peripherals control module is installed"), + //14 + list("key"=/obj/item/weapon/circuitboard/mecha/polecat/peripherals, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="Central control module is secured"), + //15 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Central control module is installed"), + //16 + list("key"=/obj/item/weapon/circuitboard/mecha/polecat/main, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="The wiring is adjusted"), + //17 + list("key"=/obj/item/weapon/wirecutters, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="The wiring is added"), + //18 + list("key"=/obj/item/stack/cable_coil, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="The hydraulic systems are active."), + //19 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/wrench, + "desc"="The hydraulic systems are connected."), + //20 + list("key"=/obj/item/weapon/wrench, + "desc"="The hydraulic systems are disconnected.") + ) + + + action(atom/used_atom,mob/user as mob) + return check_step(used_atom,user) + + custom_action(index, diff, atom/used_atom, mob/user) + if(!..()) + return 0 + //TODO: better messages. + switch(index) + if(20) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + holder.icon_state = "polecat1" + if(19) + if(diff==FORWARD) + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + holder.icon_state = "polecat2" + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + holder.icon_state = "polecat0" + if(18) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + holder.icon_state = "polecat3" + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + holder.icon_state = "polecat1" + if(17) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + holder.icon_state = "polecat4" + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) + coil.amount = 4 + holder.icon_state = "polecat2" + if(16) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + qdel(used_atom) + holder.icon_state = "polecat5" + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + holder.icon_state = "polecat3" + if(15) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + holder.icon_state = "polecat6" + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + new /obj/item/weapon/circuitboard/mecha/polecat/main(get_turf(holder)) + holder.icon_state = "polecat4" + if(14) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + qdel(used_atom) + holder.icon_state = "polecat7" + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + holder.icon_state = "polecat5" + if(13) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + holder.icon_state = "polecat8" + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/polecat/peripherals(get_turf(holder)) + holder.icon_state = "polecat6" + if(12) + if(diff==FORWARD) + user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") + qdel(used_atom) + holder.icon_state = "polecat9" + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + holder.icon_state = "polecat7" + if(11) + if(diff==FORWARD) + user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") + holder.icon_state = "polecat10" + else + user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/polecat/targeting(get_turf(holder)) + holder.icon_state = "polecat8" + if(10) + if(diff==FORWARD) + user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].") + qdel(used_atom) + holder.icon_state = "polecat11" + else + user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") + holder.icon_state = "polecat9" + if(9) + if(diff==FORWARD) + user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.") + holder.icon_state = "polecat12" + else + user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].") + new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder)) + holder.icon_state = "polecat10" + if(8) + if(diff==FORWARD) + user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].") + qdel(used_atom) + holder.icon_state = "polecat13" + else + user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.") + holder.icon_state = "polecat11" + if(7) + if(diff==FORWARD) + user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.") + holder.icon_state = "polecat14" + else + user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].") + new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder)) + holder.icon_state = "polecat12" + if(6) + if(diff==FORWARD) + user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + holder.icon_state = "polecat15" + else + user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.") + holder.icon_state = "polecat13" + if(5) + if(diff==FORWARD) + user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + holder.icon_state = "polecat16" + else + user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") + var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) + MS.amount = 3 + holder.icon_state = "polecat14" + if(4) + if(diff==FORWARD) + user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + holder.icon_state = "polecat17" + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + holder.icon_state = "polecat15" + if(3) + if(diff==FORWARD) + user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].") + holder.icon_state = "polecat18" + else + user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + holder.icon_state = "polecat16" + if(2) + if(diff==FORWARD) + user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") + holder.icon_state = "polecat19" + else + user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].") + var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) + MS.amount = 5 + holder.icon_state = "polecat17" + if(1) + if(diff==FORWARD) + user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") + else + user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") + holder.icon_state = "polecat18" + return 1 + + spawn_result() + ..() + feedback_inc("mecha_polecat_created",1) + return + +/datum/construction/mecha/gopher_chassis + steps = list(list("key"=/obj/item/mecha_parts/micro/part/gopher_torso),//1 + list("key"=/obj/item/mecha_parts/micro/part/gopher_left_arm),//2 + list("key"=/obj/item/mecha_parts/micro/part/gopher_right_arm),//3 + list("key"=/obj/item/mecha_parts/micro/part/gopher_left_leg),//4 + list("key"=/obj/item/mecha_parts/micro/part/gopher_right_leg)//5 + ) + + custom_action(step, atom/used_atom, mob/user) + user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]") + holder.overlays += used_atom.icon_state+"+o" + qdel(used_atom) + return 1 + + action(atom/used_atom,mob/user as mob) + return check_all_steps(used_atom,user) + + spawn_result() + var/obj/item/mecha_parts/chassis/const_holder = holder + const_holder.construct = new /datum/construction/reversible/mecha/gopher(const_holder) + const_holder.icon = 'icons/mecha/mech_construction_vr.dmi' + const_holder.icon_state = "gopher0" + const_holder.density = 1 + const_holder.overlays.len = 0 + spawn() + qdel(src) + return + + +/datum/construction/reversible/mecha/gopher + result = "/obj/mecha/micro/utility/gopher" + steps = list( + //1 + list("key"=/obj/item/weapon/weldingtool, + "backkey"=/obj/item/weapon/wrench, + "desc"="External armor is wrenched."), + //2 + list("key"=/obj/item/weapon/wrench, + "backkey"=/obj/item/weapon/crowbar, + "desc"="External armor is installed."), + //3 + list("key"=/obj/item/stack/material/plasteel, + "backkey"=/obj/item/weapon/weldingtool, + "desc"="Internal armor is welded."), + //4 + list("key"=/obj/item/weapon/weldingtool, + "backkey"=/obj/item/weapon/wrench, + "desc"="Internal armor is wrenched"), + //5 + list("key"=/obj/item/weapon/wrench, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Internal armor is installed"), + //6 + list("key"=/obj/item/stack/material/steel, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="Peripherals control module is secured"), + //7 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Peripherals control module is installed"), + //8 + list("key"=/obj/item/weapon/circuitboard/mecha/gopher/peripherals, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="Central control module is secured"), + //9 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Central control module is installed"), + //10 + list("key"=/obj/item/weapon/circuitboard/mecha/gopher/main, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="The wiring is adjusted"), + //11 + list("key"=/obj/item/weapon/wirecutters, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="The wiring is added"), + //12 + list("key"=/obj/item/stack/cable_coil, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="The hydraulic systems are active."), + //13 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/wrench, + "desc"="The hydraulic systems are connected."), + //14 + list("key"=/obj/item/weapon/wrench, + "desc"="The hydraulic systems are disconnected.") + ) + + action(atom/used_atom,mob/user as mob) + return check_step(used_atom,user) + + custom_action(index, diff, atom/used_atom, mob/user) + if(!..()) + return 0 + + //TODO: better messages. + switch(index) + if(14) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + holder.icon_state = "gopher1" + if(13) + if(diff==FORWARD) + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + holder.icon_state = "gopher2" + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + holder.icon_state = "gopher0" + if(12) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + holder.icon_state = "gopher3" + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + holder.icon_state = "gopher1" + if(11) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + holder.icon_state = "gopher4" + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) + coil.amount = 4 + holder.icon_state = "gopher2" + if(10) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + qdel(used_atom) + holder.icon_state = "gopher5" + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + holder.icon_state = "gopher3" + if(9) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + holder.icon_state = "gopher6" + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + new /obj/item/weapon/circuitboard/mecha/gopher/main(get_turf(holder)) + holder.icon_state = "gopher4" + if(8) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + qdel(used_atom) + holder.icon_state = "gopher7" + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + holder.icon_state = "gopher5" + if(7) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + holder.icon_state = "gopher8" + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/gopher/peripherals(get_turf(holder)) + holder.icon_state = "gopher6" + if(6) + if(diff==FORWARD) + user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + holder.icon_state = "gopher9" + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + holder.icon_state = "gopher7" + if(5) + if(diff==FORWARD) + user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + holder.icon_state = "gopher10" + else + user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") + var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) + MS.amount = 3 + holder.icon_state = "gopher8" + if(4) + if(diff==FORWARD) + user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + holder.icon_state = "gopher11" + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + holder.icon_state = "gopher9" + if(3) + if(diff==FORWARD) + user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].") + holder.icon_state = "gopher12" + else + user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + holder.icon_state = "gopher10" + if(2) + if(diff==FORWARD) + user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") + holder.icon_state = "gopher13" + else + user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].") + var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) + MS.amount = 2 + holder.icon_state = "gopher11" + if(1) + if(diff==FORWARD) + user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") + else + user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") + holder.icon_state = "gopher12" + return 1 + + spawn_result() + ..() + feedback_inc("mecha_gopher_created",1) + return + +/datum/construction/mecha/weasel_chassis + steps = list(list("key"=/obj/item/mecha_parts/micro/part/weasel_torso),//1 + list("key"=/obj/item/mecha_parts/micro/part/weasel_head),//2 + list("key"=/obj/item/mecha_parts/micro/part/weasel_left_arm),//3 + list("key"=/obj/item/mecha_parts/micro/part/weasel_right_arm),//4 + list("key"=/obj/item/mecha_parts/micro/part/weasel_tri_leg),//5 + ) + + custom_action(step, atom/used_atom, mob/user) + user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]") + holder.overlays += used_atom.icon_state+"+o" + qdel(used_atom) + return 1 + + action(atom/used_atom,mob/user as mob) + return check_all_steps(used_atom,user) + + spawn_result() + var/obj/item/mecha_parts/chassis/const_holder = holder + const_holder.construct = new /datum/construction/reversible/mecha/weasel(const_holder) + const_holder.icon = 'icons/mecha/mech_construction_vr.dmi' + const_holder.icon_state = "weasel0" + const_holder.density = 1 + const_holder.overlays.len = 0 + spawn() + qdel(src) + return + + +/datum/construction/reversible/mecha/weasel + result = "/obj/mecha/micro/sec/weasel" + steps = list( + //1 + list("key"=/obj/item/weapon/weldingtool, + "backkey"=/obj/item/weapon/wrench, + "desc"="External armor is wrenched."), + //2 + list("key"=/obj/item/weapon/wrench, + "backkey"=/obj/item/weapon/crowbar, + "desc"="External armor is installed."), + //3 + list("key"=/obj/item/stack/material/plasteel, + "backkey"=/obj/item/weapon/weldingtool, + "desc"="Internal armor is welded."), + //4 + list("key"=/obj/item/weapon/weldingtool, + "backkey"=/obj/item/weapon/wrench, + "desc"="Internal armor is wrenched"), + //5 + list("key"=/obj/item/weapon/wrench, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Internal armor is installed"), + //6 + list("key"=/obj/item/stack/material/steel, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="Advanced capacitor is secured"), + //7 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Advanced capacitor is installed"), + //8 + list("key"=/obj/item/weapon/stock_parts/capacitor/adv, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="Advanced scanner module is secured"), + //9 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Advanced scanner module is installed"), + //10 + list("key"=/obj/item/weapon/stock_parts/scanning_module/adv, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="Targeting module is secured"), + //11 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Targeting module is installed"), + //12 + list("key"=/obj/item/weapon/circuitboard/mecha/weasel/targeting, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="Peripherals control module is secured"), + //13 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Peripherals control module is installed"), + //14 + list("key"=/obj/item/weapon/circuitboard/mecha/weasel/peripherals, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="Central control module is secured"), + //15 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/crowbar, + "desc"="Central control module is installed"), + //16 + list("key"=/obj/item/weapon/circuitboard/mecha/weasel/main, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="The wiring is adjusted"), + //17 + list("key"=/obj/item/weapon/wirecutters, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="The wiring is added"), + //18 + list("key"=/obj/item/stack/cable_coil, + "backkey"=/obj/item/weapon/screwdriver, + "desc"="The hydraulic systems are active."), + //19 + list("key"=/obj/item/weapon/screwdriver, + "backkey"=/obj/item/weapon/wrench, + "desc"="The hydraulic systems are connected."), + //20 + list("key"=/obj/item/weapon/wrench, + "desc"="The hydraulic systems are disconnected.") + ) + + + action(atom/used_atom,mob/user as mob) + return check_step(used_atom,user) + + custom_action(index, diff, atom/used_atom, mob/user) + if(!..()) + return 0 + //TODO: better messages. + switch(index) + if(20) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + holder.icon_state = "weasel1" + if(19) + if(diff==FORWARD) + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + holder.icon_state = "weasel2" + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + holder.icon_state = "weasel0" + if(18) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + holder.icon_state = "weasel3" + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + holder.icon_state = "weasel1" + if(17) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + holder.icon_state = "weasel4" + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) + coil.amount = 4 + holder.icon_state = "weasel2" + if(16) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + qdel(used_atom) + holder.icon_state = "weasel5" + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + holder.icon_state = "weasel3" + if(15) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + holder.icon_state = "weasel6" + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + new /obj/item/weapon/circuitboard/mecha/weasel/main(get_turf(holder)) + holder.icon_state = "weasel4" + if(14) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + qdel(used_atom) + holder.icon_state = "weasel7" + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + holder.icon_state = "weasel5" + if(13) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + holder.icon_state = "weasel8" + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/weasel/peripherals(get_turf(holder)) + holder.icon_state = "weasel6" + if(12) + if(diff==FORWARD) + user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") + qdel(used_atom) + holder.icon_state = "weasel9" + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + holder.icon_state = "weasel7" + if(11) + if(diff==FORWARD) + user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") + holder.icon_state = "weasel10" + else + user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/weasel/targeting(get_turf(holder)) + holder.icon_state = "weasel8" + if(10) + if(diff==FORWARD) + user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].") + qdel(used_atom) + holder.icon_state = "weasel11" + else + user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") + holder.icon_state = "weasel9" + if(9) + if(diff==FORWARD) + user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.") + holder.icon_state = "weasel12" + else + user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].") + new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder)) + holder.icon_state = "weasel10" + if(8) + if(diff==FORWARD) + user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].") + qdel(used_atom) + holder.icon_state = "weasel13" + else + user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.") + holder.icon_state = "weasel11" + if(7) + if(diff==FORWARD) + user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.") + holder.icon_state = "weasel14" + else + user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].") + new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder)) + holder.icon_state = "weasel12" + if(6) + if(diff==FORWARD) + user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].") + holder.icon_state = "weasel15" + else + user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.") + holder.icon_state = "weasel13" + if(5) + if(diff==FORWARD) + user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.") + holder.icon_state = "weasel16" + else + user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") + var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) + MS.amount = 3 + holder.icon_state = "weasel14" + if(4) + if(diff==FORWARD) + user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + holder.icon_state = "weasel17" + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + holder.icon_state = "weasel15" + if(3) + if(diff==FORWARD) + user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].") + holder.icon_state = "weasel18" + else + user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + holder.icon_state = "weasel16" + if(2) + if(diff==FORWARD) + user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") + holder.icon_state = "weasel19" + else + user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].") + var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) + MS.amount = 3 + holder.icon_state = "weasel17" + if(1) + if(diff==FORWARD) + user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].") + else + user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") + holder.icon_state = "weasel18" + return 1 + + spawn_result() + ..() + feedback_inc("mecha_weasel_created",1) + return diff --git a/code/game/mecha/micro/mecha_parts_vr.dm b/code/game/mecha/micro/mecha_parts_vr.dm new file mode 100644 index 0000000000..f16442abf7 --- /dev/null +++ b/code/game/mecha/micro/mecha_parts_vr.dm @@ -0,0 +1,141 @@ +//new micro parts define + +/obj/item/mecha_parts/micro + name = "mecha part" + icon = 'icons/mecha/mech_construct_vr.dmi' + icon_state = "blank" + w_class = ITEMSIZE_NORMAL + + +/obj/item/mecha_parts/micro/chassis/ + name="Mecha Chassis" + icon_state = "backbone" + var/datum/construction/construct + flags = CONDUCT + + attackby(obj/item/W as obj, mob/user as mob) + if(!construct || !construct.action(W, user)) + ..() + return + + attack_hand() + return +//Gopher +/obj/item/mecha_parts/micro/chassis/gopher + name = "Gopher Chassis" + icon_state = "gopher-chassis" + + New() + ..() + construct = new /datum/construction/mecha/gopher_chassis(src) + +/obj/item/mecha_parts/micro/part/gopher_torso + name="Gopher Torso" + desc="A torso part of Gopher. Contains power unit, processing core and life support systems." + icon_state = "gopher-torso" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_ENGINEERING = 2) + +/obj/item/mecha_parts/micro/part/gopher_left_arm + name="Gopher Left Arm" + desc="A Gopher left arm. Data and power sockets are compatible with most exosuit tools." + icon_state = "gopher-arm-left" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + +/obj/item/mecha_parts/micro/part/gopher_right_arm + name="Gopher Right Arm" + desc="A Gopher right arm. Data and power sockets are compatible with most exosuit tools." + icon_state = "gopher-arm-right" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + +/obj/item/mecha_parts/micro/part/gopher_left_leg + name="Gopher Left Leg" + desc="A Gopher left leg. Contains somewhat complex servodrives and balance maintaining systems." + icon_state = "gopher-leg-left" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + +/obj/item/mecha_parts/micro/part/gopher_right_leg + name="Gopher Right Leg" + desc="A Gopher right leg. Contains somewhat complex servodrives and balance maintaining systems." + icon_state = "gopher-leg-right" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) + +//polecat +/obj/item/mecha_parts/micro/chassis/polecat + name = "Polecat Chassis" + icon_state = "polecat-chassis" + New() + ..() + construct = new /datum/construction/mecha/polecat_chassis(src) + +/obj/item/mecha_parts/micro/part/polecat_torso + name="Polecat Torso" + icon_state = "polecat-torso" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_BIO = 3, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/micro/part/polecat_left_arm + name="Polecat Left Arm" + icon_state = "polecat-arm-left" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/micro/part/polecat_right_arm + name="Polecat Right Arm" + icon_state = "polecat-arm-right" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/micro/part/polecat_left_leg + name="Polecat Left Leg" + icon_state = "polecat-leg-left" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/micro/part/polecat_right_leg + name="Polecat Right Leg" + icon_state = "polecat-leg-right" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/micro/part/polecat_armour + name="Polecat Armour Plates" + icon_state = "polecat-armor" + origin_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 4, TECH_ENGINEERING = 5) + +//weasel +/obj/item/mecha_parts/micro/chassis/weasel + name = "Weasel Chassis" + icon_state = "weasel-chassis" + New() + ..() + construct = new /datum/construction/mecha/weasel_chassis(src) + +/obj/item/mecha_parts/micro/part/weasel_torso + name="Weasel Torso" + icon_state = "weasel-torso" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_BIO = 3, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/micro/part/weasel_head + name="Weasel Head" + icon_state = "weasel-head" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_MAGNET = 3, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/micro/part/weasel_left_arm + name="Weasel Left Arm" + icon_state = "weasel-arm-left" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/micro/part/weasel_right_arm + name="Weasel Right Arm" + icon_state = "weasel-arm-right" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) + +/*/obj/item/mecha_parts/micro/part/weasel_left_leg + name="Weasel Left Leg" + icon_state = "weasel-leg-left" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) + +/obj/item/mecha_parts/micro/part/weasel_right_leg + name="Weasel Right Leg" + icon_state = "weasel-leg-right" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3)*/ + +/obj/item/mecha_parts/micro/part/weasel_tri_leg + name="Weasel Legs" + icon_state = "weasel-leg-all" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) \ No newline at end of file diff --git a/code/game/mecha/micro/mecha_vr.dm b/code/game/mecha/micro/mecha_vr.dm new file mode 100644 index 0000000000..fee3afb2a6 --- /dev/null +++ b/code/game/mecha/micro/mecha_vr.dm @@ -0,0 +1,47 @@ +#ifdef T_BOARD_MICRO_MECHA +#error T_BOARD_MICRO_MECHA already defined elsewhere, we can't use it. +#endif +#define T_BOARD_MICRO_MECHA(name) "exosuit module circuit board (" + (name) + ")" + +/obj/item/weapon/circuitboard/mecha/gopher + origin_tech = list(TECH_DATA = 3) + +/obj/item/weapon/circuitboard/mecha/gopher/peripherals + name = T_BOARD_MICRO_MECHA("Gopher peripherals control") + icon_state = "mcontroller" + +/obj/item/weapon/circuitboard/mecha/gopher/main + name = T_BOARD_MICRO_MECHA("Gopher central control") + icon_state = "mainboard" + +/obj/item/weapon/circuitboard/mecha/polecat + origin_tech = list(TECH_DATA = 4) + +/obj/item/weapon/circuitboard/mecha/polecat/peripherals + name = T_BOARD_MICRO_MECHA("Polecat peripherals control") + icon_state = "mcontroller" + +/obj/item/weapon/circuitboard/mecha/polecat/targeting + name = T_BOARD_MICRO_MECHA("Polecat weapon control and targeting") + icon_state = "mcontroller" + origin_tech = list(TECH_DATA = 4, TECH_COMBAT = 4) + +/obj/item/weapon/circuitboard/mecha/polecat/main + name = T_BOARD_MICRO_MECHA("Weasel central control") + icon_state = "mainboard" + +/obj/item/weapon/circuitboard/mecha/weasel + origin_tech = list(TECH_DATA = 4) + +/obj/item/weapon/circuitboard/mecha/weasel/peripherals + name = T_BOARD_MICRO_MECHA("Weasel peripherals control") + icon_state = "mcontroller" + +/obj/item/weapon/circuitboard/mecha/weasel/targeting + name = T_BOARD_MICRO_MECHA("Weasel weapon control and targeting") + icon_state = "mcontroller" + origin_tech = list(TECH_DATA = 4, TECH_COMBAT = 4) + +/obj/item/weapon/circuitboard/mecha/weasel/main + name = T_BOARD_MICRO_MECHA("Weasel central control") + icon_state = "mainboard" diff --git a/code/game/mecha/micro/mechfab_designs_vr.dm b/code/game/mecha/micro/mechfab_designs_vr.dm new file mode 100644 index 0000000000..6b43db511b --- /dev/null +++ b/code/game/mecha/micro/mechfab_designs_vr.dm @@ -0,0 +1,187 @@ +/datum/design/item/mechfab/gopher + category = "Gopher" + time = 5 + +/datum/design/item/mechfab/gopher/chassis + name = "Gopher Chassis" + id = "gopher_chassis" + build_path = /obj/item/mecha_parts/micro/chassis/gopher + time = 3 + materials = list(DEFAULT_WALL_MATERIAL = 7000) + +/datum/design/item/mechfab/gopher/torso + name = "Gopher Torso" + id = "gopher_torso" + build_path = /obj/item/mecha_parts/micro/part/gopher_torso + materials = list(DEFAULT_WALL_MATERIAL = 15000, "glass" = 5250) + +/datum/design/item/mechfab/gopher/left_arm + name = "Gopher Left Arm" + id = "gopher_left_arm" + build_path = /obj/item/mecha_parts/micro/part/gopher_left_arm + materials = list(DEFAULT_WALL_MATERIAL = 8750) + +/datum/design/item/mechfab/gopher/right_arm + name = "Gopher Right Arm" + id = "gopher_right_arm" + build_path = /obj/item/mecha_parts/micro/part/gopher_right_arm + + materials = list(DEFAULT_WALL_MATERIAL = 8750) + +/datum/design/item/mechfab/gopher/left_leg + name = "Gopher Left Leg" + id = "gopher_left_leg" + build_path = /obj/item/mecha_parts/micro/part/gopher_left_leg + materials = list(DEFAULT_WALL_MATERIAL = 12500) + +/datum/design/item/mechfab/gopher/right_leg + name = "Gopher Right Leg" + id = "gopher_right_leg" + build_path = /obj/item/mecha_parts/micro/part/gopher_right_leg + materials = list(DEFAULT_WALL_MATERIAL = 12500) + +/datum/design/item/mecha/drill/micro + name = "Miniture Drill" + id = "micro_drill" + build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/micro + time = 5 + materials = list(DEFAULT_WALL_MATERIAL = 2500) + +/datum/design/item/mecha/hydraulic_clamp/micro + name = "Mounted ore box" + id = "ore_scoop" + build_path = /obj/item/mecha_parts/mecha_equipment/tool/micro/orescoop + time = 5 + materials = list(DEFAULT_WALL_MATERIAL = 2500) + +/datum/design/item/mechfab/polecat + category = "Polecat" + time = 10 + +/datum/design/item/mechfab/polecat/chassis + name = "Polecat Chassis" + id = "polecat_chassis" + build_path = /obj/item/mecha_parts/micro/chassis/polecat + time = 3 + materials = list(DEFAULT_WALL_MATERIAL = 7000) + +/datum/design/item/mechfab/polecat/torso + name = "Polecat Torso" + id = "polecat_torso" + build_path = /obj/item/mecha_parts/micro/part/polecat_torso + materials = list(DEFAULT_WALL_MATERIAL = 15000, "glass" = 5250) + +/datum/design/item/mechfab/polecat/left_arm + name = "Polecat Left Arm" + id = "polecat_left_arm" + build_path = /obj/item/mecha_parts/micro/part/polecat_left_arm + materials = list(DEFAULT_WALL_MATERIAL = 8750) + +/datum/design/item/mechfab/polecat/right_arm + name = "Polecat Right Arm" + id = "polecat_right_arm" + build_path = /obj/item/mecha_parts/micro/part/polecat_right_arm + materials = list(DEFAULT_WALL_MATERIAL = 8750) + +/datum/design/item/mechfab/polecat/left_leg + name = "Polecat Left Leg" + id = "polecat_left_leg" + build_path = /obj/item/mecha_parts/micro/part/polecat_left_leg + materials = list(DEFAULT_WALL_MATERIAL = 12500) + +/datum/design/item/mechfab/polecat/right_leg + name = "Polecat Right Leg" + id = "polecat_right_leg" + build_path = /obj/item/mecha_parts/micro/part/polecat_right_leg + materials = list(DEFAULT_WALL_MATERIAL = 12500) + +/datum/design/item/mechfab/polecat/armour + name = "Polecat Armour Plates" + id = "polecat_armour" + build_path = /obj/item/mecha_parts/micro/part/polecat_armour + time = 25 + materials = list(DEFAULT_WALL_MATERIAL = 12500, "plastic" = 7500) + +/datum/design/item/mecha/taser/micro + name = "\improper TS-12 \"Suppressor\" integrated taser" + id = "micro_taser" + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/microtaser + +/datum/design/item/mecha/weapon/laser/micro + name = "\improper WS-19 \"Torch\" laser carbine" + id = "micro_laser" +// req_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 3) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/microlaser + +/datum/design/item/mecha/weapon/laser_heavy/micro + name = "\improper PC-20 \"Lance\" light laser cannon" + id = "micro_laser_heavy" + req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3) + materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 1000, "diamond" = 2000) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/microheavy + +/datum/design/item/mecha/weapon/grenade_launcher/micro + name = "\improper FP-20 mounted grenade launcher" + id = "micro_flashbang_launcher" +// req_tech = list(TECH_COMBAT = 3) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/microflashbang + +/datum/design/item/mecha/weapon/scattershot/micro + name = "\improper Remington C-12 \"Boomstick\"" + desc = "A mounted combat shotgun with integrated ammo-lathe." + id = "micro_scattershot" +// req_tech = list(TECH_COMBAT = 4) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/microshotgun + +/datum/design/item/mechfab/weasel + category = "Weasel" + time = 5 + +/datum/design/item/mechfab/weasel/chassis + name = "Weasel Chassis" + id = "weasel_chassis" + build_path = /obj/item/mecha_parts/micro/chassis/weasel + time = 3 + materials = list(DEFAULT_WALL_MATERIAL = 7000) + +/datum/design/item/mechfab/weasel/torso + name = "Weasel Torso" + id = "weasel_torso" + build_path = /obj/item/mecha_parts/micro/part/weasel_torso + materials = list(DEFAULT_WALL_MATERIAL = 15000, "glass" = 5250) + +/datum/design/item/mechfab/weasel/left_arm + name = "Weasel Left Arm" + id = "weasel_left_arm" + build_path = /obj/item/mecha_parts/micro/part/weasel_left_arm + materials = list(DEFAULT_WALL_MATERIAL = 8750) + +/datum/design/item/mechfab/weasel/right_arm + name = "Weasel Right Arm" + id = "weasel_right_arm" + build_path = /obj/item/mecha_parts/micro/part/weasel_right_arm + materials = list(DEFAULT_WALL_MATERIAL = 8750) + +/*/datum/design/item/mechfab/weasel/left_leg + name = "Weasel Left Leg" + id = "weasel_left_leg" + build_path = /obj/item/mecha_parts/micro/part/weasel_left_leg + materials = list(DEFAULT_WALL_MATERIAL = 12500) + +/datum/design/item/mechfab/weasel/right_leg + name = "Weasel Right Leg" + id = "weasel_right_leg" + build_path = /obj/item/mecha_parts/micro/part/weasel_right_leg + materials = list(DEFAULT_WALL_MATERIAL = 12500)*/ + +/datum/design/item/mechfab/weasel/tri_leg + name = "Weasel Tri Leg" + id = "weasel_right_leg" + build_path = /obj/item/mecha_parts/micro/part/weasel_tri_leg + materials = list(DEFAULT_WALL_MATERIAL = 27500) + +/datum/design/item/mechfab/weasel/head + name = "Weasel Head" + id = "weasel_head" + build_path = /obj/item/mecha_parts/micro/part/weasel_head + materials = list(DEFAULT_WALL_MATERIAL = 7000, "glass" = 2500) \ No newline at end of file diff --git a/code/modules/research/designs_vr.dm b/code/modules/research/designs_vr.dm index 02b71645da..e074323cbd 100644 --- a/code/modules/research/designs_vr.dm +++ b/code/modules/research/designs_vr.dm @@ -180,6 +180,61 @@ build_path = /obj/item/weapon/circuitboard/quantumpad sort_string = "HABAH" +//////Micro mech stuff +/datum/design/circuit/mecha/gopher_main + name = "'Gopher' central control" + id = "gopher_main" + build_path = /obj/item/weapon/circuitboard/mecha/gopher/main + sort_string = "NAAEA" + +/datum/design/circuit/mecha/gopher_peri + name = "'Gopher' peripherals control" + id = "gopher_peri" + build_path = /obj/item/weapon/circuitboard/mecha/gopher/peripherals + sort_string = "NAAEB" + +/datum/design/circuit/mecha/polecat_main + name = "'Polecat' central control" + id = "polecat_main" + req_tech = list(TECH_DATA = 4) + build_path = /obj/item/weapon/circuitboard/mecha/polecat/main + sort_string = "NAAFA" + +/datum/design/circuit/mecha/polecat_peri + name = "'Polecat' peripherals control" + id = "polecat_peri" + req_tech = list(TECH_DATA = 4) + build_path = /obj/item/weapon/circuitboard/mecha/polecat/peripherals + sort_string = "NAAFB" + +/datum/design/circuit/mecha/polecat_targ + name = "'Polecat' weapon control and targeting" + id = "polecat_targ" + req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2) + build_path = /obj/item/weapon/circuitboard/mecha/polecat/targeting + sort_string = "NAAFC" + +/datum/design/circuit/mecha/weasel_main + name = "'Weasel' central control" + id = "weasel_main" + req_tech = list(TECH_DATA = 4) + build_path = /obj/item/weapon/circuitboard/mecha/weasel/main + sort_string = "NAAGA" + +/datum/design/circuit/mecha/weasel_peri + name = "'Weasel' peripherals control" + id = "weasel_peri" + req_tech = list(TECH_DATA = 4) + build_path = /obj/item/weapon/circuitboard/mecha/weasel/peripherals + sort_string = "NAAGB" + +/datum/design/circuit/mecha/weasel_targ + name = "'Weasel' weapon control and targeting" + id = "weasel_targ" + req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2) + build_path = /obj/item/weapon/circuitboard/mecha/weasel/targeting + sort_string = "NAAGC" + ////// RIGSuit Stuff /* /datum/design/item/rig diff --git a/icons/mecha/mech_construct_vr.dmi b/icons/mecha/mech_construct_vr.dmi new file mode 100644 index 0000000000000000000000000000000000000000..26d77724735419694098f1861271e1c7443a0f85 GIT binary patch literal 2682 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 N_jHYPDzqJt{|8G{*=qm* literal 0 HcmV?d00001 diff --git a/vorestation.dme b/vorestation.dme index 1f66405dc4..51337b5fad 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -858,6 +858,10 @@ #include "code\game\mecha\equipment\weapons\weapons.dm" #include "code\game\mecha\medical\medical.dm" #include "code\game\mecha\medical\odysseus.dm" +#include "code\game\mecha\micro\mecha_construction_paths_vr.dm" +#include "code\game\mecha\micro\mecha_parts_vr.dm" +#include "code\game\mecha\micro\mecha_vr.dm" +#include "code\game\mecha\micro\mechfab_designs_vr.dm" #include "code\game\mecha\micro\micro.dm" #include "code\game\mecha\micro\micro_equipment.dm" #include "code\game\mecha\micro\security.dm" From 9dda8cfe92ababbeae841223366f97af9c464dfc Mon Sep 17 00:00:00 2001 From: Mechoid Date: Sun, 29 Apr 2018 20:11:20 -0700 Subject: [PATCH 17/54] Power cost decrease on Lights and Shield Diffusers --- code/modules/power/lighting.dm | 2 +- code/modules/shieldgen/shield_diffuser.dm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 98d4d2233f..678ffd009e 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -161,7 +161,7 @@ layer = ABOVE_MOB_LAYER use_power = 2 idle_power_usage = 2 - active_power_usage = 20 + active_power_usage = 10 // Previously 20. power_channel = LIGHT //Lights are calc'd via area so they dont need to be in the machine list var/on = 0 // 1 if on, 0 if off var/brightness_range = 6 // luminosity when on, also used in power calculation diff --git a/code/modules/shieldgen/shield_diffuser.dm b/code/modules/shieldgen/shield_diffuser.dm index 1d2edb43cb..c30f8a7351 100644 --- a/code/modules/shieldgen/shield_diffuser.dm +++ b/code/modules/shieldgen/shield_diffuser.dm @@ -5,8 +5,8 @@ icon = 'icons/obj/machines/shielding.dmi' icon_state = "fdiffuser_on" use_power = 2 - idle_power_usage = 100 - active_power_usage = 2000 + idle_power_usage = 25 // Previously 100. + active_power_usage = 500 // Previously 2000 anchored = 1 density = 0 level = 1 From e7996182a6d92e78e180694dba909db1bc4534c5 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Mon, 30 Apr 2018 12:42:24 -0400 Subject: [PATCH 18/54] Center pocket newscaster sprite Suggested by https://github.com/VOREStation/VOREStation/issues/3596, this centers the pocket newscaster sprite rather than having it offset to the right in all cases. --- icons/obj/library.dmi | Bin 31059 -> 31060 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi index 9059e157697942cf2979d43e5f0e984d5c61df16..35dee6f7c565b4cc18ead82eb6165cf60ea8926b 100644 GIT binary patch delta 4935 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 F_#a~KylDUc From bdff90645f68f169a64c5d1febedd903cd9252cb Mon Sep 17 00:00:00 2001 From: Entosine <39016999+Entosine@users.noreply.github.com> Date: Sat, 5 May 2018 21:42:31 -0400 Subject: [PATCH 19/54] Adds Goat Legs, for satyrs and stuff. Also fixes a misnomer in the Ears and Tails DM file, there aren't any taur bodies in there anymore. --- .../vore/appearance/sprite_accessories_vr.dm | 9 ++++++++- icons/mob/vore/tails_vr.dmi | Bin 72299 -> 73310 bytes 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/code/modules/vore/appearance/sprite_accessories_vr.dm b/code/modules/vore/appearance/sprite_accessories_vr.dm index 5ea245462c..13c2f7b2da 100644 --- a/code/modules/vore/appearance/sprite_accessories_vr.dm +++ b/code/modules/vore/appearance/sprite_accessories_vr.dm @@ -1,6 +1,6 @@ /* Hello and welcome to VOREStation sprite_accessories: For a more general overview - please read sprite_accessories.dm. This file is for ears, tails, and taur bodies! + please read sprite_accessories.dm. This file is for ears and tails. This is intended to be friendly for people with little to no actual coding experience. !!WARNING!!: changing existing accessory information can be VERY hazardous to savefiles, to the point where you may completely corrupt a server's savefiles. Please refrain @@ -815,6 +815,13 @@ icon_state = "tigresstail" ckeys_allowed = list("hoodoo") +/datum/sprite_accessory/tail/satyr + name = "goat legs, colorable" + desc = "" + icon_state = "satyr" + color_blend_mode = ICON_MULTIPLY + do_colouration = 1 + /datum/sprite_accessory/tail/tailmaw name = "tailmaw, colorable" desc = "" diff --git a/icons/mob/vore/tails_vr.dmi b/icons/mob/vore/tails_vr.dmi index e5e07999969bdbd970c89a83e480372c5dee5f92..f628277b97f4ba246376c9b02d84c69bc9f5f42a 100644 GIT binary patch delta 6383 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 GU;H1|NI?_; delta 5364 zcmbt%X*`r|*!NhI>|~2clzmG=kuB0~-$umPDLWHm8!nZ7P10DBBzwj>O$x$hfA9Nzd(Lm?ac;-?KmNxy-Ns05W_)y>t|j||0#H&aiFldeConD< zUomrCT{VI6RO_(G)%6@thh3BY$TjNLHu*Z@9-t2BBR$O;jh_mPqeiV4sh+t`@K1Lx zTf_Da&Mv(3Xf*yb z-Hd%V>uyw@T|#eMO6UB9g`lX~Z1s;qlPdnLG1{R3?$iuAAYWvSqgnwcc^B z;NtSoX&%-w;TO_d=^s)J-eL*-dVZ%vr$jwk7;N-K&fBDL{H$^hHUB`rNVDZ+dn=#{ z6CH&fvhci=e4a6>m$Iiwe4VU4!-g8#|d}GfT*N-47zQliqN_28xenjgm^8d}!ka zn0sFtSa&VVO0p88V);GS+E0A4w)rpCA{1^RM=H4lhVjZImnN}c*cH3%9Vz>Fm**2|@?q@>} znD&nb9>gy6n}1_dZIr3|A}Bu!y;(OGWwqsys`gXpW@sWqlsi0Ij%$f&o;6+|<&2+{ zcI33RN)of10= zS-Ccs!?>RyBsNosiomSTZ_P@!v~(06F@?n9P)jA*7a#tjNB^RybEg+z$C)$Gu`&TE z0i{kP$RTP@s24bcZz!~XW9f63zS!f`gkK)ly%xXriVM@W})rh=m4VF?+_4G!$}E;{*~{ywyG)XCD)(g;w| z+4Y^^-{16XYhX`^UVLeWEa$#$M$sy9atU2-LMaCIZEb8Y*wFCs!(fecCq>fozrsMd zH0%3WF%T<@S-$>v(t+PMkdP-reFPqCDazj@wz z`z?(>#lTaV?}1N&G=Ca+TA7Vu#233Y7F?j&yITxVR#PjVYFR1HfF2d92L+y#5Kwa7 zzb?%uoMIq;N4Vx~4ET+FOKDZa>h~T6G6vj3`1N(p0_4JFB-C0T1>|wbNL`;C6KX!ZS zBc(B~urSBZ&+q1W9+m`sP)`=-hndR{s;W~#I=VL`8<#!E%{~3fTISC|Y+m_dUvFp8 z+|dG%kicYWW|j~6GC8?-$85O1zTT3QM?pkRnp@&Tj%ZUspN^?d#>{ezkwHiegM#Y% zJXQJ@)vTRAcaIl4P|4`6?i?Hwv1#yliMR!>B4@%p!$w4FXbhoLbMB}(TO8cy;*>%t*h!o#& z2X=hK>PzqjCdk0x;Oxg-xi`>Kh7%mmR(DVmpM3% zL^QsQ`Hh1($=l`S6&K?!*gw;bxovK4{?Vg1^UBudH1JSF6KQG+3Wh5zG_{i*W~ulU zf}eEq<;!uATF|=%%rX~1%2`SC6|}UJUox{fpYzW#hfvz6JsR$JgjSz-lf9Eu{FBCI zsjTX1gsUq=p9N&tJfh|H_LqJ>Lp??G!O1TEu8zYN2^GZzJY;f($3C~0&cTWb0Dm`zyBW}T1{ZyLikJ! zj`9X-7L#z6jk&}}7z~B4o@DAUaYI0t0N)}~-b-X@(W8k>#h*#RcZ`frg5Cs!%_8yH zgWmY>>}kV`&7j)Bc(Nr7z;4;UpowY(e;WYV<#DwL>Ay{UY+f-#^ls8=B?s1@0@I9n z_|BSF_gn}>S2njXU@CAW4vS~Tqjnc7BKB8%=^*`{jmseg{GBTK>FK?5ASfWk65YfK z2j5r8iQRtiPRtf&D8^NpV1g!&SmLVd>MTCYg*-970A@a*lY-EL1vtEDl&Gv`MH3UA zKZk-V;A0z`n->!T=02@czD?wH0dw3D_3NAQy3Lp2yGNX zRBu6Xac_5be61eFrp#K#)YMd?by8hTO){J|kpOxapNWYHB<}F=u=U5kPaseGJv~*0 z6NmuiLAejs@71$dR`K9HCPagMe7O&Z%0D#>u&}3Sw4q9VJQqC$(NZ$PrwJ>w z)@yM}(cInbXTiKD{RfRMJn1)|tFzzG_96K3>cQrfdy0^VzB+p;N zl$x8HJ8>$wLXJPpeZA0BAk7d=MYc5~tqg|p{5kmWmBik;`(P;NV-*wuL=38)KGI`<(1$C~hdM(zz`Gq3kVQTs<~ z8XA9YmRP=xI$oY|Ko>oa`X$q{^CmwrG0{^zJ9uE#;yh1dp$jT#O^K!$cUuXXMeKz} zvz_3CJ{e?lZ^aN-fz=R^Yf*fo0a8iAa1!Om?cUyA&DQBChY~6|e5Pl->CTy7PDL6a z`saC0rl+TW`&wnA38n6CQbn6w!f%_%=Dx48sZdr?d0-%ZpI6FUV@+qa_6w}mE@5Ux zpr)oKENkQm#IDNLvdY#~ka=xKi><4())6NH?3VPXn)&Pik@G; zs&7i>D4X%>vw+nZ8$0_s;S6K5;a8%>DO@Us`bE|3Myb^mRn>UoGWv6jro#p*`Q6}| zpNZ7Tf*$JTVX1YM$XQ|GT@O{^1Iyv&pip?n#BwXrn6z0_P#(jZaYIMsc(u&>%JOE^ z(a>@$u=I)=MJpY5ZxBRjyA0zz1d2Z=*}pCne!DFUg&x*msI#-PZjLjt?wYkfn^xEn@MVA3hvoxweBM#VbL;Iz@$xrBl@mWZ7Htaw0k{ z>qaReGExYvx!T*?u}pHdu%3?}SwrDQpd*o}w4Vp|vbpnwm_05QMu3Yo0kq6V3PK@W zNkO5cu8uP;Elu=V7E%+;fO5IUlo?x?sI!AZetuC=43>QP01DDvhnF=Wk-aN#NR`$l zcMG%cg7<5*5zl@U+i~`|0w}XKi;;IE*XftUfthpYbK&%~vk)6I-HXM&vLc?8ZmHOg zBMKIaZK|>bez_F3DL{`zTk#T?b##LK*zF)h3IY;Gp?FQ=+`=Be=3;p9rrn&w&5jIN zu4>PrVtO~JB+8kfw)^1qSvrS;Ae)=L0zs|NW!5L9ES@)G&=V@li^CO^lIuyz8XC!< z1>YQHnw{rCczZMB0?F^e>O9P%{%YjfD^uV+PhMW$aUHv~78ab$ zCr-EtGJ`DN-`4`8Zj00M&)pPcbwz~{rmk*%b^p=#)fKHm&7c;iPor_oEqlPo62v>K z<8^>TQJFdCMLQgI84|fX)sk5kQ(ob}hqF+LO3{!^p@>t&l11HWx!2 z=x`BQ$0a(4?g3l??*OkqC7}2fqshm&x)OUQCwz922cZIiZ3H6JMK28LbP;aJalh=M-$Kmbt%*>CjfU^B5WqxYZE@;g0aRL9doWbIK@C=;XZ@ndO{0 zDHMum))0w=3t0FdJh^Oh21tYT4wV{(EdG08d=Xwx!?;k@N-S@hT3DD+pL7itPX^#2 zO~BD%c|aW$l=HDNUD4E(yILl|u^x2f* zgj2M7V#6R^<%nA)uR!C^?t*7=bjKa42qjju65ndm5nZ*6$KT}?oI!%o=b2`>IXw;? z67I`&Dyd5&d|3o?$EoASSKq%6%}0bQeGHM3rfI}G6kVbU*V722sWzNIZKsO5x)iRa z=j4wcKLp#7V;L9(!R9KgY=$>4w&vbw>bJ1sfRFk4LPqiVnn54rlai7q8#|Jpb#HCc z{q1GNU(&8^h}MJcA%T2>>$ou+x~}gNPIp|kgYEIDzxaVIFTWe)zx}@4|Cb2(A7uYq zQFb&vnCJ8Sjn3768NB!RwwIr7opJ^7&&yudi`>29VKjDcvphUoWpv z0qH;{V&M4E5%|l7hKrH33GBo|fMODed2%vTW&7EKF`8&SlBE0J-;~akJpuE7*T;{k zU&7$b^!G6wGNU5bOCF)t`lZgr|NOPXbBu@8f~B{&_aoyn-|(gJrV2lc!AUKgt!zSm zem)X-di}q-P-*?o=p+=&BW- zZpD~K1kC?>8$ik(*dw9&2Nt2K(8n7zRg!z(r|2 z&vY^i1~H4!f=G<| From f746821964331eac3fdacc401fc5d2f9d1683a91 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Wed, 9 May 2018 14:49:00 -0400 Subject: [PATCH 20/54] Ports 'fake' SSAO from /tg/ as a preference Allows players to pick whether they want this visual feature or not. Basically adds drop-shadows to objects and stuff. It's off by default. --- code/__defines/lighting.dm | 5 ++- code/__defines/mobs.dm | 6 +++- .../preference_setup/global/setting_datums.dm | 14 ++++++++ code/modules/mob/login.dm | 5 +++ code/modules/mob/mob_planes.dm | 23 ++++++++++++ html/changelogs/arokha - ssao.yml | 36 +++++++++++++++++++ 6 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 html/changelogs/arokha - ssao.yml diff --git a/code/__defines/lighting.dm b/code/__defines/lighting.dm index 00e473fc2a..9304a26efe 100644 --- a/code/__defines/lighting.dm +++ b/code/__defines/lighting.dm @@ -72,4 +72,7 @@ #define LIGHT_COLOR_FLARE "#FA644B" //Bright, non-saturated red. Leaning slightly towards pink for visibility. rgb(250, 100, 75) #define LIGHT_COLOR_SLIME_LAMP "#AFC84B" //Weird color, between yellow and green, very slimy. rgb(175, 200, 75) #define LIGHT_COLOR_TUNGSTEN "#FAE1AF" //Extremely diluted yellow, close to skin color (for some reason). rgb(250, 225, 175) -#define LIGHT_COLOR_HALOGEN "#F0FAFA" //Barely visible cyan-ish hue, as the doctor prescribed. rgb(240, 250, 250) \ No newline at end of file +#define LIGHT_COLOR_HALOGEN "#F0FAFA" //Barely visible cyan-ish hue, as the doctor prescribed. rgb(240, 250, 250) + +//Fake ambient occlusion filter +#define AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, border=4, color="#04080FAA") diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index 23e0825299..53707c98cd 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -299,7 +299,11 @@ #define VIS_MESONS 18 -#define VIS_COUNT 18 //Must be highest number from above. +#define VIS_TURFS 19 +#define VIS_OBJS 20 +#define VIS_MOBS 21 + +#define VIS_COUNT 21 //Must be highest number from above. //Some mob icon layering defines #define BODY_LAYER -100 diff --git a/code/modules/client/preference_setup/global/setting_datums.dm b/code/modules/client/preference_setup/global/setting_datums.dm index 5260193848..393ac5841c 100644 --- a/code/modules/client/preference_setup/global/setting_datums.dm +++ b/code/modules/client/preference_setup/global/setting_datums.dm @@ -193,6 +193,20 @@ var/list/_client_preferences_by_type enabled_description = "Fancy" disabled_description = "Plain" +/datum/client_preference/ambient_occlusion + description = "Fake Ambient Occlusion" + key = "AMBIENT_OCCLUSION_PREF" + enabled_by_default = FALSE + enabled_description = "On" + disabled_description = "Off" + +/datum/client_preference/ambient_occlusion/toggled(var/mob/preference_mob, var/enabled) + . = ..() + if(preference_mob && preference_mob.plane_holder) + var/datum/plane_holder/PH = preference_mob.plane_holder + PH.set_ao(VIS_OBJS, enabled) + PH.set_ao(VIS_MOBS, enabled) + /******************** * Staff Preferences * ********************/ diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 9f316ba184..25142c524b 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -56,6 +56,11 @@ client.screen += plane_holder.plane_masters recalculate_vis() + // AO support + var/ao_enabled = client.is_preference_enabled(/datum/client_preference/ambient_occlusion) + plane_holder.set_ao(VIS_OBJS, ao_enabled) + plane_holder.set_ao(VIS_MOBS, ao_enabled) + //set macro to normal incase it was overriden (like cyborg currently does) client.set_hotkeys_macro("macro", "hotkeymode") diff --git a/code/modules/mob/mob_planes.dm b/code/modules/mob/mob_planes.dm index 9d252f762a..986050b5ad 100644 --- a/code/modules/mob/mob_planes.dm +++ b/code/modules/mob/mob_planes.dm @@ -11,6 +11,8 @@ my_mob = this_guy //It'd be nice to lazy init these but some of them are important to just EXIST. Like without ghost planemaster, you can see ghosts. Go figure. + + // 'Utility' planes plane_masters[VIS_FULLBRIGHT] = new /obj/screen/plane_master/fullbright //Lighting system (lighting_overlay objects) plane_masters[VIS_LIGHTING] = new /obj/screen/plane_master/lighting //Lighting system (but different!) plane_masters[VIS_GHOSTS] = new /obj/screen/plane_master/ghosts //Ghosts! @@ -33,6 +35,11 @@ plane_masters[VIS_MESONS] = new /obj/screen/plane_master{plane = PLANE_MESONS} //Meson-specific things like open ceilings. + // Real tangible stuff planes + plane_masters[VIS_TURFS] = new /obj/screen/plane_master{plane = TURF_PLANE; alpha = 255} + plane_masters[VIS_OBJS] = new /obj/screen/plane_master{plane = OBJ_PLANE; alpha = 255} + plane_masters[VIS_MOBS] = new /obj/screen/plane_master{plane = MOB_PLANE; alpha = 255} + ..() /datum/plane_holder/Destroy() @@ -67,6 +74,17 @@ for(var/SP in subplanes) set_vis(which = SP, new_alpha = new_alpha) +/datum/plane_holder/proc/set_ao(var/which = null, var/enabled = FALSE) + ASSERT(which) + var/obj/screen/plane_master/PM = plane_masters[which] + if(!PM) + crash_with("Tried to set_ao [which] in plane_holder on [my_mob]!") + PM.set_ambient_occlusion(enabled) + if(PM.sub_planes) + var/list/subplanes = PM.sub_planes + for(var/SP in subplanes) + set_ao(SP, enabled) + /datum/plane_holder/proc/alter_values(var/which = null, var/list/values = null) ASSERT(which) var/obj/screen/plane_master/PM = plane_masters[which] @@ -121,6 +139,11 @@ new_alpha = sanitize_integer(new_alpha, 0, 255, 255) alpha = new_alpha +/obj/screen/plane_master/proc/set_ambient_occlusion(var/enabled = FALSE) + filters -= AMBIENT_OCCLUSION + if(enabled) + filters += AMBIENT_OCCLUSION + /obj/screen/plane_master/proc/alter_plane_values() return //Stub diff --git a/html/changelogs/arokha - ssao.yml b/html/changelogs/arokha - ssao.yml new file mode 100644 index 0000000000..9dd89cfcef --- /dev/null +++ b/html/changelogs/arokha - ssao.yml @@ -0,0 +1,36 @@ +################################ +# 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: Arokha + +# 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: "Added a 'fake SSAO' toggle to Global in character setup, ported from /tg/. Looks like drop shadows on everything." From 2e59a88d821b26a5097e98597e69949bdb73ffd3 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Wed, 9 May 2018 14:52:01 -0400 Subject: [PATCH 21/54] VS: Plane renumber for SSAO --- code/__defines/mobs_vr.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/__defines/mobs_vr.dm b/code/__defines/mobs_vr.dm index d80d22df36..2e3f8b0760 100644 --- a/code/__defines/mobs_vr.dm +++ b/code/__defines/mobs_vr.dm @@ -1,13 +1,13 @@ #undef VIS_COUNT -#define VIS_CH_STATUS_R 19 -#define VIS_CH_HEALTH_VR 20 -#define VIS_CH_BACKUP 21 -#define VIS_CH_VANTAG 22 +#define VIS_CH_STATUS_R 22 +#define VIS_CH_HEALTH_VR 23 +#define VIS_CH_BACKUP 24 +#define VIS_CH_VANTAG 25 -#define VIS_AUGMENTED 23 +#define VIS_AUGMENTED 26 -#define VIS_COUNT 23 +#define VIS_COUNT 26 //Protean organs #define O_ORCH "orchestrator" From 00296486b894ea8712079629b2cf33ffae38009f Mon Sep 17 00:00:00 2001 From: Verkister Date: Thu, 10 May 2018 14:28:42 +0300 Subject: [PATCH 22/54] Fixes resleeving forcing reinstall wear for each backed up soft. -Seems like an oversight no one's brought up before as resleeving is supposed to restore the backed up nif with the softs included, not wear it out reinstalling everything on empty nif. -Basically just restores the backed up nif durability after restoring the nifsofts upon resleeving. --- code/modules/resleeving/machines.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm index ced1dcc634..ca4d9c7a67 100644 --- a/code/modules/resleeving/machines.dm +++ b/code/modules/resleeving/machines.dm @@ -529,6 +529,7 @@ var/obj/item/device/nif/nif = new MR.nif_path(occupant,MR.nif_durability) for(var/path in MR.nif_software) new path(nif) + nif.durability = MR.nif_durability //Restore backed up durability as the line above forces reinstall wear for each soft. // If it was a custom sleeve (not owned by anyone), update namification sequences if(!occupant.original_player) From 862f1eff44dd5493aa73db3b8eeb3a73f0e4ec8a Mon Sep 17 00:00:00 2001 From: Leshana Date: Thu, 10 May 2018 13:48:54 -0400 Subject: [PATCH 23/54] Override Polaris change: keep our light power usage the same as it was --- code/modules/power/lighting.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index bbba664bd1..4b611e990f 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -161,7 +161,7 @@ layer = ABOVE_MOB_LAYER use_power = 2 idle_power_usage = 2 - active_power_usage = 10 // Previously 20. + active_power_usage = 20 // VOREStation Edit - Keep lights at 20 power power_channel = LIGHT //Lights are calc'd via area so they dont need to be in the machine list var/on = 0 // 1 if on, 0 if off var/brightness_range = 10 // luminosity when on, also used in power calculation // VOREStation Edit - Put light range back how it was for now. From 1c519d28edadb9a3ede04b65ad1138340e40969e Mon Sep 17 00:00:00 2001 From: Verkister Date: Fri, 11 May 2018 13:49:16 +0300 Subject: [PATCH 24/54] More small fixes and such. -Applies the suggested durability tweak. -Makes backups save nif examine message. -Makes new nifs spawn with the examine message if provided upon resleeving and such. Basically the initial character spawn pref loading was the only case that wasn't resetting the message to default. -Fixes soulcatcher backups breaking ooc notes. (Applies ooc notes from character to the brainmob before saving it. Also includes brainmobs into the formerly human exclusive backup part responsible of saving nif and ooc notes to backups.) -Makes soulcatcher backup feature back up the owner if dying inside a belly of a soulcatcher lacking pred. (SC backup setting was completely voided if the pred didn't have SC themselves so your shit would be gone for good) -Fixes contaminate/digest_act sending holder mobs to shadow realm if holder is contained inside the equipment(storage/pockets) of a prey getting gurgled instead of the pred's gut. (As prey gear gets all contaminated at once while getting dumped in the gut, which would contaminate>digest_act the holder items prematurely during the gurgle dump.) --- code/controllers/subsystems/transcore_vr.dm | 2 ++ code/modules/mob/living/carbon/human/species/species_vr.dm | 3 ++- code/modules/nifsoft/software/13_soulcatcher.dm | 3 +++ code/modules/resleeving/infocore_records.dm | 4 +++- code/modules/resleeving/machines.dm | 4 ++-- code/modules/vore/eating/contaminate_vr.dm | 6 ++++-- 6 files changed, 16 insertions(+), 6 deletions(-) diff --git a/code/controllers/subsystems/transcore_vr.dm b/code/controllers/subsystems/transcore_vr.dm index 4958d87f3d..feae05ae91 100644 --- a/code/controllers/subsystems/transcore_vr.dm +++ b/code/controllers/subsystems/transcore_vr.dm @@ -139,10 +139,12 @@ SUBSYSTEM_DEF(transcore) var/datum/nifsoft/nifsoft = N nifsofts += nifsoft.type MR.nif_software = nifsofts + MR.nif_savedata = nif.save_data.Copy() else if(isnull(nif)) //Didn't pass anything, so no NIF MR.nif_path = null MR.nif_durability = null MR.nif_software = null + MR.nif_savedata = null else MR = new(mind, mind.current, add_to_db = TRUE, one_time = one_time) diff --git a/code/modules/mob/living/carbon/human/species/species_vr.dm b/code/modules/mob/living/carbon/human/species/species_vr.dm index c6a69369fa..fa3bb9762d 100644 --- a/code/modules/mob/living/carbon/human/species/species_vr.dm +++ b/code/modules/mob/living/carbon/human/species/species_vr.dm @@ -33,9 +33,10 @@ var/type = H.nif.type var/durability = H.nif.durability var/list/nifsofts = H.nif.nifsofts + var/list/nif_savedata = H.nif.save_data.Copy() ..() - var/obj/item/device/nif/nif = new type(H,durability) + var/obj/item/device/nif/nif = new type(H,durability,nif_savedata) nif.nifsofts = nifsofts else ..() diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index 9d2be6bdd2..f85e2ed0a3 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -230,6 +230,7 @@ if(ishuman(M)) var/mob/living/carbon/human/H = M brainmob.dna = H.dna + brainmob.ooc_notes = H.ooc_notes brainmob.timeofhostdeath = H.timeofdeath SStranscore.m_backup(brainmob.mind,0) //It does ONE, so medical will hear about it. @@ -461,6 +462,8 @@ if(istype(HP) && HP.nif && HP.nif.flag_check(NIF_O_SCOTHERS,NIF_FLAGS_OTHER)) var/datum/nifsoft/soulcatcher/SC = HP.nif.imp_check(NIF_SOULCATCHER) SC.catch_mob(H) + else if(H.nif && H.nif.flag_check(NIF_SC_BACKUPS)) + SStranscore.m_backup(H,0) //If dying inside a pred who lacks SC, let ours do a backup if enabled before it's gone for good. else if(H.nif && H.nif.flag_check(NIF_O_SCMYSELF,NIF_FLAGS_OTHER)) //They are caught in their own NIF var/datum/nifsoft/soulcatcher/SC = H.nif.imp_check(NIF_SOULCATCHER) SC.catch_mob(H) diff --git a/code/modules/resleeving/infocore_records.dm b/code/modules/resleeving/infocore_records.dm index db9bbfa8ea..834b067e9d 100644 --- a/code/modules/resleeving/infocore_records.dm +++ b/code/modules/resleeving/infocore_records.dm @@ -26,6 +26,7 @@ var/nif_path var/nif_durability var/list/nif_software + var/list/nif_savedata = list() var/one_time = FALSE @@ -42,7 +43,7 @@ cryo_at = 0 //Mental stuff the game doesn't keep mentally - if(istype(M)) + if(istype(M) || istype(M,/mob/living/carbon/brain/caught_soul)) id_gender = M.identifying_gender languages = M.languages.Copy() mind_oocnotes = M.ooc_notes @@ -55,6 +56,7 @@ var/datum/nifsoft/nifsoft = N nifsofts += nifsoft.type nif_software = nifsofts + nif_savedata = M.nif.save_data.Copy() last_update = world.time diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm index ca4d9c7a67..8554a1d6ce 100644 --- a/code/modules/resleeving/machines.dm +++ b/code/modules/resleeving/machines.dm @@ -526,10 +526,10 @@ //Re-supply a NIF if one was backed up with them. if(MR.nif_path) - var/obj/item/device/nif/nif = new MR.nif_path(occupant,MR.nif_durability) + var/obj/item/device/nif/nif = new MR.nif_path(occupant,,MR.nif_savedata) for(var/path in MR.nif_software) new path(nif) - nif.durability = MR.nif_durability //Restore backed up durability as the line above forces reinstall wear for each soft. + nif.durability = MR.nif_durability //Restore backed up durability after restoring the softs. // If it was a custom sleeve (not owned by anyone), update namification sequences if(!occupant.original_player) diff --git a/code/modules/vore/eating/contaminate_vr.dm b/code/modules/vore/eating/contaminate_vr.dm index 92964b519b..e1d6a0f6c1 100644 --- a/code/modules/vore/eating/contaminate_vr.dm +++ b/code/modules/vore/eating/contaminate_vr.dm @@ -103,8 +103,10 @@ var/image/gurgled_overlay = image('icons/effects/sludgeoverlay_vr.dmi') return TRUE /obj/item/weapon/holder/gurgle_contaminate(var/atom/movable/item_storage = null) - digest_act(item_storage) - return TRUE + if(isbelly(loc)) + digest_act(item_storage) + return TRUE + return FALSE /obj/item/organ/gurgle_contaminate(var/atom/movable/item_storage = null) digest_act(item_storage) From 08269f45fb5b20ddcd9b0b9817b3a3393d1fbf74 Mon Sep 17 00:00:00 2001 From: Verkister Date: Fri, 11 May 2018 16:14:02 +0300 Subject: [PATCH 25/54] Makes gurgle gains scale according to actual received damage. -Fixes armored, synthetic, and otherwise resistant prey giving several times more nutrition than their squishy counterparts. -They will still take longer to digest, but what would ya expect for armor, at least the gains are at the correct level now. -Same for sleeperbellies. -Also made sleeperbelly gurgledamages non-hardcoded vars but there's no knob for them yet. --- .../living/silicon/robot/dogborg/dog_sleeper_vr.dm | 13 ++++++++++--- code/modules/vore/eating/bellymodes_vr.dm | 11 ++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm index c18041e1a6..5f9d93bb72 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm @@ -23,6 +23,8 @@ var/startdrain = 500 var/max_item_count = 1 var/gulpsound = 'sound/vore/gulp.ogg' + var/digest_brute = 2 + var/digest_burn = 3 /obj/item/device/dogborg/sleeper/New() ..() @@ -504,9 +506,14 @@ if((T.status_flags & GODMODE) || !T.digestable) items_preserved += T else - T.adjustBruteLoss(2) - T.adjustFireLoss(3) - drain(-100) //20*total loss as with voreorgan stats. + var/old_brute = T.getBruteLoss() + var/old_burn = T.getFireLoss() + T.adjustBruteLoss(digest_brute) + T.adjustFireLoss(digest_burn) + var/actual_brute = T.getBruteLoss() - old_brute + var/actual_burn = T.getFireLoss() - old_burn + var/damage_gain = actual_brute + actual_burn + drain(-25 * damage_gain) //25*total loss as with voreorgan stats. update_patient() //Pick a random item to deal with (if there are any) diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index 39219aa1ad..62fc770e49 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -126,18 +126,23 @@ continue // Deal digestion damage (and feed the pred) + var/old_brute = M.getBruteLoss() + var/old_burn = M.getFireLoss() M.adjustBruteLoss(digest_brute) M.adjustFireLoss(digest_burn) + var/actual_brute = M.getBruteLoss() - old_brute + var/actual_burn = M.getFireLoss() - old_burn + var/damage_gain = actual_brute + actual_burn var/offset = (1 + ((M.weight - 137) / 137)) // 130 pounds = .95 140 pounds = 1.02 var/difference = owner.size_multiplier / M.size_multiplier if(isrobot(owner)) var/mob/living/silicon/robot/R = owner - R.cell.charge += 25*(digest_brute+digest_burn) + R.cell.charge += 25*damage_gain if(offset) // If any different than default weight, multiply the % of offset. - owner.nutrition += offset*(4.5*(digest_brute+digest_burn)/difference) //4.5 nutrition points per health point. Normal same size 100+100 health prey with average weight would give 900 points if the digestion was instant. With all the size/weight offset taxes plus over time oxyloss+hunger taxes deducted with non-instant digestion, this should be enough to not leave the pred starved. + owner.nutrition += offset*(4.5*(damage_gain)/difference) //4.5 nutrition points per health point. Normal same size 100+100 health prey with average weight would give 900 points if the digestion was instant. With all the size/weight offset taxes plus over time oxyloss+hunger taxes deducted with non-instant digestion, this should be enough to not leave the pred starved. else - owner.nutrition += 4.5*(digest_brute+digest_burn)/difference + owner.nutrition += 4.5*(damage_gain)/difference //////////////////////////// DM_ABSORB //////////////////////////// From b15d2c8bd904f19926fc71eb11d134103b4c93aa Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 11 May 2018 09:57:05 -0400 Subject: [PATCH 26/54] POLARIS: Probably fixes cameras Makes them include anything on planes less than 0 (so all the visible stuff) plus anything extra you specify in the plane list. Fixes #3529 --- code/modules/paperwork/photography.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 4c0f6bed0e..488bb7c8b6 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -131,7 +131,7 @@ var/global/photo_count = 0 var/icon_on = "camera" var/icon_off = "camera_off" var/size = 3 - var/picture_planes = list(PLANE_WORLD) + var/picture_planes = list() /obj/item/device/camera/verb/change_size() set name = "Set Photo Focus" @@ -182,7 +182,7 @@ var/global/photo_count = 0 // As well as anything that isn't invisible. for(var/atom/A in the_turf) if(A.invisibility) continue - if(!(A.plane in picture_planes)) continue + if(A.plane > 0 && !(A.plane in picture_planes)) continue atoms.Add(A) // Sort the atoms into their layers From d2acefe0c5818673b7d5b522566991f575954c04 Mon Sep 17 00:00:00 2001 From: Bear Date: Fri, 11 May 2018 12:57:12 -0400 Subject: [PATCH 27/54] Spelling Fix --- maps/tether/tether_things.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maps/tether/tether_things.dm b/maps/tether/tether_things.dm index 695b66d35a..2e8f11116e 100644 --- a/maps/tether/tether_things.dm +++ b/maps/tether/tether_things.dm @@ -369,7 +369,7 @@ var/global/list/latejoin_tram = list() /obj/item/weapon/reagent_containers/pill/airlock name = "\'Airlock\' Pill" - desc = "Neutralizes toxins and provides a mild alangesic effect." + desc = "Neutralizes toxins and provides a mild analgesic effect." icon_state = "pill2" /obj/item/weapon/reagent_containers/pill/airlock/New() From e6085f4aa126ecc756d24d037794e3a404cab8fc Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 11 May 2018 14:10:28 -0400 Subject: [PATCH 28/54] Allow throwing items into smartfridges (sometimes) Allows anyone to throw items at smartfridges, and have a small chance of it getting stored, UNLESS you're the 'expert job' for that smartfridge (e.g. Chemist for the Chemistry one), at which point there's a 98% chance because you and the machine have an understanding. --- code/game/machinery/kitchen/smartfridge_vr.dm | 32 +++++++++++++++++++ vorestation.dme | 1 + 2 files changed, 33 insertions(+) create mode 100644 code/game/machinery/kitchen/smartfridge_vr.dm diff --git a/code/game/machinery/kitchen/smartfridge_vr.dm b/code/game/machinery/kitchen/smartfridge_vr.dm new file mode 100644 index 0000000000..8b77e2f81d --- /dev/null +++ b/code/game/machinery/kitchen/smartfridge_vr.dm @@ -0,0 +1,32 @@ +/obj/machinery/smartfridge + var/expert_job = "Chef" +/obj/machinery/smartfridge/seeds + expert_job = "Botanist" +/obj/machinery/smartfridge/secure/extract + expert_job = "Xenobiologist" +/obj/machinery/smartfridge/secure/medbay + expert_job = "Chemist" +/obj/machinery/smartfridge/secure/virology + expert_job = "Medical Doctor" //Virologist is an alt-title unfortunately +/obj/machinery/smartfridge/chemistry + expert_job = "Chemist" //Unsure what this one is used for, actually +/obj/machinery/smartfridge/drinks + expert_job = "Bartender" + +// Allow thrown items into smartfridges +/obj/machinery/smartfridge/throw_impact(var/atom/movable/A) + . = ..() + if(accept_check(A) && A.thrower) + //Try to find what job they are via ID + var/obj/item/weapon/card/id/thrower_id + if(ismob(A.thrower)) + var/mob/T = A.thrower + thrower_id = T.GetIdCard() + + //98% chance the expert makes it + if(expert_job && thrower_id && thrower_id.rank == expert_job && prob(98)) + stock(A) + + //20% chance a non-expert makes it + else if(prob(20)) + stock(A) diff --git a/vorestation.dme b/vorestation.dme index 1b92618ced..30f6aa7e4d 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -819,6 +819,7 @@ #include "code\game\machinery\kitchen\icecream.dm" #include "code\game\machinery\kitchen\microwave.dm" #include "code\game\machinery\kitchen\smartfridge.dm" +#include "code\game\machinery\kitchen\smartfridge_vr.dm" #include "code\game\machinery\kitchen\cooking_machines\_cooker.dm" #include "code\game\machinery\kitchen\cooking_machines\_cooker_output.dm" #include "code\game\machinery\kitchen\cooking_machines\candy.dm" From 92edb296e088f69b10e53e8ac5c7a3be9d90372f Mon Sep 17 00:00:00 2001 From: kcin2001 Date: Sat, 12 May 2018 11:51:39 -0700 Subject: [PATCH 29/54] minor naming fix --- code/game/mecha/micro/mechfab_designs_vr.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/mecha/micro/mechfab_designs_vr.dm b/code/game/mecha/micro/mechfab_designs_vr.dm index 6b43db511b..940d7607e3 100644 --- a/code/game/mecha/micro/mechfab_designs_vr.dm +++ b/code/game/mecha/micro/mechfab_designs_vr.dm @@ -41,7 +41,7 @@ materials = list(DEFAULT_WALL_MATERIAL = 12500) /datum/design/item/mecha/drill/micro - name = "Miniture Drill" + name = "Miniature Drill" id = "micro_drill" build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/micro time = 5 @@ -184,4 +184,4 @@ name = "Weasel Head" id = "weasel_head" build_path = /obj/item/mecha_parts/micro/part/weasel_head - materials = list(DEFAULT_WALL_MATERIAL = 7000, "glass" = 2500) \ No newline at end of file + materials = list(DEFAULT_WALL_MATERIAL = 7000, "glass" = 2500) From 4706bf18018180a7bea540127ea6c0587795965c Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Mon, 30 Apr 2018 12:50:47 -0400 Subject: [PATCH 30/54] Resolve shower curtain/steam layering issue Reported in https://github.com/VOREStation/VOREStation/issues/3594, curtains and steam layer under mobs due to the plane update. This fixes that, and causes them to layer correctly. --- code/__defines/_planes+layers.dm | 3 --- code/game/objects/structures/curtains.dm | 15 ++++++++------- code/game/objects/structures/watercloset.dm | 3 ++- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/code/__defines/_planes+layers.dm b/code/__defines/_planes+layers.dm index ad2962547c..b5d0cfa11a 100644 --- a/code/__defines/_planes+layers.dm +++ b/code/__defines/_planes+layers.dm @@ -74,9 +74,6 @@ What is the naming convention for planes or layers? #define DOOR_CLOSED_LAYER 3.1 // Doors when closed #define WINDOW_LAYER 3.2 // Windows #define ON_WINDOW_LAYER 3.3 // Ontop of a window - #define SHOWER_OPEN_LAYER 3.4 // Showers when open - // Obj/Mob layer boundary - #define SHOWER_CLOSED_LAYER 4.2 // Should be converted to plane swaps // Mob planes #define MOB_PLANE -25 diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm index af129800b7..39c2dc43fd 100644 --- a/code/game/objects/structures/curtains.dm +++ b/code/game/objects/structures/curtains.dm @@ -2,13 +2,15 @@ name = "curtain" icon = 'icons/obj/curtain.dmi' icon_state = "closed" - layer = SHOWER_OPEN_LAYER + plane = MOB_PLANE + layer = ABOVE_MOB_LAYER opacity = 1 density = 0 /obj/structure/curtain/open icon_state = "open" - layer = SHOWER_CLOSED_LAYER + plane = OBJ_PLANE + layer = OBJ_LAYER opacity = 0 /obj/structure/curtain/bullet_act(obj/item/projectile/P, def_zone) @@ -27,10 +29,12 @@ set_opacity(!opacity) if(opacity) icon_state = "closed" - layer = SHOWER_CLOSED_LAYER + plane = MOB_PLANE + layer = ABOVE_MOB_LAYER else icon_state = "open" - layer = SHOWER_OPEN_LAYER + plane = OBJ_PLANE + layer = OBJ_LAYER /obj/structure/curtain/attackby(obj/item/P, mob/user) if(istype(P, /obj/item/weapon/wirecutters)) @@ -76,6 +80,3 @@ /obj/structure/curtain/open/shower/security color = "#AA0000" - -#undef SHOWER_OPEN_LAYER -#undef SHOWER_CLOSED_LAYER diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 9882ca4507..98e0f1a41e 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -142,7 +142,8 @@ name = "mist" icon = 'icons/obj/watercloset.dmi' icon_state = "mist" - layer = MOB_LAYER + 1 + plane = MOB_PLANE + layer = ABOVE_MOB_LAYER anchored = 1 mouse_opacity = 0 From aa421e4951a4f9f9a8f8ba265591f10079441cc8 Mon Sep 17 00:00:00 2001 From: Heroman3003 <31296024+Heroman3003@users.noreply.github.com> Date: Mon, 14 May 2018 11:33:01 +1000 Subject: [PATCH 31/54] Fixed shelter table being a frame reskin --- code/modules/mining/shelter_atoms.dm | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/code/modules/mining/shelter_atoms.dm b/code/modules/mining/shelter_atoms.dm index 3fefac54ab..b2fd378fac 100644 --- a/code/modules/mining/shelter_atoms.dm +++ b/code/modules/mining/shelter_atoms.dm @@ -41,9 +41,9 @@ if(!used) loc.visible_message("\The [src] begins to shake. Stand back!") used = TRUE - + sleep(5 SECONDS) - + var/turf/deploy_location = get_turf(src) var/status = template.check_deploy(deploy_location) switch(status) @@ -53,7 +53,7 @@ var/width = template.width var/height = template.height src.loc.visible_message("\The [src] doesn't have room to deploy! You need to clear a [width]x[height] area!") - + if(status != SHELTER_DEPLOY_ALLOWED) used = FALSE return @@ -112,10 +112,22 @@ name = "table" icon = 'icons/obj/survival_pod.dmi' icon_state = "table" + can_reinforce = FALSE + can_plate = FALSE /obj/structure/table/survival_pod/update_icon() icon_state = "table" +/obj/structure/table/survival_pod/New() + material = get_material_by_name(DEFAULT_WALL_MATERIAL) + verbs -= /obj/structure/table/verb/do_flip + verbs -= /obj/structure/table/proc/do_put + ..() + +/obj/structure/table/survival_pod/dismantle(obj/item/weapon/wrench/W, mob/user) + to_chat(user, "You cannot dismantle \the [src].") + return + //Sleeper /obj/machinery/sleeper/survival_pod desc = "A limited functionality sleeper, all it can do is put patients into stasis. It lacks the medication and configuration of the larger units." From f9d8118ecc0cec9be3927d75b513bb8d8dbba764 Mon Sep 17 00:00:00 2001 From: Heroman3003 <31296024+Heroman3003@users.noreply.github.com> Date: Mon, 14 May 2018 11:58:15 +1000 Subject: [PATCH 32/54] Added highlight to crushing/grabbing/disarming with feet --- code/modules/vore/resizing/resize_vr.dm | 48 ++++++++++++------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm index 9e957955b8..23987a3fed 100644 --- a/code/modules/vore/resizing/resize_vr.dm +++ b/code/modules/vore/resizing/resize_vr.dm @@ -242,14 +242,14 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 //Not a human, or not a taur, generic message only if(!H || !isTaurTail(H.tail_style)) - to_chat(src,"You quickly push [tmob] to the ground with your foot!") - to_chat(tmob,"[src] pushes you down to the ground with their foot!") + to_chat(src,"You quickly push [tmob] to the ground with your foot!") + to_chat(tmob,"[src] pushes you down to the ground with their foot!") //Human with taur tail, special messages are sent else var/datum/sprite_accessory/tail/taur/tail = H.tail_style - to_chat(src,STEP_TEXT_OWNER(tail.msg_owner_disarm_run)) - to_chat(tmob,STEP_TEXT_PREY(tail.msg_prey_disarm_run)) + to_chat(src,STEP_TEXT_OWNER("[tail.msg_owner_disarm_run]")) + to_chat(tmob,STEP_TEXT_PREY("[tail.msg_prey_disarm_run]")) //Walking on I_DISARM else @@ -264,14 +264,14 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 //Not a human, or not a taur, generic message only if(!H || !isTaurTail(H.tail_style)) - to_chat(src,"You firmly push your foot down on [tmob], painfully but harmlessly pinning them to the ground!") - to_chat(tmob,"[src] firmly pushes their foot down on you, quite painfully but harmlessly pinning you to the ground!") + to_chat(src,"You firmly push your foot down on [tmob], painfully but harmlessly pinning them to the ground!") + to_chat(tmob,"[src] firmly pushes their foot down on you, quite painfully but harmlessly pinning you to the ground!") //Human with taur tail, special messages are sent else var/datum/sprite_accessory/tail/taur/tail = H.tail_style - to_chat(src,STEP_TEXT_OWNER(tail.msg_owner_disarm_walk)) - to_chat(tmob,STEP_TEXT_PREY(tail.msg_prey_disarm_walk)) + to_chat(src,STEP_TEXT_OWNER("[tail.msg_owner_disarm_walk]")) + to_chat(tmob,STEP_TEXT_PREY("[tail.msg_prey_disarm_walk]")) //Return true, the sizediff was enough that we handled it. return TRUE @@ -297,14 +297,14 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 //Not a human, or not a taur, generic message only if(!H || !isTaurTail(H.tail_style)) - to_chat(src,"You carelessly step down onto [tmob], crushing them!") - to_chat(tmob,"[src] steps carelessly on your body, crushing you!") + to_chat(src,"You carelessly step down onto [tmob], crushing them!") + to_chat(tmob,"[src] steps carelessly on your body, crushing you!") //Human with taur tail, special messages are sent else var/datum/sprite_accessory/tail/taur/tail = H.tail_style - to_chat(src,STEP_TEXT_OWNER(tail.msg_owner_harm_run)) - to_chat(tmob,STEP_TEXT_PREY(tail.msg_prey_harm_run)) + to_chat(src,STEP_TEXT_OWNER("[tail.msg_owner_harm_run]")) + to_chat(tmob,STEP_TEXT_PREY("[tail.msg_prey_harm_run]")) //If they are a human, do damage (doesn't hurt other mobs...?) if(Ht) @@ -327,14 +327,14 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 //Not a human, or not a taur, generic message only if(!H || !isTaurTail(H.tail_style)) - to_chat(src,"You methodically place your foot down upon [tmob]'s body, slowly applying pressure, crushing them against the floor below!") - to_chat(tmob,"[src] methodically places their foot upon your body, slowly applying pressure, crushing you against the floor below!") + to_chat(src,"You methodically place your foot down upon [tmob]'s body, slowly applying pressure, crushing them against the floor below!") + to_chat(tmob,"[src] methodically places their foot upon your body, slowly applying pressure, crushing you against the floor below!") //Human with taur tail, special messages are sent else var/datum/sprite_accessory/tail/taur/tail = H.tail_style - to_chat(src,STEP_TEXT_OWNER(tail.msg_owner_harm_walk)) - to_chat(tmob,STEP_TEXT_PREY(tail.msg_prey_harm_walk)) + to_chat(src,STEP_TEXT_OWNER("[tail.msg_owner_harm_walk]")) + to_chat(tmob,STEP_TEXT_PREY("[tail.msg_prey_harm_walk]")) //Return true, the sizediff was enough that we handled it. return TRUE @@ -353,29 +353,29 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 //Not a human, or not a taur while wearing shoes = no grab if(!H || (!isTaurTail(H.tail_style) && H.shoes)) - to_chat(src,"You step down onto [tmob], squishing them and forcing them down to the ground!") - to_chat(tmob,"[src] steps down and squishes you with their foot, forcing you down to the ground!") + to_chat(src,"You step down onto [tmob], squishing them and forcing them down to the ground!") + to_chat(tmob,"[src] steps down and squishes you with their foot, forcing you down to the ground!") add_attack_logs(src,tmob,"Grabbed underfoot (nontaur, shoes)") //Human, not a taur, but not wearing shoes = yes grab else if(H && (!isTaurTail(H.tail_style) && !H.shoes)) - to_chat(src,"You pin [tmob] down onto the floor with your foot and curl your toes up around their body, trapping them inbetween them!") - to_chat(tmob,"[src] pins you down to the floor with their foot and curls their toes up around your body, trapping you inbetween them!") + to_chat(src,"You pin [tmob] down onto the floor with your foot and curl your toes up around their body, trapping them inbetween them!") + to_chat(tmob,"[src] pins you down to the floor with their foot and curls their toes up around your body, trapping you inbetween them!") equip_to_slot_if_possible(tmob.get_scooped(H), slot_shoes, 0, 1) add_attack_logs(src,tmob,"Grabbed underfoot (nontaur, no shoes)") //Human, taur, shoes = no grab, special message else if(H.shoes) var/datum/sprite_accessory/tail/taur/tail = H.tail_style - to_chat(src,STEP_TEXT_OWNER(tail.msg_owner_grab_fail)) - to_chat(tmob,STEP_TEXT_PREY(tail.msg_prey_grab_fail)) + to_chat(src,STEP_TEXT_OWNER("[tail.msg_owner_grab_fail]")) + to_chat(tmob,STEP_TEXT_PREY("[tail.msg_prey_grab_fail]")) add_attack_logs(src,tmob,"Grabbed underfoot (taur, shoes)") //Human, taur, no shoes = yes grab, special message else var/datum/sprite_accessory/tail/taur/tail = H.tail_style - to_chat(src,STEP_TEXT_OWNER(tail.msg_owner_grab_success)) - to_chat(tmob,STEP_TEXT_PREY(tail.msg_prey_grab_success)) + to_chat(src,STEP_TEXT_OWNER("[tail.msg_owner_grab_success]")) + to_chat(tmob,STEP_TEXT_PREY("[tail.msg_prey_grab_success]")) equip_to_slot_if_possible(tmob.get_scooped(H), slot_shoes, 0, 1) add_attack_logs(src,tmob,"Grabbed underfoot (taur, no shoes)") From e3b6efd03016f955db19422444fd5c6e96c460d1 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Mon, 14 May 2018 10:25:04 -0400 Subject: [PATCH 33/54] Fix a typo in vore load code Fixes #3684 --- code/modules/vore/eating/vore_vr.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm index 2205e54432..d6939e9c95 100644 --- a/code/modules/vore/eating/vore_vr.dm +++ b/code/modules/vore/eating/vore_vr.dm @@ -111,7 +111,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE allowmobvore = json_from_file["allowmobvore"] vore_taste = json_from_file["vore_taste"] can_be_drop_prey = json_from_file["can_be_drop_prey"] - can_be_drop_prey = json_from_file["can_be_drop_pred"] + can_be_drop_pred = json_from_file["can_be_drop_pred"] belly_prefs = json_from_file["belly_prefs"] //Quick sanitize From 1371249c809038c115a9b86621d24872b9cbeced Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Mon, 14 May 2018 10:56:19 -0400 Subject: [PATCH 34/54] Fix SSAO mode mouse opacity problem Fixes the title! --- code/modules/mob/mob_planes.dm | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/mob_planes.dm b/code/modules/mob/mob_planes.dm index 986050b5ad..7534ca176c 100644 --- a/code/modules/mob/mob_planes.dm +++ b/code/modules/mob/mob_planes.dm @@ -36,9 +36,9 @@ plane_masters[VIS_MESONS] = new /obj/screen/plane_master{plane = PLANE_MESONS} //Meson-specific things like open ceilings. // Real tangible stuff planes - plane_masters[VIS_TURFS] = new /obj/screen/plane_master{plane = TURF_PLANE; alpha = 255} - plane_masters[VIS_OBJS] = new /obj/screen/plane_master{plane = OBJ_PLANE; alpha = 255} - plane_masters[VIS_MOBS] = new /obj/screen/plane_master{plane = MOB_PLANE; alpha = 255} + plane_masters[VIS_TURFS] = new /obj/screen/plane_master/main{plane = TURF_PLANE} + plane_masters[VIS_OBJS] = new /obj/screen/plane_master/main{plane = OBJ_PLANE} + plane_masters[VIS_MOBS] = new /obj/screen/plane_master/main{plane = MOB_PLANE} ..() @@ -171,3 +171,9 @@ /obj/screen/plane_master/ghosts plane = PLANE_GHOSTS desired_alpha = 127 //When enabled, they're like half-transparent + +///////////////// +//The main game planes start normal and visible +/obj/screen/plane_master/main + alpha = 255 + mouse_opacity = 1 From bdfa34c911aed0a9697e2f5ea3f0d75c90579969 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Mon, 14 May 2018 11:38:22 -0400 Subject: [PATCH 35/54] SSAO object excludes Moves several things onto a new plane/layer to keep them from getting the SSAO shadows so it looks nicer. --- code/__defines/_planes+layers.dm | 2 +- code/game/machinery/alarm.dm | 4 ++++ code/game/machinery/buttons.dm | 2 ++ code/game/machinery/computer/camera.dm | 2 ++ code/game/machinery/computer/guestpass.dm | 2 ++ code/game/machinery/hologram.dm | 3 ++- code/game/machinery/newscaster.dm | 2 ++ code/game/machinery/recharger.dm | 2 ++ code/game/machinery/requests_console.dm | 2 ++ code/game/machinery/status_display.dm | 2 ++ code/game/objects/items/devices/radio/intercom.dm | 2 ++ .../structures/crates_lockers/closets/secure/medical.dm | 2 ++ .../structures/crates_lockers/closets/utility_closets.dm | 2 ++ code/game/objects/structures/extinguisher.dm | 2 ++ code/game/objects/structures/signs.dm | 3 ++- code/modules/power/apc.dm | 2 ++ code/modules/reagents/reagent_dispenser.dm | 2 ++ 17 files changed, 35 insertions(+), 3 deletions(-) diff --git a/code/__defines/_planes+layers.dm b/code/__defines/_planes+layers.dm index b5d0cfa11a..3686518108 100644 --- a/code/__defines/_planes+layers.dm +++ b/code/__defines/_planes+layers.dm @@ -58,7 +58,7 @@ What is the naming convention for planes or layers? #define ATMOS_LAYER 2.4 // Pipe-like atmos machinery that goes on the floor, like filters. #define ABOVE_UTILITY 2.5 // Above stuff like pipes and wires #define TURF_PLANE -45 // Turfs themselves, most flooring - #define ABOVE_TURF_LAYER 2.1 // Snow and such + #define ABOVE_TURF_LAYER 2.1 // Snow and wallmounted/floormounted equipment #define DECAL_PLANE -44 // Permanent decals #define DIRTY_PLANE -43 // Nonpermanent decals #define BLOOD_PLANE -42 // Blood is really dirty, but we can do special stuff if we separate it diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 6a435ef388..ee0bdc05a7 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -36,6 +36,8 @@ name = "alarm" icon = 'icons/obj/monitors.dmi' icon_state = "alarm0" + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER anchored = 1 use_power = 1 idle_power_usage = 80 @@ -804,6 +806,8 @@ FIRE ALARM desc = "\"Pull this in case of emergency\". Thus, keep pulling it forever." icon = 'icons/obj/monitors.dmi' icon_state = "fire0" + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER var/detecting = 1.0 var/working = 1.0 var/time = 10.0 diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index d51b79ae48..b9b9e8a360 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -2,6 +2,8 @@ name = "button" icon = 'icons/obj/objects.dmi' icon_state = "launcherbtt" + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER desc = "A remote control switch for something." var/id = null var/active = 0 diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 785abecbec..7c16309ec0 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -205,6 +205,8 @@ name = "Telescreen" desc = "Used for watching an empty arena." icon_state = "wallframe" + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER icon_keyboard = null icon_screen = null light_range_on = 0 diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm index 3a70d57173..3345e30ab7 100644 --- a/code/game/machinery/computer/guestpass.dm +++ b/code/game/machinery/computer/guestpass.dm @@ -78,6 +78,8 @@ /obj/machinery/computer/guestpass name = "guest pass terminal" icon_state = "guest" + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER icon_keyboard = null icon_screen = "pass" density = 0 diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 8c2c97f5a8..623cac6ef0 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -35,7 +35,8 @@ var/const/HOLOPAD_MODE = RANGE_BASED icon_state = "holopad0" show_messages = 1 circuit = /obj/item/weapon/circuitboard/holopad - layer = TURF_LAYER+0.1 //Preventing mice and drones from sneaking under them. + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER var/power_per_hologram = 500 //per usage per hologram idle_power_usage = 5 use_power = 1 diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index b9bd4a6855..048c1563b9 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -125,6 +125,8 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co desc = "A standard newsfeed handler for use on commercial space stations. All the news you absolutely have no use for, in one place!" icon = 'icons/obj/terminals.dmi' icon_state = "newscaster_normal" + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER var/isbroken = 0 //1 if someone banged it with something heavy var/ispowered = 1 //starts powered, changes with power_change() //var/list/datum/feed_channel/channel_list = list() //This list will contain the names of the feed channels. Each name will refer to a data region where the messages of the feed channels are stored. diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index c47d3738a0..3d2601b59d 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -249,6 +249,8 @@ obj/machinery/recharger name = "wall recharger" icon = 'icons/obj/stationobjs.dmi' icon_state = "wrecharger0" + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER active_power_usage = 25000 //25 kW , It's more specialized than the standalone recharger (guns, batons, and flashlights only) so make it more powerful allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/gun/magnetic, /obj/item/weapon/melee/baton, /obj/item/device/flashlight, /obj/item/weapon/cell/device) icon_state_charged = "wrecharger2" diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 45e1a7315d..65583f3473 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -28,6 +28,8 @@ var/list/obj/machinery/requests_console/allConsoles = list() anchored = 1 icon = 'icons/obj/terminals.dmi' icon_state = "req_comp0" + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER circuit = /obj/item/weapon/circuitboard/request var/department = "Unknown" //The list of all departments on the station (Determined from this variable on each unit) Set this to the same thing if you want several consoles in one department var/list/message_log = list() //List of all messages diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 9a02fddfd2..e3a00abb4d 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -12,6 +12,8 @@ /obj/machinery/status_display icon = 'icons/obj/status_display.dmi' icon_state = "frame" + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER name = "status display" anchored = 1 density = 0 diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index eb3ac7cb12..5bc75ca2a0 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -3,6 +3,8 @@ desc = "Talk through this." icon = 'icons/obj/radio_vr.dmi' //VOREStation Edit - New Icon icon_state = "intercom" + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER anchored = 1 w_class = ITEMSIZE_LARGE canhear_range = 2 diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 96a1b39477..66732a8209 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -313,6 +313,8 @@ icon_opened = "medical_wall_open" icon_broken = "medical_wall_spark" icon_off = "medical_wall_off" + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER anchored = 1 density = 0 wall_mounted = 1 diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index 62db60456e..c2b8ff731a 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -215,6 +215,8 @@ icon_state = "hydrant" icon_closed = "hydrant" icon_opened = "hydrant_open" + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER anchored = 1 density = 0 wall_mounted = 1 diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index bfbc34dcee..e93afd18f3 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -3,6 +3,8 @@ desc = "A small wall mounted cabinet designed to hold a fire extinguisher." icon = 'icons/obj/closet.dmi' icon_state = "extinguisher_closed" + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER anchored = 1 density = 0 var/obj/item/weapon/extinguisher/has_extinguisher diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index d94da02813..c1b0b6b0c5 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -3,7 +3,8 @@ anchored = 1 opacity = 0 density = 0 - layer = ABOVE_JUNK_LAYER + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER w_class = ITEMSIZE_NORMAL /obj/structure/sign/ex_act(severity) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 2de88c942d..8478aac50c 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -64,6 +64,8 @@ desc = "A control terminal for the area electrical systems." icon = 'icons/obj/power_vr.dmi' //VOREStation Edit - New Icon icon_state = "apc0" + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER anchored = 1 use_power = 0 req_access = list(access_engine_equip) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 5ec7aae23a..45af53eb87 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -5,6 +5,8 @@ desc = "..." icon = 'icons/obj/objects.dmi' icon_state = "watertank" + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER density = 1 anchored = 0 pressure_resistance = 2*ONE_ATMOSPHERE From 3d0e50e2a4b4f73314bb60c01e3f33b143e5eee7 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Mon, 14 May 2018 11:51:50 -0400 Subject: [PATCH 36/54] VS: The VS excludes for SSAO --- code/game/machinery/doors/firedoor_vr.dm | 9 +++++++++ code/modules/holomap/station_holomap.dm | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/doors/firedoor_vr.dm b/code/game/machinery/doors/firedoor_vr.dm index d15e435e69..2bc297a041 100644 --- a/code/game/machinery/doors/firedoor_vr.dm +++ b/code/game/machinery/doors/firedoor_vr.dm @@ -2,6 +2,15 @@ name = "\improper Emergency Shutter System" desc = "Emergency air-tight shutter, capable of sealing off breached areas. This model fits flush with the walls, and has a panel in the floor for maintenance." icon = 'icons/obj/doors/DoorHazardHidden.dmi' + plane = TURF_PLANE + +/obj/machinery/door/firedoor/glass/hidden/open() + . = ..() + plane = TURF_PLANE + +/obj/machinery/door/firedoor/glass/hidden/close() + . = ..() + plane = OBJ_PLANE /obj/machinery/door/firedoor/glass/hidden/steel name = "\improper Emergency Shutter System" diff --git a/code/modules/holomap/station_holomap.dm b/code/modules/holomap/station_holomap.dm index eb2ea9d53f..b704872abb 100644 --- a/code/modules/holomap/station_holomap.dm +++ b/code/modules/holomap/station_holomap.dm @@ -19,7 +19,8 @@ var/light_range_on = 2 light_color = "#64C864" - layer = ABOVE_WINDOW_LAYER + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER var/mob/watching_mob = null var/image/small_station_map = null From f8e8ba3e3a0b074a12df86fec32cb4a079f15ab9 Mon Sep 17 00:00:00 2001 From: Heroman3003 <31296024+Heroman3003@users.noreply.github.com> Date: Tue, 15 May 2018 12:11:15 +1000 Subject: [PATCH 37/54] Removed riding tentacles/Unique text for Alraune --- .../appearance/sprite_accessories_taur_vr.dm | 42 ++++++++++++------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm index 0b2487a2a7..eec5c192b7 100644 --- a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm +++ b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm @@ -28,9 +28,9 @@ /datum/riding/taur/get_offsets(pass_index) // list(dir = x, y, layer) var/mob/living/L = ridden var/scale = L.size_multiplier - + var/list/values = list( - "[NORTH]" = list(0, 8*scale, ABOVE_MOB_LAYER), + "[NORTH]" = list(0, 8*scale, ABOVE_MOB_LAYER), "[SOUTH]" = list(0, 8*scale, BELOW_MOB_LAYER), "[EAST]" = list(-10*scale, 8*scale, BELOW_MOB_LAYER), "[WEST]" = list(10*scale, 8*scale, BELOW_MOB_LAYER)) @@ -53,6 +53,10 @@ return ..() // Skip our checks if(!isTaurTail(tail_style)) return FALSE + else + var/datum/sprite_accessory/tail/taur/taurtype = tail_style + if(!taurtype.can_ride) + return FALSE if(lying) return FALSE if(!ishuman(M)) @@ -60,13 +64,13 @@ if(M.size_multiplier > size_multiplier) to_chat(M,"This isn't a pony show! They need to be bigger to ride.") return FALSE - + var/mob/living/carbon/human/H = M if(isTaurTail(H.tail_style)) to_chat(H,"Too many legs. TOO MANY LEGS!!") return FALSE - + . = ..() if(.) buckled_mobs[M] = "riding" @@ -107,6 +111,7 @@ var/icon/suit_sprites = null //File for suit sprites, if any. + var/can_ride = 1 //whether we're real rideable taur or just in that category //Could do nested lists but it started becoming a nightmare. It'd be more fun for lookups of a_intent and m_intent, but then subtypes need to //duplicate all the messages, and it starts getting awkward. These are singletons, anyway! @@ -295,6 +300,7 @@ /datum/sprite_accessory/tail/taur/tents name = "Tentacles (Taur)" icon_state = "tent_s" + can_ride = 0 msg_prey_stepunder = "You run between %prey's tentacles." msg_owner_stepunder = "%owner runs between your tentacles." @@ -417,18 +423,26 @@ ani_state = "alraune_closed_s" ckeys_allowed = list("natje") do_colouration = 0 + can_ride = 0 - msg_owner_disarm_run = "You quickly push %prey to the ground with your leg!" - msg_prey_disarm_run = "%owner pushes you down to the ground with their leg!" - msg_owner_disarm_walk = "You firmly push your leg down on %prey, painfully but harmlessly pinning them to the ground!" - msg_prey_disarm_walk = "%owner firmly pushes their leg down on you, quite painfully but harmlessly pinning you to the ground!" + msg_prey_stepunder = "You run between %prey's vines." + msg_owner_stepunder = "%owner runs between your vines." - msg_owner_harm_walk = "You methodically place your leg down upon %prey's body, slowly applying pressure, crushing them against the floor below!" - msg_prey_harm_walk = "%owner methodically places their leg upon your body, slowly applying pressure, crushing you against the floor below!" + msg_owner_disarm_run = "You quickly push %prey to the ground with some of your vines!" + msg_prey_disarm_run = "%owner pushes you down to the ground with some of their vines!" - msg_owner_grab_success = "You pin %prey down on the ground with your front leg before using your other leg to pick them up, trapping them between two of your front legs!" - msg_prey_grab_success = "%owner pins you down on the ground with their front leg before using their other leg to pick you up, trapping you between two of their front legs!" + msg_owner_disarm_walk = "You push down on %prey with some of your vines, pinning them down firmly under you!" + msg_prey_disarm_walk = "%owner pushes down on you with some of their vines, pinning you down firmly below them!" - msg_owner_grab_fail = "You step down onto %prey, squishing them and forcing them down to the ground!" - msg_prey_grab_fail = "%owner steps down and squishes you with their leg, forcing you down to the ground!" + msg_owner_harm_run = "Your vines carelessly slide past %prey, crushing them!" + msg_prey_harm_run = "%owner quickly goes over your body, carelessly crushing you with their vines!" + + msg_owner_harm_walk = "Your vines methodically apply pressure on %prey's body, crushing them against the floor below!" + msg_prey_harm_walk = "%owner's thick vines methodically apply pressure on your body, crushing you into the floor below!" + + msg_owner_grab_success = "You slide over %prey with your vines, smushing them against the ground before wrapping one up around them, trapping them within the tight confines of your vines!" + msg_prey_grab_success = "%owner slides over you with their vines, smushing you against the ground before wrapping one up around you, trapping you within the tight confines of their vines!" + + msg_owner_grab_fail = "You step down onto %prey with one of your vines, forcing them onto the ground!" + msg_prey_grab_fail = "%owner steps down onto you with one of their vines, squishing you and forcing you onto the ground!" From 46f612162431e7f1c25148a7d70a0f4e6fa4f0fa Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Mon, 14 May 2018 22:31:09 -0400 Subject: [PATCH 38/54] Capsule shelter QOL Bolts/opacity button, roofs for multiz areas --- code/modules/mining/shelters.dm | 12 +++++ maps/submaps/shelters/shelter_1.dmm | 4 ++ maps/submaps/shelters/shelter_1_roof.dmm | 40 ++++++++++++++ maps/submaps/shelters/shelter_2.dmm | 9 +++- maps/submaps/shelters/shelter_2_roof.dmm | 68 ++++++++++++++++++++++++ 5 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 maps/submaps/shelters/shelter_1_roof.dmm create mode 100644 maps/submaps/shelters/shelter_2_roof.dmm diff --git a/code/modules/mining/shelters.dm b/code/modules/mining/shelters.dm index 19ad55f966..5ac1a7f6cd 100644 --- a/code/modules/mining/shelters.dm +++ b/code/modules/mining/shelters.dm @@ -5,6 +5,7 @@ var/whitelisted_turfs var/banned_areas var/banned_objects + var/roof /datum/map_template/shelter/New() . = ..() @@ -38,6 +39,11 @@ sleeping area! Order now, and we'll throw in a TINY FAN, \ absolutely free!" mappath = "maps/submaps/shelters/shelter_1.dmm" + roof = "roof_alpha" + +/datum/map_template/shelter/alpha_roof + shelter_id = "roof_alpha" + mappath = "maps/submaps/shelters/shelter_1_roof.dmm" /datum/map_template/shelter/alpha/New() . = ..() @@ -53,8 +59,14 @@ and a deluxe companion to keep you from getting lonely during \ an ash storm." mappath = "maps/submaps/shelters/shelter_2.dmm" + roof = "roof_beta" + +/datum/map_template/shelter/beta_roof + shelter_id = "roof_beta" + mappath = "maps/submaps/shelters/shelter_2_roof.dmm" /datum/map_template/shelter/beta/New() . = ..() whitelisted_turfs = typecacheof(/turf/simulated/mineral) banned_objects = list() + diff --git a/maps/submaps/shelters/shelter_1.dmm b/maps/submaps/shelters/shelter_1.dmm index 6ca59e7922..8b85eea25e 100644 --- a/maps/submaps/shelters/shelter_1.dmm +++ b/maps/submaps/shelters/shelter_1.dmm @@ -53,6 +53,10 @@ /obj/structure/bed/chair/comfy/black{ dir = 8 }, +/obj/machinery/button/remote/airlock/survival_pod{ + dir = 10; + pixel_y = -24 + }, /turf/simulated/shuttle/floor/voidcraft, /area/survivalpod) "m" = ( diff --git a/maps/submaps/shelters/shelter_1_roof.dmm b/maps/submaps/shelters/shelter_1_roof.dmm new file mode 100644 index 0000000000..df680a8c93 --- /dev/null +++ b/maps/submaps/shelters/shelter_1_roof.dmm @@ -0,0 +1,40 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) + +(1,1,1) = {" +a +a +a +a +a +"} +(2,1,1) = {" +a +a +a +a +a +"} +(3,1,1) = {" +a +a +a +a +a +"} +(4,1,1) = {" +a +a +a +a +a +"} +(5,1,1) = {" +a +a +a +a +a +"} diff --git a/maps/submaps/shelters/shelter_2.dmm b/maps/submaps/shelters/shelter_2.dmm index 64bdaa72c8..e82e289fc0 100644 --- a/maps/submaps/shelters/shelter_2.dmm +++ b/maps/submaps/shelters/shelter_2.dmm @@ -189,6 +189,13 @@ /obj/structure/sign/mining, /turf/simulated/shuttle/wall/voidcraft/survival, /area/survivalpod) +"S" = ( +/obj/machinery/button/remote/airlock/survival_pod{ + dir = 10; + pixel_y = -24 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/survivalpod) (1,1,1) = {" a @@ -232,7 +239,7 @@ h n r w -A +S a "} (6,1,1) = {" diff --git a/maps/submaps/shelters/shelter_2_roof.dmm b/maps/submaps/shelters/shelter_2_roof.dmm new file mode 100644 index 0000000000..6c77273458 --- /dev/null +++ b/maps/submaps/shelters/shelter_2_roof.dmm @@ -0,0 +1,68 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/simulated/shuttle/floor/voidcraft, +/area/survivalpod) + +(1,1,1) = {" +a +a +a +a +a +a +a +"} +(2,1,1) = {" +a +a +a +a +a +a +a +"} +(3,1,1) = {" +a +a +a +a +a +a +a +"} +(4,1,1) = {" +a +a +a +a +a +a +a +"} +(5,1,1) = {" +a +a +a +a +a +a +a +"} +(6,1,1) = {" +a +a +a +a +a +a +a +"} +(7,1,1) = {" +a +a +a +a +a +a +a +"} From 4821ceda5bc48eeb71b2a5698b222cf1c24659bf Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Mon, 14 May 2018 22:36:40 -0400 Subject: [PATCH 39/54] Fixes #3690 Vulpkanin nose marking color for south --- icons/mob/human_races/markings_vr.dmi | Bin 56620 -> 56618 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/human_races/markings_vr.dmi b/icons/mob/human_races/markings_vr.dmi index f815b72ba78591b0561105de997f433f99a6d044..405e80d13f6c8f98dcd5d2b991a54114eba6ef77 100644 GIT binary patch delta 18889 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 delta 18897 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 G5}E*$=6%fo From e0a7ca54de245d90a60fed3d8b38bc17b1fb89ca Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Mon, 14 May 2018 22:48:11 -0400 Subject: [PATCH 40/54] Luxury shelter borg recharger --- maps/submaps/shelters/shelter_2.dmm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/maps/submaps/shelters/shelter_2.dmm b/maps/submaps/shelters/shelter_2.dmm index e82e289fc0..f06fb90420 100644 --- a/maps/submaps/shelters/shelter_2.dmm +++ b/maps/submaps/shelters/shelter_2.dmm @@ -94,7 +94,7 @@ /area/survivalpod) "q" = ( /obj/structure/tubes, -/obj/machinery/holoplant, +/obj/machinery/recharge_station, /turf/simulated/shuttle/floor/voidcraft, /area/survivalpod) "r" = ( @@ -145,6 +145,7 @@ icon_state = "pwindow"; dir = 1 }, +/obj/machinery/holoplant, /turf/simulated/floor/carpet/bcarpet, /area/survivalpod) "w" = ( From 58189980d27c815c066cf6768a9eb03321af78c6 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Mon, 14 May 2018 22:51:11 -0400 Subject: [PATCH 41/54] Shelters: forgot this file --- code/modules/mining/shelter_atoms.dm | 30 ++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/code/modules/mining/shelter_atoms.dm b/code/modules/mining/shelter_atoms.dm index b2fd378fac..65119e40aa 100644 --- a/code/modules/mining/shelter_atoms.dm +++ b/code/modules/mining/shelter_atoms.dm @@ -15,12 +15,14 @@ w_class = ITEMSIZE_TINY var/template_id = "shelter_alpha" var/datum/map_template/shelter/template + var/datum/map_template/shelter/template_roof var/used = FALSE /obj/item/device/survivalcapsule/proc/get_template() if(template) return template = SSmapping.shelter_templates[template_id] + template_roof = SSmapping.shelter_templates[template.roof] if(!template) throw EXCEPTION("Shelter template ([template_id]) not found!") qdel(src) @@ -46,9 +48,16 @@ var/turf/deploy_location = get_turf(src) var/status = template.check_deploy(deploy_location) + var/turf/above_location = GetAbove(deploy_location) + if(above_location && status == SHELTER_DEPLOY_ALLOWED) + status = template.check_deploy(above_location) + switch(status) + //Not allowed due to /area technical reasons if(SHELTER_DEPLOY_BAD_AREA) src.loc.visible_message("\The [src] will not function in this area.") + + //Anchored objects or no space if(SHELTER_DEPLOY_BAD_TURFS, SHELTER_DEPLOY_ANCHORED_OBJECTS) var/width = template.width var/height = template.height @@ -68,6 +77,8 @@ playsound(get_turf(src), 'sound/effects/phasein.ogg', 100, 1) log_and_message_admins("[key_name_admin(usr)] activated a bluespace capsule at [get_area(T)]!") + if(above_location && template_roof) + template_roof.load(above_location, centered = TRUE) template.load(deploy_location, centered = TRUE) qdel(src) @@ -87,6 +98,22 @@ name = "survival airlock" block_air_zones = 1 +//Door access setter button +/obj/machinery/button/remote/airlock/survival_pod + name = "shelter privacy control" + desc = "You can secure yourself inside the shelter here." + specialfunctions = 4 // 4 is bolts + var/obj/machinery/door/airlock/voidcraft/survival_pod/door + +/obj/machinery/button/remote/airlock/survival_pod/attack_hand(obj/item/weapon/W, mob/user as mob) + if(..()) return 1 //1 is failure on machines (for whatever reason) + if(!door) + var/turf/dT = get_step(src,dir) + door = locate() in dT + if(door) + door.glass = !door.glass + door.opacity = !door.opacity + //Windows /obj/structure/window/reinforced/survival_pod name = "pod window" @@ -191,6 +218,9 @@ for(var/i in 1 to 5) var/obj/item/weapon/reagent_containers/food/snacks/liquidfood/W = new(src) stock(W) + for(var/i in 1 to 2) + var/obj/item/device/fbp_backup_cell/W = new(src) + stock(W) if(prob(50)) var/obj/item/weapon/storage/pill_bottle/dice/D = new(src) stock(D) From 4018e14d128d1479d0715bc57bbef04303a9c6d6 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 15 May 2018 00:57:55 -0400 Subject: [PATCH 42/54] Revert "Upgrades Planetary Weather to vis_contents (#5170)" This reverts commit e3e1a7ad9cc877c55f02f8d6b388809fcc07396b. --- code/__defines/planets.dm | 5 +++-- code/controllers/Processes/planet.dm | 15 +++++++++++++-- code/game/turfs/simulated/floor_icon.dm | 3 +++ code/game/turfs/simulated/outdoors/outdoors.dm | 10 +++++++++- code/game/turfs/turf_changing.dm | 7 +++++++ code/modules/planet/weather.dm | 12 +----------- 6 files changed, 36 insertions(+), 16 deletions(-) diff --git a/code/__defines/planets.dm b/code/__defines/planets.dm index 98b10b328a..e8f526382e 100644 --- a/code/__defines/planets.dm +++ b/code/__defines/planets.dm @@ -10,5 +10,6 @@ #define WEATHER_HOT "hot" #define WEATHER_BLOOD_MOON "blood moon" // For admin fun or cult later on. -#define PLANET_PROCESS_SUN 0x1 -#define PLANET_PROCESS_TEMP 0x2 \ No newline at end of file +#define PLANET_PROCESS_WEATHER 0x1 +#define PLANET_PROCESS_SUN 0x2 +#define PLANET_PROCESS_TEMP 0x4 \ No newline at end of file diff --git a/code/controllers/Processes/planet.dm b/code/controllers/Processes/planet.dm index 770b3a5e87..9ab541c80d 100644 --- a/code/controllers/Processes/planet.dm +++ b/code/controllers/Processes/planet.dm @@ -21,7 +21,6 @@ var/datum/controller/process/planet/planet_controller = null for(var/datum/planet/P in planets) if(OT.z in P.expected_z_levels) P.planet_floors |= OT - OT.vis_contents |= P.weather_holder.visuals break outdoor_turfs.Cut() //Why were you in there INCORRECTLY? @@ -37,7 +36,6 @@ var/datum/controller/process/planet/planet_controller = null var/datum/planet/P = planet if(T.z in P.expected_z_levels) P.planet_floors -= T - T.vis_contents -= P.weather_holder.visuals /datum/controller/process/planet/doWork() if(outdoor_turfs.len || planetary_walls.len) @@ -46,6 +44,19 @@ var/datum/controller/process/planet/planet_controller = null for(var/datum/planet/P in planets) P.process(schedule_interval / 10) SCHECK //Your process() really shouldn't take this long... + //Weather style needs redrawing + if(P.needs_work & PLANET_PROCESS_WEATHER) + P.needs_work &= ~PLANET_PROCESS_WEATHER + var/image/new_overlay = image(icon = P.weather_holder.current_weather.icon, icon_state = P.weather_holder.current_weather.icon_state) + new_overlay.plane = PLANE_PLANETLIGHTING + //Redraw weather icons + for(var/T in P.planet_floors) + var/turf/simulated/turf = T + // turf.overlays -= turf.weather_overlay + turf.weather_overlay = new_overlay + // turf.overlays += turf.weather_overlay + turf.update_icon() + SCHECK //Sun light needs changing if(P.needs_work & PLANET_PROCESS_SUN) diff --git a/code/game/turfs/simulated/floor_icon.dm b/code/game/turfs/simulated/floor_icon.dm index cf5396aa96..a7cab51424 100644 --- a/code/game/turfs/simulated/floor_icon.dm +++ b/code/game/turfs/simulated/floor_icon.dm @@ -84,6 +84,9 @@ var/image/no_ceiling_image = null if(!isnull(burnt) && (flooring.flags & TURF_CAN_BURN)) add_overlay(get_flooring_overlay("[flooring.icon_base]-burned-[burnt]","burned[burnt]")) // VOREStation Edit - Eris overlays + if(weather_overlay) + add_overlay(weather_overlay) + if(update_neighbors) for(var/turf/simulated/floor/F in range(src, 1)) if(F == src) diff --git a/code/game/turfs/simulated/outdoors/outdoors.dm b/code/game/turfs/simulated/outdoors/outdoors.dm index 729095a666..cd358b7d5e 100644 --- a/code/game/turfs/simulated/outdoors/outdoors.dm +++ b/code/game/turfs/simulated/outdoors/outdoors.dm @@ -7,6 +7,8 @@ var/list/outdoor_turfs = list() var/edge_blending_priority = 0 // Outdoors var determines if the game should consider the turf to be 'outdoors', which controls certain things such as weather effects. var/outdoors = FALSE + // This holds the image for the current weather effect. + var/image/weather_overlay = null /turf/simulated/floor/outdoors name = "generic ground" @@ -30,7 +32,7 @@ var/list/outdoor_turfs = list() /turf/simulated/floor/Destroy() if(outdoors) planet_controller.unallocateTurf(src) - return ..() + ..() /turf/simulated/proc/make_outdoors() outdoors = TRUE @@ -42,14 +44,20 @@ var/list/outdoor_turfs = list() planet_controller.unallocateTurf(src) else // This is happening during map gen, if there's no planet_controller (hopefully). outdoor_turfs -= src + if(weather_overlay) + cut_overlay(weather_overlay) + qdel_null(weather_overlay) + update_icon() /turf/simulated/post_change() ..() // If it was outdoors and still is, it will not get added twice when the planet controller gets around to putting it in. if(outdoors) make_outdoors() + // outdoor_turfs += src else make_indoors() + // planet_controller.unallocateTurf(src) /turf/simulated/proc/update_icon_edge() if(edge_blending_priority) diff --git a/code/game/turfs/turf_changing.dm b/code/game/turfs/turf_changing.dm index b355ec6328..89940e5532 100644 --- a/code/game/turfs/turf_changing.dm +++ b/code/game/turfs/turf_changing.dm @@ -39,6 +39,7 @@ var/old_dynamic_lighting = dynamic_lighting var/old_affecting_lights = affecting_lights var/old_lighting_overlay = lighting_overlay + var/old_weather_overlay = weather_overlay var/old_corners = corners //world << "Replacing [src.type] with [N]" @@ -57,6 +58,9 @@ if(old_fire) fire = old_fire + if(old_weather_overlay) + W.weather_overlay = old_weather_overlay + if (istype(W,/turf/simulated/floor)) W.RemoveLattice() @@ -81,6 +85,9 @@ if(old_fire) old_fire.RemoveFire() + if(old_weather_overlay) + W.weather_overlay = old_weather_overlay + if(tell_universe) universe.OnTurfChange(W) diff --git a/code/modules/planet/weather.dm b/code/modules/planet/weather.dm index a0fa603980..512981d44e 100644 --- a/code/modules/planet/weather.dm +++ b/code/modules/planet/weather.dm @@ -8,9 +8,6 @@ var/list/roundstart_weather_chances = list() var/next_weather_shift = null - // Holds the weather icon, using vis_contents. Documentation says an /atom/movable is required for placing inside another atom's vis_contents. - var/atom/movable/weather_visuals/visuals = null - /datum/weather_holder/New(var/source) ..() our_planet = source @@ -18,7 +15,6 @@ var/datum/weather/W = allowed_weather_types[A] if(istype(W)) W.holder = src - visuals = new() /datum/weather_holder/proc/change_weather(var/new_weather) var/old_light_modifier = null @@ -45,7 +41,7 @@ current_weather.process_effects() /datum/weather_holder/proc/update_icon_effects() - visuals.icon_state = current_weather.icon_state + our_planet.needs_work |= PLANET_PROCESS_WEATHER /datum/weather_holder/proc/update_temperature() temperature = Interpolate(current_weather.temp_low, current_weather.temp_high, weight = our_planet.sun_position) @@ -69,9 +65,3 @@ /datum/weather/proc/process_effects() return - -// All this does is hold the weather icon. -/atom/movable/weather_visuals - icon = 'icons/effects/weather.dmi' - mouse_opacity = 0 - plane = PLANE_PLANETLIGHTING From 7a828f7cd0a5bf1f4e5aac614c2136ceb09e83c5 Mon Sep 17 00:00:00 2001 From: Verkister Date: Tue, 15 May 2018 11:52:38 +0300 Subject: [PATCH 43/54] removed SC self backup and added a null --- code/modules/nifsoft/software/13_soulcatcher.dm | 2 -- code/modules/resleeving/machines.dm | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index f85e2ed0a3..4399a31f3a 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -462,8 +462,6 @@ if(istype(HP) && HP.nif && HP.nif.flag_check(NIF_O_SCOTHERS,NIF_FLAGS_OTHER)) var/datum/nifsoft/soulcatcher/SC = HP.nif.imp_check(NIF_SOULCATCHER) SC.catch_mob(H) - else if(H.nif && H.nif.flag_check(NIF_SC_BACKUPS)) - SStranscore.m_backup(H,0) //If dying inside a pred who lacks SC, let ours do a backup if enabled before it's gone for good. else if(H.nif && H.nif.flag_check(NIF_O_SCMYSELF,NIF_FLAGS_OTHER)) //They are caught in their own NIF var/datum/nifsoft/soulcatcher/SC = H.nif.imp_check(NIF_SOULCATCHER) SC.catch_mob(H) diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm index 8554a1d6ce..4cb6793734 100644 --- a/code/modules/resleeving/machines.dm +++ b/code/modules/resleeving/machines.dm @@ -526,7 +526,7 @@ //Re-supply a NIF if one was backed up with them. if(MR.nif_path) - var/obj/item/device/nif/nif = new MR.nif_path(occupant,,MR.nif_savedata) + var/obj/item/device/nif/nif = new MR.nif_path(occupant,null,MR.nif_savedata) for(var/path in MR.nif_software) new path(nif) nif.durability = MR.nif_durability //Restore backed up durability after restoring the softs. From 297ac38ecad4b3538a4c3792a08c42075b301196 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Wed, 16 May 2018 17:57:26 -0400 Subject: [PATCH 44/54] Message send failure reflection When a post is too long to send, reflect it back to the user in the chatbox so they can copypaste it into separate messages. Also increases the message limit from 1024 to 2048. If a message is longer than 5-messages worth, it is not reflected and a warning is sent instead to avoid easily consuming bandwidth for DDOS purposes with long messages. I'd like to add markers in the message where the posts would have been truncated but that's... complicated. --- code/__defines/misc.dm | 2 +- code/modules/mob/emote.dm | 4 +-- code/modules/mob/living/carbon/human/say.dm | 2 +- code/modules/mob/say.dm | 4 +-- code/modules/mob/say_vr.dm | 32 +++++++++++++++++++-- 5 files changed, 36 insertions(+), 8 deletions(-) diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index 79848c748a..eea0e7deda 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -104,7 +104,7 @@ #define WAIT_FINISH 4 // Setting this much higher than 1024 could allow spammers to DOS the server easily. -#define MAX_MESSAGE_LEN 1024 +#define MAX_MESSAGE_LEN 2048 //VOREStation Edit - I'm not sure about "easily". It can be a little longer. #define MAX_PAPER_MESSAGE_LEN 6144 #define MAX_BOOK_MESSAGE_LEN 24576 #define MAX_RECORD_LENGTH 24576 diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index f1ccde0a17..0ecdb2fc20 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -11,7 +11,7 @@ var/input if(!message) - input = sanitize(input(src,"Choose an emote to display.") as text|null) + input = sanitize_or_reflect(input(src,"Choose an emote to display.") as text|null, src) //VOREStation Edit - Reflect too long messages, within reason else input = message if(input) @@ -70,7 +70,7 @@ var/input if(!message) - input = sanitize(input(src, "Choose an emote to display.") as text|null) + input = sanitize_or_reflect(input(src, "Choose an emote to display.") as text|null, src) //VOREStation Edit - Reflect too long messages, within reason else input = message diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index a0276a15ac..d42c26880b 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -3,7 +3,7 @@ if(name != GetVoice()) alt_name = "(as [get_id_name("Unknown")])" - message = sanitize(message) + message = sanitize_or_reflect(message,src) //VOREStation Edit - Reflect too-long messages, within reason ..(message, alt_name = alt_name, whispering = whispering) /mob/living/carbon/human/proc/forcesay(list/append) diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 206450c909..0b20c6cb7f 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -21,8 +21,8 @@ if(say_disabled) //This is here to try to identify lag problems usr << "Speech is currently admin-disabled." return - - message = sanitize(message) + + message = sanitize_or_reflect(message,src) //VOREStation Edit - Reflect too-long messages (within reason) set_typing_indicator(FALSE) if(use_me) diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index 0608b26cce..fbf9a9febb 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -11,7 +11,7 @@ usr << "Speech is currently admin-disabled." return - message = sanitize(message) + message = sanitize_or_reflect(message,src) //VOREStation Edit - Reflect too-long messages (within reason) if(!message) return @@ -31,7 +31,7 @@ var/input if(!message) - input = sanitize(input(src,"Choose an emote to display.") as text|null) + input = sanitize_or_reflect(input(src,"Choose an emote to display.") as text|null, src) else input = message @@ -61,3 +61,31 @@ /mob/proc/emote_vr(var/act, var/type, var/message) //This would normally go in say.dm if(act == "me") return custom_emote_vr(type, message) + +#define MAX_HUGE_MESSAGE_LEN 8192 +#define POST_DELIMITER_STR "\<\>" +/proc/sanitize_or_reflect(message,user) + //Way too long to send + if(length(message) > MAX_HUGE_MESSAGE_LEN) + fail_to_chat(user) + return + + message = sanitize(message, max_length = MAX_HUGE_MESSAGE_LEN) + + //Came back still too long to send + if(length(message) > MAX_MESSAGE_LEN) + fail_to_chat(user,message) + return null + else + return message + +/proc/fail_to_chat(user,message) + if(!message) + to_chat(user,"Your message was NOT SENT, either because it was FAR too long, or sanitized to nothing at all.") + return + + var/length = length(message) + var/posts = Ceiling(length/MAX_MESSAGE_LEN) + to_chat(user,message) + to_chat(user,"^ This message was NOT SENT ^ -- It was [length] characters, and the limit is [MAX_MESSAGE_LEN]. It would fit in [posts] separate messages.") +#undef MAX_HUGE_MESSAGE_LEN From ddfa11b80cb4e3877fd4d1af61943d76d1b68538 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Wed, 16 May 2018 21:59:39 -0400 Subject: [PATCH 45/54] Fixes #3711 --- code/game/machinery/buttons.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index b9b9e8a360..cec980c54e 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -2,8 +2,8 @@ name = "button" icon = 'icons/obj/objects.dmi' icon_state = "launcherbtt" - plane = TURF_PLANE - layer = ABOVE_TURF_LAYER +// plane = TURF_PLANE //Can't have them under tables, oh well. +// layer = ABOVE_TURF_LAYER desc = "A remote control switch for something." var/id = null var/active = 0 From 591077cbbaaa45c4dbdeb0bebe02f26b51b18e1c Mon Sep 17 00:00:00 2001 From: Cameron653 Date: Wed, 16 May 2018 22:01:08 -0400 Subject: [PATCH 46/54] Makes someone spawn with the item properrly --- config/custom_items.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/custom_items.txt b/config/custom_items.txt index c3eb6761b7..af867a97bd 100644 --- a/config/custom_items.txt +++ b/config/custom_items.txt @@ -329,7 +329,7 @@ item_path:/obj/item/clothing/accessory/badge/holo/detective/ruda { ckey: interrolouis character_name: Kai Highlands -/obj/item/borg/upgrade/modkit/chassis_mod/kai +item_path:/obj/item/borg/upgrade/modkit/chassis_mod/kai } { From 39592a2633143d63566d4b17d56be32d8c94bfad Mon Sep 17 00:00:00 2001 From: Cameron653 Date: Wed, 16 May 2018 22:10:50 -0400 Subject: [PATCH 47/54] Adds spaces --- config/custom_items.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/config/custom_items.txt b/config/custom_items.txt index af867a97bd..35fb84339c 100644 --- a/config/custom_items.txt +++ b/config/custom_items.txt @@ -215,7 +215,7 @@ item_path: /obj/item/weapon/storage/box/fluff/drake { ckey: draycu character_name: Theseus -item_path:/obj/item/weapon/coin/diamond +item_path: /obj/item/weapon/coin/diamond item_name: theseus' diamond coin item_desc: An engraved coin made of diamond. On the side for heads is printed the year 2541, along with the letter T. On the side for tails, the letter Y can be seen. } @@ -303,19 +303,19 @@ item_path: /obj/item/weapon/implanter/reagent_generator/belle { ckey: hzdonut character_name: Jesse Soemmer -item_path:/obj/item/weapon/gun/projectile/revolver/fluff/jesselemat +item_path: /obj/item/weapon/gun/projectile/revolver/fluff/jesselemat } { ckey: hzdonut character_name: Jesse Soemmer -item_path:/obj/item/clothing/accessory/permit/gun/fluff/JesseSoemmer +item_path: /obj/item/clothing/accessory/permit/gun/fluff/JesseSoemmer } { ckey: hzdonut character_name: Jesse Soemmer -item_path:/obj/item/clothing/accessory/holster/hip +item_path: /obj/item/clothing/accessory/holster/hip } # ######## I CKEYS @@ -323,13 +323,13 @@ item_path:/obj/item/clothing/accessory/holster/hip { ckey: interrolouis character_name: Ruda Lizden -item_path:/obj/item/clothing/accessory/badge/holo/detective/ruda +item_path: /obj/item/clothing/accessory/badge/holo/detective/ruda } { ckey: interrolouis character_name: Kai Highlands -item_path:/obj/item/borg/upgrade/modkit/chassis_mod/kai +item_path: /obj/item/borg/upgrade/modkit/chassis_mod/kai } { From 927050ce448600feaf549f5ec1de8a4bb7b9a4d7 Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Wed, 16 May 2018 21:41:25 -0700 Subject: [PATCH 48/54] Fix various syntactic problems --- code/game/objects/items/devices/whistle.dm | 4 ++-- code/game/objects/items/weapons/material/misc.dm | 2 +- code/modules/admin/admin_secrets.dm | 1 - code/modules/clothing/head/misc_special.dm | 4 ++-- code/modules/clothing/spacesuits/rig/suits/light.dm | 1 - code/modules/economy/cash_register.dm | 7 ------- code/modules/economy/retail_scanner.dm | 7 ------- code/modules/paperwork/carbonpaper.dm | 6 +++--- code/modules/power/singularity/collector.dm | 1 - 9 files changed, 8 insertions(+), 25 deletions(-) diff --git a/code/game/objects/items/devices/whistle.dm b/code/game/objects/items/devices/whistle.dm index 4a67bffe56..7a7828ef95 100644 --- a/code/game/objects/items/devices/whistle.dm +++ b/code/game/objects/items/devices/whistle.dm @@ -27,8 +27,8 @@ use_message = capitalize(copytext(sanitize(new_message), 1, MAX_MESSAGE_LEN)) usr << "You configure the hailer to shout \"[use_message]\"." -/ -obj/item/device/hailer/attack_self(mob/living/carbon/user as mob) + +/obj/item/device/hailer/attack_self(mob/living/carbon/user as mob) if (spamcheck) return diff --git a/code/game/objects/items/weapons/material/misc.dm b/code/game/objects/items/weapons/material/misc.dm index bbb8171b10..7248950a0f 100644 --- a/code/game/objects/items/weapons/material/misc.dm +++ b/code/game/objects/items/weapons/material/misc.dm @@ -29,7 +29,7 @@ icon_state = "unathiknife" attack_verb = list("ripped", "torn", "cut") can_cleave = FALSE - var hits = 0 + var/hits = 0 /obj/item/weapon/material/knife/machete/hatchet/unathiknife/attack(mob/M as mob, mob/user as mob) if(hits > 0) diff --git a/code/modules/admin/admin_secrets.dm b/code/modules/admin/admin_secrets.dm index 473770ac2b..5f04582ace 100644 --- a/code/modules/admin/admin_secrets.dm +++ b/code/modules/admin/admin_secrets.dm @@ -31,7 +31,6 @@ var/datum/admin_secrets/admin_secrets = new() var/list/datum/admin_secret_item/items /datum/admin_secret_category - ..() items = list() /datum/admin_secret_category/proc/can_view(var/mob/user) diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index ac82df4ddc..9a2d3868dd 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -99,7 +99,7 @@ slot_l_hand_str = "engiewelding", slot_r_hand_str = "engiewelding", ) -. + /* * Cakehat @@ -272,4 +272,4 @@ /obj/item/clothing/head/psy_crown/wrath/activate_ability(var/mob/living/wearer) ..() - wearer.add_modifier(/datum/modifier/berserk, 30 SECONDS) \ No newline at end of file + wearer.add_modifier(/datum/modifier/berserk, 30 SECONDS) diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm index 0dd98de966..85c2004058 100644 --- a/code/modules/clothing/spacesuits/rig/suits/light.dm +++ b/code/modules/clothing/spacesuits/rig/suits/light.dm @@ -103,7 +103,6 @@ /obj/item/rig_module/self_destruct ) - ..() /obj/item/clothing/gloves/gauntlets/rig/light/ninja name = "insulated gloves" diff --git a/code/modules/economy/cash_register.dm b/code/modules/economy/cash_register.dm index c9332fb72f..febb412879 100644 --- a/code/modules/economy/cash_register.dm +++ b/code/modules/economy/cash_register.dm @@ -519,28 +519,21 @@ /obj/machinery/cash_register/command account_to_connect = "Command" - ..() /obj/machinery/cash_register/medical account_to_connect = "Medical" - ..() /obj/machinery/cash_register/engineering account_to_connect = "Engineering" - ..() /obj/machinery/cash_register/science account_to_connect = "Science" - ..() /obj/machinery/cash_register/security account_to_connect = "Security" - ..() /obj/machinery/cash_register/cargo account_to_connect = "Cargo" - ..() /obj/machinery/cash_register/civilian account_to_connect = "Civilian" - ..() \ No newline at end of file diff --git a/code/modules/economy/retail_scanner.dm b/code/modules/economy/retail_scanner.dm index 7117172af8..af1d87177a 100644 --- a/code/modules/economy/retail_scanner.dm +++ b/code/modules/economy/retail_scanner.dm @@ -401,28 +401,21 @@ /obj/item/device/retail_scanner/command account_to_connect = "Command" - ..() /obj/item/device/retail_scanner/medical account_to_connect = "Medical" - ..() /obj/item/device/retail_scanner/engineering account_to_connect = "Engineering" - ..() /obj/item/device/retail_scanner/science account_to_connect = "Science" - ..() /obj/item/device/retail_scanner/security account_to_connect = "Security" - ..() /obj/item/device/retail_scanner/cargo account_to_connect = "Cargo" - ..() /obj/item/device/retail_scanner/civilian account_to_connect = "Civilian" - ..() \ No newline at end of file diff --git a/code/modules/paperwork/carbonpaper.dm b/code/modules/paperwork/carbonpaper.dm index 32242e9669..7eb9843cc3 100644 --- a/code/modules/paperwork/carbonpaper.dm +++ b/code/modules/paperwork/carbonpaper.dm @@ -2,8 +2,8 @@ name = "paper" icon_state = "paper_stack" item_state = "paper" - var copied = 0 - var iscopy = 0 + var/copied = 0 + var/iscopy = 0 /obj/item/weapon/paper/carbon/update_icon() @@ -48,4 +48,4 @@ copy.update_icon() c.update_icon() else - usr << "There are no more carbon copies attached to this paper!" \ No newline at end of file + usr << "There are no more carbon copies attached to this paper!" diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 9dbec38fe9..7354faea9e 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -56,7 +56,6 @@ var/global/list/rad_collectors = list() else user << "The controls are locked!" return -..() /obj/machinery/power/rad_collector/attackby(obj/item/W, mob/user) From e42a251b164aee1f3bf3c7c92cf080e86631d080 Mon Sep 17 00:00:00 2001 From: ktccd Date: Thu, 17 May 2018 12:15:45 +0200 Subject: [PATCH 49/54] Adds Whitelisted Player Added my own approved whitelist. Link to approved application: https://forum.vore-station.net/viewtopic.php?f=46&t=1321 --- config/alienwhitelist.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/config/alienwhitelist.txt b/config/alienwhitelist.txt index 2b6dad6982..18604aaf62 100644 --- a/config/alienwhitelist.txt +++ b/config/alienwhitelist.txt @@ -9,6 +9,7 @@ funnyman2003 - Xenochimera hawkerthegreat - Vox inuzari - Diona jemli - Gutter +ktccd - Diona mewchild - Diona mewchild - Vox natje - Xenochimera From 4a5498cfe3bf3208aef53d8e7edccde0b90363c4 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Thu, 17 May 2018 15:38:07 -0400 Subject: [PATCH 50/54] Mostly comment out advanced GPSes Fixes #3697 --- code/modules/telesci/construction.dm | 4 ++-- code/modules/telesci/gps_advanced.dm | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/code/modules/telesci/construction.dm b/code/modules/telesci/construction.dm index 5143733a47..9fc487f058 100644 --- a/code/modules/telesci/construction.dm +++ b/code/modules/telesci/construction.dm @@ -47,7 +47,7 @@ req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4, TECH_PHORON = 4, TECH_BLUESPACE = 5) build_path = /obj/item/weapon/circuitboard/telesci_pad sort_string = "HAAEB" - +/* Normal GPS has all the fancy features now /datum/design/item/telesci_gps name = "GPS device" id = "telesci_gps" @@ -55,7 +55,7 @@ materials = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 1000) build_path = /obj/item/device/gps/advanced sort_string = "HAAEB" - +*/ /datum/design/circuit/quantum_pad name = "Quantum Pad" id = "quantum_pad" diff --git a/code/modules/telesci/gps_advanced.dm b/code/modules/telesci/gps_advanced.dm index fb1d8e16b6..59711deced 100644 --- a/code/modules/telesci/gps_advanced.dm +++ b/code/modules/telesci/gps_advanced.dm @@ -1,3 +1,6 @@ + +// DEPRECATED - The normal GPS has the advanced features, now. This is obsolete. + // These are distinguished from the ordinary "Relay Position Devices" that just print your location // In that they are also all networked with each other to show each other's locations. /obj/item/device/gps/advanced From cb0f107526dee77fdde3e9be656755df2ae95590 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 18 May 2018 02:10:40 -0400 Subject: [PATCH 51/54] Set a fake ID on shelter buttons to avoid messing with every door --- code/modules/mining/shelter_atoms.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mining/shelter_atoms.dm b/code/modules/mining/shelter_atoms.dm index 65119e40aa..8f6f43319f 100644 --- a/code/modules/mining/shelter_atoms.dm +++ b/code/modules/mining/shelter_atoms.dm @@ -103,6 +103,7 @@ name = "shelter privacy control" desc = "You can secure yourself inside the shelter here." specialfunctions = 4 // 4 is bolts + id = "placeholder_id_do_not_use" //This has to be this way, otherwise it will control ALL doors if left blank. var/obj/machinery/door/airlock/voidcraft/survival_pod/door /obj/machinery/button/remote/airlock/survival_pod/attack_hand(obj/item/weapon/W, mob/user as mob) From 51b591f0951b8b4544d1810d77c5e162d9c21dc1 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 18 May 2018 14:14:19 -0400 Subject: [PATCH 52/54] Replace explorer suit with basically the same suit Except this one is wearable by all species, because there's no suit cycler that would work for the 'generic voidsuit'. --- .../clothing/spacesuits/void/void_vr.dm | 48 +++++++++++++++++++ maps/tether/tether-05-station1.dmm | 28 +++++++++-- 2 files changed, 71 insertions(+), 5 deletions(-) diff --git a/code/modules/clothing/spacesuits/void/void_vr.dm b/code/modules/clothing/spacesuits/void/void_vr.dm index 616bef8c33..b0842df24f 100644 --- a/code/modules/clothing/spacesuits/void/void_vr.dm +++ b/code/modules/clothing/spacesuits/void/void_vr.dm @@ -73,3 +73,51 @@ // This variable is normally used to set the icon_override when the suit is refitted, // however the species spritesheet now means we no longer need that anyway! sprite_sheets_refit = list() + +/obj/item/clothing/suit/space/void/explorer + desc = "A classy red voidsuit for the needs of any semi-retro-futuristic spaceperson! This one is rather loose fitting." + species_restricted = list( + SPECIES_HUMAN, + SPECIES_SKRELL, + SPECIES_UNATHI, + SPECIES_TAJ, + SPECIES_TESHARI, + SPECIES_AKULA, + SPECIES_ALRAUNE, + SPECIES_NEVREAN, + SPECIES_RAPALA, + SPECIES_SERGAL, + SPECIES_VASILISSAN, + SPECIES_VULPKANIN, + SPECIES_XENOCHIMERA, + SPECIES_XENOHYBRID, + SPECIES_ZORREN_FLAT, + SPECIES_ZORREN_HIGH + ) +/obj/item/clothing/suit/space/void/explorer/initialize() + . = ..() + sprite_sheets += sprite_sheets_refit + +/obj/item/clothing/head/helmet/space/void/explorer + desc = "A helmet that matches a red voidsuit! So classy." + species_restricted = list( + SPECIES_HUMAN, + SPECIES_SKRELL, + SPECIES_UNATHI, + SPECIES_TAJ, + SPECIES_TESHARI, + SPECIES_AKULA, + SPECIES_ALRAUNE, + SPECIES_NEVREAN, + SPECIES_RAPALA, + SPECIES_SERGAL, + SPECIES_VASILISSAN, + SPECIES_VULPKANIN, + SPECIES_XENOCHIMERA, + SPECIES_XENOHYBRID, + SPECIES_ZORREN_FLAT, + SPECIES_ZORREN_HIGH + ) +/obj/item/clothing/head/helmet/space/void/explorer/initialize() + . = ..() + sprite_sheets += sprite_sheets_refit diff --git a/maps/tether/tether-05-station1.dmm b/maps/tether/tether-05-station1.dmm index 9714362a80..ef6d0f9373 100644 --- a/maps/tether/tether-05-station1.dmm +++ b/maps/tether/tether-05-station1.dmm @@ -20886,8 +20886,6 @@ /obj/structure/table/rack/shelf, /obj/item/weapon/tank/oxygen, /obj/item/device/suit_cooling_unit, -/obj/item/clothing/suit/space/void, -/obj/item/clothing/head/helmet/space/void, /obj/effect/floor_decal/steeldecal/steel_decals9, /obj/effect/floor_decal/steeldecal/steel_decals9{ dir = 4 @@ -20898,6 +20896,8 @@ /obj/effect/floor_decal/steeldecal/steel_decals9{ dir = 1 }, +/obj/item/clothing/suit/space/void/explorer, +/obj/item/clothing/head/helmet/space/void/explorer, /turf/simulated/floor/tiled/monotile, /area/tether/station/explorer_prep) "bQM" = ( @@ -22004,6 +22004,24 @@ /obj/effect/floor_decal/steeldecal/steel_decals9, /turf/simulated/floor/tiled/monotile, /area/tether/station/excursion_dock) +"tAc" = ( +/obj/structure/table/rack/shelf, +/obj/item/weapon/tank/oxygen, +/obj/effect/floor_decal/steeldecal/steel_decals9, +/obj/effect/floor_decal/steeldecal/steel_decals9{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals9{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals9{ + dir = 1 + }, +/obj/item/device/suit_cooling_unit, +/obj/item/clothing/suit/space/void/explorer, +/obj/item/clothing/head/helmet/space/void/explorer, +/turf/simulated/floor/tiled/monotile, +/area/tether/station/explorer_prep) "tCn" = ( /obj/machinery/shuttle_sensor{ dir = 6; @@ -36292,10 +36310,10 @@ aaa aac aac aac -aei -bQK +aiv bQK bQK +tAc tWI jZJ nYM @@ -36434,7 +36452,7 @@ aaa aaa aaa aac -aei +aiv aiv aiv aiv From 5c3cc84d276a289feef8c450790aabd2c920c717 Mon Sep 17 00:00:00 2001 From: Mewchild Date: Sat, 19 May 2018 14:34:33 -0500 Subject: [PATCH 53/54] Cargo Fixes --- maps/tether/tether-07-station3.dmm | 66 ++++++++++++++++++------------ 1 file changed, 39 insertions(+), 27 deletions(-) diff --git a/maps/tether/tether-07-station3.dmm b/maps/tether/tether-07-station3.dmm index fdf917305a..8e2d4b56cd 100644 --- a/maps/tether/tether-07-station3.dmm +++ b/maps/tether/tether-07-station3.dmm @@ -6893,9 +6893,6 @@ /turf/simulated/floor, /area/quartermaster/delivery) "lR" = ( -/obj/machinery/alarm{ - pixel_y = 22 - }, /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -8472,6 +8469,7 @@ /obj/effect/floor_decal/corner/brown/border{ dir = 4 }, +/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos, /turf/simulated/floor/tiled, /area/quartermaster/delivery) "oo" = ( @@ -8809,6 +8807,10 @@ /obj/effect/floor_decal/corner/brown/border{ dir = 4 }, +/obj/item/weapon/packageWrap, +/obj/item/weapon/packageWrap, +/obj/item/weapon/packageWrap, +/obj/machinery/atmospherics/pipe/simple/hidden/universal, /turf/simulated/floor/tiled, /area/quartermaster/delivery) "oU" = ( @@ -9361,25 +9363,28 @@ /turf/simulated/floor/tiled, /area/quartermaster/delivery) "pI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/quartermaster/delivery) "pJ" = ( /obj/structure/table/steel, -/obj/item/weapon/packageWrap, -/obj/item/weapon/packageWrap, -/obj/item/weapon/packageWrap, -/obj/item/weapon/packageWrap, -/obj/item/weapon/packageWrap, /obj/effect/floor_decal/borderfloor{ dir = 4 }, /obj/effect/floor_decal/corner/brown/border{ dir = 4 }, +/obj/machinery/photocopier/faxmachine{ + department = "Mailing-Room" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, /turf/simulated/floor/tiled, /area/quartermaster/delivery) "pK" = ( @@ -9650,6 +9655,10 @@ dir = 1 }, /obj/effect/floor_decal/rust, +/obj/machinery/conveyor{ + dir = 1; + id = "packageSort1" + }, /turf/simulated/floor/plating, /area/quartermaster/delivery) "qn" = ( @@ -10075,9 +10084,13 @@ /turf/simulated/floor/tiled, /area/quartermaster/foyer) "rc" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/quartermaster/foyer) "rd" = ( @@ -14764,14 +14777,8 @@ /area/maintenance/station/cargo) "yz" = ( /obj/structure/table/standard, -/obj/item/weapon/cartridge/quartermaster{ - pixel_x = 6; - pixel_y = 5 - }, -/obj/item/weapon/cartridge/quartermaster, -/obj/item/weapon/cartridge/quartermaster{ - pixel_x = -4; - pixel_y = 7 +/obj/machinery/photocopier/faxmachine{ + department = "Quartermaster-Office" }, /turf/simulated/floor/tiled, /area/quartermaster/qm) @@ -14788,6 +14795,15 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, +/obj/item/weapon/cartridge/quartermaster{ + pixel_x = 6; + pixel_y = 5 + }, +/obj/item/weapon/cartridge/quartermaster{ + pixel_x = -4; + pixel_y = 7 + }, +/obj/item/weapon/cartridge/quartermaster, /turf/simulated/floor/tiled, /area/quartermaster/qm) "yB" = ( @@ -22940,8 +22956,7 @@ "Nn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 9; - icon_state = "intact"; - + icon_state = "intact" }, /turf/simulated/floor/plating, /area/maintenance/station/ai) @@ -23097,8 +23112,7 @@ "Qi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 5; - icon_state = "intact"; - + icon_state = "intact" }, /turf/simulated/floor, /area/maintenance/station/ai) @@ -23111,8 +23125,7 @@ "Qq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 10; - icon_state = "intact"; - + icon_state = "intact" }, /turf/simulated/floor, /area/maintenance/station/ai) @@ -23120,8 +23133,7 @@ /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 10; - icon_state = "intact"; - + icon_state = "intact" }, /turf/simulated/floor/plating, /area/maintenance/station/ai) From 6e1096a53af0d602d631fce9440244c3f73abd0a Mon Sep 17 00:00:00 2001 From: Mewchild Date: Sat, 19 May 2018 14:46:39 -0500 Subject: [PATCH 54/54] Cargo Fixes --- maps/tether/tether-07-station3.dmm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/maps/tether/tether-07-station3.dmm b/maps/tether/tether-07-station3.dmm index 8e2d4b56cd..e718645b76 100644 --- a/maps/tether/tether-07-station3.dmm +++ b/maps/tether/tether-07-station3.dmm @@ -8469,7 +8469,12 @@ /obj/effect/floor_decal/corner/brown/border{ dir = 4 }, -/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos, +/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{ + external_pressure_bound = 101.3; + external_pressure_bound_default = 101.3; + pressure_checks = 1; + pressure_checks_default = 1 + }, /turf/simulated/floor/tiled, /area/quartermaster/delivery) "oo" = (