|
|
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>
| |