slot_game_config_template.json 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. {
  2. "schemaVersion": "slot_game_config.v1",
  3. "game": {
  4. "id": "jelly-candy-slot",
  5. "title": "Jelly Candy Slot",
  6. "mode": "demo_only",
  7. "engine": "cocos_creator_3_8",
  8. "orientation": "portrait",
  9. "targetViewport": { "width": 798, "height": 1724 },
  10. "audienceFeel": ["casual", "juicy", "bright", "fast"]
  11. },
  12. "theme": {
  13. "world": "jelly candy land",
  14. "visualStyle": "cute 3D-rendered translucent jelly creatures, glossy gummy texture, soft highlights, mobile game asset style",
  15. "palette": ["pink", "blue", "purple", "gold", "lemon yellow"],
  16. "avoid": ["photorealistic human", "dark horror", "busy text", "copied logos", "checkerboard background"]
  17. },
  18. "reels": {
  19. "mode": "ways",
  20. "columns": 5,
  21. "rows": 3,
  22. "payDirection": "left_to_right",
  23. "paylines": {
  24. "enabled": false,
  25. "count": 25,
  26. "patterns": []
  27. },
  28. "ways": {
  29. "enabled": true,
  30. "waysCount": 243,
  31. "minAdjacentReels": 3
  32. },
  33. "megaways": {
  34. "enabled": false,
  35. "columns": 6,
  36. "rowRange": [2, 7],
  37. "maxWays": 117649
  38. },
  39. "clusterPays": {
  40. "enabled": false,
  41. "grid": { "columns": 6, "rows": 5 },
  42. "minClusterSize": 5,
  43. "adjacency": "orthogonal"
  44. }
  45. },
  46. "mathProfile": {
  47. "volatility": "medium",
  48. "hitFrequencyFeel": "medium",
  49. "maxWinMultiplier": 5000,
  50. "rtpTargetLabel": "demo_not_certified",
  51. "note": "Prototype config only. Real-money RTP, symbol weights, certification, and jurisdiction compliance are outside this template."
  52. },
  53. "symbols": {
  54. "low": [
  55. { "id": "jelly_blue", "role": "low_symbol", "countWeight": 18 },
  56. { "id": "jelly_green", "role": "low_symbol", "countWeight": 18 },
  57. { "id": "jelly_orange", "role": "low_symbol", "countWeight": 16 }
  58. ],
  59. "high": [
  60. { "id": "jelly_purple", "role": "high_symbol", "countWeight": 10 },
  61. { "id": "jelly_rainbow", "role": "premium_symbol", "countWeight": 6 },
  62. { "id": "symbol_seven", "role": "top_symbol", "countWeight": 4 }
  63. ],
  64. "special": [
  65. {
  66. "id": "wild",
  67. "type": "wild",
  68. "substitutesFor": ["low", "high"],
  69. "canAppearInBaseGame": true,
  70. "canAppearInFreeSpins": true
  71. },
  72. {
  73. "id": "scatter",
  74. "type": "scatter",
  75. "trigger": "free_spins",
  76. "requiredCount": 3,
  77. "canAppearAnywhere": true
  78. },
  79. {
  80. "id": "coin_cash",
  81. "type": "cash",
  82. "trigger": "hold_and_win",
  83. "valueRangeMultiplier": [1, 100]
  84. },
  85. {
  86. "id": "collect",
  87. "type": "collect",
  88. "collects": "coin_cash"
  89. }
  90. ]
  91. },
  92. "paytable": {
  93. "currency": "credits",
  94. "lineBetMultiplierPayouts": {
  95. "low": { "3": 0.2, "4": 0.6, "5": 1.2 },
  96. "high": { "3": 0.5, "4": 1.5, "5": 4 },
  97. "premium_symbol": { "3": 1, "4": 4, "5": 12 },
  98. "top_symbol": { "3": 2, "4": 10, "5": 50 }
  99. },
  100. "scatterPays": { "3": 2, "4": 10, "5": 50 }
  101. },
  102. "features": {
  103. "wilds": {
  104. "enabled": true,
  105. "variant": "expanding",
  106. "expandsOnReels": [2, 3, 4],
  107. "stickyDuringFreeSpins": false,
  108. "multiplierRange": [1, 1]
  109. },
  110. "scatterFreeSpins": {
  111. "enabled": true,
  112. "triggerCount": 3,
  113. "spinAwards": { "3": 8, "4": 12, "5": 20 },
  114. "retrigger": true,
  115. "freeSpinModifiers": ["more_wilds", "win_multiplier"]
  116. },
  117. "cascades": {
  118. "enabled": true,
  119. "removeWinningSymbols": true,
  120. "dropDirection": "down",
  121. "baseMultiplierStart": 1,
  122. "baseMultiplierStep": 1,
  123. "freeSpinMultiplierStep": 2,
  124. "maxCascadeCount": 8
  125. },
  126. "holdAndWin": {
  127. "enabled": false,
  128. "triggerCashSymbolCount": 6,
  129. "initialRespins": 3,
  130. "resetRespinsOnNewCashSymbol": true,
  131. "lockCashSymbols": true,
  132. "jackpots": [
  133. { "id": "mini", "valueMultiplier": 20 },
  134. { "id": "minor", "valueMultiplier": 50 },
  135. { "id": "major", "valueMultiplier": 200 },
  136. { "id": "grand", "valueMultiplier": 1000 }
  137. ]
  138. },
  139. "pickBonus": {
  140. "enabled": false,
  141. "triggerSymbol": "bonus",
  142. "pickCount": 3,
  143. "rewardPool": ["credits", "multiplier", "free_spins"]
  144. }
  145. },
  146. "playerControls": {
  147. "spin": true,
  148. "turbo": true,
  149. "autoSpin": true,
  150. "betLevels": [1, 2, 5, 10, 20, 50, 100],
  151. "defaultBet": 10,
  152. "showPaytable": true,
  153. "showRules": true
  154. },
  155. "feedback": {
  156. "overallFeel": "elastic, bright, satisfying, not too noisy",
  157. "intensity": {
  158. "tap": "micro",
  159. "smallWin": "normal_win",
  160. "bigWin": "big_win",
  161. "bonus": "bonus"
  162. },
  163. "events": [
  164. {
  165. "id": "tap_spin",
  166. "trigger": "player_taps_spin_button",
  167. "uiAnimation": ["spin_btn_press"],
  168. "vfx": [],
  169. "durationMs": 180
  170. },
  171. {
  172. "id": "small_win",
  173. "trigger": "payout_greater_than_bet",
  174. "characterAnimation": "win",
  175. "uiAnimation": ["scale_bounce", "number_roll"],
  176. "vfx": ["win_burst"],
  177. "durationMs": 900
  178. },
  179. {
  180. "id": "big_win",
  181. "trigger": "payout_at_least_10x_bet",
  182. "characterAnimation": "win",
  183. "uiAnimation": ["reward_popup_in", "number_roll", "win_icon_pulse"],
  184. "vfx": ["coin_rain", "bigwin_glow", "confetti_pop"],
  185. "durationMs": 2400,
  186. "blocksInput": true
  187. },
  188. {
  189. "id": "free_spins_intro",
  190. "trigger": "scatter_free_spins_triggered",
  191. "uiAnimation": ["elastic_in", "pulse"],
  192. "vfx": ["confetti_pop", "bigwin_glow"],
  193. "durationMs": 1800,
  194. "blocksInput": true
  195. }
  196. ]
  197. },
  198. "assetGeneration": {
  199. "characterCount": 10,
  200. "uiArt": ["bg_main", "logo", "reel_frame", "btn_spin", "btn_round", "hud_pill", "win_popup", "free_spin_badge"],
  201. "vfx": ["coin_rain", "win_burst", "bigwin_glow", "confetti_pop"],
  202. "uiTweenPresets": ["scale_bounce", "elastic_in", "fade_slide_in", "number_roll", "pulse"],
  203. "manifestOutput": "animation_manifest.json"
  204. }
  205. }