picture frame graphics

This commit is contained in:
YamaArashi 2016-07-24 07:18:38 -07:00
parent d73d8052e9
commit 04cfba7536
27 changed files with 384 additions and 56 deletions

1
.gitignore vendored
View File

@ -8,6 +8,7 @@
*.8bpp *.8bpp
*.gbapal *.gbapal
*.lz *.lz
*.rl
*.latfont *.latfont
*.hwjpnfont *.hwjpnfont
*.fwjpnfont *.fwjpnfont

View File

@ -29,7 +29,7 @@ PREPROC := tools/preproc/preproc
# Secondary expansion is required for dependency variables in object rules. # Secondary expansion is required for dependency variables in object rules.
.SECONDEXPANSION: .SECONDEXPANSION:
.PRECIOUS: %.1bpp %.4bpp %.8bpp %.gbapal %.lz .PRECIOUS: %.1bpp %.4bpp %.8bpp %.gbapal %.lz %.rl
.PHONY: all clean compare ruby sapphire .PHONY: all clean compare ruby sapphire
@ -64,7 +64,7 @@ compare: both
clean: clean:
rm -f $(ROM) $(ELF) $(OBJS) $(pokeruby_OBJS) $(pokesapphire_OBJS) $(C_SRCS:%.c=%.i) pokeruby.map pokesapphire.map rm -f $(ROM) $(ELF) $(OBJS) $(pokeruby_OBJS) $(pokesapphire_OBJS) $(C_SRCS:%.c=%.i) pokeruby.map pokesapphire.map
find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' \) -exec rm {} + find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' \) -exec rm {} +
tidy: tidy:
rm -f $(ROM) $(ELF) $(OBJS) $(pokeruby_OBJS) $(pokesapphire_OBJS) $(C_SRCS:%.c=%.i) pokeruby.map pokesapphire.map rm -f $(ROM) $(ELF) $(OBJS) $(pokeruby_OBJS) $(pokesapphire_OBJS) $(C_SRCS:%.c=%.i) pokeruby.map pokesapphire.map
@ -84,6 +84,7 @@ include misc.mk
%.8bpp: %.png ; $(GFX) $< $@ %.8bpp: %.png ; $(GFX) $< $@
%.gbapal: %.pal ; $(GFX) $< $@ %.gbapal: %.pal ; $(GFX) $< $@
%.lz: % ; $(GFX) $< $@ %.lz: % ; $(GFX) $< $@
%.rl: % ; $(GFX) $< $@
src/libc_ruby.o src/libc_sapphire.o: CC1 := tools/agbcc/bin/old_agbcc src/libc_ruby.o src/libc_sapphire.o: CC1 := tools/agbcc/bin/old_agbcc
src/libc_ruby.o src/libc_sapphire.o: CFLAGS := -O2 src/libc_ruby.o src/libc_sapphire.o: CFLAGS := -O2

View File

