From a5783c716955fcc281bbe6fc70cf4cf1c969b4a6 Mon Sep 17 00:00:00 2001 From: Henri215 <77684085+Henri215@users.noreply.github.com> Date: Mon, 9 Oct 2023 16:36:24 -0300 Subject: [PATCH] Adds new microtransaction method: Scratch Cards! (#22618) * scratch cards! * Apply suggestions from code review Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> * tweaking values * maint loot tweak and to_chat * sprites * DGamerL review * adjusting volume * better like this --------- Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> --- .../game/objects/effects/spawners/lootdrop.dm | 1 + code/game/objects/items/scratch_card.dm | 50 ++++++++++++++++++ code/game/objects/mail.dm | 29 ++++++---- code/modules/economy/merch_items.dm | 7 +++ icons/obj/economy.dmi | Bin 20759 -> 21314 bytes paradise.dme | 1 + sound/items/scratching.ogg | Bin 0 -> 15313 bytes 7 files changed, 78 insertions(+), 10 deletions(-) create mode 100644 code/game/objects/items/scratch_card.dm create mode 100644 sound/items/scratching.ogg diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index f3d7bfd2ec0..69944dd78c6 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -132,6 +132,7 @@ /obj/item/storage/bag/plasticbag = 20, /obj/item/storage/wallet = 20, /obj/item/storage/wallet/random = 5, + /obj/item/scratch = 10, /obj/item/caution = 10, /obj/item/mod/construction/broken_core = 4, /obj/effect/spawner/random_spawners/mod/maint = 10, diff --git a/code/game/objects/items/scratch_card.dm b/code/game/objects/items/scratch_card.dm new file mode 100644 index 00000000000..2a6f372fe7d --- /dev/null +++ b/code/game/objects/items/scratch_card.dm @@ -0,0 +1,50 @@ +/obj/item/scratch + name = "scratch card" + desc = "Scratch this with a card or coin to discover if you are the winner!" + icon = 'icons/obj/economy.dmi' + icon_state = "scard" + w_class = WEIGHT_CLASS_TINY + /// Has this been scratched yet? + var/scratched = FALSE + /// The prob chance for it to be the winner card + var/winning_chance = 1 + /// Is this the winner card? + var/winner = FALSE + +/obj/item/scratch/attackby(obj/item/I, mob/user, params) + . = ..() + if(scratched) + return + if(!(istype(I, /obj/item/card) || istype(I, /obj/item/coin))) // We scratch with cards or coins! + return + + if(prob(winning_chance)) + to_chat(user, "Congratulations! Redeem your prize at the nearest ATM!") + icon_state = "scard_winner" + winner = TRUE + else + to_chat(user, "Good luck next time.") + icon_state = "scard_loser" + playsound(user, 'sound/items/scratching.ogg', 25, TRUE) + scratched = TRUE + update_icon_state() + +/obj/item/scratch/attack_obj(obj/O, mob/living/user, params) + if(winner && istype(O, /obj/machinery/economy/atm)) + playsound(user, 'sound/machines/ping.ogg', 50, TRUE) + O.atom_say("Congratulations for winning the lottery!") + var/obj/item/reward = new /obj/item/stack/spacecash/c1000 + qdel(src) + user.put_in_hands(reward) + return + ..() + +/obj/item/storage/box/scratch_cards + name = "scratch cards box" + desc = "Try your luck with five scratch cards!" + w_class = WEIGHT_CLASS_SMALL + can_hold = list(/obj/item/scratch) + +/obj/item/storage/box/scratch_cards/populate_contents() + for(var/i in 1 to 5) + new /obj/item/scratch(src) diff --git a/code/game/objects/mail.dm b/code/game/objects/mail.dm index 254620415c0..10937972e55 100644 --- a/code/game/objects/mail.dm +++ b/code/game/objects/mail.dm @@ -65,7 +65,8 @@ /obj/item/grenade/barrier/dropwall, /obj/item/toy/figure/crew/detective, /obj/item/toy/figure/crew/hos, - /obj/item/toy/figure/crew/secofficer) + /obj/item/toy/figure/crew/secofficer, + /obj/item/storage/box/scratch_cards) job_list = list("Head of Security", "Security Officer", "Detective", "Warden") /obj/item/envelope/science @@ -82,8 +83,9 @@ /obj/item/toy/figure/crew/geneticist, /obj/item/toy/figure/crew/rd, /obj/item/toy/figure/crew/roboticist, - /obj/item/toy/figure/crew/scientist) - job_list = list("Research Director", "Roboticist", "Geneticist", "Scientist") + /obj/item/toy/figure/crew/scientist, + /obj/item/storage/box/scratch_cards) + job_list = list("Research Director", "Roboticist", "Geneticist", "Scientist") /obj/item/envelope/supply icon_state = "mail_sup" @@ -97,7 +99,8 @@ /obj/item/stack/wrapping_paper, /obj/item/toy/figure/crew/cargotech, /obj/item/toy/figure/crew/qm, - /obj/item/toy/figure/crew/miner) + /obj/item/toy/figure/crew/miner, + /obj/item/storage/box/scratch_cards) job_list = list("Quartermaster", "Cargo Technician", "Shaft Miner") /obj/item/envelope/medical @@ -114,7 +117,8 @@ /obj/item/toy/figure/crew/chemist, /obj/item/toy/figure/crew/geneticist, /obj/item/toy/figure/crew/md, - /obj/item/toy/figure/crew/virologist) + /obj/item/toy/figure/crew/virologist, + /obj/item/storage/box/scratch_cards) job_list = list("Chief Medical Officer", "Medical Doctor", "Coroner", "Chemist", "Virologist", "Psychiatrist", "Paramedic") /obj/item/envelope/engineering @@ -129,7 +133,8 @@ /obj/item/grenade/gas/oxygen, /obj/item/toy/figure/crew/atmos, /obj/item/toy/figure/crew/ce, - /obj/item/toy/figure/crew/engineer) + /obj/item/toy/figure/crew/engineer, + /obj/item/storage/box/scratch_cards) job_list = list("Chief Engineer", "Station Engineer", "Life Support Specialist") /obj/item/envelope/bread @@ -146,7 +151,8 @@ /obj/item/toy/figure/crew/botanist, /obj/item/toy/figure/crew/chef, /obj/item/toy/figure/crew/janitor, - /obj/item/toy/figure/crew/librarian) + /obj/item/toy/figure/crew/librarian, + /obj/item/storage/box/scratch_cards) job_list = list("Bartender", "Chef", "Botanist", "Janitor", "Barber", "Librarian", "Barber") /obj/item/envelope/circuses @@ -162,7 +168,8 @@ /obj/item/toy/figure/crew/clown, /obj/item/toy/figure/crew/hop, /obj/item/toy/figure/crew/chaplain, - /obj/item/toy/figure/crew/mime) + /obj/item/toy/figure/crew/mime, + /obj/item/storage/box/scratch_cards) job_list = list("Clown", "Mime", "Head of Personnel", "Chaplain") @@ -178,7 +185,8 @@ /obj/item/clothing/head/collectable/petehat, /obj/item/toy/figure/crew/captain, /obj/item/toy/figure/crew/lawyer, - /obj/item/toy/figure/crew/dsquad) + /obj/item/toy/figure/crew/dsquad, + /obj/item/storage/box/scratch_cards) job_list = list("Captain", "Magistrate", "Nanotrasen Representative", "Blueshield", "Internal Affairs Agent") /obj/item/envelope/misc @@ -192,7 +200,8 @@ /obj/item/clothing/head/cakehat, /obj/item/toy/figure/crew/assistant, /obj/item/toy/figure/owl, - /obj/item/toy/figure/griffin) + /obj/item/toy/figure/griffin, + /obj/item/storage/box/scratch_cards) job_list = list("Assistant", "Explorer") diff --git a/code/modules/economy/merch_items.dm b/code/modules/economy/merch_items.dm index 7273cd9cb1f..1951ab3cd0d 100644 --- a/code/modules/economy/merch_items.dm +++ b/code/modules/economy/merch_items.dm @@ -40,6 +40,13 @@ cost = 100 category = MERCH_CAT_TOY +/datum/merch_item/scratch_card + name = "Scratch Cards Box" + desc = "Contains 5 scratch cards. Become rich today!" + typepath = /obj/item/storage/box/scratch_cards + cost = 100 + category = MERCH_CAT_TOY + /datum/merch_item/nanomob_booster name = "Nano-Mob Hunter Trading Card Booster Pack" desc = "Contains 6 random Nano-Mob Hunter Trading Cards. May contain a holographic card!" diff --git a/icons/obj/economy.dmi b/icons/obj/economy.dmi index 4afae1bf129a0d8337efabdf203a46c99ab17789..06a2a97e8835ac8e8801f5669f707399a00fc9b4 100644 GIT binary patch delta 2096 zcmV-02+#MIq5;CD0gxnrk9t&CbVOxyV{&P5bZKvH004NLt(L)R!axv)&&g9PdTono zOK-UprFhU+2&2161}3}d?5geG)!<74V74%SUJ+s z!unYeE3X?1vEq=OjTY8-d#t=`TgM8#Iry<6`y(D9&yx%O)s^MLQ{PqE@xsr4zB_XA z`(s$Pd#?MAK&UTw3E+W11Vnhld}xh%y!buvJMY{lA#B22o~frxVhJJF5GSYcz3JXk8j=u1Z!e^)3g zDGV~Ri4TS{!MhQt4^32B>w|%U&@o!(N~!3W4}GaR2O$sIt|~|?g-P!ox|7|cH%)GG z&ppk}{|Di=_qKeu4Sc_R=Y02^ZG%6d{^SYlIWuhRIWsJ0C#wGl&IXNhADzRFmL1sW z7@Q4Cy^qM#h!J@jG5YrRLGRFUe{AP5j5UlIV+~_c!uf1hafXp%CBm zDuhFDYOy7t=FTpo>F^P}+Ht`0x{%RA&sUz@7%Dg$G`bIUqkUUDW)^19f4;3fdu`z6 zKvqK9q~^-LC`29cc-+u+9h#;=94Vpdg91`ZSwnCulhc;xSMQ~VZS}Ixz;owZP^Lw#Ril@5~-`JLr+gnwgWC44x^=|#q#%^u7nCD-{86X0DzJH z7wC>A3|W;(t;Z+M!L{H>$<%5SN;n*brfJ#l&GG@(s-0LYf0k1TX_^MV-|zUnn3Hd^ zw>5iSB;UtVmjM9RhZ?0+0<|8WI19I9AhuE2gyQy6O!0W!5Y>&QX&4+F%#n{7Q3=Ij zv8;Sjsgz@LLHWs7Bwaz{-{Sy)yK{>e>3@NSw(a=z#G+$!GR5K#-TV>&@cBOnmBfE1 zbP514b+onQfB2jOQVS~}VjD5CGH2LQ%inQ}e8kPiSH9KP>(d?E+V0gb^8bh-j67Js#?Bj@Lxu7HZg zKf7`?=jZKIKtwGR5UDD129aYH`9|4COQVK?Pt6+d4-6SuZtM&tA%>nxKFPsQ^`#k9p1qaKG{~ z&-nmyf8}Ep-#q67P(IZPn-B;o6It>BfYZ_AzMsGS4)1-uGkZ=XVcGI27GJh}ip8gV zyaNS9NEyhKkH9Jke-_A1zOq`bON}o>K6c_$KGh8cL`aE5rJ4~f*r`;?v6$v0 z{No1+jP$?2-MK{oa^*VCMLvb%-`TrD`FI4bgg{6U;_Aq_m0Gv*LH>0o z*MW;f6UOzSMm(E)1OTolUoXbzN(gG9fCwppjU?oTd;}s115onG-)r$HAhl3Hgp`Pt zeuS(9BuhR5v9ye;VJ9!er-0N#0TE(@d}mfCwoQAsxzxkn*5_2&n+dhmi82fCwRk aDB)jf@$vH5b>R^J0000+ibGFUAX?^yCY}+ zKgMOp$GWdWCUv<>0FR6!Ai@`RZKL&^a|zqS1~&U$`U|xO)#tpMHV0X=ya5_O0uMj4 z*g^OTe_@=gtSqy4K?u{_PynSo_>>A@xn(j3fANr8CS0GZdrmF;ri}QT;EX} z-qJsCXfQP;S)7n5*TH_pNjb@PuQzSod58Xo`N_jm8Bxt*Ui`{2G7xA&sO z?Y(?XqPkQ&sYQ>zf24)-f(Bh{C$(IkW9#)+wDo!`+WdA?{)(@AU*6Nfjf3dm#zC(C ze=n||APD%(0ZW;?;7srsAAP;hHU8%DZm!jk374eGN0P#JnCm8qCU_*Nb=K1HKgW_J zf5n$1J^lMB)lfmi!>3-aTYctC!J)`91So{XRQye%U>)jd>bl!JN>_Z(V6gx^L?M`I3S};0d#t}U;6jgUnE_G zP*M>6*YKvY`jIZqKY9Lp_hDlugiJNmc+n_K^<&lo^IrSAPLjgMAcTNytad_}e_vgT zB?_08j5Ng7!<k6JfA=Lxi`%==G=|Wi%BR=mnowlhm;e+7d%;Z@Q+*~? zK9Y3)s-4>(14V5@=@&jTGc(%Q*pTbGDwoS2jHjuDsDMyp?1V63u0y5y?&vr%gr>0p zrQe#42_Mq|*Dr*EAfOTg`d}|Oq*l}>6xVg-I8NvLc=$*cQ*NH;soidOe}2Ys991fn zkv}UiNvMF3$?4&KNwFpr6GEeELK)XqOs3M=+1cp|pWboTb>(>;;RB>V1%%8_5BE!^ z8ZuvhJ^!hccleBZD<GyPWS-nQ31i)sMn*O+NFC|qprV_FZAE4+6V;~@fej${E@Bz{x zfPj?Jgb?8aq(=Y&84L;`!UxEP00J^f3L(M=$c`>Jz*79QRNL^O3l2p_1q4_!p+n^Z n*dc&`ArL-*Jpu>-Fc$v<5l*s)ev8U900000NkvXXu0mjfBHQlv diff --git a/paradise.dme b/paradise.dme index c8915258baa..805bd67a0a3 100644 --- a/paradise.dme +++ b/paradise.dme @@ -955,6 +955,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\scratch_card.dm" #include "code\game\objects\items\shooting_range.dm" #include "code\game\objects\items\sport.dm" #include "code\game\objects\items\theft_items.dm" diff --git a/sound/items/scratching.ogg b/sound/items/scratching.ogg new file mode 100644 index 0000000000000000000000000000000000000000..762d39c47cb1d16b0e02ccf63aa7f2585230be1e GIT binary patch literal 15313 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