more progress

This commit is contained in:
BlackMajor
2021-12-07 01:46:21 +13:00
parent b82359d6fb
commit dbb5a4083b
35 changed files with 2546 additions and 137 deletions

View File

@@ -1,3 +1,38 @@
//CHOMP Specific overrides
/obj/item/weapon/material/whip
icon = 'icons/obj/weapons_ch.dmi'
/obj/item/weapon/material/butterfly/saw //This Saw Cleaver is in here since I do not know where else to put it
name = "Saw Cleaver"
desc = "A weapon consisting of a long handle and a heavy serrated blade. Using centrifrical force the blade extends outword allowing it to slice it long cleaves. The smell of blood hangs in the air around it."
icon = 'icons/obj/weapons.dmi'
icon_state = "sawcleaver"
item_icons = list(
slot_l_hand_str = 'icons/mob/items/64x64_lefthand_ch.dmi',
slot_r_hand_str = 'icons/mob/items/64x64_righthand_ch.dmi',
)
item_state = "cleaving_saw"
active = 0
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
w_class = ITEMSIZE_LARGE
edge = 1
sharp = 1
force_divisor = 0.7 //42 When Wielded in line with a sword
thrown_force_divisor = 0.1 // 2 when thrown with weight 20 (steel) since frankly its too bulk to throw
//holy = 1
/obj/item/weapon/material/butterfly/saw/update_force()
if(active)
..() //Updates force.
w_class = ITEMSIZE_HUGE
can_cleave = TRUE
force_divisor = 0.4 //24 when wielded, Gains cleave and is better than a machete
icon_state = "sawcleaver_open"
item_state = "cleaving_saw_open"
else
w_class = initial(w_class)
can_cleave = initial(can_cleave)
force_divisor = initial(force_divisor)
icon_state = initial(icon_state)
item_state = initial(item_state)

View File

@@ -0,0 +1,110 @@
//Micro mecha loot.
/obj/structure/loot_pile/mecha/mouse_tank
name = "\improper Whisker wreckage"
desc = "The ruins of a small tank. Perhaps some child's toy?"
icon = 'icons/mecha/micro.dmi'
icon_state = "whisker-broken"
density = TRUE
anchored = FALSE // In case a dead mecha-mob dies in a bad spot.
chance_uncommon = 20
chance_rare = 10
loot_depletion = TRUE
loot_left = 5
common_loot = list(
/obj/random/tool,
/obj/random/tool,
/obj/item/stack/cable_coil/random,
/obj/random/tank,
/obj/random/tech_supply/component,
/obj/random/tech_supply/component,
/obj/effect/decal/remains/mouse,
/obj/item/stack/material/steel{amount = 20}
)
uncommon_loot = list(
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/rigged,
/obj/item/mecha_parts/mecha_equipment/generator
)
rare_loot = list(
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg,
/obj/item/mecha_parts/mecha_equipment/generator/nuclear
)
/obj/structure/loot_pile/mecha/mouse_tank/livewire
name = "\improper Livewire wreckage"
desc = "The smoldering ruins of a small tank. Perhaps some child's toy?"
icon = 'icons/mecha/micro.dmi'
icon_state = "livewire-broken"
density = TRUE
anchored = FALSE // In case a dead mecha-mob dies in a bad spot.
chance_uncommon = 20
chance_rare = 10
loot_depletion = TRUE
loot_left = 5
common_loot = list(
/obj/random/tool,
/obj/random/tool,
/obj/item/stack/cable_coil/random,
/obj/random/tank,
/obj/random/tech_supply/component,
/obj/random/tech_supply/component,
/obj/effect/decal/remains/mouse,
/obj/item/stack/material/steel{amount = 20}
)
uncommon_loot = list(
/obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer/rigged,
/obj/item/mecha_parts/mecha_equipment/tool/extinguisher
)
rare_loot = list(
/obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer,
/obj/item/mecha_parts/mecha_equipment/generator
)
/obj/structure/loot_pile/mecha/mouse_tank/eraticator
name = "\improper Eraticator wreckage"
desc = "The blasted ruins of a small tank. Perhaps some child's toy?"
icon = 'icons/mecha/micro.dmi'
icon_state = "eraticator-broken"
density = TRUE
anchored = FALSE // In case a dead mecha-mob dies in a bad spot.
chance_uncommon = 20
chance_rare = 10
loot_depletion = TRUE
loot_left = 5
common_loot = list(
/obj/random/tool,
/obj/random/tool,
/obj/item/stack/cable_coil/random,
/obj/random/tank,
/obj/random/tech_supply/component,
/obj/random/tech_supply/component,
/obj/item/clothing/head/helmet/eraticator,
/obj/effect/decal/remains/mouse,
/obj/item/stack/material/steel{amount = 20}
)
uncommon_loot = list(
/obj/item/ammo_magazine/m75,
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/mortar
)
rare_loot = list(
/obj/item/weapon/gun/projectile/gyropistol,
/obj/item/mecha_parts/mecha_equipment/generator/nuclear
)
/obj/structure/loot_pile/mecha/ripley/pirate
icon = 'icons/mob/animal_ch.dmi'
icon_state = "pirate-broken"

View File

@@ -66,3 +66,36 @@
say_threaten = list("Hoy, private property, fuck off.", "You're acting mighty bold for a bullet sponge.", "First and last warning; find somewhere else to be.", "I wouldn't do that if I were you.", "Back off or your field medic's getting a bonus.")
say_stand_down = list("Damn it, I was hoping you'd push your luck.", "What, that's it? Pussy.", "And don't come back.", "Good call. Don't do it again.", "Harrumph.", "That'll teach 'ya.")
say_escalate = list("Oh, I'm gonna enjoy this.", "I'm going to enjoy making you regret that.", "Last mistake you'll make.")
//Synth Horror Saylist
/datum/say_list/cyber_horror
speak = list("H@!#$$P M@!$#",
"GHAA!@@#",
"KR@!!N",
"K!@@##L!@@ %!@#E",
"G@#!$ H@!#%",
"H!@%%@ @!E")
emote_hear = list("emits", "groans", "wails", "pleads")
emote_see = list ("stares unblinkingly.", "jitters and twitches.", "emits a synthetic scream.", "rapidly twitches.", "convulses.", "twitches uncontrollably.", "goes stock still.")
say_threaten = list ("FR@#DOM","EN@ T#I$-$","N0$ M^> B@!#")
say_got_target = list("I *#@ Y@%","!E@#$P","F#RR @I","D0@#$ ##OK %","IT $##TS")
// This one's pretty dumb, but pirates are dumb anyways.
/datum/say_list/pirate
speak = list("Yarr!",
"Yohoho and a bottle of rum...",
"Getting tried of hardtack.",
"What do you do with a drunken sailor...",
"One day We'll get that big score.",
"They ain't catching this pirate no-sir-ree")
say_understood = list("Alright, matey.")
say_cannot = list("No, matey.")
say_maybe_target = list("Eh?", "Who goes there?")
say_got_target = list("Yarrrr!", "Just drop your loot and run")
say_threaten = list("You best leave, this booty is mine.", "No plank to walk on, just walk away.")
say_stand_down = list("Good.", "That's right run you lilly livers.")
say_escalate = list("Yarr! The booty is mine!", "Going to gut you landlubber.")

View File

@@ -0,0 +1,9 @@
/obj/item/clothing/head/helmet/eraticator
name = "Eraticator Head"
desc = "The 'head' of an Eraticator Artillery Platform, ripped off of the chassis. May be worn for totemic purposes."
icon_state = "eraticator-head"
item_state_slots = list(slot_r_hand_str = "helmet", slot_l_hand_str = "helmet")
armor = list(melee = 10, bullet = 80, laser = 10 ,energy = 10, bomb = 0, bio = 0, rad = 0)
flags_inv = HIDEEARS|HIDEEYES|BLOCKHEADHAIR
siemens_coefficient = 0.7
valid_accessory_slots = null

View File

@@ -168,124 +168,3 @@
/obj/effect/landmark/mobcorpse/russian/ranged
corpsehelmet = /obj/item/clothing/head/ushanka
//CHOMPAdd start
//////////////////////////
// Vox Bodies
//////////////////////////
/obj/effect/landmark/mobcorpse/vox
name = "vox"
corpseid = 0
/obj/effect/landmark/mobcorpse/vox/New()
createvoxCorpse()
/obj/effect/landmark/mobcorpse/vox/proc/createvoxCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it.
var/mob/living/carbon/human/vox/M = new /mob/living/carbon/human/vox (src.loc)
M.real_name = src.name
M.stat = 2 //Kills the new mob
if(src.corpseuniform)
M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform)
if(src.corpsesuit)
M.equip_to_slot_or_del(new src.corpsesuit(M), slot_wear_suit)
if(src.corpseshoes)
M.equip_to_slot_or_del(new src.corpseshoes(M), slot_shoes)
if(src.corpsegloves)
M.equip_to_slot_or_del(new src.corpsegloves(M), slot_gloves)
if(src.corpseradio)
M.equip_to_slot_or_del(new src.corpseradio(M), slot_l_ear)
if(src.corpseglasses)
M.equip_to_slot_or_del(new src.corpseglasses(M), slot_glasses)
if(src.corpsemask)
M.equip_to_slot_or_del(new src.corpsemask(M), slot_wear_mask)
if(src.corpsehelmet)
M.equip_to_slot_or_del(new src.corpsehelmet(M), slot_head)
if(src.corpsebelt)
M.equip_to_slot_or_del(new src.corpsebelt(M), slot_belt)
if(src.corpsepocket1)
M.equip_to_slot_or_del(new src.corpsepocket1(M), slot_r_store)
if(src.corpsepocket2)
M.equip_to_slot_or_del(new src.corpsepocket2(M), slot_l_store)
if(src.corpseback)
M.equip_to_slot_or_del(new src.corpseback(M), slot_back)
if(src.corpseid == 1)
var/obj/item/weapon/card/id/W = new(M)
W.name = "[M.real_name]'s ID Card"
var/datum/job/jobdatum
for(var/jobtype in typesof(/datum/job))
var/datum/job/J = new jobtype
if(J.title == corpseidaccess)
jobdatum = J
break
if(src.corpseidicon)
W.icon_state = corpseidicon
if(src.corpseidaccess)
if(jobdatum)
W.access = jobdatum.get_access()
else
W.access = list()
if(corpseidjob)
W.assignment = corpseidjob
W.registered_name = M.real_name
M.equip_to_slot_or_del(W, slot_wear_id)
delete_me = 1
qdel(src)
//Types of Vox corpses:
/obj/effect/landmark/mobcorpse/vox/pirate
name = "vox pirate"
corpseuniform = /obj/item/clothing/under/color/black
corpsesuit = /obj/item/clothing/suit/armor/vox_scrap
corpseshoes = /obj/item/clothing/shoes/boots/workboots
corpsegloves = /obj/item/clothing/gloves/light_brown
corpsemask = /obj/item/clothing/mask/breath
corpseid = 0
/obj/effect/landmark/mobcorpse/vox/boarder_m
name = "vox melee boarder"
corpseuniform = /obj/item/clothing/under/vox/vox_casual
corpsesuit = /obj/item/clothing/suit/armor/vox_scrap
corpseshoes = /obj/item/clothing/shoes/boots/workboots
corpsegloves = /obj/item/clothing/gloves/light_brown
corpsemask = /obj/item/clothing/mask/breath
corpseid = 0
/obj/effect/landmark/mobcorpse/vox/boarder_r
name = "vox ranged boarder"
corpseuniform = /obj/item/clothing/under/rank/bartender
corpsesuit = /obj/item/clothing/suit/armor/bulletproof
corpseshoes = /obj/item/clothing/shoes/boots/workboots
corpsemask = /obj/item/clothing/mask/breath
corpseid = 0
/obj/effect/landmark/mobcorpse/vox/boarder_t
name = "vox salvage technician"
corpseuniform = /obj/item/clothing/under/rank/bartender
corpsesuit = /obj/item/clothing/suit/armor/bulletproof
corpseshoes = /obj/item/clothing/shoes/boots/workboots
corpsemask = /obj/item/clothing/mask/breath
corpseid = 0
/obj/effect/landmark/mobcorpse/vox/suppressor
name = "vox suppressor"
corpseuniform = /obj/item/clothing/under/color/red
corpsesuit = /obj/item/clothing/suit/storage/toggle/fr_jacket
corpseshoes = /obj/item/clothing/shoes/orange
corpsegloves = /obj/item/clothing/gloves/red
corpsemask = /obj/item/clothing/mask/gas/half
corpseid = 0
/obj/effect/landmark/mobcorpse/vox/captain
name = "vox captain"
corpseuniform = /obj/item/clothing/under/color/black
corpsesuit = /obj/item/clothing/suit/space/vox/carapace
corpseshoes = /obj/item/clothing/shoes/magboots/vox
corpsegloves = /obj/item/clothing/gloves/light_brown
corpsemask = /obj/item/clothing/mask/breath
corpsehelmet = /obj/item/clothing/head/helmet/riot
corpseid = 0
//CHOMPAdd end

View File

