Merge pull request #4549 from CHOMPStation2/upstream-merge-13319

[MIRROR] Adds roulette balls
This commit is contained in:
Nadyr
2022-07-19 20:55:00 -04:00
committed by GitHub
10 changed files with 335 additions and 26 deletions

View File

@@ -256,7 +256,8 @@ var/global/list/edible_trash = list(/obj/item/broken_device,
/obj/item/weapon/folder, /obj/item/weapon/folder,
/obj/item/weapon/clipboard, /obj/item/weapon/clipboard,
/obj/item/weapon/coin, /obj/item/weapon/coin,
/obj/item/clothing/ears //chompstation addition end /obj/item/clothing/ears, //chompstation addition end
//CHOMPedit: disabled because this is in a file we don't use /obj/item/roulette_ball
) )
var/global/list/contamination_flavors = list( var/global/list/contamination_flavors = list(
@@ -844,4 +845,4 @@ var/global/list/xenobio_rainbow_extracts = list(
/obj/item/slime_extract/ruby = 3, /obj/item/slime_extract/ruby = 3,
/obj/item/slime_extract/emerald = 3, /obj/item/slime_extract/emerald = 3,
/obj/item/slime_extract/light_pink = 1, /obj/item/slime_extract/light_pink = 1,
/obj/item/slime_extract/rainbow = 1) /obj/item/slime_extract/rainbow = 1)

View File

@@ -993,3 +993,6 @@ Note: This proc can be overwritten to allow for different types of auto-alignmen
// this gets called when the item gets chucked by the vending machine // this gets called when the item gets chucked by the vending machine
/obj/item/proc/vendor_action(var/obj/machinery/vending/V) /obj/item/proc/vendor_action(var/obj/machinery/vending/V)
return return
/obj/item/proc/on_holder_escape(var/obj/item/weapon/holder/H)
return

View File

@@ -48,15 +48,15 @@
name = "stack of brown carpet" name = "stack of brown carpet"
type_to_spawn = /obj/item/stack/tile/carpet/brncarpet type_to_spawn = /obj/item/stack/tile/carpet/brncarpet
/obj/fiftyspawner/brncarpet /obj/fiftyspawner/blucarpet2
name = "stack of blue carpet" name = "stack of blue carpet"
type_to_spawn = /obj/item/stack/tile/carpet/blucarpet2 type_to_spawn = /obj/item/stack/tile/carpet/blucarpet2
/obj/fiftyspawner/brncarpet /obj/fiftyspawner/greencarpet
name = "stack of green carpet" name = "stack of green carpet"
type_to_spawn = /obj/item/stack/tile/carpet/greencarpet type_to_spawn = /obj/item/stack/tile/carpet/greencarpet
/obj/fiftyspawner/brncarpet /obj/fiftyspawner/purplecarpet
name = "stack of purple carpet" name = "stack of purple carpet"
type_to_spawn = /obj/item/stack/tile/carpet/purplecarpet type_to_spawn = /obj/item/stack/tile/carpet/purplecarpet

View File

@@ -49,4 +49,46 @@
/obj/item/clothing/accessory/holster/hip, /obj/item/clothing/accessory/holster/hip,
/obj/item/clothing/head/cowboy/ranger, /obj/item/clothing/head/cowboy/ranger,
/obj/item/clothing/shoes/boots/cowboy/brown /obj/item/clothing/shoes/boots/cowboy/brown
) )
/obj/item/weapon/storage/box/roulette_balls_normal
name = "roulette ball box"
desc = "A box of spare roulette balls."
icon_state = "balls"
can_hold = list(/obj/item/roulette_ball)
starts_with = list(
/obj/item/roulette_ball = 7,
/obj/item/roulette_ball/hollow = 2)
/obj/item/weapon/storage/box/roulette_balls_fancy
name = "fancy roulette ball box"
desc = "A box of extra-pretty roulette balls."
icon_state = "balls"
can_hold = list(/obj/item/roulette_ball)
starts_with = list(
/obj/item/roulette_ball,
/obj/item/roulette_ball/hollow,
/obj/item/roulette_ball/red,
/obj/item/roulette_ball/orange,
/obj/item/roulette_ball/yellow,
/obj/item/roulette_ball/green,
/obj/item/roulette_ball/blue,
/obj/item/roulette_ball/purple,
/obj/item/roulette_ball/moon,
/obj/item/roulette_ball/planet,
/obj/item/roulette_ball/gold)
/obj/item/weapon/storage/box/roulette_balls_cheat
name = "special roulette ball box"
desc = "A box of 'special' roulette balls."
icon_state = "balls"
can_hold = list(/obj/item/roulette_ball)
starts_with = list(
/obj/item/roulette_ball/cheat/first_twelve,
/obj/item/roulette_ball/cheat/second_twelve,
/obj/item/roulette_ball/cheat/third_twelve,
/obj/item/roulette_ball/cheat/red,
/obj/item/roulette_ball/cheat/black,
/obj/item/roulette_ball/cheat/zeros,
/obj/item/roulette_ball/cheat/odd,
/obj/item/roulette_ball/cheat/even)

View File

@@ -7,7 +7,7 @@
// //
/obj/structure/casino_table /obj/structure/casino_table
name = "casino table" name = "casino table"
desc = "this is an unremarkable table for a casino." desc = "This is an unremarkable table for a casino."
icon = 'icons/obj/casino.dmi' icon = 'icons/obj/casino.dmi'
icon_state = "roulette_table" icon_state = "roulette_table"
density = 1 density = 1
@@ -26,39 +26,301 @@
/obj/structure/casino_table/roulette_table /obj/structure/casino_table/roulette_table
name = "roulette" name = "roulette"
desc = "Spin the roulette to try your luck." desc = "The roulette. Spin to try your luck."
icon_state = "roulette_wheel" icon_state = "roulette_wheel"
var/spin_state = "roulette_wheel_spinning"
var/obj/item/roulette_ball/ball
/obj/structure/casino_table/roulette_table/Initialize()
.=..()
ball = new(src)
return
/obj/structure/casino_table/roulette_table/examine(mob/user)
.=..()
if(ball)
. += "It's currently using [ball.get_ball_desc()]."
else
. += "It doesn't have a ball."
/obj/structure/casino_table/roulette_table/attack_hand(mob/user as mob) /obj/structure/casino_table/roulette_table/attack_hand(mob/user as mob)
if (busy) if(busy)
to_chat(user,"<span class='notice'>You cannot spin now! The roulette is already spinning.</span> ") to_chat(user,"<span class='notice'>You cannot spin now! The roulette is already spinning.</span> ")
return return
visible_message("<span class='notice'>\ [user] spins the roulette and throws inside little ball.</span>") if(!ball)
to_chat(user,"<span class='notice'>This roulette wheel has no ball!</span> ")
return
visible_message("<span class='notice'>\The [user] spins the roulette and throws [ball.get_ball_desc()] into it.</span>")
playsound(src.loc, 'sound/machines/roulette.ogg', 40, 1) playsound(src.loc, 'sound/machines/roulette.ogg', 40, 1)
busy = 1 busy = 1
icon_state = "roulette_wheel_spinning" ball.on_spin()
var/result = rand(0,36) icon_state = spin_state
var/result = rand(0,37)
if(ball.cheatball)
result = ball.get_cheated_result()
var/color = "green" var/color = "green"
add_fingerprint(user) add_fingerprint(user)
if ((result>0 && result<11) || (result>18 && result<29)) if((result > 0 && result < 11) || (result > 18 && result < 29))
if (result%2) if(result % 2)
color="red" color="red"
else else
color="black"
if ( (result>10 && result<19) || (result>28) )
if (result%2)
color="black" color="black"
else if((result > 10 && result < 19) || (result > 28 && result < 37))
color="red" if(result % 2)
color="black"
else
color="red"
if(result == 37)
result = "00"
spawn(5 SECONDS) spawn(5 SECONDS)
visible_message("<span class='notice'>The roulette stops spinning, the ball landing on [result], [color].</span>") visible_message("<span class='notice'>The roulette stops spinning, the ball landing on [result], [color].</span>")
busy=0 busy = 0
icon_state = "roulette_wheel" icon_state = initial(icon_state)
/obj/structure/casino_table/roulette_table/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/roulette_ball))
if(!ball)
user.drop_from_inventory(W)
W.forceMove(src)
ball = W
to_chat(user, "<span class='notice'>You insert [W] into [src].</span>")
return
..()
/obj/structure/casino_table/roulette_table/verb/remove_ball()
set name = "Remove Roulette Ball"
set category = "Object"
set src in oview(1)
if(!usr || !isturf(usr.loc))
return
if(usr.stat || usr.restrained())
return
if(ismouse(usr) || (isobserver(usr)))
return
if(busy)
to_chat(usr, "<span class='warning'>You cannot remove \the [ball] while [src] is spinning!</span>")
return
if(ball)
usr.put_in_hands(ball)
to_chat(usr, "<span class='notice'>You remove \the [ball] from [src].</span>")
ball = null
return
else
to_chat(usr, "<span class='notice'>There is no ball in [src]!</span>")
return
/obj/structure/casino_table/roulette_table/long
icon_state = "roulette_wheel_long"
spin_state = "roulette_wheel_long_spinning"
/obj/structure/casino_table/roulette_long
name = "roulette table"
desc = "Roulette table."
icon_state = "roulette_long"
/obj/structure/casino_table/roulette_chart /obj/structure/casino_table/roulette_chart
name = "roulette chart" name = "roulette chart"
desc = "Roulette chart. Place your bets!" desc = "Roulette chart. Place your bets!"
icon_state = "roulette_table" icon_state = "roulette_chart"
/obj/item/roulette_ball
name = "roulette ball"
desc = "A small ball used for roulette wheel. This one is made of regular metal."
var/ball_desc = "a small metal ball"
icon = 'icons/obj/casino.dmi'
icon_state = "roulette_ball"
var/cheatball = FALSE
/obj/item/roulette_ball/proc/get_cheated_result()
return rand(0,37) // No cheating by default
/obj/item/roulette_ball/proc/get_ball_desc()
return ball_desc
/obj/item/roulette_ball/proc/on_spin()
return
/obj/item/roulette_ball/gold
name = "golden roulette ball"
desc = "A small ball used for roulette wheel. This one is particularly gaudy."
ball_desc = "a shiny golden ball"
icon_state = "roulette_ball_gold"
/obj/item/roulette_ball/red
name = "red roulette ball"
desc = "A small ball used for roulette wheel. This one is ornate red."
ball_desc = "a striped red ball"
icon_state = "roulette_ball_red"
/obj/item/roulette_ball/orange
name = "orange roulette ball"
desc = "A small ball used for roulette wheel. This one is ornate orange."
ball_desc = "a striped orange ball"
icon_state = "roulette_ball_orange"
/obj/item/roulette_ball/green
name = "green roulette ball"
desc = "A small ball used for roulette wheel. This one is ornate green."
ball_desc = "a smooth green ball"
icon_state = "roulette_ball_green"
/obj/item/roulette_ball/blue
name = "blue roulette ball"
desc = "A small ball used for roulette wheel. This one is ornate blue."
ball_desc = "a striped blue ball"
icon_state = "roulette_ball_blue"
/obj/item/roulette_ball/yellow
name = "yellow roulette ball"
desc = "A small ball used for roulette wheel. This one is ornate yellow."
ball_desc = "a smooth yellow ball"
icon_state = "roulette_ball_yellow"
/obj/item/roulette_ball/purple
name = "purple roulette ball"
desc = "A small ball used for roulette wheel. This one is ornate purple."
ball_desc = "a dotted purple ball"
icon_state = "roulette_ball_purple"
/obj/item/roulette_ball/planet
name = "planet roulette ball"
desc = "A small ball used for roulette wheel. This one looks like a small earth-like planet."
ball_desc = "a planet-like ball"
icon_state = "roulette_ball_earth"
/obj/item/roulette_ball/moon
name = "moon roulette ball"
desc = "A small ball used for roulette wheel. This one looks like a small moon."
ball_desc = "a moon-like ball"
icon_state = "roulette_ball_moon"
/obj/item/roulette_ball/hollow
name = "glass roulette ball"
desc = "A small ball used for roulette wheel. This one is made of glass and seems to be openable."
ball_desc = "a small glass ball"
icon_state = "roulette_ball_glass"
var/obj/item/weapon/holder/trapped
/obj/item/roulette_ball/hollow/examine(mob/user)
.=..()
if(trapped)
. += "You can see [trapped] trapped inside!"
else
. += "It appears to be empty."
/obj/item/roulette_ball/hollow/get_ball_desc()
.=..()
if(trapped && trapped.held_mob)
. += " with [trapped.name] trapped within"
return
/obj/item/roulette_ball/hollow/attackby(var/obj/item/W, var/mob/user)
if(trapped)
to_chat(user, "<span class='notice'>This ball already has something trapped in it!</span>")
return
if(istype(W, /obj/item/weapon/holder))
var/obj/item/weapon/holder/H = W
if(!H.held_mob)
to_chat(user, "<span class='warning'>This holder has nobody in it? Yell at a developer!</span>")
return
if(H.held_mob.get_effective_size() > 50)
to_chat(user, "<span class='warning'>\The [H] is too big to fit inside!</span>")
return
user.drop_from_inventory(H)
H.forceMove(src)
trapped = H
to_chat(user, "<span class='notice'>You trap \the [H] inside the glass roulette ball.</span>")
to_chat(H.held_mob, "<span class='warning'>\The [user] traps you inside a glass roulette ball!</span>")
update_icon()
/obj/item/roulette_ball/hollow/update_icon()
if(trapped && trapped.held_mob)
icon_state = "roulette_ball_glass_full"
else
icon_state = "roulette_ball_glass"
/obj/item/roulette_ball/hollow/attack_self(mob/user as mob)
if(!trapped)
to_chat(user, "<span class='notice'>\The [src] is empty!</span>")
return
else
user.put_in_hands(trapped)
if(trapped.held_mob)
to_chat(user, "<span class='notice'>You take \the [trapped] out of the glass roulette ball.</span>")
to_chat(trapped.held_mob, "<span class='notice'>\The [user] takes you out of a glass roulette ball.</span>")
trapped = null
update_icon()
/obj/item/roulette_ball/hollow/on_holder_escape()
trapped = null
update_icon()
/obj/item/roulette_ball/hollow/on_spin()
if(trapped && trapped.held_mob)
to_chat(trapped.held_mob, "<span class='critical'>THE WHOLE WORLD IS SENT WHIRLING AS THE ROULETTE SPINS!!!</span>")
/obj/item/roulette_ball/hollow/Destroy()
if(trapped)
trapped.forceMove(src.loc)
trapped = null
return ..()
/obj/item/roulette_ball/cheat
cheatball = TRUE
/obj/item/roulette_ball/cheat/first_twelve
desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on first 12."
/obj/item/roulette_ball/cheat/first_twelve/get_cheated_result()
return pick(list(1,2,3,4,5,6,7,8,9,10,11,12))
/obj/item/roulette_ball/cheat/second_twelve
desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on second 12."
/obj/item/roulette_ball/cheat/second_twelve/get_cheated_result()
return pick(list(13,14,15,16,17,18,19,20,21,22,23,24))
/obj/item/roulette_ball/cheat/third_twelve
desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on third 12."
/obj/item/roulette_ball/cheat/third_twelve/get_cheated_result()
return pick(list(25,26,27,28,29,30,31,32,33,34,35,36))
/obj/item/roulette_ball/cheat/zeros
desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on 0 or 00."
/obj/item/roulette_ball/cheat/zeros/get_cheated_result()
return pick(list(0, 37))
/obj/item/roulette_ball/cheat/red
desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on red."
/obj/item/roulette_ball/cheat/red/get_cheated_result()
return pick(list(1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36))
/obj/item/roulette_ball/cheat/black
desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on black."
/obj/item/roulette_ball/cheat/black/get_cheated_result()
return pick(list(2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35))
/obj/item/roulette_ball/cheat/even
desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on even."
/obj/item/roulette_ball/cheat/even/get_cheated_result()
return pick(list(2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36))
/obj/item/roulette_ball/cheat/odd
desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on odd."
/obj/item/roulette_ball/cheat/odd/get_cheated_result()
return pick(list(1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35))
// //
//Blackjack table //Blackjack table

