amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Amiga, AmigaOS 4 > AmigaBASIC-Objekte in anderes Format konvertieren [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

04.08.2016, 14:56 Uhr

cgutjahr
Posts: 2781
[Administrator]
Ich habe hier eine Reihe von Grafiken im AmigaBASIC-Format. Sie werden mit
BASIC code:
OPEN "<filename>" FOR INPUT AS 1   
OBJECT.SHAPE 1,INPUT$(LOF(1),1)
CLOSE 1

geladen, was wohl bedeutet dass sie mit dem Object Editor von AmigaBASIC erstellt wurden. Kennt jemand eine Möglichkeit, diese Grafiken in ein "normales" Format zu konvertieren? Ich finde nichts dergleichen.

Alles was ich auftreiben konnte ist die Format-Beschreibung aus dem AmigaBASIC-Handbuch, so kompliziert ist das offensichtlich nicht, dafür muss doch jemand einen Konverter geschrieben haben?

code:
Words# 0-4 (32 Bit): unused, unused, depth, width, height
Words# 5-n (16 bit): A, B, C, data1, data2, data3, D

A     - bit 0: 1 if vSprite, 0 if bob
        bit 1: flag—is collision plane included in file? (unused in
        ObjEdit)
        bit 2: flag—is image shadow included in file? (unused in
        ObjEdit)
        bit 3: saveback (as described in the Amiga ROM Kernel
        Manual)
        bit 4: overlay (as described in the Amiga ROM Kernel Manual)
        bit 5: savebob (if set, use image as a "paintbrush"; see the
        Amiga ROM Kernel Manual)
B     - Plane pick (as described in the Amiga ROM Kernel Manual)
C     - Plane on/off (as described in the Amiga ROM Kernel Manual)
data1 - Sequential byte values of image: upper-left to lower-right of
        plane 1, upper-left to lower-right of plane 2, ...upper-left to
        lower-right of plane n in depth of n
data2 - Image-shadow bit plane (unused unless bit 2 of word A is set)
data3 - Collision bit-plane (unused unless bit 1 of word A is set)
D     - Six bytes for sprite colors if bit 0 of word A is set. (Only first
        four bytes are used)


[ - Antworten - Zitieren - Direktlink - ]

05.08.2016, 08:39 Uhr

thomas
Posts: 7716
Nutzer
@cgutjahr:

Hab noch nie davon gehört. Aber die Beschreibung ist wirklich simpel. Wenn du mir ein paar (oder alle) Testobjekte zur Verfügung stellst, kann ich dir einen Konverter schreiben.


--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

05.08.2016, 21:37 Uhr

cgutjahr
Posts: 2781
[Administrator]
Zitat:
Original von thomas:
Aber die Beschreibung ist wirklich simpel. Wenn du mir ein paar (oder alle) Testobjekte zur Verfügung stellst, kann ich dir einen Konverter schreiben.

Wow, vielen Dank!

Ich habe hier mal eine ganze Handvoll Objekte in dem Format hochgeladen:

http://gutjahr.hallenradsport-forum.de/files/amigabasic_objekte.zip

[ - Antworten - Zitieren - Direktlink - ]

06.08.2016, 09:46 Uhr

thomas
Posts: 7716
Nutzer
@cgutjahr:

Die Dateien enthalten keine Farbinformationen. Hast du noch ein AmigaBasic-Programm dazu, dem man die Palette entnehmen kann?

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

06.08.2016, 15:31 Uhr

jolo
Posts: 110
Nutzer
Ich kann nur spekulieren, aber da Shapes (der C16/Plus 4 lässt grüßen) auf dem Bob-Record aufbauen, denke ich, dass man keine Farben definieren muss - also die Farben nicht mit dem Objekt selber abgespeichert werden, es sei denn, man speichert das Objekt als Sprite, wobei dann allerdings nur vier Bytes auch nur drei Farben aufnehmen können (R4B4G4 - 12 Bit!) - ich denke, dass die transparente Farbe ausgespart wird. Ist aber nur eine Vermutung.

Hier die vordefinierten Farben des Kickstart v33/v34.
code:
Bitplane	Nummer	Farbe	Klartext
0		0	$05A	Blau 1
1		1	$FFF	Weiß 1
2		2	$002	Schwarz 1
		3	$F80	Orange
3		4	$00F	Blau 2
		5	$F0F	Pink
		6	$0FF	Türkis
		7	$FFF	Weiß 2
4		8	$620	Dunkelbraun
		9	$E50	Orange
		10	$9F1	Hellgrün
		11	$EB0	Ocker
		12	$55F	Hellblau
		13	$92F	Violett
		14	$0F8	Neongrün
		15	$CCC	Hellgrau 2
5		16	$000	Schwarz 2
		17	$E32	Rot
		18	$000	Schwarz 3
		19	$F96	Fleischfarben
		20	$444	Dunkelgrau 1
		21	$555	Dunkelgrau 2
		22	$666	Mittelgrau 1
		23	$777	Mittelgrau 2
		24	$888	Mittelgrau 3
		25	$999	Mittelgrau 4
		26	$AAA	Mittelgrau 5
		27	$BBB	Hellgrau 1
		28	$CCC	Hellgrau 2
		29	$DDD	Hellgrau 3
		30	$EEE	Hellgrau 4
		31	$FFF	Weiß 3


Das erste Hardware-Sprite (OCS-Sprites: maximal 16 Bits breit und 4 Farben, alle in Bitplane 5 angesiedelt) übernimmt immer die Farben der Bitplane 5, also standardmäßig transparent (Schwarz 2 wird nicht dargestellt), Rot, Schwarz 3 und Fleischfarben.
Öffnet man einen eigenen Bildschirm unter OS 1.2, 1.3, muss man auch zwingend die Farben (z.B. mit LoadRGB4()) verändern, ansonsten erhält man wieder diese vordefinierten Farben. In wie weit das Werkzeug zum Erstellen der Shapes das beim Abspeichern der Daten berücksichtig, kann ich nicht sagen. Um AmigaBasic und Basic im Generellen, habe ich immer einen großen Bogen gemacht.
Ich denke aber, dass man bei einer veränderten Farbpalette ohne den zugehörigen Basic-Quellcode nicht wirklich ein eins-zu-eins Abbild schaffen kann, da nur im Quelltext selber die Farben definiert sind - wozu soll man bei einem Bob (AmigaBasic nennt diese Shapes) denn eine Farbpalette mitgeben? Bobs sind nur binäre Datenwörter ohne Farbinformationen - das Remappen muss man heutzutage (True/Hicolour/256 Farbpalette) schon selber vornehmen. Aber wie gesagt, ohne den AmigaBasic-Quelltext, der die Farben definiert, wird es schwer.

Thomas, vielleicht helfen Dir die oben vordefinierten Farben ein bisschen weiter.

[ - Antworten - Zitieren - Direktlink - ]

06.08.2016, 15:58 Uhr

cgutjahr
Posts: 2781
[Administrator]
Zitat:
Original von thomas:
Die Dateien enthalten keine Farbinformationen. Hast du noch ein AmigaBasic-Programm dazu, dem man die Palette entnehmen kann?

Aua, gar nicht gesehen - das erklärt, warum es keinen Konverter gibt. Dämliche Idee, die Palette nicht mit zu speichern...

Die Beispiele stammen aus einem simplen Textadventure namens "Ghost", der Sourcecode ist hier (mit B2A aus dem Aminet de-Tokenized):

http://gutjahr.hallenradsport-forum.de/files/game.bas

Der Autor war offensichtlich Anfänger, ob das eleganter geht als er das gelöst hat, weiß ich nicht. Wenn nicht, wäre das ein ziemlicher Fail ;)