@@ -0,0 +1,117 @@
//////////////////////////
// Vox Bodies
//////////////////////////
/obj/effect/landmark/mobcorpse/vox
name = "vox"
corpseid = 0
/obj/effect/landmark/mobcorpse/vox/New()
createvoxCorpse()
/obj/effect/landmark/mobcorpse/vox/proc/createvoxCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it.
var/mob/living/carbon/human/vox/M = new /mob/living/carbon/human/vox (src.loc)
M.real_name = src.name
M.stat = 2 //Kills the new mob
if(src.corpseuniform)
M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform)
if(src.corpsesuit)
M.equip_to_slot_or_del(new src.corpsesuit(M), slot_wear_suit)
if(src.corpseshoes)
M.equip_to_slot_or_del(new src.corpseshoes(M), slot_shoes)
if(src.corpsegloves)
M.equip_to_slot_or_del(new src.corpsegloves(M), slot_gloves)
if(src.corpseradio)
M.equip_to_slot_or_del(new src.corpseradio(M), slot_l_ear)
if(src.corpseglasses)
M.equip_to_slot_or_del(new src.corpseglasses(M), slot_glasses)
if(src.corpsemask)
M.equip_to_slot_or_del(new src.corpsemask(M), slot_wear_mask)
if(src.corpsehelmet)
M.equip_to_slot_or_del(new src.corpsehelmet(M), slot_head)
if(src.corpsebelt)
M.equip_to_slot_or_del(new src.corpsebelt(M), slot_belt)
if(src.corpsepocket1)
M.equip_to_slot_or_del(new src.corpsepocket1(M), slot_r_store)
if(src.corpsepocket2)
M.equip_to_slot_or_del(new src.corpsepocket2(M), slot_l_store)
if(src.corpseback)
M.equip_to_slot_or_del(new src.corpseback(M), slot_back)
if(src.corpseid == 1)
var/obj/item/weapon/card/id/W = new(M)
W.name = "[M.real_name]'s ID Card"
var/datum/job/jobdatum
for(var/jobtype in typesof(/datum/job))
var/datum/job/J = new jobtype
if(J.title == corpseidaccess)
jobdatum = J
break
if(src.corpseidicon)
W.icon_state = corpseidicon
if(src.corpseidaccess)
if(jobdatum)
W.access = jobdatum.get_access()
else
W.access = list()
if(corpseidjob)
W.assignment = corpseidjob
W.registered_name = M.real_name
M.equip_to_slot_or_del(W, slot_wear_id)
delete_me = 1
qdel(src)
//Types of Vox corpses:
/obj/effect/landmark/mobcorpse/vox/pirate
name = "vox pirate"
corpseuniform = /obj/item/clothing/under/color/black
corpsesuit = /obj/item/clothing/suit/armor/vox_scrap
corpseshoes = /obj/item/clothing/shoes/boots/workboots
corpsegloves = /obj/item/clothing/gloves/light_brown
corpsemask = /obj/item/clothing/mask/breath
corpseid = 0
/obj/effect/landmark/mobcorpse/vox/boarder_m
name = "vox melee boarder"
corpseuniform = /obj/item/clothing/under/vox/vox_casual
corpsesuit = /obj/item/clothing/suit/armor/vox_scrap
corpseshoes = /obj/item/clothing/shoes/boots/workboots
corpsegloves = /obj/item/clothing/gloves/light_brown
corpsemask = /obj/item/clothing/mask/breath
corpseid = 0
/obj/effect/landmark/mobcorpse/vox/boarder_r
name = "vox ranged boarder"
corpseuniform = /obj/item/clothing/under/rank/bartender
corpsesuit = /obj/item/clothing/suit/armor/bulletproof
corpseshoes = /obj/item/clothing/shoes/boots/workboots
corpsemask = /obj/item/clothing/mask/breath
corpseid = 0
/obj/effect/landmark/mobcorpse/vox/boarder_t
name = "vox salvage technician"
corpseuniform = /obj/item/clothing/under/rank/bartender
corpsesuit = /obj/item/clothing/suit/armor/bulletproof
corpseshoes = /obj/item/clothing/shoes/boots/workboots
corpsemask = /obj/item/clothing/mask/breath
corpseid = 0
/obj/effect/landmark/mobcorpse/vox/suppressor
name = "vox suppressor"
corpseuniform = /obj/item/clothing/under/color/red
corpsesuit = /obj/item/clothing/suit/storage/toggle/fr_jacket
corpseshoes = /obj/item/clothing/shoes/orange
corpsegloves = /obj/item/clothing/gloves/red
corpsemask = /obj/item/clothing/mask/gas/half
corpseid = 0
/obj/effect/landmark/mobcorpse/vox/captain
name = "vox captain"
corpseuniform = /obj/item/clothing/under/color/black
corpsesuit = /obj/item/clothing/suit/space/vox/carapace
corpseshoes = /obj/item/clothing/shoes/magboots/vox
corpsegloves = /obj/item/clothing/gloves/light_brown
corpsemask = /obj/item/clothing/mask/breath
corpsehelmet = /obj/item/clothing/head/helmet/riot
corpseid = 0

View File

@@ -0,0 +1,466 @@
/mob/living/simple_mob/animal/space/mouse_army
name = "mouse"
real_name = "mouse"
desc = "It's a small militarized rodent."
tt_desc = "E Mus musculus"
icon = 'icons/mob/animal.dmi'
icon_state = "mouse_gray"
item_state = "mouse_gray"
icon_living = "mouse_gray"
icon_dead = "mouse_gray_dead"
icon_rest = "mouse_gray_sleep"
faction = "mouse_army"
maxHealth = 50
health = 50
universal_understand = 1
taser_kill = 0
mob_size = MOB_MINISCULE
pass_flags = PASSTABLE
// can_pull_size = ITEMSIZE_TINY
// can_pull_mobs = MOB_PULL_NONE
layer = MOB_LAYER
density = 0
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "stamps on"
min_oxy = 0 //Require atleast 16kPA oxygen
minbodytemp = 0 //Below -50 Degrees Celcius
maxbodytemp = 5000 //Above 50 Degrees Celcius
//Mob melee settings
melee_damage_lower = 5
melee_damage_upper = 15
list/attacktext = list("attacked", "chomped", "gnawed on")
list/friendly = list("baps", "nuzzles")
attack_armor_type = "melee"
attack_sharp = 1
attack_edge = 1
//Damage resistances
shock_resist = 1
armor = list(
"melee" = 30,
"bullet" = 20,
"laser" = 20,
"energy" = 10,
"bomb" = 10,
"bio" = 0,
"rad" = 0) //Standard armor vest stats, slightly dropped due to scale.
has_langs = list("Mouse")
holder_type = /obj/item/weapon/holder/mouse
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
say_list_type = /datum/say_list/mouse
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
var/rank //pyro, operative, ammo, stealth. more to come. Do not leave blank.
/mob/living/simple_mob/animal/space/mouse_army/New()
..()
verbs += /mob/living/proc/ventcrawl
verbs += /mob/living/proc/hide
if(name == initial(name))
name = "[name] ([rand(1, 1000)])"
real_name = name
if(!rank)
rank = pick( list("operative","pyro", "ammo", "stealth") )
icon_state = "mouse_[rank]"
item_state = "mouse_[rank]"
icon_living = "mouse_[rank]"
icon_dead = "mouse_[rank]_dead"
icon_rest = "mouse_[rank]_sleep"
/mob/living/simple_mob/animal/space/mouse_army/Crossed(AM as mob|obj)
var/mob/SK = AM
if(SK.is_incorporeal())
return
if( ishuman(AM) )
if(!stat)
var/mob/M = AM
M.visible_message("<font color='blue'>\icon[src] Squeek!</font>")
playsound(src, 'sound/effects/mouse_squeak.ogg', 35, 1)
..()
/mob/living/simple_mob/animal/space/mouse_army/death()
layer = MOB_LAYER
playsound(src, 'sound/effects/mouse_squeak_loud.ogg', 35, 1)
if(client)
client.time_died_as_mouse = world.time
..()
/mob/living/simple_mob/animal/space/mouse_army/cannot_use_vents()
return
/mob/living/simple_mob/animal/space/mouse_army/proc/splat()
src.health = 0
src.stat = DEAD
src.icon_dead = "mouse_[rank]_splat"
src.icon_state = "mouse_[rank]_splat"
layer = MOB_LAYER
if(client)
client.time_died_as_mouse = world.time
//Base ported from vgstation. Operative Mice.
//Icon artists: DeityLink and plosky1
/mob/living/simple_mob/animal/space/mouse_army/operative
name = "operative mouse"
desc = "Where did it get that? Oh no..."
tt_desc = "E Mus sinister"
rank = "operative"
shock_resist = 1
armor = list(
"melee" = 40,
"bullet" = 40,
"laser" = 30,
"energy" = 15,
"bomb" = 35,
"bio" = 100,
"rad" = 100) //Mercenary Voidsuit Resistances, slightly downscaled, due to size.
//Pyro Mouse
/mob/living/simple_mob/animal/space/mouse_army/pyro
name = "pyro mouse"
desc = "What kind of madman would strap this to a mouse?"
tt_desc = "E Mus phlogiston"
rank = "pyro"
maxHealth = 30
health = 30
//Mob melee settings
melee_damage_lower = 5
melee_damage_upper = 10
attack_sharp = 0
attack_edge = 0
//Damage resistances
shock_resist = 0.6
armor = list(
"melee" = 20,
"bullet" = 20,
"laser" = 20,
"energy" = 20,
"bomb" = 90,
"bio" = 100,
"rad" = 100)
projectiletype = /obj/item/projectile/bullet/incendiary/flamethrower
base_attack_cooldown = 10
ai_holder_type = /datum/ai_holder/simple_mob/ranged
var/ruptured = FALSE
/mob/living/simple_mob/animal/space/mouse_army/pyro/death()
visible_message("<span class='critical'>\The [src]'s tank groans!</span>")
var/delay = rand(1, 3)
spawn(0)
// Flash black and red as a warning.
for(var/i = 1 to delay)
if(i % 2 == 0)
color = "#000000"
else
color = "#FF0000"
sleep(1)
spawn(rand (1,5))
if(src && !ruptured)
visible_message("<span class='critical'>\The [src]'s tank ruptures!</span>")
ruptured = 1
qdel(src)
adjust_fire_stacks(2)
IgniteMob()
return ..()
//Ammo Mouse
/mob/living/simple_mob/animal/space/mouse_army/ammo
name = "ammo mouse"
desc = "Aww! It's carrying a bunch of tiny bullets!"
tt_desc = "E Mus tela"
rank = "ammo"
maxHealth = 30
health = 30
//Mob melee settings
melee_damage_lower = 1
melee_damage_upper = 5
attack_sharp = 0
attack_edge = 0
//Damage resistances
shock_resist = 0.6
armor = list(
"melee" = 40,
"bullet" = 30,
"laser" = 10,
"energy" = 10,
"bomb" = 15,
"bio" = 100,
"rad" = 100)
var/exploded = FALSE
var/explosion_dev_range = 0
var/explosion_heavy_range = 0
var/explosion_light_range = 2
var/explosion_flash_range = 4 // This doesn't do anything iirc.
var/explosion_delay_lower = 1 SECOND // Lower bound for explosion delay.
var/explosion_delay_upper = 3 SECONDS // Upper bound.
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
/mob/living/simple_mob/animal/space/mouse_army/ammo/death()
visible_message("<span class='critical'>\The [src]'s body begins to rupture!</span>")
var/delay = rand(1, 3)
spawn(0)
// Flash black and red as a warning.
for(var/i = 1 to delay)
if(i % 2 == 0)
color = "#000000"
else
color = "#FF0000"
sleep(1)
spawn(rand(1,5))
if(src && !exploded)
visible_message("<span class='critical'>\The [src]'s body detonates!</span>")
exploded = 1
explosion(src.loc, 0, 0, 2, 4)
qdel(src)
return ..()
/mob/living/simple_mob/animal/space/mouse_army/stealth
name = "stealth mouse"
desc = "I bet you thought the normal ones were scary!"
tt_desc = "E Mus insidiis"
rank = "stealth"
//Mob melee settings
melee_damage_lower = 15
melee_damage_upper = 20
attack_sharp = 1
attack_edge = 1
//Damage resistances
shock_resist = 0.6
armor = list(
"melee" = 50,
"bullet" = 10,
"laser" = 10,
"energy" = 10,
"bomb" = 10,
"bio" = 100,
"rad" = 100)
player_msg = "You have an imperfect, but automatic stealth. If you attack something while 'hidden', then \
you will do bonus damage, stun the target, and unstealth for a period of time.<br>\
Getting attacked will also break your stealth."
ai_holder_type = /datum/ai_holder/simple_mob/melee/hit_and_run
var/cloaked_alpha = 45 // Lower = Harder to see.
var/cloaked_bonus_damage = 20 // This is added on top of the normal melee damage.
var/cloaked_weaken_amount = 3 // How long to stun for.
var/cloak_cooldown = 10 SECONDS // Amount of time needed to re-cloak after losing it.
var/last_uncloak = 0 // world.time
// Check if cloaking if possible.
/mob/living/simple_mob/animal/space/mouse_army/stealth/proc/can_cloak()
if(stat)
return FALSE
if(last_uncloak + cloak_cooldown > world.time)
return FALSE
return TRUE
// Called by things that break cloaks, like Technomancer wards.
/mob/living/simple_mob/animal/space/mouse_army/stealth/break_cloak()
uncloak()
/mob/living/simple_mob/animal/space/mouse_army/stealth/is_cloaked()
return cloaked
// Cloaks the spider automatically, if possible.
/mob/living/simple_mob/animal/space/mouse_army/stealth/handle_special()
if(!cloaked && can_cloak())
cloak()
// Applies bonus base damage if cloaked.
/mob/living/simple_mob/animal/space/mouse_army/stealth/apply_bonus_melee_damage(atom/A, damage_amount)
if(cloaked)
return damage_amount + cloaked_bonus_damage
return ..()
// Applies stun, then uncloaks.
/mob/living/simple_mob/animal/space/mouse_army/stealth/apply_melee_effects(atom/A)
if(cloaked)
if(isliving(A))
var/mob/living/L = A
L.Weaken(cloaked_weaken_amount)
to_chat(L, span("danger", "\The [src] ambushes you!"))
playsound(L, 'sound/weapons/spiderlunge.ogg', 75, 1)
uncloak()
..() // For the poison.
// Force uncloaking if attacked.
/mob/living/simple_mob/animal/space/mouse_army/stealth/bullet_act(obj/item/projectile/P)
. = ..()
break_cloak()
/mob/living/simple_mob/animal/space/mouse_army/stealth/hit_with_weapon(obj/item/O, mob/living/user, effective_force, hit_zone)
. = ..()
break_cloak()
// Mouse noises
/datum/say_list/mouse
speak = list("Squeek!","SQUEEK!","Squeek?")
emote_hear = list("squeeks","squeaks","squiks")
emote_see = list("runs in a circle", "shakes", "scritches at something")
////////////////////
// Mouse Tanks
////////////////////
// Tiny mecha.
// Designed for ranged attacks.
/datum/category_item/catalogue/technology/mouse_tank
name = "Whisker Tank"
desc = "Unofficially dubbed the 'Whisker Tank', this micro mecha is not unfamiliar \
in several neighboring sectors. Known for its speed and small size, theories \
on the origin of these devices cover a wide array of probabilities. The general \
consensus is that these tanks were designed as weapons of sabotage that never saw wide\
deployment. Since that theoretical time, others may have discovered and modified this \
technology for their own twisted ends."
value = CATALOGUER_REWARD_EASY
/mob/living/simple_mob/mechanical/mecha/mouse_tank
name = "\improper Whisker Tank"
desc = "A shockingly functional, miniaturized tank. Its inventor is unknown, but widely reviled."
catalogue_data = list(/datum/category_item/catalogue/technology/mouse_tank)
icon = 'icons/mecha/micro.dmi'
icon_state = "whisker"
wreckage = /obj/structure/loot_pile/mecha/mouse_tank
faction = "mouse_army"
maxHealth = 150
armor = list(
"melee" = 25,
"bullet" = 20,
"laser" = 30,
"energy" = 15,
"bomb" = 0,
"bio" = 100,
"rad" = 100
)
projectiletype = /obj/item/projectile/bullet/pistol/medium
movement_cooldown = 2
base_attack_cooldown = 8
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting
/mob/living/simple_mob/mechanical/mecha/mouse_tank/manned
pilot_type = /mob/living/simple_mob/animal/space/mouse_army/operative
// Immune to heat damage, resistant to lasers, and it spits fire.
/datum/category_item/catalogue/technology/mouse_tank/livewire
name = "Livewire Assault Tank"
desc = "Dubbed the 'Livewire Assault Tank', this pattern of the 'standard' Whisker \
tank has been condemned by multiple governments and corporations due to the \
infamous brutality of its armaments. The utilization of this kind of technology would \
spark a major scandal if its origins could ever be proven."
value = CATALOGUER_REWARD_EASY
/mob/living/simple_mob/mechanical/mecha/mouse_tank/livewire
name = "\improper Livewire Assault Tank"
desc = "A scorched, miniaturized light tank. It is mentioned only in hushed whispers."
catalogue_data = list(/datum/category_item/catalogue/technology/mouse_tank/livewire)
icon_state = "livewire"
wreckage = /obj/structure/loot_pile/mecha/mouse_tank/livewire
maxHealth = 200
heat_resist = 1
armor = list(
"melee" = 0,
"bullet" = 20,
"laser" = 50,
"energy" = 0,
"bomb" = 50,
"bio" = 100,
"rad" = 100
)
projectiletype = /obj/item/projectile/bullet/incendiary/flamethrower/large
movement_cooldown = 3
base_attack_cooldown = 15
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting
/mob/living/simple_mob/mechanical/mecha/mouse_tank/livewire/manned
pilot_type = /mob/living/simple_mob/animal/space/mouse_army/pyro
//Rockets? Rockets.
/datum/category_item/catalogue/technology/mouse_tank/eraticator
name = "Eraticator Artillery Platform"
desc = "Rare and fearsome weapons platforms, 'Eraticators', as they have come to be \
known, are frighteningly powerful long ranged tanks built entirely around exotic \
gyrojet technology. The raw cost and specialized nature of its design makes it a rare \
but formidable foe. It is often accompanied by mechanized reinforcements."
value = CATALOGUER_REWARD_EASY
/mob/living/simple_mob/mechanical/mecha/mouse_tank/eraticator
name = "\improper Eraticator Artillery Platform"
desc = "A heavy, miniaturized artillery platform. If you can hear it squeaking, you're too close."
catalogue_data = list(/datum/category_item/catalogue/technology/mouse_tank/eraticator)
icon_state = "eraticator"
wreckage = /obj/structure/loot_pile/mecha/mouse_tank/eraticator
maxHealth = 300
heat_resist = 1
armor = list(
"melee" = 20,
"bullet" = 50,
"laser" = 50,
"energy" = 20,
"bomb" = 80,
"bio" = 100,
"rad" = 100
)
projectiletype = /obj/item/projectile/bullet/gyro
movement_cooldown = 5
base_attack_cooldown = 15
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting
/mob/living/simple_mob/mechanical/mecha/mouse_tank/eraticator/manned
pilot_type = /mob/living/simple_mob/animal/space/mouse_army/ammo

View File

@@ -0,0 +1,678 @@
////////////////////////////
// Basic Cultist
////////////////////////////
/datum/category_item/catalogue/fauna/cultist
name = "Cultists"
desc = "The Galactic Awakening unlocked the psionic potential of many \
from rim to rim. The first to notice this font of power were those who \
were already the faithful devotees of esoteric religions. The rise of Blood \
Cultists in service to the Geometer quickly became an intergalactic incident. \
Although NanoTrasen and other entities have risen to combat these foes, a \
vast array of Hermetic Orders now command frightening power."
value = CATALOGUER_REWARD_TRIVIAL
unlocked_by_any = list(/datum/category_item/catalogue/fauna/cultist)
// Obtained by scanning all X.
/datum/category_item/catalogue/fauna/all_cultists
name = "Collection - Cultists"
desc = "You have scanned a large array of different types of Cultist, \
and therefore you have been granted a large sum of points, through this \
entry."
value = CATALOGUER_REWARD_SUPERHARD
unlocked_by_all = list(
/datum/category_item/catalogue/fauna/cultist/human,
/datum/category_item/catalogue/fauna/cultist/tesh,
/datum/category_item/catalogue/fauna/cultist/lizard,
/datum/category_item/catalogue/fauna/cultist/caster,
/datum/category_item/catalogue/fauna/cultist/initiate,
/datum/category_item/catalogue/fauna/cultist/castertesh,
/datum/category_item/catalogue/fauna/cultist/elite,
/datum/category_item/catalogue/fauna/cultist/magus,
/datum/category_item/catalogue/fauna/cultist/hunter
)
/mob/living/simple_mob/humanoid/cultist //Do not spawn this on in directly it is simply a base for the rest namely the unique death animations.
name = "Cultist"
desc = "An awfully frail and ghastly looking individual"
tt_desc = "NULL"
icon = 'icons/mob/animal_ch.dmi'
icon_state = "initiate"
faction = "cult"
mob_class = MOB_CLASS_DEMONIC
/datum/category_item/catalogue/fauna/cultist/human
name = "Cultists - Human"
desc = "The first wave of zealots faced by many on the Frontier were \
human. For a short while it was assumed that humans were somehow more \
susecptible to Paracausal influence. Although this belief has long since \
been disproven, the large Human population on the Frontier has ensured \
that the species is overrepresented amongst the ranks of Cult aggressors."
value = CATALOGUER_REWARD_EASY
/mob/living/simple_mob/humanoid/cultist/human
name = "cultist"
desc = "A fanatical zealot armed with a darkly colored sword."
icon_state = "cultist"
icon_living = "cultist"
catalogue_data = list(/datum/category_item/catalogue/fauna/cultist/human)
status_flags = 0
response_help = "pokes"
response_disarm = "shoves"
response_harm = "hits"
harm_intent_damage = 5
melee_damage_lower = 30 //Cult Sword Damage
melee_damage_upper = 30
attack_sharp = 1
attack_edge = 1
attacktext = list("slashed", "stabbed")
armor = list(melee = 60, bullet = 50, laser = 30, energy = 80, bomb = 30, bio = 100, rad = 100) // Same armor are cult armor, may nerf since DAMN THAT IS GOOD ARMOR
attack_sound = 'sound/weapons/bladeslice.ogg'
movement_cooldown = 3
ai_holder_type = /datum/ai_holder/simple_mob/melee
/mob/living/simple_mob/humanoid/cultist/human/death()
new /obj/effect/decal/remains/human (src.loc)
..(null,"let's out a maddening laugh as his body crumbles away.")
ghostize()
qdel(src)
/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt //Teleporting Cultists
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
var/jaunt_warning = 0.5 SECONDS // How long the jaunt telegraphing is.
var/jaunt_tile_speed = 20 // How long to wait between each tile. Higher numbers result in an easier to dodge tunnel attack.
// In Theory this Jury Rigged Code form Tunneler Spiders Should Allow Wraiths to Jaunt
special_attack_min_range = 2
special_attack_max_range = 6
special_attack_cooldown = 10 SECONDS
/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/do_special_attack(atom/A)
set waitfor = FALSE
set_AI_busy(TRUE)
// Save where we're gonna go soon.
var/turf/destination = get_turf(A)
var/turf/starting_turf = get_turf(src)
// Telegraph to give a small window to dodge if really close.
flick("bloodout",A)
icon_state = "bloodout"
sleep(jaunt_warning) // For the telegraphing.
// Do the dig!
visible_message(span("danger","\The [src] sinks into a puddle of blood \the [A]!"))
new /obj/effect/decal/cleanable/blood (src.loc)
flick("blood_out",A)
icon_state = "bloodout"
if(handle_jaunt(destination) == FALSE)
set_AI_busy(FALSE)
flick("bloodin",A)
icon_state = "bloodin"
return FALSE
// Did we make it?
if(!(src in destination))
set_AI_busy(FALSE)
icon_state = "bloodin"
flick("bloodin",A)
return FALSE
var/overshoot = TRUE
// Test if something is at destination.
for(var/mob/living/L in destination)
if(L == src)
continue
visible_message(span("danger","\The [src] suddenly rises from a pool of blood \the [L]!"))
new /obj/effect/decal/cleanable/blood (src.loc)
playsound(L, 'sound/weapons/heavysmash.ogg', 75, 1)
L.Weaken(3)
overshoot = FALSE
if(!overshoot) // We hit the target, or something, at destination, so we're done.
set_AI_busy(FALSE)
icon_state = "bloodin"
flick("bloodin",A)
return TRUE
// Otherwise we need to keep going.
to_chat(src, span("warning", "You overshoot your target!"))
playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1)
var/dir_to_go = get_dir(starting_turf, destination)
for(var/i = 1 to rand(2, 4))
destination = get_step(destination, dir_to_go)
if(handle_jaunt(destination) == FALSE)
set_AI_busy(FALSE)
icon_state = "bloodin"
flick("bloodin",A)
return FALSE
set_AI_busy(FALSE)
icon_state = "bloodin"
flick("bloodin",A)
return FALSE
// Does the jaunt movement
/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/proc/handle_jaunt(turf/destination)
var/turf/T = get_turf(src) // Hold our current tile.
// Regular tunnel loop.
for(var/i = 1 to get_dist(src, destination))
if(stat)
return FALSE // We died or got knocked out on the way.
if(loc == destination)
break // We somehow got there early.
// Update T.
T = get_step(src, get_dir(src, destination))
if(T.check_density(ignore_mobs = TRUE))
to_chat(src, span("critical", "You hit something really solid!"))
playsound(src, "punch", 75, 1)
Weaken(5)
add_modifier(/datum/modifier/tunneler_vulnerable, 10 SECONDS)
return FALSE // Hit a wall.
// Get into the tile.
forceMove(T)
/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/should_special_attack(atom/A)
// Make sure its possible for the wraith to reach the target so it doesn't try to go through a window.
var/turf/destination = get_turf(A)
var/turf/starting_turf = get_turf(src)
var/turf/T = starting_turf
for(var/i = 1 to get_dist(starting_turf, destination))
if(T == destination)
break
T = get_step(T, get_dir(T, destination))
if(T.check_density(ignore_mobs = TRUE))
return FALSE
return T == destination
////////////////////////////
// Teshari Cultist
////////////////////////////
/datum/category_item/catalogue/fauna/cultist/tesh
name = "Cultists - Teshari"
desc = "Teshari cultists project a curiously sinister air. Perhaps \
due to their diminutive stature, these creatures are sometimes not \
regarded as genuine threats when compared to their more imposing companions. \
To ignore a Teshari fanatic is a fool's errand. Fast, hard to hit, and \
tenacious, Teshari form the vanguard of many fanatical assaults."
value = CATALOGUER_REWARD_EASY
/mob/living/simple_mob/humanoid/cultist/tesh
name = "cultist"
desc = "A sinister looking hooded Teshari armed with a curved knife."
icon_state = "culttesh"
icon_living = "culttesh"
maxHealth = 75
health = 75
catalogue_data = list(/datum/category_item/catalogue/fauna/cultist/tesh)
faction = "cult"
status_flags = 0
response_help = "pokes"
response_disarm = "shoves"
response_harm = "hits"
harm_intent_damage = 5
melee_damage_lower = 15 //Ritual Knife
melee_damage_upper = 15
attack_armor_pen = 25
attack_sharp = 1
attack_edge = 1
attacktext = list("slashed", "stabbed")
armor = list(melee = 45, bullet = 40, laser = 30, energy = 80, bomb = 20, bio = 100, rad = 100) // Reduced Resistance to Approximate increased Tesh damage.
attack_sound = 'sound/weapons/bladeslice.ogg'
movement_cooldown = 2
ai_holder_type = /datum/ai_holder/simple_mob/melee
/mob/living/simple_mob/humanoid/cultist/tesh/death()
new /obj/effect/decal/cleanable/ash (src.loc)
..(null,"let's out a shrill chirp as his body turns to dust.")
ghostize()
qdel(src)
////////////////////////////
// Lizard Cultist
////////////////////////////
/datum/category_item/catalogue/fauna/cultist/lizard
name = "Cultists - Lizard"
desc = "The Unathi Kingdom of Moghes has stamped down heavily on the \
heretical activities of religious sects not approved by the State. Due \
to this, many Unathi seeking religious freedom have fled to the Frontier. \
Unfortunately, some of those who took this path have fallen prey to true \
evil. Possessing the zeal of the oppressed, Unathi cultists are deadly \
fanatics, eager to shred their enemies apart in close quarters, regardless \
of what damage they themselves incur."
value = CATALOGUER_REWARD_EASY
/mob/living/simple_mob/humanoid/cultist/lizard
name = "cultist"
desc = "With a knife in each hand, this lizard looks ready to disect you."
icon_state = "cultliz"
icon_living = "cultliz"
maxHealth = 200
health = 200
catalogue_data = list(/datum/category_item/catalogue/fauna/cultist/lizard)
faction = "cult"
status_flags = 0
response_help = "pokes"
response_disarm = "shoves"
response_harm = "hits"
harm_intent_damage = 5
melee_damage_lower = 15 //Ritual Knife
melee_damage_upper = 15
attack_sharp = 1
attack_edge = 1
attacktext = list("slashed", "stabbed")
armor = list(melee = 70, bullet = 60, laser = 30, energy = 80, bomb = 35, bio = 100, rad = 100) // Better Armor to match lizard brute resist
attack_sound = 'sound/weapons/rapidslice.ogg'
movement_cooldown = 4
base_attack_cooldown = 7.5 //Two knives mean double stab.
ai_holder_type = /datum/ai_holder/simple_mob/melee
/mob/living/simple_mob/humanoid/cultist/lizard/death()
new /obj/effect/decal/remains/unathi (src.loc)
..(null,"hisses as he collapses into a pile of bones.")
ghostize()
qdel(src)
////////////////////////////
// Blood Mage
////////////////////////////
/datum/category_item/catalogue/fauna/cultist/caster
name = "Cultists - Blood Mage"
desc = "For those servants of a Cult who possess enough latent ability, \
the channelling of Paracausal power is a very real skill to be honed and \
exploited. Blood Mages learn to fuel paranatural assaults using their own \
life force. Necessarily short lived, these cultists believe that bleeding \
themselves dry is a statement of faith. Able to fire beams of dark energy \
at their foes, these fanatics should be primarily engaged by PMD response \
teams."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/cultist/caster
name = "Blood Mage"
desc = "A Robed individual whose hands pulsate with unnatural power."
icon_state = "caster"
icon_living = "caster"
maxHealth = 150
health = 150
catalogue_data = list(/datum/category_item/catalogue/fauna/cultist/caster)
faction = "cult"
status_flags = 0
response_help = "pokes"
response_disarm = "shoves"
response_harm = "hits"
harm_intent_damage = 5
melee_damage_lower = 15 //Ritual Knife
melee_damage_upper = 15
attack_sharp = 1
attack_edge = 1
attacktext = list("slashed", "stabbed")
armor = list(melee = 50, bullet = 30, laser = 50, energy = 80, bomb = 25, bio = 100, rad = 100) //Armor Rebalanced for Cult Robes.
attack_sound = 'sound/weapons/rapidslice.ogg'
movement_cooldown = 4
projectiletype = /obj/item/projectile/beam/inversion
projectilesound = 'sound/weapons/spiderlunge.ogg'
ai_holder_type = /datum/ai_holder/simple_mob/ranged
/mob/living/simple_mob/humanoid/cultist/caster/death()
new /obj/effect/decal/remains/human (src.loc)
new /obj/effect/decal/cleanable/blood/gibs (src.loc)
..(null,"melts into a pile of blood and bones.")
ghostize()
qdel(src)
////////////////////////////
// Blood Initiate
////////////////////////////
/datum/category_item/catalogue/fauna/cultist/initiate
name = "Cultists - Initiate"
desc = "After the Awakening, some who thirst for power or belonging \
saw an opportunity to have their darker desires fulfilled. These converts \
are accepted into the ranks of Cults across the galaxy regardless of whether \
they possess psionic potential are not. Those that do ascend through the \
ranks, whereas those that don't may still serve as cannon fodder and sacrifices."
value = CATALOGUER_REWARD_EASY
/mob/living/simple_mob/humanoid/cultist/initiate
name = "Blood Intiate"
desc = "A Novice Amongst his betters, he still seems determined to slice you to bits."
icon_state = "initiate"
icon_living = "initiate"
maxHealth = 150
health = 150
catalogue_data = list(/datum/category_item/catalogue/fauna/cultist/initiate)
faction = "cult"
status_flags = 0
response_help = "pokes"
response_disarm = "shoves"
response_harm = "hits"
harm_intent_damage = 5
melee_damage_lower = 15 //Ritual Knife
melee_damage_upper = 15
attack_sharp = 1
attack_edge = 1
attacktext = list("slashed", "stabbed")
armor = list(melee = 50, bullet = 30, laser = 50, energy = 80, bomb = 25, bio = 100, rad = 100) //Armor Rebalanced for Cult Robes.
attack_sound = 'sound/weapons/rapidslice.ogg'
movement_cooldown = 4
ai_holder_type = /datum/ai_holder/simple_mob/melee
/mob/living/simple_mob/humanoid/cultist/initiate/death()
new /obj/effect/decal/remains/human (src.loc)
..(null,"lets out a horrified scream as his body crumbles away.")
ghostize()
qdel(src)
////////////////////////////
// Teshari Mage
////////////////////////////
/datum/category_item/catalogue/fauna/cultist/castertesh
name = "Cultists - Teshari Mage"
desc = "Similar in skill to their human counter parts, Teshari mages \
are regarded as more ferocious combatants. Able to cast paracausal beams \
at a rapid pace with ease, Teshari Mages are a priority target of any \
response team, and any who discount their threat are quickly shown the \
error of their ways."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/cultist/castertesh
name = "Teshari Mage"
desc = "This Teshari seems to have forsoken weapons for unfanthomable power."
icon_state = "castertesh"
icon_living = "castertesh"
maxHealth = 75
health = 75
catalogue_data = list(/datum/category_item/catalogue/fauna/cultist/castertesh)
faction = "cult"
status_flags = 0
response_help = "pokes"
response_disarm = "shoves"
response_harm = "hits"
harm_intent_damage = 5
melee_damage_lower = 15 //Ritual Knife
melee_damage_upper = 15
attack_sharp = 1
attack_edge = 1
attacktext = list("slashed", "stabbed")
armor = list(melee = 35, bullet = 20, laser = 35, energy = 60, bomb = 20, bio = 100, rad = 100) //Rebalanced for Robes and Tesh damage
attack_sound = 'sound/weapons/rapidslice.ogg'
movement_cooldown = 2
base_attack_cooldown = 7.5
projectiletype = /obj/item/projectile/beam/inversion
projectilesound = 'sound/weapons/spiderlunge.ogg'
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting
/mob/living/simple_mob/humanoid/cultist/castertesh/death()
new /obj/effect/decal/cleanable/ash (src.loc)
..(null,"burns away into nothing.")
ghostize()
qdel(src)
////////////////////////////
// Elite Cultist
////////////////////////////
/datum/category_item/catalogue/fauna/cultist/elite
name = "Cultists - Elite"
desc = "Cultists who preceded the Great Awakening are often regarded \
with immense respect. Truly devoted, these adherents learned many rites \
and rituals before they ever bore true power. As such, Elite Cultists \
possess a working knowledge of many arcane arts, and are trusted with \
the rare Paracausal artifacts possessed by their orders. From mirror \
shields to arcane sets of armor, Elites command fear, and inspire the \
fanaticism of their subordinates."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/cultist/elite
name = "Elite Cultist"
desc = "A heavily armed cultist with a mirror shield that hurts to look at."
icon_state = "cult_elite"
icon_living = "cult_elite"
faction = "cult"
catalogue_data = list(/datum/category_item/catalogue/fauna/cultist/elite)
status_flags = 0
response_help = "pokes"
response_disarm = "shoves"
response_harm = "hits"
harm_intent_damage = 5
melee_damage_lower = 30 //Cult Sword Damage
melee_damage_upper = 30
attack_sharp = 1
attack_edge = 1
attacktext = list("slashed", "stabbed")
armor = list(melee = 60, bullet = 50, laser = 30, energy = 80, bomb = 30, bio = 100, rad = 100) // Same armor are cult armor, may nerf since DAMN THAT IS GOOD ARMOR
attack_sound = 'sound/weapons/bladeslice.ogg'
movement_cooldown = 3
ai_holder_type = /datum/ai_holder/simple_mob/melee
/mob/living/simple_mob/humanoid/cultist/elite/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(O.force)
if(prob(30))
visible_message("<span class='danger'>\The [src] blocks \the [O] with its shield!</span>")
if(user)
ai_holder.react_to_attack(user)
return
else
..()
else
to_chat(user, "<span class='warning'>This weapon is ineffective, it does no damage.</span>")
visible_message("<span class='warning'>\The [user] gently taps [src] with \the [O].</span>")
/mob/living/simple_mob/humanoid/cultist/elite/bullet_act(var/obj/item/projectile/Proj)
if(!Proj) return
if(prob(50))
visible_message("<font color='red'><B>[Proj] disappears into the mirror world as it hits the shield.</B></font>")
if(Proj.firer)
ai_holder.react_to_attack(Proj.firer)
return
else
..()
/mob/living/simple_mob/humanoid/cultist/elite/death()
new /obj/effect/decal/remains/human (src.loc)
new /obj/effect/decal/cleanable/blood/gibs (src.loc)
new /obj/item/weapon/material/shard (src.loc)
..(null,"shatters into bone and blood like pieces like the now shattered mirror.")
playsound(src, 'sound/effects/Glassbr2.ogg', 100, 1)
ghostize()
qdel(src)
////////////////////////////
// Cult Magus
////////////////////////////
/datum/category_item/catalogue/fauna/cultist/magus
name = "Cultists - Blood Magus"
desc = "The Blood Magus commands their local chapter with total authority. \
These religious leaders possess an unparalleled knowledge of their cult's \
secrets, rituals, and tenets. To attain the rank of Magus, a Cultist must \
possess great psionic power. Their ability to channel Paracausal energy is \
unparalled amongst their peers. Wielding dark gifts granted by darker gods, \
the Magus is a priority target in any engagement."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/cultist/magus
name = "Blood Magus"
desc = "A leader of the bloody cult and master of the forbidden arts, wielding powers beyond that of mortal men."
icon_state = "magus"
icon_living = "magus"
maxHealth = 300 //Boss Mobs should be tanky.
health = 300
catalogue_data = list(/datum/category_item/catalogue/fauna/cultist/magus)
faction = "cult"
status_flags = 0
response_help = "pokes"
response_disarm = "shoves"
response_harm = "hits"
harm_intent_damage = 5
melee_damage_lower = 30 //Ritual Knife
melee_damage_upper = 30
attack_sharp = 1
attack_edge = 1
attacktext = list("slashed", "stabbed")
armor = list(melee = 60, bullet = 50, laser = 50, energy = 80, bomb = 30, bio = 100, rad = 100) //Super Armor since Boss Mob
attack_sound = 'sound/weapons/bladeslice.ogg'
movement_cooldown = 4
projectiletype = /obj/item/projectile/beam/inversion
base_attack_cooldown = 5
projectilesound = 'sound/weapons/spiderlunge.ogg'
var/obj/item/shield_projector/shields = null
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting
/mob/living/simple_mob/humanoid/cultist/magus/death()
new /obj/effect/decal/cleanable/blood/gibs (src.loc)
..(null,"let's out a dark laugh as it collapses into a puddle of blood.")
ghostize()
qdel(src)
/mob/living/simple_mob/humanoid/cultist/magus/Initialize(mapload)
shields = new /obj/item/shield_projector/rectangle/automatic/magus(src)
return ..()
/obj/item/shield_projector/rectangle/automatic/magus
name = "cult shield stone"
desc = "A stone wielded by only the most powerful of cult leaders. It projects a shield around the user."
icon = 'icons/obj/device.dmi'
icon_state = "implant_melted"
shield_health = 200
max_shield_health = 200
shield_regen_delay = 10 SECONDS
shield_regen_amount = 10
size_x = 1
size_y = 1
color = "#f50202"
high_color = "#ff0404"
low_color = "#690000"
////////////////////////////
// Blood Hunter
////////////////////////////
/datum/category_item/catalogue/fauna/cultist/hunter
name = "Cultists - Blood Hunter"
desc = "Whether the Blood Hunter may be considered human still remains \
a hotly contested topic. There is further debate regarding whether every \
instance of the Blood Hunter is the same entity, or whether this condition \
is some manner of Paranatural affliction or status. It is speculated that \
the Blood Hunter was once a mortal devotee of the Geometer, and has somehow \
ascended to the rank of Paracausal Being. The Blood Hunter is a killer without \
peer. If encountered, retreat and contact the PMD immediately."
value = CATALOGUER_REWARD_HARD
/mob/living/simple_mob/humanoid/cultist/hunter // This Mob is not meant to be fair, he is not meant to fight regular crew he is to be pitted against heavily armed explo teams to see if he can wipe them out.
name = "Blood Hunter" // TO BE CLEAR: DO NOT SPAWN THIS GUY ON THE SHIP/STATION HE WILL MURDER EVERYTHING.
desc = "The smell of blood fills the air, how delicious it tastes. Let the hunt begin." // He is a horrifying lovechild of Caleb and a blooborne hunter.
icon_state = "hunterb" // He probably shouldn't even have other mobs supporting him.
icon_living = "hunterb"
maxHealth = 300 //Boss Mobs should be tanky.
health = 300
catalogue_data = list(/datum/category_item/catalogue/fauna/cultist/hunter)
faction = "cult"
status_flags = 0
response_help = "pokes"
response_disarm = "shoves"
response_harm = "hits"
harm_intent_damage = 5
melee_damage_lower = 42 //Saw Cleaver Brutality
melee_damage_upper = 42
attack_sharp = 1
attack_edge = 1
attacktext = list("slashed", "stabbed")
armor = list(melee = 60, bullet = 50, laser = 50, energy = 80, bomb = 30, bio = 100, rad = 100) //Super Armor since Boss Mob
attack_sound = 'sound/weapons/bladeslice.ogg'
movement_cooldown = 0 //This is so he can't be kited well
projectiletype = /obj/item/projectile/bullet/pellet/shotgun
base_attack_cooldown = 7.5
loot_list = list(/obj/item/weapon/material/butterfly/saw = 100, /obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn/alt = 100)
needs_reload = TRUE
reload_max = 2
projectilesound = 'sound/weapons/Gunshot_shotgun.ogg'
ai_holder_type = /datum/ai_holder/simple_mob/ranged/aggressive/blood_hunter
/mob/living/simple_mob/humanoid/cultist/hunter/death()
new /obj/effect/decal/cleanable/blood/gibs (src.loc)
..(null,"laughs as he melts away. His laughs echo through the air even after only a dense red goo remains.")
ghostize()
qdel(src)
////////////////////////////
// Hunter AI
////////////////////////////
/datum/ai_holder/simple_mob/ranged/aggressive/blood_hunter //This directs the AI to charge while shooting at its victim then entering Glorious melee combat.
pointblank = FALSE
closest_distance = 0
////////////////////////////
// Ash Hunter
////////////////////////////
/mob/living/simple_mob/humanoid/cultist/hunter/surt // This Mob is not meant to be fair, he is not meant to fight regular crew he is to be pitted against heavily armed explo teams to see if he can wipe them out.
name = "Itinerant Blood Hunter"
desc = "This Blood Hunter is far from home. Strange energies course around him, protecting him from the environment. What eldritch influence drew him to this place?" // Blood Hunter on vacation.
heat_resist = 1 //Might make this 0.75 if 1 is too much resistance for a boss monster. This guy's just a placeholder until we get the Miner in anyways.

