Imfuckinggoodbro commited on
Commit
ead457b
·
verified ·
1 Parent(s): f1e78f7

Add 3 files

Browse files
Files changed (3) hide show
  1. README.md +7 -5
  2. index.html +975 -19
  3. prompts.txt +1 -0
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Learning Gd
3
- emoji: 🏆
4
- colorFrom: indigo
5
- colorTo: pink
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: learning-gd
3
+ emoji: 🐳
4
+ colorFrom: pink
5
+ colorTo: green
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
index.html CHANGED
@@ -1,19 +1,975 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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>Cosmic GDScript - Learn to Code 2D Shooters</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
9
+ <style>
10
+ @import url('https://fonts.googleapis.com/css2?family=Press+Start+2P&family=Roboto+Mono:wght@400;700&display=swap');
11
+
12
+ :root {
13
+ --primary: #6e45e2;
14
+ --secondary: #88d3ce;
15
+ --accent: #ff9a56;
16
+ --dark: #1a1a2e;
17
+ --darker: #0d0d1a;
18
+ }
19
+
20
+ body {
21
+ font-family: 'Roboto Mono', monospace;
22
+ background-color: var(--darker);
23
+ color: white;
24
+ background-image:
25
+ radial-gradient(circle at 10% 20%, rgba(110, 69, 226, 0.1) 0%, transparent 20%),
26
+ radial-gradient(circle at 90% 80%, rgba(136, 211, 206, 0.1) 0%, transparent 20%);
27
+ }
28
+
29
+ .retro-border {
30
+ border: 2px solid var(--accent);
31
+ box-shadow: 0 0 15px rgba(255, 154, 86, 0.3);
32
+ }
33
+
34
+ .pixel-font {
35
+ font-family: 'Press Start 2P', cursive;
36
+ }
37
+
38
+ .code-block {
39
+ background-color: rgba(26, 26, 46, 0.8);
40
+ border-left: 4px solid var(--secondary);
41
+ }
42
+
43
+ .ship-movement {
44
+ animation: float 6s ease-in-out infinite;
45
+ }
46
+
47
+ @keyframes float {
48
+ 0%, 100% { transform: translateY(0) rotate(0deg); }
49
+ 50% { transform: translateY(-20px) rotate(2deg); }
50
+ }
51
+
52
+ .star {
53
+ position: absolute;
54
+ background-color: white;
55
+ border-radius: 50%;
56
+ animation: twinkle var(--duration) ease-in-out infinite;
57
+ }
58
+
59
+ @keyframes twinkle {
60
+ 0%, 100% { opacity: 0.2; }
61
+ 50% { opacity: 1; }
62
+ }
63
+
64
+ .progress-bar {
65
+ height: 8px;
66
+ background: linear-gradient(90deg, var(--accent) 0%, var(--primary) 100%);
67
+ transition: width 0.3s ease;
68
+ }
69
+
70
+ .enemy-pattern {
71
+ animation: pattern-move 8s linear infinite;
72
+ }
73
+
74
+ @keyframes pattern-move {
75
+ 0% { transform: translateX(0) translateY(0); }
76
+ 25% { transform: translateX(50px) translateY(30px); }
77
+ 50% { transform: translateX(0) translateY(60px); }
78
+ 75% { transform: translateX(-50px) translateY(30px); }
79
+ 100% { transform: translateX(0) translateY(0); }
80
+ }
81
+ </style>
82
+ </head>
83
+ <body class="min-h-screen">
84
+ <!-- Stars background -->
85
+ <div id="stars-container" class="fixed inset-0 overflow-hidden -z-10"></div>
86
+
87
+ <!-- Header -->
88
+ <header class="bg-black bg-opacity-70 backdrop-blur-md sticky top-0 z-50 retro-border border-t-0 border-l-0 border-r-0">
89
+ <div class="container mx-auto px-4 py-3 flex justify-between items-center">
90
+ <div class="flex items-center space-x-2">
91
+ <i class="fas fa-rocket text-2xl text-accent"></i>
92
+ <h1 class="text-2xl pixel-font bg-clip-text text-transparent bg-gradient-to-r from-primary to-accent">
93
+ COSMIC GDSCRIPT
94
+ </h1>
95
+ </div>
96
+ <nav class="hidden md:flex space-x-6">
97
+ <a href="#basics" class="hover:text-secondary transition">Basics</a>
98
+ <a href="#movement" class="hover:text-secondary transition">Movement</a>
99
+ <a href="#combat" class="hover:text-secondary transition">Combat</a>
100
+ <a href="#enemies" class="hover:text-secondary transition">Enemies</a>
101
+ <a href="#story" class="hover:text-secondary transition">Story</a>
102
+ </nav>
103
+ <button class="md:hidden text-xl">
104
+ <i class="fas fa-bars"></i>
105
+ </button>
106
+ </div>
107
+ </header>
108
+
109
+ <!-- Hero Section -->
110
+ <section class="relative pt-20 pb-32 px-4">
111
+ <div class="container mx-auto flex flex-col md:flex-row items-center">
112
+ <div class="md:w-1/2 mb-10 md:mb-0">
113
+ <h2 class="text-4xl md:text-5xl font-bold mb-6 pixel-font">
114
+ BUILD YOUR OWN <span class="text-accent">SPACE SHOOTER</span>
115
+ </h2>
116
+ <p class="text-lg mb-8 text-gray-300 max-w-lg">
117
+ Learn GDScript from scratch while creating a classic 2D shooter inspired by Gaiares, Thunder Force, and other legendary titles. Perfect for beginners!
118
+ </p>
119
+ <div class="flex space-x-4">
120
+ <a href="#start" class="px-6 py-3 bg-gradient-to-r from-primary to-accent rounded-md font-bold hover:opacity-90 transition">
121
+ Start Learning
122
+ </a>
123
+ <a href="#tutorials" class="px-6 py-3 border border-accent text-accent rounded-md font-bold hover:bg-accent hover:bg-opacity-10 transition">
124
+ Watch Tutorials
125
+ </a>
126
+ </div>
127
+ </div>
128
+ <div class="md:w-1/2 flex justify-center">
129
+ <div class="relative w-64 h-64 ship-movement">
130
+ <img src="https://img.icons8.com/color/96/000000/space-shuttle.png" alt="Spaceship" class="w-full h-full">
131
+ <div class="absolute -bottom-8 left-1/2 transform -translate-x-1/2 w-32 h-4 bg-accent rounded-full blur-md opacity-70"></div>
132
+ </div>
133
+ </div>
134
+ </div>
135
+ </section>
136
+
137
+ <!-- Progress Tracker -->
138
+ <div class="container mx-auto px-4 mb-12">
139
+ <div class="bg-black bg-opacity-50 rounded-lg p-4 retro-border">
140
+ <h3 class="text-lg font-bold mb-2">YOUR LEARNING PROGRESS</h3>
141
+ <div class="w-full bg-gray-800 rounded-full h-2 mb-2">
142
+ <div class="progress-bar rounded-full h-2" style="width: 0%"></div>
143
+ </div>
144
+ <p class="text-sm text-gray-400">Complete sections to unlock the next chapters!</p>
145
+ </div>
146
+ </div>
147
+
148
+ <!-- Main Content -->
149
+ <main class="container mx-auto px-4 pb-20 space-y-20">
150
+ <!-- Basics Section -->
151
+ <section id="basics" class="scroll-mt-20">
152
+ <div class="bg-black bg-opacity-50 rounded-lg p-6 retro-border">
153
+ <div class="flex items-center mb-6">
154
+ <div class="w-10 h-10 rounded-full bg-primary flex items-center justify-center mr-4">
155
+ <span class="text-xl font-bold">1</span>
156
+ </div>
157
+ <h2 class="text-2xl font-bold pixel-font">GDScript Basics for Space Games</h2>
158
+ </div>
159
+
160
+ <div class="grid md:grid-cols-2 gap-8">
161
+ <div>
162
+ <h3 class="text-xl font-semibold mb-4 text-secondary">Why GDScript for Shooters?</h3>
163
+ <p class="mb-4 text-gray-300">
164
+ GDScript is the perfect language for 2D space shooters because it's:
165
+ </p>
166
+ <ul class="space-y-2 mb-6">
167
+ <li class="flex items-start">
168
+ <i class="fas fa-check text-accent mr-2 mt-1"></i>
169
+ <span>Easy to learn with Python-like syntax</span>
170
+ </li>
171
+ <li class="flex items-start">
172
+ <i class="fas fa-check text-accent mr-2 mt-1"></i>
173
+ <span>Optimized for Godot's 2D engine</span>
174
+ </li>
175
+ <li class="flex items-start">
176
+ <i class="fas fa-check text-accent mr-2 mt-1"></i>
177
+ <span>Great for rapid prototyping of game mechanics</span>
178
+ </li>
179
+ <li class="flex items-start">
180
+ <i class="fas fa-check text-accent mr-2 mt-1"></i>
181
+ <span>Perfect for handling physics and collisions</span>
182
+ </li>
183
+ </ul>
184
+
185
+ <h3 class="text-xl font-semibold mb-4 text-secondary mt-8">Setting Up Your Project</h3>
186
+ <p class="mb-4 text-gray-300">
187
+ Start with these basic settings for an authentic arcade feel:
188
+ </p>
189
+ <div class="code-block p-4 rounded mb-6">
190
+ <pre class="text-sm text-gray-200">
191
+ # Project Settings -> Display -> Window
192
+ window/size/width = 640 # Classic arcade width
193
+ window/size/height = 720 # Vertical shooter height
194
+ window/stretch/mode = "2d" # Pixel perfect scaling
195
+
196
+ # Physics Settings
197
+ physics/2d/default_gravity = 0 # No gravity in space!
198
+ physics/2d/default_linear_damp = 0.1 # Small drag for inertia</pre>
199
+ </div>
200
+ </div>
201
+
202
+ <div>
203
+ <h3 class="text-xl font-semibold mb-4 text-secondary">Your First Spaceship Script</h3>
204
+ <p class="mb-4 text-gray-300">
205
+ Here's a simple script to get your ship on screen:
206
+ </p>
207
+ <div class="code-block p-4 rounded mb-4">
208
+ <pre class="text-sm text-gray-200">
209
+ extends Area2D # We use Area2D for collision detection
210
+
211
+ # Ship properties
212
+ var speed = 300
213
+ var velocity = Vector2.ZERO
214
+
215
+ func _process(delta):
216
+ # Get input
217
+ var input = Vector2.ZERO
218
+ input.x = Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left")
219
+ input.y = Input.get_action_strength("ui_down") - Input.get_action_strength("ui_up")
220
+
221
+ # Normalize diagonal movement
222
+ if input.length() > 0:
223
+ input = input.normalized()
224
+
225
+ # Update position
226
+ velocity = input * speed
227
+ position += velocity * delta
228
+
229
+ # Keep ship on screen
230
+ position.x = clamp(position.x, 0, get_viewport_rect().size.x)
231
+ position.y = clamp(position.y, 0, get_viewport_rect().size.y)</pre>
232
+ </div>
233
+ <p class="text-sm text-gray-400">
234
+ This gives you basic 8-directional movement with screen boundaries.
235
+ </p>
236
+ </div>
237
+ </div>
238
+
239
+ <div class="mt-8 bg-black bg-opacity-70 p-4 rounded-lg">
240
+ <h4 class="font-semibold text-secondary mb-2">Beginner Tip:</h4>
241
+ <p class="text-gray-300">
242
+ Use <code class="bg-gray-800 px-1 rounded">Input.get_action_strength()</code> instead of <code class="bg-gray-800 px-1 rounded">Input.is_action_pressed()</code> for smoother analog input support, which works great with gamepads!
243
+ </p>
244
+ </div>
245
+ </div>
246
+ </section>
247
+
248
+ <!-- Movement Section -->
249
+ <section id="movement" class="scroll-mt-20">
250
+ <div class="bg-black bg-opacity-50 rounded-lg p-6 retro-border">
251
+ <div class="flex items-center mb-6">
252
+ <div class="w-10 h-10 rounded-full bg-primary flex items-center justify-center mr-4">
253
+ <span class="text-xl font-bold">2</span>
254
+ </div>
255
+ <h2 class="text-2xl font-bold pixel-font">Advanced Movement Systems</h2>
256
+ </div>
257
+
258
+ <div class="grid md:grid-cols-2 gap-8">
259
+ <div>
260
+ <h3 class="text-xl font-semibold mb-4 text-secondary">Inertia & Momentum</h3>
261
+ <p class="mb-4 text-gray-300">
262
+ For games like Thunder Force with realistic space physics:
263
+ </p>
264
+ <div class="code-block p-4 rounded mb-4">
265
+ <pre class="text-sm text-gray-200">
266
+ extends Area2D
267
+
268
+ var max_speed = 500
269
+ var acceleration = 800
270
+ var friction = 0.95
271
+ var velocity = Vector2.ZERO
272
+
273
+ func _process(delta):
274
+ var input = Vector2.ZERO
275
+ input.x = Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left")
276
+ input.y = Input.get_action_strength("ui_down") - Input.get_action_strength("ui_up")
277
+
278
+ if input.length() > 0:
279
+ velocity += input.normalized() * acceleration * delta
280
+ velocity = velocity.limit_length(max_speed)
281
+ else:
282
+ velocity *= friction
283
+
284
+ position += velocity * delta
285
+ position = position.clamp(Vector2.ZERO, get_viewport_rect().size)</pre>
286
+ </div>
287
+ <p class="text-sm text-gray-400">
288
+ This gives your ship realistic momentum that gradually slows down when not accelerating.
289
+ </p>
290
+ </div>
291
+
292
+ <div>
293
+ <h3 class="text-xl font-semibold mb-4 text-secondary">Screen Wrapping</h3>
294
+ <p class="mb-4 text-gray-300">
295
+ Classic arcade-style screen wrapping (like in Asteroids):
296
+ </p>
297
+ <div class="code-block p-4 rounded mb-4">
298
+ <pre class="text-sm text-gray-200">
299
+ func _process(delta):
300
+ # ... (previous movement code)
301
+
302
+ # Screen wrapping
303
+ var screen_size = get_viewport_rect().size
304
+ if position.x < 0:
305
+ position.x = screen_size.x
306
+ elif position.x > screen_size.x:
307
+ position.x = 0
308
+ if position.y < 0:
309
+ position.y = screen_size.y
310
+ elif position.y > screen_size.y:
311
+ position.y = 0</pre>
312
+ </div>
313
+
314
+ <h3 class="text-xl font-semibold mb-4 text-secondary mt-8">Ship Tilting Animation</h3>
315
+ <p class="mb-4 text-gray-300">
316
+ Add visual feedback when moving:
317
+ </p>
318
+ <div class="code-block p-4 rounded">
319
+ <pre class="text-sm text-gray-200">
320
+ func _process(delta):
321
+ # ... (movement code)
322
+
323
+ # Visual tilt based on movement
324
+ var tilt_amount = 15 # degrees
325
+ var target_rotation = -input.x * deg2rad(tilt_amount)
326
+ $Sprite.rotation = lerp($Sprite.rotation, target_rotation, 10 * delta)</pre>
327
+ </div>
328
+ </div>
329
+ </div>
330
+
331
+ <div class="mt-8 grid md:grid-cols-2 gap-6">
332
+ <div class="bg-black bg-opacity-70 p-4 rounded-lg">
333
+ <h4 class="font-semibold text-secondary mb-2">Pro Tip: Movement Styles</h4>
334
+ <p class="text-gray-300">
335
+ Different shooters use different movement systems:
336
+ </p>
337
+ <ul class="mt-2 space-y-1">
338
+ <li><span class="text-accent">Fixed</span>: Always moves at constant speed (Gradius)</li>
339
+ <li><span class="text-accent">Inertial</span>: Realistic momentum (Thunder Force)</li>
340
+ <li><span class="text-accent">Float</span>: Slow acceleration/deceleration (Gaiares)</li>
341
+ </ul>
342
+ </div>
343
+
344
+ <div class="bg-black bg-opacity-70 p-4 rounded-lg">
345
+ <h4 class="font-semibold text-secondary mb-2">Exercise:</h4>
346
+ <p class="text-gray-300">
347
+ Try creating a "speed boost" system where holding a button increases max speed temporarily but makes your hitbox larger.
348
+ </p>
349
+ </div>
350
+ </div>
351
+ </div>
352
+ </section>
353
+
354
+ <!-- Combat Section -->
355
+ <section id="combat" class="scroll-mt-20">
356
+ <div class="bg-black bg-opacity-50 rounded-lg p-6 retro-border">
357
+ <div class="flex items-center mb-6">
358
+ <div class="w-10 h-10 rounded-full bg-primary flex items-center justify-center mr-4">
359
+ <span class="text-xl font-bold">3</span>
360
+ </div>
361
+ <h2 class="text-2xl font-bold pixel-font">Weapons & Power-Ups</h2>
362
+ </div>
363
+
364
+ <div class="grid md:grid-cols-2 gap-8">
365
+ <div>
366
+ <h3 class="text-xl font-semibold mb-4 text-secondary">Basic Weapon System</h3>
367
+ <p class="mb-4 text-gray-300">
368
+ A flexible weapon system that supports multiple shot types:
369
+ </p>
370
+ <div class="code-block p-4 rounded mb-4">
371
+ <pre class="text-sm text-gray-200">
372
+ enum WEAPON_TYPES {NORMAL, SPREAD, LASER}
373
+
374
+ var current_weapon = WEAPON_TYPES.NORMAL
375
+ var can_shoot = true
376
+ var fire_rate = 0.2
377
+
378
+ func _input(event):
379
+ if event.is_action_pressed("shoot") and can_shoot:
380
+ shoot()
381
+ can_shoot = false
382
+ $FireRateTimer.start(fire_rate)
383
+
384
+ func shoot():
385
+ match current_weapon:
386
+ WEAPON_TYPES.NORMAL:
387
+ create_bullet($GunPosition.position, Vector2(0, -800))
388
+ WEAPON_TYPES.SPREAD:
389
+ for i in range(3):
390
+ var angle = deg2rad(-15 + i * 15)
391
+ create_bullet($GunPosition.position, Vector2(0, -800).rotated(angle))
392
+ WEAPON_TYPES.LASER:
393
+ $LaserBeam.emitting = true
394
+ $LaserTimer.start(0.5)
395
+
396
+ func create_bullet(pos, velocity):
397
+ var bullet = preload("res://Bullet.tscn").instance()
398
+ bullet.position = position + pos
399
+ bullet.velocity = velocity
400
+ get_parent().add_child(bullet)
401
+
402
+ func _on_FireRateTimer_timeout():
403
+ can_shoot = true
404
+
405
+ func _on_LaserTimer_timeout():
406
+ $LaserBeam.emitting = false</pre>
407
+ </div>
408
+ </div>
409
+
410
+ <div>
411
+ <h3 class="text-xl font-semibold mb-4 text-secondary">Power-Up System</h3>
412
+ <p class="mb-4 text-gray-300">
413
+ Collectible items that enhance your weapons:
414
+ </p>
415
+ <div class="code-block p-4 rounded mb-4">
416
+ <pre class="text-sm text-gray-200">
417
+ # In your ship script
418
+ var weapon_level = 0
419
+ var max_weapon_level = 3
420
+
421
+ func _on_Area2D_area_entered(area):
422
+ if area.is_in_group("powerups"):
423
+ match area.powerup_type:
424
+ "weapon_up":
425
+ weapon_level = min(weapon_level + 1, max_weapon_level)
426
+ update_weapon()
427
+ "speed_up":
428
+ max_speed += 50
429
+ "shield":
430
+ $Shield.activate()
431
+ area.queue_free()
432
+
433
+ func update_weapon():
434
+ match weapon_level:
435
+ 0: current_weapon = WEAPON_TYPES.NORMAL
436
+ 1:
437
+ current_weapon = WEAPON_TYPES.SPREAD
438
+ fire_rate = 0.15
439
+ 2:
440
+ current_weapon = WEAPON_TYPES.LASER
441
+ fire_rate = 0.3</pre>
442
+ </div>
443
+
444
+ <h3 class="text-xl font-semibold mb-4 text-secondary mt-8">Super Cannon (Bomb)</h3>
445
+ <p class="mb-4 text-gray-300">
446
+ Screen-clearing special attack:
447
+ </p>
448
+ <div class="code-block p-4 rounded">
449
+ <pre class="text-sm text-gray-200">
450
+ var bomb_count = 3
451
+
452
+ func _input(event):
453
+ if event.is_action_pressed("bomb") and bomb_count > 0:
454
+ activate_bomb()
455
+
456
+ func activate_bomb():
457
+ bomb_count -= 1
458
+ $BombAnimation.play("explode")
459
+ $BombSound.play()
460
+
461
+ # Damage all enemies
462
+ for enemy in get_tree().get_nodes_in_group("enemies"):
463
+ enemy.take_damage(999) # Insta-kill
464
+
465
+ # Clear bullets
466
+ for bullet in get_tree().get_nodes_in_group("enemy_bullets"):
467
+ bullet.queue_free()</pre>
468
+ </div>
469
+ </div>
470
+ </div>
471
+
472
+ <div class="mt-8 bg-black bg-opacity-70 p-4 rounded-lg">
473
+ <h4 class="font-semibold text-secondary mb-2">Design Tip:</h4>
474
+ <p class="text-gray-300">
475
+ Balance your weapons carefully:
476
+ </p>
477
+ <ul class="mt-2 space-y-1">
478
+ <li><span class="text-accent">Normal</span>: Weak but reliable</li>
479
+ <li><span class="text-accent">Spread</span>: Good for crowds but weaker individually</li>
480
+ <li><span class="text-accent">Laser</span>: Powerful but slow firing rate</li>
481
+ </ul>
482
+ </div>
483
+ </div>
484
+ </section>
485
+
486
+ <!-- Enemies Section -->
487
+ <section id="enemies" class="scroll-mt-20">
488
+ <div class="bg-black bg-opacity-50 rounded-lg p-6 retro-border">
489
+ <div class="flex items-center mb-6">
490
+ <div class="w-10 h-10 rounded-full bg-primary flex items-center justify-center mr-4">
491
+ <span class="text-xl font-bold">4</span>
492
+ </div>
493
+ <h2 class="text-2xl font-bold pixel-font">Enemy Patterns & AI</h2>
494
+ </div>
495
+
496
+ <div class="grid md:grid-cols-2 gap-8">
497
+ <div>
498
+ <h3 class="text-xl font-semibold mb-4 text-secondary">Basic Enemy Movement</h3>
499
+ <p class="mb-4 text-gray-300">
500
+ Simple but effective enemy patterns:
501
+ </p>
502
+ <div class="code-block p-4 rounded mb-4">
503
+ <pre class="text-sm text-gray-200">
504
+ extends Area2D
505
+
506
+ enum MOVEMENT_PATTERNS {LINEAR, SINUSOIDAL, CIRCULAR, DIVE}
507
+
508
+ var health = 3
509
+ var speed = 150
510
+ var pattern = MOVEMENT_PATTERNS.LINEAR
511
+ var time = 0
512
+
513
+ func _process(delta):
514
+ time += delta
515
+
516
+ match pattern:
517
+ MOVEMENT_PATTERNS.LINEAR:
518
+ position.y += speed * delta
519
+ MOVEMENT_PATTERNS.SINUSOIDAL:
520
+ position.y += speed * 0.5 * delta
521
+ position.x = 200 + sin(time * 2) * 150
522
+ MOVEMENT_PATTERNS.CIRCULAR:
523
+ position = Vector2(300, 100) + Vector2(cos(time), sin(time)) * 150
524
+ MOVEMENT_PATTERNS.DIVE:
525
+ if position.y < 200:
526
+ position.y += speed * delta
527
+ else:
528
+ var player = get_tree().get_nodes_in_group("player")[0]
529
+ var direction = (player.position - position).normalized()
530
+ position += direction * speed * delta</pre>
531
+ </div>
532
+
533
+ <h3 class="text-xl font-semibold mb-4 text-secondary mt-8">Bullet Patterns</h3>
534
+ <p class="mb-4 text-gray-300">
535
+ Classic shooter bullet patterns:
536
+ </p>
537
+ <div class="code-block p-4 rounded">
538
+ <pre class="text-sm text-gray-200">
539
+ func shoot():
540
+ var patterns = [
541
+ "single",
542
+ "three_way",
543
+ "circle",
544
+ "aimed"
545
+ ]
546
+ call(patterns[randi() % patterns.size()])
547
+
548
+ func single():
549
+ var bullet = create_bullet(Vector2.DOWN * 300)
550
+ add_child(bullet)
551
+
552
+ func three_way():
553
+ for i in range(3):
554
+ var angle = deg2rad(-15 + i * 15)
555
+ var bullet = create_bullet(Vector2.DOWN.rotated(angle) * 250)
556
+ add_child(bullet)
557
+
558
+ func circle():
559
+ for i in range(8):
560
+ var angle = deg2rad(i * 45)
561
+ var bullet = create_bullet(Vector2.DOWN.rotated(angle) * 200)
562
+ add_child(bullet)
563
+
564
+ func aimed():
565
+ var player = get_tree().get_nodes_in_group("player")[0]
566
+ var direction = (player.position - position).normalized()
567
+ var bullet = create_bullet(direction * 350)
568
+ add_child(bullet)</pre>
569
+ </div>
570
+ </div>
571
+
572
+ <div>
573
+ <h3 class="text-xl font-semibold mb-4 text-secondary">Enemy Waves & Spawning</h3>
574
+ <p class="mb-4 text-gray-300">
575
+ Dynamic wave spawning system:
576
+ </p>
577
+ <div class="code-block p-4 rounded mb-4">
578
+ <pre class="text-sm text-gray-200">
579
+ # In your GameController script
580
+ var current_wave = 0
581
+ var enemies_in_wave = 0
582
+ var wave_data = [
583
+ {"count": 5, "type": "basic", "pattern": "linear"},
584
+ {"count": 8, "type": "basic", "pattern": "sinusoidal"},
585
+ {"count": 3, "type": "elite", "pattern": "dive"},
586
+ # ... more waves
587
+ ]
588
+
589
+ func start_wave(wave_num):
590
+ current_wave = wave_num
591
+ var wave = wave_data[wave_num]
592
+ enemies_in_wave = wave.count
593
+
594
+ for i in range(wave.count):
595
+ var enemy = preload("res://Enemies/" + wave.type + ".tscn").instance()
596
+ enemy.pattern = wave.pattern
597
+ enemy.position = Vector2(
598
+ rand_range(50, 590),
599
+ rand_range(-100, -30)
600
+ )
601
+ add_child(enemy)
602
+ yield(get_tree().create_timer(0.5), "timeout")
603
+
604
+ func _on_Enemy_death():
605
+ enemies_in_wave -= 1
606
+ if enemies_in_wave <= 0:
607
+ yield(get_tree().create_timer(2.0), "timeout")
608
+ start_wave(current_wave + 1)</pre>
609
+ </div>
610
+
611
+ <h3 class="text-xl font-semibold mb-4 text-secondary mt-8">Boss Battle Framework</h3>
612
+ <p class="mb-4 text-gray-300">
613
+ Multi-phase boss structure:
614
+ </p>
615
+ <div class="code-block p-4 rounded">
616
+ <pre class="text-sm text-gray-200">
617
+ extends Node2D
618
+
619
+ var max_health = 1000
620
+ var health = max_health
621
+ var phase = 1
622
+ var attack_patterns = [
623
+ "spiral_shot",
624
+ "laser_sweep",
625
+ "missile_barrage"
626
+ ]
627
+
628
+ func _process(delta):
629
+ # Phase transitions
630
+ if health < max_health * 0.66 and phase == 1:
631
+ phase = 2
632
+ $AnimationPlayer.play("phase_transition")
633
+ elif health < max_health * 0.33 and phase == 2:
634
+ phase = 3
635
+ $AnimationPlayer.play("final_phase")
636
+
637
+ # Random attacks
638
+ if $AttackCooldown.is_stopped():
639
+ var attack = attack_patterns[randi() % attack_patterns.size()]
640
+ call(attack)
641
+ $AttackCooldown.start(3.0)
642
+
643
+ func take_damage(amount):
644
+ health -= amount
645
+ $HealthBar.value = health
646
+ if health <= 0:
647
+ die()
648
+
649
+ func die():
650
+ $DeathAnimation.play("explode")
651
+ yield($DeathAnimation, "animation_finished")
652
+ queue_free()
653
+ emit_signal("boss_defeated")</pre>
654
+ </div>
655
+ </div>
656
+ </div>
657
+
658
+ <div class="mt-8 bg-black bg-opacity-70 p-4 rounded-lg">
659
+ <h4 class="font-semibold text-secondary mb-2">Pattern Design Tip:</h4>
660
+ <p class="text-gray-300">
661
+ Good shooter patterns follow these principles:
662
+ </p>
663
+ <ul class="mt-2 space-y-1">
664
+ <li><span class="text-accent">Readability</span>: Players should see and understand the pattern</li>
665
+ <li><span class="text-accent">Fairness</span>: Always leave escape routes</li>
666
+ <li><span class="text-accent">Variety</span>: Mix different pattern types</li>
667
+ <li><span class="text-accent">Rhythm</span>: Attacks should have a predictable tempo</li>
668
+ </ul>
669
+ </div>
670
+ </div>
671
+ </section>
672
+
673
+ <!-- Story Section -->
674
+ <section id="story" class="scroll-mt-20">
675
+ <div class="bg-black bg-opacity-50 rounded-lg p-6 retro-border">
676
+ <div class="flex items-center mb-6">
677
+ <div class="w-10 h-10 rounded-full bg-primary flex items-center justify-center mr-4">
678
+ <span class="text-xl font-bold">5</span>
679
+ </div>
680
+ <h2 class="text-2xl font-bold pixel-font">Story & Presentation</h2>
681
+ </div>
682
+
683
+ <div class="grid md:grid-cols-2 gap-8">
684
+ <div>
685
+ <h3 class="text-xl font-semibold mb-4 text-secondary">Cutscene System</h3>
686
+ <p class="mb-4 text-gray-300">
687
+ Simple dialogue and scene transitions:
688
+ </p>
689
+ <div class="code-block p-4 rounded mb-4">
690
+ <pre class="text-sm text-gray-200">
691
+ # CutscenePlayer.gd
692
+ var current_scene = 0
693
+ var scenes = [
694
+ {"text": "Commander: The Zeta fleet is attacking our colonies!", "duration": 3},
695
+ {"text": "We need you to pilot the new X-Wing prototype.", "duration": 3},
696
+ {"text": "Good luck out there, pilot!", "duration": 2, "action": "start_game"}
697
+ ]
698
+
699
+ func play_scene():
700
+ if current_scene >= scenes.size():
701
+ return
702
+
703
+ var scene = scenes[current_scene]
704
+ $Label.text = scene.text
705
+ $AnimationPlayer.play("show_text")
706
+ yield(get_tree().create_timer(scene.duration), "timeout")
707
+
708
+ if scene.has("action"):
709
+ call(scene.action)
710
+
711
+ current_scene += 1
712
+ play_scene()
713
+
714
+ func start_game():
715
+ get_tree().change_scene("res://Game.tscn")</pre>
716
+ </div>
717
+
718
+ <h3 class="text-xl font-semibold mb-4 text-secondary mt-8">Mission Briefing Screen</h3>
719
+ <p class="mb-4 text-gray-300">
720
+ Display level information:
721
+ </p>
722
+ <div class="code-block p-4 rounded">
723
+ <pre class="text-sm text-gray-200">
724
+ # MissionBriefing.gd
725
+ func show_mission(level_data):
726
+ $Title.text = level_data.title
727
+ $Description.text = level_data.description
728
+ $Objectives.text = ""
729
+ for objective in level_data.objectives:
730
+ $Objectives.text += "• " + objective + "\n"
731
+
732
+ $AnimationPlayer.play("enter")
733
+ yield(get_tree().create_timer(5.0), "timeout")
734
+ $AnimationPlayer.play("exit")
735
+ yield($AnimationPlayer, "animation_finished")
736
+ emit_signal("briefing_complete")
737
+
738
+ # Example level data
739
+ var level1 = {
740
+ "title": "MISSION 1: BREAKTHROUGH",
741
+ "description": "Penetrate the enemy defense line and destroy the carrier.",
742
+ "objectives": [
743
+ "Destroy all radar installations",
744
+ "Defeat the carrier boss",
745
+ "Survive for 5 minutes"
746
+ ]
747
+ }</pre>
748
+ </div>
749
+ </div>
750
+
751
+ <div>
752
+ <h3 class="text-xl font-semibold mb-4 text-secondary">Ending Sequence</h3>
753
+ <p class="mb-4 text-gray-300">
754
+ Show player results and story conclusion:
755
+ </p>
756
+ <div class="code-block p-4 rounded mb-4">
757
+ <pre class="text-sm text-gray-200">
758
+ # EndingHandler.gd
759
+ func show_ending(score, rank, secrets_found):
760
+ $Score.text = "SCORE: %08d" % score
761
+ $Rank.text = "RANK: " + rank
762
+
763
+ if secrets_found >= 5:
764
+ $EndingText.text = ending_data.true_ending
765
+ else:
766
+ $EndingText.text = ending_data.normal_ending
767
+
768
+ $AnimationPlayer.play("scroll_text")
769
+ yield($AnimationPlayer, "animation_finished")
770
+ $ContinuePrompt.show()
771
+
772
+ var ending_data = {
773
+ "normal_ending": "You defeated the Zeta fleet...\nbut their homeworld remains...",
774
+ "true_ending": "With the Zeta homeworld destroyed...\npeace returns to the galaxy..."
775
+ }</pre>
776
+ </div>
777
+
778
+ <h3 class="text-xl font-semibold mb-4 text-secondary mt-8">Modernizing Classic Storytelling</h3>
779
+ <p class="mb-4 text-gray-300">
780
+ Techniques to enhance classic shooter narratives:
781
+ </p>
782
+ <ul class="space-y-2">
783
+ <li class="flex items-start">
784
+ <i class="fas fa-chevron-right text-accent mr-2 mt-1"></i>
785
+ <span><span class="font-semibold">Environmental Storytelling:</span> Show damage to ships, fleeing civilian craft</span>
786
+ </li>
787
+ <li class="flex items-start">
788
+ <i class="fas fa-chevron-right text-accent mr-2 mt-1"></i>
789
+ <span><span class="font-semibold">Radio Chatter:</span> Random mission updates during gameplay</span>
790
+ </li>
791
+ <li class="flex items-start">
792
+ <i class="fas fa-chevron-right text-accent mr-2 mt-1"></i>
793
+ <span><span class="font-semibold">Unlockable Lore:</span> Collect data logs that expand the universe</span>
794
+ </li>
795
+ <li class="flex items-start">
796
+ <i class="fas fa-chevron-right text-accent mr-2 mt-1"></i>
797
+ <span><span class="font-semibold">Branching Paths:</span> Different levels based on mission choices</span>
798
+ </li>
799
+ </ul>
800
+ </div>
801
+ </div>
802
+
803
+ <div class="mt-8 bg-black bg-opacity-70 p-4 rounded-lg">
804
+ <h4 class="font-semibold text-secondary mb-2">Exercise:</h4>
805
+ <p class="text-gray-300">
806
+ Create a simple "codex" system where players can view collected story fragments. Store which entries have been unlocked in a dictionary and save/load it using Godot's ResourceSaver.
807
+ </p>
808
+ </div>
809
+ </div>
810
+ </section>
811
+
812
+ <!-- Final Section -->
813
+ <section class="bg-black bg-opacity-50 rounded-lg p-6 retro-border">
814
+ <div class="text-center">
815
+ <h2 class="text-3xl font-bold pixel-font mb-6">YOUR SPACE ODYSSEY BEGINS!</h2>
816
+ <p class="text-xl mb-8 max-w-2xl mx-auto">
817
+ You now have all the tools to create an amazing 2D space shooter. Remember that great games are made through iteration - start simple and keep adding polish!
818
+ </p>
819
+ <div class="flex flex-col md:flex-row justify-center space-y-4 md:space-y-0 md:space-x-6">
820
+ <a href="#" class="px-8 py-4 bg-gradient-to-r from-primary to-accent rounded-md font-bold text-lg hover:opacity-90 transition">
821
+ Download Project Files
822
+ </a>
823
+ <a href="#" class="px-8 py-4 border border-accent text-accent rounded-md font-bold text-lg hover:bg-accent hover:bg-opacity-10 transition">
824
+ Join Our Community
825
+ </a>
826
+ </div>
827
+ </div>
828
+
829
+ <div class="mt-12 grid md:grid-cols-3 gap-6">
830
+ <div class="bg-black bg-opacity-70 p-6 rounded-lg">
831
+ <h3 class="text-xl font-semibold mb-3 text-secondary">Next Steps</h3>
832
+ <ul class="space-y-2">
833
+ <li class="flex items-start">
834
+ <i class="fas fa-rocket text-accent mr-2 mt-1"></i>
835
+ <span>Add visual effects (particles, shaders)</span>
836
+ </li>
837
+ <li class="flex items-start">
838
+ <i class="fas fa-music text-accent mr-2 mt-1"></i>
839
+ <span>Implement dynamic music</span>
840
+ </li>
841
+ <li class="flex items-start">
842
+ <i class="fas fa-trophy text-accent mr-2 mt-1"></i>
843
+ <span>Create an achievement system</span>
844
+ </li>
845
+ </ul>
846
+ </div>
847
+
848
+ <div class="bg-black bg-opacity-70 p-6 rounded-lg">
849
+ <h3 class="text-xl font-semibold mb-3 text-secondary">Resources</h3>
850
+ <ul class="space-y-2">
851
+ <li class="flex items-start">
852
+ <i class="fas fa-book text-accent mr-2 mt-1"></i>
853
+ <span>Godot Documentation</span>
854
+ </li>
855
+ <li class="flex items-start">
856
+ <i class="fab fa-youtube text-accent mr-2 mt-1"></i>
857
+ <span>GDQuest YouTube Channel</span>
858
+ </li>
859
+ <li class="flex items-start">
860
+ <i class="fas fa-gamepad text-accent mr-2 mt-1"></i>
861
+ <span>Shmup Dev Discord</span>
862
+ </li>
863
+ </ul>
864
+ </div>
865
+
866
+ <div class="bg-black bg-opacity-70 p-6 rounded-lg">
867
+ <h3 class="text-xl font-semibold mb-3 text-secondary">Inspiration</h3>
868
+ <ul class="space-y-2">
869
+ <li class="flex items-start">
870
+ <i class="fas fa-star text-accent mr-2 mt-1"></i>
871
+ <span>Thunder Force IV</span>
872
+ </li>
873
+ <li class="flex items-start">
874
+ <i class="fas fa-star text-accent mr-2 mt-1"></i>
875
+ <span>Gaiares</span>
876
+ </li>
877
+ <li class="flex items-start">
878
+ <i class="fas fa-star text-accent mr-2 mt-1"></i>
879
+ <span>R-Type</span>
880
+ </li>
881
+ </ul>
882
+ </div>
883
+ </div>
884
+ </section>
885
+ </main>
886
+
887
+ <!-- Footer -->
888
+ <footer class="bg-black bg-opacity-70 py-8 mt-20 retro-border border-b-0">
889
+ <div class="container mx-auto px-4">
890
+ <div class="flex flex-col md:flex-row justify-between items-center">
891
+ <div class="mb-6 md:mb-0">
892
+ <h2 class="text-xl pixel-font bg-clip-text text-transparent bg-gradient-to-r from-primary to-accent">
893
+ COSMIC GDSCRIPT
894
+ </h2>
895
+ <p class="text-sm text-gray-400 mt-1">Learn • Create • Shoot 'em Up</p>
896
+ </div>
897
+ <div class="flex space-x-6">
898
+ <a href="#" class="text-gray-400 hover:text-secondary transition">
899
+ <i class="fab fa-twitter text-xl"></i>
900
+ </a>
901
+ <a href="#" class="text-gray-400 hover:text-secondary transition">
902
+ <i class="fab fa-youtube text-xl"></i>
903
+ </a>
904
+ <a href="#" class="text-gray-400 hover:text-secondary transition">
905
+ <i class="fab fa-github text-xl"></i>
906
+ </a>
907
+ <a href="#" class="text-gray-400 hover:text-secondary transition">
908
+ <i class="fab fa-discord text-xl"></i>
909
+ </a>
910
+ </div>
911
+ </div>
912
+ <div class="border-t border-gray-800 mt-8 pt-8 text-center text-gray-500 text-sm">
913
+ <p>© 2023 Cosmic GDScript. All rights reserved. Made with Godot Engine.</p>
914
+ <p class="mt-2">This is a fictional tutorial site created for educational purposes.</p>
915
+ </div>
916
+ </div>
917
+ </footer>
918
+
919
+ <script>
920
+ // Create twinkling stars
921
+ document.addEventListener('DOMContentLoaded', function() {
922
+ const starsContainer = document.getElementById('stars-container');
923
+ const starCount = 100;
924
+
925
+ for (let i = 0; i < starCount; i++) {
926
+ const star = document.createElement('div');
927
+ star.classList.add('star');
928
+
929
+ // Random properties
930
+ const size = Math.random() * 3;
931
+ const x = Math.random() * 100;
932
+ const y = Math.random() * 100;
933
+ const duration = 2 + Math.random() * 3;
934
+
935
+ star.style.width = `${size}px`;
936
+ star.style.height = `${size}px`;
937
+ star.style.left = `${x}%`;
938
+ star.style.top = `${y}%`;
939
+ star.style.setProperty('--duration', `${duration}s`);
940
+
941
+ // Random delay for twinkling
942
+ star.style.animationDelay = `${Math.random() * 5}s`;
943
+
944
+ starsContainer.appendChild(star);
945
+ }
946
+
947
+ // Track scroll progress
948
+ const progressBar = document.querySelector('.progress-bar');
949
+ const sections = document.querySelectorAll('section');
950
+ const totalSections = sections.length;
951
+
952
+ window.addEventListener('scroll', function() {
953
+ let visibleSections = 0;
954
+
955
+ sections.forEach(section => {
956
+ const rect = section.getBoundingClientRect();
957
+ if (rect.top < window.innerHeight && rect.bottom > 0) {
958
+ visibleSections++;
959
+ }
960
+ });
961
+
962
+ const progress = (visibleSections / totalSections) * 100;
963
+ progressBar.style.width = `${progress}%`;
964
+ });
965
+
966
+ // Enemy pattern demo
967
+ const enemyDemo = document.createElement('div');
968
+ enemyDemo.className = 'w-8 h-8 bg-red-500 rounded-full absolute enemy-pattern';
969
+ enemyDemo.style.top = '100px';
970
+ enemyDemo.style.left = '100px';
971
+ document.querySelector('#enemies').appendChild(enemyDemo);
972
+ });
973
+ </script>
974
+ <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=Imfuckinggoodbro/learning-gd" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
975
+ </html>
prompts.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ I need a site that teaches me in beguinner friendly way GDSCRIPT for Spaceship 2d games like gaiares, thunerforce and so on, about physics and even modernizing some concepts.Must be complete in all way around, from movement to itens, enemie pattern, waves, life bar, supper cannon, and even inplementin storyline.