mirror of
https://github.com/alpine9000/amiga_examples
synced 2025-12-08 14:59:01 +00:00
level switching wip
This commit is contained in:
+9
-7
@@ -192,14 +192,14 @@ out/panelFade.s: assets/panel.pal ../tools/fade/out/fade
|
|||||||
out/%_tileFade.s: out/%_tileFadeFrom.pal out/%_tileFadeTo.pal ../tools/fade/out/fade
|
out/%_tileFade.s: out/%_tileFadeFrom.pal out/%_tileFadeTo.pal ../tools/fade/out/fade
|
||||||
../tools/fade/out/fade --steps=64 --colors=2 --from=out/$*_tileFadeFrom.pal --to=out/$*_tileFadeTo.pal --output=$*_tileFade > out/$*_tileFade.s
|
../tools/fade/out/fade --steps=64 --colors=2 --from=out/$*_tileFadeFrom.pal --to=out/$*_tileFadeTo.pal --output=$*_tileFade > out/$*_tileFade.s
|
||||||
|
|
||||||
out/foreground-map.s: foreground.tmx
|
out/%_foreground-map.s: levels/%_foreground.tmx
|
||||||
../tools/mapgen/out/mapgen --depth=3 --input=foreground.tmx
|
../tools/mapgen/out/mapgen --depth=3 --input=levels/$*_foreground.tmx
|
||||||
@mv foreground-map.s out
|
@mv foreground-map.s out/$*_foreground-map.s
|
||||||
@rm items-map.s
|
@rm items-map.s
|
||||||
@mv items-indexes.s out
|
@mv items-indexes.s out/$*_items-indexes.s
|
||||||
@rm foreground-indexes.s
|
@rm foreground-indexes.s
|
||||||
@mv pathway-map.s out
|
@mv pathway-map.s out/$*_pathway-map.s
|
||||||
@mv pathway-indexes.s out
|
@mv pathway-indexes.s out/$*_pathway-indexes.s
|
||||||
|
|
||||||
|
|
||||||
out/background-map.s: background.tmx
|
out/background-map.s: background.tmx
|
||||||
@@ -222,7 +222,9 @@ out/chaching.raw: assets/chaching.wav
|
|||||||
out/yay.raw: assets/yay.wav
|
out/yay.raw: assets/yay.wav
|
||||||
sox -v 2.0 assets/yay.wav -c 1 -r 4000 -b 8 out/yay.raw
|
sox -v 2.0 assets/yay.wav -c 1 -r 4000 -b 8 out/yay.raw
|
||||||
|
|
||||||
out/main.o: $(IMAGEDATA) out/background-map.s out/foreground-map.s Makefile link.script.x\
|
out/main.o: $(IMAGEDATA) \
|
||||||
|
out/levelA_foreground-map.s out/levelB_foreground-map.s \
|
||||||
|
out/background-map.s Makefile link.script.x\
|
||||||
out/paletteA_playarea_fade.s out/paletteA_flags_fade.s out/paletteA_foreground-palette-table.s out/paletteA_tileFade.s\
|
out/paletteA_playarea_fade.s out/paletteA_flags_fade.s out/paletteA_foreground-palette-table.s out/paletteA_tileFade.s\
|
||||||
out/paletteB_playarea_fade.s out/paletteB_flags_fade.s out/paletteB_foreground-palette-table.s out/paletteB_tileFade.s\
|
out/paletteB_playarea_fade.s out/paletteB_flags_fade.s out/paletteB_foreground-palette-table.s out/paletteB_tileFade.s\
|
||||||
out/panelFade.s out/jump.raw out/falling.raw out/chaching.raw out/whoosh.raw out/yay.raw
|
out/panelFade.s out/jump.raw out/falling.raw out/chaching.raw out/whoosh.raw out/yay.raw
|
||||||
|
|||||||
+61
-111
@@ -86,6 +86,7 @@ Entry:
|
|||||||
move.w #(DMAF_SPRITE|DMAF_BLITTER|DMAF_SETCLR|DMAF_COPPER|DMAF_RASTER|DMAF_MASTER),DMACON(a6)
|
move.w #(DMAF_SPRITE|DMAF_BLITTER|DMAF_SETCLR|DMAF_COPPER|DMAF_RASTER|DMAF_MASTER),DMACON(a6)
|
||||||
|
|
||||||
jsr InitialiseItems
|
jsr InitialiseItems
|
||||||
|
jsr InstallLevelA
|
||||||
Reset:
|
Reset:
|
||||||
lea livesCounterText,a0
|
lea livesCounterText,a0
|
||||||
bsr DecrementCounter
|
bsr DecrementCounter
|
||||||
@@ -95,9 +96,11 @@ Reset:
|
|||||||
lea player1Text,a1
|
lea player1Text,a1
|
||||||
move.w #192,d0
|
move.w #192,d0
|
||||||
jsr RenderCounter
|
jsr RenderCounter
|
||||||
|
|
||||||
|
|
||||||
|
move.l startForegroundMapPtr,foregroundMapPtr
|
||||||
|
move.l startPathwayMapPtr,pathwayMapPtr
|
||||||
|
|
||||||
move.l startForegroundMapPtr,foregroundMapPtr
|
|
||||||
move.l startPathwayMapPtr,pathwayMapPtr
|
|
||||||
move.w #0,pathwayRenderPending
|
move.w #0,pathwayRenderPending
|
||||||
move.w #0,pathwayClearPending
|
move.w #0,pathwayClearPending
|
||||||
move.w #0,moving
|
move.w #0,moving
|
||||||
@@ -117,8 +120,7 @@ Reset:
|
|||||||
bne .notGameOver
|
bne .notGameOver
|
||||||
bra GameOver
|
bra GameOver
|
||||||
.notGameOver:
|
.notGameOver:
|
||||||
lea message,a1
|
move.l startMessage,a1
|
||||||
move.w #128,d0
|
|
||||||
jsr Message
|
jsr Message
|
||||||
|
|
||||||
|
|
||||||
@@ -300,14 +302,12 @@ Update:
|
|||||||
|
|
||||||
GameOver:
|
GameOver:
|
||||||
lea gameOverMessage,a1
|
lea gameOverMessage,a1
|
||||||
move.w #128,d0
|
|
||||||
jsr Message
|
jsr Message
|
||||||
jsr InstallPaletteA
|
jsr InstallLevelA
|
||||||
|
|
||||||
jsr WaitForJoystick
|
jsr WaitForJoystick
|
||||||
|
|
||||||
move.l #level1ForegroundMap,startForegroundMapPtr
|
|
||||||
move.l #level1PathwayMap,startPathwayMapPtr
|
|
||||||
move.l #'0004',livesCounterText
|
move.l #'0004',livesCounterText
|
||||||
jsr InitialiseItems
|
jsr InitialiseItems
|
||||||
bra Reset
|
bra Reset
|
||||||
@@ -319,25 +319,22 @@ LevelComplete:
|
|||||||
jsr ResetPlayer
|
jsr ResetPlayer
|
||||||
|
|
||||||
jsr SelectNextPlayerSprite
|
jsr SelectNextPlayerSprite
|
||||||
move.l nextPaletteInstaller,a0
|
move.l nextLevelInstaller,a0
|
||||||
cmp.l #0,(a0)
|
cmp.l #0,(a0)
|
||||||
bne .dontResetPaletteInstaller
|
bne .dontResetLevelInstaller
|
||||||
move.l #paletteInstallers,nextPaletteInstaller
|
move.l #levelInstallers,nextLevelInstaller
|
||||||
move.l nextPaletteInstaller,a0
|
move.l nextLevelInstaller,a0
|
||||||
.dontResetPaletteInstaller:
|
.dontResetLevelInstaller:
|
||||||
move.l (a0),a1
|
move.l (a0),a1
|
||||||
jsr (a1)
|
jsr (a1)
|
||||||
add.l #4,a0
|
add.l #4,a0
|
||||||
move.l a0,nextPaletteInstaller
|
move.l a0,nextLevelInstaller
|
||||||
|
|
||||||
lea levelCompleteMessage,a1
|
move.l levelCompleteMessage,a1
|
||||||
move.w #100,d0
|
|
||||||
jsr Message
|
jsr Message
|
||||||
|
|
||||||
jsr WaitForJoystick
|
jsr WaitForJoystick
|
||||||
|
|
||||||
move.l #level1ForegroundMap,startForegroundMapPtr
|
|
||||||
move.l #level1PathwayMap,startPathwayMapPtr
|
|
||||||
move.l #'0004',livesCounterText
|
move.l #'0004',livesCounterText
|
||||||
jsr InitialiseItems
|
jsr InitialiseItems
|
||||||
bra Reset
|
bra Reset
|
||||||
@@ -876,6 +873,15 @@ Message:
|
|||||||
;; d0 - xpos
|
;; d0 - xpos
|
||||||
;; d1 - ypos
|
;; d1 - ypos
|
||||||
|
|
||||||
|
move.w #SCREEN_WIDTH/2,d0
|
||||||
|
move.l a1,a2
|
||||||
|
.loop:
|
||||||
|
cmp.b #0,(a2)+
|
||||||
|
beq .lengthComplete
|
||||||
|
sub.w #4,d0
|
||||||
|
bra .loop
|
||||||
|
|
||||||
|
.lengthComplete:
|
||||||
move.w d0,d1
|
move.w d0,d1
|
||||||
move.w #(32*4)<<6|(8),d0
|
move.w #(32*4)<<6|(8),d0
|
||||||
lea mpanelOrig,a0
|
lea mpanelOrig,a0
|
||||||
@@ -955,21 +961,13 @@ player2Text:
|
|||||||
dc.b "P2"
|
dc.b "P2"
|
||||||
dc.b 0
|
dc.b 0
|
||||||
align 4
|
align 4
|
||||||
|
|
||||||
message:
|
|
||||||
dc.b "LETS PLAY!"
|
|
||||||
dc.b 0
|
|
||||||
align 4
|
|
||||||
|
|
||||||
gameOverMessage:
|
gameOverMessage:
|
||||||
dc.b "GAME OVER"
|
dc.b "GAME OVER"
|
||||||
dc.b 0
|
dc.b 0
|
||||||
align 4
|
align 4
|
||||||
|
|
||||||
levelCompleteMessage:
|
|
||||||
dc.b "LEVEL COMPLETE!"
|
|
||||||
dc.b 0
|
|
||||||
align 4
|
|
||||||
|
|
||||||
skippedFramesCounterText:
|
skippedFramesCounterText:
|
||||||
dc.b "0000"
|
dc.b "0000"
|
||||||
@@ -1413,19 +1411,9 @@ InstallFlagGreyPalette:
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
InstallPaletteA:
|
Level A,"LEVEL 1"
|
||||||
move.l #paletteA_playAreaPalette,playAreaPalette
|
Level B,"LEVEL 2"
|
||||||
move.l #paletteA_playareaFade,playareaFade
|
|
||||||
move.l #paletteA_flagsFade,flagsFade
|
|
||||||
move.l #paletteA_tileFade,tileFade
|
|
||||||
rts
|
|
||||||
|
|
||||||
InstallPaletteB:
|
|
||||||
move.l #paletteB_playAreaPalette,playAreaPalette
|
|
||||||
move.l #paletteB_playareaFade,playareaFade
|
|
||||||
move.l #paletteB_flagsFade,flagsFade
|
|
||||||
move.l #paletteB_tileFade,tileFade
|
|
||||||
rts
|
|
||||||
|
|
||||||
foregroundOnscreen:
|
foregroundOnscreen:
|
||||||
dc.l foregroundBitplanes1
|
dc.l foregroundBitplanes1
|
||||||
@@ -1438,38 +1426,11 @@ panel:
|
|||||||
mpanel:
|
mpanel:
|
||||||
incbin "out/mpanel.bin"
|
incbin "out/mpanel.bin"
|
||||||
mpanelOrig:
|
mpanelOrig:
|
||||||
incbin "out/mpanelOrig.bin"
|
incbin "out/mpanelOrig.bin"
|
||||||
level1ForegroundMap:
|
|
||||||
include "out/foreground-map.s"
|
|
||||||
dc.w $FFFF
|
|
||||||
dc.w $FFFF
|
|
||||||
dc.w $FFFF
|
|
||||||
dc.w $FFFF
|
|
||||||
dc.w $FFFF
|
|
||||||
dc.w $FFFF
|
|
||||||
dc.w $FFFF
|
|
||||||
dc.w $FFFF
|
|
||||||
level1PathwayMap:
|
|
||||||
include "out/pathway-map.s"
|
|
||||||
itemsMap:
|
|
||||||
include "out/items-indexes.s"
|
|
||||||
itemsMapOffset:
|
itemsMapOffset:
|
||||||
dc.l itemsMap-level1ForegroundMap
|
dc.l levelAItemsMap-levelAForegroundMap
|
||||||
foregroundMapPtr:
|
|
||||||
dc.l 0
|
|
||||||
pathwayMapPtr:
|
|
||||||
dc.l 0
|
|
||||||
startForegroundMapPtr:
|
|
||||||
dc.l level1ForegroundMap
|
|
||||||
startPathwayMapPtr:
|
|
||||||
dc.l level1PathwayMap
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
foregroundScrollPixels:
|
foregroundScrollPixels:
|
||||||
dc.l FOREGROUND_SCROLL_PIXELS
|
dc.l FOREGROUND_SCROLL_PIXELS
|
||||||
foregroundScrollX:
|
|
||||||
dc.l 0
|
|
||||||
frameCount:
|
frameCount:
|
||||||
dc.l 0
|
dc.l 0
|
||||||
verticalBlankCount:
|
verticalBlankCount:
|
||||||
@@ -1478,18 +1439,8 @@ movingCounter:
|
|||||||
dc.w 0
|
dc.w 0
|
||||||
moving:
|
moving:
|
||||||
dc.w 0
|
dc.w 0
|
||||||
|
|
||||||
foregroundPlayerTileAddress:
|
|
||||||
dc.l 0
|
|
||||||
pathwayRenderPending:
|
|
||||||
dc.w 0
|
|
||||||
pathwayPlayerTileAddress:
|
|
||||||
dc.l 0
|
|
||||||
pathwayClearPending:
|
|
||||||
dc.w 0
|
|
||||||
pathwayFadeCount:
|
pathwayFadeCount:
|
||||||
dc.w 0
|
dc.w 0
|
||||||
|
|
||||||
tileFadePtr:
|
tileFadePtr:
|
||||||
dc.l 0
|
dc.l 0
|
||||||
playareaFadePtr:
|
playareaFadePtr:
|
||||||
@@ -1583,32 +1534,6 @@ deAnimIndexPattern:
|
|||||||
panelGreyPalette:
|
panelGreyPalette:
|
||||||
include "out/panel-grey-table.s"
|
include "out/panel-grey-table.s"
|
||||||
|
|
||||||
paletteA_playAreaPalette:
|
|
||||||
include "out/paletteA_foreground-palette-table.s"
|
|
||||||
include "out/background-palette-table.s"
|
|
||||||
|
|
||||||
paletteA_playareaFade:
|
|
||||||
include "out/paletteA_playarea_fade.s"
|
|
||||||
|
|
||||||
paletteA_flagsFade:
|
|
||||||
include "out/paletteA_flags_fade.s"
|
|
||||||
|
|
||||||
paletteA_tileFade:
|
|
||||||
include "out/paletteA_tileFade.s"
|
|
||||||
|
|
||||||
paletteB_playAreaPalette:
|
|
||||||
include "out/paletteB_foreground-palette-table.s"
|
|
||||||
include "out/background-palette-table.s"
|
|
||||||
|
|
||||||
paletteB_playareaFade:
|
|
||||||
include "out/paletteB_playarea_fade.s"
|
|
||||||
|
|
||||||
paletteB_flagsFade:
|
|
||||||
include "out/paletteB_flags_fade.s"
|
|
||||||
|
|
||||||
paletteB_tileFade:
|
|
||||||
include "out/paletteB_tileFade.s"
|
|
||||||
|
|
||||||
playAreaPalette:
|
playAreaPalette:
|
||||||
dc.l paletteA_playAreaPalette
|
dc.l paletteA_playAreaPalette
|
||||||
playareaFade:
|
playareaFade:
|
||||||
@@ -1618,13 +1543,13 @@ flagsFade:
|
|||||||
tileFade:
|
tileFade:
|
||||||
dc.l paletteA_tileFade
|
dc.l paletteA_tileFade
|
||||||
|
|
||||||
paletteInstallers:
|
levelInstallers:
|
||||||
dc.l InstallPaletteA
|
dc.l InstallLevelA
|
||||||
dc.l InstallPaletteB
|
dc.l InstallLevelB
|
||||||
dc.l 0
|
dc.l 0
|
||||||
|
|
||||||
nextPaletteInstaller:
|
nextLevelInstaller:
|
||||||
dc.l paletteInstallers+4
|
dc.l levelInstallers+4
|
||||||
|
|
||||||
panelFade:
|
panelFade:
|
||||||
include "out/panelFade.s"
|
include "out/panelFade.s"
|
||||||
@@ -1636,7 +1561,32 @@ foregroundBitplanes1:
|
|||||||
endif
|
endif
|
||||||
.endSplash
|
.endSplash
|
||||||
ds.b (IMAGESIZE*2)-(.endSplash-foregroundBitplanes1)
|
ds.b (IMAGESIZE*2)-(.endSplash-foregroundBitplanes1)
|
||||||
section .bss
|
|
||||||
|
startMessage:
|
||||||
|
dc.l 0
|
||||||
|
levelCompleteMessage:
|
||||||
|
dc.l 0
|
||||||
|
foregroundMapPtr:
|
||||||
|
dc.l 0
|
||||||
|
pathwayMapPtr:
|
||||||
|
dc.l 0
|
||||||
|
startForegroundMapPtr:
|
||||||
|
dc.l 0
|
||||||
|
startPathwayMapPtr:
|
||||||
|
dc.l 0
|
||||||
|
foregroundPlayerTileAddress:
|
||||||
|
dc.l 0
|
||||||
|
pathwayRenderPending:
|
||||||
|
dc.w 0
|
||||||
|
pathwayPlayerTileAddress:
|
||||||
|
dc.l 0
|
||||||
|
pathwayClearPending:
|
||||||
|
dc.w 0
|
||||||
|
foregroundScrollX:
|
||||||
|
dc.l 0
|
||||||
|
|
||||||
|
section .bss
|
||||||
|
|
||||||
startUserstack:
|
startUserstack:
|
||||||
ds.b $1000 ; size of stack
|
ds.b $1000 ; size of stack
|
||||||
userstack:
|
userstack:
|
||||||
|
|||||||
+2
-1
@@ -6,4 +6,5 @@
|
|||||||
include "hardware/intbits.i"
|
include "hardware/intbits.i"
|
||||||
include "hardware/blit.i"
|
include "hardware/blit.i"
|
||||||
include "constants.i"
|
include "constants.i"
|
||||||
include "macros.i"
|
include "macros.i"
|
||||||
|
include "level.i"
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
Level: macro
|
||||||
|
InstallLevel\1:
|
||||||
|
move.l #level\1StartMessage,startMessage
|
||||||
|
move.l #level\1CompleteMessage,levelCompleteMessage
|
||||||
|
move.l #level\1ForegroundMap,startForegroundMapPtr
|
||||||
|
move.l #level\1PathwayMap,startPathwayMapPtr
|
||||||
|
move.l #level\1ForegroundMap,foregroundMapPtr
|
||||||
|
move.l #level\1PathwayMap,pathwayMapPtr
|
||||||
|
move.l #palette\1_playAreaPalette,playAreaPalette
|
||||||
|
move.l #palette\1_playareaFade,playareaFade
|
||||||
|
move.l #palette\1_flagsFade,flagsFade
|
||||||
|
move.l #palette\1_tileFade,tileFade
|
||||||
|
rts
|
||||||
|
|
||||||
|
level\1ForegroundMap:
|
||||||
|
include "out/level\1_foreground-map.s"
|
||||||
|
dc.w $FFFF
|
||||||
|
dc.w $FFFF
|
||||||
|
dc.w $FFFF
|
||||||
|
dc.w $FFFF
|
||||||
|
dc.w $FFFF
|
||||||
|
dc.w $FFFF
|
||||||
|
dc.w $FFFF
|
||||||
|
dc.w $FFFF
|
||||||
|
level\1PathwayMap:
|
||||||
|
include "out/level\1_pathway-map.s"
|
||||||
|
level\1ItemsMap:
|
||||||
|
include "out/level\1_items-indexes.s"
|
||||||
|
|
||||||
|
level\1StartMessage:
|
||||||
|
dc.b \2
|
||||||
|
dc.b 0
|
||||||
|
align 4
|
||||||
|
|
||||||
|
level\1CompleteMessage:
|
||||||
|
dc.b \2
|
||||||
|
dc.b " COMPLETE!"
|
||||||
|
dc.b 0
|
||||||
|
align 4
|
||||||
|
|
||||||
|
|
||||||
|
palette\1_playAreaPalette:
|
||||||
|
include "out/palette\1_foreground-palette-table.s"
|
||||||
|
include "out/background-palette-table.s"
|
||||||
|
|
||||||
|
palette\1_playareaFade:
|
||||||
|
include "out/palette\1_playarea_fade.s"
|
||||||
|
|
||||||
|
palette\1_flagsFade:
|
||||||
|
include "out/palette\1_flags_fade.s"
|
||||||
|
|
||||||
|
palette\1_tileFade:
|
||||||
|
include "out/palette\1_tileFade.s"
|
||||||
|
endm
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<map version="1.0" orientation="orthogonal" renderorder="right-down" width="100" height="8" tilewidth="16" tileheight="16" nextobjectid="1">
|
||||||
|
<tileset firstgid="1" name="foreground" tilewidth="16" tileheight="16" tilecount="320" columns="20">
|
||||||
|
<image source="assets/assets.png" width="320" height="256"/>
|
||||||
|
</tileset>
|
||||||
|
<tileset firstgid="321" name="items" tilewidth="16" tileheight="16" tilecount="320" columns="20">
|
||||||
|
<image source="assets/items.png" trans="000000" width="320" height="256"/>
|
||||||
|
</tileset>
|
||||||
|
<layer name="foreground" width="100" height="8">
|
||||||
|
<data encoding="base64" compression="zlib">
|
||||||
|
eJxjZ2BgsGLEjtlH5eguZwekmYBYDAtNidxWPHKVNLBvqMtZQuNFC4c8iB5scrvJ1FdPZ33k+AEWH5TE9Wg6p03+wJfulpOZDuidB8iVI9d/1HYnNfLHqBz1yo2hWH/QIp0PFjlYfEgz4G6D0UJuMLYxB5McAAccW5U=
|
||||||
|
</data>
|
||||||
|
</layer>
|
||||||
|
<layer name="pathway" width="100" height="8">
|
||||||
|
<data encoding="base64" compression="zlib">
|
||||||
|
eJztlD0OwjAMheOhU0+QqSdg4v4HYOoJmDgBEyu10FPdh5M0bRFI5JOiSGli+/mnITT+hbOEcJLl3tjHOK37wTZ7mW1rnR4Vb9fEcglzD3wS6+doDYDz38krf9b33j7vxN9tDPDDsXMtvVh6OmP7FujycnTNfGM/OR/eO/WLGo7OHWiL07qFZW+hJoze2zI7sMU7iPJ+18Zid2Bnjb9Z/TYPXky5eOHDi5NzlkPrPEhaS4le0m+21KQ0Hxb0qPWnuodEnaCVbeiZ3XmucObN3Na8Kbk5Tmkp4Wn07K79Z3McNb31DWrzZvMRf1hXo8wTZUo3PA==
|
||||||
|
</data>
|
||||||
|
</layer>
|
||||||
|
<layer name="items" width="100" height="8">
|
||||||
|
<data encoding="base64" compression="zlib">
|
||||||
|
eJztVVsOgjAQpNfxFooooqIBq/e/CZDQpJbusw3hg/mEmdnZ2Y8WxY4t4WTkmiNT0xnZDMdrFJkoz7WQY97UL9Zxaf65Gn/foyc87ok7lRk60XpwdNT+ruNY1x+z5DreGfB9AN8hfogbwgvzSBDLleLH0Wq7sOP/au669rhv5B4WuSOEisG1HofDfzJ2S4FEfxB6T/uF+ak+a+Qm4b04uBAajedXoIHmt5nfGsiP2j8G6Tsh7fCK8DX3WBMvIt9v4/l38DEAYj8UWQ==
|
||||||
|
</data>
|
||||||
|
</layer>
|
||||||
|
</map>
|
||||||
Reference in New Issue
Block a user