ಅತ್ಯುತ್ತಮ ರೋಗಲೈಕ್ (roguelike) ಆಟಗಳು ನಿಮ್ಮನ್ನು ಕೇವಲ ಕೊಲ್ಲುವುದಿಲ್ಲ. ಅವು ನಿಮ್ಮನ್ನು ಸಾಯಲು ಬಯಸುವಂತೆ ಮಾಡುತ್ತವೆ.
ಇದು ವಿಚಿತ್ರವಾಗಿ ಕೇಳಿಸಬಹುದು, ಆದರೆ ಮಧ್ಯರಾತ್ರಿಯಲ್ಲಿ ಒಂದು ರನ್ (run) ಸೋತು, 12:03 ಕ್ಕೆ ಮತ್ತೊಂದನ್ನು ಪ್ರಾರಂಭಿಸಿದವರಿಗೆ ಈ ಭಾವನೆ ತಿಳಿದಿದೆ. ಸಾವು ನೋವು ನೀಡುತ್ತದೆ. ನಿಮ್ಮ ಆರೋಗ್ಯವು ಶೂನ್ಯಕ್ಕೆ ತಲುಪುತ್ತದೆ. ಪರದೆ ವಿಫಲತೆಯಿಂದ ತುಂಬಿಹೋಗುತ್ತದೆ. ಆದರೂ ನಿಮ್ಮ ಬೆರಳು ಈಗಾಗಲೇ ಪ್ಲೇ (play) ಬಟನ್ ಮೇಲೆ ಇರುತ್ತದೆ. ಕಳೆದ ಇಪ್ಪತ್ತು ನಿಮಿಷಗಳದ್ದು ಯಾವುದೋ ಒಂದು ವಿಷಯವು ಎಷ್ಟು ಮುಖ್ಯವಾಗಿರುತ್ತದೆಯೆಂದರೆ, ಆಟವು ಎಲ್ಲಿ ಕೊನೆಗೊಂಡಿದೆಯೋ ಅಲ್ಲಿಯೇ ನೀವು ಅದನ್ನು ಬಿಟ್ಟು ಹೋಗಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.
ಇದು "ಇನ್ನೊಂದು ರನ್" (one more run) ಲೂಪ್, ಮತ್ತು ಇದು ಆಕಸ್ಮಿಕವಲ್ಲ. ಇದನ್ನು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ. ನೀವು ರೋಗಲೈಕ್ ಅಥವಾ ಪರ್ಮಡೆತ್ (permadeath) ಇರುವ ಯಾವುದೇ ಆಟವನ್ನು ನಿರ್ಮಿಸುತ್ತಿದ್ದರೆ, ನಿಮ್ಮ ಸಂಪೂರ್ಣ ಕೆಲಸವು ಎರಡು ವಿರುದ್ಧ ಬಲಗಳನ್ನು ಸಮತೋಲನಗೊಳಿಸುವುದಾಗಿದೆ. ಆಟಗಾರನು ಒತ್ತಡವನ್ನು ಅನುಭವಿಸಲು ಸಾಕಷ್ಟು ಸೋಲಬೇಕು. ಹಾಗೆಯೇ ಭರವಸೆಯನ್ನು ಉಳಿಸಿಕೊಳ್ಳಲು ಸಾಕಷ್ಟು ಗೆಲುವು ಬೇಕು.
ವಿಫಲತೆಯ ಮೌಲ್ಯ
ನನ್ನ ಇತ್ತೀಚಿನ ಪ್ರಾಜೆಕ್ಟ್, Neon Survivor ನಲ್ಲಿ, ನಾನು ಅಂತಹದ್ದೇ ಒಂದು ಒತ್ತಡವನ್ನು ಬಯಸಿದ್ದೆ. ಆಟಗಾರನು ಸತ್ತಾಗ, ರನ್ ಸಮಯದಲ್ಲಿ ಸಂಗ್ರಹಿಸಿದ ಎಲ್ಲವೂ ಕಣ್ಮರೆಯಾಗುತ್ತದೆ, ಕೇವಲ ಒಂದು ವಸ್ತುವನ್ನು ಹೊರತುಪಡಿಸಿ: ಅದು ಚಿನ್ನ (gold). ಆ ಚಿನ್ನವು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಬ್ಯಾಂಕ್ ಆಗುತ್ತದೆ. ಮೆನುವಿಗೆ ಹಿಂತಿರುಗಿದಾಗ, ಅವರು ಅದನ್ನು ಶಾಶ್ವತ ಅಪ್ಗ್ರೇಡ್ಗಳಿಗಾಗಿ (permanent upgrades) ಬಳಸುತ್ತಾರೆ. ನಂತರ ಅವರು ಮೊದಲಿನಿಗಿಂತ ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಬಲಶಾಲಿಯಾಗಿ ಮತ್ತೆ ಆಟಕ್ಕೆ ಇಳಿಯುತ್ತಾರೆ.
ಈ ಸರಳ ಲೂಪ್ ಇಡೀ ಆಟವನ್ನು ಮುನ್ನಡೆಸುತ್ತದೆ. ಇದು ಇಲ್ಲದಿದ್ದರೆ, ಸಾವು ಎನ್ನುವುದು ಒಂದು ಪೂರ್ಣವಿರಾಮದಂತಾಗುತ್ತದೆ. ಆಟಗಾರನು ಹಿಂದಿನ ರನ್ನಿಂದ ಏನೂ ಸಿಗದ ಕಾರಣ ಆಟವನ್ನು ಬಿಟ್ಟು ಹೋಗುತ್ತಾನೆ. ಇದು ಇದ್ದರೆ, ಸಾವು ಎನ್ನುವುದು ಒಂದು ಅಲ್ಪವಿರಾಮದಂತಾಗುತ್ತದೆ. ಆ ರನ್ ಒಂದು ಸಂಪನ್ಮೂಲ ಸಂಗ್ರಹಣೆಯ ಪ್ರಯಾಣವಾಗಿ ಬದಲಾಗುತ್ತದೆ. ಸೋಲು ನೋವು ನೀಡುತ್ತದೆ, ಆದರೆ ಅದು ನಾಳೆಯ ಆಟಕ್ಕಾಗಿ ಬೇಕಾದ ಸಿದ್ಧತೆಯನ್ನು ಮಾಡಿಕೊಡುತ್ತದೆ.
ಇದರ ತಂತ್ರ ಸರಳವಾಗಿದೆ. ನೀವು ಎಲ್ಲವನ್ನೂ ಕಳೆದುಕೊಂಡಾಗಲೂ ಯಾವುದಾದರೂ ಒಂದು ವಸ್ತುವನ್ನು ಉಳಿಸಿಕೊಳ್ಳಬೇಕು. ನೀವು ಉಳಿಸಿಕೊಳ್ಳುವ ವಸ್ತುವು ಸವಾಲನ್ನು ನಾಶಮಾಡದೆ ಮುಖ್ಯವಾಗುವಂತೆ ನೋಡಿಕೊಳ್ಳುವುದು ಕಷ್ಟದ ಕೆಲಸ. ಅಪ್ಗ್ರೇಡ್ಗಳು ತುಂಬಾ ದುರ್ಬಲವಾಗಿದ್ದರೆ, ಆಟಗಾರನು ಅದರ ಬಗ್ಗೆ ಕಾಳಜಿ ವಹಿಸುವುದನ್ನು ನಿಲ್ಲಿಸುತ್ತಾನೆ. ಅವು ತುಂಬಾ ಬಲವಾಗಿದ್ದರೆ, ಆಟವು ತಾನಾಗಿಯೇ ಆಡಲ್ಪಡುತ್ತದೆ. ಎರಡೂ ಸಂದರ್ಭಗಳಲ್ಲಿ ಲೂಪ್ ಕುಸಿಯುತ್ತದೆ.
ಎರಡು ಗಡಿಯಾರಗಳು, ಶೂನ್ಯ ಗೊಂದಲ
ಇದನ್ನು ಸರಿಯಾಗಿ ನಿರ್ಮಿಸಲು, ನಾನು ಎರಡು ಪ್ರತ್ಯೇಕ ಕಾಲಮಿತಿಗಳನ್ನು (timelines) ನಿರ್ವಹಿಸಬೇಕಾಯಿತು.
The Run Clock ಪ್ರತಿ ಬಾರಿ ನೀವು ಪ್ಲೇ ಮಾಡಿದಾಗಲೂ ಮರುಹೊಂದಿಕೊಳ್ಳುತ್ತದೆ (resets). ಇದು ಆರೋಗ್ಯ, ಪ್ರಸ್ತುತ ಸ್ಕೋರ್, ಎನಿಮಿ ವೇವ್ ಕೌಂಟ್ ಮತ್ತು ಆ ಸೆಷನ್ನಲ್ಲಿ ಪಡೆದ ತಾತ್ಕಾಲಿಕ ಪವರ್-ಅಪ್ಗಳನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡುತ್ತದೆ. ಪಾತ್ರವು ಸತ್ತಾಗ, ಈ ಗಡಿಯಾರವು ಶೂನ್ಯಕ್ಕೆ ಮರಳುತ್ತದೆ.
The Meta Clock ಎಂದಿಗೂ ಮರುಹೊಂದಿಕೊಳ್ಳುವುದಿಲ್ಲ. ಇದು ಪ್ರತಿಯೊಂದು ಪ್ರಯತ್ನದಲ್ಲಿ ಗಳಿಸಿದ ಒಟ್ಟು ಚಿನ್ನ, ತಲುಪಿದ ಅತ್ಯುನ್ನತ ವೇವ್ ಮತ್ತು ಖರೀದಿಸಿದ ಪ್ರತಿಯೊಂದು ಶಾಶ್ವತ ಅಪ್ಗ್ರೇಡ್ಗಳನ್ನು ಇರಿಸಿಕೊಳ್ಳುತ್ತದೆ. ಬ್ರೌಸರ್ ಎಷ್ಟು ಬಾರಿ ರಿಫ್ರೆಶ್ ಆಗಲಿ ಈ ಗಡಿಯಾರವು ಚಲಿಸುತ್ತಲೇ ಇರುತ್ತದೆ.
ಇವೆರಡನ್ನು ಒಟ್ಟಿಗೆ ಬೆರೆಸಿದರೆ, ಪತ್ತೆಹಚ್ಚಲು ಕಷ್ಟವಾದ ಮತ್ತು ಸರಿಪಡಿಸಲು ನೋವಿನ ತರಹದ ಬಗ್ಗಳು (bugs) ಉಂಟಾಗುತ್ತವೆ. ಕ್ಲೀನಪ್ ಫಂಕ್ಷನ್ ತಪ್ಪಾದ ಡೇಟಾ ಸ್ಟೋರ್ ಅನ್ನು ಸ್ಪರ್ಶಿಸಿದ ಕಾರಣ, ರೂಟೀನ್ ಸೀನ್ ರಿಸೆಟ್ ಮಾಡುವಾಗ ಅಕಸ್ಮಿಕವಾಗಿ ಆಟಗಾರನ ಪ್ರಗತಿಯನ್ನು ಅಳಿಸಿಹಾಕುವ ಸಂದರ್ಭಗಳನ್ನು ನಾನು ನೋಡಿದ್ದೇನೆ. ಆಗ Meta Clock ಡೇಟಾ ಮಾಯವಾಗುತ್ತದೆ. ಆಟಗಾರನು ಶೂನ್ಯ ಚಿನ್ನ ಮತ್ತು ಶೂನ್ಯ ಅಪ್ಗ್ರೇಡ್ಗಳೊಂದಿಗೆ ಹಿಂತಿರುಗುತ್ತಾನೆ. ಆ ಕ್ಷಣದಲ್ಲಿ, ನಿಮ್ಮ ಮತ್ತು ಆಟಗಾರನ ನಡುವಿನ ಸಂಬಂಧವು ಮುರಿದುಬೀಳುತ್ತದೆ. ಅವರು ಹೊಸ ರನ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತಿಲ್ಲ; ಬದಲಾಗಿ ಅವರು ನಿಮ್ಮ ಮೇಲೆ ಹೊಸ ಕೋಪವನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತಿದ್ದಾರೆ.
ಗಡಿಯಾರಗಳನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿಡುವುದು ಕೇವಲ ಒಂದು ಶೈಲಿಯ ಆಯ್ಕೆಯಲ್ಲ. ಇದು ಬದುಕುಳಿಯುವ ತಂತ್ರ (survival strategy).
Phaser v4 ಈ ವಿಭಜನೆಯನ್ನು ಹೇಗೆ ನಿರ್ವಹಿಸುತ್ತದೆ
ನಾನು Neon Survivor ಅನ್ನು Phaser v4 ನಲ್ಲಿ ನಿರ್ಮಿಸಿದ್ದೇನೆ, ಇದು ಈ ಸಮಸ್ಯೆಗೆ ಎರಡು ನಿರ್ದಿಷ್ಟ ಪರಿಕರಗಳನ್ನು ನೀಡುತ್ತದೆ.
Registry ಪ್ರಸ್ತುತ ಸೆಷನ್ಗಾಗಿ ಮೆಮೊರಿಯಲ್ಲಿ ಲೈವ್ ಡೇಟಾವನ್ನು ಇರಿಸುತ್ತದೆ. ಇದು ವೇಗವಾಗಿದೆ. ಇದು ಸರಳವಾಗಿದೆ. ಆಟಗಾರನು ಪುಟವನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡಿದ ತಕ್ಷಣ ಇದು ಮಾಯವಾಗುತ್ತದೆ.
LocalStorage ಡೇಟಾವನ್ನು ಬ್ರೌಸರ್ನಲ್ಲೇ ಉಳಿಸುತ್ತದೆ. ಇದು ಟ್ಯಾಬ್ಗಳ ಮುಚ್ಚುವಿಕೆ, ಬ್ರೌಸರ್ ಮರುಪ್ರಾರಂಭ ಮತ್ತು ವಿದ್ಯುತ್ ವ್ಯತ್ಯಯಗಳ ನಂತರವೂ ಉಳಿಯುತ್ತದೆ. ಇದು ಸ್ವಲ್ಪ ನಿಧಾನ ಮತ್ತು ಕಡಿಮೆ ವಿಶ್ವಾಸಾರ್ಹವಾಗಿದೆ. ಸ್ಟೋರೇಜ್ ಕೋಟಾಗಳು ತುಂಬಿದಾಗ ಬ್ರೌಸರ್ಗಳು ಇದನ್ನು ತಡೆಯಬಹುದು ಅಥವಾ ಅಳಿಸಿಹಾಕಬಹುದು.
ನನ್ನ ವಿನ್ಯಾಸದ ಆಯ್ಕೆಯು ಕಟ್ಟುನಿಟ್ಟಾಗಿತ್ತು. ಗೇಮ್ಪ್ಲೇ ಸಮಯದಲ್ಲಿ Registry ಒಂದೇ ಸತ್ಯದ ಮೂಲ (source of truth). ಆಟವು ಅದರಿಂದ ಓದುತ್ತದೆ, ಅದಕ್ಕೆ ಬರೆಯುತ್ತದೆ ಮತ್ತು ಸಂಪೂರ್ಣವಾಗಿ ಅದನ್ನು ನಂಬುತ್ತದೆ. LocalStorage ಸಹ-ಲೇಖಕನಂತೆ (co-author) ಕಾರ್ಯನಿರ್ವಹಿಸುವುದಿಲ್ಲ. ಅದು ಕೇವಲ ಒಂದು ಕನ್ನಡಿಯಂತೆ (mirror) ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.
ಇದರ ಪ್ರಕ್ರಿಯೆ ಹೀಗಿದೆ: ಆಟವು ಅಪ್ಗ್ರೇಡ್ ಖರೀದಿಯನ್ನು Registry ಗೆ ಬರೆಯುತ್ತದೆ. ಒಂದು ಸಿಂಗಲ್ ಮ್ಯಾನೇಜರ್ ಕ್ಲಾಸ್ (manager class) Registry ಅನ್ನು ಗಮನಿಸುತ್ತದೆ. ಸೂಕ್ತವಾದಾಗ, ಆ ಮ್ಯಾನೇಜರ್ Registry ಡೇಟಾವನ್ನು LocalStorage ಗೆ ಪ್ರತಿಫಲಿಸುತ್ತದೆ (mirrors). ಬ್ರೌಸರ್ ಬರವಣಿಗೆಯನ್ನು ತಡೆದರೂ, ಆಟವು ಕುಂಠಿತವಾಗುವುದಿಲ್ಲ. ಸ್ಟೋರೇಜ್ ವಿಫಲವಾದರೂ, ಪ್ರಸ್ತುತ ಸೆಷನ್ ಸರಿಯಾಗಿ ನಡೆಯುತ್ತದೆ. ಆಟಗಾರನು ಅಚ್ಚುಕಟ್ಟಾಗಿ ಅದೇ ಸೆಕೆಂಡ್ನಲ್ಲಿ ಟ್ಯಾಬ್ ಅನ್ನು ಮುಚ್ಚಿದರೆ ಮಾತ್ರ ಪ್ರಗತಿಯನ್ನು ಕಳೆದುಕೊಳ್ಳಬಹುದು, ಆದರೆ ಸೆಷನ್ ಎಂದಿಗೂ ಕ್ರ್ಯಾಶ್ ಆಗುವುದಿಲ್ಲ.
ಈ ಮಾದರಿಯು ಒಂದು ಸೂಕ್ಷ್ಮ ವಿಪತ್ತನ್ನು ತಡೆಯುತ್ತದೆ. ಪ್ರತಿಯೊಂದು ಸಿಸ್ಟಮ್ ಕೂಡ ನೇರವಾಗಿ LocalStorage ಗೆ ಬರೆಯಲು ನೀವು ಬಿಟ್ಟರೆ, ನೀವು ಒಂದು ದುರ್ಬಲ API ಮೇಲೆ ಅವಲಂಬಿತರಾಗುತ್ತೀರಿ. ಪ್ರೈವೆಸಿ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಹೆಚ್ಚಾಗಿ ಇರಿಸಿರುವ ಅಥವಾ ಕಡಿಮೆ ಸ್ಟೋರೇಜ್ ಇರುವ ಆಟಗಾರನಿಗೆ, ಹಿನ್ನೆಲೆಯಲ್ಲಿನ ಯಾವುದೋ ಫಂಕ್ಷನ್ ಸ್ಟ್ಯಾಟ್ಸ್ಗಳನ್ನು ಉಳಿಸಲು ಪ್ರಯತ್ನಿಸಿದಾಗ ಯುದ್ಧದ ಸಮಯದಲ್ಲಿ ಆಟವು ನಿಧಾನವಾಗಬಹುದು ಅಥವಾ ಫ್ರೀಜ್ ಆಗಬಹುದು. Registry ಅನ್ನು ಏಕೈಕ ಸತ್ಯದ ಮೂಲವನ್ನಾಗಿ ಮಾಡುವುದರಿಂದ, ನೀವು ಆಕ್ಷನ್ ಅನ್ನು ವೇಗವಾಗಿ ಮತ್ತು ಅಪಾಯವನ್ನು ನಿಯಂತ್ರಣದಲ್ಲಿಡಬಹುದು.
Let the Code Breathe
ಸಿಸ್ಟಮ್ಗಳನ್ನು ಬೇರ್ಪಡಿಸಲು (decouple) ನಾನು ಇವೆಂಟ್ಗಳನ್ನು (events) ಬಳಸಿದೆ. ಒಂದು ರನ್ ಕೊನೆಗೊಂಡಾಗ, GameScene ತನ್ನದೇ ಆದ ಅಂತ್ಯಕ್ರಿಯೆಯನ್ನು ನಿರ್ವಹಿಸುವುದಿಲ್ಲ. ಅದು ಸೇವ್ ಫಂಕ್ಷನ್ ಅನ್ನು ಕರೆಯುವುದಿಲ್ಲ. ಅದು ಸ್ಟೋರೇಜ್ ಯುಟಿಲಿಟಿಯನ್ನು ಇಂಪೋರ್ಟ್ ಮಾಡುವುದಿಲ್ಲ. ಅದು ಕೇವಲ ಸಂಬಂಧಿತ ಡೇಟಾದೊಂದಿಗೆ "run-ended" ಎಂಬ ಇವೆಂಟ್ ಅನ್ನು ಹೊರಸೂಸುತ್ತದೆ (emits).
ಒಂದು ಪ್ರತ್ಯೇಕ ಲಿಸನರ್ (listener) ಲೆಕ್ಕಪತ್ರ ನಿರ್ವಹಣೆಯನ್ನು ಮಾಡುತ್ತದೆ. ಇದು ಇವೆಂಟ್ ಅನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ, Meta Clock ಅನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಹೊಸ ಮೊತ್ತವನ್ನು LocalStorage ಗೆ ಪ್ರತಿಬಿಂಬಿಸಲು ಮ್ಯಾನೇಜರ್ಗೆ ತಿಳಿಸುತ್ತದೆ.
ಈ ಪ್ರತ್ಯೇಕತೆಯು ತಕ್ಷಣವೇ ಪ್ರಯೋಜನ ನೀಡುತ್ತದೆ. ನಾನು ಸೇವ್ ಸಿಸ್ಟಮ್ ಅನ್ನು ಮುಟ್ಟದೆಯೇ ಇಡೀ GameScene ಅನ್ನು ಮರುಬರೆಯಬಹುದು, ಪ್ಲೇಯರ್ ಕ್ಯಾರೆಕ್ಟರ್ ಅನ್ನು ಬದಲಾಯಿಸಬಹುದು, ಕ್ಯಾಮೆರಾ ಆಂಗಲ್ ಅನ್ನು ಬದಲಾಯಿಸಬಹುದು ಅಥವಾ ಸರ್ವೈವಲ್ನಿಂದ ಬುಲೆಟ್ ಹೆಲ್ (bullet hell) ಜಾನರ್ಗೆ ಬದಲಾಯಿಸಬಹುದು. ಈ ಸಿಸ್ಟಮ್ಗಳು ಸ್ವತಂತ್ರವಾಗಿವೆ. ಅವು ನೇರ ಫಂಕ್ಷನ್ ಕಾಲ್ಗಳ ಮೂಲಕವಲ್ಲದೆ, ಇವೆಂಟ್ಗಳ ಮೂಲಕ ಸಂವಹನ ನಡೆಸುತ್ತವೆ. ಇದರರ್ಥ ಕಡಿಮೆ ಮರ್ಜ್ ಕಾನ್flicts (merge conflicts), ಕಡಿಮೆ ಬಗ್ಗಳು ಮತ್ತು ಆರು ತಿಂಗಳ ನಂತರ ಸ್ಪಾಗೆಟ್ಟಿ (spaghetti) ಆಗದ ಕೋಡ್ಬೇಸ್.
ಆಟವನ್ನೇ ಬದಲಿಸುವ ಅಪ್ಗ್ರೇಡ್ಗಳು
ತಾಂತ್ರಿಕ ಬೆನ್ನೆಲುಬು ಇದ್ದರೂ, ಪ್ರತಿಫಲಗಳು ಕೇವಲ ಒಂದು ಸ್ಪ್ರೆಡ್ಶೀಟ್ನಂತೆ ಅನಿಸಿದರೆ ಅದು ವ್ಯರ್ಥ. ಅಪ್ಗ್ರೇಡ್ಗಳನ್ನು ಆಡುವುದು ನಿಜವಾಗಿಯೂ ಹೇಗಿರುತ್ತದೆ ಎಂಬುದರ ಮೇಲೆ ನಾನು ಸಾಕಷ್ಟು ಸಮಯ ವ್ಯಯಿಸಿದ್ದೇನೆ.
ಕೆಲವು ಅಪ್ಗ್ರೇಡ್ಗಳು ಸುರಕ್ಷಿತವಾಗಿರುತ್ತವೆ. ಹೆಚ್ಚುವರಿ ಚಲನ ವೇಗ, ಬೋನಸ್ ಹೆಲ್ತ್, ವೇಗವಾದ ರೀಲೋಡ್ ಇತ್ಯಾದಿ. ಇವು ಪ್ಲೇಯರ್ಗೆ ತಪ್ಪುಗಳನ್ನು ಸರಿಪಡಿಸಿಕೊಳ್ಳಲು ಹೆಚ್ಚಿನ ಅವಕಾಶ ನೀಡುತ್ತವೆ. ಇವು ಆರಾಮದಾಯಕವಾಗಿರುತ್ತವೆ. ಇವು ಆಟದ ನಿಯಮಗಳನ್ನು ಬದಲಾಯಿಸದೆ ಆಟದ ಕಠಿಣತೆಯನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತವೆ.
ಇತರ ಅಪ್ಗ್ರೇಡ್ಗಳು ನಿಯಮಗಳನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಮರುಬರೆಯುತ್ತವೆ. Neon Survivor ನಲ್ಲಿ, ನಾನು "Piercing Rounds" ಅನ್ನು ಸೇರಿಸಿದೆ. ಈ ಅಪ್ಗ್ರೇಡ್ಗಿಂತ ಮೊದಲು, ಒಂದು ಬುಲೆಟ್ ತಗುಲಿದ ಮೊದಲ ಶತ್ರುವಿನ ಬಳಿಯೇ ನಿಲ್ಲುತ್ತಿತ್ತು. ಅಪ್ಗ್ರೇಡ್ ನಂತರ, ಅದು ಶತ್ರುಗಳ ಮೂಲಕ xuyên ಹಾದುಹೋಗುತ್ತದೆ, ಒಂದೇ ಶೂಟ್ನಲ್ಲಿ ಇಡೀ ಸಾಲುಗಳನ್ನು ನಾಶಪಡಿಸುವ ಸಾಮರ್ಥ್ಯ ಹೊಂದಿರುತ್ತದೆ.
ಈ ವ್ಯತ್ಯಾಸವು ಗಮನಾರ್ಹವಾಗಿದೆ. ವೇಗ ಮತ್ತು ಆರೋಗ್ಯವು ನಿಮ್ಮನ್ನು ಹೆಚ್ಚು ಕಾಲ ಬದುಕುವಂತೆ ಮಾಡಬಹುದು, ಆದರೆ Piercing Rounds ನೀವು ನಿಮ್ಮನ್ನು ಹೇಗೆ ನಿಲ್ಲಿಸಬೇಕು ಎಂಬುದನ್ನು ಬದಲಾಯಿಸುತ್ತದೆ. ನೀವು ಶತ್ರುಗಳನ್ನು ಸಾಲಾಗಿ ನಿಲ್ಲಿಸಲು ಪ್ರಾರಂಭಿಸುತ್ತೀರಿ. ನೀವು ಅಂಚಿನಲ್ಲಿ ಸುತ್ತಾಡುವುದನ್ನು ನಿಲ್ಲಿಸಿ, ಮಧ್ಯಭಾಗದಿಂದ xuyên ಹಾದುಹೋಗಲು ಪ್ರಾರಂಭಿಸುತ್ತೀರಿ. ಆಟದ ನಿರ್ಧಾರ ತೆಗೆದುಕೊಳ್ಳುವ ವ್ಯಾಪ್ತಿಯು ವಿಸ್ತರಿಸುತ್ತದೆ.
ಉತ್ತಮ ಪ್ರಗತಿಯು ಕೇವಲ ಅಂಕಿಅಂಶಗಳನ್ನು ಹೆಚ್ಚಿಸಬಾರದು, ಬದಲಾಗಿ ಪ್ಲೇಯರ್ನ ನಿರ್ಧಾರಗಳನ್ನು ಬದಲಿಸಬೇಕು. ಪ್ರತಿಯೊಂದು ಅಪ್ಗ್ರೇಡ್ ಕೇವಲ ಶೇಕಡಾವಾರು ಏರಿಕೆಯಾಗಿದ್ದರೆ, ಪ್ಲೇಯರ್ ವಿವರಣೆಗಳನ್ನು ಓದುವುದನ್ನು ನಿಲ್ಲಿಸುತ್ತಾನೆ. ಅವರು ಕ್ಲಿಕ್ ಮಾಡುತ್ತಾರೆ, ಅಪ್ಗ್ರೇಡ್ ಮಾಡುತ್ತಾರೆ ಮತ್ತು ಮರೆತುಬಿಡುತ್ತಾರೆ. ಒಂದು ಅಪ್ಗ್ರೇಡ್ ಅವರ ತಂತ್ರವನ್ನು ಮರುಪರಿಶೀಲಿಸುವಂತೆ ಮಾಡಿದರೆ, ಅವರು ಅದನ್ನು ನೆನಪಿಟ್ಟುಕೊಳ್ಳುತ್ತಾರೆ. ಅವರು ಅದರ ಬಗ್ಗೆ ಮಾತನಾಡುತ್ತಾರೆ. ಆಟವನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಬದಲಿಸಬಲ್ಲ ಇನ್ನಾವುದೇ ಅಂಶಗಳಿವೆಯೇ ಎಂದು ನೋಡಲು ಅವರು ಮತ್ತೆ ಬರುತ್ತಾರೆ.
ನಿಜವಾದ ಪ್ರತಿಫಲ
"one more run" ಲೂಪ್ ಎಂಬುದು ಕೇವಲ ಒಂದು ಸಿಸ್ಟಮ್ ಅಲ್ಲ. ಇದು ಕ್ಲೀನ್ ಆರ್ಕಿಟೆಕ್ಚರ್ ಮತ್ತು ಅರ್ಥಪೂರ್ಣ ಪ್ರತಿಫಲಗಳ ಮೇಲೆ ನಿರ್ಮಿತವಾದ ನಷ್ಟ ಮತ್ತು ಲಾಭದ ನಡುವಿನ ಸಂಬಂಧವಾಗಿದೆ.
ಎರಡು ಪ್ರತ್ಯೇಕ ಕಾಲಮಿತಿಗಳನ್ನು (timelines) ನಿರ್ಮಿಸಿ ಮತ್ತು Meta Clock ಅನ್ನು ನಿಮ್ಮ ಪ್ಲೇಯರ್ಗಳ ನಂಬಿಕೆಯಂತೆ ರಕ್ಷಿಸಿ, ಏಕೆಂದರೆ ಅದು ಅವರ ನಂಬಿಕೆಯನ್ನು ಹೊಂದಿದೆ. ಲೈವ್ ಡೇಟಾವನ್ನು ವೇಗವಾಗಿ ಮತ್ತು ಪರ್ಸಿಸ್ಟೆಂಟ್ ಡೇಟಾವನ್ನು ಸುರಕ್ಷಿತವಾಗಿಡಲು ನಿಮ್ಮ ಎಂಜಿನ್ನ ಪರಿಕರಗಳನ್ನು ಬಳಸಿ. ನಿಮ್ಮ ಸೀನ್ಗಳನ್ನು ಸ್ಟೋರೇಜ್ನಿಂದ ಪ್ರತ್ಯೇಕಿಸಿ (decouple), ಇದರಿಂದ ನೀವು ಭಯವಿಲ್ಲದೆ ಇಟರೇಟ್ ಮಾಡಬಹುದು. ಮತ್ತು ನೀವು ಅಪ್ಗ್ರೇಡ್ಗಳನ್ನು ವಿನ್ಯಾಸಗೊಳಿಸಿದಾಗ, ಅವು ಪ್ಲೇಯರ್ಗೆ ಹೆಚ್ಚಿನ ಸಮಯವನ್ನು ನೀಡುತ್ತವೆಯೇ ಅಥವಾ ಹೆಚ್ಚು ಆಸಕ್ತಿಕರವಾದ ಆಯ್ಕೆಗಳನ್ನು ನೀಡುತ್ತವೆಯೇ ಎಂದು ಕೇಳಿಕೊಳ್ಳಿ.
ಇದನ್ನು ಸರಿಯಾಗಿ ಮಾಡಿದರೆ, ನಿಮ್ಮ ಪ್ಲೇಯರ್ಗಳು ಕೇವಲ ಸಾವನ್ನು ಸಹಿಸಿಕೊಳ್ಳುವುದಿಲ್ಲ. ಅವರು ಅದರ ಮೇಲೆ ಅವಲಂಬಿತರಾಗುತ್ತಾರೆ. ಪ್ರತಿ run ಕೂಡ ಮುಂದಿನದಕ್ಕಾಗಿ ಒಂದು ಮುಂಗಡ ಪಾವತಿಯಾಗುತ್ತದೆ. ಆಟವು ಕೇವಲ ಮರುಪ್ರಾರಂಭಗಳ ಸರಣಿಯಾಗದೆ, ಒಂದು ಏಕೈಕ, ನಿರಂತರ ಏರಿಕೆಯಾಗುತ್ತದೆ.
