mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2025-12-27 18:51:53 +00:00
214 lines
6.0 KiB
Plaintext
214 lines
6.0 KiB
Plaintext
/obj/item/storage/pill_bottle/dice
|
|
name = "bag of dice"
|
|
desc = "Contains all the luck you'll ever need."
|
|
icon = 'icons/obj/dice.dmi'
|
|
icon_state = "dicebag"
|
|
can_hold = list(/obj/item/dice)
|
|
allow_wrap = FALSE
|
|
|
|
/obj/item/storage/pill_bottle/dice/New()
|
|
..()
|
|
var/special_die = pick("1","2","fudge","00","100")
|
|
if(special_die == "1")
|
|
new /obj/item/dice/d1(src)
|
|
if(special_die == "2")
|
|
new /obj/item/dice/d2(src)
|
|
new /obj/item/dice/d4(src)
|
|
new /obj/item/dice/d6(src)
|
|
if(special_die == "fudge")
|
|
new /obj/item/dice/fudge(src)
|
|
new /obj/item/dice/d8(src)
|
|
new /obj/item/dice/d10(src)
|
|
if(special_die == "00")
|
|
new /obj/item/dice/d00(src)
|
|
new /obj/item/dice/d12(src)
|
|
new /obj/item/dice/d20(src)
|
|
if(special_die == "100")
|
|
new /obj/item/dice/d100(src)
|
|
|
|
/obj/item/storage/pill_bottle/dice/suicide_act(mob/user)
|
|
user.visible_message("<span class='suicide'>[user] is gambling with death! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
|
return (OXYLOSS)
|
|
|
|
/obj/item/dice //depreciated d6, use /obj/item/dice/d6 if you actually want a d6
|
|
name = "die"
|
|
desc = "A die with six sides. Basic and servicable."
|
|
icon = 'icons/obj/dice.dmi'
|
|
icon_state = "d6"
|
|
w_class = WEIGHT_CLASS_TINY
|
|
|
|
var/sides = 6
|
|
var/result = null
|
|
var/list/special_faces = list() //entries should match up to sides var if used
|
|
|
|
var/rigged = DICE_NOT_RIGGED
|
|
var/rigged_value
|
|
|
|
/obj/item/dice/Initialize(mapload)
|
|
. = ..()
|
|
if(!result)
|
|
result = roll(sides)
|
|
update_icon()
|
|
|
|
/obj/item/dice/suicide_act(mob/user)
|
|
user.visible_message("<span class='suicide'>[user] is gambling with death! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
|
return (OXYLOSS)
|
|
|
|
/obj/item/dice/d1
|
|
name = "d1"
|
|
desc = "A die with one side. Deterministic!"
|
|
icon_state = "d1"
|
|
sides = 1
|
|
|
|
/obj/item/dice/d2
|
|
name = "d2"
|
|
desc = "A die with two sides. Coins are undignified!"
|
|
icon_state = "d2"
|
|
sides = 2
|
|
|
|
/obj/item/dice/d4
|
|
name = "d4"
|
|
desc = "A die with four sides. The nerd's caltrop."
|
|
icon_state = "d4"
|
|
sides = 4
|
|
|
|
/obj/item/dice/d4/Initialize(mapload)
|
|
. = ..()
|
|
AddComponent(/datum/component/caltrop, 1, 4) //1d4 damage
|
|
|
|
/obj/item/dice/d6
|
|
name = "d6"
|
|
|
|
/obj/item/dice/fudge
|
|
name = "fudge die"
|
|
desc = "A die with six sides but only three results. Is this a plus or a minus? Your mind is drawing a blank..."
|
|
sides = 3 //shhh
|
|
icon_state = "fudge"
|
|
special_faces = list("minus","blank","plus")
|
|
|
|
/obj/item/dice/d8
|
|
name = "d8"
|
|
desc = "A die with eight sides. It feels... lucky."
|
|
icon_state = "d8"
|
|
sides = 8
|
|
|
|
/obj/item/dice/d10
|
|
name = "d10"
|
|
desc = "A die with ten sides. Useful for percentages."
|
|
icon_state = "d10"
|
|
sides = 10
|
|
|
|
/obj/item/dice/d00
|
|
name = "d00"
|
|
desc = "A die with ten sides. Works better for d100 rolls than a golfball."
|
|
icon_state = "d00"
|
|
sides = 10
|
|
|
|
/obj/item/dice/d12
|
|
name = "d12"
|
|
desc = "A die with twelve sides. There's an air of neglect about it."
|
|
icon_state = "d12"
|
|
sides = 12
|
|
|
|
/obj/item/dice/d20
|
|
name = "d20"
|
|
desc = "A die with twenty sides. The prefered die to throw at the GM."
|
|
icon_state = "d20"
|
|
sides = 20
|
|
|
|
/obj/item/dice/d100
|
|
name = "d100"
|
|
desc = "A die with one hundred sides! Probably not fairly weighted..."
|
|
icon_state = "d100"
|
|
sides = 100
|
|
|
|
/obj/item/dice/d100/update_icon()
|
|
return
|
|
|
|
/obj/item/dice/d20/e20
|
|
var/triggered = FALSE
|
|
|
|
/obj/item/dice/attack_self(mob/user)
|
|
diceroll(user)
|
|
|
|
/obj/item/dice/throw_impact(atom/target)
|
|
diceroll(thrownby)
|
|
. = ..()
|
|
|
|
/obj/item/dice/proc/diceroll(mob/user)
|
|
result = roll(sides)
|
|
if(rigged != DICE_NOT_RIGGED && result != rigged_value)
|
|
if(rigged == DICE_BASICALLY_RIGGED && prob(clamp(1 / (sides - 1) * 100, 25, 80)))
|
|
result = rigged_value
|
|
else if(rigged == DICE_TOTALLY_RIGGED)
|
|
result = rigged_value
|
|
|
|
. = result
|
|
|
|
var/fake_result = roll(sides)//Daredevil isn't as good as he used to be
|
|
var/comment = ""
|
|
if(sides == 20 && result == 20)
|
|
comment = "NAT 20!"
|
|
else if(sides == 20 && result == 1)
|
|
comment = "Ouch, bad luck."
|
|
update_icon()
|
|
if(initial(icon_state) == "d00")
|
|
result = (result - 1) * 10
|
|
if(length(special_faces) == sides)
|
|
result = special_faces[result]
|
|
if(user != null) //Dice was rolled in someone's hand
|
|
user.visible_message("[user] has thrown [src]. It lands on [result]. [comment]",
|
|
"<span class='notice'>You throw [src]. It lands on [result]. [comment]</span>",
|
|
"<span class='italics'>You hear [src] rolling, it sounds like a [fake_result].</span>")
|
|
else if(!throwing) //Dice was thrown and is coming to rest
|
|
visible_message("<span class='notice'>[src] rolls to a stop, landing on [result]. [comment]</span>")
|
|
|
|
/obj/item/dice/d20/e20/diceroll(mob/user, thrown)
|
|
if(triggered)
|
|
return
|
|
|
|
. = ..()
|
|
|
|
if(result == 1)
|
|
to_chat(user, "<span class='danger'>Rocks fall, you die.</span>")
|
|
user.gib()
|
|
add_attack_logs(src, user, "detonated with a roll of [result], gibbing them!", ATKLOG_FEW)
|
|
else
|
|
triggered = TRUE
|
|
visible_message("<span class='notice'>You hear a quiet click.</span>")
|
|
addtimer(CALLBACK(src, .proc/boom, user, result), 4 SECONDS)
|
|
|
|
/obj/item/dice/d20/e20/proc/boom(mob/user, result)
|
|
var/capped = TRUE
|
|
var/actual_result = result
|
|
// Rolled a nat 20, screw the bombcap
|
|
if(result == 20)
|
|
capped = FALSE
|
|
result = 24
|
|
|
|
var/turf/epicenter = get_turf(src)
|
|
var/area/A = get_area(epicenter)
|
|
explosion(epicenter, round(result * 0.25), round(result * 0.5), round(result), round(result * 1.5), TRUE, capped)
|
|
investigate_log("E20 detonated at [A.name] ([epicenter.x],[epicenter.y],[epicenter.z]) with a roll of [actual_result]. Triggered by: [key_name(user)]", INVESTIGATE_BOMB)
|
|
log_game("E20 detonated at [A.name] ([epicenter.x],[epicenter.y],[epicenter.z]) with a roll of [actual_result]. Triggered by: [key_name(user)]")
|
|
add_attack_logs(user, src, "detonated with a roll of [actual_result]", ATKLOG_FEW)
|
|
|
|
/obj/item/dice/update_icon()
|
|
overlays.Cut()
|
|
overlays += "[icon_state][result]"
|
|
|
|
/obj/item/storage/box/dice
|
|
name = "Box of dice"
|
|
desc = "ANOTHER ONE!? FUCK!"
|
|
icon_state = "box"
|
|
|
|
/obj/item/storage/box/dice/New()
|
|
..()
|
|
new /obj/item/dice/d2(src)
|
|
new /obj/item/dice/d4(src)
|
|
new /obj/item/dice/d8(src)
|
|
new /obj/item/dice/d10(src)
|
|
new /obj/item/dice/d00(src)
|
|
new /obj/item/dice/d12(src)
|
|
new /obj/item/dice/d20(src)
|