@ -287969,7 +287969,7 @@ _08106C5E:
ldr r0, [r0] ldr r0, [r0]
mov pc, r0 mov pc, r0
.align 2, 0 .align 2, 0
_08106C7C: .4byte gUnknown_083EF198 _08106C7C: .4byte gPictureFramePalettes
_08106C80: .4byte 0x03005e8c _08106C80: .4byte 0x03005e8c
_08106C84: .4byte _08106C88 _08106C84: .4byte _08106C88
.align 2, 0 .align 2, 0
@ -287987,8 +287987,8 @@ _08106C9C:
ldr r0, _08106CB0 ldr r0, _08106CB0
b _08106CF0 b _08106CF0
.align 2, 0 .align 2, 0
_08106CAC: .4byte gUnknown_083EF398 _08106CAC: .4byte gPictureFrameTiles_0
_08106CB0: .4byte gUnknown_083F4260 _08106CB0: .4byte gPictureFrameTilemap_0
_08106CB4: _08106CB4:
ldr r0, _08106CC4 ldr r0, _08106CC4
movs r1, 0xC0 movs r1, 0xC0
@ -287997,8 +287997,8 @@ _08106CB4:
ldr r0, _08106CC8 ldr r0, _08106CC8
b _08106CF0 b _08106CF0
.align 2, 0 .align 2, 0
_08106CC4: .4byte gUnknown_083F041C _08106CC4: .4byte gPictureFrameTiles_1
_08106CC8: .4byte gUnknown_083F476C _08106CC8: .4byte gPictureFrameTilemap_1
_08106CCC: _08106CCC:
ldr r0, _08106CDC ldr r0, _08106CDC
movs r1, 0xC0 movs r1, 0xC0
@ -288007,8 +288007,8 @@ _08106CCC:
ldr r0, _08106CE0 ldr r0, _08106CE0
b _08106CF0 b _08106CF0
.align 2, 0 .align 2, 0
_08106CDC: .4byte gUnknown_083F104C _08106CDC: .4byte gPictureFrameTiles_2
_08106CE0: .4byte gUnknown_083F4C78 _08106CE0: .4byte gPictureFrameTilemap_2
_08106CE4: _08106CE4:
ldr r0, _08106CFC ldr r0, _08106CFC
movs r1, 0xC0 movs r1, 0xC0
@ -288021,8 +288021,8 @@ _08106CF0:
bl RLUnCompWram bl RLUnCompWram
b _08106D1C b _08106D1C
.align 2, 0 .align 2, 0
_08106CFC: .4byte gUnknown_083F1B84 _08106CFC: .4byte gPictureFrameTiles_3
_08106D00: .4byte gUnknown_083F5184 _08106D00: .4byte gPictureFrameTilemap_3
_08106D04: .4byte 0x03005e10 _08106D04: .4byte 0x03005e10
_08106D08: _08106D08:
ldr r0, _08106D98 ldr r0, _08106D98
@ -288102,8 +288102,8 @@ _08106D80:
bls _08106D80 bls _08106D80
b _08106E86 b _08106E86
.align 2, 0 .align 2, 0
_08106D98: .4byte gUnknown_083F2B3C _08106D98: .4byte gPictureFrameTiles_4
_08106D9C: .4byte gUnknown_083F5690 _08106D9C: .4byte gPictureFrameTilemap_4
_08106DA0: .4byte 0x03005e10 _08106DA0: .4byte 0x03005e10
_08106DA4: .4byte 0x06006000 _08106DA4: .4byte 0x06006000
_08106DA8: .4byte 0x00001015 _08106DA8: .4byte 0x00001015
@ -288119,8 +288119,8 @@ _08106DB4:
ldr r0, _08106DCC ldr r0, _08106DCC
b _08106E60 b _08106E60
.align 2, 0 .align 2, 0
_08106DC8: .4byte gUnknown_083F3C6C _08106DC8: .4byte gPictureFrameTiles_5
_08106DCC: .4byte gUnknown_083F5B9C _08106DCC: .4byte gPictureFrameTilemap_5
_08106DD0: _08106DD0:
ldr r0, _08106DF0 ldr r0, _08106DF0
ldr r0, [r0] ldr r0, [r0]
@ -288154,8 +288154,8 @@ _08106E0C:
ldr r0, _08106E20 ldr r0, _08106E20
b _08106E60 b _08106E60
.align 2, 0 .align 2, 0
_08106E1C: .4byte gUnknown_083EF398 _08106E1C: .4byte gPictureFrameTiles_0
_08106E20: .4byte gUnknown_083F4260 _08106E20: .4byte gPictureFrameTilemap_0
_08106E24: _08106E24:
ldr r0, _08106E34 ldr r0, _08106E34
movs r1, 0xC0 movs r1, 0xC0
@ -288164,8 +288164,8 @@ _08106E24:
ldr r0, _08106E38 ldr r0, _08106E38
b _08106E60 b _08106E60
.align 2, 0 .align 2, 0
_08106E34: .4byte gUnknown_083F041C _08106E34: .4byte gPictureFrameTiles_1
_08106E38: .4byte gUnknown_083F476C _08106E38: .4byte gPictureFrameTilemap_1
_08106E3C: _08106E3C:
ldr r0, _08106E4C ldr r0, _08106E4C
movs r1, 0xC0 movs r1, 0xC0
@ -288174,8 +288174,8 @@ _08106E3C:
ldr r0, _08106E50 ldr r0, _08106E50
b _08106E60 b _08106E60
.align 2, 0 .align 2, 0
_08106E4C: .4byte gUnknown_083F104C _08106E4C: .4byte gPictureFrameTiles_2
_08106E50: .4byte gUnknown_083F4C78 _08106E50: .4byte gPictureFrameTilemap_2
_08106E54: _08106E54:
ldr r0, _08106E68 ldr r0, _08106E68
movs r1, 0xC0 movs r1, 0xC0
@ -288187,8 +288187,8 @@ _08106E60:
bl RLUnCompVram bl RLUnCompVram
b _08106E86 b _08106E86
.align 2, 0 .align 2, 0
_08106E68: .4byte gUnknown_083F1B84 _08106E68: .4byte gPictureFrameTiles_3
_08106E6C: .4byte gUnknown_083F5184 _08106E6C: .4byte gPictureFrameTilemap_3
_08106E70: .4byte 0x06006000 _08106E70: .4byte 0x06006000
_08106E74: _08106E74:
ldr r0, _08106E8C ldr r0, _08106E8C
@ -288203,8 +288203,8 @@ _08106E86:
pop {r0} pop {r0}
bx r0 bx r0
.align 2, 0 .align 2, 0
_08106E8C: .4byte gUnknown_083F2B3C _08106E8C: .4byte gPictureFrameTiles_4
_08106E90: .4byte gUnknown_083F5690 _08106E90: .4byte gPictureFrameTilemap_4
_08106E94: .4byte 0x06006000 _08106E94: .4byte 0x06006000
thumb_func_end sub_8106C40 thumb_func_end sub_8106C40
@ -288240,7 +288240,7 @@ sub_8106E98: @ 8106E98
bx r0 bx r0
.align 2, 0 .align 2, 0
_08106ED0: .4byte 0x03001770 _08106ED0: .4byte 0x03001770
_08106ED4: .4byte gUnknown_083F6138 _08106ED4: .4byte gOamData_83F6138
_08106ED8: .4byte 0xfffffc00 _08106ED8: .4byte 0xfffffc00
_08106EDC: .4byte 0xfffffe00 _08106EDC: .4byte 0xfffffe00
thumb_func_end sub_8106E98 thumb_func_end sub_8106E98

