gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
gbdk-lib/libc/targets/mos6502/nes/metasprites_flipy.s
1 .include "global.s"
2
3 .title "Metasprites"
4 .module Metasprites
5
6 .area GBDKOVR (PAG, OVR)
7 ___move_metasprite_hflip_PARM_2::
8 ___move_metasprite_flipy_PARM_2:: .ds 2
9 ___move_metasprite_hflip_PARM_3::
10 ___move_metasprite_flipy_PARM_3:: .ds 2
11
12 .area _HOME
13
14 .define xPos "___move_metasprite_flipy_PARM_2"
15 .define yPos "___move_metasprite_flipy_PARM_3"
16
17 ; uint8_t __move_metasprite_flipy(uint8_t id, int16_t x, int16_t y)
18
19 ___move_metasprite_flipy::
20 ___move_metasprite_hflip::
21 jsr .move_metasprite_prologue
22 ___move_metasprite_flipy_loop:
23 lda [*___current_metasprite],y ; dy
24 eor #0xFF
25 bpl ___move_metasprite_flipy_dyNeg
26 sec
27 adc *yPos
28 sta *yPos
29 bcs 1$
30 dec *yPos+1
31 1$:
32 ___move_metasprite_flipy_loop_writePosY:
33 sta _shadow_OAM+OAM_POS_Y,x
34 lda *yPos+1
35 bne ___move_metasprite_flipy_outsideY
36 iny
37 lda [*___current_metasprite],y ; dx
38 bmi ___move_metasprite_flipy_dxNeg
39 clc
40 adc *xPos
41 sta *xPos
42 bcc 2$
43 inc *xPos+1
44 2$:
45 ___move_metasprite_flipy_loop_writePosX:
46 sta _shadow_OAM+OAM_POS_X,x
47 lda *xPos+1
48 bne ___move_metasprite_flipy_outsideX
49 iny
50 lda [*___current_metasprite],y ; tile index
51 iny
52 clc
53 adc *___current_base_tile
54 sta _shadow_OAM+OAM_TILE_INDEX,x
55 lda [*___current_metasprite],y ; props
56 eor #OAMF_YFLIP
57 adc *___current_base_prop
58 iny
59 sta _shadow_OAM+OAM_ATTRIBUTES,x
60 inx
61 inx
62 inx
63 inx
64 bne ___move_metasprite_flipy_loop
65 ___move_metasprite_flipy_end:
66 jmp .move_metasprite_epilogue
67
68 ___move_metasprite_flipy_dxNeg:
69 clc
70 adc *xPos
71 sta *xPos
72 bcs 1$
73 dec *xPos+1
74 1$:
75 jmp ___move_metasprite_flipy_loop_writePosX
76
77 ___move_metasprite_flipy_dyNeg:
78 cmp #0x7F
79 beq ___move_metasprite_flipy_end
80 sec
81 adc *yPos
82 sta *yPos
83 bcc 1$
84 inc *yPos+1
85 1$:
86 jmp ___move_metasprite_flipy_loop_writePosY
87
88 ___move_metasprite_flipy_outsideY:
89 iny
90 lda [*___current_metasprite],y ; dx
91 bmi ___move_metasprite_flipy_outsideY_dxNeg
92 clc
93 adc *xPos
94 sta *xPos
95 bcc ___move_metasprite_flipy_outsideX
96 inc *xPos+1
97 ___move_metasprite_flipy_outsideX:
98 iny
99 ; Skip tile index / props
100 iny
101 iny
102 lda #0xF0
103 sta _shadow_OAM+OAM_POS_Y,x
104 jmp ___move_metasprite_flipy_loop
105
106 ___move_metasprite_flipy_outsideY_dxNeg:
107 clc
108 adc *xPos
109 sta *xPos
110 bcs 1$
111 dec *xPos+1
112 1$:
113 jmp ___move_metasprite_flipy_outsideX
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.