Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
> **"मोक्ष प्राप्ति का एकमात्र मार्ग — त्याग।"**
> *The only path to liberation — is let it go.*

An HTML5 browser game rooted in **Sanatan Shastra** and **Karmic Philosophy**.
An HTML5 browser game rooted in **Sanatan shaashtra** and **Karmic Philosophy**.
Control your chariot through the cosmic field, master your senses, burn your karma, and attain **Moksha**.

🎮 **[Play on itch.io](https://weirdcodes.itch.io/moksha)**  | 
Expand Down Expand Up @@ -51,11 +51,11 @@ The game is built on **Katha Upanishad's chariot metaphor** (Nachiketopakhyana):
| Naam Samarpana | `W`, `↑` | RB (5) | Only in final phase (samaya < 100) |
| Pralaya (Sacrifice) | `Q` | LB (4) | Voluntary chariot dissolution |
| Pure Rebirth | `R` | LT (6) | Zero karma → new life |
| Shastra (Knowledge) | `ESC` | BACK (8) | Open wisdom scroll |
| shaashtra (Knowledge) | `ESC` | BACK (8) | Open wisdom scroll |
| Pause | `F` | START (9) | Stillness |
| Shankha (Conch) | `Y` | Y (0) | Dispel chakravaata (यंत्र-मार्ग, when Naam unavailable) |
| Jyoti (Lamp) | `B` | B (1) | Restore vision in bad-karma darkness |
| Shastra Scroll | `↑` / `↓` (hold) | DPAD U/D | Navigate wisdom text |
| shaashtra Scroll | `↑` / `↓` (hold) | DPAD U/D | Navigate wisdom text |

---

Expand All @@ -69,7 +69,7 @@ The game is built on **Katha Upanishad's chariot metaphor** (Nachiketopakhyana):
- 🏆 **Three End States** — Moksha (liberation), Pralaya (dissolution), Punarjanma (rebirth)
- 🎮 **Full Gamepad Support** — Xbox/generic controller with deadzone handling
- ⚡ **60fps Performance** — Pool-based architecture (no GC pressure), sprite caching, emoji sprite cache, gradient buckets
- 📜 **In-Game Shastra** — Full philosophical treatise accessible via ESC
- 📜 **In-Game shaashtra** — Full philosophical treatise accessible via ESC
- 🔔 **Canvas Alert Queue** — Contextual slide-in alert cards (top-right), category-colored, auto-dismiss; de-duplicated (no per-second flood)
- ⚖️ **Prarabdha Bhog System** — Endure past karma over time; unit-break explosion; MAX 15 cap; samaya penalty ×1.15
- 🧘 **Chetanaa Immunity** — चेतना-जागृति grants karma immunity (गीता 4.37 — ज्ञानाग्निः सर्वकर्माणि भस्मसात्)
Expand Down Expand Up @@ -155,7 +155,7 @@ MOKSHA/
├── audio.js — AudioManager: 28-mp3 preload, ambient layers, duck system
├── engine.js — KarmaEngine: slim orchestrator, core loop, pools, state transitions
├── i18n.js — भाषा-प्रबंधक: 134 keys (hi/en), persistence, late-binding resolveAlert
├── shastra.js — शास्त्र-ग्रंथ: 3 pages, संरचित blocks, श्लोक-कोश (भाषा-निरपेक्ष)
├── shaashtra.js — शास्त्र-ग्रंथ: 3 pages, संरचित blocks, श्लोक-कोश (भाषा-निरपेक्ष)
├── karma.js — KarmaMixin: Vedic logic, maya spawn, kripa, keyboard actions
├── physics.js — PhysicsMixin: glow-rings, particles, floating text, pool helpers
├── state.js — StateMixin: HUD updates, alert queue, triggerAlert, animations
Expand Down Expand Up @@ -376,7 +376,7 @@ getEmojiSprite(emoji, fontSize) // orbit/innerOrbit emoji cache (नई)
| ज्योति | B | B (1) | पाप-अंधकार में दृष्टि |
| शास्त्र-नेविगेशन | ↑↓ (held) | DPAD U/D (12/13) | scroll; DPAD = PageUp/Down |

> ⚠️ `handleShastraGamepadNav()` अब `pollGamepadOnStartScreen()` से भी कॉल होता है।
> ⚠️ `handleshaashtraGamepadNav()` अब `pollGamepadOnStartScreen()` से भी कॉल होता है।

---

Expand Down Expand Up @@ -404,7 +404,7 @@ RUNNING_HORSES_DUCK_REDUCTION = 0.15
### 4.3 गेटिंग
```js
// AudioManager internal — game state getter से poll
isGameStarted && !gameOver && !won && !isPaused && !isShastraVisible
isGameStarted && !gameOver && !won && !isPaused && !isshaashtraVisible
// setTargetAtTime() से smooth fade — कोई click/pop नहीं
```

Expand All @@ -429,7 +429,7 @@ Deferred load (6): bgMusic, chetanaJaagrita, pralaya, jaagritaSwaansa,
### 4.6 AudioManager dependency injection (main.js में)
```js
Audio.setGameStateGetter(() => ({ isGameStarted, gameOver, won,
isPaused, isShastraVisible, chetanaaJaagrita }));
isPaused, isshaashtraVisible, chetanaaJaagrita }));
Audio.setVibrateCallback(vibrateGamepad);
Audio.setReadinessGetters({ getFontsReady: () => isFontsReady,
getScaleGameDone: () => isScaleGameDone });
Expand Down Expand Up @@ -562,7 +562,7 @@ AM.updateAmbientVolumes();
| ~220 | `setCallbacks()`, `setUI()` |
| ~240 | `init()` — pool + stars initialization |
| ~280 | `update(dt, keys, frameNow)` — मुख्य game logic tick |
| ~730 | `toggleShastra()` |
| ~730 | `toggleshaashtra()` |
| ~760 | `showEndScreen(reason)` |
| ~830 | `reset()` — punahaPrarambha |
| ~930 | `getState()` — renderer snapshot |
Expand Down Expand Up @@ -647,7 +647,7 @@ AM.updateAmbientVolumes();
| ~44 | UI DOM references |
| ~100 | Event listeners (keyboard, gamepad, buttons, wheel) |
| ~200 | Gamepad module (pollGamepad, vibrateGamepad) |
| ~300 | `toggleShastra()`, `updateShastraPage()` |
| ~300 | `toggleshaashtra()`, `updateshaashtraPage()` |
| ~360 | `draw()` — engine state + Renderer calls |
| ~430 | `gameLoop()` — RAF loop |
| ~470 | `scaleGame()`, `debounce()` |
Expand Down
193 changes: 0 additions & 193 deletions scripts/scripts_replace-nonenglish.js

This file was deleted.

6 changes: 3 additions & 3 deletions src/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ const touch = new TouchControls(keys);
let isFontsReady = false;
let isScaleGameDone = false;

// ====================== SHASTRA STATE ======================
// ====================== SHAASHTRA STATE ======================
let currentShaashtraPage = 1;
// 🛠️ key-repeat बिना continuous scroll (dpad-stick जैसी consistency)
let shaashtraKeyState = { up: false, down: false };
Expand Down Expand Up @@ -229,7 +229,7 @@ function pollGamepad() {
handleDiscreteButton(gp, GAMEPAD_BUTTON.BACK, 'Escape'); // शास्त्र
}

// ====================== SHASTRA UI ======================
// ====================== SHAASHTRA UI ======================

function updateShaashtraPage() {
const lang = getLang();
Expand Down Expand Up @@ -281,7 +281,7 @@ function toggleShaashtra() {
}
}

// ====================== CONTINUOUS SHASTRA SCROLL ======================
// ====================== CONTINUOUS SHAASHTRA SCROLL ======================
// ArrowUp/Down को OS key-repeat पर निर्भर न रखकर — held-flag से smooth scroll
let _shaashtraScrollRafId = null;
function continuousShaashtraScrollLoop() {
Expand Down
12 changes: 6 additions & 6 deletions src/shaashtra.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,15 @@
*
* ── शास्त्रीय नियम ──────────────────────────────────────────
* type:'shloka' के blocks दोनों भाषाओं में समान रहते हैं।
* इसलिए वे SHASTRA_SHLOKAS में एक ही बार लिखे जाते हैं और
* इसलिए वे SHAASHTRA_SHLOKAS में एक ही बार लिखे जाते हैं और
* दोनों भाषाओं से id द्वारा referenced होते हैं — duplication
* नहीं, इसलिए एक जगह सुधारने पर दोनों भाषाओं में सुधरता है।
* ============================================================
*/

// ── श्लोक-कोश — भाषा-निरपेक्ष (नियम E-1) ─────────────────────
// अर्थ भाषा के अनुसार बदलता है; मूल पाठ कभी नहीं।
export const SHASTRA_SHLOKAS = {
export const SHAASHTRA_SHLOKAS = {
gita437: {
text: 'ज्ञानाग्निः सर्वकर्माणि भस्मसात् कुरुते',
credit: { hi: 'गीता ४.३७', en: 'Bhagavad Gita 4.37' },
Expand Down Expand Up @@ -196,7 +196,7 @@ const PAGE_3 = {
// ── सम्पूर्ण ग्रंथ ───────────────────────────────────────────
// ⚠️ PAGE_2, PAGE_3 अगले पैच में जुड़ेंगे।
// ⚠️ PAGE_3 अगले पैच में जुड़ेगा।
export const SHASTRA_PAGES = [PAGE_1, PAGE_2, PAGE_3];
export const SHAASHTRA_PAGES = [PAGE_1, PAGE_2, PAGE_3];

/**
* escapeHtml — पाठ को सुरक्षित बनाएँ।
Expand All @@ -217,8 +217,8 @@ function escapeHtml(s) {
* @returns {string} — HTML string
*/
export function renderShaashtraPage(pageIndex, lang) {
const page = SHASTRA_PAGES[pageIndex]?.[lang]
?? SHASTRA_PAGES[pageIndex]?.hi; // fallback
const page = SHAASHTRA_PAGES[pageIndex]?.[lang]
?? SHAASHTRA_PAGES[pageIndex]?.hi; // fallback
if (!page) return '';

let html = `<h3>${escapeHtml(page.title)}</h3>`;
Expand All @@ -243,7 +243,7 @@ export function renderShaashtraPage(pageIndex, lang) {

case 'shloka': {
// ⚠️ मूल देवनागरी दोनों भाषाओं में समान (नियम E-1)
const sh = SHASTRA_SHLOKAS[b.id];
const sh = SHAASHTRA_SHLOKAS[b.id];
if (!sh) break;
html += `<p style="text-align:center;margin:14px 0;">`
+ `<em style="color:#ffecb4;">`
Expand Down
2 changes: 1 addition & 1 deletion style.css
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ button.hud-icon-btn:hover {
filter: drop-shadow(0 0 8px rgba(255, 120, 30, 0.6));
}

/* ====================== SHASTRA OVERLAY ====================== */
/* ====================== SHAASHTRA OVERLAY ====================== */
#shaashtra-overlay {
position: absolute;
top: 0;
Expand Down
Loading