View File

@ -21370,44 +21370,63 @@ gUnknown_083EDE8C:: @ 83EDE8C
gUnknown_083EEFE0:: @ 83EEFE0 gUnknown_083EEFE0:: @ 83EEFE0
.incbin "baserom.gba", 0x003eefe0, 0x1b8 .incbin "baserom.gba", 0x003eefe0, 0x1b8
gUnknown_083EF198:: @ 83EF198 .align 2
.incbin "baserom.gba", 0x003ef198, 0x200 gPictureFramePalettes:: @ 83EF198
.incbin "graphics/picture_frame/bg0.gbapal"
.incbin "graphics/picture_frame/bg1.gbapal"
.incbin "graphics/picture_frame/bg2.gbapal"
.incbin "graphics/picture_frame/bg3.gbapal"
.incbin "graphics/picture_frame/bg4.gbapal"
.incbin "graphics/picture_frame/bg5.gbapal"
.space 10 * 32
gUnknown_083EF398:: @ 83EF398 .align 2
.incbin "baserom.gba", 0x003ef398, 0x1084 gPictureFrameTiles_0:: @ 83EF398
.incbin "graphics/picture_frame/frame0.4bpp.rl"
gUnknown_083F041C:: @ 83F041C .align 2
.incbin "baserom.gba", 0x003f041c, 0xc30 gPictureFrameTiles_1:: @ 83F041C
.incbin "graphics/picture_frame/frame1.4bpp.rl"
gUnknown_083F104C:: @ 83F104C .align 2
.incbin "baserom.gba", 0x003f104c, 0xb38 gPictureFrameTiles_2:: @ 83F104C
.incbin "graphics/picture_frame/frame2.4bpp.rl"
gUnknown_083F1B84:: @ 83F1B84 .align 2
.incbin "baserom.gba", 0x003f1b84, 0xfb8 gPictureFrameTiles_3:: @ 83F1B84
.incbin "graphics/picture_frame/frame3.4bpp.rl"
gUnknown_083F2B3C:: @ 83F2B3C .align 2
.incbin "baserom.gba", 0x003f2b3c, 0x1130 gPictureFrameTiles_4:: @ 83F2B3C
.incbin "graphics/picture_frame/frame4.4bpp.rl"
gUnknown_083F3C6C:: @ 83F3C6C .align 2
.incbin "baserom.gba", 0x003f3c6c, 0x5f4 gPictureFrameTiles_5:: @ 83F3C6C
.incbin "graphics/picture_frame/frame5.4bpp.rl"
gUnknown_083F4260:: @ 83F4260 .align 2
.incbin "baserom.gba", 0x003f4260, 0x50c gPictureFrameTilemap_0:: @ 83F4260
.incbin "graphics/picture_frame/frame0_map.bin.rl"
gUnknown_083F476C:: @ 83F476C .align 2
.incbin "baserom.gba", 0x003f476c, 0x50c gPictureFrameTilemap_1:: @ 83F476C
.incbin "graphics/picture_frame/frame1_map.bin.rl"
gUnknown_083F4C78:: @ 83F4C78 .align 2
.incbin "baserom.gba", 0x003f4c78, 0x50c gPictureFrameTilemap_2:: @ 83F4C78
.incbin "graphics/picture_frame/frame2_map.bin.rl"
gUnknown_083F5184:: @ 83F5184 .align 2
.incbin "baserom.gba", 0x003f5184, 0x50c gPictureFrameTilemap_3:: @ 83F5184
.incbin "graphics/picture_frame/frame3_map.bin.rl"
gUnknown_083F5690:: @ 83F5690 .align 2
.incbin "baserom.gba", 0x003f5690, 0x50c gPictureFrameTilemap_4:: @ 83F5690
.incbin "graphics/picture_frame/frame4_map.bin.rl"
gUnknown_083F5B9C:: @ 83F5B9C .align 2
.incbin "baserom.gba", 0x003f5b9c, 0x510 gPictureFrameTilemap_5:: @ 83F5B9C
.incbin "graphics/picture_frame/frame5_map.bin.rl"
.align 2 .align 2
gUnknown_083F60AC:: @ 83F60AC gUnknown_083F60AC:: @ 83F60AC
@ -21450,9 +21469,13 @@ gUnknown_083F60C0:: @ 83F60C0
.4byte OtherText_MightyTough .4byte OtherText_MightyTough
.4byte OtherText_Exclamation .4byte OtherText_Exclamation
gUnknown_083F6138:: @ 83F6138 .align 2
.incbin "baserom.gba", 0x003f6138, 0x8 gOamData_83F6138:: @ 83F6138
.2byte 0x3000
.2byte 0xC000
.2byte 0x0000
.align 2
gUnknown_083F6140:: @ 83F6140 gUnknown_083F6140:: @ 83F6140
.space 4 .space 4

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
0 0 0
255 255 255
230 230 230
213 213 213
197 197 197
180 180 180
164 164 164
148 148 148
131 131 131
115 115 115
98 98 98
82 82 82
65 65 65
49 49 49
32 32 32
16 16 16

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
0 0 0
90 24 0
139 65 16
164 90 16
189 115 16
222 148 49
255 180 82
255 222 131
98 172 115
148 197 156
222 255 230
255 255 255
205 189 164
180 164 139
164 139 115
131 98 74

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
0 0 0
180 148 213
180 164 197
180 189 189
180 205 180
180 230 172
189 255 164
222 255 139
246 238 123
255 230 98
255 205 139
255 180 139
238 164 189
205 156 197
255 246 255
90 57 74

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
0 0 0
255 123 164
255 139 180
255 180 205
255 213 255
255 205 0
255 213 57
255 230 123
255 238 189
255 255 255
90 24 0
139 65 16
205 189 164
180 164 139
164 139 115
131 98 74

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
0 0 0
90 24 0
139 65 16
222 148 49
255 222 131
131 131 131
65 65 65
255 0 0
255 82 82
255 164 164
255 98 197
255 148 213
255 197 230
74 255 90
131 255 139
189 255 197

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
0 0 0
90 24 0
139 65 16
222 148 49
255 222 131
131 131 131
65 65 65
74 148 238
131 180 238
189 213 246
74 255 90
131 255 139
189 255 197
255 255 0
255 255 123
0 0 0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 643 B

