sigh
This commit is contained in:
@@ -138,14 +138,6 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
|
||||
#define MOBILITY_FLAGS_DEFAULT (MOBILITY_MOVE | MOBILITY_STAND | MOBILITY_PICKUP | MOBILITY_USE | MOBILITY_UI | MOBILITY_STORAGE | MOBILITY_PULL | MOBILITY_RESIST)
|
||||
#define MOBILITY_FLAGS_ANY_INTERACTION (MOBILITY_USE | MOBILITY_PICKUP | MOBILITY_UI | MOBILITY_STORAGE)
|
||||
|
||||
// melee_attack_chain() attackchain_flags
|
||||
/// The attack is from a parry counterattack.
|
||||
#define ATTACKCHAIN_PARRY_COUNTERATTACK (1<<0)
|
||||
|
||||
// UnarmedAttack() flags
|
||||
/// Attack is from a parry counterattack
|
||||
#define UNARMED_ATTACK_PARRY (1<<0)
|
||||
|
||||
/// If the thing can reflect light (lasers/energy)
|
||||
#define RICOCHET_SHINY (1<<0)
|
||||
/// If the thing can reflect matter (bullets/bomb shrapnel)
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
// melee_attack_chain() attackchain_flags
|
||||
/// The attack is from a parry counterattack.
|
||||
#define ATTACKCHAIN_PARRY_COUNTERATTACK (1<<0)
|
||||
|
||||
// melee_attack_chain(), attackby(), pre_attack(), afterattack(), and tool_act() return values.
|
||||
/// Stop the attack chain if still in melee_attack_chain()
|
||||
#define STOP_ATTACK_PROC_CHAIN (1<<0)
|
||||
/// This attack should discard last_action instead of flushing (storing) it). You should probably know what you're doing if you use this considering this is how clickdelay is enforced.
|
||||
#define DISCARD_LAST_ACTION (1<<1)
|
||||
|
||||
// UnarmedAttack() flags
|
||||
/// Attack is from a parry counterattack
|
||||
#define UNARMED_ATTACK_PARRY (1<<0)
|
||||
|
||||
// obj/item/dropped()
|
||||
/// dropped() relocated this item, return FALSE for doUnEquip.
|
||||
#define ITEM_RELOCATED_BY_DROPPED "relocated_by_dropped"
|
||||
@@ -1,3 +0,0 @@
|
||||
// obj/item/dropped
|
||||
/// dropped() relocated this item, return FALSE for doUnEquip.
|
||||
#define ITEM_RELOCATED_BY_DROPPED "relocated_by_dropped"
|
||||
@@ -111,7 +111,7 @@
|
||||
//User itself, current loc, and user inventory
|
||||
if(A in DirectAccess())
|
||||
if(W)
|
||||
W.melee_attack_chain(src, A, params)
|
||||
. = !(W.melee_attack_chain(src, A, params) & DISCARD_LAST_ACTION)
|
||||
else
|
||||
UnarmedAttack(A)
|
||||
return
|
||||
@@ -123,15 +123,13 @@
|
||||
//Standard reach turf to turf or reaching inside storage
|
||||
if(CanReach(A,W))
|
||||
if(W)
|
||||
W.melee_attack_chain(src, A, params)
|
||||
. = !(W.melee_attack_chain(src, A, params) & DISCARD_LAST_ACTION)
|
||||
else
|
||||
DelayNextAction(ismob(A)? 8 : 0)
|
||||
UnarmedAttack(A, 1)
|
||||
else
|
||||
if(W)
|
||||
W.ranged_attack_chain(src, A, params)
|
||||
else
|
||||
DelayNextAction(ismob(A)? 8 : 0)
|
||||
RangedAttack(A,params)
|
||||
|
||||
//Is the atom obscured by a PREVENT_CLICK_UNDER_1 object above it
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
|
||||
// cyborgs are prohibited from using storage items so we can I think safely remove (A.loc in contents)
|
||||
if(A == loc || (A in loc) || (A in contents))
|
||||
W.melee_attack_chain(src, A, params)
|
||||
. = !(W.melee_attack_chain(src, A, params) & DISCARD_LAST_ACTION)
|
||||
return
|
||||
|
||||
if(!isturf(loc))
|
||||
@@ -86,7 +86,7 @@
|
||||
// cyborgs are prohibited from using storage items so we can I think safely remove (A.loc && isturf(A.loc.loc))
|
||||
if(isturf(A) || isturf(A.loc))
|
||||
if(A.Adjacent(src)) // see adjacent.dm
|
||||
W.melee_attack_chain(src, A, params)
|
||||
. = !(W.melee_attack_chain(src, A, params) & DISCARD_LAST_ACTION)
|
||||
return
|
||||
else
|
||||
W.afterattack(A, src, 0, params)
|
||||
|
||||
@@ -13,15 +13,15 @@
|
||||
if(!CHECK_MOBILITY(L, MOBILITY_USE) && !(flags & ATTACKCHAIN_PARRY_COUNTERATTACK))
|
||||
to_chat(L, "<span class='warning'>You are unable to swing [src] right now!</span>")
|
||||
return
|
||||
if(tool_behaviour && target.tool_act(user, src, tool_behaviour))
|
||||
if(tool_behaviour && ((. = target.tool_act(user, src, tool_behaviour)) & STOP_ATTACK_PROC_CHAIN))
|
||||
return
|
||||
if(pre_attack(target, user, params))
|
||||
if((. |= pre_attack(target, user, params)) & STOP_ATTACK_PROC_CHAIN)
|
||||
return
|
||||
if(target.attackby(src, user, params, flags, damage_multiplier))
|
||||
if((. |= target.attackby(src, user, params, flags, damage_multiplier)) & STOP_ATTACK_PROC_CHAIN)
|
||||
return
|
||||
if(QDELETED(src) || QDELETED(target))
|
||||
return
|
||||
afterattack(target, user, TRUE, params)
|
||||
. |= afterattack(target, user, TRUE, params)
|
||||
|
||||
/// Like melee_attack_chain but for ranged.
|
||||
/obj/item/proc/ranged_attack_chain(mob/user, atom/target, params)
|
||||
@@ -40,25 +40,25 @@
|
||||
|
||||
/obj/item/proc/pre_attack(atom/A, mob/living/user, params) //do stuff before attackby!
|
||||
if(SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK, A, user, params) & COMPONENT_NO_ATTACK)
|
||||
return TRUE
|
||||
if(!PreatackClickdelayCheck(user, A))
|
||||
return TRUE
|
||||
PreattackClickdelaySet(user, A)
|
||||
return FALSE //return TRUE to avoid calling attackby after this proc does stuff
|
||||
return STOP_ATTACK_PROC_CHAIN
|
||||
if(!CheckAttackCooldown(user, A))
|
||||
return STOP_ATTACK_PROC_CHAIN
|
||||
|
||||
// No comment
|
||||
/atom/proc/attackby(obj/item/W, mob/user, params)
|
||||
if(SEND_SIGNAL(src, COMSIG_PARENT_ATTACKBY, W, user, params) & COMPONENT_NO_AFTERATTACK)
|
||||
return TRUE
|
||||
return FALSE
|
||||
return STOP_ATTACK_PROC_CHAIN
|
||||
|
||||
/obj/attackby(obj/item/I, mob/living/user, params)
|
||||
return ..() || ((obj_flags & CAN_BE_HIT) && I.attack_obj(src, user))
|
||||
. = ..()
|
||||
if(obj_flags & CAN_BE_HIT)
|
||||
. |= I.attack_obj(src, user)
|
||||
|
||||
/mob/living/attackby(obj/item/I, mob/living/user, params, attackchain_flags, damage_multiplier)
|
||||
if(..())
|
||||
return TRUE
|
||||
. = I.attack(src, user, attackchain_flags, damage_multiplier)
|
||||
. = ..()
|
||||
if(. & STOP_ATTACK_PROC_CHAIN)
|
||||
return
|
||||
. |= I.attack(src, user, attackchain_flags, damage_multiplier)
|
||||
|
||||
/obj/item/proc/attack(mob/living/M, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1)
|
||||
if(SEND_SIGNAL(src, COMSIG_ITEM_ATTACK, M, user) & COMPONENT_ITEM_NO_ATTACK)
|
||||
@@ -80,7 +80,7 @@
|
||||
|
||||
user.do_attack_animation(M)
|
||||
M.attacked_by(src, user, attackchain_flags, damage_multiplier)
|
||||
PostattackClickdelaySet(user, M)
|
||||
SetAttackCooldown(user, M)
|
||||
|
||||
log_combat(user, M, "attacked", src.name, "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])")
|
||||
add_fingerprint(user)
|
||||
@@ -97,7 +97,7 @@
|
||||
return
|
||||
user.do_attack_animation(O)
|
||||
O.attacked_by(src, user)
|
||||
PostattackClickdelaySet(user, O)
|
||||
SetAttackCooldown(user, O)
|
||||
var/weight = getweight(user, STAM_COST_ATTACK_OBJ_MULT)
|
||||
if(weight)
|
||||
user.adjustStaminaLossBuffered(weight)//CIT CHANGE - makes attacking things cause stamina loss
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
if(W)
|
||||
W.rightclick_melee_attack_chain(src, A, params)
|
||||
else
|
||||
DelayNextAction(ismob(A)? 8 : 0)
|
||||
if(!AltUnarmedAttack(A))
|
||||
UnarmedAttack(A)
|
||||
return
|
||||
@@ -52,7 +51,6 @@
|
||||
if(W)
|
||||
W.rightclick_melee_attack_chain(src, A, params)
|
||||
else
|
||||
DelayNextAction(ismob(A)? 8 : 0)
|
||||
if(!AltUnarmedAttack(A,1))
|
||||
UnarmedAttack(A,1)
|
||||
else
|
||||
@@ -8,6 +8,7 @@
|
||||
icon = 'icons/obj/card.dmi'
|
||||
item_flags = NOBLUDGEON
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
attack_cooldown = CLICK_CD_MELEE
|
||||
var/datum/supply_pack/discounted_pack
|
||||
var/discount_pct_off = 0.05
|
||||
var/obj/machinery/computer/cargo/inserted_console
|
||||
|
||||
@@ -133,34 +133,25 @@
|
||||
|
||||
/obj/item
|
||||
// Standard clickdelay variables
|
||||
/// Amount of time to check for from a mob's last attack, checked before an attack happens
|
||||
var/preattack_cooldown_check = CLICK_CD_MELEE
|
||||
/// Amount of time to delay a mob's next attack, added after an attack happens
|
||||
var/postattack_cooldown_penalty = 0
|
||||
/// Amount of time to check for from a mob's last attack, checked before an attack happens. Lower = faster attacks
|
||||
var/attack_speed = CLICK_CD_MELEE
|
||||
/// Amount of time to hard-stagger (no clicking at all) the mob when attacking. Lower = better
|
||||
var/attack_unwieldlyness = 0
|
||||
/// This item bypasses any click delay mods
|
||||
var/clickdelay_mod_bypass = FALSE
|
||||
/// This item checks clickdelay from a user's delayed next action variable rather than the last time they attacked.
|
||||
var/clickdelay_from_next_action = FALSE
|
||||
/// This item ignores next action delays.
|
||||
var/clickdelay_ignores_next_action = FALSE
|
||||
/// This item sets clickdelay in preattack rather than post attack. This means it's set in a melee attack even if the user doesn't bash or bop it against something.
|
||||
var/clickdelay_set_on_pre_attack = FALSE
|
||||
|
||||
/**
|
||||
* Checks if a user's clickdelay is met for a standard attack
|
||||
* Checks if a user's clickdelay is met for a standard attack, this is called before an attack happens.
|
||||
*/
|
||||
/obj/item/proc/PreattackClickdelayCheck(mob/user, atom/target)
|
||||
/obj/item/proc/CheckAttackCooldown(mob/user, atom/target)
|
||||
return user.CheckActionCooldown(action_cooldown_preattack, clickdelay_from_next_action, clickdelay_mod_bypass, clickdelay_ignores_next_action)
|
||||
|
||||
/**
|
||||
* Called if check is successful before the attack happens.
|
||||
*/
|
||||
/obj/item/proc/PreattackClickdelaySet(mob/user, atom/target)
|
||||
if(clickdelay_set_on_pre_attack)
|
||||
user.DelayNextAction(0, FALSE, TRUE)
|
||||
|
||||
/**
|
||||
* Called after a successful attack to set a mob's clickdelay.
|
||||
*/
|
||||
/obj/item/proc/PostattackClickdelaySet(mob/user, atom/target)
|
||||
/obj/item/proc/ApplyAttackCooldown(mob/user, atom/target)
|
||||
user.DelayNextAction(postattack_cooldown_penalty, clickdelay_mod_bypass, FALSE)
|
||||
|
||||
@@ -812,11 +812,11 @@
|
||||
return
|
||||
|
||||
/obj/item/light/attack(mob/living/M, mob/living/user, def_zone)
|
||||
..()
|
||||
. = ..()
|
||||
shatter()
|
||||
|
||||
/obj/item/light/attack_obj(obj/O, mob/living/user)
|
||||
..()
|
||||
. = ..()
|
||||
shatter()
|
||||
|
||||
/obj/item/light/proc/shatter()
|
||||
|
||||
@@ -366,8 +366,7 @@
|
||||
/obj/item/gun/attack_obj(obj/O, mob/user)
|
||||
if(user.a_intent == INTENT_HARM)
|
||||
if(bayonet)
|
||||
O.attackby(bayonet, user)
|
||||
return TRUE
|
||||
return O.attackby(bayonet, user)
|
||||
return ..()
|
||||
|
||||
/obj/item/gun/attackby(obj/item/I, mob/user, params)
|
||||
|
||||
+4
-7
@@ -123,6 +123,7 @@
|
||||
#include "code\__DEFINES\_flags\do_after.dm"
|
||||
#include "code\__DEFINES\_flags\item_flags.dm"
|
||||
#include "code\__DEFINES\_flags\obj_flags.dm"
|
||||
#include "code\__DEFINES\_flags\return_values.dm"
|
||||
#include "code\__DEFINES\_flags\shields.dm"
|
||||
#include "code\__DEFINES\admin\keybindings.dm"
|
||||
#include "code\__DEFINES\chemistry\reactions.dm"
|
||||
@@ -134,7 +135,6 @@
|
||||
#include "code\__DEFINES\dcs\signals.dm"
|
||||
#include "code\__DEFINES\mapping\maploader.dm"
|
||||
#include "code\__DEFINES\material\worth.dm"
|
||||
#include "code\__DEFINES\misc\return_values.dm"
|
||||
#include "code\__DEFINES\mobs\slowdowns.dm"
|
||||
#include "code\__DEFINES\research\stock_parts.dm"
|
||||
#include "code\__DEFINES\skills\defines.dm"
|
||||
@@ -219,6 +219,8 @@
|
||||
#include "code\_onclick\observer.dm"
|
||||
#include "code\_onclick\other_mobs.dm"
|
||||
#include "code\_onclick\overmind.dm"
|
||||
#include "code\_onclick\right_click.dm"
|
||||
#include "code\_onclick\right_item_attack.dm"
|
||||
#include "code\_onclick\telekinesis.dm"
|
||||
#include "code\_onclick\hud\_defines.dm"
|
||||
#include "code\_onclick\hud\action_button.dm"
|
||||
@@ -251,6 +253,7 @@
|
||||
#include "code\_onclick\hud\robot.dm"
|
||||
#include "code\_onclick\hud\screen_objects.dm"
|
||||
#include "code\_onclick\hud\swarmer.dm"
|
||||
#include "code\_onclick\hud\screen_objects\sprint.dm"
|
||||
#include "code\_onclick\hud\screen_objects\storage.dm"
|
||||
#include "code\controllers\admin.dm"
|
||||
#include "code\controllers\configuration_citadel.dm"
|
||||
@@ -3424,12 +3427,6 @@
|
||||
#include "interface\menu.dm"
|
||||
#include "interface\stylesheet.dm"
|
||||
#include "interface\skin.dmf"
|
||||
#include "modular_citadel\code\_onclick\click.dm"
|
||||
#include "modular_citadel\code\_onclick\item_attack.dm"
|
||||
#include "modular_citadel\code\_onclick\other_mobs.dm"
|
||||
#include "modular_citadel\code\_onclick\hud\screen_objects.dm"
|
||||
#include "modular_citadel\code\_onclick\hud\sprint.dm"
|
||||
#include "modular_citadel\code\_onclick\hud\stamina.dm"
|
||||
#include "modular_citadel\code\datums\components\souldeath.dm"
|
||||
#include "modular_citadel\code\datums\status_effects\chems.dm"
|
||||
#include "modular_citadel\code\game\objects\cit_screenshake.dm"
|
||||
|
||||
Reference in New Issue
Block a user