mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-10 09:54:52 +00:00
* ports all the tg junk for icemoon, not yet changed to make it all compile * fixes * fixes * fixes * fixes * fixes * new stuff * whew * fixes * it compiles, now to fix the maps * fixes the maps * fixes solars + removes the space tiles in the toxins burn chamber * nukes the SpawnTerrain proc used for tg geysers * linter fix * fix * fixes the non matching turf atmos (hopefully) * more mapping fixes * dmm2tgm * unfucks changeturf for the more_caves * fixes the volanic subtypes of the other thing * fixes the stupid fucking tile placing list * some map fixes, fixes the station_ruin loader shitting out errors this commit took 2 hours of my fucking life * fixes a bunch of mismatch atmos in ruins * fixes wendigo cave having no air * backwards couch backwards couch * fixes the SM up * wendigos can't runtime when butchering if you can't butcher them 😎 * makes the wendigo fight have the same atmos as the surrounding icemoon * Tweaks atmos mixture from o2=22;n2=82;TEMP=180 to o2=18;n2=63;TEMP=180, making lavaland weapons actually work * makes the wendigo screech shake not completely aids * fixes snowlegion portals dropping proper legions instead of skeles * brings the engioutpost ruin over as well * whoopps * empty commit to reroll bots * Fixes pirates, ops, the mining base, and gives pirates and ops drills * fixes lone ops and ninjas * fixes the snowed plating getting fucked when tiles are placed on it * removes some OP junk from the wabbajack pool (aka removes non-antag headslugs again) * more bug fixes * empty commit to reroll bots * hopefully finally kills the active turfs on the library ruin Co-authored-by: kevinz000 <2003111+kevinz000@users.noreply.github.com>
64 lines
2.5 KiB
Plaintext
64 lines
2.5 KiB
Plaintext
/datum/component/knockback
|
|
/// distance the atom will be thrown
|
|
var/throw_distance
|
|
/// whether this can throw anchored targets (tables, etc)
|
|
var/throw_anchored
|
|
/// whether this is a gentle throw (default false means people thrown into walls are stunned / take damage)
|
|
var/throw_gentle
|
|
|
|
/datum/component/knockback/Initialize(throw_distance=1, throw_gentle=FALSE)
|
|
if(!isitem(parent) && !ishostile(parent) && !isgun(parent) && !ismachinery(parent) && !isstructure(parent))
|
|
return COMPONENT_INCOMPATIBLE
|
|
|
|
src.throw_distance = throw_distance
|
|
src.throw_anchored = throw_anchored
|
|
src.throw_gentle = throw_gentle
|
|
|
|
/datum/component/knockback/RegisterWithParent()
|
|
. = ..()
|
|
if(ismachinery(parent) || isstructure(parent) || isgun(parent)) // turrets, etc
|
|
RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit)
|
|
else if(isitem(parent))
|
|
RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK, .proc/item_afterattack)
|
|
else if(ishostile(parent))
|
|
RegisterSignal(parent, COMSIG_HOSTILE_ATTACKINGTARGET, .proc/hostile_attackingtarget)
|
|
|
|
/datum/component/knockback/UnregisterFromParent()
|
|
. = ..()
|
|
UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT))
|
|
|
|
/// triggered after an item attacks something
|
|
/datum/component/knockback/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters)
|
|
if(!proximity_flag)
|
|
return
|
|
do_knockback(target, user, get_dir(source, target))
|
|
|
|
/// triggered after a hostile simplemob attacks something
|
|
/datum/component/knockback/proc/hostile_attackingtarget(mob/living/simple_animal/hostile/attacker, atom/target)
|
|
do_knockback(target, attacker, get_dir(attacker, target))
|
|
|
|
/// triggered after a projectile hits something
|
|
/datum/component/knockback/proc/projectile_hit(atom/fired_from, atom/movable/firer, atom/target, Angle)
|
|
do_knockback(target, null, angle2dir(Angle))
|
|
|
|
|
|
/**
|
|
* Throw a target in a direction
|
|
*
|
|
* Arguments:
|
|
* * target - Target atom to throw
|
|
* * thrower - Thing that caused this atom to be thrown
|
|
* * throw_dir - Direction to throw the atom
|
|
*/
|
|
/datum/component/knockback/proc/do_knockback(atom/target, mob/thrower, throw_dir)
|
|
if(!ismovable(target) || throw_dir == null)
|
|
return
|
|
var/atom/movable/throwee = target
|
|
if(throwee.anchored && !throw_anchored)
|
|
return
|
|
if(throw_distance < 0)
|
|
throw_dir = turn(throw_dir, 180)
|
|
throw_distance *= -1
|
|
var/atom/throw_target = get_edge_target_turf(throwee, throw_dir)
|
|
throwee.safe_throw_at(throw_target, throw_distance, 1, thrower) //, gentle = throw_gentle)
|