View File

@@ -262,7 +262,6 @@
return TOPIC_REFRESH return TOPIC_REFRESH
else if(href_list["clicked_pos_trait"]) else if(href_list["clicked_pos_trait"])
var/traitpath = text2path(href_list["clicked_pos_trait"]) //CHOMPEdit
var/datum/trait/trait = text2path(href_list["clicked_pos_trait"]) var/datum/trait/trait = text2path(href_list["clicked_pos_trait"])
var/choice = tgui_alert(usr, "Remove [initial(trait.name)] and regain [initial(trait.cost)] points?","Remove Trait",list("Remove","Cancel")) var/choice = tgui_alert(usr, "Remove [initial(trait.name)] and regain [initial(trait.cost)] points?","Remove Trait",list("Remove","Cancel"))
if(choice == "Remove") if(choice == "Remove")

View File

@@ -107,11 +107,13 @@ var/list/holder_mob_icon_cache = list()
to_chat(held, "<span class='warning'>You extricate yourself from [holster].</span>") to_chat(held, "<span class='warning'>You extricate yourself from [holster].</span>")
forceMove(get_turf(src)) forceMove(get_turf(src))
held.reset_view(null) held.reset_view(null)
else if(isitem(loc)) else if(isitem(loc))
var/obj/item/I = loc
to_chat(held, "<span class='warning'>You struggle free of [loc].</span>") to_chat(held, "<span class='warning'>You struggle free of [loc].</span>")
forceMove(get_turf(src)) forceMove(get_turf(src))
held.reset_view(null) held.reset_view(null)
if(istype(I))
I.on_holder_escape(src)
//Mob specific holders. //Mob specific holders.
/obj/item/weapon/holder/diona /obj/item/weapon/holder/diona

View File

@@ -809,7 +809,7 @@
to_chat(src, "<span class='notice'>You can taste the flavor of aromatic rolling paper and funny looks.</span>") to_chat(src, "<span class='notice'>You can taste the flavor of aromatic rolling paper and funny looks.</span>")
else if(istype(I,/obj/item/weapon/paper)) else if(istype(I,/obj/item/weapon/paper))
to_chat(src, "<span class='notice'>You can taste the dry flavor of bureaucracy.</span>") to_chat(src, "<span class='notice'>You can taste the dry flavor of bureaucracy.</span>")
else if(istype(I,/obj/item/weapon/dice)) else if(istype(I,/obj/item/weapon/dice)) //CHOMPedit: Removed roulette ball because that's not active here.
to_chat(src, "<span class='notice'>You can taste the bitter flavor of cheating.</span>") to_chat(src, "<span class='notice'>You can taste the bitter flavor of cheating.</span>")
else if(istype(I,/obj/item/weapon/lipstick)) else if(istype(I,/obj/item/weapon/lipstick))
to_chat(src, "<span class='notice'>You can taste the flavor of couture and style. Toddler at the make-up bag style.</span>") to_chat(src, "<span class='notice'>You can taste the flavor of couture and style. Toddler at the make-up bag style.</span>")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 76 KiB