Binary file not shown.

View File

@ -7,6 +7,7 @@ UNKNOWNGFXDIR := graphics/unknown
REELGFXDIR := graphics/slot_machine REELGFXDIR := graphics/slot_machine
ROULGFXDIR := graphics/roulette ROULGFXDIR := graphics/roulette
BTLANMSPRGFXDIR := graphics/battle_anims/sprites BTLANMSPRGFXDIR := graphics/battle_anims/sprites
PICFRAMEGFXDIR := graphics/picture_frame
$(MENUGFXDIR)/menu.gbapal: $(MENUGFXDIR)/menu_0.gbapal $(MENUGFXDIR)/menu_1.gbapal $(MENUGFXDIR)/menu.gbapal: $(MENUGFXDIR)/menu_0.gbapal $(MENUGFXDIR)/menu_1.gbapal
@ -157,3 +158,6 @@ $(BTLANMSPRGFXDIR)/141.4bpp: $(BTLANMSPRGFXDIR)/141_0.4bpp $(BTLANMSPRGFXDIR)/14
$(BTLANMSPRGFXDIR)/159.4bpp: $(BTLANMSPRGFXDIR)/159_0.4bpp $(BTLANMSPRGFXDIR)/159_1.4bpp $(BTLANMSPRGFXDIR)/159.4bpp: $(BTLANMSPRGFXDIR)/159_0.4bpp $(BTLANMSPRGFXDIR)/159_1.4bpp
@cat $(BTLANMSPRGFXDIR)/159_0.4bpp $(BTLANMSPRGFXDIR)/159_1.4bpp >$@ @cat $(BTLANMSPRGFXDIR)/159_0.4bpp $(BTLANMSPRGFXDIR)/159_1.4bpp >$@
$(PICFRAMEGFXDIR)/frame5.4bpp: $(PICFRAMEGFXDIR)/frame5.png
$(GFX) $< $@ -num_tiles 86

