Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Zniggy by Anonymous 2019
- Zniggy_X:
- DB 32
- Zniggy_Y:
- DB 32
- Zniggy_YI: ; I stands for Inertia
- DB 0
- ZniggyTop:
- DB 10H,38H,74H,FEH,60H,38H,10H,38H
- ZniggyBottom:
- DB 7CH,FEH,7CH,38H,10H,10H,10H,1CH
- Loop:
- ; Draw Zniggy
- LD A, (Zniggy_Y)
- LD D, A
- LD A, (Zniggy_X)
- LD E, A
- LD HL, ZniggyTop
- CALL DrawSprite
- LD A, (Zniggy_Y)
- ADD A, 8
- LD D, A
- LD A, (Zniggy_X)
- LD E, A
- LD HL, ZniggyBottom
- CALL DrawSprite
- HALT
- ; Clean up after Zniggy
- LD A, (Zniggy_Y)
- LD D, A
- LD A, (Zniggy_X)
- LD E, A
- Call ClearSprite
- LD A, (Zniggy_Y)
- ADD A, 8
- LD D, A
- LD A, (Zniggy_X)
- LD E, A
- Call ClearSprite
- ; Gravity
- LD A, (Zniggy_YI)
- INC A
- LD (Zniggy_YI), A
- LD B, A
- LD A, (Zniggy_Y)
- ADD A, B
- LD (Zniggy_Y), A
- LD B, 80H
- CP B
- JP M, NotOnGround
- LD A, B
- LD (Zniggy_Y), A
- XOR A
- LD (Zniggy_YI), A
- KeyJump:
- ; Spacebar
- LD A, 7FH
- IN A, (FEH)
- AND 01H
- JR NZ, KeyRight
- LD A, -10
- LD (Zniggy_YI), A
- NotOnGround:
- KeyRight:
- ; P
- LD A, DFH
- IN A, (FEH)
- AND 01H
- JR NZ, KeyLeft
- LD A, (Zniggy_X)
- INC A
- INC A
- AND 7FH
- LD (Zniggy_X), A
- KeyLeft:
- ; O
- LD A, DFH
- IN A, (FEH)
- AND 02H
- JR NZ, Loop
- LD A, (Zniggy_X)
- DEC A
- DEC A
- AND 7FH
- LD (Zniggy_X), A
- JP Loop ; Beware of using JR here
- ClearSprite:
- ; D = Y
- ; E = X
- LD A, D
- AND F8H
- LD D, A
- LD A, E
- AND F8H
- LD E, A
- PUSH DE
- CALL ClearCell
- POP DE
- LD A, D
- ADD A, 8
- LD D, A
- CALL ClearCell
- RET
- ClearCell:
- CALL ConvertCoords
- LD H, D
- LD L, E
- INC L
- XOR A
- LD B, 8
- ClearCellLine:
- LD (DE), A
- LD (HL), A
- INC D
- INC H
- DJNZ ClearCellLine
- RET
- DrawSprite:
- ; HL = Sprite
- ; D = Y
- ; E = X
- PUSH DE
- CALL ConvertCoords
- LD A, 8
- SUB B
- LD B, A
- CALL DrawCell
- POP DE
- XOR A
- OR D
- AND 7
- RET Z
- LD A, D
- ADD A, 8
- LD D, A
- CALL ConvertCoords
- LD A, F8H
- AND D
- LD D, A
- CALL DrawCell
- RET
- ConvertCoords:
- ; Convert to this bullshit
- ; 0 1 0 y8 y7 y3 y2 y1 y6 y5 y4 x8 x7 x6 x5 x4
- LD B, D
- LD C, E
- ; convert X
- LD A, C
- SRL A
- SRL A
- SRL A
- LD D, A
- LD A, B
- RLA
- RLA
- LD E, E0H
- AND E
- OR D
- LD E, A
- ; convert Y
- LD A, B
- RRA
- RRA
- RRA
- LD D, 40H
- OR D
- LD D, 58H
- AND D
- LD D, A
- LD A, 7
- AND B
- OR D
- LD D, A
- ; B = Y 3 bit offset
- LD A, 7
- AND D
- LD B, A
- ; C = X 3 bit offset
- LD A, 7
- AND C
- LD C, A
- RET
- DrawCell:
- ; HL = Graphics
- ; DE = Cell address
- ; B = Number of lines to draw
- ; C = X 3 bit offset
- PUSH BC
- PUSH DE
- LD D, (HL)
- LD E, 0
- LD B, C
- XOR A
- OR B
- JR Z, NoShiftSprite
- ShiftSprite:
- SRL D
- RR E
- DJNZ ShiftSprite
- NoShiftSprite:
- LD B, D
- LD C, E
- POP DE
- LD A, B
- LD (DE), A
- ; todo check if at the edge of the screen
- INC E
- LD A, C
- LD (DE), A
- DEC E
- POP BC
- INC HL
- INC D
- DJNZ DrawCell
- RET
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement