From 9cecb68e88a792acbae369687b23cf2a210d050c Mon Sep 17 00:00:00 2001
From: Henri215 <77684085+Henri215@users.noreply.github.com>
Date: Tue, 9 Jan 2024 09:48:29 -0300
Subject: [PATCH] New surprise mechanic: Roulettes! (#23577)
* roulette
* part 2
* radial menu
* updated sprite
* Apply suggestions from code review
* Update code/game/objects/items/roulette.dm
---
code/game/objects/items/roulette.dm | 72 ++++++++++++++++++
.../items/stacks/sheets/sheet_types.dm | 3 +-
icons/obj/roulette.dmi | Bin 0 -> 1173 bytes
paradise.dme | 1 +
sound/items/roulette_spin.ogg | Bin 0 -> 42312 bytes
5 files changed, 75 insertions(+), 1 deletion(-)
create mode 100644 code/game/objects/items/roulette.dm
create mode 100644 icons/obj/roulette.dmi
create mode 100644 sound/items/roulette_spin.ogg
diff --git a/code/game/objects/items/roulette.dm b/code/game/objects/items/roulette.dm
new file mode 100644
index 00000000000..4c86922a531
--- /dev/null
+++ b/code/game/objects/items/roulette.dm
@@ -0,0 +1,72 @@
+#define SPINNING_DURATION 3 SECONDS
+
+/obj/structure/roulette
+ name = "roulette"
+ desc = "Normally used for giving out rewards.. or choosing torture methods."
+ icon = 'icons/obj/roulette.dmi'
+ icon_state = "blue"
+ density = TRUE
+ /// Is it currently spinning?
+ var/spinning = FALSE
+ /// List of options the roulette currently has
+ var/list/options = list("Blue", "Orange", "Green", "Yellow", "Red", "Purple")
+ /// Colors available on the roulette
+ var/list/colors = list("blue", "orange", "green", "yellow", "red", "purple")
+
+/obj/structure/roulette/examine(mob/user)
+ . = ..()
+ . += "Interact to customise it and spin with Alt-Click."
+ . += "The options are: \n[options.Join(".\n")]"
+
+/obj/structure/roulette/AltClick()
+ if(spinning)
+ return
+ playsound(src, 'sound/items/roulette_spin.ogg', 50, TRUE)
+ icon_state = "roulette_on"
+ spinning = TRUE
+ addtimer(CALLBACK(src, PROC_REF(stop_spin)), SPINNING_DURATION)
+
+/obj/structure/roulette/proc/stop_spin()
+ var/chosen_number = rand(1, 6)
+ atom_say(options[chosen_number])
+ icon_state = colors[chosen_number]
+ spinning = FALSE
+
+/obj/structure/roulette/wrench_act(mob/user, obj/item/I)
+ . = TRUE
+ if(!I.use_tool(src, user, delay = 3 SECONDS, volume = I.tool_volume))
+ return
+ deconstruct()
+
+/obj/structure/roulette/deconstruct()
+ if(!(flags & NODECONSTRUCT))
+ new /obj/item/stack/sheet/wood(loc, 10)
+ return ..()
+
+/obj/structure/roulette/attack_hand(mob/user)
+ var/list/radials = list("Blue" = image(icon = 'icons/obj/roulette.dmi', icon_state = colors[1]),
+ "Orange" = image(icon = 'icons/obj/roulette.dmi', icon_state = colors[2]),
+ "Green" = image(icon = 'icons/obj/roulette.dmi', icon_state = colors[3]),
+ "Yellow" = image(icon = 'icons/obj/roulette.dmi', icon_state = colors[4]),
+ "Red" = image(icon = 'icons/obj/roulette.dmi', icon_state = colors[5]),
+ "Purple" = image(icon = 'icons/obj/roulette.dmi', icon_state = colors[6])
+ )
+ var/choice = show_radial_menu(user, src, radials, radius = 38, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE)
+ switch(choice)
+ if("Blue")
+ options[1] = input("Customise the blue option:", name, options[1]) as text
+ if("Orange")
+ options[2] = input("Customise the orange option:", name, options[2]) as text
+ if("Green")
+ options[3] = input("Customise the green option:", name, options[3]) as text
+ if("Yellow")
+ options[4] = input("Customise the yellow option:", name, options[4]) as text
+ if("Red")
+ options[5] = input("Customise the red option:", name, options[5]) as text
+ if("Purple")
+ options[6] = input("Customise the purple option:", name, options[6]) as text
+
+/obj/structure/roulette/proc/check_menu(mob/living/user)
+ return (istype(user) && !HAS_TRAIT(user, TRAIT_HANDS_BLOCKED))
+
+#undef SPINNING_DURATION
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index b42d0dfac59..435d4530a1e 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -242,7 +242,8 @@ GLOBAL_LIST_INIT(wood_recipes, list(
new /datum/stack_recipe("ore box", /obj/structure/ore_box, 4, time = 5 SECONDS, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("loom", /obj/structure/loom, 10, time = 1.5 SECONDS, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("fermenting barrel", /obj/structure/fermenting_barrel, 30, time = 5 SECONDS),
- new /datum/stack_recipe("compost bin", /obj/machinery/compost_bin, 10, time = 1.5 SECONDS, one_per_turf = TRUE, on_floor = TRUE)
+ new /datum/stack_recipe("compost bin", /obj/machinery/compost_bin, 10, time = 1.5 SECONDS, one_per_turf = TRUE, on_floor = TRUE),
+ new /datum/stack_recipe("roulette", /obj/structure/roulette, 10, time = 3 SECONDS, one_per_turf = TRUE, on_floor = TRUE)
))
/obj/item/stack/sheet/wood
diff --git a/icons/obj/roulette.dmi b/icons/obj/roulette.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..32fa465af6c6456e751f12fa230cd50b54f66b5e
GIT binary patch
literal 1173
zcmV;G1Zw+
eh<71ow7EW!@f$S
k&H=Tnv_Xm>E9bI
zbSGgp_a4q-W@>S5Z(T2%d&l2E!Fney;
z`yL7?%ZS`sD4?uP*pscfXY7L
zP5_V2^J@Zlbhk^g03O}#k}QA~xLpzja9l2zGlwLAgSauM(@+2haf~Ag;2@51Bmol#
zC2SnR05b>ikwf4M2l0VJ;24)U=8**KD}>U>3bh^DSE%g}-cxsIKjYahI4kXpmvz%>
z1n+I5Cq^1X1~gCes>0oUu8JIJA=)y
zGMwL?f!m!yIss(N{-0`5IOb;s3dj7cK;fhRrwvQ=zD9(~*Hy02`x@m6-MKMxh2Aq<
z9K|Wa#bKON>L||64;H}NQ%CkFH*ahDYM|d!-5$a#pc-k1a3qkx=m0snOQ;hAWaOOS
zLLVS2rv(2`r4EpnQg_yhRnYw*pd^zZb&*WjD)L7ws-HviST
zDEZ(8q|;&K1spYB!eO?+2zy42N!#Jsf|AlkcD(;Bo)KS26YOP@o84h8YwAQ6Bdn+!+jh
z6@rI^J)Zn3r2aY0h42Z}%N`}~2wMO=x?0MhkJ00000NkvXXu0mjf%z7~|
literal 0
HcmV?d00001
diff --git a/paradise.dme b/paradise.dme
index 6a9923c0045..63c0b8cb28d 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -973,6 +973,7 @@
#include "code\game\objects\items\latexballoon.dm"
#include "code\game\objects\items\mixing_bowl.dm"
#include "code\game\objects\items\random_items.dm"
+#include "code\game\objects\items\roulette.dm"
#include "code\game\objects\items\scratch_card.dm"
#include "code\game\objects\items\shooting_range.dm"
#include "code\game\objects\items\sport.dm"
diff --git a/sound/items/roulette_spin.ogg b/sound/items/roulette_spin.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..ef8e37fd2020d4f6b33642da31c2a8996f35fb0b
GIT binary patch
literal 42312
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