got frustrated, wrote an audio engine
This commit is contained in:
parent
f3a852edc3
commit
45ca20d569
335
gb_tarot_theme.inc
Normal file
335
gb_tarot_theme.inc
Normal file
@ -0,0 +1,335 @@
|
|||||||
|
; File created by shoofle's s3m2gbt edit
|
||||||
|
|
||||||
|
gb_tarot_theme_0:
|
||||||
|
db $00, $00,
|
||||||
|
db $11, $00,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $40,
|
||||||
|
db $12, $18,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
db $23, $00,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $08,
|
||||||
|
|
||||||
|
db $0F, $01,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $02,
|
||||||
|
db $11, $00,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $80,
|
||||||
|
db $12, $1C,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $03,
|
||||||
|
|
||||||
|
db $0F, $04,
|
||||||
|
db $11, $00,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
db $12, $1F,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
|
db $0F, $05,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $06,
|
||||||
|
db $81, $00,
|
||||||
|
db $12, $18,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $07,
|
||||||
|
|
||||||
|
db $0F, $08,
|
||||||
|
db $12, $1C,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
db $13, $26,
|
||||||
|
db $23, $0F,
|
||||||
|
db $33, $01,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
|
db $0F, $09,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $0A,
|
||||||
|
db $12, $1F,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $0B,
|
||||||
|
|
||||||
|
db $0F, $0C,
|
||||||
|
db $11, $00,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $00,
|
||||||
|
db $12, $18,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
db $13, $24,
|
||||||
|
db $23, $0F,
|
||||||
|
db $33, $00,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
|
db $0F, $0D,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $0E,
|
||||||
|
db $11, $00,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $00,
|
||||||
|
db $12, $1C,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $0F,
|
||||||
|
|
||||||
|
db $0F, $10,
|
||||||
|
db $11, $04,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $40,
|
||||||
|
db $12, $1C,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
db $13, $21,
|
||||||
|
db $23, $0F,
|
||||||
|
db $33, $00,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $08,
|
||||||
|
|
||||||
|
db $0F, $11,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $12,
|
||||||
|
db $11, $04,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $80,
|
||||||
|
db $12, $1F,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $13,
|
||||||
|
|
||||||
|
db $0F, $14,
|
||||||
|
db $11, $04,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
db $12, $23,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
|
db $0F, $15,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $16,
|
||||||
|
db $81, $00,
|
||||||
|
db $12, $1C,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $17,
|
||||||
|
|
||||||
|
db $0F, $18,
|
||||||
|
db $12, $1F,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
|
db $0F, $19,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $1A,
|
||||||
|
db $12, $23,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $1B,
|
||||||
|
|
||||||
|
db $0F, $1C,
|
||||||
|
db $11, $04,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $00,
|
||||||
|
db $12, $1C,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
|
db $0F, $1D,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $1E,
|
||||||
|
db $11, $04,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $00,
|
||||||
|
db $12, $1F,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $1F,
|
||||||
|
|
||||||
|
db $0F, $20,
|
||||||
|
db $11, $06,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $40,
|
||||||
|
db $12, $1F,
|
||||||
|
db $22, $03,
|
||||||
|
db $32, $40,
|
||||||
|
db $13, $28,
|
||||||
|
db $23, $0F,
|
||||||
|
db $33, $01,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $08,
|
||||||
|
|
||||||
|
db $0F, $21,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $22,
|
||||||
|
db $11, $06,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $80,
|
||||||
|
|
||||||
|
db $0F, $23,
|
||||||
|
|
||||||
|
db $0F, $24,
|
||||||
|
db $11, $06,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
db $22, $03,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
|
db $0F, $25,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $26,
|
||||||
|
db $81, $00,
|
||||||
|
|
||||||
|
db $0F, $27,
|
||||||
|
|
||||||
|
db $0F, $28,
|
||||||
|
db $22, $02,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
|
db $0F, $29,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $2A,
|
||||||
|
|
||||||
|
db $0F, $2B,
|
||||||
|
|
||||||
|
db $0F, $2C,
|
||||||
|
db $11, $06,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $00,
|
||||||
|
db $22, $02,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
|
db $0F, $2D,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $2E,
|
||||||
|
db $11, $06,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $00,
|
||||||
|
|
||||||
|
db $0F, $2F,
|
||||||
|
|
||||||
|
db $0F, $30,
|
||||||
|
db $11, $05,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $40,
|
||||||
|
db $22, $01,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $08,
|
||||||
|
|
||||||
|
db $0F, $31,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $32,
|
||||||
|
db $11, $05,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $80,
|
||||||
|
|
||||||
|
db $0F, $33,
|
||||||
|
|
||||||
|
db $0F, $34,
|
||||||
|
db $11, $05,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
db $22, $01,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
|
db $0F, $35,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $36,
|
||||||
|
db $81, $00,
|
||||||
|
|
||||||
|
db $0F, $37,
|
||||||
|
|
||||||
|
db $0F, $38,
|
||||||
|
db $22, $00,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
|
db $0F, $39,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $3A,
|
||||||
|
|
||||||
|
db $0F, $3B,
|
||||||
|
|
||||||
|
db $0F, $3C,
|
||||||
|
db $11, $11,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $00,
|
||||||
|
db $22, $00,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
|
db $0F, $3D,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $3E,
|
||||||
|
db $11, $11,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $00,
|
||||||
|
|
||||||
|
db $0F, $3F,
|
||||||
|
|
||||||
|
gb_tarot_theme:
|
||||||
|
db 3
|
||||||
|
dw gb_tarot_theme_0
|
||||||
|
dw gb_tarot_theme_0
|
||||||
|
dw gb_tarot_theme_0
|
Binary file not shown.
262
gb_tarot_theme1.inc
Normal file
262
gb_tarot_theme1.inc
Normal file
@ -0,0 +1,262 @@
|
|||||||
|
; File created by shoofle's s3m2gbt edit
|
||||||
|
|
||||||
|
gb_tarot_theme1_0:
|
||||||
|
db $00, $00,
|
||||||
|
db $11, $00,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $40,
|
||||||
|
db $12, $18,
|
||||||
|
db $22, $0F,
|
||||||
|
db $32, $40,
|
||||||
|
db $23, $00,
|
||||||
|
db $24, $00,
|
||||||
|
|
||||||
|
db $0F, $01,
|
||||||
|
|
||||||
|
db $0F, $02,
|
||||||
|
db $11, $00,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $80,
|
||||||
|
db $12, $1C,
|
||||||
|
db $22, $0F,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $03,
|
||||||
|
|
||||||
|
db $0F, $04,
|
||||||
|
db $11, $00,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
db $12, $1F,
|
||||||
|
db $22, $0F,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $05,
|
||||||
|
|
||||||
|
db $0F, $06,
|
||||||
|
db $81, $00,
|
||||||
|
db $12, $18,
|
||||||
|
db $22, $0F,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $07,
|
||||||
|
|
||||||
|
db $0F, $08,
|
||||||
|
db $12, $1C,
|
||||||
|
db $22, $0F,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $09,
|
||||||
|
|
||||||
|
db $0F, $0A,
|
||||||
|
db $12, $1F,
|
||||||
|
db $22, $0F,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $0B,
|
||||||
|
|
||||||
|
db $0F, $0C,
|
||||||
|
db $11, $00,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $00,
|
||||||
|
db $12, $18,
|
||||||
|
db $22, $0F,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $0D,
|
||||||
|
|
||||||
|
db $0F, $0E,
|
||||||
|
db $11, $00,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $00,
|
||||||
|
db $12, $1C,
|
||||||
|
db $22, $0F,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $0F,
|
||||||
|
|
||||||
|
db $0F, $10,
|
||||||
|
db $11, $04,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $40,
|
||||||
|
db $12, $1C,
|
||||||
|
db $22, $0F,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $11,
|
||||||
|
|
||||||
|
db $0F, $12,
|
||||||
|
db $11, $04,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $80,
|
||||||
|
db $12, $1F,
|
||||||
|
db $22, $0F,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $13,
|
||||||
|
|
||||||
|
db $0F, $14,
|
||||||
|
db $11, $04,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
db $12, $23,
|
||||||
|
db $22, $0F,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $15,
|
||||||
|
|
||||||
|
db $0F, $16,
|
||||||
|
db $81, $00,
|
||||||
|
db $12, $1C,
|
||||||
|
db $22, $0F,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $17,
|
||||||
|
|
||||||
|
db $0F, $18,
|
||||||
|
db $12, $1F,
|
||||||
|
db $22, $0F,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $19,
|
||||||
|
|
||||||
|
db $0F, $1A,
|
||||||
|
db $12, $23,
|
||||||
|
db $22, $0F,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $1B,
|
||||||
|
|
||||||
|
db $0F, $1C,
|
||||||
|
db $11, $04,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $00,
|
||||||
|
db $12, $1C,
|
||||||
|
db $22, $0F,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $1D,
|
||||||
|
|
||||||
|
db $0F, $1E,
|
||||||
|
db $11, $04,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $00,
|
||||||
|
db $12, $1F,
|
||||||
|
db $22, $0F,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $1F,
|
||||||
|
|
||||||
|
db $0F, $20,
|
||||||
|
db $11, $06,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $40,
|
||||||
|
db $12, $1F,
|
||||||
|
db $22, $0F,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
|
db $0F, $21,
|
||||||
|
|
||||||
|
db $0F, $22,
|
||||||
|
db $11, $06,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $80,
|
||||||
|
db $22, $0C,
|
||||||
|
|
||||||
|
db $0F, $23,
|
||||||
|
|
||||||
|
db $0F, $24,
|
||||||
|
db $11, $06,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
db $22, $0C,
|
||||||
|
|
||||||
|
db $0F, $25,
|
||||||
|
|
||||||
|
db $0F, $26,
|
||||||
|
db $81, $00,
|
||||||
|
db $22, $0C,
|
||||||
|
|
||||||
|
db $0F, $27,
|
||||||
|
|
||||||
|
db $0F, $28,
|
||||||
|
db $22, $07,
|
||||||
|
|
||||||
|
db $0F, $29,
|
||||||
|
|
||||||
|
db $0F, $2A,
|
||||||
|
|
||||||
|
db $0F, $2B,
|
||||||
|
|
||||||
|
db $0F, $2C,
|
||||||
|
db $11, $06,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $00,
|
||||||
|
db $22, $07,
|
||||||
|
|
||||||
|
db $0F, $2D,
|
||||||
|
|
||||||
|
db $0F, $2E,
|
||||||
|
db $11, $06,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $00,
|
||||||
|
|
||||||
|
db $0F, $2F,
|
||||||
|
|
||||||
|
db $0F, $30,
|
||||||
|
db $11, $05,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $40,
|
||||||
|
db $22, $07,
|
||||||
|
|
||||||
|
db $0F, $31,
|
||||||
|
|
||||||
|
db $0F, $32,
|
||||||
|
db $11, $05,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $80,
|
||||||
|
|
||||||
|
db $0F, $33,
|
||||||
|
|
||||||
|
db $0F, $34,
|
||||||
|
db $11, $05,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
db $22, $03,
|
||||||
|
|
||||||
|
db $0F, $35,
|
||||||
|
|
||||||
|
db $0F, $36,
|
||||||
|
db $81, $00,
|
||||||
|
|
||||||
|
db $0F, $37,
|
||||||
|
|
||||||
|
db $0F, $38,
|
||||||
|
db $22, $03,
|
||||||
|
|
||||||
|
db $0F, $39,
|
||||||
|
|
||||||
|
db $0F, $3A,
|
||||||
|
|
||||||
|
db $0F, $3B,
|
||||||
|
|
||||||
|
db $0F, $3C,
|
||||||
|
db $11, $11,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $00,
|
||||||
|
db $22, $03,
|
||||||
|
|
||||||
|
db $0F, $3D,
|
||||||
|
|
||||||
|
db $0F, $3E,
|
||||||
|
db $11, $11,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $00,
|
||||||
|
|
||||||
|
db $0F, $3F,
|
||||||
|
|
||||||
|
gb_tarot_theme1:
|
||||||
|
db 3
|
||||||
|
dw gb_tarot_theme1_0
|
||||||
|
dw gb_tarot_theme1_0
|
||||||
|
dw gb_tarot_theme1_0
|
26
main.asm
26
main.asm
@ -23,25 +23,25 @@ DEF INTERRUPT_LCD EQU SCENE_TEARDOWN + 4
|
|||||||
def CARD_INIT equ INTERRUPT_LCD + 4
|
def CARD_INIT equ INTERRUPT_LCD + 4
|
||||||
def CARD_UPDATE equ CARD_INIT + 4
|
def CARD_UPDATE equ CARD_INIT + 4
|
||||||
def CARD_DRAW equ CARD_UPDATE + 4
|
def CARD_DRAW equ CARD_UPDATE + 4
|
||||||
println "Card Draw is ", CARD_DRAW
|
println "Card Draw is ", SCENE_DRAW
|
||||||
|
|
||||||
; each of these sections is way bgger than it needs to be
|
; each of these sections is way bgger than it needs to be
|
||||||
; i doubt any of them will hold more than $20 bytes at all
|
; i doubt any of them will hold more than $20 bytes at all
|
||||||
; but might as well put them at round numbers for now
|
; but might as well put them at round numbers for now
|
||||||
def ASYNC_VARS_START equ $c200 ; this space's layout defined manually in async.inc
|
def ASYNC_VARS_START equ $c200 ; this space's layout defined manually in async.inc
|
||||||
def SYSTEM_VARS_START equ $c300 ; system variables like buttons pressed, rng, time
|
def SYSTEM_VARS_START equ $c300 ; system variables like buttons pressed, rng, dtime
|
||||||
def GLOBAL_VARS_START equ $c400 ; defined mostly in mainmenu, program-wide state
|
def GLOBAL_VARS_START equ $c400 ; program-wide state defined mostly in mainmenu
|
||||||
def SCREEN_VARS_START equ $c500 ; per-screen variables like animation stuff
|
def SCREEN_VARS_START equ $c500 ; per-screen variables like animation stuff
|
||||||
def CARD_HELPER_VARS_START equ $c600
|
def CARD_HELPER_VARS_START equ $c600 ; variables for card data
|
||||||
def CARD_VARS_START equ $c700 ; variables for animation of individual cards
|
def CARD_VARS_START equ $c700 ; variables for animation of individual cards
|
||||||
def CVS equ CARD_VARS_START
|
def CVS equ CARD_VARS_START ; handy to be able to refer to CVS by a short name
|
||||||
def SHUFFLED_DECK equ $c800 ; location for the shuffled deck
|
def AUDIO_VARS_START equ $c800 ; variables for the audio subsystem
|
||||||
def AUDIO_VARS_START equ $c900
|
def SHUFFLED_DECK equ $c900 ; location for the shuffled deck
|
||||||
|
|
||||||
def ZEROES equ $D000
|
def ZEROES equ $D000
|
||||||
def ONES equ $D200
|
def ONES equ $D200
|
||||||
|
|
||||||
; allocating $8 spaces for system variables, currently only using $4 bytes
|
; system variables, which are like program-wide state vars but More Different
|
||||||
PUSHS "System Variables", WRAM0[SYSTEM_VARS_START]
|
PUSHS "System Variables", WRAM0[SYSTEM_VARS_START]
|
||||||
rMYBTN: db ; EQU SYSTEM_VARS_START
|
rMYBTN: db ; EQU SYSTEM_VARS_START
|
||||||
rMYBTNP: db ;EQU rMYBTN + 1
|
rMYBTNP: db ;EQU rMYBTN + 1
|
||||||
@ -50,7 +50,6 @@ rLFSR: dw ; equ rDELTAT + 1 ; 16 bit
|
|||||||
POPS
|
POPS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def SAFE_DMA_LOCATION equ $ffc0
|
def SAFE_DMA_LOCATION equ $ffc0
|
||||||
|
|
||||||
def VARIABLE_TILES_START equ 26 ; where in VRAM the variable tiles start
|
def VARIABLE_TILES_START equ 26 ; where in VRAM the variable tiles start
|
||||||
@ -559,11 +558,10 @@ LetterTiles:
|
|||||||
db $c0,$c0,$a0,$a0,$b8,$b8,$b0,$b0,$da,$da,$12,$12,$1a,$1a,$03,$03
|
db $c0,$c0,$a0,$a0,$b8,$b8,$b0,$b0,$da,$da,$12,$12,$1a,$1a,$03,$03
|
||||||
.end
|
.end
|
||||||
|
|
||||||
INCLUDE "Async.inc"
|
|
||||||
INCLUDE "Audio.inc"
|
|
||||||
INCLUDE "Random.inc"
|
|
||||||
INCLUDE "CopyRange.inc"
|
INCLUDE "CopyRange.inc"
|
||||||
INCLUDE "CopyTiles.inc"
|
INCLUDE "CopyTiles.inc"
|
||||||
|
INCLUDE "Async.inc"
|
||||||
|
INCLUDE "Random.inc"
|
||||||
INCLUDE "ScreenMainMenu.inc"
|
INCLUDE "ScreenMainMenu.inc"
|
||||||
INCLUDE "ScreenSpreadSelect.inc"
|
INCLUDE "ScreenSpreadSelect.inc"
|
||||||
INCLUDE "CardHelpers.inc"
|
INCLUDE "CardHelpers.inc"
|
||||||
@ -573,4 +571,6 @@ INCLUDE "ScreenShuffle.inc"
|
|||||||
|
|
||||||
INCLUDE "CardLibrary.inc"
|
INCLUDE "CardLibrary.inc"
|
||||||
|
|
||||||
include "gbt_player_bank1.inc"
|
INCLUDE "Audio.inc"
|
||||||
|
|
||||||
|
INCLUDE "theme.inc"
|
||||||
|
BIN
range_test.s3m
BIN
range_test.s3m
Binary file not shown.
672
rangetest.inc
Normal file
672
rangetest.inc
Normal file
@ -0,0 +1,672 @@
|
|||||||
|
; File created by shoofle's s3m2gbt edit
|
||||||
|
|
||||||
|
rangetest_0:
|
||||||
|
db $00, $00,
|
||||||
|
db $11, $00,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $40,
|
||||||
|
db $22, $00,
|
||||||
|
db $23, $00,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $00,
|
||||||
|
|
||||||
|
db $0F, $01,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $02,
|
||||||
|
db $21, $00,
|
||||||
|
|
||||||
|
db $0F, $03,
|
||||||
|
|
||||||
|
db $0F, $04,
|
||||||
|
db $11, $02,
|
||||||
|
db $21, $0E,
|
||||||
|
db $31, $C0,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $00,
|
||||||
|
|
||||||
|
db $0F, $05,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $06,
|
||||||
|
db $21, $00,
|
||||||
|
|
||||||
|
db $0F, $07,
|
||||||
|
|
||||||
|
db $0F, $08,
|
||||||
|
db $11, $04,
|
||||||
|
db $21, $0C,
|
||||||
|
db $31, $C0,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $00,
|
||||||
|
|
||||||
|
db $0F, $09,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $0A,
|
||||||
|
db $21, $00,
|
||||||
|
|
||||||
|
db $0F, $0B,
|
||||||
|
|
||||||
|
db $0F, $0C,
|
||||||
|
db $11, $06,
|
||||||
|
db $21, $0A,
|
||||||
|
db $31, $C0,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $00,
|
||||||
|
|
||||||
|
db $0F, $0D,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $0E,
|
||||||
|
db $21, $09,
|
||||||
|
|
||||||
|
db $0F, $0F,
|
||||||
|
|
||||||
|
db $0F, $10,
|
||||||
|
db $11, $08,
|
||||||
|
db $21, $08,
|
||||||
|
db $31, $C0,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $00,
|
||||||
|
|
||||||
|
db $0F, $11,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $12,
|
||||||
|
db $21, $07,
|
||||||
|
|
||||||
|
db $0F, $13,
|
||||||
|
|
||||||
|
db $0F, $14,
|
||||||
|
db $11, $0A,
|
||||||
|
db $21, $06,
|
||||||
|
db $31, $C0,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $00,
|
||||||
|
|
||||||
|
db $0F, $15,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $16,
|
||||||
|
db $11, $0B,
|
||||||
|
db $21, $05,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $17,
|
||||||
|
|
||||||
|
db $0F, $18,
|
||||||
|
db $11, $0C,
|
||||||
|
db $21, $04,
|
||||||
|
db $31, $C0,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $00,
|
||||||
|
|
||||||
|
db $0F, $19,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $1A,
|
||||||
|
db $11, $0D,
|
||||||
|
db $21, $03,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $1B,
|
||||||
|
|
||||||
|
db $0F, $1C,
|
||||||
|
db $11, $0E,
|
||||||
|
db $21, $02,
|
||||||
|
db $31, $C0,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $00,
|
||||||
|
|
||||||
|
db $0F, $1D,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $1E,
|
||||||
|
db $11, $0F,
|
||||||
|
db $21, $01,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $1F,
|
||||||
|
|
||||||
|
db $0F, $20,
|
||||||
|
db $11, $10,
|
||||||
|
db $21, $00,
|
||||||
|
db $31, $C0,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $00,
|
||||||
|
|
||||||
|
db $0F, $21,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $22,
|
||||||
|
db $11, $11,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $23,
|
||||||
|
|
||||||
|
db $0F, $24,
|
||||||
|
db $11, $12,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $00,
|
||||||
|
|
||||||
|
db $0F, $25,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $26,
|
||||||
|
db $11, $13,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $27,
|
||||||
|
|
||||||
|
db $0F, $28,
|
||||||
|
db $11, $14,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $00,
|
||||||
|
|
||||||
|
db $0F, $29,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $2A,
|
||||||
|
db $11, $15,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $2B,
|
||||||
|
|
||||||
|
db $0F, $2C,
|
||||||
|
db $11, $16,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $00,
|
||||||
|
|
||||||
|
db $0F, $2D,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $2E,
|
||||||
|
db $11, $17,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $2F,
|
||||||
|
|
||||||
|
db $0F, $30,
|
||||||
|
db $11, $18,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $00,
|
||||||
|
|
||||||
|
db $0F, $31,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $32,
|
||||||
|
db $11, $19,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $33,
|
||||||
|
|
||||||
|
db $0F, $34,
|
||||||
|
db $11, $1A,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $00,
|
||||||
|
|
||||||
|
db $0F, $35,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $36,
|
||||||
|
db $11, $1B,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $37,
|
||||||
|
|
||||||
|
db $0F, $38,
|
||||||
|
db $11, $1C,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $00,
|
||||||
|
|
||||||
|
db $0F, $39,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $3A,
|
||||||
|
db $11, $1D,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $3B,
|
||||||
|
|
||||||
|
db $0F, $3C,
|
||||||
|
db $11, $1E,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $00,
|
||||||
|
|
||||||
|
db $0F, $3D,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
|
db $0F, $3E,
|
||||||
|
db $11, $1F,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $3F,
|
||||||
|
|
||||||
|
rangetest_1:
|
||||||
|
db $00, $00,
|
||||||
|
db $11, $20,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
db $22, $00,
|
||||||
|
db $23, $00,
|
||||||
|
db $24, $00,
|
||||||
|
|
||||||
|
db $0F, $01,
|
||||||
|
|
||||||
|
db $0F, $02,
|
||||||
|
db $11, $21,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $03,
|
||||||
|
|
||||||
|
db $0F, $04,
|
||||||
|
db $11, $22,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $05,
|
||||||
|
|
||||||
|
db $0F, $06,
|
||||||
|
db $11, $23,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $07,
|
||||||
|
|
||||||
|
db $0F, $08,
|
||||||
|
db $11, $24,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $09,
|
||||||
|
|
||||||
|
db $0F, $0A,
|
||||||
|
db $11, $25,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $0B,
|
||||||
|
|
||||||
|
db $0F, $0C,
|
||||||
|
db $11, $26,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $0D,
|
||||||
|
|
||||||
|
db $0F, $0E,
|
||||||
|
db $11, $27,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $0F,
|
||||||
|
|
||||||
|
db $0F, $10,
|
||||||
|
db $11, $28,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $11,
|
||||||
|
|
||||||
|
db $0F, $12,
|
||||||
|
db $11, $29,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $13,
|
||||||
|
|
||||||
|
db $0F, $14,
|
||||||
|
db $11, $2A,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $15,
|
||||||
|
|
||||||
|
db $0F, $16,
|
||||||
|
db $11, $2B,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $17,
|
||||||
|
|
||||||
|
db $0F, $18,
|
||||||
|
db $11, $2C,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $19,
|
||||||
|
|
||||||
|
db $0F, $1A,
|
||||||
|
db $11, $2D,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $1B,
|
||||||
|
|
||||||
|
db $0F, $1C,
|
||||||
|
db $11, $2E,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $1D,
|
||||||
|
|
||||||
|
db $0F, $1E,
|
||||||
|
db $11, $2F,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $1F,
|
||||||
|
|
||||||
|
db $0F, $20,
|
||||||
|
db $11, $30,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $21,
|
||||||
|
|
||||||
|
db $0F, $22,
|
||||||
|
db $11, $31,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $23,
|
||||||
|
|
||||||
|
db $0F, $24,
|
||||||
|
db $11, $32,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $25,
|
||||||
|
|
||||||
|
db $0F, $26,
|
||||||
|
db $11, $33,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $27,
|
||||||
|
|
||||||
|
db $0F, $28,
|
||||||
|
db $11, $34,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $29,
|
||||||
|
|
||||||
|
db $0F, $2A,
|
||||||
|
db $11, $35,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $2B,
|
||||||
|
|
||||||
|
db $0F, $2C,
|
||||||
|
db $11, $36,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $2D,
|
||||||
|
|
||||||
|
db $0F, $2E,
|
||||||
|
db $11, $37,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $2F,
|
||||||
|
|
||||||
|
db $0F, $30,
|
||||||
|
db $11, $38,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $31,
|
||||||
|
|
||||||
|
db $0F, $32,
|
||||||
|
db $11, $39,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $33,
|
||||||
|
|
||||||
|
db $0F, $34,
|
||||||
|
db $11, $3A,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $35,
|
||||||
|
|
||||||
|
db $0F, $36,
|
||||||
|
db $11, $3B,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $37,
|
||||||
|
|
||||||
|
db $0F, $38,
|
||||||
|
db $11, $3C,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $39,
|
||||||
|
|
||||||
|
db $0F, $3A,
|
||||||
|
db $11, $3D,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $3B,
|
||||||
|
|
||||||
|
db $0F, $3C,
|
||||||
|
db $11, $3E,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $3D,
|
||||||
|
|
||||||
|
db $0F, $3E,
|
||||||
|
db $11, $3F,
|
||||||
|
db $21, $0F,
|
||||||
|
db $31, $C0,
|
||||||
|
|
||||||
|
db $0F, $3F,
|
||||||
|
|
||||||
|
rangetest_2:
|
||||||
|
db $00, $00,
|
||||||
|
db $11, $40,
|
||||||
|
db $21, $0B,
|
||||||
|
db $31, $80,
|
||||||
|
db $22, $00,
|
||||||
|
db $23, $00,
|
||||||
|
db $24, $00,
|
||||||
|
|
||||||
|
db $0F, $01,
|
||||||
|
|
||||||
|
db $0F, $02,
|
||||||
|
db $11, $41,
|
||||||
|
db $21, $0B,
|
||||||
|
db $31, $80,
|
||||||
|
|
||||||
|
db $0F, $03,
|
||||||
|
|
||||||
|
db $0F, $04,
|
||||||
|
db $11, $42,
|
||||||
|
db $21, $0B,
|
||||||
|
db $31, $80,
|
||||||
|
|
||||||
|
db $0F, $05,
|
||||||
|
|
||||||
|
db $0F, $06,
|
||||||
|
db $11, $43,
|
||||||
|
db $21, $0B,
|
||||||
|
db $31, $80,
|
||||||
|
|
||||||
|
db $0F, $07,
|
||||||
|
|
||||||
|
db $0F, $08,
|
||||||
|
db $11, $44,
|
||||||
|
db $21, $0B,
|
||||||
|
db $31, $80,
|
||||||
|
|
||||||
|
db $0F, $09,
|
||||||
|
|
||||||
|
db $0F, $0A,
|
||||||
|
db $11, $45,
|
||||||
|
db $21, $0B,
|
||||||
|
db $31, $80,
|
||||||
|
|
||||||
|
db $0F, $0B,
|
||||||
|
|
||||||
|
db $0F, $0C,
|
||||||
|
db $11, $46,
|
||||||
|
db $21, $0B,
|
||||||
|
db $31, $80,
|
||||||
|
|
||||||
|
db $0F, $0D,
|
||||||
|
|
||||||
|
db $0F, $0E,
|
||||||
|
db $11, $47,
|
||||||
|
db $21, $0B,
|
||||||
|
db $31, $80,
|
||||||
|
|
||||||
|
db $0F, $0F,
|
||||||
|
|
||||||
|
db $0F, $10,
|
||||||
|
|
||||||
|
db $0F, $11,
|
||||||
|
|
||||||
|
db $0F, $12,
|
||||||
|
|
||||||
|
db $0F, $13,
|
||||||
|
|
||||||
|
db $0F, $14,
|
||||||
|
|
||||||
|
db $0F, $15,
|
||||||
|
|
||||||
|
db $0F, $16,
|
||||||
|
|
||||||
|
db $0F, $17,
|
||||||
|
|
||||||
|
db $0F, $18,
|
||||||
|
|
||||||
|
db $0F, $19,
|
||||||
|
|
||||||
|
db $0F, $1A,
|
||||||
|
|
||||||
|
db $0F, $1B,
|
||||||
|
|
||||||
|
db $0F, $1C,
|
||||||
|
|
||||||
|
db $0F, $1D,
|
||||||
|
|
||||||
|
db $0F, $1E,
|
||||||
|
|
||||||
|
db $0F, $1F,
|
||||||
|
|
||||||
|
db $0F, $20,
|
||||||
|
|
||||||
|
db $0F, $21,
|
||||||
|
|
||||||
|
db $0F, $22,
|
||||||
|
|
||||||
|
db $0F, $23,
|
||||||
|
|
||||||
|
db $0F, $24,
|
||||||
|
|
||||||
|
db $0F, $25,
|
||||||
|
|
||||||
|
db $0F, $26,
|
||||||
|
|
||||||
|
db $0F, $27,
|
||||||
|
|
||||||
|
db $0F, $28,
|
||||||
|
|
||||||
|
db $0F, $29,
|
||||||
|
|
||||||
|
db $0F, $2A,
|
||||||
|
|
||||||
|
db $0F, $2B,
|
||||||
|
|
||||||
|
db $0F, $2C,
|
||||||
|
|
||||||
|
db $0F, $2D,
|
||||||
|
|
||||||
|
db $0F, $2E,
|
||||||
|
|
||||||
|
db $0F, $2F,
|
||||||
|
|
||||||
|
db $0F, $30,
|
||||||
|
|
||||||
|
db $0F, $31,
|
||||||
|
|
||||||
|
db $0F, $32,
|
||||||
|
|
||||||
|
db $0F, $33,
|
||||||
|
|
||||||
|
db $0F, $34,
|
||||||
|
|
||||||
|
db $0F, $35,
|
||||||
|
|
||||||
|
db $0F, $36,
|
||||||
|
|
||||||
|
db $0F, $37,
|
||||||
|
|
||||||
|
db $0F, $38,
|
||||||
|
|
||||||
|
db $0F, $39,
|
||||||
|
|
||||||
|
db $0F, $3A,
|
||||||
|
|
||||||
|
db $0F, $3B,
|
||||||
|
|
||||||
|
db $0F, $3C,
|
||||||
|
|
||||||
|
db $0F, $3D,
|
||||||
|
|
||||||
|
db $0F, $3E,
|
||||||
|
|
||||||
|
db $0F, $3F,
|
||||||
|
|
||||||
|
rangetest:
|
||||||
|
db 4
|
||||||
|
dw rangetest_0
|
||||||
|
dw rangetest_1
|
||||||
|
dw rangetest_2
|
255
s3m2gbt.py
255
s3m2gbt.py
@ -185,21 +185,23 @@ class S3MFile(S3MFormatReader):
|
|||||||
if self.read_string(4) != b'SCRM':
|
if self.read_string(4) != b'SCRM':
|
||||||
raise S3MFormatError("Invalid magic string in file")
|
raise S3MFormatError("Invalid magic string in file")
|
||||||
|
|
||||||
self.read_ptr += 1 # Ignore global volume
|
self.global_volume = self.read_u8()
|
||||||
|
|
||||||
self.initial_speed = self.read_u8()
|
self.initial_speed = self.read_u8()
|
||||||
|
|
||||||
if self.read_u8() != 150:
|
if self.read_u8() != 150:
|
||||||
raise S3MFormatError("Invalid tempo: It must be 150")
|
raise S3MFormatError("Invalid tempo: It must be 150")
|
||||||
|
|
||||||
self.read_ptr += 2 # Ignore master volume and ultraclick removal
|
self.master_volume = self.read_u8() & 0b00111111 # master volume
|
||||||
|
|
||||||
|
self.read_ptr += 1 # Ignore ultraclick removal
|
||||||
|
|
||||||
# Save this for later
|
# Save this for later
|
||||||
has_custom_pan = False
|
has_custom_pan = False
|
||||||
if self.read_u8() == 252:
|
if self.read_u8() == 252:
|
||||||
has_custom_pan = True
|
has_custom_pan = True
|
||||||
|
|
||||||
self.read_ptr = 0x40
|
self.read_ptr = 0x40 # jump forward to uint8[32] channelSettings
|
||||||
channel_settings = self.read_string(4)
|
channel_settings = self.read_string(4)
|
||||||
if channel_settings[0] >= 16 or channel_settings[1] >= 16 or \
|
if channel_settings[0] >= 16 or channel_settings[1] >= 16 or \
|
||||||
channel_settings[2] >= 16 or channel_settings[3] >= 16:
|
channel_settings[2] >= 16 or channel_settings[3] >= 16:
|
||||||
@ -207,7 +209,7 @@ class S3MFile(S3MFormatReader):
|
|||||||
|
|
||||||
# Read orders
|
# Read orders
|
||||||
|
|
||||||
self.read_ptr = 0x60
|
self.read_ptr = 0x60 # jump forward to uint8[orderCount] orderList
|
||||||
|
|
||||||
self.song_orders = self.read_string(self.song_length)
|
self.song_orders = self.read_string(self.song_length)
|
||||||
if self.song_length % 2 == 1:
|
if self.song_length % 2 == 1:
|
||||||
@ -258,14 +260,14 @@ class S3MFile(S3MFormatReader):
|
|||||||
self.data = []
|
self.data = []
|
||||||
|
|
||||||
# Channels 1, 2, 4
|
# Channels 1, 2, 4
|
||||||
def s3m_volume_to_gb(s3m_vol):
|
def s3m_volume_to_gb(s3m_vol): # this is identical to mod files.
|
||||||
if s3m_vol >= 64:
|
if s3m_vol >= 64:
|
||||||
return 15
|
return 15
|
||||||
else:
|
else:
|
||||||
return s3m_vol >> 2;
|
return s3m_vol >> 2;
|
||||||
|
|
||||||
# Channel 3
|
# Channel 3
|
||||||
def s3m_volume_to_gb_ch3(s3m_vol):
|
def s3m_volume_to_gb_ch3(s3m_vol): # also identicll to mod files
|
||||||
vol = s3m_volume_to_gb(s3m_vol)
|
vol = s3m_volume_to_gb(s3m_vol)
|
||||||
|
|
||||||
if vol >= 0 and vol <= 3:
|
if vol >= 0 and vol <= 3:
|
||||||
@ -281,7 +283,7 @@ def s3m_volume_to_gb_ch3(s3m_vol):
|
|||||||
else:
|
else:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def s3m_note_to_gb(note):
|
def s3m_note_to_gb(note):
|
||||||
# Note cut with ^^
|
# Note cut with ^^
|
||||||
if note == 0xFE:
|
if note == 0xFE:
|
||||||
return 0xFE
|
return 0xFE
|
||||||
@ -334,22 +336,25 @@ EFFECT_EVENT = 15
|
|||||||
# the channel (like panning).
|
# the channel (like panning).
|
||||||
def effect_s3m_to_gb(channel, effectnum, effectparams):
|
def effect_s3m_to_gb(channel, effectnum, effectparams):
|
||||||
|
|
||||||
if effectnum == 'A': # Set Speed
|
if effectnum == 'A': # Set Speed. compatible
|
||||||
|
if effectparams > 0x1F:
|
||||||
|
raise RowConversionError("Unsupported BPM speed effect")
|
||||||
|
|
||||||
if effectparams == 0:
|
if effectparams == 0:
|
||||||
raise RowConversionError("Speed must not be zero")
|
raise RowConversionError("Speed must not be zero")
|
||||||
|
|
||||||
return (EFFECT_SPEED, effectparams)
|
return (EFFECT_SPEED, effectparams)
|
||||||
|
|
||||||
if effectnum == 'B': # Pattern jump
|
if effectnum == 'B': # Pattern jump compatible
|
||||||
# TODO: Fail if this jumps out of bounds
|
# TODO: Fail if this jumps out of bounds
|
||||||
return (EFFECT_PATTERN_JUMP, effectparams)
|
return (EFFECT_PATTERN_JUMP, effectparams)
|
||||||
|
|
||||||
elif effectnum == 'C': # Break + Set row
|
elif effectnum == 'C': # Break + Set row compatiblle
|
||||||
# Effect value is BCD, convert to integer
|
# Effect value is BCD, convert to integer
|
||||||
val = (((effectparams & 0xF0) >> 4) * 10) + (effectparams & 0x0F)
|
val = (((effectparams & 0xF0) >> 4) * 10) + (effectparams & 0x0F)
|
||||||
return (EFFECT_BREAK_SET_STEP, val)
|
return (EFFECT_BREAK_SET_STEP, val)
|
||||||
|
|
||||||
elif effectnum == 'D': # Volume Slide
|
elif effectnum == 'D': # Volume Slide not present in .mod
|
||||||
if channel == 3:
|
if channel == 3:
|
||||||
raise RowConversionError("Volume slide not supported in channel 3")
|
raise RowConversionError("Volume slide not supported in channel 3")
|
||||||
|
|
||||||
@ -394,14 +399,15 @@ def effect_s3m_to_gb(channel, effectnum, effectparams):
|
|||||||
subeffectnum = (effectparams & 0xF0) >> 4
|
subeffectnum = (effectparams & 0xF0) >> 4
|
||||||
subeffectparams = effectparams & 0x0F
|
subeffectparams = effectparams & 0x0F
|
||||||
|
|
||||||
if subeffectnum == 0x8: # Pan position
|
if subeffectnum == 0x8: # Pan position compatible
|
||||||
val = s3m_pan_to_gb(subeffectparams, channel)
|
val = s3m_pan_to_gb(subeffectparams, channel)
|
||||||
return (EFFECT_PAN, val)
|
return (EFFECT_PAN, val)
|
||||||
|
|
||||||
elif subeffectnum == 0xC: # Notecut
|
elif subeffectnum == 0xC: # Notecut compatible
|
||||||
|
print(f"fofund a note cut, {effectnum}, {subeffectnum}, {subeffectparams}")
|
||||||
return (EFFECT_NOTE_CUT, subeffectparams)
|
return (EFFECT_NOTE_CUT, subeffectparams)
|
||||||
|
|
||||||
elif subeffectnum == 0xF: # Funkrepeat? Set active macro?
|
elif subeffectnum == 0xF: # Funkrepeat? Set active macro? not present in .mod
|
||||||
# This effect is either unused, or it's the "set active macro"
|
# This effect is either unused, or it's the "set active macro"
|
||||||
# command, which doesn't have any effect if you don't use the macro
|
# command, which doesn't have any effect if you don't use the macro
|
||||||
# afterwards. It can safely be overloaded for event callbacks.
|
# afterwards. It can safely be overloaded for event callbacks.
|
||||||
@ -409,167 +415,86 @@ def effect_s3m_to_gb(channel, effectnum, effectparams):
|
|||||||
|
|
||||||
raise RowConversionError(f"Unsupported effect: {effectnum}{effectparams:02X}")
|
raise RowConversionError(f"Unsupported effect: {effectnum}{effectparams:02X}")
|
||||||
|
|
||||||
HAS_VOLUME = 1 << 4
|
HAS_VOLUME = 1 << 5 # changing these to be compatible with old gbt
|
||||||
HAS_INSTRUMENT = 1 << 5
|
HAS_DRUM_EFFECT = 1 << 6
|
||||||
HAS_EFFECT = 1 << 6
|
HAS_EFFECT = 1 << 7
|
||||||
HAS_NOTE = 1 << 7
|
HAS_NOTE = 1 << 7
|
||||||
HAS_KIT = 1 << 7
|
HAS_KIT = 1 << 7
|
||||||
|
|
||||||
def convert_channel1(note_index, samplenum, volume, effectnum, effectparams):
|
def convert_channel(channel, note_index, samplenum, volume, effectnum, effectparams):
|
||||||
command = [ 0, 0, 0, 0 ] # NOP
|
#print(f"{channel}: {note_index}, using {samplenum} @ volume {volume}")
|
||||||
command_ptr = 1
|
if channel == 4:
|
||||||
|
return convert_channel4(note_index, samplenum, volume, effectnum, effectparams)
|
||||||
|
|
||||||
|
command = [ 0, 0, 0 ] # NOP
|
||||||
|
command_len = 1
|
||||||
|
|
||||||
|
if channel == 3:
|
||||||
|
shifted_instrument = (samplenum) << 7
|
||||||
|
converted_volume = s3m_volume_to_gb_ch3(volume)
|
||||||
|
else:
|
||||||
|
shifted_instrument = (samplenum & 3) << 4
|
||||||
|
converted_volume = s3m_volume_to_gb(volume)
|
||||||
|
|
||||||
# Check if it's needed to add a note
|
# Check if it's needed to add a note
|
||||||
if note_index != -1:
|
if note_index != -1:
|
||||||
note_index = s3m_note_to_gb(note_index)
|
command[0] = HAS_NOTE | note_index
|
||||||
command[0] |= HAS_NOTE
|
command[1] = shifted_instrument | converted_volume
|
||||||
command[command_ptr] = note_index
|
command_len = 2
|
||||||
command_ptr = command_ptr + 1
|
|
||||||
|
|
||||||
# Check if there is a sample defined
|
if effectnum is not None:
|
||||||
if samplenum > 0:
|
[num, params] = effect_s3m_to_gb(channel, effectnum, effectparams)
|
||||||
instrument = samplenum & 3
|
command[1] = HAS_EFFECT | shifted_instrument | num
|
||||||
|
command[2] = params
|
||||||
|
command_len = 3
|
||||||
|
else:
|
||||||
|
command[0] = HAS_VOLUME | converted_volume
|
||||||
|
command_len = 1
|
||||||
|
|
||||||
command[0] |= HAS_INSTRUMENT
|
if effectnum is not None:
|
||||||
command[command_ptr] = (instrument << 4) & 0x30
|
[num, params] = effect_s3m_to_gb(channel, effectnum, effectparams)
|
||||||
|
command[1] = HAS_EFFECT | shifted_instrument | num
|
||||||
|
command[2] = params
|
||||||
|
command_len = 3
|
||||||
|
|
||||||
|
return command[:command_len]
|
||||||
|
|
||||||
if effectnum is not None:
|
|
||||||
[num, params] = effect_s3m_to_gb(1, effectnum, effectparams)
|
|
||||||
|
|
||||||
if num is not None:
|
|
||||||
command[0] |= HAS_EFFECT
|
|
||||||
command[command_ptr] |= num & 0x0F
|
|
||||||
command_ptr += 1
|
|
||||||
command[command_ptr] = params & 0xFF
|
|
||||||
|
|
||||||
# Check if it's needed to add a volume
|
|
||||||
if volume > -1:
|
|
||||||
command[0] |= HAS_VOLUME
|
|
||||||
command[0] |= s3m_volume_to_gb(volume) & 0x0F
|
|
||||||
|
|
||||||
# Note: The volume bit doesn't affect the final size.
|
|
||||||
sizes = [ 1, 2, 3, 3, 2, 3, 4, 4 ]
|
|
||||||
command_size = sizes[command[0] >> 5]
|
|
||||||
|
|
||||||
return command[:command_size]
|
|
||||||
|
|
||||||
def convert_channel2(note_index, samplenum, volume, effectnum, effectparams):
|
|
||||||
command = [ 0, 0, 0, 0 ] # NOP
|
|
||||||
command_ptr = 1
|
|
||||||
|
|
||||||
# Check if it's needed to add a note
|
|
||||||
if note_index != -1:
|
|
||||||
note_index = s3m_note_to_gb(note_index)
|
|
||||||
command[0] |= HAS_NOTE
|
|
||||||
command[command_ptr] = note_index
|
|
||||||
command_ptr = command_ptr + 1
|
|
||||||
|
|
||||||
# Check if there is a sample defined
|
|
||||||
if samplenum > 0:
|
|
||||||
instrument = samplenum & 3
|
|
||||||
|
|
||||||
command[0] |= HAS_INSTRUMENT
|
|
||||||
command[command_ptr] = (instrument << 4) & 0x30
|
|
||||||
|
|
||||||
if effectnum is not None:
|
|
||||||
[num, params] = effect_s3m_to_gb(2, effectnum, effectparams)
|
|
||||||
|
|
||||||
if num is not None:
|
|
||||||
command[0] |= HAS_EFFECT
|
|
||||||
command[command_ptr] |= num & 0x0F
|
|
||||||
command_ptr += 1
|
|
||||||
command[command_ptr] = params & 0xFF
|
|
||||||
|
|
||||||
# Check if it's needed to add a volume
|
|
||||||
if volume > -1:
|
|
||||||
command[0] |= HAS_VOLUME
|
|
||||||
command[0] |= s3m_volume_to_gb(volume) & 0x0F
|
|
||||||
|
|
||||||
# Note: The volume bit doesn't affect the final size.
|
|
||||||
sizes = [ 1, 2, 3, 3, 2, 3, 4, 4 ]
|
|
||||||
command_size = sizes[command[0] >> 5]
|
|
||||||
|
|
||||||
return command[:command_size]
|
|
||||||
|
|
||||||
def convert_channel3(note_index, samplenum, volume, effectnum, effectparams):
|
|
||||||
command = [ 0, 0, 0, 0 ] # NOP
|
|
||||||
command_ptr = 1
|
|
||||||
|
|
||||||
# Check if it's needed to add a note
|
|
||||||
if note_index != -1:
|
|
||||||
note_index = s3m_note_to_gb(note_index)
|
|
||||||
command[0] |= HAS_NOTE
|
|
||||||
command[command_ptr] = note_index
|
|
||||||
command_ptr = command_ptr + 1
|
|
||||||
|
|
||||||
# Check if there is a sample defined
|
|
||||||
if samplenum > 0:
|
|
||||||
instrument = samplenum & 7
|
|
||||||
|
|
||||||
command[0] |= HAS_INSTRUMENT
|
|
||||||
command[command_ptr] = (instrument << 4) & 0xF0
|
|
||||||
|
|
||||||
if effectnum is not None:
|
|
||||||
[num, params] = effect_s3m_to_gb(3, effectnum, effectparams)
|
|
||||||
|
|
||||||
if num is not None:
|
|
||||||
command[0] |= HAS_EFFECT
|
|
||||||
command[command_ptr] |= num & 0x0F
|
|
||||||
command_ptr += 1
|
|
||||||
command[command_ptr] = params & 0xFF
|
|
||||||
|
|
||||||
# Check if it's needed to add a volume
|
|
||||||
if volume > -1:
|
|
||||||
command[0] |= HAS_VOLUME
|
|
||||||
command[0] |= s3m_volume_to_gb_ch3(volume) & 0x0F
|
|
||||||
|
|
||||||
# Note: The volume bit doesn't affect the final size.
|
|
||||||
sizes = [ 1, 2, 3, 3, 2, 3, 4, 4 ]
|
|
||||||
command_size = sizes[command[0] >> 5]
|
|
||||||
|
|
||||||
return command[:command_size]
|
|
||||||
|
|
||||||
def convert_channel4(note_index, samplenum, volume, effectnum, effectparams):
|
def convert_channel4(note_index, samplenum, volume, effectnum, effectparams):
|
||||||
command = [ 0, 0, 0, 0 ] # NOP
|
command = [ 0, 0, 0 ] # NOP
|
||||||
command_ptr = 1
|
command_len = 1
|
||||||
|
|
||||||
|
#print(f"we found a note with index {note_index}")
|
||||||
# Note cut using ^^ as note
|
# Note cut using ^^ as note
|
||||||
if note_index == 0xFE:
|
if note_index == 169 or note_index == -1:
|
||||||
if samplenum > 0:
|
if samplenum > 0:
|
||||||
# This limitation is only for channel 4. It should never happen in a
|
# This limitation is only for channel 4. It should never happen in a
|
||||||
# regular song.
|
# regular song.
|
||||||
raise("Note cut + Sample in same row: Not supported in channel 4")
|
raise("Note cut + Sample in same row: Not supported in channel 4")
|
||||||
samplenum = 0xFE
|
samplenum = 0xFE
|
||||||
|
|
||||||
# Check if there is a sample defined
|
if note_index != 169 and note_index != -1 and samplenum > 0:
|
||||||
if samplenum > 0:
|
command[0] = HAS_KIT | (samplenum & 0xF)
|
||||||
if samplenum == 0xFE:
|
command[1] = s3m_volume_to_gb(volume) & 0xF
|
||||||
kit = 0xFE;
|
command_len = 2
|
||||||
else:
|
else:
|
||||||
kit = samplenum & 0xF;
|
if note_index == 169:
|
||||||
command[0] |= HAS_KIT
|
command[0] = HAS_DRUM_EFFECT | EFFECT_NOTE_CUT
|
||||||
command[command_ptr] = kit
|
command[1] = 1 # 0 ticks
|
||||||
command_ptr += 1
|
command_len = 2
|
||||||
|
elif effectnum is not None:
|
||||||
|
[num, params] = effect_s3m_to_gb(4, effectnum, effectparams)
|
||||||
|
|
||||||
if effectnum is not None:
|
if num is not None:
|
||||||
[num, params] = effect_s3m_to_gb(4, effectnum, effectparams)
|
command[0] = HAS_DRUM_EFFECT | (num & 0x0F)
|
||||||
|
command[1] = (params & 0xFF) | 1
|
||||||
|
command_len = 2
|
||||||
|
elif volume > -1:
|
||||||
|
#command[0] = HAS_VOLUME | (s3m_volume_to_gb(volume) & 0xF)
|
||||||
|
command[0] = 0
|
||||||
|
command_len = 1
|
||||||
|
|
||||||
if num is not None:
|
return command[:command_len]
|
||||||
command[0] |= HAS_EFFECT
|
|
||||||
command[command_ptr] |= num & 0x0F
|
|
||||||
command_ptr += 1
|
|
||||||
command[command_ptr] = params & 0xFF
|
|
||||||
|
|
||||||
# Check if it's needed to add a volume
|
|
||||||
if volume > -1:
|
|
||||||
command[0] |= HAS_VOLUME
|
|
||||||
command[0] |= s3m_volume_to_gb(volume) & 0x0F
|
|
||||||
|
|
||||||
# Note: The volume bit doesn't affect the final size.
|
|
||||||
sizes = [ 1, 2, 3, 3, 2, 3, 4, 4 ]
|
|
||||||
command_size = sizes[command[0] >> 5]
|
|
||||||
|
|
||||||
return command[:command_size]
|
|
||||||
|
|
||||||
STARTUP_CMD_DONE = 0
|
STARTUP_CMD_DONE = 0
|
||||||
STARTUP_CMD_SPEED = 1
|
STARTUP_CMD_SPEED = 1
|
||||||
@ -685,7 +610,8 @@ def convert_file(module_path, song_name, output_path, export_instruments):
|
|||||||
|
|
||||||
cmd = cmd1 + cmd2 + cmd3 + cmd4
|
cmd = cmd1 + cmd2 + cmd3 + cmd4
|
||||||
for b in cmd:
|
for b in cmd:
|
||||||
fileout.write(f"${b:02X},")
|
if b == -1: fileout.write(f"$FF, ")
|
||||||
|
else: fileout.write(f"${b:02X},")
|
||||||
|
|
||||||
fileout.write("\n")
|
fileout.write("\n")
|
||||||
|
|
||||||
@ -707,7 +633,10 @@ def convert_file(module_path, song_name, output_path, export_instruments):
|
|||||||
note = -1
|
note = -1
|
||||||
instrument = 0
|
instrument = 0
|
||||||
if c.has_note_and_instrument:
|
if c.has_note_and_instrument:
|
||||||
note = c.note
|
note = c.note - 0b0010_0001 # note indices should start from 0=C3
|
||||||
|
note = note + 1 # s3m note values go 00..0A, 0F, 10..1A, 1F, etc.
|
||||||
|
note = (note // 16) * 12 + (note % 16) #these expressions compensate for it.
|
||||||
|
note = note - 1
|
||||||
instrument = c.instrument
|
instrument = c.instrument
|
||||||
|
|
||||||
# Rows with note and instrument but no volume use the
|
# Rows with note and instrument but no volume use the
|
||||||
@ -727,17 +656,13 @@ def convert_file(module_path, song_name, output_path, export_instruments):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
if channel == 1:
|
if channel == 1:
|
||||||
cmd1 = convert_channel1(note, instrument, volume,
|
cmd1 = convert_channel(channel, note, instrument, volume, effectnum, effectparams)
|
||||||
effectnum, effectparams)
|
|
||||||
elif channel == 2:
|
elif channel == 2:
|
||||||
cmd2 = convert_channel2(note, instrument, volume,
|
cmd2 = convert_channel(channel, note, instrument, volume, effectnum, effectparams)
|
||||||
effectnum, effectparams)
|
|
||||||
elif channel == 3:
|
elif channel == 3:
|
||||||
cmd3 = convert_channel3(note, instrument, volume,
|
cmd3 = convert_channel(channel, note, instrument, volume, effectnum, effectparams)
|
||||||
effectnum, effectparams)
|
|
||||||
elif channel == 4:
|
elif channel == 4:
|
||||||
cmd4 = convert_channel4(note, instrument, volume,
|
cmd4 = convert_channel(channel, note, instrument, volume, effectnum, effectparams)
|
||||||
effectnum, effectparams)
|
|
||||||
else:
|
else:
|
||||||
raise S3MFormatError(f"Too many channels: {channel}")
|
raise S3MFormatError(f"Too many channels: {channel}")
|
||||||
except RowConversionError as e:
|
except RowConversionError as e:
|
||||||
|
@ -290,6 +290,7 @@ def s3m_volume_to_gb(s3m_vol):
|
|||||||
if s3m_vol >= 64:
|
if s3m_vol >= 64:
|
||||||
return 15
|
return 15
|
||||||
else:
|
else:
|
||||||
|
print(f"found a decreased volume: {s3m_vol}, returning {s3m_vol>>2}")
|
||||||
return s3m_vol >> 2;
|
return s3m_vol >> 2;
|
||||||
|
|
||||||
# Channel 3
|
# Channel 3
|
||||||
@ -297,28 +298,30 @@ def s3m_volume_to_gb_ch3(s3m_vol):
|
|||||||
vol = s3m_volume_to_gb(s3m_vol)
|
vol = s3m_volume_to_gb(s3m_vol)
|
||||||
|
|
||||||
if vol >= 0 and vol <= 3:
|
if vol >= 0 and vol <= 3:
|
||||||
return 0 # 0%
|
return 0<<1 # 0%
|
||||||
elif vol >= 4 and vol <= 6:
|
elif vol >= 4 and vol <= 6:
|
||||||
return 3 # 25%
|
return 3<<1 # 25%
|
||||||
elif vol >= 7 and vol <= 9:
|
elif vol >= 7 and vol <= 9:
|
||||||
return 2 # 50%
|
return 2<<1 # 50%
|
||||||
elif vol >= 10 and vol <= 12:
|
elif vol >= 10 and vol <= 12:
|
||||||
return 4 # 75%
|
return 1<<1 # 75%
|
||||||
elif vol >= 13 and vol <= 15:
|
elif vol >= 13 and vol <= 15:
|
||||||
return 1 # 100%
|
return 1<<1 # 100%
|
||||||
else:
|
else:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def s3m_note_to_gb(note):
|
def s3m_note_to_gb(note):
|
||||||
# Note cut with ^^
|
# Note cut with ^^
|
||||||
if note == 0xFE:
|
if note == 0xFE:
|
||||||
|
print(f"note cut found: {note}")
|
||||||
return 0xFE
|
return 0xFE
|
||||||
if note == 0xFF:
|
if note == 0xFF:
|
||||||
|
print(f"note cut found: {note}")
|
||||||
return 0xFF
|
return 0xFF
|
||||||
|
|
||||||
# Note off and ^^ note cut should be handled before reaching this point
|
# Note off and ^^ note cut should be handled before reaching this point
|
||||||
#note = note & 0x7F
|
#note = note & 0x7F
|
||||||
if note > 0x7F:
|
if note > 0x7F or note < 0:
|
||||||
print(note)
|
print(note)
|
||||||
assert note <= 0x7F
|
assert note <= 0x7F
|
||||||
|
|
||||||
@ -433,6 +436,7 @@ def effect_s3m_to_gb(channel, effectnum, effectparams):
|
|||||||
return (EFFECT_PAN, val)
|
return (EFFECT_PAN, val)
|
||||||
|
|
||||||
elif subeffectnum == 0xC: # Notecut
|
elif subeffectnum == 0xC: # Notecut
|
||||||
|
print(f"found a note cut! with params {subeffectparams}")
|
||||||
return (EFFECT_NOTE_CUT, subeffectparams)
|
return (EFFECT_NOTE_CUT, subeffectparams)
|
||||||
|
|
||||||
elif subeffectnum == 0xF: # Funkrepeat? Set active macro?
|
elif subeffectnum == 0xF: # Funkrepeat? Set active macro?
|
||||||
@ -447,19 +451,27 @@ def convert_channel(channel, note_index, samplenum, volume, effectnum, effectpar
|
|||||||
commands = []
|
commands = []
|
||||||
|
|
||||||
# Check if it's needed to add a note
|
# Check if it's needed to add a note
|
||||||
if note_index != -1 and note_index != 0xFF and note_index != 0xFE:
|
if note_index != -1 and note_index != 0xFF and note_index != 0xFE and note_index != 169:
|
||||||
note_index = s3m_note_to_gb(note_index)
|
note_index = s3m_note_to_gb(note_index)
|
||||||
commands.append([0x10 | channel, note_index])
|
commands.append([0x10 | channel, note_index])
|
||||||
if note_index == 0xFF or note_index == 0xFE:
|
if note_index == 0xFF or note_index == 0xFE or note_index == 169:
|
||||||
commands.append([0x80 | channel, note_index])
|
print(f"found a note cut by note value: {note_index}")
|
||||||
|
commands.append([0x80 | channel, 0])
|
||||||
|
|
||||||
if volume > -1:
|
if volume > -1:
|
||||||
|
print(channel)
|
||||||
|
print(f"converting volume {volume} to {s3m_volume_to_gb(volume) & 0x0F}")
|
||||||
commands.append([0x20 | channel, s3m_volume_to_gb(volume) & 0x0F])
|
commands.append([0x20 | channel, s3m_volume_to_gb(volume) & 0x0F])
|
||||||
|
print(commands)
|
||||||
|
|
||||||
# Check if there is a sample defined
|
# Check if there is a sample defined
|
||||||
if samplenum > 0:
|
if samplenum > 0:
|
||||||
instrument = samplenum & 3
|
if channel == 1 or channel == 2:
|
||||||
commands.append([0x30 | channel, instrument << 6])
|
commands.append([0x30 | channel, (samplenum & 3) << 6])
|
||||||
|
if channel == 3:
|
||||||
|
commands.append([0x30 | channel, samplenum & 7])
|
||||||
|
if channel == 4:
|
||||||
|
commands.append([0x30 | channel, samplenum & 15])
|
||||||
|
|
||||||
if effectnum is not None:
|
if effectnum is not None:
|
||||||
[num, params] = effect_s3m_to_gb(1, effectnum, effectparams)
|
[num, params] = effect_s3m_to_gb(1, effectnum, effectparams)
|
||||||
@ -583,7 +595,7 @@ def convert_file(module_path, song_name, output_path, export_instruments):
|
|||||||
|
|
||||||
fileout.write(f"{song_name}:\n")
|
fileout.write(f"{song_name}:\n")
|
||||||
|
|
||||||
fileout.write(f"\tdb {len(s3m.song_orders)}\n")
|
fileout.write(f"\tdb {len(s3m.song_orders)-1}\n")
|
||||||
for o in s3m.song_orders:
|
for o in s3m.song_orders:
|
||||||
pattern = int(o)
|
pattern = int(o)
|
||||||
if pattern >= s3m.num_patterns:
|
if pattern >= s3m.num_patterns:
|
||||||
|
BIN
source.zip
BIN
source.zip
Binary file not shown.
192
theme.inc
192
theme.inc
@ -1,182 +1,309 @@
|
|||||||
; File created by shoofle's s3m2gbt edit
|
; File created by shoofle's s3m2gbt edit
|
||||||
|
|
||||||
gbtarottheme_0:
|
gb_tarot_theme_0:
|
||||||
db $00, $00,
|
db $00, $00,
|
||||||
db $11, $0C,
|
db $11, $00,
|
||||||
db $21, $0F,
|
db $21, $0F,
|
||||||
db $31, $40,
|
db $31, $40,
|
||||||
db $22, $00,
|
db $12, $18,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
db $23, $00,
|
db $23, $00,
|
||||||
db $24, $00,
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $08,
|
||||||
|
|
||||||
db $0F, $01,
|
db $0F, $01,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
db $0F, $02,
|
db $0F, $02,
|
||||||
db $11, $0C,
|
db $11, $00,
|
||||||
db $21, $0F,
|
db $21, $0F,
|
||||||
db $31, $80,
|
db $31, $80,
|
||||||
|
db $12, $1C,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
db $0F, $03,
|
db $0F, $03,
|
||||||
|
|
||||||
db $0F, $04,
|
db $0F, $04,
|
||||||
db $11, $0C,
|
db $11, $00,
|
||||||
db $21, $0F,
|
db $21, $0F,
|
||||||
db $31, $C0,
|
db $31, $C0,
|
||||||
|
db $12, $1F,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
db $0F, $05,
|
db $0F, $05,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
db $0F, $06,
|
db $0F, $06,
|
||||||
db $81, $FE,
|
db $81, $00,
|
||||||
|
db $12, $18,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
db $0F, $07,
|
db $0F, $07,
|
||||||
|
|
||||||
db $0F, $08,
|
db $0F, $08,
|
||||||
|
db $12, $1C,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
db $13, $26,
|
||||||
|
db $23, $0F,
|
||||||
|
db $33, $01,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
db $0F, $09,
|
db $0F, $09,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
db $0F, $0A,
|
db $0F, $0A,
|
||||||
|
db $12, $1F,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
db $0F, $0B,
|
db $0F, $0B,
|
||||||
|
|
||||||
db $0F, $0C,
|
db $0F, $0C,
|
||||||
db $11, $0C,
|
db $11, $00,
|
||||||
db $21, $0F,
|
db $21, $0F,
|
||||||
db $31, $00,
|
db $31, $00,
|
||||||
|
db $12, $18,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
db $13, $24,
|
||||||
|
db $23, $0F,
|
||||||
|
db $33, $00,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
db $0F, $0D,
|
db $0F, $0D,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
db $0F, $0E,
|
db $0F, $0E,
|
||||||
db $11, $0C,
|
db $11, $00,
|
||||||
db $21, $0F,
|
db $21, $0F,
|
||||||
db $31, $00,
|
db $31, $00,
|
||||||
|
db $12, $1C,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
db $0F, $0F,
|
db $0F, $0F,
|
||||||
|
|
||||||
db $0F, $10,
|
db $0F, $10,
|
||||||
db $11, $10,
|
db $11, $04,
|
||||||
db $21, $0F,
|
db $21, $0F,
|
||||||
db $31, $40,
|
db $31, $40,
|
||||||
|
db $12, $1C,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
db $13, $21,
|
||||||
|
db $23, $0F,
|
||||||
|
db $33, $00,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $08,
|
||||||
|
|
||||||
db $0F, $11,
|
db $0F, $11,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
db $0F, $12,
|
db $0F, $12,
|
||||||
db $11, $10,
|
db $11, $04,
|
||||||
db $21, $0F,
|
db $21, $0F,
|
||||||
db $31, $80,
|
db $31, $80,
|
||||||
|
db $12, $1F,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
db $0F, $13,
|
db $0F, $13,
|
||||||
|
|
||||||
db $0F, $14,
|
db $0F, $14,
|
||||||
db $11, $10,
|
db $11, $04,
|
||||||
db $21, $0F,
|
db $21, $0F,
|
||||||
db $31, $C0,
|
db $31, $C0,
|
||||||
|
db $12, $23,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
db $0F, $15,
|
db $0F, $15,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
db $0F, $16,
|
db $0F, $16,
|
||||||
db $81, $FE,
|
db $81, $00,
|
||||||
|
db $12, $1C,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
db $0F, $17,
|
db $0F, $17,
|
||||||
|
|
||||||
db $0F, $18,
|
db $0F, $18,
|
||||||
|
db $12, $1F,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
db $0F, $19,
|
db $0F, $19,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
db $0F, $1A,
|
db $0F, $1A,
|
||||||
|
db $12, $23,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
db $0F, $1B,
|
db $0F, $1B,
|
||||||
|
|
||||||
db $0F, $1C,
|
db $0F, $1C,
|
||||||
db $11, $10,
|
db $11, $04,
|
||||||
db $21, $0F,
|
db $21, $0F,
|
||||||
db $31, $00,
|
db $31, $00,
|
||||||
|
db $12, $1C,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
db $0F, $1D,
|
db $0F, $1D,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
db $0F, $1E,
|
db $0F, $1E,
|
||||||
db $11, $10,
|
db $11, $04,
|
||||||
db $21, $0F,
|
db $21, $0F,
|
||||||
db $31, $00,
|
db $31, $00,
|
||||||
|
db $12, $1F,
|
||||||
|
db $22, $04,
|
||||||
|
db $32, $40,
|
||||||
|
|
||||||
db $0F, $1F,
|
db $0F, $1F,
|
||||||
|
|
||||||
db $0F, $20,
|
db $0F, $20,
|
||||||
db $11, $12,
|
db $11, $06,
|
||||||
db $21, $0F,
|
db $21, $0F,
|
||||||
db $31, $40,
|
db $31, $40,
|
||||||
|
db $12, $1F,
|
||||||
|
db $22, $03,
|
||||||
|
db $32, $40,
|
||||||
|
db $13, $28,
|
||||||
|
db $23, $0F,
|
||||||
|
db $33, $01,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $08,
|
||||||
|
|
||||||
db $0F, $21,
|
db $0F, $21,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
db $0F, $22,
|
db $0F, $22,
|
||||||
db $11, $12,
|
db $11, $06,
|
||||||
db $21, $0F,
|
db $21, $0F,
|
||||||
db $31, $80,
|
db $31, $80,
|
||||||
|
|
||||||
db $0F, $23,
|
db $0F, $23,
|
||||||
|
|
||||||
db $0F, $24,
|
db $0F, $24,
|
||||||
db $11, $12,
|
db $11, $06,
|
||||||
db $21, $0F,
|
db $21, $0F,
|
||||||
db $31, $C0,
|
db $31, $C0,
|
||||||
|
db $22, $03,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
db $0F, $25,
|
db $0F, $25,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
db $0F, $26,
|
db $0F, $26,
|
||||||
db $81, $FE,
|
db $81, $00,
|
||||||
|
|
||||||
db $0F, $27,
|
db $0F, $27,
|
||||||
|
|
||||||
db $0F, $28,
|
db $0F, $28,
|
||||||
|
db $22, $02,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
db $0F, $29,
|
db $0F, $29,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
db $0F, $2A,
|
db $0F, $2A,
|
||||||
|
|
||||||
db $0F, $2B,
|
db $0F, $2B,
|
||||||
|
|
||||||
db $0F, $2C,
|
db $0F, $2C,
|
||||||
db $11, $12,
|
db $11, $06,
|
||||||
db $21, $0F,
|
db $21, $0F,
|
||||||
db $31, $00,
|
db $31, $00,
|
||||||
|
db $22, $02,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
db $0F, $2D,
|
db $0F, $2D,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
db $0F, $2E,
|
db $0F, $2E,
|
||||||
db $11, $12,
|
db $11, $06,
|
||||||
db $21, $0F,
|
db $21, $0F,
|
||||||
db $31, $00,
|
db $31, $00,
|
||||||
|
|
||||||
db $0F, $2F,
|
db $0F, $2F,
|
||||||
|
|
||||||
db $0F, $30,
|
db $0F, $30,
|
||||||
db $11, $11,
|
db $11, $05,
|
||||||
db $21, $0F,
|
db $21, $0F,
|
||||||
db $31, $40,
|
db $31, $40,
|
||||||
|
db $22, $01,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $08,
|
||||||
|
|
||||||
db $0F, $31,
|
db $0F, $31,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
db $0F, $32,
|
db $0F, $32,
|
||||||
db $11, $11,
|
db $11, $05,
|
||||||
db $21, $0F,
|
db $21, $0F,
|
||||||
db $31, $80,
|
db $31, $80,
|
||||||
|
|
||||||
db $0F, $33,
|
db $0F, $33,
|
||||||
|
|
||||||
db $0F, $34,
|
db $0F, $34,
|
||||||
db $11, $11,
|
db $11, $05,
|
||||||
db $21, $0F,
|
db $21, $0F,
|
||||||
db $31, $C0,
|
db $31, $C0,
|
||||||
|
db $22, $01,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
db $0F, $35,
|
db $0F, $35,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
db $0F, $36,
|
db $0F, $36,
|
||||||
db $81, $FE,
|
db $81, $00,
|
||||||
|
|
||||||
db $0F, $37,
|
db $0F, $37,
|
||||||
|
|
||||||
db $0F, $38,
|
db $0F, $38,
|
||||||
|
db $22, $00,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
db $0F, $39,
|
db $0F, $39,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
db $0F, $3A,
|
db $0F, $3A,
|
||||||
|
|
||||||
@ -186,8 +313,13 @@ db $81, $FE,
|
|||||||
db $11, $11,
|
db $11, $11,
|
||||||
db $21, $0F,
|
db $21, $0F,
|
||||||
db $31, $00,
|
db $31, $00,
|
||||||
|
db $22, $00,
|
||||||
|
db $14, $18,
|
||||||
|
db $24, $0F,
|
||||||
|
db $34, $0B,
|
||||||
|
|
||||||
db $0F, $3D,
|
db $0F, $3D,
|
||||||
|
db $84, $00,
|
||||||
|
|
||||||
db $0F, $3E,
|
db $0F, $3E,
|
||||||
db $11, $11,
|
db $11, $11,
|
||||||
@ -196,8 +328,8 @@ db $31, $00,
|
|||||||
|
|
||||||
db $0F, $3F,
|
db $0F, $3F,
|
||||||
|
|
||||||
gbtarottheme:
|
gb_tarot_theme:
|
||||||
db 4
|
db 3
|
||||||
dw gbtarottheme_0
|
dw gb_tarot_theme_0
|
||||||
dw gbtarottheme_0
|
dw gb_tarot_theme_0
|
||||||
dw gbtarottheme_0
|
dw gb_tarot_theme_0
|
||||||
|
Loading…
Reference in New Issue
Block a user