-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathabandonware.html
1240 lines (959 loc) · 68.1 KB
/
abandonware.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./abandonwarestyle.css">
<link rel="shortcut icon" href="Images_FolderIMEAN_directory/FAVICOTONY.png" type="image/png">
<title>Moltony's Abandoned Projects (Revision 6.0.1)</title>
</head>
<body>
<a href="index.html">< go back to the horriblel index page</a>
<h1 id="h">Moltony's Abandoned Projects</h1>
<p>Over time I have written many, many, many programs and scripts. Many of them I abandon eventually. Here's a list of some
of the projects I have abandoned.</p>
<p>This page doesn't include maintenance mode projects (e.g. <a href="https://github.com/IAmMoltony/libmtnlog">MtnLog</a>)
and projects that don't need any more maintenance, such as <a href="https://github.com/IAmMoltony/useless-sh">useless-sh</a>.
</p>
<p>If you want to continue the development of any of the projects listed, then go ahead, no one is stopping you. Fork the repo
and add the changes you think are necessary.</p>
<fieldset id="toc">
<legend>Table of Contents</legend>
<ol>
<li>
<details>
<summary><a href="#ap1">Dodge Them All</a></summary>
<ol>
<li>
<a href="#ap1_gp">How the Gameplay is Like</a>
</li>
<li>
<details>
<summary><a href="#ap1_s">Settings</a></summary>
<ol>
<li>
<a href="#ap1_s_s">Skins</a>
</li>
<li>
<a href="#ap1_s_too">Trail on/off</a>
</li>
<li>
<a href="#ap1_s_dm">Developer mode</a>
</li>
</ol>
</details>
</li>
<li>
<details>
<summary><a href="#ap1_sd">Sound Design</a></summary>
<ol>
<li>
<a href="#ap1_sd_m">Music</a>
</li>
<li>
<a href="#ap1_sd_se">Sound Effects</a>
</li>
</ol>
</details>
</li>
<li>
<a href="#ap1_ff">Fun Facts</a>
</li>
<li>
<a href="#ap1_ur">Unity Remake</a>
</li>
<li>
<a href="#ap1_c">Conclusion</a>
</li>
</ol>
</details>
</li>
<li>
<details>
<summary><a href="#ap2">Dodge Them All Rewrite</a></summary>
<ol>
<li>
<a href="#ap2_tg">The Gameplay</a>
</li>
<li>
<a href="#ap2_ne">New Enemies</a>
</li>
<li>
<a href="#ap2_sd">Sound Design</a>
</li>
<li>
<a href="#ap2_c">Conclusion</a>
</li>
</ol>
</details>
</li>
<li>
<a href="#ap3">JSHS</a>
</li>
<li>
<a href="#ap4">Pikurosu</a>
</li>
<li>
<a href="#ap5">Squarity</a>
</li>
<li>
<details>
<summary><a href="#ap6">Number Go Up</a></summary>
<ol>
<li>
<details>
<summary><a href="#ap6_tg">The Gameplay</a></summary>
<ol>
<li>
<a href="#ap6_tg_whiydstk">What Happens If You Don't Spam The Keyboard</a>
</li>
</ol>
</details>
</li>
</ol>
</details>
</li>
<li>
<a href="#ap7">lwgh</a>
</li>
<li>
<details>
<summary><a href="#ap8">NDSvi</a></summary>
<ol>
<li>
<a href="#ap8_o">Overview</a>
</li>
<li>
<a href="#ap8_svf">Supported Vi Features</a>
</li>
</ol>
</details>
</li>
<li>
<details>
<summary><a href="#ap9">Paint DS</a></summary>
<ol>
<li>
<a href="#ap9_o">Overview</a>
</li>
<li>
<a href="#ap9_pt">Pencil Tool</a>
</li>
<li>
<a href="#ap9_et">Eraser Tool</a>
</li>
<li>
<a href="#ap9_ft">Fill Tool</a>
</li>
<li>
<a href="#ap9_st">Shape Tool</a>
</li>
<li>
<a href="#ap9_sd">Sound Design</a>
</li>
<li>
<a href="#ap9_c">Conclusion</a>
</li>
</ol>
</details>
</li>
<li>
<details>
<summary><a href="#ap10">DS-Craft</a></summary>
<ol>
<li>
<a href="#ap10_als">A little sidenote</a>
</li>
<li>
<a href="#ap10_g">Gameplay</a>
</li>
<li>
<details>
<summary><a href="#ap10_p">Problems</a></summary>
<ol>
<li>
<a href="#ap10_p_p1">Problem 1: I don't have a DS</a>
</li>
<li>
<a href="#ap10_p_p2">Problem 2: Stolen assets</a>
</li>
<li>
<details>
<summary><a href="#ap10_p_p3">Problem 3: Messy code, <i>very much so.</i></a></summary>
<ol>
<li>
<a href="#ap10_p_p3_g">The Game class</a>
</li>
<li>
<a href="#ap10_p_p3_p">The Player class</a>
</li>
<li>
<a href="#ap10_p_p3_iabic">Item and block ID conversions</a>
</li>
<li>
<a href="#ap10_p_p3_rt">Relevant terminology</a>
</li>
</ol>
</details>
</li>
<li>
<a href="#ap10_p_p4">Problem 4: The handling of bilinguality</a>
</li>
</ol>
</details>
</li>
<li>
<a href="#ap10_fv">My final verdict</a>
</li>
</ol>
</details>
</li>
<li>
<a href="#todo">To-do list</a>
</li>
<li>
<a href="#revhist">Revision history</a>
</li>
</ol>
</fieldset>
<!------------------------------------------------------------------------------------------------->
<h2 id="ap1">Abandoned Project One: Dodge Them All <a href="#h" class="up-button">up</a></h2>
<p><a href="https://github.com/IAmMoltony/DodgeSrc">Look at the de-compiled source code</a></p>
<p>Dodge Them All was the first time I used <i>Java</i> for game development. It's a simple 2D game where you dodge colored
squares. It's kind of like Touhou but without attacks or bomb and it's theoretically infinite. I made it when I was like 10.</p>
<p>The game was published on GameJolt <a href="https://gamejolt.com/games/dodgethemall/613793">here</a>. It even has a
description:</p>
<div class="quote">Dodge Them All is a small but intense game, where you have to dodge enemies and collect coins.<br>
Introducing:
<ul>
<li>Very basic enemy that everyone can dodge</li>
<li>Little bit faster enemy that 95% of people can dodge</li>
<li>Enemy with AI that is chasing you</li>
<li>Impossible boss (in my opinion) and his bullets</li>
<li>And C R A Z Y enemy that flashes and it is fast</li>
</ul>
And we can't forget to mention the retro-styled sounds and art, that was made in paint. The art includes skins (pokerface, my GD icon, spiral and recursion) and
enemies (the nerdy red one, :P one, doesn't know what is going on one and 3 variations of k r e j z i one).<br>
Update 1.2: fixed bugs, added new splashes<br>
And that is all! I think you will like this game. If you found bugs or something like that, let me know. #action #adventure #retro #arcade #other</div>
<p>I can't decide whether this description is cute or cringe.</p>
<p>So, how is the game actually like? Does it live up to the description? Let's take a look.</p>
<!------------------------------------------------------------------------------------------------->
<h3 id="ap1_gp">How the Gameplay is Like <a href="#h" class="up-button">up</a></h3>
<p>Opening up the game, we see the title screen:</p>
<img src="./img_abandonware/dta-ts.png" alt="Dodge Them All title screen, featuring the game name on top, bouncing squares in the background, and
yellow text, called the splash, reading 'variable splash might have already been assigned'. On the bottom half of the screen, three buttons
are visible: 'Play', 'Help' and 'Exit'." class="screenshot">
<p class="centered-text"><i>Dodge Them All title screen</i></p>
<p>This is.. a title screen alright. Also it runs at like 5fps, which is not that surprising considering my system is really
slow and the title screen background has bouncing blocks all over the place.</p>
<p>Now let's finally look at the gameplay! Pressing play we are greeted to the following.</p>
<img src="./img_abandonware/dta-firstplay.png" alt="The screen you see when clicking on 'Play' at the title screen. Text below
describes the image quite well." class="screenshot">
<p class="centered-text"><i>Dodge Them All gameplay</i></p>
<p>The game runs quite poorly even outside of the title screen. Really shows that I put zero effort into optimizing this game, doesn't it?
Whatever. Right off the bat, we can see:</p>
<ul>
<li>A white square. You play as him/them/her.</li>
<li>A coin. When a coin is collected, you're given some score. The amount of score is calculated by this formula: <b>100 + 10 * (current level - 1)</b></li>
<li>The HUD. It displays the player's health, score, current level, how many coins have been collected, how much score you need to level up,
some instructions telling us to press space to open the shop and a FPS counter.</li>
</ul>
<p>Each time you level up, an enemy spawns. Also, I encountered a bug where after going to the next level my character started
constantly going down for no reason. Bugs are something this game has a lot of. I did do some play testing but ultimately
I had no idea what I was doing and couldn't really solve many issues. For example, there's a bug that causes coins not to produce
sounds after collecting them (accompanied by an exception).</p>
<p>The player has 100 health initially. When you run out of health, the game is over. The game over screen looks like this.</p>
<img src="./img_abandonware/dta-over.png" alt="Dodge Them All's game over screen. It features the words 'Game over!' on the top
of the screen. Below that, the level that the player was on when the game over happened is displayed. On the bottom of the screen
a button for trying again is visible. The button text goes out of bounds of the button box." class="screenshot">
<p class="centered-text"><i>Dodge Them All's game over screen</i></p>
<p>Yup that's the game over screen. Looks basic, just like everything else in this game. I mean, the description did state that
its art was made in paint, so at least it's not lying. By the way, did you notice that cyan square guy? That's the result of
<i>me having absolutely no idea what the actual hell i was doing</i>, so for whatever reason not all enemies actually de-spawned
when you game-overed.</p>
<p>The game also has a boss, which is just a big red square shooting bullets, but I can't bother myself to actually play the
game enough to get to it. Maybe you'll reach it, it's not that hard.</p>
<p>The game also features a shop where you can buy upgrades. You can upgrade your speed (I don't know why you would do that in a
bullet-hell game), upgrade max health and refill health, all for coins you collect. Every time you buy something, it gets more and
more expensive.</p>
<!------------------------------------------------------------------------------------------------->
<h3 id="ap1_s">Settings <a href="#h" class="up-button">up</a></h3>
<p>This game actually has settings. They don't save, so they reset every time you start the game. There's a total of three settings:
<i>skin</i>, <i>enable/disable trail</i> and <i>developer mode</i></p>
<img src="./img_abandonware/dta-options.png" alt="Settings screen" class="screenshot">
<p class="centered-text"><i>Settings screen</i></p>
<!------------------------------------------------------------------------------------------------->
<h4 id="ap1_s_s">Skins <a href="#h" class="up-button">up</a></h4>
<p>The game has four skins to choose from: <i>Standard</i>, <i>Geometry Dash</i>, <i>Spiral</i> and <i>Recursion</i>. Here's how
each skin looks like:</p>
<table>
<tr>
<th>Skin</th>
<th>Name</th>
</tr>
<tr>
<td><img src="./img_abandonware/dta-skin-standard.png" alt="Standard skin"></td>
<td>Standard</td>
</tr>
<tr>
<td><img src="./img_abandonware/dta-skin-gd.png" alt="Geometry Dash skin"></td>
<td>Geometry Dash</td>
</tr>
<tr>
<td><img src="./img_abandonware/dta-skin-spiral.png" alt="Sprial skin"></td>
<td>Spiral</td>
</tr>
<tr>
<td><img src="./img_abandonware/dta-skin-recursion.png" alt="Recursion skin"></td>
<td>Recursion</td>
</tr>
</table>
<!------------------------------------------------------------------------------------------------->
<h4 id="ap1_s_too">Trail on/off <a href="#h" class="up-button">up</a></h4>
<p>This option is pretty self-explainatory. It allows you to disable trail in the game altogether, possibly boosting framerate.</p>
<!------------------------------------------------------------------------------------------------->
<h4 id="ap1_s_dm">Developer Mode <a href="#h" class="up-button">up</a></h4>
<p>This game has a developer mode built right in. It enables certain keys on the keyboard to do certain mischievous things.</p>
<table>
<tr>
<th>Key</th>
<th>Function</th>
</tr>
<tr>
<td>1</td>
<td>Spawn a random enemy</td>
</tr>
<tr>
<td>2</td>
<td>Spawn a basic enemy</td>
</tr>
<tr>
<td>3</td>
<td>Spawn a fast enemy</td>
</tr>
<tr>
<td>4</td>
<td>Spawn a smart enemy</td>
</tr>
<tr>
<td>5</td>
<td>Spawn a boss enemy</td>
</tr>
<tr>
<td>6</td>
<td>Spawn a crazy enemy</td>
</tr>
<tr>
<td>Escape</td>
<td>Quit the game (yes, this is locked behind developer mode)</td>
</tr>
<tr>
<td>R</td>
<td>Refill health back to 100</td>
</tr>
<tr>
<td>P</td>
<td>Print all game objects into the console</td>
</tr>
<tr>
<td>O</td>
<td>Set level to 8</td>
</tr>
<tr>
<td>I</td>
<td>Die instantly</td>
</tr>
</table>
<!------------------------------------------------------------------------------------------------->
<h3 id="ap1_sd">Sound Design <a href="#h" class="up-button">up</a></h3>
<p>There's one last thing I want to talk about before ending this section, and that is the game's <i>sounds</i>.</p>
<!------------------------------------------------------------------------------------------------->
<h4 id="ap1_sd_m">Music <a href="#h" class="up-button">up</a></h4>
<p>The game's soundtrack is super basic and quite mid. It was made in a program called Bosca Ceoil, which is a simple tool
for making music. There's nothing very special about it and it's like ten seconds long.</p>
<!------------------------------------------------------------------------------------------------->
<h4 id="ap1_sd_se">Sound Effects <a href="#h" class="up-button">up</a></h4>
<p>The sound effects are all "retro-styled" as the description puts it. They're all quite basic and not really worth talking about
in depth.</p>
<!------------------------------------------------------------------------------------------------->
<h3 id="ap1_ff">Fun Facts <a href="#h" class="up-button">up</a></h3>
<p>When <a href="https://github.com/IAmMoltony/DodgeSrc">decompiling the game</a>, I stumbled upon some interesting things, and in
this section we'll take a look at them.</p>
<ol>
<li>All settings are stored in a file called <span class="monospace">ExtraStuff</span>, which is quite a weird name.</li>
<li>
There's an error message in the game that goes something like this:
<p class="quote"><i>
Incorrect ID: (the ID). If this message is showing after you modded the game, make sure that player's ID (player creating is in Game.java) is set to ID.Player. But if this message is showing if you did not mod the game, contact developer of the game. Error code: Error.IncorrectID
</i></p>
<small>i really thought people would mod this game.</small>
</li>
<li>This game actually has a pause screen. I don't know how to activate it.</li>
<li>On levels 8-10 the screen flashes with random colors for whatever reason.</li>
<li>The game has a "fast testing" mode. During testing, I would change the initial screen to the main game screen and test new functions a bit faster. If it's detected that the initial screen is the main game screen, then it would place a player and a coin.</li>
<li>Basically every object in the game that generates random numbers has its own random number generator instead of using a shared one.</li>
</ol>
<!------------------------------------------------------------------------------------------------->
<h3 id="ap1_ur">Unity Remake <a href="#h" class="up-button">up</a></h3>
<p>At some point, I started working on a remake of this game using the Unity engine. It had three-dimensional graphics, original sprites
and that's as far as I remember of this game. I unfortunately can't show it to you since I lost the source code and don't have any screenshots.</p>
<!------------------------------------------------------------------------------------------------->
<h3 id="ap1_c">Conclusion <a href="#h" class="up-button">up</a></h3>
<p>Dodge Them All truly shows how much I have come in game development and programming in general in a relatively short amount of
time (~3 years). And even if this game isn't that special or that good, it still holds a special place in my heart.</p>
<!------------------------------------------------------------------------------------------------->
<h2 id="ap2">Abandoned Project Two: Dodge Them All Rewrite <a href="#h" class="up-button">up</a></h2>
<p>About a year after the release of <abbr title="Dodge Them All">DTA</abbr>, I remade the entire game in Electron using JavaScript. Unlike the original,
the rewrite is actually open source and can be found <a href="https://github.com/lispy2010/dodgethemall">here</a>, on GitHub. However,
running it isn't as easy as just downloading and running an executable - you'll have to install Node.JS and Electron. I might want
to publish pre-compiled builds.</p>
<p>I don't really consider this one "unfinished" per se, since I see the game as very complete, but there were some features I wanted to
include that didn't make the final cut.</p>
<p>When I tried to compile the game, I encountered several compilation issues. Luckily, all the compiled files were included in the
source code, which is generally not what you're supposed to do but I didn't really know how to keep a GitHub repository back then
so I'll let this one slide.</p>
<!------------------------------------------------------------------------------------------------->
<h3 id="ap2_tg">The Gameplay <a href="#h" class="up-button">up</a></h3>
<p>Unlike the last game, this one runs really well. Here's the title screen:</p>
<img src="./img_abandonware/dta-rw-title.png" alt="DTARW title screen" class="screenshot">
<p class="centered-text"><i>DTARW title screen</i></p>
<p>Do you see it? <b><i>A STYLIZED FONT!!</i></b> Yep, instead of using a default font, this time we have a good font. That is very
nice indeed. As per usual, the game's name, three buttons. Except this time, instead of an exit button we have a sandbox button. The sandbox
is a feature that was supposed to be included in the original game, but in a tragic series of events I lost the original source code and
couldn't write the feature anymore. Oh well. Instead of a yellow splash screen, we instead have a "Beta version!" label below the title
text. This actually is a beta version, because I wanted to implement a couple features but I'm lazy ahh hell and I just forgot. Splash text
is still in the game, but in a different form - now the game modifies the title of the window instead of adding text on the title screen.
There are a total of a lot of splashes, half of which are keyboard puns and jokes about this game being a rage game.</p>
<p>Enough rambling let's get into the action!!!!!!</p>
<img src="./img_abandonware/dta-rw-firstplay.png" alt="DTARW gameplay" class="screenshot">
<p class="centered-text"><i>DTARW gameplay</i></p>
<p>First impressions: way better than DTA. The background has little gray particles that kinda look like stars, the HUD is way better and the
performance is ten billion percent better. You can even pause it by pressing Escape! The original game also technically had pause functionality
when you go into the shop but having a dedicated pause screen is way nicer.</p>
<p>And what do you see? An enemy! The game prepares you to dodge enemies right from the beginning instead of giving you a random coin and expecting
you to collect it. The scoring system was also changed quite a bit. Instead of score being incremented every time you pick up a coin (which can be super
difficult when reaching higher levels with more enemies), score instead goes up automatically each frame. The shop is still here, and
worse than ever. The only item in the shop is a health boost - +10HP for 7 coins. Inflation really hit DTA...</p>
<!------------------------------------------------------------------------------------------------->
<h3 id="ap2_ne">New Enemies <a href="#h" class="up-button">up</a></h3>
<p>The rewrite still includes all of the same enemies that the original Java edition has, but more. Here's the full list of new guys
that joined the family:</p>
<ul>
<li>The rainbow guy. He bounces like a ball and changes color like a rainbow. This is my first original enemy idea for this game,
and it's quite cool <abbr title="in my opinion">IMO</abbr>.</li>
<li>The brown guy. This is like the red guy who bounces, but like really really slow.</li>
<li>The walking guy. He just walks...menacingly. He does not care about the player whatsoever.</li>
<li>The snake guy. He moves in a sine wave, like a snake!</li>
</ul>
<p>There's also the boss, but I'm not sure if he's actually functional. It's definitely a bug, since code that spawns the boss is
included and I remember it working. <abbr title="I don't know">IDK</abbr>...</p>
<p>One of the defining features of this remake is the <i>sandbox</i>. This is a place where you can make your custom enemy!</p>
<img src="./img_abandonware/dta-rw-sandbox.png" alt="DTARW sandbox screen. The player's custom enemy is contained in a box on the left." class="screenshot">
<p class="centered-text"><i>Sandbox screen</i></p>
<p>I'm quite proud of this interface. So clean, so nice... Designing this was an absolute nightmare because of the sheer amount of UI elements
in the sandbox. On the left, we have our custom enemy. He's in a box and can never escape. On the right, we can change the enemy however
we want. First, we have the speed controls - changing the X and Y velocity. Below that is the enemy color chooser - red, green, blue,
white, cyan, magenta, yellow and dark versions of all of them. There are two special buttons. The "?" button decides a color at random,
and the "!" button brings up a box where you can set a color yourself based on RGB values. On the very bottom there is an enemy reset
button which resets the enemy back to the same as a red one. Yeah, the sandbox is a bit underwhelming, but it is what it is.</p>
<!------------------------------------------------------------------------------------------------->
<h3 id="ap2_sd">Sound Design <a href="#h" class="up-button">up</a></h3>
<p>The game does a bit better in terms of sound design. They're still "retro-styled" and there is nothing to say about them. They're
alright. There's no background music to accompany you, though... I think that's better, actually. The ten-second track from the original
can definitely make someone go nuts if they play for an extended period of time. Not that anyone would do that, however.</p>
<!------------------------------------------------------------------------------------------------->
<h3 id="ap2_c">Conclusion <a href="#h" class="up-button">up</a></h3>
<p>The Dodge Them All Rewrite is just a better, shinier, faster version of Dodge Them All. I don't know what to say, really. It's great,
you should play it if you really want to idk do whatever tf you want i don't care</p>
<!------------------------------------------------------------------------------------------------->
<h2 id="ap3">Abandoned Project Three: <abbr title="JavaScript Home Server">JSHS</abbr> <a href="#h" class="up-button">up</a></h2>
<div class="unfinished-entry">
<img src="./graphics-interchange-format/AAAAAAAAA.gif" alt="UH oh">
<span class="unfinished-entry-text">This entry is very much unfinished.</span>
</div>
<p><a href="https://github.com/IAmMoltony/jshs">JSHS source code</a></p>
<p>JSHS is a simple home server software written in JavaScript. I made it when trying to make a home server. But then I found out about
CasaOS, which is a lot better, better, better, and also prettier. JSHS features a simple file manager, very primitive security in the form
of a single password, and that's basically it. I abandoned it once I found about about CasaOS, which was way better and more mature.</p>
<!------------------------------------------------------------------------------------------------->
<h2 id="ap4">Abandoned Project Four: Pikurosu <a href="#h" class="up-button">up</a></h2>
<p><a href="https://github.com/IAmMoltony/pikurosu">Pikurosu source code</a></p>
<p>Pikurosu is a Nonogram/Picross game for PC. It was superseded by nonoSharp, which is active and isn't pure spaghetti code. I stopped
working on this when I found out that C isn't a great language for game dev (some might argue), and I was much more familiar with C#. So
I switched to C# and made nonoSharp.</p>
<img src="./img_abandonware/pikurosu-ns.png" alt="Left: pikurosu. Right: nonoSharp" class="screenshot">
<p class="centered-text"><i>Comparison of pikurosu and nonoSharp</i></p>
<!------------------------------------------------------------------------------------------------->
<h2 id="ap5">Abandoned Project Five: Squarity <a href="#h" class="up-button">up</a></h2>
<p><a href="https://github.com/IAmMoltony/Squarity">Squarity source code</a></p>
<p>NO NOT DTA AGAIN!!! This was supposed to be a rewrite of <abbr title="Dodge Them All Rewrite">DTARW</abbr> in C++. I simply did not want to. I'm done with
this square dodge square thing!</p>
<p><small><i>a rewrite of a rewrite...</i></small></p>
<!------------------------------------------------------------------------------------------------->
<h2 id="ap6">Abandoned Project Six: Number Go Up <a href="#h" class="up-button">up</a></h2>
<p><a href="https://github.com/IAmMoltony/NumberGoUp">Number Go Up source code</a></p>
<p>Number Go Up is a very very very simple game where you have to make the number go up</p>
<p>I abandoned this one because I don't use Windows anymore on my system and setting up GMS2 (which is the engine this game uses), well I'm too lazy for
that</p>
<!------------------------------------------------------------------------------------------------->
<h3 id="ap6_tg">The Gameplay <a href="#h" class="up-button">up</a></h3>
<p>you spam your keyboard and number go up</p>
<!------------------------------------------------------------------------------------------------->
<h4 id="ap6_tg_whiydstk">What Happens If You Don't Spam The Keyboard <a href="#h" class="up-button">up</a></h4>
<p>number goes down</p>
<!------------------------------------------------------------------------------------------------->
<h2 id="ap7">Abandoned Project Seven: <abbr title="Lightweight GitHub">lwgh</abbr> <a href="#h" class="up-button">up</a></h2>
<div class="unfinished-entry">
<img src="./graphics-interchange-format/AAAAAAAAA.gif" alt="UH oh">
<span class="unfinished-entry-text">This entry is very much unfinished.</span>
</div>
<p><a href="https://github.com/IAmMoltony/lwgh">lwgh source code</a></p>
<p>lwgh is a CLI tool for accessing GitHub. I made it back when I didn't like using the browser at all, but looking back... Browser is better anyway.
Besides, the code I wrote for this little app was very spaghetti early on.</p>
<!------------------------------------------------------------------------------------------------->
<h2 id="ap8">Abandoned Project Eight: NDSvi <a href="#h" class="up-button">up</a></h2>
<p><a href="https://github.com/IAmMoltony/NDSvi">NDSvi source code</a></p>
<p>NDSvi is a text editor for the Nintendo DS heavily inspired by Vi. I created it because I wanted to edit some random save file manually for
<a href="https://iammoltony.github.io/ds-craft/index.html">DS-Craft</a>, but couldn't find a text editor app for the DS, at least not one that
supported editing arbitrary files. In the middle of making this editor, I discovered that it's possible to edit the
<a href="https://melonds.kuribo64.net">melonDS</a> emulated SD card files by simply removing the SD card image, editing the synced files in the
SD card sync folder and then opening the emulator. <small>Does that make sense?..</small></p>
<!------------------------------------------------------------------------------------------------->
<h3 id="ap8_o">Overview <a href="#h" class="up-button">up</a></h3>
<img src="img_abandonware/nv.png" alt="NDSvi screenshot. The editor is in insert mode. On the bottom screen is a keyboard with the usual English
QWERTY layout. The text on the top screen, typed by the user reads 'Hello, world' on the first line, then ':3' on the next line." class="screenshot">
<p class="centered-text"><i>NDSvi running in melonDS</i></p>
<p>This is quite familiar to any of you who use Vim (myself included). The editor is in insert mode, some text is in the buffer, and the touch
keyboard is there. How nice.</p>
<!------------------------------------------------------------------------------------------------->
<h3 id="ap8_svf">Supported Vi Features <a href="#h" class="up-button">up</a></h3>
<p>In the state that it's in, NDSvi supports the following features from Vi:<p>
<ol>
<li>Typing stuff in insert mode</li>
<li>Support for 'i', 'o', '0', '$', 'O', 'G', 'dd', 'gg', 'yy' and 'p' Vi keys</li>
<li>Saving files (doesn't seem to work sometimes)</li>
<li>Opening files</li>
<li>Displaying the version information</li>
</ol>
<p>Despite supporting many cool Vi features, it doesn't have scrolling, hjkl, and its architecture is overall flawed.</p>
<!------------------------------------------------------------------------------------------------->
<h2 id="ap9">Abandoned Project Nine: Paint DS <a href="#h" class="up-button">up</a></h2>
<p><a href="https://github.com/IAmMoltony/PaintDS">Paint DS source code</a></p>
<p>PaintDS is a painting program for the Nintendo DS written in C. I created it because, as is the case with NDSvi, I couldn't find a painting
application for the DS. I stopped developing this one because of two reasons: <i>poor architecture</i> and <i>me not being able to display text,
like, at all, no matter how hard i tried</i>. Let's take a look at it!</p>
<!------------------------------------------------------------------------------------------------->
<h3 id="ap9_o">Overview <a href="#h" class="up-button">up</a></h3>
<img src="./img_abandonware/pds.png" alt="Paint DS screenshot. Bottom screen: painting application with color selection and multiple tools. Top
screen: white lines on a light blue background." class="screenshot">
<p class="centered-text"><i>Paint DS running in melonDS</i></p>
<p>The top screen is the least interesting part. It's just a scrolling line pattern, intended just so that there's something on the top screen.
All the painting tools are on the bottom screen. On the bottom bar there are four tools: Pencil, Eraser, Fill and Shapes. On the top are the
tool properties. Let's take a look at each tool.</p>
<!------------------------------------------------------------------------------------------------->
<h3 id="ap9_pt">Pencil Tool <a href="#h" class="up-button">up</a></h3>
<p>The pencil tool is quite straightforward: touch the screen and draw whatever you like. You can even choose the color you want to draw with!
There's black, red, green, blue, cyan, magenta, yellow, gray, dark red, dark green, dark blue, dark cyan, dark magenta and dark yellow. If you're
wondering why there's no white color, that's because the eraser is used to draw in white (we'll look at the eraser in a bit). You can also choose
the width of the stroke: thin, medium and <b><i>T H I C C</i></b>. And that is all, no more, no less.</p>
<img src="./img_abandonware/pds-drawing.png" alt="A drawing made using Paint DS. It features a person and a sun." class="screenshot">
<p class="centered-text"><i>A (poorly drawn) picture drawn using the Pencil tool.</i></p>
<!------------------------------------------------------------------------------------------------->
<h3 id="ap9_et">Eraser Tool <a href="#h" class="up-button">up</a></h3>
<p>The eraser tool is used to erase stuff. By "erase" I mean draw with white. Yeah, this app doesn't support transparency, so that's pretty much
expected. You can either erase, wipe the whole screen or do a fill eraser (fill with white).</p>
<img src="./img_abandonware/pds-eraser.png" alt="A blank drawing with the eraser tool selected." class="screenshot">
<p class="centered-text"><i>The eraser tool interface</i>
<!------------------------------------------------------------------------------------------------->
<h3 id="ap9_ft">Fill Tool <a href="#h" class="up-button">up</a></h3>
<p>The fill tool is used to... fill. The color can be chosen from the same palette as the pencil tool.</p>
<img src="./img_abandonware/pds-fill.png" alt="A drawing made using Paint DS demonstrating the capabilities of the Fill Tool. It features a pink
blob character sleeping on what appears to be grass. The night sky is also visible." class="screenshot">
<p class="centered-text"><i>The fill tool in action</i></p>
<!------------------------------------------------------------------------------------------------->
<h3 id="ap9_st">Shape Tool <a href="#h" class="up-button">up</a></h3>
<p>The last tool available in Paint DS is the shape tool. It allows for the insertion of one of the five available shapes: triangle outline, filled
triangle, straight line, rectangle outline and filled rectangle. The color selection is the same as always.</p>
<img src="./img_abandonware/pds-shapes.png" alt="A drawing of a primitive house made using Paint DS, demonstrating the capabilities of the Shape
Tool." class="screenshot">
<p class="centered-text"><i>A primitive house created using the shape tool.</i></p>
<!------------------------------------------------------------------------------------------------->
<h3 id="ap9_sd">Sound Design <a href="#h" class="up-button">up</a></h3>
<p>This thing has one singular sound: the <i>pencil sound</i>. It plays when you draw.</p>
<!------------------------------------------------------------------------------------------------->
<h3 id="ap9_c">Conclusion <a href="#h" class="up-button">up</a></h3>
<p>Paint DS is an application with huge potential! It can allow people to create art on the go and that's... pretty much it? I don't know how to
market a painting app. Anyway, this is cool and all but the architecture was absolute garbage. And I couldn't figure out how to draw text on the
screen.</p>
<!------------------------------------------------------------------------------------------------->
<h2 id="ap10">Abandoned Project Ten: DS-Craft <a href="#h" class="up-buttons">up</a></h2>
<p><a href="https://github.com/IAmMoltony/ds-craft">DS-Craft source code</a></p>
<p>DS-Craft (not to be confused with other projects sharing a similar name) is a Minecraft demake for the Nintendo DS that coincidentally infringes on copyright.</p>
<h3 id="ap10_als">A little sidenote</h3>
<p>I have been putting off this entry since September of last year. But now, I'm actually writing it. I've just been very busy <!--<span class="comically-small-text">playing games and watching anime mostly</span>-->.</p> <!-- TODO fix this snarky remark -->
<h3 id="ap10_g">Gameplay</h3>
<p>Before diving into why I stopped developing this fairly big project and its technical debt stuff, let's dive into the gameplay of this very buggy and unoptimized mess.</p>
<p>The version we'll be looking at is <i>beta1.7.1</i>, the last full release. There have been quite a few commits since then but I can't be bothered to install the dev tools on my computer right now.</p>
<img src="./img_abandonware/dsc.png" alt="DS-Craft title screen." class="screenshot">
<p class="centered-text"><i>DS-Craft title screen.</i></p>
<p>What a beautiful title screen. With the logo on the top, three nice buttons and...</p>
<p>...<i>errors?</i> Right away?</p>
<p>Well, they don't seem to be causing any harm so let's press play and make a new world. Besides, they go away once the game is restarted, so there's no reason to worry about them.</p>
<img src="./img_abandonware/dsc_ws.png" alt="DS-Craft world selection screen." class="screenshot">
<p class="centered-text"><i>World selection screen</i></p>
<p>What a nice little screen. Unfortunately, we don't have any worlds. Let's make one, then, shall we?</p>
<img src="./img_abandonware/dsc_cw.png" alt="DS-Craft world creation screen." class="screenshot">
<p class="centered-text"><i>World creation screen</i></p>
<p><i>Can you tell I'm a Touhou fan? :)</i></p>
<p>Anyway, the world has been created. Here's how it looks in the world selection screen:</p>
<img src="./img_abandonware/dsc_ws2.png" alt="DS-Craft world selection screen, with a world this time." class="screenshot">
<p class="centered-text"><i>World selection screen with our new world</i></p>
<p>Let's hop into it, and!..</p>
<p>...</p>
<p>It uhh crashed</p>
<p>I have been aware of this issue for quite some time now, new worlds are sometimes broken. I have not really been able to find a fix to this issue, so the only solution is to make worlds over and over again, hoping that, eventually, one of them will work.</p>
<p>After what felt like hours of opening the game, creating the world and seeing the dreaded "Shutdown" message, we see this.</p>
<img src="./img_abandonware/dsc_gaming.png" alt="DS-Craft gameplay screenshot." class="screenshot">
<p class="centered-text"><i>Epic gameplay</i></p>
<p>Oh my, what do we see here. This certainly does look like Minecraft, since I literally stole its textures. We also see some glitchy floating grass and the world is casually just chopped off in the middle. There's also a health bar on the bottom and the hotbar of five slots as well.</p>
<p>This game even has living creatures other than the player in the form of <i>the pig!</i></p>
<img src="./img_abandonware/dsc_gaming_pig.png" alt="DS-Craft gameplay with a pig visible on the left." class="screenshot">
<p class="centered-text"><i>Epic pig</i></p>
<p>Its code is super janky and it often falls off the world, they're not very important anyway.</p>
<p>Let's build something, this is Minecraft after all. Aiming is done via the touchscreen, moving is done using the D-pad, and the buttons are for different actions. Key bindings are able to be changed in the settings. To build something, we'll need some blocks first.</p>
<img src="./img_abandonware/dsc_gaming_mining.png" alt="DS-Craft gameplay of some dirt blocks being mined." class="screenshot">
<p class="centered-text"><i>Mining blocks and stuff</i></p>
<p>And here's our little dirt shack.</p>
<img src="./img_abandonware/dsc_gaming_house.png" alt="DS-Craft gameplay with house." class="screenshot">
<p class="centered-text"><i>The classic dirt house</i></p>
<p>Well, that's our little house with no entrance or exit. There are actually doors and trees and other interesting blocks in the game but since I got such an unfortunate world, I only have dirt and flowers. Can't even make any tools! Not like it matters anyway.</p>
<p>There's much more content in the game that what is covered here, but this isn't really a game journal article, so let's get straight to the:</p>
<h3 id="ap10_p">Problems <a href="#h" class="up-button">up</a></h3>
<p>And there's quite a bit, and also many that I may have missed.</p>
<h4 id="ap10_p_p1">Problem 1: I don't have a DS <a href="#h" class="up-button">up</a></h4>
<p>Why the hell did I make DS games if I didn't own a DS? For the challenge factor? I can't remember and I don't think it matters. Me not having a real DS, only relying on emulators, has resulted in the game being, at the very least, not very easily installable on the real deal, the only testing the game got was on an emulated environment, where everything <i>Just Works™</i>. I don't make games for this system anymore for reasons that I really hope are obvious now.</p>
<h4 id="ap10_p_p2">Problem 2: Stolen assets <a href="#h" class="up-button">up</a></h4>
<p>As mentioned earlier, and very obvious when looking at screenshots, basically every single one of the game's assets is straight-up ripped from Minecraft. Only some textures are changed to fit the limited, flat two-dimensional world. Even the sounds are stolen. I could have taken the textures from some resource pack under a permissive license and found the sounds on something like freesound, but the clueless, young and foolish me at the time didn't really know about copyright too much, so... that doesn't make anything better. Probably makes it worse. Don't be surprised if the repository for the game gets taken down, if it does, I'll try what I can to replace all the assets.</p>
<h4 id="ap10_p_p3">Problem 3: Messy code, <i>very much so.</i> <a href="#h" class="up-button">up</a></h4>
<p><i>Slight warning: nerd talk ahead. Do not be confused if you can't understand some sections. This is more of a code review more than anything, skip this section if you don't feel like burdening yourself with the technical stuff. I did try to provide explanations for some terms that you can find below this section, but if you don't really get it, that's okay. I don't really get it either.</i></p>
<p><i>A sidenote slighter than the warning above: all the self roasting is genuine, and I don't know about you, but... I think that's a good thing. Roasting your old self means you have grown as a person. Even if I lean a bit into the negative tone.</i></p>
<p>This game's code is pretty bad, filled with TODOs, being very long (I'm talking literal thousands of lines for some files) and very unmaintainable.</p>
<p>We'll bisect the problematic sections. Piece. By. Piece.</p>
<h5 id="ap10_p_p3_g">The Game class <a href="#h" class="up-button">up</a></h5>
<p>The Game class<sup>1</sup> is what happens when you shove everything, and I mean <i><u><b>EVERYTHING</b></u></i> together into one, single, unnavigatable, unmaintainable, demonically long file, of 2832 lines that make you wish you had never even started.</p>
<p><i>makes it sound kind of scary, huh?</i> That's because it is. I still get nightmares from this game's obnoxiously convoluted code.</p>
<p>When taking a marathon-long stroll in the file, we can notice that every single game state is handled here. This would be fine if all the game states were in their own separate files, having everything neatly organized where it needs to be, but nuh uh. All the code for the UI, all the calls to update blocks and the player, everything is in two giant functions of the Game class: <i>update()</i> and its malevolent sibling, <i>draw()</i>.</p>
<p>There are also like zero comments<sup>2</sup>, besides the occasional depression-filled cry for help or explaining something very obvious if you have these things called <i>eyes</i>.</p>
<img src="./img_abandonware/dsc_code_mia.png" alt="Screenshot of the aforementioned Game class. There's a comment at the top stating 'man idk anymore'." class="screenshot">
<p class="centered-text"><i>Well, me neither!</i></p>
<p>If I were to rewrite this game class, given infinite time, my current knowledge and some delicious pu'er tea while we're at it, I would split everything into its own file. That would make everything so much easier to maintain and find!</p>
<h5 id="ap10_p_p3_p">The Player class <a href="#h" class="up-button">up</a></h5>
<p>The Player class is really important: it handles the player. And also playing block sounds. And the entire HUD. And the sign editing interface (yes, this game has signs that you can write stuff on). And the chest interaction interface. And <i>spawning block particles that appear upon breaking blocks.</i> And maybe some other things I haven't been able to find, but that should give you an idea of how much bloat and crap is inside my poor code.</p>
<p>Also, the way block placing and breaking is done is borderline stupid. These two actions are both a giant switch statement<sup>3</sup> that just have the exact same code, but the block class is changed to correspond with the item. Madness in its purest form.</p>
<p>Also (also), something that <i>should</i> at a first glance be handled by the player class - picking up items - is done in the Game class instead??? <i><b>Why is it handled there???</b></i> I am at a loss for words, next terribly written file, please.</p>
<p>If I were to rewrite this player class under the same conditions as above, I would move everything into its own class. Player in its own class, HUD in its own class, inventory... ahh yeah it's already in its own class. But it's still drawn by the player for some reason, so I'd move the code for drawing inventories into the inventory class as well. That would be neat. And, of course, move every other major feature that the player class does that it probably shouldn't, into its own class.</p>
<h5 id="ap10_p_p3_iabic">Item and block ID conversions <a href="#h" class="up-button">up</a></h5>
<p>Item and block ID conversions are necessary for saving the game. IDs of blocks and items are saved in a different way in save files than in the actual game. This isn't something out of the ordinary, conversions tend to happen often in game save files, but they should not be written like in DS-Craft.</p>
<p>Our current example is item.cpp, a file containing both the implementation for the InventoryItem class (which is pretty straightforward, no complaints here) and the ID conversion functions. We're going to discuss the latter because these are lazy, copy-pasted functions that, while they do work, they are insanely long and kind of not very good.</p>
<img src="./img_abandonware/dsc_code_its.png" alt="The iidToString function. No comment here." class="screenshot">
<p class="centered-text"><i>And it just goes on and on and on...</i></p>
<p>The first function we'll look at iidToString, which, as you might be able to guess, converts an item ID to a string. Save files in this game store the item IDs as strings, not numbers! Why, you might ask? Can't you just turn the enums<sup>4</sup> into numbers (like you already do in some places!) directly? And the answer is yes, yes I can, but Youngtony (let's give this cringe name to past, cringe me) decided to organize the item ID enum by putting related items next to each other. This sounds like a good idea, but here's the catch: if we do this and save the item IDs as numbers directly, when we add a new item, we break existing save files and suddenly the player has all their diamonds replaced with dirt or something. I'll give a visual example as well, so you get it.</p>
<p>We'll assume that the table below is the item ID enum for version 1 of the game.</p>
<table>
<tr>
<th>
Item numerical ID
</th>
<th>
Item name
</th>
</tr>
<tr>
<td>
1
</td>
<td>
Dirt
</td>
</tr>
<tr>
<td>
2
</td>
<td>
Stone
</td>
</tr>
<tr>
<td>
3
</td>
<td>
Diamond
</td>
</tr>
</table>
<p>And now the developer releases version 2 of the game. They add a new item - <i>Watermelons</i>. The developer makes the grave mistake of putting watermelons after stone, however, so the table now looks like this.</p>
<table>
<tr>
<th>
Item numerical ID
</th>
<th>
Item name
</th>
</tr>
<tr>
<td>
1
</td>
<td>
Dirt
</td>
</tr>
<tr>
<td>
2
</td>
<td>
Stone
</td>
</tr>
<tr>
<td>
3
</td>
<td>
Watermelon
</td>
</tr>
<tr>
<td>
4
</td>
<td>
Diamond
</td>
</tr>
</table>
<p>See that? Between version 1 and version 2, item ID 3 became watermelon instead of diamond. Meaning that, if a player opened a world saved back in version 1 in the new version 2, all their diamonds would turn into watermelons. Don't get me wrong, watermelons are cool, but it's so disheartening seeing all your hard-earned diamonds turn into watermelons after updating.</p>
<p>But this mistake is so easy not to do, it would be more baffling if it's missed during testing than not. So all I had to do was put all the items after the last one, sure, the code would be a bit messier, but that little messiness makes for way, way less typing every time I add one (1) item.</p>