wisp.c OK

This commit is contained in:
theo3 2020-08-05 20:47:10 -07:00
parent 1db148cd09
commit 83e6edf470
21 changed files with 300 additions and 492 deletions

View File

@ -1994,35 +1994,4 @@ _0807C956:
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7, pc}
.align 2, 0
thumb_func_start sub_0807C960
sub_0807C960: @ 0x0807C960
push {lr}
adds r2, r0, #0
movs r0, #1
rsbs r0, r0, #0
cmp r1, r0
beq _0807C994
ldr r0, _0807C984 @ =0x7FFFFFFF
ands r0, r1
ldr r1, _0807C988 @ =gUnk_08324AE4
adds r1, r0, r1
lsrs r0, r2, #0x18
cmp r0, #6
bne _0807C98C
adds r0, r1, #0
adds r1, r2, #0
bl LZ77UnCompVram
b _0807C994
.align 2, 0
_0807C984: .4byte 0x7FFFFFFF
_0807C988: .4byte gUnk_08324AE4
_0807C98C:
adds r0, r1, #0
adds r1, r2, #0
bl LZ77UnCompWram
_0807C994:
pop {pc}
.align 2, 0
.align 2, 0

View File

@ -5,38 +5,6 @@
.text
thumb_func_start sub_0807CF48
sub_0807CF48: @ 0x0807CF48
push {r4, r5, lr}
bl sub_0807D1C4
adds r4, r0, #0
ldrh r0, [r4, #4]
ldr r5, _0807CF64 @ =gUnk_0811E4AC
adds r1, r5, #0
bl sub_0807D184
ldrh r0, [r4, #2]
adds r1, r5, #0
bl sub_0807D184
pop {r4, r5, pc}
.align 2, 0
_0807CF64: .4byte gUnk_0811E4AC
thumb_func_start sub_0807CF68
sub_0807CF68: @ 0x0807CF68
push {r4, r5, lr}
bl sub_0807D1C4
adds r4, r0, #0
ldr r5, _0807CF84 @ =gUnk_0811E4A4
ldrh r0, [r4, #4]
adds r1, r5, #0
bl sub_0807D184
ldrh r0, [r4, #2]
adds r1, r5, #0
bl sub_0807D184
pop {r4, r5, pc}
.align 2, 0
_0807CF84: .4byte gUnk_0811E4A4
thumb_func_start sub_0807CF88
sub_0807CF88: @ 0x0807CF88
push {r4, r5, r6, r7, lr}

View File

@ -1,335 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start Wisp
Wisp: @ 0x0803353C
push {lr}
ldr r1, _08033548 @ =gUnk_080CEB74
bl EnemyFunctionHandler
pop {pc}
.align 2, 0
_08033548: .4byte gUnk_080CEB74
thumb_func_start sub_0803354C
sub_0803354C: @ 0x0803354C
push {lr}
ldr r2, _08033560 @ =gUnk_080CEB8C
ldrb r1, [r0, #0xc]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_08033560: .4byte gUnk_080CEB8C
thumb_func_start sub_08033564
sub_08033564: @ 0x08033564
push {r4, lr}
adds r4, r0, #0
adds r0, #0x41
ldrb r1, [r0]
movs r0, #0x80
ands r0, r1
cmp r0, #0
beq _08033628
movs r0, #0x3f
ands r0, r1
cmp r0, #0xe
beq _080335E4
cmp r0, #0xe
bgt _08033586
cmp r0, #0
beq _08033590
b _08033628
_08033586:
cmp r0, #0x14
beq _080335EE
cmp r0, #0x15
beq _080335E4
b _08033628
_08033590:
movs r0, #2
strb r0, [r4, #0xc]
ldrb r1, [r4, #0x18]
subs r0, #6
ands r0, r1
strb r0, [r4, #0x18]
ldrb r1, [r4, #0x10]
movs r0, #0x7f
ands r0, r1
strb r0, [r4, #0x10]
adds r1, r4, #0
adds r1, #0x7c
movs r0, #0x9f
lsls r0, r0, #2
strh r0, [r1]
ldr r2, _080335DC @ =gLinkState
ldr r0, [r2, #0x30]
movs r1, #0x80
lsls r1, r1, #7
orrs r0, r1
str r0, [r2, #0x30]
ldr r1, _080335E0 @ =gUnk_02002A40
ldrb r2, [r4, #0xa]
adds r0, r2, #1
adds r3, r1, #0
adds r3, #0xba
strb r0, [r3]
adds r1, #0xc8
movs r0, #0x96
lsls r0, r0, #2
strh r0, [r1]
lsls r2, r2, #0x18
cmp r2, #0
beq _08033628
bl DeleteThisEntity
b _08033628
.align 2, 0
_080335DC: .4byte gLinkState
_080335E0: .4byte gUnk_02002A40
_080335E4:
adds r1, r4, #0
adds r1, #0x45
movs r0, #0
strb r0, [r1]
b _08033628
_080335EE:
ldrb r1, [r4, #0x10]
movs r0, #0x7f
ands r0, r1
movs r1, #0
strb r0, [r4, #0x10]
adds r0, r4, #0
adds r0, #0x3d
strb r1, [r0]
ldrb r1, [r4, #0x18]
movs r0, #4
rsbs r0, r0, #0
ands r0, r1
strb r0, [r4, #0x18]
adds r0, r4, #0
movs r1, #2
movs r2, #0
bl CreateFx
adds r1, r0, #0
cmp r1, #0
beq _08033624
str r1, [r4, #0x54]
movs r0, #0xe
strb r0, [r4, #0xe]
adds r0, r4, #0
bl CopyPosition
_08033624:
bl DeleteThisEntity
_08033628:
pop {r4, pc}
.align 2, 0
thumb_func_start sub_0803362C
sub_0803362C: @ 0x0803362C
push {r4, lr}
adds r4, r0, #0
bl sub_0806F520
cmp r0, #0
beq _08033648
ldr r0, _0803364C @ =gUnk_080CEB98
ldrb r1, [r4, #0xd]
lsls r1, r1, #2
adds r1, r1, r0
ldr r1, [r1]
adds r0, r4, #0
bl _call_via_r1
_08033648:
pop {r4, pc}
.align 2, 0
_0803364C: .4byte gUnk_080CEB98
thumb_func_start sub_08033650
sub_08033650: @ 0x08033650
movs r1, #2
strb r1, [r0, #0xd]
bx lr
.align 2, 0
thumb_func_start sub_08033658
sub_08033658: @ 0x08033658
push {lr}
bl sub_0806F4E8
pop {pc}
thumb_func_start sub_08033660
sub_08033660: @ 0x08033660
push {r4, lr}
adds r4, r0, #0
bl sub_0806F3E4
cmp r0, #0
beq _08033672
adds r0, r4, #0
bl sub_0804A7D4
_08033672:
pop {r4, pc}
thumb_func_start sub_08033674
sub_08033674: @ 0x08033674
push {r4, lr}
adds r4, r0, #0
bl sub_0804A720
movs r0, #0
strb r0, [r4, #0xe]
movs r0, #1
strb r0, [r4, #0xc]
strb r0, [r4, #0x1c]
ldrh r1, [r4, #0x2e]
adds r0, r4, #0
adds r0, #0x80
strh r1, [r0]
ldrh r0, [r4, #0x32]
adds r1, r4, #0
adds r1, #0x82
strh r0, [r1]
adds r0, r4, #0
bl sub_08033744
ldrb r1, [r4, #0xb]
adds r0, r4, #0
bl InitializeAnimation
pop {r4, pc}
.align 2, 0
thumb_func_start sub_080336A8
sub_080336A8: @ 0x080336A8
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xe]
subs r0, #1
strb r0, [r4, #0xe]
lsls r0, r0, #0x18
cmp r0, #0
bne _080336C0
adds r0, r4, #0
bl sub_08033744
b _080336CE
_080336C0:
ldrh r0, [r4, #0x2a]
cmp r0, #0
beq _080336CE
adds r1, r0, #0
adds r0, r4, #0
bl sub_0800417E
_080336CE:
adds r0, r4, #0
bl sub_080AEF88
adds r0, r4, #0
bl GetNextFrame
pop {r4, pc}
thumb_func_start sub_080336DC
sub_080336DC: @ 0x080336DC
push {lr}
adds r2, r0, #0
adds r1, r2, #0
adds r1, #0x7c
ldrh r0, [r1]
subs r0, #1
strh r0, [r1]
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
cmp r0, #0xc
beq _0803371E
cmp r0, #0xc
bgt _080336FC
cmp r0, #0
beq _0803372E
b _08033740
_080336FC:
cmp r0, #0x18
beq _08033716
cmp r0, #0x24
bne _08033740
adds r0, r2, #0
adds r0, #0x80
ldrh r0, [r0]
strh r0, [r2, #0x2e]
adds r0, r2, #0
adds r0, #0x82
ldrh r0, [r0]
strh r0, [r2, #0x32]
b _08033740
_08033716:
adds r0, r2, #0
bl sub_080A29BC
b _08033740
_0803371E:
ldrb r0, [r2, #0x18]
movs r1, #4
rsbs r1, r1, #0
ands r1, r0
movs r0, #1
orrs r1, r0
strb r1, [r2, #0x18]
b _08033740
_0803372E:
movs r0, #1
strb r0, [r2, #0xc]
ldrb r1, [r2, #0x10]
movs r0, #0x80
orrs r0, r1
strb r0, [r2, #0x10]
adds r0, r2, #0
bl sub_08033744
_08033740:
pop {pc}
.align 2, 0
thumb_func_start sub_08033744
sub_08033744: @ 0x08033744
push {r4, r5, r6, lr}
adds r6, r0, #0
bl Random
adds r5, r0, #0
movs r0, #0xff
ands r5, r0
ldr r1, _0803378C @ =gUnk_080CEBA4
movs r0, #0x70
ands r0, r5
lsrs r0, r0, #4
adds r0, r0, r1
ldrb r0, [r0]
strb r0, [r6, #0xe]
movs r0, #0xc
ands r0, r5
lsls r4, r0, #1
adds r0, r6, #0
bl sub_08049FA0
cmp r0, #0
bne _08033796
movs r0, #3
ands r0, r5
cmp r0, #0
beq _08033796
adds r0, r6, #0
bl sub_08049EE4
adds r4, r0, #0
movs r0, #0x80
ands r5, r0
cmp r5, #0
beq _08033790
adds r4, #4
b _08033792
.align 2, 0
_0803378C: .4byte gUnk_080CEBA4
_08033790:
adds r4, #0x1c
_08033792:
movs r0, #0x18
ands r4, r0
_08033796:
strb r4, [r6, #0x15]
pop {r4, r5, r6, pc}
.align 2, 0

View File

@ -6,61 +6,6 @@
.text
thumb_func_start ZeldaFollower
ZeldaFollower: @ 0x080682B0
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xc]
adds r2, r0, #0
cmp r2, #0
bne _080682F4
adds r0, #1
strb r0, [r4, #0xc]
ldrb r1, [r4, #0x18]
movs r0, #4
rsbs r0, r0, #0
ands r0, r1
movs r1, #1
orrs r0, r1
strb r0, [r4, #0x18]
movs r0, #4
strb r0, [r4, #0x14]
adds r0, r4, #0
adds r0, #0x68
strb r2, [r0]
adds r0, #1
strb r2, [r0]
adds r0, r4, #0
movs r1, #2
bl sub_0805E3A0
adds r0, r4, #0
movs r1, #0
bl InitAnimationForceUpdate
adds r0, r4, #0
movs r1, #0
bl sub_0806854C
_080682F4:
adds r0, r4, #0
adds r0, #0x68
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
beq _0806830A
adds r0, r4, #0
bl sub_08068318
b _08068314
_0806830A:
ldrb r1, [r4, #0x18]
movs r0, #4
rsbs r0, r0, #0
ands r0, r1
strb r0, [r4, #0x18]
_08068314:
pop {r4, pc}
.align 2, 0
thumb_func_start sub_08068318
sub_08068318: @ 0x08068318
push {r4, r5, r6, r7, lr}

BIN
baserom.gba.pal Normal file

Binary file not shown.

BIN
baserom.gba.spr Normal file

Binary file not shown.

19
graphics/gameover.pal Normal file
View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
255 255 172
255 0 255
255 0 255
255 0 255
255 0 255
255 0 255
255 0 255
255 0 255
255 0 255
255 230 0
255 172 16
246 115 0
238 65 0
230 0 0
180 65 90
0 0 90

BIN
graphics/gameover.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 904 B

View File

@ -124,7 +124,7 @@ extern void sub_080580B0(u32);
extern void sub_080751E8(u32, u32, void*);
extern void sub_08052CA4(u32, u32, u32, u32);
extern void sub_08052878(void);
extern void sub_0808091C(u32*, u32);
extern void sub_0808091C(ScreenTransitionData*, u32);
extern void sub_0805BC4C(void);
extern void sub_0807BB68(u32*, u32, u32);
extern void sub_08054570(void);
@ -220,4 +220,12 @@ extern void sub_0807CF68(u32);
extern void sub_0807D20C(u32, char*, u32);
extern u32 sub_0807CF88(u32, u8*);
extern u32 sub_0807D008(u32, void*);
extern void sub_0807D184(u32, char*);
extern void sub_0805E3A0(Entity*, u32);
extern u32 sub_0806F520();
extern void sub_0806F4E8();
extern u32 sub_0806F3E4(Entity*);
extern void sub_0804A7D4(Entity*);
extern void sub_08033744(Entity*);
extern void sub_0800417E(Entity*, u32);
#endif

View File

@ -73,7 +73,14 @@ typedef struct {
u8 itemOnB;
u8 filler2[10];
u16 rupees;
u8 filler3[12];
u8 field_0x1a;
u8 field_0x1b;
u8 field_0x1c;
u8 field_0x1d;
u8 field_0x1e;
u8 field_0x1f;
u16 field_0x20;
u8 filler4[4];
} Stats;
typedef struct {

View File

@ -376,7 +376,7 @@ SECTIONS {
asm/crow.o(.text);
asm/mulldozer.o(.text);
asm/bombarossa.o(.text);
asm/wisp.o(.text);
src/enemy/wisp.o(.text);
asm/spinyBeetle.o(.text);
asm/mazaalHead.o(.text);
asm/mazaalMacro.o(.text);
@ -581,6 +581,7 @@ SECTIONS {
src/npc/cat.o(.text);
asm/cat.o(.text);
asm/mountainMinish.o(.text);
src/npc/zeldaFollower.o(.text);
asm/zeldaFollower.o(.text);
src/npc/melari.o(.text);
src/npc/bladeBrothers.o(.text);
@ -665,7 +666,6 @@ SECTIONS {
src/flags.o(.text);
src/code_0807CC3C.o(.text);
asm/code_0807CC3C.o(.text);
src/code_080808D8.o(.text);
src/code_0808091C.o(.text);
/* objects */
asm/itemOnGround.o(.text);

View File

@ -7,6 +7,9 @@
extern void (*const gUnk_0811E478[])(u32);
extern s16 gUnk_02021EE0[6];
extern char gUnk_0811E484[];
extern char gUnk_0811E4AC[];
extern char gUnk_0811E4A4[];
void sub_0807CD9C() {
sub_080530C8();
@ -69,8 +72,6 @@ s32 sub_0807CE54(void) {
return uVar1;
}
extern char gUnk_0811E484[];
u32 sub_0807CE90(void)
{
struct_0807D1C4 *puVar1;
@ -123,3 +124,23 @@ u32 sub_0807CF30(void* arg0) {
u32 sub_0807CF3C(void* arg0) {
return sub_0807D008(5, arg0);
}
void sub_0807CF48(u32 arg0)
{
struct_0807D1C4 *temp;
temp = sub_0807D1C4(arg0);
sub_0807D184(temp->field_0x4, gUnk_0811E4AC);
sub_0807D184(temp->field_0x2, gUnk_0811E4AC);
}
void sub_0807CF68(u32 arg0)
{
struct_0807D1C4 *temp;
char* str;
temp = sub_0807D1C4(arg0);
str = gUnk_0811E4A4;
sub_0807D184(temp->field_0x4, str);
sub_0807D184(temp->field_0x2, str);
}

View File

@ -1,25 +0,0 @@
#include "global.h"
#include "entity.h"
#include "structures.h"
#include "functions.h"
void sub_080808D8(void) {
gScreenTransition.transitionType = 0;
}
void sub_080808E4(void) {
if (sub_08052638(gScreenTransition.areaID)) {
gScreenTransition.transitionType = 0;
} else {
gScreenTransition.transitionType = 5;
}
}
void sub_08080904(void) {
gScreenTransition.transitionType = 1;
}
void sub_08080910(void) {
gScreenTransition.transitionType = 1;
}

View File

@ -1,4 +1,7 @@
#include "global.h"
#include "entity.h"
#include "structures.h"
#include "functions.h"
#include "room.h"
extern void sub_0805E5A8();
@ -6,16 +9,35 @@ extern void sub_0805E5A8();
extern RoomControls gRoomControls;
extern u32 gUnk_0200B650;
extern u32 gUnk_02025EB0;
extern u8 gScreenTransition[10];
extern void DoExitTransition(Entity*);
extern void DoExitTransition(ScreenTransitionData*);
extern void sub_080809D4();
void sub_0808091C(Entity* param_1, u32 param_2)
void sub_080808D8(void) {
gScreenTransition.transitionType = 0;
}
void sub_080808E4(void) {
if (sub_08052638(gScreenTransition.areaID)) {
gScreenTransition.transitionType = 0;
} else {
gScreenTransition.transitionType = 5;
}
}
void sub_08080904(void) {
gScreenTransition.transitionType = 1;
}
void sub_08080910(void) {
gScreenTransition.transitionType = 1;
}
void sub_0808091C(ScreenTransitionData* param_1, u32 param_2)
{
DoExitTransition(param_1);
gScreenTransition[9] = param_2;
gScreenTransition.transitionType = param_2;
return;
}

View File

@ -8,7 +8,6 @@ extern u32 GetNextFunction(Entity*);
extern void sub_0802AD54(Entity*);
extern void sub_0802B048(Entity*);
extern void sub_0806F4E8(Entity*);
extern void sub_0806F3E4(Entity*);
extern void (*const gUnk_080012C8[])(Entity*);
extern void (*const gUnk_080CD0F0[])(Entity*);

149
src/enemy/wisp.c Normal file
View File

@ -0,0 +1,149 @@
#include "global.h"
#include "entity.h"
#include "enemy.h"
#include "structures.h"
#include "link.h"
#include "functions.h"
extern void (*const gUnk_080CEB74[])(Entity*);
extern void (*const gUnk_080CEB8C[])(Entity*);
extern void (*const gUnk_080CEB98[])(Entity*);
extern u8 gUnk_080CEBA4[];
void Wisp(Entity* this) {
EnemyFunctionHandler(this, gUnk_080CEB74);
}
void sub_0803354C(Entity* this) {
gUnk_080CEB8C[this->action](this);
}
void sub_08033564(Entity* this) {
u32 bits;
Entity* ent;
bits = this->bitfield;
if ((bits & 0x80) == 0) {
return;
}
switch ((s32)bits & 0x3f) {
case 0:
this->action = 2;
this->spriteSettings.b.draw = FALSE;
this->flags &= 0x7f;
this->field_0x7c.HALF.LO = 0x27c;
gLinkState.flags.all |= 0x4000;
gUnk_02002A40.stats.filler2[4] = this->entityType.form + 1;
gUnk_02002A40.stats.field_0x20 = 600;
if (this->entityType.form == 0) {
break;
}
DeleteThisEntity();
break;
case 0xe:
case 0x15:
this->currentHealth = 0;
break;
case 0x14:
this->flags &= 0x7f;
this->hurtBlinkTime = 0;
this->spriteSettings.b.draw = FALSE;
ent = CreateFx(this, 2, 0);
if (ent != NULL) {
this->attachedEntity = ent;
this->actionDelay = 0xe;
CopyPosition(this, ent);
}
DeleteThisEntity();
break;
}
}
void sub_0803362C(Entity* this) {
if (sub_0806F520() != 0) {
gUnk_080CEB98[this->previousActionFlag](this);
}
}
void sub_08033650(Entity* this) {
this->previousActionFlag = 2;
}
void sub_08033658(Entity* this) {
sub_0806F4E8();
}
void sub_08033660(Entity* this) {
if (sub_0806F3E4(this)) {
sub_0804A7D4(this);
}
}
void sub_08033674(Entity* this) {
sub_0804A720(this);
this->actionDelay = 0;
this->action = 1;
this->filler[0] = 1;
this->field_0x80.HWORD = this->x.HALF.HI;
this->field_0x82.HWORD = this->y.HALF.HI;
sub_08033744(this);
InitializeAnimation(this, this->entityType.parameter);
}
void sub_080336A8(Entity* this) {
if (--this->actionDelay == 0) {
sub_08033744(this);
} else if (this->collisions != 0) {
sub_0800417E(this, this->collisions);
}
sub_080AEF88(this);
GetNextFrame(this);
}
void sub_080336DC(Entity* this) {
switch ((u16)-- this->field_0x7c.HALF.LO) {
case 0x24:
this->x.HALF.HI = this->field_0x80.HWORD;
this->y.HALF.HI = this->field_0x82.HWORD;
break;
case 0x18:
sub_080A29BC(this);
break;
case 0xc:
this->spriteSettings.b.draw = TRUE;
break;
case 0x0:
this->action = 1;
this->flags |= 0x80;
sub_08033744(this);
break;
}
}
void sub_08033744(Entity* this) {
u32 temp;
u32 rand = (u32)Random() % 256;
// 8 potential options
this->actionDelay = gUnk_080CEBA4[(rand & 0x70) >> 4];
// 4 potential options
temp = ((rand & 0xc) * 2);
// 75% chance to pass
if ((sub_08049FA0(this) == 0) && ((rand % 4) != 0)) {
temp = sub_08049EE4(this);
// 50% chance to pass
if ((rand & 0x80) != 0) {
temp += 0x4;
temp &= 0x18;
} else {
temp += 0x1c;
temp &= 0x18;
}
}
this->direction = temp;
}

25
src/npc/zeldaFollower.c Normal file
View File

@ -0,0 +1,25 @@
#include "global.h"
#include "entity.h"
#include "functions.h"
extern void sub_08068318(Entity*);
extern void sub_0806854C(Entity*, u32);
void ZeldaFollower(Entity *this)
{
if (this->action == 0) {
this->action++;
this->spriteSettings.b.draw = TRUE;
this->animationState = 4;
this->field_0x68.HALF.LO = 0;
this->field_0x68.HALF.HI = 0;
sub_0805E3A0(this, 2);
InitAnimationForceUpdate(this, 0);
sub_0806854C(this, 0);
}
if ((s8)this->field_0x68.HALF.LO != 0) {
sub_08068318(this);
} else {
this->spriteSettings.b.draw = FALSE;
}
}

View File

@ -665,7 +665,7 @@ void sub_0804BC70(void) {
}
}
extern u32 gUnk_0813AB80;
extern ScreenTransitionData gUnk_0813AB80;
void sub_0804BCDC() {
sub_0808091C(&gUnk_0813AB80, 4);

View File

@ -1,12 +1,29 @@
#include "global.h"
#include "entity.h"
extern void sub_0807C960();
extern u32 gUnk_0202CEB4;
extern u32 gUnk_02012654;
extern u8 gUnk_08324AE4;
void sub_0807C960(void* dest, u32 offset)
{
void* temp;
if (offset != -1) {
temp = &gUnk_08324AE4 + (offset & 0x7fffffff);
if ((u32)dest >> 0x18 == 6) {
LZ77UnCompVram(temp, (void *)dest);
}
else {
LZ77UnCompWram(temp, (void *)dest);
}
}
}
void sub_0807C998(u32* a1) {
sub_0807C960(&gUnk_0202CEB4, a1[0]);
sub_0807C960(&gUnk_0202CEB4 - 0x800, a1[1]);
sub_0807C960(&gUnk_02012654, a1[2]);
sub_0807C960(&gUnk_02012654 - 0x800, a1[3]);
}
}

19
tools/gbagfx/link.pal Normal file
View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
65 180 139
222 41 41
123 16 41
16 123 41
65 164 41
16 255 8
49 82 255
189 255 164
222 172 82
255 255 0
115 65 32
164 123 65
213 180 139
255 230 189
255 255 255
0 0 0