Die Palette wird mit dem Statement PALETTE definiert - pro Pen ein PALETTE Statement! Bei 32 Farben also 32 PALETTEs...

Die Syntax ist laut Handbuch PALETTE color-id, Red, Green, Blue wobei für R,G,B gilt:

Zitat:
The red, green, and blue parameters each contain a value from 0.00 through 1.00 indicating a decimal percentage of red, green, Combined, these parameters define a color.

Im Sourcecode werden drei Paletten definiert (s.u.), wobei colors2 wohl nur für "alien" und "gun" verwendet wird, die anderen beiden sich aber den Rest ziemlich aufteilen.

Ich habe hier eine Reihe von AmigaBasic-Sourcen, die ich mir fürs Aminet überprüfen wollte - Ich glaube nicht, dass das den Aufwand lohnt, extra einen Konverter zu schreiben der auch noch BASIC-Code parst...

so sind die Paletten notiert:

code:
colors1:
PALETTE 0,0,0,0
PALETTE 1,0,0,0
PALETTE 2,0,1,1
PALETTE 3,1,7.500000E-01,6.000000E-01
PALETTE 4,0,0,4.000000E-01
PALETTE 5,0,0,6.000000E-01
PALETTE 6,0,0,8.000000E-01
PALETTE 7,0,0,1
PALETTE 8,0,1.500000E-01,0
PALETTE 9,0,2.000000E-01,0
PALETTE 10,0,2.500000E-01,0
PALETTE 11,0,3.000000E-01,0
PALETTE 12,0,3.500000E-01,0
PALETTE 13,8.000000E-01,0,0
PALETTE 14,0,1.000000E-01,0
PALETTE 15,2.500000E-01,5.000000E-02,0
PALETTE 16,3.000000E-01,1.000000E-01,0
PALETTE 17,3.500000E-01,1.500000E-01,5.000000E-02
PALETTE 18,4.000000E-01,2.000000E-01,1.000000E-01
PALETTE 19,4.500000E-01,2.500000E-01,1.500000E-01
PALETTE 20,5.000000E-01,3.000000E-01,2.000000E-01
PALETTE 21,0,0,0
PALETTE 22,5.000000E-02,5.000000E-02,5.000000E-02
PALETTE 23,1.000000E-01,1.000000E-01,1.000000E-01
PALETTE 24,1.800000E-01,1.800000E-01,1.800000E-01
PALETTE 25,2.300000E-01,2.300000E-01,2.300000E-01
PALETTE 26,3.000000E-01,3.000000E-01,3.000000E-01
PALETTE 27,3.800000E-01,3.800000E-01,3.800000E-01
PALETTE 28,4.400000E-01,4.400000E-01,4.400000E-01
PALETTE 29,5.200000E-01,5.200000E-01,5.200000E-01
PALETTE 30,5.800000E-01,5.800000E-01,5.800000E-01
PALETTE 31,1,1,1
RETURN

