aboutsummaryrefslogtreecommitdiffstats
path: root/macros/scripts
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xmacros/scripts/audio.asm (renamed from macros/audio_macros.asm)28
-rwxr-xr-xmacros/scripts/events.asm (renamed from macros/event_macros.asm)102
-rw-r--r--macros/scripts/maps.asm184
-rwxr-xr-xmacros/scripts/text.asm (renamed from macros/text_macros.asm)2
4 files changed, 250 insertions, 66 deletions
diff --git a/macros/audio_macros.asm b/macros/scripts/audio.asm
index 95b9ecbc..8a250c63 100755
--- a/macros/audio_macros.asm
+++ b/macros/scripts/audio.asm
@@ -1,18 +1,3 @@
-
-StopAllMusic: MACRO
- ld a, $ff
- call PlaySound
-ENDM
-
-Ch1 EQU 0
-Ch2 EQU 1
-Ch3 EQU 2
-Ch4 EQU 3
-Ch5 EQU 4
-Ch6 EQU 5
-Ch7 EQU 6
-Ch8 EQU 7
-
audio_header: MACRO
db (_NARG - 2) << 6 | \2
dw \1_\2
@@ -73,19 +58,6 @@ noise_note: MACRO
db \4
ENDM
-C_ EQU $0
-C# EQU $1
-D_ EQU $2
-D# EQU $3
-E_ EQU $4
-F_ EQU $5
-F# EQU $6
-G_ EQU $7
-G# EQU $8
-A_ EQU $9
-A# EQU $A
-B_ EQU $B
-
; arguments: pitch, length [1, 16]
note: MACRO
db (\1 << 4) | (\2 - 1)
diff --git a/macros/event_macros.asm b/macros/scripts/events.asm
index 20027209..c5f90107 100755
--- a/macros/event_macros.asm
+++ b/macros/scripts/events.asm
@@ -15,7 +15,8 @@ event_byte = ((\1) / 8)
ELSE
bit (\1) % 8, a
ENDC
- ENDM
+ENDM
+
;\1 = event index
CheckEventReuseA: MACRO
@@ -25,7 +26,8 @@ event_byte = ((\1) / 8)
ENDC
bit (\1) % 8, a
- ENDM
+ENDM
+
;\1 = event index
;\2 = event index of the last event used before the branch
@@ -37,7 +39,8 @@ event_byte = ((\1) / 8)
ENDC
bit (\1) % 8, a
- ENDM
+ENDM
+
;\1 = reg
;\2 = event index
@@ -48,21 +51,24 @@ EventFlagBit: MACRO
ELSE
ld \1, (\2) % 8
ENDC
- ENDM
+ENDM
+
;\1 = reg
;\2 = event index
EventFlagAddress: MACRO
event_byte = ((\2) / 8)
ld \1, wEventFlags + event_byte
- ENDM
+ENDM
+
;\1 = event index
CheckEventHL: MACRO
event_byte = ((\1) / 8)
ld hl, wEventFlags + event_byte
bit (\1) % 8, [hl]
- ENDM
+ENDM
+
;\1 = event index
CheckEventReuseHL: MACRO
@@ -72,14 +78,16 @@ event_byte = ((\1) / 8)
ENDC
bit (\1) % 8, [hl]
- ENDM
+ENDM
+
; dangerous, only use when HL is guaranteed to be the desired value
;\1 = event index
CheckEventForceReuseHL: MACRO
event_byte = ((\1) / 8)
bit (\1) % 8, [hl]
- ENDM
+ENDM
+
;\1 = event index
;\2 = event index of the last event used before the branch
@@ -91,7 +99,8 @@ event_byte = ((\1) / 8)
ENDC
bit (\1) % 8, [hl]
- ENDM
+ENDM
+
;\1 = event index
CheckAndSetEvent: MACRO
@@ -99,7 +108,8 @@ event_byte = ((\1) / 8)
ld hl, wEventFlags + event_byte
bit (\1) % 8, [hl]
set (\1) % 8, [hl]
- ENDM
+ENDM
+
;\1 = event index
CheckAndResetEvent: MACRO
@@ -107,7 +117,8 @@ event_byte = ((\1) / 8)
ld hl, wEventFlags + event_byte
bit (\1) % 8, [hl]
res (\1) % 8, [hl]
- ENDM
+ENDM
+
;\1 = event index
CheckAndSetEventA: MACRO
@@ -115,7 +126,8 @@ CheckAndSetEventA: MACRO
bit (\1) % 8, a
set (\1) % 8, a
ld [wEventFlags + ((\1) / 8)], a
- ENDM
+ENDM
+
;\1 = event index
CheckAndResetEventA: MACRO
@@ -123,14 +135,16 @@ CheckAndResetEventA: MACRO
bit (\1) % 8, a
res (\1) % 8, a
ld [wEventFlags + ((\1) / 8)], a
- ENDM
+ENDM
+
;\1 = event index
SetEvent: MACRO
event_byte = ((\1) / 8)
ld hl, wEventFlags + event_byte
set (\1) % 8, [hl]
- ENDM
+ENDM
+
;\1 = event index
SetEventReuseHL: MACRO
@@ -140,7 +154,8 @@ event_byte = ((\1) / 8)
ENDC
set (\1) % 8, [hl]
- ENDM
+ENDM
+
;\1 = event index
;\2 = event index of the last event used before the branch
@@ -152,32 +167,36 @@ event_byte = ((\1) / 8)
ENDC
set (\1) % 8, [hl]
- ENDM
+ENDM
+
; dangerous, only use when HL is guaranteed to be the desired value
;\1 = event index
SetEventForceReuseHL: MACRO
event_byte = ((\1) / 8)
set (\1) % 8, [hl]
- ENDM
+ENDM
+
;\1 = event index
;\2 = event index
;\3, \4, ... = additional (optional) event indices
SetEvents: MACRO
SetEvent \1
- rept (_NARG + -1)
+ rept _NARG - 1
SetEventReuseHL \2
shift
endr
- ENDM
+ENDM
+
;\1 = event index
ResetEvent: MACRO
event_byte = ((\1) / 8)
ld hl, wEventFlags + event_byte
res (\1) % 8, [hl]
- ENDM
+ENDM
+
;\1 = event index
ResetEventReuseHL: MACRO
@@ -187,7 +206,8 @@ event_byte = ((\1) / 8)
ENDC
res (\1) % 8, [hl]
- ENDM
+ENDM
+
;\1 = event index
;\2 = event index of the last event used before the branch
@@ -199,25 +219,28 @@ event_byte = ((\1) / 8)
ENDC
res (\1) % 8, [hl]
- ENDM
+ENDM
+
; dangerous, only use when HL is guaranteed to be the desired value
;\1 = event index
ResetEventForceReuseHL: MACRO
event_byte = ((\1) / 8)
res (\1) % 8, [hl]
- ENDM
+ENDM
+
;\1 = event index
;\2 = event index
;\3 = event index (optional)
ResetEvents: MACRO
ResetEvent \1
- rept (_NARG + -1)
+ rept _NARG - 1
ResetEventReuseHL \2
shift
endr
- ENDM
+ENDM
+
;\1 = event index
;\2 = number of bytes away from the base address (optional, for matching the ROM)
@@ -227,7 +250,8 @@ dbEventFlagBit: MACRO
ELSE
db ((\1) % 8)
ENDC
- ENDM
+ENDM
+
;\1 = event index
;\2 = number of bytes away from the base address (optional, for matching the ROM)
@@ -237,7 +261,8 @@ dwEventFlagAddress: MACRO
ELSE
dw wEventFlags + ((\1) / 8)
ENDC
- ENDM
+ENDM
+
;\1 = start
;\2 = end
@@ -258,7 +283,7 @@ event_fill_start = event_start_byte + 1
event_fill_count = event_end_byte - event_start_byte - 1
IF ((\1) % 8) == 0
-event_fill_start = event_fill_start + -1
+event_fill_start = event_fill_start - 1
event_fill_count = event_fill_count + 1
ELSE
ld a, [wEventFlags + event_start_byte]
@@ -279,7 +304,7 @@ event_fill_count = event_fill_count + 1
ld a, $ff
ld hl, wEventFlags + event_fill_start
- REPT event_fill_count + -1
+ REPT event_fill_count - 1
ld [hli], a
ENDR
@@ -297,7 +322,8 @@ event_fill_count = event_fill_count + 1
ENDC
ENDC
ENDC
- ENDM
+ENDM
+
;\1 = start
;\2 = end
@@ -319,7 +345,7 @@ event_fill_start = event_start_byte + 1
event_fill_count = event_end_byte - event_start_byte - 1
IF ((\1) % 8) == 0
-event_fill_start = event_fill_start + -1
+event_fill_start = event_fill_start - 1
event_fill_count = event_fill_count + 1
ELSE
ld a, [wEventFlags + event_start_byte]
@@ -344,7 +370,7 @@ event_fill_count = event_fill_count + 1
xor a
ENDC
- REPT event_fill_count + -1
+ REPT event_fill_count - 1
ld [hli], a
ENDR
@@ -362,7 +388,8 @@ event_fill_count = event_fill_count + 1
ENDC
ENDC
ENDC
- ENDM
+ENDM
+
; returns whether both events are set in Z flag
; This is counter-intuitive because the other event checks set the Z flag when
@@ -400,7 +427,8 @@ event_byte = ((\1) / 8)
pop bc
ENDC
ENDC
- ENDM
+ENDM
+
; returns the complement of whether either event is set in Z flag
;\1 = event index 1
@@ -429,7 +457,8 @@ CheckEitherEventSet: MACRO
pop bc
ENDC
ENDC
- ENDM
+ENDM
+
; for handling fixed event bits when events are inserted/removed
;\1 = event index
@@ -438,4 +467,5 @@ AdjustEventBit: MACRO
IF ((\1) % 8) != (\2)
add ((\1) % 8) - (\2)
ENDC
- ENDM
+ENDM
+
diff --git a/macros/scripts/maps.asm b/macros/scripts/maps.asm
new file mode 100644
index 00000000..a30561b9
--- /dev/null
+++ b/macros/scripts/maps.asm
@@ -0,0 +1,184 @@
+;\1 map width
+;\2 Rows above (Y-blocks)
+;\3 X movement (X-blocks)
+EVENT_DISP: MACRO
+ dw (wOverworldMap + 7 + (\1) + ((\1) + 6) * ((\2) >> 1) + ((\3) >> 1)) ; Ev.Disp
+ db \2,\3 ;Y,X
+ENDM
+
+FLYWARP_DATA: MACRO
+ EVENT_DISP \1,\2,\3
+ db ((\2) & $01) ;sub-block Y
+ db ((\3) & $01) ;sub-block X
+ENDM
+
+; external map entry macro
+EMAP: MACRO ; emap x-coordinate,y-coordinate,textpointer
+; the appearance of towns and routes in the town map, indexed by map id
+ ; nybble: y-coordinate
+ ; nybble: x-coordinate
+ ; word : pointer to map name
+ dn \2, \1
+ dw \3
+ENDM
+
+; internal map entry macro
+IMAP: MACRO ; imap mapid_less_than,x-coordinate,y-coordinate,textpointer
+; the appearance of buildings and dungeons in the town map
+ ; byte : maximum map id subject to this rule
+ ; nybble: y-coordinate
+ ; nybble: x-coordinate
+ ; word : pointer to map name
+ db \1 + 1
+ dn \3, \2
+ dw \4
+ENDM
+
+;\1 sprite id
+;\2 x position
+;\3 y position
+;\4 movement (WALK/STAY)
+;\5 range or direction
+;\6 text id
+;\7 items only: item id
+;\7 trainers only: trainer class/pokemon id
+;\8 trainers only: trainer number/pokemon level
+object: MACRO
+ db \1
+ db \3 + 4
+ db \2 + 4
+ db \4
+ db \5
+ IF (_NARG > 7)
+ db TRAINER | \6
+ db \7
+ db \8
+ ELSE
+ IF (_NARG > 6)
+ db ITEM | \6
+ db \7
+ ELSE
+ db \6
+ ENDC
+ ENDC
+ENDM
+
+;\1 x position
+;\2 y position
+;\3 destination warp id
+;\4 destination map (-1 = wLastMap)
+warp: MACRO
+ db \2, \1, \3, \4
+ENDM
+
+;\1 x position
+;\2 y position
+;\3 sign id
+sign: MACRO
+ db \2, \1, \3
+ENDM
+
+;\1 x position
+;\2 y position
+;\3 map width
+warp_to: MACRO
+ EVENT_DISP \3, \2, \1
+ENDM
+
+;\1 map name
+;\2 map id
+;\3 tileset
+;\4 connections: combo of NORTH, SOUTH, WEST, and/or EAST, or 0 for none
+map_header: MACRO
+CURRENT_MAP_WIDTH = \2_WIDTH
+CURRENT_MAP_HEIGHT = \2_HEIGHT
+CURRENT_MAP_OBJECT EQUS "\1_Object"
+\1_h::
+ db \3
+ db CURRENT_MAP_HEIGHT, CURRENT_MAP_WIDTH
+ dw \1_Blocks
+ dw \1_TextPointers
+ dw \1_Script
+ db \4
+ENDM
+
+; Comes after map_header and connection macros
+end_map_header: MACRO
+ dw CURRENT_MAP_OBJECT
+PURGE CURRENT_MAP_WIDTH
+PURGE CURRENT_MAP_HEIGHT
+PURGE CURRENT_MAP_OBJECT
+ENDM
+
+; Connections go in order: north, south, west, east
+;\1 direction
+;\2 map name
+;\3 map id
+;\4 offset of the target map relative to the current map
+; (x offset for east/west, y offset for north/south)
+connection: MACRO
+
+; Calculate tile offsets for source (current) and target maps
+_src = 0
+_tgt = (\4) + 3
+if _tgt < 2
+_src = -_tgt
+_tgt = 0
+endc
+
+if "\1" == "north"
+_blk = \3_WIDTH * (\3_HEIGHT - 3) + _src
+_map = _tgt
+_win = (\3_WIDTH + 6) * \3_HEIGHT + 1
+_y = \3_HEIGHT * 2 - 1
+_x = (\4) * -2
+_len = CURRENT_MAP_WIDTH + 3 - (\4)
+if _len > \3_WIDTH
+_len = \3_WIDTH
+endc
+
+elif "\1" == "south"
+_blk = _src
+_map = (CURRENT_MAP_WIDTH + 6) * (CURRENT_MAP_HEIGHT + 3) + _tgt
+_win = \3_WIDTH + 7
+_y = 0
+_x = (\4) * -2
+_len = CURRENT_MAP_WIDTH + 3 - (\4)
+if _len > \3_WIDTH
+_len = \3_WIDTH
+endc
+
+elif "\1" == "west"
+_blk = (\3_WIDTH * _src) + \3_WIDTH - 3
+_map = (CURRENT_MAP_WIDTH + 6) * _tgt
+_win = (\3_WIDTH + 6) * 2 - 6
+_y = (\4) * -2
+_x = \3_WIDTH * 2 - 1
+_len = CURRENT_MAP_HEIGHT + 3 - (\4)
+if _len > \3_HEIGHT
+_len = \3_HEIGHT
+endc
+
+elif "\1" == "east"
+_blk = (\3_WIDTH * _src)
+_map = (CURRENT_MAP_WIDTH + 6) * _tgt + CURRENT_MAP_WIDTH + 3
+_win = \3_WIDTH + 7
+_y = (\4) * -2
+_x = 0
+_len = CURRENT_MAP_HEIGHT + 3 - (\4)
+if _len > \3_HEIGHT
+_len = \3_HEIGHT
+endc
+
+else
+fail "Invalid direction for 'connection'."
+endc
+
+ db \3
+ dw \2_Blocks + _blk
+ dw wOverworldMap + _map
+ db _len - _src
+ db \3_WIDTH
+ db _y, _x
+ dw wOverworldMap + _win
+ENDM
diff --git a/macros/text_macros.asm b/macros/scripts/text.asm
index 21e02634..732a22d4 100755
--- a/macros/text_macros.asm
+++ b/macros/scripts/text.asm
@@ -1,5 +1,3 @@
-
-; text macros
text EQUS "db $00," ; Start writing text.
next EQUS "db $4e," ; Move a line down.
line EQUS "db $4f," ; Start writing at the bottom line.