Compressed cutscene code

Improved how cutscene code gets compressed and linked into the ROM.
Also added rev. 1 of English version
This commit is contained in:
everything8215 2022-12-07 23:20:52 -05:00
parent 4c5934f203
commit e60dbbf938
8 changed files with 91 additions and 50 deletions

1
.gitignore vendored
View File

@ -1,5 +1,6 @@
.DS_Store
*.sfc
*.lz
*.bin
*.o
*.lst

View File

@ -70,39 +70,43 @@ OBJ_FILES_JP = $(foreach M, $(MODULES), $(M)/obj/$(M)_jp.o)
OBJ_FILES_EN = $(foreach M, $(MODULES), $(M)/obj/$(M)_en.o)
OBJ_FILES_EN1 = $(foreach M, $(MODULES), $(M)/obj/$(M)_en1.o)
# compressed cutscene program
CUTSCENE_LZ = cutscene/lz/cutscene.lz
# rules for making ROM files
# run linker twice: 1st for the cutscene program, 2nd for the ROM itself
cutscene/data/cutscene_jp.lz: ff6-en.lnk $(OBJ_FILES_JP)
$(FF6_JP_PATH): ff6-jp.cfg encode-jp $(OBJ_FILES_JP)
@mkdir -p cutscene/lz
$(LINK) $(LINKFLAGS) -o "" -C $< $(OBJ_FILES_JP)
${LZSS} $(@:lz=bin) $@
$(MAKE) -C cutscene
${LZSS} $(CUTSCENE_LZ:lz=bin) $(CUTSCENE_LZ)
$(MAKE) -C cutscene lz
@mkdir -p rom
$(LINK) $(LINKFLAGS) -m $(@:sfc=map) -o $@ -C $< $(OBJ_FILES_JP) $(CUTSCENE_LZ).o
@$(RM) -r cutscene/lz
node tools/calc-checksum.js $@
cutscene/data/cutscene_en.lz: ff6-en.lnk $(OBJ_FILES_EN)
$(FF6_EN_PATH): ff6-en.cfg encode-en $(OBJ_FILES_EN)
@mkdir -p cutscene/lz
$(LINK) $(LINKFLAGS) -o "" -C $< $(OBJ_FILES_EN)
${LZSS} $(@:lz=bin) $@
$(MAKE) -C cutscene
${LZSS} $(CUTSCENE_LZ:lz=bin) $(CUTSCENE_LZ)
$(MAKE) -C cutscene lz
@mkdir -p rom
$(LINK) $(LINKFLAGS) -m $(@:sfc=map) -o $@ -C $< $(OBJ_FILES_EN) $(CUTSCENE_LZ).o
@$(RM) -r cutscene/lz
node tools/calc-checksum.js $@
cutscene/data/cutscene_en1.lz: ff6-en.lnk $(OBJ_FILES_EN1)
$(FF6_EN1_PATH): ff6-en.cfg encode-en $(OBJ_FILES_EN1)
@mkdir -p cutscene/lz
$(LINK) $(LINKFLAGS) -o "" -C $< $(OBJ_FILES_EN1)
${LZSS} $(@:lz=bin) $@
$(MAKE) -C cutscene
$(FF6_JP_PATH): ff6-jp.lnk encode-jp $(OBJ_FILES_JP)
${LZSS} $(CUTSCENE_LZ:lz=bin) $(CUTSCENE_LZ)
$(MAKE) -C cutscene lz
@mkdir -p rom
$(LINK) $(LINKFLAGS) -m $(@:sfc=map) -o $@ -C $< $(OBJ_FILES_JP)
node tools/calc-checksum.js $@
$(FF6_EN_PATH): ff6-en.lnk encode-en cutscene/data/cutscene_en.lz $(OBJ_FILES_EN)
@mkdir -p rom
$(LINK) $(LINKFLAGS) -m $(@:sfc=map) -o $@ -C $< $(OBJ_FILES_EN)
node tools/calc-checksum.js $@
$(FF6_EN1_PATH): ff6-en.lnk encode-en $(OBJ_FILES_EN1)
@mkdir -p rom
$(LINK) $(LINKFLAGS) -m $(@:sfc=map) -o $@ -C $< $(OBJ_FILES_EN1)
$(LINK) $(LINKFLAGS) -m $(@:sfc=map) -o $@ -C $< $(OBJ_FILES_EN1) $(CUTSCENE_LZ).o
@$(RM) -r cutscene/lz
node tools/calc-checksum.js $@
# run sub-make to create object files for each module
# $(OBJ_FILES): $(MODULES)
$(OBJ_FILES_JP): $(MODULES)
$(OBJ_FILES_EN): $(MODULES)
$(OBJ_FILES_EN1): $(MODULES)