colors2:
PALETTE 8,9.000000E-01,6.500000E-01,5.000000E-01
PALETTE 9,8.000000E-01,5.500000E-01,4.000000E-01
PALETTE 10,7.000000E-01,4.500000E-01,3.000000E-01
PALETTE 11,6.000000E-01,4.000000E-01,2.000000E-01
RETURN

colors3:
PALETTE 3,0,0,4.000000E-01
PALETTE 4,0,0,5.000000E-01
PALETTE 5,0,0,7.000000E-01
PALETTE 6,1.000000E-01,0,0
PALETTE 7,1.500000E-01,5.000000E-02,0
PALETTE 8,2.000000E-01,5.000000E-02,0
PALETTE 9,2.500000E-01,5.000000E-02,0
PALETTE 10,3.000000E-01,1.000000E-01,0
PALETTE 11,4.000000E-01,2.000000E-01,1.500000E-01
PALETTE 12,4.500000E-01,2.500000E-01,2.000000E-01
PALETTE 13,5.000000E-01,2.500000E-01,2.000000E-01
PALETTE 14,5.500000E-01,3.500000E-01,3.000000E-01
PALETTE 15,6.500000E-01,4.500000E-01,4.000000E-01
PALETTE 16,7.000000E-01,5.000000E-01,4.500000E-01
PALETTE 17,0,0,0
PALETTE 18,5.000000E-02,5.000000E-02,5.000000E-02
PALETTE 19,1.000000E-01,1.000000E-01,1.000000E-01
PALETTE 20,1.800000E-01,1.800000E-01,1.800000E-01
PALETTE 21,2.300000E-01,2.300000E-01,2.300000E-01
PALETTE 22,3.000000E-01,3.000000E-01,3.000000E-01
PALETTE 23,3.800000E-01,3.800000E-01,3.800000E-01
PALETTE 24,4.400000E-01,4.400000E-01,4.400000E-01
PALETTE 25,5.200000E-01,5.200000E-01,5.200000E-01
PALETTE 26,5.800000E-01,5.800000E-01,5.800000E-01
PALETTE 27,6.200000E-01,6.200000E-01,6.200000E-01
PALETTE 28,7.000000E-01,7.000000E-01,7.000000E-01
PALETTE 29,7.500000E-01,7.500000E-01,7.500000E-01
PALETTE 30,8.000000E-01,8.000000E-01,8.000000E-01
PALETTE 31,1,1,1
RETURN


[ Dieser Beitrag wurde von cgutjahr am 06.08.2016 um 18:53 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

06.08.2016, 18:41 Uhr

thomas
Posts: 7716
Nutzer
@cgutjahr:

Der Link funktioniert nicht, springt immer zur Hauptseite.

Den Code zu parsen ist nicht das Problem, wenn die Einträge immer so schön untereinander stehen.

Die Herausforderung ist, den Dateien die richtige Palette zuzuweisen, wenn im Programm mehrere Paletten vorkommen.


--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

06.08.2016, 18:53 Uhr

cgutjahr
Posts: 2781
[Administrator]
Zitat:
Original von thomas:
Der Link funktioniert nicht, springt immer zur Hauptseite.

Ups, Tippfehler:

http://gutjahr.hallenradsport-forum.de/files/game.bas

[ - Antworten - Zitieren - Direktlink - ]

06.08.2016, 19:07 Uhr

cgutjahr
Posts: 2781
[Administrator]
Zitat:
Original von thomas:
Die Herausforderung ist, den Dateien die richtige Palette zuzuweisen, wenn im Programm mehrere Paletten vorkommen.

Klar. Wenn du das wirklich machen willst, mach die Palette konfigurierbar oder konvertier einfach alle Bilder mit allen Paletten ;-)

