diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index bf0a0cb141..275cf95856 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -6155,6 +6155,9 @@ /turf/closed/wall/r_wall, /area/command/heads_quarters/cmo) "ajH" = ( +/obj/machinery/door/window/eastleft{ + req_access_txt = "48;50" + }, /obj/structure/plasticflaps/opaque, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, @@ -10523,6 +10526,7 @@ dir = 1 }, /obj/effect/turf_decal/stripes/line, +/obj/structure/closet/secure_closet/contraband/armory, /turf/open/floor/plasteel, /area/security/brig) "aqC" = ( @@ -20157,17 +20161,21 @@ /turf/open/floor/plasteel, /area/engineering/main) "aFB" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/airalarm{ - pixel_y = 24 - }, /obj/machinery/camera{ c_tag = "Starboard Bow Solar"; network = list("ss13","engine") }, +/obj/machinery/power/solar_control{ + id = "forestarboard"; + name = "Starboard Bow Solar Control" + }, +/obj/structure/cable{ + icon_state = "0-8" + }, /obj/structure/cable{ icon_state = "4-8" }, +/obj/effect/turf_decal/bot, /turf/open/floor/plating, /area/maintenance/solars/starboard/fore) "aFC" = ( @@ -23300,7 +23308,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/space/basic, +/turf/open/floor/plating, /area/maintenance/port/aft) "aKo" = ( /obj/structure/lattice, @@ -24244,13 +24252,10 @@ /turf/open/floor/plasteel, /area/engineering/gravity_generator) "aLL" = ( -/obj/effect/turf_decal/box, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/power/tracker, -/turf/open/floor/plasteel/airless/solarpanel, -/area/solars/port/aft) +/obj/structure/grille, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "aLM" = ( /obj/structure/cable/white{ icon_state = "1-2" @@ -32798,7 +32803,6 @@ pixel_x = -32; pixel_y = 32 }, -/obj/effect/turf_decal/delivery, /obj/structure/cable{ icon_state = "4-8" }, @@ -32811,6 +32815,7 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/effect/turf_decal/caution, /turf/open/floor/plasteel, /area/maintenance/solars/port/aft) "bal" = ( @@ -33358,13 +33363,13 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "bbf" = ( -/obj/machinery/power/smes, /obj/machinery/camera{ c_tag = "Port Quarter Solar"; dir = 4; network = list("ss13","engine") }, -/obj/structure/cable{ +/obj/machinery/power/smes, +/obj/structure/cable/white{ icon_state = "0-4" }, /turf/open/floor/plating, @@ -33379,6 +33384,9 @@ icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/white{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/maintenance/solars/port/aft) "bbi" = ( @@ -33389,10 +33397,7 @@ pixel_x = 24 }, /obj/structure/cable/white{ - icon_state = "2-8" - }, -/obj/structure/cable/white{ - icon_state = "0-2" + icon_state = "0-8" }, /turf/open/floor/plating, /area/maintenance/solars/port/aft) @@ -33481,10 +33486,10 @@ /obj/machinery/power/terminal{ dir = 1 }, -/obj/effect/turf_decal/delivery, -/obj/structure/cable/white{ +/obj/structure/cable{ icon_state = "0-4" }, +/obj/effect/turf_decal/delivery, /turf/open/floor/plating, /area/maintenance/solars/port/aft) "bbp" = ( @@ -33831,9 +33836,15 @@ /area/solars/starboard/fore) "bbR" = ( /obj/machinery/light/small, -/obj/structure/cable/white{ - icon_state = "1-8" +/obj/machinery/power/solar_control{ + dir = 8; + id = "aftport"; + name = "Port Quarter Solar Control" }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/effect/turf_decal/bot, /turf/open/floor/plating, /area/maintenance/solars/port/aft) "bbS" = ( @@ -33881,7 +33892,6 @@ /turf/open/floor/plating/airless, /area/solars/starboard/fore) "bbZ" = ( -/obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -33891,6 +33901,7 @@ /obj/machinery/light/small{ dir = 8 }, +/obj/effect/turf_decal/caution, /turf/open/floor/plasteel, /area/maintenance/solars/starboard/fore) "bca" = ( @@ -33902,7 +33913,6 @@ dir = 8 }, /obj/effect/landmark/xeno_spawn, -/obj/effect/turf_decal/delivery, /obj/structure/cable{ icon_state = "4-8" }, @@ -34318,25 +34328,19 @@ /turf/open/floor/plating, /area/maintenance/solars/starboard/fore) "bcJ" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/effect/turf_decal/box, -/obj/machinery/power/tracker, -/turf/open/floor/plasteel/airless/solarpanel, -/area/solars/starboard/fore) +/obj/structure/lattice, +/obj/structure/grille, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "bcK" = ( -/obj/machinery/power/solar_control{ - id = "forestarboard"; - name = "Starboard Bow Solar Control" - }, -/obj/effect/turf_decal/bot, /obj/machinery/power/terminal{ dir = 4 }, /obj/structure/cable{ icon_state = "0-8" }, +/obj/effect/turf_decal/delivery, /turf/open/floor/plating, /area/maintenance/solars/starboard/fore) "bcL" = ( @@ -34400,6 +34404,10 @@ /obj/structure/cable/white{ icon_state = "1-8" }, +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, /turf/open/floor/plating, /area/maintenance/solars/starboard/fore) "bcS" = ( @@ -34889,14 +34897,11 @@ /turf/open/floor/plating/airless, /area/solars/starboard/fore) "bdC" = ( -/obj/machinery/power/solar_control{ - id = "aftport"; - name = "Port Quarter Solar Control" - }, -/obj/effect/turf_decal/bot, -/obj/structure/cable, /obj/structure/cable{ - icon_state = "1-8" + icon_state = "1-2" + }, +/obj/structure/cable/white{ + icon_state = "4-8" }, /turf/open/floor/plating, /area/maintenance/solars/port/aft) @@ -34926,17 +34931,17 @@ }, /area/command/heads_quarters/rd) "bdE" = ( -/obj/machinery/power/apc{ - areastring = "/area/maintenance/solars/starboard/fore"; - name = "Starboard Bow Solar APC"; - pixel_y = -26 - }, /obj/structure/cable/white{ icon_state = "4-8" }, /obj/structure/cable/white{ icon_state = "0-8" }, +/obj/machinery/power/apc{ + areastring = "/area/maintenance/solars/starboard/fore"; + name = "Starboard Bow Solar APC"; + pixel_y = -26 + }, /turf/open/floor/plating, /area/maintenance/solars/starboard/fore) "bdF" = ( @@ -34963,7 +34968,7 @@ dir = 1; pixel_y = -22 }, -/obj/structure/cable/white{ +/obj/structure/cable{ icon_state = "4-8" }, /turf/open/floor/plating, @@ -36808,8 +36813,11 @@ /turf/open/floor/engine, /area/maintenance/disposal/incinerator) "bgk" = ( -/obj/structure/cable/white{ - icon_state = "4-8" +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" }, /turf/open/floor/plating, /area/maintenance/solars/port/aft) @@ -40900,6 +40908,10 @@ }, /turf/closed/wall/r_wall, /area/science/mixing) +"eDE" = ( +/obj/effect/landmark/carpspawn, +/turf/open/space/basic, +/area/space/station_ruins) "eOg" = ( /obj/structure/closet/crate{ icon_state = "crateopen" @@ -47272,6 +47284,14 @@ /obj/item/pickaxe, /turf/open/floor/plating, /area/engineering/atmos) +"uBW" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/effect/turf_decal/box, +/obj/machinery/power/tracker, +/turf/open/floor/plasteel/airless/solarpanel, +/area/solars/starboard/fore) "uCY" = ( /turf/open/pool, /area/maintenance/starboard/aft) @@ -47650,6 +47670,14 @@ "vMb" = ( /turf/open/floor/engine/n2o, /area/engineering/atmos) +"vPH" = ( +/obj/effect/turf_decal/box, +/obj/machinery/power/tracker, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel/airless/solarpanel, +/area/solars/port/aft) "vPZ" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 @@ -47778,6 +47806,13 @@ }, /turf/open/floor/plasteel/dark, /area/command/bridge) +"wle" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/space/basic, +/area/solars/starboard/fore) "wqL" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 4 @@ -71072,7 +71107,7 @@ jFP jFP jFP jFP -jFP +eDE jFP jFP jFP @@ -71584,23 +71619,23 @@ jFP jFP jFP jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa jFP jFP jFP @@ -71841,23 +71876,23 @@ jFP jFP jFP jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa jFP jFP jFP @@ -72098,23 +72133,23 @@ jFP jFP jFP jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa jFP jFP jFP @@ -72355,23 +72390,23 @@ jFP jFP jFP jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP +aaa +aaa +fMP +sdX +aLL +aLL +aLL +sdX +vPH +sdX +aLL +aLL +aLL +sdX +aLL +aaa +aaa jFP jFP jFP @@ -72612,23 +72647,23 @@ jFP jFP jFP jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP +aaa +aaa +fMP +aaa +aaa +aaa +aaa +aaa +aMH +aaa +aaa +aaa +aaa +aaa +aLL +aaa +aaa jFP jFP jFP @@ -72869,21 +72904,21 @@ jFP jFP jFP jFP -jFP -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aaa aaa +fMP aaa +aKr +aKr +aKr +aKr +aMI +aKr +aKr +aKr +aKr aaa +aLL aaa aaa jFP @@ -73126,21 +73161,21 @@ jFP jFP jFP jFP -jFP -aaa -aaa -aaa -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aaa aaa +sdX +sdX +aKB +aLz +aLz +aLz +aMQ +bar +bar +bar +bbS +sdX +sdX aaa aaa jFP @@ -73385,19 +73420,19 @@ aaa aaa aaa aaa -pZU -sdX -pZU -pZU -pZU -sdX aLL -sdX -pZU -pZU -pZU -sdX -pZU +aaa +aKF +aKF +aKF +aKF +aMH +aKF +aKF +aKF +aKF +aaa +bcJ aaa aaa jFP @@ -73642,13 +73677,13 @@ aaa aaa aaa aaa -pZU +aLL aaa aaa aaa aaa aaa -aMH +aZS aaa aaa aaa @@ -96711,7 +96746,7 @@ aaa aaa aaa aaa -pZU +sdX aaa aaa aaa @@ -96723,7 +96758,7 @@ aaa aaa aaa aaa -pZU +sdX aaa aaa aaa @@ -96968,7 +97003,7 @@ aaa aaa aaa aaa -sdX +aLL aaa abL abL @@ -96980,7 +97015,7 @@ abL abL abL aaa -sdX +pZU aaa aaa aaa @@ -97225,7 +97260,7 @@ jFP aaa aaa aaa -pZU +aLL sdX abM bbQ @@ -97482,13 +97517,13 @@ jFP aaa aaa aaa -pZU +aLL aaa acu acu acu acu -aef +wle acu acu acu @@ -97739,19 +97774,19 @@ jFP aaa aaa aaa -pZU +sdX aaa aaa aaa aaa aaa -adt +aef aaa aaa aaa aaa aaa -pZU +sdX aaa aaa aaa @@ -97996,19 +98031,19 @@ jFP aaa aaa aaa -sdX -sdX -pZU -pZU -pZU -sdX bcJ -sdX +aaa +abL +abL +abL +abL +adt +abL +abL +abL +abL +aaa pZU -pZU -pZU -sdX -sdX aaa aaa aaa @@ -98253,19 +98288,19 @@ jFP aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aLL +sdX +abM +bbQ +bbQ +bbQ +adM +bbV +bbV +bbV +bcD +sdX +pZU aaa aaa aaa @@ -98510,19 +98545,19 @@ jFP aaa aaa aaa +pZU aaa +acu +acu +acu +acu +aef +acu +acu +acu +acu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +pZU aaa aaa aaa @@ -98767,19 +98802,19 @@ jFP aaa aaa aaa +pZU aaa aaa aaa aaa aaa +adt aaa aaa aaa aaa aaa -aaa -aaa -aaa +pZU aaa aaa aaa @@ -99024,19 +99059,19 @@ jFP aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +pZU +sdX +pZU +pZU +pZU +sdX +uBW +sdX +pZU +pZU +pZU +sdX +pZU aaa aaa aaa @@ -99536,23 +99571,23 @@ jFP jFP jFP jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa jFP jFP jFP @@ -99793,23 +99828,23 @@ jFP jFP jFP jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa jFP jFP jFP diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index fdded58308..dad0f49832 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -359,6 +359,9 @@ #define COMSIG_LIVING_RUN_BLOCK "living_do_run_block" //from base of mob/living/do_run_block(): (real_attack, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone) #define COMSIG_LIVING_GET_BLOCKING_ITEMS "get_blocking_items" //from base of mob/living/get_blocking_items(): (list/items) +#define COMSIG_LIVING_RESTING "living_on_resting" //from mob/living/set_resting +#define COMSIG_LIVING_STOPPED_PULLING "living_on_stop_pulling" //from mob/living/stop_pulling + #define COMSIG_LIVING_ACTIVE_BLOCK_START "active_block_start" //from base of mob/living/keybind_start_active_blocking(): (obj/item/blocking_item, list/backup_items) #define COMPONENT_PREVENT_BLOCK_START 1 #define COMSIG_LIVING_ACTIVE_PARRY_START "active_parry_start" //from base of mob/living/initiate_parry_sequence(): (parrying_method, datum/parrying_item_mob_or_art, list/backup_items, list/override) diff --git a/code/__DEFINES/research.dm b/code/__DEFINES/research.dm index 4b8b2c797e..55c3ac8772 100644 --- a/code/__DEFINES/research.dm +++ b/code/__DEFINES/research.dm @@ -74,5 +74,5 @@ ) #define BOMB_TARGET_POINTS 50000 //Adjust as needed. Actual hard cap is double this, but will never be reached due to hyperbolic curve. -#define BOMB_TARGET_SIZE 200 // The shockwave radius required for a bomb to get TECHWEB_BOMB_MIDPOINT points. -#define BOMB_SUB_TARGET_EXPONENT 2 // The power of the points curve below the target size. Higher = less points for worse bombs, below target. +#define BOMB_TARGET_SIZE 175 // The shockwave radius required for a bomb to get TECHWEB_BOMB_MIDPOINT points. +#define BOMB_SUB_TARGET_EXPONENT 3 // The power of the points curve below the target size. Higher = less points for worse bombs, below target. diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 3272060835..8d6646b8d0 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -3066,6 +3066,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) save_character() character.dna.features = features.Copy() + character.set_species(chosen_species, icon_update = FALSE, pref_load = TRUE) character.dna.species.eye_type = eye_type if(chosen_limb_id && (chosen_limb_id in character.dna.species.allowed_limb_ids)) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm index 1dc50bfe73..f5e1c2e113 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm @@ -28,10 +28,9 @@ for(var/path in typesof(prototype)) if(path == prototype && skip_prototype) continue - if(roundstart) - var/datum/sprite_accessory/P = path - if(initial(P.locked)) - continue + var/datum/sprite_accessory/P = path + if((roundstart && initial(P.locked)) || initial(P.ignore)) + continue var/datum/sprite_accessory/D = new path() if(D.icon_state) @@ -64,6 +63,7 @@ var/mutant_part_string //Also used in species.handle_mutant_bodyparts() to generate the overlay icon state. var/alpha_mask_state var/matrixed_sections = MATRIX_NONE //if color_src is MATRIXED, how many sections does it have? 1-3 + var/ignore = FALSE //NEVER include in customization if set to TRUE //Special / holdover traits for Citadel specific sprites. var/extra = FALSE diff --git a/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm b/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm index c525a13ef8..11fde50a37 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm @@ -126,6 +126,11 @@ hide_legs = USE_SNEK_CLIP_MASK matrixed_sections = MATRIX_RED_GREEN +/datum/sprite_accessory/taur/naga/coiled + name = "Naga (coiled)" + icon_state = "naga_coiled" + ignore = TRUE + /datum/sprite_accessory/taur/otie name = "Otie" icon_state = "otie" diff --git a/code/modules/mob/living/carbon/human/innate_abilities/coiling.dm b/code/modules/mob/living/carbon/human/innate_abilities/coiling.dm new file mode 100644 index 0000000000..52e2a87a7d --- /dev/null +++ b/code/modules/mob/living/carbon/human/innate_abilities/coiling.dm @@ -0,0 +1,89 @@ + +/datum/action/innate/ability/coiling + name = "Coil Grabbed Mob" + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "coil_icon" + icon_icon = 'icons/mob/actions/actions_snake.dmi' + background_icon_state = "bg_alien" + required_mobility_flags = MOBILITY_STAND + var/currently_coiling = FALSE + var/mob/living/carbon/human/currently_coiled + var/mutable_appearance/tracked_overlay + +/datum/action/innate/ability/coiling/Activate() + // make sure they meet the mobility/check flags + if(IsAvailable()) + // check that the user has grabbed someone and they are not currently coiling someone + if(ishuman(owner.pulling) && !currently_coiling) + coil_mob(owner.pulling) + +/datum/action/innate/ability/coiling/proc/update_coil_offset(atom/source, old_dir, new_dir) + // update the coiling offset on the coiled user depending on the way the owner is facing + switch(new_dir) + if(NORTH) + currently_coiled.pixel_x = -12 + if(EAST) + currently_coiled.pixel_x = -12 + if(SOUTH) + currently_coiled.pixel_x = 12 + if(WEST) + currently_coiled.pixel_x = 12 + +/datum/action/innate/ability/coiling/proc/coil_mob(var/mob/living/carbon/human/H) + // begin the coiling action + H.visible_message("[owner] coils [H] with their tail!", \ + "[owner] coils you with their tail!") + currently_coiling = TRUE + currently_coiled = H + + H.layer -= 0.1 // LISTEN I HATE TOUCHING MOB LAYERS TOO BUT THIS IS JUST SO THEY RENDER UNDER THE OTHER PLAYER SDFHSDFHDSFHDSH + + // move user to same tile + H.forceMove(get_turf(owner)) + + // cancel the coiling action if certain things are done + RegisterSignal(owner, COMSIG_MOVABLE_MOVED, .proc/cancel_coil) + RegisterSignal(owner, COMSIG_LIVING_RESTING, .proc/cancel_coil) + RegisterSignal(owner, COMSIG_LIVING_STOPPED_PULLING, .proc/cancel_coil) + + // update the coil offset, update again if owner changes direction + RegisterSignal(owner, COMSIG_ATOM_DIR_CHANGE, .proc/update_coil_offset) + update_coil_offset(null, null, owner.dir) + + // set our overlay to new image + var/mob/living/carbon/human/user = owner + user.dna.species.mutant_bodyparts["taur"] = "Naga (coiled)" + user.dna.features["taur"] = "Naga (coiled)" + user.update_mutant_bodyparts() + +/datum/action/innate/ability/coiling/proc/cancel_coil() + var/mob/living/carbon/human/H = owner + + // cancel the coiling action by removing the overlay + currently_coiled.pixel_x = 0 + + currently_coiling = FALSE + currently_coiled = null + + // unregister signals + UnregisterSignal(owner, COMSIG_MOVABLE_MOVED) + UnregisterSignal(owner, COMSIG_LIVING_RESTING) + UnregisterSignal(owner, COMSIG_LIVING_STOPPED_PULLING) + UnregisterSignal(owner, COMSIG_ATOM_DIR_CHANGE) + + // change overlay back to original image + H.dna.species.mutant_bodyparts["taur"] = "Naga" + H.dna.features["taur"] = "Naga" + H.update_mutant_bodyparts() + + H.update_body() + + H.layer += 0.1 + + // remove the added overlay + owner.cut_overlay(tracked_overlay) + tracked_overlay = null + +/datum/action/innate/ability/coiling/Remove(mob/M) + cancel_coil() + ..(M) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index bbe2781403..e6ac8ae881 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -612,7 +612,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(Q.type in blacklisted_quirks) removed_quirks += Q.type . += 1 - qdel(Q) + qdel(Q) else var/point_overhead = 0 for(var/datum/quirk/Q as anything in C.roundstart_quirks) @@ -906,6 +906,22 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/tauric = mutant_bodyparts["taur"] && H.dna.features["taur"] && H.dna.features["taur"] != "None" + // stuff for adding/removing the coiling ability if you have a taur part + // if another action is ever based on mutant parts we should probably make a system for it so it's all done in one proc with less overhead + var/datum/action/found_action + + for(var/datum/action/A in H.actions) + if(A.type == /datum/action/innate/ability/coiling) + found_action = A + + if(found_action && (!tauric || (H.dna.features["taur"] != "Naga" && H.dna.features["taur"] != "Naga (coiled)"))) + found_action.Remove(H) + + if(!found_action && tauric && H.dna.features["taur"] == "Naga") + found_action = new /datum/action/innate/ability/coiling() + found_action.Grant(H) + + for(var/mutant_part in mutant_bodyparts) var/reference_list = GLOB.mutant_reference_list[mutant_part] if(reference_list) @@ -1220,7 +1236,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(!HAS_TRAIT(H, TRAIT_ROBOTIC_ORGANISM)) H.adjustBruteLoss(1) else - H.adjustFireLoss(1) //Robots melt instead of taking brute. + H.adjustFireLoss(1) //Robots melt instead of taking brute. /datum/species/proc/spec_death(gibbed, mob/living/carbon/human/H) if(H) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 2070d07e14..bf3094cb08 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -395,6 +395,7 @@ ..() update_pull_movespeed() update_pull_hud_icon() + SEND_SIGNAL(src, COMSIG_LIVING_STOPPED_PULLING) /mob/living/verb/stop_pulling1() set name = "Stop Pulling" diff --git a/code/modules/mob/living/living_mobility.dm b/code/modules/mob/living/living_mobility.dm index af34fb54cf..6aed30ab83 100644 --- a/code/modules/mob/living/living_mobility.dm +++ b/code/modules/mob/living/living_mobility.dm @@ -9,6 +9,8 @@ resting = new_resting if(!silent) to_chat(src, "You are now [resting? "resting" : "getting up"].") + if(resting == 1) + SEND_SIGNAL(src, COMSIG_LIVING_RESTING) update_resting(updating) /mob/living/proc/update_resting(update_mobility = TRUE) diff --git a/html/changelogs/AutoChangeLog-pr-15523.yml b/html/changelogs/AutoChangeLog-pr-15523.yml new file mode 100644 index 0000000000..48767debcb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15523.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - balance: "Now slightly easier to get 50,000 points with toxins (50,000 point baseline changed from 200 light range to 175)" diff --git a/html/changelogs/archive/2022-02.yml b/html/changelogs/archive/2022-02.yml index 4d58b2e226..0715711ef7 100644 --- a/html/changelogs/archive/2022-02.yml +++ b/html/changelogs/archive/2022-02.yml @@ -145,3 +145,12 @@ accessible by engineers tweak: [Omega] Chapel mass driver and mass driver bulkhead are now controlled by one button instead of two' - bugfix: '[Omega] Lawyer''s carpet is no longer airless' +2022-02-25: + TripleShades: + - rscadd: '[Omega] Additional Solar Panels to both existing arrays' + - rscadd: '[Omega] Floor tile underneath library maint airlock' + - rscadd: '[Omega] Contraband locker to Armoury' + - bugfix: '[Omega] Solar Array SMES Units actually connect to the grid properly + now' + timothyteakettle: + - rscadd: adds snake coiling diff --git a/icons/mob/actions/actions_snake.dmi b/icons/mob/actions/actions_snake.dmi new file mode 100644 index 0000000000..6856171b0d Binary files /dev/null and b/icons/mob/actions/actions_snake.dmi differ diff --git a/modular_citadel/icons/mob/mam_taur.dmi b/modular_citadel/icons/mob/mam_taur.dmi index cf332019af..cc4bc0446c 100644 Binary files a/modular_citadel/icons/mob/mam_taur.dmi and b/modular_citadel/icons/mob/mam_taur.dmi differ diff --git a/tgstation.dme b/tgstation.dme index cd5a1eb823..0896e19bb9 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2699,6 +2699,7 @@ #include "code\modules\mob\living\carbon\human\typing_indicator.dm" #include "code\modules\mob\living\carbon\human\update_icons.dm" #include "code\modules\mob\living\carbon\human\innate_abilities\blobform.dm" +#include "code\modules\mob\living\carbon\human\innate_abilities\coiling.dm" #include "code\modules\mob\living\carbon\human\innate_abilities\customization.dm" #include "code\modules\mob\living\carbon\human\innate_abilities\limb_regeneration.dm" #include "code\modules\mob\living\carbon\human\species_types\abductor.dm" diff --git a/tgui/packages/tgui/interfaces/common/AtmosControls.js b/tgui/packages/tgui/interfaces/common/AtmosControls.js index 76348a956f..fcca00188a 100644 --- a/tgui/packages/tgui/interfaces/common/AtmosControls.js +++ b/tgui/packages/tgui/interfaces/common/AtmosControls.js @@ -37,7 +37,7 @@ export const Vent = (props, context) => {