From 9e36bd7e682fb10bfc0581cd36aef6df2a598ef1 Mon Sep 17 00:00:00 2001
From: "luyen.vo"
Date: Wed, 23 Apr 2025 16:20:38 +0700
Subject: [PATCH] add set up main game
---
...om-engine.md => 03-setup-custom-engine.md} | 4 +-
...1-add-game-config.md => 01-game-config.md} | 12 ++--
docs/02-setup-main-game/02-preview-scene.md | 4 +-
docs/02-setup-main-game/03-preload-scene.md | 8 +--
docs/02-setup-main-game/04-loading-scene.md | 55 ++++++++++++++++
docs/02-setup-main-game/05-main-scene.md | 26 ++++++++
.../MecuryGamedevSlottyCoreGuideline.html | 1 -
.../images/custom-scale.png | Bin 27250 -> 0 bytes
.../images/image1.png | Bin 17784 -> 0 bytes
.../images/image10.png | Bin 7193 -> 0 bytes
.../images/image11.png | Bin 20274 -> 0 bytes
.../images/image12.png | Bin 8720 -> 0 bytes
.../images/image13.png | Bin 65005 -> 0 bytes
.../images/image14.png | Bin 71018 -> 0 bytes
.../images/image15.png | Bin 15379 -> 0 bytes
.../images/image16.png | Bin 11298 -> 0 bytes
.../images/image17.png | Bin 84983 -> 0 bytes
.../images/image18.png | Bin 12230 -> 0 bytes
.../images/image19.png | Bin 17961 -> 0 bytes
.../images/image2.png | Bin 17584 -> 0 bytes
.../images/image20.png | Bin 15231 -> 0 bytes
.../images/image21.png | Bin 28681 -> 0 bytes
.../images/image22.png | Bin 522250 -> 0 bytes
.../images/image23.png | Bin 15071 -> 0 bytes
.../images/image24.png | Bin 70683 -> 0 bytes
.../images/image25.png | Bin 60748 -> 0 bytes
.../images/image26.png | Bin 115528 -> 0 bytes
.../images/image27.png | Bin 138784 -> 0 bytes
.../images/image28.png | Bin 134141 -> 0 bytes
.../images/image29.png | Bin 59469 -> 0 bytes
.../images/image3.png | Bin 28416 -> 0 bytes
.../images/image30.png | Bin 11580 -> 0 bytes
.../images/image31.png | Bin 72951 -> 0 bytes
.../images/image32.png | Bin 76225 -> 0 bytes
.../images/image33.png | Bin 20330 -> 0 bytes
.../images/image34.png | Bin 41551 -> 0 bytes
.../images/image35.png | Bin 27173 -> 0 bytes
.../images/image36.png | Bin 92326 -> 0 bytes
.../images/image37.png | Bin 11148 -> 0 bytes
.../images/image38.png | Bin 12651 -> 0 bytes
.../images/image39.png | Bin 167800 -> 0 bytes
.../images/image4.png | Bin 16284 -> 0 bytes
.../images/image40.png | Bin 54067 -> 0 bytes
.../images/image41.png | Bin 33091 -> 0 bytes
.../images/image42.png | Bin 55967 -> 0 bytes
.../images/image43.png | Bin 17149 -> 0 bytes
.../images/image44.png | Bin 48766 -> 0 bytes
.../images/image45.png | Bin 17865 -> 0 bytes
.../images/image46.png | Bin 131831 -> 0 bytes
.../images/image47.png | Bin 43147 -> 0 bytes
.../images/image48.png | Bin 24277 -> 0 bytes
.../images/image49.png | Bin 54614 -> 0 bytes
.../images/image5.png | Bin 96479 -> 0 bytes
.../images/image50.png | Bin 12404 -> 0 bytes
.../images/image51.png | Bin 174147 -> 0 bytes
.../images/image52.png | Bin 376504 -> 0 bytes
.../images/image53.png | Bin 53994 -> 0 bytes
.../images/image54.png | Bin 3329 -> 0 bytes
.../images/image55.png | Bin 80822 -> 0 bytes
.../images/image56.png | Bin 22323 -> 0 bytes
.../images/image57.png | Bin 42036 -> 0 bytes
.../images/image58.png | Bin 68355 -> 0 bytes
.../images/image59.png | Bin 34154 -> 0 bytes
.../images/image6.png | Bin 9402 -> 0 bytes
.../images/image60.png | Bin 41888 -> 0 bytes
.../images/image61.png | Bin 25828 -> 0 bytes
.../images/image62.png | Bin 117027 -> 0 bytes
.../images/image63.png | Bin 85323 -> 0 bytes
.../images/image64.png | Bin 22511 -> 0 bytes
.../images/image65.png | Bin 27102 -> 0 bytes
.../images/image66.png | Bin 2929 -> 0 bytes
.../images/image67.png | Bin 71974 -> 0 bytes
.../images/image68.png | Bin 23602 -> 0 bytes
.../images/image69.png | Bin 64259 -> 0 bytes
.../images/image7.png | Bin 63954 -> 0 bytes
.../images/image70.png | Bin 49875 -> 0 bytes
.../images/image72.png | Bin 57613 -> 0 bytes
.../images/image73.png | Bin 56800 -> 0 bytes
.../images/image74.png | Bin 71960 -> 0 bytes
.../images/image76.png | Bin 14835 -> 0 bytes
.../images/image77.png | Bin 20251 -> 0 bytes
.../images/image78.png | Bin 17325 -> 0 bytes
.../images/image79.png | Bin 30217 -> 0 bytes
.../images/image8.png | Bin 44585 -> 0 bytes
.../images/image80.png | Bin 138781 -> 0 bytes
.../images/image81.png | Bin 13201 -> 0 bytes
.../images/image82.png | Bin 66934 -> 0 bytes
.../images/image9.png | Bin 31565 -> 0 bytes
.../images/template-scenes.png | Bin 63874 -> 0 bytes
.../02-setup-main-game/img/editor-package.png | Bin 0 -> 51535 bytes
.../img/hyper-loading-lucky-rooster.png | Bin 0 -> 180793 bytes
docs/02-setup-main-game/img/hyper-loading.png | Bin 0 -> 10306 bytes
.../img/loading-button-setup.png | Bin 0 -> 119146 bytes
.../img/loading-full-assets-scene.png | Bin 0 -> 254615 bytes
.../img/loading-node-tree.png | Bin 0 -> 14867 bytes
.../img/loading-raw-scene.png | Bin 0 -> 23874 bytes
.../img/loading-roma-legacy.png | Bin 0 -> 347457 bytes
.../img/main-scene-wireframe.png | Bin 0 -> 42912 bytes
.../img/new-hyper-loading-gates-of-wealth.png | Bin 0 -> 184417 bytes
.../img/new-hyper-loading.png | Bin 0 -> 10545 bytes
docs/02-setup-main-game/img/run-test.png | Bin 0 -> 111719 bytes
docs/02-setup-main-game/img/win-pattern.png | Bin 831695 -> 494632 bytes
docs/faqs/01-engine.md | 5 ++
docs/game-asset-structure/_category_.json | 17 +++++
.../default-assets-structure.md | 1 +
docusaurus.config.ts | 61 +-----------------
106 files changed, 121 insertions(+), 73 deletions(-)
rename docs/01-setup-the-project/{03-set-custom-engine.md => 03-setup-custom-engine.md} (87%)
rename docs/02-setup-main-game/{01-add-game-config.md => 01-game-config.md} (95%)
create mode 100644 docs/02-setup-main-game/04-loading-scene.md
create mode 100644 docs/02-setup-main-game/05-main-scene.md
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/MecuryGamedevSlottyCoreGuideline.html
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/custom-scale.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image1.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image10.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image11.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image12.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image13.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image14.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image15.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image16.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image17.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image18.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image19.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image2.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image20.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image21.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image22.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image23.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image24.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image25.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image26.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image27.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image28.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image29.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image3.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image30.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image31.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image32.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image33.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image34.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image35.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image36.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image37.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image38.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image39.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image4.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image40.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image41.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image42.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image43.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image44.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image45.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image46.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image47.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image48.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image49.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image5.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image50.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image51.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image52.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image53.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image54.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image55.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image56.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image57.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image58.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image59.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image6.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image60.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image61.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image62.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image63.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image64.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image65.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image66.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image67.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image68.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image69.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image7.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image70.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image72.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image73.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image74.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image76.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image77.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image78.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image79.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image8.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image80.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image81.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image82.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image9.png
delete mode 100644 docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/template-scenes.png
create mode 100644 docs/02-setup-main-game/img/editor-package.png
create mode 100644 docs/02-setup-main-game/img/hyper-loading-lucky-rooster.png
create mode 100644 docs/02-setup-main-game/img/hyper-loading.png
create mode 100644 docs/02-setup-main-game/img/loading-button-setup.png
create mode 100644 docs/02-setup-main-game/img/loading-full-assets-scene.png
create mode 100644 docs/02-setup-main-game/img/loading-node-tree.png
create mode 100644 docs/02-setup-main-game/img/loading-raw-scene.png
create mode 100644 docs/02-setup-main-game/img/loading-roma-legacy.png
create mode 100644 docs/02-setup-main-game/img/main-scene-wireframe.png
create mode 100644 docs/02-setup-main-game/img/new-hyper-loading-gates-of-wealth.png
create mode 100644 docs/02-setup-main-game/img/new-hyper-loading.png
create mode 100644 docs/02-setup-main-game/img/run-test.png
create mode 100644 docs/faqs/01-engine.md
create mode 100644 docs/game-asset-structure/_category_.json
create mode 100644 docs/game-asset-structure/default-assets-structure.md
diff --git a/docs/01-setup-the-project/03-set-custom-engine.md b/docs/01-setup-the-project/03-setup-custom-engine.md
similarity index 87%
rename from docs/01-setup-the-project/03-set-custom-engine.md
rename to docs/01-setup-the-project/03-setup-custom-engine.md
index ba53f3b..2c7ad3f 100644
--- a/docs/01-setup-the-project/03-set-custom-engine.md
+++ b/docs/01-setup-the-project/03-setup-custom-engine.md
@@ -2,9 +2,9 @@
sidebar_position: 3
---
-# Set Custom Cocos Engine
+# Setup Custom Cocos Engine
-Link project to a custom Cocos Engine.
+Set **Javascript Engine Path** to a **custom Cocos Engine**.
Thank to the open source nature of Cocos Creator, we are able to customize some of the function in the source code to meet the requirement for Hyper Slot Game.
diff --git a/docs/02-setup-main-game/01-add-game-config.md b/docs/02-setup-main-game/01-game-config.md
similarity index 95%
rename from docs/02-setup-main-game/01-add-game-config.md
rename to docs/02-setup-main-game/01-game-config.md
index 7524701..293f1f0 100644
--- a/docs/02-setup-main-game/01-add-game-config.md
+++ b/docs/02-setup-main-game/01-game-config.md
@@ -2,7 +2,7 @@
sidebar_position: 1
---
-# Adding Game Configuration
+# Game Configuration
While the core logic is responsible for calculations and maintaining the game state, it's the client's responsibility to define all game-specific information.
@@ -55,7 +55,7 @@ To establish this mapping, use the following configuration script:
```jsx title="assets/game-assets/scripts/configs/extend-hyper-gaming-config.js"
var HyperGamingConfig = require('hyper-gaming-config');
-var SlottyItem = require("slotty-item");
+var SlottyItem = require('slotty-item');
HyperGamingConfig.itemMapper['BONUS'] = SlottyItem.Bonus;
HyperGamingConfig.itemMapper['PIC1'] = SlottyItem.Pic1;
@@ -147,7 +147,9 @@ To connect and interact with the Hyper Gaming server, we need to register two ke
To register these, add the `_registerInjection` function in `extend-slotty-setting.js`:
```jsx title="assets/game-assets/scripts/slotty-settings/extend-slotty-setting.js"
-SlottySetting.prototype._registerInjection = function () {
+var DIContainer = p4fcore.require('di-container');
+
+BaseSlottySetting.prototype._registerInjection = function () {
DIContainer.Register('serverConfig', require('hyper-gaming-config'));
DIContainer.Register('serverHandler', p4fslot.require('hyper-gaming-server-handler'));
};
@@ -158,12 +160,12 @@ In addition to server modules, all Hyper Gaming projects should initialize the f
In the same `extend-slotty-setting.js`, add this function:
```jsx title="assets/game-assets/scripts/slotty-settings/extend-slotty-setting.js"
-var HyperSoundHandler = require('extend-sound-handler');
+var HyperSoundHandler = require('sound-handler');
var UISoundHandler = require('ui-sound-handler');
var HyperHotkeyHandler = require('hyper-hotkey-handler');
var HyperNotificationHandler = require('hyper-notification-handler');
-SlottySetting.prototype._initializeParameter = function () {
+BaseSlottySetting.prototype._initializeParameter = function () {
new UISoundHandler();
new HyperSoundHandler();
new HyperHotkeyHandler();
diff --git a/docs/02-setup-main-game/02-preview-scene.md b/docs/02-setup-main-game/02-preview-scene.md
index 4964218..236e7a3 100644
--- a/docs/02-setup-main-game/02-preview-scene.md
+++ b/docs/02-setup-main-game/02-preview-scene.md
@@ -12,8 +12,8 @@ This scene includes a `login-hyper-gaming` object used to establish a connection
Available environments:
-- **DEMO** : similar to [ https://gaming-world.joker88.club/]( https://gaming-world.joker88.club/). This environment uses a demo account, so no login is required. Some features are disabled, but the outcome feature is enabled, allowing you to select specific outcomes for testing purposes.
-- **SAT** : similar to [http://fns.joker88.club/] (http://fns.joker88.club/). This environment requires a valid account to log in. Except for the outcome feature, all other features are enabled, including replay and resume functionality.
+- **DEMO** : similar to [https://gaming-world.joker88.club]( https://gaming-world.joker88.club/). This environment uses a demo account, so no login is required. Some features are disabled, but the outcome feature is enabled, allowing you to select specific outcomes for testing purposes.
+- **SAT** : similar to [http://fns.joker88.club](http://fns.joker88.club/). This environment requires a valid account to log in. Except for the outcome feature, all other features are enabled, including replay and resume functionality.
- **LOCAL** : Use this only if other environments are unavailable. By manually setting up session data, you can run the game locally. Not recommended for regular use.
To use preview scene, simply choose an Enviroment and put in the Game ID, then save the scene.
diff --git a/docs/02-setup-main-game/03-preload-scene.md b/docs/02-setup-main-game/03-preload-scene.md
index bb203dd..e66aabe 100644
--- a/docs/02-setup-main-game/03-preload-scene.md
+++ b/docs/02-setup-main-game/03-preload-scene.md
@@ -8,7 +8,7 @@ The Preload Scene is where you define which assets will be downloaded **before**
Setting up the preload system involves several steps, depending on the types of assets and specific download requirements.
-Check out the [Game Assets Structure](./) for more detail.
+Check out the [Game Assets Structure](../category/game-asset-structure) for more detail.
## Preload vs Postload
@@ -45,9 +45,9 @@ Hyper Slot Game supports localization through both text and raw asset replacemen
Based on the selected language configuration, the game will download the corresponding localized assets instead of the default English versions.
-| Assets | EN | ZH | TH |
-|-----------------------|---------------|--------------|----|
-| Text Buy Bonus |  |  | |
+| Assets | EN | ZH | TH |
+|---------------|-----------------------------------------|---------------------------------------------|---------------------------------------------|
+|Text Buy Bonus||||
## Setting Up the Preload Scene
diff --git a/docs/02-setup-main-game/04-loading-scene.md b/docs/02-setup-main-game/04-loading-scene.md
new file mode 100644
index 0000000..73e243e
--- /dev/null
+++ b/docs/02-setup-main-game/04-loading-scene.md
@@ -0,0 +1,55 @@
+---
+sidebar_position: 4
+---
+
+# Loading Scene
+
+This is where the actual preload asset downloading begins, accompanied by a progress bar to indicate loading status.
+
+In addition to loading assets, Hyper Slot Game also uses this scene to showcase the game’s main features through in-game advertisements.
+
+
+
+## Loading Hyper vs New Loading Hyper
+
+In Hyper Slot games, there are 2 styles of loading scene:
+
+- **loading-hyper**: The default loading setup. Displays all advertising features on a single screen, with an option to automatically launch the game once all preload assets are downloaded.
+- **new-hyper-loading**: A newer loading style that presents advertising features in a paginated layout. This version does not include an option to start the game automatically.
+
+| loading-hyper | new-loading-hyper |
+|-------------------------------------------------------|-----------------------------------------------------------------|
+|||
+
+## Setup loading scene
+
+To set up the loading scene, use the appropriate command from the `P4F Editor` package: `loading-hyper` or `new-loading-hyper`, depending on your requirements.
+
+ 
+
+Running either command will generate a complete loading scene, including both landscape and portrait layouts.
+
+Once the scene is generated, you can customize it by positioning UI elements and assigning the appropriate assets.
+
+
+
+One of the best features of these commands is that they can also automatically load all required assets for the loading scene.
+
+If you run the command without setting up the assets, you’ll see an empty loading scene like this:
+
+
+
+However, with a proper asset setup, the loading scene will appear fully populated, like this:
+
+
+
+:::info
+For detailed guidelines on how to set up loading assets, refer to the [Game Asset Structure](../category/game-asset-structure) manual.
+:::
+
+:::tip
+For testing purposes, you don’t need a full asset setup. \
+Just set up the ***btn-start*** node in the Node Tree and you’re good to go.
+
+
+:::
\ No newline at end of file
diff --git a/docs/02-setup-main-game/05-main-scene.md b/docs/02-setup-main-game/05-main-scene.md
new file mode 100644
index 0000000..fd536d8
--- /dev/null
+++ b/docs/02-setup-main-game/05-main-scene.md
@@ -0,0 +1,26 @@
+---
+sidebar_position: 5
+---
+
+# Main Scene
+
+This is where all the magic happen.
+
+Main scene is the most complicated scene with hundreds of object, script and config.
+
+
+
+Yet it is suprisingly simple to use.
+
+By following step by step setup, you'll have a working main scene in no time.
+
+:::info
+In fact, if all of the other scenes are setup properly, you can even run test the game without any setup on main scene.
+
+Try to run the project, you'll the result as below. It doesn't look like much but it is actually a game running without visual assets.
+
+
+:::
+
+## Setup Reel Slot
+
diff --git a/docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/MecuryGamedevSlottyCoreGuideline.html b/docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/MecuryGamedevSlottyCoreGuideline.html
deleted file mode 100644
index a26a785..0000000
--- a/docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/MecuryGamedevSlottyCoreGuideline.html
+++ /dev/null
@@ -1 +0,0 @@
-

Game Developer
Slotty Core
Guideline



- Clone git repository and create new project
- CREATE NEW PROJECT GAME SLOTTY
Step 1: Clone repository at http://git.mecury.com.vn:7990/projects/COCCOR, using software SourceTree

- Then, the browser will direct to open SourceTrees software. Set name folder project follow name folder of repository Example: “coc-roma-legacy”

Step 2: Create an empty Cocos project. Set location to any path beside the one from repository (since Cocos doesn’t allow creating project on a non-empty folder)

- Then, move all files in that empty project to the repository folder, EXCEPT file .gitignore and folder packages

Step 3: Add core slotty and template game slotty
- To add submodules, open SourceTree Terminal and type these commands to add submodules.

Core game consists of many submodules:
- Use these following commands to clone main submodules :
- git submodule add -f ../../coccor/hyper-editor-package.git packages
- git submodule add -f ../../coccor/game-core-template.git assets/core-assets/game-core
- git submodule add -f ../../coccor/hyper-slot-template.git assets/core-assets/hyper-core
- git submodule add -f ../../coccor/base-slot-template.git assets/core-assets/slotty-core
- Hyper games have 2 styles: chinese theme and international theme.
These are commands for submodules of sound, dialog, coin shower for game chinese style:
- git submodule add -f ../../coccor/hyper-wintune-chinese.git assets/core-assets/hyper-wintune-chinese
- git submodule add -f ../../coccor/hyper-coin-shower-chinese.git assets/core-assets/hyper-coin-shower-chinese
- git submodule add -f ../../coccor/hyper-dialog-chinese.git assets/core-assets/hyper-dialog-chinese
These are commands for submodules of sound, dialog, coin shower for game international style:
- git submodule add -f ../../coccor/hyper-wintune-international.git assets/core-assets/hyper-wintune-international
- git submodule add -f ../../coccor/hyper-coin-shower-international.git assets/core-assets/hyper-coin-shower-international
- git submodule add -f ../../coccor/hyper-dialog-international.git assets/core-assets/hyper-dialog-international
- These are commands for submodules of landing sound, effect win border and border tension, hyper jackpot. Depends on game design, some modules are not needed:
- git submodule add -f ../../coccor/hyper-jackpot-package.git assets/core-assets/hyper-jackpot
- git submodule add -f ../../coccor/hyper-win-border-and-tension.git assets/core-assets/hyper-win-border-and-tension
- git submodule add -f ../../coccor/hyper-scatter-landing-sound.git assets/core-assets/hyper-scatter-landing-sound
- All submodules need to use master branch to be stable and safe for development. Use these git command to fetch all master branch for all submodules:
- git submodule foreach git checkout master
- git submodule foreach git pull
- After adding submodules, commit and push all submodules just cloned. SourceTree look like:1
Step 4: Set up custom Cocos engine for new project
- Clone custom engine repository from this link.
- Open the project. To configure custom engine for Cocos, select menu Project > Project Settings

- Choose Custom Engine and set path to the custom engine. Click Save and restart Cocos.

Step 5: Set up game-assets folder
- Create folder game-assets includes many folders: editor, fonts, messages, prefabs, scenes, scripts, sounds, textures

- Copy all scenes from assets/core-assets/hyper-core/scenes to assets/game-assets/scenes. And remove ‘template’ in name of all scenes

- Create script custom-scale-data.js in assets/game-assets/scripts/custom-scaler. The script save values scale of atlas, they are used to calculate original size after developer optimize asset by scaling down atlas.

- ASSETS
- File naming convention
- Sound sfx: sfx-[name]
- Song background: bgm-[name]
- All font bitmap and ttf: fnt-[name]
- Name of image put in the following form: abc-def-..... Can add more ‘-’ for clear meaning
- Name of animation put in the following form: anim-[name animation]_[xx]. [xx] is ordinal numbers
Some special case must follow
- Image for symbol: [name symbol] depends on server game
- sym-[name symbol] : file name for symbol

- sym-mini-[name symbol]: use to show win line on notification

- anim-sym-[name symbol]_xx: usually for naming animation symbol when show win line

- anim-landing-[name symbol]_xx: usually for naming animation symbol scatter, bonus appear when stop spin

- Folder structure of raw assets
- Create folder raw-assets at C:\Projects\coc-name-project.
- Folder raw-assets contains fonts, textures, tps folders.

- Folder fonts contain raw images to create fonts.
- Folder textures contain raw images to pack into atlases:
- Basic structure for normal game assets

- Folder tps contain file .tps of software Texture Packer. Tree folder can same as tree folder of texture
- Asset folder path
- Format: …\assets\game-assets\textures\[platform]\[type download]\[Scene name or feature group]
- Platform : mobile or desktop
- Type download:
preload: the necessary assets of that scene/feature, they need to be downloaded before we load scene/feature

postload: the other assets of that scene/feature, it will be downloaded after the scene/feature is loaded.

- Scene name or feature group: some basic name: loading, main-game, free-game, gamble, pickup, bonus
- Custom scale
- We need to take the game platform into consideration, which is desktop and mobile. We need to have separate scaling for each platform. Texture Packer Scaling Variants feature can help us setup asset scaling more easily.
- The scaling values are set as following:
Platform | Normal Scale | Optimized Scale |
Desktop | 1 | 0.75 |
Mobile | 0.7 | 0.58 |
- Normal Scale use for assets that need to be displayed as clearly as possible. For example: text image, static image of animation, symbols… NOTE: If atlas uses Normal Scale, asset folder path need to change: …\assets\game-assets\textures\[platform]\[type download]\ [Scene name or feature group]\custom-scale\<atlas-name>
- Optimized Scale use for big assets: background, reel frame, animation… Most of them don’t need to be displayed clearly to every tiny detail, thus are scaled down more to reduce game size
- Pack asset
- Software: Texture Packer 4.8.0
- There are several steps to pack assets into an atlas. Take this symbol asset as an example
- Step 1: Put raw assets into folder raw-assets/textures

- Step 2: Open Texture Packer, create file .tps to pack atlas in folder raw-assets/tps
Scaling variants: Assets of symbols need to be cleared, so we set the scaling variant to normal scale.
Data file: Specified in asset folder path. Variant name similar folder platform, so it can be replaced into {v} . Example: C:\ProjectCocos2022\coc-roma-legacy\ assets\game-assets\textures\desktop\preloads\main-game\custom-scale
Algorithm : MaxRects.
Max size : 2048.
Trim mode: Trim

Press button Publish sprite sheet to begin packing process. When it is done, the dialog should notify that the process is completed. There should be a plist and a png appear in the folder according to the Data file path described above

NOTE: After packing ALL assets into atlases, we open the project to config data for new assets to use in-game.

_ Custom scale data: Choose menu P4FEditor > asset-manager > Generate Custom Scale

_ Merge Json Files: Choose menu P4FEditor > asset-manager > Merge Json Files

_ Remove Packable Texture: Choose menu P4FEditor > asset-manager > Remove Packable Texture
_Compress Texture: Choose menu P4FEditor > asset-manager > Compress Texture Format

- SCENES:
- Preview scene
- This scene is only used during game development. It supports setting up connection to specified Environment: LOCAL, SAT, DEMO.

- LOCAL:
- DEMO: This is the environment similar to https://gaming-world.joker88.club/ . Game will run using a demo account. In this environment, game outcomes can be selected to force the game server to return certain results for testing purposes. Some features will not be available such as: history, jackpot, etc…
- SAT: This is the environment similar to http://fns.joker88.club/. Game will run using a specified account available on SAT. All server features are available with the exception of setting outcome.
- Preload scene
- This scene contains data to be used to load game assets. The loading assets process can be divided into 2 phases: preload and postload. Based on the selected platform (desktop or mobile) and locale settings, the game may load different assets.

- After packing a new atlas, we must update data for scene preload. Choose menu P4F Editor > preload-hyper > Load All Above

- Loading scene
- The scene is shown when the game starts and downloads assets of the main game.
- Here are the steps to create the loading scene:
- Step 1: Prepare raw assets. Copy raw assets to ...\raw-assets\textures\loading and divide into 4 folders: animation, loading-background, loading, loading-extra

- animation: contains all animations in the loading scene. File name of a frame is “image1_xx”. Example: image1_00.


- loading: includes assets for loading bar, button, check box

\
- loading-extra: includes asset logo, image static of description

- loading-background: includes image background for desktop and mobile

- Step 2: Set up file .tps and pack atlas
_ File image1.tps:
- Data file: …./assets/game-assets/textures/{v}/preloads/loading/image1_{n}.plist
- Scaling variants: Optimized Scale

_ File loading-background.tps: If all asset dont have transparent, we should pack atlas with type JPG, and quality = 100
- Data file: …./assets/game-assets/textures/{v}/preloads/loading/background.plist
- Texture format: JPG
- Scaling variants: Optimized Scale

_ File loading.tps: includes assets in folder loading and loading-extra
- Data file: …./assets/game-assets/textures/{v}/preloads/loading/loading.plist
- Scaling variants: Optimized Scale

- Step 3: Set up scene loading
After packing assets, we open scene loading. Choose menu P4F Editor > loading-hyper > Create Loading 2 / 3 Items For New Games
- Step4: Check scene loading and Save scene

- Normal spin on MAIN SCENE
- The scene has many game objects enough to implement a game slotty.
- Handle popup panel

- Step 1: Prepare raw assets of popup panel



- Step 2: Pack atlas of popup panel
_ File pop-up-panel.tps:
+Data file:
…./assets/game-assets/textures/{v}/preloads/main-game/custom-scale/pop-up-panel.plist
+Scaling variants: normal scale. Popup panel only displays on desktop, so we only pack for desktop:

_ Set up popup panel.

_And then deactivate node content in node popup-panel/hyper-confirm-dialog


- Step 1: Prepare raw assets background game. Background game have 2 images for landscape and portrait scene

- Step 2: Pack atlas background
_ File background.tps for desktop:
+Sprites: only image background use for desktop

+Data file:
…./assets/game-assets/textures/{v}/preloads/main-game/background-main-game.plist
+Scaling variants: optimized scale. Atlas only displays on desktop, so we only pack for desktop:


_ File background-mobile.tps for mobile:
+Sprites: include 2 images background use for landscape and portrait scene

+Data file:
…./assets/game-assets/textures/{v}/preloads/main-game/background-main-game.plist
+Scaling variants: optimized scale. Atlas only displays on mobile, so we only pack for mobile:


- Step 3: Drag sprite background to component sprite frame
_ Use sprite background of desktop for 2 node background-container/background and gamble-loader/background-container/gamble-background-landscape

_ Use sprite background-portrait of mobile for 2 node mobile-background-portrait/node/ background and gamble-loader/background-container/ gamble-background-portrait



- Set up background of spin panel: node reels-frame and spin-panel-frame
_ Prepare raw asset and pack atlas
+ Raw asset: Path ….\raw-assets\textures\main-game-ui\spin-panel

+ Pack atlas
Data file: …./assets/game-assets/textures/{v}/preloads/main-game/spin-panel.plist
Scaling variants: Optimized Scale

_ Drag sprite frame spin-panel-frame in atlas spin-panel.plist to node Canvas/main-view/game-view/spin-panel-frame/frame

_ Step 1: Add script config for spin-panel
+ Create script slotty-item.js in folder assets/game-assets/scripts/slotty-data. Add code to init enum items. NOTE: SlottyItem.Wild and SlottyItem.Scatter was registered in core, so we don’t register again.
var SlottyItem = p4fslot.require('slotty-item'); var Enum = p4fslot.require('extendable-enum');
Enum.InitEnum(SlottyItem, [ 'Pic1', 'Pic2', 'Pic3', 'Pic4', 'Pic5', 'Pic6', 'Pic7', 'Bonus' ]);
module.exports = SlottyItem; |
+Create script extend-slotty-setting.js in folder assets/game-assets/scripts/slotty-settings. Add code to config type pay line , and pattern not win
var DIContainer = p4fcore.require('di-container');
var BaseSlottySetting = p4fslot.require('slotty-setting');
var SlottyItem = require('slotty-item');
var SlottyParameter = p4fslot.require('slotty-parameter');
BaseSlottySetting.prototype._getDefaultTypePayline = function () {
return SlottyParameter.TypePayline.Line;
};
BaseSlottySetting.prototype._getPatternNotWin = function () {
return [
[SlottyItem.Pic5, SlottyItem.Pic3, SlottyItem.Pic5, SlottyItem.Pic1, SlottyItem.Pic5,
SlottyItem.Bonus, SlottyItem.Pic6, SlottyItem.Pic5, SlottyItem.Pic1, SlottyItem.Pic5,
SlottyItem.Pic2, SlottyItem.Pic6, SlottyItem.Pic2, SlottyItem.Pic1, SlottyItem.Pic2
],
[SlottyItem.Pic4, SlottyItem.Pic7, SlottyItem.Pic2, SlottyItem.Pic5, SlottyItem.Pic7,
SlottyItem.Pic4, SlottyItem.Pic7, SlottyItem.Pic6, SlottyItem.Pic5, SlottyItem.Pic7,
SlottyItem.Pic7, SlottyItem.Pic3, SlottyItem.Bonus, SlottyItem.Pic2, SlottyItem.Pic3
],
[SlottyItem.Pic1, SlottyItem.Pic2, SlottyItem.Pic3, SlottyItem.Pic7, SlottyItem.Pic3,
SlottyItem.Pic2, SlottyItem.Pic7, SlottyItem.Pic4, SlottyItem.Pic3, SlottyItem.Pic2,
SlottyItem.Pic1, SlottyItem.Pic7, SlottyItem.Pic4, SlottyItem.Pic3, SlottyItem.Bonus
]
];
};
_ Step 2: Set sprite of symbols in Canvas/system/sprite-frame-provider by drag sprite frame of all symbols to array Sprite Frames

_ Step 3: Config reel-scroller-helper:
+ At node Canvas/main-view/game-view/spin-panel, set value for component reel-scroller-helper

+Cell Item Script Name: script attach for node cell-item

+ Scroller Script Name: script attach for node reel-scroller

+ Reel count and Row count: amount reel and row of spin panel
+ Cell Size: size of cell item
+ Cell Dim Color: color of image symbol on lose cell when show win line
+ Top Count, Bot Count: amount cell on top and bottom to fake scoll
_Step 4: Click checkbox Generate Panel to generate spin panel


_Step 5: Then, we will generate all other panels of spin panels: landing-panel, present-win-cell-panel, present-win-border-panel, tension-panel

+ landing-panel

+ present-win-cell-panel

+ present-win-border-panel

+tension-panel
Frame: Sprite frame of animation tension.
Size: Often equal size of a reel. Canvas/main-view/game-view/spin-panel/content/ reel-scroller-0

- Set up bottom bar desktop
_ Prepare raw asset
+ Raw asset includes 2 parts: static image and text image. Path ….\raw-assets\textures\bottom-ui-desktop

_ Pack atlas
+ Data file: …./assets/game-assets/textures/{v}/preloads/main-game/spin-panel.plist
+ Scaling variants: Optimized Scale
- Scripting
- Config slotty setting, slotty item, server-handler
- Preview normal game
\ No newline at end of file
diff --git a/docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/custom-scale.png b/docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/custom-scale.png
deleted file mode 100644
index ef694c1f1593e3ecec6183dc6d655177e0647b66..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 27250
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
diff --git a/docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image1.png b/docs/02-setup-main-game/img/Mecury - Gamedev Slotty Core Guideline/images/image1.png
deleted file mode 100644
index 5abfdd1d9607ccfc4354ac93057e80d35e5ec257..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 17784
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