Zitat:
Den Code zu parsen ist nicht das Problem, wenn die Einträge immer so schön untereinander stehen.
Hier nochmal komplett mit jeweils 32 Einträgen:

code:
colors1:
0,0,0,0
1,0,0,0
2,0,1,1
3,1,7.500000E-01,6.000000E-01
4,0,0,4.000000E-01
5,0,0,6.000000E-01
6,0,0,8.000000E-01
7,0,0,1
8,0,1.500000E-01,0
9,0,2.000000E-01,0
10,0,2.500000E-01,0
11,0,3.000000E-01,0
12,0,3.500000E-01,0
13,8.000000E-01,0,0
14,0,1.000000E-01,0
15,2.500000E-01,5.000000E-02,0
16,3.000000E-01,1.000000E-01,0
17,3.500000E-01,1.500000E-01,5.000000E-02
18,4.000000E-01,2.000000E-01,1.000000E-01
19,4.500000E-01,2.500000E-01,1.500000E-01
20,5.000000E-01,3.000000E-01,2.000000E-01
21,0,0,0
22,5.000000E-02,5.000000E-02,5.000000E-02
23,1.000000E-01,1.000000E-01,1.000000E-01
24,1.800000E-01,1.800000E-01,1.800000E-01
25,2.300000E-01,2.300000E-01,2.300000E-01
26,3.000000E-01,3.000000E-01,3.000000E-01
27,3.800000E-01,3.800000E-01,3.800000E-01
28,4.400000E-01,4.400000E-01,4.400000E-01
29,5.200000E-01,5.200000E-01,5.200000E-01
30,5.800000E-01,5.800000E-01,5.800000E-01
31,1,1,1
RETURN

colors2:
0,0,0,0
1,0,0,0
2,0,1,1
3,1,7.500000E-01,6.000000E-01
4,0,0,4.000000E-01
5,0,0,6.000000E-01
6,0,0,8.000000E-01
7,0,0,1
8,9.000000E-01,6.500000E-01,5.000000E-01
9,8.000000E-01,5.500000E-01,4.000000E-01
10,7.000000E-01,4.500000E-01,3.000000E-01
11,6.000000E-01,4.000000E-01,2.000000E-01
12,0,3.500000E-01,0
13,8.000000E-01,0,0
14,0,1.000000E-01,0
15,2.500000E-01,5.000000E-02,0
16,3.000000E-01,1.000000E-01,0
17,3.500000E-01,1.500000E-01,5.000000E-02
18,4.000000E-01,2.000000E-01,1.000000E-01
19,4.500000E-01,2.500000E-01,1.500000E-01
20,5.000000E-01,3.000000E-01,2.000000E-01
21,0,0,0
22,5.000000E-02,5.000000E-02,5.000000E-02
23,1.000000E-01,1.000000E-01,1.000000E-01
24,1.800000E-01,1.800000E-01,1.800000E-01
25,2.300000E-01,2.300000E-01,2.300000E-01
26,3.000000E-01,3.000000E-01,3.000000E-01
27,3.800000E-01,3.800000E-01,3.800000E-01
28,4.400000E-01,4.400000E-01,4.400000E-01
29,5.200000E-01,5.200000E-01,5.200000E-01
30,5.800000E-01,5.800000E-01,5.800000E-01
31,1,1,1
RETURN

