nova64 0.2.5 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/README.md +25 -8
  2. package/bin/nova64.js +165 -0
  3. package/dist/assets/console-CY_kygm3.js +14 -0
  4. package/dist/assets/console-CY_kygm3.js.map +1 -0
  5. package/dist/assets/main-l0sNRNKZ.js.map +1 -0
  6. package/dist/assets/sky/studio/nx.png +0 -0
  7. package/dist/assets/sky/studio/ny.png +0 -0
  8. package/dist/assets/sky/studio/nz.png +0 -0
  9. package/dist/assets/sky/studio/px.png +0 -0
  10. package/dist/assets/sky/studio/py.png +0 -0
  11. package/dist/assets/sky/studio/pz.png +0 -0
  12. package/dist/assets/vanilla-Dcuy32gi.js +2 -0
  13. package/dist/assets/vanilla-Dcuy32gi.js.map +1 -0
  14. package/dist/console.html +899 -0
  15. package/dist/docs/BENCHMARK.md +77 -0
  16. package/dist/docs/CHEATSHEET.md +255 -0
  17. package/dist/docs/EFFECTS_API_GUIDE.md +577 -0
  18. package/dist/docs/EFFECTS_QUICK_REFERENCE.md +331 -0
  19. package/dist/docs/FONT_CHARACTER_REFERENCE.md +219 -0
  20. package/dist/docs/FREE_GLB_ASSETS.md +330 -0
  21. package/dist/docs/FULLSCREEN_BUTTON_FEATURE.md +296 -0
  22. package/dist/docs/GAMEPAD_SUPPORT.md +348 -0
  23. package/dist/docs/GAME_IMPROVEMENTS.md +278 -0
  24. package/dist/docs/GAME_QUALITY_STATUS.md +300 -0
  25. package/dist/docs/MIGRATION_GUIDE.md +553 -0
  26. package/dist/docs/NOVA64_3D_API.md +356 -0
  27. package/dist/docs/NOVA64_API_REFERENCE.md +1406 -0
  28. package/dist/docs/NOVA64_UI_API.md +503 -0
  29. package/dist/docs/UI_SYSTEM_SUMMARY.md +445 -0
  30. package/dist/docs/VOXEL_ENGINE_GUIDE.md +662 -0
  31. package/dist/docs/VOXEL_QUICK_REFERENCE.md +386 -0
  32. package/dist/docs/api-3d.html +750 -0
  33. package/dist/docs/api-effects.html +385 -0
  34. package/dist/docs/api-improvements.md +121 -0
  35. package/dist/docs/api-skybox.html +407 -0
  36. package/dist/docs/api-sprites.html +321 -0
  37. package/dist/docs/api-voxel.html +337 -0
  38. package/dist/docs/api.html +543 -0
  39. package/dist/docs/assets.html +306 -0
  40. package/dist/docs/audio.html +340 -0
  41. package/dist/docs/blogs.html +286 -0
  42. package/dist/docs/collision.html +316 -0
  43. package/dist/docs/console.html +247 -0
  44. package/dist/docs/editor.html +297 -0
  45. package/dist/docs/font.html +247 -0
  46. package/dist/docs/framebuffer.html +247 -0
  47. package/dist/docs/fullscreen-button.html +297 -0
  48. package/dist/docs/gpu-systems.html +247 -0
  49. package/dist/docs/index.html +580 -0
  50. package/dist/docs/input.html +491 -0
  51. package/dist/docs/physics.html +311 -0
  52. package/dist/docs/screens.html +311 -0
  53. package/dist/docs/storage.html +311 -0
  54. package/dist/docs/textinput.html +332 -0
  55. package/dist/docs/ui.html +488 -0
  56. package/dist/examples/3d-advanced/code.js +695 -0
  57. package/dist/examples/adventure-comic-3d/code.js +342 -0
  58. package/dist/examples/audio-lab/code.js +150 -0
  59. package/dist/examples/boids-flocking/code.js +270 -0
  60. package/dist/examples/crystal-cathedral-3d/code.js +706 -0
  61. package/dist/examples/cyberpunk-city-3d/code.js +1383 -0
  62. package/dist/examples/demoscene/README.md +192 -0
  63. package/dist/examples/demoscene/code.js +1081 -0
  64. package/dist/examples/demoscene/meta.json +21 -0
  65. package/dist/examples/dungeon-crawler-3d/code.js +1117 -0
  66. package/dist/examples/f-zero-nova-3d/code.js +865 -0
  67. package/dist/examples/f-zero-nova-3d/code_old.js +1555 -0
  68. package/dist/examples/fps-demo-3d/code.js +744 -0
  69. package/dist/examples/game-of-life-3d/code.js +338 -0
  70. package/dist/examples/generative-art/code.js +632 -0
  71. package/dist/examples/hello-3d/code.js +325 -0
  72. package/dist/examples/hello-skybox/code.js +183 -0
  73. package/dist/examples/hello-world/code.js +19 -0
  74. package/dist/examples/input-showcase/code.js +109 -0
  75. package/dist/examples/instancing-demo/code.js +315 -0
  76. package/dist/examples/minecraft-demo/code.js +387 -0
  77. package/dist/examples/model-viewer-3d/code.js +114 -0
  78. package/dist/examples/mystical-realm-3d/code.js +1203 -0
  79. package/dist/examples/nature-explorer-3d/code.js +1318 -0
  80. package/dist/examples/particles-demo/code.js +522 -0
  81. package/dist/examples/pbr-showcase/code.js +140 -0
  82. package/dist/examples/physics-demo-3d/code.js +948 -0
  83. package/dist/examples/screen-demo/code.js +267 -0
  84. package/dist/examples/shooter-demo-3d/code.js +1286 -0
  85. package/dist/examples/space-combat-3d/IMPLEMENTATION_SUMMARY.md +109 -0
  86. package/dist/examples/space-combat-3d/README.md +135 -0
  87. package/dist/examples/space-combat-3d/code.js +1332 -0
  88. package/dist/examples/space-harrier-3d/code.js +923 -0
  89. package/dist/examples/star-fox-nova-3d/code.js +1116 -0
  90. package/dist/examples/star-fox-nova-3d/code_backup.js +410 -0
  91. package/dist/examples/star-fox-nova-3d/code_broken.js +1821 -0
  92. package/dist/examples/storage-quest/code.js +209 -0
  93. package/dist/examples/strider-demo-3d/IMPROVEMENT_OPTIONS.md +285 -0
  94. package/dist/examples/strider-demo-3d/cache-test.html +132 -0
  95. package/dist/examples/strider-demo-3d/code-fixed.js +582 -0
  96. package/dist/examples/strider-demo-3d/code-old.js +1537 -0
  97. package/dist/examples/strider-demo-3d/code.js +1462 -0
  98. package/dist/examples/strider-demo-3d/code.js.bak2 +1169 -0
  99. package/dist/examples/strider-demo-3d/fix-game.sh +53 -0
  100. package/dist/examples/super-plumber-64/README.md +128 -0
  101. package/dist/examples/super-plumber-64/code.js +1185 -0
  102. package/dist/examples/super-plumber-64/index.html +88 -0
  103. package/dist/examples/test-2d-overlay/code.js +32 -0
  104. package/dist/examples/test-font/code.js +51 -0
  105. package/dist/examples/test-minimal/code.js +21 -0
  106. package/dist/examples/ui-demo/code.js +306 -0
  107. package/dist/examples/wing-commander-space/README.md +180 -0
  108. package/dist/examples/wing-commander-space/code.js +1285 -0
  109. package/dist/examples/wizardry-3d/CHANGELOG.md +366 -0
  110. package/dist/examples/wizardry-3d/code.js +3928 -0
  111. package/dist/index.html +666 -0
  112. package/dist/os9-shell/assets/index-DIHfrTaW.css +1 -0
  113. package/dist/os9-shell/assets/index-KchE_ngx.js +483 -0
  114. package/dist/os9-shell/assets/index-KchE_ngx.js.map +1 -0
  115. package/dist/os9-shell/index.html +23 -0
  116. package/dist/os9-shell/nova-icon.svg +12 -0
  117. package/dist/runtime/api-2d.js +1158 -0
  118. package/dist/runtime/api-3d/camera.js +73 -0
  119. package/dist/runtime/api-3d/instancing.js +180 -0
  120. package/dist/runtime/api-3d/lights.js +51 -0
  121. package/dist/runtime/api-3d/materials.js +47 -0
  122. package/dist/runtime/api-3d/models.js +84 -0
  123. package/dist/runtime/api-3d/particles.js +296 -0
  124. package/dist/runtime/api-3d/pbr.js +113 -0
  125. package/dist/runtime/api-3d/primitives.js +304 -0
  126. package/dist/runtime/api-3d/scene.js +169 -0
  127. package/dist/runtime/api-3d/transforms.js +161 -0
  128. package/dist/runtime/api-3d.js +166 -0
  129. package/dist/runtime/api-effects.js +840 -0
  130. package/dist/runtime/api-gameutils.js +476 -0
  131. package/dist/runtime/api-generative.js +610 -0
  132. package/dist/runtime/api-presets.js +85 -0
  133. package/dist/runtime/api-skybox.js +232 -0
  134. package/dist/runtime/api-sprites.js +100 -0
  135. package/dist/runtime/api-voxel.js +712 -0
  136. package/dist/runtime/api.js +201 -0
  137. package/dist/runtime/assets.js +27 -0
  138. package/dist/runtime/audio.js +114 -0
  139. package/dist/runtime/collision.js +47 -0
  140. package/dist/runtime/console.js +101 -0
  141. package/dist/runtime/editor.js +233 -0
  142. package/dist/runtime/font.js +233 -0
  143. package/dist/runtime/framebuffer.js +28 -0
  144. package/dist/runtime/fullscreen-button.js +185 -0
  145. package/dist/runtime/gpu-canvas2d.js +47 -0
  146. package/dist/runtime/gpu-threejs.js +643 -0
  147. package/dist/runtime/gpu-webgl2.js +310 -0
  148. package/dist/runtime/index.d.ts +682 -0
  149. package/dist/runtime/index.js +22 -0
  150. package/dist/runtime/input.js +225 -0
  151. package/dist/runtime/logger.js +60 -0
  152. package/dist/runtime/physics.js +101 -0
  153. package/dist/runtime/screens.js +213 -0
  154. package/dist/runtime/storage.js +38 -0
  155. package/dist/runtime/store.js +151 -0
  156. package/dist/runtime/textinput.js +68 -0
  157. package/dist/runtime/ui/buttons.js +124 -0
  158. package/dist/runtime/ui/panels.js +105 -0
  159. package/dist/runtime/ui/text.js +86 -0
  160. package/dist/runtime/ui/widgets.js +141 -0
  161. package/dist/runtime/ui.js +111 -0
  162. package/index.html +6 -1
  163. package/package.json +9 -2
  164. package/public/assets/sky/studio/nx.png +0 -0
  165. package/public/assets/sky/studio/ny.png +0 -0
  166. package/public/assets/sky/studio/nz.png +0 -0
  167. package/public/assets/sky/studio/px.png +0 -0
  168. package/public/assets/sky/studio/py.png +0 -0
  169. package/public/assets/sky/studio/pz.png +0 -0
  170. package/public/os9-shell/assets/index-KchE_ngx.js +483 -0
  171. package/public/os9-shell/assets/index-KchE_ngx.js.map +1 -0
  172. package/public/os9-shell/index.html +10 -1
  173. package/runtime/api-2d.js +301 -21
  174. package/runtime/api-3d/pbr.js +45 -1
  175. package/runtime/api-3d.js +1 -0
  176. package/runtime/api-effects.js +90 -3
  177. package/runtime/api-gameutils.js +476 -0
  178. package/runtime/api-generative.js +610 -0
  179. package/runtime/api-skybox.js +54 -0
  180. package/runtime/api-voxel.js +139 -28
  181. package/runtime/gpu-threejs.js +13 -9
  182. package/runtime/ui.js +2 -2
  183. package/src/main.js +20 -0
  184. package/public/os9-shell/assets/index-B1Uvacma.js +0 -32825
  185. package/public/os9-shell/assets/index-B1Uvacma.js.map +0 -1
