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;)P`S9o6
zvMEX}
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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