Archiv der Kategorie: gamedesign

Atari ST – keine Hardwaresprites aber Memory fürs PreRendering – das Display nur virtuell und schnell genug mit Tricks

Der Atari ST war bekanntlich ein 68k-Computer schnell zusammengebaut, nachdem Jack Tramiel (gerade von Commodore) gewechselt trotz Zusammenarbeit mit der Amiga Firma, den Zuschlag dann doch nicht gekriegt hat und der Amiga an Commodore ging. Durch die sehr schnelle Entwicklung war der Atari ST ein richtiger Computer. Er bestand aus einem Prozessor und viel RAM. Ohne Hardware-Unterstützung mussten alle Sprites in Echtzeit berechnet werden. Darum gab es eher wenige davon. Bis ein Kniff auftauchte – man konnte diese Sprites ja vorberechnen. Das Problem ist nämlich auch hier: Der Screen ist in 8Pixel eingeteilt, man muss also Pixel über diese Byte-Grenze bewegen oder in Assembler „Rollen/Shiften“ und den überschüssigen Pixel dann im wieder im nächsten Byte einfügen etc. Ein komplexes und vorallem rechenzeitlastiges Problem. Da hilft dann eben alle 16 Verschiebungen schon vorher zu machen und einfach die geeigneten Blöcke zu kopieren bzw. zuerst die Maske auschhneiden und den Rest darüber legen. Und in diesem Bereich ist der 68k schnell mit movem- und co. Und macht damit fast die Vorteile des Blitters des Amiga wet..

Vereinfacht sieht dies Folgendermassen aus. Das wäre eine monochromer Screen (nicht erklärt: 16 Farben werden in 4 Layern untergebracht – Bitplanes):

Anbei sieht man eine solche automatisch generierte Masse von 16 x 2er Bläcken und daneben die Maske. Aus dem Spiel TheHolyCube (Atari ST) extra visualisiert, da die Daten nicht so nebeneinander liegen.
Damit erreicht man relativ einfach 32 * 16×16 Sprites pro Frame.

Weiterlesen

Der neue digitale Raum und seine Szenen (GameDev, Cracker, Demoscene …) [wird upgedated]

Eine der interessantesten Fragen zur Homecomputerzeit und ihren Bewegungen ist sicherlich der teilweise gemeinsame Ursprung verschiedenster Szenen und die Ausdifferenzierung danach in verschiedenste Felder. Es stellt sich sogar die Frage, ob diese Ausdifferenzierung auch zur Differenzierung gegenüber anderen Bereichen geführt hat.

Versuch einer Einschätzung:

CategoryBusinessGameDesignCrackersceneDemosceneVirendevsceneArt/MediaArt
produktappsgamescrackerintros, trainerdemosvirenkunst
soz. produktfirmencomm. / firmencrackergroups, metachallenge/gamedemogruppen,
metachallenge
öffentlich++++++“+/-+/-+
intern. öffentlichkeit+++++++ (handles)+++ (handles)?
visuellgui+++++++
art visuellanal. vorbilderanal/abstract+- abstract
auditiv+++++++
interaktiv++++– (trainer)+
coding+++++++++++++
unterhaltung+++++++/-
art unterhaltunginterakt.interakt. spielelinearlinear
scene (motivation)marktmarkt/challenge„markt“/challengechallengechallenge
kompensation
geld
geld/ruhm,
(symbl.)
symbolisches kapital, scene
(geld)
symbolisches kapital, scenesymbolisches kapital, spass
quereffekte/learnings
(findings)
coding, technologie lernencoding lernen,
reverse ingenieering
coding lernen,
tricks
gefährlich, ungeliebt

// ToDo: klare Trennung – Scene – Produzent – Produkt – Consumer
// ToDo: Add costs

Exhibition: Vergleich Dev-Perspektive [Wird upgedatet]

Für eine Ausstellung wäre es gut, die verschiedenen Aspekte vermutlich tabellarisch zu erfassen. Also wie haben sich die Dinge entwickelt.

Coding

Konstrukt8Bit (Assembler) 650216Bit(Assembler) 68000C#
Möglichkeiten8 Datenregister zum Rechnen
D0-D8
8 Datenregister (B,W oder L)Diverse Datentypen:
Bool
Int
Float
Double
String
Objekte, Klassen
Add/Subadd #4,d1
Problem: über 255
sub #4,d1
Problem: unter 0
add.b #1,d0
add.w #1,d0
add.l #1,d0
d++
d=d+1
d+=1
Überfläufe werden kontrolliert.
Multiplikationnur mit Bitshifting
> < *2 / 2
nur mit Bitshifting
> < *2 / 2
Floating etc
Vergleich cmp #5,d0
bne not5

; code
not5:

Problem:
– Control bits
– 2er oder 10er System
– Max. Sprungweite!
– Kein copy-paste ohne Anpassung >Fehleranfällig
cmp.l #5,d0
bne not5

; code
not5:





Problem:
– Kein copy-paste ohne Anpassung >Fehleranfällig
if (d==5) {

}
For-Next move #0,d0
f010:
inc d0
cmp #5,d0
bne f010

move.l #5,d0
f010:

dbra d0,f010

for (int i=0;i<5;i++) {
}

Objekt-VerwaltungSimulation von Objekten durch Listen
; objekt id,x,y
dc.b 1,5,10
dc.b 4,30,90
Probleme: x>255
Simulation von Objekten durch Listen
; objekt id,x,y
dc.w 1,5,10
dc.w 4,30,90
Class GObject {
int id = 1;
int x = 100;
int y = 30;
}
GObject[] arrObs = new GObject[3];

Verwaltung der Objekte auch oft über die Objekte im Szenentree

// Weitere Beispiele von Komplexität und Auswirkungen in der Praxis