diff options
author | Astatin <[email protected]> | 2025-06-10 18:27:13 +0200 |
---|---|---|
committer | Astatin <[email protected]> | 2025-06-10 18:27:13 +0200 |
commit | a9142d0163f41c89196ea201ce8245899c701b82 (patch) | |
tree | fee05913dc30343798c4ccc9062ece30bdacbbec /dialogues | |
parent | 9690f6f39bdabcaa62211fd10027c3dba3169e94 (diff) |
Add support for multi bank data
Diffstat (limited to 'dialogues')
-rw-r--r-- | dialogues/dialogues.gbasm | 254 | ||||
-rw-r--r-- | dialogues/functions.gbasm | 261 | ||||
-rw-r--r-- | dialogues/game.gbasm | 26 | ||||
-rw-r--r-- | dialogues/utils.gbasm | 8 |
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 |