DT 86 11

From C64 Diskmag Wiki
Revision as of 21:31, 24 May 2010 by Nyquist (Talk | contribs)

(diff) ←Older revision | view current revision (diff) | Newer revision→ (diff)
Jump to: navigation, search

English Translation

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






                                       _
Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox