aboutsummaryrefslogtreecommitdiff
path: root/dialogues/functions.gbasm
diff options
context:
space:
mode:
Diffstat (limited to 'dialogues/functions.gbasm')
-rw-r--r--dialogues/functions.gbasm261
1 files changed, 261 insertions, 0 deletions
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