kategoria: Programy
[#1] Hash Anim
link

Udostępniam konwerter do animacji typu hash. Co to? Za starych czasów Martin Hash (dziś programy na PC) stworzył cały zestaw programów do generowania animacji (Apprentice, Rotoscope itd.). Jednocześnie Martin był członkiem grupy opracowującej format IFF-ANIM. Jednak do swoich programów zastosował odmianą bardziej przydatną w przypadku renderowania. Składa się ona z katalogu obrazków delta o rozszerzeniu: *.PAC, *.SPAC32L czy *.FPAC16H. Nie znacie? Nie szkodzi, animacji stworzonych tymi programami jest naprawdę mało i są raczej kiepskie.

Program powstał w wyniku poszukiwań animacji z opcode=4. Jest mnóstwo animacji z opcode=3 oraz 5, a gdzie są czwórki. Przeszukałem bardzo dużo starych animacji i programów, no i prawie nic. Programy do tworzenia i odtwarzania jednak były. Znalazły się też 2 animacje z opcode=l (małe L). Główny twórca formatu iff-anim Gary Bonham napisał playera showanim i jego najstarsza publiczna wersja to 3.0. Odtwarza ona tylko 2 rodzaje opcode: 2 i 3. Wersja 4.0 odtwarza opcode: 2,3,4,5 i l. Brakującym ogniwem w ewolucji okazała się wersja 3.5, która była dołączona do owych animacji z opcode=l. Animacje te wystawiono na jeden z konkursów. Analiza kodu showanim 3.5 wykazała, że animl to tak naprawdę anim4 sprzed standaryzacji. Showanim 3.5 zawiera eksperymentalne procedury:
Check	cmp.w	#2,d0
	beq.s	_SetDLTA

	cmp.w	#3,d0
	beq.w	_SetDLTAshort

	cmp.w	#4,d0
	beq.w	_SetDLTAshort4

	cmp.w	#$64,d0	; 'd'
	beq.w	_SetDLTAshort5

	cmp.w	#$65,d0	; 'e'
	beq.w	_SetDLTAshort5

	cmp.w	#$67,d0	; 'g'
	beq.w	_SetDLTAshort7

	cmp.w	#$6B,d0	; 'k'
	beq.w	_SetDLTAshort7

	cmp.w	#$6C,d0	; 'l'
	beq.w	_SetDLTAshort9
	rts

Do programu dolinkowana jest jeszcze _SetDLTAshort6, ale opcode jest nieznany. W tej wersji programu opcode=4 nie jest tożsame z oficjalnym opcode=4. Większość tych algorytmów to właśnie różne rodzaje czwórki. Wszystko (oprócz animl) zostaje usunięte w późniejszych wersjach showanim. Dlatego w starych animach nie pola flags. Tutaj przykładowy stary animhdr:

typedef struct {
   UBYTE operation; /* =0 for set, =1 for XOR, =2 long dlta, =3 short dlta */
   UBYTE mask;      /* mask,w,h,x,y used for XOR mode only */
   UWORD w,h;
   WORD  x,y;
   ULONG abstime; /* for timing w.r.t. start of anim file in jiffies - unused */
   ULONG reltime; /* for timing w.r.t. last frame in jiffies */
   UBYTE interleave; /* =0 for XORing to two frames back, =1 for last frame */
   UBYTE pad[21]; /* reserved for Jim Kent for an op array and plane destination.
                     Actually Jims use will only be 16 bytes probably - other
                     five are for general future use */
   } X_ANHD;

Martin Hash napisał własny player: display (wersja 1 jest fish disk 96). Odgrywa on hash anim, anim 3 i anim 4. Analiza kodu pokazuje dziwną zbieżność kodowania hash anim z anim 4. No i faktyczne tak jest. Tyle, że hash anim używa opcode=5. Jego Display jest dość ograniczony i nie odtwarza wszystkich rodzajów anim4. Już nie pamiętam, ale jak zmieniłem w animacji opcode l na 4 to działało. Po prostu jego anim4 nie uwzględnia pola flags oraz offsety nie mogą być zerowe.

Mój konwerter tworzy poprawne anim4xor poprzez połączenie klatek animacji hash w jeden plik. Może też przekodować na zwykłe anim4set lub standardowe anim5. Animacje hash anim mogą zawierać także klatki iff, więc faktycznie można stworzyć animację niekoniecznie stworzoną programami hash. Hash napisał oczywiście własne konwertery (flipper), ale ta obsługa w 1.3 to tragedia jest. Program skompilowałem na 020 i wymaga reqtools.
5
[#2] Re: Hash Anim

@cholok, post #1

OKOKOK
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem