Merge pull request #3203 from BlackMajor/cit-mobs
Porting a hefty chunk of Citadel mobs.
@@ -15,3 +15,19 @@
|
||||
suit = /obj/item/clothing/suit/pirate
|
||||
back = /obj/item/weapon/tank/jetpack/oxygen
|
||||
flags = OUTFIT_HAS_JETPACK
|
||||
|
||||
//CHOMPAdd
|
||||
/decl/hierarchy/outfit/pirate/vox
|
||||
name = "Vox Raider"
|
||||
uniform = /obj/item/clothing/under/color/black
|
||||
suit = /obj/item/clothing/suit/armor/vox_scrap
|
||||
shoes = /obj/item/clothing/shoes/magboots/vox
|
||||
gloves = /obj/item/clothing/gloves/light_brown
|
||||
mask = /obj/item/clothing/mask/breath
|
||||
back = /obj/item/weapon/tank/vox
|
||||
l_hand = /obj/item/weapon/melee/energy/sword/pirate
|
||||
r_hand = /obj/item/weapon/gun/projectile/shotgun/pump/rifle/vox_hunting
|
||||
l_pocket = /obj/item/ammo_magazine/clip/c762
|
||||
r_pocket = /obj/item/ammo_magazine/clip/c762
|
||||
|
||||
var/faction = "voxpirate"
|
||||
@@ -1,3 +1,39 @@
|
||||
//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_ch.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)
|
||||
w_class = ITEMSIZE_HUGE
|
||||
can_cleave = 1
|
||||
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)
|
||||
..()
|
||||
108
code/game/objects/structures/loot_piles_ch.dm
Normal file
@@ -0,0 +1,108 @@
|
||||
//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/mob/animal_ch.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_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_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"
|
||||
116
code/modules/ai/say_list_ch.dm
Normal file
@@ -0,0 +1,116 @@
|
||||
//Vox Pirate Saylist
|
||||
/datum/say_list/merc/voxpirate
|
||||
speak = list("Lookings for scrap, yaya.",
|
||||
"Tank is lookings low.",
|
||||
"Knowings should haves stayed on the Ark.",
|
||||
"Quills itchings...",
|
||||
"Cravings Teshari on stick.",
|
||||
"Plates locking up. Not good.")
|
||||
emote_see = list("sniffs", "coughs", "taps his foot", "looks around", "checks his equipment")
|
||||
|
||||
say_understood = list("Yayaya!")
|
||||
say_cannot = list("Skreking negatives!", "Can't do that.")
|
||||
say_maybe_target = list("Who's theres?", "Is hearing things?")
|
||||
say_got_target = list("Dust!", "Easy loot!")
|
||||
say_threaten = list("Gets out of heres!")
|
||||
say_stand_down = list("Yaya, runs!", "Kikikiki!")
|
||||
say_escalate = list("Skrek!", "Bringings it!", "Takings shot", "Lock claws!")
|
||||
|
||||
|
||||
//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")
|
||||
|
||||
//Roach Saylists Woo Hoo
|
||||
/datum/say_list/roach
|
||||
speak = list("Chitter!","Chk chk!","Tchk?")
|
||||
emote_hear = list("chitters","chirps","shuffles")
|
||||
emote_see = list("rubs its antennae", "skitters", "clacks across the floor")
|
||||
|
||||
/datum/say_list/possessed
|
||||
speak = list("Where am I?",
|
||||
"Why am I here?",
|
||||
"Where did everyone go?")
|
||||
|
||||
emote_hear = list("lets out a mournful cry.", "can be heard sobbing.", "groans out in pain.")
|
||||
emote_see = list("kneels down for a moment, picking something up before casting it away.","stands as still as a statue.", "looks to be doing some kind of work.")
|
||||
|
||||
say_maybe_target = list("Is there someone there?", "Who's there?")
|
||||
say_got_target = list("You! You help people!", "Can you help me?", "I'm lost!")
|
||||
say_threaten = list("Help me!", "Please help!", "Hey, who turned out the lights?", "Allonsy!", "Geronimo!")
|
||||
say_stand_down = list("Please. Anyone. Help!", "Where is everyone?", "Where am I?")
|
||||
say_escalate = list("Help!", "I'm sorry!", "I can't stop!", "I don't want to do this!", "I don't want to go!")
|
||||
|
||||
/datum/say_list/merc/elite // colder. also, actually just assholes.
|
||||
speak = list("I got better pay on my last job.",
|
||||
"So, y'think we'll get to shoot anyone today?",
|
||||
"Fuck, I hate those guys.",
|
||||
"Would be nice for something to happen, for once.",
|
||||
"Think those NT shits'll rear their heads?",
|
||||
"Any of you see anything recently?")
|
||||
emote_see = list("taps his foot", "looks around coldly", "checks his equipment", "rummages in his webbing")
|
||||
say_understood = list("Aff.", "Affirmative.", "Copy.", "Understood.")
|
||||
say_cannot = list("Neg.", "Negative.")
|
||||
say_maybe_target = list("I heard something.")
|
||||
say_got_target = list("Oh, good, I needed more range fodder.", "I'm going to enjoy this.", "I see you.", "Not quiet enough.")
|
||||
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.")
|
||||
|
||||
|
||||
/datum/say_list/possessed
|
||||
speak = list("Where am I?",
|
||||
"Why am I here?",
|
||||
"Where did everyone go?")
|
||||
|
||||
emote_hear = list("lets out a mournful cry.", "can be heard sobbing.", "groans out in pain.")
|
||||
emote_see = list("kneels down for a moment, picking something up before casting it away.","stands as still as a statue.", "looks to be doing some kind of work.")
|
||||
|
||||
say_maybe_target = list("Is there someone there?", "Who's there?")
|
||||
say_got_target = list("You! You help people!", "Can you help me?", "I'm lost!")
|
||||
say_threaten = list("Help me!", "Please help!", "Hey, who turned out the lights?", "Allonsy!", "Geronimo!")
|
||||
say_stand_down = list("Please. Anyone. Help!", "Where is everyone?", "Where am I?")
|
||||
say_escalate = list("Help!", "I'm sorry!", "I can't stop!", "I don't want to do this!", "I don't want to go!")
|
||||
9
code/modules/clothing/head/helmet_ch.dm
Normal 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
|
||||
117
code/modules/mob/dead/corpse_ch.dm
Normal 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
|
||||
@@ -0,0 +1,462 @@
|
||||
/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_ch.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 = 0
|
||||
|
||||
/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(!ruptured)
|
||||
visible_message("<span class='critical'>\The [src]'s tank ruptures!</span>")
|
||||
ruptured = 1
|
||||
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(explosion_delay_lower, explosion_delay_upper)
|
||||
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, explosion_dev_range, explosion_heavy_range, explosion_light_range, explosion_flash_range)
|
||||
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
|
||||
var/cloaked_bonus_damage = 20
|
||||
var/cloaked_weaken_amount = 3
|
||||
var/cloak_cooldown = 10 SECONDS
|
||||
var/last_uncloak = 0
|
||||
|
||||
|
||||
/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
|
||||
|
||||
/mob/living/simple_mob/animal/space/mouse_army/stealth/uncloak()
|
||||
last_uncloak = world.time
|
||||
if(!cloaked)
|
||||
return
|
||||
animate(src, alpha = initial(alpha), time = 1 SECOND)
|
||||
cloaked = FALSE
|
||||
|
||||
/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
|
||||
|
||||
/mob/living/simple_mob/animal/space/mouse_army/stealth/handle_special()
|
||||
if(!cloaked && can_cloak())
|
||||
cloak()
|
||||
|
||||
/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 ..()
|
||||
|
||||
/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()
|
||||
..()
|
||||
|
||||
/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/mob/animal_ch.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/dragonflame
|
||||
|
||||
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
|
||||
@@ -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.
|
||||
@@ -5,8 +5,8 @@
|
||||
// Probably shouldn't use this directly, there are a bunch of sub-classes that are more complete.
|
||||
/mob/living/simple_mob/humanoid/merc
|
||||
name = "mercenary"
|
||||
desc = "A tough looking heavily-armed individual."
|
||||
tt_desc = "E Homo sapiens"
|
||||
desc = "A tough looking individual armed with only a knife." //CHOMPEdit
|
||||
icon_state = "syndicate"
|
||||
icon_living = "syndicate"
|
||||
icon_dead = "syndicate_dead"
|
||||
@@ -24,8 +24,7 @@
|
||||
harm_intent_damage = 5
|
||||
melee_damage_lower = 15 //Tac Knife damage
|
||||
melee_damage_upper = 15
|
||||
attack_armor_pen = 20
|
||||
attack_sharp = TRUE
|
||||
attack_sharp = 1 //CHOMPEdit
|
||||
attack_edge = 1
|
||||
attacktext = list("slashed", "stabbed")
|
||||
armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 100) // Same armor values as the vest they drop, plus simple mob immunities
|
||||
@@ -38,6 +37,7 @@
|
||||
|
||||
// Grenade special attack vars
|
||||
var/grenade_type = /obj/item/weapon/grenade/concussion
|
||||
var/grenade_timer = 50 //CHOMPEdit
|
||||
special_attack_cooldown = 45 SECONDS
|
||||
special_attack_min_range = 2
|
||||
special_attack_max_range = 7
|
||||
@@ -71,7 +71,8 @@
|
||||
var/obj/item/weapon/grenade/G = new grenade_type(get_turf(src))
|
||||
if(istype(G))
|
||||
G.throw_at(A, G.throw_range, G.throw_speed, src)
|
||||
G.attack_self(src)
|
||||
G.det_time = grenade_timer //CHOMPEdit
|
||||
G.activate(src) //CHOMPEdit
|
||||
special_attack_charges = max(special_attack_charges-1, 0)
|
||||
|
||||
set_AI_busy(FALSE)
|
||||
@@ -112,7 +113,7 @@
|
||||
melee_damage_lower = 30
|
||||
melee_damage_upper = 30
|
||||
attack_armor_pen = 50
|
||||
attack_sharp = TRUE
|
||||
attack_sharp = 1 //CHOMPEdit
|
||||
attack_edge = 1
|
||||
attacktext = list("slashed")
|
||||
|
||||
|
||||
@@ -0,0 +1,513 @@
|
||||
/datum/category_item/catalogue/fauna/mercenary
|
||||
name = "Mercenaries"
|
||||
desc = "Life on the Frontier is hard, and unregulated. Unlike life in \
|
||||
more 'civlized' areas of the Galaxy, violence and piracy remain common \
|
||||
this far out. The Megacorporations keep a tight grip on their holdings, \
|
||||
but there are always small bands or aspiring companies looking to make a \
|
||||
thaler. From simple pirates to legitimate PMCs, Frontier mercs come in \
|
||||
all shapes and sizes."
|
||||
value = CATALOGUER_REWARD_TRIVIAL
|
||||
unlocked_by_any = list(/datum/category_item/catalogue/fauna/mercenary)
|
||||
|
||||
// Obtained by scanning all X.
|
||||
/datum/category_item/catalogue/fauna/all_mercenaries
|
||||
name = "Collection - Mercenaries"
|
||||
desc = "You have scanned a large array of different types of mercenary, \
|
||||
and therefore you have been granted a large sum of points, through this \
|
||||
entry."
|
||||
value = CATALOGUER_REWARD_HARD
|
||||
unlocked_by_all = list(
|
||||
/datum/category_item/catalogue/fauna/mercenary/human,
|
||||
/datum/category_item/catalogue/fauna/mercenary/human/peacekeeper,
|
||||
/datum/category_item/catalogue/fauna/mercenary/human/grenadier,
|
||||
/datum/category_item/catalogue/fauna/mercenary/human/space,
|
||||
/datum/category_item/catalogue/fauna/mercenary/human/space/suppressor,
|
||||
/datum/category_item/catalogue/fauna/mercenary/vox,
|
||||
/datum/category_item/catalogue/fauna/mercenary/vox/boarder,
|
||||
/datum/category_item/catalogue/fauna/mercenary/vox/technician,
|
||||
/datum/category_item/catalogue/fauna/mercenary/vox/suppressor,
|
||||
/datum/category_item/catalogue/fauna/mercenary/vox/captain
|
||||
)
|
||||
|
||||
/datum/category_item/catalogue/fauna/mercenary/human
|
||||
name = "Mercenaries - Human"
|
||||
desc = "Human Mercenary bands are extremely common on the Frontier. Many \
|
||||
of the modern outfits operating on the fringe today are veterans of the \
|
||||
Phoron Wars. After the dissolution of the Syndicate, these operatives were \
|
||||
left without a place to call home. Those who have survived have leveraged \
|
||||
their experience into a viable trade."
|
||||
value = CATALOGUER_REWARD_EASY
|
||||
|
||||
/datum/category_item/catalogue/fauna/mercenary/human/peacekeeper
|
||||
name = "Mercenaries - Solar Peacekeeper"
|
||||
desc = "Activist groups in Civlized Space often raise moral concerns about \
|
||||
conditions on the Frontier. The more organized groups will sometimes gather \
|
||||
bands of mercenaries from the core worlds together under the belief that they \
|
||||
can come out to the Frontier to enforce their way of life. Due to the Frontier \
|
||||
Act, these 'humanitarian operations' are quickly demolished."
|
||||
value = CATALOGUER_REWARD_EASY
|
||||
|
||||
/datum/category_item/catalogue/fauna/mercenary/human/grenadier
|
||||
name = "Mercenaries - Grenadier"
|
||||
desc = "After the Phoron Wars, many deniable operatives on both sides of \
|
||||
the conflict found that there was no place for them within their home companies \
|
||||
any more. Left without options, these highly motivated and trained specialists \
|
||||
often seek revenge, or attempt to carve out their own fiefdoms. Well equipped \
|
||||
and well trained, these outcasts are not to be taken lightly."
|
||||
value = CATALOGUER_REWARD_EASY
|
||||
|
||||
/datum/category_item/catalogue/fauna/mercenary/human/space
|
||||
name = "Mercenaries - Commando"
|
||||
desc = "Commandos, much like their less equipped brethren, are experts in \
|
||||
wet work. Honing their skills over years of training, the Commando's iconic \
|
||||
equipment summons memories of the bad old days in any survivor who sees them. \
|
||||
These mercs make a statement with their equipment - 'I was there. Come get me.' \
|
||||
It is usually not an idle boast."
|
||||
value = CATALOGUER_REWARD_EASY
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc
|
||||
icon = 'icons/mob/animal_ch.dmi'
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/mercenary/human)
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/ranged
|
||||
desc = "A tough looking individual armed with an pistol."
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/smg
|
||||
name = "mercenary soldier"
|
||||
desc = "A tough looking individual armed with an submachine gun."
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/smg/sol
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/mercenary/human/peacekeeper)
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/laser
|
||||
name = "mercenary marksman"
|
||||
desc = "A tough looking individual armed with an laser rifle."
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/ionrifle
|
||||
name = "mercenary anti-technical"
|
||||
desc = "A tough looking individual armed with an ion rifle."
|
||||
|
||||
|
||||
//Garand
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/garand
|
||||
name = "mercenary rifleman"
|
||||
desc = "A tough looking individual armed with a semiautomatic rifle."
|
||||
icon_state = "syndicateranged_veteran"
|
||||
icon_living = "syndicateranged_veteran"
|
||||
projectiletype = /obj/item/projectile/bullet/rifle/a762
|
||||
projectilesound = 'sound/weapons/Gunshot_heavy.ogg'
|
||||
loot_list = list(/obj/item/weapon/gun/projectile/garand = 100)
|
||||
reload_max = 8
|
||||
reload_time = 2 // It takes a bit to jam a stripper clip into the rifle.
|
||||
|
||||
//Hand Cannon
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/deagle
|
||||
name = "mercenary officer"
|
||||
desc = "A tough looking individual armed with an handcannon."
|
||||
icon_state = "syndicate_handcannon"
|
||||
icon_living = "syndicate_handcannon"
|
||||
projectiletype = /obj/item/projectile/bullet/pistol/strong
|
||||
projectilesound = 'sound/weapons/Gunshot_deagle.ogg'
|
||||
loot_list = list(/obj/item/weapon/gun/projectile/deagle = 100)
|
||||
needs_reload = TRUE
|
||||
reload_max = 7 // Deagle Reload
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/grenadier
|
||||
name = "mercenary grenadier"
|
||||
desc = "A tough looking individual armed with a shotgun and a belt of grenades."
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/mercenary/human/grenadier)
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/melee/sword/space
|
||||
name = "mercenary commando"
|
||||
desc = "A tough looking individual, armred with an energy sword and shield."
|
||||
icon_state = "syndicatespace-melee"
|
||||
icon_living = "syndicatespace-melee"
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/mercenary/human/space)
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/space
|
||||
name = "armored mercenary"
|
||||
desc = "A tough looking individual, armed with a submachine gun."
|
||||
icon_state = "syndicatespace-ranged"
|
||||
icon_living = "syndicatespceace-ranged"
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 100) // Same armor as their voidsuit.
|
||||
base_attack_cooldown = 5 // Two attacks a second or so.
|
||||
reload_max = 20
|
||||
loot_list = list(/obj/item/weapon/gun/projectile/automatic/c20r = 100)
|
||||
|
||||
//Combat Shotgun Merc
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/space/shotgun
|
||||
name = "mercenary tactical"
|
||||
desc = "A tough looking individual armed with a combat shotgun."
|
||||
icon_state = "syndicatespace-shotgun"
|
||||
icon_living = "syndicatespace-shotgun"
|
||||
base_attack_cooldown = 10
|
||||
reload_max = 7
|
||||
reload_time = 2 SECONDS //Takes a While to load all those shells.
|
||||
projectiletype = /obj/item/projectile/bullet/pellet/shotgun // Buckshot
|
||||
projectilesound = 'sound/weapons/Gunshot_shotgun.ogg'
|
||||
loot_list = list(/obj/item/weapon/gun/projectile/shotgun/pump/combat = 100)
|
||||
|
||||
//Auto-Shotgun Space Merc
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/space/shotgun/auto
|
||||
name = "mercenary sweeper"
|
||||
desc = "A tough looking individual armed with an automatic shotgun."
|
||||
icon_state = "syndicatespace-ashotgun"
|
||||
icon_living = "syndicatespace-ashotgun"
|
||||
base_attack_cooldown = 5 // Two attacks a second or so.
|
||||
reload_max = 24
|
||||
projectiletype = /obj/item/projectile/bullet/pellet/shotgun // Buckshot
|
||||
projectilesound = 'sound/weapons/Gunshot_shotgun.ogg'
|
||||
loot_list = list(/obj/item/weapon/gun/projectile/automatic/as24 = 100)
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/merc/ranged/suppressor
|
||||
|
||||
//Machine Gun Merc
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/space/heavy
|
||||
name = "mercenary heavy gunner"
|
||||
desc = "A tough looking individual armed with an light machinegun."
|
||||
icon_state = "syndicatespace-heavy"
|
||||
icon_living = "syndicatespace-heavy"
|
||||
base_attack_cooldown = 2.5 // Four Attacks a Second. MOAR DAKKA
|
||||
reload_max = 50
|
||||
projectiletype = /obj/item/projectile/bullet/rifle/a545
|
||||
projectilesound = 'sound/weapons/Gunshot_light.ogg'
|
||||
loot_list = list(/obj/item/weapon/gun/projectile/automatic/l6_saw = 100)
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/merc/ranged/suppressor
|
||||
|
||||
//Tommy-Las Merc
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/space/tommylas
|
||||
name = "mercenary light burster"
|
||||
desc = "A tough looking individual armed with an automatic laser."
|
||||
icon_state = "syndicatespace-tommylas"
|
||||
icon_living = "syndicatespace-tommylas"
|
||||
base_attack_cooldown = 2.5 // Four Attacks a Second. MOAR DAKKA
|
||||
reload_max = 3
|
||||
reload_time = 0.5 // Meant to Simulate controlled Supressive Bursts
|
||||
projectiletype = /obj/item/projectile/beam/weaklaser
|
||||
projectilesound = 'sound/weapons/Laser.ogg'
|
||||
loot_list = list(/obj/item/weapon/gun/energy/tommylaser = 100)
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/merc/ranged/suppressor
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/space/fal
|
||||
name = "mercenary commando"
|
||||
desc = "A tough looking individual armed with a assault rifle."
|
||||
icon_state = "syndicatespace-commando"
|
||||
icon_living = "syndicatespace-commando"
|
||||
projectiletype = /obj/item/projectile/bullet/rifle/a762
|
||||
projectilesound = 'sound/weapons/Gunshot_heavy.ogg'
|
||||
loot_list = list(/obj/item/weapon/gun/projectile/automatic/fal = 100)
|
||||
reload_max = 20
|
||||
|
||||
// suppressors are just assholes and are intended to be a piss poor experience for everyone on both sides
|
||||
/datum/category_item/catalogue/fauna/mercenary/human/space/suppressor
|
||||
name = "Mercenaries - Suppressor"
|
||||
desc = "Just because the Phoron Wars are over, it doesn't mean that covert \
|
||||
actions and corporate espionage ended too. When you encounter mercs with \
|
||||
the latest gear and the best training, you can bet your bottom Thaler that \
|
||||
they've got a Corporate sponsor backing them up."
|
||||
value = CATALOGUER_REWARD_MEDIUM
|
||||
|
||||
/datum/ai_holder/simple_mob/merc/ranged/suppressor
|
||||
respect_alpha = FALSE // he really just shoots you
|
||||
vision_range = 10 // plutonia experience
|
||||
conserve_ammo = FALSE
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/space/suppressor // adminspawn only, and also Probably Going To Kill The Unprepared
|
||||
name = "mercenary suppressor"
|
||||
desc = "Geeze, weren't shotgun ops bad enough? At least when you fade these jerks you get a flashbang to the face."
|
||||
icon_state = "syndi-ranged-space-sup"
|
||||
icon_living = "syndi-ranged-space-sup"
|
||||
armor = list(melee = 80, bullet = 65, laser = 50, energy = 15, bomb = 80, bio = 100, rad = 100) // this is the merc rig's stats
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/merc/ranged/suppressor
|
||||
say_list_type = /datum/say_list/merc/elite
|
||||
projectiletype = /obj/item/projectile/bullet/pistol/medium/ap/suppressor // it's high velocity
|
||||
projectilesound = 'sound/weapons/doompistol.ogg' // converted from .wavs extracted from doom 2
|
||||
base_attack_cooldown = 3 // three? attacks a second
|
||||
reload_max = 30 // extended mags
|
||||
special_attack_charges = 5
|
||||
loot_list = list() // oh, you killed him?
|
||||
corpse = null // well, sorry, buddy, he doesn't drop shit
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/mercenary/human/space/suppressor)
|
||||
// var/deathnade_path = /obj/item/grenade/flashbang/stingbang
|
||||
/* far too fun for the codebase at the moment
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/space/suppressor/death()
|
||||
// you thought killing him would be the least of your worries?
|
||||
// think again
|
||||
var/obj/item/grenade/banger = new deathnade_path(get_turf(src))
|
||||
banger.throw_at(ai_holder.target, 9, 9, null)
|
||||
banger.det_time = 25
|
||||
banger.activate(null)
|
||||
..()
|
||||
*/
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/space/suppressor/elite // really reconsider why you're spawning this dude
|
||||
name = "mercenary elite suppressor"
|
||||
desc = "Geeze, weren't normal suppressors bad enough? At least if you fade this jerk, you'll have an awful time anyway."
|
||||
icon_state = "syndi-ranged-space-sup-elite"
|
||||
icon_living = "syndi-ranged-space-sup-elite"
|
||||
armor = list(melee = 80, bullet = 70, laser = 55, energy = 15, bomb = 80, bio = 100, rad = 100) // see code for military hardsuit
|
||||
projectiletype = /obj/item/projectile/bullet/pistol/medium/ap/suppressor/turbo // fuck it, fast bullets
|
||||
grenade_type = /obj/item/weapon/grenade/shooter/rubber // don't group up
|
||||
grenade_timer = 30 // well, look what you've done, you've grouped up
|
||||
// deathnade_path = /obj/item/grenade/flashbang/stingbang/shredbang // REALLY don't group up
|
||||
// being Actual Professionals, they have better (read: player-level) blocking chances
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/space/suppressor/attackby(var/obj/item/O, var/mob/user)
|
||||
if(O.force)
|
||||
if(prob(50))
|
||||
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
|
||||
visible_message("<span class='warning'>\The [user] gently taps [src] with \the [O].</span>")
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/space/suppressor/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(!Proj) return
|
||||
if(prob(50))
|
||||
visible_message("<span class='warning'>[src] blocks [Proj] with its shield!</span>")
|
||||
if(Proj.firer)
|
||||
ai_holder.react_to_attack(Proj.firer)
|
||||
return
|
||||
else
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
////////////////////////////////
|
||||
// Vox Pirates
|
||||
////////////////////////////////
|
||||
//Classifying these as Mercs, due to the general power level I want them at.
|
||||
|
||||
/datum/category_item/catalogue/fauna/mercenary/vox
|
||||
name = "Mercenaries - Vox"
|
||||
desc = "For centuries the Vox have inflicted their way of life upon the \
|
||||
Galaxy. Regarded with distrust due to their tendency to engage in piracy \
|
||||
and violence, the Vox are equally feared for their robust physiology and \
|
||||
curiously advanced xenotech. Due to ancient compacts, Vox pirates try to \
|
||||
avoid bloodshed, but will react to violence in kind."
|
||||
value = CATALOGUER_REWARD_MEDIUM
|
||||
unlocked_by_any = list(/datum/category_item/catalogue/fauna/mercenary/vox)
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/voxpirate //Don't use this one.
|
||||
name = "vox mannequin"
|
||||
desc = "You shouldn't be seeing this one."
|
||||
icon = 'icons/mob/animal_ch.dmi'
|
||||
icon_state = "voxpirate"
|
||||
icon_living = "voxpirate"
|
||||
icon_dead = "voxpirate_dead"
|
||||
|
||||
faction = "voxpirate"
|
||||
movement_cooldown = 4
|
||||
|
||||
status_flags = 0
|
||||
|
||||
response_help = "pokes"
|
||||
response_disarm = "shoves"
|
||||
response_harm = "hits"
|
||||
|
||||
harm_intent_damage = 5
|
||||
melee_damage_lower = 20 //Vox Hunting rifle blade damage
|
||||
melee_damage_upper = 20
|
||||
attack_sharp = 1
|
||||
attack_edge = 1
|
||||
attacktext = list("slashed", "stabbed")
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 100) // Matching Merc voidsuit stats to represent toughness.
|
||||
|
||||
min_oxy = 0 //Vox are spaceproof.
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
|
||||
corpse = /obj/effect/landmark/mobcorpse/vox/pirate
|
||||
loot_list = list(/obj/item/weapon/gun/projectile/shotgun/pump/rifle/vox_hunting = 100,
|
||||
/obj/item/ammo_magazine/clip/c762 = 30,
|
||||
/obj/item/ammo_magazine/clip/c762 = 30
|
||||
)
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/merc
|
||||
say_list_type = /datum/say_list/merc/voxpirate
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/voxpirate/pirate
|
||||
name = "vox pirate"
|
||||
desc = "A desperate looking Vox. Get your gun."
|
||||
|
||||
projectiletype = /obj/item/projectile/bullet/rifle/a762
|
||||
projectilesound = 'sound/weapons/riflebolt.ogg'
|
||||
needs_reload = TRUE
|
||||
reload_max = 20
|
||||
|
||||
////////////////////////////////
|
||||
// Vox Melee
|
||||
////////////////////////////////
|
||||
|
||||
/datum/category_item/catalogue/fauna/mercenary/vox/boarder
|
||||
name = "Mercenaries - Vox Boarder"
|
||||
desc = "Vox are squat creatures, with powerful muscles and tough, scaly \
|
||||
hides. Their dense bones and sharp talons make them a formidable threat in \
|
||||
close quarters combat. Low level Vox weaponry generally emphasizes closing \
|
||||
the distance to exploit these facts."
|
||||
value = CATALOGUER_REWARD_MEDIUM
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/voxpirate/boarder
|
||||
name = "vox melee boarder"
|
||||
desc = "A howling Vox with a sword. Run."
|
||||
icon_state = "voxboarder_m"
|
||||
icon_living = "voxboarder_m"
|
||||
icon_dead = "voxboarder_m_dead"
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/mercenary/vox/boarder)
|
||||
|
||||
melee_damage_lower = 30 //Energy sword damage
|
||||
melee_damage_upper = 30
|
||||
attack_sharp = 1
|
||||
attack_edge = 1
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
|
||||
corpse = /obj/effect/landmark/mobcorpse/vox/boarder_m
|
||||
loot_list = list(/obj/item/weapon/melee/energy/sword = 100)
|
||||
|
||||
// They're good with the swords? I dunno. I like the idea they can deflect.
|
||||
/mob/living/simple_mob/humanoid/merc/voxpirate/boarder/attackby(var/obj/item/O, var/mob/user)
|
||||
if(O.force)
|
||||
if(prob(20))
|
||||
visible_message("<span class='danger'>\The [src] blocks \the [O] with its sword!</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/voxpirate/boarder/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(!Proj) return
|
||||
if(prob(35))
|
||||
visible_message("<span class='warning'>[src] blocks [Proj] with its sword!</span>")
|
||||
if(Proj.firer)
|
||||
ai_holder.react_to_attack(Proj.firer)
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
////////////////////////////////
|
||||
// Vox Ranged
|
||||
////////////////////////////////
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/voxpirate/boarder
|
||||
name = "vox ranged boarder"
|
||||
desc = "A howling Vox with a shotgun. Get to cover!"
|
||||
icon_state = "voxboarder_r"
|
||||
icon_living = "voxboarder_r"
|
||||
icon_dead = "voxboarder_r_dead"
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/mercenary/vox/boarder)
|
||||
|
||||
projectiletype = /obj/item/projectile/bullet/pellet/shotgun
|
||||
projectilesound = 'sound/weapons/Gunshot_shotgun.ogg'
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/ranged/aggressive
|
||||
corpse = /obj/effect/landmark/mobcorpse/vox/boarder_r
|
||||
loot_list = list(/obj/item/weapon/gun/projectile/shotgun/pump/combat = 100,
|
||||
/obj/item/ammo_magazine/m12gdrum = 30,
|
||||
/obj/item/ammo_magazine/m12gdrum = 30
|
||||
)
|
||||
|
||||
needs_reload = TRUE
|
||||
reload_max = 10
|
||||
|
||||
/datum/category_item/catalogue/fauna/mercenary/vox/technician
|
||||
name = "Mercenaries - Vox Technician"
|
||||
desc = "The belief that Vox are unintelligent comes largely from a kind \
|
||||
of anthrochauvanism. Due to their difficulty speaking GalCom and their tendency \
|
||||
to resort to underhanded methods, the Galaxy sees Vox as brutal, unintelligent \
|
||||
aliens. In reality, Vox are just as intelligent as everyone else, as the state \
|
||||
of their technology shows. Vox Technicians maintain ancient vessels and tools \
|
||||
with scraps and odd bits, often recieving no external recognition for their work."
|
||||
value = CATALOGUER_REWARD_MEDIUM
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/voxpirate/technician
|
||||
name = "vox salvage technician"
|
||||
desc = "A screeching Vox with an ion rifle. Usually sent on scrapping operations."
|
||||
icon_state = "voxboarder_t"
|
||||
icon_living = "voxboarder_t"
|
||||
icon_dead = "voxboarder_t_dead"
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/mercenary/vox/technician)
|
||||
|
||||
projectiletype = /obj/item/projectile/ion
|
||||
projectilesound = 'sound/weapons/Laser.ogg'
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting
|
||||
corpse = /obj/effect/landmark/mobcorpse/vox/boarder_t
|
||||
loot_list = list(/obj/item/weapon/gun/energy/ionrifle)
|
||||
|
||||
needs_reload = TRUE
|
||||
reload_max = 25 //Suppressive tech weapon.
|
||||
|
||||
/datum/category_item/catalogue/fauna/mercenary/vox/suppressor
|
||||
name = "Mercenaries - Vox Suppressor"
|
||||
desc = "Among Vox bands, Suppressors are an even more motley crew. \
|
||||
Staying true to the name, Suppressors are veteran Vox pirates who have \
|
||||
faced hundreds of engagements. Tough and well suited for violence, these \
|
||||
Vox wear bright, mismatching colors into battle to draw attention. Serving \
|
||||
as a beacon to draw eyes away from their companions, Suppressors wield the \
|
||||
fearsome Sonic Cannon - a booming directed frequency device capable of \
|
||||
wreaking havoc all its own. It doesn't sound half bad either, when it isn't \
|
||||
pointed at you."
|
||||
value = CATALOGUER_REWARD_MEDIUM
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/voxpirate/ranged/suppressor
|
||||
name = "vox suppressor"
|
||||
desc = "Come on, feel the noise!"
|
||||
icon_state = "voxsuppressor"
|
||||
icon_living = "voxsuppressor"
|
||||
icon_dead = "voxsuppresor_dead"
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/mercenary/vox/suppressor)
|
||||
|
||||
armor = list(melee = 30, bullet = 50, laser = 60, energy = 30, bomb = 35, bio = 100, rad = 100) // Boosted armor to represent Tank role.
|
||||
|
||||
projectiletype = /obj/item/projectile/sonic/weak
|
||||
projectilesound = 'sound/effects/basscannon.ogg'
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/destructive
|
||||
corpse = /obj/effect/landmark/mobcorpse/vox/suppressor
|
||||
loot_list = list(/obj/item/weapon/gun/energy/sonic = 100)
|
||||
|
||||
base_attack_cooldown = 5 // Two attacks a second or so.
|
||||
needs_reload = TRUE
|
||||
reload_max = 30 //Gotta lay down that fire, son.
|
||||
|
||||
/datum/category_item/catalogue/fauna/mercenary/vox/captain
|
||||
name = "Mercenaries - Vox Captain"
|
||||
desc = "Accomplished Vox who bring in scrap reliably eventually become the \
|
||||
'Quills' of their own expeditions. This Vox term is considered analagous to \
|
||||
the word 'Captain'. As such, any Vox who has attained this rank has certainly \
|
||||
earned the powerful equipment they carry into combat: Dark Matter cannons, \
|
||||
advanced armor, proper Hunting Rifles - the list goes on. The Vox Captain \
|
||||
is a formidable opponent, honed by years of hard living and harder fighting. \
|
||||
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/ranged/captain
|
||||
name = "vox pirate captain"
|
||||
desc = "Walkings the plank, dustlung! Yayaya."
|
||||
icon_state = "voxcaptain"
|
||||
icon_living = "voxcaptain"
|
||||
icon_dead = "voxcaptain_dead"
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/mercenary/vox/captain)
|
||||
|
||||
armor = list(melee = 60, bullet = 50, laser = 40, energy = 15, bomb = 30, bio = 100, rad = 100) // Vox RIG armor values.
|
||||
|
||||
projectiletype = /obj/item/projectile/beam/darkmatter
|
||||
projectilesound = 'sound/weapons/eLuger.ogg'
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/destructive
|
||||
corpse = /obj/effect/landmark/mobcorpse/vox/captain
|
||||
loot_list = list(/obj/item/weapon/gun/energy/darkmatter = 100)
|
||||
|
||||
needs_reload = TRUE
|
||||
reload_max = 15 //Other Vox should be carrying ammo.
|
||||
@@ -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
|
||||
|
||||
*/
|
||||
@@ -0,0 +1,502 @@
|
||||
///////////////////////////////
|
||||
// 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"
|
||||
movement_cooldown = 3
|
||||
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
|
||||
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
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/ripley/pirate
|
||||
name = "Hull Ripper"
|
||||
desc = "A Ripley modified by pirates. Sports additional riveted armor plating and a jury rigged machine gun in addition to its hull piercing drill."
|
||||
catalogue_data = list(/datum/category_item/catalogue/technology/ripley)
|
||||
icon = 'icons/mob/animal_ch.dmi'
|
||||
icon_state = "pirate"
|
||||
faction = "pirate"
|
||||
wreckage = /obj/structure/loot_pile/mecha/ripley/pirate
|
||||
|
||||
maxHealth = 250
|
||||
heat_resist = 1
|
||||
armor = list(
|
||||
"melee" = 30,
|
||||
"bullet" = 40,
|
||||
"laser" = 50,
|
||||
"energy" = 5,
|
||||
"bomb" = 50,
|
||||
"bio" = 100,
|
||||
"rad" = 100
|
||||
)
|
||||
|
||||
projectiletype = /obj/item/projectile/bullet/pistol
|
||||
base_attack_cooldown = 0.5 SECONDS
|
||||
needs_reload = TRUE
|
||||
reload_max = 30
|
||||
reload_time = 3
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/ripley/pirate/manned
|
||||
pilot_type = /mob/living/simple_mob/humanoid/pirate/mate/ranged/bosun
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/ripley/pirate/last_stand_merc //Special version used as a quasi boss fight
|
||||
name = "Xeno Ripper"
|
||||
desc = "A Ripley modified by a desperate merc. It sports additional riveted armor plating splattered with dried xeno blood and a jury rigged machine gun in addition to its drill.\
|
||||
A repair drone flits around the intimidating mech."
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/ranged/aggressive
|
||||
maxHealth = 170 //Less Health
|
||||
has_repair_droid = TRUE //But has repair drone
|
||||
pilot_type = /mob/living/simple_mob/humanoid/possessed/merc/feral //Possessed rig suit piloting a mech. Tremble in fear
|
||||
movement_shake_radius = 5
|
||||
@@ -0,0 +1,157 @@
|
||||
//Rig-Suits with AI or supernatural forces controlling them, a dead person inside.
|
||||
//The base is based off of the EVA Rig.
|
||||
//todo: Add catalogue data.
|
||||
|
||||
/mob/living/simple_mob/humanoid/possessed
|
||||
name = "old EVA RIG suit"
|
||||
desc = "A light hardsuit for repairs and maintenance to the outside of habitats and vessels. Seems to be worn down and damaged. But it seems to still be moving. Is someone in it?"
|
||||
icon = 'icons/mob/animal_ch.dmi'
|
||||
icon_state = "eva-rig"
|
||||
|
||||
faction = "Possessed"
|
||||
movement_cooldown = 10
|
||||
|
||||
health = 200
|
||||
maxHealth = 200
|
||||
taser_kill = 0
|
||||
|
||||
var/idle = 4 //how long between the breathing sounds, in seconds.
|
||||
var/silenced = 0 //Wither or not the sounds and speaking will play.
|
||||
|
||||
//It's a RIG. It's spaceproof.
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
|
||||
harm_intent_damage = 1
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 25
|
||||
attacktext = list("punched", "kicked", "smacked")
|
||||
attack_sound = "punch"
|
||||
armor = list(melee = 30, bullet = 10, laser = 20,energy = 25, bomb = 20, bio = 100, rad = 100) //This should be the same as the base RIG.
|
||||
|
||||
has_hands = 1
|
||||
humanoid_hands = 1
|
||||
|
||||
grab_resist = 100
|
||||
|
||||
movement_sound = 'sound/effects/footstep/floor1.ogg'
|
||||
|
||||
//Simple mob merc so it stops, says something, then charges.
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/merc
|
||||
say_list_type = /datum/say_list/possessed //Set to Null on silenced.
|
||||
|
||||
// corpse = /obj/effect/landmark/mobcorpse/possessed
|
||||
// Will eventually leave a full corpse with an activated RIG on it. But not yet.
|
||||
|
||||
//Miasma Cloud "Item"
|
||||
/obj/item/weapon/grenade/chem_grenade/miasma
|
||||
name = "Miasma Bomb"
|
||||
desc = "You probably shouldn't be able to see this."
|
||||
stage = 2
|
||||
path = 1
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/miasma/Initialize(mapload)
|
||||
. = ..()
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
|
||||
|
||||
B1.reagents.add_reagent("miasma", 30)
|
||||
B1.reagents.add_reagent("potassium", 5)
|
||||
B2.reagents.add_reagent("sugar", 5)
|
||||
B2.reagents.add_reagent("phosphorus", 5)
|
||||
|
||||
beakers += B1
|
||||
beakers += B2
|
||||
|
||||
icon_state = null
|
||||
|
||||
detonate()
|
||||
|
||||
//Has a chance to play one of the listed sounds when it moves.
|
||||
/mob/living/simple_mob/humanoid/possessed/Moved()
|
||||
. = ..()
|
||||
if(prob(5) && silenced == 0)
|
||||
playsound(src, pick('sound/h_sounds/headcrab.ogg', 'sound/h_sounds/holla.ogg', 'sound/h_sounds/lynx.ogg', 'sound/h_sounds/mumble.ogg', 'sound/h_sounds/yell.ogg'), 50, 1)
|
||||
|
||||
//Plays the sound every ~4 seconds.
|
||||
/mob/living/simple_mob/humanoid/possessed/Life()
|
||||
if(idle <= 0 && silenced == 0)
|
||||
playsound(src, 'sound/h_sounds/breathing.ogg', 60, 1)
|
||||
idle = 4
|
||||
idle--
|
||||
|
||||
//Dies with a variety of messages, a disgusting sound, then drops the control module, bones, blood, gibs, and a cloud of miasma.
|
||||
/mob/living/simple_mob/humanoid/possessed/Destroy()
|
||||
var/droploc = get_turf(src)
|
||||
playsound(src, 'sound/effects/blobattack.ogg', 40, 1)
|
||||
visible_message(span("critical", pick("\The The horrid screech of metal grating metal cuts through the air as the suit's interlocking joints grind and fold inwards upon itself. A putrid wash of decayed flesh spills forwards, staining the ground dark with the contents of the collapsing RIG's long expired pilot.",
|
||||
"\The The [src] shudders as some hurt living thing, reeling as screaming servos overcompensate beneath the weight of that debilitating strike - the horrid sounds of shattered metal resonate as the RIG rips itself apart. Limbs flung about in distinctly inhuman motions in a final failed effort at balance before buckling inwards at the joints, hydraulic fluid jettisoned as blood from a severed artery as the long liquidized contents of the suit's ex-pilot spill from its chassis in a thick slurry.",
|
||||
"\The Hissing atmosphereic valves pop and snap, breaking the ageless seal as the putrid stench of rot and carrion assaults the senses in debilitating waves. The damaged RIG's visor alight with warnings of hazardous atmospheric conditions as a final distorted scream echos from within the damaged chassis. The fetid miasma that breeches through those wheezing seals overtaken by a wet burble and plop as the suit is bathed in the liquid contents of its passenger, blackened flesh fed through those narrow seals as rotten grounds.",
|
||||
"\The The timeworn suit's seals finally crack open with a hiss - spilling forth a thick fungal mist. The control module ejects from the rig as it loses all control impulses - leaving behind but a pile of bones and the rotten sludge it had been swimming in for heaven knows how long.",
|
||||
"\The The [src]'s emergency protocols kick in, retracting around the former-person, who's now little more than a disgusting pile of parts not even a vulture would want. The control module appears to be intact, however.",
|
||||
"\The The suit finally lets go of the prisoner it had held for so long. Unfortunately, this guy reminds you of that news report of someone who forgot that Ganymede rock lobster in a fridge for a year, the thick miasma of fungi and rotten gasses visibly pouring out, pushing out rancid bits of meat and slimy bones. The only salvageable bit appears to be the Control Module.",
|
||||
"\The A few last desperate seals give out with a weary series of pops, and the suit contorts with the final pressure differentials resolved: the suit tangles and leaks, and finally compacts back into it's rightful shape.",
|
||||
"\The Tightening, the suit re-attempts to remain it's current form, before it collapses under the stress, supporting mechanisms closing in on themselves like a noose with nothing left to catch on.",
|
||||
"\The The suit makes a noise akin to clockwork binding, and shutters, before something imperceptible gives with an abysmal noise and the suit returns to it's default form.")))
|
||||
gib()
|
||||
/* Nah
|
||||
if(rand(1,2) == 1)
|
||||
new rig1(droploc)
|
||||
else
|
||||
new rig2(droploc)
|
||||
*/
|
||||
new /obj/effect/decal/remains/human(droploc)
|
||||
new /obj/item/weapon/grenade/chem_grenade/miasma(droploc)
|
||||
/*Broken smoke spawn code. Above line is a bandaid.
|
||||
var/datum/reagents/R = new/datum/reagents(30)
|
||||
reagents.add_reagent("miasma", 30)
|
||||
var/datum/effect_system/smoke_spread/chem/S = new /datum/effect_system/smoke_spread/chem
|
||||
S.attach(droploc)
|
||||
S.set_up(R, 30, 0, droploc)
|
||||
spawn(0)
|
||||
S.start()*/
|
||||
..()
|
||||
|
||||
//What about if someone's in it? Well here you go.
|
||||
/mob/living/simple_mob/humanoid/possessed/Login()
|
||||
to_chat(src,"<b>Why are you in this [src]? Why can't you say more than a few phrases? Why. What. Kill. Kill. Kill. Kill. KILL! KILL! KILL!</b> [player_msg]")
|
||||
|
||||
/obj/item/weapon/rig/eva/old
|
||||
name = "old EVA suit control module"
|
||||
desc = "A light hardsuit for repairs and maintenance to the outside of habitats and vessels. It appears to be pretty old and worn down."
|
||||
|
||||
//Now let's make some more!
|
||||
/mob/living/simple_mob/humanoid/possessed/industrial
|
||||
name = "old industrial RIG suit"
|
||||
desc = "A heavy, powerful hardsuit used by construction crews and mining corporations. Seems to be worn down and damaged. But it seems to still be moving. Is someone in it?"
|
||||
icon_state = "industrial-rig"
|
||||
loot_list = list(/obj/item/weapon/rig/industrial/old = 100)
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100)
|
||||
|
||||
/obj/item/weapon/rig/industrial/old
|
||||
name = "old Industrial hardsuit"
|
||||
desc = "A heavy, powerful hardsuit used by construction crews and mining corporations. It appears to be pretty old and worn down."
|
||||
|
||||
/mob/living/simple_mob/humanoid/possessed/merc
|
||||
name = "old crimson hardsuit"
|
||||
desc = "A blood-red hardsuit featuring some fairly illegal technology. Seems to be worn down and damaged. But it seems to still be moving. Is someone in it?"
|
||||
icon_state = "merc-rig"
|
||||
loot_list = list(/obj/item/weapon/rig/merc/old = 100)
|
||||
armor = list(melee = 80, bullet = 65, laser = 50, energy = 15, bomb = 80, bio = 100, rad = 60)
|
||||
|
||||
/obj/item/weapon/rig/merc/old
|
||||
name = "old crimson hardsuit control module"
|
||||
desc = "A blood-red hardsuit featuring some fairly illegal technology. It appears to be pretty old and worn down."
|
||||
|
||||
/mob/living/simple_mob/humanoid/possessed/merc/feral // Special one that moves faster attacks faster. Intended as a special mech pilot
|
||||
desc = "A blood-red hardsuit featuring some fairly illegal technology. Seems to be worn down and damaged but moving with surprising speed!"
|
||||
movement_cooldown = 3 //You can try running
|
||||
base_attack_cooldown = 3 //You will just die tired
|
||||
melee_miss_chance = 25 //Not very coordinated though
|
||||
@@ -0,0 +1,343 @@
|
||||
//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 struck", "lunged against", "battered")
|
||||
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 = "splattered 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
|
||||
|
||||
var/cloaked_alpha = 30
|
||||
var/cloaked_bonus_damage = 30
|
||||
var/cloaked_weaken_amount = 3
|
||||
var/cloak_cooldown = 10 SECONDS
|
||||
var/last_uncloak = 0
|
||||
|
||||
/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
|
||||
|
||||
/mob/living/simple_mob/mechanical/cyber_horror/tajaran/uncloak()
|
||||
last_uncloak = world.time
|
||||
if(!cloaked)
|
||||
return
|
||||
animate(src, alpha = initial(alpha), time = 1 SECOND)
|
||||
cloaked = FALSE
|
||||
|
||||
/mob/living/simple_mob/mechanical/cyber_horror/tajaran/break_cloak()
|
||||
uncloak()
|
||||
|
||||
|
||||
/mob/living/simple_mob/mechanical/cyber_horror/tajaran/is_cloaked()
|
||||
return cloaked
|
||||
|
||||
/mob/living/simple_mob/mechanical/cyber_horror/tajaran/handle_special()
|
||||
if(!cloaked && can_cloak())
|
||||
cloak()
|
||||
|
||||
/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 ..()
|
||||
|
||||
/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()
|
||||
..()
|
||||
|
||||
/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
|
||||
@@ -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
|
||||
@@ -7,11 +7,11 @@
|
||||
real_name = "Artificer"
|
||||
construct_type = "artificer"
|
||||
desc = "A bulbous construct dedicated to building and maintaining temples to their otherworldly lords."
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
//icon = 'icons/mob/mob.dmi' //CHOMPEdit
|
||||
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.
|
||||
|
||||
@@ -7,11 +7,11 @@
|
||||
real_name = "Harvester"
|
||||
construct_type = "harvester"
|
||||
desc = "A tendril-laden construct piloted by a chained mind."
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
//icon = 'icons/mob/mob.dmi' CHOMPEdit
|
||||
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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
new_mimic.real_crate = src
|
||||
new_mimic.name = name
|
||||
new_mimic.desc = desc
|
||||
new_mimic.icon = icon
|
||||
//new_mimic.icon = icon CHOMPEdit
|
||||
new_mimic.icon_state = "open"
|
||||
new_mimic.icon_living = "open"
|
||||
else
|
||||
@@ -77,7 +77,7 @@
|
||||
|
||||
icon_state = "crate"
|
||||
icon_living = "crate"
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon = 'icons/mob/animal_ch.dmi' //CHOMPEdit
|
||||
|
||||
faction = "mimic"
|
||||
|
||||
|
||||
353
code/modules/mob/living/simple_mob/subtypes/vore/mimic_ch.dm
Normal file
@@ -0,0 +1,353 @@
|
||||
/obj/structure/closet/crate/mimic/airlock
|
||||
name = "Dusty Airlock"
|
||||
desc = "It opens and closes. Though it appears it has been a while since it opened."
|
||||
icon = 'icons/mob/animal_ch.dmi'
|
||||
icon_state = "amimic"
|
||||
mimic_chance = 30
|
||||
anchored = 1 //You will not be able to push back the airlock mimic
|
||||
density = 1
|
||||
opacity = 1
|
||||
|
||||
/obj/structure/closet/crate/mimic/airlock/open()
|
||||
if(src.opened)
|
||||
return 0
|
||||
if(!src.can_open())
|
||||
return 0
|
||||
|
||||
if(mimic_active)
|
||||
mimic_active = FALSE
|
||||
if(prob(mimic_chance))
|
||||
var/mob/living/simple_mob/vore/aggressive/mimic/airlock/new_mimic = new(loc, src)
|
||||
visible_message("<font color='red'><b>The [new_mimic] suddenly growls as it turns out to be a mimic!</b></font>") //Controls the vars of the mimic that spawns
|
||||
forceMove(new_mimic)
|
||||
new_mimic.real_crate = src
|
||||
new_mimic.name = name
|
||||
new_mimic.desc = desc
|
||||
new_mimic.icon_state = "amimicopen"
|
||||
new_mimic.icon_living = "amimicopen"
|
||||
else
|
||||
qdel(src.loc)
|
||||
new/obj/machinery/door/airlock/maintenance/common (src.loc) //Places the Airlock
|
||||
qdel(src)//Deletes the "mimic"
|
||||
return ..()
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/structure/closet/crate/mimic/airlock/ex_act(severity) //Stores Mimic Contents for later
|
||||
for(var/obj/O in src.contents)
|
||||
qdel(O)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/crate/mimic/airlock/damage(var/damage)
|
||||
if(contents.len)
|
||||
visible_message("<font color='red'><b>The [src] let's out an enraged screach!</b></font>")
|
||||
for(var/obj/O in src.contents)
|
||||
qdel(O)
|
||||
..()
|
||||
|
||||
/obj/structure/closet/crate/mimic/airlock/safe
|
||||
mimic_chance = 0
|
||||
|
||||
/obj/structure/closet/crate/mimic/airlock/guaranteed
|
||||
mimic_chance = 100
|
||||
|
||||
/obj/structure/closet/crate/mimic/airlock/dangerous
|
||||
mimic_chance = 70
|
||||
|
||||
/obj/structure/closet/crate/mimic/airlock/cointoss
|
||||
mimic_chance = 50
|
||||
|
||||
/mob/living/simple_mob/vore/aggressive/mimic/airlock
|
||||
name = "Maintnence Access"
|
||||
desc = "It opens and closes."
|
||||
icon_state = "amimicopen"
|
||||
icon_living = "amimicopen"
|
||||
|
||||
maxHealth = 250
|
||||
health = 250
|
||||
movement_cooldown = 10
|
||||
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 30
|
||||
attack_armor_pen = 50 //Its jaw is an airlock. Its got enough bite strength.
|
||||
|
||||
armor = list(
|
||||
"melee" = 70,
|
||||
"bullet" = 30,
|
||||
"laser" = 30,
|
||||
"energy" = 30,
|
||||
"bomb" = 10,
|
||||
"bio" = 100,
|
||||
"rad" = 100) //Its an airlock.
|
||||
|
||||
/mob/living/simple_mob/vore/aggressive/mimic/airlock/will_show_tooltip()
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_mob/vore/aggressive/mimic/airlock/death()
|
||||
new/obj/machinery/door/airlock/maintenance/common (src.loc)
|
||||
real_crate = null
|
||||
qdel(src)
|
||||
|
||||
|
||||
//Less Terrifying Closet Mimic
|
||||
/obj/structure/closet/crate/mimic/closet
|
||||
name = "old closet"
|
||||
desc = "It's a basic storage unit. It seems awfully rickety."
|
||||
icon = 'icons/mob/animal_ch.dmi'
|
||||
icon_state = "cmimic"
|
||||
mimic_chance = 30
|
||||
mimic_active = TRUE
|
||||
|
||||
/obj/structure/closet/crate/mimic/closet/update_icon()
|
||||
if(opened)
|
||||
icon_state = "copen"
|
||||
else
|
||||
icon_state = "cmimic"
|
||||
|
||||
/obj/structure/closet/crate/mimic/closet/open()
|
||||
if(src.opened)
|
||||
return 0
|
||||
if(!src.can_open())
|
||||
return 0
|
||||
|
||||
if(mimic_active)
|
||||
mimic_active = FALSE
|
||||
if(prob(mimic_chance))
|
||||
var/mob/living/simple_mob/vore/aggressive/mimic/closet/new_mimic = new(loc, src)
|
||||
visible_message("<font color='red'><b>The [new_mimic] suddenly growls as it turns out to be a mimic!</b></font>") //Controls the mimic that spawns
|
||||
forceMove(new_mimic)
|
||||
new_mimic.real_crate = src
|
||||
new_mimic.name = name
|
||||
new_mimic.desc = desc
|
||||
new_mimic.icon_state = "cmimicopen"
|
||||
new_mimic.icon_living = "cmimicopen"
|
||||
else
|
||||
return ..()
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/structure/closet/crate/mimic/closet/ex_act(severity) //Stores Mimic Contents for later
|
||||
for(var/obj/O in src.contents)
|
||||
qdel(O)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/crate/mimic/closet/damage(var/damage)
|
||||
if(contents.len)
|
||||
visible_message("<font color='red'><b>The [src] makes out a crunchy noise as its contents are destroyed!</b></font>")
|
||||
for(var/obj/O in src.contents)
|
||||
qdel(O)
|
||||
..()
|
||||
|
||||
/obj/structure/closet/crate/mimic/closet/safe
|
||||
mimic_chance = 0
|
||||
mimic_active = FALSE
|
||||
|
||||
/obj/structure/closet/crate/mimic/closet/guaranteed
|
||||
mimic_chance = 100
|
||||
|
||||
/obj/structure/closet/crate/mimic/closet/dangerous
|
||||
mimic_chance = 70
|
||||
|
||||
/obj/structure/closet/crate/mimic/closet/cointoss
|
||||
mimic_chance = 50
|
||||
|
||||
/mob/living/simple_mob/vore/aggressive/mimic/closet
|
||||
name = "old closet"
|
||||
desc = "It's a basic storage unit. It seems awfully rickety."
|
||||
icon_state = "cmimicopen"
|
||||
icon_living = "cmimicopen"
|
||||
|
||||
maxHealth = 150
|
||||
health = 150
|
||||
movement_cooldown = 7
|
||||
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 20
|
||||
attack_armor_pen = 25 // NOM NOM
|
||||
|
||||
armor = list(
|
||||
"melee" = 10,
|
||||
"bullet" = 20,
|
||||
"laser" = 20,
|
||||
"energy" = 20,
|
||||
"bomb" = 20,
|
||||
"bio" = 100,
|
||||
"rad" = 100)
|
||||
|
||||
/mob/living/simple_mob/vore/aggressive/mimic/closet/will_show_tooltip()
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_mob/vore/aggressive/mimic/closet/death()
|
||||
..()
|
||||
if(real_crate)
|
||||
real_crate.forceMove(loc)
|
||||
real_crate = null
|
||||
qdel(src)
|
||||
|
||||
//Floor Mimics... Because mimics you have to interact with to activate was not enough...
|
||||
|
||||
/obj/effect/floormimic //As Floor Mimics are triggered by bumps rather than click interaction... They are effects rather than structures
|
||||
name = "loose wooden floor"
|
||||
desc = "The boards here look rather loose."
|
||||
density = 0
|
||||
anchored = 1
|
||||
icon = 'icons/mob/animal_ch.dmi'
|
||||
icon_state = "wmimic"
|
||||
var/mimic_chance = 30
|
||||
var/mimic_active = TRUE
|
||||
var/mimic_type = /mob/living/simple_mob/vore/aggressive/mimic/floor
|
||||
|
||||
/obj/effect/floormimic/Crossed(atom/movable/AM)
|
||||
. = ..()
|
||||
tryTrigger(AM)
|
||||
|
||||
/obj/effect/floormimic/Bumped(atom/movable/AM)
|
||||
. = ..()
|
||||
tryTrigger(AM)
|
||||
|
||||
/obj/effect/floormimic/proc/tryTrigger(atom/movable/victim)
|
||||
if(!isliving(victim))
|
||||
return
|
||||
var/mob/living/L = victim
|
||||
if(L.hovering)
|
||||
return
|
||||
awaken(L)
|
||||
|
||||
/obj/effect/floormimic/proc/awaken(mob/living/L)
|
||||
if(!mimic_active)
|
||||
qdel(src)
|
||||
return
|
||||
mimic_active = FALSE
|
||||
if(!prob(mimic_chance))
|
||||
qdel(src)
|
||||
return
|
||||
var/mob/living/simple_mob/vore/aggressive/mimic/floor/new_mimic = new mimic_type(drop_location())
|
||||
visible_message("<span class='boldwarning'>The [new_mimic] suddenly growls beneath you as it turns out to be a mimic!</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/floormimic/attackby(obj/item/I, mob/living/L)
|
||||
if(mimic_active)
|
||||
awaken(L)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/effect/floormimic/ex_act(severity)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/floormimic/safe
|
||||
mimic_chance = 0
|
||||
|
||||
/obj/effect/floormimic/guaranteed
|
||||
mimic_chance = 100
|
||||
|
||||
/obj/effect/floormimic/dangerous
|
||||
mimic_chance = 70
|
||||
|
||||
/obj/effect/floormimic/cointoss
|
||||
mimic_chance = 50
|
||||
|
||||
/mob/living/simple_mob/vore/aggressive/mimic/floor
|
||||
name = "loose wooden floor"
|
||||
desc = "The boards here look rather loose."
|
||||
icon_state = "wmimicopen"
|
||||
icon_living = "wmimicopen"
|
||||
|
||||
faction = "mimic"
|
||||
|
||||
maxHealth = 100
|
||||
health = 100
|
||||
movement_cooldown = 5
|
||||
|
||||
response_help = "touches"
|
||||
response_disarm = "pushes"
|
||||
response_harm = "hits"
|
||||
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 5
|
||||
base_attack_cooldown = 5
|
||||
|
||||
/mob/living/simple_mob/vore/aggressive/mimic/floor/death()
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/floormimic/tile
|
||||
name = "loose floor tiles"
|
||||
desc = "The tiles here look rather loose."
|
||||
density = FALSE
|
||||
anchored = TRUE
|
||||
icon_state = "tmimic"
|
||||
mimic_type = /mob/living/simple_mob/vore/aggressive/mimic/floor/tile
|
||||
|
||||
/obj/effect/floormimic/tile/safe
|
||||
mimic_chance = 0
|
||||
|
||||
/obj/effect/floormimic/tile/guaranteed
|
||||
mimic_chance = 100
|
||||
|
||||
/obj/effect/floormimic/tile/dangerous
|
||||
mimic_chance = 70
|
||||
|
||||
/obj/effect/floormimic/tile/cointoss
|
||||
mimic_chance = 50
|
||||
|
||||
/mob/living/simple_mob/vore/aggressive/mimic/floor/tile
|
||||
name = "loose floor tiles"
|
||||
desc = "The tiles here look rather loose."
|
||||
icon_state = "tmimicopen"
|
||||
icon_living = "tmimicopen"
|
||||
|
||||
faction = "mimic"
|
||||
|
||||
maxHealth = 125
|
||||
health = 125
|
||||
movement_cooldown = 7
|
||||
|
||||
response_help = "touches"
|
||||
response_disarm = "pushes"
|
||||
response_harm = "hits"
|
||||
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
base_attack_cooldown = 10
|
||||
|
||||
/obj/effect/floormimic/plating
|
||||
name = "loose plating"
|
||||
desc = "The plating here looks rather loose."
|
||||
density = FALSE
|
||||
anchored = TRUE
|
||||
icon_state = "pmimic"
|
||||
mimic_type = /mob/living/simple_mob/vore/aggressive/mimic/floor/plating
|
||||
|
||||
/obj/effect/floormimic/plating/safe
|
||||
mimic_chance = 0
|
||||
|
||||
/obj/effect/floormimic/plating/guaranteed
|
||||
mimic_chance = 100
|
||||
|
||||
/obj/effect/floormimic/plating/dangerous
|
||||
mimic_chance = 70
|
||||
|
||||
/obj/effect/floormimic/plating/cointoss
|
||||
mimic_chance = 50
|
||||
|
||||
/mob/living/simple_mob/vore/aggressive/mimic/floor/plating
|
||||
name = "loose plating"
|
||||
desc = "The plating here look rather loose."
|
||||
icon_state = "pmimicopen"
|
||||
icon_living = "pmimicopen"
|
||||
|
||||
faction = "mimic"
|
||||
|
||||
maxHealth = 150
|
||||
health = 150
|
||||
movement_cooldown = 7
|
||||
|
||||
response_help = "touches"
|
||||
response_disarm = "pushes"
|
||||
response_harm = "hits"
|
||||
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
base_attack_cooldown = 10
|
||||
attack_armor_pen = 50
|
||||
7
code/modules/projectiles/ammunition/rounds_ch.dm
Normal 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)
|
||||
2
code/modules/projectiles/gun_ch.dm
Normal file
@@ -0,0 +1,2 @@
|
||||
/obj/item/weapon/gun
|
||||
var/holy = 0 //For Divinely blessed guns
|
||||
@@ -80,3 +80,33 @@
|
||||
matter = list("metal" = 350, "glass" = 50)
|
||||
preserve_item = 1
|
||||
origin_tech = list(TECH_POWER = 6)
|
||||
|
||||
/obj/item/weapon/gun/energy/tommylaser
|
||||
name = "M-2421 'Tommy-Laser'"
|
||||
desc = "A automatic laser weapon resembling a Tommy-Gun. Designed by Cybersun Industries to be a man portable supressive fire laser weapon."
|
||||
icon_state = "tommylas"
|
||||
item_state = "tommylas"
|
||||
w_class = ITEMSIZE_LARGE
|
||||
slot_flags = SLOT_BACK
|
||||
charge_cost = 60 // 40 shots, lay down the firepower
|
||||
projectile_type = /obj/item/projectile/beam/weaklaser
|
||||
cell_type = /obj/item/weapon/cell/device/weapon
|
||||
origin_tech = list(TECH_COMBAT = 5, TECH_MAGNET = 5, TECH_ILLEGAL = 3)
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="single shot", burst = 1, fire_delay=4, move_delay=null, burst_accuracy = null, dispersion = null),
|
||||
list(mode_name="three shot bursts", burst=3, fire_delay=10 , move_delay=4, burst_accuracy=list(65,65,65), dispersion=list(1,1,1)),
|
||||
list(mode_name="short bursts", burst=5, fire_delay=10 ,move_delay=6, burst_accuracy = list(65,65,65,65,65), dispersion = list(4,4,4,4,4)),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/zip
|
||||
name = "Zip-Las"
|
||||
desc = "A homemade (and somehow safe) laser gun designed around shooting single powerful laser beam draining the cell entirely. Better not miss and better have spare cells."
|
||||
icon = 'icons/obj/gun_ch.dmi'
|
||||
icon_state = "ziplas"
|
||||
item_state = "ziplas"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
slot_flags = SLOT_BELT|SLOT_BACK
|
||||
charge_cost = 1500 //You got 1 shot...
|
||||
projectile_type = /obj/item/projectile/beam/heavylaser //But it hurts a lot
|
||||
cell_type = /obj/item/weapon/cell/device/weapon
|
||||
27
code/modules/projectiles/guns/projectile/automatic_ch.dm
Normal file
@@ -0,0 +1,27 @@
|
||||
/obj/item/weapon/gun/projectile/automatic/fal
|
||||
name = "FN-FAL"
|
||||
desc = "A 20th century Assault Rifle originally designed by Fabrique National. Famous for its use by mercs in grinding proxy wars in backwater nations. This reproduction was probably made for similar purposes."
|
||||
icon = 'icons/obj/gun_ch.dmi'
|
||||
icon_state = "fal"
|
||||
item_state = "fal"
|
||||
w_class = ITEMSIZE_LARGE
|
||||
force = 10
|
||||
caliber = "7.62mm"
|
||||
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4)
|
||||
slot_flags = SLOT_BACK
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/m762m
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m762, /obj/item/ammo_magazine/m762m)
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/a762
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="2-round bursts", burst=2, fire_delay=null, move_delay=6, burst_accuracy=list(60,35), dispersion=list(0.0, 0.6))
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/fal/update_icon(var/ignore_inhands)
|
||||
..()
|
||||
if(ammo_magazine)
|
||||
icon_state = initial(icon_state)
|
||||
else
|
||||
icon_state = "[initial(icon_state)]-empty"
|
||||
@@ -0,0 +1,8 @@
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/vox_hunting
|
||||
name = "vox hunting rifle"
|
||||
desc = "This ancient rifle bears traces of an assembly meant to house power cells, implying it used to fire energy beams. It has since been crudely modified to fire standard 7.62mm rounds."
|
||||
icon_state = "vox_hunting"
|
||||
item_state = "vox_hunting"
|
||||
ammo_type = /obj/item/ammo_casing/a762
|
||||
throwforce = 10
|
||||
force = 20
|
||||
35
code/modules/projectiles/guns/projectile/shotgun_ch.dm
Normal file
@@ -0,0 +1,35 @@
|
||||
/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 = 'icons/obj/gun_ch.dmi'
|
||||
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
|
||||
sawn_off = 1
|
||||
|
||||
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
|
||||
sawn_off = 1
|
||||
icon = 'icons/obj/gun_ch.dmi'
|
||||
icon_state = "shotpistol"
|
||||
accuracy = 40
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn/alt/holy
|
||||
ammo_type = /obj/item/ammo_casing/a12g/silver
|
||||
holy = 1
|
||||
@@ -412,3 +412,16 @@ only use the hollow_point and armor_penetration values.*/
|
||||
|
||||
/obj/item/projectile/bullet/gyro
|
||||
old_bullet_act = TRUE
|
||||
|
||||
/obj/item/projectile/bullet/pistol/medium/ap/suppressor // adminspawn only
|
||||
name = "suppressor bullet" // this guy is Important and also Hates You
|
||||
fire_sound = 'sound/weapons/doompistol.ogg' // converted from .wavs extracted from doom 2
|
||||
damage = 10 // high rof kinda fucked up lets be real
|
||||
agony = 10 // brute easily heals, agony not so much
|
||||
armor_penetration = 30 // reduces shield blockchance
|
||||
accuracy = -20 // he do miss actually
|
||||
speed = 0.4 // if the pathfinder gets a funny burst rifle, they deserve a rival
|
||||
// that's 2x projectile speed btw
|
||||
|
||||
/obj/item/projectile/bullet/pistol/medium/ap/suppressor/turbo // spicy boys
|
||||
speed = 0.2 // this is 4x projectile speed
|
||||
15
code/modules/projectiles/projectile_ch.dm
Normal file
@@ -0,0 +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
|
||||
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 322 KiB |
BIN
icons/mob/items/64x64_lefthand_ch.dmi
Normal file
|
After Width: | Height: | Size: 918 B |
BIN
icons/mob/items/64x64_righthand_ch.dmi
Normal file
|
After Width: | Height: | Size: 925 B |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 4.5 KiB |
BIN
sound/h_sounds/breathing.ogg
Normal file
BIN
sound/weapons/doompistol.ogg
Normal file
BIN
sound/weapons/weaponsounds_alienlaser.ogg
Normal file
BIN
sound/weapons/weaponsounds_heavypistolshot.ogg
Normal file
BIN
sound/weapons/weaponsounds_heavyrifleshot.ogg
Normal file
BIN
sound/weapons/weaponsounds_lasermid.ogg
Normal file
BIN
sound/weapons/weaponsounds_laserstrong.ogg
Normal file
BIN
sound/weapons/weaponsounds_laserstrongALT.ogg
Normal file
BIN
sound/weapons/weaponsounds_laserweak.ogg
Normal file
BIN
sound/weapons/weaponsounds_pistolshot.ogg
Normal file
BIN
sound/weapons/weaponsounds_rifleshot.ogg
Normal file
BIN
sound/weapons/weaponsounds_shotgunshot.ogg
Normal file
BIN
sound/weapons/weaponsounds_smallpistolshot.ogg
Normal file
@@ -1557,6 +1557,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"
|
||||
@@ -1868,6 +1869,7 @@
|
||||
#include "code\modules\ai\ai_holder_targeting_vr.dm"
|
||||
#include "code\modules\ai\interfaces.dm"
|
||||
#include "code\modules\ai\say_list.dm"
|
||||
#include "code\modules\ai\say_list_ch.dm"
|
||||
#include "code\modules\ai\ai_holder_subtypes\simple_mob_ai.dm"
|
||||
#include "code\modules\ai\ai_holder_subtypes\simple_mob_ai_ch.dm"
|
||||
#include "code\modules\ai\ai_holder_subtypes\simple_mob_ai_vr.dm"
|
||||
@@ -2067,6 +2069,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"
|
||||
@@ -2824,6 +2827,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"
|
||||
@@ -3213,6 +3217,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"
|
||||
@@ -3231,14 +3236,19 @@
|
||||
#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\posessed_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"
|
||||
@@ -3277,6 +3287,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"
|
||||
@@ -3317,6 +3328,7 @@
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\leopardmander_ch.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\lizardman.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\mimic.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\mimic_ch.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\oregrub.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\otie.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\panther.dm"
|
||||
@@ -3732,12 +3744,15 @@
|
||||
#include "code\modules\projectiles\broken.dm"
|
||||
#include "code\modules\projectiles\dnalocking.dm"
|
||||
#include "code\modules\projectiles\gun.dm"
|
||||
#include "code\modules\projectiles\gun_ch.dm"
|
||||
#include "code\modules\projectiles\projectile.dm"
|
||||
#include "code\modules\projectiles\projectile_ch.dm"
|
||||
#include "code\modules\projectiles\ammunition\magazines.dm"
|
||||
#include "code\modules\projectiles\ammunition\magazines_vr.dm"
|
||||
#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"
|
||||
@@ -3802,9 +3817,11 @@
|
||||
#include "code\modules\projectiles\guns\magnetic\magnetic_railgun_ch.dm"
|
||||
#include "code\modules\projectiles\guns\magnetic\magnetic_railgun_vr.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\automatic.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\automatic_ch.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\automatic_vr.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\automatic_yw.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\boltaction.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\boltaction_ch.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\boltaction_vr.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\caseless.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\contender.dm"
|
||||
@@ -3818,6 +3835,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"
|
||||
|
||||