This commit is contained in:
BlackMajor
2021-11-26 15:35:21 +13:00
parent dc0b873268
commit a3bb4b9b5a
15 changed files with 814 additions and 7 deletions

View File

@@ -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"

View File

@@ -0,0 +1,68 @@
//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.")

View File

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

View File

@@ -5,15 +5,15 @@
// 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
movement_cooldown = 2 //CHOMPEdit
icon_state = "syndicate"
icon_living = "syndicate"
icon_dead = "syndicate_dead"
icon_gib = "syndicate_gib"
faction = "syndicate"
movement_cooldown = 4
status_flags = 0
@@ -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)
@@ -98,6 +99,9 @@
/datum/ai_holder/simple_mob/merc/ranged/sniper/max_range(atom/movable/AM)
return holder.ICheckRangedAttack(AM) ? 14 : 1
/datum/ai_holder/simple_mob/merc/ranged/surpressor //CHOMPAdd
conserve_ammo = FALSE //For Surpressive Fire Mercs like the Heavy and Tommy-Las
////////////////////////////////
// Melee
////////////////////////////////
@@ -112,7 +116,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")

View File

@@ -0,0 +1,511 @@
/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/surpressor
//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/surpressor
//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/surpressor
/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
/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.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/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/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.

View File

@@ -0,0 +1,2 @@
/obj/item/weapon/gun
var/holy = 0 //For Divinely blessed guns

View File

@@ -80,3 +80,32 @@
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_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

View File

@@ -0,0 +1,26 @@
/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_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"

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1,3 @@
/obj/item/projectile
/// If this projectile is holy. Silver bullets, etc. Currently no effects.
var/holy = 0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 313 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

View File

@@ -1865,6 +1865,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"
@@ -3224,6 +3225,7 @@
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\pirates.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"
@@ -3720,7 +3722,9 @@
#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"
@@ -3790,9 +3794,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"