[READY FOR MERGE] The Giant Combat Reworks - Part 1: Goodbye stuns, hello staminacrit (#5463)
* part 1 - resist out of resting, move and interact with the world while resting, and stamina regen nerf * makes beepsky check for stuns instead of knockdowns, adds message for getting up, makes gravity reduce standup time, and more * sprinting, staminacrit, balance changes, and more * adds stamina modifier to clickdelay, makes items deal stamina damage to the user when attacking, buffs resting stamina regen * combat mode, ability to toggle right-click context menu on/off, basic combat mode QOL, lays groundwork for 2-handing any item combat mode toggle sound is from Interbay. * commits dme changes * unarmed combat stamina, ability to right click in combat mode, balance changes * tosses in the HUD icons for later-ish * rolls back admin.txt * lotsa UI stuff * stamina checks, some balance stuff * adds support for best ui, adds right click to flush disposals, removes aggressive grab pinning in favor of neckgrab chokeholding * quick dogborg patch while i figure out what do do with them * oops - fixes prefbreaking for screenshake * trying to sprint from an elevated surface onto lower ground will now knock you down * right click to pull fire alarm, lets you bully people by pulling chairs out form under them, makes attacking objects cost stamina * makes accidents during slipping less likely to occur while combat mode is active, makes tripping off elevated surfaces cause accidents * makes pumping shotguns cost a tiiiny bit of stamina * makes eyestabbing and batoning cost stamina * makes failing stamina checks error out properly, adds stamina check to shotgun pumping * adds stamina check for chair pulling * readds aggressive grab pinning * fixes bug with being buckled preventing interaction * adds recoveringstam check to incapacitated * reduces stamina cost for attacking * oh this too * fixes bug where you can get stuck in recoveringstam if your stamina suddenly becomes 0 while you're in staminacrit * makes monkey transformation inherit staminaloss * adds the ability to wave or shake your fist at someone via right click * grammar and span closing * 99 annoying little bugs on the wall, 99 annoying little bugs. take one down, pass it around, 864 gamebreaking bugs on the wall * more distant right-click emotes. * buffs standing stamina regen a tiiiiiiny bit * adds aiming down sights for guns, makes firing guns cause trace amounts of staminaloss * crusher powercreep - gives crushers the ability to heal staminaloss * item throwing buff * adds 1:1 HUD layout * hopefully fixes issue with recoveringstamcrit not updating * giant hipfire nerf * halves the effect of staminaloss on movement speed * makes stamina recover faster in staminacrit, makes it easier to get disarmed out of combat mode * get_weight(), movedelay health_deficiency tweaking, combat and resting checks for item attacking * makes staminacrit automatically disable combat mode, it's now impossible to enter combat mode while in stamcrit * adds stamina buffer, halves the time needed to stand up after resting, increases stam penalty for firing weapons, and more * tweaks stamina buffer drain rate a little * makes buffered staminaloss redirect stamina to the actual stamloss proc when empty, makes stamina buffer stat() more precise * removes stamina modifier for clickdelays, makes stunbatons deal extra staminaloss * makes electrodes deal a lil extra staminaloss * drones cannot resist a rest, so now only carbons are forced to rest * restricts aiming down sights to carbon mobs, adds stamina display to stat() * makes gun accuracy and stamcosts more flexible, decreases base inaccuracy penalty, makes borgs immune to inaccuracy penalties * nerfs inaccuracy penalties just a lil more, fixes blooddrunk miner eye depleting all your stamina * getting used to tortoisegit * readds temp dogborg buff * stamina and stamina buffer HUD displays. Stamina sprite from hippiestation * makes afterattack call properly again * decreases stamina buffer regen time to 3 seconds * Yknow what? decreases it to 2 seconds. That's 3 entire attacks worth of waiting * makes stamina buffer influence movespeed a lil * nerfs compiling errors * tweaks the icons a little * adds autostanding, adds delimiters to attempts to stand * makes automatic standup attempts a little clearer * rest button now toggles intent to rest, fixes perma rest * oop - quick fixes * Makes crushers ignore recoil stamina on lavaland, makes burstfiring weapons deal less staminaloss * buffs highlander sword * makes stamina have less of an impact on the health display * fixes dogborgs shoving other borgs into infinite stuns * You can no longer shoot over tables or shoot through windows while resting. Also buffs turrets
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
/mob/proc/RightClickOn(atom/A, params) //mostly a copy-paste from ClickOn()
|
||||
var/list/modifiers = params2list(params)
|
||||
if(incapacitated(ignore_restraints = 1))
|
||||
return
|
||||
|
||||
face_atom(A)
|
||||
|
||||
if(next_move > world.time) // in the year 2000...
|
||||
return
|
||||
|
||||
if(!modifiers["catcher"] && A.IsObscured())
|
||||
return
|
||||
|
||||
if(ismecha(loc))
|
||||
var/obj/mecha/M = loc
|
||||
return M.click_action(A,src,params)
|
||||
|
||||
if(restrained())
|
||||
changeNext_move(CLICK_CD_HANDCUFFED) //Doing shit in cuffs shall be vey slow
|
||||
RestrainedClickOn(A)
|
||||
return
|
||||
|
||||
if(in_throw_mode)
|
||||
throw_item(A)//todo: make it plausible to lightly toss items via right-click
|
||||
return
|
||||
|
||||
var/obj/item/W = get_active_held_item()
|
||||
|
||||
if(W == A)
|
||||
if(!W.rightclick_attack_self(src))
|
||||
W.attack_self(src)
|
||||
update_inv_hands()
|
||||
return
|
||||
|
||||
//These are always reachable.
|
||||
//User itself, current loc, and user inventory
|
||||
if(DirectAccess(A))
|
||||
if(W)
|
||||
W.rightclick_melee_attack_chain(src, A, params)
|
||||
else
|
||||
if(ismob(A))
|
||||
changeNext_move(CLICK_CD_MELEE)
|
||||
if(!AltUnarmedAttack(A))
|
||||
UnarmedAttack(A)
|
||||
return
|
||||
|
||||
//Can't reach anything else in lockers or other weirdness
|
||||
if(!loc.AllowClick())
|
||||
return
|
||||
|
||||
//Standard reach turf to turf or reaching inside storage
|
||||
if(CanReach(A,W))
|
||||
if(W)
|
||||
W.rightclick_melee_attack_chain(src, A, params)
|
||||
else
|
||||
if(ismob(A))
|
||||
changeNext_move(CLICK_CD_MELEE)
|
||||
if(!AltUnarmedAttack(A,1))
|
||||
UnarmedAttack(A,1)
|
||||
else
|
||||
if(W)
|
||||
if(!W.altafterattack(A, src, FALSE, params))
|
||||
W.afterattack(A, src, FALSE, params)
|
||||
else
|
||||
if(!AltRangedAttack(A,params))
|
||||
RangedAttack(A,params)
|
||||
|
||||
/mob/proc/AltUnarmedAttack(atom/A, proximity_flag)
|
||||
if(ismob(A))
|
||||
changeNext_move(CLICK_CD_MELEE)
|
||||
return FALSE
|
||||
|
||||
/mob/proc/AltRangedAttack(atom/A, params)
|
||||
return FALSE
|
||||
@@ -0,0 +1,49 @@
|
||||
/obj/screen/mov_intent
|
||||
icon = 'modular_citadel/icons/ui/screen_midnight.dmi'
|
||||
|
||||
/obj/screen/sprintbutton
|
||||
name = "toggle sprint"
|
||||
icon = 'modular_citadel/icons/ui/screen_midnight.dmi'
|
||||
icon_state = "act_sprint"
|
||||
layer = ABOVE_HUD_LAYER - 0.1
|
||||
|
||||
/obj/screen/sprintbutton/Click()
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/H = usr
|
||||
H.togglesprint()
|
||||
|
||||
/obj/screen/sprintbutton/proc/insert_witty_toggle_joke_here(mob/living/carbon/human/H)
|
||||
if(!H)
|
||||
return
|
||||
if(H.sprinting)
|
||||
icon_state = "act_sprint_on"
|
||||
else
|
||||
icon_state = "act_sprint"
|
||||
|
||||
/obj/screen/restbutton
|
||||
name = "rest"
|
||||
icon = 'modular_citadel/icons/ui/screen_midnight.dmi'
|
||||
icon_state = "rest"
|
||||
|
||||
/obj/screen/restbutton/Click()
|
||||
if(isliving(usr))
|
||||
var/mob/living/theuser = usr
|
||||
theuser.lay_down()
|
||||
|
||||
/obj/screen/combattoggle
|
||||
name = "toggle combat mode"
|
||||
icon = 'modular_citadel/icons/ui/screen_midnight.dmi'
|
||||
icon_state = "combat_off"
|
||||
|
||||
/obj/screen/combattoggle/Click()
|
||||
if(iscarbon(usr))
|
||||
var/mob/living/carbon/C = usr
|
||||
C.toggle_combat_mode()
|
||||
|
||||
/obj/screen/combattoggle/proc/rebasetointerbay(mob/living/carbon/C)
|
||||
if(!C)
|
||||
return
|
||||
if(C.combatmode)
|
||||
icon_state = "combat"
|
||||
else
|
||||
icon_state = "combat_off"
|
||||
@@ -0,0 +1,73 @@
|
||||
/datum/hud/var/obj/screen/staminas/staminas
|
||||
/datum/hud/var/obj/screen/staminabuffer/staminabuffer
|
||||
|
||||
/obj/screen/staminas
|
||||
icon = 'modular_citadel/icons/ui/screen_gen.dmi'
|
||||
name = "stamina"
|
||||
icon_state = "stamina0"
|
||||
screen_loc = ui_stamina
|
||||
mouse_opacity = 0
|
||||
|
||||
/mob/living/carbon/human/proc/staminahudamount()
|
||||
if(stat == DEAD || recoveringstam)
|
||||
return "staminacrit"
|
||||
else
|
||||
switch(hal_screwyhud)
|
||||
if(1 to 2)
|
||||
return "staminacrit"
|
||||
if(5)
|
||||
return "stamina0"
|
||||
else
|
||||
switch(100 - staminaloss)
|
||||
if(100 to INFINITY)
|
||||
return "stamina0"
|
||||
if(80 to 100)
|
||||
return "stamina1"
|
||||
if(60 to 80)
|
||||
return "stamina2"
|
||||
if(40 to 60)
|
||||
return "stamina3"
|
||||
if(20 to 40)
|
||||
return "stamina4"
|
||||
if(0 to 20)
|
||||
return "stamina5"
|
||||
else
|
||||
return "stamina6"
|
||||
|
||||
//stam buffer
|
||||
/obj/screen/staminabuffer
|
||||
icon = 'modular_citadel/icons/ui/screen_gen.dmi'
|
||||
name = "stamina buffer"
|
||||
icon_state = "stambuffer0"
|
||||
screen_loc = ui_stamina
|
||||
layer = ABOVE_HUD_LAYER + 0.1
|
||||
mouse_opacity = 0
|
||||
|
||||
/mob/living/carbon/human/proc/staminabufferhudamount()
|
||||
if(stat == DEAD || recoveringstam)
|
||||
return "stambuffer7"
|
||||
else
|
||||
switch(hal_screwyhud)
|
||||
if(1 to 2)
|
||||
return "stambuffer7"
|
||||
if(5)
|
||||
return "stambuffer0"
|
||||
else
|
||||
var/percentmult = 100/stambuffer
|
||||
switch(stambuffer*percentmult - bufferedstam*percentmult)
|
||||
if(95 to INFINITY)
|
||||
return "stambuffer0"
|
||||
if(90 to 95)
|
||||
return "stambuffer1"
|
||||
if(80 to 90)
|
||||
return "stambuffer2"
|
||||
if(60 to 80)
|
||||
return "stambuffer3"
|
||||
if(40 to 60)
|
||||
return "stambuffer4"
|
||||
if(20 to 40)
|
||||
return "stambuffer5"
|
||||
if(5 to 20)
|
||||
return "stambuffer6"
|
||||
else
|
||||
return "stambuffer7"
|
||||
@@ -0,0 +1,25 @@
|
||||
/obj/item/proc/rightclick_melee_attack_chain(mob/user, atom/target, params)
|
||||
if(!pre_altattackby(target, user, params)) //Hey, does this item have special behavior that should override all normal right-click functionality?
|
||||
if(!target.altattackby(src, user, params)) //Does the target do anything special when we right-click on it?
|
||||
melee_attack_chain(user, target, params) //Ugh. Lame! I'm filing a legal complaint about the discrimination against the right mouse button!
|
||||
else
|
||||
altafterattack(target, user, TRUE, params)
|
||||
return
|
||||
|
||||
/obj/item/proc/pre_altattackby(atom/A, mob/living/user, params)
|
||||
return FALSE //return something other than false if you wanna override attacking completely
|
||||
|
||||
/atom/proc/altattackby(obj/item/W, mob/user, params)
|
||||
return FALSE //return something other than false if you wanna add special right-click behavior to objects.
|
||||
|
||||
/obj/item/proc/rightclick_attack_self(mob/user)
|
||||
return FALSE
|
||||
|
||||
/obj/item/proc/altafterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
return FALSE
|
||||
|
||||
/obj/item/proc/getweight()
|
||||
if(total_mass)
|
||||
return total_mass
|
||||
else
|
||||
return w_class*1.25
|
||||
@@ -0,0 +1,29 @@
|
||||
/mob/living/carbon/human/AltUnarmedAttack(atom/A, proximity)
|
||||
if(!has_active_hand())
|
||||
to_chat(src, "<span class='notice'>You look at the state of the universe and sigh.</span>") //lets face it, people rarely ever see this message in its intended condition.
|
||||
return TRUE
|
||||
|
||||
if(!A.alt_attack_hand(src))
|
||||
A.attack_hand(src)
|
||||
return TRUE
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/human/AltRangedAttack(atom/A, params)
|
||||
if(!has_active_hand())
|
||||
to_chat(src, "<span class='notice'>You ponder your life choices and sigh.</span>")
|
||||
return TRUE
|
||||
|
||||
if(!incapacitated())
|
||||
switch(a_intent)
|
||||
if(INTENT_HELP)
|
||||
visible_message("<span class='notice'>[src] waves to [A].</span>", "<span class='notice'>You wave to [A].</span>")
|
||||
if(INTENT_DISARM)
|
||||
visible_message("<span class='notice'>[src] shoos away [A].</span>", "<span class='notice'>You shoo away [A].</span>")
|
||||
if(INTENT_GRAB)
|
||||
visible_message("<span class='notice'>[src] beckons [A] to come.</span>", "<span class='notice'>You beckon [A] to come.</span>") //This sounds lewder than it actually is. Fuck.
|
||||
if(INTENT_HARM)
|
||||
visible_message("<span class='notice'>[src] shakes [p_their()] fist at [A].</span>", "<span class='notice'>You shake your fist at [A].</span>")
|
||||
return TRUE
|
||||
|
||||
/atom/proc/alt_attack_hand(mob/user)
|
||||
return FALSE
|
||||
Reference in New Issue
Block a user