; Value macros ; Many arbitrary percentages are simple base-10 or base-16 values: ; - 10 = 4 percent ; - 15 = 6 percent ; - $10 = 6 percent + 1 = 7 percent - 1 ; - 20 = 8 percent ; - 25 = 10 percent ; - 30 = 12 percent ; - 40 = 16 percent ; - 50 = 20 percent - 1 ; - 60 = 24 percent - 1 ; - 70 = 28 percent - 1 ; - 80 = 31 percent + 1 = 32 percent - 1 ; - 85 = 33 percent + 1 = 34 percent - 1 ; - 100 = 39 percent + 1 = 40 percent - 2 ; - 120 = 47 percent + 1 ; - 123 = 49 percent - 1 ; - 160 = 63 percent ; - 180 = 71 percent - 1 = 70 percent + 2 ; - 200 = 79 percent - 1 ; - 230 = 90 percent + 1 percent EQUS "* $ff / 100" ; e.g. 1 out_of 2 == 50 percent + 1 == $80 out_of EQUS "* $100 /" ; Constant data (db, dw, dl) macros dwb: MACRO dw \1 db \2 ENDM dbw: MACRO db \1 dw \2 ENDM dbbw: MACRO db \1, \2 dw \3 ENDM dbww: MACRO db \1 dw \2, \3 ENDM dbwww: MACRO db \1 dw \2, \3, \4 ENDM dn: MACRO ; nybbles rept _NARG / 2 db ((\1) << 4) | (\2) shift 2 endr ENDM dc: MACRO ; "crumbs" rept _NARG / 4 db ((\1) << 6) | ((\2) << 4) | ((\3) << 2) | (\4) shift 4 endr ENDM dx: MACRO x = 8 * ((\1) - 1) rept \1 db ((\2) >> x) & $ff x = x - 8 endr ENDM dt: MACRO ; three-byte (big-endian) dx 3, \1 ENDM dd: MACRO ; four-byte (big-endian) dx 4, \1 ENDM bigdw: MACRO ; big-endian word dx 2, \1 ; db HIGH(\1), LOW(\1) ENDM dba: MACRO ; dbw bank, address rept _NARG dbw BANK(\1), \1 shift endr ENDM dab: MACRO ; dwb address, bank rept _NARG dwb \1, BANK(\1) shift endr ENDM ; Reverses FixPicBank in engine/gfx/load_pics.asm ; ; Takes the actual bank of the pic in the ROM and returns the "defined" bank ; $1f -> $13 ; $20 -> $14 ; $2e -> $1f ; ; Otherwise, the ROM bank will match the defined bank. dba_pic: MACRO ; dbw bank, address db (BANK(\1) == $1f) * ($13 - $1f) \ + (BANK(\1) == $20) * ($14 - $20) \ + (BANK(\1) == $2e) * ($1f - $2e) \ + (BANK(\1)) dw \1 ENDM bcd: MACRO rept _NARG dn ((\1) % 100) / 10, (\1) % 10 shift endr ENDM sine_table: MACRO ; \1: amplitude x = 0 rept 32 dw (sin(x) + (sin(x) & $ff)) >> 8 ; round up x = x + (\1) * $40000 endr ENDM