Merge branch 'master' into digileg-runtime

This commit is contained in:
Poojawa
2018-03-19 21:33:50 -05:00
committed by GitHub
1329 changed files with 2726 additions and 1986 deletions
@@ -39,7 +39,7 @@
},
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"as" = (
@@ -50,7 +50,7 @@
},
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"at" = (
@@ -59,7 +59,7 @@
},
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"au" = (
@@ -89,7 +89,7 @@
},
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"ay" = (
@@ -99,7 +99,7 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"az" = (
@@ -110,7 +110,7 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"aA" = (
@@ -120,7 +120,7 @@
},
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"aB" = (
@@ -129,20 +129,20 @@
},
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"aC" = (
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"aD" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"aE" = (
@@ -151,7 +151,7 @@
},
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"aF" = (
@@ -162,7 +162,7 @@
/obj/effect/decal/cleanable/cobweb,
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"aG" = (
@@ -171,7 +171,7 @@
},
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"aH" = (
@@ -181,7 +181,7 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"aI" = (
@@ -191,7 +191,7 @@
/obj/item/bikehorn,
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"aJ" = (
@@ -208,7 +208,7 @@
/obj/effect/decal/cleanable/pie_smudge,
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"aL" = (
@@ -224,7 +224,7 @@
},
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"aO" = (
@@ -235,7 +235,7 @@
},
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"aP" = (
@@ -258,7 +258,7 @@
},
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"aU" = (
@@ -272,7 +272,7 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"aW" = (
@@ -283,7 +283,7 @@
},
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"aX" = (
@@ -302,7 +302,7 @@
},
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"aZ" = (
@@ -318,7 +318,7 @@
/obj/effect/decal/cleanable/pie_smudge,
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"bb" = (
@@ -337,7 +337,7 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"bd" = (
@@ -370,7 +370,7 @@
/obj/effect/decal/cleanable/pie_smudge,
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"bg" = (
@@ -476,21 +476,21 @@
},
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"bx" = (
/obj/effect/decal/cleanable/cobweb,
/turf/open/indestructible{
icon_state = "darkredfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"by" = (
/obj/structure/disposalpipe/segment,
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"bz" = (
@@ -505,7 +505,7 @@
"bA" = (
/turf/open/indestructible{
icon_state = "darkredfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"bB" = (
@@ -513,7 +513,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"bC" = (
@@ -524,7 +524,7 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"bD" = (
@@ -550,7 +550,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"bH" = (
@@ -559,7 +559,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"bI" = (
@@ -567,7 +567,7 @@
/obj/effect/decal/cleanable/blood/old,
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"bJ" = (
@@ -577,7 +577,7 @@
},
/turf/open/indestructible{
icon_state = "darkredfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"bK" = (
@@ -586,7 +586,7 @@
},
/turf/open/indestructible{
icon_state = "darkredfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"bL" = (
@@ -610,7 +610,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"bP" = (
@@ -657,7 +657,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"bY" = (
@@ -667,7 +667,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"bZ" = (
@@ -676,7 +676,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"ca" = (
@@ -686,7 +686,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"cc" = (
@@ -710,7 +710,7 @@
},
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"dC" = (
@@ -723,7 +723,7 @@
},
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"dD" = (
@@ -735,7 +735,7 @@
},
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"dE" = (
@@ -748,7 +748,7 @@
},
/turf/open/indestructible{
icon_state = "darkyellowfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"dF" = (
@@ -793,7 +793,7 @@
},
/turf/open/indestructible{
icon_state = "darkredfull";
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"dK" = (
@@ -820,7 +820,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"dO" = (
@@ -829,7 +829,7 @@
icon_state = "bananium";
name = "bananium floor";
sound = 'sound/effects/clownstep1.ogg';
wet = 5
wet = 8
},
/area/ruin/powered/clownplanet)
"eX" = (
-1
View File
@@ -13827,7 +13827,6 @@
height = 5;
id = "snowdin_mining";
name = "mining elevator";
timid = 0;
width = 5
},
/obj/docking_port/stationary{
+5 -10
View File
@@ -2200,8 +2200,7 @@
id = "pod3";
name = "escape pod 3";
port_direction = 2;
preferred_direction = 4;
timid = 0
preferred_direction = 4
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/pod_3)
@@ -7394,8 +7393,7 @@
dir = 4;
dwidth = 4;
height = 9;
width = 9;
timid = 0
width = 9
},
/obj/machinery/bluespace_beacon,
/obj/machinery/computer/auxillary_base,
@@ -47307,8 +47305,7 @@
id = "pod4";
name = "escape pod 4";
port_direction = 2;
preferred_direction = 4;
timid = 0
preferred_direction = 4
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/pod_4)
@@ -47531,8 +47528,7 @@
dir = 8;
id = "pod2";
name = "escape pod 2";
port_direction = 2;
timid = 0
port_direction = 2
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/pod_2)
@@ -49894,8 +49890,7 @@
dir = 8;
id = "pod1";
name = "escape pod 1";
port_direction = 2;
timid = 0
port_direction = 2
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/pod_1)
@@ -302,8 +302,7 @@
/obj/docking_port/mobile/pod{
id = "pod1";
name = "escape pod 1";
port_direction = 2;
timid = 0
port_direction = 2
},
/obj/effect/turf_decal/stripes/end,
/turf/open/floor/plasteel/white,
@@ -319,8 +318,7 @@
/obj/docking_port/mobile/pod{
id = "pod2";
name = "escape pod 2";
port_direction = 2;
timid = 0
port_direction = 2
},
/obj/effect/turf_decal/stripes/end,
/turf/open/floor/plasteel/white,
@@ -1455,8 +1453,7 @@
dir = 2;
dwidth = 4;
height = 9;
width = 9;
timid = 0
width = 9
},
/obj/machinery/bluespace_beacon,
/obj/docking_port/mobile/auxillary_base,
@@ -23081,8 +23078,7 @@
id = "pod3";
name = "escape pod 3";
port_direction = 2;
preferred_direction = 4;
timid = 0
preferred_direction = 4
},
/obj/effect/turf_decal/stripes/end{
dir = 8
+5 -10
View File
@@ -481,8 +481,7 @@
/obj/docking_port/mobile/pod{
id = "pod2";
name = "escape pod 2";
port_direction = 2;
timid = 0
port_direction = 2
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/pod_2)
@@ -1546,8 +1545,7 @@
id = "pod3";
name = "escape pod 3";
port_direction = 2;
preferred_direction = 4;
timid = 0
preferred_direction = 4
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/pod_3)
@@ -20222,8 +20220,7 @@
/obj/docking_port/mobile/pod{
id = "pod1";
name = "escape pod 1";
port_direction = 2;
timid = 0
port_direction = 2
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/pod_1)
@@ -28147,8 +28144,7 @@
id = "pod4";
name = "escape pod 4";
port_direction = 2;
preferred_direction = 4;
timid = 0
preferred_direction = 4
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/pod_4)
@@ -71591,8 +71587,7 @@
dir = 2;
dwidth = 4;
height = 9;
width = 9;
timid = 0
width = 9
},
/obj/machinery/bluespace_beacon,
/obj/machinery/computer/auxillary_base,
+1 -2
View File
@@ -8542,8 +8542,7 @@
dwidth = 3;
name = "steel rain";
port_direction = 4;
preferred_direction = 4;
timid = 0
preferred_direction = 4
},
/turf/open/floor/plating,
/area/shuttle/assault_pod)
+17
View File
@@ -37,3 +37,20 @@
#define COLOR_PALE_RED_GRAY "#D59998"
#define COLOR_PALE_PURPLE_GRAY "#CBB1CA"
#define COLOR_PURPLE_GRAY "#AE8CA8"
//Color defines used by the assembly detailer.
#define COLOR_ASSEMBLY_BLACK "#545454"
#define COLOR_ASSEMBLY_BGRAY "#9497AB"
#define COLOR_ASSEMBLY_WHITE "#E2E2E2"
#define COLOR_ASSEMBLY_RED "#CC4242"
#define COLOR_ASSEMBLY_ORANGE "#E39751"
#define COLOR_ASSEMBLY_BEIGE "#AF9366"
#define COLOR_ASSEMBLY_BROWN "#97670E"
#define COLOR_ASSEMBLY_GOLD "#AA9100"
#define COLOR_ASSEMBLY_YELLOW "#CECA2B"
#define COLOR_ASSEMBLY_GURKHA "#999875"
#define COLOR_ASSEMBLY_LGREEN "#789876"
#define COLOR_ASSEMBLY_GREEN "#44843C"
#define COLOR_ASSEMBLY_LBLUE "#5D99BE"
#define COLOR_ASSEMBLY_BLUE "#38559E"
#define COLOR_ASSEMBLY_PURPLE "#6F6192"
+15
View File
@@ -146,3 +146,18 @@
#define GRENADE_CLUMSY_FUMBLE 1
#define GRENADE_NONCLUMSY_FUMBLE 2
#define GRENADE_NO_FUMBLE 3
#define BODY_ZONE_HEAD "head"
#define BODY_ZONE_CHEST "chest"
#define BODY_ZONE_L_ARM "l_arm"
#define BODY_ZONE_R_ARM "r_arm"
#define BODY_ZONE_L_LEG "l_leg"
#define BODY_ZONE_R_LEG "r_leg"
#define BODY_ZONE_PRECISE_EYES "eyes"
#define BODY_ZONE_PRECISE_MOUTH "mouth"
#define BODY_ZONE_PRECISE_GROIN "groin"
#define BODY_ZONE_PRECISE_L_HAND "l_hand"
#define BODY_ZONE_PRECISE_R_HAND "r_hand"
#define BODY_ZONE_PRECISE_L_FOOT "l_foot"
#define BODY_ZONE_PRECISE_R_FOOT "r_foot"
+10
View File
@@ -19,6 +19,10 @@
#define COMSIG_COMPONENT_REMOVING "component_removing" //before a component is removed from a datum because of RemoveComponent: (/datum/component)
#define COMSIG_PARENT_QDELETED "parent_qdeleted" //before a datum's Destroy() is called: ()
// /Component signals
#define COMSIG_ADD_MOOD_EVENT "add_mood" //Called when you send a mood event from anywhere in the code.
#define COMSIG_CLEAR_MOOD_EVENT "clear_mood" //Called when you clear a mood event from anywhere in the code.
#define COMSIG_COMPONENT_CLEAN_ACT "clean_act" //called on an object to clean it of cleanables. Usualy with soap: (num/strength)
#define COMSIG_COMPONENT_NTNET_RECIEVE "ntnet_recieve" //called on an object by its NTNET connection component on recieve. (sending_id(number), sending_netname(text), data(datum/netdata))
@@ -50,6 +54,8 @@
#define COMSIG_ATOM_SET_LIGHT "atom_set_light" //from base of atom/set_light(): (l_range, l_power, l_color)
#define COMSIG_ATOM_ROTATE "atom_rotate" //from base of atom/shuttleRotate(): (rotation, params)
#define COMSIG_ATOM_DIR_CHANGE "atom_dir_change" //from base of atom/setDir(): (old_dir, new_dir)
#define COMSIG_ENTER_AREA "enter_area" //from base of area/Entered(): (/area)
#define COMSIG_EXIT_AREA "exit_area" //from base of area/Exited(): (/area)
#define COMSIG_CLICK "atom_click" //from base of atom/Click(): (location, control, params)
#define COMSIG_CLICK_SHIFT "shift_click" //from base of atom/ShiftClick(): (/mob)
@@ -57,6 +63,10 @@
#define COMSIG_CLICK_ALT "alt_click" //from base of atom/AltClick(): (/mob)
#define COMSIG_CLICK_CTRL_SHIFT "ctrl_shift_click" //from base of atom/CtrlShiftClick(/mob)
// /area signals
#define COMSIG_AREA_ENTERED "area_entered" //from base of area/Entered(): (atom/movable/M)
#define COMSIG_AREA_EXITED "area_exited" //from base of area/Exited(): (atom/movable/M)
// /atom/movable signals
#define COMSIG_MOVABLE_MOVED "movable_moved" //from base of atom/movable/Moved(): (/atom, dir)
#define COMSIG_MOVABLE_CROSSED "movable_crossed" //from base of atom/movable/Crossed(): (/atom/movable)
+2 -2
View File
@@ -188,9 +188,9 @@ GLOBAL_LIST_EMPTY(bloody_footprints_cache)
//Wet floor type flags. Stronger ones should be higher in number.
#define TURF_DRY 0
#define TURF_WET_WATER 1
#define TURF_WET_LUBE 2
#define TURF_WET_PERMAFROST 2
#define TURF_WET_ICE 4
#define TURF_WET_PERMAFROST 8
#define TURF_WET_LUBE 8
#define IS_WET_OPEN_TURF(O) O.GetComponent(/datum/component/wet_floor)
+15 -7
View File
@@ -95,15 +95,23 @@
#define MOOD_LEVEL_SAD1 -3
#define MOOD_LEVEL_SAD2 -12
#define MOOD_LEVEL_SAD3 -18
#define MOOD_LEVEL_SAD4 -26
#define MOOD_LEVEL_SAD4 -25
//Sanity levels for humans
#define SANITY_GREAT 125
#define SANITY_NEUTRAL 100
#define SANITY_DISTURBED 75
#define SANITY_UNSTABLE 50
#define SANITY_CRAZY 25
#define SANITY_INSANE 0
//Beauty levels of areas for carbons
#define BEAUTY_LEVEL_HORRID -50
#define BEAUTY_LEVEL_BAD -25
#define BEAUTY_LEVEL_GOOD 25
#define BEAUTY_LEVEL_GREAT 50
#define BEAUTY_LEVEL_HORRID -100
#define BEAUTY_LEVEL_BAD -66
#define BEAUTY_LEVEL_MEH -33
#define BEAUTY_LEVEL_DECENT 33
#define BEAUTY_LEVEL_GOOD 66
#define BEAUTY_LEVEL_GREAT 100
//Nutrition levels for humans
#define NUTRITION_LEVEL_FAT 600
+8
View File
@@ -70,3 +70,11 @@
'sound/ambience/ambiatmos.ogg', 'sound/ambience/ambiatmos2.ogg', 'sound/ambience/ambiodd.ogg')
#define REEBE list('sound/ambience/ambireebe1.ogg', 'sound/ambience/ambireebe2.ogg', 'sound/ambience/ambireebe3.ogg')
#define CREEPY_SOUNDS list('sound/effects/ghost.ogg', 'sound/effects/ghost2.ogg', 'sound/effects/heart_beat.ogg', 'sound/effects/screech.ogg',\
'sound/hallucinations/behind_you1.ogg', 'sound/hallucinations/behind_you2.ogg', 'sound/hallucinations/far_noise.ogg', 'sound/hallucinations/growl1.ogg', 'sound/hallucinations/growl2.ogg',\
'sound/hallucinations/growl3.ogg', 'sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg', 'sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg',\
'sound/hallucinations/look_up1.ogg', 'sound/hallucinations/look_up2.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg',\
'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/turn_around2.ogg', 'sound/hallucinations/veryfar_noise.ogg', 'sound/hallucinations/wail.ogg')
+4 -6
View File
@@ -396,13 +396,11 @@ Proc for attack log creation, because really why not
GET_COMPONENT_FROM(mood, /datum/component/mood, user)
if(mood)
switch(mood.mood) //Alerts do_after delay based on how happy you are
if(-INFINITY to MOOD_LEVEL_SAD2)
switch(mood.sanity) //Alters do_after delay based on how sane you are
if(SANITY_INSANE to SANITY_DISTURBED)
delay *= 1.25
if(MOOD_LEVEL_HAPPY3 to MOOD_LEVEL_HAPPY4)
delay *= 0.95
if(MOOD_LEVEL_HAPPY4 to INFINITY)
delay *= 0.9
if(SANITY_NEUTRAL to SANITY_GREAT)
delay *= 0.90
var/endtime = world.time + delay
var/starttime = world.time
+16 -16
View File
@@ -354,47 +354,47 @@
return 0
if(bpc & FULL_BODY)
covered_parts |= list("l_arm","r_arm","head","chest","l_leg","r_leg")
covered_parts |= list(BODY_ZONE_L_ARM,BODY_ZONE_R_ARM,BODY_ZONE_HEAD,BODY_ZONE_CHEST,BODY_ZONE_L_LEG,BODY_ZONE_R_LEG)
else
if(bpc & HEAD)
covered_parts |= list("head")
covered_parts |= list(BODY_ZONE_HEAD)
if(bpc & CHEST)
covered_parts |= list("chest")
covered_parts |= list(BODY_ZONE_CHEST)
if(bpc & GROIN)
covered_parts |= list("chest")
covered_parts |= list(BODY_ZONE_CHEST)
if(bpc & ARMS)
covered_parts |= list("l_arm","r_arm")
covered_parts |= list(BODY_ZONE_L_ARM,BODY_ZONE_R_ARM)
else
if(bpc & ARM_LEFT)
covered_parts |= list("l_arm")
covered_parts |= list(BODY_ZONE_L_ARM)
if(bpc & ARM_RIGHT)
covered_parts |= list("r_arm")
covered_parts |= list(BODY_ZONE_R_ARM)
if(bpc & HANDS)
covered_parts |= list("l_arm","r_arm")
covered_parts |= list(BODY_ZONE_L_ARM,BODY_ZONE_R_ARM)
else
if(bpc & HAND_LEFT)
covered_parts |= list("l_arm")
covered_parts |= list(BODY_ZONE_L_ARM)
if(bpc & HAND_RIGHT)
covered_parts |= list("r_arm")
covered_parts |= list(BODY_ZONE_R_ARM)
if(bpc & LEGS)
covered_parts |= list("l_leg","r_leg")
covered_parts |= list(BODY_ZONE_L_LEG,BODY_ZONE_R_LEG)
else
if(bpc & LEG_LEFT)
covered_parts |= list("l_leg")
covered_parts |= list(BODY_ZONE_L_LEG)
if(bpc & LEG_RIGHT)
covered_parts |= list("r_leg")
covered_parts |= list(BODY_ZONE_R_LEG)
if(bpc & FEET)
covered_parts |= list("l_leg","r_leg")
covered_parts |= list(BODY_ZONE_L_LEG,BODY_ZONE_R_LEG)
else
if(bpc & FOOT_LEFT)
covered_parts |= list("l_leg")
covered_parts |= list(BODY_ZONE_L_LEG)
if(bpc & FOOT_RIGHT)
covered_parts |= list("r_leg")
covered_parts |= list(BODY_ZONE_R_LEG)
return covered_parts
+8 -8
View File
@@ -736,21 +736,21 @@ Turf and target are separate in case you want to teleport some distance from a t
return
/proc/parse_zone(zone)
if(zone == "r_hand")
if(zone == BODY_ZONE_PRECISE_R_HAND)
return "right hand"
else if (zone == "l_hand")
else if (zone == BODY_ZONE_PRECISE_L_HAND)
return "left hand"
else if (zone == "l_arm")
else if (zone == BODY_ZONE_L_ARM)
return "left arm"
else if (zone == "r_arm")
else if (zone == BODY_ZONE_R_ARM)
return "right arm"
else if (zone == "l_leg")
else if (zone == BODY_ZONE_L_LEG)
return "left leg"
else if (zone == "r_leg")
else if (zone == BODY_ZONE_R_LEG)
return "right leg"
else if (zone == "l_foot")
else if (zone == BODY_ZONE_PRECISE_L_FOOT)
return "left foot"
else if (zone == "r_foot")
else if (zone == BODY_ZONE_PRECISE_R_FOOT)
return "right foot"
else
return zone
+13 -13
View File
@@ -374,7 +374,7 @@
name = "damage zone"
icon_state = "zone_sel"
screen_loc = ui_zonesel
var/selecting = "chest"
var/selecting = BODY_ZONE_CHEST
/obj/screen/zone_sel/Click(location, control,params)
if(isobserver(usr))
@@ -389,44 +389,44 @@
if(1 to 9) //Legs
switch(icon_x)
if(10 to 15)
choice = "r_leg"
choice = BODY_ZONE_R_LEG
if(17 to 22)
choice = "l_leg"
choice = BODY_ZONE_L_LEG
else
return 1
if(10 to 13) //Hands and groin
switch(icon_x)
if(8 to 11)
choice = "r_arm"
choice = BODY_ZONE_R_ARM
if(12 to 20)
choice = "groin"
choice = BODY_ZONE_PRECISE_GROIN
if(21 to 24)
choice = "l_arm"
choice = BODY_ZONE_L_ARM
else
return 1
if(14 to 22) //Chest and arms to shoulders
switch(icon_x)
if(8 to 11)
choice = "r_arm"
choice = BODY_ZONE_R_ARM
if(12 to 20)
choice = "chest"
choice = BODY_ZONE_CHEST
if(21 to 24)
choice = "l_arm"
choice = BODY_ZONE_L_ARM
else
return 1
if(23 to 30) //Head, but we need to check for eye or mouth
if(icon_x in 12 to 20)
choice = "head"
choice = BODY_ZONE_HEAD
switch(icon_y)
if(23 to 24)
if(icon_x in 15 to 17)
choice = "mouth"
choice = BODY_ZONE_PRECISE_MOUTH
if(26) //Eyeline, eyes are on 15 and 17
if(icon_x in 14 to 18)
choice = "eyes"
choice = BODY_ZONE_PRECISE_EYES
if(25 to 27)
if(icon_x in 15 to 17)
choice = "eyes"
choice = BODY_ZONE_PRECISE_EYES
return set_selected_zone(choice, usr)
+1 -1
View File
@@ -91,7 +91,7 @@
return
var/mob/living/carbon/ML = A
if(istype(ML))
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
var/dam_zone = pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
var/obj/item/bodypart/affecting = null
if(ishuman(ML))
var/mob/living/carbon/human/H = ML
@@ -48,21 +48,35 @@ PROCESSING_SUBSYSTEM_DEF(circuit)
/obj/item/device/electronic_assembly/calc,
/obj/item/device/electronic_assembly/clam,
/obj/item/device/electronic_assembly/simple,
/obj/item/device/electronic_assembly/hook,
/obj/item/device/electronic_assembly/pda,
/obj/item/device/electronic_assembly/medium/default,
/obj/item/device/electronic_assembly/medium/box,
/obj/item/device/electronic_assembly/medium/clam,
/obj/item/device/electronic_assembly/medium/medical,
/obj/item/device/electronic_assembly/medium/gun,
/obj/item/device/electronic_assembly/medium/radio,
/obj/item/device/electronic_assembly/large/default,
/obj/item/device/electronic_assembly/large/scope,
/obj/item/device/electronic_assembly/large/terminal,
/obj/item/device/electronic_assembly/large/arm,
/obj/item/device/electronic_assembly/large/tall,
/obj/item/device/electronic_assembly/large/industrial,
/obj/item/device/electronic_assembly/drone/default,
/obj/item/device/electronic_assembly/drone/arms
/obj/item/device/electronic_assembly/drone/arms,
/obj/item/device/electronic_assembly/drone/secbot,
/obj/item/device/electronic_assembly/drone/medbot,
/obj/item/device/electronic_assembly/drone/genbot,
/obj/item/device/electronic_assembly/drone/android,
/obj/item/device/electronic_assembly/wallmount/light,
/obj/item/device/electronic_assembly/wallmount,
/obj/item/device/electronic_assembly/wallmount/heavy
///obj/item/weapon/implant/integrated_circuit
)
circuit_fabricator_recipe_list["Tools"] = list(
/obj/item/device/integrated_electronics/wirer,
/obj/item/device/integrated_electronics/debugger,
/obj/item/device/integrated_electronics/analyzer
/obj/item/device/integrated_electronics/analyzer,
/obj/item/device/integrated_electronics/detailer
)
+2 -6
View File
@@ -43,9 +43,7 @@
/datum/brain_trauma/mild/dumbness/on_gain()
owner.add_trait(TRAIT_DUMB, TRAUMA_TRAIT)
GET_COMPONENT_FROM(mood, /datum/component/mood, owner)
if(mood)
mood.add_event("dumb", /datum/mood_event/oblivious)
owner.SendSignal(COMSIG_ADD_MOOD_EVENT, "dumb", /datum/mood_event/oblivious)
..()
/datum/brain_trauma/mild/dumbness/on_life()
@@ -59,9 +57,7 @@
/datum/brain_trauma/mild/dumbness/on_lose()
owner.remove_trait(TRAIT_DUMB, TRAUMA_TRAIT)
owner.derpspeech = 0
GET_COMPONENT_FROM(mood, /datum/component/mood, owner)
if(mood)
mood.clear_event("dumb")
owner.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "dumb")
..()
/datum/brain_trauma/mild/speech_impediment
+35
View File
@@ -0,0 +1,35 @@
/datum/component/beauty
var/beauty = 0
/datum/component/beauty/Initialize(beautyamount)
if(!ismovableatom(parent))
. = COMPONENT_INCOMPATIBLE
CRASH("Someone put a beauty component on a non-atom/movable, not everything can be pretty.")
beauty = beautyamount
RegisterSignal(COMSIG_ENTER_AREA, .proc/enter_area)
RegisterSignal(COMSIG_EXIT_AREA, .proc/exit_area)
var/area/A = get_area(parent)
if(!A || A.outdoors)
return
A.totalbeauty += beauty
A.update_beauty()
/datum/component/beauty/proc/enter_area(area/A)
if(A.outdoors) //Fuck the outside.
return FALSE
A.totalbeauty += beauty
A.update_beauty()
/datum/component/beauty/proc/exit_area(area/A)
if(A.outdoors) //Fuck the outside.
return FALSE
A.totalbeauty -= beauty
A.update_beauty()
/datum/component/beauty/Destroy()
. = ..()
var/area/A = get_area(parent)
if(!A || A.outdoors)
return
A.totalbeauty -= beauty
A.update_beauty()
+1 -1
View File
@@ -30,7 +30,7 @@
if((flags & CALTROP_IGNORE_WALKERS) && H.m_intent == MOVE_INTENT_WALK)
return
var/picked_def_zone = pick("l_leg", "r_leg")
var/picked_def_zone = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
var/obj/item/bodypart/O = H.get_bodypart(picked_def_zone)
if(!istype(O))
return
+3 -1
View File
@@ -89,7 +89,9 @@
var/obj/item/stack/S = I
to_chat(user, "<span class='notice'>You insert [inserted] [S.singular_name][inserted>1 ? "s" : ""] into [parent].</span>")
if(!QDELETED(I))
user.put_in_active_hand(I)
if(!user.put_in_hands(I))
stack_trace("Warning: User could not put object back in hand during material container insertion, line [__LINE__]! This can lead to issues.")
I.forceMove(user.drop_location())
else
to_chat(user, "<span class='notice'>You insert a material total of [inserted] into [parent].</span>")
qdel(I)
+117 -20
View File
@@ -1,10 +1,12 @@
/datum/component/mood
var/mood //Real happiness
var/sanity = 100 //Current sanity
var/shown_mood //Shown happiness, this is what others can see when they try to examine you, prevents antag checking by noticing traitors are always very happy.
var/mood_level //To track what stage of moodies they're on
var/mood_level = 5 //To track what stage of moodies they're on
var/mood_modifier = 1 //Modifier to allow certain mobs to be less affected by moodlets
var/datum/mood_event/list/mood_events = list()
var/mob/living/owner
var/datum/looping_sound/reverse_bear_trap/slow/soundloop //Insanity ticking
/datum/component/mood/Initialize()
if(!isliving(parent))
@@ -12,16 +14,61 @@
CRASH("Some good for nothing loser put a mood component on something that isn't even a living mob.")
START_PROCESSING(SSmood, src)
owner = parent
soundloop = new(list(owner), FALSE, TRUE)
RegisterSignal(COMSIG_ADD_MOOD_EVENT, .proc/add_event)
RegisterSignal(COMSIG_CLEAR_MOOD_EVENT, .proc/clear_event)
RegisterSignal(COMSIG_ENTER_AREA, .proc/update_beauty)
/datum/component/mood/Destroy()
STOP_PROCESSING(SSmood, src)
QDEL_NULL(soundloop)
return ..()
/datum/component/mood/proc/print_mood()
var/msg = "<span class='info'>*---------*\n<EM>Your current mood</EM>\n"
for(var/i in mood_events)
var/datum/mood_event/event = mood_events[i]
msg += event.description
msg += "<span class='notice'>My mental status: </span>" //Long term
switch(sanity)
if(SANITY_GREAT to INFINITY)
msg += "<span class='nicegreen'>My mind feels like a temple!<span>\n"
if(SANITY_NEUTRAL to SANITY_GREAT)
msg += "<span class='nicegreen'>I have been feeling great lately!<span>\n"
if(SANITY_DISTURBED to SANITY_NEUTRAL)
msg += "<span class='nicegreen'>I have felt quite decent lately.<span>\n"
if(SANITY_UNSTABLE to SANITY_DISTURBED)
msg += "<span class='warning'>I'm feeling a little bit unhinged...</span>\n"
if(SANITY_CRAZY to SANITY_UNSTABLE)
msg += "<span class='boldwarning'>I'm freaking out!!</span>\n"
if(SANITY_INSANE to SANITY_CRAZY)
msg += "<span class='boldwarning'>AHAHAHAHAHAHAHAHAHAH!!</span>\n"
msg += "<span class='notice'>My current mood: </span>" //Short term
switch(mood_level)
if(1)
msg += "<span class='boldwarning'>I wish I was dead!<span>\n"
if(2)
msg += "<span class='boldwarning'>I feel terrible...<span>\n"
if(3)
msg += "<span class='boldwarning'>I feel very upset.<span>\n"
if(4)
msg += "<span class='boldwarning'>I'm a bit sad.<span>\n"
if(5)
msg += "<span class='nicegreen'>I'm alright.<span>\n"
if(6)
msg += "<span class='nicegreen'>I feel pretty okay.<span>\n"
if(7)
msg += "<span class='nicegreen'>I feel pretty good.<span>\n"
if(8)
msg += "<span class='nicegreen'>I feel amazing!<span>\n"
if(9)
msg += "<span class='nicegreen'>I love life!<span>\n"
msg += "<span class='notice'>Moodlets:\n</span>"//All moodlets
if(mood_events.len)
for(var/i in mood_events)
var/datum/mood_event/event = mood_events[i]
msg += event.description
else
msg += "<span class='nicegreen'>Nothing special has happend to me lately!<span>\n"
to_chat(owner, msg)
/datum/component/mood/proc/update_mood() //Called whenever a mood event is added or removed
@@ -54,41 +101,87 @@
mood_level = 8
if(MOOD_LEVEL_HAPPY4 to INFINITY)
mood_level = 9
update_mood_icon()
/datum/component/mood/proc/update_mood_icon()
if(owner.client && owner.hud_used)
owner.hud_used.mood.icon_state = "mood[mood_level]"
if(sanity < 25)
owner.hud_used.mood.icon_state = "mood_insane"
else
owner.hud_used.mood.icon_state = "mood[mood_level]"
/datum/component/mood/process() //Called on SSmood process
switch(mood)
if(-INFINITY to MOOD_LEVEL_SAD4)
switch(sanity)
if(SANITY_INSANE to SANITY_CRAZY)
owner.overlay_fullscreen("depression", /obj/screen/fullscreen/depression, 3)
if(MOOD_LEVEL_SAD4 to MOOD_LEVEL_SAD3)
update_mood_icon()
if(prob(7))
owner.playsound_local(null, pick(CREEPY_SOUNDS), 100, 1)
soundloop.start()
if(SANITY_INSANE to SANITY_UNSTABLE)
owner.overlay_fullscreen("depression", /obj/screen/fullscreen/depression, 2)
if(MOOD_LEVEL_SAD3 to MOOD_LEVEL_SAD2)
if(prob(3))
owner.playsound_local(null, pick(CREEPY_SOUNDS), 60, 1)
soundloop.stop()
if(SANITY_UNSTABLE to SANITY_DISTURBED)
owner.overlay_fullscreen("depression", /obj/screen/fullscreen/depression, 1)
if(MOOD_LEVEL_SAD2 to INFINITY)
soundloop.stop()
if(SANITY_DISTURBED to SANITY_GREAT)
owner.clear_fullscreen("depression")
soundloop.stop()
switch(mood_level)
if(1)
DecreaseSanity(0.4)
if(2)
DecreaseSanity(0.25)
if(3)
DecreaseSanity(0.15)
if(4)
DecreaseSanity(0.05)
if(5)
IncreaseSanity(0.1)
if(6)
IncreaseSanity(0.15)
if(7)
IncreaseSanity(0.20)
if(8)
IncreaseSanity(0.25, 125)
if(9)
IncreaseSanity(0.4, 125)
if(owner.has_trait(TRAIT_DEPRESSION))
if(prob(0.1))
if(prob(0.05))
add_event("depression", /datum/mood_event/depression)
clear_event("jolly")
if(owner.has_trait(TRAIT_JOLLY))
if(prob(0.1))
if(prob(0.05))
add_event("jolly", /datum/mood_event/jolly)
clear_event("depression")
var/area/A = get_area(owner)
if(A)
update_beauty(A)
/datum/component/mood/proc/DecreaseSanity(amount)
sanity = max(0, sanity - amount)
/datum/component/mood/proc/IncreaseSanity(amount, limit = 99)
if(sanity > limit)
DecreaseSanity(-0.5) //Removes some sanity to go back to our current limit.
else
sanity = min(limit, sanity + amount)
/datum/component/mood/proc/add_event(category, type, param) //Category will override any events in the same category, should be unique unless the event is based on the same thing like hunger.
var/datum/mood_event/the_event
if(mood_events[category])
the_event = mood_events[category]
if(the_event.type != type)
clear_event(category)
return .()
else
return 0 //Don't have to update the event.
else
the_event = new type(src, param)
the_event = new type(src, param)
mood_events[category] = the_event
update_mood()
@@ -105,18 +198,22 @@
qdel(event)
update_mood()
/datum/component/mood/proc/update_beauty(var/area/A)
/datum/component/mood/proc/update_beauty(area/A)
if(A.outdoors) //if we're outside, we don't care.
clear_event("area_beauty")
return FALSE
switch(A.beauty)
if(-INFINITY to BEAUTY_LEVEL_HORRID)
add_event("area_beauty", /datum/mood_event/disgustingroom)
add_event("area_beauty", /datum/mood_event/horridroom)
if(BEAUTY_LEVEL_HORRID to BEAUTY_LEVEL_BAD)
add_event("area_beauty", /datum/mood_event/grossroom)
if(BEAUTY_LEVEL_BAD to BEAUTY_LEVEL_GOOD)
add_event("area_beauty", /datum/mood_event/badroom)
if(BEAUTY_LEVEL_BAD to BEAUTY_LEVEL_MEH)
add_event("area_beauty", /datum/mood_event/mehroom)
if(BEAUTY_LEVEL_MEH to BEAUTY_LEVEL_DECENT)
clear_event("area_beauty")
if(BEAUTY_LEVEL_DECENT to BEAUTY_LEVEL_GOOD)
add_event("area_beauty", /datum/mood_event/decentroom)
if(BEAUTY_LEVEL_GOOD to BEAUTY_LEVEL_GREAT)
add_event("area_beauty", /datum/mood_event/niceroom)
add_event("area_beauty", /datum/mood_event/goodroom)
if(BEAUTY_LEVEL_GREAT to INFINITY)
add_event("area_beauty", /datum/mood_event/greatroom)
+23 -6
View File
@@ -21,17 +21,17 @@
for(var/i in WF.time_left_list)
add_wet(text2num(i), WF.time_left_list[i])
/datum/component/wet_floor/Initialize(strength, duration_minimum, duration_add, duration_maximum, permanent = FALSE)
/datum/component/wet_floor/Initialize(strength, duration_minimum, duration_add, duration_maximum, _permanent = FALSE)
if(!isopenturf(parent))
. = COMPONENT_INCOMPATIBLE
CRASH("Wet floor component attempted to be applied to a non open turf!")
add_wet(strength, duration_minimum, duration_add, duration_maximum)
RegisterSignal(COMSIG_TURF_IS_WET, .proc/is_wet)
RegisterSignal(COMSIG_TURF_MAKE_DRY, .proc/dry)
permanent = _permanent
if(!permanent)
START_PROCESSING(SSwet_floors, src)
if(gc())
stack_trace("Warning: Wet floor component added and immediately deleted! What a waste of time!")
addtimer(CALLBACK(src, .proc/gc, TRUE), 1) //GC after initialization.
/datum/component/wet_floor/Destroy()
STOP_PROCESSING(SSwet_floors, src)
@@ -140,10 +140,23 @@
var/turf/T = to_datum
T.add_overlay(current_overlay)
/datum/component/wet_floor/proc/add_wet(type, duration_minimum = 0, duration_add = 0, duration_maximum = MAXIMUM_WET_TIME)
/datum/component/wet_floor/proc/add_wet(type, duration_minimum = 0, duration_add = 0, duration_maximum = MAXIMUM_WET_TIME, _permanent = FALSE)
var/static/list/allowed_types = list(TURF_WET_WATER, TURF_WET_LUBE, TURF_WET_ICE, TURF_WET_PERMAFROST)
if(!duration_minimum || duration_minimum < 0 || !type || !(type in allowed_types))
if(duration_minimum <= 0 || !type)
return FALSE
if(type in allowed_types)
return _do_add_wet(type, duration_minimum, duration_add, duration_maximum)
else
. = NONE
for(var/i in allowed_types)
if(!(type & i))
continue
. |= _do_add_wet(i, duration_minimum, duration_add, duration_maximum)
if(_permanent)
permanent = TRUE
STOP_PROCESSING(SSwet_floors, src)
/datum/component/wet_floor/proc/_do_add_wet(type, duration_minimum, duration_add, duration_maximum)
var/time = 0
if(LAZYACCESS(time_left_list, "[type]"))
time = CLAMP(LAZYACCESS(time_left_list, "[type]") + duration_add, duration_minimum, duration_maximum)
@@ -153,10 +166,14 @@
check(TRUE)
return TRUE
/datum/component/wet_floor/proc/gc()
/datum/component/wet_floor/proc/gc(on_init = FALSE)
if(!LAZYLEN(time_left_list))
if(on_init)
var/turf/T = parent
stack_trace("Warning: Wet floor component gc'd right initializatoin! What a waste of time and CPU! Type = [T? T.type : "ERROR - NO PARENT"], Coords = [istype(T)? COORD(T) : "ERROR - INVALID PARENT"].")
qdel(src)
return TRUE
return FALSE
/datum/component/wet_floor/proc/check(force_update = FALSE)
var/changed = FALSE
+2 -2
View File
@@ -1178,9 +1178,9 @@
var/edit_action = input(usr, "What would you like to do?","Modify Body Part") as null|anything in list("add","remove", "augment")
if(!edit_action)
return
var/list/limb_list = list("head", "l_arm", "r_arm", "l_leg", "r_leg")
var/list/limb_list = list(BODY_ZONE_HEAD, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
if(edit_action == "augment")
limb_list += "chest"
limb_list += BODY_ZONE_CHEST
var/result = input(usr, "Please choose which body part to [edit_action]","[capitalize(edit_action)] Body Part") as null|anything in limb_list
if(!C)
+3 -3
View File
@@ -47,13 +47,13 @@
if(satiety>0 && prob(satiety/10)) // positive satiety makes it harder to contract the disease.
return
if(!target_zone)
target_zone = pick(head_ch;"head",body_ch;"body",hands_ch;"hands",feet_ch;"feet")
target_zone = pick(head_ch;BODY_ZONE_HEAD,body_ch;"body",hands_ch;"hands",feet_ch;"feet")
if(ishuman(src))
var/mob/living/carbon/human/H = src
switch(target_zone)
if("head")
if(BODY_ZONE_HEAD)
if(isobj(H.head) && !istype(H.head, /obj/item/paper))
Cl = H.head
passed = prob((Cl.permeability_coefficient*100) - 1)
@@ -90,7 +90,7 @@
else if(ismonkey(src))
var/mob/living/carbon/monkey/M = src
switch(target_zone)
if("head")
if(BODY_ZONE_HEAD)
if(M.wear_mask && isobj(M.wear_mask))
Cl = M.wear_mask
passed = prob((Cl.permeability_coefficient*100) - 1)
@@ -45,7 +45,7 @@ BONUS
if(!..())
return
var/mob/living/carbon/M = A.affected_mob
var/picked_bodypart = pick("head", "chest", "r_arm", "l_arm", "r_leg", "l_leg")
var/picked_bodypart = pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)
var/obj/item/bodypart/bodypart = M.get_bodypart(picked_bodypart)
if(bodypart && bodypart.status == BODYPART_ORGANIC && !bodypart.is_pseudopart) //robotic limbs will mean less scratching overall
var/can_scratch = scratch && !M.incapacitated() && get_location_accessible(M, picked_bodypart)
+8 -7
View File
@@ -19,7 +19,7 @@
switch(stage)
if(2)
if(prob(45))
affected_mob.adjustToxLoss(5)
affected_mob.adjustFireLoss(5)
affected_mob.updatehealth()
if(prob(1))
to_chat(affected_mob, "<span class='danger'>You feel strange...</span>")
@@ -31,15 +31,16 @@
else if(prob(10))
to_chat(affected_mob, "<span class='danger'>You feel the need to chick chicky boom...</span>")
if(4)
if(prob(10))
affected_mob.emote("gasp")
to_chat(affected_mob, "<span class='danger'>You feel a burning beat inside...</span>")
if(prob(20))
affected_mob.adjustToxLoss(5)
affected_mob.updatehealth()
if (prob(50))
affected_mob.adjust_fire_stacks(2)
affected_mob.IgniteMob()
else
affected_mob.emote("gasp")
to_chat(affected_mob, "<span class='danger'>You feel a burning beat inside...</span>")
if(5)
to_chat(affected_mob, "<span class='danger'>Your body is unable to contain the Rhumba Beat...</span>")
if(prob(50))
affected_mob.gib()
explosion(get_turf(affected_mob), -1, 0, 2, 3, 0, 2) // This is equivalent to a lvl 1 fireball
else
return
@@ -41,6 +41,12 @@
mid_length = 3.5
volume = 25
/datum/looping_sound/reverse_bear_trap/slow
mid_sounds = list('sound/effects/clock_tick.ogg')
mid_length = 10
volume = 40
/datum/looping_sound/reverse_bear_trap_beep
mid_sounds = list('sound/machines/beep.ogg')
mid_length = 60
+2 -2
View File
@@ -42,8 +42,8 @@
D.visible_message("<span class='danger'>[A] [atk_verb] [D]!</span>", \
"<span class='userdanger'>[A] [atk_verb] you!</span>")
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 40, 1, -1)
D.apply_damage(rand(5,10), BRUTE, "head")
A.apply_damage(rand(5,10), BRUTE, "head")
D.apply_damage(rand(5,10), BRUTE, BODY_ZONE_HEAD)
A.apply_damage(rand(5,10), BRUTE, BODY_ZONE_HEAD)
if(!istype(D.head,/obj/item/clothing/head/helmet/) && !istype(D.head,/obj/item/clothing/head/hardhat))
D.adjustBrainLoss(5)
A.Stun(rand(10,45))
+4 -4
View File
@@ -42,7 +42,7 @@
playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
D.emote("scream")
D.dropItemToGround(D.get_active_held_item())
D.apply_damage(5, BRUTE, pick("l_arm", "r_arm"))
D.apply_damage(5, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
D.Knockdown(60)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun()
return 1
add_logs(A, D, "wrist wrenched (Sleeping Carp)")
@@ -78,7 +78,7 @@
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
D.visible_message("<span class='warning'>[A] kicks [D] in the head!</span>", \
"<span class='userdanger'>[A] kicks you in the jaw!</span>")
D.apply_damage(20, BRUTE, "head")
D.apply_damage(20, BRUTE, BODY_ZONE_HEAD)
D.drop_all_held_items()
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
D.Knockdown(80)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun()
@@ -93,7 +93,7 @@
"<span class='userdanger'>[A] piledrives you with their elbow!</span>")
if(D.stat)
D.death() //FINISH HIM!
D.apply_damage(50, BRUTE, "chest")
D.apply_damage(50, BRUTE, BODY_ZONE_CHEST)
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 75, 1, -1)
return 1
add_logs(A, D, "elbow dropped (Sleeping Carp)")
@@ -202,7 +202,7 @@
user.Knockdown(60)
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.apply_damage(2*force, BRUTE, "head")
H.apply_damage(2*force, BRUTE, BODY_ZONE_HEAD)
else
user.take_bodypart_damage(2*force)
return
+23
View File
@@ -0,0 +1,23 @@
/datum/mood_event/horridroom
description = "<span class='boldwarning'>This room looks terrible!</span>\n"
mood_change = -5
/datum/mood_event/badroom
description = "<span class='warning'>This room looks really bad.</span>\n"
mood_change = -3
/datum/mood_event/mehroom
description = "<span class='warning'>This room doesn't look great.</span>\n"
mood_change = -1
/datum/mood_event/decentroom
description = "<span class='nicegreen'>This room looks alright.</span>\n"
mood_change = 2
/datum/mood_event/goodroom
description = "<span class='nicegreen'>This room looks really pretty!</span>\n"
mood_change = 4
/datum/mood_event/greatroom
description = "<span class='nicegreen'>This room is beautiful!</span>\n"
mood_change = 7
@@ -49,7 +49,7 @@
/datum/mood_event/depression
description = "<span class='warning'>I feel sad for no particular reason.</span>\n"
mood_change = -6
mood_change = -9
timeout = 1200
/datum/mood_event/shameful_suicide //suicide_acts that return SHAME, like sord
@@ -64,7 +64,7 @@
/datum/mood_event/noshoes
description = "<span class='warning'>I am a disgrace to comedy everywhere!</span>\n"
mood_change = -3
mood_change = -5
/datum/mood_event/tased
description = "<span class='warning'>There's no \"z\" in \"taser\". It's in the zap.</span>\n"
@@ -73,13 +73,22 @@
/datum/mood_event/embedded
description = "<span class='boldwarning'>Pull it out!</span>\n"
mood_change = -6
mood_change = -7
/datum/mood_event/table
description = "<span class='warning'>Someone threw me on a table!</span>\n"
mood_change = -2
timeout = 1200
/datum/mood_event/table/add_effects()
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
if(iscatperson(H))
H.startTailWag()
addtimer(CALLBACK(H, /mob/living/carbon/human.proc/endTailWag), 30)
description = "<span class='nicegreen'>They want to play on the table!</span>\n"
mood_change = 2
/datum/mood_event/brain_damage
mood_change = -3
@@ -96,15 +105,6 @@
mood_change = -3
timeout = 3000
/datum/mood_event/grossroom
description = "<span class='warning'>This room is kind of dirty...</span>\n"
mood_change = -3
/datum/mood_event/disgustingroom
description = "<span class='warning'>This room is disgusting!</span>\n"
mood_change = -5
//These are unused so far but I want to remember them to use them later
/datum/mood_event/cloned_corpse
description = "<span class='boldwarning'>I recently saw my own corpse...</span>\n"
@@ -37,11 +37,6 @@
description = "<span class='nicegreen'>What a lovely day.</span>\n"
mood_change = 3
/datum/mood_event/happytable
description = "<span class='nicegreen'>They want to play on the table!</span>\n"
mood_change = 2
timeout = 1200
/datum/mood_event/jolly
description = "<span class='nicegreen'>I feel happy for no particular reason.</span>\n"
mood_change = 6
@@ -61,11 +56,3 @@
description = "<span class='nicegreen'>I have seen the truth, praise the almighty one!</span>\n"
mood_change = 40 //maybe being a cultist isnt that bad after all
hidden = TRUE
/datum/mood_event/niceroom
description = "<span class='nicegreen'>This room looks really pretty!</span>\n"
mood_change = 4
/datum/mood_event/greatroom
description = "<span class='nicegreen'>This room is beautiful!</span>\n"
mood_change = 7
+1 -3
View File
@@ -11,9 +11,7 @@
owner.visible_message("<span class='danger'>[owner] starts having a seizure!</span>", "<span class='userdanger'>You have a seizure!</span>")
owner.Unconscious(200)
owner.Jitter(1000)
GET_COMPONENT_FROM(mood, /datum/component/mood, owner)
if(mood)
mood.add_event("epilepsy", /datum/mood_event/epilepsy)
owner.SendSignal(COMSIG_ADD_MOOD_EVENT, "epilepsy", /datum/mood_event/epilepsy)
addtimer(CALLBACK(src, .proc/jitter_less, owner), 90)
/datum/mutation/human/epilepsy/proc/jitter_less(mob/living/carbon/human/owner)
+3 -7
View File
@@ -14,9 +14,7 @@
owner.add_trait(TRAIT_STUNIMMUNE, TRAIT_HULK)
owner.add_trait(TRAIT_PUSHIMMUNE, TRAIT_HULK)
owner.update_body_parts()
GET_COMPONENT_FROM(mood, /datum/component/mood, owner)
if(mood)
mood.add_event("hulk", /datum/mood_event/hulk)
owner.SendSignal(COMSIG_ADD_MOOD_EVENT, "hulk", /datum/mood_event/hulk)
/datum/mutation/human/hulk/on_attack_hand(mob/living/carbon/human/owner, atom/target, proximity)
if(proximity) //no telekinetic hulk attack
@@ -33,10 +31,8 @@
owner.remove_trait(TRAIT_STUNIMMUNE, TRAIT_HULK)
owner.remove_trait(TRAIT_PUSHIMMUNE, TRAIT_HULK)
owner.update_body_parts()
GET_COMPONENT_FROM(mood, /datum/component/mood, owner)
if(mood)
mood.clear_event("hulk")
owner.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "hulk")
/datum/mutation/human/hulk/say_mod(message)
if(message)
message = "[uppertext(replacetext(message, ".", "!"))]!!"
+1 -1
View File
@@ -60,7 +60,7 @@
dna_block = NON_SCANNABLE
text_gain_indication = "<span class='notice'>You feel pressure building up behind your eyes.</span>"
layer_used = FRONT_MUTATIONS_LAYER
limb_req = "head"
limb_req = BODY_ZONE_HEAD
/datum/mutation/human/laser_eyes/New()
..()
+1 -1
View File
@@ -5,7 +5,7 @@
get_chance = 20
lowest_value = 256 * 12
text_gain_indication = "<span class='notice'>You feel smarter!</span>"
limb_req = "head"
limb_req = BODY_ZONE_HEAD
/datum/mutation/human/telekinesis/New()
..()
+2 -2
View File
@@ -499,11 +499,11 @@
if(!itemUser.has_hand_for_held_index(hand))
//If user does not have the corresponding hand anymore, give them one and return the rod to their hand
if(((hand % 2) == 0))
var/obj/item/bodypart/L = itemUser.newBodyPart("r_arm", FALSE, FALSE)
var/obj/item/bodypart/L = itemUser.newBodyPart(BODY_ZONE_R_ARM, FALSE, FALSE)
L.attach_limb(itemUser)
itemUser.put_in_hand(newRod, hand, forced = TRUE)
else
var/obj/item/bodypart/L = itemUser.newBodyPart("l_arm", FALSE, FALSE)
var/obj/item/bodypart/L = itemUser.newBodyPart(BODY_ZONE_L_ARM, FALSE, FALSE)
L.attach_limb(itemUser)
itemUser.put_in_hand(newRod, hand, forced = TRUE)
to_chat(itemUser, "<span class='notice'>Your arm suddenly grows back with the Rod of Asclepius still attached!</span>")
+4 -4
View File
@@ -130,11 +130,11 @@
if(GLOB.ratvar_awakens)
owner.Knockdown(20)
if(iscultist(owner))
owner.apply_damage(cultist_damage_on_toggle * 0.5, BURN, "l_leg")
owner.apply_damage(cultist_damage_on_toggle * 0.5, BURN, "r_leg")
owner.apply_damage(cultist_damage_on_toggle * 0.5, BURN, BODY_ZONE_L_LEG)
owner.apply_damage(cultist_damage_on_toggle * 0.5, BURN, BODY_ZONE_R_LEG)
else
owner.apply_damage(leg_damage_on_toggle * 0.5, BURN, "l_leg")
owner.apply_damage(leg_damage_on_toggle * 0.5, BURN, "r_leg")
owner.apply_damage(leg_damage_on_toggle * 0.5, BURN, BODY_ZONE_L_LEG)
owner.apply_damage(leg_damage_on_toggle * 0.5, BURN, BODY_ZONE_R_LEG)
if(owner.m_intent != MOVE_INTENT_WALK)
if(!iscultist(owner))
to_chat(owner, "<span class='warning'>Your leg[number_legs > 1 ? "s shiver":" shivers"] with pain!</span>")
+16 -5
View File
@@ -11,6 +11,17 @@
lose_text = "<span class='notice'>You feel awake again.</span>"
medical_record_text = "Patient has abnormal sleep study results and is difficult to wake up."
/datum/trait/brainproblems
name = "Brain Tumor"
desc = "You have a little friend in your brain that is slowly destroying it. Better bring some mannitol!"
value = -2
gain_text = "<span class='danger'>You feel smooth.</span>"
lose_text = "<span class='notice'>You feel wrinkled again.</span>"
medical_record_text = "Patient has a tumor in their brain that is slowly driving them to brain death."
/datum/trait/brainproblems/on_process()
trait_holder.adjustBrainLoss(0.2)
/datum/trait/nearsighted //t. errorage
@@ -74,21 +85,21 @@
var/slot_string = "limb"
/datum/trait/prosthetic_limb/on_spawn()
var/limb_slot = pick("l_arm", "r_arm", "l_leg", "r_leg")
var/limb_slot = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
var/mob/living/carbon/human/H = trait_holder
var/obj/item/bodypart/old_part = H.get_bodypart(limb_slot)
var/obj/item/bodypart/prosthetic
switch(limb_slot)
if("l_arm")
if(BODY_ZONE_L_ARM)
prosthetic = new/obj/item/bodypart/l_arm/robot/surplus(trait_holder)
slot_string = "left arm"
if("r_arm")
if(BODY_ZONE_R_ARM)
prosthetic = new/obj/item/bodypart/r_arm/robot/surplus(trait_holder)
slot_string = "right arm"
if("l_leg")
if(BODY_ZONE_L_LEG)
prosthetic = new/obj/item/bodypart/l_leg/robot/surplus(trait_holder)
slot_string = "left leg"
if("r_leg")
if(BODY_ZONE_R_LEG)
prosthetic = new/obj/item/bodypart/r_leg/robot/surplus(trait_holder)
slot_string = "right leg"
prosthetic.replace_limb(H)
+20 -11
View File
@@ -31,8 +31,9 @@
var/outdoors = FALSE //For space, the asteroid, lavaland, etc. Used with blueprints to determine if we are adding a new area (vs editing a station room)
var/beauty = 0 //To see how clean/dirty this area is, only works with indoors areas.
var/areasize = 0 //Size of the area in tiles, only calculated for indoors areas.
var/totalbeauty = 0 //All beauty in this area combined, only includes indoor area.
var/beauty = 0 // Beauty average per open turf in the area
var/areasize = 0 //Size of the area in open turfs, only calculated for indoors areas.
var/power_equip = TRUE
var/power_light = TRUE
@@ -136,6 +137,7 @@ GLOBAL_LIST_EMPTY(teleportlocs)
if(contents.len)
var/list/areas_in_z = SSmapping.areas_in_z
var/z
update_areasize()
for(var/i in 1 to contents.len)
var/atom/thing = contents[i]
if(!thing)
@@ -148,12 +150,12 @@ GLOBAL_LIST_EMPTY(teleportlocs)
if(!areas_in_z["[z]"])
areas_in_z["[z]"] = list()
areas_in_z["[z]"] += src
update_area_size()
return INITIALIZE_HINT_LATELOAD
/area/LateInitialize()
power_change() // all machines set to current power level, also updates icon
update_beauty()
/area/Destroy()
STOP_PROCESSING(SSobj, src)
@@ -476,12 +478,14 @@ GLOBAL_LIST_EMPTY(teleportlocs)
used_environ += amount
/area/Entered(A)
/area/Entered(atom/movable/M)
set waitfor = FALSE
if(!isliving(A))
SendSignal(COMSIG_AREA_ENTERED, M)
M.SendSignal(COMSIG_ENTER_AREA, src) //The atom that enters the area
if(!isliving(M))
return
var/mob/living/L = A
var/mob/living/L = M
if(!L.ckey)
return
@@ -501,9 +505,9 @@ GLOBAL_LIST_EMPTY(teleportlocs)
L.client.played = TRUE
addtimer(CALLBACK(L.client, /client/proc/ResetAmbiencePlayed), 600)
GET_COMPONENT_FROM(mood, /datum/component/mood, L)
if(mood)
mood.update_beauty(src)
/area/Exited(atom/movable/M)
SendSignal(COMSIG_AREA_EXITED, M)
M.SendSignal(COMSIG_EXIT_AREA, src) //The atom that exits the area
/client/proc/ResetAmbiencePlayed()
played = FALSE
@@ -532,11 +536,16 @@ GLOBAL_LIST_EMPTY(teleportlocs)
blob_allowed = FALSE
addSorted()
/area/proc/update_area_size()
/area/proc/update_beauty()
if(!areasize)
return FALSE
beauty = totalbeauty / areasize
/area/proc/update_areasize()
if(outdoors)
return FALSE
areasize = 0
for(var/turf/T in src.contents)
for(var/turf/open/T in contents)
areasize++
/area/AllowDrop()
+2 -2
View File
@@ -446,14 +446,14 @@
var/image/holder = hud_list[DIAG_STAT_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
if((!isturf(loc))||hide) //if not on the ground dont show overlay
if((!isturf(loc))||hide) //if not on the ground don't show overlay
holder.icon_state = null
else if(!battery)
holder.icon_state = "hudoffline"
else if(battery.charge == 0)
holder.icon_state = "hudoffline"
else if(combat_circuits) //has a circuit that can harm people
holder.icon_state = "hudwarn"
holder.icon_state = prefered_hud_icon + "-red"
else //Bot is on and not dangerous
holder.icon_state = prefered_hud_icon
+7 -7
View File
@@ -323,18 +323,18 @@
for(var/datum/mind/mind in candidates)
p_ckey = ckey(mind.key)
p_rep = SSpersistence.antag_rep[p_ckey]
p_rep = p_rep == null ? 0 : p_rep
if(current <= antag_select)
var/subtract = min(p_rep + DEFAULT_ANTAG_TICKETS, MAX_TICKETS_PER_ROLL) - DEFAULT_ANTAG_TICKETS
SSpersistence.antag_rep_change[p_ckey] = -subtract
var/previous = current
var/spend = min(p_rep + DEFAULT_ANTAG_TICKETS, MAX_TICKETS_PER_ROLL)
current += spend
// WARNING("AR_DEBUG: Player [mind.key] won spending [subtract] tickets from starting value [SSpersistence.antag_rep[p_ckey]]")
if(antag_select >= previous && antag_select <= (current-1))
SSpersistence.antag_rep_change[p_ckey] = -(spend - DEFAULT_ANTAG_TICKETS)
// WARNING("AR_DEBUG: Player [mind.key] won spending [spend] tickets from starting value [SSpersistence.antag_rep[p_ckey]]")
return mind
current += min(p_rep + DEFAULT_ANTAG_TICKETS, MAX_TICKETS_PER_ROLL)
WARNING("Something has gone terribly wrong. /datum/game_mode/proc/antag_pick failed to select a candidate. Falling back to pick()")
return pick(candidates)
+1 -1
View File
@@ -449,7 +449,7 @@
// brain function, they also have no limbs or internal organs.
if(!H.has_trait(TRAIT_NODISMEMBER))
var/static/list/zones = list("r_arm", "l_arm", "r_leg", "l_leg")
var/static/list/zones = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)
for(var/zone in zones)
var/obj/item/bodypart/BP = H.get_bodypart(zone)
if(BP)
+9 -11
View File
@@ -70,9 +70,7 @@
Reset()
/obj/machinery/computer/arcade/proc/prizevend(mob/user)
GET_COMPONENT_FROM(mood, /datum/component/mood, user)
if(mood)
mood.add_event("arcade", /datum/mood_event/arcade)
user.SendSignal(COMSIG_ADD_MOOD_EVENT, "arcade", /datum/mood_event/arcade)
if(prob(0.0001)) //1 in a million
new /obj/item/gun/energy/pulse/prize(src)
SSmedals.UnlockMedal(MEDAL_PULSE, usr.client)
@@ -175,7 +173,7 @@
sleep(10)
enemy_hp -= attackamt
arcade_action()
arcade_action(usr)
else if (href_list["heal"])
blocked = TRUE
@@ -191,7 +189,7 @@
player_hp += healamt
blocked = TRUE
updateUsrDialog()
arcade_action()
arcade_action(usr)
else if (href_list["charge"])
blocked = TRUE
@@ -204,7 +202,7 @@
updateUsrDialog()
sleep(10)
arcade_action()
arcade_action(usr)
if (href_list["close"])
usr.unset_machine()
@@ -227,7 +225,7 @@
updateUsrDialog()
return
/obj/machinery/computer/arcade/battle/proc/arcade_action()
/obj/machinery/computer/arcade/battle/proc/arcade_action(mob/user)
if ((enemy_mp <= 0) || (enemy_hp <= 0))
if(!gameover)
gameover = TRUE
@@ -242,7 +240,7 @@
Reset()
obj_flags &= ~EMAGGED
else
prizevend(usr)
prizevend(user)
SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("win", (obj_flags & EMAGGED ? "emagged":"normal")))
@@ -484,7 +482,7 @@
if (href_list["continue"]) //Continue your travels
if(gameStatus == ORION_STATUS_NORMAL && !event && turns != 7)
if(turns >= ORION_TRAIL_WINTURN)
win()
win(usr)
else
food -= (alive+lings_aboard)*2
fuel -= 5
@@ -1028,7 +1026,7 @@
return removed
/obj/machinery/computer/arcade/orion_trail/proc/win()
/obj/machinery/computer/arcade/orion_trail/proc/win(mob/user)
gameStatus = ORION_STATUS_START
say("Congratulations, you made it to Orion!")
if(obj_flags & EMAGGED)
@@ -1036,7 +1034,7 @@
message_admins("[key_name_admin(usr)] made it to Orion on an emagged machine and got an explosive toy ship.")
log_game("[key_name(usr)] made it to Orion on an emagged machine and got an explosive toy ship.")
else
prizevend(usr)
prizevend(user)
obj_flags &= ~EMAGGED
name = "The Orion Trail"
desc = "Learn how our ancestors got to Orion, and have fun in the process!"
+2 -2
View File
@@ -746,7 +746,7 @@
H.visible_message("<span class='danger'>[user] headbutts the airlock.</span>", \
"<span class='userdanger'>You headbutt the airlock!</span>")
H.Knockdown(100)
H.apply_damage(10, BRUTE, "head")
H.apply_damage(10, BRUTE, BODY_ZONE_HEAD)
else
visible_message("<span class='danger'>[user] headbutts the airlock. Good thing [user.p_theyre()] wearing a helmet.</span>")
return
@@ -1085,7 +1085,7 @@
H.Unconscious(160)
H.adjust_fire_stacks(20)
H.IgniteMob() //Guaranteed knockout and ignition for nearby people
H.apply_damage(40, BRUTE, "chest")
H.apply_damage(40, BRUTE, BODY_ZONE_CHEST)
return
if(forced < 2)
if(obj_flags & EMAGGED)
+1 -1
View File
@@ -114,7 +114,7 @@
if(!(get_dist(src, attached) <= 1 && isturf(attached.loc)))
to_chat(attached, "<span class='userdanger'>The IV drip needle is ripped out of you!</span>")
attached.apply_damage(3, BRUTE, pick("r_arm", "l_arm"))
attached.apply_damage(3, BRUTE, pick(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM))
attached = null
update_icon()
return PROCESS_KILL
+1 -1
View File
@@ -14,7 +14,7 @@
var/range = MELEE //bitFflags
var/salvageable = 1
var/selectable = 1 // Set to 0 for passive equipment such as mining scanner or armor plates
var/pacifist_safe = TRUE //Controls if equipment can be used to attack by a pacifist.
var/harmful = FALSE //Controls if equipment can be used to attack by a pacifist.
/obj/item/mecha_parts/mecha_equipment/proc/update_chassis_page()
if(chassis)
@@ -12,7 +12,7 @@
equip_cooldown = 15
energy_drain = 10
force = 15
pacifist_safe = FALSE
harmful = TRUE
var/drill_delay = 7
var/drill_level = DRILL_BASIC
@@ -121,8 +121,8 @@
target.gib()
else
//drill makes a hole
var/obj/item/bodypart/target_part = target.get_bodypart(ran_zone("chest"))
target.apply_damage(10, BRUTE, "chest", target.run_armor_check(target_part, "melee"))
var/obj/item/bodypart/target_part = target.get_bodypart(ran_zone(BODY_ZONE_CHEST))
target.apply_damage(10, BRUTE, BODY_ZONE_CHEST, target.run_armor_check(target_part, "melee"))
//blood splatters
var/splatter_dir = get_dir(chassis, target)
@@ -10,7 +10,7 @@
energy_drain = 10
var/dam_force = 20
var/obj/mecha/working/ripley/cargo_holder
pacifist_safe = FALSE
harmful = TRUE
/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/can_attach(obj/mecha/working/ripley/M as obj)
if(..())
+9 -9
View File
@@ -75,7 +75,7 @@
energy_drain = 30
projectile = /obj/item/projectile/beam/laser
fire_sound = 'sound/weapons/laser.ogg'
pacifist_safe = FALSE
harmful = TRUE
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
equip_cooldown = 15
@@ -103,7 +103,7 @@
energy_drain = 500
projectile = /obj/item/projectile/energy/tesla/cannon
fire_sound = 'sound/magic/lightningbolt.ogg'
pacifist_safe = FALSE
harmful = TRUE
/obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse
equip_cooldown = 30
@@ -113,7 +113,7 @@
energy_drain = 120
projectile = /obj/item/projectile/beam/pulse/heavy
fire_sound = 'sound/weapons/marauder.ogg'
pacifist_safe = FALSE
harmful = TRUE
/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma
equip_cooldown = 10
@@ -126,7 +126,7 @@
energy_drain = 30
projectile = /obj/item/projectile/plasma/adv/mech
fire_sound = 'sound/weapons/plasma_cutter.ogg'
pacifist_safe = FALSE
harmful = TRUE
/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/can_attach(obj/mecha/working/M)
if(..()) //combat mech
@@ -246,7 +246,7 @@
projectile = /obj/item/projectile/bullet/incendiary/fnx99
projectiles = 24
projectile_energy_cost = 15
pacifist_safe = FALSE
harmful = TRUE
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced
name = "\improper S.H.H. \"Quietus\" Carbine"
@@ -257,7 +257,7 @@
projectile = /obj/item/projectile/bullet/mime
projectiles = 6
projectile_energy_cost = 50
pacifist_safe = FALSE
harmful = TRUE
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
name = "\improper LBX AC 10 \"Scattershot\""
@@ -269,7 +269,7 @@
projectile_energy_cost = 25
projectiles_per_shot = 4
variance = 25
pacifist_safe = FALSE
harmful = TRUE
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg
name = "\improper Ultra AC 2"
@@ -283,7 +283,7 @@
variance = 6
randomspread = 1
projectile_delay = 2
pacifist_safe = FALSE
harmful = TRUE
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack
name = "\improper SRM-8 missile rack"
@@ -294,7 +294,7 @@
projectiles = 8
projectile_energy_cost = 1000
equip_cooldown = 60
pacifist_safe = FALSE
harmful = TRUE
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher
+2 -7
View File
@@ -442,22 +442,17 @@
return
var/mob/living/L = user
var/obj/structure/closet/C = target
if(!Adjacent(target))
if(selected && selected.is_ranged())
if(L.has_trait(TRAIT_PACIFISM) && !selected.pacifist_safe)
if(L.has_trait(TRAIT_PACIFISM) && selected.harmful)
to_chat(user, "<span class='warning'>You don't want to harm other living beings!</span>")
return
if(selected.action(target,params))
selected.start_cooldown()
else if(selected && selected.is_melee())
if(isliving(target) && !selected.pacifist_safe && L.has_trait(TRAIT_PACIFISM))
if(isliving(target) && selected.harmful && L.has_trait(TRAIT_PACIFISM))
to_chat(user, "<span class='warning'>You don't want to harm other living beings!</span>")
return
if(istype(C) && L.has_trait(TRAIT_PACIFISM) && !selected.pacifist_safe && !istype(selected,/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/))
for(var/mob/living/M in C)
to_chat(user, "<span class='warning'>There's someone in there! I don't want to hurt them.</span>")
return
if(selected.action(target,params))
selected.start_cooldown()
else
+1
View File
@@ -60,6 +60,7 @@
/obj/structure/sign/poster/Initialize()
. = ..()
addtimer(CALLBACK(src, /datum.proc/AddComponent, /datum/component/beauty, 75), 0)
if(random_basetype)
randomise(random_basetype)
if(!ruined)
+9 -16
View File
@@ -4,17 +4,17 @@
var/list/random_icon_states = list()
var/blood_state = "" //I'm sorry but cleanable/blood code is ass, and so is blood_DNA
var/bloodiness = 0 //0-100, amount of blood in this decal, used for making footprints and affecting the alpha of bloody footprints
var/beauty = 0
var/mergeable_decal = TRUE //when two of these are on a same tile or do we need to merge them into just one?
var/beauty
/obj/effect/decal/cleanable/Initialize(mapload, list/datum/disease/diseases)
. = ..()
if (random_icon_states && length(src.random_icon_states) > 0)
src.icon_state = pick(src.random_icon_states)
if (random_icon_states && length(random_icon_states) > 0)
icon_state = pick(random_icon_states)
create_reagents(300)
if(src.loc && isturf(src.loc))
for(var/obj/effect/decal/cleanable/C in src.loc)
if(C != src && C.type == src.type && !QDELETED(C))
if(loc && isturf(loc))
for(var/obj/effect/decal/cleanable/C in loc)
if(C != src && C.type == type && !QDELETED(C))
if (replace_decal(C))
return INITIALIZE_HINT_QDEL
@@ -26,10 +26,9 @@
if(LAZYLEN(diseases_to_add))
AddComponent(/datum/component/infective, diseases_to_add)
/obj/effect/decal/cleanable/LateInitialize()
if(src.loc && isturf(src.loc))
var/area/A = get_area(src)
A.beauty += beauty / max(1, A.areasize) //Ensures that the effects scale with room size
/obj/effect/decal/cleanable/ComponentInitialize()
. = ..()
addtimer(CALLBACK(src, /datum.proc/AddComponent, /datum/component/beauty, beauty), 0) //inb4 i get yelled at for using the beauty var on cleanable instead of calling this proc on every subtype which would be pedantic and actually run worse.
/obj/effect/decal/cleanable/proc/replace_decal(obj/effect/decal/cleanable/C) // Returns true if we should give up in favor of the pre-existing decal
if(mergeable_decal)
@@ -97,9 +96,3 @@
return bloodiness
else
return 0
/obj/effect/decal/cleanable/Destroy()
. = ..()
if(src.loc && isturf(src.loc))
var/area/A = get_area(src)
A.beauty -= beauty / max(1, A.areasize)
@@ -8,7 +8,7 @@
random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7")
bloodiness = MAX_SHOE_BLOODINESS
blood_state = BLOOD_STATE_XENO
beauty = -200
beauty = -250
/obj/effect/decal/cleanable/xenoblood/Initialize()
. = ..()
@@ -6,7 +6,7 @@
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
blood_state = BLOOD_STATE_HUMAN
bloodiness = MAX_SHOE_BLOODINESS
beauty = -200
beauty = -250
/obj/effect/decal/cleanable/blood/replace_decal(obj/effect/decal/cleanable/blood/C)
C.add_blood_DNA(return_blood_DNA())
@@ -3,7 +3,7 @@
desc = "Someone should clean that up."
icon = 'icons/obj/objects.dmi'
icon_state = "shards"
beauty = -150
beauty = -300
/obj/effect/decal/cleanable/ash
name = "ashes"
@@ -11,7 +11,7 @@
icon = 'icons/obj/objects.dmi'
icon_state = "ash"
mergeable_decal = FALSE
beauty = -150
beauty = -300
/obj/effect/decal/cleanable/ash/Initialize()
. = ..()
@@ -26,7 +26,7 @@
/obj/effect/decal/cleanable/ash/large
name = "large pile of ashes"
icon_state = "big_ash"
beauty = -150
beauty = -300
/obj/effect/decal/cleanable/ash/large/Initialize()
. = ..()
@@ -37,7 +37,7 @@
desc = "Back to sand."
icon = 'icons/obj/shards.dmi'
icon_state = "tiny"
beauty = -20
beauty = -125
/obj/effect/decal/cleanable/glass/Initialize()
. = ..()
@@ -51,7 +51,7 @@
desc = "Someone should clean that up."
icon_state = "dirt"
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
beauty = -150
beauty = -300
/obj/effect/decal/cleanable/flour
name = "flour"
@@ -64,7 +64,7 @@
desc = "Jeez. I hope that's not for lunch."
light_color = LIGHT_COLOR_GREEN
icon_state = "greenglow"
beauty = -100
beauty = -200
/obj/effect/decal/cleanable/greenglow/Initialize(mapload)
. = ..()
@@ -80,7 +80,7 @@
layer = WALL_OBJ_LAYER
icon_state = "cobweb1"
resistance_flags = FLAMMABLE
beauty = -150
beauty = -300
/obj/effect/decal/cleanable/cobweb/cobweb2
icon_state = "cobweb2"
@@ -92,12 +92,12 @@
icon = 'icons/effects/effects.dmi'
icon_state = "molten"
mergeable_decal = FALSE
beauty = -250
beauty = -300
/obj/effect/decal/cleanable/molten_object/large
name = "big gooey grey mass"
icon_state = "big_molten"
beauty = -200
beauty = -450
//Vomit (sorry)
/obj/effect/decal/cleanable/vomit
@@ -106,7 +106,7 @@
icon = 'icons/effects/blood.dmi'
icon_state = "vomit_1"
random_icon_states = list("vomit_1", "vomit_2", "vomit_3", "vomit_4")
beauty = -400
beauty = -600
/obj/effect/decal/cleanable/vomit/attack_hand(mob/user)
if(ishuman(user))
@@ -161,7 +161,7 @@
gender = NEUTER
icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("smashed_pie")
beauty = -125
beauty = -200
/obj/effect/decal/cleanable/chem_pile
name = "chemical pile"
@@ -169,7 +169,7 @@
gender = NEUTER
icon = 'icons/obj/objects.dmi'
icon_state = "ash"
beauty = -125
beauty = -200
/obj/effect/decal/cleanable/shreds
name = "shreds"
@@ -177,7 +177,7 @@
icon_state = "shreds"
gender = PLURAL
mergeable_decal = FALSE
beauty = -125
beauty = -200
/obj/effect/decal/cleanable/shreds/ex_act(severity, target)
if(severity == 1) //so shreds created during an explosion aren't deleted by the explosion.
@@ -47,7 +47,7 @@
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
blood_state = BLOOD_STATE_OIL
bloodiness = MAX_SHOE_BLOODINESS
beauty = -125
beauty = -150
/obj/effect/decal/cleanable/oil/Initialize()
. = ..()
+2 -4
View File
@@ -482,7 +482,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
/obj/item/proc/eyestab(mob/living/carbon/M, mob/living/carbon/user)
var/is_human_victim = 0
var/obj/item/bodypart/affecting = M.get_bodypart("head")
var/obj/item/bodypart/affecting = M.get_bodypart(BODY_ZONE_HEAD)
if(ishuman(M))
if(!affecting) //no head!
return
@@ -537,9 +537,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
else
M.take_bodypart_damage(7)
GET_COMPONENT_FROM(mood, /datum/component/mood, M)
if(mood)
mood.add_event("eye_stab", /datum/mood_event/eye_stab)
M.SendSignal(COMSIG_ADD_MOOD_EVENT, "eye_stab", /datum/mood_event/eye_stab)
add_logs(user, M, "attacked", "[src.name]", "(INTENT: [uppertext(user.a_intent)])")
+1 -1
View File
@@ -191,7 +191,7 @@
FD.CalculateAffectingAreas()
to_chat(usr, "<span class='notice'>You rename the '[prevname]' to '[str]'.</span>")
log_game("[key_name(usr)] has renamed [prevname] to [str]")
A.update_area_size()
A.update_areasize()
interact()
return 1
+1 -1
View File
@@ -2,7 +2,7 @@
name = "body egg"
desc = "All slimy and yuck."
icon_state = "innards"
zone = "chest"
zone = BODY_ZONE_CHEST
slot = "parasite_egg"
/obj/item/organ/body_egg/on_find(mob/living/finder)
+4 -6
View File
@@ -129,7 +129,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
reagents.add_reagent_list(list_reagents)
if(starts_lit)
light()
AddComponent(/datum/component/knockoff,90,list("mouth"),list(slot_wear_mask))//90% to knock off when wearing a mask
AddComponent(/datum/component/knockoff,90,list(BODY_ZONE_PRECISE_MOUTH),list(slot_wear_mask))//90% to knock off when wearing a mask
/obj/item/clothing/mask/cigarette/Destroy()
STOP_PROCESSING(SSobj, src)
@@ -546,12 +546,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(prot || prob(75))
user.visible_message("After a few attempts, [user] manages to light [src].", "<span class='notice'>After a few attempts, you manage to light [src].</span>")
else
var/hitzone = user.held_index_to_dir(user.active_hand_index) == "r" ? "r_hand" : "l_hand"
var/hitzone = user.held_index_to_dir(user.active_hand_index) == "r" ? BODY_ZONE_PRECISE_R_HAND : BODY_ZONE_PRECISE_L_HAND
user.apply_damage(5, BURN, hitzone)
user.visible_message("<span class='warning'>After a few attempts, [user] manages to light [src] - however, [user.p_they()] burn their finger in the process.</span>", "<span class='warning'>You burn yourself while lighting the lighter!</span>")
GET_COMPONENT_FROM(mood, /datum/component/mood, user)
if(mood)
mood.add_event("burnt_thumb", /datum/mood_event/burnt_thumb)
user.SendSignal(COMSIG_ADD_MOOD_EVENT, "burnt_thumb", /datum/mood_event/burnt_thumb)
else
set_lit(FALSE)
@@ -800,7 +798,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
vapetime = 0
if(prob(5))//small chance for the vape to break and deal damage if it's emagged
playsound(get_turf(src), 'sound/effects/pop_expl.ogg', 50, 0)
M.apply_damage(20, BURN, "head")
M.apply_damage(20, BURN, BODY_ZONE_HEAD)
M.Knockdown(300, 1, 0)
var/datum/effect_system/spark_spread/sp = new /datum/effect_system/spark_spread
sp.set_up(5, 1, src)
+2 -4
View File
@@ -69,7 +69,7 @@
if(do_after(user, src.cleanspeed, target = target))
to_chat(user, "<span class='notice'>You scrub \the [target.name] out.</span>")
qdel(target)
else if(ishuman(target) && user.zone_selected == "mouth")
else if(ishuman(target) && user.zone_selected == BODY_ZONE_PRECISE_MOUTH)
var/mob/living/carbon/human/H = user
user.visible_message("<span class='warning'>\the [user] washes \the [target]'s mouth out with [src.name]!</span>", "<span class='notice'>You wash \the [target]'s mouth out with [src.name]!</span>") //washes mouth out with soap sounds better than 'the soap' here
H.lip_style = null //removes lipstick
@@ -117,9 +117,7 @@
AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 50)
/obj/item/weapon/bikehorn/attack(mob/living/carbon/M, mob/living/carbon/user)
GET_COMPONENT_FROM(mood, /datum/component/mood, M)
if(mood)
mood.add_event("honk", /datum/mood_event/honk)
M.SendSignal(COMSIG_ADD_MOOD_EVENT, "honk", /datum/mood_event/honk)
/obj/item/bikehorn/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] solemnly points the horn at [user.p_their()] temple! It looks like [user.p_theyre()] trying to commit suicide!</span>")
+8 -8
View File
@@ -78,7 +78,7 @@
//you can wipe off lipstick with paper!
/obj/item/paper/attack(mob/M, mob/user)
if(user.zone_selected == "mouth")
if(user.zone_selected == BODY_ZONE_PRECISE_MOUTH)
if(!ismob(M))
return
@@ -109,12 +109,12 @@
/obj/item/razor/suicide_act(mob/living/carbon/user)
user.visible_message("<span class='suicide'>[user] begins shaving [user.p_them()]self without the razor guard! It looks like [user.p_theyre()] trying to commit suicide!</span>")
shave(user, "mouth")
shave(user, "head")//doesnt need to be "head" specifically, but whatever
shave(user, BODY_ZONE_PRECISE_MOUTH)
shave(user, BODY_ZONE_HEAD)//doesnt need to be BODY_ZONE_HEAD specifically, but whatever
return BRUTELOSS
/obj/item/razor/proc/shave(mob/living/carbon/human/H, location = "mouth")
if(location == "mouth")
/obj/item/razor/proc/shave(mob/living/carbon/human/H, location = BODY_ZONE_PRECISE_MOUTH)
if(location == BODY_ZONE_PRECISE_MOUTH)
H.facial_hair_style = "Shaved"
else
H.hair_style = "Skinhead"
@@ -127,10 +127,10 @@
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/location = user.zone_selected
if((location in list("eyes", "mouth", "head")) && !H.get_bodypart("head"))
if((location in list(BODY_ZONE_PRECISE_EYES, BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_HEAD)) && !H.get_bodypart(BODY_ZONE_HEAD))
to_chat(user, "<span class='warning'>[H] doesn't have a head!</span>")
return
if(location == "mouth")
if(location == BODY_ZONE_PRECISE_MOUTH)
if(!(FACEHAIR in H.dna.species.species_traits))
to_chat(user, "<span class='warning'>There is no facial hair to shave!</span>")
return
@@ -158,7 +158,7 @@
"<span class='notice'>You shave [H]'s facial hair clean off.</span>")
shave(H, location)
else if(location == "head")
else if(location == BODY_ZONE_HEAD)
if(!(HAIR in H.dna.species.species_traits))
to_chat(user, "<span class='warning'>There is no hair to shave!</span>")
return
+6 -5
View File
@@ -244,8 +244,13 @@
if(!proximity || !check_allowed_items(target))
return
if(check_empty(user))
var/cost = 1
if(paint_mode == PAINT_LARGE_HORIZONTAL)
cost = 5
var/charges_used = use_charges(user, cost)
if(!charges_used)
return
. = charges_used
if(istype(target, /obj/effect/decal/cleanable))
target = target.loc
@@ -353,10 +358,6 @@
audible_message("<span class='notice'>You hear spraying.</span>")
playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5)
var/cost = 1
if(paint_mode == PAINT_LARGE_HORIZONTAL)
cost = 5
. = use_charges(user, cost)
var/fraction = min(1, . / reagents.maximum_volume)
if(affected_turfs.len)
fraction /= affected_turfs.len
+3 -3
View File
@@ -417,7 +417,7 @@
var/mob/living/carbon/H = M
if(user.zone_selected != "chest")
if(user.zone_selected != BODY_ZONE_CHEST)
to_chat(user, "<span class='warning'>You need to target your patient's chest with [src]!</span>")
return
@@ -507,7 +507,7 @@
H.visible_message("<span class='warning'>[H] thrashes wildly, clutching at their chest!</span>",
"<span class='userdanger'>You feel a horrible agony in your chest!</span>")
H.set_heartattack(TRUE)
H.apply_damage(50, BURN, "chest")
H.apply_damage(50, BURN, BODY_ZONE_CHEST)
add_logs(user, H, "overloaded the heart of", defib)
H.Knockdown(100)
H.Jitter(100)
@@ -626,7 +626,7 @@
icon_state = "defibpaddles0"
item_state = "defibpaddles0"
req_defib = FALSE
/obj/item/twohanded/shockpaddles/cyborg/attack(mob/M, mob/user)
if(iscyborg(user))
var/mob/living/silicon/robot/R = user
@@ -47,7 +47,7 @@
/obj/item/device/flashlight/attack(mob/living/carbon/M, mob/living/carbon/human/user)
add_fingerprint(user)
if(istype(M) && on && user.zone_selected in list("eyes", "mouth"))
if(istype(M) && on && user.zone_selected in list(BODY_ZONE_PRECISE_EYES, BODY_ZONE_PRECISE_MOUTH))
if((user.has_trait(TRAIT_CLUMSY) || user.has_trait(TRAIT_DUMB)) && prob(50)) //too dumb to use flashlight properly
return ..() //just hit them in the head
@@ -56,7 +56,7 @@
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
return
if(!M.get_bodypart("head"))
if(!M.get_bodypart(BODY_ZONE_HEAD))
to_chat(user, "<span class='warning'>[M] doesn't have a head!</span>")
return
@@ -65,7 +65,7 @@
return
switch(user.zone_selected)
if("eyes")
if(BODY_ZONE_PRECISE_EYES)
if((M.head && M.head.flags_cover & HEADCOVERSEYES) || (M.wear_mask && M.wear_mask.flags_cover & MASKCOVERSEYES) || (M.glasses && M.glasses.flags_cover & GLASSESCOVERSEYES))
to_chat(user, "<span class='notice'>You're going to need to remove that [(M.head && M.head.flags_cover & HEADCOVERSEYES) ? "helmet" : (M.wear_mask && M.wear_mask.flags_cover & MASKCOVERSEYES) ? "mask": "glasses"] first.</span>")
return
@@ -90,7 +90,7 @@
else //they're okay!
to_chat(user, "<span class='notice'>[M]'s pupils narrow.</span>")
if("mouth")
if(BODY_ZONE_PRECISE_MOUTH)
if((M.head && M.head.flags_cover & HEADCOVERSMOUTH) || (M.wear_mask && M.wear_mask.flags_cover & MASKCOVERSMOUTH))
to_chat(user, "<span class='notice'>You're going to need to remove that [(M.head && M.head.flags_cover & HEADCOVERSMOUTH) ? "helmet" : "mask"] first.</span>")
@@ -100,7 +100,7 @@
var/list/mouth_organs = new
for(var/obj/item/organ/O in M.internal_organs)
if(O.zone == "mouth")
if(O.zone == BODY_ZONE_PRECISE_MOUTH)
mouth_organs.Add(O)
var/organ_list = ""
var/organ_count = LAZYLEN(mouth_organs)
@@ -372,7 +372,7 @@
return TRUE
/obj/item/device/flashlight/emp/attack(mob/living/M, mob/living/user)
if(on && user.zone_selected in list("eyes", "mouth")) // call original attack when examining organs
if(on && user.zone_selected in list(BODY_ZONE_PRECISE_EYES, BODY_ZONE_PRECISE_MOUTH)) // call original attack when examining organs
..()
return
@@ -89,7 +89,7 @@
//human/alien mobs
if(iscarbon(target))
var/mob/living/carbon/C = target
if(user.zone_selected == "eyes")
if(user.zone_selected == BODY_ZONE_PRECISE_EYES)
add_logs(user, C, "shone in the eyes", src)
var/severity = 1
@@ -109,7 +109,7 @@
jill.emote("scream")
playsound(src, 'sound/effects/snap.ogg', 75, TRUE, frequency = 0.5)
playsound(src, 'sound/effects/splat.ogg', 50, TRUE, frequency = 0.5)
jill.apply_damage(9999, BRUTE, "head")
jill.apply_damage(9999, BRUTE, BODY_ZONE_HEAD)
jill.death() //just in case, for some reason, they're still alive
flash_color(jill, flash_color = "#FF0000", flash_time = 100)
+2 -2
View File
@@ -266,12 +266,12 @@
if(isliving(AM))
var/mob/living/L = AM
var/snap = 0
var/def_zone = "chest"
var/def_zone = BODY_ZONE_CHEST
if(iscarbon(L))
var/mob/living/carbon/C = L
snap = 1
if(!C.lying)
def_zone = pick("l_leg", "r_leg")
def_zone = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
if(!C.legcuffed && C.get_num_legs() >= 2) //beartrap can't cuff your leg if there's already a beartrap or legcuffs, or you don't have two legs.
C.legcuffed = src
forceMove(C)
+2 -2
View File
@@ -48,7 +48,7 @@
icon_state = "fork"
forkload = null
else if(user.zone_selected == "eyes")
else if(user.zone_selected == BODY_ZONE_PRECISE_EYES)
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
M = user
return eyestab(M,user)
@@ -78,7 +78,7 @@
AddComponent(/datum/component/butchering, 80 - force, 100, force - 10) //bonus chance increases depending on force
/obj/item/kitchen/knife/attack(mob/living/carbon/M, mob/living/carbon/user)
if(user.zone_selected == "eyes")
if(user.zone_selected == BODY_ZONE_PRECISE_EYES)
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
M = user
return eyestab(M,user)
+1 -1
View File
@@ -116,7 +116,7 @@
user.Knockdown(60 * force)
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.apply_damage(2*force, BRUTE, "head")
H.apply_damage(2*force, BRUTE, BODY_ZONE_HEAD)
else
user.take_bodypart_damage(2*force)
return
+2 -2
View File
@@ -70,7 +70,7 @@
switch(mode)
if(0)
if(M.health >= 0)
if(user.zone_selected == "head")
if(user.zone_selected == BODY_ZONE_HEAD)
user.visible_message("<span class='notice'>[user] playfully boops [M] on the head!</span>", \
"<span class='notice'>You playfully boop [M] on the head!</span>")
user.do_attack_animation(M, ATTACK_EFFECT_BOOP)
@@ -95,7 +95,7 @@
if(M.lying)
user.visible_message("<span class='notice'>[user] shakes [M] trying to get [M.p_them()] up!</span>", \
"<span class='notice'>You shake [M] trying to get [M.p_them()] up!</span>")
else if(user.zone_selected == "head")
else if(user.zone_selected == BODY_ZONE_HEAD)
user.visible_message("<span class='warning'>[user] bops [M] on the head!</span>", \
"<span class='warning'>You bop [M] on the head!</span>")
user.do_attack_animation(M, ATTACK_EFFECT_PUNCH)
+5 -1
View File
@@ -156,7 +156,7 @@
/obj/item/storage/bag/bio,
/obj/item/reagent_containers/blood,
/obj/item/tank/internals/emergency_oxygen,
/obj/item/pinpointer/crew,
/obj/item/pinpointer/crew,
/obj/item/gun/syringe/syndicate,
/obj/item/implantcase,
/obj/item/implant,
@@ -278,6 +278,10 @@
for(var/i in 1 to 6)
new /obj/item/device/soulstone(src)
/obj/item/storage/belt/soulstone/full/chappy/PopulateContents()
for(var/i in 1 to 6)
new /obj/item/device/soulstone/anybody/chaplain(src)
/obj/item/storage/belt/champion
name = "championship belt"
desc = "Proves to the world that you are the strongest!"
+2 -4
View File
@@ -96,9 +96,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
H.visible_message("<span class='notice'>[user] heals [H] with the power of [deity_name]!</span>")
to_chat(H, "<span class='boldnotice'>May the power of [deity_name] compel you to be healed!</span>")
playsound(src.loc, "punch", 25, 1, -1)
GET_COMPONENT_FROM(mood, /datum/component/mood, H)
if(mood)
mood.add_event("blessing", /datum/mood_event/blessing)
H.SendSignal(COMSIG_ADD_MOOD_EVENT, "blessing", /datum/mood_event/blessing)
return 1
/obj/item/storage/book/bible/attack(mob/living/M, mob/living/carbon/human/user, heal_mode = TRUE)
@@ -215,7 +213,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
uses -= 1
to_chat(H, "<span class='userdanger'>You try to open the book AND IT BITES YOU!</span>")
playsound(src.loc, 'sound/effects/snap.ogg', 50, 1)
H.apply_damage(5, BRUTE, pick("l_arm", "r_arm"))
H.apply_damage(5, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
to_chat(H, "<span class='notice'>Your name appears on the inside cover, in blood.</span>")
var/ownername = H.real_name
desc += "<span class='warning'>The name [ownername] is written in blood inside the cover.</span>"
+1 -1
View File
@@ -37,7 +37,7 @@
update_icon()
/obj/item/storage/box/suicide_act(mob/living/carbon/user)
var/obj/item/bodypart/head/myhead = user.get_bodypart("head")
var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD)
if(myhead)
user.visible_message("<span class='suicide'>[user] puts [user.p_their()] head into \the [src], and begins closing it! It looks like [user.p_theyre()] trying to commit suicide!</span>")
myhead.dismember()
+1 -1
View File
@@ -73,7 +73,7 @@
/obj/item/screwdriver/attack(mob/living/carbon/M, mob/living/carbon/user)
if(!istype(M))
return ..()
if(user.zone_selected != "eyes" && user.zone_selected != "head")
if(user.zone_selected != BODY_ZONE_PRECISE_EYES && user.zone_selected != BODY_ZONE_HEAD)
return ..()
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
M = user
+1 -1
View File
@@ -99,7 +99,7 @@
playsound(loc, 'sound/items/jaws_cut.ogg', 50, 1, -1)
if(iscarbon(user))
var/mob/living/carbon/C = user
var/obj/item/bodypart/BP = C.get_bodypart("head")
var/obj/item/bodypart/BP = C.get_bodypart(BODY_ZONE_HEAD)
if(BP)
BP.drop_limb()
playsound(loc,pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg') ,50, 1, -1)
+4 -4
View File
@@ -294,7 +294,7 @@
if(wielded)
user.visible_message("<span class='suicide'>[user] begins spinning way too fast! It looks like [user.p_theyre()] trying to commit suicide!</span>")
var/obj/item/bodypart/head/myhead = user.get_bodypart("head")//stole from chainsaw code
var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD)//stole from chainsaw code
var/obj/item/organ/brain/B = user.getorganslot(ORGAN_SLOT_BRAIN)
B.vital = FALSE//this cant possibly be a good idea
var/randdir
@@ -578,7 +578,7 @@
if(on)
user.visible_message("<span class='suicide'>[user] begins to tear [user.p_their()] head off with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
playsound(src, 'sound/weapons/chainsawhit.ogg', 100, 1)
var/obj/item/bodypart/head/myhead = user.get_bodypart("head")
var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD)
if(myhead)
myhead.dismember()
else
@@ -705,14 +705,14 @@
"<span class='warning'>\"As you pick up [src] your arms ignite, reminding you of all your past sins.\"</span>")
if(ishuman(U))
var/mob/living/carbon/human/H = U
H.apply_damage(rand(force/2, force), BURN, pick("l_arm", "r_arm"))
H.apply_damage(rand(force/2, force), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
else
U.adjustFireLoss(rand(force/2,force))
/obj/item/twohanded/pitchfork/demonic/attack(mob/target, mob/living/carbon/human/user)
if(user.mind && user.owns_soul() && !is_devil(user))
to_chat(user, "<span class ='warning'>[src] burns in your hands.</span>")
user.apply_damage(rand(force/2, force), BURN, pick("l_arm", "r_arm"))
user.apply_damage(rand(force/2, force), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
..()
/obj/item/twohanded/pitchfork/demonic/ascended/afterattack(atom/target, mob/user, proximity)
+6 -2
View File
@@ -19,7 +19,7 @@
return (BRUTELOSS|FIRELOSS|TOXLOSS|OXYLOSS)
/obj/item/banhammer/attack(mob/M, mob/user)
if(user.zone_selected == "head")
if(user.zone_selected == BODY_ZONE_HEAD)
M.visible_message("<span class='danger'>[user] are stroking the head of [M] with a bangammer</span>", "<span class='userdanger'>[user] are stroking the head with a bangammer</span>", "you hear a bangammer stroking a head");
else
M.visible_message("<span class='danger'>[M] has been banned FOR NO REISIN by [user]</span>", "<span class='userdanger'>You have been banned FOR NO REISIN by [user]</span>", "you hear a banhammer banning someone")
@@ -444,6 +444,10 @@
throw_range = 2
attack_verb = list("busted")
/obj/item/statuebust/Initialize()
. = ..()
addtimer(CALLBACK(src, /datum.proc/AddComponent, /datum/component/beauty, 1000), 0)
/obj/item/tailclub
name = "tail club"
desc = "For the beating to death of lizards with their own tails."
@@ -605,7 +609,7 @@
if(ishuman(M))
var/mob/living/carbon/human/L = M
L.endTailWag()
if(user.a_intent != INTENT_HARM && ((user.zone_selected == "mouth") || (user.zone_selected == "eyes") || (user.zone_selected == "head")))
if(user.a_intent != INTENT_HARM && ((user.zone_selected == BODY_ZONE_PRECISE_MOUTH) || (user.zone_selected == BODY_ZONE_PRECISE_EYES) || (user.zone_selected == BODY_ZONE_HEAD)))
user.do_attack_animation(M)
playsound(M, 'sound/weapons/slap.ogg', 50, 1, -1)
user.visible_message("<span class='danger'>[user] slaps [M]!</span>",
+4
View File
@@ -291,6 +291,10 @@
throw_speed = 2
throw_range = 4
/obj/item/twohanded/required/kirbyplants/Initialize()
. = ..()
addtimer(CALLBACK(src, /datum.proc/AddComponent, /datum/component/beauty, 750), 0)
/obj/item/twohanded/required/kirbyplants/equipped(mob/living/user)
var/image/I = image(icon = 'icons/obj/flora/plants.dmi' , icon_state = src.icon_state, loc = user)
I.copy_overlays(src)
+1 -1
View File
@@ -217,7 +217,7 @@
H.dna.update_ui_block(DNA_FACIAL_HAIR_COLOR_BLOCK)
H.update_hair()
if("eyes")
if(BODY_ZONE_PRECISE_EYES)
var/new_eye_color = input(H, "Choose your eye color", "Eye Color","#"+H.eye_color) as color|null
if(!Adjacent(user))
return
+6 -2
View File
@@ -11,6 +11,10 @@
anchored = TRUE
var/deconstruction_state = SHOWCASE_CONSTRUCTED
/obj/structure/showcase/Initialize()
. = ..()
addtimer(CALLBACK(src, /datum.proc/AddComponent, /datum/component/beauty, 750), 0)
/obj/structure/showcase/fakeid
name = "\improper CentCom identification console"
desc = "You can use this to change ID's."
@@ -18,7 +22,7 @@
icon_state = "computer"
/obj/structure/showcase/fakeid/Initialize()
..()
. = ..()
add_overlay("id")
add_overlay("id_key")
@@ -29,7 +33,7 @@
icon_state = "computer"
/obj/structure/showcase/fakesec/Initialize()
..()
. = ..()
add_overlay("security")
add_overlay("security_key")
+5
View File
@@ -10,6 +10,11 @@
var/material_drop_type = /obj/item/stack/sheet/metal
CanAtmosPass = ATMOS_PASS_DENSITY
/obj/structure/statue/Initialize()
. = ..()
addtimer(CALLBACK(src, /datum.proc/AddComponent, /datum/component/beauty, 1250), 0)
/obj/structure/statue/attackby(obj/item/W, mob/living/user, params)
add_fingerprint(user)
user.changeNext_move(CLICK_CD_MELEE)
+1 -8
View File
@@ -116,14 +116,7 @@
if(!ishuman(pushed_mob))
return
var/mob/living/carbon/human/H = pushed_mob
GET_COMPONENT_FROM(mood, /datum/component/mood, H)
if(mood)
if(iscatperson(H)) //Catpeople are a bit dumb and think its fun to be on a table
mood.add_event("table", /datum/mood_event/happytable)
H.startTailWag()
addtimer(CALLBACK(H, /mob/living/carbon/human.proc/endTailWag), 30)
else
mood.add_event("table", /datum/mood_event/table)
H.SendSignal(COMSIG_ADD_MOOD_EVENT, "table", /datum/mood_event/table)
/obj/structure/table/attackby(obj/item/I, mob/user, params)
if(!(flags_1 & NODECONSTRUCT_1))
+2 -4
View File
@@ -335,9 +335,7 @@
L.ExtinguishMob()
L.adjust_fire_stacks(-20) //Douse ourselves with water to avoid fire more easily
L.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
GET_COMPONENT_FROM(mood, /datum/component/mood, L)
if(mood)
mood.add_event("shower", /datum/mood_event/nice_shower)
L.SendSignal(COMSIG_ADD_MOOD_EVENT, "shower", /datum/mood_event/nice_shower)
if(iscarbon(L))
var/mob/living/carbon/M = L
. = TRUE
@@ -466,7 +464,7 @@
return
var/selected_area = parse_zone(user.zone_selected)
var/washing_face = 0
if(selected_area in list("head", "mouth", "eyes"))
if(selected_area in list(BODY_ZONE_HEAD, BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_PRECISE_EYES))
washing_face = 1
user.visible_message("<span class='notice'>[user] starts washing their [washing_face ? "face" : "hands"]...</span>", \
"<span class='notice'>You start washing your [washing_face ? "face" : "hands"]...</span>")
+2 -4
View File
@@ -7,7 +7,7 @@
var/list/archdrops
var/wet
/turf/open/Initialize()
/turf/open/ComponentInitialize()
. = ..()
if(wet)
AddComponent(/datum/component/wet_floor, wet, INFINITY, 0, INFINITY, TRUE)
@@ -203,9 +203,7 @@
if(!(lube&SLIDE_ICE))
playsound(C.loc, 'sound/misc/slip.ogg', 50, 1, -3)
GET_COMPONENT_FROM(mood, /datum/component/mood, C)
if(mood)
mood.add_event("slipped", /datum/mood_event/slipped)
C.SendSignal(COMSIG_ADD_MOOD_EVENT, "slipped", /datum/mood_event/slipped)
for(var/obj/item/I in C.held_items)
C.accident(I)
+6 -1
View File
@@ -218,6 +218,11 @@
else if(istype(W, /obj/item/poster))
place_poster(W,user)
return TRUE
//wall mounted IC assembly stuff
else if(istype(W, /obj/item/device/electronic_assembly/wallmount))
var/obj/item/device/electronic_assembly/wallmount/A = W
A.mount_assembly(src, user)
return TRUE
return FALSE
@@ -303,5 +308,5 @@
cut_overlay(dent_decals)
LAZYADD(dent_decals, decal)
add_overlay(dent_decals)
#undef MAX_DENT_DECALS
@@ -286,6 +286,7 @@
.["mainsettings"]["teamsize"]["value"] = newtemplate.teamsize
.["mainsettings"]["mission"]["value"] = newtemplate.mission
.["mainsettings"]["polldesc"]["value"] = newtemplate.polldesc
.["mainsettings"]["open_armory"]["value"] = newtemplate.opendoors ? "Yes" : "No"
/datum/admins/proc/equipAntagOnDummy(mob/living/carbon/human/dummy/mannequin, datum/antagonist/antag)
@@ -352,6 +353,7 @@
"mission" = list("desc" = "Mission", "type" = "string", "value" = ertemplate.mission),
"polldesc" = list("desc" = "Ghost poll description", "string" = "text", "value" = ertemplate.polldesc),
"enforce_human" = list("desc" = "Enforce human authority", "type" = "boolean", "value" = "[(CONFIG_GET(flag/enforce_human_authority) ? "Yes" : "No")]"),
"open_armory" = list("desc" = "Open armory doors", "type" = "boolean", "value" = "[(ertemplate.opendoors ? "Yes" : "No")]"),
)
)
@@ -374,6 +376,7 @@
ertemplate.mission = prefs["mission"]["value"]
ertemplate.polldesc = prefs["polldesc"]["value"]
ertemplate.enforce_human = prefs["enforce_human"]["value"] == "Yes" ? TRUE : FALSE
ertemplate.opendoors = prefs["open_armory"]["value"] == "Yes" ? TRUE : FALSE
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for [ertemplate.polldesc] ?", "deathsquad", null)
var/teamSpawned = FALSE
@@ -109,16 +109,12 @@ GLOBAL_LIST_EMPTY(antagonists)
/datum/antagonist/proc/give_antag_moodies()
if(!antag_moodlet)
return
GET_COMPONENT_FROM(mood, /datum/component/mood, owner.current)
if(mood)
mood.add_event("antag_moodlet", antag_moodlet)
owner.current.SendSignal(COMSIG_ADD_MOOD_EVENT, "antag_moodlet", antag_moodlet)
/datum/antagonist/proc/clear_antag_moodies()
if(!antag_moodlet)
return
GET_COMPONENT_FROM(mood, /datum/component/mood, owner.current)
if(mood)
mood.add_event("antag_moodlet")
owner.current.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "antag_moodlet")
//Returns the team antagonist belongs to if any.
/datum/antagonist/proc/get_team()
@@ -1,7 +1,7 @@
/datum/surgery/organ_extraction
name = "experimental dissection"
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/incise, /datum/surgery_step/extract_organ, /datum/surgery_step/gland_insert)
possible_locs = list("chest")
possible_locs = list(BODY_ZONE_CHEST)
ignore_clothes = 1
/datum/surgery/organ_extraction/can_start(mob/user, mob/living/carbon/target)
@@ -11,7 +11,7 @@
if(alert("Are we sure we wish to kill ourself and create a headslug?",,"Yes", "No") == "No")
return
var/datum/mind/M = user.mind
var/list/organs = user.getorganszone("head", 1)
var/list/organs = user.getorganszone(BODY_ZONE_HEAD, 1)
for(var/obj/item/organ/I in organs)
I.Remove(user, 1)
@@ -43,9 +43,9 @@
return
var/limb_regen = 0
if(user.active_hand_index % 2 == 0) //we regen the arm before changing it into the weapon
limb_regen = user.regenerate_limb("r_arm", 1)
limb_regen = user.regenerate_limb(BODY_ZONE_R_ARM, 1)
else
limb_regen = user.regenerate_limb("l_arm", 1)
limb_regen = user.regenerate_limb(BODY_ZONE_L_ARM, 1)
if(limb_regen)
user.visible_message("<span class='warning'>[user]'s missing arm reforms, making a loud, grotesque sound!</span>", "<span class='userdanger'>Your arm regrows, making a loud, crunchy sound and giving you great pain!</span>", "<span class='italics'>You hear organic matter ripping and tearing!</span>")
user.emote("scream")
@@ -307,7 +307,7 @@
for(var/obj/item/I in H.held_items)
if(I.is_sharp())
C.visible_message("<span class='danger'>[H] impales [C] with [H.p_their()] [I.name]!</span>", "<span class='userdanger'>[H] impales you with [H.p_their()] [I.name]!</span>")
C.apply_damage(I.force, BRUTE, "chest")
C.apply_damage(I.force, BRUTE, BODY_ZONE_CHEST)
H.do_item_attack_animation(C, used_item = I)
H.add_mob_blood(C)
playsound(get_turf(H),I.hitsound,75,1)
@@ -1,36 +1,36 @@
/obj/effect/proc_holder/changeling/revive
name = "Revive"
desc = "We regenerate, healing all damage from our form."
helptext = "Does not regrow lost organs or a missing head."
req_stat = DEAD
always_keep = TRUE
ignores_fakedeath = TRUE
//Revive from revival stasis
/obj/effect/proc_holder/changeling/revive/sting_action(mob/living/carbon/user)
user.cure_fakedeath("changeling")
user.revive(full_heal = 1)
var/list/missing = user.get_missing_limbs()
missing -= "head" // headless changelings are funny
if(missing.len)
playsound(user, 'sound/magic/demon_consume.ogg', 50, 1)
user.visible_message("<span class='warning'>[user]'s missing limbs \
reform, making a loud, grotesque sound!</span>",
"<span class='userdanger'>Your limbs regrow, making a \
loud, crunchy sound and giving you great pain!</span>",
"<span class='italics'>You hear organic matter ripping \
and tearing!</span>")
user.emote("scream")
user.regenerate_limbs(0, list("head"))
user.regenerate_organs()
to_chat(user, "<span class='notice'>We have revived ourselves.</span>")
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
changeling.purchasedpowers -= src
return TRUE
/obj/effect/proc_holder/changeling/revive/can_be_used_by(mob/living/user)
if((user.stat != DEAD) && !(user.has_trait(TRAIT_FAKEDEATH)))
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
changeling.purchasedpowers -= src
return 0
/obj/effect/proc_holder/changeling/revive
name = "Revive"
desc = "We regenerate, healing all damage from our form."
helptext = "Does not regrow lost organs or a missing head."
req_stat = DEAD
always_keep = TRUE
ignores_fakedeath = TRUE
//Revive from revival stasis
/obj/effect/proc_holder/changeling/revive/sting_action(mob/living/carbon/user)
user.cure_fakedeath("changeling")
user.revive(full_heal = 1)
var/list/missing = user.get_missing_limbs()
missing -= BODY_ZONE_HEAD // headless changelings are funny
if(missing.len)
playsound(user, 'sound/magic/demon_consume.ogg', 50, 1)
user.visible_message("<span class='warning'>[user]'s missing limbs \
reform, making a loud, grotesque sound!</span>",
"<span class='userdanger'>Your limbs regrow, making a \
loud, crunchy sound and giving you great pain!</span>",
"<span class='italics'>You hear organic matter ripping \
and tearing!</span>")
user.emote("scream")
user.regenerate_limbs(0, list(BODY_ZONE_HEAD))
user.regenerate_organs()
to_chat(user, "<span class='notice'>We have revived ourselves.</span>")
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
changeling.purchasedpowers -= src
return TRUE
/obj/effect/proc_holder/changeling/revive/can_be_used_by(mob/living/user)
if((user.stat != DEAD) && !(user.has_trait(TRAIT_FAKEDEATH)))
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
changeling.purchasedpowers -= src
return 0
. = ..()
@@ -48,7 +48,7 @@
to_chat(user, "<span class='heavy_brass'>\"Do you have a hole in your head? You're about to.\"</span>")
to_chat(user, "<span class='userdanger'>The helmet tries to drive a spike through your head as you scramble to remove it!</span>")
user.emote("scream")
user.apply_damage(30, BRUTE, "head")
user.apply_damage(30, BRUTE, BODY_ZONE_HEAD)
user.adjustBrainLoss(30)
addtimer(CALLBACK(user, /mob/living.proc/dropItemToGround), src, 1) //equipped happens before putting stuff on(but not before picking items up), 1). thus, we need to wait for it to be on before forcing it off.
@@ -114,7 +114,7 @@
to_chat(user, "<span class='heavy_brass'>\"I think this armor is too hot for you to handle.\"</span>")
to_chat(user, "<span class='userdanger'>The curiass emits a burst of flame as you scramble to get it off!</span>")
user.emote("scream")
user.apply_damage(15, BURN, "chest")
user.apply_damage(15, BURN, BODY_ZONE_CHEST)
user.adjust_fire_stacks(2)
user.IgniteMob()
addtimer(CALLBACK(user, /mob/living.proc/dropItemToGround, src, TRUE), 1)
@@ -175,8 +175,8 @@
to_chat(user, "<span class='heavy_brass'>\"Did you like having arms?\"</span>")
to_chat(user, "<span class='userdanger'>The gauntlets suddenly squeeze tight, crushing your arms before you manage to get them off!</span>")
user.emote("scream")
user.apply_damage(7, BRUTE, "l_arm")
user.apply_damage(7, BRUTE, "r_arm")
user.apply_damage(7, BRUTE, BODY_ZONE_L_ARM)
user.apply_damage(7, BRUTE, BODY_ZONE_R_ARM)
addtimer(CALLBACK(user, /mob/living.proc/dropItemToGround, src, TRUE), 1)
/obj/item/clothing/shoes/clockwork
@@ -225,6 +225,6 @@
to_chat(user, "<span class='heavy_brass'>\"Let's see if you can dance with these.\"</span>")
to_chat(user, "<span class='userdanger'>The treads turn searing hot as you scramble to get them off!</span>")
user.emote("scream")
user.apply_damage(7, BURN, "l_leg")
user.apply_damage(7, BURN, "r_leg")
user.apply_damage(7, BURN, BODY_ZONE_L_LEG)
user.apply_damage(7, BURN, BODY_ZONE_R_LEG)
addtimer(CALLBACK(user, /mob/living.proc/dropItemToGround, src, TRUE), 1)
@@ -143,8 +143,8 @@
playsound(get_turf(user), 'sound/weapons/sear.ogg', 50, 1)
user.dropItemToGround(src)
user.emote("scream")
user.apply_damage(5, BURN, "l_arm")
user.apply_damage(5, BURN, "r_arm")
user.apply_damage(5, BURN, BODY_ZONE_L_ARM)
user.apply_damage(5, BURN, BODY_ZONE_R_ARM)
return 0
if(!is_servant_of_ratvar(user))
to_chat(user, "<span class='warning'>The information on [src]'s display shifts rapidly. After a moment, your head begins to pound, and you tear your eyes away.</span>")
@@ -79,7 +79,7 @@
if(I.flags_inv & HIDEHAIR) //they're wearing a mask that covers their skull
to_chat(user, "<span class='warning'>[H]'s head is covered, remove [H.wear_mask] first!</span>")
return
var/obj/item/bodypart/head/HE = H.get_bodypart("head")
var/obj/item/bodypart/head/HE = H.get_bodypart(BODY_ZONE_HEAD)
if(!HE) //literally headless
to_chat(user, "<span class='warning'>[H] has no head, and thus no mind to claim!</span>")
return
@@ -64,7 +64,7 @@
squirrel.emote("scream")
playsound(squirrel, 'sound/effects/splat.ogg', 50, TRUE)
playsound(squirrel, 'sound/misc/desceration-03.ogg', 50, TRUE)
squirrel.apply_damage(20, BRUTE, "chest")
squirrel.apply_damage(20, BRUTE, BODY_ZONE_CHEST)
mouse_opacity = MOUSE_OPACITY_OPAQUE //So players can interact with the tile it's on to pull them off
buckle_mob(squirrel, TRUE)
else
@@ -96,7 +96,7 @@
if(!do_after(user, 300, target = user))
user.visible_message("<span class='warning'>[user] slides back down [src]!</span>")
user.emote("scream")
user.apply_damage(10, BRUTE, "chest")
user.apply_damage(10, BRUTE, BODY_ZONE_CHEST)
playsound(user, 'sound/misc/desceration-03.ogg', 50, TRUE)
wiggle_wiggle = FALSE
return
+2 -2
View File
@@ -385,9 +385,9 @@
user.whisper(invocation, language = /datum/language/common)
if(health_cost)
if(user.active_hand_index == 1)
user.apply_damage(health_cost, BRUTE, "l_arm")
user.apply_damage(health_cost, BRUTE, BODY_ZONE_L_ARM)
else
user.apply_damage(health_cost, BRUTE, "r_arm")
user.apply_damage(health_cost, BRUTE, BODY_ZONE_R_ARM)
if(uses <= 0)
qdel(src)
else if(source)

Some files were not shown because too many files have changed in this diff Show More