mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-22 04:22:39 +01:00
Powerful Mechs (#12193)
This commit is contained in:
@@ -54,6 +54,7 @@
|
||||
#include "code\__defines\modular_guns.dm"
|
||||
#include "code\__defines\obj.dm"
|
||||
#include "code\__defines\overmap.dm"
|
||||
#include "code\__defines\projectiles.dm"
|
||||
#include "code\__defines\psi.dm"
|
||||
#include "code\__defines\qdel.dm"
|
||||
#include "code\__defines\radio.dm"
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
// IFF values
|
||||
#define IFF_DEFAULT "station"
|
||||
#define IFF_TCFL "tcfl"
|
||||
#define IFF_SYNDICATE "syndicate"
|
||||
#define IFF_MERCENARY "mercenary"
|
||||
#define IFF_RAIDER "raider"
|
||||
#define IFF_LONER "loner"
|
||||
#define IFF_BURGLAR "burglar"
|
||||
#define IFF_CULTIST "cultist"
|
||||
#define IFF_BLUESPACE "bluespace"
|
||||
#define IFF_DEATHSQUAD "deathsquad"
|
||||
#define IFF_ERIDANI "eridani"
|
||||
#define IFF_HEPH "hephaestus"
|
||||
#define IFF_ZENGHU "zenghu"
|
||||
#define IFF_ZAVOD "zavodskoi"
|
||||
#define IFF_EE "einstein"
|
||||
#define IFF_FSF "freesolarianfleets"
|
||||
#define IFF_IAC "interstellaraidcorps"
|
||||
#define IFF_KATAPHRACT "kataphract"
|
||||
#define IFF_FREELANCER "freelancer"
|
||||
#define IFF_LANCER "lancer"
|
||||
#define IFF_SOL "solarian"
|
||||
#define IFF_HIGHLANDER "highlander"
|
||||
@@ -37,6 +37,8 @@
|
||||
/obj/item/grenade/flashbang = 1
|
||||
)
|
||||
|
||||
id_iff = IFF_ERIDANI
|
||||
|
||||
/datum/outfit/admin/ert/ap_eridani/get_id_access()
|
||||
return get_distress_access()
|
||||
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
|
||||
var/syndie = FALSE
|
||||
|
||||
id_iff = IFF_DEATHSQUAD
|
||||
|
||||
/datum/outfit/admin/deathsquad/leader
|
||||
name = "Asset Protection Lead"
|
||||
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
accessory = /obj/item/clothing/accessory/holster/hip/brown
|
||||
accessory_contents = list(/obj/item/gun/projectile/pistol/sol = 1)
|
||||
|
||||
id_iff = IFF_FSF
|
||||
|
||||
/datum/outfit/admin/ert/fsf/get_id_access()
|
||||
return get_distress_access_lesser()
|
||||
|
||||
|
||||
@@ -36,6 +36,8 @@
|
||||
/obj/item/reagent_containers/glass/bottle/perconol = 1
|
||||
)
|
||||
|
||||
id_iff = IFF_IAC
|
||||
|
||||
/datum/outfit/admin/ert/iac/get_id_access()
|
||||
return get_distress_access()
|
||||
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
/obj/item/storage/box/donkpockets = 1
|
||||
)
|
||||
|
||||
id_iff = IFF_KATAPHRACT
|
||||
|
||||
/datum/outfit/admin/ert/kataphract/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
if(H?.w_uniform)
|
||||
H.w_uniform.color = pick("#42b360", "#b68029", "#5574c2")
|
||||
|
||||
@@ -32,6 +32,8 @@
|
||||
/obj/item/material/knife/trench = 1
|
||||
)
|
||||
|
||||
id_iff = IFF_FREELANCER
|
||||
|
||||
/datum/outfit/admin/ert/mercenary/get_id_access()
|
||||
return get_distress_access_lesser()
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
mask = /obj/item/clothing/mask/gas/syndicate
|
||||
l_ear = /obj/item/device/radio/headset/syndicate
|
||||
glasses = /obj/item/clothing/glasses/thermal
|
||||
id = /obj/item/card/id/syndicate_ert
|
||||
id = /obj/item/card/id/syndicate/ert
|
||||
l_pocket = /obj/item/ammo_magazine/c45m
|
||||
l_hand = /obj/item/gun/projectile/automatic/rifle/sts35
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
|
||||
syndie = TRUE
|
||||
|
||||
id_iff = IFF_SYNDICATE
|
||||
|
||||
/datum/outfit/admin/deathsquad/syndicate/leader
|
||||
name = "Syndicate Commando Lead"
|
||||
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
|
||||
backpack_contents = null
|
||||
|
||||
id_iff = IFF_TCFL
|
||||
|
||||
/datum/outfit/admin/ert/legion/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
. = ..()
|
||||
if(isvaurca(H))
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
)
|
||||
|
||||
id = /obj/item/card/id/syndicate
|
||||
id_iff = IFF_LANCER
|
||||
var/id_access = "Lancer"
|
||||
|
||||
/datum/outfit/admin/event/lance/post_equip(mob/living/carbon/human/H, visualsOnly)
|
||||
@@ -141,6 +142,8 @@
|
||||
accessory = /obj/item/clothing/accessory/holster/hip/brown
|
||||
accessory_contents = list(/obj/item/gun/projectile/pistol/sol = 1)
|
||||
|
||||
id_iff = IFF_SOL
|
||||
|
||||
/datum/outfit/admin/event/sol_marine/heavy
|
||||
name = "Heavy Solarian Marine"
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
r_pocket = /obj/item/cloaking_device
|
||||
id = /obj/item/card/id/syndicate
|
||||
pda = /obj/item/modular_computer/handheld/pda/command
|
||||
id_iff = IFF_SYNDICATE
|
||||
|
||||
/datum/outfit/admin/killer/assassin/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
var/obj/item/storage/secure/briefcase/sec_briefcase = new(H)
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
/obj/item/melee/baton/loaded = 1,
|
||||
/obj/item/grenade/flashbang = 2
|
||||
)
|
||||
id_iff = IFF_HEPH
|
||||
|
||||
/datum/outfit/admin/megacorp/hephaestus_trooper/heavy
|
||||
name = "Hephaestus Heavy Asset Protection"
|
||||
@@ -68,6 +69,7 @@
|
||||
/obj/item/melee/baton/loaded = 1,
|
||||
/obj/item/grenade/flashbang = 2
|
||||
)
|
||||
id_iff = IFF_ZENGHU
|
||||
|
||||
/datum/outfit/admin/megacorp/zenghu_trooper/heavy
|
||||
name = "Zeng Hu Pharmaceuticals Heavy Asset Protection"
|
||||
@@ -111,6 +113,7 @@
|
||||
/obj/item/ammo_magazine/mc9mmt = 2,
|
||||
/obj/item/ammo_magazine/mc9mm = 3
|
||||
)
|
||||
id_iff = IFF_ZAVOD
|
||||
|
||||
/datum/outfit/admin/megacorp/zavodskoi_trooper/heavy
|
||||
name = "Zavodskoi Interstellar Heavy Asset Protection"
|
||||
@@ -152,4 +155,5 @@
|
||||
/obj/item/grenade/flashbang = 2,
|
||||
/obj/item/handcuffs = 2,
|
||||
/obj/item/grenade/frag = 1
|
||||
)
|
||||
)
|
||||
id_iff = IFF_EE
|
||||
@@ -23,6 +23,8 @@
|
||||
/obj/item/ammo_magazine/a454 = 2,
|
||||
/obj/item/shield/energy/legion = 1
|
||||
)
|
||||
|
||||
id_iff = IFF_TCFL
|
||||
var/id_access = "NanoTrasen Representative"
|
||||
|
||||
/datum/outfit/admin/tcfl/get_id_access()
|
||||
|
||||
@@ -103,6 +103,8 @@
|
||||
var/double_headset = /obj/item/device/radio/headset/alt/double
|
||||
var/wrist_radio = /obj/item/device/radio/headset/wrist
|
||||
|
||||
var/id_iff = IFF_DEFAULT // when spawning in, the ID will be set to this iff, preventing friendly fire
|
||||
|
||||
var/internals_slot = null //ID of slot containing a gas tank
|
||||
var/list/backpack_contents = list() //In the list(path=count,otherpath=count) format
|
||||
var/list/accessory_contents = list()
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
/obj/item/device/multitool = 1
|
||||
)
|
||||
|
||||
id_iff = IFF_SYNDICATE
|
||||
|
||||
var/id_access = "Syndicate Operative"
|
||||
var/uplink_uses = DEFAULT_TELECRYSTAL_AMOUNT
|
||||
|
||||
@@ -155,6 +157,8 @@
|
||||
/obj/item/reagent_containers/pill/cyanide = 1
|
||||
)
|
||||
|
||||
id_iff = IFF_MERCENARY
|
||||
|
||||
/datum/outfit/admin/syndicate/mercenary/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
. = ..()
|
||||
if(visualsOnly)
|
||||
@@ -176,6 +180,7 @@
|
||||
/obj/item/device/multitool/hacktool = 1
|
||||
)
|
||||
|
||||
id_iff = IFF_LONER
|
||||
id_access = "Lone Operative"
|
||||
|
||||
/datum/outfit/admin/syndicate/raider
|
||||
@@ -318,7 +323,9 @@
|
||||
/obj/item/clothing/glasses/thermal,
|
||||
/obj/item/clothing/glasses/thermal/aviator
|
||||
)
|
||||
|
||||
id = /obj/item/storage/wallet/random
|
||||
id_iff = IFF_RAIDER
|
||||
|
||||
accessory = /obj/item/clothing/accessory/storage/webbing
|
||||
|
||||
@@ -418,6 +425,8 @@
|
||||
|
||||
backpack_contents = list()
|
||||
|
||||
id_iff = IFF_BURGLAR
|
||||
|
||||
/datum/outfit/admin/syndicate/burglar/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
. = ..()
|
||||
if(visualsOnly)
|
||||
@@ -488,6 +497,7 @@
|
||||
l_pocket = /obj/item/pinpointer
|
||||
|
||||
id = /obj/item/card/id/highlander
|
||||
id_iff = IFF_HIGHLANDER
|
||||
|
||||
/datum/outfit/admin/highlander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
. = ..()
|
||||
@@ -517,6 +527,8 @@
|
||||
|
||||
r_hand = /obj/item/melee/cultblade
|
||||
|
||||
id_iff = IFF_CULTIST
|
||||
|
||||
/datum/outfit/admin/syndicate/cultist/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
return
|
||||
|
||||
@@ -547,6 +559,8 @@
|
||||
accessory = /obj/item/clothing/accessory/storage/webbing
|
||||
backpack_contents = list()
|
||||
|
||||
id_iff = IFF_BLUESPACE
|
||||
|
||||
/datum/outfit/admin/syndicate/raider_techno/equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
var/list/loadouts = list("Nature", "Techno", "Cobra", "Brawler", "Shimmer")
|
||||
if(H.gender in list(FEMALE, PLURAL, NEUTER))
|
||||
@@ -617,6 +631,7 @@
|
||||
allow_backbag_choice = FALSE
|
||||
|
||||
l_ear = /obj/item/device/radio/headset/bluespace
|
||||
id_iff = IFF_BLUESPACE
|
||||
|
||||
/datum/outfit/admin/techomancer
|
||||
name = "Technomancer"
|
||||
@@ -634,6 +649,8 @@
|
||||
l_pocket = /obj/item/technomancer_catalog
|
||||
|
||||
id = /obj/item/card/id/bluespace
|
||||
id_iff = IFF_BLUESPACE
|
||||
|
||||
var/id_assignment = "Technomagus"
|
||||
|
||||
/datum/outfit/admin/techomancer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
|
||||
@@ -7,7 +7,7 @@ var/datum/antagonist/deathsquad/mercenary/commandos
|
||||
role_text_plural = "Commandos"
|
||||
welcome_text = "You are in the employ of a criminal syndicate hostile to corporate interests."
|
||||
antag_sound = 'sound/effects/antag_notice/deathsquid_alert.ogg'
|
||||
id_type = /obj/item/card/id/syndicate_ert
|
||||
id_type = /obj/item/card/id/syndicate/ert
|
||||
flags = ANTAG_NO_ROUNDSTART_SPAWN
|
||||
|
||||
faction = "syndicate"
|
||||
|
||||
@@ -121,6 +121,8 @@ var/const/NO_EMAG_ACT = -50
|
||||
var/dorm = 0 // determines if this ID has claimed a dorm already
|
||||
var/datum/ntnet_user/chat_user
|
||||
|
||||
var/iff_faction = IFF_DEFAULT
|
||||
|
||||
/obj/item/card/id/Destroy()
|
||||
mob = null
|
||||
return ..()
|
||||
@@ -367,7 +369,7 @@ var/const/NO_EMAG_ACT = -50
|
||||
item_state = "gold_id"
|
||||
overlay_state = "gold"
|
||||
|
||||
/obj/item/card/id/syndicate_command
|
||||
/obj/item/card/id/syndicate/command
|
||||
name = "syndicate ID card"
|
||||
desc = "An ID straight from the Syndicate."
|
||||
icon_state = "dark"
|
||||
@@ -375,14 +377,14 @@ var/const/NO_EMAG_ACT = -50
|
||||
assignment = "Syndicate Overlord"
|
||||
access = list(access_syndicate, access_external_airlocks)
|
||||
|
||||
/obj/item/card/id/syndicate_ert
|
||||
/obj/item/card/id/syndicate/ert
|
||||
name = "\improper Syndicate Commando ID"
|
||||
assignment = "Commando"
|
||||
icon_state = "centcom"
|
||||
|
||||
/obj/item/card/id/syndicate_ert/New()
|
||||
/obj/item/card/id/syndicate/ert/Initialize()
|
||||
. = ..()
|
||||
access = get_all_accesses()
|
||||
..()
|
||||
|
||||
/obj/item/card/id/syndicate/raider
|
||||
name = "passport"
|
||||
@@ -602,12 +604,14 @@ var/const/NO_EMAG_ACT = -50
|
||||
desc = "A stylized plastic card, belonging to one of the many specialists at Einstein Engines."
|
||||
icon_state = "einstein_card"
|
||||
overlay_state = "einstein_card"
|
||||
iff_faction = IFF_EE
|
||||
|
||||
/obj/item/card/id/bluespace
|
||||
name = "bluespace identification card"
|
||||
desc = "A bizarre imitation of Nanotrasen identification cards. It seems to function normally as well."
|
||||
desc_antag = "Access can be copied from other ID cards by clicking on them."
|
||||
icon_state = "crystalid"
|
||||
iff_faction = IFF_BLUESPACE
|
||||
|
||||
/obj/item/card/id/bluespace/update_name()
|
||||
return
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "agent card"
|
||||
assignment = "Agent"
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
iff_faction = IFF_SYNDICATE
|
||||
can_copy_access = TRUE
|
||||
access_copy_msg = "The microscanner activates as you pass it over the ID, copying its access."
|
||||
var/charge = 10000
|
||||
|
||||
@@ -7,6 +7,14 @@
|
||||
restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND, HARDPOINT_LEFT_SHOULDER, HARDPOINT_RIGHT_SHOULDER)
|
||||
restricted_software = list(MECH_SOFTWARE_WEAPONS)
|
||||
|
||||
/obj/item/mecha_equipment/mounted_system/combat/CtrlClick(mob/user)
|
||||
if(owner && istype(holding, /obj/item/gun))
|
||||
var/obj/item/gun/G = holding
|
||||
G.iff_capable = !G.iff_capable
|
||||
to_chat(user, SPAN_NOTICE("You [G.iff_capable ? "en" : "dis"]able \the [src]'s IFF systems!"))
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/mecha_equipment/mounted_system/combat/taser
|
||||
name = "mounted electrolaser carbine"
|
||||
desc = "A dual fire mode electrolaser system connected to the exosuit's targetting system."
|
||||
@@ -30,7 +38,7 @@
|
||||
name = "mounted machinegun"
|
||||
desc = "An exosuit-mounted automatic weapon. Handle with care."
|
||||
icon_state = "mecha_ballistic"
|
||||
holding_type = /obj/item/gun/energy/mountedsmg
|
||||
holding_type = /obj/item/gun/energy/mountedsmg/mech
|
||||
|
||||
/obj/item/mecha_equipment/mounted_system/combat/pulse
|
||||
name = "heavy pulse cannon"
|
||||
@@ -72,16 +80,19 @@
|
||||
use_external_power = TRUE
|
||||
self_recharge = TRUE
|
||||
has_safety = FALSE
|
||||
projectile_type = /obj/item/projectile/beam/midlaser/mech
|
||||
|
||||
/obj/item/gun/energy/pulse/mounted/mech
|
||||
use_external_power = TRUE
|
||||
self_recharge = TRUE
|
||||
has_safety = FALSE
|
||||
projectile_type = /obj/item/projectile/beam/pulse/mech
|
||||
|
||||
/obj/item/gun/energy/xray/mounted/mech
|
||||
use_external_power = TRUE
|
||||
self_recharge = TRUE
|
||||
has_safety = FALSE
|
||||
projectile_type = /obj/item/projectile/beam/xray/mech
|
||||
|
||||
/*Launchers*/
|
||||
|
||||
|
||||
@@ -114,4 +114,10 @@
|
||||
else
|
||||
animate(get_filter("INCORPBLUR"), time = 1 SECOND, size = 1, flags = ANIMATION_PARALLEL)
|
||||
animate(src, time = 1 SECOND, alpha = initial(alpha), flags = ANIMATION_PARALLEL)
|
||||
remove_filter("INCORPBLUR")
|
||||
remove_filter("INCORPBLUR")
|
||||
|
||||
/mob/living/heavy_vehicle/get_organ_name_from_zone(var/def_zone)
|
||||
var/obj/item/mech_component/MC = zoneToComponent(def_zone)
|
||||
if(MC)
|
||||
return MC.name
|
||||
return ..()
|
||||
@@ -295,7 +295,7 @@ var/list/worths = list(
|
||||
/obj/item/card/id/silver = 200,
|
||||
/obj/item/card/id/gold = 5000,
|
||||
/obj/item/card/id/captains_spare = 5000,
|
||||
/obj/item/card/id/syndicate_command = 7000,
|
||||
/obj/item/card/id/syndicate/command = 7000,
|
||||
/obj/item/card/id/centcom = 7000,
|
||||
/obj/item/card/id/all_access = 10000,
|
||||
/obj/item/card/id = 30,
|
||||
|
||||
@@ -309,8 +309,14 @@
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/human/get_organ_name_from_zone(var/def_zone)
|
||||
var/obj/item/organ/external/E = organs_by_name[parse_zone(def_zone)]
|
||||
if(E)
|
||||
return E.name
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/is_anti_materiel_vulnerable()
|
||||
if(isSynthetic())
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
return FALSE
|
||||
|
||||
@@ -79,6 +79,9 @@
|
||||
)
|
||||
has_safety = FALSE
|
||||
|
||||
/obj/item/gun/energy/mountedsmg/mech
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/medium/mech
|
||||
|
||||
/obj/item/gun/energy/crossbow/cyborg
|
||||
name = "mounted energy-crossbow"
|
||||
desc = "A weapon favored by mercenary infiltration teams, this one is suited to be used by cyborgs."
|
||||
|
||||
@@ -930,6 +930,9 @@
|
||||
/mob/living/simple_animal/set_respawn_time()
|
||||
set_death_time(ANIMAL, world.time)
|
||||
|
||||
/mob/living/simple_animal/get_organ_name_from_zone(var/def_zone)
|
||||
return pick(organ_names)
|
||||
|
||||
/mob/living/simple_animal/is_anti_materiel_vulnerable()
|
||||
if(isSynthetic())
|
||||
return TRUE
|
||||
|
||||
@@ -1253,4 +1253,7 @@ proc/is_blind(A)
|
||||
name = real_name
|
||||
voice_name = real_name
|
||||
if(mind)
|
||||
mind.name = real_name
|
||||
mind.name = real_name
|
||||
|
||||
/mob/proc/get_organ_name_from_zone(var/def_zone)
|
||||
return parse_zone(def_zone)
|
||||
|
||||
@@ -120,6 +120,8 @@
|
||||
var/has_safety = TRUE
|
||||
var/image/safety_overlay
|
||||
|
||||
var/iff_capable = FALSE // if true, applies the user's ID iff_faction to the projectile
|
||||
|
||||
// sounds n shit
|
||||
var/safetyon_sound = 'sound/weapons/blade_open.ogg'
|
||||
var/safetyoff_sound = 'sound/weapons/blade_close.ogg'
|
||||
|
||||
@@ -99,6 +99,8 @@
|
||||
var/hit_effect
|
||||
var/anti_materiel_potential = 1 //how much the damage of this bullet is increased against mechs
|
||||
|
||||
var/iff // identify friend or foe. will check mob's IDs to see if they match, if they do, won't hit
|
||||
|
||||
/obj/item/projectile/CanPass()
|
||||
return TRUE
|
||||
|
||||
@@ -173,8 +175,17 @@
|
||||
shot_from = launcher.name
|
||||
silenced = launcher.silenced
|
||||
|
||||
if(launcher.iff_capable && user)
|
||||
iff = get_iff_from_user(user)
|
||||
|
||||
return launch_projectile(target, target_zone, user, params, angle_override, forced_spread)
|
||||
|
||||
/obj/item/projectile/proc/get_iff_from_user(var/mob/user)
|
||||
var/obj/item/card/id/ID = user.GetIdCard()
|
||||
if(ID)
|
||||
return ID.iff_faction
|
||||
return null
|
||||
|
||||
//Called when the projectile intercepts a mob. Returns 1 if the projectile hit the mob, 0 if it missed and should keep flying.
|
||||
/obj/item/projectile/proc/attack_mob(var/mob/living/target_mob, var/distance, var/miss_modifier=0)
|
||||
if(!istype(target_mob))
|
||||
@@ -203,14 +214,7 @@
|
||||
if(PROJECTILE_STOPPED)
|
||||
return TRUE
|
||||
|
||||
var/impacted_organ = parse_zone(def_zone)
|
||||
if(isanimal(target_mob))
|
||||
var/mob/living/simple_animal/SA = target_mob
|
||||
impacted_organ = pick(SA.organ_names)
|
||||
else if(ishuman(target_mob))
|
||||
var/mob/living/carbon/human/H = target_mob
|
||||
var/obj/item/organ/external/E = H.organs_by_name[impacted_organ]
|
||||
impacted_organ = E.name
|
||||
var/impacted_organ = target_mob.get_organ_name_from_zone(def_zone)
|
||||
//hit messages
|
||||
if(silenced)
|
||||
to_chat(target_mob, "<span class='danger'>You've been hit in the [impacted_organ] by \a [src]!</span>")
|
||||
@@ -268,15 +272,18 @@
|
||||
if(ismob(A))
|
||||
var/mob/M = A
|
||||
if(isliving(A)) //so ghosts don't stop bullets
|
||||
if(M.dir & get_dir(M, starting)) // only check neckgrab if they're facing in the direction the bullets came from
|
||||
//if they have a neck grab on someone, that person gets hit instead
|
||||
for(var/obj/item/grab/G in list(M.l_hand, M.r_hand))
|
||||
if(!G.affecting.lying && G.state >= GRAB_NECK)
|
||||
visible_message(SPAN_DANGER("\The [M] uses [G.affecting] as a shield!"))
|
||||
if(Collide(G.affecting))
|
||||
return //If Collide() returns 0 (keep going) then we continue on to attack M.
|
||||
if(check_iff(M))
|
||||
passthrough = TRUE
|
||||
else
|
||||
if(M.dir & get_dir(M, starting)) // only check neckgrab if they're facing in the direction the bullets came from
|
||||
//if they have a neck grab on someone, that person gets hit instead
|
||||
for(var/obj/item/grab/G in list(M.l_hand, M.r_hand))
|
||||
if(!G.affecting.lying && G.state >= GRAB_NECK)
|
||||
visible_message(SPAN_DANGER("\The [M] uses [G.affecting] as a shield!"))
|
||||
if(Collide(G.affecting))
|
||||
return //If Collide() returns 0 (keep going) then we continue on to attack M.
|
||||
|
||||
passthrough = !attack_mob(M, distance)
|
||||
passthrough = !attack_mob(M, distance)
|
||||
else
|
||||
passthrough = TRUE
|
||||
else
|
||||
@@ -312,6 +319,14 @@
|
||||
qdel(src)
|
||||
return TRUE
|
||||
|
||||
/obj/item/projectile/proc/check_iff(var/mob/M)
|
||||
if(isnull(iff))
|
||||
return FALSE
|
||||
var/obj/item/card/id/ID = M.GetIdCard()
|
||||
if(ID && (ID.iff_faction == iff))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/projectile/ex_act(var/severity = 2.0)
|
||||
return //explosions probably shouldn't delete projectiles
|
||||
|
||||
|
||||
@@ -50,6 +50,9 @@
|
||||
damage = 35
|
||||
armor_penetration = 10
|
||||
|
||||
/obj/item/projectile/beam/midlaser/mech
|
||||
armor_penetration = 35
|
||||
|
||||
/obj/item/projectile/beam/heavylaser
|
||||
name = "heavy laser"
|
||||
icon_state = "heavylaser"
|
||||
@@ -70,6 +73,10 @@
|
||||
tracer_type = /obj/effect/projectile/tracer/xray
|
||||
impact_type = /obj/effect/projectile/impact/xray
|
||||
|
||||
/obj/item/projectile/beam/xray/mech
|
||||
damage = 40
|
||||
armor_penetration = 75
|
||||
|
||||
/obj/item/projectile/beam/pulse
|
||||
name = "pulse"
|
||||
icon_state = "u_laser"
|
||||
@@ -80,6 +87,10 @@
|
||||
tracer_type = /obj/effect/projectile/tracer/pulse
|
||||
impact_type = /obj/effect/projectile/impact/pulse
|
||||
|
||||
/obj/item/projectile/beam/pulse/mech
|
||||
damage = 45
|
||||
armor_penetration = 40
|
||||
|
||||
/obj/item/projectile/beam/pulse/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(isturf(target))
|
||||
target.ex_act(2)
|
||||
|
||||
@@ -127,6 +127,9 @@
|
||||
/obj/item/projectile/bullet/pistol/medium
|
||||
damage = 30
|
||||
|
||||
/obj/item/projectile/bullet/pistol/medium/mech
|
||||
armor_penetration = 35
|
||||
|
||||
/obj/item/projectile/bullet/pistol/strong
|
||||
damage = 45
|
||||
armor_penetration = 20
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
author: Geeves
|
||||
|
||||
delete-after: True
|
||||
|
||||
changes:
|
||||
- rscadd: "Mech mounted firearms have been buffed. They now deal more damage and pierce through more armor."
|
||||
- rscadd: "Projectiles hitting mechs now state which component they hit rather than using the humanoid limb naming system."
|
||||
- rscadd: "Implemented an IFF system, currently only mech mounted weapons can enable them by cntrl clicking the weapon in the hotbar. IFF weapons will never hit a friendly that has the same IFF ID as you."
|
||||
Reference in New Issue
Block a user