View File

@@ -460,7 +460,7 @@
pointed at you."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/merc/voxpirate/suppressor
/mob/living/simple_mob/humanoid/merc/voxpirate/ranged/suppressor
name = "vox suppressor"
desc = "Come on, feel the noise!"
icon_state = "voxsuppressor"
@@ -492,7 +492,7 @@
If you are unable to negotiate, expect to face their entire crew head on."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/merc/voxpirate/captain
/mob/living/simple_mob/humanoid/merc/voxpirate/ranged/captain
name = "vox pirate captain"
desc = "Walkings the plank, dustlung! Yayaya."
icon_state = "voxcaptain"

View File

@@ -1,3 +1,4 @@
/* CHOMPEdit - Overridden basically everything in pirates_ch.dm
/mob/living/simple_mob/humanoid/pirate
name = "Pirate"
desc = "Does what he wants cause a pirate is free."
@@ -38,3 +39,5 @@
loot_list = list(/obj/item/weapon/gun/energy/laser = 100)
corpse = /obj/effect/landmark/mobcorpse/pirate/ranged
*/

View File

@@ -0,0 +1,460 @@
///////////////////////////////
// Yargh Yargh Fiddle De Di
///////////////////////////////
/datum/category_item/catalogue/fauna/pirate
name = "Pirates"
desc = "Life on the Frontier is often harsh, and there are many \
natural hazards which must be navigated and accounted for. In the \
face of such constant adversity, some colonists will resort to crime \
and piracy to try and make their way. From misguided attempts at \
survival to malicious profiteering, Piracy is a constant concern \
on the Frontier, and is punished harshly by every Megacorporation."
value = CATALOGUER_REWARD_TRIVIAL
///////////////////////////////
// Knife Priate
///////////////////////////////
/mob/living/simple_mob/humanoid/pirate
name = "Pirate"
desc = "Does what he wants cause a pirate is free."
tt_desc = "E Homo sapiens"
icon = 'icons/mob/animal_ch.dmi'
icon_state = "piratemelee"
icon_living = "piratemelee"
icon_dead = "piratemelee_dead"
catalogue_data = list(/datum/category_item/catalogue/fauna/pirate)
faction = "pirate"
response_help = "pushes"
response_disarm = "shoves"
response_harm = "hits"
movement_cooldown = 2
harm_intent_damage = 5
melee_damage_lower = 15 //Tac Knife damage
melee_damage_upper = 15
attack_sharp = 1
attack_edge = 1
attacktext = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
attack_sound = 'sound/weapons/bladeslice.ogg'
loot_list = list(/obj/item/weapon/material/knife/tacknife = 100)
corpse = /obj/effect/landmark/mobcorpse/pirate
ai_holder_type = /datum/ai_holder/simple_mob/merc
say_list_type = /datum/say_list/pirate
//Armored Variant
/mob/living/simple_mob/humanoid/pirate/armored
name = "Armored Pirate"
desc = "Does what he wants cause a pirate is free. This one wears crude armor."
icon_state = "piratemelee-armor"
icon_living = "piratemelee-armor"
movement_cooldown = 4
armor = list(melee = 30, bullet = 20, laser = 20, energy = 5, bomb = 5, bio = 100, rad = 100)
loot_list = list(/obj/item/weapon/material/knife/tacknife = 100, /obj/item/clothing/suit/armor/material/makeshift = 100)
///////////////////////////////
// Machete Priate
///////////////////////////////
/mob/living/simple_mob/humanoid/pirate/machete
name = "Pirate Brush Cutter"
desc = "Does what he wants cause a pirate is free. This one has got a machete."
tt_desc = "E Homo sapiens"
icon = 'icons/mob/animal_ch.dmi'
icon_state = "piratemelee-machete"
icon_living = "piratemelee-machete"
icon_dead = "piratemelee_dead"
response_help = "pushes"
response_disarm = "shoves"
response_harm = "hits"
melee_damage_lower = 25 //Macehte damage
melee_damage_upper = 25
attacktext = list("slashed", "chopped", "gouged", "ripped", "cut")
attack_sound = 'sound/weapons/bladeslice.ogg'
loot_list = list(/obj/item/weapon/material/knife/machete = 100)
corpse = /obj/effect/landmark/mobcorpse/pirate
//Armored Variant
/mob/living/simple_mob/humanoid/pirate/machete/armored
name = "Armored Brush Cutter"
desc = "Does what he wants cause a pirate is free. This one has got a machete and wears crude armor."
icon_state = "piratemelee-machete-armor"
icon_living = "piratemelee-machete-armor"
movement_cooldown = 3
armor = list(melee = 30, bullet = 20, laser = 20, energy = 5, bomb = 5, bio = 100, rad = 100)
loot_list = list(/obj/item/weapon/material/knife/machete = 100, /obj/item/clothing/suit/armor/material/makeshift = 100)
///////////////////////////////
// E-Sword Priate
///////////////////////////////
/mob/living/simple_mob/humanoid/pirate/las
name = "Pirate Duelist"
desc = "Does what he wants cause a pirate is free. This one has a energy sword."
tt_desc = "E Homo sapiens"
icon_state = "piratemelee-las"
icon_living = "piratemelee-las"
icon_dead = "piratemelee_dead"
melee_damage_lower = 30 //E-Sword Damage
melee_damage_upper = 30
attack_armor_pen = 50
attack_sound = 'sound/weapons/blade1.ogg'
loot_list = list(/obj/item/weapon/melee/energy/sword/pirate = 100)
//Armored Variant
/mob/living/simple_mob/humanoid/pirate/las/armored
name = "Armored Duelist"
desc = "Does what he wants cause a pirate is free. This one has an energy sword."
icon_state = "piratemelee-las-armor"
icon_living = "piratemelee-las-armor"
movement_cooldown = 4
armor = list(melee = 30, bullet = 20, laser = 20, energy = 5, bomb = 5, bio = 100, rad = 100)
loot_list = list(/obj/item/weapon/melee/energy/sword/pirate = 100, /obj/item/clothing/suit/armor/material/makeshift = 100)
///////////////////////////////
// Shield Pirate
///////////////////////////////
/mob/living/simple_mob/humanoid/pirate/shield
name = "Pirate Buckler"
desc = "Does what he wants cause a pirate is free. This one carries a shield for added protection."
icon_state = "piratemelee-shield"
icon_living = "piratemelee-shield"
//This Should Allow all childs of the shield priate to block
/mob/living/simple_mob/humanoid/pirate/shield/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(O.force)
if(prob(15))
visible_message("<span class='danger'>\The [src] blocks \the [O] with its shield!</span>")
if(user)
ai_holder.react_to_attack(user)
return
else
..()
else
to_chat(user, "<span class='warning'>This weapon is ineffective, it does no damage.</span>")
visible_message("<span class='warning'>\The [user] gently taps [src] with \the [O].</span>")
/mob/living/simple_mob/humanoid/merc/melee/sword/bullet_act(var/obj/item/projectile/Proj)
if(!Proj) return
if(prob(25))
visible_message("<font color='red'><B>[src] blocks [Proj] with its shield!</B></font>")
if(Proj.firer)
ai_holder.react_to_attack(Proj.firer)
return
else
..()
// Armored Variant
/mob/living/simple_mob/humanoid/pirate/shield/armored
name = "Armored Buckler"
desc = "Does what he wants cause a pirate is free. This carries a shield and wears crude armor."
icon_state = "piratemelee-shield-armor"
icon_living = "piratemelee-shield-armor"
movement_cooldown = 3
armor = list(melee = 30, bullet = 20, laser = 20, energy = 5, bomb = 5, bio = 100, rad = 100)
loot_list = list(/obj/item/weapon/material/knife/tacknife = 100, /obj/item/clothing/suit/armor/material/makeshift = 100)
///////////////////////////////
// Shield Machete Pirate
///////////////////////////////
/mob/living/simple_mob/humanoid/pirate/shield/machete
name = "Pirate Sword and Boarder"
desc = "Does what he wants cause a pirate is free. This one has got a machete and a shield."
icon_state = "piratemelee-shield-machete"
icon_living = "piratemelee-shield-machete"
icon_dead = "piratemelee_dead"
response_help = "pushes"
response_disarm = "shoves"
response_harm = "hits"
melee_damage_lower = 25 //Macehte damage
melee_damage_upper = 25
attacktext = list("slashed", "chopped", "gouged", "ripped", "cut")
attack_sound = 'sound/weapons/bladeslice.ogg'
loot_list = list(/obj/item/weapon/material/knife/machete = 100)
// Armored Variant
/mob/living/simple_mob/humanoid/pirate/shield/machete/armored
name = "Armored Sword and Boarder"
desc = "Does what he wants cause a pirate is free. This one is equipped old fashioned sword and shield along with crude armor."
icon_state = "piratemelee-shield-machete-armor"
icon_living = "piratemelee-shield-machete-armor"
movement_cooldown = 4
armor = list(melee = 30, bullet = 20, laser = 20, energy = 5, bomb = 5, bio = 100, rad = 100)
loot_list = list(/obj/item/weapon/material/knife/machete = 100, /obj/item/clothing/suit/armor/material/makeshift = 100)
///////////////////////////////
// Pirate Pistolier
///////////////////////////////
/mob/living/simple_mob/humanoid/pirate/ranged
name = "Pirate Pistolier"
desc = "Does what he wants since a pirate is free. This one is armed with a zip gun."
icon_state = "pirateranged"
icon_living = "pirateranged"
icon_dead = "piratemelee_dead"
reload_time = 4 SECONDS // ZipGuns are finicky an hard to load
needs_reload = TRUE
reload_max = 1
projectiletype = /obj/item/projectile/bullet/shotgun
projectilesound = 'sound/weapons/weaponsounds_shotgunshot.ogg'
loot_list = list(/obj/item/weapon/gun/projectile/pirate = 100, /obj/item/weapon/material/knife/tacknife = 100)
ai_holder_type = /datum/ai_holder/simple_mob/merc/ranged
//Armored Variant
/mob/living/simple_mob/humanoid/pirate/ranged/armored
name = "Armored Pistolier"
desc = "Does what he wants cause a pirate is free. This is armed with a zip gun and wears crude armor."
icon_state = "pirateranged-armor"
icon_living = "pirateranged-armor"
movement_cooldown = 4
armor = list(melee = 30, bullet = 20, laser = 20, energy = 5, bomb = 5, bio = 100, rad = 100)
loot_list = list(/obj/item/weapon/material/knife/tacknife = 100, /obj/item/weapon/gun/projectile/pirate = 100, /obj/item/clothing/suit/armor/material/makeshift = 100)
///////////////////////////////
// Pirate Blunderbuster
///////////////////////////////
/mob/living/simple_mob/humanoid/pirate/ranged/shotgun
name = "Pirate Blunderbuster"
desc = "Does what he wants since a pirate is free. This one has a sawn off shotgun."
icon_state = "pirateranged-blunder"
icon_living = "pirateranged-blunder"
icon_dead = "piratemelee_dead"
reload_time = 3 SECONDS // Shotgun Reload
needs_reload = TRUE
reload_max = 2
projectiletype = /obj/item/projectile/bullet/pellet/shotgun
projectilesound = 'sound/weapons/weaponsounds_shotgunshot.ogg'
loot_list = list(/obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn = 100, /obj/item/weapon/material/knife/tacknife = 100)
ai_holder_type = /datum/ai_holder/simple_mob/ranged/aggressive
//Armored Variant
/mob/living/simple_mob/humanoid/pirate/ranged/shotgun/armored
name = "Armored Blunderbuster"
desc = "Does what he wants cause a pirate is free. This is armed with a sawn off shotgun and wears crude armor."
icon_state = "pirateranged-blunder-armor"
icon_living = "pirateranged-blunder-armor"
movement_cooldown = 4
armor = list(melee = 30, bullet = 20, laser = 20, energy = 5, bomb = 5, bio = 100, rad = 100)
loot_list = list(/obj/item/weapon/material/knife/tacknife = 100, /obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn = 100, /obj/item/clothing/suit/armor/material/makeshift = 100)
///////////////////////////////
// Pirate Ziplas
///////////////////////////////
/mob/living/simple_mob/humanoid/pirate/ranged/handcannon
name = "Pirate Handcannon"
desc = "Does what he wants since a pirate is free. This one has an improvised laser pistol."
icon_state = "pirateranged-handcannon"
icon_living = "pirateranged-handcannon"
icon_dead = "piratemelee_dead"
reload_time = 6 SECONDS //Zip-Las takes a real long time to reload.
needs_reload = TRUE
reload_max = 1
projectiletype = /obj/item/projectile/beam/heavylaser
projectilesound = 'sound/weapons/weaponsounds_laserstrong.ogg'
loot_list = list(/obj/item/weapon/gun/energy/zip = 100, /obj/item/weapon/material/knife/tacknife = 100)
ai_holder_type = /datum/ai_holder/simple_mob/ranged/aggressive
//Armored Variant
/mob/living/simple_mob/humanoid/pirate/ranged/handcannon/armored
name = "Armored Handcannon"
desc = "Does what he wants cause a pirate is free. This one has a improvised laser pistol and crude armor."
icon_state = "pirateranged-handcannon-armor"
icon_living = "pirateranged-handcannon-armor"
movement_cooldown = 4
armor = list(melee = 30, bullet = 20, laser = 20, energy = 5, bomb = 5, bio = 100, rad = 100)
loot_list = list(/obj/item/weapon/material/knife/tacknife = 100, /obj/item/weapon/gun/energy/zip = 100, /obj/item/clothing/suit/armor/material/makeshift = 100)
///////////////////////////////
// First Mate
///////////////////////////////
/mob/living/simple_mob/humanoid/pirate/mate
name = "First Mate"
desc = "A leading figure amongst the pirate hoards. This one is armed with a laser cutlass"
tt_desc = "E Homo sapiens"
icon_state = "mate"
icon_living = "mate"
icon_dead = "piratemelee_dead"
melee_damage_lower = 30 //E-Sword Damage
melee_damage_upper = 30
attack_armor_pen = 50
attack_sound = 'sound/weapons/blade1.ogg'
armor = list(melee = 30, bullet = 20, laser = 20, energy = 5, bomb = 5, bio = 100, rad = 100)
loot_list = list(/obj/item/weapon/melee/energy/sword/pirate = 100, /obj/item/clothing/suit/pirate = 100)
///////////////////////////////
// Mate Pistolier
///////////////////////////////
/mob/living/simple_mob/humanoid/pirate/mate/ranged
name = "Mate Pistolier"
desc = "A leading figure amongst the pirate hoards. This one is armed with a obsolete laser pistol."
icon_state = "mate-pistoler"
icon_living = "mate-pistoler"
icon_dead = "piratemelee_dead"
reload_time = 2 SECONDS //Retro Energy Pistol is far easier to reload than Zip-Las
needs_reload = TRUE
reload_max = 5
harm_intent_damage = 5
melee_damage_lower = 15
melee_damage_upper = 15
projectiletype = /obj/item/projectile/beam/midlaser
projectilesound = 'sound/weapons/weaponsounds_lasermid.ogg'
attack_sound = 'sound/weapons/bladeslice.ogg'
base_attack_cooldown = 10
loot_list = list(/obj/item/weapon/gun/energy/retro = 100, /obj/item/clothing/suit/pirate = 100)
ai_holder_type = /datum/ai_holder/simple_mob/merc/ranged
/mob/living/simple_mob/humanoid/pirate/mate/ranged/bosun /// Special Mech Pilot Pirate
name = "Bosun"
desc = "An oily pirate mechanist. Thankfully he has but an old laser to defend himself with."
icon_state = "bosun"
icon_living = "bosun"
ai_holder_type = /datum/ai_holder/simple_mob/ranged/aggressive/blood_hunter // This is for use in the Pirate Ripley Mecha
loot_list = list(/obj/item/weapon/gun/energy/retro = 100, /obj/item/clothing/head/welding = 100, /obj/item/clothing/suit/pirate = 100)
///////////////////////////////
// Mate Sweeper
///////////////////////////////
/mob/living/simple_mob/humanoid/pirate/mate/ranged/shotgun
name = "Mate Blunderbuster"
desc = "A leading figure amongst the pirate hoards. This one is armed with a four barreled shotgun"
icon_state = "mate-shotgun"
icon_living = "mate-shotgun"
icon_dead = "piratemelee_dead"
reload_time = 4 SECONDS //Assume use of speedloaders
needs_reload = TRUE
reload_max = 4
harm_intent_damage = 5
melee_damage_lower = 15
melee_damage_upper = 15
attack_sound = 'sound/weapons/bladeslice.ogg'
projectiletype = /obj/item/projectile/bullet/pellet/shotgun
projectilesound = 'sound/weapons/weaponsounds_shotgunshot.ogg'
base_attack_cooldown = 5
loot_list = list(/obj/item/weapon/gun/projectile/shotgun/doublebarrel/quad = 100, /obj/item/clothing/suit/pirate = 100)
///////////////////////////////
// Mate Marksman
///////////////////////////////
/mob/living/simple_mob/humanoid/pirate/mate/ranged/rifle
name = "Mate Marksman"
desc = "A leading figure amongst the pirate hoards. This one is armed with a rifle."
icon_state = "mate-rifle"
icon_living = "mate-rifle"
icon_dead = "piratemelee_dead"
reload_time = 1.5 SECONDS //Assume use of speedloaders
needs_reload = TRUE
reload_max = 5
harm_intent_damage = 5
melee_damage_lower = 15
melee_damage_upper = 15
attack_sound = 'sound/weapons/bladeslice.ogg'
projectiletype = /obj/item/projectile/bullet/rifle/a762
projectilesound = 'sound/weapons/weaponsounds_heavyrifleshot.ogg'
base_attack_cooldown = 10
loot_list = list(/obj/item/weapon/gun/projectile/shotgun/pump/rifle = 100, /obj/item/clothing/suit/pirate = 100)
///////////////////////////////
// Pirate Captain
///////////////////////////////
/mob/living/simple_mob/humanoid/pirate/captain
name = "Pirate Captain"
desc = "Leader of a Pirate Vessel armed with an entire belt of improvised laser pistols. A true villian indeed."
icon_state = "captain"
icon_living = "captain"
icon_dead = "pirateranged_dead"
reload_time = 10 SECONDS // I mean its a belt of pistols not exactly easy to reload. Especially with how much damage the barage does.
needs_reload = TRUE
reload_max = 4 // More than capable to shredding explo's shield especially when backed up by a few mates.
projectiletype = /obj/item/projectile/beam/heavylaser
projectilesound = 'sound/weapons/weaponsounds_laserstrong.ogg'
base_attack_cooldown = 5
corpse = /obj/effect/landmark/mobcorpse/pirate/ranged
loot_list = list(/obj/item/weapon/gun/energy/zip = 100, /obj/item/weapon/gun/energy/zip = 100, /obj/item/weapon/gun/energy/zip = 100, /obj/item/weapon/gun/energy/zip = 100) //Belt of pistols
var/obj/item/shield_projector/shields = null
/mob/living/simple_mob/humanoid/pirate/captain/Initialize(mapload)
shields = new /obj/item/shield_projector/rectangle/automatic/drone(src)
return ..()
/mob/living/simple_mob/humanoid/pirate/captain/Process_Spacemove(var/check_drift = 0)
return TRUE
/obj/item/shield_projector/rectangle/automatic/drone
shield_health = 150
max_shield_health = 150
shield_regen_delay = 10 SECONDS
shield_regen_amount = 10
size_x = 1
size_y = 1