View File

@ -14040,7 +14040,7 @@ DrawDlgLetter:
sta $24
jsr Mult8
lda $4b
jne $6256
jne _c16256
lda $7a
and #$f8
longa
@ -14179,6 +14179,7 @@ _c1624e:
; [ ]
_c16256:
@6256: lda $7a
and #$07
tax
@ -18721,7 +18722,7 @@ UpdateMenuState_0e:
lda $2094,x
sta $7a84
and #$40
jeq $55b0
jeq UpdateMenuState_3f
jmp _c17795
@81eb: inc $95 ; play error sound effect
@ -19747,7 +19748,7 @@ UpdateMenuState_0a:
stz $7a1e
stz $ecba
and #$40
jeq $55b0
jeq UpdateMenuState_3f
jmp _c17795
@893b: lda $09
bpl @8963
@ -27978,7 +27979,7 @@ CalcAttackerPos:
get_pointer_main:
_c4a0: sta $ecb1 ; characer/monster number
jmi $c58f ; branch if a monster
jmi @c58f ; branch if a monster
; character
asl
@ -35287,7 +35288,7 @@ magic_code0f:
lda $7b10,y ; character facing direction
eor $6f88,x ; animation direction
and #$01
jeq $f377 ; move thread
jeq AnimCmd_83 ; move thread
@f279: rts
; ------------------------------------------------------------------------------
@ -35330,7 +35331,7 @@ magic_code1c:
tay
lda $7b10,y
and #$01
jeq $f377
jeq AnimCmd_83
@f2b5: rts
; ------------------------------------------------------------------------------

View File