View File

@ -4,11 +4,11 @@ CFLAGS = -Wall -Wextra -std=c11 -O2 -DPNG_SKIP_SETJMP_CHECK
LIBS = -lpng -lz LIBS = -lpng -lz
SRCS = main.c convert_png.c gfx.c jasc_pal.c lz.c util.c font.c SRCS = main.c convert_png.c gfx.c jasc_pal.c lz.c rl.c util.c font.c
.PHONY: clean .PHONY: clean
gbagfx: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h util.h font.h gbagfx: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h
$(CC) $(CFLAGS) $(SRCS) -o $@ $(LIBS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LIBS)
clean: clean:

View File

@ -9,6 +9,7 @@
#include "convert_png.h" #include "convert_png.h"
#include "jasc_pal.h" #include "jasc_pal.h"
#include "lz.h" #include "lz.h"
#include "rl.h"
#include "font.h" #include "font.h"
struct CommandHandler struct CommandHandler
@ -289,6 +290,36 @@ void HandleLZDecompressCommand(char *inputPath, char *outputPath, int argc UNUSE
free(uncompressedData); free(uncompressedData);
} }
void HandleRLCompressCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED)
{
int fileSize;
unsigned char *buffer = ReadWholeFile(inputPath, &fileSize);
int compressedSize;
unsigned char *compressedData = RLCompress(buffer, fileSize, &compressedSize);
free(buffer);
WriteWholeFile(outputPath, compressedData, compressedSize);
free(compressedData);
}
void HandleRLDecompressCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED)
{
int fileSize;
unsigned char *buffer = ReadWholeFile(inputPath, &fileSize);
int uncompressedSize;
unsigned char *uncompressedData = RLDecompress(buffer, fileSize, &uncompressedSize);
free(buffer);
WriteWholeFile(outputPath, uncompressedData, uncompressedSize);
free(uncompressedData);
}
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
if (argc < 3) if (argc < 3)
@ -312,6 +343,8 @@ int main(int argc, char **argv)
{ "png", "fwjpnfont", HandlePngToFullwidthJapaneseFontCommand }, { "png", "fwjpnfont", HandlePngToFullwidthJapaneseFontCommand },
{ NULL, "lz", HandleLZCompressCommand }, { NULL, "lz", HandleLZCompressCommand },
{ "lz", NULL, HandleLZDecompressCommand }, { "lz", NULL, HandleLZDecompressCommand },
{ NULL, "rl", HandleRLCompressCommand },
{ "rl", NULL, HandleRLDecompressCommand },
{ NULL, NULL, NULL } { NULL, NULL, NULL }
}; };