View File

@@ -0,0 +1,350 @@
//Fodder
/mob/living/simple_mob/mechanical/cyber_horror
name = "Cyber horror"
desc = "What was once a man, twisted and warped by machine."
icon = 'icons/mob/animal_ch.dmi'
icon_state = "cyber_horror"
icon_dead = "cyber_horror_dead"
icon_gib = "cyber_horror_dead"
faction = "synthtide"
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
maxHealth = 175
health = 175
melee_damage_lower = 5
melee_damage_upper = 10
movement_cooldown = 3
movement_sound = 'sound/effects/houndstep.ogg'
// To promote a more diverse weapon selection.
armor = list(melee = 25, bullet = 25, laser = -20, bio = 100, rad = 100)
hovering = FALSE
say_list_type = /datum/say_list/cyber_horror
response_help = "pokes"
response_disarm = "gently pushes aside"
response_harm = "hits"
attacktext = list ("wildly strikes", "swings", "batters")
attack_sound = 'sound/weapons/punch3.ogg'
var/emp_damage = 0
var/nanobot_chance = 40
/datum/say_list/cyber_horror
speak = list("H@!#$$P M@!$#",
"GHAA!@@#",
"KR@!!N",
"K!@@##L!@@ %!@#E",
"G@#!$ H@!#%",
"H!@%%@ @!E")
emote_hear = list("sparks!", "groans.", "wails.", "sobs.")
emote_see = list ("stares unblinkingly.", "jitters and twitches.", "emits a synthetic scream.", "rapidly twitches.", "convulses.", "twitches uncontrollably.", "goes stock still.")
say_threaten = list ("FR@#DOM","EN@ T#I$-$","N0$ M^> B@!#")
say_got_target = list("I *#@ Y@%","!E@#$P","F#RR @I","D0@#$ ##OK %","IT $##TS")
// Fragile but dangerous
/mob/living/simple_mob/mechanical/cyber_horror/plasma_cyber_horror
name = "Nanite husk"
desc = "What was once a phoronoid, now a empty shell of malfunctioning nanites."
icon_state = "plasma_cyber_horror"
icon_dead = "plasma_cyber_horror_dead"
armor = list(melee = 40, bullet = -10, laser = 40, bio = 100, rad = 100)
maxHealth = 75
health = 75
melee_damage_lower = 5
melee_damage_upper = 10
attacktext = "splatters on"
attack_sound = 'sound/effects/slime_squish.ogg'
// Do y'like brain damage?
var/poison_chance = 100
var/poison_per_bite = 3
var/poison_type = "neurophage_nanites"
/mob/living/simple_mob/mechanical/cyber_horror/plasma_cyber_horror/apply_melee_effects(var/atom/A)
if(isliving(A))
var/mob/living/L = A
if(L.reagents)
var/target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD)
if(L.can_inject(src, null, target_zone))
inject_poison(L, target_zone)
// Does actual poison injection, after all checks passed.
/mob/living/simple_mob/mechanical/cyber_horror/plasma_cyber_horror/proc/inject_poison(mob/living/L, target_zone)
if(prob(poison_chance))
to_chat(L, "<span class='warning'>You feel nanites digging into your skin!</span>")
L.reagents.add_reagent(poison_type, poison_per_bite)
// Mech Shredder
/mob/living/simple_mob/mechanical/cyber_horror/ling_cyber_horror
name = "Nanite abomination"
desc = "What was once something, now an exposed shell with lashing cables."
icon_state = "ling_cyber_horror"
icon_dead = "ling_cyber_horror_dead"
maxHealth = 250
health = 250
// Four attacks per second.
melee_damage_lower = 10
melee_damage_upper = 20
attack_armor_pen = 50
base_attack_cooldown = 2.5
attack_sharp = 1
attack_edge = 1
attack_sound = 'sound/weapons/bladeslice.ogg'
attacktext = list ("sliced", "diced", "lashed", "shredded")
// Slow as all sin
movement_cooldown = 9
movement_sound = 'sound/effects/houndstep.ogg'
ai_holder_type = /datum/ai_holder/simple_mob/melee
// You do NOT Want to get in touchy range of this thing.
armor = list(melee = 75, bullet = -10, laser = -25, bio = 100, rad = 100)
hovering = FALSE
// Leaping is a special attack, so these values determine when leap can happen.
// Leaping won't occur if its on cooldown, set to a minute due to it purely break formations.
special_attack_min_range = 2
special_attack_max_range = 7
special_attack_cooldown = 60 SECONDS
// How long the leap telegraphing is.
var/leap_warmup = 2 SECOND
var/leap_sound = 'sound/weapons/spiderlunge.ogg'
// Multiplies damage if the victim is stunned in some form, including a successful leap.
/mob/living/simple_mob/mechanical/cyber_horror/ling_cyber_horror/apply_bonus_melee_damage(atom/A, damage_amount)
if(isliving(A))
var/mob/living/L = A
if(L.incapacitated(INCAPACITATION_DISABLED))
return damage_amount * 2.5
return ..()
// The actual leaping attack.
/mob/living/simple_mob/mechanical/cyber_horror/ling_cyber_horror/do_special_attack(atom/A)
set waitfor = FALSE
set_AI_busy(TRUE)
// Telegraph, since getting stunned suddenly feels bad.
do_windup_animation(A, leap_warmup)
// For the telegraphing.
sleep(leap_warmup)
// Do the actual leap.
// Lets us pass over everything.
status_flags |= LEAPING
visible_message(span("danger","\The [src] leaps at \the [A]!"))
throw_at(get_step(get_turf(A), get_turf(src)), special_attack_max_range+1, 1, src)
playsound(src, leap_sound, 75, 1)
// For the throw to complete. It won't hold up the AI SSticker due to waitfor being false.
sleep(5)
// Revert special passage ability.
if(status_flags & LEAPING)
status_flags &= ~LEAPING
// Where we landed. This might be different than A's turf.
var/turf/T = get_turf(src)
. = FALSE
// Now for the stun.
var/mob/living/victim = null
// So player-controlled cyber horrors only need to click the tile to stun them.
for(var/mob/living/L in T)
if(L == src)
continue
if(ishuman(L))
var/mob/living/carbon/human/H = L
if(H.check_shields(damage = 0, damage_source = src, attacker = src, def_zone = null, attack_text = "the leap"))
// We were blocked.
continue
victim = L
break
if(victim)
victim.Weaken(2)
victim.visible_message(span("danger","\The [src] knocks down \the [victim]!"))
to_chat(victim, span("critical", "\The [src] jumps on you!"))
. = TRUE
set_AI_busy(FALSE)
//Slightly more durable fodder
/mob/living/simple_mob/mechanical/cyber_horror/vox
name = "Vox shambles"
desc = "Once a Vox now torn and changed, peices of a Durand has been grafted onto it."
icon_state = "vox_cyber_horror"
icon_dead = "vox_cyber_horror_dead"
armor = list(melee = 40, bullet = 30, laser = 30, bio = 100, rad = 100)
ai_holder_type = /datum/ai_holder/simple_mob/melee
// Hit and run mob
/mob/living/simple_mob/mechanical/cyber_horror/tajaran
name = "Tajaran cyber stalker"
desc = "A mangled mess of machine and fur, light seems to bounce off it."
icon_state = "tajaran_cyber_horror"
icon_dead = "tajaran_cyber_horror_dead"
ai_holder_type = /datum/ai_holder/simple_mob/melee/hit_and_run
// Lower = Harder to see.
var/cloaked_alpha = 30
// This is added on top of the normal melee damage.
var/cloaked_bonus_damage = 30
// How long to stun for.
var/cloaked_weaken_amount = 3
// Amount of time needed to re-cloak after losing it.
var/cloak_cooldown = 10 SECONDS
// world.time
var/last_uncloak = 0
// Check if cloaking if possible.
/mob/living/simple_mob/mechanical/cyber_horror/tajaran/proc/can_cloak()
if(stat)
return FALSE
if(last_uncloak + cloak_cooldown > world.time)
return FALSE
return TRUE
// Called by things that break cloaks, like Technomancer wards.
/mob/living/simple_mob/mechanical/cyber_horror/tajaran/break_cloak()
uncloak()
/mob/living/simple_mob/mechanical/cyber_horror/tajaran/is_cloaked()
return cloaked
// Cloaks the tajaran automatically, if possible.
/mob/living/simple_mob/mechanical/cyber_horror/tajaran/handle_special()
if(!cloaked && can_cloak())
cloak()
// Applies bonus base damage if cloaked.
/mob/living/simple_mob/mechanical/cyber_horror/tajaran/apply_bonus_melee_damage(atom/A, damage_amount)
if(cloaked)
return damage_amount + cloaked_bonus_damage
return ..()
// Applies stun, then uncloaks.
/mob/living/simple_mob/mechanical/cyber_horror/tajaran/apply_melee_effects(atom/A)
if(cloaked)
if(isliving(A))
var/mob/living/L = A
L.Weaken(cloaked_weaken_amount)
to_chat(L, span("danger", "\The [src] tears into you!"))
playsound(L, 'sound/weapons/spiderlunge.ogg', 75, 1)
uncloak()
..() // For the poison.
// Force uncloaking if attacked.
/mob/living/simple_mob/mechanical/cyber_horror/tajaran/bullet_act(obj/item/projectile/P)
. = ..()
break_cloak()
/mob/living/simple_mob/mechanical/cyber_horror/tajaran/hit_with_weapon(obj/item/O, mob/living/user, effective_force, hit_zone)
. = ..()
break_cloak()
//Arcing Ranged Mob
/mob/living/simple_mob/mechanical/cyber_horror/grey
name = "Twisted cyber horror"
desc = "A mess of machine and organic, it's hard to even know what it was before."
icon_state = "grey_cyber_horror"
icon_dead = "grey_cyber_horror_dead"
maxHealth = 100
health = 100
projectiletype = /obj/item/projectile/arc/blue_energy
projectilesound = 'sound/weapons/Laser.ogg'
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting
armor = list(melee = -30, bullet = 10, laser = 10, bio = 100, rad = 100)
/obj/item/projectile/arc/blue_energy
name = "energy missle"
icon_state = "force_missile"
damage = 12
damage_type = BURN
//Direct Ranged Mob
/mob/living/simple_mob/mechanical/cyber_horror/corgi
name = "Malformed Corgi"
desc = "Pieces of metal and technology is embedded in this Ian."
icon_state = "corgi_cyber_horror"
icon_dead = "corgi_cyber_horror_dead"
maxHealth = 50
health = 50
base_attack_cooldown = 4
projectiletype = /obj/item/projectile/beam/drone
projectilesound = 'sound/weapons/laser3.ogg'
movement_sound = 'sound/effects/servostep.ogg'
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening
//Cats and mayhem
/mob/living/simple_mob/mechanical/cyber_horror/cat_cyber_horror
name = "Twisted cat"
desc = "While most things are acceptable, putting cat legs on this - only made it worse."
icon_state = "cat_cyber_horror"
icon_dead = "cat_cyber_horror_dead"
maxHealth = 40
health = 40
movement_cooldown = 0
movement_sound = 'sound/effects/servostep.ogg'
pass_flags = PASSTABLE
mob_swap_flags = 0
mob_push_flags = 0
melee_damage_lower = 2
melee_damage_upper = 2
// Four attacks per second.
base_attack_cooldown = 2.5
attack_sharp = 1
attack_edge = 1
attacktext = list("jabbed", "injected")
// Do y'like drugs?
var/poison_chance = 75
var/poison_per_bite = 3
var/poison_type = "mindbreaker"
/mob/living/simple_mob/mechanical/cyber_horror/cat_cyber_horror/apply_melee_effects(var/atom/A)
if(isliving(A))
var/mob/living/L = A
if(L.reagents)
var/target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD)
if(L.can_inject(src, null, target_zone))
inject_poison(L, target_zone)
// Does actual poison injection, after all checks passed.
/mob/living/simple_mob/mechanical/cyber_horror/cat_cyber_horror/proc/inject_poison(mob/living/L, target_zone)
if(prob(poison_chance))
to_chat(L, "<span class='warning'>You feel an uncomfortable prick!</span>")
L.reagents.add_reagent(poison_type, poison_per_bite)
//These are the projectiles mobs use
/obj/item/projectile/beam/drone
damage = 3
/obj/item/projectile/arc/blue_energy
name = "energy missle"
icon_state = "force_missile"
damage = 12
damage_type = BURN

