diff --git a/main.ras b/main.ras index 100a3e8..a21704d 100644 --- a/main.ras +++ b/main.ras @@ -1,16 +1,27 @@ program MyProgram; var - index: byte; + x,y: byte; + aux: integer; // sprite_x is an integer since x values range between 0 and 320 sprite_x : integer = 160; sprite_y : byte = 100; + player_x : byte = 110; + player_dir:byte = $ff; // joystick_dir is used to display either left or right-pointing sprite joystick_dir : byte; // sprite location is where we keep the sprite in the memory. - // also used for setspriteloc that needs this value divided by 64 + // also used for setspriteloc that needs this value divided by 64 (spriteNumBase) @define spriteLoc $2000 - // In this tuturial, we use sprite "0" as the default one - @define useSprite 0 + @define spriteNumBase $80 + // Sprite constant numbers (fixed in this game) + @define spr_player 0 + @define spr_e1 1 + @define spr_e2 2 + @define spr_e3 3 + @define spr_d1 4 + @define spr_d2 5 + @define spr_d3 6 + @define spr_powerup 7 // Use joystick port 2 @define joystickPort 2 @define useBank 0 @@ -21,37 +32,104 @@ // This method initializes the screen procedure InitScreen(); +var c,s:pointer; begin - screen_bg_col:=purple; + screen_bg_col:=dark_grey; screen_fg_col:=black; clearscreen(key_space, screen_char_loc); - moveto(1,23,hi(screen_char_loc)); - printstring("JOYSTICK IN PORT 2 TO MOVE",0,40); + c:=screen_col_loc+25; + s:=screen_char_loc+25; + for y:=0 to 25 do begin + fill(c, dark_grey, 15); + fill(s, 224, 15); + c:=c+40; + s:=s+40; + end; + c:=screen_col_loc+40+26; + fill(c, red, 13); + c:=c+160; + fill(c, red, 13); + // S'N'S + s:=screen_char_loc+120+28; + s[0]:=147; + s[1]:=167; + s[2]:=142; + s[3]:=167; + s[4]:=147; + //moveto(28,3,hi(screen_char_loc)); + //printstring("S'N'S",0,5); + + moveto(2,1,hi(screen_char_loc)); + printstring("PRESS SPACE TO SHOOT!",0,40); end; // This method initializes the sprites procedure InitSprites(); +var + spr_priority:pointer; begin - // Set all sprites to be multicolor - //sprite_multicolor:=$ff; - // Set common sprite multicolor #1 - //sprite_multicolor_reg1:=green; - // Set common sprite multicolor #2 - //sprite_multicolor_reg2:=white; - // Set sprite "0" individual color value - sprite_color[@useSprite]:=light_red; + // Sprite colors + sprite_color[@spr_player]:=white; + sprite_color[@spr_e1]:=red; + sprite_color[@spr_e2]:=red; + sprite_color[@spr_e3]:=red; + sprite_color[@spr_d1]:=blue; + sprite_color[@spr_d2]:=blue; + sprite_color[@spr_d3]:=blue; + sprite_color[@spr_powerup]:=yellow; + // Player sprite behind chars + spr_priority:= ^$D01B; + spr_priority[0]:=1; + // Player constant height + sprite_pos[1]:=220; // Turn on sprite 0 (or @useSprite) - togglebit(sprite_bitmask,@useSprite,1); + //togglebit(sprite_bitmask,@useSprite,1); + sprite_bitmask:=$ff; + SetSpriteLoc(@spr_player, @spriteNumBase, @useBank); + SetSpriteLoc(@spr_e1, @spriteNumBase+3, @useBank); + SetSpriteLoc(@spr_e2, @spriteNumBase+3, @useBank); + SetSpriteLoc(@spr_e3, @spriteNumBase+3, @useBank); + SetSpriteLoc(@spr_d1, @spriteNumBase+5, @useBank); + SetSpriteLoc(@spr_d2, @spriteNumBase+5, @useBank); + SetSpriteLoc(@spr_d3, @spriteNumBase+5, @useBank); + SetSpriteLoc(@spr_powerup, @spriteNumBase+8, @useBank); end; // This method is called one time per raster cycle procedure UpdateSprite(); +var + pressing:byte; begin + + if player_dir=0 then + inc(player_x) else + if player_dir=1 then + dec(player_x); + + if keypressed(key_space) = 1 then begin + if pressing=0 then begin + pressing:=1; + if player_dir=0 then begin + player_dir:=1; + SetSpriteLoc(@spr_player, @spriteNumBase+1, @useBank); + end else begin + player_dir:=0; + SetSpriteLoc(@spr_player, @spriteNumBase+2, @useBank); + end; + end; + end else pressing:=0; + if player_x>220 then player_x := 4; + if player_x<4 then player_x := 220; + sprite_pos[0]:=player_x; + +/* + moveto(1,23,hi(screen_char_loc)); + printstring("JOYSTICK IN PORT 2 TO MOVE",0,40); // Update sprite position based on joystick values sprite_x:=sprite_x + joystickright - joystickleft; sprite_y:=sprite_y + joystickdown - joystickup; // Update the sprite position on screen for sprite number @useSprite - SpritePos(sprite_x, sprite_y, @useSprite); + SpritePos(sprite_x, sprite_y, @spr_player); // Set left/right offset pointer for sprite if (joystickright) then @@ -60,7 +138,7 @@ joystick_dir := 0; // Set the sprite pointer to point to the sprite data + direction offset - SetSpriteLoc(@useSprite, @spriteLoc/64 + joystick_dir, @useBank); + SetSpriteLoc(@spr_player, @spriteLoc/64 + joystick_dir, @useBank); // If any movement is detected, play a random sound if ((joystickright+joystickleft) or (joystickup+joystickdown)) then @@ -71,7 +149,7 @@ 3*16 + 3, // Sustain = 16*15 + release=6 1 +sid_saw, // Waveform sid_saw); // waveform - +*/ end; // This interrupt is triggered one time pr raster cycle diff --git a/sns.trse b/sns.trse index 0b87ec1..b495e93 100644 --- a/sns.trse +++ b/sns.trse @@ -37,3 +37,4 @@ override_target_settings_sys = 0 override_target_settings_prg = 0 build_list = , +data_header_sprites.flf = 0 diff --git a/sprites.flf b/sprites.flf index 415d9cd..146c08d 100644 --- a/sprites.flf +++ b/sprites.flf Binary files differ