aboutsummaryrefslogtreecommitdiff
path: root/dialogues
diff options
context:
space:
mode:
authorAstatin <[email protected]>2025-06-10 18:27:13 +0200
committerAstatin <[email protected]>2025-06-10 18:27:13 +0200
commita9142d0163f41c89196ea201ce8245899c701b82 (patch)
treefee05913dc30343798c4ccc9062ece30bdacbbec /dialogues
parent9690f6f39bdabcaa62211fd10027c3dba3169e94 (diff)
Add support for multi bank data
Diffstat (limited to 'dialogues')
-rw-r--r--dialogues/dialogues.gbasm254
-rw-r--r--dialogues/functions.gbasm261
-rw-r--r--dialogues/game.gbasm26
-rw-r--r--dialogues/utils.gbasm8
4 files changed, 293 insertions, 256 deletions
diff --git a/dialogues/dialogues.gbasm b/dialogues/dialogues.gbasm
index 02b6f79..1f974cf 100644
--- a/dialogues/dialogues.gbasm
+++ b/dialogues/dialogues.gbasm
@@ -1,255 +1,3 @@
-Dialogue_script_step:
- LD A, ($mem_dialogue_script_program_counter)
- LD H, A
- LD A, ($mem_dialogue_script_program_counter+1)
- LD L, A
-
- .next:
- LD A, (HL+)
-
- LD BC, =Dialogue_script_instruction_Jump_Table
-
- .JUMP_TABLE
-
- LD A, H
- LD ($mem_dialogue_script_program_counter), A
- LD A, L
- LD ($mem_dialogue_script_program_counter+1), A
-
- RET
-
-Dialogue_script_instruction_Jump_Table:
- ; 00
- JP =Exit_Menu
- NOP
-
- ; 01
- JP =.Text
- NOP
-
- ; 02
- JP =.TextB
- NOP
-
- ; 03
- JP =.Learn_Attack
- NOP
-
- ; 04
- JP =.TextB_Indirect
- NOP
-
- ; 05
- JP =.Learn_Attack_Return
- NOP
-
- .Text:
- PUSH HL
- LD HL, $dialogue_first_line
- LD BC, $12
- CALL =bzero
- POP HL
-
- LD A, (HL+)
- LD B, A
- LD A, (HL+)
- LD C, A
- PUSH HL
- LD HL, $dialogue_first_line
- CALL =Print_str
- POP HL
-
- PUSH HL
- LD HL, $dialogue_third_line
- LD BC, $12
- CALL =bzero
- POP HL
-
- LD A, (HL+)
- LD B, A
- LD A, (HL+)
- LD C, A
- PUSH HL
- LD HL, $dialogue_third_line
- CALL =Print_str
- POP HL
-
- LD A, $mem_display_flag
- AND $40 ; Keeping the object ones
- OR $05
- LD $mem_display_flag, A
-
- RET
-
- .TextB:
- PUSH HL
- LD HL, $dialogue_first_line
- LD BC, $12
- CALL =bzero
- POP HL
-
- LD A, (HL+)
- LD B, A
- LD A, (HL+)
- LD C, A
- PUSH HL
- LD HL, $dialogue_first_line
- CALL =Print_str
- POP HL
-
- PUSH HL
- LD HL, $dialogue_third_line
- LD BC, $12
- CALL =bzero
- POP HL
-
- LD A, (HL+)
- LD B, A
- LD A, (HL+)
- LD C, A
- PUSH HL
- LD HL, $dialogue_third_line
- CALL =Print_str
- POP HL
-
- LD A, $mem_display_flag
- AND $40 ; Keeping the object ones
- OR $07
- LD $mem_display_flag, A
-
- RET
-
- .TextB_Indirect:
- PUSH HL
- LD HL, $dialogue_first_line
- LD BC, $12
- CALL =bzero
- POP HL
-
- LD A, (HL+)
- LD B, A
- LD A, (HL+)
- LD C, A
- PUSH DE
- LD A, (BC)
- LD D, A
- INC BC
- LD A, (BC)
- LD E, A
- LD B, D
- LD C, E
- POP DE
- PUSH HL
- LD HL, $dialogue_first_line
- CALL =Print_str
- POP HL
-
-
- PUSH HL
- LD HL, $dialogue_third_line
- LD BC, $12
- CALL =bzero
- POP HL
-
- LD A, (HL+)
- LD B, A
- LD A, (HL+)
- LD C, A
- PUSH HL
- LD HL, $dialogue_third_line
- CALL =Print_str
- POP HL
-
- LD A, $mem_display_flag
- AND $40 ; Keeping the object ones
- OR $07
- LD $mem_display_flag, A
-
- RET
-
- .Learn_Attack:
- LD A, (HL+)
- LD E, A
-
- LD B, $00
- LD C, A
- SLA C
- RR B
- SLA C
- RR B
- SLA C
- RR B
- LD A, C
- ADD low(=Attack_List)
- LD C, A
- LD A, B
- ADC high(=Attack_List)
- LD B, A
-
- LD A, (BC)
- LD ($mem_learn_attack_attack_name_ptr), A
- INC BC
- LD A, (BC)
- LD ($mem_learn_attack_attack_name_ptr+1), A
-
- LD A, H
- LD ($mem_learn_attack_dialogue_ret_ptr), A
- LD A, L
- LD ($mem_learn_attack_dialogue_ret_ptr+1), A
-
- CALL =Check_attack_already_learnt
- CP $01
- JR Z, =.Learn_Attack.Duplicate
-
- LD A, $mem_number_of_attacks
- CP $04
- JR NC, =.Learn_Attack.Not_enough_slot
-
- .Learn_Attack.Success:
- LD A, $mem_number_of_attacks
- LD HL, $mem_bunny_attacks
- ADD L
- LD L, A
- LD (HL), E
- LD A, $mem_number_of_attacks
- INC A
- LD $mem_number_of_attacks, A
-
- LD HL, =.Learn_Attack.Dialogue
- JP =Dialogue_script_step.next
- .Learn_Attack.Dialogue:
- .TEXT =New_attack_1t =New_attack_1b
- .TEXTB_INDIRECT $mem_learn_attack_attack_name_ptr =Double_Exclamation
- .LEARN_ATTACK_RET
-
-
- .Learn_Attack.Not_enough_slot:
-
- LD HL, =.Learn_Attack.Not_enough_slot.Dialogue
- JP =Dialogue_script_step.next
- .Learn_Attack.Not_enough_slot.Dialogue:
- .TEXT =No_attslot_1t =No_attslot_1b
- .TEXTB_INDIRECT $mem_learn_attack_attack_name_ptr =Double_Exclamation
- .TEXT =No_attslot_3t =No_attslot_3b
- .TEXT =No_attslot_4t =Empty
- .LEARN_ATTACK_RET
-
- .Learn_Attack.Duplicate:
- LD HL, =.Learn_Attack.Duplicate.Dialogue
- JP =Dialogue_script_step.next
- .Learn_Attack.Duplicate.Dialogue:
- .TEXT =dup_attack_1t =dup_attack_1b
- .TEXTB_INDIRECT $mem_learn_attack_attack_name_ptr =Double_Exclamation
- .TEXT =dup_attack_3t =dup_attack_3b
- .TEXT =dup_attack_4t =Empty
- .LEARN_ATTACK_RET
-
- .Learn_Attack_Return:
- LD A, ($mem_learn_attack_dialogue_ret_ptr)
- LD H, A
- LD A, ($mem_learn_attack_dialogue_ret_ptr+1)
- LD L, A
- JP =Dialogue_script_step.next
-
.INCLUDE "dialogues/text.gbasm"
+.INCLUDE "dialogues/game.gbasm"
.INCLUDE "dialogues/demo_quest.gbasm"
diff --git a/dialogues/functions.gbasm b/dialogues/functions.gbasm
new file mode 100644
index 0000000..366abf9
--- /dev/null
+++ b/dialogues/functions.gbasm
@@ -0,0 +1,261 @@
+Dialogue_script_step:
+ .ASSERT bank(.) $00
+
+ LD A, $mem_dialogue_script_bank
+ .CHANGE_BANK_TO_A
+ LD A, ($mem_dialogue_script_program_counter)
+ LD H, A
+ LD A, ($mem_dialogue_script_program_counter+1)
+ LD L, A
+
+ .next:
+ LD A, (HL+)
+
+ LD BC, =Dialogue_script_instruction_Jump_Table
+
+ .JUMP_TABLE
+
+ LD A, H
+ LD ($mem_dialogue_script_program_counter), A
+ LD A, L
+ LD ($mem_dialogue_script_program_counter+1), A
+
+ RET
+
+Dialogue_script_instruction_Jump_Table:
+ ; 00
+ JP =Exit_Menu
+ NOP
+
+ ; 01
+ JP =.Text
+ NOP
+
+ ; 02
+ JP =.TextB
+ NOP
+
+ ; 03
+ JP =.Learn_Attack
+ NOP
+
+ ; 04
+ JP =.TextB_Indirect
+ NOP
+
+ ; 05
+ JP =.Learn_Attack_Return
+ NOP
+
+ .Text:
+ PUSH HL
+ LD HL, $dialogue_first_line
+ LD BC, $12
+ CALL =bzero
+ POP HL
+
+ LD A, (HL+)
+ LD B, A
+ LD A, (HL+)
+ LD C, A
+ PUSH HL
+ LD HL, $dialogue_first_line
+ CALL =Print_str
+ POP HL
+
+ PUSH HL
+ LD HL, $dialogue_third_line
+ LD BC, $12
+ CALL =bzero
+ POP HL
+
+ LD A, (HL+)
+ LD B, A
+ LD A, (HL+)
+ LD C, A
+ PUSH HL
+ LD HL, $dialogue_third_line
+ CALL =Print_str
+ POP HL
+
+ LD A, $mem_display_flag
+ AND $40 ; Keeping the object ones
+ OR $05
+ LD $mem_display_flag, A
+
+ RET
+
+ .TextB:
+ PUSH HL
+ LD HL, $dialogue_first_line
+ LD BC, $12
+ CALL =bzero
+ POP HL
+
+ LD A, (HL+)
+ LD B, A
+ LD A, (HL+)
+ LD C, A
+ PUSH HL
+ LD HL, $dialogue_first_line
+ CALL =Print_str
+ POP HL
+
+ PUSH HL
+ LD HL, $dialogue_third_line
+ LD BC, $12
+ CALL =bzero
+ POP HL
+
+ LD A, (HL+)
+ LD B, A
+ LD A, (HL+)
+ LD C, A
+ PUSH HL
+ LD HL, $dialogue_third_line
+ CALL =Print_str
+ POP HL
+
+ LD A, $mem_display_flag
+ AND $40 ; Keeping the object ones
+ OR $07
+ LD $mem_display_flag, A
+
+ RET
+
+ .TextB_Indirect:
+ PUSH HL
+ LD HL, $dialogue_first_line
+ LD BC, $12
+ CALL =bzero
+ POP HL
+
+ LD A, (HL+)
+ LD B, A
+ LD A, (HL+)
+ LD C, A
+
+ LD A, $saved_rom_bank
+ LD $tmp_var_1, A
+
+ LD A, (BC)
+ .CHANGE_BANK_TO_A
+ INC BC
+
+ PUSH DE
+ LD A, (BC)
+ LD D, A
+ INC BC
+ LD A, (BC)
+ LD E, A
+ LD B, D
+ LD C, E
+ POP DE
+
+ PUSH HL
+ LD HL, $dialogue_first_line
+ CALL =Print_str
+ POP HL
+
+ LD A, $tmp_var_1
+ .CHANGE_BANK_TO_A
+
+ PUSH HL
+ LD HL, $dialogue_third_line
+ LD BC, $12
+ CALL =bzero
+ POP HL
+
+ LD A, (HL+)
+ LD B, A
+ LD A, (HL+)
+ LD C, A
+ PUSH HL
+ LD HL, $dialogue_third_line
+ CALL =Print_str
+ POP HL
+
+ LD A, $mem_display_flag
+ AND $40 ; Keeping the object ones
+ OR $07
+ LD $mem_display_flag, A
+
+ RET
+
+ .Learn_Attack:
+ LD A, (HL+)
+ LD E, A
+
+ LD B, $00
+ LD C, A
+ SLA C
+ RR B
+ SLA C
+ RR B
+ SLA C
+ RR B
+ LD A, C
+ ADD low(=Attack_List)
+ LD C, A
+ LD A, B
+ ADC high(=Attack_List)
+ LD B, A
+
+ ; TODO: FIX BANK SHENANIGANS
+
+ LD A, (BC)
+ LD ($mem_learn_attack_attack_name_ptr), A
+ INC BC
+ LD A, (BC)
+ LD ($mem_learn_attack_attack_name_ptr+1), A
+ INC BC
+ LD A, (BC)
+ LD ($mem_learn_attack_attack_name_ptr+2), A
+
+ LD A, $mem_dialogue_script_bank
+ LD ($mem_learn_attack_dialogue_ret_ptr), A
+ LD A, H
+ LD ($mem_learn_attack_dialogue_ret_ptr+1), A
+ LD A, L
+ LD ($mem_learn_attack_dialogue_ret_ptr+2), A
+
+ CALL =Check_attack_already_learnt
+ CP $01
+ JR Z, =.Learn_Attack.Duplicate
+
+ LD A, $mem_number_of_attacks
+ CP $04
+ JR NC, =.Learn_Attack.Not_enough_slot
+
+ .Learn_Attack.Success:
+ LD A, $mem_number_of_attacks
+ LD HL, $mem_bunny_attacks
+ ADD L
+ LD L, A
+ LD (HL), E
+ LD A, $mem_number_of_attacks
+ INC A
+ LD $mem_number_of_attacks, A
+
+ LD HL, ptr(=Learn_Attack_Dialogue_Script)
+ .LOAD_BANK_OF =Learn_Attack_Dialogue_Script
+ JP =Dialogue_script_step.next
+
+ .Learn_Attack.Not_enough_slot:
+ LD HL, ptr(=Learn_Attack_Not_Enough_Slot_Dialogue_Script)
+ .LOAD_BANK_OF =Learn_Attack_Not_Enough_Slot_Dialogue_Script
+ JP =Dialogue_script_step.next
+
+ .Learn_Attack.Duplicate:
+ LD HL, ptr(=Learn_Attack_Duplicate_Dialogue_Script)
+ .LOAD_BANK_OF =Learn_Attack_Duplicate_Dialogue_Script
+ JP =Dialogue_script_step.next
+
+ .Learn_Attack_Return:
+ LD A, ($mem_learn_attack_dialogue_ret_ptr)
+ .CHANGE_BANK_TO_A
+ LD A, ($mem_learn_attack_dialogue_ret_ptr+1)
+ LD H, A
+ LD A, ($mem_learn_attack_dialogue_ret_ptr+2)
+ LD L, A
+ JP =Dialogue_script_step.next
diff --git a/dialogues/game.gbasm b/dialogues/game.gbasm
new file mode 100644
index 0000000..704f19c
--- /dev/null
+++ b/dialogues/game.gbasm
@@ -0,0 +1,26 @@
+Fimsh_Dialogue_Script:
+ .TEXT =fimsh_eegg_1t =fimsh_eegg_1b
+ .TEXT =fimsh_eegg_2t =Empty
+ .TEXT =fimsh_eegg_3t =fimsh_eegg_3b
+ .TEXT =fimsh_eegg_4t =Empty
+ .END
+
+Learn_Attack_Dialogue_Script:
+ .TEXT =New_attack_1t =New_attack_1b
+ .TEXTB_INDIRECT $mem_learn_attack_attack_name_ptr =Double_Exclamation
+ .LEARN_ATTACK_RET
+
+Learn_Attack_Not_Enough_Slot_Dialogue_Script:
+ .TEXT =No_attslot_1t =No_attslot_1b
+ .TEXTB_INDIRECT $mem_learn_attack_attack_name_ptr =Double_Exclamation
+ .TEXT =No_attslot_3t =No_attslot_3b
+ .TEXT =No_attslot_4t =Empty
+ .LEARN_ATTACK_RET
+
+Learn_Attack_Duplicate_Dialogue_Script:
+ .TEXT =dup_attack_1t =dup_attack_1b
+ .TEXTB_INDIRECT $mem_learn_attack_attack_name_ptr =Double_Exclamation
+ .TEXT =dup_attack_3t =dup_attack_3b
+ .TEXT =dup_attack_4t =Empty
+ .LEARN_ATTACK_RET
+
diff --git a/dialogues/utils.gbasm b/dialogues/utils.gbasm
index 51c0083..051c0c8 100644
--- a/dialogues/utils.gbasm
+++ b/dialogues/utils.gbasm
@@ -1,7 +1,9 @@
-.MACRODEF START_SCRIPT script
- LD A, high($script)
+.MACRODEF START_SCRIPT =script
+ LD A, bank(=script)
+ LD $mem_dialogue_script_bank, A
+ LD A, high(ptr(=script))
LD ($mem_dialogue_script_program_counter), A
- LD A, low($script)
+ LD A, low(ptr(=script))
LD ($mem_dialogue_script_program_counter+1), A
CALL =Dialogue_script_step
.END