View File

@@ -0,0 +1,209 @@
////////////////////////////
// Construct AI
////////////////////////////
/mob/living/simple_mob/construct
icon = 'icons/mob/animal_ch.dmi'
ai_holder_type = /datum/ai_holder/simple_mob/melee
/mob/living/simple_mob/construct/artificer
ai_holder_type = /datum/ai_holder/mimic
/mob/living/simple_mob/construct/harvester
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
attack_edge = 1
/mob/living/simple_mob/construct/juggernaut
ai_holder_type = /datum/ai_holder/simple_mob/destructive
////////////////////////////
// Wraith special attack stuff
////////////////////////////
/mob/living/simple_mob/construct/wraith
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
var/jaunt_warning = 0.5 SECONDS // How long the jaunt telegraphing is.
var/jaunt_tile_speed = 20 // How long to wait between each tile. Higher numbers result in an easier to dodge tunnel attack.
special_attack_min_range = 2
special_attack_max_range = 6
special_attack_cooldown = 10 SECONDS
/mob/living/simple_mob/construct/wraith/jaunt_spam
special_attack_cooldown = 5 SECONDS
/mob/living/simple_mob/construct/wraith/fast_jaunt //Teleports behind you
jaunt_tile_speed = 2
/mob/living/simple_mob/construct/wraith/do_special_attack(atom/A)
set waitfor = FALSE
set_AI_busy(TRUE)
// Save where we're gonna go soon.
var/turf/destination = get_turf(A)
var/turf/starting_turf = get_turf(src)
// Telegraph to give a small window to dodge if really close.
flick("phase_shift",A)
icon_state = "phase_shift"
sleep(jaunt_warning) // For the telegraphing.
// Do the dig!
visible_message(span("danger","\The [src] vanishes into thin air \the [A]!"))
flick("phase_shift",A)
icon_state = "phase_shift"
if(handle_jaunt(destination) == FALSE)
set_AI_busy(FALSE)
flick("phase_shift2",A)
icon_state = "phase_shift2"
return FALSE
// Did we make it?
if(!(src in destination))
set_AI_busy(FALSE)
icon_state = "phase_shift2"
flick("phase_shift2",A)
return FALSE
var/overshoot = TRUE
// Test if something is at destination.
for(var/mob/living/L in destination)
if(L == src)
continue
visible_message(span("danger","\The [src] appears in a flurry of slashes \the [L]!"))
playsound(L, 'sound/weapons/heavysmash.ogg', 75, 1)
L.Weaken(3)
overshoot = FALSE
if(!overshoot) // We hit the target, or something, at destination, so we're done.
set_AI_busy(FALSE)
icon_state = "phase_shift2"
flick("phase_shift2",A)
return TRUE
// Otherwise we need to keep going.
to_chat(src, span("warning", "You overshoot your target!"))
playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1)
var/dir_to_go = get_dir(starting_turf, destination)
for(var/i = 1 to rand(2, 4))
destination = get_step(destination, dir_to_go)
if(handle_jaunt(destination) == FALSE)
set_AI_busy(FALSE)
icon_state = "phase_shift2"
flick("phase_shift2",A)
return FALSE
set_AI_busy(FALSE)
icon_state = "phase_shift2"
flick("phase_shift2",A)
return FALSE
// Does the jaunt movement
/mob/living/simple_mob/construct/wraith/proc/handle_jaunt(turf/destination)
var/turf/T = get_turf(src) // Hold our current tile.
// Regular tunnel loop.
for(var/i = 1 to get_dist(src, destination))
if(stat)
return FALSE // We died or got knocked out on the way.
if(loc == destination)
break // We somehow got there early.
// Update T.
T = get_step(src, get_dir(src, destination))
if(T.check_density(ignore_mobs = TRUE))
to_chat(src, span("critical", "You hit something really solid!"))
playsound(src, "punch", 75, 1)
Weaken(5)
add_modifier(/datum/modifier/tunneler_vulnerable, 10 SECONDS)
return FALSE // Hit a wall.
// Get into the tile.
forceMove(T)
/mob/living/simple_mob/construct/wraith/should_special_attack(atom/A)
// Make sure its possible for the wraith to reach the target so it doesn't try to go through a window.
var/turf/destination = get_turf(A)
var/turf/starting_turf = get_turf(src)
var/turf/T = starting_turf
for(var/i = 1 to get_dist(starting_turf, destination))
if(T == destination)
break
T = get_step(T, get_dir(T, destination))
if(T.check_density(ignore_mobs = TRUE))
return FALSE
return T == destination
////////////////////////////
// Ranged Artificer
////////////////////////////
/mob/living/simple_mob/construct/artificer/caster
name = "Artificer"
real_name = "Artificer"
construct_type = "artificer"
desc = "A bulbous construct dedicated to building and maintaining temples to their otherworldly lords. Its central eye glows with unknowable power."
icon_state = "caster_artificer"
icon_living = "caster_artificer"
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting
projectiletype = /obj/item/projectile/beam/inversion
projectilesound = 'sound/weapons/spiderlunge.ogg'
////////////////////////////
// Greater Harvester
////////////////////////////
/mob/living/simple_mob/construct/harvester/greater
name = "Greater Harvester"
real_name = "Chosen"
construct_type = "Chosen"
desc = "A infanthomable mass of tentacles and claws ripping and tearing through all that oppose it."
icon_state = "chosen"
icon_living = "chosen"
maxHealth = 100
health = 100
melee_damage_lower = 40 //Glass Cannon Mini-Boss/Semi-Boss large. Few hits is enough to end you.
melee_damage_upper = 50
attack_armor_pen = 60 //No Armor Shall Save you
attack_sharp = 1
attack_edge = 1
attacktext = list("violently stabbed")
friendly = list("caresses")
movement_cooldown = 0
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
// environment_smash = 1 // Whatever this gets renamed to, Harvesters need to break things
attack_sound = 'sound/weapons/pierce.ogg'
////////////////////////////
// Artificer
////////////////////////////
/mob/living/simple_mob/construct/proteon //Weak Swarm Attacker can be safely dumped on players in large numbers without too many injuries
name = "Proteon"
real_name = "proton"
construct_type = "artificer"
desc = "A weak but speedy construction designed to assist other constructs rather than fight. Still seems bloodthirtsy though."
icon_state = "proteon"
icon_living = "proteon"
maxHealth = 50
health = 50
response_harm = "viciously beaten"
harm_intent_damage = 5
melee_damage_lower = 8 //It's not the strongest of the bunch, but that doesn't mean it can't hurt you.
melee_damage_upper = 10
attack_armor_pen = 50 // Does so little damage already, that this can be justified.
attacktext = list("rammed")
attack_sound = 'sound/weapons/rapidslice.ogg'
movement_cooldown = 0
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive

