From a66f8438d1d66b627c18fa51c4e0b32f96813dd5 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Wed, 14 Feb 2018 22:12:22 -0600 Subject: [PATCH 01/13] POLARIS: Attacktext change --- .../mob/living/simple_animal/aliens/alien.dm | 2 +- .../mob/living/simple_animal/aliens/creature.dm | 2 +- .../mob/living/simple_animal/aliens/faithless.dm | 2 +- .../mob/living/simple_animal/aliens/hivebot.dm | 2 +- .../mob/living/simple_animal/aliens/mimic.dm | 4 ++-- .../mob/living/simple_animal/aliens/shade.dm | 2 +- .../mob/living/simple_animal/animals/bat.dm | 2 +- .../mob/living/simple_animal/animals/carp.dm | 2 +- .../living/simple_animal/animals/farm_animals.dm | 8 ++++---- .../mob/living/simple_animal/animals/goose.dm | 2 +- .../mob/living/simple_animal/animals/lizard.dm | 2 +- .../mob/living/simple_animal/animals/penguin.dm | 2 +- .../mob/living/simple_animal/animals/spiderbot.dm | 2 +- .../mob/living/simple_animal/animals/tomato.dm | 2 +- .../mob/living/simple_animal/animals/tree.dm | 2 +- .../mob/living/simple_animal/animals/worm.dm | 2 +- .../mob/living/simple_animal/borer/borer.dm | 2 +- .../living/simple_animal/constructs/constructs.dm | 10 +++++----- .../mob/living/simple_animal/humanoids/clown.dm | 2 +- .../living/simple_animal/humanoids/mechamobs.dm | 2 +- .../mob/living/simple_animal/humanoids/pirate.dm | 2 +- .../mob/living/simple_animal/humanoids/russian.dm | 2 +- .../living/simple_animal/humanoids/syndicate.dm | 6 +++--- .../mob/living/simple_animal/simple_animal.dm | 14 +++++++------- 24 files changed, 40 insertions(+), 40 deletions(-) diff --git a/code/modules/mob/living/simple_animal/aliens/alien.dm b/code/modules/mob/living/simple_animal/aliens/alien.dm index 62a3b5e767..0f7cc35c77 100644 --- a/code/modules/mob/living/simple_animal/aliens/alien.dm +++ b/code/modules/mob/living/simple_animal/aliens/alien.dm @@ -25,7 +25,7 @@ melee_damage_lower = 25 melee_damage_upper = 25 - attacktext = "slashed" + attacktext = list("slashed") attack_sound = 'sound/weapons/bladeslice.ogg' a_intent = I_HURT diff --git a/code/modules/mob/living/simple_animal/aliens/creature.dm b/code/modules/mob/living/simple_animal/aliens/creature.dm index 3de6d687af..980623c017 100644 --- a/code/modules/mob/living/simple_animal/aliens/creature.dm +++ b/code/modules/mob/living/simple_animal/aliens/creature.dm @@ -16,7 +16,7 @@ melee_damage_lower = 5 melee_damage_upper = 5 - attacktext = "chomped" + attacktext = list("chomped") attack_sound = 'sound/weapons/bite.ogg' speak_emote = list("gibbers") diff --git a/code/modules/mob/living/simple_animal/aliens/faithless.dm b/code/modules/mob/living/simple_animal/aliens/faithless.dm index 24eacae40e..09de8a24fb 100644 --- a/code/modules/mob/living/simple_animal/aliens/faithless.dm +++ b/code/modules/mob/living/simple_animal/aliens/faithless.dm @@ -20,7 +20,7 @@ melee_damage_lower = 5 melee_damage_upper = 5 - attacktext = "gripped" + attacktext = list("gripped") attack_sound = 'sound/hallucinations/growl1.ogg' min_oxy = 0 diff --git a/code/modules/mob/living/simple_animal/aliens/hivebot.dm b/code/modules/mob/living/simple_animal/aliens/hivebot.dm index 0a7fcd7613..03776d7178 100644 --- a/code/modules/mob/living/simple_animal/aliens/hivebot.dm +++ b/code/modules/mob/living/simple_animal/aliens/hivebot.dm @@ -20,7 +20,7 @@ melee_damage_lower = 15 melee_damage_upper = 15 - attacktext = "clawed" + attacktext = list("clawed") projectilesound = 'sound/weapons/Gunshot.ogg' projectiletype = /obj/item/projectile/bullet/hivebot diff --git a/code/modules/mob/living/simple_animal/aliens/mimic.dm b/code/modules/mob/living/simple_animal/aliens/mimic.dm index 77ba92ff6a..8230256086 100644 --- a/code/modules/mob/living/simple_animal/aliens/mimic.dm +++ b/code/modules/mob/living/simple_animal/aliens/mimic.dm @@ -24,7 +24,7 @@ harm_intent_damage = 5 melee_damage_lower = 8 melee_damage_upper = 12 - attacktext = "attacked" + attacktext = list("attacked") attack_sound = 'sound/weapons/bite.ogg' min_oxy = 0 @@ -55,7 +55,7 @@ // Aggro when you try to open them. Will also pickup loot when spawns and drop it when dies. /mob/living/simple_animal/hostile/mimic/crate - attacktext = "bitten" + attacktext = list("bitten") stop_automated_movement = 1 wander = 0 diff --git a/code/modules/mob/living/simple_animal/aliens/shade.dm b/code/modules/mob/living/simple_animal/aliens/shade.dm index 2d502bc10a..e8da069e1d 100644 --- a/code/modules/mob/living/simple_animal/aliens/shade.dm +++ b/code/modules/mob/living/simple_animal/aliens/shade.dm @@ -20,7 +20,7 @@ melee_damage_lower = 5 melee_damage_upper = 15 - attacktext = "drained the life from" + attacktext = list("drained the life from") minbodytemp = 0 maxbodytemp = 4000 diff --git a/code/modules/mob/living/simple_animal/animals/bat.dm b/code/modules/mob/living/simple_animal/animals/bat.dm index a429b2ca7f..726c94f143 100644 --- a/code/modules/mob/living/simple_animal/animals/bat.dm +++ b/code/modules/mob/living/simple_animal/animals/bat.dm @@ -24,7 +24,7 @@ melee_damage_upper = 3 environment_smash = 1 - attacktext = "bites" + attacktext = list("bites") attack_sound = 'sound/weapons/bite.ogg' min_oxy = 0 diff --git a/code/modules/mob/living/simple_animal/animals/carp.dm b/code/modules/mob/living/simple_animal/animals/carp.dm index 9126642197..400fb540db 100644 --- a/code/modules/mob/living/simple_animal/animals/carp.dm +++ b/code/modules/mob/living/simple_animal/animals/carp.dm @@ -20,7 +20,7 @@ harm_intent_damage = 8 melee_damage_lower = 15 melee_damage_upper = 15 - attacktext = "bitten" + attacktext = list("bitten") attack_sound = 'sound/weapons/bite.ogg' //Space carp aren't affected by atmos. diff --git a/code/modules/mob/living/simple_animal/animals/farm_animals.dm b/code/modules/mob/living/simple_animal/animals/farm_animals.dm index 2fe58dc76f..213aff73bf 100644 --- a/code/modules/mob/living/simple_animal/animals/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/animals/farm_animals.dm @@ -19,7 +19,7 @@ melee_damage_lower = 1 melee_damage_upper = 5 - attacktext = "kicked" + attacktext = list("kicked") speak_chance = 1 speak = list("EHEHEHEHEH","eh?") @@ -98,7 +98,7 @@ response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" - attacktext = "kicked" + attacktext = list("kicked") speak_chance = 1 speak = list("moo?","moo","MOOOOOO") @@ -168,7 +168,7 @@ response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" - attacktext = "kicked" + attacktext = list("kicked") has_langs = list("Bird") speak_chance = 2 @@ -216,7 +216,7 @@ var/global/chicken_count = 0 response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" - attacktext = "kicked" + attacktext = list("kicked") has_langs = list("Bird") speak_chance = 2 diff --git a/code/modules/mob/living/simple_animal/animals/goose.dm b/code/modules/mob/living/simple_animal/animals/goose.dm index a2ac8515b8..dd3b93c479 100644 --- a/code/modules/mob/living/simple_animal/animals/goose.dm +++ b/code/modules/mob/living/simple_animal/animals/goose.dm @@ -21,7 +21,7 @@ harm_intent_damage = 5 melee_damage_lower = 5 //they're meant to be annoying, not threatening. melee_damage_upper = 5 //unless there's like a dozen of them, then you're screwed. - attacktext = "pecked" + attacktext = list("pecked") attack_sound = 'sound/weapons/bite.ogg' //SPACE geese aren't affected by atmos. diff --git a/code/modules/mob/living/simple_animal/animals/lizard.dm b/code/modules/mob/living/simple_animal/animals/lizard.dm index e9032a96ef..38822faf0d 100644 --- a/code/modules/mob/living/simple_animal/animals/lizard.dm +++ b/code/modules/mob/living/simple_animal/animals/lizard.dm @@ -15,7 +15,7 @@ response_disarm = "shoos" response_harm = "stomps on" - attacktext = "bitten" + attacktext = list("bitten") melee_damage_lower = 1 melee_damage_upper = 2 diff --git a/code/modules/mob/living/simple_animal/animals/penguin.dm b/code/modules/mob/living/simple_animal/animals/penguin.dm index 13ecb0d0ca..4bb985d1ac 100644 --- a/code/modules/mob/living/simple_animal/animals/penguin.dm +++ b/code/modules/mob/living/simple_animal/animals/penguin.dm @@ -18,7 +18,7 @@ harm_intent_damage = 5 melee_damage_lower = 10 melee_damage_upper = 15 - attacktext = "pecked" + attacktext = list("pecked") has_langs = list("Bird") speak_chance = 0 diff --git a/code/modules/mob/living/simple_animal/animals/spiderbot.dm b/code/modules/mob/living/simple_animal/animals/spiderbot.dm index ff3f03bf57..7ae8edfb7a 100644 --- a/code/modules/mob/living/simple_animal/animals/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/animals/spiderbot.dm @@ -21,7 +21,7 @@ melee_damage_lower = 1 melee_damage_upper = 3 - attacktext = "shocked" + attacktext = list("shocked") min_oxy = 0 max_tox = 0 diff --git a/code/modules/mob/living/simple_animal/animals/tomato.dm b/code/modules/mob/living/simple_animal/animals/tomato.dm index d1bffc6fe1..48882fea57 100644 --- a/code/modules/mob/living/simple_animal/animals/tomato.dm +++ b/code/modules/mob/living/simple_animal/animals/tomato.dm @@ -18,6 +18,6 @@ harm_intent_damage = 5 melee_damage_upper = 15 melee_damage_lower = 10 - attacktext = "mauled" + attacktext = list("mauled") meat_type = /obj/item/weapon/reagent_containers/food/snacks/tomatomeat diff --git a/code/modules/mob/living/simple_animal/animals/tree.dm b/code/modules/mob/living/simple_animal/animals/tree.dm index 3db514345f..37169d42a1 100644 --- a/code/modules/mob/living/simple_animal/animals/tree.dm +++ b/code/modules/mob/living/simple_animal/animals/tree.dm @@ -22,7 +22,7 @@ harm_intent_damage = 5 melee_damage_lower = 8 melee_damage_upper = 12 - attacktext = "bitten" + attacktext = list("bitten") attack_sound = 'sound/weapons/bite.ogg' min_oxy = 0 diff --git a/code/modules/mob/living/simple_animal/animals/worm.dm b/code/modules/mob/living/simple_animal/animals/worm.dm index 48ed6039c5..da30dbf8fd 100644 --- a/code/modules/mob/living/simple_animal/animals/worm.dm +++ b/code/modules/mob/living/simple_animal/animals/worm.dm @@ -56,7 +56,7 @@ melee_damage_lower = 10 melee_damage_upper = 15 - attacktext = "bitten" + attacktext = list("bitten") animate_movement = SLIDE_STEPS diff --git a/code/modules/mob/living/simple_animal/borer/borer.dm b/code/modules/mob/living/simple_animal/borer/borer.dm index e18a345066..b89e2f2af6 100644 --- a/code/modules/mob/living/simple_animal/borer/borer.dm +++ b/code/modules/mob/living/simple_animal/borer/borer.dm @@ -16,7 +16,7 @@ a_intent = I_HURT stop_automated_movement = 1 status_flags = CANPUSH - attacktext = "nipped" + attacktext = list("nipped") friendly = "prods" wander = 0 pass_flags = PASSTABLE diff --git a/code/modules/mob/living/simple_animal/constructs/constructs.dm b/code/modules/mob/living/simple_animal/constructs/constructs.dm index 412f37f172..ccf0cf1b8a 100644 --- a/code/modules/mob/living/simple_animal/constructs/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs/constructs.dm @@ -100,7 +100,7 @@ harm_intent_damage = 0 melee_damage_lower = 30 melee_damage_upper = 30 - attacktext = "smashed their armoured gauntlet into" + attacktext = list("smashed their armoured gauntlet into") mob_size = MOB_HUGE speed = 3 environment_smash = 2 @@ -152,7 +152,7 @@ health = 75 melee_damage_lower = 25 melee_damage_upper = 25 - attacktext = "slashed" + attacktext = list("slashed") speed = -1 environment_smash = 1 see_in_dark = 7 @@ -177,7 +177,7 @@ harm_intent_damage = 5 melee_damage_lower = 5 melee_damage_upper = 5 - attacktext = "rammed" + attacktext = list("rammed") speed = 0 environment_smash = 1 attack_sound = 'sound/weapons/rapidslice.ogg' @@ -206,7 +206,7 @@ harm_intent_damage = 0 melee_damage_lower = 50 melee_damage_upper = 50 - attacktext = "brutally crushed" + attacktext = list("brutally crushed") speed = 5 environment_smash = 2 attack_sound = 'sound/weapons/heavysmash.ogg' @@ -230,7 +230,7 @@ health = 150 melee_damage_lower = 25 melee_damage_upper = 25 - attacktext = "violently stabbed" + attacktext = list("violently stabbed") speed = -1 environment_smash = 1 see_in_dark = 7 diff --git a/code/modules/mob/living/simple_animal/humanoids/clown.dm b/code/modules/mob/living/simple_animal/humanoids/clown.dm index ee1341ff38..5751a058c4 100644 --- a/code/modules/mob/living/simple_animal/humanoids/clown.dm +++ b/code/modules/mob/living/simple_animal/humanoids/clown.dm @@ -26,7 +26,7 @@ harm_intent_damage = 8 melee_damage_lower = 10 melee_damage_upper = 10 - attacktext = "attacked" + attacktext = list("attacked") attack_sound = 'sound/items/bikehorn.ogg' min_oxy = 5 diff --git a/code/modules/mob/living/simple_animal/humanoids/mechamobs.dm b/code/modules/mob/living/simple_animal/humanoids/mechamobs.dm index 975d938ea9..c7645d2352 100644 --- a/code/modules/mob/living/simple_animal/humanoids/mechamobs.dm +++ b/code/modules/mob/living/simple_animal/humanoids/mechamobs.dm @@ -28,7 +28,7 @@ harm_intent_damage = 0 melee_damage_lower = 35 melee_damage_upper = 35 - attacktext = "slashed" + attacktext = list("slashed") attack_sound = 'sound/weapons/bladeslice.ogg' min_oxy = 0 diff --git a/code/modules/mob/living/simple_animal/humanoids/pirate.dm b/code/modules/mob/living/simple_animal/humanoids/pirate.dm index f0c7c05ddc..8921f3c519 100644 --- a/code/modules/mob/living/simple_animal/humanoids/pirate.dm +++ b/code/modules/mob/living/simple_animal/humanoids/pirate.dm @@ -28,7 +28,7 @@ harm_intent_damage = 5 melee_damage_lower = 30 melee_damage_upper = 30 - attacktext = "slashed" + attacktext = list("slashed") attack_sound = 'sound/weapons/bladeslice.ogg' min_oxy = 5 diff --git a/code/modules/mob/living/simple_animal/humanoids/russian.dm b/code/modules/mob/living/simple_animal/humanoids/russian.dm index 1589fe2a7d..2c3fc68c71 100644 --- a/code/modules/mob/living/simple_animal/humanoids/russian.dm +++ b/code/modules/mob/living/simple_animal/humanoids/russian.dm @@ -30,7 +30,7 @@ harm_intent_damage = 5 melee_damage_lower = 15 melee_damage_upper = 15 - attacktext = "punched" + attacktext = list("punched") min_oxy = 5 max_oxy = 0 diff --git a/code/modules/mob/living/simple_animal/humanoids/syndicate.dm b/code/modules/mob/living/simple_animal/humanoids/syndicate.dm index b053094663..3cd616a705 100644 --- a/code/modules/mob/living/simple_animal/humanoids/syndicate.dm +++ b/code/modules/mob/living/simple_animal/humanoids/syndicate.dm @@ -31,7 +31,7 @@ melee_damage_lower = 10 melee_damage_upper = 15 environment_smash = 1 - attacktext = "punched" + attacktext = list("punched") min_oxy = 5 max_oxy = 0 @@ -75,7 +75,7 @@ melee_damage_lower = 20 melee_damage_upper = 25 - attacktext = "slashed" + attacktext = list("slashed") status_flags = 0 @@ -177,7 +177,7 @@ melee_damage_lower = 15 melee_damage_upper = 15 attack_sound = 'sound/weapons/bladeslice.ogg' - attacktext = "cut" + attacktext = list("cut") min_oxy = 0 max_oxy = 0 diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 184176ec8e..1f51a5ad78 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -104,8 +104,8 @@ //Mob melee settings var/melee_damage_lower = 2 // Lower bound of randomized melee damage var/melee_damage_upper = 6 // Upper bound of randomized melee damage - var/attacktext = "attacked" // "You are [attacktext] by the mob!" - var/friendly = "nuzzles" // What mobs do to people when they aren't really hostile + var/list/attacktext = list("attacked") // "You are [attacktext] by the mob!" + var/list/friendly = list("nuzzles") // "The mob [friendly] the person." var/attack_sound = null // Sound to play when I attack var/environment_smash = 0 // How much environment damage do I do when I hit stuff? var/melee_miss_chance = 15 // percent chance to miss a melee attack. @@ -1213,7 +1213,7 @@ if(H.check_shields(damage = damage_to_do, damage_source = src, attacker = src, def_zone = null, attack_text = "the attack")) return FALSE - A.attack_generic(src, damage_to_do, attacktext) + A.attack_generic(src, damage_to_do, pick(attacktext)) return TRUE //The actual top-level ranged attack proc @@ -1371,23 +1371,23 @@ for(var/obj/structure/window/obstacle in problem_turf) if(obstacle.dir == reverse_dir[dir]) // So that windows get smashed in the right order ai_log("DestroySurroundings() directional window hit",3) - obstacle.attack_generic(src, damage_to_do, attacktext) + obstacle.attack_generic(src, damage_to_do, pick(attacktext)) return else if(obstacle.is_fulltile()) ai_log("DestroySurroundings() full tile window hit",3) - obstacle.attack_generic(src, damage_to_do, attacktext) + obstacle.attack_generic(src, damage_to_do, pick(attacktext)) return var/obj/structure/obstacle = locate(/obj/structure, problem_turf) if(istype(obstacle, /obj/structure/window) || istype(obstacle, /obj/structure/closet) || istype(obstacle, /obj/structure/table) || istype(obstacle, /obj/structure/grille)) ai_log("DestroySurroundings() generic structure hit [obstacle]",3) - obstacle.attack_generic(src, damage_to_do ,attacktext) + obstacle.attack_generic(src, damage_to_do, pick(attacktext)) return for(var/obj/machinery/door/baddoor in problem_turf) //Required since firelocks take up the same turf if(baddoor.density) ai_log("DestroySurroundings() door hit [baddoor]",3) - baddoor.attack_generic(src, damage_to_do ,attacktext) + baddoor.attack_generic(src, damage_to_do, pick(attacktext)) return //Check for shuttle bumrush From 26fea6a8759ee06210846a7c70d13cfe0e6b522e Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Wed, 14 Feb 2018 22:26:25 -0600 Subject: [PATCH 02/13] POLARIS: Fix the seedarkness variable Now essentially works as a "permanent darksight adjustment" variable, removing the slow change. --- code/modules/mob/living/life.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index c825008837..5faa78f10d 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -214,6 +214,10 @@ return FALSE /mob/living/proc/handle_darksight() + if(!seedarkness) //Cheap 'always darksight' var + dsoverlay.alpha = 255 + return + var/darksightedness = min(see_in_dark/world.view,1.0) //A ratio of how good your darksight is, from 'nada' to 'really darn good' var/current = dsoverlay.alpha/255 //Our current adjustedness From 49a750a9a9b2a37a144b478b760995166c833a35 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Wed, 14 Feb 2018 22:30:02 -0600 Subject: [PATCH 03/13] POLARIS: Don't require hostile SAs for special purposes --- code/modules/mob/living/simple_animal/animals/cat.dm | 1 - code/modules/mob/living/simple_animal/simple_animal.dm | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/simple_animal/animals/cat.dm b/code/modules/mob/living/simple_animal/animals/cat.dm index 039540ed30..81cd043ce0 100644 --- a/code/modules/mob/living/simple_animal/animals/cat.dm +++ b/code/modules/mob/living/simple_animal/animals/cat.dm @@ -9,7 +9,6 @@ icon_dead = "cat2_dead" icon_rest = "cat2_rest" - hostile = 1 //To mice, anyway. investigates = 1 specific_targets = 1 //Only targets with Found() run_at_them = 0 //DOMESTICATED diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 184176ec8e..ab01f4b97e 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -459,7 +459,7 @@ stop_automated_movement = 0 //Search for targets while idle - if(hostile) + if(hostile || specific_targets) FindTarget() if(STANCE_FOLLOW) annoyed = 15 @@ -467,7 +467,7 @@ if(follow_until_time && world.time > follow_until_time) LoseFollow() return - if(hostile) + if(hostile || specific_targets) FindTarget() if(STANCE_ATTACK) annoyed = 50 From e336d0c255017a83e73fb1efbc2aa62ed3d1e82b Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Wed, 14 Feb 2018 22:31:02 -0600 Subject: [PATCH 04/13] POLARIS: Allow Simple Animals to have armor in a normal sensible way --- .../mob/living/simple_animal/simple_animal.dm | 49 ++++++++++++------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 184176ec8e..42e3cdb44c 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -125,14 +125,14 @@ //Damage resistances var/resistance = 0 // Damage reduction for all types - var/list/resistances = list( - HALLOSS = 0, - BRUTE = 1, - BURN = 1, - TOX = 1, - OXY = 0, - CLONE = 0 - ) + var/list/armor = list( // Values for normal getarmor() checks + "melee" = 0, + "bullet" = 0, + "laser" = 0, + "energy" = 0, + "bomb" = 0, + "bio" = 100, + "rad" = 100) //Scary debug things var/debug_ai = 0 // Logging level for this mob (1,2,3) @@ -554,7 +554,8 @@ react_to_attack(M) if(I_HURT) - adjustBruteLoss(harm_intent_damage) + var/armor = run_armor_check(def_zone = null, attack_flag = "melee") + apply_damage(damage = harm_intent_damage, damagetype = BURN, def_zone = null, blocked = armor, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE) M.visible_message("[M] [response_harm] \the [src]!") M.do_attack_animation(src) ai_log("attack_hand() I was hit by: [M]",2) @@ -673,18 +674,20 @@ /mob/living/simple_animal/ex_act(severity) if(!blinded) flash_eyes() + var/armor = run_armor_check(def_zone = null, attack_flag = "bomb") + var/bombdam = 500 switch (severity) if (1.0) - adjustBruteLoss(500) - gib() - return - + bombdam = 500 if (2.0) - adjustBruteLoss(60) + bombdam = 60 + if (3.0) + bombdam = 30 + apply_damage(damage = bombdam, damagetype = BRUTE, def_zone = null, blocked = armor, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE) - if(3.0) - adjustBruteLoss(30) + if(bombdam > maxHealth) + gib() // Check target_mob if worthy of attack (i.e. check if they are dead or empty mecha) /mob/living/simple_animal/proc/SA_attackable(target_mob) @@ -1435,7 +1438,7 @@ if (shock_damage < 1) return 0 - adjustFireLoss(shock_damage) + apply_damage(damage = shock_damage, damagetype = BURN, def_zone = null, blocked = null, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE) playsound(loc, "sparks", 50, 1, -1) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread @@ -1447,14 +1450,15 @@ if(taser_kill) var/stunDam = 0 var/agonyDam = 0 + var/armor = run_armor_check(def_zone = null, attack_flag = "energy") if(stun_amount) stunDam += stun_amount * 0.5 - adjustFireLoss(stunDam) + apply_damage(damage = stunDam, damagetype = BURN, def_zone = null, blocked = armor, blocked = resistance, used_weapon = used_weapon, sharp = FALSE, edge = FALSE) if(agony_amount) agonyDam += agony_amount * 0.5 - adjustFireLoss(agonyDam) + apply_damage(damage = agonyDam, damagetype = BURN, def_zone = null, blocked = armor, blocked = resistance, used_weapon = used_weapon, sharp = FALSE, edge = FALSE) /mob/living/simple_animal/emp_act(severity) if(!isSynthetic()) @@ -1469,6 +1473,13 @@ if(4) adjustFireLoss(rand(1, 6)) +/mob/living/simple_animal/getarmor(def_zone, attack_flag) + var/armorval = armor[attack_flag] + if(!armorval) + return 0 + else + return armorval + // Force it to target something /mob/living/simple_animal/proc/taunt(var/mob/living/new_target, var/forced = FALSE) if(intelligence_level == SA_HUMANOID && !forced) From 4a6a6d5742f6b67e33706a1d2dfa2e357fd61248 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Thu, 15 Feb 2018 02:34:42 -0600 Subject: [PATCH 05/13] Prevent infinite deuterium --- code/modules/reagents/Chemistry-Recipes.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 7dd4bbeadd..37634ac28a 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -2210,9 +2210,8 @@ name = "Deuterium" id = "deuterium" result = null - required_reagents = list("water" = 10) - catalysts = list("hydrophoron" = 5) - result_amount = 1 + required_reagents = list("hydrophoron" = 5, "water" = 10) + result_amount = 15 /datum/chemical_reaction/deuterium/on_reaction(var/datum/reagents/holder, var/created_volume) var/turf/T = get_turf(holder.my_atom) From ed5f2c626ad987d46d58e797b503bd602f87d0b9 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Thu, 15 Feb 2018 02:59:02 -0600 Subject: [PATCH 06/13] Remove the admin ghostview verb --- code/modules/admin/admin_verbs.dm | 28 ++-------------------------- 1 file changed, 2 insertions(+), 26 deletions(-) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 7258b265a2..04740237f1 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -59,7 +59,6 @@ var/list/admin_verbs_admin = list( /client/proc/check_antagonists, /client/proc/admin_memo, //admin memo system. show/delete/write. +SERVER needed to delete admin memos of others, /client/proc/dsay, //talk in deadchat using our ckey/fakekey, - /client/proc/ghost_view, //let us see ghosts WHENEVERRRR // /client/proc/toggle_hear_deadcast, //toggles whether we hear deadchat, /client/proc/investigate_show, //various admintools for investigation. Such as a singulo grief-log, /client/proc/secrets, @@ -213,7 +212,6 @@ var/list/admin_verbs_debug = list( /client/proc/jumptomob, /client/proc/jumptocoord, /client/proc/dsay, - /client/proc/ghost_view, /client/proc/toggle_debug_logs, /client/proc/admin_ghost, //allows us to ghost/reenter body at will, /datum/admins/proc/view_runtimes, @@ -326,7 +324,6 @@ var/list/admin_verbs_mod = list( /datum/admins/proc/show_player_info, /client/proc/player_panel_new, /client/proc/dsay, - /client/proc/ghost_view, /datum/admins/proc/show_skills, /datum/admins/proc/show_player_panel, /client/proc/check_antagonists, @@ -351,7 +348,6 @@ var/list/admin_verbs_event_manager = list( /client/proc/admin_ghost, /datum/admins/proc/show_player_info, /client/proc/dsay, - /client/proc/ghost_view, /client/proc/cmd_admin_subtle_message, /client/proc/debug_variables, /client/proc/check_antagonists, @@ -491,26 +487,6 @@ var/list/admin_verbs_event_manager = list( body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus feedback_add_details("admin_verb","O") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/ghost_view() - set category = "Admin" - set name = "Ghost View" - set desc = "Toggles ability to see ghosts, even while in a mob." - if(!holder) return - if(!mob.plane_holder) return - - var/choice = alert(src,"Do you want to see ghosts, or not?","Ghost viewing","Show 'em!","Cancel","Hide 'em!") - if(choice == "Cancel") - return - - if(choice == "Show 'em!" && mob.plane_holder) - mob.plane_holder.set_vis(VIS_GHOSTS,TRUE) - usr.see_invisible = SEE_INVISIBLE_CULT - to_chat(src,"Ghosts are now visible (while in this mob).") - else if(mob.plane_holder) - mob.plane_holder.set_vis(VIS_GHOSTS,FALSE) - usr.see_invisible = initial(mob.see_invisible) - to_chat(src,"Ghosts are now hidden (while in this mob).") - /client/proc/invisimin() set name = "Invisimin" set category = "Admin" @@ -1046,7 +1022,7 @@ var/list/admin_verbs_event_manager = list( set category = "Fun" set name = "Man Up" set desc = "Tells mob to man up and deal with it." - + if(alert("Are you sure you want to tell them to man up?","Confirmation","Deal with it","No")=="No") return T << "Man up and deal with it." @@ -1059,7 +1035,7 @@ var/list/admin_verbs_event_manager = list( set category = "Fun" set name = "Man Up Global" set desc = "Tells everyone to man up and deal with it." - + if(alert("Are you sure you want to tell the whole server up?","Confirmation","Deal with it","No")=="No") return for (var/mob/T as mob in mob_list) From edd24126aa8ba959fd176b9b2062264811023ae1 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Thu, 15 Feb 2018 03:10:04 -0600 Subject: [PATCH 07/13] Fixes lack of borg fullbright with mesons etc --- code/game/objects/items/robot/robot_items.dm | 2 ++ code/modules/mob/living/silicon/robot/life.dm | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 16e9daf9cc..6c1afb2c83 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -54,6 +54,8 @@ /obj/item/borg/sight/material name = "\proper material scanner vision" sight_mode = BORGMATERIAL + icon_state = "material" + icon = 'icons/obj/clothing/glasses.dmi' /obj/item/borg/sight/hud name = "hud" diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 8299258184..349432e3d2 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -151,7 +151,7 @@ return 1 /mob/living/silicon/robot/handle_regular_hud_updates() - + var/fullbright = FALSE if (src.stat == 2 || (XRAY in mutations) || (src.sight_mode & BORGXRAY)) src.sight |= SEE_TURFS src.sight |= SEE_MOBS @@ -163,18 +163,22 @@ src.sight |= SEE_MOBS src.see_in_dark = 8 see_invisible = SEE_INVISIBLE_MINIMUM + fullbright = TRUE else if (src.sight_mode & BORGMESON) src.sight |= SEE_TURFS src.see_in_dark = 8 see_invisible = SEE_INVISIBLE_MINIMUM + fullbright = TRUE else if (src.sight_mode & BORGMATERIAL) src.sight |= SEE_OBJS src.see_in_dark = 8 see_invisible = SEE_INVISIBLE_MINIMUM + fullbright = TRUE else if (src.sight_mode & BORGTHERM) src.sight |= SEE_MOBS src.see_in_dark = 8 src.see_invisible = SEE_INVISIBLE_LEVEL_TWO + fullbright = TRUE else if (!seedarkness) src.sight &= ~SEE_MOBS src.sight &= ~SEE_TURFS @@ -188,7 +192,7 @@ src.see_in_dark = 8 // see_in_dark means you can FAINTLY see in the dark, humans have a range of 3 or so, tajaran have it at 8 src.see_invisible = SEE_INVISIBLE_LIVING // This is normal vision (25), setting it lower for normal vision means you don't "see" things like darkness since darkness // has a "invisible" value of 15 - + plane_holder.set_vis(VIS_FULLBRIGHT,fullbright) ..() if (src.healths) From 8ecff0414d2b7d3d29f5ffe8c7d784e21557120a Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Thu, 15 Feb 2018 03:12:14 -0600 Subject: [PATCH 08/13] Fix botanist hud icon --- icons/mob/hud.dmi | Bin 3670 -> 3698 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 75249fb4abd3ee9d51e654fcc2c13634f40ca173..c497e7c73db2f7a4f0e7d841cc4e25cc622549ed 100644 GIT binary patch delta 3361 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 DF8&d` From df62c76334496c52d2e7aeb34e4eab4e5a27f5c1 Mon Sep 17 00:00:00 2001 From: Anewbe Date: Thu, 15 Feb 2018 14:11:46 -0600 Subject: [PATCH 09/13] Lets Explorers bring holsters (#4812) --- maps/southern_cross/loadout/loadout_accessories.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/maps/southern_cross/loadout/loadout_accessories.dm b/maps/southern_cross/loadout/loadout_accessories.dm index 31e900f89b..1a23e18e9c 100644 --- a/maps/southern_cross/loadout/loadout_accessories.dm +++ b/maps/southern_cross/loadout/loadout_accessories.dm @@ -27,3 +27,8 @@ display_name = "drop pouches, white" path = /obj/item/clothing/accessory/storage/white_drop_pouches allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Search and Rescue","Explorer","Shaft Miner") + +/datum/gear/accessory/holster + display_name = "holster selection (Security, CD, HoP)" + path = /obj/item/clothing/accessory/holster + allowed_roles = list("Colony Director","Head of Personnel","Security Officer","Warden","Head of Security","Detective","Explorer") \ No newline at end of file From 7e2df512834308c2e5ef4f9dbdaafb4fc2a57ecd Mon Sep 17 00:00:00 2001 From: Anewbe Date: Thu, 15 Feb 2018 14:19:58 -0600 Subject: [PATCH 10/13] Changes mine code, adds random mine spawners (#4817) --- code/game/objects/effects/mines.dm | 110 +++++---- code/game/objects/random/random.dm | 16 +- .../mob/living/simple_animal/aliens/drone.dm | 1 + .../mob/living/simple_animal/animals/carp.dm | 1 + .../simple_animal/constructs/constructs.dm | 1 + .../simple_animal/humanoids/syndicate.dm | 1 + html/changelogs/Anewbe - Mines.yml | 40 ++++ .../surface_submaps/wilderness/CaveS.dmm | 118 +++++----- .../surface_submaps/wilderness/DoomP.dmm | 213 +++++++++--------- .../surface_submaps/wilderness/MCamp1.dmm | 91 ++++---- 10 files changed, 337 insertions(+), 255 deletions(-) create mode 100644 html/changelogs/Anewbe - Mines.yml diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index e858100e63..47fa55be1a 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -1,6 +1,6 @@ /obj/effect/mine - name = "mine" - desc = "A small explosive mine with 'HE' and a grenade symbol on the side." + name = "land mine" //The name and description are deliberately NOT modified, so you can't game the mines you find. + desc = "A small explosive land mine." density = 0 anchored = 1 icon = 'icons/obj/weapons.dmi' @@ -21,6 +21,7 @@ s.set_up(3, 1, src) s.start() explosion(loc, 0, 2, 3, 4) //land mines are dangerous, folks. + visible_message("\The [src.name] detonates!") qdel(s) qdel(src) @@ -38,10 +39,12 @@ /obj/effect/mine/Bumped(mob/M as mob|obj) - if(triggered) return + if(triggered) + return if(istype(M, /mob/living/)) - explode(M) + if(!M.hovering) + explode(M) /obj/effect/mine/attackby(obj/item/W as obj, mob/living/user as mob) if(isscrewdriver(W)) @@ -62,8 +65,6 @@ wires.Interact(user) /obj/effect/mine/dnascramble - name = "radiation mine" - desc = "A small explosive mine with a radiation symbol on the side." mineitemtype = /obj/item/weapon/mine/dnascramble /obj/effect/mine/dnascramble/explode(var/mob/living/M) @@ -71,31 +72,31 @@ triggered = 1 s.set_up(3, 1, src) s.start() - M.radiation += 50 - randmutb(M) - domutcheck(M,null) + if(M) + M.radiation += 50 + randmutb(M) + domutcheck(M,null) + visible_message("\The [src.name] flashes violently before disintegrating!") spawn(0) qdel(s) qdel(src) /obj/effect/mine/stun - name = "stun mine" - desc = "A small explosive mine with a lightning bolt symbol on the side." mineitemtype = /obj/item/weapon/mine/stun /obj/effect/mine/stun/explode(var/mob/living/M) triggered = 1 - M.Stun(30) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() s.set_up(3, 1, src) s.start() + if(M) + M.Stun(30) + visible_message("\The [src.name] flashes violently before disintegrating!") spawn(0) qdel(s) qdel(src) /obj/effect/mine/n2o - name = "nitrous oxide mine" - desc = "A small explosive mine with three Z's on the side." mineitemtype = /obj/item/weapon/mine/n2o /obj/effect/mine/n2o/explode(var/mob/living/M) @@ -103,12 +104,11 @@ for (var/turf/simulated/floor/target in range(1,src)) if(!target.blocks_air) target.assume_gas("sleeping_agent", 30) + visible_message("\The [src.name] detonates!") spawn(0) qdel(src) /obj/effect/mine/phoron - name = "incendiary mine" - desc = "A small explosive mine with a fire symbol on the side." mineitemtype = /obj/item/weapon/mine/phoron /obj/effect/mine/phoron/explode(var/mob/living/M) @@ -117,12 +117,11 @@ if(!target.blocks_air) target.assume_gas("phoron", 30) target.hotspot_expose(1000, CELL_VOLUME) + visible_message("\The [src.name] detonates!") spawn(0) qdel(src) /obj/effect/mine/kick - name = "kick mine" - desc = "Concentrated war crimes. Handle with care." mineitemtype = /obj/item/weapon/mine/kick /obj/effect/mine/kick/explode(var/mob/living/M) @@ -130,14 +129,13 @@ triggered = 1 s.set_up(3, 1, src) s.start() - qdel(M.client) + if(M) + qdel(M.client) spawn(0) qdel(s) qdel(src) /obj/effect/mine/frag - name = "fragmentation mine" - desc = "A small explosive mine with 'FRAG' and a grenade symbol on the side." mineitemtype = /obj/item/weapon/mine/frag var/fragment_types = list(/obj/item/projectile/bullet/pellet/fragment) var/num_fragments = 20 //total number of fragments produced by the grenade @@ -153,13 +151,14 @@ if(!O) return src.fragmentate(O, 20, 7, list(/obj/item/projectile/bullet/pellet/fragment)) //only 20 weak fragments because you're stepping directly on it + visible_message("\The [src.name] detonates!") spawn(0) qdel(s) qdel(src) -/obj/effect/mine/training - name = "training mine" - desc = "A mine with its payload removed, for EOD training and demonstrations." +/obj/effect/mine/training //Name and Desc commented out so it's possible to trick people with the training mines +// name = "training mine" +// desc = "A mine with its payload removed, for EOD training and demonstrations." mineitemtype = /obj/item/weapon/mine/training /obj/effect/mine/training/explode(var/mob/living/M) @@ -170,56 +169,62 @@ qdel(src) /obj/effect/mine/emp - name = "EMP Mine" - desc = "A small explosive mine with a lightning bolt symbol on the side." mineitemtype = /obj/item/weapon/mine/emp /obj/effect/mine/emp/explode(var/mob/living/M) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() s.set_up(3, 1, src) s.start() + visible_message("\The [src.name] flashes violently before disintegrating!") empulse(loc, 2, 4, 7, 10, 1) // As strong as an EMP grenade spawn(0) qdel(src) +/obj/effect/mine/incendiary + mineitemtype = /obj/item/weapon/mine/incendiary + +/obj/effect/mine/incendiary/explode(var/mob/living/M) + triggered = 1 + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() + s.set_up(3, 1, src) + s.start() + if(M) + M.adjust_fire_stacks(5) + M.fire_act() + visible_message("\The [src.name] bursts into flames!") + spawn(0) + qdel(src) + +///////////////////////////////////////////// +// The held item version of the above mines +///////////////////////////////////////////// /obj/item/weapon/mine name = "mine" desc = "A small explosive mine with 'HE' and a grenade symbol on the side." icon = 'icons/obj/weapons.dmi' icon_state = "uglymine" - var/arming = 0 var/countdown = 10 - var/minetype = /obj/effect/mine + var/minetype = /obj/effect/mine //This MUST be an /obj/effect/mine type, or it'll runtime. -/obj/item/weapon/mine/attack_self(mob/user as mob) - if(!arming) - to_chat(user, "You prime \the [name]! [countdown] seconds!") - icon_state = initial(icon_state) + "armed" - arming = 1 +/obj/item/weapon/mine/attack_self(mob/user as mob) // You do not want to move or throw a land mine while priming it... Explosives + Sudden Movement = Bad Times + add_fingerprint(user) + msg_admin_attack("[user.name] ([user.ckey]) primed \a [src] (JMP)") + user.visible_message("[user] starts priming \the [src.name].", "You start priming \the [src.name]. Hold still!") + if(do_after(user, 10 SECONDS)) playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) - add_fingerprint(user) - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.throw_mode_on() - spawn(countdown*10) - if(arming) - prime() - if(user) - msg_admin_attack("[user.name] ([user.ckey]) primed \a [src] (JMP)") - return + prime(user) else - to_chat(user, "You cancel \the [name]'s priming sequence.") - arming = 0 - countdown = initial(countdown) - icon_state = initial(icon_state) - add_fingerprint(user) + visible_message("[user] triggers \the [src.name]!", "You accidentally trigger \the [src.name]!") + prime(user, TRUE) return -/obj/item/weapon/mine/proc/prime(mob/user as mob) +/obj/item/weapon/mine/proc/prime(mob/user as mob, var/explode_now = FALSE) visible_message("\The [src.name] beeps as the priming sequence completes.") - var/atom/R = new minetype(get_turf(src)) + var/obj/effect/mine/R = new minetype(get_turf(src)) src.transfer_fingerprints_to(R) R.add_fingerprint(user) + if(explode_now) + R.explode(user) spawn(0) qdel(src) @@ -262,3 +267,8 @@ name = "emp mine" desc = "A small explosive mine with a lightning bolt symbol on the side." minetype = /obj/effect/mine/emp + +/obj/item/weapon/mine/incendiary + name = "incendiary mine" + desc = "A small explosive mine with a fire symbol on the side." + minetype = /obj/effect/mine/incendiary \ No newline at end of file diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index 18674db086..05ba702853 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -1123,4 +1123,18 @@ var/list/multi_point_spawns /obj/item/clothing/suit/space/void/mining/alt, /obj/item/clothing/head/helmet/space/void/mining/alt ) - ) \ No newline at end of file + ) + +/obj/random/landmine + name = "Random Land Mine" + desc = "This is a random land mine." + icon = 'icons/obj/weapons.dmi' + icon_state = "uglymine" + spawn_nothing_percentage = 25 + +/obj/random/landmine/item_to_spawn() + return pick(prob(30);/obj/effect/mine, + prob(25);/obj/effect/mine/frag, + prob(25);/obj/effect/mine/emp, + prob(10);/obj/effect/mine/stun, + prob(10);/obj/effect/mine/incendiary,) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/aliens/drone.dm b/code/modules/mob/living/simple_animal/aliens/drone.dm index c3ae697448..35e09030dd 100644 --- a/code/modules/mob/living/simple_animal/aliens/drone.dm +++ b/code/modules/mob/living/simple_animal/aliens/drone.dm @@ -25,6 +25,7 @@ projectiletype = /obj/item/projectile/beam/drone projectilesound = 'sound/weapons/laser3.ogg' destroy_surroundings = 0 + hovering = TRUE //Drones aren't affected by atmos. min_oxy = 0 diff --git a/code/modules/mob/living/simple_animal/animals/carp.dm b/code/modules/mob/living/simple_animal/animals/carp.dm index 9126642197..ecb5e66f0d 100644 --- a/code/modules/mob/living/simple_animal/animals/carp.dm +++ b/code/modules/mob/living/simple_animal/animals/carp.dm @@ -8,6 +8,7 @@ faction = "carp" intelligence_level = SA_ANIMAL + hovering = TRUE maxHealth = 25 health = 25 speed = 4 diff --git a/code/modules/mob/living/simple_animal/constructs/constructs.dm b/code/modules/mob/living/simple_animal/constructs/constructs.dm index 412f37f172..82d5376e39 100644 --- a/code/modules/mob/living/simple_animal/constructs/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs/constructs.dm @@ -8,6 +8,7 @@ response_disarm = "flailed at" response_harm = "punched" intelligence_level = SA_HUMANOID // Player controlled. + hovering = TRUE icon_dead = "shade_dead" speed = -1 a_intent = I_HURT diff --git a/code/modules/mob/living/simple_animal/humanoids/syndicate.dm b/code/modules/mob/living/simple_animal/humanoids/syndicate.dm index b053094663..fa70913841 100644 --- a/code/modules/mob/living/simple_animal/humanoids/syndicate.dm +++ b/code/modules/mob/living/simple_animal/humanoids/syndicate.dm @@ -167,6 +167,7 @@ icon_state = "viscerator_attack" icon_living = "viscerator_attack" intelligence_level = SA_ROBOTIC + hovering = TRUE faction = "syndicate" maxHealth = 15 diff --git a/html/changelogs/Anewbe - Mines.yml b/html/changelogs/Anewbe - Mines.yml new file mode 100644 index 0000000000..502771f248 --- /dev/null +++ b/html/changelogs/Anewbe - Mines.yml @@ -0,0 +1,40 @@ +################################ +# 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: + - rscadd: "Added a random mine spawner, for use in PoIs. Replaces mines in PoIs with the random spawner." + - rscadd: "Mines now give a visible message when they go off." + - tweak: "Land mines on the ground can no longer be told apart from one another, to prevent gaming the system." + - bugfix: "Hovering mobs (viscerators, drones, Poly, carp) no longer set off land mines." + - tweak: "Arming a land mine now takes concentration. If you move, it will boom." diff --git a/maps/submaps/surface_submaps/wilderness/CaveS.dmm b/maps/submaps/surface_submaps/wilderness/CaveS.dmm index 36d0d00ca5..9f5a411ec5 100644 --- a/maps/submaps/surface_submaps/wilderness/CaveS.dmm +++ b/maps/submaps/surface_submaps/wilderness/CaveS.dmm @@ -3,35 +3,39 @@ "c" = (/obj/item/ammo_casing/a45,/turf/template_noop,/area/submap/CaveS) "d" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/CaveS) "e" = (/obj/item/ammo_casing/a45,/obj/item/weapon/reagent_containers/food/snacks/xenomeat/spidermeat,/turf/template_noop,/area/submap/CaveS) -"f" = (/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) -"g" = (/obj/effect/spider/stickyweb,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) -"h" = (/obj/item/ammo_casing/a45,/obj/item/ammo_casing/a45,/turf/template_noop,/area/submap/CaveS) -"i" = (/obj/item/weapon/reagent_containers/food/snacks/xenomeat/spidermeat,/turf/template_noop,/area/submap/CaveS) -"j" = (/obj/item/clothing/accessory/storage/webbing,/obj/item/weapon/material/knife/tacknife/combatknife,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) -"k" = (/mob/living/simple_animal/hostile/giant_spider,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) -"l" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) -"m" = (/mob/living/simple_animal/hostile/giant_spider/lurker,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) -"n" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) -"o" = (/obj/effect/mine,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) -"p" = (/mob/living/simple_animal/hostile/giant_spider/webslinger,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) -"q" = (/obj/effect/decal/cleanable/cobweb2,/mob/living/simple_animal/hostile/giant_spider/lurker,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) -"r" = (/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/CaveS) -"s" = (/mob/living/simple_animal/hostile/giant_spider/hunter,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) -"t" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/CaveS) -"u" = (/turf/simulated/floor,/area/submap/CaveS) -"v" = (/obj/structure/closet/crate,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/weapon/storage/toolbox,/obj/random/toolbox,/turf/simulated/floor,/area/submap/CaveS) -"w" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/floor,/area/submap/CaveS) -"x" = (/obj/structure/table/woodentable,/turf/simulated/floor,/area/submap/CaveS) -"y" = (/obj/machinery/power/port_gen/pacman,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor,/area/submap/CaveS) -"z" = (/turf/simulated/wall,/area/submap/CaveS) -"A" = (/obj/structure/closet/crate,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/pill/antitox,/obj/item/weapon/reagent_containers/pill/antitox,/obj/item/weapon/reagent_containers/pill/antitox,/obj/item/weapon/reagent_containers/pill/paracetamol,/obj/random/firstaid,/turf/simulated/floor,/area/submap/CaveS) -"B" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor,/area/submap/CaveS) -"C" = (/obj/structure/closet/crate,/obj/random/contraband,/obj/random/contraband,/obj/random/contraband,/obj/random/energy,/obj/item/weapon/material/star,/obj/item/weapon/material/star,/obj/item/weapon/material/star,/obj/item/weapon/material/star,/obj/item/weapon/material/star,/turf/simulated/floor,/area/submap/CaveS) -"D" = (/obj/effect/spider/stickyweb,/mob/living/simple_animal/hostile/giant_spider/lurker,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) -"E" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/submap/CaveS) -"F" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/submap/CaveS) -"G" = (/obj/machinery/computer/communications,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/submap/CaveS) -"H" = (/obj/structure/loot_pile/maint/boxfort,/turf/simulated/floor,/area/submap/CaveS) +"f" = (/obj/random/landmine,/turf/template_noop,/area/submap/CaveS) +"g" = (/obj/item/ammo_casing/a45,/obj/random/landmine,/turf/template_noop,/area/submap/CaveS) +"h" = (/obj/random/landmine,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) +"i" = (/obj/effect/spider/stickyweb,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) +"j" = (/obj/item/ammo_casing/a45,/obj/item/ammo_casing/a45,/turf/template_noop,/area/submap/CaveS) +"k" = (/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) +"l" = (/obj/item/weapon/reagent_containers/food/snacks/xenomeat/spidermeat,/turf/template_noop,/area/submap/CaveS) +"m" = (/obj/item/clothing/accessory/storage/webbing,/obj/item/weapon/material/knife/tacknife/combatknife,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) +"n" = (/mob/living/simple_animal/hostile/giant_spider,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) +"o" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) +"p" = (/mob/living/simple_animal/hostile/giant_spider/lurker,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) +"q" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) +"r" = (/mob/living/simple_animal/hostile/giant_spider/webslinger,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) +"s" = (/obj/effect/decal/cleanable/cobweb2,/mob/living/simple_animal/hostile/giant_spider/lurker,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) +"t" = (/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/CaveS) +"u" = (/mob/living/simple_animal/hostile/giant_spider/hunter,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) +"v" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/CaveS) +"w" = (/obj/random/landmine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/CaveS) +"x" = (/turf/simulated/floor,/area/submap/CaveS) +"y" = (/obj/structure/closet/crate,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/weapon/storage/toolbox,/obj/random/toolbox,/turf/simulated/floor,/area/submap/CaveS) +"z" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/floor,/area/submap/CaveS) +"A" = (/obj/structure/table/woodentable,/turf/simulated/floor,/area/submap/CaveS) +"B" = (/obj/random/landmine,/turf/simulated/floor,/area/submap/CaveS) +"C" = (/obj/machinery/power/port_gen/pacman,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor,/area/submap/CaveS) +"D" = (/turf/simulated/wall,/area/submap/CaveS) +"E" = (/obj/structure/closet/crate,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/pill/antitox,/obj/item/weapon/reagent_containers/pill/antitox,/obj/item/weapon/reagent_containers/pill/antitox,/obj/item/weapon/reagent_containers/pill/paracetamol,/obj/random/firstaid,/obj/random/landmine,/turf/simulated/floor,/area/submap/CaveS) +"F" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor,/area/submap/CaveS) +"G" = (/obj/structure/closet/crate,/obj/random/contraband,/obj/random/contraband,/obj/random/contraband,/obj/random/energy,/obj/item/weapon/material/star,/obj/item/weapon/material/star,/obj/item/weapon/material/star,/obj/item/weapon/material/star,/obj/item/weapon/material/star,/turf/simulated/floor,/area/submap/CaveS) +"H" = (/obj/effect/spider/stickyweb,/mob/living/simple_animal/hostile/giant_spider/lurker,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS) +"I" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/submap/CaveS) +"J" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/submap/CaveS) +"K" = (/obj/machinery/computer/communications,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/submap/CaveS) +"L" = (/obj/structure/loot_pile/maint/boxfort,/turf/simulated/floor,/area/submap/CaveS) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -42,34 +46,34 @@ abbbbbbbbbbbbbbbbbbbbbcbbbbbbbbbbbbbbbba abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba abbbbbbbbbbbbbbbcbbbbbbcccdddddbbbbbbbba abbbbbbbbbbbbbbbbbbbbbbbeddddddddbbddbba -abbbbbbbbbbbbbbbbbbbbbbbdddddddddddddbba -abbbbdddddbbbbcbbbbcbbbfgddddddddddddbba -abbbbddddddddbbbbbhbbbbffddddddddddddbba -abbbddddddddddbbbbcbibdgfggdddddddddbbba -abbbdddddddddddbbbbbbdddgfffdddddddbbbba -abbbddddddddddddbbbbddddddffgddddddbbbba -abbdddddjdffgdddbbddddddddffffffddddbbba -abbdddkffffffdddbbdddddddlffffffkdddbbba -abbdddgfffffmddbbddddddddfffffffdddddbba -abbddddfffffdddbdddddddddffddddfnddddbba -abdddddddffffddddddddddddofddddffdddddba -abdddddddffffndddddlfkffffddddlfddddddba -abddddddddffffffffffffffffddddofddddddda -abdddddddddpfffffffffffffffqddffddddddda -abdddddrrdddddffdddmdddddgffffffddddddba -abdddrrrrdddddffddddddddddofffsddddddbba -abddrtrrrdddddffmdddddddddddddddddddbbba -abddrrrrrrdddddfffffddddddddmfddddddbbba -abdddrrrtrgddddfffofffogdddfffffdddbbbba -abdddrrrrrfffffffdfffffgddffuuvfffddbbba -abddrrrrrrrffffgdddgffffffffuuuwfdddbbba -abddrrrrrrffddddddddfofffffuxxuuffddbbba -abdddrrrrrffmddddddfffgdffuyzzAfffdddbba -abdddddtrffddddddgffffddffuBzzCffddddbba -abdddddddrgddddddDffffddffuEFGuuddddbbba -abbddddddddddddddfffffdddffuuuudddddbbba -abbdddddddddddddddfgdddddfffuHdddddbbbba -abbdddddddddddddddddddddddmffddddbbbbbba +abbbbbbbbbbbbbbbbbbbbbfbdddddddddddddbba +abbbbdddddbbbbcbbbbgbbbhiddddddddddddbba +abbbbddddddddbbbbbjbbfbkkddddddddddddbba +abbbddddddddddbbbbcblbdikiidddddddddbbba +abbbdddddddddddbbbbbbdddikkkdddddddbbbba +abbbddddddddddddbbbbddddddhkiddddddbbbba +abbdddddmdkkidddbbddddddddkkkkkkddddbbba +abbdddnkkkkkkdddbbdddddddokkkkkkndddbbba +abbdddikkkkkpddbbddddddddkkkkkkkdddddbba +abbddddkkkkkdddbdddddddddkkddddkqddddbba +abdddddddkkkkddddddddddddhkddddkkdddddba +abdddddddkkkkqdddddoknkkkkddddokddddddba +abddddddddkkkkkkkkkkkkkkkkddddhkddddddda +abdddddddddrkkkkkkkkkkkkkkksddkkddddddda +abdddddttdddddkkdddpdddddikkkkkkddddddba +abdddttttdddddkkddddddddddkkkkuddddddbba +abddtvtttdddddkkpdddddddddddddddddddbbba +abddttwtttdddddkkkkkddddddddpkddddddbbba +abdddtttvtiddddkkkkkkkhidddkkkkkdddbbbba +abdddtttwtkkkkkkkdkkkkkiddkkxxykkkddbbba +abddtttttttkkkkidddikkkhkkkkxxxzkdddbbba +abddttttttkkddddddddkhkkkkkxAABxkkddbbba +abdddtttttkkpddddddkkkidkkxCDDEkkkdddbba +abdddddvtkkddddddikkkkddkkxFDDGkkddddbba +abdddddddtiddddddHkkkkddkkxIJKBxddddbbba +abbddddddddddddddkkkkkdddkkxxxxdddddbbba +abbdddddddddddddddkidddddkkkxLdddddbbbba +abbdddddddddddddddddddddddpkkddddbbbbbba abbbdddddddddddddddddddddddddddbbbbbbbba abbbddddbbbbdddddddbbdddddddddbbbbbbbbba abbbddbbbbbbbddddbbbbdbbdddddbbbbbbbbbba diff --git a/maps/submaps/surface_submaps/wilderness/DoomP.dmm b/maps/submaps/surface_submaps/wilderness/DoomP.dmm index c98433cff4..761eac23e4 100644 --- a/maps/submaps/surface_submaps/wilderness/DoomP.dmm +++ b/maps/submaps/surface_submaps/wilderness/DoomP.dmm @@ -5,126 +5,129 @@ "ae" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/template_noop,/area/submap/DoomP) "af" = (/turf/simulated/floor/water,/area/submap/DoomP) "ag" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/DoomP) -"ah" = (/obj/effect/mine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) +"ah" = (/obj/random/landmine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) "ai" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) -"aj" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) +"aj" = (/obj/effect/decal/cleanable/blood,/obj/random/landmine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) "ak" = (/turf/simulated/floor/water/deep,/area/submap/DoomP) -"al" = (/obj/effect/decal/remains/mouse,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) -"am" = (/obj/effect/decal/remains/deer,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) -"an" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) -"ao" = (/obj/machinery/light/small,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) -"ap" = (/obj/machinery/porta_turret,/turf/simulated/floor/plating,/area/submap/DoomP) -"aq" = (/turf/simulated/wall/r_wall,/area/submap/DoomP) -"ar" = (/obj/structure/sign/warning/secure_area,/turf/simulated/wall/r_wall,/area/submap/DoomP) -"as" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/submap/DoomP) -"at" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/submap/DoomP) -"au" = (/obj/effect/floor_decal/borderfloor{dir = 9},/turf/simulated/floor/tiled,/area/submap/DoomP) -"av" = (/obj/structure/bed/chair,/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP) -"aw" = (/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP) -"ax" = (/obj/structure/bed/chair,/obj/effect/floor_decal/borderfloor{dir = 1},/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Even less friendly than he looks."; speak = list("Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Anyone else smell that?")},/turf/simulated/floor/tiled,/area/submap/DoomP) -"ay" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP) -"az" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/borderfloor{dir = 5},/turf/simulated/floor/tiled,/area/submap/DoomP) -"aA" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP) -"aB" = (/obj/machinery/power/smes/buildable/point_of_interest,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/submap/DoomP) -"aC" = (/obj/machinery/power/smes/buildable/point_of_interest,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/submap/DoomP) -"aD" = (/obj/machinery/power/apc{dir = 1; name = "PAPC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) -"aE" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/plating,/area/submap/DoomP) -"aF" = (/obj/structure/table/standard,/obj/random/toolbox,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) -"aG" = (/obj/structure/table/standard,/obj/item/stack/material/phoron{amount = 25},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) -"aH" = (/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) -"aI" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/rocks,/area/submap/DoomP) -"aJ" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 8},/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Even less friendly than he looks."; speak = list("Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Anyone else smell that?")},/turf/simulated/floor/tiled,/area/submap/DoomP) -"aK" = (/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aL" = (/obj/structure/table/standard,/obj/item/pizzabox,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aM" = (/turf/simulated/floor/tiled,/area/submap/DoomP) -"aN" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/borderfloor{dir = 4},/turf/simulated/floor/tiled,/area/submap/DoomP) -"aO" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) -"aP" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) -"aQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) -"aR" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) -"aS" = (/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) -"aT" = (/obj/machinery/light/small,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) -"aU" = (/obj/structure/lattice,/turf/simulated/floor/water,/area/submap/DoomP) -"aV" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP) -"aW" = (/obj/machinery/vending/cola,/obj/effect/floor_decal/borderfloor/corner{dir = 4},/turf/simulated/floor/tiled,/area/submap/DoomP) -"aX" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/submap/DoomP) -"aY" = (/obj/machinery/door/airlock/engineering,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) -"aZ" = (/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/submap/DoomP) -"ba" = (/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled,/area/submap/DoomP) -"bb" = (/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled,/area/submap/DoomP) -"bc" = (/obj/machinery/light/small,/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled,/area/submap/DoomP) -"bd" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP) -"be" = (/obj/machinery/door/airlock/hatch,/turf/simulated/floor/tiled,/area/submap/DoomP) -"bf" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP) -"bg" = (/obj/machinery/door/airlock/highsecurity,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) -"bh" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/white,/area/submap/DoomP) -"bi" = (/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) -"bj" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) -"bk" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syndie_kit/spy,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) -"bl" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/smokes,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) -"bm" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/handcuffs,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) -"bn" = (/obj/structure/table/rack,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) -"bo" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/laser/mounted,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) -"bp" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/contender,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) -"bq" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/toy/plushie/spider,/obj/effect/floor_decal/corner/lime/full{dir = 8},/turf/simulated/floor/tiled/white,/area/submap/DoomP) -"br" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/lime{dir = 5},/turf/simulated/floor/tiled/white,/area/submap/DoomP) -"bs" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/effect/floor_decal/corner/lime{dir = 5},/turf/simulated/floor/tiled/white,/area/submap/DoomP) -"bt" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/obj/effect/floor_decal/corner/lime{dir = 5},/turf/simulated/floor/tiled/white,/area/submap/DoomP) -"bu" = (/obj/structure/table/standard,/obj/structure/bedsheetbin,/obj/effect/floor_decal/corner/lime{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP) -"bv" = (/turf/simulated/floor/tiled/white,/area/submap/DoomP) -"bw" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP) -"bx" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP) -"by" = (/obj/machinery/light/small,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) -"bz" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/submap/DoomP) -"bA" = (/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/submap/DoomP) -"bB" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/submap/DoomP) -"bC" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/white,/area/submap/DoomP) -"bD" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP) -"bE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/submap/DoomP) -"bF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/submap/DoomP) -"bG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/submap/DoomP) -"bH" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) +"al" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) +"am" = (/obj/random/landmine,/turf/simulated/floor/outdoors/rocks,/area/submap/DoomP) +"an" = (/obj/effect/decal/remains/mouse,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) +"ao" = (/obj/effect/decal/remains/deer,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) +"ap" = (/obj/effect/decal/remains/mouse,/obj/random/landmine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) +"aq" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) +"ar" = (/obj/machinery/light/small,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) +"as" = (/obj/machinery/porta_turret,/turf/simulated/floor/plating,/area/submap/DoomP) +"at" = (/turf/simulated/wall/r_wall,/area/submap/DoomP) +"au" = (/obj/structure/sign/warning/secure_area,/turf/simulated/wall/r_wall,/area/submap/DoomP) +"av" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/submap/DoomP) +"aw" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/submap/DoomP) +"ax" = (/obj/effect/floor_decal/borderfloor{dir = 9},/turf/simulated/floor/tiled,/area/submap/DoomP) +"ay" = (/obj/structure/bed/chair,/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP) +"az" = (/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP) +"aA" = (/obj/structure/bed/chair,/obj/effect/floor_decal/borderfloor{dir = 1},/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Even less friendly than he looks."; speak = list("Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Anyone else smell that?")},/turf/simulated/floor/tiled,/area/submap/DoomP) +"aB" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP) +"aC" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/borderfloor{dir = 5},/turf/simulated/floor/tiled,/area/submap/DoomP) +"aD" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP) +"aE" = (/obj/machinery/power/smes/buildable/point_of_interest,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/submap/DoomP) +"aF" = (/obj/machinery/power/smes/buildable/point_of_interest,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/submap/DoomP) +"aG" = (/obj/machinery/power/apc{dir = 1; name = "PAPC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) +"aH" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/plating,/area/submap/DoomP) +"aI" = (/obj/structure/table/standard,/obj/random/toolbox,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) +"aJ" = (/obj/structure/table/standard,/obj/item/stack/material/phoron{amount = 25},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) +"aK" = (/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) +"aL" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/rocks,/area/submap/DoomP) +"aM" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 8},/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Even less friendly than he looks."; speak = list("Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Anyone else smell that?")},/turf/simulated/floor/tiled,/area/submap/DoomP) +"aN" = (/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aO" = (/obj/structure/table/standard,/obj/item/pizzabox,/turf/simulated/floor/tiled,/area/submap/DoomP) +"aP" = (/turf/simulated/floor/tiled,/area/submap/DoomP) +"aQ" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/borderfloor{dir = 4},/turf/simulated/floor/tiled,/area/submap/DoomP) +"aR" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) +"aS" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) +"aT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) +"aU" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) +"aV" = (/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) +"aW" = (/obj/machinery/light/small,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) +"aX" = (/obj/structure/lattice,/turf/simulated/floor/water,/area/submap/DoomP) +"aY" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP) +"aZ" = (/obj/machinery/vending/cola,/obj/effect/floor_decal/borderfloor/corner{dir = 4},/turf/simulated/floor/tiled,/area/submap/DoomP) +"ba" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/submap/DoomP) +"bb" = (/obj/machinery/door/airlock/engineering,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP) +"bc" = (/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/submap/DoomP) +"bd" = (/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled,/area/submap/DoomP) +"be" = (/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled,/area/submap/DoomP) +"bf" = (/obj/machinery/light/small,/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled,/area/submap/DoomP) +"bg" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP) +"bh" = (/obj/machinery/door/airlock/hatch,/turf/simulated/floor/tiled,/area/submap/DoomP) +"bi" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP) +"bj" = (/obj/machinery/door/airlock/highsecurity,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) +"bk" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/white,/area/submap/DoomP) +"bl" = (/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) +"bm" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) +"bn" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syndie_kit/spy,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) +"bo" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/smokes,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) +"bp" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/handcuffs,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) +"bq" = (/obj/structure/table/rack,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) +"br" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/laser/mounted,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) +"bs" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/contender,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) +"bt" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/toy/plushie/spider,/obj/effect/floor_decal/corner/lime/full{dir = 8},/turf/simulated/floor/tiled/white,/area/submap/DoomP) +"bu" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/lime{dir = 5},/turf/simulated/floor/tiled/white,/area/submap/DoomP) +"bv" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/effect/floor_decal/corner/lime{dir = 5},/turf/simulated/floor/tiled/white,/area/submap/DoomP) +"bw" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/obj/effect/floor_decal/corner/lime{dir = 5},/turf/simulated/floor/tiled/white,/area/submap/DoomP) +"bx" = (/obj/structure/table/standard,/obj/structure/bedsheetbin,/obj/effect/floor_decal/corner/lime{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP) +"by" = (/turf/simulated/floor/tiled/white,/area/submap/DoomP) +"bz" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP) +"bA" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP) +"bB" = (/obj/machinery/light/small,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP) +"bC" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/submap/DoomP) +"bD" = (/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/submap/DoomP) +"bE" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/submap/DoomP) +"bF" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/white,/area/submap/DoomP) +"bG" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP) +"bH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/submap/DoomP) +"bI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/submap/DoomP) +"bJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/submap/DoomP) +"bK" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaabababababababababababababababababababababababababababababababababababacacacacacacacacabababababababadadadabababaeabaa aaaeabababababababababababababababababababababababababababababababababacacafafafafafafacacacacababacadadadadadacacacabaa aaababacacacacacacacabababababababagababababacacacacacacacacababacacacacafafafafafafafafafafacacacacadadahadacafafacabaa -aaabacacafafafafafacacacacacacababaeabacacacacafafafafacacacacacafafafafafafafafafafafafafacacadadadadadacacacafafacabaa +aaabacacafafafafafacacacacacacababaeabacacacacafafafafacacacacacafafafafafafafafafafafafafacacadadahadadacacacafafacabaa aaabacafafafafafafafafafafafacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafacacadaiadadajacacafafafafacacaa -aaabacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacadadadadadadacafafafafafafacaa -aaabacafafafafakakakakakakafafafafafafafafafafafafafakakakakakakakafafafafafafafafacacadajadadahadadadacafafafafafafacaa -aaabacafafafafafakakakakakafafafafafafafafafakakakakakakakakakakakakakakafafafafafacadahadadadadadadacacafafafafafafacaa -aaabacacafafafafafakakakakafafafafafafafafafakakakakakakakakakakakakakafafafafafacacaladadadamadahacacafafafafafafafacaa -aaababacafafafafafafakakakakakafafafakakakakakakakakakakakakakakakakakakakakakafafacacadadadadadacacafafafafafafafafacaa -aaababacafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakakafafafafafafacadadadaiadacacafafafafafafafacacaa -aaababacacafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakafafafafafacacadahadadacacafafafafafafafafacabaa +aaabacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacahadadadadadacafafafafafafacaa +aaabacafafafafakakakakakakafafafafafafafafafafafafafakakakakakakakafafafafafafafafacacadaladadahadadadacafafafafafafacaa +aaabacafafafafafakakakakakafafafafafafafafafakakakakakakakakakakakakakakafafafafafacadahadadadadadadamacafafafafafafacaa +aaabacacafafafafafakakakakafafafafafafafafafakakakakakakakakakakakakakafafafafafacacanadadadaoadahacacafafafafafafafacaa +aaababacafafafafafafakakakakakafafafakakakakakakakakakakakakakakakakakakakakakafafacacadadahadadacacafafafafafafafafacaa +aaababacafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakakafafafafafafacadadadaiadacamafafafafafafafacacaa +aaababacacafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakafafafafafacamadahadadacacafafafafafafafafacabaa aaabababacafafafafafafafakakakakakakakakakakakakafafakakakakakakakakakafafafafafafacacadadadadacafafafafafafafafafacabaa -aaabababacacafafafafafafafakakakakakakakakakakafafafafakakakakakakakakakafafafafafacacadadalacacafafafafafafafacacacabaa +aaabababacacafafafafafafafakakakakakakakakakakafafafafakakakakakakakakakafafafafafamacadadapacacafafafafafafafacacacabaa aaababababacafafafafafafakakakakakakakakakafafafafafafafafafafafafafafafafafafacacacadadadadacafafafafakafafafacacababaa -aaababababacacafafafafafafakakakakakakafafafafafafafafafafafafafafafafafafafacacadadadadadacacafafafakakafafafafacababaa -aaababababacacafafafafafakakakakakafafafafafafafafafafafafafafafafafafafafacacadadadadacacacafafafafakakakafafafacacabaa -aaababababaeacafafafafakakakakakafafafafafafafafafafafafafafafafafafafafacacadadadacacacafafafafafafakakakafafafafacabaa -aaababababacacafafakakakakakakakakafafafafafafafafafacacacacacacacafafacacadadacacacafafafafafafafafakakakafafafafacabaa +aaababababacacafafafafafafakakakakakakafafafafafafafafafafafafafafafafafafafacacadahadahadacacafafafakakafafafafacababaa +aaababababacacafafafafafakakakakakafafafafafafafafafafafafafafafafafafafafacacahadadadacacacafafafafakakakafafafacacabaa +aaababababaeacafafafafakakakakakafafafafafafafafafafafafafafafafafafafafacacadadadamacacafafafafafafakakakafafafafacabaa +aaababababacacafafakakakakakakakakafafafafafafafafafacacacacacacacafafacamadadacacacafafafafafafafafakakakafafafafacabaa aaababababacafafafakakakakakakakakakakafafafafafacacacadadadadadacacacacadadacacafafafafafafafakafakakakafafafafafacabaa -aaabababacacafafafafakakakakakakakafafafafafafacacadadanadadadadadadadadadadacafafafafafafafafakakakakakafafafafafacabaa -aaabababacafafafafafafakakakakakafafafafafafacacadadadadadadanadadadadadadadacafafafafafafafakakakakakakafafafafacacabaa +aaabababacacafafafafakakakakakakakafafafafafafacacadadaqadadadadadadadadadadacafafafafafafafafakakakakakafafafafafacabaa +aaabababacafafafafafafakakakakakafafafafafafacacadadadadadadaqadadadahadadadamafafafafafafafakakakakakakafafafafacacabaa aaabababacafafafafafafakakakakakafafafafafacacadadadadadadadadadadadadadadacacafafafafafafafakakakakakakakakafafacacabaa aaabababacafafafafafafafakakakakafafafafacacadadadadadadadadadadadadadadadadacacafafafafafafakakakakakakakakafafafacabaa aaabababacafafafafafafafakakakafafafafafacadadadadadadadadadadadadadadadadadadacacafafafafafafakakakakakakafafafafacabaa -aaabababacafafafafafafafakakakakakafafafacadadadadadadadaoadadadadadaoadadadadadacacafafafafafafakakakakafafafafafacabaa -aaabababacafafafafafafafakakakakakafafafacadadapadadapadaqarasasasaraqadapadadapadacafafafafafafakakakakafafafafafacabaa -aaabababacafafafafafafafakakakakakakafafacaqaqaqaqaqaqaqaqaqaqataqaqaqaqaqaqaqaqaqaqaqafafafafafakakakakafafafafacacabaa -aaabababacacafafafafafafakakakakakakafafacaqauavawaxayaxawazaqaAaqaBaCaCaCaDaEaFaGaHaqafafafafafakakakakafafafafacacabaa -aaabababacacacafafafafakakakakakakakafapaIaqaJaKaLaKaKaKaMaNaqaMaqaOaPaPaPaQaRaSaTaSaqaUapafafafakakakafafafafafafacabaa -aaabababababacacafafafakakakakakakakafafafaqaVaKaKaKaKaKaMaWaqaXaqaqaqaqaqaqaYaZaqaqaqafafafafafakakakafafafafafafacabaa -aaababababababacafafafakakakakakakakakafafaqbabbbbbcbbbbbdaMbeaMaMbfaMaMaMaMaMbfaMaMaqafafafafafakakakafafafafafafafacaa -aaabababagabababacafafakakakakakakakakapaUaqbgaqaqaqaqaqaqaqaqaqaqaqaqaqaqbhaqaqaqaqaqaUapafafafakakakafafafafafafafacaa -aaababababababacacafafafakakakakakakakakafaqbibjbkblbmbnbobpaqbqbrbsbtbsbubvbhbwbhbxaqafafafafafakakakafafafafafafafacaa -aaababababababacafafafafakakakakakakakakafaqbibibybibibybibiaqbzbAbAbAbAbAbBaqbCaqbDaqafafafafakakakakakafafafafafafacaa -aaababababababacafafafafakakakakakakakakakaqaqaqaqaqaqaqaqaqaqaqaqbEbFbFbFbGaqaqaqaqaqafafafafakakakakafafafafafafafacaa -aaabababababacacafafafakakakakakakakakakakafafafafaIacacadadadadbHadadadadadbHacacafafafafafafakakakakafafafafafafafacaa -aaabababababacafafafafakakakakakakakakakakakakafafapafacacacacacapadadadadadapacafafafafafafakakakakakafafafafafafacacaa +aaabababacafafafafafafafakakakakakafafafacadadadadadadadaradadadadadaradadadadadacacafafafafafafakakakakafafafafafacabaa +aaabababacafafafafafafafakakakakakafafafacadadasadadasadatauavavavauatadasadadasadacafafafafafafakakakakafafafafafacabaa +aaabababacafafafafafafafakakakakakakafafacatatatatatatatatatatawatatatatatatatatatatatafafafafafakakakakafafafafacacabaa +aaabababacacafafafafafafakakakakakakafafacataxayazaAaBaAazaCataDataEaFaFaFaGaHaIaJaKatafafafafafakakakakafafafafacacabaa +aaabababacacacafafafafakakakakakakakafasaLataMaNaOaNaNaNaPaQataPataRaSaSaSaTaUaVaWaVataXasafafafakakakafafafafafafacabaa +aaabababababacacafafafakakakakakakakafafafataYaNaNaNaNaNaPaZatbaatatatatatatbbbcatatatafafafafafakakakafafafafafafacabaa +aaababababababacafafafakakakakakakakakafafatbdbebebfbebebgaPbhaPaPbiaPaPaPaPaPbiaPaPatafafafafafakakakafafafafafafafacaa +aaabababagabababacafafakakakakakakakakasaXatbjatatatatatatatatatatatatatatbkatatatatataXasafafafakakakafafafafafafafacaa +aaababababababacacafafafakakakakakakakakafatblbmbnbobpbqbrbsatbtbubvbwbvbxbybkbzbkbAatafafafafafakakakafafafafafafafacaa +aaababababababacafafafafakakakakakakakakafatblblbBblblbBblblatbCbDbDbDbDbDbEatbFatbGatafafafafakakakakakafafafafafafacaa +aaababababababacafafafafakakakakakakakakakatatatatatatatatatatatatbHbIbIbIbJatatatatatafafafafakakakakafafafafafafafacaa +aaabababababacacafafafakakakakakakakakakakafafafafaLacacadadadadbKadadadadadbKacacafafafafafafakakakakafafafafafafafacaa +aaabababababacafafafafakakakakakakakakakakakakafafasafacacacacacasadadadadadasacafafafafafafakakakakakafafafafafafacacaa aaababababacacafafafafakakakakakakakakakakakakakafafafafafafafacacadadadadadacacafafafafafakakakakakakafafafafafafacabaa aaababababacafafafafafafakakakakakakakakakakakakafafafafafafafafacacacacacacacafafafafafafafakakakakakafafafafafacacabaa aaabababacacafafafafafafakakakakakakakakakakakakakafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafacababaa diff --git a/maps/submaps/surface_submaps/wilderness/MCamp1.dmm b/maps/submaps/surface_submaps/wilderness/MCamp1.dmm index 3033ffdf62..bebe7a2de8 100644 --- a/maps/submaps/surface_submaps/wilderness/MCamp1.dmm +++ b/maps/submaps/surface_submaps/wilderness/MCamp1.dmm @@ -1,53 +1,60 @@ "a" = (/turf/template_noop,/area/template_noop) "b" = (/turf/template_noop,/area/submap/MilitaryCamp1) "c" = (/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1) -"d" = (/obj/effect/mine,/turf/template_noop,/area/submap/MilitaryCamp1) +"d" = (/obj/random/landmine,/turf/template_noop,/area/submap/MilitaryCamp1) "e" = (/obj/structure/flora/bush,/turf/template_noop,/area/submap/MilitaryCamp1) "f" = (/obj/effect/decal/cleanable/blood,/turf/template_noop,/area/submap/MilitaryCamp1) -"g" = (/obj/effect/decal/remains,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1) -"h" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/MilitaryCamp1) -"i" = (/obj/item/stack/rods,/turf/template_noop,/area/submap/MilitaryCamp1) -"j" = (/obj/effect/mine,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1) -"k" = (/turf/simulated/wall,/area/submap/MilitaryCamp1) -"l" = (/turf/simulated/floor,/area/submap/MilitaryCamp1) -"m" = (/obj/item/weapon/material/shard,/turf/template_noop,/area/submap/MilitaryCamp1) -"n" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) -"o" = (/obj/structure/girder,/turf/simulated/floor,/area/submap/MilitaryCamp1) -"p" = (/obj/machinery/computer/communications,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) -"q" = (/obj/structure/table/standard,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) -"r" = (/obj/effect/mine,/turf/simulated/floor,/area/submap/MilitaryCamp1) -"s" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/MilitaryCamp1) -"t" = (/obj/machinery/computer/security,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) -"u" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) -"v" = (/obj/machinery/door/airlock,/turf/simulated/floor,/area/submap/MilitaryCamp1) -"w" = (/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) -"x" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/template_noop,/area/submap/MilitaryCamp1) -"y" = (/obj/structure/table,/turf/simulated/floor,/area/submap/MilitaryCamp1) -"z" = (/obj/structure/table/standard,/obj/random/firstaid,/turf/simulated/floor,/area/submap/MilitaryCamp1) -"A" = (/obj/machinery/door/airlock,/obj/effect/mine,/turf/simulated/floor,/area/submap/MilitaryCamp1) -"B" = (/obj/structure/flora/tree/dead,/turf/template_noop,/area/submap/MilitaryCamp1) -"C" = (/obj/structure/table/standard,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/simulated/floor,/area/submap/MilitaryCamp1) -"D" = (/obj/structure/table/standard,/obj/item/weapon/gun/energy/gun,/turf/simulated/floor,/area/submap/MilitaryCamp1) +"g" = (/obj/random/landmine,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1) +"h" = (/obj/effect/decal/remains,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1) +"i" = (/obj/effect/mine,/turf/template_noop,/area/submap/MilitaryCamp1) +"j" = (/obj/effect/decal/remains,/obj/random/landmine,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1) +"k" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/MilitaryCamp1) +"l" = (/obj/item/stack/rods,/turf/template_noop,/area/submap/MilitaryCamp1) +"m" = (/turf/simulated/wall,/area/submap/MilitaryCamp1) +"n" = (/obj/random/landmine,/turf/simulated/floor,/area/submap/MilitaryCamp1) +"o" = (/turf/simulated/floor,/area/submap/MilitaryCamp1) +"p" = (/obj/item/weapon/material/shard,/turf/template_noop,/area/submap/MilitaryCamp1) +"q" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) +"r" = (/obj/structure/girder,/turf/simulated/floor,/area/submap/MilitaryCamp1) +"s" = (/obj/machinery/computer/communications,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) +"t" = (/obj/structure/table/standard,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) +"u" = (/obj/effect/mine,/obj/random/landmine,/turf/simulated/floor,/area/submap/MilitaryCamp1) +"v" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/MilitaryCamp1) +"w" = (/obj/machinery/computer/security,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) +"x" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) +"y" = (/obj/item/weapon/material/shard,/obj/random/landmine,/turf/template_noop,/area/submap/MilitaryCamp1) +"z" = (/obj/machinery/door/airlock,/turf/simulated/floor,/area/submap/MilitaryCamp1) +"A" = (/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1) +"B" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/template_noop,/area/submap/MilitaryCamp1) +"C" = (/obj/structure/table,/turf/simulated/floor,/area/submap/MilitaryCamp1) +"D" = (/obj/structure/table/standard,/obj/random/firstaid,/turf/simulated/floor,/area/submap/MilitaryCamp1) +"E" = (/obj/machinery/door/airlock,/obj/effect/mine,/turf/simulated/floor,/area/submap/MilitaryCamp1) +"F" = (/obj/structure/flora/tree/dead,/turf/template_noop,/area/submap/MilitaryCamp1) +"G" = (/obj/random/landmine,/turf/template_noop,/area/template_noop) +"H" = (/obj/effect/decal/cleanable/dirt,/obj/random/landmine,/turf/simulated/floor,/area/submap/MilitaryCamp1) +"I" = (/obj/structure/table/standard,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/simulated/floor,/area/submap/MilitaryCamp1) +"J" = (/obj/structure/table/standard,/obj/item/weapon/gun/energy/gun,/turf/simulated/floor,/area/submap/MilitaryCamp1) +"K" = (/obj/effect/decal/cleanable/blood,/obj/random/landmine,/turf/template_noop,/area/submap/MilitaryCamp1) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaa abbcbdbefdbbbbbbbbba -acgcbbbbbbbfdbcgbbba -abccbbdbbhibbbccjhba -abhbbikkllkklkmcbbba -abbbbkkkllkkkkkbdbda -abbdkknllokpqnkkbeba -abbbkknorsktuukkbbba -abbmkkvkkwkkkvkoxdba -abbblknllslnwskkbbba -afdblknllyznsskkbdba -abbbokvAkkkkvvkobBba -abbxkknlosssnnkkbbba -aBbbkkCDkllnnnkkmbfa -abbebkkkkvlkkkkbdbba -abdbbbkkkslkkkbccdba -abcbbbbkkbmkkbjcbbba -acgcdbbbddbibbcghbba -abccebdbhfbbdccbbbba +aghcdbbbbbbfibcjbbba +abccbbdbbklbbbccgkba +adkbblmmnommnmpcbbba +abbbbmmmonmmmmmbdbda +abbdmmqoormstqmmbeba +abbbmmqruvmwxxmmbbda +abbymmzmmAmmmzmrBdba +abbbomqoovoqAvmmbbba +afdbomqooCDqvvmmbida +abbbrmzEmmmmzzmrbFba +GbbBmmqorvHvqqmmbbba +aFbbmmIJmooqqqmmpbKa +abbebmmmmzommmmbibba +abddbbmmmvommmbcciba +abcbbdbmmbymmbgcbbba +acjcdbbbidblbdcjkbba +abccebdbkfbbdccbbbba aaaaaaaaaaaaaaaaaaaa "} From f5dfbff1bd44bf55a67c50db7f176fba926d981f Mon Sep 17 00:00:00 2001 From: BillyBangles Date: Thu, 15 Feb 2018 15:25:51 -0500 Subject: [PATCH 11/13] Build igloos and snowmen (#4811) * adds packed snow brick material * makes snow walls spawnable for mapping * adds snowmen craft them with snow. duh. * snow spider triggers arachnophobia also changelog. --- code/game/objects/structures/snowman.dm | 24 +++++++++++ code/game/turfs/simulated/wall_types.dm | 2 + code/modules/materials/material_recipes.dm | 17 +++++++- code/modules/materials/material_sheets.dm | 8 +++- code/modules/materials/materials.dm | 20 +++++++++ code/modules/mob/_modifiers/traits_phobias.dm | 5 ++- ...fieldCommander-doyouwannabuildasnowman.yml | 38 ++++++++++++++++++ icons/obj/snowman.dmi | Bin 0 -> 1425 bytes icons/obj/stacks.dmi | Bin 43572 -> 44130 bytes polaris.dme | 1 + 10 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 code/game/objects/structures/snowman.dm create mode 100644 html/changelogs/BattlefieldCommander-doyouwannabuildasnowman.yml create mode 100644 icons/obj/snowman.dmi diff --git a/code/game/objects/structures/snowman.dm b/code/game/objects/structures/snowman.dm new file mode 100644 index 0000000000..b3947621b9 --- /dev/null +++ b/code/game/objects/structures/snowman.dm @@ -0,0 +1,24 @@ +/obj/structure/snowman + name = "snowman" + icon = 'icons/obj/snowman.dmi' + icon_state = "snowman" + desc = "A happy little snowman smiles back at you!" + anchored = 1 + +/obj/structure/snowman/attack_hand(mob/user as mob) + if(user.a_intent == I_HURT) + user << "In one hit, [src] easily crumples into a pile of snow. You monster." + var/turf/simulated/floor/F = get_turf(src) + if (istype(F)) + new /obj/item/stack/material/snow(F) + qdel(src) + +/obj/structure/snowman/borg + name = "snowborg" + icon_state = "snowborg" + desc = "A snowy little robot. It even has a monitor for a head." + +/obj/structure/snowman/spider + name = "snow spider" + icon_state = "snowspider" + desc = "An impressively crafted snow spider. Not nearly as creepy as the real thing." \ No newline at end of file diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm index 699125e0b3..f187a54c8f 100644 --- a/code/game/turfs/simulated/wall_types.dm +++ b/code/game/turfs/simulated/wall_types.dm @@ -39,6 +39,8 @@ ..(newloc,"silver","gold") /turf/simulated/wall/sandstonediamond/New(var/newloc) ..(newloc,"sandstone","diamond") +/turf/simulated/wall/snowbrick/New(var/newloc) + ..(newloc,"packed snow") // Kind of wondering if this is going to bite me in the butt. /turf/simulated/wall/skipjack/New(var/newloc) diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm index 6a10383f76..bb5a4674f4 100644 --- a/code/modules/materials/material_recipes.dm +++ b/code/modules/materials/material_recipes.dm @@ -167,4 +167,19 @@ /material/snow/generate_recipes() recipes = list() - recipes += new/datum/stack_recipe("snowball", /obj/item/weapon/material/snow/snowball, 1, time = 10) \ No newline at end of file + recipes += new/datum/stack_recipe("snowball", /obj/item/weapon/material/snow/snowball, 1, time = 10) + recipes += new/datum/stack_recipe("snow brick", /obj/item/stack/material/snowbrick, 2, time = 10) + recipes += new/datum/stack_recipe("snowman", /obj/structure/snowman, 2, time = 15) + recipes += new/datum/stack_recipe("snow robot", /obj/structure/snowman/borg, 2, time = 10) + recipes += new/datum/stack_recipe("snow spider", /obj/structure/snowman/spider, 3, time = 20) + +/material/snowbrick/generate_recipes() + recipes = list() + recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]") + recipes += new/datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]") + recipes += new/datum/stack_recipe("[display_name] stool", /obj/item/weapon/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]") + recipes += new/datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]") + recipes += new/datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]") + recipes += new/datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]") + recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]") + recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]") \ No newline at end of file diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm index d212851071..54d56fd773 100644 --- a/code/modules/materials/material_sheets.dm +++ b/code/modules/materials/material_sheets.dm @@ -269,10 +269,16 @@ /obj/item/stack/material/snow name = "snow" - desc = "The temptation to build a snowfort rises." + desc = "The temptation to build a snowman rises." icon_state = "sheet-snow" default_type = "snow" +/obj/item/stack/material/snowbrick + name = "snow brick" + desc = "For all of your igloo building needs." + icon_state = "sheet-snowbrick" + default_type = "packed snow" + /obj/item/stack/material/leather name = "leather" desc = "The by-product of mob grinding." diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 2aad17f180..9137fb416c 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -752,6 +752,7 @@ var/list/name_to_material stack_origin_tech = list(TECH_MATERIAL = 1) door_icon_base = "wood" destruction_desc = "crumples" + radiation_resistance = 1 /material/snow name = MAT_SNOW @@ -769,6 +770,25 @@ var/list/name_to_material destruction_desc = "crumples" sheet_singular_name = "pile" sheet_plural_name = "pile" //Just a bigger pile + radiation_resistance = 1 + +/material/snowbrick //only slightly stronger than snow, used to make igloos mostly + name = "packed snow" + flags = MATERIAL_BRITTLE + stack_type = /obj/item/stack/material/snowbrick + icon_base = "stone" + icon_reinf = "reinf_stone" + icon_colour = "#D8FDFF" + integrity = 50 + weight = 2 + hardness = 2 + protectiveness = 0 // 0% + stack_origin_tech = list(TECH_MATERIAL = 1) + melting_point = T0C+1 + destruction_desc = "crumbles" + sheet_singular_name = "brick" + sheet_plural_name = "bricks" + radiation_resistance = 1 /material/cloth //todo name = "cloth" diff --git a/code/modules/mob/_modifiers/traits_phobias.dm b/code/modules/mob/_modifiers/traits_phobias.dm index c96c6890e6..0fbe099c22 100644 --- a/code/modules/mob/_modifiers/traits_phobias.dm +++ b/code/modules/mob/_modifiers/traits_phobias.dm @@ -204,6 +204,9 @@ if(istype(thing, /obj/item/toy/plushie/spider)) // Plushies are spooky so people can be assholes with them. fear_amount += 1 + if(istype(thing, /obj/structure/snowman/spider)) //Snow spiders are also spooky so people can be assholes with those too. + fear_amount += 1 + if(istype(thing, /mob/living/simple_animal/hostile/giant_spider)) // Actual giant spiders are the scariest of them all. var/mob/living/simple_animal/hostile/giant_spider/S = thing if(S.stat == DEAD) // Dead giant spiders are less scary than alive ones. @@ -437,7 +440,7 @@ fear_amount += 1 if(istype(S.species, /datum/species/shapeshifter/promethean)) fear_amount += 4 - + return fear_amount /datum/modifier/trait/phobia/trypanophobe diff --git a/html/changelogs/BattlefieldCommander-doyouwannabuildasnowman.yml b/html/changelogs/BattlefieldCommander-doyouwannabuildasnowman.yml new file mode 100644 index 0000000000..4ee55c6114 --- /dev/null +++ b/html/changelogs/BattlefieldCommander-doyouwannabuildasnowman.yml @@ -0,0 +1,38 @@ +################################ +# 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: battlefieldCommander + +# 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 packed snow brick material. Craft it using snow piles." + - recadd: "Added snow girders and igloo walls. Craft them using snow bricks." + - rscadd: "Added various snowmen. Craft them using snow piles. Punch 'em to destroy." \ No newline at end of file diff --git a/icons/obj/snowman.dmi b/icons/obj/snowman.dmi new file mode 100644 index 0000000000000000000000000000000000000000..ba6444df3f8ddbebb4babbbd39789f363421adfd GIT binary patch literal 1425 zcmV;C1#bF@P)GS35_2TOE_4WJz|NlHZJVixC@9+8D=ht{k{rLF& z_xJqq@%iWM_B}m4KR-Y8^!nWB@L#H5&K#`&~2{WIG^kMJjAVC~ZV3W<4TlKqX%` z8*4%*c1<$N=I__$@Zjn5O-)U}z`)Dm>(%A&&*SXO;_J=g>}xFxI9>-5m$?bhb+ z$KdJQ=<(O)@6O}w!{6w@-RJ1+_UG*N-|6zwJ5V#)c^nh0d!JMQvg8b*k%9# z0DO8>Sad{Xb7OL8aCB*JZU6vyoKseCa&`CgQ*iP1kN{T` z0C|l)?PYl^!UCy8--^pbT|rQaz$mWpm!5e)h`nvGvyDyBw=Fm8UlBtNblcFE{YB}3 zSLp+Z0r?cQ(oO4WyLOcAC_%5T z1oq_M>3cxg5@CRdyMfy(MiN^p<3>9v6POoM@D2O6{`u~4hg`)dN0@&9jAEDr+;Kf} z%nS7Q?}27r;V>_0p zd^H^~OSdlLA-yRA%K)nFsv9t_D(0l6#RsLyIGiknpjD*-FJ=SNI(uWS=D16M(nXgu z?uWfBX;=2xH>-|sWmMHwxL5}vdDhbq{}?Vt06*n@pT0sobeOZl*qX(xv|?5g!}6CZ zDMgva*i~2pl-giE{2D-kZ8EmSm}zH>m*l%1`HLaw4&+bTYcBz+j84KlX6&#xx7FV? zCv4YO3!jgpqcGHAt)t~tAW2OaW65Oqr_pB%{)<}nhq9ej=Aj2~)pniIfuCKrT3%7! z5YV!-;Ih>nTl}UW-04mqnPS>FT?>dY{RJVeE zHUUrpkZ6Oa$#~NQa0ZGW@uYyavC*KKPdD0sMSqvwlg>Xb0d7q=C7qnV{rBC=*C+4l fo5pX{$EW`QduM1crYmxu00000NkvXXu0mjfn7-*b literal 0 HcmV?d00001 diff --git a/icons/obj/stacks.dmi b/icons/obj/stacks.dmi index 51465980512ff3f6098f2a0071d4837e95e7abf9..f25ca29526b548df0c8b948ed881a21139f92516 100644 GIT binary patch delta 24839 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