@ -11,7 +11,7 @@ DATA_FILES = $(wildcard data/*)
GFX_FILES = $(wildcard gfx/*)
TEXT_FILES = $(wildcard text/*)
.PHONY: all clean
.PHONY: all clean lz
# disable default suffix rules
.SUFFIXES:
@ -19,12 +19,19 @@ TEXT_FILES = $(wildcard text/*)
all: $(TARGET)
clean:
$(RM) -r $(OBJ_DIR) data gfx text
$(RM) -r $(OBJ_DIR) data gfx text lz
# first ensure that the compressed cutscene program file exists
# it will just be an empty file the first time the linker is run
$(TARGET): $(SRC_FILES) $(INC_FILES) $(DATA_FILES) $(GFX_FILES) $(TEXT_FILES)
@mkdir -p data
@touch data/cutscene_$(VERSION_EXT).lz
@mkdir -p $(OBJ_DIR)
$(ASM) $(ASMFLAGS) -I $(INC_DIR) -l $(@:o=lst) $(SRC_MAIN) -o $@
LZ_DIR = lz
LZ_SRC = $(NAME)_lz.asm
LZ_DATA = $(LZ_DIR)/$(NAME).lz
LZ_TARGET = $(LZ_DATA).o
lz: $(LZ_TARGET)
# rule to generate an object file for the compressed cutscene program
$(LZ_TARGET): $(LZ_DATA)
$(ASM) $(ASMFLAGS) -I $(INC_DIR) $(LZ_SRC) -o $@

View File

@ -53,26 +53,26 @@ WorldOfRuinScene_ext:
; ------------------------------------------------------------------------------
TitleScreen:
@680c: jsr DecompCutsceneProg
jml TitleScreen_ext2
@680c: jsr DecompCutsceneProg
jml TitleScreen_ext2
; ------------------------------------------------------------------------------
OpeningCredits:
@6813: jsr DecompCutsceneProg
jml OpeningCredits_ext2
@6813: jsr DecompCutsceneProg
jml OpeningCredits_ext2
; ------------------------------------------------------------------------------
FloatingContScene:
@681a: jsr DecompCutsceneProg
jml FloatingContScene_ext2
@681a: jsr DecompCutsceneProg
jml FloatingContScene_ext2
; ------------------------------------------------------------------------------
WorldOfRuinScene:
@6821: jsr DecompCutsceneProg
jml WorldOfRuinScene_ext2
@6821: jsr DecompCutsceneProg
jml WorldOfRuinScene_ext2
; ------------------------------------------------------------------------------
@ -94,7 +94,7 @@ DecompCutsceneProg:
ldx #$0000
phx
pld
ldx #$0000
ldx #0
stx $00
lda #$7e
sta hWMADDH
@ -123,9 +123,10 @@ DecompCutsceneProg:
; ------------------------------------------------------------------------------
.segment "cutscene_lz"
; c2/686c
CutsceneProg:
.incbin "data/cutscene_en.lz"
; ------------------------------------------------------------------------------

20
cutscene/cutscene_lz.asm Normal file
View File

@ -0,0 +1,20 @@
; +----------------------------------------------------------------------------+
; | |
; | FINAL FANTASY VI |
; | |
; +----------------------------------------------------------------------------+
; | file: cutscene_lz.asm |
; | |
; | description: generates compressed cutscene obj file |
; | |
; | created: 12/7/2022 |
; +----------------------------------------------------------------------------+
; ------------------------------------------------------------------------------
.segment "cutscene_lz"
.incbin "lz/cutscene.lz" ; c2/686c
; ------------------------------------------------------------------------------

View File

@ -2,7 +2,7 @@ memory {
ram: start = $000000, size = $2000, type = rw;
wram: start = $7e2000, size = $01e000, type = rw;
sram: start = $306000, size = $2000, type = rw;
bank_7e: start = $7e5000, size = $3000, type = ro, fill = no, file = "cutscene/data/cutscene_en.bin";
bank_7e: start = $7e5000, size = $3000, type = ro, fill = no, file = "cutscene/lz/cutscene.bin";
bank_c0: start = $c00000, size = $10000, type = ro, fill = yes, fillval = $ff;
bank_c1: start = $c10000, size = $10000, type = ro, fill = yes, fillval = $ff;
bank_c2: start = $c20000, size = $10000, type = ro, fill = yes, fillval = $ff;
@ -45,6 +45,7 @@ segments {
btlgfx_code: load = bank_c1, type = ro;
battle_code: load = bank_c2, type = ro;
cutscene_code: load = bank_c2, type = ro, start = $c26800;
cutscene_lz: load = bank_c2, type = ro;
ending_anim1: load = bank_c2, type = ro, start = $c28a70;
btlgfx_code2: load = bank_c2, type = ro, start = $c2a800;
decompress_code: load = bank_c2, type = ro, start = $c2fc6d;

View File

@ -22,14 +22,20 @@
.endif
.endmacro
def_config ROM_VERSION,0
def_config DEBUG,0
def_config LANG_EN,0
def_config LANG_EN_REV1,0
.if LANG_EN
.define LANG_SUFFIX "en"
.if (LANG_EN .and ROM_VERSION)
LANG_EN_REV1 = 1
.else
.define LANG_SUFFIX "jp"
LANG_EN_REV1 = 0
.endif
; define language suffix
.if LANG_EN
.define LANG_SUFFIX "en"
.else
.define LANG_SUFFIX "jp"
.endif
.list on