colors3:
0,0,0,0
1,0,0,0
2,0,1,1
3,0,0,4.000000E-01
4,0,0,5.000000E-01
5,0,0,7.000000E-01
6,1.000000E-01,0,0
7,1.500000E-01,5.000000E-02,0
8,2.000000E-01,5.000000E-02,0
9,2.500000E-01,5.000000E-02,0
10,3.000000E-01,1.000000E-01,0
11,4.000000E-01,2.000000E-01,1.500000E-01
12,4.500000E-01,2.500000E-01,2.000000E-01
13,5.000000E-01,2.500000E-01,2.000000E-01
14,5.500000E-01,3.500000E-01,3.000000E-01
15,6.500000E-01,4.500000E-01,4.000000E-01
16,7.000000E-01,5.000000E-01,4.500000E-01
17,0,0,0
18,5.000000E-02,5.000000E-02,5.000000E-02
19,1.000000E-01,1.000000E-01,1.000000E-01
20,1.800000E-01,1.800000E-01,1.800000E-01
21,2.300000E-01,2.300000E-01,2.300000E-01
22,3.000000E-01,3.000000E-01,3.000000E-01
23,3.800000E-01,3.800000E-01,3.800000E-01
24,4.400000E-01,4.400000E-01,4.400000E-01
25,5.200000E-01,5.200000E-01,5.200000E-01
26,5.800000E-01,5.800000E-01,5.800000E-01
27,6.200000E-01,6.200000E-01,6.200000E-01
28,7.000000E-01,7.000000E-01,7.000000E-01
29,7.500000E-01,7.500000E-01,7.500000E-01
30,8.000000E-01,8.000000E-01,8.000000E-01
31,1,1,1
RETURN


[ - Antworten - Zitieren - Direktlink - ]

06.08.2016, 20:07 Uhr

thomas
Posts: 7716
Nutzer
Zitat:
Original von cgutjahr:
konvertier einfach alle Bilder mit allen Paletten ;-)


Das werde ich machen. Ich speichere alle Bilder dreimal mit unterschiedlichen Paletten und du suchst dir die richtigen heraus.


Zitat:
Ups, Tippfehler:

http://gutjahr.hallenradsport-forum.de/files/game.bas


Das Programm zeigt sehr schön, wie man nicht programmieren sollte...


--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

07.08.2016, 10:45 Uhr

thomas
Posts: 7716
Nutzer
Hier ist der Konverter nebst den konvertierten Bildern: http://thomas-rapp.homepage.t-online.de/download/abobj.lha


--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

07.08.2016, 17:32 Uhr

cgutjahr
Posts: 2781
[Administrator]
Zitat:
Original von thomas:
Hier ist der Konverter nebst den konvertierten Bildern

Sehr geil, vielen Dank! Echt super.

mogrify (aus dem imagemagick-Paket) beschwert sich zwar, aber die Konvertierung nach PNG hat trotzdem problemlos geklappt:

code:
ilbmtoppm: input is a 5-plane ILBM
ilbmtoppm: warning - file length/FORM size field mismatch (12472 != 12468+8)

Ich habe sicher noch mehr Beispiele von solchen Objekten herumliegen, wühle mich wie gesagt gerade durch einen Haufen BASIC-Sources durch. Ich werde mal versuchen, das selbst zu compilieren, wo landet denn der Output von palette.rexx?

Vielen Dank nochmal.

[ - Antworten - Zitieren - Direktlink - ]

07.08.2016, 18:55 Uhr

Bjoern
Posts: 1730
Nutzer
@thomas:
Avast blockiert deine Internetseite - Es wird eine Bedrohung erkannt, leider ohne weitere Aussage um was es geht. Vielleicht nur ein Fehlalarm, aber vielleicht lohnt es sich mal danach zu schauen.

Viele Grüße,
Björn

[ - Antworten - Zitieren - Direktlink - ]

07.08.2016, 20:09 Uhr

thomas
Posts: 7716
Nutzer
@cgutjahr:

palette.rexx brauchst du nicht, das war nur ein Experiment.

Du musst auch nichts kompilieren. Einfach zwei Verzeichnisse, z.B. in und out. Nach in kopierst du alle Dateien, die du konvertieren möchtest, out bleib leer, da kommen die konvertieren Dateien rein.

Dann machst du noch ein palette.txt. Das muss so aussehen, wie die aktuelle palette.txt. Wichtig sind name: und PALETTE. "name" wird in den Dateinamen der konvertierten Dateien übernommen.

Dann einfach aufrufen:

convert in out palette.txt


@Bjoern:

Avast interessiert mich nicht. Der macht immer nur Fehlalarme.


--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

07.08.2016, 20:51 Uhr

Bjoern
Posts: 1730
Nutzer
@thomas:

War ja auch nur ein Erfahrungsbericht :)

Grüße,
Björn

[ - Antworten - Zitieren - Direktlink - ]

16.08.2016, 15:48 Uhr

cgutjahr
Posts: 2781
[Administrator]
@thomas:

Wollte eigentlich erst noch weitere Bilder finden und konvertieren um dann ein Fazit zu posten, komme aber im Moment zu gar nichts.

Deswegen nachträglich nochmal vielen Dank für die super Aktion!

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Amiga, AmigaOS 4 > AmigaBASIC-Objekte in anderes Format konvertieren [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.