FFGu= 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 ZA;-K;cDo+in-vK7QdUq$7o#5f{SP2;3xWUu diff --git a/polaris.dme b/polaris.dme index 980abe6f52..f8ffc3a198 100644 --- a/polaris.dme +++ b/polaris.dme @@ -1046,6 +1046,7 @@ #include "code\game\objects\structures\safe.dm" #include "code\game\objects\structures\signs.dm" #include "code\game\objects\structures\simple_doors.dm" +#include "code\game\objects\structures\snowman.dm" #include "code\game\objects\structures\tank_dispenser.dm" #include "code\game\objects\structures\target_stake.dm" #include "code\game\objects\structures\transit_tubes.dm" From a93cb256ec4d7298a3577d15c73914878d31a24a Mon Sep 17 00:00:00 2001 From: Anewbe Date: Thu, 15 Feb 2018 14:29:33 -0600 Subject: [PATCH 12/13] Ports Vorestation's emp effects and ion projectiles (#4818) --- code/modules/organs/internal/eyes.dm | 4 ++++ code/modules/organs/subtypes/machine.dm | 7 +++++++ .../projectiles/guns/energy/special.dm | 2 +- .../modules/projectiles/projectile/special.dm | 19 +++++++++++++++---- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/code/modules/organs/internal/eyes.dm b/code/modules/organs/internal/eyes.dm index 07d70bc6e2..77350a73db 100644 --- a/code/modules/organs/internal/eyes.dm +++ b/code/modules/organs/internal/eyes.dm @@ -93,3 +93,7 @@ /obj/item/organ/internal/eyes/proc/additional_flash_effects(var/intensity) return -1 + +/obj/item/organ/internal/eyes/emp_act(severity) + ..() //Returns if the organ isn't robotic + owner.eye_blurry += (4/severity) \ No newline at end of file diff --git a/code/modules/organs/subtypes/machine.dm b/code/modules/organs/subtypes/machine.dm index b775f93a8e..55e3f2cd5f 100644 --- a/code/modules/organs/subtypes/machine.dm +++ b/code/modules/organs/subtypes/machine.dm @@ -17,6 +17,9 @@ owner.stat = 0 owner.visible_message("\The [owner] twitches visibly!") +/obj/item/organ/internal/cell/emp_act(severity) + ..() + owner.nutrition = max(0, owner.nutrition - rand(10/severity, 50/severity)) // Used for an MMI or posibrain being installed into a human. /obj/item/organ/internal/mmi_holder @@ -83,6 +86,10 @@ holder_mob.drop_from_inventory(src) qdel(src) +/obj/item/organ/internal/mmi_holder/emp_act(severity) + ..() + owner.adjustToxLoss(rand(6/severity, 12/severity)) + /obj/item/organ/internal/mmi_holder/posibrain name = "positronic brain interface" brain_type = /obj/item/device/mmi/digital/posibrain diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 8bda4d37ac..d574938d98 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -22,7 +22,7 @@ force = 5 slot_flags = SLOT_BELT|SLOT_HOLSTER charge_cost = 480 - projectile_type = /obj/item/projectile/ion + projectile_type = /obj/item/projectile/ion/pistol /obj/item/weapon/gun/energy/phasegun name = "phase pistol" diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index e86ff4c864..4e366bed6d 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -9,15 +9,26 @@ light_range = 2 light_power = 0.5 light_color = "#55AAFF" - var/pulse_range = 1 - + var/sev1_range = 0 + var/sev2_range = 1 + var/sev3_range = 1 + var/sev4_range = 2 /obj/item/projectile/ion/on_hit(var/atom/target, var/blocked = 0) - empulse(target, pulse_range, pulse_range, pulse_range, pulse_range) + empulse(target, sev1_range, sev2_range, sev3_range, sev4_range) return 1 /obj/item/projectile/ion/small - pulse_range = 0 + sev1_range = -1 + sev2_range = 0 + sev3_range = 0 + sev4_range = 1 + +/obj/item/projectile/ion/pistol + sev1_range = 0 + sev2_range = 0 + sev3_range = 0 + sev4_range = 0 /obj/item/projectile/bullet/gyro name ="explosive bolt" From 45c8aa5b162991951d1b99e02d6fc4ba0b36849b Mon Sep 17 00:00:00 2001 From: Leshana Date: Thu, 15 Feb 2018 20:11:04 -0500 Subject: [PATCH 13/13] Small Fixes and Refactor (#4819) * Fix not calling parent in fake gloves. * Refactor machinery.dm to use constants instead of bare numbers and strings. --- code/game/machinery/machinery.dm | 18 +++++++++--------- code/modules/clothing/gloves/color.dm | 5 +++-- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index c616d1ee5b..673e366313 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -112,7 +112,7 @@ Class Procs: var/panel_open = 0 var/global/gl_uid = 1 var/interact_offline = 0 // Can the machine be interacted with while de-powered. - var/circuit = null + var/obj/item/weapon/circuitboard/circuit = null /obj/machinery/New(l, d=0) ..(l) @@ -402,7 +402,7 @@ Class Procs: if(A.frame_type.circuit) A.need_circuit = 0 - if(A.frame_type.frame_class == "machine") + if(A.frame_type.frame_class == FRAME_CLASS_MACHINE) for(var/obj/D in component_parts) D.forceMove(src.loc) if(A.components) @@ -412,15 +412,15 @@ Class Procs: component_parts = list() A.check_components() - if(A.frame_type.frame_class == "alarm") - A.state = 2 - else if(A.frame_type.frame_class == "computer" || A.frame_type.frame_class == "display") + if(A.frame_type.frame_class == FRAME_CLASS_ALARM) + A.state = FRAME_FASTENED + else if(A.frame_type.frame_class == FRAME_CLASS_COMPUTER || A.frame_type.frame_class == FRAME_CLASS_DISPLAY) if(stat & BROKEN) - A.state = 3 + A.state = FRAME_WIRED else - A.state = 4 + A.state = FRAME_PANELED else - A.state = 3 + A.state = FRAME_WIRED A.set_dir(dir) A.pixel_x = pixel_x @@ -430,4 +430,4 @@ Class Procs: M.loc = null M.deconstruct(src) qdel(src) - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 370306539a..ef9d0e713d 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -9,10 +9,11 @@ desc = "These gloves are cheap copies of proper insulated gloves. No way this can end badly." name = "budget insulated gloves" icon_state = "yellow" - siemens_coefficient = 1 //Set to a default of 1, gets overridden in New() + siemens_coefficient = 1 //Set to a default of 1, gets overridden in initialize() permeability_coefficient = 0.05 -/obj/item/clothing/gloves/fyellow/New() +/obj/item/clothing/gloves/fyellow/initialize() + . = ..() //Picks a value between 0 and 1, in 5% increments var/shock_pick = rand(0,20) siemens_coefficient = shock_pick * 0.05