From b49aacab50bfc8f9fdd52baf294d64fc2a560a11 Mon Sep 17 00:00:00 2001 From: Paxilmaniac Date: Tue, 24 Dec 2024 07:20:27 -0600 Subject: [PATCH 01/11] standing here, I realize --- .../crates_lockers/closets/secure/security.dm | 6 +- .../modular_weapons/code/sec_swords/baton.dm | 175 ++++++++++++++++++ .../code/sec_swords/big_sword.dm | 37 ++++ .../modular_weapons/code/sec_swords/sheath.dm | 99 ++++++++++ .../icons/mob/inhands/melee_lefthand.dmi | Bin 0 -> 965 bytes .../icons/mob/inhands/melee_righthand.dmi | Bin 0 -> 967 bytes .../modular_weapons/icons/mob/worn/cases.dmi | Bin 1337 -> 2663 bytes .../modular_weapons/icons/obj/sec_swords.dmi | Bin 0 -> 1496 bytes .../time_clock/code/console_tgui.dm | 4 + tgstation.dme | 3 + 10 files changed, 321 insertions(+), 3 deletions(-) create mode 100644 modular_doppler/modular_weapons/code/sec_swords/baton.dm create mode 100644 modular_doppler/modular_weapons/code/sec_swords/big_sword.dm create mode 100644 modular_doppler/modular_weapons/code/sec_swords/sheath.dm create mode 100644 modular_doppler/modular_weapons/icons/mob/inhands/melee_lefthand.dmi create mode 100644 modular_doppler/modular_weapons/icons/mob/inhands/melee_righthand.dmi create mode 100644 modular_doppler/modular_weapons/icons/obj/sec_swords.dmi diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index e4488b0b7f436..b3881326668c9 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -67,7 +67,7 @@ new /obj/item/storage/lockbox/loyalty(src) new /obj/item/storage/box/flashbangs(src) new /obj/item/shield/riot/tele(src) - new /obj/item/storage/belt/security/full(src) + new /obj/item/storage/belt/secsword/full(src) // DOPPLER EDIT - new /obj/item/storage/belt/security/full(src) new /obj/item/circuitboard/machine/techfab/department/security(src) new /obj/item/storage/photo_album/hos(src) @@ -92,7 +92,7 @@ new /obj/item/storage/bag/garment/warden(src) new /obj/item/storage/box/zipties(src) new /obj/item/storage/box/flashbangs(src) - new /obj/item/storage/belt/security/full(src) + new /obj/item/storage/belt/secsword/full(src) // DOPPLER EDIT - new /obj/item/storage/belt/security/full(src) new /obj/item/flashlight/seclite(src) new /obj/item/door_remote/head_of_security(src) @@ -115,7 +115,7 @@ /obj/structure/closet/secure_closet/security/sec/PopulateContents() ..() - new /obj/item/storage/belt/security/full(src) + new /obj/item/storage/belt/secsword/full(src) // DOPPLER EDIT - new /obj/item/storage/belt/security/full(src) /obj/structure/closet/secure_closet/security/cargo diff --git a/modular_doppler/modular_weapons/code/sec_swords/baton.dm b/modular_doppler/modular_weapons/code/sec_swords/baton.dm new file mode 100644 index 0000000000000..8b3a3d9018879 --- /dev/null +++ b/modular_doppler/modular_weapons/code/sec_swords/baton.dm @@ -0,0 +1,175 @@ +/obj/item/melee/baton/doppler_security + name = "electro baton" + desc = "A high power baton for incapacitating humans and similar with. Delivers powerful jolts of electricity \ + that may cause bodily harm, but will -- without a doubt -- entice cooperation." + + desc_controls = "Left Click to stun, Right Click to harm." + context_living_rmb_active = "Harmful Stun" + attack_verb_continuous = list("beats") + attack_verb_simple = list("beat") + + icon = 'modular_doppler/modular_weapons/icons/obj/sec_swords.dmi' + icon_state = "baton_two" + lefthand_file = 'modular_doppler/modular_weapons/icons/mob/inhands/melee_lefthand.dmi' + righthand_file = 'modular_doppler/modular_weapons/icons/mob/inhands/melee_righthand.dmi' + inhand_icon_state = "baton_two" + icon_angle = -20 + + on_stun_sound = 'sound/items/weapons/taserhit.ogg' + on_stun_volume = 50 + drop_sound = 'sound/items/baton/stun_baton_active_drop.ogg' + pickup_sound = 'sound/items/baton/stun_baton_active_pickup.ogg' + sound_vary = TRUE + + active = TRUE + force = 10 + wound_bonus = 0 + armor_type = /datum/armor/baton_security + throwforce = 7 + force_say_chance = 50 + stamina_damage = 35 // DOPPLER EDIT - 4 baton crit now (Original: 60) + knockdown_time = 5 SECONDS + clumsy_knockdown_time = 15 SECONDS + cooldown = 2.5 SECONDS + + var/obj/item/stock_parts/power_store/cell + var/preload_cell_type //if not empty the baton starts with this type of cell + var/cell_hit_cost = STANDARD_CELL_CHARGE + +/obj/item/melee/baton/doppler_security/Initialize(mapload) + . = ..() + if(preload_cell_type) + if(!ispath(preload_cell_type, /obj/item/stock_parts/power_store/cell)) + log_mapping("[src] at [AREACOORD(src)] had an invalid preload_cell_type: [preload_cell_type].") + else + cell = new preload_cell_type(src) + +/obj/item/melee/baton/doppler_security/get_cell() + return cell + +/obj/item/melee/baton/doppler_security/suicide_act(mob/living/user) + if(cell?.charge && active) + user.visible_message(span_suicide("[user] is putting the live [name] right to [user.p_their()] heart! It looks like [user.p_theyre()] trying to commit suicide!")) + attack(user, user) + return FIRELOSS + return + +/obj/item/melee/baton/doppler_security/Destroy() + if(cell) + QDEL_NULL(cell) + UnregisterSignal(src, COMSIG_ATOM_ATTACKBY) + return ..() + +/obj/item/melee/baton/doppler_security/examine(mob/user) + . = ..() + if(cell) + . += span_notice("\The [src] is [round(cell.percent())]% charged.") + else + . += span_warning("\The [src] does not have a power source installed.") + +/obj/item/melee/baton/doppler_security/proc/deductcharge(deducted_charge) + if(!cell) + return + //Note this value returned is significant, as it will determine + //if a stun is applied or not + . = cell.use(deducted_charge) + +/obj/item/melee/baton/doppler_security/clumsy_check(mob/living/carbon/human/user) + if(!active || !HAS_TRAIT(user, TRAIT_CLUMSY) || prob(50)) + return FALSE + user.visible_message(span_danger("[user] accidentally touches the prongs of [src]! Fool they are!"), span_userdanger("You accidentally touch the prongs of [src]!")) + + if(iscyborg(user)) + if(affect_cyborg) + user.flash_act(affect_silicon = TRUE) + user.Paralyze(clumsy_knockdown_time) + additional_effects_cyborg(user, user) // user is the target here + if(on_stun_sound) + playsound(get_turf(src), on_stun_sound, on_stun_volume, TRUE, -1) + else + playsound(get_turf(src), 'sound/items/weapons/taserhit.ogg', 10, TRUE) + else + if(ishuman(user)) + var/mob/living/carbon/human/human_user = user + human_user.force_say() + user.Knockdown(clumsy_knockdown_time) + user.apply_damage(stamina_damage, STAMINA) + additional_effects_non_cyborg(user, user) + if(on_stun_sound) + playsound(get_turf(src), on_stun_sound, on_stun_volume, TRUE, -1) + + user.apply_damage(2 * force, BURN, BODY_ZONE_CHEST, attacking_item = src) + + log_combat(user, user, "accidentally stun attacked [user.p_them()]self due to their clumsiness", src) + if(stun_animation) + user.do_attack_animation(user) + SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK) + deductcharge(cell_hit_cost) + +/// Handles prodding targets with turned off stunbatons and right clicking stun'n'bash +/obj/item/melee/baton/doppler_security/baton_attack(mob/living/target, mob/living/user, modifiers) + . = ..() + if(. != BATON_DO_NORMAL_ATTACK) + return + if(LAZYACCESS(modifiers, RIGHT_CLICK)) + if(active && cooldown_check <= world.time && !check_parried(target, user)) + finalize_baton_attack(target, user, modifiers, in_attack_chain = FALSE) + else if(!user.combat_mode) + target.visible_message(span_warning("[user] prods [target] with [src]. Luckily it was off."), \ + span_warning("[user] prods you with [src]. Luckily it was off.")) + return BATON_ATTACK_DONE + +/obj/item/melee/baton/doppler_security/baton_effect(mob/living/target, mob/living/user, modifiers, stun_override) + if(iscyborg(loc)) + var/mob/living/silicon/robot/robot = loc + if(!robot || !robot.cell || !robot.cell.use(cell_hit_cost)) + return FALSE + else if(!deductcharge(cell_hit_cost)) + return FALSE + stun_override = 0 //Avoids knocking people down prematurely. + return ..() + +/obj/item/melee/baton/doppler_security/additional_effects_non_cyborg(mob/living/target, mob/living/user) + target.set_jitter_if_lower(40 SECONDS) + target.set_stutter_if_lower(16 SECONDS) + if(iscarbon(target)) + var/mob/living/carbon/big_shocker = target + big_Shocker.electrocute_act(10, src, 1, jitter_time = 0 SECONDS, stutter_time = 0 SECONDS, stun_duration = 0 SECONDS) + else + target.electrocute_act(10, src, 1) + SEND_SIGNAL(target, COMSIG_LIVING_MINOR_SHOCK) + addtimer(CALLBACK(src, PROC_REF(apply_stun_effect_end), target), 2 SECONDS) + +/// After the initial stun period, we check to see if the target needs to have the stun applied. +/obj/item/melee/baton/doppler_security/proc/apply_stun_effect_end(mob/living/target) + var/trait_check = HAS_TRAIT(target, TRAIT_BATON_RESISTANCE) //var since we check it in out to_chat as well as determine stun duration + if(!target.IsKnockdown()) + to_chat(target, span_warning("Your muscles seize, making you collapse[trait_check ? ", but your body quickly recovers..." : "!"]")) + + if(!trait_check) + target.Knockdown(knockdown_time) + +/obj/item/melee/baton/doppler_security/get_wait_description() + return span_danger("The baton is still charging!") + +/obj/item/melee/baton/doppler_security/get_stun_description(mob/living/target, mob/living/user) + . = list() + + .["visible"] = span_danger("[user] shocks [target] with [src]!") + .["local"] = span_userdanger("[user] shocks you with [src]!") + +/obj/item/melee/baton/doppler_security/get_unga_dunga_cyborg_stun_description(mob/living/target, mob/living/user) + . = list() + + .["visible"] = span_danger("[user] tries to shock [target] with [src], and predictably fails!") + .["local"] = span_userdanger("[user] tries to... shock you with [src]?") + +/obj/item/melee/baton/doppler_security/emp_act(severity) + . = ..() + if (!cell) + return + if (!(. & EMP_PROTECT_SELF)) + deductcharge(STANDARD_CELL_CHARGE / severity) + +/obj/item/melee/baton/doppler_security/loaded //this one starts with a cell pre-installed. + preload_cell_type = /obj/item/stock_parts/power_store/cell/high diff --git a/modular_doppler/modular_weapons/code/sec_swords/big_sword.dm b/modular_doppler/modular_weapons/code/sec_swords/big_sword.dm new file mode 100644 index 0000000000000..a4d54f3c7b616 --- /dev/null +++ b/modular_doppler/modular_weapons/code/sec_swords/big_sword.dm @@ -0,0 +1,37 @@ +/obj/item/melee/secblade + name = "security shortblade" + desc = "A utilitarian weapon, handle and blade, with little more. \ + Designed for ease of blade replacement when it inevitably breaks due to mistreatment." + + icon = 'modular_doppler/modular_weapons/icons/obj/sec_swords.dmi' + icon_state = "sec_sword" + lefthand_file = 'modular_doppler/modular_weapons/icons/mob/inhands/melee_lefthand.dmi' + righthand_file = 'modular_doppler/modular_weapons/icons/mob/inhands/melee_righthand.dmi' + inhand_icon_state = "sec_sword" + icon_angle = -20 + + hitsound = 'sound/items/weapons/bladeslice.ogg' + block_sound = 'sound/items/weapons/parry.ogg' + + obj_flags = CONDUCTS_ELECTRICITY + sharpness = SHARP_EDGED + w_class = WEIGHT_CLASS_BULKY + + force = 18 + throwforce = 10 + block_chance = 1 // Nah, I'd win + wound_bonus = -50 + bare_wound_bonus = 10 + + attack_verb_continuous = list("attacks", "slashes", "slices", "tears", "lacerates", "rips", "dices", "rends") + attack_verb_simple = list("attack", "slash", "slice", "tear", "lacerate", "rip", "dice", "rend") + + var/list/alt_continuous = list("stabs", "pierces", "impales") + var/list/alt_simple = list("stab", "pierce", "impale") + +/obj/item/melee/secblade/Initialize(mapload) + . = ..() + AddComponent(/datum/component/butchering, speed = 4 SECONDS, effectiveness = 100) + alt_continuous = string_list(alt_continuous) + alt_simple = string_list(alt_simple) + AddComponent(/datum/component/alternative_sharpness, SHARP_POINTY, alt_continuous, alt_simple, -5) diff --git a/modular_doppler/modular_weapons/code/sec_swords/sheath.dm b/modular_doppler/modular_weapons/code/sec_swords/sheath.dm new file mode 100644 index 0000000000000..fca0a665e5d5e --- /dev/null +++ b/modular_doppler/modular_weapons/code/sec_swords/sheath.dm @@ -0,0 +1,99 @@ +/obj/item/storage/belt/secsword + name = "security weapons sheath" + desc = "A large block of metal made for safely holding on to a shortblade and matching electro baton, \ + along with the rest of an officer's security equipment." + icon = 'modular_doppler/modular_weapons/icons/obj/sec_swords.dmi' + icon_state = "swordcase" + base_icon_state = "swordcase" + worn_icon = 'modular_doppler/modular_weapons/icons/mob/worn/cases.dmi' + worn_icon_state = "swordcase" + w_class = WEIGHT_CLASS_BULKY + interaction_flags_click = parent_type::interaction_flags_click | NEED_DEXTERITY | NEED_HANDS + +/obj/item/storage/belt/secsword/Initialize(mapload) + . = ..() + AddElement(/datum/element/update_icon_updates_onmob) + + atom_storage.max_slots = 5 + atom_storage.do_rustle = FALSE + atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY + atom_storage.max_total_storage = (WEIGHT_CLASS_BULKY + (WEIGHT_CLASS_NORMAL * 4)) // One sword four other things + atom_storage.set_holdable(list( + /obj/item/ammo_box, + /obj/item/ammo_casing/shotgun, + /obj/item/assembly/flash/handheld, + /obj/item/clothing/glasses, + /obj/item/clothing/gloves, + /obj/item/flashlight/seclite, + /obj/item/food/donut, + /obj/item/grenade, + /obj/item/holosign_creator/security, + /obj/item/knife/combat, + /obj/item/melee/baton, + /obj/item/radio, + /obj/item/reagent_containers/spray/pepper, + /obj/item/restraints/handcuffs, + /obj/item/restraints/legcuffs/bola, + /obj/item/melee/secblade, + )) + atom_storage.open_sound = 'sound/items/handling/holster_open.ogg' + atom_storage.open_sound_vary = TRUE + +/obj/item/storage/belt/secsword/examine(mob/user) + . = ..() + if(length(contents)) + . += span_notice("Left Click to draw a stored baton, Right Click to draw a stored blade.") + +/obj/item/storage/belt/secsword/attack_hand(mob/user, list/modifiers) + for(var/obj/item/melee/secblade/blade_runner in contents) + user.visible_message(span_notice("[user] draws [blade_runner] from [src].", span_notice("You draw [blade_runner] from [src]."))) + user.put_in_hands(blade_runner) + playsound(user, 'sound/items/sheath.ogg', 50, TRUE) + update_appearance() + return + return ..() + +/obj/item/storage/belt/secsword/attack_hand_secondary(mob/user, list/modifiers) + for(var/obj/item/melee/baton/doppler_security/simply_shocking in contents) + user.visible_message(span_notice("[user] draws [simply_shocking] from [src].", span_notice("You draw [simply_shocking] from [src]."))) + user.put_in_hands(simply_shocking) + playsound(user, 'sound/items/sheath.ogg', 50, TRUE) + update_appearance() + return + return ..() + +/obj/item/storage/belt/secsword/update_icon_state() + var/has_sword = FALSE + var/has_baton = FALSE + for(var/obj/thing in contents) + if(has_baton && has_sword) + break + if(istype(thing, /obj/item/melee/baton/doppler_security)) + has_baton = TRUE + if(istype(thing, /obj/item/melee/secblade)) + has_sword = TRUE + + icon_state = initial(inhand_icon_state) + inhand_icon_state = initial(inhand_icon_state) + worn_icon_state = initial(worn_icon_state) + + var/next_appendage + if(has_sword && has_baton) + next_appendage = "-full" + else if(has_sword) + next_appendage = "-blayde" + else if(has_baton) + next_appendage = "-stun" + + if(next_appendage) + icon_state += next_appendage + worn_icon_state += next_appendage + return ..() + +/obj/item/storage/belt/secsword/full/PopulateContents() + new /obj/item/melee/secblade(src) + new /obj/item/melee/baton/doppler_security/loaded(src) + new /obj/item/restraints/handcuffs(src) + new /obj/item/reagent_containers/spray/pepper(src) + new /obj/item/assembly/flash/handheld(src) + update_appearance() diff --git a/modular_doppler/modular_weapons/icons/mob/inhands/melee_lefthand.dmi b/modular_doppler/modular_weapons/icons/mob/inhands/melee_lefthand.dmi new file mode 100644 index 0000000000000000000000000000000000000000..02a31fd0c07841903853597348ede0593ba7dff2 GIT binary patch literal 965 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGol~o}TB`&GO$wiq3C7Jno3=9=> zg2M`mO22;zF8KKMiI%sn*10q1gExd4Tr__0Nawtd=1GR4p57f6#zDrHjlC4+JeqW5 zQiwwEN(#b! zLcHUDmM+twg>!qCa)>z{IOg?%yTj>#@`8+fK@-kxfgVBL2~RnDc-p7mo>`lI|L)1p z%@ahdHygj-yj}dRc{-0EG6+3z<%v(5{@YRyYbD!-(MwK?ukRA!DK675_4$1zv-9Pm zPkTL%Fgr}#z#&p!Rkf*rL!$rD`t|v<*52R0WSZpE^Ye}}|M*k7wNW78&&SWQ#d|CT zZKm^H6x;u5Jwr@I+51Xo0e*%69g(-sdbOV&+PZG$-2Jj&v>Ylp1f>rh6Ik~pO0_kn zB9Q6EjhO5O5qCE~ms+U!prYsSk6m}_ob>i+Fz#@2D(LS2$RWJ&SX_3XqIldFh6Cx2 z%}4cy1l&X{o1hVl)%CsYqf8` zCe=CoNysvrEp5H+|L0Tpj2R+rrWvhyv^<9mH7*VWj#cW)#yZg`nKH8qPbEm*terW^!XU8iG?7nUN5A{{6DCTffroZTg|Dbzqz}TLj1Mkxg&u2lEKr} K&t;ucLK6Vn!@Fw$ literal 0 HcmV?d00001 diff --git a/modular_doppler/modular_weapons/icons/mob/inhands/melee_righthand.dmi b/modular_doppler/modular_weapons/icons/mob/inhands/melee_righthand.dmi new file mode 100644 index 0000000000000000000000000000000000000000..d7ff46dada4ac97a54e53fdb34e8015580dd91e9 GIT binary patch literal 967 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGol~o}TB`&GO$wiq3C7Jno3=9=> zg2M`mO22;zF8KKMiI%sn*10q1gExd4Tr__0Nawtd=1GR4p57f6#zDrHjlC4+JeqW5 zQiwwEN(@7X)ne-=bxI z?a7ama#JTtGO*2?H?OCDk%HRuU2F5>um1X#CexIe{Aq#s3(rmNsmD+8B;*%6^~&dJ ziZ~qnE`Q(bl-Nq{zTozRTQh84ux2e}t7?gxdeyw)W~=wbjmEj9|L&};Fq$!iKgTRh zK-L5(xiCHTn55_a2|0DYKL|d*|26a1*`lZ4O8*9J`Sok&*UFrnb*BGpE+~I}_gVe! zAKB}_o(n&y{><2WP@VC3{;zjBr5> z+bZ#qz^L(49$v$pe%Qx%rFP5wj&(GreF?`Qh zUUnV&-?l9OhJy9K-S!LSKRNgET=(;PcQ!n1ZcKkJuzl@rmF)|2>b@GyKK1On@@JJZ z&#o`dFW%WduOmZ)=daZLw`H!ctxH{VBn%l6c^o8|1&%SaU}r}1F6i3(SMi?ygcRKd zt#1e0EA~4?E$oeKe(`?Vv9`79<#{(HjM_HN`aQc!J+9?F%T}`;%02dsH`wdTzqh=q zxxZXY>TyU$MY4KGZ{Qx L{an^LB{Ts5-#EAW literal 0 HcmV?d00001 diff --git a/modular_doppler/modular_weapons/icons/mob/worn/cases.dmi b/modular_doppler/modular_weapons/icons/mob/worn/cases.dmi index f029c2956292f459ddb58ebdce6716ef0e60f6d2..eea1dd5794f4abb6bbc96bf6ea72e55bd0aceebf 100644 GIT binary patch delta 2584 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 VgNZq%y_P>WWuR*eE7Z0R{tI(73H|^8 delta 1248 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 Date: Tue, 24 Dec 2024 07:21:51 -0600 Subject: [PATCH 02/11] you were just like me --- modular_doppler/modular_weapons/code/sec_swords/baton.dm | 2 +- modular_doppler/modular_weapons/code/sec_swords/sheath.dm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modular_doppler/modular_weapons/code/sec_swords/baton.dm b/modular_doppler/modular_weapons/code/sec_swords/baton.dm index 8b3a3d9018879..27be1e35b6f9e 100644 --- a/modular_doppler/modular_weapons/code/sec_swords/baton.dm +++ b/modular_doppler/modular_weapons/code/sec_swords/baton.dm @@ -134,7 +134,7 @@ target.set_stutter_if_lower(16 SECONDS) if(iscarbon(target)) var/mob/living/carbon/big_shocker = target - big_Shocker.electrocute_act(10, src, 1, jitter_time = 0 SECONDS, stutter_time = 0 SECONDS, stun_duration = 0 SECONDS) + big_shocker.electrocute_act(10, src, 1, jitter_time = 0 SECONDS, stutter_time = 0 SECONDS, stun_duration = 0 SECONDS) else target.electrocute_act(10, src, 1) SEND_SIGNAL(target, COMSIG_LIVING_MINOR_SHOCK) diff --git a/modular_doppler/modular_weapons/code/sec_swords/sheath.dm b/modular_doppler/modular_weapons/code/sec_swords/sheath.dm index fca0a665e5d5e..33e1df4fdb544 100644 --- a/modular_doppler/modular_weapons/code/sec_swords/sheath.dm +++ b/modular_doppler/modular_weapons/code/sec_swords/sheath.dm @@ -46,7 +46,7 @@ /obj/item/storage/belt/secsword/attack_hand(mob/user, list/modifiers) for(var/obj/item/melee/secblade/blade_runner in contents) - user.visible_message(span_notice("[user] draws [blade_runner] from [src].", span_notice("You draw [blade_runner] from [src]."))) + user.visible_message(span_notice("[user] draws [blade_runner] from [src]."), span_notice("You draw [blade_runner] from [src].")) user.put_in_hands(blade_runner) playsound(user, 'sound/items/sheath.ogg', 50, TRUE) update_appearance() @@ -55,7 +55,7 @@ /obj/item/storage/belt/secsword/attack_hand_secondary(mob/user, list/modifiers) for(var/obj/item/melee/baton/doppler_security/simply_shocking in contents) - user.visible_message(span_notice("[user] draws [simply_shocking] from [src].", span_notice("You draw [simply_shocking] from [src]."))) + user.visible_message(span_notice("[user] draws [simply_shocking] from [src]."), span_notice("You draw [simply_shocking] from [src].")) user.put_in_hands(simply_shocking) playsound(user, 'sound/items/sheath.ogg', 50, TRUE) update_appearance() From bc6e6e4efd947c2c4086ca30e507a907f059a010 Mon Sep 17 00:00:00 2001 From: Paxilmaniac Date: Tue, 24 Dec 2024 07:34:02 -0600 Subject: [PATCH 03/11] now the animals slowly retreat to the shadows --- .../code/sec_swords/big_sword.dm | 4 ++-- .../modular_weapons/code/sec_swords/sheath.dm | 7 ++++--- .../icons/mob/inhands/melee_lefthand.dmi | Bin 965 -> 966 bytes .../icons/mob/inhands/melee_righthand.dmi | Bin 967 -> 968 bytes 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/modular_doppler/modular_weapons/code/sec_swords/big_sword.dm b/modular_doppler/modular_weapons/code/sec_swords/big_sword.dm index a4d54f3c7b616..9d552f8fafebb 100644 --- a/modular_doppler/modular_weapons/code/sec_swords/big_sword.dm +++ b/modular_doppler/modular_weapons/code/sec_swords/big_sword.dm @@ -20,8 +20,8 @@ force = 18 throwforce = 10 block_chance = 1 // Nah, I'd win - wound_bonus = -50 - bare_wound_bonus = 10 + wound_bonus = 0 + bare_wound_bonus = 20 attack_verb_continuous = list("attacks", "slashes", "slices", "tears", "lacerates", "rips", "dices", "rends") attack_verb_simple = list("attack", "slash", "slice", "tear", "lacerate", "rip", "dice", "rend") diff --git a/modular_doppler/modular_weapons/code/sec_swords/sheath.dm b/modular_doppler/modular_weapons/code/sec_swords/sheath.dm index 33e1df4fdb544..f25669d918c6b 100644 --- a/modular_doppler/modular_weapons/code/sec_swords/sheath.dm +++ b/modular_doppler/modular_weapons/code/sec_swords/sheath.dm @@ -42,7 +42,7 @@ /obj/item/storage/belt/secsword/examine(mob/user) . = ..() if(length(contents)) - . += span_notice("Left Click to draw a stored baton, Right Click to draw a stored blade.") + . += span_notice("Left Click to draw a stored baton, Right Click to draw a stored blade while wearing.") /obj/item/storage/belt/secsword/attack_hand(mob/user, list/modifiers) for(var/obj/item/melee/secblade/blade_runner in contents) @@ -54,6 +54,8 @@ return ..() /obj/item/storage/belt/secsword/attack_hand_secondary(mob/user, list/modifiers) + if(!(slot & ITEM_SLOT_BELT)) + return ..() for(var/obj/item/melee/baton/doppler_security/simply_shocking in contents) user.visible_message(span_notice("[user] draws [simply_shocking] from [src]."), span_notice("You draw [simply_shocking] from [src].")) user.put_in_hands(simply_shocking) @@ -73,8 +75,7 @@ if(istype(thing, /obj/item/melee/secblade)) has_sword = TRUE - icon_state = initial(inhand_icon_state) - inhand_icon_state = initial(inhand_icon_state) + icon_state = initial(icon_state) worn_icon_state = initial(worn_icon_state) var/next_appendage diff --git a/modular_doppler/modular_weapons/icons/mob/inhands/melee_lefthand.dmi b/modular_doppler/modular_weapons/icons/mob/inhands/melee_lefthand.dmi index 02a31fd0c07841903853597348ede0593ba7dff2..d7263232529c304ed0bd858681a3d2a618c2db78 100644 GIT binary patch delta 71 zcmV-N0J#6f2gV1GBmsJnB}+FszPLQUC`E~jGbOXA7^IPlGp#5wHxqa;ttc@!6~s0~C`?K$$qa;ttc@!6~s0~C`?K$$ Date: Tue, 24 Dec 2024 07:50:44 -0600 Subject: [PATCH 04/11] o kurwa perkele --- modular_doppler/modular_weapons/code/sec_swords/sheath.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_doppler/modular_weapons/code/sec_swords/sheath.dm b/modular_doppler/modular_weapons/code/sec_swords/sheath.dm index f25669d918c6b..c252ed2bc0eca 100644 --- a/modular_doppler/modular_weapons/code/sec_swords/sheath.dm +++ b/modular_doppler/modular_weapons/code/sec_swords/sheath.dm @@ -54,7 +54,7 @@ return ..() /obj/item/storage/belt/secsword/attack_hand_secondary(mob/user, list/modifiers) - if(!(slot & ITEM_SLOT_BELT)) + if(!(user.get_slot_by_item(src) & ITEM_SLOT_BELT)) return ..() for(var/obj/item/melee/baton/doppler_security/simply_shocking in contents) user.visible_message(span_notice("[user] draws [simply_shocking] from [src]."), span_notice("You draw [simply_shocking] from [src].")) From 19876b0a115c65ba661aba6decc755a88939c826 Mon Sep 17 00:00:00 2001 From: Paxilmaniac Date: Tue, 24 Dec 2024 07:57:48 -0600 Subject: [PATCH 05/11] look what you did there you found a secret --- modular_doppler/modular_weapons/code/sec_swords/sheath.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modular_doppler/modular_weapons/code/sec_swords/sheath.dm b/modular_doppler/modular_weapons/code/sec_swords/sheath.dm index c252ed2bc0eca..4afc2ba85e6c8 100644 --- a/modular_doppler/modular_weapons/code/sec_swords/sheath.dm +++ b/modular_doppler/modular_weapons/code/sec_swords/sheath.dm @@ -45,6 +45,8 @@ . += span_notice("Left Click to draw a stored baton, Right Click to draw a stored blade while wearing.") /obj/item/storage/belt/secsword/attack_hand(mob/user, list/modifiers) + if(!(user.get_slot_by_item(src) & ITEM_SLOT_BELT)) + return ..() for(var/obj/item/melee/secblade/blade_runner in contents) user.visible_message(span_notice("[user] draws [blade_runner] from [src]."), span_notice("You draw [blade_runner] from [src].")) user.put_in_hands(blade_runner) From cab1f28a1dfaa4e98b9d80fa84edab88d8d49c66 Mon Sep 17 00:00:00 2001 From: Paxilmaniac Date: Tue, 24 Dec 2024 08:07:06 -0600 Subject: [PATCH 06/11] makes rclick not draw both weapons --- modular_doppler/modular_weapons/code/sec_swords/sheath.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_doppler/modular_weapons/code/sec_swords/sheath.dm b/modular_doppler/modular_weapons/code/sec_swords/sheath.dm index 4afc2ba85e6c8..c833d501b40ce 100644 --- a/modular_doppler/modular_weapons/code/sec_swords/sheath.dm +++ b/modular_doppler/modular_weapons/code/sec_swords/sheath.dm @@ -63,7 +63,7 @@ user.put_in_hands(simply_shocking) playsound(user, 'sound/items/sheath.ogg', 50, TRUE) update_appearance() - return + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN return ..() /obj/item/storage/belt/secsword/update_icon_state() From f31c8e6f81ede35a81fd51f1ac9de401d359055c Mon Sep 17 00:00:00 2001 From: Paxilmaniac Date: Wed, 25 Dec 2024 22:57:46 -0600 Subject: [PATCH 07/11] lets the batons actually be recharged --- code/game/machinery/recharger.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 226e19bfe84f1..14198f01409dd 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -18,6 +18,7 @@ /obj/item/ammo_box/magazine/recharge, /obj/item/modular_computer, /obj/item/gun/ballistic/automatic/battle_rifle, + /obj/item/melee/baton/doppler_security, // DOPPLER EDIT ADDITION )) /obj/machinery/recharger/RefreshParts() From 22eeeac4143178091d4472559981f11e6cb4e2f5 Mon Sep 17 00:00:00 2001 From: Paxilmaniac Date: Wed, 25 Dec 2024 22:58:19 -0600 Subject: [PATCH 08/11] fixes text --- modular_doppler/modular_weapons/code/sec_swords/sheath.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_doppler/modular_weapons/code/sec_swords/sheath.dm b/modular_doppler/modular_weapons/code/sec_swords/sheath.dm index c833d501b40ce..ceb3fff9215cc 100644 --- a/modular_doppler/modular_weapons/code/sec_swords/sheath.dm +++ b/modular_doppler/modular_weapons/code/sec_swords/sheath.dm @@ -42,7 +42,7 @@ /obj/item/storage/belt/secsword/examine(mob/user) . = ..() if(length(contents)) - . += span_notice("Left Click to draw a stored baton, Right Click to draw a stored blade while wearing.") + . += span_notice("Left Click to draw a stored blade, Right Click to draw a stored baton while wearing.") /obj/item/storage/belt/secsword/attack_hand(mob/user, list/modifiers) if(!(user.get_slot_by_item(src) & ITEM_SLOT_BELT)) From c47cd082ec87d4a2d1952b258098d4c2706e350f Mon Sep 17 00:00:00 2001 From: Paxilmaniac Date: Thu, 26 Dec 2024 00:05:52 -0600 Subject: [PATCH 09/11] lets you rename them --- modular_doppler/modular_weapons/code/sec_swords/big_sword.dm | 1 + modular_doppler/modular_weapons/code/sec_swords/sheath.dm | 1 + 2 files changed, 2 insertions(+) diff --git a/modular_doppler/modular_weapons/code/sec_swords/big_sword.dm b/modular_doppler/modular_weapons/code/sec_swords/big_sword.dm index 9d552f8fafebb..9d882faccc933 100644 --- a/modular_doppler/modular_weapons/code/sec_swords/big_sword.dm +++ b/modular_doppler/modular_weapons/code/sec_swords/big_sword.dm @@ -16,6 +16,7 @@ obj_flags = CONDUCTS_ELECTRICITY sharpness = SHARP_EDGED w_class = WEIGHT_CLASS_BULKY + obj_flags = UNIQUE_RENAME force = 18 throwforce = 10 diff --git a/modular_doppler/modular_weapons/code/sec_swords/sheath.dm b/modular_doppler/modular_weapons/code/sec_swords/sheath.dm index ceb3fff9215cc..f1a948187689a 100644 --- a/modular_doppler/modular_weapons/code/sec_swords/sheath.dm +++ b/modular_doppler/modular_weapons/code/sec_swords/sheath.dm @@ -9,6 +9,7 @@ worn_icon_state = "swordcase" w_class = WEIGHT_CLASS_BULKY interaction_flags_click = parent_type::interaction_flags_click | NEED_DEXTERITY | NEED_HANDS + obj_flags = UNIQUE_RENAME /obj/item/storage/belt/secsword/Initialize(mapload) . = ..() From 587d4612e5c2d1c006396709d810637717d9fdca Mon Sep 17 00:00:00 2001 From: Paxilmaniac Date: Sat, 28 Dec 2024 18:28:22 -0600 Subject: [PATCH 10/11] real --- .../holodeck_doppler_sword_trainer.dmm | 346 ++++++++++++++++++ .../code/sec_swords/big_sword.dm | 11 + .../code/sec_swords/holodeck_trainer.dm | 4 + .../modular_weapons/code/sec_swords/sheath.dm | 6 + .../modular_weapons/icons/obj/sec_swords.dmi | Bin 1496 -> 1747 bytes tgstation.dme | 1 + 6 files changed, 368 insertions(+) create mode 100644 _maps/templates/holodeck_doppler_sword_trainer.dmm create mode 100644 modular_doppler/modular_weapons/code/sec_swords/holodeck_trainer.dm diff --git a/_maps/templates/holodeck_doppler_sword_trainer.dmm b/_maps/templates/holodeck_doppler_sword_trainer.dmm new file mode 100644 index 0000000000000..23c46fd8533eb --- /dev/null +++ b/_maps/templates/holodeck_doppler_sword_trainer.dmm @@ -0,0 +1,346 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/effect/turf_decal/tile/dark/half{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 8 + }, +/turf/open/floor/iron/smooth_large, +/area/template_noop) +"c" = ( +/obj/effect/turf_decal/tile/dark/half{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 8 + }, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/template_noop) +"d" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/template_noop) +"e" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/template_noop) +"h" = ( +/obj/effect/turf_decal/bot_white/left, +/turf/open/floor/iron/smooth_large, +/area/template_noop) +"k" = ( +/obj/effect/turf_decal/tile/dark/half{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 4 + }, +/turf/open/floor/iron/smooth_large, +/area/template_noop) +"l" = ( +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 5 + }, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/template_noop) +"m" = ( +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 4 + }, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/template_noop) +"n" = ( +/turf/open/floor/iron/smooth, +/area/template_noop) +"o" = ( +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 6 + }, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/template_noop) +"q" = ( +/obj/structure/rack, +/obj/item/storage/belt/secsword/training, +/obj/item/storage/belt/secsword/training{ + pixel_y = 4 + }, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/smooth_large, +/area/template_noop) +"r" = ( +/obj/effect/turf_decal/tile/neutral/full, +/turf/open/floor/iron/smooth_large, +/area/template_noop) +"v" = ( +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 5 + }, +/obj/machinery/shower/directional/east, +/obj/structure/fluff/shower_drain, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/template_noop) +"w" = ( +/turf/open/floor/iron/smooth_large, +/area/template_noop) +"x" = ( +/turf/open/floor/catwalk_floor/iron_smooth, +/area/template_noop) +"y" = ( +/obj/structure/rack, +/obj/item/shield/riot{ + pixel_x = 2 + }, +/obj/item/shield/riot{ + pixel_y = 4; + pixel_x = 2 + }, +/obj/item/shield/riot{ + pixel_x = -2 + }, +/obj/item/shield/riot{ + pixel_y = 4; + pixel_x = -2 + }, +/obj/structure/railing{ + dir = 5 + }, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/smooth_large, +/area/template_noop) +"B" = ( +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/template_noop) +"C" = ( +/obj/effect/turf_decal/delivery/white, +/obj/item/kirbyplants/random/fullysynthetic, +/turf/open/floor/iron/smooth_large, +/area/template_noop) +"D" = ( +/obj/structure/railing{ + dir = 5 + }, +/obj/structure/rack, +/obj/item/storage/medkit/frontier, +/obj/item/storage/box/bandages, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/template_noop) +"F" = ( +/obj/effect/turf_decal/caution/white{ + dir = 8 + }, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/template_noop) +"I" = ( +/obj/effect/turf_decal/loading_area/white{ + dir = 4 + }, +/turf/open/floor/iron/smooth_large, +/area/template_noop) +"L" = ( +/obj/effect/turf_decal/bot_white/right, +/turf/open/floor/iron/smooth_large, +/area/template_noop) +"M" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/delivery/white, +/obj/item/kirbyplants/random/fullysynthetic, +/turf/open/floor/iron/smooth_large, +/area/template_noop) +"P" = ( +/obj/structure/rack, +/obj/item/shield/riot{ + pixel_x = -2 + }, +/obj/item/shield/riot{ + pixel_y = 4; + pixel_x = -2 + }, +/obj/item/shield/riot{ + pixel_x = 2 + }, +/obj/item/shield/riot{ + pixel_y = 4; + pixel_x = 2 + }, +/obj/structure/railing{ + dir = 6 + }, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/smooth_large, +/area/template_noop) +"Q" = ( +/obj/effect/turf_decal/delivery/white, +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/iron/smooth_large, +/area/template_noop) +"R" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/delivery/white, +/obj/structure/closet/boxinggloves, +/turf/open/floor/iron/smooth_large, +/area/template_noop) +"W" = ( +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 6 + }, +/obj/machinery/shower/directional/east, +/obj/structure/fluff/shower_drain, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/template_noop) +"X" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/structure/table, +/obj/item/clothing/mask/whistle{ + pixel_y = 7 + }, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/template_noop) +"Y" = ( +/obj/effect/turf_decal/tile/dark/half{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 4 + }, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/template_noop) + +(1,1,1) = {" +Q +m +o +I +v +W +I +l +m +C +"} +(2,1,1) = {" +q +x +x +n +x +x +n +x +x +q +"} +(3,1,1) = {" +q +B +F +h +e +B +L +F +B +q +"} +(4,1,1) = {" +M +P +r +d +D +X +d +r +y +R +"} +(5,1,1) = {" +k +Y +Y +k +Y +Y +k +Y +Y +k +"} +(6,1,1) = {" +n +x +x +n +x +x +n +x +x +n +"} +(7,1,1) = {" +L +B +B +w +B +B +w +B +B +h +"} +(8,1,1) = {" +n +x +x +n +x +x +n +x +x +n +"} +(9,1,1) = {" +a +c +c +a +c +c +a +c +c +a +"} diff --git a/modular_doppler/modular_weapons/code/sec_swords/big_sword.dm b/modular_doppler/modular_weapons/code/sec_swords/big_sword.dm index 9d882faccc933..4ce45b2d631fc 100644 --- a/modular_doppler/modular_weapons/code/sec_swords/big_sword.dm +++ b/modular_doppler/modular_weapons/code/sec_swords/big_sword.dm @@ -36,3 +36,14 @@ alt_continuous = string_list(alt_continuous) alt_simple = string_list(alt_simple) AddComponent(/datum/component/alternative_sharpness, SHARP_POINTY, alt_continuous, alt_simple, -5) + +/obj/item/melee/secblade/training + name = "training shortblade" + desc = "A utilitarian weapon, handle and blade, with little more. \ + This one doesn't seem completely real, incapable of bloodshed but likely still hurts quite a lot." + + icon_state = "training_sword" + + damtype = STAMINA + wound_bonus = -50 + bare_wound_bonus = -50 diff --git a/modular_doppler/modular_weapons/code/sec_swords/holodeck_trainer.dm b/modular_doppler/modular_weapons/code/sec_swords/holodeck_trainer.dm new file mode 100644 index 0000000000000..1f2eab3526d7d --- /dev/null +++ b/modular_doppler/modular_weapons/code/sec_swords/holodeck_trainer.dm @@ -0,0 +1,4 @@ +/datum/map_template/holodeck/doppler_sword_trainer + name = "Holodeck - Shortblade Trainer" + template_id = "holodeck_doppler_sword_trainer" + mappath = "_maps/templates/holodeck_doppler_sword_trainer.dmm" diff --git a/modular_doppler/modular_weapons/code/sec_swords/sheath.dm b/modular_doppler/modular_weapons/code/sec_swords/sheath.dm index f1a948187689a..aa070c9405d3c 100644 --- a/modular_doppler/modular_weapons/code/sec_swords/sheath.dm +++ b/modular_doppler/modular_weapons/code/sec_swords/sheath.dm @@ -101,3 +101,9 @@ new /obj/item/reagent_containers/spray/pepper(src) new /obj/item/assembly/flash/handheld(src) update_appearance() + +/obj/item/storage/belt/secsword/training/PopulateContents() + new /obj/item/melee/secblade/training(src) // No way attack on titan + new /obj/item/melee/secblade/training(src) + new /obj/item/melee/baton/doppler_security/loaded(src) + update_appearance() diff --git a/modular_doppler/modular_weapons/icons/obj/sec_swords.dmi b/modular_doppler/modular_weapons/icons/obj/sec_swords.dmi index 18401848bf929cbecdc90c915963ee83e7b45e0d..adfbab70fd8859059667f180d96f249aa2b49222 100644 GIT binary patch delta 1744 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 diff --git a/tgstation.dme b/tgstation.dme index a98031690f55d..d96b19a59796d 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7175,6 +7175,7 @@ #include "modular_doppler\modular_weapons\code\melee.dm" #include "modular_doppler\modular_weapons\code\sec_swords\baton.dm" #include "modular_doppler\modular_weapons\code\sec_swords\big_sword.dm" +#include "modular_doppler\modular_weapons\code\sec_swords\holodeck_trainer.dm" #include "modular_doppler\modular_weapons\code\sec_swords\sheath.dm" #include "modular_doppler\modular_weapons\company_and_or_faction_based\carwo_defense_systems\gunsets.dm" #include "modular_doppler\modular_weapons\manufacturer_examine\code\gun_company_additions.dm" From bb2fb3aec34426c280569186b937e5c9ea098cc7 Mon Sep 17 00:00:00 2001 From: Paxilmaniac Date: Sat, 28 Dec 2024 18:56:59 -0600 Subject: [PATCH 11/11] war --- .../holodeck_doppler_sword_trainer.dmm | 165 ++++++++++++++---- 1 file changed, 127 insertions(+), 38 deletions(-) diff --git a/_maps/templates/holodeck_doppler_sword_trainer.dmm b/_maps/templates/holodeck_doppler_sword_trainer.dmm index 23c46fd8533eb..91743b296245e 100644 --- a/_maps/templates/holodeck_doppler_sword_trainer.dmm +++ b/_maps/templates/holodeck_doppler_sword_trainer.dmm @@ -6,7 +6,10 @@ /obj/effect/turf_decal/trimline/yellow/warning{ dir = 8 }, -/turf/open/floor/iron/smooth_large, +/turf/open/floor/holofloor{ + icon_state = "smooth_large"; + base_icon_state = "smooth_large" + }, /area/template_noop) "c" = ( /obj/effect/turf_decal/tile/dark/half{ @@ -15,7 +18,9 @@ /obj/effect/turf_decal/trimline/yellow/warning{ dir = 8 }, -/turf/open/floor/iron/smooth_half{ +/turf/open/floor/holofloor{ + base_icon_state = "smooth_half"; + icon_state = "smooth_half"; dir = 1 }, /area/template_noop) @@ -23,19 +28,35 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 4 }, -/turf/open/floor/iron/smooth, +/turf/open/floor/holofloor{ + base_icon_state = "smooth"; + icon_state = "smooth"; + dir = 1 + }, /area/template_noop) "e" = ( /obj/structure/chair{ dir = 4 }, -/turf/open/floor/iron/smooth_half{ +/turf/open/floor/holofloor{ + base_icon_state = "smooth_half"; + icon_state = "smooth_half"; dir = 1 }, /area/template_noop) +"f" = ( +/obj/effect/turf_decal/arrows/white, +/turf/open/floor/holofloor{ + icon_state = "smooth_large"; + base_icon_state = "smooth_large" + }, +/area/template_noop) "h" = ( /obj/effect/turf_decal/bot_white/left, -/turf/open/floor/iron/smooth_large, +/turf/open/floor/holofloor{ + icon_state = "smooth_large"; + base_icon_state = "smooth_large" + }, /area/template_noop) "k" = ( /obj/effect/turf_decal/tile/dark/half{ @@ -44,13 +65,18 @@ /obj/effect/turf_decal/trimline/yellow/warning{ dir = 4 }, -/turf/open/floor/iron/smooth_large, +/turf/open/floor/holofloor{ + icon_state = "smooth_large"; + base_icon_state = "smooth_large" + }, /area/template_noop) "l" = ( /obj/effect/turf_decal/trimline/neutral/warning{ dir = 5 }, -/turf/open/floor/iron/smooth_half{ +/turf/open/floor/holofloor{ + base_icon_state = "smooth_half"; + icon_state = "smooth_half"; dir = 1 }, /area/template_noop) @@ -58,18 +84,26 @@ /obj/effect/turf_decal/trimline/neutral/warning{ dir = 4 }, -/turf/open/floor/iron/smooth_half{ +/turf/open/floor/holofloor{ + base_icon_state = "smooth_half"; + icon_state = "smooth_half"; dir = 1 }, /area/template_noop) "n" = ( -/turf/open/floor/iron/smooth, +/turf/open/floor/holofloor{ + base_icon_state = "smooth"; + icon_state = "smooth"; + dir = 1 + }, /area/template_noop) "o" = ( /obj/effect/turf_decal/trimline/neutral/warning{ dir = 6 }, -/turf/open/floor/iron/smooth_half{ +/turf/open/floor/holofloor{ + base_icon_state = "smooth_half"; + icon_state = "smooth_half"; dir = 1 }, /area/template_noop) @@ -80,11 +114,17 @@ pixel_y = 4 }, /obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/smooth_large, +/turf/open/floor/holofloor{ + icon_state = "smooth_large"; + base_icon_state = "smooth_large" + }, /area/template_noop) "r" = ( /obj/effect/turf_decal/tile/neutral/full, -/turf/open/floor/iron/smooth_large, +/turf/open/floor/holofloor{ + icon_state = "smooth_large"; + base_icon_state = "smooth_large" + }, /area/template_noop) "v" = ( /obj/effect/turf_decal/trimline/neutral/warning{ @@ -92,15 +132,26 @@ }, /obj/machinery/shower/directional/east, /obj/structure/fluff/shower_drain, -/turf/open/floor/iron/smooth_half{ +/turf/open/floor/holofloor{ + base_icon_state = "smooth_half"; + icon_state = "smooth_half"; dir = 1 }, /area/template_noop) "w" = ( -/turf/open/floor/iron/smooth_large, +/turf/open/floor/holofloor{ + icon_state = "smooth_large"; + base_icon_state = "smooth_large" + }, /area/template_noop) "x" = ( -/turf/open/floor/catwalk_floor/iron_smooth, +/obj/effect/turf_decal/arrows/white{ + dir = 1 + }, +/turf/open/floor/holofloor{ + icon_state = "smooth_large"; + base_icon_state = "smooth_large" + }, /area/template_noop) "y" = ( /obj/structure/rack, @@ -122,17 +173,25 @@ dir = 5 }, /obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/smooth_large, +/turf/open/floor/holofloor{ + icon_state = "smooth_large"; + base_icon_state = "smooth_large" + }, /area/template_noop) "B" = ( -/turf/open/floor/iron/smooth_half{ +/turf/open/floor/holofloor{ + base_icon_state = "smooth_half"; + icon_state = "smooth_half"; dir = 1 }, /area/template_noop) "C" = ( /obj/effect/turf_decal/delivery/white, /obj/item/kirbyplants/random/fullysynthetic, -/turf/open/floor/iron/smooth_large, +/turf/open/floor/holofloor{ + icon_state = "smooth_large"; + base_icon_state = "smooth_large" + }, /area/template_noop) "D" = ( /obj/structure/railing{ @@ -141,13 +200,18 @@ /obj/structure/rack, /obj/item/storage/medkit/frontier, /obj/item/storage/box/bandages, -/turf/open/floor/catwalk_floor/iron_smooth, +/turf/open/floor/holofloor{ + icon_state = "smooth_large"; + base_icon_state = "smooth_large" + }, /area/template_noop) "F" = ( /obj/effect/turf_decal/caution/white{ dir = 8 }, -/turf/open/floor/iron/smooth_half{ +/turf/open/floor/holofloor{ + base_icon_state = "smooth_half"; + icon_state = "smooth_half"; dir = 1 }, /area/template_noop) @@ -155,11 +219,17 @@ /obj/effect/turf_decal/loading_area/white{ dir = 4 }, -/turf/open/floor/iron/smooth_large, +/turf/open/floor/holofloor{ + icon_state = "smooth_large"; + base_icon_state = "smooth_large" + }, /area/template_noop) "L" = ( /obj/effect/turf_decal/bot_white/right, -/turf/open/floor/iron/smooth_large, +/turf/open/floor/holofloor{ + icon_state = "smooth_large"; + base_icon_state = "smooth_large" + }, /area/template_noop) "M" = ( /obj/structure/railing{ @@ -167,7 +237,10 @@ }, /obj/effect/turf_decal/delivery/white, /obj/item/kirbyplants/random/fullysynthetic, -/turf/open/floor/iron/smooth_large, +/turf/open/floor/holofloor{ + icon_state = "smooth_large"; + base_icon_state = "smooth_large" + }, /area/template_noop) "P" = ( /obj/structure/rack, @@ -189,12 +262,18 @@ dir = 6 }, /obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/smooth_large, +/turf/open/floor/holofloor{ + icon_state = "smooth_large"; + base_icon_state = "smooth_large" + }, /area/template_noop) "Q" = ( /obj/effect/turf_decal/delivery/white, /obj/structure/reagent_dispensers/water_cooler, -/turf/open/floor/iron/smooth_large, +/turf/open/floor/holofloor{ + icon_state = "smooth_large"; + base_icon_state = "smooth_large" + }, /area/template_noop) "R" = ( /obj/structure/railing{ @@ -202,7 +281,10 @@ }, /obj/effect/turf_decal/delivery/white, /obj/structure/closet/boxinggloves, -/turf/open/floor/iron/smooth_large, +/turf/open/floor/holofloor{ + icon_state = "smooth_large"; + base_icon_state = "smooth_large" + }, /area/template_noop) "W" = ( /obj/effect/turf_decal/trimline/neutral/warning{ @@ -210,7 +292,9 @@ }, /obj/machinery/shower/directional/east, /obj/structure/fluff/shower_drain, -/turf/open/floor/iron/smooth_half{ +/turf/open/floor/holofloor{ + base_icon_state = "smooth_half"; + icon_state = "smooth_half"; dir = 1 }, /area/template_noop) @@ -222,7 +306,10 @@ /obj/item/clothing/mask/whistle{ pixel_y = 7 }, -/turf/open/floor/catwalk_floor/iron_smooth, +/turf/open/floor/holofloor{ + icon_state = "smooth_large"; + base_icon_state = "smooth_large" + }, /area/template_noop) "Y" = ( /obj/effect/turf_decal/tile/dark/half{ @@ -231,7 +318,9 @@ /obj/effect/turf_decal/trimline/yellow/warning{ dir = 4 }, -/turf/open/floor/iron/smooth_half{ +/turf/open/floor/holofloor{ + base_icon_state = "smooth_half"; + icon_state = "smooth_half"; dir = 1 }, /area/template_noop) @@ -250,13 +339,13 @@ C "} (2,1,1) = {" q -x +f x n -x +f x n -x +f x q "} @@ -298,13 +387,13 @@ k "} (6,1,1) = {" n -x +f x n -x +f x n -x +f x n "} @@ -322,13 +411,13 @@ h "} (8,1,1) = {" n -x +f x n -x +f x n -x +f x n "}