/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" /obj/item/storage/pill_bottle/dice/New() ..() var/special_die = pick("1","2","fudge","space","00","8bd20","4dd6","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) if(special_die == "space") new /obj/item/dice/d6/space(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 == "8bd20") new /obj/item/dice/eightbd20(src) if(special_die == "4dd6") new /obj/item/dice/fourdd6(src) if(special_die == "100") new /obj/item/dice/d100(src) /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/can_be_rigged = TRUE var/rigged = FALSE /obj/item/dice/New() result = rand(1, sides) update_icon() ..() /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/d6 name = "d6" /obj/item/dice/d6/space name = "space cube" desc = "A die with six sides. 6 TIMES 255 TIMES 255 TILE TOTAL EXISTENCE, SQUARE YOUR MIND OF EDUCATED STUPID: 2 DOES NOT EXIST." icon_state = "spaced6" /obj/item/dice/d6/space/New() ..() if(prob(10)) name = "spess cube" /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/eightbd20 name = "strange d20" desc = "A weird die with raised text printed on the faces. Everything's white on white so reading it is a struggle. What poor design!" icon_state = "8bd20" sides = 20 special_faces = list("It is certain","It is decidedly so","Without a doubt","Yes, definitely","You may rely on it","As I see it, yes","Most likely","Outlook good","Yes","Signs point to yes","Reply hazy try again","Ask again later","Better not tell you now","Cannot predict now","Concentrate and ask again","Don't count on it","My reply is no","My sources say no","Outlook not so good","Very doubtful") /obj/item/dice/eightbd20/update_icon() return /obj/item/dice/fourdd6 name = "4d d6" desc = "A die that exists in four dimensional space. Properly interpreting them can only be properly done with the help of a mathematician, a physicist, and a priest." icon_state = "4dd6" sides = 48 special_faces = list("Cube-Side: 1-1","Cube-Side: 1-2","Cube-Side: 1-3","Cube-Side: 1-4","Cube-Side: 1-5","Cube-Side: 1-6","Cube-Side: 2-1","Cube-Side: 2-2","Cube-Side: 2-3","Cube-Side: 2-4","Cube-Side: 2-5","Cube-Side: 2-6","Cube-Side: 3-1","Cube-Side: 3-2","Cube-Side: 3-3","Cube-Side: 3-4","Cube-Side: 3-5","Cube-Side: 3-6","Cube-Side: 4-1","Cube-Side: 4-2","Cube-Side: 4-3","Cube-Side: 4-4","Cube-Side: 4-5","Cube-Side: 4-6","Cube-Side: 5-1","Cube-Side: 5-2","Cube-Side: 5-3","Cube-Side: 5-4","Cube-Side: 5-5","Cube-Side: 5-6","Cube-Side: 6-1","Cube-Side: 6-2","Cube-Side: 6-3","Cube-Side: 6-4","Cube-Side: 6-5","Cube-Side: 6-6","Cube-Side: 7-1","Cube-Side: 7-2","Cube-Side: 7-3","Cube-Side: 7-4","Cube-Side: 7-5","Cube-Side: 7-6","Cube-Side: 8-1","Cube-Side: 8-2","Cube-Side: 8-3","Cube-Side: 8-4","Cube-Side: 8-5","Cube-Side: 8-6") /obj/item/dice/fourdd6/update_icon() return /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 = rand(1, sides) if(rigged && result != rigged) if(prob(Clamp(1/(sides - 1) * 100, 25, 80))) result = rigged var/fake_result = rand(1, 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(special_faces.len == 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]", \ "You throw [src]. It lands on [result]. [comment]", \ "You hear [src] rolling, it sounds like a [fake_result].") else if(!src.throwing) //Dice was thrown and is coming to rest visible_message("[src] rolls to a stop, landing on [result]. [comment]") /obj/item/dice/d4/Crossed(mob/living/carbon/human/H) if(istype(H) && !H.shoes) if(PIERCEIMMUNE in H.dna.species.species_traits) return 0 to_chat(H, "You step on the D4!") H.apply_damage(4,BRUTE,(pick("l_leg", "r_leg"))) H.Knockdown(60) /obj/item/dice/update_icon() cut_overlays() add_overlay("[src.icon_state][src.result]") /obj/item/dice/microwave_act(obj/machinery/microwave/M) if(can_be_rigged) rigged = result ..(M)