mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-21 19:17:50 +01:00
* change da world
* compile, thanks
* Update cere.dmm
* Update cere.dmm
* ready for test
* use the proper name please
its CERE not ceres.
* stops shuttle from forcibly docking with podbay
* things are now different
Landmark update for job spawns.
More hardsuits in EVA, engi, and atmos.
Disaster counters properly added.
Vault is now more spooky.
Gamma armoury moved to below gulag shuttle.
Sleeping rooms replaced with arcade and swimming pool.
Captains ERP nest deleted.
Tcomms now looks like it was designed by a functional human being.
Mining doesn't need a weird glass box.
Shuffled docking ports at arrivals.
Windows are now reinforced windows.
Mr changs has arrived.
* disposals functions now
* now with 50% more air
* gamma armoury doesn't attempt to become one with gulag shuttle
* disposals net is airless, vault is enclosed in some rock
* standard number of escape pods
* slight fixes
* more bugfixes
* lighting fixes
* divided hallways, added psych office, more cams
* fire alarms, shutters, and fixes
* temporary DME edit to set cere as default map
* fixed shuttle runtime
* this compiles and runs locally, please CI
* fixes hidden double pipe
* more double pipes
* more vents and scrubbers, morgue body delivery
* tweaks to secbot pathing
* various QoL changes
* Medbay expansion, med+arrival maints expansion.
* the definitive air alarm update, and more!
* Departmental emergency EVA suits, signage, tweaks.
* 2 Cryodorms added (oops). Asteroid sound updates.
* Borg cryo, shutters correctly rotated.
* Supply shuttle edit. I like joining the map queue.
* minor fixes, grav gen isolation.
* minor fixes
* Disposal fixes, lighting adjustment
* SabreML feedback changes
* More minor fixes
* More fixes
* NSS Farragus
* (most) floors turn into asteroid sand, not spess
* reverted random file edit, fixed mr teeny
* minor fixes
* big bombs can breach asteroid areas
* Asteroid plating exists, did you know? I do now!
* camera network pass
* walls become sand too on destruction
* lighting pass
* implements feedback, dramatically reduces ores
* yeets ores entirely, sci break room added
* roundstart pads, more solars, bigger departures
* runtimes
* mining resistant rock
* variable names are important
* AoE KA doesnt affect rocks
* actually fix AoE stuff
* now with 1000% more bats
* no sandy cables, a brig exit chute, more head ssu
* mech drills are not pickaxes
* proc rename, perma window, faster sapce bridges
* Brig rework
* robotics changes
* More sci edits
* Rotayshun changes
* dme edit
* Delete cerestation.dm
begone, thot
* temp edit so it loads cere as default
* merge conflicts begone
* decal purge
* map repipe
* removes under-wall pipe adapters
* shuffled maint areas
* dirt purge
* longest bridge rework
* fixes
* PPI feedback
* kitchen does, in fact, need air
* permabrig tweaks
* restores cc changes
* merge part 2
* tag purge
* secret clown HQ got me shook
* SQUASHENING
* solar shuffle
* directional consoles
* remove TM edits due to rotation
* merge conflict part 2
* pod pilot deletion
* cold rock, window tint fixes, etc.
* further red rocks
* further tweaks
* more standardising
* robotics redo
* carpet time
* CI update for cere
* Apply suggestions from code review
Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>
* more squash, corridor cam removal, etc.
* light switches
* minor fixes
* temp cere default
* FOODCART!
* fixes
* no airless no more
* space_hall
* compat pass 1
* make it work
* more changes
* slimmening
* air alarm tweak
* TM commit
* ci tests
* final CI changes?
* squash. squeeze, optimise
* wall vent
* disposals fix, more squeezing
* bugfixes
* false walls
* bedroom culling
* edits and fixes
* tweaks
* changes
* det window
* further tweaks
* Revert "TM commit"
This reverts commit 9e8814937f.
* More TM only changes reverted
* fixes smoothing with falsewalls
* denth changes
* the airlockenning
* cicicici
* CICICICI
* further tweaks
* further tweaks
* reverts weird sand behaviour code from ages ago
* oops
* universal adapter my beloathed
* nanomap moment
* webmap
* cere nanomap
* feedback updates
* updates
* airlock tweaks
* vents and tweaks
* solars moment
* triple APC fix
* south of where?
* airlock helpers
* disposal flap purge
* outpost monitor with actual real networks?
* tweakeroni
* fixes
* fixes
* tweaks
* fixes
* medbay improvements
* power and flaps
* changes
* aa changes
* fixes
* more fixeronies
* fixes!
* reversed
* chemicals
* chem tweaks
* fixes
* shuttle fixes
* holopad pass
* editseditsedits
* lightslightslights
* door
* /obj/machinery/computer/security/telescreen/entertainment
* sonic underground
* actual sonic reference
* Apply suggestions from code review
Co-authored-by: Charlie <69320440+hal9000PR@users.noreply.github.com>
* Tsrc
Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>
Co-authored-by: Charlie <69320440+hal9000PR@users.noreply.github.com>
506 lines
20 KiB
Plaintext
506 lines
20 KiB
Plaintext
/*********************Mining Hammer****************/
|
|
/obj/item/twohanded/kinetic_crusher
|
|
icon = 'icons/obj/mining.dmi'
|
|
icon_state = "crusher"
|
|
item_state = "crusher0"
|
|
name = "proto-kinetic crusher"
|
|
desc = "An early design of the proto-kinetic accelerator, it is little more than a combination of various mining tools cobbled together, forming a high-tech club. \
|
|
While it is an effective mining tool, it did little to aid any but the most skilled and/or suicidal miners against local fauna."
|
|
force = 0 //You can't hit stuff unless wielded
|
|
w_class = WEIGHT_CLASS_BULKY
|
|
slot_flags = SLOT_BACK
|
|
force_unwielded = 0
|
|
force_wielded = 20
|
|
throwforce = 5
|
|
throw_speed = 4
|
|
armour_penetration_flat = 10
|
|
materials = list(MAT_METAL = 1150, MAT_GLASS = 2075)
|
|
hitsound = 'sound/weapons/bladeslice.ogg'
|
|
attack_verb = list("smashed", "crushed", "cleaved", "chopped", "pulped")
|
|
sharp = TRUE
|
|
actions_types = list(/datum/action/item_action/toggle_light)
|
|
var/list/trophies = list()
|
|
var/charged = TRUE
|
|
var/charge_time = 15
|
|
var/detonation_damage = 50
|
|
var/backstab_bonus = 30
|
|
var/light_on = FALSE
|
|
var/brightness_on = 5
|
|
var/adaptive_damage_bonus = 0
|
|
|
|
/obj/item/twohanded/kinetic_crusher/Destroy()
|
|
QDEL_LIST_CONTENTS(trophies)
|
|
return ..()
|
|
|
|
/obj/item/twohanded/kinetic_crusher/examine(mob/living/user)
|
|
. = ..()
|
|
. += "<span class='notice'>Mark a large creature with the destabilizing force, then hit them in melee to do <b>[force + detonation_damage]</b> damage.</span>"
|
|
. += "<span class='notice'>Does <b>[force + detonation_damage + backstab_bonus]</b> damage if the target is backstabbed, instead of <b>[force + detonation_damage]</b>.</span>"
|
|
for(var/t in trophies)
|
|
var/obj/item/crusher_trophy/T = t
|
|
. += "<span class='notice'>It has \a [T] attached, which causes [T.effect_desc()].</span>"
|
|
|
|
/obj/item/twohanded/kinetic_crusher/attackby(obj/item/I, mob/living/user)
|
|
if(istype(I, /obj/item/crusher_trophy))
|
|
var/obj/item/crusher_trophy/T = I
|
|
T.add_to(src, user)
|
|
else
|
|
return ..()
|
|
|
|
/obj/item/twohanded/kinetic_crusher/crowbar_act(mob/user, obj/item/I)
|
|
. = TRUE
|
|
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
|
|
return
|
|
if(LAZYLEN(trophies))
|
|
to_chat(user, "<span class='notice'>You remove [src]'s trophies.</span>")
|
|
for(var/t in trophies)
|
|
var/obj/item/crusher_trophy/T = t
|
|
T.remove_from(src, user)
|
|
else
|
|
to_chat(user, "<span class='warning'>There are no trophies on [src].</span>")
|
|
|
|
/obj/item/twohanded/kinetic_crusher/attack(mob/living/target, mob/living/carbon/user)
|
|
if(!wielded)
|
|
to_chat(user, "<span class='warning'>[src] is too heavy to use with one hand. You fumble and drop everything.")
|
|
user.drop_r_hand()
|
|
user.drop_l_hand()
|
|
return
|
|
var/datum/status_effect/crusher_damage/C = target.has_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
|
|
if(!C)
|
|
C = target.apply_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
|
|
var/target_health = target.health
|
|
var/temp_force_bonus = 0
|
|
var/datum/status_effect/adaptive_learning/A = target.has_status_effect(STATUS_EFFECT_ADAPTIVELEARNING)
|
|
if(!A && adaptive_damage_bonus)
|
|
A = target.apply_status_effect(STATUS_EFFECT_ADAPTIVELEARNING)
|
|
if(A)
|
|
temp_force_bonus = A.bonus_damage
|
|
A.bonus_damage = min((A.bonus_damage + adaptive_damage_bonus), 20)
|
|
force += temp_force_bonus
|
|
..()
|
|
force -= temp_force_bonus
|
|
for(var/t in trophies)
|
|
if(!QDELETED(target))
|
|
var/obj/item/crusher_trophy/T = t
|
|
T.on_melee_hit(target, user)
|
|
if(!QDELETED(C) && !QDELETED(target))
|
|
C.total_damage += target_health - target.health //we did some damage, but let's not assume how much we did
|
|
|
|
/obj/item/twohanded/kinetic_crusher/afterattack(atom/target, mob/living/user, proximity_flag, clickparams)
|
|
. = ..()
|
|
if(!wielded)
|
|
return
|
|
if(user.has_status_effect(STATUS_EFFECT_DASH) && user.a_intent == INTENT_HELP)
|
|
if(user.throw_at(target, range = 3, speed = 3, spin = FALSE, diagonals_first = TRUE))
|
|
playsound(src, 'sound/effects/stealthoff.ogg', 50, 1, 1)
|
|
user.visible_message("<span class='warning'>[user] dashes!</span>")
|
|
else
|
|
to_chat(user, "<span class='warning'>Something prevents you from dashing!</span>")
|
|
user.remove_status_effect(STATUS_EFFECT_DASH)
|
|
return
|
|
if(!proximity_flag && charged)//Mark a target, or mine a tile.
|
|
var/turf/proj_turf = user.loc
|
|
if(!isturf(proj_turf))
|
|
return
|
|
var/obj/item/projectile/destabilizer/D = new /obj/item/projectile/destabilizer(proj_turf)
|
|
for(var/t in trophies)
|
|
var/obj/item/crusher_trophy/T = t
|
|
T.on_projectile_fire(D, user)
|
|
D.preparePixelProjectile(target, get_turf(target), user, clickparams)
|
|
D.firer = user
|
|
D.firer_source_atom = src
|
|
D.hammer_synced = src
|
|
playsound(user, 'sound/weapons/plasma_cutter.ogg', 100, 1)
|
|
D.fire()
|
|
charged = FALSE
|
|
update_icon()
|
|
addtimer(CALLBACK(src, PROC_REF(Recharge)), charge_time)
|
|
return
|
|
if(proximity_flag && isliving(target))
|
|
var/mob/living/L = target
|
|
var/datum/status_effect/crusher_mark/CM = L.has_status_effect(STATUS_EFFECT_CRUSHERMARK)
|
|
if(!CM || CM.hammer_synced != src || !L.remove_status_effect(STATUS_EFFECT_CRUSHERMARK))
|
|
return
|
|
var/datum/status_effect/crusher_damage/C = L.has_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
|
|
if(!C)
|
|
C = L.apply_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
|
|
var/target_health = L.health
|
|
for(var/t in trophies)
|
|
var/obj/item/crusher_trophy/T = t
|
|
T.on_mark_detonation(target, user)
|
|
if(!QDELETED(L))
|
|
if(!QDELETED(C))
|
|
C.total_damage += target_health - L.health //we did some damage, but let's not assume how much we did
|
|
new /obj/effect/temp_visual/kinetic_blast(get_turf(L))
|
|
var/backstab_dir = get_dir(user, L)
|
|
var/def_check = L.getarmor(type = BOMB)
|
|
if((user.dir & backstab_dir) && (L.dir & backstab_dir))
|
|
if(!QDELETED(C))
|
|
C.total_damage += detonation_damage + backstab_bonus //cheat a little and add the total before killing it, so certain mobs don't have much lower chances of giving an item
|
|
L.apply_damage(detonation_damage + backstab_bonus, BRUTE, blocked = def_check)
|
|
playsound(user, 'sound/weapons/kenetic_accel.ogg', 100, 1) //Seriously who spelled it wrong
|
|
else
|
|
if(!QDELETED(C))
|
|
C.total_damage += detonation_damage
|
|
L.apply_damage(detonation_damage, BRUTE, blocked = def_check)
|
|
|
|
/obj/item/twohanded/kinetic_crusher/proc/Recharge()
|
|
if(!charged)
|
|
charged = TRUE
|
|
update_icon()
|
|
playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
|
|
|
|
/obj/item/twohanded/kinetic_crusher/ui_action_click(mob/user, actiontype)
|
|
light_on = !light_on
|
|
playsound(user, 'sound/weapons/empty.ogg', 100, TRUE)
|
|
update_brightness(user)
|
|
update_icon()
|
|
|
|
/obj/item/twohanded/kinetic_crusher/proc/update_brightness(mob/user = null)
|
|
if(light_on)
|
|
set_light(brightness_on)
|
|
else
|
|
set_light(0)
|
|
|
|
/obj/item/twohanded/kinetic_crusher/update_icon_state()
|
|
item_state = "crusher[wielded]"
|
|
|
|
/obj/item/twohanded/kinetic_crusher/update_overlays()
|
|
. = ..()
|
|
if(!charged)
|
|
. += "[icon_state]_uncharged"
|
|
if(light_on)
|
|
. += "[icon_state]_lit"
|
|
spawn(1)
|
|
for(var/X in actions)
|
|
var/datum/action/A = X
|
|
A.UpdateButtonIcon()
|
|
|
|
//destablizing force
|
|
/obj/item/projectile/destabilizer
|
|
name = "destabilizing force"
|
|
icon_state = "pulse1"
|
|
nodamage = TRUE
|
|
damage = 0 //We're just here to mark people. This is still a melee weapon.
|
|
damage_type = BRUTE
|
|
flag = BOMB
|
|
range = 6
|
|
log_override = TRUE
|
|
var/obj/item/twohanded/kinetic_crusher/hammer_synced
|
|
|
|
/obj/item/projectile/destabilizer/Destroy()
|
|
hammer_synced = null
|
|
return ..()
|
|
|
|
/obj/item/projectile/destabilizer/on_hit(atom/target, blocked = FALSE)
|
|
if(isliving(target))
|
|
var/mob/living/L = target
|
|
var/had_effect = (L.has_status_effect(STATUS_EFFECT_CRUSHERMARK)) //used as a boolean
|
|
var/datum/status_effect/crusher_mark/CM = L.apply_status_effect(STATUS_EFFECT_CRUSHERMARK, hammer_synced)
|
|
if(hammer_synced)
|
|
for(var/t in hammer_synced.trophies)
|
|
var/obj/item/crusher_trophy/T = t
|
|
T.on_mark_application(target, CM, had_effect)
|
|
var/target_turf = get_turf(target)
|
|
if(ismineralturf(target_turf))
|
|
if(is_ancient_rock(target_turf))
|
|
visible_message("<span class='notice'>This rock appears to be resistant to all mining tools except pickaxes!</span>")
|
|
else
|
|
var/turf/simulated/mineral/M = target_turf
|
|
new /obj/effect/temp_visual/kinetic_blast(M)
|
|
M.gets_drilled(firer)
|
|
..()
|
|
|
|
//trophies
|
|
/obj/item/crusher_trophy
|
|
name = "tail spike"
|
|
desc = "A strange spike with no usage."
|
|
icon = 'icons/obj/lavaland/artefacts.dmi'
|
|
icon_state = "tail_spike"
|
|
var/bonus_value = 10 //if it has a bonus effect, this is how much that effect is
|
|
var/denied_type = /obj/item/crusher_trophy
|
|
|
|
/obj/item/crusher_trophy/examine(mob/living/user)
|
|
. = ..()
|
|
. += "<span class='notice'>Causes [effect_desc()] when attached to a kinetic crusher.</span>"
|
|
|
|
/obj/item/crusher_trophy/proc/effect_desc()
|
|
return "errors"
|
|
|
|
/obj/item/crusher_trophy/attackby(obj/item/A, mob/living/user)
|
|
if(istype(A, /obj/item/twohanded/kinetic_crusher))
|
|
add_to(A, user)
|
|
else
|
|
..()
|
|
|
|
/obj/item/crusher_trophy/proc/add_to(obj/item/twohanded/kinetic_crusher/H, mob/living/user)
|
|
for(var/t in H.trophies)
|
|
var/obj/item/crusher_trophy/T = t
|
|
if(istype(T, denied_type) || istype(src, T.denied_type))
|
|
to_chat(user, "<span class='warning'>You can't seem to attach [src] to [H]. Maybe remove a few trophies?</span>")
|
|
return FALSE
|
|
if(!user.unEquip(src))
|
|
return
|
|
forceMove(H)
|
|
H.trophies += src
|
|
to_chat(user, "<span class='notice'>You attach [src] to [H].</span>")
|
|
return TRUE
|
|
|
|
/obj/item/crusher_trophy/proc/remove_from(obj/item/twohanded/kinetic_crusher/H, mob/living/user)
|
|
forceMove(get_turf(H))
|
|
H.trophies -= src
|
|
return TRUE
|
|
|
|
/obj/item/crusher_trophy/proc/on_melee_hit(mob/living/target, mob/living/user) //the target and the user
|
|
|
|
/obj/item/crusher_trophy/proc/on_projectile_fire(obj/item/projectile/destabilizer/marker, mob/living/user) //the projectile fired and the user
|
|
|
|
/obj/item/crusher_trophy/proc/on_mark_application(mob/living/target, datum/status_effect/crusher_mark/mark, had_mark) //the target, the mark applied, and if the target had a mark before
|
|
|
|
/obj/item/crusher_trophy/proc/on_mark_detonation(mob/living/target, mob/living/user) //the target and the user
|
|
|
|
//goliath
|
|
/obj/item/crusher_trophy/goliath_tentacle
|
|
name = "goliath tentacle"
|
|
desc = "A sliced-off goliath tentacle. Suitable as a trophy for a kinetic crusher."
|
|
icon_state = "goliath_tentacle"
|
|
denied_type = /obj/item/crusher_trophy/goliath_tentacle
|
|
bonus_value = 2
|
|
var/missing_health_ratio = 0.1
|
|
var/missing_health_desc = 10
|
|
|
|
/obj/item/crusher_trophy/goliath_tentacle/effect_desc()
|
|
return "mark detonation to do <b>[bonus_value]</b> more damage for every <b>[missing_health_desc]</b> health you are missing"
|
|
|
|
/obj/item/crusher_trophy/goliath_tentacle/on_mark_detonation(mob/living/target, mob/living/user)
|
|
var/missing_health = user.health - user.maxHealth
|
|
missing_health *= missing_health_ratio //bonus is active at all times, even if you're above 90 health
|
|
missing_health *= bonus_value //multiply the remaining amount by bonus_value
|
|
if(missing_health > 0)
|
|
target.adjustBruteLoss(missing_health) //and do that much damage
|
|
|
|
|
|
/obj/item/crusher_trophy/goliath_tentacle/ancient
|
|
name = "ancient goliath tentacle"
|
|
desc = "A HUGE sliced-off goliath tentacle. Suitable as a trophy for a kinetic crusher."
|
|
icon_state = "ancient_goliath_tentacle"
|
|
bonus_value = 4
|
|
|
|
//watcher
|
|
/obj/item/crusher_trophy/watcher_wing
|
|
name = "watcher wing"
|
|
desc = "A wing ripped from a watcher. Suitable as a trophy for a kinetic crusher."
|
|
icon_state = "watcher_wing"
|
|
denied_type = /obj/item/crusher_trophy/watcher_wing
|
|
bonus_value = 5
|
|
|
|
/obj/item/crusher_trophy/watcher_wing/effect_desc()
|
|
return "mark detonation to prevent certain creatures from using certain attacks for <b>[bonus_value*0.1]</b> second\s"
|
|
|
|
/obj/item/crusher_trophy/watcher_wing/on_mark_detonation(mob/living/target, mob/living/user)
|
|
if(ishostile(target))
|
|
var/mob/living/simple_animal/hostile/H = target
|
|
if(H.ranged) //briefly delay ranged attacks
|
|
if(H.ranged_cooldown >= world.time)
|
|
H.ranged_cooldown += bonus_value
|
|
else
|
|
H.ranged_cooldown = bonus_value + world.time
|
|
|
|
//magmawing watcher
|
|
/obj/item/crusher_trophy/blaster_tubes/magma_wing
|
|
name = "magmawing watcher wing"
|
|
desc = "A still-searing wing from a magmawing watcher. Suitable as a trophy for a kinetic crusher."
|
|
icon_state = "magma_wing"
|
|
gender = NEUTER
|
|
bonus_value = 5
|
|
|
|
/obj/item/crusher_trophy/blaster_tubes/magma_wing/effect_desc()
|
|
return "mark detonation to make the next destabilizer shot deal <b>[bonus_value]</b> damage"
|
|
|
|
/obj/item/crusher_trophy/blaster_tubes/magma_wing/on_projectile_fire(obj/item/projectile/destabilizer/marker, mob/living/user)
|
|
if(deadly_shot)
|
|
marker.name = "heated [marker.name]"
|
|
marker.icon_state = "lava"
|
|
marker.damage = bonus_value
|
|
marker.nodamage = FALSE
|
|
deadly_shot = FALSE
|
|
|
|
//icewing watcher
|
|
/obj/item/crusher_trophy/watcher_wing/ice_wing
|
|
name = "icewing watcher wing"
|
|
desc = "A carefully preserved frozen wing from an icewing watcher. Suitable as a trophy for a kinetic crusher."
|
|
icon_state = "ice_wing"
|
|
bonus_value = 8
|
|
|
|
//legion
|
|
/obj/item/crusher_trophy/legion_skull
|
|
name = "legion skull"
|
|
desc = "A dead and lifeless legion skull. Suitable as a trophy for a kinetic crusher."
|
|
icon_state = "legion_skull"
|
|
denied_type = /obj/item/crusher_trophy/legion_skull
|
|
bonus_value = 3
|
|
|
|
/obj/item/crusher_trophy/legion_skull/effect_desc()
|
|
return "a kinetic crusher to recharge <b>[bonus_value*0.1]</b> second\s faster"
|
|
|
|
/obj/item/crusher_trophy/legion_skull/add_to(obj/item/twohanded/kinetic_crusher/H, mob/living/user)
|
|
. = ..()
|
|
if(.)
|
|
H.charge_time -= bonus_value
|
|
|
|
/obj/item/crusher_trophy/legion_skull/remove_from(obj/item/twohanded/kinetic_crusher/H, mob/living/user)
|
|
. = ..()
|
|
if(.)
|
|
H.charge_time += bonus_value
|
|
|
|
//blood-drunk hunter
|
|
/obj/item/crusher_trophy/miner_eye
|
|
name = "eye of a blood-drunk hunter"
|
|
desc = "Its pupil is collapsed and turned to mush. Suitable as a trophy for a kinetic crusher."
|
|
icon_state = "hunter_eye"
|
|
denied_type = /obj/item/crusher_trophy/miner_eye
|
|
|
|
/obj/item/crusher_trophy/miner_eye/effect_desc()
|
|
return "mark detonation to grant stun immunity and <b>90%</b> damage reduction for <b>1</b> second"
|
|
|
|
/obj/item/crusher_trophy/miner_eye/on_mark_detonation(mob/living/target, mob/living/user)
|
|
user.apply_status_effect(STATUS_EFFECT_BLOODDRUNK)
|
|
|
|
//legion
|
|
|
|
/obj/item/crusher_trophy/empowered_legion_skull
|
|
name = "empowered legion skull"
|
|
desc = "A powerful looking skull with glowing red eyes."
|
|
icon_state = "ashen_skull"
|
|
denied_type = /obj/item/crusher_trophy/empowered_legion_skull
|
|
|
|
/obj/item/crusher_trophy/empowered_legion_skull/effect_desc()
|
|
return "mark detonation grants the ability to dash a short distance on help intent"
|
|
|
|
/obj/item/crusher_trophy/empowered_legion_skull/on_mark_detonation(mob/living/target, mob/living/user)
|
|
user.apply_status_effect(STATUS_EFFECT_DASH)
|
|
|
|
//ash drake
|
|
/obj/item/crusher_trophy/tail_spike
|
|
desc = "A spike taken from an ash drake's tail. Suitable as a trophy for a kinetic crusher."
|
|
denied_type = /obj/item/crusher_trophy/tail_spike
|
|
bonus_value = 5
|
|
|
|
/obj/item/crusher_trophy/tail_spike/effect_desc()
|
|
return "mark detonation to do <b>[bonus_value]</b> damage to nearby creatures and push them back"
|
|
|
|
/obj/item/crusher_trophy/tail_spike/on_mark_detonation(mob/living/target, mob/living/user)
|
|
for(var/mob/living/L in oview(2, user))
|
|
if(L.stat == DEAD)
|
|
continue
|
|
playsound(L, 'sound/magic/fireball.ogg', 20, 1)
|
|
new /obj/effect/temp_visual/fire(L.loc)
|
|
addtimer(CALLBACK(src, PROC_REF(pushback), L, user), 1) //no free backstabs, we push AFTER module stuff is done
|
|
L.adjustFireLoss(bonus_value)
|
|
|
|
/obj/item/crusher_trophy/tail_spike/proc/pushback(mob/living/target, mob/living/user)
|
|
if(!QDELETED(target) && !QDELETED(user) && (!target.anchored || ismegafauna(target))) //megafauna will always be pushed
|
|
step(target, get_dir(user, target))
|
|
|
|
//bubblegum
|
|
/obj/item/crusher_trophy/demon_claws
|
|
name = "demon claws"
|
|
desc = "A set of blood-drenched claws from a massive demon's hand. Suitable as a trophy for a kinetic crusher."
|
|
icon_state = "demon_claws"
|
|
gender = PLURAL
|
|
denied_type = /obj/item/crusher_trophy/demon_claws
|
|
bonus_value = 10
|
|
var/static/list/damage_heal_order = list(BRUTE, BURN, OXY)
|
|
|
|
/obj/item/crusher_trophy/demon_claws/effect_desc()
|
|
return "melee hits to do <b>[bonus_value * 0.2]</b> more damage and heal you for <b>[bonus_value * 0.1]</b>, with <b>5X</b> effect on mark detonation"
|
|
|
|
/obj/item/crusher_trophy/demon_claws/add_to(obj/item/twohanded/kinetic_crusher/H, mob/living/user)
|
|
. = ..()
|
|
if(.)
|
|
H.force += bonus_value * 0.2
|
|
H.force_unwielded += bonus_value * 0.2
|
|
H.force_wielded += bonus_value * 0.2
|
|
H.detonation_damage += bonus_value * 0.8
|
|
|
|
/obj/item/crusher_trophy/demon_claws/remove_from(obj/item/twohanded/kinetic_crusher/H, mob/living/user)
|
|
. = ..()
|
|
if(.)
|
|
H.force -= bonus_value * 0.2
|
|
H.force_unwielded -= bonus_value * 0.2
|
|
H.force_wielded -= bonus_value * 0.2
|
|
H.detonation_damage -= bonus_value * 0.8
|
|
|
|
/obj/item/crusher_trophy/demon_claws/on_melee_hit(mob/living/target, mob/living/user)
|
|
user.heal_ordered_damage(bonus_value * 0.1, damage_heal_order)
|
|
|
|
/obj/item/crusher_trophy/demon_claws/on_mark_detonation(mob/living/target, mob/living/user)
|
|
user.heal_ordered_damage(bonus_value * 0.4, damage_heal_order)
|
|
|
|
//colossus
|
|
/obj/item/crusher_trophy/blaster_tubes
|
|
name = "blaster tubes"
|
|
desc = "The blaster tubes from a colossus's arm. Suitable as a trophy for a kinetic crusher."
|
|
icon_state = "blaster_tubes"
|
|
gender = PLURAL
|
|
denied_type = /obj/item/crusher_trophy/blaster_tubes
|
|
bonus_value = 15
|
|
var/deadly_shot = FALSE
|
|
|
|
/obj/item/crusher_trophy/blaster_tubes/effect_desc()
|
|
return "mark detonation to make the next destabilizer shot deal <b>[bonus_value]</b> damage but move slower"
|
|
|
|
/obj/item/crusher_trophy/blaster_tubes/on_projectile_fire(obj/item/projectile/destabilizer/marker, mob/living/user)
|
|
if(deadly_shot)
|
|
marker.name = "deadly [marker.name]"
|
|
marker.icon_state = "chronobolt"
|
|
marker.damage = bonus_value
|
|
marker.nodamage = FALSE
|
|
marker.speed = 2
|
|
deadly_shot = FALSE
|
|
|
|
/obj/item/crusher_trophy/blaster_tubes/on_mark_detonation(mob/living/target, mob/living/user)
|
|
deadly_shot = TRUE
|
|
addtimer(CALLBACK(src, PROC_REF(reset_deadly_shot)), 300, TIMER_UNIQUE|TIMER_OVERRIDE)
|
|
|
|
/obj/item/crusher_trophy/blaster_tubes/proc/reset_deadly_shot()
|
|
deadly_shot = FALSE
|
|
|
|
//hierophant
|
|
/obj/item/crusher_trophy/vortex_talisman
|
|
name = "vortex talisman"
|
|
desc = "A glowing trinket that was originally the Hierophant's beacon. Suitable as a trophy for a kinetic crusher."
|
|
icon_state = "vortex_talisman"
|
|
denied_type = /obj/item/crusher_trophy/vortex_talisman
|
|
|
|
/obj/item/crusher_trophy/vortex_talisman/effect_desc()
|
|
return "mark detonation to create a homing hierophant chaser"
|
|
|
|
/obj/item/crusher_trophy/vortex_talisman/on_mark_detonation(mob/living/target, mob/living/user)
|
|
var/obj/effect/temp_visual/hierophant/chaser/chaser = new(get_turf(user), user, target, 3, TRUE)
|
|
chaser.monster_damage_boost = FALSE // Weaker due to no cooldown
|
|
chaser.damage = 20 //But also stronger due to AI / mining mob resistance
|
|
|
|
/obj/effect/temp_visual/hierophant/wall/crusher
|
|
duration = 75
|
|
|
|
/obj/item/crusher_trophy/adaptive_intelligence_core
|
|
name = "adaptive intelligence core"
|
|
desc = "Seems to be one of the cores from a massive robot. Suitable as a trophy for a kinetic crusher."
|
|
icon_state = "adaptive_core"
|
|
denied_type = /obj/item/crusher_trophy/adaptive_intelligence_core
|
|
bonus_value = 2
|
|
|
|
/obj/item/crusher_trophy/adaptive_intelligence_core/effect_desc()
|
|
return "melee hits deal <b>[bonus_value]</b> more damage per hit after hitting a target, up to <b>[bonus_value * 10]</b> extra damage to that target"
|
|
|
|
/obj/item/crusher_trophy/adaptive_intelligence_core/add_to(obj/item/twohanded/kinetic_crusher/H, mob/living/user)
|
|
. = ..()
|
|
if(.)
|
|
H.adaptive_damage_bonus += bonus_value
|
|
|
|
/obj/item/crusher_trophy/adaptive_intelligence_core/remove_from(obj/item/twohanded/kinetic_crusher/H, mob/living/user)
|
|
. = ..()
|
|
if(.)
|
|
H.adaptive_damage_bonus -= bonus_value
|