mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-02-06 22:29:14 +00:00
Uses a mob var to determine antag validity instead of typechecks, since I believe this will work out better in the long term. Inheritance can automatically make new mobs we make be invalid by default.
340 lines
10 KiB
Plaintext
340 lines
10 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 = "flailed at"
|
|
response_harm = "punched"
|
|
icon_dead = "shade_dead"
|
|
speed = -1
|
|
a_intent = I_HURT
|
|
stop_automated_movement = 1
|
|
status_flags = CANPUSH
|
|
universal_speak = 0
|
|
universal_understand = 1
|
|
attack_sound = 'sound/weapons/spiderlunge.ogg'
|
|
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
|
|
show_stat_health = 1
|
|
faction = "cult"
|
|
supernatural = 1
|
|
see_invisible = SEE_INVISIBLE_NOLIGHTING
|
|
var/nullblock = 0
|
|
|
|
mob_swap_flags = HUMAN|SIMPLE_ANIMAL|SLIME|MONKEY
|
|
mob_push_flags = ALLMOBS
|
|
|
|
var/list/construct_spells = list()
|
|
|
|
can_be_antagged = TRUE
|
|
|
|
/mob/living/simple_animal/construct/cultify()
|
|
return
|
|
|
|
/mob/living/simple_animal/construct/New()
|
|
..()
|
|
name = text("[initial(name)] ([rand(1, 1000)])")
|
|
real_name = name
|
|
add_language("Cult")
|
|
add_language("Occult")
|
|
for(var/spell in construct_spells)
|
|
src.add_spell(new spell, "const_spell_ready")
|
|
updateicon()
|
|
add_glow()
|
|
|
|
/mob/living/simple_animal/construct/death()
|
|
new /obj/item/weapon/ectoplasm (src.loc)
|
|
..(null,"collapses in a shattered heap.")
|
|
ghostize()
|
|
qdel(src)
|
|
|
|
/mob/living/simple_animal/construct/attack_generic(var/mob/user)
|
|
if(istype(user, /mob/living/simple_animal/construct/builder))
|
|
if(health < getMaxHealth())
|
|
adjustBruteLoss(-5)
|
|
user.visible_message("<span class='notice'>\The [user] mends some of \the [src]'s wounds.</span>")
|
|
else
|
|
user << "<span class='notice'>\The [src] is undamaged.</span>"
|
|
return
|
|
return ..()
|
|
|
|
/mob/living/simple_animal/construct/examine(mob/user)
|
|
..(user)
|
|
var/msg = "<span cass='info'>*---------*\nThis is \icon[src] \a <EM>[src]</EM>!\n"
|
|
if (src.health < src.getMaxHealth())
|
|
msg += "<span class='warning'>"
|
|
if (src.health >= src.getMaxHealth()/2)
|
|
msg += "It looks slightly dented.\n"
|
|
else
|
|
msg += "<B>It looks severely dented!</B>\n"
|
|
msg += "</span>"
|
|
msg += "*---------*</span>"
|
|
|
|
user << msg
|
|
|
|
|
|
/////////////////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 = "smashed their armoured gauntlet into"
|
|
mob_size = MOB_HUGE
|
|
speed = 3
|
|
environment_smash = 2
|
|
attack_sound = 'sound/weapons/heavysmash.ogg'
|
|
status_flags = 0
|
|
resistance = 10
|
|
construct_spells = list(/spell/aoe_turf/conjure/forcewall/lesser)
|
|
|
|
/mob/living/simple_animal/construct/armoured/Life()
|
|
weakened = 0
|
|
..()
|
|
|
|
/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))
|
|
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.redirect(new_x, new_y, curloc, src)
|
|
P.reflected = 1
|
|
|
|
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 = "slashed"
|
|
speed = -1
|
|
environment_smash = 1
|
|
see_in_dark = 7
|
|
attack_sound = 'sound/weapons/rapidslice.ogg'
|
|
construct_spells = list(/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 beaten"
|
|
harm_intent_damage = 5
|
|
melee_damage_lower = 5
|
|
melee_damage_upper = 5
|
|
attacktext = "rammed"
|
|
speed = 0
|
|
environment_smash = 1
|
|
attack_sound = 'sound/weapons/rapidslice.ogg'
|
|
construct_spells = list(/spell/aoe_turf/conjure/construct/lesser,
|
|
/spell/aoe_turf/conjure/wall,
|
|
/spell/aoe_turf/conjure/floor,
|
|
/spell/aoe_turf/conjure/soulstone,
|
|
/spell/aoe_turf/conjure/pylon
|
|
)
|
|
|
|
|
|
/////////////////////////////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 punched"
|
|
harm_intent_damage = 0
|
|
melee_damage_lower = 50
|
|
melee_damage_upper = 50
|
|
attacktext = "brutally crushed"
|
|
speed = 5
|
|
environment_smash = 2
|
|
attack_sound = 'sound/weapons/heavysmash.ogg'
|
|
resistance = 10
|
|
var/energy = 0
|
|
var/max_energy = 1000
|
|
construct_spells = list(/spell/aoe_turf/conjure/forcewall/lesser)
|
|
|
|
////////////////////////Harvester////////////////////////////////
|
|
|
|
|
|
|
|
/mob/living/simple_animal/construct/harvester
|
|
name = "Harvester"
|
|
real_name = "Harvester"
|
|
desc = "The promised reward of the livings who follow narsie. Obtained by offering their bodies to the geometer of blood"
|
|
icon = 'icons/mob/mob.dmi'
|
|
icon_state = "harvester"
|
|
icon_living = "harvester"
|
|
maxHealth = 150
|
|
health = 150
|
|
melee_damage_lower = 25
|
|
melee_damage_upper = 25
|
|
attacktext = "violently stabbed"
|
|
speed = -1
|
|
environment_smash = 1
|
|
see_in_dark = 7
|
|
attack_sound = 'sound/weapons/pierce.ogg'
|
|
|
|
construct_spells = list(
|
|
/spell/targeted/harvest,
|
|
/spell/aoe_turf/knock/harvester,
|
|
/spell/rune_write
|
|
)
|
|
|
|
////////////////Glow//////////////////
|
|
/mob/living/simple_animal/construct/proc/add_glow()
|
|
overlays = 0
|
|
var/overlay_layer = LIGHTING_LAYER+0.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")
|
|
|
|
////////////////HUD//////////////////////
|
|
|
|
/mob/living/simple_animal/construct/Life()
|
|
. = ..()
|
|
if(.)
|
|
if(fire)
|
|
if(fire_alert) fire.icon_state = "fire1"
|
|
else fire.icon_state = "fire0"
|
|
if(pullin)
|
|
if(pulling) pullin.icon_state = "pull1"
|
|
else pullin.icon_state = "pull0"
|
|
|
|
if(purged)
|
|
if(purge > 0) purged.icon_state = "purge1"
|
|
else purged.icon_state = "purge0"
|
|
|
|
silence_spells(purge)
|
|
|
|
/mob/living/simple_animal/construct/armoured/Life()
|
|
..()
|
|
if(healths)
|
|
switch(health)
|
|
if(250 to INFINITY) healths.icon_state = "juggernaut_health0"
|
|
if(208 to 249) healths.icon_state = "juggernaut_health1"
|
|
if(167 to 207) healths.icon_state = "juggernaut_health2"
|
|
if(125 to 166) healths.icon_state = "juggernaut_health3"
|
|
if(84 to 124) healths.icon_state = "juggernaut_health4"
|
|
if(42 to 83) healths.icon_state = "juggernaut_health5"
|
|
if(1 to 41) healths.icon_state = "juggernaut_health6"
|
|
else healths.icon_state = "juggernaut_health7"
|
|
|
|
|
|
/mob/living/simple_animal/construct/behemoth/Life()
|
|
..()
|
|
if(healths)
|
|
switch(health)
|
|
if(750 to INFINITY) healths.icon_state = "juggernaut_health0"
|
|
if(625 to 749) healths.icon_state = "juggernaut_health1"
|
|
if(500 to 624) healths.icon_state = "juggernaut_health2"
|
|
if(375 to 499) healths.icon_state = "juggernaut_health3"
|
|
if(250 to 374) healths.icon_state = "juggernaut_health4"
|
|
if(125 to 249) healths.icon_state = "juggernaut_health5"
|
|
if(1 to 124) healths.icon_state = "juggernaut_health6"
|
|
else healths.icon_state = "juggernaut_health7"
|
|
|
|
/mob/living/simple_animal/construct/builder/Life()
|
|
..()
|
|
if(healths)
|
|
switch(health)
|
|
if(50 to INFINITY) healths.icon_state = "artificer_health0"
|
|
if(42 to 49) healths.icon_state = "artificer_health1"
|
|
if(34 to 41) healths.icon_state = "artificer_health2"
|
|
if(26 to 33) healths.icon_state = "artificer_health3"
|
|
if(18 to 25) healths.icon_state = "artificer_health4"
|
|
if(10 to 17) healths.icon_state = "artificer_health5"
|
|
if(1 to 9) healths.icon_state = "artificer_health6"
|
|
else healths.icon_state = "artificer_health7"
|
|
|
|
|
|
|
|
/mob/living/simple_animal/construct/wraith/Life()
|
|
..()
|
|
if(healths)
|
|
switch(health)
|
|
if(75 to INFINITY) healths.icon_state = "wraith_health0"
|
|
if(62 to 74) healths.icon_state = "wraith_health1"
|
|
if(50 to 61) healths.icon_state = "wraith_health2"
|
|
if(37 to 49) healths.icon_state = "wraith_health3"
|
|
if(25 to 36) healths.icon_state = "wraith_health4"
|
|
if(12 to 24) healths.icon_state = "wraith_health5"
|
|
if(1 to 11) healths.icon_state = "wraith_health6"
|
|
else healths.icon_state = "wraith_health7"
|
|
|
|
|
|
/mob/living/simple_animal/construct/harvester/Life()
|
|
..()
|
|
if(healths)
|
|
switch(health)
|
|
if(150 to INFINITY) healths.icon_state = "harvester_health0"
|
|
if(125 to 149) healths.icon_state = "harvester_health1"
|
|
if(100 to 124) healths.icon_state = "harvester_health2"
|
|
if(75 to 99) healths.icon_state = "harvester_health3"
|
|
if(50 to 74) healths.icon_state = "harvester_health4"
|
|
if(25 to 49) healths.icon_state = "harvester_health5"
|
|
if(1 to 24) healths.icon_state = "harvester_health6"
|
|
else healths.icon_state = "harvester_health7"
|