143
tools/gbagfx/rl.c Normal file
View File

@ -0,0 +1,143 @@
// Copyright (c) 2016 YamaArashi
#include <stdlib.h>
#include <stdbool.h>
#include "global.h"
#include "rl.h"
unsigned char *RLDecompress(unsigned char *src, int srcSize, int *uncompressedSize)
{
if (srcSize < 4)
goto fail;
int destSize = (src[3] << 16) | (src[2] << 8) | src[1];
unsigned char *dest = malloc(destSize);
if (dest == NULL)
goto fail;
int srcPos = 4;
int destPos = 0;
for (;;)
{
if (srcPos >= srcSize)
goto fail;
unsigned char flags = src[srcPos++];
bool compressed = ((flags & 0x80) != 0);
if (compressed)
{
int length = (flags & 0x7F) + 3;
unsigned char data = src[srcPos++];
for (int i = 0; i < length; i++)
dest[destPos++] = data;
}
else
{
int length = (flags & 0x7F) + 1;
for (int i = 0; i < length; i++)
dest[destPos++] = src[srcPos++];
}
if (destPos == destSize)
{
*uncompressedSize = destSize;
return dest;
}
}
fail:
FATAL_ERROR("Fatal error while decompressing RL file.\n");
}
unsigned char *RLCompress(unsigned char *src, int srcSize, int *compressedSize)
{
if (srcSize <= 0)
goto fail;
int worstCaseDestSize = 4 + srcSize * 2;
// Round up to the next multiple of four.
worstCaseDestSize = (worstCaseDestSize + 3) & ~3;
unsigned char *dest = malloc(worstCaseDestSize);
if (dest == NULL)
goto fail;
// header
dest[0] = 0x30; // RL compression type
dest[1] = (unsigned char)srcSize;
dest[2] = (unsigned char)(srcSize >> 8);
dest[3] = (unsigned char)(srcSize >> 16);
int srcPos = 0;
int destPos = 4;
for (;;)
{
bool compress = false;
int uncompressedStart = srcPos;
int uncompressedLength = 0;
while (srcPos < srcSize && uncompressedLength < (0x7F + 1))
{
compress = (srcPos + 2 < srcSize && src[srcPos] == src[srcPos + 1] && src[srcPos] == src[srcPos + 2]);
if (compress)
break;
srcPos++;
uncompressedLength++;
}
if (uncompressedLength > 0)
{
dest[destPos++] = uncompressedLength - 1;
for (int i = 0; i < uncompressedLength; i++)
dest[destPos++] = src[uncompressedStart + i];
}
if (compress)
{
unsigned char data = src[srcPos];
int compressedLength = 0;
while (compressedLength < (0x7F + 3)
&& srcPos + compressedLength < srcSize
&& src[srcPos + compressedLength] == data)
{
compressedLength++;
}
dest[destPos++] = 0x80 | (compressedLength - 3);
dest[destPos++] = data;
srcPos += compressedLength;
}
if (srcPos == srcSize)
{
// Pad to multiple of 4 bytes.
int remainder = destPos % 4;
if (remainder != 0)
{
for (int i = 0; i < 4 - remainder; i++)
dest[destPos++] = 0;
}
*compressedSize = destPos;
return dest;
}
}
fail:
FATAL_ERROR("Fatal error while compressing RL file.\n");
}

9
tools/gbagfx/rl.h Normal file
View File

@ -0,0 +1,9 @@
// Copyright (c) 2016 YamaArashi
#ifndef RL_H
#define RL_H
unsigned char *RLDecompress(unsigned char *src, int srcSize, int *uncompressedSize);
unsigned char *RLCompress(unsigned char *src, int srcSize, int *compressedSize);
#endif // RL_H