mirror of
https://github.com/Citadel-Station-13/Citadel-Station-13-RP.git
synced 2025-12-10 08:37:04 +00:00
the plutonia experience
This commit is contained in:
@@ -83,3 +83,18 @@
|
||||
L.client.spinright()
|
||||
to_chat(R, "<span class='critical'>Gyroscopic failure.</span>")
|
||||
return
|
||||
|
||||
/obj/item/grenade/concussion/frag
|
||||
name = "concussion-frag grenade"
|
||||
desc = "A polymer and steel concussion grenade, optimized for disorienting personnel and being accused of war crimes."
|
||||
icon_state = "concussion-red"
|
||||
var/fragment_types = list(/obj/item/projectile/bullet/pellet/fragment, /obj/item/projectile/bullet/pellet/fragment/strong, /obj/item/projectile/bullet/pellet/fragment/rubber, /obj/item/projectile/bullet/pellet/fragment/rubber/strong)
|
||||
var/num_fragments = 40 //total number of fragments produced by the grenade
|
||||
var/spread_range = 5 // for above and below, see code\game\objects\items\weapons\grenades\explosive.dm
|
||||
|
||||
/obj/item/grenade/concussion/frag/detonate()
|
||||
var/turf/O = get_turf(src)
|
||||
if(!O)
|
||||
return
|
||||
src.fragmentate(O, num_fragments, spread_range, fragment_types)
|
||||
..()
|
||||
|
||||
@@ -97,6 +97,20 @@
|
||||
walk(src, 0) // Because we might have called walk_away, we must stop the walk loop or BYOND keeps an internal reference to us forever.
|
||||
return ..()
|
||||
|
||||
/obj/item/grenade/flashbang/stingbang
|
||||
name = "stingbang"
|
||||
desc = "A hand held grenade, with an adjustable timer, perfect for stopping riots and playing morally unthinkable pranks."
|
||||
icon_state = "timeg"
|
||||
var/fragment_types = list(/obj/item/projectile/bullet/pellet/fragment/rubber, /obj/item/projectile/bullet/pellet/fragment/rubber/strong)
|
||||
var/num_fragments = 45 //total number of fragments produced by the grenade
|
||||
var/spread_range = 6 // for above and below, see code\game\objects\items\weapons\grenades\explosive.dm
|
||||
|
||||
/obj/item/grenade/flashbang/stingbang/detonate()
|
||||
var/turf/O = get_turf(src)
|
||||
if(!O)
|
||||
return
|
||||
src.fragmentate(O, num_fragments, spread_range, fragment_types)
|
||||
..()
|
||||
|
||||
/obj/item/grenade/flashbang/clusterbang//Created by Polymorph, fixed by Sieve
|
||||
desc = "Use of this weapon may constiute a war crime in your area, consult your local Facility Director."
|
||||
|
||||
@@ -54,6 +54,8 @@
|
||||
say_threaten = list("You best leave, this booty is mine.", "No plank to walk on, just walk away.")
|
||||
say_stand_down = list("Good.")
|
||||
say_escalate = list("Yarr! The booty is mine!")
|
||||
threaten_sound = 'sound/weapons/TargetOn.ogg'
|
||||
stand_down_sound = 'sound/weapons/TargetOff.ogg'
|
||||
|
||||
// Mercs!
|
||||
/datum/say_list/merc
|
||||
@@ -71,6 +73,24 @@
|
||||
say_threaten = list("Get out of here!", "Hey! Private Property!")
|
||||
say_stand_down = list("Good.")
|
||||
say_escalate = list("Your funeral!", "Bring it!")
|
||||
threaten_sound = 'sound/weapons/TargetOn.ogg'
|
||||
stand_down_sound = 'sound/weapons/TargetOff.ogg'
|
||||
|
||||
/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.",
|
||||
"If someone doesn't show up for me to shoot today, I swear I'd go apeshit.",
|
||||
"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("Someone's acting mighty bold...")
|
||||
say_got_target = list("Oh, good, I needed more range fodder.", "I'm going to enjoy this.", "I see you.")
|
||||
say_threaten = list("Hoy, private property, fuck off.", "You're acting mighty bold for someone in shooting distance.", "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 they'd push their luck.", "Good call. Don't do it again.", "Harrumph.")
|
||||
say_escalate = list("Oh, I'm gonna enjoy this.", "I'm going to enjoy making you regret that.", "Last mistake you'll make in that sleeve.")
|
||||
|
||||
/datum/say_list/malf_drone
|
||||
speak = list("ALERT.","Hostile-ile-ile entities dee-twhoooo-wected.","Threat parameterszzzz- szzet.","Bring sub-sub-sub-systems uuuup to combat alert alpha-a-a.")
|
||||
@@ -87,10 +107,6 @@
|
||||
threaten_sound = 'sound/effects/turret/move1.wav'
|
||||
stand_down_sound = 'sound/effects/turret/move2.wav'
|
||||
|
||||
/datum/say_list/mercenary
|
||||
threaten_sound = 'sound/weapons/TargetOn.ogg'
|
||||
stand_down_sound = 'sound/weapons/TargetOff.ogg'
|
||||
|
||||
|
||||
/datum/say_list/crab
|
||||
emote_hear = list("clicks")
|
||||
|
||||
@@ -172,8 +172,8 @@
|
||||
|
||||
/mob/living/simple_mob/hostile/syndicate/ranged/space
|
||||
name = "space mercenary" //VOREStation Edit
|
||||
icon_state = "syndicaterangedpsace"
|
||||
icon_living = "syndicaterangedpsace"
|
||||
icon_state = "syndicaterangedspace"
|
||||
icon_living = "syndicaterangedspace"
|
||||
|
||||
speed = 0
|
||||
|
||||
|
||||
@@ -240,9 +240,9 @@
|
||||
|
||||
// Ranged Space Merc
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/space
|
||||
name = "syndicate sommando"
|
||||
icon_state = "syndicaterangedpsace"
|
||||
icon_living = "syndicaterangedpsace"
|
||||
name = "syndicate commando"
|
||||
icon_state = "syndicaterangedspace"
|
||||
icon_living = "syndicaterangedspace"
|
||||
|
||||
movement_cooldown = 0
|
||||
|
||||
@@ -258,9 +258,80 @@
|
||||
|
||||
corpse = /obj/effect/landmark/mobcorpse/syndicatecommando
|
||||
|
||||
loot_list = list(/obj/item/gun/projectile/automatic/c20r = 100)
|
||||
base_attack_cooldown = 5 // Two attacks a second or so.
|
||||
reload_max = 20
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/space/Process_Spacemove(var/check_drift = 0)
|
||||
return
|
||||
|
||||
// suppressors are just assholes and are intended to be a piss poor experience for everyone on both sides
|
||||
|
||||
/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 = "syndicate 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-perkristian.ogg' // converted from a wav taken from http://www.perkristian.net/game_doom-sfx.shtml
|
||||
base_attack_cooldown = 3 // three? attacks a second
|
||||
reload_max = 30 // extended mags
|
||||
special_attack_charges = 5
|
||||
loot_list = list()
|
||||
corpse = null
|
||||
var/deathnade_path = /obj/item/grenade/flashbang
|
||||
|
||||
/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)
|
||||
if(istype(banger, /obj/item/grenade))
|
||||
banger.det_time = 2
|
||||
banger.activate(null)
|
||||
..()
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/space/suppressor/elite // really reconsider why you're spawning this dude
|
||||
name = "elite mercenary suppressor"
|
||||
desc = "Geeze, weren't normal suppressors bad enough? At least if you fade this jerk, you'll still 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/hitscan
|
||||
base_attack_cooldown = 2 // jesus christ
|
||||
grenade_type = /obj/item/grenade/concussion/frag
|
||||
deathnade_path = /obj/item/grenade/flashbang/stingbang
|
||||
|
||||
// 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("<font color='red'><B>[src] blocks [Proj] with its shield!</B></font>")
|
||||
if(Proj.firer)
|
||||
ai_holder.react_to_attack(Proj.firer)
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
////////////////////////////////
|
||||
// PoI Mercs
|
||||
////////////////////////////////
|
||||
@@ -356,7 +427,7 @@
|
||||
loot_list = list(/obj/item/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/melee/sword/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
/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>")
|
||||
@@ -369,7 +440,7 @@
|
||||
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)
|
||||
/mob/living/simple_mob/humanoid/merc/voxpirate/boarder/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(!Proj) return
|
||||
if(prob(35))
|
||||
visible_message("<font color='red'><B>[src] blocks [Proj] with its sword!</B></font>")
|
||||
@@ -379,8 +450,6 @@
|
||||
else
|
||||
..()
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/merc
|
||||
|
||||
////////////////////////////////
|
||||
// Vox Ranged
|
||||
////////////////////////////////
|
||||
|
||||
@@ -114,6 +114,19 @@
|
||||
embed_chance = -1
|
||||
holy = 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-perkristian.ogg' // converted from a wav taken from http://www.perkristian.net/game_doom-sfx.shtml
|
||||
damage = 15 // high rof kinda fucked up lets be real
|
||||
agony = 8 // brute easily heals, agony not so much
|
||||
armor_penetration = 30 // reduces shield blockchance
|
||||
accuracy = 50 // he don't miss
|
||||
speed = 0.4 // if the pathfinder gets a funny burst rifle, they deserve a rival
|
||||
// that's double projectile speed btw
|
||||
|
||||
/obj/item/projectile/bullet/pistol/medium/ap/suppressor/hitscan // spicy boys
|
||||
hitscan = TRUE
|
||||
|
||||
/obj/item/projectile/bullet/pistol/strong // .357 and .44 caliber stuff. High power pistols like the Mateba or Desert Eagle. Sacrifice capacity for power.
|
||||
fire_sound = 'sound/weapons/gunshot4.ogg'
|
||||
damage = 60
|
||||
|
||||
@@ -76,6 +76,18 @@
|
||||
damage = 4
|
||||
armor_penetration = 40
|
||||
|
||||
/obj/item/projectile/bullet/pellet/fragment/rubber
|
||||
name = "stingball shrapnel"
|
||||
damage = 3
|
||||
agony = 8
|
||||
sharp = FALSE
|
||||
edge = FALSE
|
||||
check_armour = "melee"
|
||||
|
||||
/obj/item/projectile/bullet/pellet/fragment/rubber/strong
|
||||
damage = 8
|
||||
agony = 16
|
||||
|
||||
// Tank rupture fragments
|
||||
/obj/item/projectile/bullet/pellet/fragment/tank
|
||||
name = "metal fragment"
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 295 KiB After Width: | Height: | Size: 302 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.4 KiB |
BIN
sound/weapons/doompistol-perkristian.ogg
Normal file
BIN
sound/weapons/doompistol-perkristian.ogg
Normal file
Binary file not shown.
Reference in New Issue
Block a user