diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 8a9f122f43..e4056233c6 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -233,6 +233,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 @@ -907,6 +908,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" @@ -2782,7 +2784,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") @@ -2795,6 +2797,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 //END CITADEL EDIT 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/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