From eaea44ad9961359f3bea17318566734880c467b4 Mon Sep 17 00:00:00 2001 From: Constellado <64122807+Constellado@users.noreply.github.com> Date: Fri, 19 Dec 2025 22:06:31 +1300 Subject: [PATCH 01/10] Adds clockwork toys and a mini forklift The mini forklift cannot lift anything, yet. --- code/_compile_options.dm | 2 +- icons/map_icons/items/pda.dmi | Bin 11621 -> 8768 bytes maplestation.dme | 1 + .../volkan_equipment/code/clockworktoys.dm | 205 ++++++++++++++++++ .../volkan_equipment/code/mini_forklift.dm | 58 +++++ .../volkan_equipment/icons/clockworkgifts.dmi | Bin 0 -> 6952 bytes .../volkan_equipment/icons/forklift.dmi | Bin 0 -> 2667 bytes 7 files changed, 265 insertions(+), 1 deletion(-) create mode 100644 maplestation_modules/story_content/volkan_equipment/code/clockworktoys.dm create mode 100644 maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm create mode 100644 maplestation_modules/story_content/volkan_equipment/icons/clockworkgifts.dmi create mode 100644 maplestation_modules/story_content/volkan_equipment/icons/forklift.dmi diff --git a/code/_compile_options.dm b/code/_compile_options.dm index f00c03538fb7..5475392fe0d2 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -173,7 +173,7 @@ // #define HEALTH_DEBUG /// Uncomment to compile content related to the story or characters of Maplestation. -// #define MAPLESTATION_STORY_CONTENT +#define MAPLESTATION_STORY_CONTENT // Always compile story content for unit tests. Todo : Just have a single unit test dedicated to story content. #ifdef UNIT_TESTS diff --git a/icons/map_icons/items/pda.dmi b/icons/map_icons/items/pda.dmi index 0712af49864f20397079b5c060e65008f60a5394..987a181dde31056397a734e2161e0ed998d647cf 100644 GIT binary patch literal 8768 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 literal 11621 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 diff --git a/maplestation.dme b/maplestation.dme index 16445d510ef8..3418ae161a4b 100644 --- a/maplestation.dme +++ b/maplestation.dme @@ -6821,6 +6821,7 @@ #include "maplestation_modules\story_content\story_posters\code\contraband.dm" #include "maplestation_modules\story_content\stranger_equipment\code\strangerclothing.dm" #include "maplestation_modules\story_content\volkan_equipment\code\councilgifts.dm" +#include "maplestation_modules\story_content\volkan_equipment\code\mini_forklift.dm" #include "maplestation_modules\story_content\volkan_equipment\code\sunitems.dm" #include "maplestation_modules\story_content\volkan_equipment\code\volkancomponents.dm" #include "maplestation_modules\story_content\volkan_equipment\code\volkanitems.dm" diff --git a/maplestation_modules/story_content/volkan_equipment/code/clockworktoys.dm b/maplestation_modules/story_content/volkan_equipment/code/clockworktoys.dm new file mode 100644 index 000000000000..9804f5a88482 --- /dev/null +++ b/maplestation_modules/story_content/volkan_equipment/code/clockworktoys.dm @@ -0,0 +1,205 @@ +#define SPECIAL_ATTACK_HEAL 1 +#define SPECIAL_ATTACK_DAMAGE 2 +#define SPECIAL_ATTACK_UTILITY 3 +#define SPECIAL_ATTACK_OTHER 4 + +#define MAX_BATTLE_LENGTH 50 + +/obj/item/toy/mecha/clockwork + name = "clockwork toy" + icon = 'maplestation_modules/story_content/volkan_equipment/icons/clockworkgifts.dmi' + desc = "A metal clockwork toy with a small windup key underneath." + icon_state = "bug" + verb_say = "clicks" + verb_ask = "ticks" + verb_exclaim = "clacks" + verb_yell = "clacks" + max_combat_health = 4 + special_attack_type = SPECIAL_ATTACK_DAMAGE + special_attack_cry = "*flip" + +/obj/item/toy/mecha/clockwork/Initialize(mapload) + . = ..() + RemoveElement(/datum/element/series, /obj/item/toy/mecha, "Mini-Mecha action figures") + AddElement(/datum/element/series, /obj/item/toy/mecha/clockwork, "CaLE's Handmade Clockwork Toys") + +/** +* A Modular redo of this proc. It is the exact same thing as the original but with different verbs, etc. I want this cool thing but they are not plastic! +*/ +/obj/item/toy/mecha/clockwork/mecha_brawl(obj/item/toy/mecha/attacker, mob/living/carbon/attacker_controller, mob/living/carbon/opponent) + //A GOOD DAY FOR A SWELL BATTLE! + attacker_controller.visible_message(span_danger("[attacker_controller.name] collides [attacker] with [src]! Looks like they're preparing for a little battle!"), \ + span_danger("You collide [attacker] into [src], sparking a battle!"), \ + span_hear("You hear metal clinking onto metal!"), COMBAT_MESSAGE_RANGE) + + /// Who's in control of the defender (src)? + var/mob/living/carbon/src_controller = (opponent)? opponent : attacker_controller + /// How long has the battle been going? + var/battle_length = 0 + + in_combat = TRUE + attacker.in_combat = TRUE + + //1.5 second cooldown * 20 = 30 second cooldown after a fight + timer = world.time + cooldown*cooldown_multiplier + attacker.timer = world.time + attacker.cooldown*attacker.cooldown_multiplier + + sleep(1 SECONDS) + //--THE BATTLE BEGINS-- + while(combat_health > 0 && attacker.combat_health > 0 && battle_length < MAX_BATTLE_LENGTH) + if(!combat_sleep(0.5 SECONDS, attacker, attacker_controller, opponent)) //combat_sleep checks everything we need to have checked for combat to continue + break + + //before we do anything - deal with charged attacks + if(special_attack_charged) + src_controller.visible_message(span_danger("[src] unleashes its special attack!!"), \ + span_danger("You unleash [src]'s special attack!")) + special_attack_move(attacker) + else if(attacker.special_attack_charged) + + attacker_controller.visible_message(span_danger("[attacker] unleashes its special attack!!"), \ + span_danger("You unleash [attacker]'s special attack!")) + attacker.special_attack_move(src) + else + //process the cooldowns + if(special_attack_cooldown > 0) + special_attack_cooldown-- + if(attacker.special_attack_cooldown > 0) + attacker.special_attack_cooldown-- + + //combat commences + switch(rand(1,8)) + if(1 to 3) //attacker wins + if(attacker.special_attack_cooldown == 0 && attacker.combat_health <= round(attacker.max_combat_health/3)) //if health is less than 1/3 and special off CD, use it + attacker.special_attack_charged = TRUE + attacker_controller.visible_message(span_danger("[attacker] begins charging its special attack!!"), \ + span_danger("You begin charging [attacker]'s special attack!")) + else //just attack + attacker.SpinAnimation(5, 0) + playsound(attacker, 'sound/effects/footstep/rustystep1.ogg', 30, TRUE) + combat_health-- + attacker_controller.visible_message(span_danger("[attacker] devastates [src]!"), \ + span_danger("You ram [attacker] into [src]!"), \ + span_hear("You hear metal clinking!"), COMBAT_MESSAGE_RANGE) + if(prob(5)) + combat_health-- + playsound(src, 'sound/effects/meteorimpact.ogg', 20, TRUE) + attacker_controller.visible_message(span_boldwarning("...and lands a CRIPPLING BLOW!"), \ + span_boldwarning("...and you land a CRIPPLING blow on [src]!"), null, COMBAT_MESSAGE_RANGE) + + if(4) //both lose + attacker.SpinAnimation(5, 0) + SpinAnimation(5, 0) + combat_health-- + attacker.combat_health-- + do_sparks(2, FALSE, src) + do_sparks(2, FALSE, attacker) + if(prob(50)) + attacker_controller.visible_message(span_danger("[attacker] and [src] clash dramatically, causing sparks to fly!"), \ + span_danger("[attacker] and [src] clash dramatically, causing sparks to fly!"), \ + span_hear("You hear metal clinking!"), COMBAT_MESSAGE_RANGE) + else + src_controller.visible_message(span_danger("[src] and [attacker] clash dramatically, causing sparks to fly!"), \ + span_danger("[src] and [attacker] clash dramatically, causing sparks to fly!"), \ + span_hear("You hear metal clinking!"), COMBAT_MESSAGE_RANGE) + if(5) //both win + playsound(attacker, 'sound/weapons/parry.ogg', 20, TRUE) + if(prob(50)) + attacker_controller.visible_message(span_danger("[src]'s attack deflects off of [attacker]."), \ + span_danger("[src]'s attack deflects off of [attacker]."), \ + span_hear("You hear metal clinking!"), COMBAT_MESSAGE_RANGE) + else + src_controller.visible_message(span_danger("[attacker]'s attack deflects off of [src]."), \ + span_danger("[attacker]'s attack deflects off of [src]."), \ + span_hear("You hear metal clinking!"), COMBAT_MESSAGE_RANGE) + + if(6 to 8) //defender wins + if(special_attack_cooldown == 0 && combat_health <= round(max_combat_health/3)) //if health is less than 1/3 and special off CD, use it + special_attack_charged = TRUE + src_controller.visible_message(span_danger("[src] begins charging its special attack!!"), \ + span_danger("You begin charging [src]'s special attack!")) + else //just attack + SpinAnimation(5, 0) + playsound(src, 'sound/effects/footstep/rustystep1.ogg', 30, TRUE) + attacker.combat_health-- + src_controller.visible_message(span_danger("[src] smashes [attacker]!"), \ + span_danger("You smash [src] into [attacker]!"), \ + span_hear("You hear metal clinking!"), COMBAT_MESSAGE_RANGE) + if(prob(5)) + attacker.combat_health-- + playsound(attacker, 'sound/effects/meteorimpact.ogg', 20, TRUE) + src_controller.visible_message(span_boldwarning("...and lands a CRIPPLING BLOW!"), \ + span_boldwarning("...and you land a CRIPPLING blow on [attacker]!"), null, COMBAT_MESSAGE_RANGE) + else + attacker_controller.visible_message(span_notice("[src] and [attacker] stand around awkwardly."), \ + span_notice("You don't know what to do next.")) + + battle_length++ + sleep(0.5 SECONDS) + + /// Lines chosen for the winning mech + var/list/winlines = list("Tktktktk!", "You hear a happy buzz!*") + + if(attacker.combat_health <= 0 && combat_health <= 0) //both lose + playsound(src, 'sound/machines/warning-buzzer.ogg', 20, TRUE) + attacker_controller.visible_message(span_boldnotice("MUTUALLY ASSURED DESTRUCTION!! [src] and [attacker] both end up losing!"), \ + span_boldnotice("Both [src] and [attacker] have lost!")) + else if(attacker.combat_health <= 0) //src wins + wins++ + attacker.losses++ + playsound(attacker, 'sound/effects/light_flicker.ogg', 20, TRUE) + attacker_controller.visible_message(span_notice("[attacker] falls apart!"), \ + span_notice("[attacker] falls apart!"), null, COMBAT_MESSAGE_RANGE) + say("[pick(winlines)]") + src_controller.visible_message(span_notice("[src] destroys [attacker] and walks away victorious!"), \ + span_notice("You raise up [src] victoriously over [attacker]!")) + else if (combat_health <= 0) //attacker wins + attacker.wins++ + losses++ + playsound(src, 'sound/effects/light_flicker.ogg', 20, TRUE) + src_controller.visible_message(span_notice("[src] collapses!"), \ + span_notice("[src] collapses!"), null, COMBAT_MESSAGE_RANGE) + attacker.say("[pick(winlines)]") + attacker_controller.visible_message(span_notice("[attacker] demolishes [src] and walks away victorious!"), \ + "[span_notice("You raise up [attacker] proudly over [src]")]!") + else //both win? + say("NEXT TIME.") + //don't want to make this a one sided conversation + quiet? attacker.say("CLkclkclk!.") : attacker.say("Buzzes!*") + + in_combat = FALSE + attacker.in_combat = FALSE + + combat_health = max_combat_health + attacker.combat_health = attacker.max_combat_health + + return + + +/obj/item/toy/mecha/clockwork/snake + name = "clockwork snake" + icon_state = "snake" + max_combat_health = 4 + special_attack_type = SPECIAL_ATTACK_DAMAGE + special_attack_cry = "Sssssss..." + +/obj/item/toy/mecha/clockwork/mothroach + name = "clockwork mothroach" + icon_state = "mothroach" + max_combat_health = 5 + special_attack_type = SPECIAL_ATTACK_HEAL + special_attack_cry = "Bzzzz!" + +/obj/item/toy/mecha/clockwork/bird + name = "clockwork parakeet" + icon_state = "bird" + max_combat_health = 3 + special_attack_type = SPECIAL_ATTACK_UTILITY + special_attack_cry = "Keeek!" + +/obj/item/toy/mecha/clockwork/cat + name = "clockwork cat" + icon_state = "cat" + max_combat_health = 3 + special_attack_type = SPECIAL_ATTACK_DAMAGE + special_attack_cry = "Meow!" diff --git a/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm b/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm new file mode 100644 index 000000000000..0e1c51c5a705 --- /dev/null +++ b/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm @@ -0,0 +1,58 @@ +/obj/vehicle/ridden/mini_forklift + name = "mini forklift" + icon = 'maplestation_modules/story_content/volkan_equipment/icons/forklift.dmi' + desc = "A mini forklift built by CaLE. It is a tight fit! It has protective bars all around it." + icon_state = "mini_forklift" + max_integrity = 150 + armor_type = /datum/armor/mini_forklift + integrity_failure = 0.5 + are_legs_exposed = FALSE + var/cover_iconstate = "mini_forklift_cover" + layer = OBJ_LAYER + +/datum/armor/mini_forklift + melee = 60 + bullet = 25 + laser = 20 + bomb = 50 + fire = 60 + acid = 60 + +/obj/vehicle/ridden/mini_forklift/Initialize(mapload) + . = ..() + AddElement(/datum/element/ridable, /datum/component/riding/vehicle/forklift) + +/obj/vehicle/ridden/mini_forklift/post_buckle_mob(mob/living/user) + . = ..() + update_appearance() + +/obj/vehicle/ridden/mini_forklift/post_unbuckle_mob() + . = ..() + update_appearance() + +/obj/vehicle/ridden/mini_forklift/update_overlays() + . = ..() + if(has_buckled_mobs()) + . += mutable_appearance(icon, cover_iconstate, ABOVE_MOB_LAYER, appearance_flags = KEEP_APART) + +/datum/component/riding/vehicle/forklift + vehicle_move_delay = 1.75 + ride_check_flags = RIDER_NEEDS_LEGS | RIDER_NEEDS_ARMS | UNBUCKLE_DISABLED_RIDER + +/datum/component/riding/vehicle/forklift/get_parent_offsets_and_layers() + . = ..() + return list( + TEXT_NORTH = list(0, 0, BELOW_MOB_LAYER), + TEXT_SOUTH = list(0, -3, BELOW_MOB_LAYER), + TEXT_EAST = list(0, 0, BELOW_MOB_LAYER), + TEXT_WEST = list(0, 0, BELOW_MOB_LAYER), + ) + +/datum/component/riding/vehicle/forklift/get_rider_offsets_and_layers(pass_index, mob/offsetter) + return list( + TEXT_NORTH = list( 1, 0), + TEXT_SOUTH = list( 1, 0), + TEXT_EAST = list(-5, 0), + TEXT_WEST = list( 5, 0), + ) + diff --git a/maplestation_modules/story_content/volkan_equipment/icons/clockworkgifts.dmi b/maplestation_modules/story_content/volkan_equipment/icons/clockworkgifts.dmi new file mode 100644 index 0000000000000000000000000000000000000000..efd261a9d1cc3e423a197cce7eb0e137b7d57b1e GIT binary patch literal 6952 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 UJpz{2v8QQmDk3qo>p6yi+XHX2X@Pc#%^ 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%0Av_tHp zje1oH1GJpYIGkBSC%4{M{j*9ErUM>rtXf;c7Y-JjeE+lWrR4R#hj~s;3O%-?kXn|7 z?12#dFQTI73hxzUg`f*x*B(=UES+$HR%%@w3$qLab(<`0fZHg_>Gaq-K1oXLqwAT%AN}&$D1QAY&ZDjPD#?+w-<19;FvBIKtp&4X&dzc zJhR}I88+m_wms=i{@PZt+_DI(5}?jV_|bGsmk3xvZ;NH?(vz;l#|qTE}B9npG5bB(4|*q#5CaEQi(9^hr)SJ+{w` z{KA3~2F(VZZk5C55dFb1gosaKrn!Cd+;D4!Ke(6X|I)F}(=8>Aqk;f0ERwCOKLkOl z9q3$uc4b`T_BonwdrA!v!G~ffS0FD|CDmM%X=pjl!IJ8C{M)V?EnSqp0Bv;xwQ3c+ GXa4~|%}lQV literal 0 HcmV?d00001 diff --git a/maplestation_modules/story_content/volkan_equipment/icons/forklift.dmi b/maplestation_modules/story_content/volkan_equipment/icons/forklift.dmi new file mode 100644 index 0000000000000000000000000000000000000000..5e409180b5098537f2048166420440576abc81fd GIT binary patch literal 2667 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 Date: Fri, 19 Dec 2025 22:07:14 +1300 Subject: [PATCH 02/10] dme and config fix --- code/_compile_options.dm | 2 +- maplestation.dme | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 5475392fe0d2..63d0f583d742 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -173,7 +173,7 @@ // #define HEALTH_DEBUG /// Uncomment to compile content related to the story or characters of Maplestation. -#define MAPLESTATION_STORY_CONTENT +//#define MAPLESTATION_STORY_CONTENT // Always compile story content for unit tests. Todo : Just have a single unit test dedicated to story content. #ifdef UNIT_TESTS diff --git a/maplestation.dme b/maplestation.dme index 3418ae161a4b..cd15fd68665e 100644 --- a/maplestation.dme +++ b/maplestation.dme @@ -6820,6 +6820,7 @@ #include "maplestation_modules\story_content\shiro_equipment\code\shiroclothing.dm" #include "maplestation_modules\story_content\story_posters\code\contraband.dm" #include "maplestation_modules\story_content\stranger_equipment\code\strangerclothing.dm" +#include "maplestation_modules\story_content\volkan_equipment\code\clockworktoys.dm" #include "maplestation_modules\story_content\volkan_equipment\code\councilgifts.dm" #include "maplestation_modules\story_content\volkan_equipment\code\mini_forklift.dm" #include "maplestation_modules\story_content\volkan_equipment\code\sunitems.dm" From 78036db8ed366549f85db540aff9875f95cba6e3 Mon Sep 17 00:00:00 2001 From: Constellado <64122807+Constellado@users.noreply.github.com> Date: Fri, 19 Dec 2025 22:44:41 +1300 Subject: [PATCH 03/10] Mini forklift now holds flatpacks. The vehicle is now the best way to hold flatpacks in the game! --- .../volkan_equipment/code/mini_forklift.dm | 53 +++++++++++++++++- .../volkan_equipment/icons/forklift.dmi | Bin 2667 -> 2735 bytes 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm b/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm index 0e1c51c5a705..492b26779c58 100644 --- a/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm +++ b/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm @@ -1,7 +1,7 @@ /obj/vehicle/ridden/mini_forklift name = "mini forklift" icon = 'maplestation_modules/story_content/volkan_equipment/icons/forklift.dmi' - desc = "A mini forklift built by CaLE. It is a tight fit! It has protective bars all around it." + desc = "A mini electric forklift built by CaLE. It is a tight fit! It has protective bars all around it. It is too small to hold crates, but it is just the right size to hold flatpacks!" icon_state = "mini_forklift" max_integrity = 150 armor_type = /datum/armor/mini_forklift @@ -10,6 +10,8 @@ var/cover_iconstate = "mini_forklift_cover" layer = OBJ_LAYER +#define MAX_FLAT_PACKS 4 + /datum/armor/mini_forklift melee = 60 bullet = 25 @@ -18,6 +20,47 @@ fire = 60 acid = 60 +/obj/vehicle/ridden/mini_forklift/atom_deconstruct(disassembled) + for(var/atom/movable/content as anything in contents) + content.forceMove(drop_location()) + +/obj/vehicle/ridden/mini_forklift/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = NONE + if(isnull(held_item)) + return + + if(istype(held_item, /obj/item/flatpack)) + context[SCREENTIP_CONTEXT_LMB] = "Load pack" + return CONTEXTUAL_SCREENTIP_SET + +/obj/vehicle/ridden/mini_forklift/examine(mob/user) + . = ..() + if(!in_range(user, src) && !isobserver(user)) + return + + . += "From bottom to top, this forklift is holding:" + for(var/obj/item/flatpack as anything in contents) + . += flatpack.name + +/obj/vehicle/ridden/mini_forklift/attack_hand(mob/user, list/modifiers) + . = ..() + if(.) + return + user.put_in_hands(contents[length(contents)]) //topmost box + update_appearance(UPDATE_OVERLAYS) + +/obj/vehicle/ridden/mini_forklift/item_interaction(mob/living/user, obj/item/attacking_item, params) + if(!istype(attacking_item, /obj/item/flatpack) || user.combat_mode || attacking_item.flags_1 & HOLOGRAM_1 || attacking_item.item_flags & ABSTRACT) + return ITEM_INTERACT_SKIP_TO_ATTACK + + if (length(contents) >= MAX_FLAT_PACKS) + balloon_alert(user, "full!") + return ITEM_INTERACT_BLOCKING + if (!user.transferItemToLoc(attacking_item, src)) + return ITEM_INTERACT_BLOCKING + update_appearance(UPDATE_OVERLAYS) + return ITEM_INTERACT_SUCCESS + /obj/vehicle/ridden/mini_forklift/Initialize(mapload) . = ..() AddElement(/datum/element/ridable, /datum/component/riding/vehicle/forklift) @@ -35,6 +78,13 @@ if(has_buckled_mobs()) . += mutable_appearance(icon, cover_iconstate, ABOVE_MOB_LAYER, appearance_flags = KEEP_APART) + var/offset = 0 + for(var/item in contents) + var/mutable_appearance/flatpack_overlay = mutable_appearance(icon, "flatcart_flat", layer = ABOVE_MOB_LAYER + (offset * 0.01)) + flatpack_overlay.pixel_y = offset + offset += 3 + . += flatpack_overlay + /datum/component/riding/vehicle/forklift vehicle_move_delay = 1.75 ride_check_flags = RIDER_NEEDS_LEGS | RIDER_NEEDS_ARMS | UNBUCKLE_DISABLED_RIDER @@ -56,3 +106,4 @@ TEXT_WEST = list( 5, 0), ) +#undef MAX_FLAT_PACKS diff --git a/maplestation_modules/story_content/volkan_equipment/icons/forklift.dmi b/maplestation_modules/story_content/volkan_equipment/icons/forklift.dmi index 5e409180b5098537f2048166420440576abc81fd..d131bf655b7cd37bb81a60eb314a529aac96a710 100644 GIT binary patch literal 2735 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 J)Z3A-{0G3y$N>NV literal 2667 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 Date: Fri, 19 Dec 2025 22:53:52 +1300 Subject: [PATCH 04/10] adjusts things --- .../volkan_equipment/code/mini_forklift.dm | 4 ++-- .../volkan_equipment/icons/forklift.dmi | Bin 2735 -> 2713 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm b/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm index 492b26779c58..263cb5e6578c 100644 --- a/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm +++ b/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm @@ -1,7 +1,7 @@ /obj/vehicle/ridden/mini_forklift name = "mini forklift" icon = 'maplestation_modules/story_content/volkan_equipment/icons/forklift.dmi' - desc = "A mini electric forklift built by CaLE. It is a tight fit! It has protective bars all around it. It is too small to hold crates, but it is just the right size to hold flatpacks!" + desc = "A mini novelty but still usable electric forklift built by CaLE. It is a tight fit! It is too small to hold crates, but it is the perfect size to hold flatpacks." icon_state = "mini_forklift" max_integrity = 150 armor_type = /datum/armor/mini_forklift @@ -82,7 +82,7 @@ for(var/item in contents) var/mutable_appearance/flatpack_overlay = mutable_appearance(icon, "flatcart_flat", layer = ABOVE_MOB_LAYER + (offset * 0.01)) flatpack_overlay.pixel_y = offset - offset += 3 + offset += 5 . += flatpack_overlay /datum/component/riding/vehicle/forklift diff --git a/maplestation_modules/story_content/volkan_equipment/icons/forklift.dmi b/maplestation_modules/story_content/volkan_equipment/icons/forklift.dmi index d131bf655b7cd37bb81a60eb314a529aac96a710..a2eb5770db63576dcaf8ec3ac332b9351b4b3e42 100644 GIT binary patch delta 156 zcmZ24I#YDQ9>x!kl~HXpfH%QqQa{Pk;V?yjb~zenP~ezoLoTsc?4 z{_QCS0|p)j<^vFF!Pf+W20}yz+`njxg HN@xNA2Y*OQ delta 178 zcmV;j08Rgy6|WVLyaC>^y-o>#^I+-NitJ>P);9o9$e+r}MCZj;+W} gCTV>IfR%mv4_QFg>6k07*qoM6N<$f+sLihyVZp From 607fc02fcae3c06b655fcd88b8055ffa895c380c Mon Sep 17 00:00:00 2001 From: Constellado <64122807+Constellado@users.noreply.github.com> Date: Fri, 19 Dec 2025 23:18:56 +1300 Subject: [PATCH 05/10] Adds a horn. --- .../volkan_equipment/code/mini_forklift.dm | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm b/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm index 263cb5e6578c..d8e2d5380a0c 100644 --- a/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm +++ b/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm @@ -73,6 +73,10 @@ . = ..() update_appearance() +/obj/vehicle/ridden/mini_forklift/generate_actions() + . = ..() + initialize_controller_action_type(/datum/action/vehicle/ridden/horn, VEHICLE_CONTROL_DRIVE) + /obj/vehicle/ridden/mini_forklift/update_overlays() . = ..() if(has_buckled_mobs()) @@ -107,3 +111,17 @@ ) #undef MAX_FLAT_PACKS + +//Honk honk!! +/datum/action/vehicle/ridden/horn + check_flags = AB_CHECK_HANDS_BLOCKED | AB_CHECK_CONSCIOUS + name = "Honk Horn" + desc = "Honk your vehicle's horn." + button_icon_state = "car_horn" + var/hornsound = 'sound/items/carhorn.ogg' + +/datum/action/vehicle/ridden/horn/Trigger(trigger_flags) + //Yes, I did put no cooldown. Yes, it was on purpose. Horns must be spammable. + vehicle_target.visible_message(span_danger("The forklift loudly honks!")) + to_chat(owner, span_notice("You press the horn.")) + playsound(vehicle_target, hornsound, 75) From a4e9834556da6a252a8e0777c5304755f2d304be Mon Sep 17 00:00:00 2001 From: Constellado <64122807+Constellado@users.noreply.github.com> Date: Fri, 19 Dec 2025 23:21:20 +1300 Subject: [PATCH 06/10] Final adjustments --- .../story_content/volkan_equipment/code/mini_forklift.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm b/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm index d8e2d5380a0c..5c1626472b0f 100644 --- a/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm +++ b/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm @@ -105,7 +105,7 @@ /datum/component/riding/vehicle/forklift/get_rider_offsets_and_layers(pass_index, mob/offsetter) return list( TEXT_NORTH = list( 1, 0), - TEXT_SOUTH = list( 1, 0), + TEXT_SOUTH = list( 3, 0), TEXT_EAST = list(-5, 0), TEXT_WEST = list( 5, 0), ) From 73436ace381ae298af22d048eb95c33ba8d55fa8 Mon Sep 17 00:00:00 2001 From: Constellado <64122807+Constellado@users.noreply.github.com> Date: Fri, 19 Dec 2025 23:36:30 +1300 Subject: [PATCH 07/10] offset tweaks --- .../story_content/volkan_equipment/code/mini_forklift.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm b/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm index 5c1626472b0f..036261904925 100644 --- a/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm +++ b/maplestation_modules/story_content/volkan_equipment/code/mini_forklift.dm @@ -105,7 +105,7 @@ /datum/component/riding/vehicle/forklift/get_rider_offsets_and_layers(pass_index, mob/offsetter) return list( TEXT_NORTH = list( 1, 0), - TEXT_SOUTH = list( 3, 0), + TEXT_SOUTH = list( 0, 2), TEXT_EAST = list(-5, 0), TEXT_WEST = list( 5, 0), ) From 33acd887498a49ab177483a4064295888445b446 Mon Sep 17 00:00:00 2001 From: Constellado <64122807+Constellado@users.noreply.github.com> Date: Fri, 19 Dec 2025 23:38:19 +1300 Subject: [PATCH 08/10] undoes what I did here. --- icons/map_icons/items/pda.dmi | Bin 8768 -> 11621 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/map_icons/items/pda.dmi b/icons/map_icons/items/pda.dmi index 987a181dde31056397a734e2161e0ed998d647cf..0712af49864f20397079b5c060e65008f60a5394 100644 GIT binary patch literal 11621 zcma)iWk6KV+x7w?AR-_jNJ@7~*9wXVN_UBXfV6b8lypc*vw|Q!*tA3l{38_xATFgJP(gPJhwfAE^xIqdhrpN1ffs&cROS z6U`hS7rNixW8Se8N%l}W^@JnZ`xmO)82R@t-S{J!sIC&C37#FySbl|Ve_#*YjB}KK zG5=iuZqZ~X+iP37+VO5>)osa-`H~~?6g}!fMY)rVc)7ynqp5_whHOQ7m(i7G!t2WJ zx?X8j;nIOzEFS&ERCoGU`!@lJwpZ3swzrp-4!Une*k;15fSgy;fz#LW;X_Hys?zSf?$uFeoL(jljxUD-_Ds=C z*xhlG_}U+%qSk+Wb|+BgR^VZ#`-qLpruXI8R^5XqX+Fs z)s2J8!|IG{{!RKy1WGMYwQ0ARVe(Y*tYn;b@AVZ4yxd4aSVV`kZR}n0cg)l9ds|xv z`Sxl1R~lzXXj(*s`hfcuo0+AH(8T@Y%tt#RzQ*1zLd;?WvCo;w?%!u>=0;d3ykJ^U8g285U(tk*BwQ|i!1*BT$HNIHGc9ZZV*2-;yiGt+RUv|u(< zBWd92`b65y|B1f9JdObFL&qrVnT16}{!!(D!M9e7{CB$<;=FamI8@DxU{445N4FgF zzUAcaFt^iHIgK+VC8gkXFQbmnm6^nKzr5gYlbKpywAr;>4{#`8F(J#(j)4o?6NsD~ zCusH8XyLOd8p(?Qa`I%R-;UlWR}kp-!=RuM_aJ)n$Ht!+stld)b@;g&-$-{VF_^{k3zUQxw>FN-+0KP>s#%%_cq1IcvS9ehIFe34`>)+62SesZ2Go_lbPgtHmN)lP}pIlwaGQw9USha2kJz9Wk`ba-}()Ik^ns z+F}vM`oNO$3z#NG_KaUi8d0HtbG2}c$JE!w@b~>&QlPhy#bPJz0}XC__n%|Ne6t>7 zDe)#}g~GIFCbl^CC=Evlw!W1Y4hd=!va;t&PhGl66knlVCP1NI7!>_w)&%XCizH52 zO@jBa-FmkA5~n|W(+N2_Q8RWFZX3KN7FTWi{P__mu-Dw?g5@0#x(DHu@arB`+LQ)4 zrtDhFNg9{#$o*RKbMB=S>RmTk?XvH9mf9v7eqnK!b1Z=FoO~ye+El1|!PCiM&J^Q9 z8Ss)apm!o(FrTb!Ja*LcZ_VuVC}eXbYoTQ6@Vv!>(`CS;ns0&hh;D_T%Ypsqi zrZ-9k$@72^B%VscO^`_jou!<-fhin}%2Wmf1jIoM!8`xV=2TPfwfCysEm-gCK^vUL zGwOOWqc852B4TYJ&kwTsuQYX!ZVGLso#X6}V{c8*;FQDTtYumxB)NswT)o#-#AM-~ z8<^uDD0`yQdL-Cn2efy18R1^0r-;U8Yi`i9EtIkEZIA!Dq$U{y$PWTd6jF>RT4pNbqdG%2TPP6E9nfgt1b9C!1 zt(UQ#@GJ638q-}Z^^w}4S-=SY7^>RIZ?PSai0=C3a^}~)Rxy=xMX>;jY_C72XoEr0 zs~m8j>X#u|v8+tARrOPf|7DzM#Hiw=;vP#LV~#TXfQ)I)X*g7J zpAuC-+Ma-Y3Hqw1nr_+O^8-K8FWi$fqWkludYVbEY~E#;-E*&#Ty~&)PXlG!Y)xL$ z4ZlO|cV+W=Nf)mf)OL*!XI$zztgXfOb0kj~l_jd3neKXRG}O!sKMS%wX(x}oAyqg0 z`GNl%uA53V(DGrdboufnOU=T*`pT?dDof4Gbg<1P|K}^T7AN~oE^}?L$dpLdkm7iQ zklMl0L6ggi4IHJiCl2mJJFvYhJXxDoUlYB1d)JAEolUkhJFv5u@FA6PA9zza?Kt8| zEgY&$N8pI{VX>dnzhZ}r5iY2_a?qgs!#`^r?o+M_Sj^q3v)=cgjbfo`X&fA%k^=D@ z7io68gC%6l7Pm6q<>$K|X>gS=3 z2J&A%efj)2O95y{*f6VE zL+?0naedt!6gXw8U~bN&sil>Wm30^NLPZ4^q$(jH@sKTvAeGO=W%`oMoUrI(R-(!R z%Z_3@dWoUgU=IG$ydS%`6~l7La7}XOj&e3+&K)FfDf-+-W@y&=xNl`jY&u2IW8^}h zTu}KSH=Mq!;ALvoe{L!gC)o9InkJ6xNf3&QKRRO)Ju^O0$y*h7&c85v>+2UG1LS|M zuf3q<+(69I^P7{Y9o?|oES^t@XcjWj!clH>Cv=L1Uu{EG6}-mFqz!`%#;itj$_yG^ z3i5BDGQM>vgRxnb`x!CH@qX57Ou6h|#>>PqpUEd_>?NE4rupmRKaSJwm^Q?g7@l!E zgdUhYu0*eLb21xiz?V_P4Vf`9#Ia~Iof-GCjSr@9r|<5*o3-Ecy$K8ikyBCE!JvbXWGPt#C#7{S9=> z4ymelC)6$KbSB@*6)_6ML{Y)fOOUN(YZka>=!!+}9VHB=e`i=Dl)gcfz|bcx;FpY}imfO> z4}44YI~OS)IR~#&a8orZQ5jXoL`JP1JGr?D3r=r82v4*G9(|>(Y`*CI`+;6W)v+_s zBcO=oj2Xv>vyW1mcCT;}`XLM(ME@$_iMBLUxozRlI446*Y#76@g+Lt(>K00Z+hG?fpD)EoyCHnlnAb7!6kZNHoo?6V=(r}b;0lOZ1FKeW?&>qbKC9&%o3Q5hRG2CGdv zb#=@-kJP)ZiUv4z3MvgiOGD*ZPz%}u~5@ol5oTztO>C0c+tE116$rWs-E;VES>D4*g z>ULXZLORE?8S~>aIs4=0bZ}+lOTbN|wtp5@FcuYQlb^_})(t&9ol+}P*S^3tEz(j@ zPT$TWU`cxY~g)#_U*p$U~`NI$VW{%5TZc}B=7mc$thh2TiIDZ)6wF1 zN2?_$-iy}IK|5=k3NVh@epu-~Cv^~FylHiO0jZ$LQ(<#+;Rg6VL!>TuF@KtR3M7l6 zgZX^RPuqlBE^C^Y(YZU9o3oD`a$5`aa925s)YvCT>s};HoOl^Sad}FIpMxTgAk zKhFdGGLtH!itqvQuqB^X*SWV*>&c!6mz9Ri>uJ5guhK&jupS+_QMlaUc{j(5#kt|$ zKu?PMWeoqzSi}LTMp2|=KWAagOs-}8Ex?{Xx;H6{f@Ngr=H})q4K3aXQ=19dkVrVn zF!h&(599|8kpJMMiG8kLCir7y#1yiaZ6w#N)3e!9{fSuw6@&b#CZXL5tn@;H)~8Ir(#1limeE(+41^o7Ej9-3Z(5{-DzduATBKpU z@l1W`uHd!gKjrXmAh=f=+4flZqEh1~8p}%WX4BL9SF-MJL zeuGfanQPkYgHPO#DGS;C1udiW&?}<$r<{l?7(RGt7XkyRWEb3WIuUHf7F)7Ns|bmw(r9pu7H!SZz7 zJEwL*6BDB*gPM#m@FSIH84>&%!bz@c} zeu|Z#du_F`$Nj-G_Les_1FBtLpzXb(xCu8@$hUQqgR1hTC+(}8oYOZYxl_&W*QEuw zD_;(OZ;yY}_hPDCM@ykMKCAY%273IC3r0=NkYqUl{32BL_iN+uNbB3|+=F@x(9=xj zUX&c4kGPxxMBelW?1Y^oD&c|R-oPO0b>~SQ{~ibsci`$er1FK&w{_^1H`$U+-;VX%hrz+U7r(`Qw&NNX@!fT0 z2C)yv9z#_G@OO;(n+|P{Hn$URx7R5PL(q050w)2-&ssIVZ#3ch9;=Z2Tyb^6_ArM3 zB$!V_$NbDz`}gHqkSBwMeiTTRWnj2YPLRHBzTecrfFYkP<803*R6h%*>LyPcFf5*rS!#~qgS zxL2ssTU23P>9V%L!NJkC+?5+B1&k@dvY9IrYV>|E;f0C(>G(&bcVvDP{6y)S#>Z3!1Dx%` zZ}0nf637ME(7O<-4s4eksio-|en@m7G%wYS+1)3O9S9{gxyc?1a@+z^Qj6NW{KeoF zO(Z(BZ5gsGVTJ~9}0b_@(l z&=CRML~f{L4YAyQ_M$k`vN9$3P#_C%fv8MW2rTfVKZGc&U~0eE!CKBO@0H7Eq-R!3do5hj+nsbRJ}Z0Wb5~bah2H-De(pg}8MHjh1>&6TjcQOg^r+@3AKncK z^49yQP_x<}oRyDWea#)NqV2alic>R5%0c0*`ow%~p*kqyE@N)h0tgc*FgckV{U-IJ zL5-Ef!Jvk092V%_?SR=z7@5nVTx!_5*}>b*4XWd0^o;K0FlrPwO!gvWQ$u z%e?)9x(TNKSI0Fx&z-qFaH`Jm$z4z;7b8o=IJk{3{3~l`#P^9`0OXko`Wr`7uT5O> zXuBT|laLnQxb67-;4?EuGUldbdA8d|=^S&YrI3w}V#Ou9KHguN%;Brz z%m1q(&48rs_?hI~=C9cNPq?EnO}%H zbiL)|rbS+40ter_Ey@7?nlBxI`$aasC+AWW)bT|N=QH7*zT^6G$sy=J6>3jZ-l-*+FMvC#jR#|I%KoP|I#^gj%@cq+n}*%@fv40a_sWF8Mb$$#~iC@-3A{RZD6v#<-;ic21qH2ILbF+Grx#0&t<*A*OI zi38c2ue^d+-@?x&EETcaSfc?|qxUYY_{W;#-Awk#DjCzQtBiJM(AzWc3v@!HqUo`R zSdv<45Wfos>XHz-18jbbVEp;K-F%w27RT_EPbqoyJHFe`C4xVGhQVBTOq#UMHu$yW zAbe-1AixI5!c| zE{f(x-Nm*riy4v-=)csvG4XJe@9W<{&S zZ&2;!%kx17S-%D~WV7eV)gWX&l08ENa&}nNI_*&V{A|Klk-7kN_Migw zWL%X$=f*e*9-h=CHp=elMr`zHh69z~782o%_ZWU13bDF&0W_xU{t=x}sOPCnIruI0 z9BmQieYt~)@%T&F4VDu6-9Oq++iAa13k;_Z-0`Tfe39j%7Mw*MAkfIoXNXwEKznBP zP?1$_;%MtSe(NqGti*#sm9CbM6G2}2Ms(mwEktU_pv z8z1*kyq>O`ytdz@%o6$5^&o@lo%U^OmzZVNzEl*9o6_4NdHY1d`L#Cc%hIuKa=R}i z1Z=rR0ekyu`(`F%C#fbv?AU?8qX8p`l-Qax` z_@m+gG)DeeD*oZi0TP{x_oouZGX50&OEO9ipeW2qr{IB>p2z2LQ3d}pj1jn-%^kM-9(wpL-rEqrQLE9Q8_>&wBl~)^i*KbV4v}$ zb>i7Yb0~FjTrtoup2>6Zb&VRV_f1UzB+iy@W zK@A%GKP+T09342Q{2grEudjntj)p0~Eappw6v>@vAAQDs1;o)F9#=#VVdhtCM1UNi zxY=+ikS;8cjxAvc$O$DPeS7h2dY=Y|Dh;{b0K8RJ-~m8qFN3N^ER#4tYLyeme3+uf zDJj7Iqzqf6Gw(TWhj{r?#Xe8YzyV~2>>*0t+^p)cccDOO?-jIXCHqa+@vWq!6T>Tt zl}m(C@xhyK<*sN<^QRP9bh}Bpyv7Gy!?JtK7TD^VE?7X4HAJaAB)*j(i1o|XoujyN zwSGva8fi^fkykk!Bibp+LL3#`io!N8u8sHxY+D3i%|{8TN_eZ2&)+&w*SG4M>ndqk z*vU?g+>Eb#XDTb`G4Qc2tNOmGoR$^e+hBR4Graq6zqP~=m6$q>qu*;HW>$QIsc2B+ z$IsU=HEEfLAzGA;YQi zms8KfS)~}7$5!9f5P;&I{8y^r5l%4e=y$ujo{UT+CfSS2uLILBP){$|MMAG_ZYTi# zK+N{}dlkF;{}G2N<2+JNDNoSufR&@Wjqwz_K?5QtFs z&sl&P>jhCl$aA%RsG58n5SuSMm<~TvNWA%l(Do?M^|-&?ZZh!wSADWJ+)$p?%HVTlTf9r)x2c7ph9`CEWajs$IlVTaUx0dBqRb?_IL> zZC^?ZZ>7FY$_{lwJ&cY9#0bVc1Yyd@4Sp~2@#>$Jd8_B9D~*e*t$oi11M?1oz7Z0Yu>dNRb%`KjUwiV!bS(8}VQYh%B;OStnlARf^; zB;n5Ohl*jTrImsLm#%w$9$$8C)QX!`=P6KXOgUF=ix+JD3qagOfs)kd@PFG>i2J~d_TWj8a?a9qyY?J4}x~bG_d=Lk+A=jOo zRJ~%Or!%f8$iecg7eUsf%n6YnKci#TOTqzeu_FH}3g2m)Y_MtO8uO|35)#{J9`^U#e)tYr%m2I69rJ zehy{IQKv#7Qyb(yK-X8-HsTb^cu&eYw>dAVTGu=ev(^zObif6ICh&-idQhtHd-pDp z2ry&or_O|71GFD~ujZBd<@NDmY>-0B!@iUieXVyvUXM>q5PR5yCpkOWTY4L>`!Xp` z@+x7pBd?_*1BCE4b#-;IK}}OLU)Tglem}NWpJ;pxdIH(LdzYH1+J}{WvKMI@#gKqL)*Kq#LfVa?85qQefG|7qN5AgI{F%JslHASP zGlTd}572nb^Skl!iiVDSpf_HA(iZ^%2>3wKhzn2<*55C6LqJAGW_dPeLB+rj-_#_z z>n1rlB{6K^CP{bqcF5zf8y;C%daD|PUuQenWZTVZg#xX^Ql6-!kW}xC>QC3>ovp-d0c?K+Y)(I|A zInAXZT*cGA3({&t^p%t4@$N)q&GE=Yc0?6rbJkWeKb>SWYe?V9I67uI4h#*Yg~-+9 z{om33mJL@^f(#!v$b*huEraF1(Z35cO5jl5&O8fQuBmDO$N_&=$-Z_dKr%Tz0cEwc z`XfVg*exXIzgp_T!1)B#_uKyntq`Ikk7{tXZi&vnQa~A_5&!kU)4xJ1ksbE{27}K1 z=U$-IUzGi(-(}|5jZDve+X>jBq}nd6Gph!g!3!CYvRi7|l2hD}o8OnRTcZY__EXx; z1FF@K=N=X3gOGzro1gPg^}P*1tojql_!Iv(<~Qh0C@R`i-h0^7YugcsRSdHs{8M?0 z{f%qQhx;W4(W1qJ80WsbI>=16mLjh9MrAj`7i0-+c^N1yoZG@B4A=nw%g6v5olbB^ zIM0A{x;eSGM(f!`jKASY?jun)(dVL@1hh$TFNQlua;W%Q{t7x!|4jOAC7>Ln2*}s^Qwi z#3AIMY2TIxwD^6bb(!X+4E&Xb6qYwMco~AZ!6zb8aIY2j6{<@`WQeT$9Z3(ki$`Dz zOCkhoWiNJyMv=POehbIMoP$t)mx!N2AK(zD6mj2jMfv=jca2=a)ws8>_8v6`{LWo@ ze}+<+Tj@?+SLv9aH=MN>HE#9MnGCBn(ksHxhhExqO>*oZ^7HLraR(cb0nS=^DB=1$R@*{mz&gg zv8ZMXak{z+*kK*Abd~TSyTk*rFfX$A2h(M{Qzew^8ygD9FP2tTOj1%tZbN%2KgSs2 z0BsWai$UE$1I^pl&T||!kU30Y)zecK@|t0o#z9vM+A|5bn?*RV3(5?6!6B;;2PC3s*t`W+~1s2r~|6&@&$ zXd~Y$>9;llU-3g1O$Wt9#(bX?v+=s(!pFyJryf(?9r5jqh`_J7%qYIqjz=r$R^*yZ z0ueTC!6Wa67jT%$$Y#DfEGX)HL$XLMs-OX=x$OlAGcz-R%%39+9wD8elBxY9hTnZ8 zfZl*&8xW(y7BC<2MY!PBhqP|!JUu7*-9e5GZmJ_YI|g{s_|G0on} zmXM%YYL&7oHQKrGNMfG0_-Pv}_vSObgoMZohds&ZxUYwBA;Zt)@?rFUP z!KwGy2PMr|ps&=bkHqoyJqmJL+L~y-depDaQVWVZHeVIdX^kF9{ePl^$?bXO!rtJCmWV@xXfNO=kih%rmjhf%_NWY=4mC{Z~e6>9I(D= fPaQd`U14m^#c&4b2-bn)(;y`U)o11MZ-W01IL&$+ literal 8768 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 From dca0f1fc64db019a1bdb344afa644dd1c2695a90 Mon Sep 17 00:00:00 2001 From: Constellado <64122807+Constellado@users.noreply.github.com> Date: Fri, 19 Dec 2025 23:40:14 +1300 Subject: [PATCH 09/10] fixed the space --- code/_compile_options.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 63d0f583d742..f00c03538fb7 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -173,7 +173,7 @@ // #define HEALTH_DEBUG /// Uncomment to compile content related to the story or characters of Maplestation. -//#define MAPLESTATION_STORY_CONTENT +// #define MAPLESTATION_STORY_CONTENT // Always compile story content for unit tests. Todo : Just have a single unit test dedicated to story content. #ifdef UNIT_TESTS From c2397d284109d19db712a81417d1f37152f93fe7 Mon Sep 17 00:00:00 2001 From: Constellado <64122807+Constellado@users.noreply.github.com> Date: Fri, 19 Dec 2025 23:45:32 +1300 Subject: [PATCH 10/10] Fixes some toy "dialogue" --- .../story_content/volkan_equipment/code/clockworktoys.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/maplestation_modules/story_content/volkan_equipment/code/clockworktoys.dm b/maplestation_modules/story_content/volkan_equipment/code/clockworktoys.dm index 9804f5a88482..5492809d0a16 100644 --- a/maplestation_modules/story_content/volkan_equipment/code/clockworktoys.dm +++ b/maplestation_modules/story_content/volkan_equipment/code/clockworktoys.dm @@ -16,7 +16,7 @@ verb_yell = "clacks" max_combat_health = 4 special_attack_type = SPECIAL_ATTACK_DAMAGE - special_attack_cry = "*flip" + special_attack_cry = "Bzz!!!" /obj/item/toy/mecha/clockwork/Initialize(mapload) . = ..() @@ -163,9 +163,9 @@ attacker_controller.visible_message(span_notice("[attacker] demolishes [src] and walks away victorious!"), \ "[span_notice("You raise up [attacker] proudly over [src]")]!") else //both win? - say("NEXT TIME.") + say("CLkclkclk!") //don't want to make this a one sided conversation - quiet? attacker.say("CLkclkclk!.") : attacker.say("Buzzes!*") + quiet? attacker.say("CLkclkclk!") : attacker.say("Buzzes!*") in_combat = FALSE attacker.in_combat = FALSE