|
|
| Line 1: |
Line 1: |
| − | [http://translate.google.com/translate?hl=de&ie=UTF-8&sl=de&tl=en&u=http://c64mags.untergrund.net/wiki/index.php%3Ftitle%3DDT_86_11&prev=_t English Translation]
| |
| − | <pre>
| |
| − | ALDI Android
| |
| − | Entstehungsgeschichte von Klaus Quindt
| |
| − | ________________________________________
| |
| | | | |
| − | Eigentlich habe ich für solche "Spiele-
| |
| − | reien" keine Zeit. Habe bei der Zusam-
| |
| − | menstellung der Kultpack 2 ein fades C64
| |
| − | Game entdeckt:
| |
| − |
| |
| − | ALDI Android mit EINEM Level.
| |
| − |
| |
| − | Optisch sieht das nicht mal so schlecht
| |
| − | aus.
| |
| − |
| |
| − | Warum, weiß ich auch nicht. Hat mich ir-
| |
| − | gendwie gereizt.
| |
| − | </pre>
| |
| − | <pre>
| |
| − | Habe das Spiel leicht verändert. Weil
| |
| − | man da keine Action draus machen kann,
| |
| − | habe ich das etwas mehr auf Logik aufge-
| |
| − | baut. D.h., für die gesammelten Symbole
| |
| − | gibt es Punkte.
| |
| − |
| |
| − | Gleichzeitig zählen die Punkte bei den
| |
| − | Laufwegen aber wieder runter. D.h., man
| |
| − | muss sich den effektivsten Laufweg aus-
| |
| − | denken, um mehr Punkte zu bekommen.
| |
| − |
| |
| − |
| |
| − | Zusätzlich gibt es noch "Bomben". Damit
| |
| − | kann man Mauern oder Hindernisse auflö-
| |
| − | sen. Dann gibt es noch unsichtbare "Fal-
| |
| − | len", wo man ein Leben verliert.
| |
| − | </pre>
| |
| − | <pre>
| |
| − | Außerdem ist die Steuerung etwas kompli-
| |
| − | ziert. Es gibt normale Laufrichtungen
| |
| − | links/rechts/hoch/runter sowie Sprünge
| |
| − | links/rechts. Das wäre ja kein Problem.
| |
| − |
| |
| − | Es gibt aber große und kleine Sprünge.
| |
| − | Wie soll man das abfragen? Ich wollte
| |
| − | keine zusätzliche Tasten an der Tastatur
| |
| − | aktivieren. Am PC kann man sowieso nur
| |
| − | mit den Pfeiltasten als Joystick agie-
| |
| − | ren.
| |
| − |
| |
| − | Zusätzliche Tasten sollten am PC auch
| |
| − | immer die gleichen sein (z.B. STRG oder
| |
| − | ALT). Am PC (Emulator) könnte man trick-
| |
| − | sen, so dass STRG und ALT reagieren.
| |
| − | </pre>
| |
| − | <pre>
| |
| − | Am C64 gibt es diese Tasten nicht. Wer
| |
| − | weiß auch, welche Taste man da drücken
| |
| − | müsste.
| |
| − |
| |
| − | Mir ist also folgender Kompromiss einge-
| |
| − | fallen: Will man Bomben zünden (Mauern
| |
| − | auflösen), geht das mit Feuer. Kleine
| |
| − | Sprünge links/rechts Feuer plus links/
| |
| − | rechts.
| |
| − |
| |
| − | Hier wirds schon kompliziert. Hier muss
| |
| − | alles schnell gehen. Feuer links/rechts
| |
| − | fast gleichzeitig. Ansonsten sind durch
| |
| − | Feuer die gesammelten Bomben gezündet.
| |
| − |
| |
| − | Große Sprünge (über 3 Felder).
| |
| − | </pre>
| |
| − | <pre>
| |
| − | Nach RECHTS: Feuer plus Joy nach unten.
| |
| − | Nach LINKS: Feuer plus Joy hoch.
| |
| − |
| |
| − | Ein Problem war die Tastaturabfrage. Das
| |
| − | wollte ich über Joystick regeln. Nun ha-
| |
| − | be ich aber fast alles vergessen. Im C64
| |
| − | Anleitungsheft waren wenigstens beide
| |
| − | Adressen (56320 und 56321) angegeben.
| |
| − |
| |
| − | 2 Zeilen Basic geschrieben:
| |
| − |
| |
| − | 10 PRINT PEEK(56320)
| |
| − | 20 GOTO 10
| |
| − |
| |
| − | Nun konnte ich sehen, welche Werte ange-
| |
| − | zeigt wurden. Gab aber noch ein Problem.
| |
| − | </pre>
| |
| − | <pre>
| |
| − | Normale Laufrichtungen. Diese Register
| |
| − | sind dann belegt.
| |
| − |
| |
| − | Es gibt dann aber noch kleine und große
| |
| − | Sprünge nach links/rechts. Ein kleiner
| |
| − | Sprung: Feuer und Joystick links/rechts.
| |
| − | Das war nun auch belegt.
| |
| − |
| |
| − | Großer Sprung geht so:
| |
| − | Sprung rechts: Feuer und Joystick runter
| |
| − | Sprung links: Feuer und Joystick vor
| |
| − |
| |
| − | Ich wusste ja nicht einmal, wie das mit
| |
| − | dem Zeichensatz ist. Da ich ja zusätz-
| |
| − | lich "Bomben" eingebaut habe, musste ich
| |
| − | den (einfachen) Zeichensatz ändern.
| |
| − | </pre>
| |
| − | <pre>
| |
| − | Ich hatte noch im Kopf dass der ab $2000
| |
| − | oder so abgelegt werden kann. Außerdem
| |
| − | war der vorhandene Zeichensatz so primi-
| |
| − | tiv, dass außer die paar Zeichen nichts
| |
| − | war.
| |
| − |
| |
| − | Da habe ich mich an das FINAL III erin-
| |
| − | nert. Da war doch was mit Zeichensatz im
| |
| − | Monitor.
| |
| − |
| |
| − | Richtig. Mit dem richtigen Monitorbefehl
| |
| − | konnte man den kompletten C64-Zeichen-
| |
| − | satz als Bits in Form von Sternchen se-
| |
| − | hen. Man muss nur ein Sternchen löschen
| |
| − | oder setzen, schon hatte man ein anderes
| |
| − | Zeichen. Ich musste nur herausfinden, wo
| |
| − | </pre>
| |
| − | <pre>
| |
| − | der Primitivzeichensatz von Android ab-
| |
| − | gelegt ist. Dann habe ich folgendes ge-
| |
| − | macht:
| |
| − |
| |
| − | Das Android Basic Programm schreibt nach
| |
| − | dem Start per DATA den Zeichensatz. Pro-
| |
| − | gramm abgebrochen und mit dem Modul den
| |
| − | Zeichensatz im Speicher auf Disk abge-
| |
| − | legt. Dann einen Teil des C64-Zeichen-
| |
| − | satzes nach $3000 transferiert. Den An-
| |
| − | droid-Zeichensatz geladen. Der hat dann
| |
| − | ein Teil überschrieben. Am Ende dann al-
| |
| − | les abgespeichert.
| |
| − |
| |
| − | So habe ich den Android-Zeichensatz et-
| |
| − | was vergrößert.
| |
| − | </pre>
| |
| − | <pre>
| |
| − | Ein weiteres Problem:
| |
| − |
| |
| − | Nur mit Feuer kann man, wenn man Bomben
| |
| − | gesammelt hat, Hindernisse auflösen.
| |
| − | Darum ist eine kleine Verzögerung einge-
| |
| − | baut.
| |
| − |
| |
| − | Noch ein Problem:
| |
| − |
| |
| − | Ich habe am C64 gedacht, aber auch am
| |
| − | Emulator. An der PC-Tastatur sollte es
| |
| − | nicht zu kompliziert werden.
| |
| − |
| |
| − | Beim PC wäre das fast egal. Da muss man
| |
| − | sowieso den "Joystick" mit den Pfeiltas-
| |
| − | ten steuern.
| |
| − | </pre>
| |
| − | <pre>
| |
| − | Es gab aber noch weitere Probleme: Wie
| |
| − | kann man so ein einfaches Spiel etwas
| |
| − | interessanter machen?
| |
| − |
| |
| − | Das EINZIGE Level war ja mit PRINT-Zei-
| |
| − | len aufgebaut. Weitere Level mit PRINT
| |
| − | gestalten, wäre Strafarbeit. Da fiel mir
| |
| − | das ACTION REPLAY ein. Das hat ja einen
| |
| − | Bildschirmeditor.
| |
| − |
| |
| − | Android gestartet und per Freezer in den
| |
| − | Editor. Da habe ich dann alles bis auf
| |
| − | die Umrandung ausradiert. Den Bildschirm
| |
| − | im Monitor nach $C000 transferiert und
| |
| − | anschließend die Sache als LEVEL 0 ge-
| |
| − | speichert.
| |
| − | </pre>
| |
| − | <pre>
| |
| − | Das erste Level habe ich dann im Pro-
| |
| − | gramm mit Pokes in den Bildschirm ge-
| |
| − | speichert.
| |
| − |
| |
| − | Der Aufbau war ätzend langsam. Zeile für
| |
| − | Zeile wurde langsam aufgebaut. Da habe
| |
| − | ich mir eine kleine Assemblerroutine ge-
| |
| − | codet, die den Bildschirm von $C000 nach
| |
| − | $0400 schaufelt. Gottseidank hatte ich
| |
| − | noch ein paar Grundkenntnisse.
| |
| − |
| |
| − | Zuerst mussten natürlich mehr Level her,
| |
| − | doch ohne Punkte ist's auch nichts. Ein-
| |
| − | fach nur die Symbole als Punkte zählen
| |
| − | wäre fade, weil ja keine Action drin
| |
| − | ist.
| |
| − | </pre>
| |
| − | <pre>
| |
| − | Ergo muss das Spiel mehr auf Logik auf-
| |
| − | gebaut werden. Da habe ich folgende Idee
| |
| − | gehabt:
| |
| − |
| |
| − | Jeder Schritt (Laufweg) bringt Punkteab-
| |
| − | zug. Findet man also den kürzesten Weg,
| |
| − | hat man mehr Punkte. Sammelt man Symbo-
| |
| − | le, verdoppeln sich die Punkte bei jedem
| |
| − | Symbol. Das 1. Symbol gibt einen Punkt.
| |
| − | Das nächste 2 Punkte, das dritte 4 Punk-
| |
| − | te usw.
| |
| − |
| |
| − | Verliert man ein Leben, werden 50 Punkte
| |
| − | abgezogen. Kommt man irgendwie nicht
| |
| − | weiter, kann man mit F1 das Spielfeld
| |
| − | neu aufbauen.
| |
| − | </pre>
| |
| − | <pre>
| |
| − | Man hat dann wieder 3 Leben, dafür wer-
| |
| − | den aber 200 Punkte abgezogen.
| |
| − |
| |
| − | Wie kreiert man aber neue Level ohne Le-
| |
| − | veleditor? Ganz einfach.
| |
| − |
| |
| − | Im Grundprogramm von Android habe ich
| |
| − | ein paar Zeilen rausgeschmissen. Dann
| |
| − | habe ich einen kleinen Vorloader, mit
| |
| − | dem man ein Level einladen kann. Level 0
| |
| − | ist z.B. ein Leerlevel. Will ich ein Le-
| |
| − | vel etwas ändern, lade ich das so ein.
| |
| − |
| |
| − | Für ein neues Level lade ich das leere
| |
| − | Level 0. Das Programm startet und zeigt
| |
| − | das leere Level.
| |
| − | </pre>
| |
| − | <pre>
| |
| − | Ich drücke dann den Freezeknopf am MK
| |
| − | Replay und dort die Taste T (Bildschirm-
| |
| − | editor). Der Zeichensatz ist natürlich
| |
| − | richtig eingestellt. Ich kann nun ganz
| |
| − | einfach ein Level bauen.
| |
| − |
| |
| − | Ein Druck auf Enter und ich befinde mich
| |
| − | wieder im Freezemenü. Dort in den Moni-
| |
| − | tor und den Bildschirm (ab $0400) nach
| |
| − | $C000 transferiert. Auf RESTART und ich
| |
| − | kann das Level testen.
| |
| − |
| |
| − | Funktioniert alles, wieder Freeze-Taste
| |
| − | drücken und dann im Monitor das Level
| |
| − | mit S:"Level X",8,C000,C3EF speichern.
| |
| − | Fertig.
| |
| − | </pre>
| |
| − | <pre>
| |
| − | Nun kam das nächste Problem: Wie kann
| |
| − | man aber die Level durchspielen?
| |
| − |
| |
| − | Das Programm besteht fast nur aus GOSUB
| |
| − | Zeilen. Damit nicht irgendwann der Spei-
| |
| − | cher überläuft, wird das Programm nach
| |
| − | einem geschafften Level neu gestartet.
| |
| − | So gehen aber auch alle Werte verloren.
| |
| − | Diese Werte (Punkte, Level) etc. werden
| |
| − | vorher in eine Speicherzelle gepoket.
| |
| − |
| |
| − |
| |
| − | Das Programm startet neu, liest die
| |
| − | Speicherzellen aus und weiß, welches Le-
| |
| − | vel geladen werden muss und wieviele
| |
| − | Punkte schon geholt worden sind.
| |
| − | </pre>
| |
| − | <pre>
| |
| − | Nun fehlt nur noch ein kleiner Vorloa-
| |
| − | der. Hat man ein Level geschafft, soll
| |
| − | ja das nächste Level automatisch star-
| |
| − | ten. Das ist so gelöst:
| |
| − |
| |
| − | In der ersten Zeile steht:
| |
| − |
| |
| − | IF PEEK(xxxxx)=1 THEN LOAD.......
| |
| − |
| |
| − | Ist das Level geschafft, wird in diese
| |
| − | Speicherzelle eine 1 gepoket und mit RUN
| |
| − | das Programm neu gestartet. So wird der
| |
| − | Loader für das nächste Level gestartet.
| |
| − |
| |
| − | Da stehen die Werte für die zu sammeln-
| |
| − | den Symbole (gepoket) drin usw.
| |
| − | </pre>
| |
| − | <pre>
| |
| − | Einerseits ist die Steuerung etwas ko-
| |
| − | misch, aber andererseits wird es etwas
| |
| − | schwierig. Das soll aber so sein. Level,
| |
| − | die man sofort schafft, werden uninte-
| |
| − | ressant.
| |
| − |
| |
| − |
| |
| − | Dann habe ich die selbstgebauten Level
| |
| − | getestet. Manchmal habe ich durch ein ?
| |
| − | (ist im Zeichensatz unsichtbar) unsicht-
| |
| − | bare Hindernisse eingebaut, an denen man
| |
| − | ein Leben verliert. Habe dann festge-
| |
| − | stellt, dass man diese Stellen sich sehr
| |
| − | schlecht merken konnte. Verliert man da
| |
| − | ein Leben, wird ein Punkt angezeigt. So
| |
| − | geht man da nicht erneut kaputt.
| |
| − | </pre>
| |
| − | <pre>
| |
| − | Musik:
| |
| − |
| |
| − | Da kann ich mich nur dumpf erinnern,
| |
| − | dass ich Musik gesammelt habe, die bei
| |
| − | $1000 lag und bei $1003 mit SYS zu star-
| |
| − | ten war. Wie ich das gemacht habe, weiß
| |
| − | ich nicht mehr.
| |
| − |
| |
| − | Eine theoretische Möglichkeit, die mir
| |
| − | gerade einfällt, wäre die: Ein kleines
| |
| − | Programm (Basic), das nicht über $1000
| |
| − | geht, laden (nicht starten). Die Musik
| |
| − | mit ,8,1 laden. Das Ganze dann im Cart-
| |
| − | ridge Monitor speichern. Im Basicpro-
| |
| − | gramm muss nur am Anfang SYSxxxx für die
| |
| − | Musik stehen.
| |
| − | </pre>
| |
| − | <pre>
| |
| − | Anfangs wollte ich schon aufgeben. Da
| |
| − | lief alles nicht richtig. Ich habe den
| |
| − | Fehler nicht finden können.
| |
| − |
| |
| − | Ich habe Zeilen gelöscht, die waren
| |
| − | trotzdem noch vorhanden. Bis ich merkte,
| |
| − | dass der Emulator ne Macke hatte. Emula-
| |
| − | tor beendet und neu gestartet. Da funk-
| |
| − | tionierte plötzlich alles.
| |
| − |
| |
| − | Fazit:
| |
| − |
| |
| − | Auch wenn die Scener mehr den Vice vor-
| |
| − | ziehen, ich finde den C64S besser, weil
| |
| − | einen Tick kompatibler (in Spielen und
| |
| − | bei Laderoutinen).
| |
| − | </pre>
| |
| − | <pre>
| |
| − | Nur das FINAL CARTRIDGE hat im C64S ne
| |
| − | Macke.
| |
| − |
| |
| − | Plötzlich funktioniert das Abspeichern
| |
| − | nicht mehr.
| |
| − |
| |
| − | Freezen kann man erst garnicht. Das Ab-
| |
| − | speichern funktioniert nicht.
| |
| − |
| |
| − |
| |
| − | ANDROID - EIGENE LEVEL BAUEN:
| |
| − |
| |
| − | Jeder kann Level bauen, wenn er das AC-
| |
| − | TION REPLAY hat. Das ist ganz einfach:
| |
| − | Man startet das Spiel und wenn ein Level
| |
| − | aufgebaut ist, drückt man den Freeze-
| |
| − | </pre>
| |
| − | <pre>
| |
| − | knopf. Man befindet sich im Freezemenü.
| |
| − | Wenn man da die Taste T drückt, befindet
| |
| − | man sich im Bildschirmeditor.
| |
| − |
| |
| − | Nun kann man Leitern, Mauern setzen etc.
| |
| − | Druck auf RETURN und man ist wieder im
| |
| − | Freezemenü.
| |
| − |
| |
| − | Dort wählt man MONITOR. Nun transferiert
| |
| − | man den Bildschirm (ab $0400) nach $C000
| |
| − | T0400 07E8 C000.
| |
| − |
| |
| − | Bedeutet: Transferiere den Inhalt von
| |
| − | $0400 bis $07E8 nach $C000. Zur Sicher-
| |
| − | heit gibt man ein: IC000 und scrollt die
| |
| − | Adressen.
| |
| − | </pre>
| |
| − | <pre>
| |
| − | Man kann erkennen, dass bei $C3E8 das
| |
| − | Ende ist. Ergo gibt man ein:
| |
| − |
| |
| − | S"LEVEL XX",8,C000,C3E8
| |
| − |
| |
| − | Das Level (S=SAVE) wird nun gespeichert.
| |
| − |
| |
| − | Danach verlässt man mit X wieder den Mo-
| |
| − | nitor und wählt RESTART.
| |
| − |
| |
| − |
| |
| − |
| |
| − |
| |
| − |
| |
| − |
| |
| − | _
| |
| − | </pre>
| |