From 7201c920cc6af619668e5e615c07eb1620bfa76d Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Mon, 26 Jul 2021 16:46:56 +0200 Subject: [PATCH] [MIRROR] Capture The Flag: Class Warfare (#7108) * Capture The Flag: Class Warfare (#59629) Co-authored-by: Thunder12345 * Capture The Flag: Class Warfare Co-authored-by: Thunder12345 Co-authored-by: Thunder12345 --- code/__DEFINES/dcs/signals.dm | 2 + code/__DEFINES/misc.dm | 1 + code/datums/components/shielded.dm | 27 +- code/datums/elements/delete_on_drop.dm | 21 + .../temporary_visuals/projectiles/impact.dm | 4 + .../temporary_visuals/projectiles/muzzle.dm | 3 + .../temporary_visuals/projectiles/tracer.dm | 4 + code/modules/capture_the_flag/ctf_classes.dm | 227 +++++++ .../modules/capture_the_flag/ctf_equipment.dm | 605 ++++++++++++++++++ .../{capture_the_flag.dm => ctf_game.dm} | 317 ++------- .../{map_loading.dm => ctf_map_loading.dm} | 0 .../medieval_sim/medisim_classes.dm | 50 ++ .../medieval_sim/medisim_game.dm | 74 +++ code/modules/clothing/spacesuits/hardsuit.dm | 86 +-- .../projectiles/ammunition/energy/special.dm | 17 - code/modules/projectiles/guns/ballistic.dm | 1 + .../projectiles/guns/ballistic/automatic.dm | 1 + .../projectiles/guns/energy/special.dm | 39 -- code/modules/projectiles/projectile/beams.dm | 35 - code/modules/shuttle/medisim.dm | 130 ---- icons/hud/radial_ctf.dmi | Bin 0 -> 3190 bytes icons/mob/inhands/weapons/guns_lefthand.dmi | Bin 63048 -> 63739 bytes icons/mob/inhands/weapons/guns_righthand.dmi | Bin 66935 -> 67573 bytes icons/obj/guns/ballistic.dmi | Bin 32803 -> 33844 bytes tgstation.dme | 9 +- 25 files changed, 1066 insertions(+), 587 deletions(-) create mode 100644 code/datums/elements/delete_on_drop.dm create mode 100644 code/modules/capture_the_flag/ctf_classes.dm create mode 100644 code/modules/capture_the_flag/ctf_equipment.dm rename code/modules/capture_the_flag/{capture_the_flag.dm => ctf_game.dm} (68%) rename code/modules/capture_the_flag/{map_loading.dm => ctf_map_loading.dm} (100%) create mode 100644 code/modules/capture_the_flag/medieval_sim/medisim_classes.dm create mode 100644 code/modules/capture_the_flag/medieval_sim/medisim_game.dm create mode 100644 icons/hud/radial_ctf.dmi diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 84a256a78a8..fea07054b5c 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -931,6 +931,8 @@ #define COMSIG_MOB_FIRED_GUN "mob_fired_gun" ///called in /obj/item/gun/process_fire (user, target, params, zone_override) #define COMSIG_GUN_FIRED "gun_fired" +///called in /obj/item/gun/ballistic/process_chamber (casing) +#define COMSIG_CASING_EJECTED "casing_ejected" // /obj/effect/proc_holder/spell signals diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 5ace6d01a99..dec2891b2cb 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -398,6 +398,7 @@ GLOBAL_LIST_INIT(pda_styles, sortList(list(MONO, VT, ORBITRON, SHARE))) #define DUMMY_HUMAN_SLOT_PREFERENCES "dummy_preference_preview" #define DUMMY_HUMAN_SLOT_ADMIN "admintools" #define DUMMY_HUMAN_SLOT_MANIFEST "dummy_manifest_generation" +#define DUMMY_HUMAN_SLOT_CTF "dummy_ctf_preview_generation" #define PR_ANNOUNCEMENTS_PER_ROUND 5 //The number of unique PR announcements allowed per round //This makes sure that a single person can only spam 3 reopens and 3 closes before being ignored diff --git a/code/datums/components/shielded.dm b/code/datums/components/shielded.dm index 2920bfe34b5..7450c92295e 100644 --- a/code/datums/components/shielded.dm +++ b/code/datums/components/shielded.dm @@ -13,12 +13,16 @@ var/recharge_start_delay = 20 SECONDS /// Once we go unhit long enough to recharge, we replenish charges this often. The floor is effectively 1 second, AKA how often SSdcs processes var/charge_increment_delay = 1 SECONDS + /// How many charges we recover on each charge increment + var/charge_recovery = 1 /// What .dmi we're pulling the shield icon from var/shield_icon_file = 'icons/effects/effects.dmi' /// What icon is used when someone has a functional shield up var/shield_icon = "shield-old" /// Do we still shield if we're being held in-hand? If FALSE, it needs to be equipped to a slot to work var/shield_inhand = FALSE + /// Should the shield lose charges equal to the damage dealt by a hit? + var/lose_multiple_charges = FALSE /// The cooldown tracking when we were last hit COOLDOWN_DECLARE(recently_hit_cd) /// The cooldown tracking when we last replenished a charge @@ -26,13 +30,15 @@ /// A callback for the sparks/message that play when a charge is used, see [/datum/component/shielded/proc/default_run_hit_callback] var/datum/callback/on_hit_effects -/datum/component/shielded/Initialize(max_charges = 3, recharge_start_delay = 20 SECONDS, charge_increment_delay = 1 SECONDS, shield_icon_file = 'icons/effects/effects.dmi', shield_icon = "shield-old", shield_inhand = FALSE, run_hit_callback) +/datum/component/shielded/Initialize(max_charges = 3, recharge_start_delay = 20 SECONDS, charge_increment_delay = 1 SECONDS, charge_recovery = 1, lose_multiple_charges = FALSE, shield_icon_file = 'icons/effects/effects.dmi', shield_icon = "shield-old", shield_inhand = FALSE, run_hit_callback) if(!isitem(parent) || max_charges <= 0) return COMPONENT_INCOMPATIBLE src.max_charges = max_charges src.recharge_start_delay = recharge_start_delay src.charge_increment_delay = charge_increment_delay + src.charge_recovery = charge_recovery + src.lose_multiple_charges = lose_multiple_charges src.shield_icon_file = shield_icon_file src.shield_icon = shield_icon src.shield_inhand = shield_inhand @@ -73,13 +79,16 @@ var/obj/item/item_parent = parent COOLDOWN_START(src, charge_add_cd, charge_increment_delay) - current_charges++ - if(wearer && current_charges == 1) - wearer.update_appearance(UPDATE_ICON) + adjust_charge(charge_recovery) // set the number of charges to current + recovery per increment, clamped from zero to max_charges playsound(item_parent, 'sound/magic/charge.ogg', 50, TRUE) if(current_charges == max_charges) playsound(item_parent, 'sound/machines/ding.ogg', 50, TRUE) +/datum/component/shielded/proc/adjust_charge(change) + current_charges = clamp(current_charges + change, 0, max_charges) + if(wearer) + wearer.update_appearance(UPDATE_ICON) + /// Check if we've been equipped to a valid slot to shield /datum/component/shielded/proc/on_equipped(datum/source, mob/user, slot) SIGNAL_HANDLER @@ -121,7 +130,13 @@ if(current_charges <= 0) return . = COMPONENT_HIT_REACTION_BLOCK - current_charges = max(current_charges - 1, 0) + + var/charge_loss = 1 // how many charges do we lose + + if(lose_multiple_charges) // if the shield has health like damage we'll lose charges equal to the damage of the hit + charge_loss = damage + + adjust_charge(-charge_loss) INVOKE_ASYNC(src, .proc/actually_run_hit_callback, owner, attack_text, current_charges) @@ -130,8 +145,6 @@ qdel(src) return - if(!current_charges) - wearer.update_appearance(UPDATE_ICON) START_PROCESSING(SSdcs, src) // if we DO recharge, start processing so we can do that /// The wrapper to invoke the on_hit callback, so we don't have to worry about blocking in the signal handler diff --git a/code/datums/elements/delete_on_drop.dm b/code/datums/elements/delete_on_drop.dm new file mode 100644 index 00000000000..bc4d0fdccf7 --- /dev/null +++ b/code/datums/elements/delete_on_drop.dm @@ -0,0 +1,21 @@ +/** + * Attaches to an item, if that item is dropped on the floor delete it + */ +/datum/element/delete_on_drop + element_flags = ELEMENT_DETACH + var/list/myvar = list() + +/datum/element/delete_on_drop/Attach(datum/target) + . = ..() + if(!isitem(target)) + return COMPONENT_INCOMPATIBLE + RegisterSignal(target, list(COMSIG_ITEM_DROPPED, COMSIG_CASING_EJECTED), .proc/del_on_drop) + +/datum/element/delete_on_drop/Detach(datum/source) + . = ..() + UnregisterSignal(source, list(COMSIG_ITEM_DROPPED, COMSIG_CASING_EJECTED)) + +/datum/element/delete_on_drop/proc/del_on_drop(atom/source) + SIGNAL_HANDLER + if(isturf(source.loc)) + qdel(source) diff --git a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm index 379923bd7f0..c504bb4f7b2 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm @@ -40,3 +40,7 @@ /obj/effect/projectile/impact/laser/emitter name = "emitter impact" icon_state = "impact_emitter" + +/obj/effect/projectile/impact/solar + name = "solar impact" + icon_state = "impact_solar" diff --git a/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm b/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm index 35d57e17be8..a26141d80a8 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm @@ -32,3 +32,6 @@ /obj/effect/projectile/muzzle/laser/emitter name = "emitter flash" icon_state = "muzzle_emitter" + +/obj/effect/projectile/muzzle/solar + icon_state = "muzzle_solar" diff --git a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm index ab669ca20f6..c0fa093a2fe 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm @@ -55,6 +55,10 @@ name = "heavy laser" icon_state = "beam_heavy" +/obj/effect/projectile/tracer/solar + name = "solar beam" + icon_state = "solar" + //BEAM RIFLE /obj/effect/projectile/tracer/tracer/beam_rifle icon_state = "tracer_beam" diff --git a/code/modules/capture_the_flag/ctf_classes.dm b/code/modules/capture_the_flag/ctf_classes.dm new file mode 100644 index 00000000000..52ad1af5315 --- /dev/null +++ b/code/modules/capture_the_flag/ctf_classes.dm @@ -0,0 +1,227 @@ +// GENERIC CLASSES + +/datum/outfit/ctf + name = "CTF Rifleman (Solo)" + ears = /obj/item/radio/headset + uniform = /obj/item/clothing/under/syndicate + suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf + toggle_helmet = FALSE // see the whites of their eyes + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/combat + id = /obj/item/card/id/away + belt = /obj/item/gun/ballistic/automatic/pistol/deagle/ctf + l_pocket = /obj/item/ammo_box/magazine/recharge/ctf + r_pocket = /obj/item/ammo_box/magazine/recharge/ctf + r_hand = /obj/item/gun/ballistic/automatic/laser/ctf + + ///Description to be shown in the class selection menu + var/class_description = "General purpose combat class. Armed with a laser rifle and backup pistol." + ///Radio frequency to assign players with this outfit + var/team_radio_freq = FREQ_COMMON // they won't be able to use this on the centcom z-level, so ffa players cannot use radio + ///Icon file for the class radial menu icons + var/icon = 'icons/hud/radial_ctf.dmi' + ///Icon state for this class + var/icon_state = "ctf_rifleman" + ///Do they get a headset? + var/has_radio = TRUE + ///Do they get an ID? + var/has_card = TRUE + ///Which slots to apply TRAIT_NODROP to the items in + var/list/nodrop_slots = list(ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING, ITEM_SLOT_EARS) + +/datum/outfit/ctf/post_equip(mob/living/carbon/human/human_to_equip, visualsOnly=FALSE) + if(visualsOnly) + return + var/list/no_drops = list() + + if(has_card) + var/obj/item/card/id/idcard = human_to_equip.wear_id + no_drops += idcard + idcard.registered_name = human_to_equip.real_name + idcard.update_label() + idcard.update_icon() + + // Make clothing in the specified slots NODROP + for(var/slot in nodrop_slots) + no_drops += human_to_equip.get_item_by_slot(slot) + // Make items in the hands NODROP + for(var/obj/item/held_item in human_to_equip.held_items) + no_drops += held_item + listclearnulls(no_drops) // For any slots we didn't have filled + // Apply TRAIT_NODROP to everything + for(var/obj/item/item_to_nodrop as anything in no_drops) + ADD_TRAIT(item_to_nodrop, TRAIT_NODROP, CAPTURE_THE_FLAG_TRAIT) + + if(has_radio) + var/obj/item/radio/headset = human_to_equip.ears + headset.set_frequency(team_radio_freq) + headset.freqlock = TRUE + headset.independent = TRUE + human_to_equip.dna.species.stunmod = 0 + +/datum/outfit/ctf/instagib + name = "CTF Instagib (Solo)" + r_hand = /obj/item/gun/energy/laser/instakill + shoes = /obj/item/clothing/shoes/jackboots/fast + icon_state = "ctf_instakill" + class_description = "General purpose combat class. Armed with a laser rifle and backup pistol." + +/datum/outfit/ctf/assault + name = "CTF Assaulter (Solo)" + suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/light + r_hand = /obj/item/gun/ballistic/shotgun/ctf + gloves = /obj/item/clothing/gloves/tackler/rocket + l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/shotgun + r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/shotgun + belt = null + icon_state = "ctf_assaulter" + class_description = "Close combat class. Armed with a shotgun and rocket gloves." + +/datum/outfit/ctf/marksman + name = "CTF Marksman (Solo)" + r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/marksman + l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/marksman + r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/marksman + belt = null + icon_state = "ctf_marksman" + class_description = "Long range class. Armed with a hitscan laser rifle." + +// RED TEAM CLASSES + +/datum/outfit/ctf/red + name = "CTF Rifleman (Red)" + suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/red + r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/red + l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/rifle/red + r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/rifle/red + id = /obj/item/card/id/red //it's red + team_radio_freq = FREQ_CTF_RED + +/datum/outfit/ctf/red/instagib + name = "CTF Instagib (Red)" + r_hand = /obj/item/gun/energy/laser/instakill/red + shoes = /obj/item/clothing/shoes/jackboots/fast + team_radio_freq = FREQ_CTF_RED + +/datum/outfit/ctf/assault/red + name = "CTF Assaulter (Red)" + suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/light/red + r_hand = /obj/item/gun/ballistic/shotgun/ctf/red + l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/shotgun/red + r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/shotgun/red + id = /obj/item/card/id/red + team_radio_freq = FREQ_CTF_RED + +/datum/outfit/ctf/marksman/red + name = "CTF Marksman (Red)" + suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/red + r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/marksman/red + l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/marksman/red + r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/marksman/red + id = /obj/item/card/id/red + team_radio_freq = FREQ_CTF_RED + +// BLUE TEAM CLASSES + +/datum/outfit/ctf/blue + name = "CTF Rifleman (Blue)" + suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/blue + r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/blue + l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/rifle/blue + r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/rifle/blue + id = /obj/item/card/id/blue //it's blue + team_radio_freq = FREQ_CTF_BLUE + +/datum/outfit/ctf/blue/instagib + name = "CTF Instagib (Blue)" + r_hand = /obj/item/gun/energy/laser/instakill/blue + shoes = /obj/item/clothing/shoes/jackboots/fast + team_radio_freq = FREQ_CTF_BLUE + +/datum/outfit/ctf/assault/blue + name = "CTF Assaulter (Blue)" + suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/light/blue + r_hand = /obj/item/gun/ballistic/shotgun/ctf/blue + l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/shotgun/blue + r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/shotgun/blue + id = /obj/item/card/id/blue + team_radio_freq = FREQ_CTF_BLUE + +/datum/outfit/ctf/marksman/blue + name = "CTF Marksman (Blue)" + suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/blue + r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/marksman/blue + l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/marksman/blue + r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/marksman/blue + id = /obj/item/card/id/blue + team_radio_freq = FREQ_CTF_BLUE + +// GREEN TEAM CLASSES + +/datum/outfit/ctf/green + name = "CTF Rifleman (Green)" + suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/green + r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/green + l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/rifle/green + r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/rifle/green + id = /obj/item/card/id/green //it's green + team_radio_freq = FREQ_CTF_GREEN + +/datum/outfit/ctf/green/instagib + name = "CTF Instagib (Green)" + r_hand = /obj/item/gun/energy/laser/instakill/green + shoes = /obj/item/clothing/shoes/jackboots/fast + team_radio_freq = FREQ_CTF_GREEN + +/datum/outfit/ctf/assault/green + name = "CTF Assaulter (Green)" + suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/light/green + r_hand = /obj/item/gun/ballistic/shotgun/ctf/green + l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/shotgun/green + r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/shotgun/green + id = /obj/item/card/id/green + team_radio_freq = FREQ_CTF_GREEN + +/datum/outfit/ctf/marksman/green + name = "CTF Marksman (Blue)" + suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/green + r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/marksman/green + l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/marksman/green + r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/marksman/green + id = /obj/item/card/id/green + team_radio_freq = FREQ_CTF_GREEN + +// YELLOW TEAM CLASSES + +/datum/outfit/ctf/yellow + name = "CTF Rifleman (Yellow)" + suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/yellow + r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/yellow + l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/rifle/yellow + r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/rifle/yellow + id = /obj/item/card/id/yellow //it's yellow + team_radio_freq = FREQ_CTF_YELLOW + +/datum/outfit/ctf/yellow/instagib + name = "CTF Instagib (Yellow)" + r_hand = /obj/item/gun/energy/laser/instakill/yellow + shoes = /obj/item/clothing/shoes/jackboots/fast + team_radio_freq = FREQ_CTF_YELLOW + +/datum/outfit/ctf/assault/yellow + name = "CTF Assaulter (Yellow)" + suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/light/yellow + r_hand = /obj/item/gun/ballistic/shotgun/ctf/yellow + l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/shotgun/yellow + r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/shotgun/yellow + id = /obj/item/card/id/yellow + team_radio_freq = FREQ_CTF_YELLOW + +/datum/outfit/ctf/marksman/yellow + name = "CTF Marksman (Blue)" + suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/yellow + r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/marksman/yellow + l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/marksman/yellow + r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/marksman/yellow + id = /obj/item/card/id/yellow + team_radio_freq = FREQ_CTF_YELLOW diff --git a/code/modules/capture_the_flag/ctf_equipment.dm b/code/modules/capture_the_flag/ctf_equipment.dm new file mode 100644 index 00000000000..5cf4ce17846 --- /dev/null +++ b/code/modules/capture_the_flag/ctf_equipment.dm @@ -0,0 +1,605 @@ + +// GENERIC PROJECTILE + +/obj/projectile/beam/ctf + damage = 0 + icon_state = "omnilaser" + +/obj/projectile/beam/ctf/prehit_pierce(atom/target) + if(!is_ctf_target(target)) + damage = 0 + return PROJECTILE_PIERCE_NONE /// hey uhhh don't hit anyone behind them + . = ..() + +/obj/projectile/beam/ctf/on_hit(atom/target, blocked = FALSE) + . = ..() + if(is_ctf_target(target) && blocked == FALSE) + if(iscarbon(target)) + var/mob/living/carbon/target_mob = target + target_mob.adjustBruteLoss(150, 0) + return BULLET_ACT_HIT + +/obj/item/ammo_box/magazine/recharge/ctf + ammo_type = /obj/item/ammo_casing/caseless/laser/ctf + +/obj/item/ammo_box/magazine/recharge/ctf/Initialize() + . = ..() + AddElement(/datum/element/delete_on_drop) + + +/obj/item/ammo_casing/caseless/laser/ctf + projectile_type = /obj/projectile/beam/ctf/ + +/obj/item/ammo_casing/caseless/laser/ctf/Initialize() + . = ..() + AddElement(/datum/element/delete_on_drop) + +// LASER RIFLE + +/obj/item/gun/ballistic/automatic/laser/ctf + mag_type = /obj/item/ammo_box/magazine/recharge/ctf/rifle + desc = "This looks like it could really hurt in melee." + force = 50 + weapon_weight = WEAPON_HEAVY + slot_flags = null + +/obj/item/gun/ballistic/automatic/laser/ctf/Initialize() + . = ..() + AddElement(/datum/element/delete_on_drop) + + +/obj/item/ammo_box/magazine/recharge/ctf/rifle + ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/rifle + + +/obj/item/ammo_casing/caseless/laser/ctf/rifle + projectile_type = /obj/projectile/beam/ctf/rifle + + +/obj/projectile/beam/ctf/rifle + damage = 45 + light_color = LIGHT_COLOR_BLUE + impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser + +// LASER SHOTGUN + +/obj/item/gun/ballistic/shotgun/ctf + name = "laser shotgun" + desc = "This looks like it could really hurt in melee." + icon_state = "ctfshotgun" + inhand_icon_state = "shotgun_combat" + worn_icon_state = "gun" + slot_flags = null + mag_type = /obj/item/ammo_box/magazine/recharge/ctf/shotgun + empty_indicator = TRUE + fire_sound = 'sound/weapons/gun/shotgun/shot_alt.ogg' + semi_auto = TRUE + internal_magazine = FALSE + tac_reloads = TRUE + +/obj/item/gun/ballistic/shotgun/ctf/Initialize() + . = ..() + AddElement(/datum/element/delete_on_drop) + +/obj/item/ammo_box/magazine/recharge/ctf/shotgun + ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/shotgun + max_ammo = 6 + + +/obj/item/ammo_casing/caseless/laser/ctf/shotgun + projectile_type = /obj/projectile/beam/ctf/shotgun + pellets = 6 + variance = 25 + + +/obj/projectile/beam/ctf/shotgun + damage = 15 + light_color = LIGHT_COLOR_BLUE + impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser + +// MARKSMAN RIFLE + +/obj/item/gun/ballistic/automatic/laser/ctf/marksman + name = "designated marksman rifle" + icon_state = "ctfmarksman" + inhand_icon_state = "ctfmarksman" + mag_type = /obj/item/ammo_box/magazine/recharge/ctf/marksman + fire_delay = 1 SECONDS + +/obj/item/ammo_box/magazine/recharge/ctf/marksman + ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/marksman + max_ammo = 10 + +/obj/item/ammo_casing/caseless/laser/ctf/marksman + projectile_type = /obj/projectile/beam/ctf/marksman + +/obj/projectile/beam/ctf/marksman + damage = 30 + hitscan = TRUE + tracer_type = /obj/effect/projectile/tracer/laser/blue + muzzle_type = /obj/effect/projectile/muzzle/laser/blue + impact_type = /obj/effect/projectile/impact/laser/blue + +// DESERT EAGLE + +/obj/item/gun/ballistic/automatic/pistol/deagle/ctf + desc = "This looks like it could really hurt in melee." + force = 75 + mag_type = /obj/item/ammo_box/magazine/recharge/ctf/deagle + +/obj/item/gun/ballistic/automatic/pistol/deagle/ctf/Initialize() + . = ..() + AddElement(/datum/element/delete_on_drop) + + +/obj/item/ammo_box/magazine/recharge/ctf/deagle + ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/deagle + max_ammo = 7 + + +/obj/item/ammo_casing/caseless/laser/ctf/deagle + projectile_type = /obj/projectile/beam/ctf/deagle + + +/obj/projectile/beam/ctf/deagle + icon_state = "bullet" + damage = 60 + light_color = COLOR_WHITE + impact_effect_type = /obj/effect/temp_visual/impact_effect + +// INSTAKILL RIFLE + +/obj/item/gun/energy/laser/instakill + name = "instakill rifle" + icon_state = "instagib" + inhand_icon_state = "instagib" + desc = "A specialized ASMD laser-rifle, capable of flat-out disintegrating most targets in a single hit." + w_class = WEIGHT_CLASS_BULKY + ammo_type = list(/obj/item/ammo_casing/energy/instakill) + force = 60 + slot_flags = null + charge_sections = 5 + ammo_x_offset = 2 + shaded_charge = FALSE + +/obj/item/gun/energy/laser/instakill/Initialize() + . = ..() + AddElement(/datum/element/delete_on_drop) + +/obj/item/gun/energy/laser/instakill/emp_act() //implying you could stop the instagib + return + +/obj/item/ammo_casing/energy/instakill + projectile_type = /obj/projectile/beam/instakill + e_cost = 0 + select_name = "DESTROY" + +/obj/projectile/beam/instakill + name = "instagib laser" + icon_state = "purple_laser" + damage = 200 + damage_type = BURN + impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser + light_color = LIGHT_COLOR_PURPLE + +/obj/projectile/beam/instakill/on_hit(atom/target) + . = ..() + if(iscarbon(target)) + var/mob/living/carbon/target_mob = target + target_mob.visible_message(span_danger("[target_mob] explodes into a shower of gibs!")) + target_mob.gib() + +// SHIELDED HARDSUIT + +/obj/item/clothing/suit/space/hardsuit/shielded/ctf + name = "white shielded hardsuit" + desc = "Standard issue hardsuit for playing capture the flag." + icon_state = "ert_medical" + inhand_icon_state = "ert_medical" + hardsuit_type = "ert_medical" + // Adding TRAIT_NODROP is done when the CTF spawner equips people + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) // CTF gear gives no protection outside of the shield + allowed = null + slowdown = 0 + max_charges = 150 + recharge_amount = 30 + lose_multiple_charges = TRUE + +/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf + name = "shielded hardsuit helmet" + desc = "Standard issue hardsuit helmet for playing capture the flag." + icon_state = "hardsuit0-ert_medical" + inhand_icon_state = "hardsuit0-ert_medical" + hardsuit_type = "ert_medical" + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) + +// LIGHT SHIELDED HARDSUIT + +/obj/item/clothing/suit/space/hardsuit/shielded/ctf/light + name = "light white shielded hardsuit" + desc = "Lightweight hardsuit for playing capture the flag." + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/light + max_charges = 30 + slowdown = -0.25 + +/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/light + name = "light shielded hardsuit helmet" + desc = "Lightweight hardsuit helmet for playing capture the flag." + +// RED TEAM GUNS + +// Rifle +/obj/item/gun/ballistic/automatic/laser/ctf/red + mag_type = /obj/item/ammo_box/magazine/recharge/ctf/rifle/red + +/obj/item/ammo_box/magazine/recharge/ctf/rifle/red + ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/rifle/red + +/obj/item/ammo_casing/caseless/laser/ctf/rifle/red + projectile_type = /obj/projectile/beam/ctf/rifle/red + +/obj/projectile/beam/ctf/rifle/red + icon_state = "laser" + light_color = COLOR_SOFT_RED + impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser + + +// Shotgun +/obj/item/gun/ballistic/shotgun/ctf/red + mag_type = /obj/item/ammo_box/magazine/recharge/ctf/shotgun/red + +/obj/item/ammo_box/magazine/recharge/ctf/shotgun/red + ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/shotgun/red + +/obj/item/ammo_casing/caseless/laser/ctf/shotgun/red + projectile_type = /obj/projectile/beam/ctf/shotgun/red + +/obj/projectile/beam/ctf/shotgun/red + icon_state = "laser" + light_color = COLOR_SOFT_RED + impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser + + +// DMR +/obj/item/gun/ballistic/automatic/laser/ctf/marksman/red + mag_type = /obj/item/ammo_box/magazine/recharge/ctf/marksman/red + +/obj/item/ammo_box/magazine/recharge/ctf/marksman/red + ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/marksman/red + +/obj/item/ammo_casing/caseless/laser/ctf/marksman/red + projectile_type = /obj/projectile/beam/ctf/marksman/red + +/obj/projectile/beam/ctf/marksman/red + icon_state = "laser" + tracer_type = /obj/effect/projectile/tracer/laser + muzzle_type = /obj/effect/projectile/muzzle/laser + impact_type = /obj/effect/projectile/impact/laser + + +// Instakill +/obj/item/gun/energy/laser/instakill/red + desc = "A specialized ASMD laser-rifle, capable of flat-out disintegrating most targets in a single hit. This one has a red design." + icon_state = "instagibred" + inhand_icon_state = "instagibred" + ammo_type = list(/obj/item/ammo_casing/energy/instakill/red) + +/obj/item/ammo_casing/energy/instakill/red + projectile_type = /obj/projectile/beam/instakill/red + +/obj/projectile/beam/instakill/red + icon_state = "red_laser" + impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser + light_color = COLOR_SOFT_RED + +// BLUE TEAM GUNS + +// Rifle +/obj/item/gun/ballistic/automatic/laser/ctf/blue + mag_type = /obj/item/ammo_box/magazine/recharge/ctf/rifle/blue + +/obj/item/ammo_box/magazine/recharge/ctf/rifle/blue + ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/rifle/blue + +/obj/item/ammo_casing/caseless/laser/ctf/rifle/blue + projectile_type = /obj/projectile/beam/ctf/rifle/blue + +/obj/projectile/beam/ctf/rifle/blue + icon_state = "bluelaser" + impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser + +// Shotgun +/obj/item/gun/ballistic/shotgun/ctf/blue + mag_type = /obj/item/ammo_box/magazine/recharge/ctf/shotgun/blue + +/obj/item/ammo_box/magazine/recharge/ctf/shotgun/blue + ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/shotgun/blue + +/obj/item/ammo_casing/caseless/laser/ctf/shotgun/blue + projectile_type = /obj/projectile/beam/ctf/shotgun/blue + +/obj/projectile/beam/ctf/shotgun/blue + icon_state = "bluelaser" + impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser + + +// DMR +/obj/item/gun/ballistic/automatic/laser/ctf/marksman/blue + mag_type = /obj/item/ammo_box/magazine/recharge/ctf/marksman/blue + +/obj/item/ammo_box/magazine/recharge/ctf/marksman/blue + ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/marksman/blue + +/obj/item/ammo_casing/caseless/laser/ctf/marksman/blue + projectile_type = /obj/projectile/beam/ctf/marksman/blue + +/obj/projectile/beam/ctf/marksman/blue + + +// Instakill +/obj/item/gun/energy/laser/instakill/blue + desc = "A specialized ASMD laser-rifle, capable of flat-out disintegrating most targets in a single hit. This one has a blue design." + icon_state = "instagibblue" + inhand_icon_state = "instagibblue" + ammo_type = list(/obj/item/ammo_casing/energy/instakill/blue) + +/obj/item/ammo_casing/energy/instakill/blue + projectile_type = /obj/projectile/beam/instakill/blue + +/obj/projectile/beam/instakill/blue + icon_state = "blue_laser" + impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser + light_color = LIGHT_COLOR_BLUE + +// GREEN TEAM GUNS + +// Rifle +/obj/item/gun/ballistic/automatic/laser/ctf/green + mag_type = /obj/item/ammo_box/magazine/recharge/ctf/rifle/green + +/obj/item/ammo_box/magazine/recharge/ctf/rifle/green + ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/rifle/green + +/obj/item/ammo_casing/caseless/laser/ctf/rifle/green + projectile_type = /obj/projectile/beam/ctf/rifle/green + +/obj/projectile/beam/ctf/rifle/green + icon_state = "xray" + light_color = COLOR_VERY_PALE_LIME_GREEN + impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser + + +// Shotgun +/obj/item/gun/ballistic/shotgun/ctf/green + mag_type = /obj/item/ammo_box/magazine/recharge/ctf/shotgun/green + +/obj/item/ammo_box/magazine/recharge/ctf/shotgun/green + ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/shotgun/green + +/obj/item/ammo_casing/caseless/laser/ctf/shotgun/green + projectile_type = /obj/projectile/beam/ctf/shotgun/green + +/obj/projectile/beam/ctf/shotgun/green + icon_state = "xray" + light_color = COLOR_VERY_PALE_LIME_GREEN + impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser + + +// DMR +/obj/item/gun/ballistic/automatic/laser/ctf/marksman/green + mag_type = /obj/item/ammo_box/magazine/recharge/ctf/marksman/green + +/obj/item/ammo_box/magazine/recharge/ctf/marksman/green + ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/marksman/green + +/obj/item/ammo_casing/caseless/laser/ctf/marksman/green + projectile_type = /obj/projectile/beam/ctf/marksman/green + +/obj/projectile/beam/ctf/marksman/green + icon_state = "xray" + tracer_type = /obj/effect/projectile/tracer/xray + muzzle_type = /obj/effect/projectile/muzzle/xray + impact_type = /obj/effect/projectile/impact/xray + + +// Instakill +/obj/item/gun/energy/laser/instakill/green + desc = "A specialized ASMD laser-rifle, capable of flat-out disintegrating most targets in a single hit. This one has a green design." + icon_state = "instagibgreen" + inhand_icon_state = "instagibgreen" + ammo_type = list(/obj/item/ammo_casing/energy/instakill/green) + +/obj/item/ammo_casing/energy/instakill/green + projectile_type = /obj/projectile/beam/instakill/green + +/obj/projectile/beam/instakill/green + icon_state = "green_laser" + impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser + light_color = COLOR_VERY_PALE_LIME_GREEN + +// YELLOW TEAM GUNS + +// Rifle +/obj/item/gun/ballistic/automatic/laser/ctf/yellow + mag_type = /obj/item/ammo_box/magazine/recharge/ctf/rifle/yellow + +/obj/item/ammo_box/magazine/recharge/ctf/rifle/yellow + ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/rifle/yellow + +/obj/item/ammo_casing/caseless/laser/ctf/rifle/yellow + projectile_type = /obj/projectile/beam/ctf/rifle/yellow + +/obj/projectile/beam/ctf/rifle/yellow + icon_state = "gaussstrong" + light_color = COLOR_VERY_SOFT_YELLOW + impact_effect_type = /obj/effect/temp_visual/impact_effect/yellow_laser + + +// Shotgun +/obj/item/gun/ballistic/shotgun/ctf/yellow + mag_type = /obj/item/ammo_box/magazine/recharge/ctf/shotgun/yellow + +/obj/item/ammo_box/magazine/recharge/ctf/shotgun/yellow + ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/shotgun/yellow + +/obj/item/ammo_casing/caseless/laser/ctf/shotgun/yellow + projectile_type = /obj/projectile/beam/ctf/shotgun/yellow + +/obj/projectile/beam/ctf/shotgun/yellow + icon_state = "gaussstrong" + light_color = COLOR_VERY_SOFT_YELLOW + impact_effect_type = /obj/effect/temp_visual/impact_effect/yellow_laser + + +// DMR +/obj/item/gun/ballistic/automatic/laser/ctf/marksman/yellow + mag_type = /obj/item/ammo_box/magazine/recharge/ctf/marksman/yellow + +/obj/item/ammo_box/magazine/recharge/ctf/marksman/yellow + ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/marksman/yellow + +/obj/item/ammo_casing/caseless/laser/ctf/marksman/yellow + projectile_type = /obj/projectile/beam/ctf/marksman/yellow + +/obj/projectile/beam/ctf/marksman/yellow + icon_state = "gaussstrong" + tracer_type = /obj/effect/projectile/tracer/solar + muzzle_type = /obj/effect/projectile/muzzle/solar + impact_type = /obj/effect/projectile/impact/solar + + +// Instakill +/obj/item/gun/energy/laser/instakill/yellow + desc = "A specialized ASMD laser-rifle, capable of flat-out disintegrating most targets in a single hit. This one has a yellow design." + icon_state = "instagibyellow" + inhand_icon_state = "instagibyellow" + ammo_type = list(/obj/item/ammo_casing/energy/instakill/yellow) + +/obj/item/ammo_casing/energy/instakill/yellow + projectile_type = /obj/projectile/beam/instakill/yellow + +/obj/projectile/beam/instakill/yellow + icon_state = "yellow_laser" + impact_effect_type = /obj/effect/temp_visual/impact_effect/yellow_laser + light_color = COLOR_VERY_SOFT_YELLOW + +// RED TEAM SUITS + +// Regular +/obj/item/clothing/suit/space/hardsuit/shielded/ctf/red + name = "red shielded hardsuit" + icon_state = "ert_security" + inhand_icon_state = "ert_security" + hardsuit_type = "ert_security" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/red + shield_icon = "shield-red" + +/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/red + icon_state = "hardsuit0-ert_security" + inhand_icon_state = "hardsuit0-ert_security" + hardsuit_type = "ert_security" + +// Light +/obj/item/clothing/suit/space/hardsuit/shielded/ctf/light/red + name = "light red shielded hardsuit" + icon_state = "ert_security" + inhand_icon_state = "ert_security" + hardsuit_type = "ert_security" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/light/red + shield_icon = "shield-red" + +/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/light/red + icon_state = "hardsuit0-ert_security" + inhand_icon_state = "hardsuit0-ert_security" + hardsuit_type = "ert_security" + +// BLUE TEAM SUITS + +// Regular +/obj/item/clothing/suit/space/hardsuit/shielded/ctf/blue + name = "blue shielded hardsuit" + icon_state = "ert_command" + inhand_icon_state = "ert_command" + hardsuit_type = "ert_commander" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/blue + shield_icon = "shield-old" + +/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/blue + icon_state = "hardsuit0-ert_commander" + inhand_icon_state = "hardsuit0-ert_commander" + hardsuit_type = "ert_commander" + +// Light +/obj/item/clothing/suit/space/hardsuit/shielded/ctf/light/blue + name = "light blue shielded hardsuit" + icon_state = "ert_command" + inhand_icon_state = "ert_command" + hardsuit_type = "ert_commander" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/light/blue + shield_icon = "shield-old" + +/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/light/blue + icon_state = "hardsuit0-ert_commander" + inhand_icon_state = "hardsuit0-ert_commander" + hardsuit_type = "ert_commander" + +// GREEN TEAM SUITS + +// Regular +/obj/item/clothing/suit/space/hardsuit/shielded/ctf/green + name = "green shielded hardsuit" + icon_state = "ert_green" + inhand_icon_state = "ert_green" + hardsuit_type = "ert_green" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/green + shield_icon = "shield-green" + +/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/green + icon_state = "hardsuit0-ert_green" + inhand_icon_state = "hardsuit0-ert_green" + hardsuit_type = "ert_green" + +// Light +/obj/item/clothing/suit/space/hardsuit/shielded/ctf/light/green + name = "light green shielded hardsuit" + icon_state = "ert_green" + inhand_icon_state = "ert_green" + hardsuit_type = "ert_green" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/light/green + shield_icon = "shield-green" + +/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/light/green + icon_state = "hardsuit0-ert_green" + inhand_icon_state = "hardsuit0-ert_green" + hardsuit_type = "ert_green" + +// YELLOW TEAM SUITS + +// Regular +/obj/item/clothing/suit/space/hardsuit/shielded/ctf/yellow + name = "yellow shielded hardsuit" + icon_state = "ert_engineer" + inhand_icon_state = "ert_engineer" + hardsuit_type = "ert_engineer" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/yellow + shield_icon = "shield-yellow" + +// Light +/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/yellow + icon_state = "hardsuit0-ert_engineer" + inhand_icon_state = "hardsuit0-ert_engineer" + hardsuit_type = "ert_engineer" + +/obj/item/clothing/suit/space/hardsuit/shielded/ctf/light/yellow + name = "light yellow shielded hardsuit" + icon_state = "ert_engineer" + inhand_icon_state = "ert_engineer" + hardsuit_type = "ert_engineer" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/light/yellow + shield_icon = "shield-yellow" + +/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/light/yellow + icon_state = "hardsuit0-ert_engineer" + inhand_icon_state = "hardsuit0-ert_engineer" + hardsuit_type = "ert_engineer" diff --git a/code/modules/capture_the_flag/capture_the_flag.dm b/code/modules/capture_the_flag/ctf_game.dm similarity index 68% rename from code/modules/capture_the_flag/capture_the_flag.dm rename to code/modules/capture_the_flag/ctf_game.dm index 9bd0ad23eba..efe67ff08dd 100644 --- a/code/modules/capture_the_flag/capture_the_flag.dm +++ b/code/modules/capture_the_flag/ctf_game.dm @@ -43,10 +43,6 @@ reset.flag = src RegisterSignal(src, COMSIG_PARENT_PREQDELETED, .proc/reset_flag) //just in case CTF has some map hazards (read: chasms). -/obj/item/ctf/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, require_twohands = TRUE) - /obj/item/ctf/process() if(is_ctf_target(loc)) //pickup code calls temporary drops to test things out, we need to make sure the flag doesn't reset from return PROCESS_KILL @@ -223,7 +219,7 @@ var/list/recently_dead_ckeys = list() var/ctf_enabled = FALSE ///assoc list for classes. If there's only one, it'll just equip. Otherwise, it lets you pick which outfit! - var/list/ctf_gear = list("white" = /datum/outfit/ctf) + var/list/ctf_gear = list("Rifleman" = /datum/outfit/ctf, "Assaulter" = /datum/outfit/ctf/assault, "Marksman" = /datum/outfit/ctf/marksman) var/instagib_gear = /datum/outfit/ctf/instagib var/ammo_type = /obj/effect/powerup/ammo/ctf // Fast paced gameplay, no real time for burn infections. @@ -246,7 +242,7 @@ continue // Anyone in crit, automatically reap var/mob/living/living_participant = i - if(HAS_TRAIT(living_participant, TRAIT_CRITICAL_CONDITION) || living_participant.stat == DEAD) + if(HAS_TRAIT(living_participant, TRAIT_CRITICAL_CONDITION) || living_participant.stat == DEAD || !living_participant.client) // If they're critted, dead or no longer in their body, dust them ctf_dust_old(living_participant) else // The changes that you've been hit with no shield but not @@ -259,7 +255,7 @@ icon_state = "syndbeacon" team = RED_TEAM team_span = "redteamradio" - ctf_gear = list("red" = /datum/outfit/ctf/red) + ctf_gear = list("Rifleman" = /datum/outfit/ctf/red, "Assaulter" = /datum/outfit/ctf/assault/red, "Marksman" = /datum/outfit/ctf/marksman/red) instagib_gear = /datum/outfit/ctf/red/instagib /obj/machinery/capture_the_flag/blue @@ -267,7 +263,7 @@ icon_state = "bluebeacon" team = BLUE_TEAM team_span = "blueteamradio" - ctf_gear = list("blue" = /datum/outfit/ctf/blue) + ctf_gear = list("Rifleman" = /datum/outfit/ctf/blue, "Assaulter" = /datum/outfit/ctf/assault/blue, "Marksman" = /datum/outfit/ctf/marksman/blue) instagib_gear = /datum/outfit/ctf/blue/instagib /obj/machinery/capture_the_flag/green @@ -275,7 +271,7 @@ icon_state = "greenbeacon" team = GREEN_TEAM team_span = "greenteamradio" - ctf_gear = list("green" = /datum/outfit/ctf/green) + ctf_gear = list("Rifleman" = /datum/outfit/ctf/green, "Assaulter" = /datum/outfit/ctf/assault/green, "Marksman" = /datum/outfit/ctf/marksman/green) instagib_gear = /datum/outfit/ctf/green/instagib /obj/machinery/capture_the_flag/yellow @@ -283,7 +279,7 @@ icon_state = "yellowbeacon" team = YELLOW_TEAM team_span = "yellowteamradio" - ctf_gear = list("yellow" = /datum/outfit/ctf/yellow) + ctf_gear = list("Rifleman" = /datum/outfit/ctf/yellow, "Assaulter" = /datum/outfit/ctf/assault/yellow, "Marksman" = /datum/outfit/ctf/marksman/yellow) instagib_gear = /datum/outfit/ctf/yellow/instagib //ATTACK GHOST IGNORING PARENT RETURN VALUE @@ -335,11 +331,13 @@ if(CTF.team_members.len < src.team_members.len) to_chat(user, span_warning("[src.team] has more team members than [CTF.team]! Try joining [CTF.team] team to even things up.")) return + var/client/new_team_member = user.client - if(user.mind && user.mind.current) - ctf_dust_old(user.mind.current) + team_members |= new_team_member.ckey + to_chat(user, "You are now a member of [src.team]. Get the enemy flag and bring it back to your team's controller!") spawn_team_member(new_team_member) + //does not add to recently dead, because it dusts and that triggers ctf_qdelled_player /obj/machinery/capture_the_flag/proc/ctf_dust_old(mob/living/body) if(isliving(body) && (team in body.faction)) @@ -360,21 +358,28 @@ /obj/machinery/capture_the_flag/proc/spawn_team_member(client/new_team_member) var/datum/outfit/chosen_class + if(ctf_gear.len == 1) //no choices to make for(var/key in ctf_gear) chosen_class = ctf_gear[key] - else if(ctf_gear.len > 3) //a lot of choices, so much that we can't use a basic alert - var/result = input(new_team_member, "Select a class.", "CTF") as null|anything in sortList(ctf_gear) - if(!result || !(GLOB.ghost_role_flags & GHOSTROLE_MINIGAME) || (new_team_member.ckey in recently_dead_ckeys) || !isobserver(new_team_member.mob)) - return //picked nothing, admin disabled it, cheating to respawn faster, cheating to respawn... while in game? - chosen_class = ctf_gear[result] - else //2-3 choices - var/list/names_only = assoc_list_strip_value(ctf_gear) - names_only.len += 1 //create a new null entry so if it's a 2-sized list, names_only[3] is null instead of out of bounds - var/result = tgui_alert(new_team_member, "Select a class.", "CTF", list(names_only[1], names_only[2], names_only[3])) - if(!result || !(GLOB.ghost_role_flags & GHOSTROLE_MINIGAME) || (new_team_member.ckey in recently_dead_ckeys) || !isobserver(new_team_member.mob)) - return //picked nothing, admin disabled it, cheating to respawn faster, cheating to respawn... while in game? - chosen_class = ctf_gear[result] + + else //there's a choice to make, present a radial menu + var/list/display_classes = list() + + for(var/key in ctf_gear) + var/datum/outfit/ctf/class = ctf_gear[key] + var/datum/radial_menu_choice/option = new + option.image = image(icon = initial(class.icon), icon_state = initial(class.icon_state)) + option.info = "[initial(class.class_description)]" + display_classes[key] = option + + sortList(display_classes) + var/choice = show_radial_menu(new_team_member.mob, src, display_classes, radius = 38) + if(!choice || !(GLOB.ghost_role_flags & GHOSTROLE_MINIGAME) || (new_team_member.ckey in recently_dead_ckeys) || !isobserver(new_team_member.mob) || src.ctf_enabled == FALSE || !(new_team_member.ckey in src.team_members)) + return //picked nothing, admin disabled it, cheating to respawn faster, cheating to respawn... while in game?, + //there isn't a game going on any more, you are no longer a member of this team (perhaps a new match already started?) + chosen_class = ctf_gear[choice] + var/mob/living/carbon/human/M = new /mob/living/carbon/human(get_turf(src)) new_team_member.prefs.copy_to(M) M.set_species(/datum/species/synth) @@ -385,7 +390,6 @@ for(var/trait in player_traits) ADD_TRAIT(M, trait, CAPTURE_THE_FLAG_TRAIT) spawned_mobs[M] = chosen_class - team_members |= new_team_member.ckey return M //used in medisim.dm /obj/machinery/capture_the_flag/Topic(href, href_list) @@ -446,7 +450,7 @@ dead_barricades.Cut() - notify_ghosts("[name] has been activated!", enter_link="(Click to join the [team] team!) or click on the controller directly!", source = src, action=NOTIFY_ATTACK, header = "CTF has been activated") + notify_ghosts("[name] has been activated!", source = src, action=NOTIFY_ORBIT, header = "CTF has been activated") if(!arena_reset) reset_the_arena() @@ -497,256 +501,6 @@ CTF.ctf_gear = initial(ctf_gear) CTF.respawn_cooldown = DEFAULT_RESPAWN -/obj/item/gun/ballistic/automatic/pistol/deagle/ctf - desc = "This looks like it could really hurt in melee." - force = 75 - mag_type = /obj/item/ammo_box/magazine/m50/ctf - -/obj/item/gun/ballistic/automatic/pistol/deagle/ctf/dropped() - . = ..() - addtimer(CALLBACK(src, .proc/floor_vanish), 1) - -/obj/item/gun/ballistic/automatic/pistol/deagle/ctf/proc/floor_vanish() - if(isturf(loc)) - qdel(src) - -/obj/item/ammo_box/magazine/m50/ctf - ammo_type = /obj/item/ammo_casing/a50/ctf - -/obj/item/ammo_casing/a50/ctf - projectile_type = /obj/projectile/bullet/ctf - -/obj/projectile/bullet/ctf - damage = 0 - -/obj/projectile/bullet/ctf/prehit_pierce(atom/target) - if(is_ctf_target(target)) - damage = 60 - return PROJECTILE_PIERCE_NONE /// hey uhh don't hit anyone behind them - . = ..() - -/obj/item/gun/ballistic/automatic/laser/ctf - mag_type = /obj/item/ammo_box/magazine/recharge/ctf - desc = "This looks like it could really hurt in melee." - force = 50 - -/obj/item/gun/ballistic/automatic/laser/ctf/dropped() - . = ..() - addtimer(CALLBACK(src, .proc/floor_vanish), 1) - -/obj/item/gun/ballistic/automatic/laser/ctf/proc/floor_vanish() - if(isturf(loc)) - qdel(src) - -/obj/item/ammo_box/magazine/recharge/ctf - ammo_type = /obj/item/ammo_casing/caseless/laser/ctf - -/obj/item/ammo_box/magazine/recharge/ctf/dropped() - . = ..() - addtimer(CALLBACK(src, .proc/floor_vanish), 1) - -/obj/item/ammo_box/magazine/recharge/ctf/proc/floor_vanish() - if(isturf(loc)) - qdel(src) - -/obj/item/ammo_casing/caseless/laser/ctf - projectile_type = /obj/projectile/beam/ctf - -/obj/projectile/beam/ctf - damage = 0 - icon_state = "omnilaser" - -/obj/projectile/beam/ctf/prehit_pierce(atom/target) - if(is_ctf_target(target)) - damage = 150 - return PROJECTILE_PIERCE_NONE /// hey uhhh don't hit anyone behind them - . = ..() - -/proc/is_ctf_target(atom/target) - . = FALSE - if(istype(target, /obj/structure/barricade/security/ctf)) - . = TRUE - if(ishuman(target)) - var/mob/living/carbon/human/H = target - for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines) - if(H in CTF.spawned_mobs) - . = TRUE - break - -// RED TEAM GUNS - -/obj/item/gun/ballistic/automatic/laser/ctf/red - mag_type = /obj/item/ammo_box/magazine/recharge/ctf/red - -/obj/item/ammo_box/magazine/recharge/ctf/red - ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/red - -/obj/item/ammo_casing/caseless/laser/ctf/red - projectile_type = /obj/projectile/beam/ctf/red - -/obj/projectile/beam/ctf/red - icon_state = "laser" - impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser - -// BLUE TEAM GUNS - -/obj/item/gun/ballistic/automatic/laser/ctf/blue - mag_type = /obj/item/ammo_box/magazine/recharge/ctf/blue - -/obj/item/ammo_box/magazine/recharge/ctf/blue - ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/blue - -/obj/item/ammo_casing/caseless/laser/ctf/blue - projectile_type = /obj/projectile/beam/ctf/blue - -/obj/projectile/beam/ctf/blue - icon_state = "bluelaser" - impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser - -// GREEN TEAM GUNS - -/obj/item/gun/ballistic/automatic/laser/ctf/green - mag_type = /obj/item/ammo_box/magazine/recharge/ctf/green - -/obj/item/ammo_box/magazine/recharge/ctf/green - ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/green - -/obj/item/ammo_casing/caseless/laser/ctf/green - projectile_type = /obj/projectile/beam/ctf/green - -/obj/projectile/beam/ctf/green - icon_state = "xray" - impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser - -// YELLOW TEAM GUNS - -/obj/item/gun/ballistic/automatic/laser/ctf/yellow - mag_type = /obj/item/ammo_box/magazine/recharge/ctf/yellow - -/obj/item/ammo_box/magazine/recharge/ctf/yellow - ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/yellow - -/obj/item/ammo_casing/caseless/laser/ctf/yellow - projectile_type = /obj/projectile/beam/ctf/yellow - -/obj/projectile/beam/ctf/yellow - icon_state = "gaussstrong" - impact_effect_type = /obj/effect/temp_visual/impact_effect/yellow_laser - -/datum/outfit/ctf - name = "CTF" - ears = /obj/item/radio/headset - uniform = /obj/item/clothing/under/syndicate - suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf - toggle_helmet = FALSE // see the whites of their eyes - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - id = /obj/item/card/id/away - belt = /obj/item/gun/ballistic/automatic/pistol/deagle/ctf - l_pocket = /obj/item/ammo_box/magazine/recharge/ctf - r_pocket = /obj/item/ammo_box/magazine/recharge/ctf - r_hand = /obj/item/gun/ballistic/automatic/laser/ctf - -/datum/outfit/ctf/post_equip(mob/living/carbon/human/H, visualsOnly=FALSE) - if(visualsOnly) - return - var/list/no_drops = list() - var/obj/item/card/id/W = H.wear_id - no_drops += W - W.registered_name = H.real_name - W.update_label() - W.update_icon() - - no_drops += H.get_item_by_slot(ITEM_SLOT_OCLOTHING) - no_drops += H.get_item_by_slot(ITEM_SLOT_GLOVES) - no_drops += H.get_item_by_slot(ITEM_SLOT_FEET) - no_drops += H.get_item_by_slot(ITEM_SLOT_ICLOTHING) - no_drops += H.get_item_by_slot(ITEM_SLOT_EARS) - for(var/i in no_drops) - var/obj/item/I = i - ADD_TRAIT(I, TRAIT_NODROP, CAPTURE_THE_FLAG_TRAIT) - -/datum/outfit/ctf/instagib - r_hand = /obj/item/gun/energy/laser/instakill - shoes = /obj/item/clothing/shoes/jackboots/fast - -/datum/outfit/ctf/red - suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/red - r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/red - l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/red - r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/red - id = /obj/item/card/id/red //it's red - -/datum/outfit/ctf/red/instagib - r_hand = /obj/item/gun/energy/laser/instakill/red - shoes = /obj/item/clothing/shoes/jackboots/fast - -/datum/outfit/ctf/blue - suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/blue - r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/blue - l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/blue - r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/blue - id = /obj/item/card/id/blue //it's blue - -/datum/outfit/ctf/blue/instagib - r_hand = /obj/item/gun/energy/laser/instakill/blue - shoes = /obj/item/clothing/shoes/jackboots/fast - -/datum/outfit/ctf/green - suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/green - r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/green - l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/green - r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/green - id = /obj/item/card/id/green //it's green - -/datum/outfit/ctf/green/instagib - r_hand = /obj/item/gun/energy/laser/instakill/green - shoes = /obj/item/clothing/shoes/jackboots/fast - -/datum/outfit/ctf/yellow - suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/yellow - r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/yellow - l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/yellow - r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/yellow - id = /obj/item/card/id/yellow //it's yellow - -/datum/outfit/ctf/yellow/instagib - r_hand = /obj/item/gun/energy/laser/instakill/yellow - shoes = /obj/item/clothing/shoes/jackboots/fast - -/datum/outfit/ctf/red/post_equip(mob/living/carbon/human/H) - ..() - var/obj/item/radio/R = H.ears - R.set_frequency(FREQ_CTF_RED) - R.freqlock = TRUE - R.independent = TRUE - H.dna.species.stunmod = 0 - -/datum/outfit/ctf/blue/post_equip(mob/living/carbon/human/H) - ..() - var/obj/item/radio/R = H.ears - R.set_frequency(FREQ_CTF_BLUE) - R.freqlock = TRUE - R.independent = TRUE - H.dna.species.stunmod = 0 - -/datum/outfit/ctf/green/post_equip(mob/living/carbon/human/H) - ..() - var/obj/item/radio/R = H.ears - R.set_frequency(FREQ_CTF_GREEN) - R.freqlock = TRUE - R.independent = TRUE - H.dna.species.stunmod = 0 - -/datum/outfit/ctf/yellow/post_equip(mob/living/carbon/human/H) - ..() - var/obj/item/radio/R = H.ears - R.set_frequency(FREQ_CTF_YELLOW) - R.freqlock = TRUE - R.independent = TRUE - H.dna.species.stunmod = 0 - - /obj/structure/trap/ctf name = "Spawn protection" desc = "Stay outta the enemy spawn!" @@ -869,6 +623,17 @@ to_chat(M, span_userdanger("[user.real_name] has captured \the [src], claiming it for [CTF.team]! Go take it back!")) break +/proc/is_ctf_target(atom/target) + . = FALSE + if(istype(target, /obj/structure/barricade/security/ctf)) + . = TRUE + if(ishuman(target)) + var/mob/living/carbon/human/H = target + for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines) + if(H in CTF.spawned_mobs) + . = TRUE + break + #undef WHITE_TEAM #undef RED_TEAM #undef BLUE_TEAM diff --git a/code/modules/capture_the_flag/map_loading.dm b/code/modules/capture_the_flag/ctf_map_loading.dm similarity index 100% rename from code/modules/capture_the_flag/map_loading.dm rename to code/modules/capture_the_flag/ctf_map_loading.dm diff --git a/code/modules/capture_the_flag/medieval_sim/medisim_classes.dm b/code/modules/capture_the_flag/medieval_sim/medisim_classes.dm new file mode 100644 index 00000000000..3361b2e0626 --- /dev/null +++ b/code/modules/capture_the_flag/medieval_sim/medisim_classes.dm @@ -0,0 +1,50 @@ +/datum/outfit/ctf/medisim + name = "Redfield Castle Knight" + icon_state = "medisim_knight" + + uniform = /obj/item/clothing/under/color/red + shoes = /obj/item/clothing/shoes/plate/red + suit = /obj/item/clothing/suit/armor/riot/knight/red + gloves = /obj/item/clothing/gloves/plate/red + head = /obj/item/clothing/head/helmet/knight/red + r_hand = /obj/item/claymore + + ears = null + id = null + belt = null + l_pocket = null + r_pocket = null + + has_radio = FALSE + has_card = FALSE + + nodrop_slots = list(ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING, ITEM_SLOT_EARS, ITEM_SLOT_BELT, ITEM_SLOT_HEAD) + + class_description = "Melee class. Armed with a claymore." + +/datum/outfit/ctf/medisim/archer + name = "Redfield Castle Archer" + icon_state = "medisim_archer" + + belt = /obj/item/storage/bag/quiver + suit = /obj/item/clothing/suit/armor/vest/cuirass + r_hand = /obj/item/gun/ballistic/bow + + class_description = "Ranged class. Armed with a bow and arrows." + +/datum/outfit/ctf/medisim/blue + name = "Bluesworth Hold Knight" + + uniform = /obj/item/clothing/under/color/blue + shoes = /obj/item/clothing/shoes/plate/blue + suit = /obj/item/clothing/suit/armor/riot/knight/blue + gloves = /obj/item/clothing/gloves/plate/blue + head = /obj/item/clothing/head/helmet/knight/blue + +/datum/outfit/ctf/medisim/archer/blue + name = "Bluesworth Hold Archer" + + uniform = /obj/item/clothing/under/color/blue + shoes = /obj/item/clothing/shoes/plate/blue + gloves = /obj/item/clothing/gloves/plate/blue + head = /obj/item/clothing/head/helmet/knight/blue diff --git a/code/modules/capture_the_flag/medieval_sim/medisim_game.dm b/code/modules/capture_the_flag/medieval_sim/medisim_game.dm new file mode 100644 index 00000000000..8b9215dd8b6 --- /dev/null +++ b/code/modules/capture_the_flag/medieval_sim/medisim_game.dm @@ -0,0 +1,74 @@ +///These are for the medisim shuttle + +#define REDFIELD_TEAM "Red" +#define BLUESWORTH_TEAM "Blue" + +/obj/machinery/capture_the_flag/medisim + game_id = "medieval" + game_area = /area/shuttle/escape/simulation + ammo_type = null //no guns, no need + victory_rejoin_text = "Teams have been cleared. The next game is starting automatically. Rejoin a team if you wish!" + player_traits = list() + +/obj/machinery/capture_the_flag/medisim/Initialize(mapload) + . = ..() + start_ctf() //both machines initialize, so both will call start_ctf instead of toggle_id_ctf calling it for both, twice. + +/obj/machinery/capture_the_flag/medisim/victory() + . = ..() + toggle_id_ctf(null, game_id, automated = TRUE)//only one machine runs the victory proc, start_ctf proc would break the other machine + +/obj/machinery/capture_the_flag/medisim/spawn_team_member(client/new_team_member) + . = ..() + if(!.) + return + var/mob/living/carbon/human/human_knight = . + randomize_human(human_knight) + human_knight.dna.update_dna_identity() + human_knight.dna.add_mutation(MEDIEVAL, MUT_OTHER) + var/oldname = human_knight.name + var/title = "error" + switch (human_knight.gender) + if (MALE) + title = pick(list("Sir", "Lord")) + if (FEMALE) + title = pick(list("Dame", "Lady")) + else + title = "Noble" + human_knight.real_name = "[title] [oldname]" + human_knight.name = human_knight.real_name + +/obj/machinery/capture_the_flag/medisim/red + name = "\improper Redfield Data Realizer" + icon_state = "syndbeacon" + team = REDFIELD_TEAM + team_span = "redteamradio" + ctf_gear = list("knight" = /datum/outfit/ctf/medisim, "archer" = /datum/outfit/ctf/medisim/archer) + +/obj/machinery/capture_the_flag/medisim/blue + name = "\improper Bluesworth Data Realizer" + icon_state = "bluebeacon" + team = BLUESWORTH_TEAM + team_span = "blueteamradio" + ctf_gear = list("knight" = /datum/outfit/ctf/medisim/blue, "archer" = /datum/outfit/ctf/medisim/archer/blue) + +/obj/item/ctf/red/medisim + name = "\improper Redfield Castle Fair Maiden" + desc = "Protect your maiden, and capture theirs!" + icon = 'icons/obj/plushes.dmi' + icon_state = "plushie_nuke" + force = 0 + game_area = /area/shuttle/escape + movement_type = FLOATING //there are chasms, and resetting when they fall in is really lame so lets minimize that + +/obj/item/ctf/blue/medisim + name = "\improper Bluesworth Hold Fair Maiden" + desc = "Protect your maiden, and capture theirs!" + icon = 'icons/obj/plushes.dmi' + icon_state = "plushie_slime" + force = 0 + game_area = /area/shuttle/escape + movement_type = FLOATING //there are chasms, and resetting when they fall in is really lame so lets minimize that + +#undef REDFIELD_TEAM +#undef BLUESWORTH_TEAM diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 022812aaefc..1357f6fcf7d 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -784,6 +784,10 @@ var/recharge_delay = 20 SECONDS /// How quickly the shield recharges each charge once it starts charging var/recharge_rate = 1 SECONDS + /// How many charges are recovered on each recharge + var/recharge_amount = 1 + /// Should the shield lose charges equal to the damage dealt by a hit? + var/lose_multiple_charges = FALSE /// The icon for the shield var/shield_icon = "shield-old" @@ -791,92 +795,12 @@ . = ..() if(!allowed) allowed = GLOB.advanced_hardsuit_allowed - AddComponent(/datum/component/shielded, max_charges = max_charges, recharge_start_delay = recharge_delay, charge_increment_delay = recharge_rate, shield_icon = shield_icon) + AddComponent(/datum/component/shielded, max_charges = max_charges, recharge_start_delay = recharge_delay, charge_increment_delay = recharge_rate, charge_recovery = recharge_amount, lose_multiple_charges = lose_multiple_charges, shield_icon = shield_icon) /obj/item/clothing/head/helmet/space/hardsuit/shielded resistance_flags = FIRE_PROOF | ACID_PROOF -///////////////Capture the Flag//////////////////// - -/obj/item/clothing/suit/space/hardsuit/shielded/ctf - name = "white shielded hardsuit" - desc = "Standard issue hardsuit for playing capture the flag." - icon_state = "ert_medical" - inhand_icon_state = "ert_medical" - hardsuit_type = "ert_medical" - // Adding TRAIT_NODROP is done when the CTF spawner equips people - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf - armor = list(MELEE = 0, BULLET = 30, LASER = 30, ENERGY = 40, BOMB = 50, BIO = 100, RAD = 100, FIRE = 95, ACID = 95) - slowdown = 0 - max_charges = 5 - -/obj/item/clothing/suit/space/hardsuit/shielded/ctf/red - name = "red shielded hardsuit" - icon_state = "ert_security" - inhand_icon_state = "ert_security" - hardsuit_type = "ert_security" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/red - shield_icon = "shield-red" - -/obj/item/clothing/suit/space/hardsuit/shielded/ctf/blue - name = "blue shielded hardsuit" - desc = "Standard issue hardsuit for playing capture the flag." - icon_state = "ert_command" - inhand_icon_state = "ert_command" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/blue - -/obj/item/clothing/suit/space/hardsuit/shielded/ctf/green - name = "green shielded hardsuit" - icon_state = "ert_green" - inhand_icon_state = "ert_green" - hardsuit_type = "ert_green" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/green - shield_icon = "shield-green" - -/obj/item/clothing/suit/space/hardsuit/shielded/ctf/yellow - name = "yellow shielded hardsuit" - icon_state = "ert_engineer" - inhand_icon_state = "ert_engineer" - hardsuit_type = "ert_engineer" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/yellow - shield_icon = "shield-yellow" - - -/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf - name = "shielded hardsuit helmet" - desc = "Standard issue hardsuit helmet for playing capture the flag." - icon_state = "hardsuit0-ert_medical" - inhand_icon_state = "hardsuit0-ert_medical" - hardsuit_type = "ert_medical" - armor = list(MELEE = 0, BULLET = 30, LASER = 30, ENERGY = 40, BOMB = 50, BIO = 100, RAD = 100, FIRE = 95, ACID = 95) - - -/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/red - icon_state = "hardsuit0-ert_security" - inhand_icon_state = "hardsuit0-ert_security" - hardsuit_type = "ert_security" - -/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/blue - name = "shielded hardsuit helmet" - desc = "Standard issue hardsuit helmet for playing capture the flag." - icon_state = "hardsuit0-ert_commander" - inhand_icon_state = "hardsuit0-ert_commander" - hardsuit_type = "ert_commander" - -/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/green - icon_state = "hardsuit0-ert_green" - inhand_icon_state = "hardsuit0-ert_green" - hardsuit_type = "ert_green" - -/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/yellow - icon_state = "hardsuit0-ert_engineer" - inhand_icon_state = "hardsuit0-ert_engineer" - hardsuit_type = "ert_engineer" - - - //////Syndicate Version - /obj/item/clothing/suit/space/hardsuit/shielded/syndi name = "blood-red hardsuit" desc = "An advanced hardsuit with built in energy shielding." diff --git a/code/modules/projectiles/ammunition/energy/special.dm b/code/modules/projectiles/ammunition/energy/special.dm index 908ff5cbc75..6f3ddb5fd86 100644 --- a/code/modules/projectiles/ammunition/energy/special.dm +++ b/code/modules/projectiles/ammunition/energy/special.dm @@ -58,23 +58,6 @@ select_name = "snare" harmful = FALSE -/obj/item/ammo_casing/energy/instakill - projectile_type = /obj/projectile/beam/instakill - e_cost = 0 - select_name = "DESTROY" - -/obj/item/ammo_casing/energy/instakill/blue - projectile_type = /obj/projectile/beam/instakill/blue - -/obj/item/ammo_casing/energy/instakill/red - projectile_type = /obj/projectile/beam/instakill/red - -/obj/item/ammo_casing/energy/instakill/green - projectile_type = /obj/projectile/beam/instakill/green - -/obj/item/ammo_casing/energy/instakill/yellow - projectile_type = /obj/projectile/beam/instakill/yellow - /obj/item/ammo_casing/energy/tesla_cannon fire_sound = 'sound/magic/lightningshock.ogg' e_cost = 30 diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 163e39a0cbc..3ca48f81890 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -218,6 +218,7 @@ if(casing_ejector || !from_firing) AC.forceMove(drop_location()) //Eject casing onto ground. AC.bounce_away(TRUE) + SEND_SIGNAL(AC, COMSIG_CASING_EJECTED) chambered = null else if(empty_chamber) chambered = null diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index 51a0f40ca8c..be8700dda0e 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -395,6 +395,7 @@ w_class = WEIGHT_CLASS_BULKY inhand_icon_state = "arg" mag_type = /obj/item/ammo_box/magazine/recharge + empty_indicator = TRUE fire_delay = 2 can_suppress = FALSE burst_size = 0 diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 54a411e7a5d..1a0a3efc2f3 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -323,45 +323,6 @@ desc = "A weapon that can only be used to its full potential by the truly robust." pin = /obj/item/firing_pin -/obj/item/gun/energy/laser/instakill - name = "instakill rifle" - icon_state = "instagib" - inhand_icon_state = "instagib" - desc = "A specialized ASMD laser-rifle, capable of flat-out disintegrating most targets in a single hit." - w_class = WEIGHT_CLASS_BULKY - ammo_type = list(/obj/item/ammo_casing/energy/instakill) - force = 60 - charge_sections = 5 - ammo_x_offset = 2 - shaded_charge = FALSE - -/obj/item/gun/energy/laser/instakill/red - desc = "A specialized ASMD laser-rifle, capable of flat-out disintegrating most targets in a single hit. This one has a red design." - icon_state = "instagibred" - inhand_icon_state = "instagibred" - ammo_type = list(/obj/item/ammo_casing/energy/instakill/red) - -/obj/item/gun/energy/laser/instakill/blue - desc = "A specialized ASMD laser-rifle, capable of flat-out disintegrating most targets in a single hit. This one has a blue design." - icon_state = "instagibblue" - inhand_icon_state = "instagibblue" - ammo_type = list(/obj/item/ammo_casing/energy/instakill/blue) - -/obj/item/gun/energy/laser/instakill/green - desc = "A specialized ASMD laser-rifle, capable of flat-out disintegrating most targets in a single hit. This one has a green design." - icon_state = "instagibgreen" - inhand_icon_state = "instagibgreen" - ammo_type = list(/obj/item/ammo_casing/energy/instakill/green) - -/obj/item/gun/energy/laser/instakill/yellow - desc = "A specialized ASMD laser-rifle, capable of flat-out disintegrating most targets in a single hit. This one has a yellow design." - icon_state = "instagibyellow" - inhand_icon_state = "instagibyellow" - ammo_type = list(/obj/item/ammo_casing/energy/instakill/yellow) - -/obj/item/gun/energy/laser/instakill/emp_act() //implying you could stop the instagib - return - /obj/item/gun/energy/gravity_gun name = "one-point gravitational manipulator" desc = "An experimental, multi-mode device that fires bolts of Zero-Point Energy, causing local distortions in gravity. Requires a gravitational anomaly core to function." diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index d846833a5da..e60cc243bd3 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -202,41 +202,6 @@ /obj/projectile/beam/lasertag/bluetag/hitscan hitscan = TRUE -/obj/projectile/beam/instakill - name = "instagib laser" - icon_state = "purple_laser" - damage = 200 - damage_type = BURN - impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser - light_color = LIGHT_COLOR_PURPLE - -/obj/projectile/beam/instakill/blue - icon_state = "blue_laser" - impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser - light_color = LIGHT_COLOR_BLUE - -/obj/projectile/beam/instakill/red - icon_state = "red_laser" - impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser - light_color = COLOR_SOFT_RED - -/obj/projectile/beam/instakill/green - icon_state = "green_laser" - impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser - light_color = COLOR_VERY_PALE_LIME_GREEN - -/obj/projectile/beam/instakill/yellow - icon_state = "yellow_laser" - impact_effect_type = /obj/effect/temp_visual/impact_effect/yellow_laser - light_color = COLOR_VERY_SOFT_YELLOW - -/obj/projectile/beam/instakill/on_hit(atom/target) - . = ..() - if(iscarbon(target)) - var/mob/living/carbon/M = target - M.visible_message(span_danger("[M] explodes into a shower of gibs!")) - M.gib() - //a shrink ray that shrinks stuff, which grows back after a short while. /obj/projectile/beam/shrink name = "shrink ray" diff --git a/code/modules/shuttle/medisim.dm b/code/modules/shuttle/medisim.dm index d51297a786d..77cbf52a9af 100644 --- a/code/modules/shuttle/medisim.dm +++ b/code/modules/shuttle/medisim.dm @@ -1,132 +1,5 @@ ///These are for the medisim shuttle -#define REDFIELD_TEAM "Red" -#define BLUESWORTH_TEAM "Blue" - -/obj/machinery/capture_the_flag/medisim - game_id = "medieval" - game_area = /area/shuttle/escape/simulation - ammo_type = null //no guns, no need - victory_rejoin_text = "Teams have been cleared. The next game is starting automatically. Rejoin a team if you wish!" - -/obj/machinery/capture_the_flag/medisim/Initialize(mapload) - . = ..() - // Ensure that the historical simulation is extra bloody. - player_traits -= TRAIT_NEVER_WOUNDED - - start_ctf() //both machines initialize, so both will call start_ctf instead of toggle_id_ctf calling it for both, twice. - -/obj/machinery/capture_the_flag/medisim/victory() - . = ..() - toggle_id_ctf(null, game_id, automated = TRUE)//only one machine runs the victory proc, start_ctf proc would break the other machine - -/obj/machinery/capture_the_flag/medisim/spawn_team_member(client/new_team_member) - . = ..() - if(!.) - return - var/mob/living/carbon/human/human_knight = . - randomize_human(human_knight) - human_knight.dna.update_dna_identity() - human_knight.dna.add_mutation(MEDIEVAL, MUT_OTHER) - var/oldname = human_knight.name - var/title = "error" - switch (human_knight.gender) - if (MALE) - title = pick(list("Sir", "Lord")) - if (FEMALE) - title = pick(list("Dame", "Lady")) - else - title = "Noble" - human_knight.real_name = "[title] [oldname]" - human_knight.name = human_knight.real_name - -/obj/machinery/capture_the_flag/medisim/red - name = "\improper Redfield Data Realizer" - icon_state = "syndbeacon" - team = REDFIELD_TEAM - team_span = "redteamradio" - ctf_gear = list("knight" = /datum/outfit/medisim/red_knight, "archer" = /datum/outfit/medisim/red_archer) - -/obj/machinery/capture_the_flag/medisim/blue - name = "\improper Bluesworth Data Realizer" - icon_state = "bluebeacon" - team = BLUESWORTH_TEAM - team_span = "blueteamradio" - ctf_gear = list("knight" = /datum/outfit/medisim/blue_knight, "archer" = /datum/outfit/medisim/blue_archer) - -/obj/item/ctf/red/medisim - name = "\improper Redfield Castle Fair Maiden" - desc = "Protect your maiden, and capture theirs!" - icon = 'icons/obj/plushes.dmi' - icon_state = "plushie_nuke" - game_area = /area/shuttle/escape - movement_type = FLOATING //there are chasms, and resetting when they fall in is really lame so lets minimize that - -/obj/item/ctf/blue/medisim - name = "\improper Bluesworth Hold Fair Maiden" - desc = "Protect your maiden, and capture theirs!" - icon = 'icons/obj/plushes.dmi' - icon_state = "plushie_slime" - game_area = /area/shuttle/escape - movement_type = FLOATING //there are chasms, and resetting when they fall in is really lame so lets minimize that - -//everything except arrows -/datum/outfit/medisim/post_equip(mob/living/carbon/human/H, visualsOnly) - var/list/no_drops = list() - no_drops += H.get_item_by_slot(ITEM_SLOT_FEET) - no_drops += H.get_item_by_slot(ITEM_SLOT_BELT) - no_drops += H.get_item_by_slot(ITEM_SLOT_ICLOTHING) - no_drops += H.get_item_by_slot(ITEM_SLOT_OCLOTHING) - no_drops += H.get_item_by_slot(ITEM_SLOT_HEAD) - no_drops += H.get_item_by_slot(ITEM_SLOT_HANDS) - no_drops += H.get_item_by_slot(ITEM_SLOT_GLOVES) - listclearnulls(no_drops) //any slots we didn't have - for(var/_outfit_item in no_drops) - var/obj/item/outfit_item = _outfit_item - outfit_item.item_flags |= DROPDEL//so this all stays clean :) - -/datum/outfit/medisim/red_knight - name = "Redfield Castle Knight" - - uniform = /obj/item/clothing/under/color/red - shoes = /obj/item/clothing/shoes/plate/red - suit = /obj/item/clothing/suit/armor/riot/knight/red - gloves = /obj/item/clothing/gloves/plate/red - head = /obj/item/clothing/head/helmet/knight/red - r_hand = /obj/item/claymore - -/datum/outfit/medisim/blue_knight - name = "Bluesworth Hold Knight" - - uniform = /obj/item/clothing/under/color/blue - shoes = /obj/item/clothing/shoes/plate/blue - suit = /obj/item/clothing/suit/armor/riot/knight/blue - gloves = /obj/item/clothing/gloves/plate/blue - head = /obj/item/clothing/head/helmet/knight/blue - r_hand = /obj/item/claymore - -/datum/outfit/medisim/red_archer - name = "Redfield Castle Archer" - - uniform = /obj/item/clothing/under/color/red - belt = /obj/item/storage/bag/quiver - shoes = /obj/item/clothing/shoes/plate/red - suit = /obj/item/clothing/suit/armor/vest/cuirass - gloves = /obj/item/clothing/gloves/plate/red - head = /obj/item/clothing/head/helmet/knight/red - r_hand = /obj/item/gun/ballistic/bow - -/datum/outfit/medisim/blue_archer - name = "Bluesworth Hold Archer" - - uniform = /obj/item/clothing/under/color/blue - belt = /obj/item/storage/bag/quiver - shoes = /obj/item/clothing/shoes/plate/blue - suit = /obj/item/clothing/suit/armor/vest/cuirass - gloves = /obj/item/clothing/gloves/plate/blue - head = /obj/item/clothing/head/helmet/knight/blue - r_hand = /obj/item/gun/ballistic/bow - /obj/machinery/computer/reality_simulation name = "reality simulation computer" desc = "A computer calculating the medieval times. Uh, wow. Is this bad boy quantum?" @@ -143,6 +16,3 @@

the rest of the page is filled with various doodles of people fighting with swords."} - -#undef REDFIELD_TEAM -#undef BLUESWORTH_TEAM diff --git a/icons/hud/radial_ctf.dmi b/icons/hud/radial_ctf.dmi new file mode 100644 index 0000000000000000000000000000000000000000..9fd9a741a5631b527ce44c209e713702d7f45a3a GIT binary patch literal 3190 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 U?WM#H@<#%op`xq&Rnao|KkN|@5dZ)H literal 0 HcmV?d00001 diff --git a/icons/mob/inhands/weapons/guns_lefthand.dmi b/icons/mob/inhands/weapons/guns_lefthand.dmi index 34611cbeb16f481075762fa3437975adf6d5c624..98316b40a46814a1b8239be9bb2d6a6675c3bb81 100644 GIT binary patch delta 3003 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 bZSR0`O)tMGgzm2Pl*Z4VvO`pzxEB8}vux(L delta 2307 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 delta 7492 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 diff --git a/icons/obj/guns/ballistic.dmi b/icons/obj/guns/ballistic.dmi index 3cfad7ed0300ead4aee08b2c28369aee88f76cbf..62479e6c25bb7a872fe0ace3b1c7fb4f7bcf391c 100644 GIT binary patch literal 33844 zcmbrl1yEeU_a=IAw*UcxlR$6}5IjgofFQx$f@^RaAi*I(65L&ayUSo9L4(T#5AH6* zFz@pF?^eBf`?hwswu%9!yQk-NpVQ}j=R2n()l?J+aG&4;06_5ejofI^5)|= zc{pxgL>}8r!JDs|_*Xk^Upd9N4YN+TQ95NuUBY_DukA0En~=+an$FA1v-IpN>*2c% zzPHwO#hTBI23HSu+5N~+yTJlAy0H0QsR)_Hc)5{l# zj^hOwVVKz;b!{&4nooiRRDE(!WFy#_O_sVe^nN=?lBq;x{_djmKAw3qdRsxOHL#+= zBA}c2NH)J?!@(?(i0oyQwCv$0^ky~I?}OuX#Dz=N5`?VJYo#9RMRGrh8S|=U8qek2 zKFo_YJwnh~Qji9@@UTv{(V|&$S5UFK*$zpkDq&$paXJ3+&W3&%QIiz!RaEmyc-%a8 zVB@$ols=ZB#{G|4xK*!8)N)6+L;Iq4J^Q_aesk+MS9@xHmy@^b>h9}gyi6C<%ip;-f6z`{~rx+CU?}k2^h#Zq*ISp1j2yO5VSp{#DI0)H%v8+Q8 zP!OUPOivHrRK!|5qYC-l4we2w@fiE02bIKFmlvABk=fy

_-(ecYkv@{9=&pZS-J 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 literal 32803 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