@@ -0,0 +1,491 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Input System - Nova64 Documentation</title>
7
+ <style>
8
+ :root {
9
+ --bg-primary: #0f1115;
10
+ --bg-secondary: #151822;
11
+ --bg-tertiary: #1a1d2e;
12
+ --text-primary: #dcdfe4;
13
+ --text-secondary: #99a1b3;
14
+ --accent-cyan: #00ffff;
15
+ --accent-magenta: #ff0080;
16
+ --accent-yellow: #ffff00;
17
+ --border: #2a324a;
18
+ --code-bg: #1a1d2e;
19
+ }
20
+
21
+ * {
22
+ margin: 0;
23
+ padding: 0;
24
+ box-sizing: border-box;
25
+ }
26
+
27
+ body {
28
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
29
+ background: linear-gradient(135deg, var(--bg-primary) 0%, #1a1625 50%, var(--bg-primary) 100%);
30
+ background-attachment: fixed;
31
+ color: var(--text-primary);
32
+ line-height: 1.6;
33
+ }
34
+
35
+ .container {
36
+ max-width: 1200px;
37
+ margin: 0 auto;
38
+ padding: 20px;
39
+ }
40
+
41
+ header {
42
+ background: var(--bg-secondary);
43
+ border: 2px solid var(--accent-cyan);
44
+ border-radius: 12px;
45
+ padding: 30px;
46
+ margin-bottom: 30px;
47
+ box-shadow: 0 0 30px rgba(0, 255, 255, 0.3);
48
+ }
49
+
50
+ h1 {
51
+ color: var(--accent-cyan);
52
+ font-size: 2.5em;
53
+ text-shadow: 0 0 20px rgba(0, 255, 255, 0.6);
54
+ margin-bottom: 10px;
55
+ }
56
+
57
+ .back-link {
58
+ display: inline-block;
59
+ color: var(--accent-cyan);
60
+ text-decoration: none;
61
+ margin-bottom: 15px;
62
+ transition: color 0.3s ease;
63
+ }
64
+
65
+ .back-link:hover {
66
+ color: #33ffff;
67
+ text-decoration: underline;
68
+ }
69
+
70
+ .subtitle {
71
+ color: var(--text-secondary);
72
+ font-size: 1.1em;
73
+ }
74
+
75
+ section {
76
+ background: var(--bg-secondary);
77
+ border-left: 4px solid var(--accent-cyan);
78
+ padding: 25px;
79
+ margin-bottom: 30px;
80
+ border-radius: 8px;
81
+ }
82
+
83
+ h2 {
84
+ color: var(--accent-magenta);
85
+ font-size: 2em;
86
+ margin-bottom: 15px;
87
+ text-shadow: 0 0 10px rgba(255, 0, 128, 0.5);
88
+ }
89
+
90
+ h3 {
91
+ color: var(--accent-cyan);
92
+ font-size: 1.4em;
93
+ margin: 25px 0 15px 0;
94
+ }
95
+
96
+ .function {
97
+ background: var(--bg-tertiary);
98
+ border: 1px solid var(--border);
99
+ border-radius: 8px;
100
+ padding: 20px;
101
+ margin-bottom: 25px;
102
+ }
103
+
104
+ .function-sig {
105
+ font-family: 'Courier New', Courier, monospace;
106
+ font-size: 1.2em;
107
+ color: var(--accent-yellow);
108
+ margin-bottom: 15px;
109
+ padding: 10px;
110
+ background: var(--code-bg);
111
+ border-radius: 4px;
112
+ border-left: 3px solid var(--accent-yellow);
113
+ }
114
+
115
+ .param-list, .return-info {
116
+ margin: 15px 0;
117
+ }
118
+
119
+ .param {
120
+ padding: 8px 0;
121
+ border-bottom: 1px solid var(--border);
122
+ }
123
+
124
+ .param:last-child {
125
+ border-bottom: none;
126
+ }
127
+
128
+ .param-name {
129
+ color: var(--accent-cyan);
130
+ font-weight: bold;
131
+ font-family: 'Courier New', Courier, monospace;
132
+ }
133
+
134
+ .param-type {
135
+ color: var(--accent-magenta);
136
+ font-style: italic;
137
+ font-size: 0.9em;
138
+ }
139
+
140
+ .example {
141
+ background: var(--code-bg);
142
+ border: 1px solid var(--border);
143
+ border-radius: 8px;
144
+ padding: 20px;
145
+ margin: 15px 0;
146
+ overflow-x: auto;
147
+ }
148
+
149
+ .example-title {
150
+ color: var(--accent-yellow);
151
+ font-weight: bold;
152
+ margin-bottom: 10px;
153
+ }
154
+
155
+ pre {
156
+ margin: 0;
157
+ font-family: 'Courier New', Courier, monospace;
158
+ line-height: 1.5;
159
+ }
160
+
161
+ code {
162
+ color: var(--text-primary);
163
+ }
164
+
165
+ .note {
166
+ background: var(--bg-tertiary);
167
+ border-left: 4px solid var(--accent-yellow);
168
+ padding: 15px;
169
+ margin: 15px 0;
170
+ border-radius: 4px;
171
+ }
172
+
173
+ .note-title {
174
+ color: var(--accent-yellow);
175
+ font-weight: bold;
176
+ margin-bottom: 10px;
177
+ }
178
+
179
+ table {
180
+ width: 100%;
181
+ border-collapse: collapse;
182
+ margin: 15px 0;
183
+ }
184
+
185
+ th, td {
186
+ padding: 12px;
187
+ text-align: left;
188
+ border: 1px solid var(--border);
189
+ }
190
+
191
+ th {
192
+ background: var(--bg-tertiary);
193
+ color: var(--accent-cyan);
194
+ font-weight: bold;
195
+ }
196
+
197
+ tr:nth-child(even) {
198
+ background: var(--bg-tertiary);
199
+ }
200
+
201
+ footer {
202
+ text-align: center;
203
+ padding: 30px 20px;
204
+ color: var(--text-secondary);
205
+ border-top: 1px solid var(--border);
206
+ margin-top: 40px;
207
+ }
208
+ </style>
209
+ </head>
210
+ <body>
211
+ <div class="container">
212
+ <a href="index.html" class="back-link">← Back to Documentation Index</a>
213
+
214
+ <header>
215
+ <h1>🕹️ Input System</h1>
216
+ <p class="subtitle">Keyboard, mouse, and gamepad input handling</p>
217
+ </header>
218
+
219
+
220
+ <section>
221
+ <h2>📋 Overview</h2>
222
+ <p>Unified input system supporting keyboard, mouse, and gamepad with button state tracking.</p>
223
+
224
+ </section>
225
+
226
+ <section>
227
+ <h2>⌨️ Keyboard Functions</h2>
228
+
229
+
230
+ <div class='function'>
231
+ <div class='function-sig'>btn(buttonIndex)</div>
232
+ <p>Checks if a button is currently held down.</p>
233
+ <div class='param-list'>
234
+ <div class='param'>
235
+ <span class='param-name'>buttonIndex</span>
236
+ <span class='param-type'>number (0-13)</span> - Button index to check
237
+ </div>
238
+ </div>
239
+
240
+ <div class='return-info'>
241
+ <strong>Returns:</strong> <span class='param-type'>boolean</span> - true if button is held
242
+ </div>
243
+
244
+
245
+ <div class='example'>
246
+ <div class='example-title'>Example:</div>
247
+ <pre><code>if (btn(0)) player.x -= 2; // Move left</code></pre>
248
+ </div>
249
+
250
+ </div>
251
+
252
+ <div class='function'>
253
+ <div class='function-sig'>btnp(buttonIndex)</div>
254
+ <p>Checks if a button was just pressed (one-shot).</p>
255
+ <div class='param-list'>
256
+ <div class='param'>
257
+ <span class='param-name'>buttonIndex</span>
258
+ <span class='param-type'>number (0-13)</span> - Button index to check
259
+ </div>
260
+ </div>
261
+
262
+ <div class='return-info'>
263
+ <strong>Returns:</strong> <span class='param-type'>boolean</span> - true only on first frame of press
264
+ </div>
265
+
266
+
267
+ <div class='example'>
268
+ <div class='example-title'>Example:</div>
269
+ <pre><code>if (btnp(4)) player.jump(); // Jump on Z key press</code></pre>
270
+ </div>
271
+
272
+ </div>
273
+
274
+ <div class='function'>
275
+ <div class='function-sig'>isKeyDown(keyCode)</div>
276
+ <p>Checks if a specific keyboard key is currently held.</p>
277
+ <div class='param-list'>
278
+ <div class='param'>
279
+ <span class='param-name'>keyCode</span>
280
+ <span class='param-type'>string</span> - Key code (e.g., "w", "Space", "ArrowLeft")
281
+ </div>
282
+ </div>
283
+
284
+ <div class='return-info'>
285
+ <strong>Returns:</strong> <span class='param-type'>boolean</span> - true if key is held
286
+ </div>
287
+
288
+
289
+ <div class='example'>
290
+ <div class='example-title'>Example:</div>
291
+ <pre><code>if (isKeyDown("w")) player.moveForward();</code></pre>
292
+ </div>
293
+
294
+ </div>
295
+
296
+ <div class='function'>
297
+ <div class='function-sig'>isKeyPressed(keyCode)</div>
298
+ <p>Checks if a key was just pressed (one-shot).</p>
299
+ <div class='param-list'>
300
+ <div class='param'>
301
+ <span class='param-name'>keyCode</span>
302
+ <span class='param-type'>string</span> - Key code
303
+ </div>
304
+ </div>
305
+
306
+ <div class='return-info'>
307
+ <strong>Returns:</strong> <span class='param-type'>boolean</span> - true only on first frame
308
+ </div>
309
+
310
+
311
+ <div class='example'>
312
+ <div class='example-title'>Example:</div>
313
+ <pre><code>if (isKeyPressed("Enter")) selectMenuItem();</code></pre>
314
+ </div>
315
+
316
+ </div>
317
+
318
+ </section>
319
+
320
+ <section>
321
+ <h2>🖱️ Mouse Functions</h2>
322
+
323
+
324
+ <div class='function'>
325
+ <div class='function-sig'>mouseX()</div>
326
+ <p>Gets the current mouse X position (0-640).</p>
327
+
328
+
329
+ <div class='return-info'>
330
+ <strong>Returns:</strong> <span class='param-type'>number</span> - Mouse X coordinate
331
+ </div>
332
+
333
+
334
+ <div class='example'>
335
+ <div class='example-title'>Example:</div>
336
+ <pre><code>const mx = mouseX();</code></pre>
337
+ </div>
338
+
339
+ </div>
340
+
341
+ <div class='function'>
342
+ <div class='function-sig'>mouseY()</div>
343
+ <p>Gets the current mouse Y position (0-360).</p>
344
+
345
+
346
+ <div class='return-info'>
347
+ <strong>Returns:</strong> <span class='param-type'>number</span> - Mouse Y coordinate
348
+ </div>
349
+
350
+
351
+ <div class='example'>
352
+ <div class='example-title'>Example:</div>
353
+ <pre><code>const my = mouseY();</code></pre>
354
+ </div>
355
+
356
+ </div>
357
+
358
+ <div class='function'>
359
+ <div class='function-sig'>mouseDown()</div>
360
+ <p>Checks if mouse button is held.</p>
361
+
362
+
363
+ <div class='return-info'>
364
+ <strong>Returns:</strong> <span class='param-type'>boolean</span> - true if mouse button is down
365
+ </div>
366
+
367
+
368
+ <div class='example'>
369
+ <div class='example-title'>Example:</div>
370
+ <pre><code>if (mouseDown()) dragObject();</code></pre>
371
+ </div>
372
+
373
+ </div>
374
+
375
+ <div class='function'>
376
+ <div class='function-sig'>mousePressed()</div>
377
+ <p>Checks if mouse button was just clicked (one-shot).</p>
378
+
379
+
380
+ <div class='return-info'>
381
+ <strong>Returns:</strong> <span class='param-type'>boolean</span> - true only on first frame of click
382
+ </div>
383
+
384
+
385
+ <div class='example'>
386
+ <div class='example-title'>Example:</div>
387
+ <pre><code>if (mousePressed()) handleClick();</code></pre>
388
+ </div>
389
+
390
+ </div>
391
+
392
+ </section>
393
+
394
+ <section>
395
+ <h2>🎮 Gamepad Functions</h2>
396
+
397
+
398
+ <div class='function'>
399
+ <div class='function-sig'>gamepadConnected()</div>
400
+ <p>Checks if a gamepad is connected.</p>
401
+
402
+
403
+ <div class='return-info'>
404
+ <strong>Returns:</strong> <span class='param-type'>boolean</span> - true if gamepad is connected
405
+ </div>
406
+
407
+
408
+ <div class='example'>
409
+ <div class='example-title'>Example:</div>
410
+ <pre><code>if (gamepadConnected()) useAnalogStick();</code></pre>
411
+ </div>
412
+
413
+ </div>
414
+
415
+ <div class='function'>
416
+ <div class='function-sig'>leftStickX()</div>
417
+ <p>Gets left analog stick X axis (-1.0 to 1.0).</p>
418
+
419
+
420
+ <div class='return-info'>
421
+ <strong>Returns:</strong> <span class='param-type'>number</span> - Left stick X value with deadzone
422
+ </div>
423
+
424
+
425
+ <div class='example'>
426
+ <div class='example-title'>Example:</div>
427
+ <pre><code>player.x += leftStickX() * speed;</code></pre>
428
+ </div>
429
+
430
+ </div>
431
+
432
+ <div class='function'>
433
+ <div class='function-sig'>leftStickY()</div>
434
+ <p>Gets left analog stick Y axis (-1.0 to 1.0).</p>
435
+
436
+
437
+ <div class='return-info'>
438
+ <strong>Returns:</strong> <span class='param-type'>number</span> - Left stick Y value with deadzone
439
+ </div>
440
+
441
+
442
+ <div class='example'>
443
+ <div class='example-title'>Example:</div>
444
+ <pre><code>player.y += leftStickY() * speed;</code></pre>
445
+ </div>
446
+
447
+ </div>
448
+
449
+ <div class='function'>
450
+ <div class='function-sig'>rightStickX()</div>
451
+ <p>Gets right analog stick X axis.</p>
452
+
453
+
454
+ <div class='return-info'>
455
+ <strong>Returns:</strong> <span class='param-type'>number</span> - Right stick X value
456
+ </div>
457
+
458
+
459
+ <div class='example'>
460
+ <div class='example-title'>Example:</div>
461
+ <pre><code>camera.rotateY(rightStickX() * 0.05);</code></pre>
462
+ </div>
463
+
464
+ </div>
465
+
466
+ <div class='function'>
467
+ <div class='function-sig'>rightStickY()</div>
468
+ <p>Gets right analog stick Y axis.</p>
469
+
470
+
471
+ <div class='return-info'>
472
+ <strong>Returns:</strong> <span class='param-type'>number</span> - Right stick Y value
473
+ </div>
474
+
475
+
476
+ <div class='example'>
477
+ <div class='example-title'>Example:</div>
478
+ <pre><code>camera.rotateX(rightStickY() * 0.05);</code></pre>
479
+ </div>
480
+
481
+ </div>
482
+
483
+ </section>
484
+
485
+
486
+ <footer>
487
+ <p>Nova64 Fantasy Console © 2025 | <a href="index.html" style="color: var(--accent-cyan);">Back to Documentation</a></p>
488
+ </footer>
489
+ </div>
490
+ </body>
491
+ </html>