diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index bca65dd853..b68d798113 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -563,4 +563,4 @@ singular_name = "catwalk floor tile" desc = "Flooring that shows its contents underneath. Engineers love it!" icon_state = "catwalk_tile" - turf_type = /turf/open/floor/plating/catwalk_floor + turf_type = /turf/open/floor/catwalk_floor diff --git a/code/game/turfs/open/floor/catwalk_plating.dm b/code/game/turfs/open/floor/catwalk_plating.dm index 76d22847c9..ac0f3b63de 100644 --- a/code/game/turfs/open/floor/catwalk_plating.dm +++ b/code/game/turfs/open/floor/catwalk_plating.dm @@ -5,7 +5,7 @@ * you can crowbar it to interact with the underneath stuff without destroying the tile... * unless you want to! */ -/turf/open/floor/plating/catwalk_floor +/turf/open/floor/catwalk_floor icon = 'icons/turf/floors/catwalk_plating.dmi' icon_state = "catwalk_below" floor_tile = /obj/item/stack/tile/catwalk @@ -16,29 +16,35 @@ barefootstep = FOOTSTEP_CATWALK clawfootstep = FOOTSTEP_CATWALK heavyfootstep = FOOTSTEP_CATWALK + intact = FALSE var/covered = TRUE -/turf/open/floor/plating/catwalk_floor/Initialize(mapload) +/turf/open/floor/catwalk_floor/Initialize(mapload) . = ..() layer = CATWALK_LAYER update_icon(UPDATE_OVERLAYS) -/turf/open/floor/plating/catwalk_floor/update_overlays() +/turf/open/floor/catwalk_floor/update_overlays() . = ..() - var/static/catwalk_overlay + var/static/image/catwalk_overlay if(isnull(catwalk_overlay)) - catwalk_overlay = iconstate2appearance(icon, "catwalk_above") + catwalk_overlay = new() + catwalk_overlay.icon = icon + catwalk_overlay.icon_state = "catwalk_above" + catwalk_overlay.plane = GAME_PLANE + catwalk_overlay.layer = CATWALK_LAYER + catwalk_overlay = catwalk_overlay.appearance if(covered) . += catwalk_overlay -/turf/open/floor/plating/catwalk_floor/screwdriver_act(mob/living/user, obj/item/tool) +/turf/open/floor/catwalk_floor/screwdriver_act(mob/living/user, obj/item/tool) . = ..() covered = !covered user.balloon_alert(user, "[!covered ? "cover removed" : "cover added"]") update_icon(UPDATE_OVERLAYS) -/turf/open/floor/plating/catwalk_floor/pry_tile(obj/item/crowbar, mob/user, silent) +/turf/open/floor/catwalk_floor/crowbar_act(mob/user, obj/item/I) if(covered) user.balloon_alert(user, "remove cover first!") return FALSE - . = ..() + return pry_tile(I, user) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 2430ae1b22..e9818476c6 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -247,6 +247,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/screenshake = 100 var/damagescreenshake = 2 + var/recoil_screenshake = 100 var/arousable = TRUE var/autostand = TRUE var/auto_ooc = FALSE @@ -972,6 +973,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Screen Shake: [(screenshake==100) ? "Full" : ((screenshake==0) ? "None" : "[screenshake]")]
" if (user && user.client && !user.client.prefs.screenshake==0) dat += "Damage Screen Shake: [(damagescreenshake==1) ? "On" : ((damagescreenshake==0) ? "Off" : "Only when down")]
" + dat += "Recoil Screen Push: [(recoil_screenshake==100) ? "Full" : ((recoil_screenshake==0) ? "None" : "[screenshake]")]
" var/p_chaos if (!preferred_chaos) p_chaos = "No preference" @@ -2890,7 +2892,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("no_tetris_storage") no_tetris_storage = !no_tetris_storage if ("screenshake") - var/desiredshake = input(user, "Set the amount of screenshake you want. \n(0 = disabled, 100 = full, 200 = maximum.)", "Character Preference", screenshake) as null|num + var/desiredshake = input(user, "Set the amount of screenshake you want. \n(0 = disabled, 100 = full, no maximum (at your own risk).)", "Character Preference", screenshake) as null|num if (!isnull(desiredshake)) screenshake = desiredshake if("damagescreenshake") @@ -2903,6 +2905,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) damagescreenshake = 0 else damagescreenshake = 1 + if ("recoil_screenshake") + var/desiredshake = input(user, "Set the amount of recoil screenshake/push you want. \n(0 = disabled, 100 = full, no maximum (at your own risk).)", "Character Preference", screenshake) as null|num + if (!isnull(desiredshake)) + recoil_screenshake = desiredshake if("nameless") nameless = !nameless diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index 8ede497c83..561dc9c096 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -19,6 +19,7 @@ attack_verb = list("smashed", "crushed", "cleaved", "chopped", "pulped") sharpness = SHARP_EDGED actions_types = list(/datum/action/item_action/toggle_light) + obj_flags = UNIQUE_RENAME var/list/trophies = list() var/charged = TRUE var/charge_time = 15 diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 0f2b808de3..e89f39f464 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -836,13 +836,13 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/left_state = DEFAULT_LEFT_EYE_STATE var/right_state = DEFAULT_RIGHT_EYE_STATE if(eye_type in GLOB.eye_types) - left_state = eye_type + "_left_eye" - right_state = eye_type + "_right_eye" + left_state = "[eye_type]_left_eye" + right_state = "[eye_type]_right_eye" var/mutable_appearance/left_eye = mutable_appearance('icons/mob/eyes.dmi', left_state, -BODY_LAYER) var/mutable_appearance/right_eye = mutable_appearance('icons/mob/eyes.dmi', right_state, -BODY_LAYER) if((EYECOLOR in species_traits) && has_eyes) - left_eye.color = "#" + H.left_eye_color - right_eye.color = "#" + H.right_eye_color + left_eye.color = "#[H.left_eye_color]" + right_eye.color = "#[H.right_eye_color]" if(OFFSET_EYES in offset_features) left_eye.pixel_x += offset_features[OFFSET_EYES][1] left_eye.pixel_y += offset_features[OFFSET_EYES][2] diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 8595839831..90a7aae95e 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -250,7 +250,17 @@ It's fairly easy to fix if dealing with single letters but not so much with comp animate(pixel_x=rand(min,max), pixel_y=rand(min,max), time=1) animate(pixel_x=oldx, pixel_y=oldy, time=1) - +/proc/directional_recoil(mob/M, strength=1, angle = 0) + if(!M || !M.client) + return + var/client/C = M.client + var/client_screenshake = (C.prefs.recoil_screenshake * 0.01) + strength *= client_screenshake + var/recoil_x = -sin(angle)*4*strength + rand(-strength, strength) + var/recoil_y = -cos(angle)*4*strength + rand(-strength, strength) + animate(C, pixel_x=recoil_x, pixel_y=recoil_y, time=1, easing=SINE_EASING|EASE_OUT, flags=ANIMATION_PARALLEL|ANIMATION_RELATIVE) + animate(pixel_x=0, pixel_y=0, time=3, easing=SINE_EASING|EASE_IN) // according to bhjin this works on more recent byond versions + // if you havent updated uuh sucks to be you then /proc/findname(msg) if(!istext(msg)) diff --git a/code/modules/modular_computers/file_system/programs/signaler.dm b/code/modules/modular_computers/file_system/programs/signaler.dm index b7bbcacaa0..ded70f7f37 100644 --- a/code/modules/modular_computers/file_system/programs/signaler.dm +++ b/code/modules/modular_computers/file_system/programs/signaler.dm @@ -15,40 +15,29 @@ /// Radio connection datum used by signalers. var/datum/radio_frequency/radio_connection -/datum/computer_file/program/signaler/run_program(mob/living/user) - . = ..() - if (!.) - return - if(!computer?.get_modular_computer_part(MC_SIGNALER)) //Giving a clue to users why the program is spitting out zeros. - to_chat(user, span_warning("\The [computer] flashes an error: \"hardware\\signal_hardware\\startup.bin -- file not found\".")) - +/datum/computer_file/program/signaler/New() + set_frequency(signal_frequency) + return ..() /datum/computer_file/program/signaler/ui_data(mob/user) var/list/data = get_header_data() - var/obj/item/computer_hardware/radio_card/sensor = computer?.get_modular_computer_part(MC_SIGNALER) - if(sensor?.check_functionality()) - data["frequency"] = signal_frequency - data["code"] = signal_code - data["minFrequency"] = MIN_FREE_FREQ - data["maxFrequency"] = MAX_FREE_FREQ + data["frequency"] = signal_frequency + data["code"] = signal_code + data["minFrequency"] = MIN_FREE_FREQ + data["maxFrequency"] = MAX_FREE_FREQ return data /datum/computer_file/program/signaler/ui_act(action, list/params) . = ..() if(.) return - var/obj/item/computer_hardware/radio_card/sensor = computer?.get_modular_computer_part(MC_SIGNALER) - if(!(sensor?.check_functionality())) - playsound(src, 'sound/machines/scanbuzz.ogg', 100, FALSE) - return switch(action) if("signal") INVOKE_ASYNC(src, .proc/signal) . = TRUE if("freq") - signal_frequency = unformat_frequency(params["freq"]) - signal_frequency = sanitize_frequency(signal_frequency, TRUE) - set_frequency(signal_frequency) + var/new_signal_frequency = sanitize_frequency(unformat_frequency(params["freq"]), TRUE) + set_frequency(new_signal_frequency) . = TRUE if("code") signal_code = text2num(params["code"]) diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 0ad49e192d..cb9570e02f 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -173,7 +173,7 @@ O.renamedByPlayer = TRUE if(penchoice == "Change description") - var/input = stripped_input(user,"Describe [O] here:", ,"[O.desc]", 140) + var/input = stripped_input(user,"Describe [O] here:", ,"[O.desc]", 350) var/olddesc = O.desc if(QDELETED(O) || !user.canUseTopic(O, BE_CLOSE)) return diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 3210ad2d15..a4d3c3a63a 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -94,6 +94,9 @@ var/automatic = 0 //can gun use it, 0 is no, anything above 0 is the delay between clicks in ds + /// directional recoil multiplier + var/dir_recoil_amp = 10 + /obj/item/gun/Initialize(mapload) . = ..() if(no_pin_required) @@ -159,7 +162,7 @@ /obj/item/gun/proc/shoot_live_shot(mob/living/user, pointblank = FALSE, mob/pbtarget, message = 1, stam_cost = 0) if(recoil) - shake_camera(user, recoil + 1, recoil) + directional_recoil(user, recoil*dir_recoil_amp, Get_Angle(user, pbtarget)) if(stam_cost) //CIT CHANGE - makes gun recoil cause staminaloss var/safe_cost = clamp(stam_cost, 0, user.stamina_buffer)*(firing && burst_size >= 2 ? 1/burst_size : 1) diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index fe42fc2d99..f3b07aa7a4 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -167,6 +167,7 @@ icon_state = "goldrevolver" fire_sound = 'sound/weapons/resonator_blast.ogg' recoil = 8 + dir_recoil_amp = 5 // 40 directional recoil is already really funny pin = /obj/item/firing_pin /obj/item/gun/ballistic/revolver/nagant diff --git a/html/changelogs/AutoChangeLog-pr-15747.yml b/html/changelogs/AutoChangeLog-pr-15747.yml new file mode 100644 index 0000000000..5660fdb125 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15747.yml @@ -0,0 +1,4 @@ +author: "Linzolle" +delete-after: True +changes: + - bugfix: "catwalk overlays behave properly, appearing on top of cables and such" diff --git a/html/changelogs/AutoChangeLog-pr-15751.yml b/html/changelogs/AutoChangeLog-pr-15751.yml new file mode 100644 index 0000000000..f37748f5d0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15751.yml @@ -0,0 +1,4 @@ +author: "Hatterhat" +delete-after: True +changes: + - tweak: "Recoil now pushes your screen in the opposite direction of where you're shooting. It makes sense in context, I swear. Adjust the setting for this in your client prefs, because it defaults to on." diff --git a/html/changelogs/AutoChangeLog-pr-15753.yml b/html/changelogs/AutoChangeLog-pr-15753.yml new file mode 100644 index 0000000000..b7201a1f87 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15753.yml @@ -0,0 +1,5 @@ +author: "SandPoot" +delete-after: True +changes: + - bugfix: "Fixed the lack of eyes making ERROR appear on people." + - qol: "Set up for the dmi editor extension, very helpful as you can see the existant states and their names opposed to only images in a huge spritesheet." diff --git a/html/changelogs/AutoChangeLog-pr-15757.yml b/html/changelogs/AutoChangeLog-pr-15757.yml new file mode 100644 index 0000000000..170f1d733d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15757.yml @@ -0,0 +1,5 @@ +author: "Hatterhat" +delete-after: True +changes: + - tweak: "Proto-kinetic crushers and variants can now be renamed via pen." + - tweak: "Custom descriptions on items tagged with UNIQUE_RENAME can now go to 350 characters, up from 140." diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index 4b8dba160a..c4927ea06b 100644 Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ diff --git a/icons/turf/floors/catwalk_plating.dmi b/icons/turf/floors/catwalk_plating.dmi index 24954e4a17..c9ad36653b 100644 Binary files a/icons/turf/floors/catwalk_plating.dmi and b/icons/turf/floors/catwalk_plating.dmi differ