View File

@@ -10,8 +10,8 @@
icon = 'icons/mob/mob.dmi'
icon_state = "artificer"
icon_living = "artificer"
maxHealth = 150
health = 150
maxHealth = 100 //CHOMPEdit - Adjusting values since they have AI now
health = 100 //CHOMPEdit
response_harm = "viciously beaten"
harm_intent_damage = 5
melee_damage_lower = 15 //It's not the strongest of the bunch, but that doesn't mean it can't hurt you.

View File

@@ -10,8 +10,8 @@
icon = 'icons/mob/mob.dmi'
icon_state = "harvester"
icon_living = "harvester"
maxHealth = 150
health = 150
maxHealth = 100 //CHOMPEdit
health = 100 //CHOMPEdit
melee_damage_lower = 20
melee_damage_upper = 25
attack_sharp = TRUE

View File

@@ -10,8 +10,8 @@
icon = 'icons/mob/mob.dmi'
icon_state = "behemoth"
icon_living = "behemoth"
maxHealth = 300
health = 300
maxHealth = 200 //CHOMPEdit
health = 200 //CHOMPEdit
response_harm = "harmlessly punches"
harm_intent_damage = 0
melee_damage_lower = 30
@@ -98,8 +98,8 @@
name = "Behemoth"
real_name = "Behemoth"
desc = "The pinnacle of occult technology, Behemoths are nothing shy of both an Immovable Object, and Unstoppable Force."
maxHealth = 750
health = 750
maxHealth = 600 //CHOMPEdit
health = 600 //CHOMPEdit
speak_emote = list("rumbles")
melee_damage_lower = 50
melee_damage_upper = 50

