Skip to content

Instantly share code, notes, and snippets.

@Darenn
Created March 9, 2022 08:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Darenn/131bf842ad94ebbeeb8d16576e55621b to your computer and use it in GitHub Desktop.
Save Darenn/131bf842ad94ebbeeb8d16576e55621b to your computer and use it in GitHub Desktop.
It's Raining Cats - A game for Click4 Fantasy Computer
;; It's raining cats video game for Click4 Fantasy console
;; This is a click4 script (.c4s), please open it with Click4 IDE
;; Made by Darenn Keller
#alloc player_pos_x2 0
#alloc player_pos_x1 2
#alloc nme_pos_x1 1
#alloc nme_pos_x2 2
#alloc nme_pos_y1 0
#alloc nme_pos_y2 0
#alloc random_pos 15
#define SPRITE_WIDTH 7
#define SPRITE_HEIGHT 7
#define player_pos_y1 3 ;; player has fixed y
#define player_pos_y2 5 ;; player has fixed y
#define PLAYER_SPR_X1 0
#define PLAYER_SPR_X2 1
#define PLAYER_SPR_Y1 3
#define PLAYER_SPR_Y2 8
#define NME_SPR_X1 1
#define NME_SPR_X2 0
#define NME_SPR_Y1 3
#define NME_SPR_Y2 8
;; called only once
@start:
;; reset all variables in case the player want to replay
set r0 0
hsave player_pos_x2
set r0 2
hsave player_pos_x1
set r0 1
hsave nme_pos_x1
set r0 2
hsave nme_pos_x2
set r0 0
hsave nme_pos_y1
set r0 0
hsave nme_pos_y2
;; let random_pos at whatever value it was
;; Reset registers for when player resets
set r0 0
set r1 0
set r2 0
set r3 0
set r4 0
set r5 0
set r6 0
set r7 0
set r8 0
set r9 0
set r10 0
set r11 0
set r12 0
set r13 0
set r14 0
set r15 0
@end_start
@update:
jmp_if_pressed key_right @right_pressed
jmp @right_not_pressed
@right_pressed
hload player_pos_x2
inc r0
hsave player_pos_x2
crsz r0
rjmp 4
jmp @overflow
jmp @not_overflow
@overflow
hload player_pos_x1
inc r0
hsave player_pos_x1
@not_overflow
@right_not_pressed
jmp_if_pressed key_left @left_pressed
jmp @left_not_pressed
@left_pressed
hload player_pos_x2
crsz r0
rjmp 4
jmp @overflow_l
jmp @not_overflow_l
@overflow_l
hload player_pos_x1
dec r0
hsave player_pos_x1
@not_overflow_l
hload player_pos_x2
dec r0
hsave player_pos_x2
@left_not_pressed
@move_nme
hload nme_pos_y2
inc r0
hsave nme_pos_y2
crsz r0
rjmp 4
jmp @overflow_nme
jmp @not_overflow_nme
@overflow_nme
hload nme_pos_y1
inc r0
hsave nme_pos_y1
@not_overflow_nme
@nme_collide_with_ground
hload nme_pos_y1
set r1 3
cmp
je @collision_with_ground
jmp @end_ground_collide
@collision_with_ground
;; check if player is collising (only check x1)
hload nme_pos_x1
copy r10 r0
hload player_pos_x1
copy r1 r10
cmp
je @collide_with_player
jmp @not_collide_with_player
@collide_with_player
;; Play cat sound
set r0 alt1
qsnd r0
;; undraw cat
hload nme_pos_x2
copy r7 r0
hload nme_pos_x1
copy r6 r0
hload nme_pos_y2
copy r9 r0
hload nme_pos_y1
copy r8 r0
set r4 8
set r5 15
set r0 2
set r1 2
set r2 2
set r3 2
draw
set r0 15
hsave nme_pos_y1
;; choose a random x1
hload random_pos
inc r0
hsave random_pos
copy r1 r0
set r0 1
set r2 1
set r3 0
load
hsave nme_pos_x1
set r1 3
cmp
jg @next_out_of_bounds
jmp @not_out_bounds
@next_out_of_bounds
set r0 3
hsave nme_pos_x1
@not_out_bounds
;; choose a random x2
hload random_pos
inc r0
hsave random_pos
copy r1 r0
set r0 0
set r2 0
set r3 0
load
hsave nme_pos_x2
;; } collide with player
jmp @end_ground_collide
@not_collide_with_player
;; game over
set r0 7
qsnd r0
set r0 6
qsnd r0
set r0 5
qsnd r0
set r0 4
qsnd r0
jmp @draw_game_over
@end_ground_collide
@end_update
@draw:
;; Draw player
hload player_pos_x2
copy r7 r0
hload player_pos_x1
copy r6 r0
set r8 player_pos_y1
set r9 player_pos_y2
set r4 SPRITE_WIDTH
set r5 SPRITE_HEIGHT
set r0 PLAYER_SPR_X1
set r1 PLAYER_SPR_X2
set r2 PLAYER_SPR_Y1
set r3 PLAYER_SPR_Y2
draw
;; Draw NME
hload nme_pos_x2
copy r7 r0
hload nme_pos_x1
copy r6 r0
hload nme_pos_y2
copy r9 r0
hload nme_pos_y1
copy r8 r0
set r4 8
set r5 15
set r0 NME_SPR_X1
set r1 NME_SPR_X2
set r2 NME_SPR_Y1
set r3 NME_SPR_Y1
draw
jmp @end_draw
;; Draw GAME
@draw_game_over
set r0 1
set r1 9
set r2 3
set r3 8
set r4 15
set r5 5
set r6 1
set r7 10
set r8 1
set r9 5
draw
;; Draw OVER
set r0 2
set r1 9
set r2 3
set r3 8
set r4 15
set r5 5
set r6 1
set r7 10
set r8 1
set r9 10
draw
jmp @draw_game_over
@end_draw
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
jmp @update:
== sprites
0 5 0 0 0 0 5 0
0 5 0 0 0 0 5 0
0 0 5 5 5 5 0 0
0 0 0 5 5 0 0 0
0 0 0 5 5 0 0 0
0 0 5 5 5 5 0 0
0 0 5 5 5 5 0 0
0 0 5 5 5 5 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 15
0 0 0 0 0 0 0 15
0 0 0 0 0 0 0 15
0 0 0 0 0 0 0 15
0 0 0 0 0 0 0 15
0 0 0 0 0 0 0 0
0 0 0 0 15 0 0 15
15 15 0 0 15 15 15 15
0 0 0 0 15 12 15 12
0 0 0 0 15 15 15 15
0 0 15 15 15 15 15 0
0 15 15 15 15 15 15 0
0 15 15 15 15 15 15 0
15 15 15 15 15 15 15 0
0 0 0 0 0 0 0 0
0 15 15 0 0 15 0 0
15 0 0 0 15 0 15 0
15 0 15 0 15 15 15 0
0 15 15 0 15 0 15 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
15 15 15 0 15 15 15 0
15 15 15 0 15 15 0 0
15 0 15 0 15 0 0 0
15 0 15 0 15 15 15 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 15 0 0 15 0 15 0
15 0 15 0 15 0 15 0
15 0 15 0 15 0 15 0
0 15 0 0 0 15 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
15 15 15 0 15 15 0 0
15 15 0 0 15 0 15 0
15 0 0 0 15 15 0 0
15 15 15 0 15 0 15 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment