mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-30 23:48:28 +01:00
Merge remote-tracking branch 'upstream/master' into universal-damage
This commit is contained in:
@@ -1042,7 +1042,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/proc/forceFedAttackLog(var/obj/item/reagent_containers/food/toEat, mob/user)
|
||||
add_attack_logs(user, src, "Fed [toEat]. Reagents: [toEat.reagents.log_list(toEat)]", ATKLOG_MOST)
|
||||
add_attack_logs(user, src, "Fed [toEat]. Reagents: [toEat.reagents.log_list(toEat)]", toEat.reagents.harmless_helper() ? ATKLOG_ALMOSTALL : null)
|
||||
if(!iscarbon(user))
|
||||
LAssailant = null
|
||||
else
|
||||
|
||||
@@ -101,11 +101,11 @@
|
||||
return FALSE
|
||||
|
||||
set_heartattack(FALSE)
|
||||
|
||||
SSmobs.cubemonkeys -= src
|
||||
if(dna.species)
|
||||
dna.species.handle_hud_icons(src)
|
||||
//Handle species-specific deaths.
|
||||
dna.species.handle_death(src)
|
||||
dna.species.handle_death(gibbed, src)
|
||||
|
||||
if(ishuman(LAssailant))
|
||||
var/mob/living/carbon/human/H=LAssailant
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
|
||||
/mob/living/carbon/human/Destroy()
|
||||
. = ..()
|
||||
SSmobs.cubemonkeys -= src
|
||||
QDEL_LIST(bodyparts)
|
||||
splinted_limbs.Cut()
|
||||
|
||||
|
||||
@@ -304,10 +304,7 @@
|
||||
/datum/species/proc/handle_dna(mob/living/carbon/human/H, remove) //Handles DNA mutations, as that doesn't work at init. Make sure you call genemutcheck on any blocks changed here
|
||||
return
|
||||
|
||||
/datum/species/proc/handle_death(mob/living/carbon/human/H) //Handles any species-specific death events (such as dionaea nymph spawns).
|
||||
return
|
||||
|
||||
/datum/species/proc/spec_death(gibbed, mob/living/carbon/human/C)
|
||||
/datum/species/proc/handle_death(gibbed, mob/living/carbon/human/H) //Handles any species-specific death events (such as dionaea nymph spawns).
|
||||
return
|
||||
|
||||
/datum/species/proc/apply_damage(damage = 0, damagetype = BRUTE, def_zone = null, blocked = 0, mob/living/carbon/human/H, sharp = 0, obj/used_weapon = null)
|
||||
|
||||
@@ -410,7 +410,7 @@
|
||||
prefix = "Sand"
|
||||
special_names = list("Castle", "Bag", "Dune", "Worm", "Storm")
|
||||
|
||||
/datum/species/golem/sand/handle_death(mob/living/carbon/human/H)
|
||||
/datum/species/golem/sand/handle_death(gibbed, mob/living/carbon/human/H)
|
||||
H.visible_message("<span class='danger'>[H] turns into a pile of sand!</span>")
|
||||
for(var/obj/item/W in H)
|
||||
H.unEquip(W)
|
||||
@@ -442,7 +442,7 @@
|
||||
prefix = "Glass"
|
||||
special_names = list("Lens", "Prism", "Fiber", "Bead")
|
||||
|
||||
/datum/species/golem/glass/handle_death(mob/living/carbon/human/H)
|
||||
/datum/species/golem/glass/handle_death(gibbed, mob/living/carbon/human/H)
|
||||
playsound(H, "shatter", 70, 1)
|
||||
H.visible_message("<span class='danger'>[H] shatters!</span>")
|
||||
for(var/obj/item/W in H)
|
||||
@@ -679,7 +679,7 @@
|
||||
active = null
|
||||
..()
|
||||
|
||||
/datum/species/golem/bananium/handle_death(mob/living/carbon/human/H)
|
||||
/datum/species/golem/bananium/handle_death(gibbed, mob/living/carbon/human/H)
|
||||
playsound(get_turf(H), 'sound/misc/sadtrombone.ogg', 70, 0)
|
||||
|
||||
/datum/unarmed_attack/golem/bananium
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
if(monitor)
|
||||
monitor.Remove(H)
|
||||
|
||||
/datum/species/machine/handle_death(mob/living/carbon/human/H)
|
||||
/datum/species/machine/handle_death(gibbed, mob/living/carbon/human/H)
|
||||
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
|
||||
if(!head_organ)
|
||||
return
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
H.light_color = "#1C1C00"
|
||||
H.set_light(2)
|
||||
|
||||
/datum/species/nucleation/handle_death(mob/living/carbon/human/H)
|
||||
/datum/species/nucleation/handle_death(gibbed, mob/living/carbon/human/H)
|
||||
var/turf/T = get_turf(H)
|
||||
H.visible_message("<span class='warning'>[H]'s body explodes, leaving behind a pile of microscopic crystals!</span>")
|
||||
explosion(T, 0, 0, 2, 2) // Create a small explosion burst upon death
|
||||
|
||||
@@ -55,5 +55,5 @@
|
||||
"is twisting their own neck!",
|
||||
"is holding their breath!")
|
||||
|
||||
/datum/species/tajaran/handle_death(mob/living/carbon/human/H)
|
||||
/datum/species/tajaran/handle_death(gibbed, mob/living/carbon/human/H)
|
||||
H.stop_tail_wagging(1)
|
||||
@@ -102,7 +102,7 @@
|
||||
to_chat(user, "<span class='warning'>You run out of momentum!</span>")
|
||||
return
|
||||
|
||||
/datum/species/unathi/handle_death(mob/living/carbon/human/H)
|
||||
/datum/species/unathi/handle_death(gibbed, mob/living/carbon/human/H)
|
||||
H.stop_tail_wagging(1)
|
||||
|
||||
/datum/species/unathi/ashwalker
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
|
||||
speciesbox = /obj/item/storage/box/survival_vox
|
||||
|
||||
/datum/species/vox/handle_death(mob/living/carbon/human/H)
|
||||
/datum/species/vox/handle_death(gibbed, mob/living/carbon/human/H)
|
||||
H.stop_tail_wagging(1)
|
||||
|
||||
/datum/species/vox/after_equip_job(datum/job/J, mob/living/carbon/human/H)
|
||||
|
||||
@@ -49,5 +49,5 @@
|
||||
"is twisting their own neck!",
|
||||
"is holding their breath!")
|
||||
|
||||
/datum/species/vulpkanin/handle_death(mob/living/carbon/human/H)
|
||||
/datum/species/vulpkanin/handle_death(gibbed, mob/living/carbon/human/H)
|
||||
H.stop_tail_wagging(1)
|
||||
@@ -49,7 +49,7 @@
|
||||
default_hair = "Antennae"
|
||||
|
||||
|
||||
/datum/species/wryn/handle_death(mob/living/carbon/human/H)
|
||||
/datum/species/wryn/handle_death(gibbed, mob/living/carbon/human/H)
|
||||
for(var/mob/living/carbon/C in GLOB.living_mob_list)
|
||||
if(C.get_int_organ(/obj/item/organ/internal/wryn/hivenode))
|
||||
to_chat(C, "<span class='danger'><B>Your antennae tingle as you are overcome with pain...</B></span>")
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
playsound(H, pick(spooks), 50, TRUE, 10)
|
||||
|
||||
//Congrats you somehow died so hard you stopped being a zombie
|
||||
/datum/species/zombie/infectious/spec_death(gibbed, mob/living/carbon/C)
|
||||
/datum/species/zombie/infectious/handle_death(gibbed, mob/living/carbon/C)
|
||||
. = ..()
|
||||
var/obj/item/organ/internal/zombie_infection/infection
|
||||
infection = C.get_organ_slot("zombie_infection")
|
||||
|
||||
@@ -30,6 +30,8 @@
|
||||
icon_state = "ai-magma"
|
||||
|
||||
/mob/living/silicon/decoy/syndicate/depot
|
||||
universal_speak = TRUE
|
||||
universal_understand = TRUE
|
||||
var/raised_alert = FALSE
|
||||
|
||||
/mob/living/silicon/decoy/syndicate/depot/proc/raise_alert()
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,15 +1,15 @@
|
||||
/mob/living/simple_animal/hostile/netherworld
|
||||
name = "creature"
|
||||
desc = "A sanity-destroying otherthing from the netherworld."
|
||||
icon_state = "otherthing"
|
||||
icon_living = "otherthing"
|
||||
icon_dead = "otherthing-dead"
|
||||
icon_state = "otherthing-pink"
|
||||
icon_living = "otherthing-pink"
|
||||
icon_dead = "otherthing-pink-dead"
|
||||
health = 80
|
||||
maxHealth = 80
|
||||
obj_damage = 100
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 50
|
||||
attacktext = "slashes"
|
||||
attacktext = "chomps"
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
faction = list("creature")
|
||||
speak_emote = list("screams")
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/netherworld/migo/Initialize()
|
||||
. = ..()
|
||||
migo_sounds = list('sound/items/bubblewrap.ogg', 'sound/items/change_jaws.ogg', 'sound/items/crowbar.ogg', 'sound/items/drink.ogg', 'sound/items/deconstruct.ogg', 'sound/items/change_drill.ogg', 'sound/items/dodgeball.ogg', 'sound/items/eatfood.ogg', 'sound/items/screwdriver.ogg', 'sound/items/weeoo1.ogg', 'sound/items/wirecutter.ogg', 'sound/items/welder.ogg', 'sound/items/zip.ogg', 'sound/items/rped.ogg', 'sound/items/ratchet.ogg', 'sound/items/polaroid1.ogg', 'sound/items/pshoom.ogg', 'sound/items/airhorn.ogg', 'sound/voice/bcreep.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/ed209_20sec.ogg', 'sound/voice/hiss3.ogg', 'sound/voice/hiss6.ogg', 'sound/voice/mpatchedup.ogg', 'sound/voice/mfeelbetter.ogg', 'sound/weapons/sear.ogg', 'sound/ambience/antag/tatoralert.ogg', 'sound/mecha/nominal.ogg', 'sound/mecha/weapdestr.ogg', 'sound/mecha/critdestr.ogg', 'sound/mecha/imag_enh.ogg', 'sound/effects/adminhelp.ogg', 'sound/effects/alert.ogg', 'sound/effects/attackblob.ogg', 'sound/effects/bamf.ogg', 'sound/effects/blobattack.ogg', 'sound/effects/break_stone.ogg', 'sound/effects/bubbles.ogg', 'sound/effects/bubbles2.ogg', 'sound/effects/clang.ogg', 'sound/effects/clownstep2.ogg', 'sound/effects/dimensional_rend.ogg', 'sound/effects/doorcreaky.ogg', 'sound/effects/empulse.ogg', 'sound/effects/explosionfar.ogg', 'sound/effects/explosion1.ogg', 'sound/effects/grillehit.ogg', 'sound/effects/genetics.ogg', 'sound/effects/heartbeat.ogg', 'sound/effects/hyperspace_begin.ogg', 'sound/effects/hyperspace_end.ogg', 'sound/goonstation/effects/screech.ogg', 'sound/effects/phasein.ogg', 'sound/effects/picaxe1.ogg', 'sound/effects/sparks1.ogg', 'sound/effects/smoke.ogg', 'sound/effects/splat.ogg', 'sound/effects/snap.ogg', 'sound/effects/tendril_destroyed.ogg', 'sound/effects/supermatter.ogg', 'sound/misc/desceration-01.ogg', 'sound/misc/desceration-02.ogg', 'sound/misc/desceration-03.ogg', 'sound/misc/bloblarm.ogg', 'sound/goonstation/misc/airraid_loop.ogg', 'sound/misc/interference.ogg', 'sound/misc/notice1.ogg', 'sound/misc/notice2.ogg', 'sound/misc/sadtrombone.ogg', 'sound/misc/slip.ogg', 'sound/weapons/armbomb.ogg', 'sound/weapons/chainsaw.ogg', 'sound/weapons/emitter.ogg', 'sound/weapons/emitter2.ogg', 'sound/weapons/blade1.ogg', 'sound/weapons/bladeslice.ogg', 'sound/weapons/blastcannon.ogg', 'sound/weapons/blaster.ogg', 'sound/weapons/bulletflyby3.ogg', 'sound/weapons/circsawhit.ogg', 'sound/weapons/cqchit2.ogg', 'sound/weapons/drill.ogg', 'sound/weapons/genhit1.ogg', 'sound/weapons/gunshots/gunshot_silenced.ogg', 'sound/weapons/gunshots/gunshot.ogg', 'sound/weapons/handcuffs.ogg', 'sound/weapons/homerun.ogg', 'sound/weapons/kenetic_accel.ogg', 'sound/machines/fryer/deep_fryer_emerge.ogg', 'sound/machines/airlock_alien_prying.ogg', 'sound/machines/airlock_close.ogg', 'sound/machines/airlockforced.ogg', 'sound/machines/airlock_open.ogg', 'sound/machines/alarm.ogg', 'sound/machines/blender.ogg', 'sound/machines/boltsdown.ogg', 'sound/machines/boltsup.ogg', 'sound/machines/buzz-sigh.ogg', 'sound/machines/buzz-two.ogg', 'sound/machines/chime.ogg', 'sound/machines/defib_charge.ogg', 'sound/machines/defib_failed.ogg', 'sound/machines/defib_ready.ogg', 'sound/machines/defib_zap.ogg', 'sound/machines/deniedbeep.ogg', 'sound/machines/ding.ogg', 'sound/machines/disposalflush.ogg', 'sound/machines/door_close.ogg', 'sound/machines/door_open.ogg', 'sound/machines/engine_alert1.ogg', 'sound/machines/engine_alert2.ogg', 'sound/machines/hiss.ogg', 'sound/machines/honkbot_evil_laugh.ogg', 'sound/machines/juicer.ogg', 'sound/machines/ping.ogg', 'sound/ambience/signal.ogg', 'sound/machines/synth_no.ogg', 'sound/machines/synth_yes.ogg', 'sound/machines/terminal_alert.ogg', 'sound/machines/twobeep.ogg', 'sound/machines/ventcrawl.ogg', 'sound/machines/warning-buzzer.ogg', 'sound/ai/outbreak5.ogg', 'sound/ai/outbreak7.ogg', 'sound/ai/poweroff.ogg', 'sound/ai/radiation.ogg', 'sound/ai/shuttlecalled.ogg', 'sound/ai/shuttledock.ogg', 'sound/ai/shuttlerecalled.ogg', 'sound/ai/aimalf.ogg') //hahahaha fuck you code divers
|
||||
migo_sounds = list('sound/items/bubblewrap.ogg', 'sound/items/change_jaws.ogg', 'sound/items/crowbar.ogg', 'sound/items/drink.ogg', 'sound/items/deconstruct.ogg', 'sound/items/change_drill.ogg', 'sound/items/dodgeball.ogg', 'sound/items/eatfood.ogg', 'sound/items/screwdriver.ogg', 'sound/items/weeoo1.ogg', 'sound/items/wirecutter.ogg', 'sound/items/welder.ogg', 'sound/items/zip.ogg', 'sound/items/rped.ogg', 'sound/items/ratchet.ogg', 'sound/items/polaroid1.ogg', 'sound/items/pshoom.ogg', 'sound/items/airhorn.ogg', 'sound/voice/bcreep.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/ed209_20sec.ogg', 'sound/voice/hiss3.ogg', 'sound/voice/hiss6.ogg', 'sound/voice/mpatchedup.ogg', 'sound/voice/mfeelbetter.ogg', 'sound/weapons/sear.ogg', 'sound/ambience/antag/tatoralert.ogg', 'sound/mecha/nominal.ogg', 'sound/mecha/weapdestr.ogg', 'sound/mecha/critdestr.ogg', 'sound/mecha/imag_enh.ogg', 'sound/effects/adminhelp.ogg', 'sound/effects/alert.ogg', 'sound/effects/attackblob.ogg', 'sound/effects/bamf.ogg', 'sound/effects/blobattack.ogg', 'sound/effects/break_stone.ogg', 'sound/effects/bubbles.ogg', 'sound/effects/bubbles2.ogg', 'sound/effects/clang.ogg', 'sound/effects/clownstep2.ogg', 'sound/effects/dimensional_rend.ogg', 'sound/effects/doorcreaky.ogg', 'sound/effects/empulse.ogg', 'sound/effects/explosionfar.ogg', 'sound/effects/explosion1.ogg', 'sound/effects/grillehit.ogg', 'sound/effects/genetics.ogg', 'sound/effects/heartbeat.ogg', 'sound/effects/hyperspace_begin.ogg', 'sound/effects/hyperspace_end.ogg', 'sound/goonstation/effects/screech.ogg', 'sound/effects/phasein.ogg', 'sound/effects/picaxe1.ogg', 'sound/effects/sparks1.ogg', 'sound/effects/smoke.ogg', 'sound/effects/splat.ogg', 'sound/effects/snap.ogg', 'sound/effects/tendril_destroyed.ogg', 'sound/effects/supermatter.ogg', 'sound/misc/desceration-01.ogg', 'sound/misc/desceration-02.ogg', 'sound/misc/desceration-03.ogg', 'sound/misc/bloblarm.ogg', 'sound/goonstation/misc/airraid_loop.ogg', 'sound/misc/interference.ogg', 'sound/misc/notice1.ogg', 'sound/misc/notice2.ogg', 'sound/misc/sadtrombone.ogg', 'sound/misc/slip.ogg', 'sound/weapons/armbomb.ogg', 'sound/weapons/chainsaw.ogg', 'sound/weapons/emitter.ogg', 'sound/weapons/emitter2.ogg', 'sound/weapons/blade1.ogg', 'sound/weapons/bladeslice.ogg', 'sound/weapons/blastcannon.ogg', 'sound/weapons/blaster.ogg', 'sound/weapons/bulletflyby3.ogg', 'sound/weapons/circsawhit.ogg', 'sound/weapons/cqchit2.ogg', 'sound/weapons/drill.ogg', 'sound/weapons/genhit1.ogg', 'sound/weapons/gunshots/gunshot_silenced.ogg', 'sound/weapons/gunshots/gunshot.ogg', 'sound/weapons/handcuffs.ogg', 'sound/weapons/homerun.ogg', 'sound/weapons/kenetic_accel.ogg', 'sound/machines/fryer/deep_fryer_emerge.ogg', 'sound/machines/airlock_alien_prying.ogg', 'sound/machines/airlock_close.ogg', 'sound/machines/airlockforced.ogg', 'sound/machines/airlock_open.ogg', 'sound/machines/alarm.ogg', 'sound/machines/blender.ogg', 'sound/machines/boltsdown.ogg', 'sound/machines/boltsup.ogg', 'sound/machines/buzz-sigh.ogg', 'sound/machines/buzz-two.ogg', 'sound/machines/chime.ogg', 'sound/machines/defib_charge.ogg', 'sound/machines/defib_failed.ogg', 'sound/machines/defib_ready.ogg', 'sound/machines/defib_zap.ogg', 'sound/machines/deniedbeep.ogg', 'sound/machines/ding.ogg', 'sound/machines/disposalflush.ogg', 'sound/machines/door_close.ogg', 'sound/machines/door_open.ogg', 'sound/machines/engine_alert1.ogg', 'sound/machines/engine_alert2.ogg', 'sound/machines/hiss.ogg', 'sound/machines/honkbot_evil_laugh.ogg', 'sound/machines/juicer.ogg', 'sound/machines/ping.ogg', 'sound/ambience/signal.ogg', 'sound/machines/synth_no.ogg', 'sound/machines/synth_yes.ogg', 'sound/machines/terminal_alert.ogg', 'sound/machines/twobeep.ogg', 'sound/machines/ventcrawl.ogg', 'sound/machines/warning-buzzer.ogg', 'sound/ai/outbreak5.ogg', 'sound/ai/outbreak7.ogg', 'sound/ai/poweroff.ogg', 'sound/ai/radiation.ogg', 'sound/ai/shuttlecalled.ogg', 'sound/ai/shuttledock.ogg', 'sound/ai/shuttlerecalled.ogg', 'sound/ai/aimalf.ogg', 'sound/ambience/ambigen1.ogg', 'sound/ambience/ambigen3.ogg', 'sound/ambience/ambigen4.ogg', 'sound/ambience/ambigen5.ogg', 'sound/ambience/ambigen6.ogg', 'sound/ambience/ambigen10.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg') //hahahaha fuck you code divers
|
||||
|
||||
/mob/living/simple_animal/hostile/netherworld/migo/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null)
|
||||
..()
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
/mob/living/simple_animal/hostile/pirate
|
||||
name = "Pirate"
|
||||
desc = "Does what he wants cause a pirate is free."
|
||||
icon = 'icons/mob/simple_human.dmi'
|
||||
icon_state = "piratemelee"
|
||||
icon_living = "piratemelee"
|
||||
icon_dead = "piratemelee_dead"
|
||||
icon_dead = "piratemelee_dead" // Does not actually exist. del_on_death.
|
||||
speak_chance = 0
|
||||
turns_per_move = 5
|
||||
response_help = "pushes the"
|
||||
@@ -33,7 +34,7 @@
|
||||
name = "Pirate Gunner"
|
||||
icon_state = "pirateranged"
|
||||
icon_living = "pirateranged"
|
||||
icon_dead = "piratemelee_dead"
|
||||
icon_dead = "piratemelee_dead" // Does not actually exist. del_on_death.
|
||||
projectilesound = 'sound/weapons/laser.ogg'
|
||||
ranged = 1
|
||||
rapid = 2
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/mob/living/simple_animal/hostile/retaliate/clown
|
||||
name = "Clown"
|
||||
desc = "A denizen of clown planet"
|
||||
icon = 'icons/mob/simple_human.dmi'
|
||||
icon_state = "clown"
|
||||
icon_living = "clown"
|
||||
icon_dead = "clown_dead"
|
||||
@@ -32,6 +33,7 @@
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/clown/goblin
|
||||
icon = 'icons/mob/animal.dmi'
|
||||
name = "clown goblin"
|
||||
desc = "A tiny walking mask and clown shoes. You want to honk his nose!"
|
||||
icon_state = "clowngoblin"
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
/mob/living/simple_animal/hostile/russian
|
||||
name = "Russian"
|
||||
desc = "For the Motherland!"
|
||||
icon = 'icons/mob/simple_human.dmi'
|
||||
icon_state = "russianmelee"
|
||||
icon_living = "russianmelee"
|
||||
icon_dead = "russianmelee_dead"
|
||||
icon_gib = "syndicate_gib"
|
||||
icon_dead = "russianmelee_dead" // Does not actually exist. del_on_death.
|
||||
icon_gib = "russianmelee_gib" // Does not actually exist. del_on_death.
|
||||
speak_chance = 0
|
||||
turns_per_move = 5
|
||||
response_help = "pokes the"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/mob/living/simple_animal/hostile/skeleton
|
||||
name = "reanimated skeleton"
|
||||
desc = "A real bonefied skeleton, doesn't seem like it wants to socialize."
|
||||
icon = 'icons/mob/animal.dmi'
|
||||
icon = 'icons/mob/simple_human.dmi'
|
||||
icon_state = "skeleton"
|
||||
icon_living = "skeleton"
|
||||
turns_per_move = 5
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
/mob/living/simple_animal/hostile/syndicate
|
||||
name = "Syndicate Operative"
|
||||
desc = "Death to Nanotrasen."
|
||||
icon = 'icons/mob/simple_human.dmi'
|
||||
icon_state = "syndicate"
|
||||
icon_living = "syndicate"
|
||||
icon_dead = "syndicate_dead"
|
||||
icon_gib = "syndicate_gib"
|
||||
icon_dead = "syndicate_dead" // Does not actually exist. del_on_death.
|
||||
icon_gib = "syndicate_gib" // Does not actually exist. del_on_death.
|
||||
speak_chance = 0
|
||||
turns_per_move = 5
|
||||
response_help = "pokes the"
|
||||
@@ -32,14 +33,15 @@
|
||||
/mob/living/simple_animal/hostile/syndicate/melee
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 25
|
||||
icon_state = "syndicatemelee"
|
||||
icon_living = "syndicatemelee"
|
||||
icon_state = "syndicate_sword"
|
||||
icon_living = "syndicate_sword"
|
||||
attacktext = "slashes"
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
armour_penetration = 28
|
||||
status_flags = 0
|
||||
loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier, /obj/item/melee/energy/sword/saber/red, /obj/item/shield/energy)
|
||||
var/melee_block_chance = 20
|
||||
var/ranged_block_chance = 35
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
@@ -63,12 +65,13 @@
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(!Proj) return
|
||||
if(prob(65))
|
||||
if(!Proj)
|
||||
return
|
||||
if(prob(ranged_block_chance))
|
||||
visible_message("<span class='danger'>[src] blocks [Proj] with its shield!</span>")
|
||||
else
|
||||
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
|
||||
adjustHealth(Proj.damage)
|
||||
else
|
||||
visible_message("<span class='danger'>[src] blocks [Proj] with its shield!</span>")
|
||||
return 0
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib
|
||||
@@ -80,7 +83,10 @@
|
||||
robust_searching = 1 // Together with stat_attack, ensures dionae/etc that regen are killed properly
|
||||
stat_attack = UNCONSCIOUS
|
||||
universal_speak = 1
|
||||
melee_block_chance = 40
|
||||
icon_state = "syndicate_swordonly"
|
||||
icon_living = "syndicate_swordonly"
|
||||
melee_block_chance = 0
|
||||
ranged_block_chance = 0
|
||||
del_on_death = 1
|
||||
var/area/syndicate_depot/core/depotarea
|
||||
var/raised_alert = FALSE
|
||||
@@ -103,15 +109,21 @@
|
||||
depotarea = areaMaster
|
||||
spawn_turf = get_turf(src)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/ListTargetsLazy()
|
||||
// The normal ListTargetsLazy ignores walls, which is very bad in the case of depot mobs. So we override it.
|
||||
return ListTargets()
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/Aggro()
|
||||
. = ..()
|
||||
if(target && istype(depotarea))
|
||||
if(!seen_enemy)
|
||||
seen_enemy = TRUE
|
||||
playsound(loc, 'sound/weapons/saberon.ogg', 35, 1)
|
||||
if(!ranged)
|
||||
playsound(loc, 'sound/weapons/saberon.ogg', 35, 1)
|
||||
if(alert_on_shield_breach)
|
||||
if(depotarea.shield_list.len)
|
||||
raise_alert("[name] reports that an intruder is trying to breach the armory shield!")
|
||||
raise_alert("[name] reports that [target] is trying to breach the armory shield!")
|
||||
alert_on_shield_breach = FALSE
|
||||
raised_alert = FALSE
|
||||
alert_on_death = TRUE
|
||||
@@ -134,9 +146,8 @@
|
||||
// This prevents someone from aggroing a depot mob, then hiding in a locker, perfectly safe, while the mob stands there getting killed by their friends.
|
||||
LoseTarget()
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/handle_automated_action()
|
||||
if(!..())
|
||||
return
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/handle_automated_movement()
|
||||
. = ..()
|
||||
if(seen_enemy)
|
||||
aggro_cycles++
|
||||
if(alert_on_timeout && !raised_alert && aggro_cycles >= 60)
|
||||
@@ -198,22 +209,61 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/officer
|
||||
name = "Syndicate Officer"
|
||||
icon_state = "syndicate_sword"
|
||||
icon_living = "syndicate_sword"
|
||||
melee_block_chance = 20
|
||||
ranged_block_chance = 35
|
||||
alert_on_death = TRUE
|
||||
melee_block_chance = 60
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/officer/Initialize(mapload)
|
||||
. = ..()
|
||||
if(prob(50))
|
||||
// 50% chance of switching to ranged variant.
|
||||
// Designed to counter players taking cover behind reinforced plasmasglass.
|
||||
// Does almost no danage in melee, but decent damage at range, and its shots go through glass.
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
attacktext = "punches"
|
||||
attack_sound = 'sound/weapons/punch1.ogg'
|
||||
ranged = 1
|
||||
rapid = 3
|
||||
retreat_distance = 3
|
||||
minimum_distance = 3
|
||||
melee_block_chance = 0
|
||||
ranged_block_chance = 0
|
||||
icon_state = "syndicate_pistol"
|
||||
icon_living = "syndicate_pistol"
|
||||
projectiletype = /obj/item/projectile/beam/laser
|
||||
projectilesound = 'sound/weapons/laser.ogg'
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory
|
||||
name = "Syndicate Quartermaster"
|
||||
icon_state = "syndicatemeleespace"
|
||||
icon_living = "syndicatemeleespace"
|
||||
icon_state = "syndicate_stormtrooper_sword"
|
||||
icon_living = "syndicate_stormtrooper_sword"
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
maxHealth = 250
|
||||
health = 250
|
||||
melee_block_chance = 80
|
||||
maxHealth = 200
|
||||
health = 200
|
||||
melee_block_chance = 40
|
||||
alert_on_shield_breach = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory/Initialize()
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory/Initialize(mapload)
|
||||
..()
|
||||
if(prob(50))
|
||||
// 50% chance of switching to extremely dangerous ranged variant
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
attacktext = "punches"
|
||||
attack_sound = 'sound/weapons/punch1.ogg'
|
||||
ranged = 1
|
||||
retreat_distance = 3
|
||||
minimum_distance = 3
|
||||
melee_block_chance = 0
|
||||
ranged_block_chance = 0
|
||||
icon_state = "syndicate_stormtrooper_shotgun"
|
||||
icon_living = "syndicate_stormtrooper_shotgun"
|
||||
projectiletype = /obj/item/projectile/bullet/sniper/penetrator // Ignores cover.
|
||||
projectilesound = 'sound/weapons/gunshots/gunshot_sniper.ogg'
|
||||
return INITIALIZE_HINT_LATELOAD
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory/LateInitialize()
|
||||
@@ -231,8 +281,8 @@
|
||||
name = "Syndicate Backup"
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
icon_state = "syndicatemeleespace"
|
||||
icon_living = "syndicatemeleespace"
|
||||
icon_state = "syndicate_space_sword"
|
||||
icon_living = "syndicate_space_sword"
|
||||
speed = 1
|
||||
wander = 0
|
||||
alert_on_spacing = FALSE
|
||||
@@ -246,8 +296,8 @@
|
||||
name = "Syndicate Commando"
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
icon_state = "syndicatemeleespace"
|
||||
icon_living = "syndicatemeleespace"
|
||||
icon_state = "syndicate_space_sword"
|
||||
icon_living = "syndicate_space_sword"
|
||||
speed = 1
|
||||
loot = list(/obj/effect/mob_spawn/human/corpse/syndicatecommando, /obj/item/melee/energy/sword/saber/red, /obj/item/shield/energy)
|
||||
|
||||
@@ -260,15 +310,15 @@
|
||||
rapid = 2
|
||||
retreat_distance = 5
|
||||
minimum_distance = 5
|
||||
icon_state = "syndicateranged"
|
||||
icon_living = "syndicateranged"
|
||||
icon_state = "syndicate_smg"
|
||||
icon_living = "syndicate_smg"
|
||||
projectilesound = 'sound/weapons/gunshots/gunshot.ogg'
|
||||
casingtype = /obj/item/ammo_casing/c45
|
||||
loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier, /obj/item/gun/projectile/automatic/c20r)
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/space
|
||||
icon_state = "syndicaterangedpsace"
|
||||
icon_living = "syndicaterangedpsace"
|
||||
icon_state = "syndicate_space_smg"
|
||||
icon_living = "syndicate_space_smg"
|
||||
name = "Syndicate Commando"
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
|
||||
@@ -576,8 +576,10 @@
|
||||
"visible_message" = message, "self_message" = self_message, "examine_message" = examine_message)
|
||||
|
||||
/mob/living/proc/absorb_stun(amount, ignoring_flag_presence)
|
||||
if(!amount || amount <= 0 || stat || ignoring_flag_presence || !islist(stun_absorption))
|
||||
if(amount < 0 || stat || ignoring_flag_presence || !islist(stun_absorption))
|
||||
return FALSE
|
||||
if(!amount)
|
||||
amount = 0
|
||||
var/priority_absorb_key
|
||||
var/highest_priority
|
||||
for(var/i in stun_absorption)
|
||||
@@ -585,12 +587,13 @@
|
||||
priority_absorb_key = stun_absorption[i]
|
||||
highest_priority = priority_absorb_key["priority"]
|
||||
if(priority_absorb_key)
|
||||
if(priority_absorb_key["visible_message"] || priority_absorb_key["self_message"])
|
||||
if(priority_absorb_key["visible_message"] && priority_absorb_key["self_message"])
|
||||
visible_message("<span class='warning'>[src][priority_absorb_key["visible_message"]]</span>", "<span class='boldwarning'>[priority_absorb_key["self_message"]]</span>")
|
||||
else if(priority_absorb_key["visible_message"])
|
||||
visible_message("<span class='warning'>[src][priority_absorb_key["visible_message"]]</span>")
|
||||
else if(priority_absorb_key["self_message"])
|
||||
to_chat(src, "<span class='boldwarning'>[priority_absorb_key["self_message"]]</span>")
|
||||
priority_absorb_key["stuns_absorbed"] += amount
|
||||
if(amount) //don't spam up the chat for continuous stuns
|
||||
if(priority_absorb_key["visible_message"] || priority_absorb_key["self_message"])
|
||||
if(priority_absorb_key["visible_message"] && priority_absorb_key["self_message"])
|
||||
visible_message("<span class='warning'>[src][priority_absorb_key["visible_message"]]</span>", "<span class='boldwarning'>[priority_absorb_key["self_message"]]</span>")
|
||||
else if(priority_absorb_key["visible_message"])
|
||||
visible_message("<span class='warning'>[src][priority_absorb_key["visible_message"]]</span>")
|
||||
else if(priority_absorb_key["self_message"])
|
||||
to_chat(src, "<span class='boldwarning'>[priority_absorb_key["self_message"]]</span>")
|
||||
priority_absorb_key["stuns_absorbed"] += amount
|
||||
return TRUE
|
||||
Reference in New Issue
Block a user