mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-01-30 11:21:39 +00:00
265 lines
8.1 KiB
Plaintext
265 lines
8.1 KiB
Plaintext
|
|
/mob/living/simple_animal/construct
|
|
name = "Construct"
|
|
real_name = "Construct"
|
|
desc = ""
|
|
speak_emote = list("hisses")
|
|
emote_hear = list("wails","screeches")
|
|
response_help = "thinks better of touching"
|
|
response_disarm = "flails at"
|
|
response_harm = "punches"
|
|
icon_dead = "shade_dead"
|
|
speed = 0
|
|
a_intent = I_HARM
|
|
stop_automated_movement = 1
|
|
status_flags = CANPUSH
|
|
attack_sound = 'sound/weapons/punch1.ogg'
|
|
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
|
|
faction = list("cult")
|
|
flying = 1
|
|
universal_speak = 1
|
|
var/list/construct_spells = list()
|
|
loot = list(/obj/item/weapon/reagent_containers/food/snacks/ectoplasm)
|
|
del_on_death = 1
|
|
deathmessage = "collapses in a shattered heap."
|
|
|
|
/mob/living/simple_animal/construct/New()
|
|
..()
|
|
name = text("[initial(name)] ([rand(1, 1000)])")
|
|
real_name = name
|
|
for(var/spell in construct_spells)
|
|
AddSpell(new spell(null))
|
|
updateglow()
|
|
|
|
/mob/living/simple_animal/construct/examine(mob/user)
|
|
to_chat(user, "<span class='info'>*---------*</span>")
|
|
..(user)
|
|
|
|
var/msg = "<span class='info'>"
|
|
if(src.health < src.maxHealth)
|
|
msg += "<span class='warning'>"
|
|
if(src.health >= src.maxHealth/2)
|
|
msg += "It looks slightly dented.\n"
|
|
else
|
|
msg += "<B>It looks severely dented!</B>\n"
|
|
msg += "</span>"
|
|
msg += "*---------*</span>"
|
|
|
|
to_chat(user, msg)
|
|
|
|
/mob/living/simple_animal/construct/attack_animal(mob/living/simple_animal/M as mob)
|
|
if(istype(M, /mob/living/simple_animal/construct/builder))
|
|
health += 5
|
|
M.custom_emote(1,"mends some of \the <EM>[src]'s</EM> wounds.")
|
|
else
|
|
if(M.melee_damage_upper <= 0)
|
|
M.custom_emote(1, "[M.friendly] \the <EM>[src]</EM>")
|
|
else
|
|
M.do_attack_animation(src)
|
|
if(M.attack_sound)
|
|
playsound(loc, M.attack_sound, 50, 1, 1)
|
|
for(var/mob/O in viewers(src, null))
|
|
O.show_message("<span class='attack'>\The <EM>[M]</EM> [M.attacktext] \the <EM>[src]</EM>!</span>", 1)
|
|
add_logs(M, src, "attacked")
|
|
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
|
|
adjustBruteLoss(damage)
|
|
|
|
|
|
/mob/living/simple_animal/construct/narsie_act()
|
|
return
|
|
|
|
/////////////////Juggernaut///////////////
|
|
|
|
|
|
|
|
/mob/living/simple_animal/construct/armoured
|
|
name = "Juggernaut"
|
|
real_name = "Juggernaut"
|
|
desc = "A possessed suit of armour driven by the will of the restless dead"
|
|
icon = 'icons/mob/mob.dmi'
|
|
icon_state = "behemoth"
|
|
icon_living = "behemoth"
|
|
maxHealth = 250
|
|
health = 250
|
|
response_harm = "harmlessly punches"
|
|
harm_intent_damage = 0
|
|
melee_damage_lower = 30
|
|
melee_damage_upper = 30
|
|
attacktext = "smashes their armoured gauntlet into"
|
|
speed = 3
|
|
environment_smash = 2
|
|
attack_sound = 'sound/weapons/punch3.ogg'
|
|
status_flags = 0
|
|
mob_size = MOB_SIZE_LARGE
|
|
construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall)
|
|
force_threshold = 11
|
|
|
|
/mob/living/simple_animal/construct/armoured/bullet_act(var/obj/item/projectile/P)
|
|
if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
|
|
var/reflectchance = 80 - round(P.damage/3)
|
|
if(prob(reflectchance))
|
|
if((P.damage_type == BRUTE || P.damage_type == BURN))
|
|
adjustBruteLoss(P.damage * 0.5)
|
|
visible_message("<span class='danger'>The [P.name] gets reflected by [src]'s shell!</span>", \
|
|
"<span class='userdanger'>The [P.name] gets reflected by [src]'s shell!</span>")
|
|
|
|
// Find a turf near or on the original location to bounce to
|
|
if(P.starting)
|
|
var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
|
|
var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
|
|
var/turf/curloc = get_turf(src)
|
|
|
|
// redirect the projectile
|
|
P.original = locate(new_x, new_y, P.z)
|
|
P.starting = curloc
|
|
P.current = curloc
|
|
P.firer = src
|
|
P.yo = new_y - curloc.y
|
|
P.xo = new_x - curloc.x
|
|
|
|
return -1 // complete projectile permutation
|
|
|
|
return (..(P))
|
|
|
|
|
|
|
|
////////////////////////Wraith/////////////////////////////////////////////
|
|
|
|
|
|
|
|
/mob/living/simple_animal/construct/wraith
|
|
name = "Wraith"
|
|
real_name = "Wraith"
|
|
desc = "A wicked bladed shell contraption piloted by a bound spirit"
|
|
icon = 'icons/mob/mob.dmi'
|
|
icon_state = "floating"
|
|
icon_living = "floating"
|
|
maxHealth = 75
|
|
health = 75
|
|
melee_damage_lower = 25
|
|
melee_damage_upper = 25
|
|
attacktext = "slashes"
|
|
see_in_dark = 7
|
|
attack_sound = 'sound/weapons/bladeslice.ogg'
|
|
construct_spells = list(/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift)
|
|
|
|
|
|
|
|
/////////////////////////////Artificer/////////////////////////
|
|
|
|
|
|
|
|
/mob/living/simple_animal/construct/builder
|
|
name = "Artificer"
|
|
real_name = "Artificer"
|
|
desc = "A bulbous construct dedicated to building and maintaining The Cult of Nar-Sie's armies"
|
|
icon = 'icons/mob/mob.dmi'
|
|
icon_state = "artificer"
|
|
icon_living = "artificer"
|
|
maxHealth = 50
|
|
health = 50
|
|
response_harm = "viciously beats"
|
|
harm_intent_damage = 5
|
|
melee_damage_lower = 5
|
|
melee_damage_upper = 5
|
|
attacktext = "rams"
|
|
environment_smash = 2
|
|
attack_sound = 'sound/weapons/punch2.ogg'
|
|
construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser,
|
|
/obj/effect/proc_holder/spell/aoe_turf/conjure/wall,
|
|
/obj/effect/proc_holder/spell/aoe_turf/conjure/floor,
|
|
/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone,
|
|
/obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser)
|
|
|
|
|
|
/////////////////////////////Behemoth/////////////////////////
|
|
|
|
|
|
/mob/living/simple_animal/construct/behemoth
|
|
name = "Behemoth"
|
|
real_name = "Behemoth"
|
|
desc = "The pinnacle of occult technology, Behemoths are the ultimate weapon in the Cult of Nar-Sie's arsenal."
|
|
icon = 'icons/mob/mob.dmi'
|
|
icon_state = "behemoth"
|
|
icon_living = "behemoth"
|
|
maxHealth = 750
|
|
health = 750
|
|
speak_emote = list("rumbles")
|
|
response_harm = "harmlessly punches"
|
|
harm_intent_damage = 0
|
|
melee_damage_lower = 50
|
|
melee_damage_upper = 50
|
|
attacktext = "brutally crushes"
|
|
speed = 5
|
|
environment_smash = 2
|
|
attack_sound = 'sound/weapons/punch4.ogg'
|
|
force_threshold = 11
|
|
var/energy = 0
|
|
var/max_energy = 1000
|
|
|
|
|
|
/////////////////////////////Harvester/////////////////////////
|
|
|
|
/mob/living/simple_animal/construct/harvester
|
|
name = "Harvester"
|
|
real_name = "Harvester"
|
|
desc = "A harbinger of Nar-Sie's enlightenment. It'll be all over soon."
|
|
icon = 'icons/mob/mob.dmi'
|
|
icon_state = "harvester"
|
|
icon_living = "harvester"
|
|
maxHealth = 60
|
|
health = 60
|
|
melee_damage_lower = 1
|
|
melee_damage_upper = 5
|
|
attacktext = "prods"
|
|
speed = 0
|
|
environment_smash = 1
|
|
see_in_dark = 7
|
|
attack_sound = 'sound/weapons/tap.ogg'
|
|
construct_spells = list(/obj/effect/proc_holder/spell/targeted/smoke/disable)
|
|
|
|
/mob/living/simple_animal/construct/harvester/Process_Spacemove(var/movement_dir = 0)
|
|
return 1
|
|
|
|
|
|
////////////////Glow////////////////////
|
|
/mob/living/simple_animal/construct/proc/updateglow()
|
|
overlays = 0
|
|
var/overlay_layer = LIGHTING_LAYER + 1
|
|
if(layer != MOB_LAYER)
|
|
overlay_layer=TURF_LAYER+0.2
|
|
|
|
overlays += image(icon,"glow-[icon_state]",overlay_layer)
|
|
set_light(2, -2, l_color = "#FFFFFF")
|
|
|
|
////////////////Powers//////////////////
|
|
|
|
|
|
/*
|
|
/client/proc/summon_cultist()
|
|
set category = "Behemoth"
|
|
set name = "Summon Cultist (300)"
|
|
set desc = "Teleport a cultist to your location"
|
|
if(istype(usr,/mob/living/simple_animal/constructbehemoth))
|
|
|
|
if(usr.energy<300)
|
|
to_chat(usr, "\red You do not have enough power stored!")
|
|
return
|
|
|
|
if(usr.stat)
|
|
return
|
|
|
|
usr.energy -= 300
|
|
var/list/mob/living/cultists = new
|
|
for(var/datum/mind/H in ticker.mode.cult)
|
|
if(istype(H.current,/mob/living))
|
|
cultists+=H.current
|
|
var/mob/cultist = input("Choose the one who you want to summon", "Followers of Geometer") as null|anything in (cultists - usr)
|
|
if(!cultist)
|
|
return
|
|
if(cultist == usr) //just to be sure.
|
|
return
|
|
cultist.loc = usr.loc
|
|
usr.visible_message("/red [cultist] appears in a flash of red light as [usr] glows with power")*/
|