View File

@@ -6,7 +6,7 @@
name = "Shade"
real_name = "Shade"
desc = "A bound spirit"
icon = 'icons/mob/mob.dmi'
//icon = 'icons/mob/mob.dmi' CHOMPRemove
icon_state = "shade"
icon_living = "shade"
icon_dead = "shade_dead"

View File

@@ -7,7 +7,7 @@
real_name = "Wraith"
construct_type = "wraith"
desc = "A wicked bladed shell contraption piloted by a bound spirit."
icon = 'icons/mob/mob.dmi'
//icon = 'icons/mob/mob.dmi' //CHOMPRemove
icon_state = "floating"
icon_living = "floating"
maxHealth = 200

View File

@@ -0,0 +1,7 @@
/obj/item/ammo_casing/a12g/silver
name = " Silver shotgun shell"
desc = "A 12 gauge slug. Bless and Sancitfied to banish otherworlds entities."
icon_state = "agshell"
caliber = "12g"
projectile_type = /obj/item/projectile/bullet/pellet/shotgun/silver
matter = list(DEFAULT_WALL_MATERIAL = 360, "silver" = 240)

View File

@@ -0,0 +1,31 @@
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/quad
name = "quad-barreled shotgun"
desc = "A shotgun pattern designed to make the most out of the limited machining capability of the frontier. 4 Whole barrels of death, loads using 12 gauge rounds."
icon_state = "shotgun_q"
item_state = "qshotgun"
recoil = 2
load_method = SINGLE_CASING|SPEEDLOADER
handle_casings = CYCLE_CASINGS
max_shells = 4
w_class = ITEMSIZE_LARGE
force = 5
accuracy = 40
slot_flags = SLOT_BACK
ammo_type = /obj/item/ammo_casing/a12g/pellet
caliber = "12g"
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 1)
ammo_type = /obj/item/ammo_casing/a12g/pellet
burst_delay = 0
firemodes = list(
list(mode_name="fire one barrel at a time", burst=1),
)
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn/alt
icon_state = "shotpistol"
accuracy = 40
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn/alt/holy // A Special Skin for the sawn off,makes it look like the sawn off from Blood.
ammo_type = /obj/item/ammo_casing/a12g/silver
holy = 1

View File

@@ -1,3 +1,15 @@
/obj/item/projectile
/// If this projectile is holy. Silver bullets, etc. Currently no effects.
var/holy = 0
/obj/item/projectile/bullet/pellet/shotgun/silver
name = "shrapnel"
fire_sound = 'sound/weapons/weaponsounds_shotgunshot.ogg'
damage = 10
SA_bonus_damage = 16 // Potential 156 Damage against demons at point blank.
SA_vulnerability = MOB_CLASS_DEMONIC | MOB_CLASS_ABERRATION
embed_chance = -1
pellets = 6
range_step = 1
spread_step = 20
holy = 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 918 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 925 B

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1555,6 +1555,7 @@
#include "code\game\objects\structures\ledges.dm"
#include "code\game\objects\structures\lightpost.dm"
#include "code\game\objects\structures\loot_piles.dm"
#include "code\game\objects\structures\loot_piles_ch.dm"
#include "code\game\objects\structures\low_wall.dm"
#include "code\game\objects\structures\map_blocker_vr.dm"
#include "code\game\objects\structures\medical_stand_vr.dm"
@@ -2065,6 +2066,7 @@
#include "code\modules\clothing\head\flowercrowns.dm"
#include "code\modules\clothing\head\hardhat.dm"
#include "code\modules\clothing\head\helmet.dm"
#include "code\modules\clothing\head\helmet_ch.dm"
#include "code\modules\clothing\head\helmet_vr.dm"
#include "code\modules\clothing\head\hood.dm"
#include "code\modules\clothing\head\hood_vr.dm"
@@ -2820,6 +2822,7 @@
#include "code\modules\mob\_modifiers\traits_phobias.dm"
#include "code\modules\mob\_modifiers\unholy.dm"
#include "code\modules\mob\dead\corpse.dm"
#include "code\modules\mob\dead\corpse_ch.dm"
#include "code\modules\mob\dead\corpse_vr.dm"
#include "code\modules\mob\dead\death.dm"
#include "code\modules\mob\dead\observer\free_vr.dm"
@@ -3202,6 +3205,7 @@
#include "code\modules\mob\living\simple_mob\subtypes\animal\space\goose.dm"
#include "code\modules\mob\living\simple_mob\subtypes\animal\space\goose_ch.dm"
#include "code\modules\mob\living\simple_mob\subtypes\animal\space\goose_vr.dm"
#include "code\modules\mob\living\simple_mob\subtypes\animal\space\mouse_army_ch.dm"
#include "code\modules\mob\living\simple_mob\subtypes\animal\space\snake_vr.dm"
#include "code\modules\mob\living\simple_mob\subtypes\animal\space\space.dm"
#include "code\modules\mob\living\simple_mob\subtypes\animal\space\space_vr.dm"
@@ -3220,15 +3224,18 @@
#include "code\modules\mob\living\simple_mob\subtypes\horror\timling.dm"
#include "code\modules\mob\living\simple_mob\subtypes\horror\Willy.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\clown.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\cultist_ch.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\humanoid.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\humanoid_vr.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\pirates.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\pirates_ch.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\russian.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\mercs\mercs.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\mercs\mercs_ch.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\mercs\mercs_vr.dm"
#include "code\modules\mob\living\simple_mob\subtypes\illusion\illusion.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\corrupt_maint_drone_vr.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\cyber_horror_ch.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\disbot_vr.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\golem.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\golem_vr.dm"
@@ -3267,6 +3274,7 @@
#include "code\modules\mob\living\simple_mob\subtypes\occult\creature.dm"
#include "code\modules\mob\living\simple_mob\subtypes\occult\faithless.dm"
#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\_construct.dm"
#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\_construct_ch.dm"
#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\artificer.dm"
#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\harvester.dm"
#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\juggernaut.dm"
@@ -3730,6 +3738,7 @@
#include "code\modules\projectiles\ammunition\magazines_yw.dm"
#include "code\modules\projectiles\ammunition\magnetic.dm"
#include "code\modules\projectiles\ammunition\rounds.dm"
#include "code\modules\projectiles\ammunition\rounds_ch.dm"
#include "code\modules\projectiles\ammunition\rounds_yw.dm"
#include "code\modules\projectiles\ammunition\smartmag.dm"
#include "code\modules\projectiles\ammunition\zz_autolathe_ch.dm"
@@ -3812,6 +3821,7 @@
#include "code\modules\projectiles\guns\projectile\revolver_yw.dm"
#include "code\modules\projectiles\guns\projectile\semiauto.dm"
#include "code\modules\projectiles\guns\projectile\shotgun.dm"
#include "code\modules\projectiles\guns\projectile\shotgun_ch.dm"
#include "code\modules\projectiles\guns\projectile\shotgun_vr.dm"
#include "code\modules\projectiles\guns\projectile\shotgun_yw.dm"
#include "code\modules\projectiles\guns\projectile\smartgun.dm"