From 93fb2a3cb917bf3c415c69abdef2ec1db1b6f08f Mon Sep 17 00:00:00 2001 From: jjpark-kb <55967837+jjpark-kb@users.noreply.github.com> Date: Sun, 17 Oct 2021 07:47:08 -0400 Subject: [PATCH] glassblowing/ceramic skills and changes (#8841) --- code/__DEFINES/~skyrat_defines/traits.dm | 6 +++ code/modules/vending/games.dm | 5 +++ .../code/_globalvars/maint_loot_uncommon.dm | 3 ++ .../modules/primitive_fun/code/ceramics.dm | 33 ++++++++++++++++- .../primitive_fun/code/glassblowing.dm | 31 +++++++++++++--- .../code/modules/reagent_forging/forge.dm | 37 ++++++++++++++----- 6 files changed, 98 insertions(+), 17 deletions(-) diff --git a/code/__DEFINES/~skyrat_defines/traits.dm b/code/__DEFINES/~skyrat_defines/traits.dm index 566b942c91a..86c0e808aca 100644 --- a/code/__DEFINES/~skyrat_defines/traits.dm +++ b/code/__DEFINES/~skyrat_defines/traits.dm @@ -43,3 +43,9 @@ //to determine if someone is a fishing master, or not #define TRAIT_FISHING_MASTER "fishing_master" + +//to determine if someone is a ceramics master, or not +#define TRAIT_CERAMIC_MASTER "ceramic_master" + +//to determine if someone is a glassblowing master, or not +#define TRAIT_GLASSBLOWING_MASTER "glassblowing_master" diff --git a/code/modules/vending/games.dm b/code/modules/vending/games.dm index b898dd87b01..d352956ccce 100644 --- a/code/modules/vending/games.dm +++ b/code/modules/vending/games.dm @@ -3,6 +3,7 @@ desc = "Vends things that the Captain and Head of Personnel are probably not going to appreciate you fiddling with instead of your job..." product_ads = "Escape to a fantasy world!;Fuel your gambling addiction!;Ruin your friendships!;Roll for initiative!;Elves and dwarves!;Paranoid computers!;Totally not satanic!;Fun times forever!" icon_state = "games" + //SKYRAT EDIT: Adds Ceramic, Glassblowing, and Fishing Skillchips products = list( /obj/item/toy/cards/deck = 5, /obj/item/storage/dice = 10, @@ -21,10 +22,14 @@ /obj/item/skillchip/bonsai=2, /obj/item/skillchip/wine_taster=2, /obj/item/skillchip/light_remover=2, + /obj/item/skillchip/glassblowing_master = 2, + /obj/item/skillchip/ceramic_master = 2, + /obj/item/skillchip/fishing_master = 2, /obj/item/skillchip/useless_adapter=5, /obj/item/dyespray=3, /obj/item/razor=3, ) + //SKYRAT EDIT: Adds Ceramic, Glassblowing, and Fishing Skillchips contraband = list( /obj/item/dice/fudge = 9, /obj/item/clothing/shoes/wheelys/skishoes=4, diff --git a/modular_skyrat/master_files/code/_globalvars/maint_loot_uncommon.dm b/modular_skyrat/master_files/code/_globalvars/maint_loot_uncommon.dm index 8113f37a2be..e04e2082c7e 100644 --- a/modular_skyrat/master_files/code/_globalvars/maint_loot_uncommon.dm +++ b/modular_skyrat/master_files/code/_globalvars/maint_loot_uncommon.dm @@ -7,6 +7,9 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items /obj/item/skillchip/job/engineer = 10, /obj/item/skillchip/job/roboticist = 10, /obj/item/skillchip/light_remover = 10, + /obj/item/skillchip/glassblowing_master = 10, + /obj/item/skillchip/ceramic_master = 10, + /obj/item/skillchip/fishing_master = 10, /obj/item/skillchip/useless_adapter = 25, /obj/item/skillchip/wine_taster = 50 ) = 50, diff --git a/modular_skyrat/modules/primitive_fun/code/ceramics.dm b/modular_skyrat/modules/primitive_fun/code/ceramics.dm index ed816e3bf13..9e710cc3a3c 100644 --- a/modular_skyrat/modules/primitive_fun/code/ceramics.dm +++ b/modular_skyrat/modules/primitive_fun/code/ceramics.dm @@ -1,3 +1,16 @@ +#define DEFAULT_SPIN 4 SECONDS +#define MASTER_SPIN 2 SECONDS + +/obj/item/skillchip/ceramic_master + name = "Ceramic Master skillchip" + desc = "A master of clay, perhaps even capable of creating life from clay and fire." + auto_traits = list(TRAIT_CERAMIC_MASTER) + skill_name = "Ceramic Master" + skill_description = "Master the ability to use clay within ceramics." + skill_icon = "certificate" + activate_message = "The faults within the clay are now to be seen." + deactivate_message = "Clay becomes more obscured." + /obj/structure/water_source/puddle/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/stack/ore/glass)) var/obj/item/stack/ore/glass/glass_item = O @@ -55,6 +68,19 @@ /obj/item/reagent_containers/glass/bowl/ceramic, /obj/item/reagent_containers/glass/beaker/large/ceramic) +/datum/export/ceramics/sell_object(obj/O, datum/export_report/report, dry_run, apply_elastic = FALSE) //I really dont want them to feel gimped + . = ..() + +/datum/export/ceramics_unfinished + cost = 300 + unit_name = "unfinished ceramic product" + export_types = list(/obj/item/ceramic/plate, + /obj/item/ceramic/bowl, + /obj/item/ceramic/cup) + +/datum/export/ceramics_unfinished/sell_object(obj/O, datum/export_report/report, dry_run, apply_elastic = FALSE) //I really dont want them to feel gimped + . = ..() + /obj/item/ceramic/plate name = "ceramic plate" desc = "A piece of clay that is flat, in the shape of a plate." @@ -98,10 +124,10 @@ icon_state = "throw_wheel_empty" density = TRUE anchored = TRUE - var/spinning_speed = 4 SECONDS var/in_use = FALSE /obj/structure/throwing_wheel/attackby(obj/item/I, mob/living/user, params) + var/spinning_speed = HAS_TRAIT(user, TRAIT_CERAMIC_MASTER) ? MASTER_SPIN : DEFAULT_SPIN if(istype(I, /obj/item/ceramic/clay)) if(length(contents) >= 1) return @@ -120,6 +146,7 @@ return ..() /obj/structure/throwing_wheel/proc/use_clay(spawn_type, mob/user) + var/spinning_speed = HAS_TRAIT(user, TRAIT_CERAMIC_MASTER) ? MASTER_SPIN : DEFAULT_SPIN var/given_message = list( "You slowly start spinning the throwing wheel...", "You place your hands on the clay, slowly shaping it...", @@ -141,6 +168,7 @@ /obj/structure/throwing_wheel/attack_hand(mob/living/user, list/modifiers) . = ..() + var/spinning_speed = HAS_TRAIT(user, TRAIT_CERAMIC_MASTER) ? MASTER_SPIN : DEFAULT_SPIN if(in_use) return in_use = TRUE @@ -175,3 +203,6 @@ return in_use = FALSE return + +#undef DEFAULT_SPIN +#undef MASTER_SPIN diff --git a/modular_skyrat/modules/primitive_fun/code/glassblowing.dm b/modular_skyrat/modules/primitive_fun/code/glassblowing.dm index 4304101444d..23aff998505 100644 --- a/modular_skyrat/modules/primitive_fun/code/glassblowing.dm +++ b/modular_skyrat/modules/primitive_fun/code/glassblowing.dm @@ -1,3 +1,16 @@ +#define DEFAULT_TIMED 5 SECONDS +#define MASTER_TIMED 2 SECONDS + +/obj/item/skillchip/glassblowing_master + name = "Glassblowing Master skillchip" + desc = "A master of glass, perhaps even capable of creating life from glass and fire." + auto_traits = list(TRAIT_GLASSBLOWING_MASTER) + skill_name = "Glass-Blowing Master" + skill_description = "Master the ability to use glass within glassblowing." + skill_icon = "certificate" + activate_message = "The faults within the glass are now to be seen." + deactivate_message = "Glass becomes more obscured." + /obj/item/glassblowing icon = 'modular_skyrat/modules/primitive_fun/icons/prim_fun.dmi' @@ -7,7 +20,7 @@ icon_state = "glass_bowl" /datum/export/glassblowing - cost = 1000 + cost = 3000 unit_name = "glassblowing product" export_types = list(/obj/item/glassblowing/glass_lens, /obj/item/glassblowing/glass_globe, @@ -141,6 +154,7 @@ return ..() /obj/item/glassblowing/blowing_rod/attackby(obj/item/I, mob/living/user, params) + var/actioning_speed = HAS_TRAIT(user, TRAIT_GLASSBLOWING_MASTER) ? MASTER_TIMED : DEFAULT_TIMED var/obj/item/glassblowing/molten_glass/find_glass = locate() in contents if(istype(I, /obj/item/glassblowing/molten_glass)) @@ -161,7 +175,7 @@ in_use = FALSE return to_chat(user, span_notice("You begin using [I] on [src].")) - if(!do_after(user, 5 SECONDS, target = src)) + if(!do_after(user, actioning_speed, target = src)) to_chat(user, span_warning("You interrupt an action!")) in_use = FALSE return @@ -183,7 +197,7 @@ in_use = FALSE return to_chat(user, span_notice("You begin using [I] on [src].")) - if(!do_after(user, 5 SECONDS, target = src)) + if(!do_after(user, actioning_speed, target = src)) to_chat(user, span_warning("You interrupt an action!")) in_use = FALSE return @@ -205,7 +219,7 @@ in_use = FALSE return to_chat(user, span_notice("You begin using [I] on [src].")) - if(!do_after(user, 5 SECONDS, target = src)) + if(!do_after(user, actioning_speed, target = src)) to_chat(user, span_warning("You interrupt an action!")) in_use = FALSE return @@ -221,7 +235,9 @@ return ..() /obj/item/glassblowing/blowing_rod/attack_self(mob/user, modifiers) + var/actioning_speed = HAS_TRAIT(user, TRAIT_GLASSBLOWING_MASTER) ? MASTER_TIMED : DEFAULT_TIMED var/obj/item/glassblowing/molten_glass/find_glass = locate() in contents + if(find_glass) if(find_glass.world_molten < world.time) to_chat(user, span_warning("The glass has cooled down far too much to be handled...")) @@ -265,7 +281,7 @@ in_use = FALSE return to_chat(user, span_notice("You begin blowing [src].")) - if(!do_after(user, 5 SECONDS, target = src)) + if(!do_after(user, actioning_speed, target = src)) to_chat(user, span_warning("You interrupt an action!")) in_use = FALSE return @@ -281,7 +297,7 @@ in_use = FALSE return to_chat(user, span_notice("You begin spinning [src].")) - if(!do_after(user, 5 SECONDS, target = src)) + if(!do_after(user, actioning_speed, target = src)) to_chat(user, span_warning("You interrupt an action!")) in_use = FALSE return @@ -374,3 +390,6 @@ has_sand = TRUE icon_state = "metal_cup_full" return ..() + +#undef DEFAULT_TIMED +#undef MASTER_TIMED diff --git a/modular_skyrat/modules/reagent_forging/code/modules/reagent_forging/forge.dm b/modular_skyrat/modules/reagent_forging/code/modules/reagent_forging/forge.dm index 8641e1ff652..8743618db06 100644 --- a/modular_skyrat/modules/reagent_forging/code/modules/reagent_forging/forge.dm +++ b/modular_skyrat/modules/reagent_forging/code/modules/reagent_forging/forge.dm @@ -1,3 +1,9 @@ +#define DEFAULT_TIMED 5 SECONDS +#define MASTER_TIMED 2 SECONDS + +#define DEFAULT_HEATED 25 SECONDS +#define MASTER_HEATED 50 SECONDS + /obj/structure/reagent_forge name = "forge" desc = "A structure built out of bricks, with the intended purpose of heating up metal." @@ -512,6 +518,8 @@ if(istype(I, /obj/item/glassblowing/blowing_rod)) var/obj/item/glassblowing/blowing_rod/blowing_item = I + var/actioning_speed = HAS_TRAIT(user, TRAIT_GLASSBLOWING_MASTER) ? MASTER_TIMED : DEFAULT_TIMED + var/actioning_amount = HAS_TRAIT(user, TRAIT_GLASSBLOWING_MASTER) ? MASTER_HEATED : DEFAULT_HEATED if(in_use) //only insert one at a time to_chat(user, span_warning("You cannot do multiple things at the same time!")) return @@ -526,18 +534,19 @@ in_use = FALSE return to_chat(user, span_notice("You begin heating up [blowing_item].")) - for(var/do_loop in 1 to 5) //I really want 10 seconds, but not all at "once," this makes it feel like less time - if(!do_after(user, 2 SECONDS, target = src)) - to_chat(user, span_warning("[blowing_item] is interrupted in its heating process.")) - in_use = FALSE - return - find_glass.world_molten = world.time + 25 SECONDS + if(!do_after(user, actioning_speed, target = src)) + to_chat(user, span_warning("[blowing_item] is interrupted in its heating process.")) + in_use = FALSE + return + find_glass.world_molten = world.time + actioning_amount to_chat(user, span_notice("You finish heating up [blowing_item].")) in_use = FALSE return if(istype(I, /obj/item/stack/sheet/glass)) var/obj/item/stack/sheet/glass/glass_item = I + var/actioning_speed = HAS_TRAIT(user, TRAIT_GLASSBLOWING_MASTER) ? MASTER_TIMED : DEFAULT_TIMED + var/actioning_amount = HAS_TRAIT(user, TRAIT_GLASSBLOWING_MASTER) ? MASTER_HEATED : DEFAULT_HEATED if(in_use) //only insert one at a time to_chat(user, span_warning("You cannot do multiple things at the same time!")) return @@ -550,17 +559,19 @@ to_chat(user, span_warning("You need to be able to use [glass_item]!")) in_use = FALSE return - if(!do_after(user, 5 SECONDS, target = src)) + if(!do_after(user, actioning_speed, target = src)) to_chat(user, span_warning("You stop heating up [glass_item]!")) in_use = FALSE return in_use = FALSE var/obj/item/glassblowing/molten_glass/spawned_glass = new /obj/item/glassblowing/molten_glass(get_turf(src)) - spawned_glass.world_molten = world.time + 25 SECONDS + spawned_glass.world_molten = world.time + actioning_amount return if(istype(I, /obj/item/glassblowing/metal_cup)) var/obj/item/glassblowing/metal_cup/metal_item = I + var/actioning_speed = HAS_TRAIT(user, TRAIT_GLASSBLOWING_MASTER) ? MASTER_TIMED : DEFAULT_TIMED + var/actioning_amount = HAS_TRAIT(user, TRAIT_GLASSBLOWING_MASTER) ? MASTER_HEATED : DEFAULT_HEATED if(in_use) //only insert one at a time to_chat(user, span_warning("You cannot do multiple things at the same time!")) return @@ -573,7 +584,7 @@ to_chat(user, span_warning("There is no sand within [metal_item]!")) in_use = FALSE return - if(!do_after(user, 5 SECONDS, target = src)) + if(!do_after(user, actioning_speed, target = src)) to_chat(user, span_warning("You stop heating up [metal_item]!")) in_use = FALSE return @@ -581,7 +592,7 @@ metal_item.has_sand = FALSE metal_item.icon_state = "metal_cup_empty" var/obj/item/glassblowing/molten_glass/spawned_glass = new /obj/item/glassblowing/molten_glass(get_turf(src)) - spawned_glass.world_molten = world.time + 25 SECONDS + spawned_glass.world_molten = world.time + actioning_amount return return ..() @@ -591,3 +602,9 @@ reagent_forging = TRUE sinew_lower_chance = 100 forge_temperature = 1000 + +#undef DEFAULT_TIMED +#undef MASTER_TIMED + +#undef DEFAULT_HEATED +#undef MASTER_HEATED