Retrogamecoding(.org) > Games

Soviet Hunter

<< < (2/2)

Mopz:
I had to change some things in the latest version to make it look ok here. The first thing I did was to scale down the game background image in GIMP with 50% so that it has the same size as the other screens (680x384). I then changed the window setup from


--- Code: ---set window 1, 1, 1360, 768, true, 2
--- End code ---

to


--- Code: ---set window 1, 1, 680, 384
--- End code ---

But that's just because I don't have a widescreen monitor. I suggest you try with both:


--- Code: ---set window 1, 1, 680, 384, true
--- End code ---

and


--- Code: ---set window 1, 1, 680, 384, true, 2
--- End code ---

I'd be very interested in hearing what sort of results those settings give :) This is actually a big bad in NaaLaa: you can't tell what the actual desktop resolution is to determine weather it's widescreen or not. I promise to add a fix for that  :)

Also, when drawing the background image your code looked like this:


--- Code: ---draw image BACK_GROUND_IMAGE
--- End code ---

It should be:


--- Code: ---draw image BACK_GROUND_IMAGE, 0, 0
--- End code ---

Because if you omitt the coordinates naalaa assumes you're using "image transformations" (translate/scale/rotate, like turtle graphics), and that's not needed here :) (When using your code, the image was drawn centered at the coordinates 0, 0).

This is the modified code. I've marked my changes with "EDIT" and attached the downscaled background image.


--- Code: ---rem ==================================================================
rem---------------------------Soviet Hunter---------------------------
rem-------------------------------------------------------------------
rem-------------------------------------------------------------------
rem-----A shooting game by Goettsch using a tutorial by Marcus--------
rem ==================================================================


rem Import libraries.
import "Speed.lib"
import "Keycodes.lib"

constant:
rem Images.
BG_IMAGE 0
PLAYER_IMAGE 1
ENEMY_IMAGE 2
PLAYER_BULLET_IMAGE 3
ENEMY_BULLET_IMAGE 4
   BACK_GROUND_IMAGE    5
   END_IMAGE            6
   MENU_IMAGE           7

rem Sound effects.
PLAYER_SHOOT_SOUND 0
HIT_SOUND 1
ENEMY_SHOOT_SOUND 2
ENEMY_BOOM_SOUND 3


rem Enemy array fields.
ENM_ACTIVE 0
ENM_BULLET_X 1
ENM_BULLET_Y 2

hidden:

rem EDIT: Changed the window setup a little to work with my monitor.
set window 1, 1, 680, 384

set redraw off

rem Load enemies and set their color keys.
load image PLAYER_IMAGE, "data/player.bmp"
load image ENEMY_IMAGE, "data/enemies.bmp"
load image PLAYER_BULLET_IMAGE, "data/bullet.bmp"
load image ENEMY_BULLET_IMAGE, "data/enemy_bullet.bmp"
load image BACK_GROUND_IMAGE, "data/background.bmp"
load image END_IMAGE, "data/endscreen.bmp"
load image MENU_IMAGE, "data/menu.bmp"
set image colorkey PLAYER_IMAGE, 0, 0, 0
set image colorkey ENEMY_IMAGE, 0, 0 ,0
set image colorkey PLAYER_BULLET_IMAGE, 0, 0 ,0
set image colorkey ENEMY_BULLET_IMAGE, 0, 0 ,0
set image grid ENEMY_IMAGE, 0, 0

rem Load sound effects.
load sound PLAYER_SHOOT_SOUND, "data/player_shoot.wav"
load sound HIT_SOUND, "data/hit.wav"
load sound ENEMY_SHOOT_SOUND, "data/enemy_shoot.wav"
load sound ENEMY_BOOM_SOUND, "data/enemy_boom.wav"

rem small menu
do
set color 0,0,0
cls
set color 255,255,255
      draw image MENU_IMAGE,0,0
redraw

until keydown(VK_SPACE)


rem Enemy array:
rem enemies[x][y][ ENM_ACTIVE, ENM_BULLET_X, ENM_BULLET_Y]
enemies[21][3][3]

rem Init enemies.
for y = 0 to 2
for x = 1 to 20
enemies[x][y][ENM_ACTIVE] = true
enemies[x][y][ENM_BULLET_X] = -1
next
next

rem All enemies share a position and movement.
enemiesX = 0
enemiesY = 20
enemiesDX = 3
enemiesDropY = 0
enemyMoveTimer = 0
enemyFrame = 0
enemyShootTimer = 100

rem Player
playerX = (width(primary) - width(PLAYER_IMAGE))/2
playerY = 260
bulletX = -1
bulletY = 0
lives=3

 
do
 
rem Update logic.

rem Enemies.
if enemiesDropY = 0
enemyMoveTimer = (enemyMoveTimer + 1)%4
if enemyMoveTimer = 0
enemiesX = enemiesX + enemiesDX
if enemiesX > 400 or enemiesX < 1
enemiesDX = -enemiesDX
enemiesDropY = 6
endif
enemyFrame = 5 - enemyFrame
endif
else
enemiesY = enemiesY + 1
enemiesDropY = enemiesDropY - 1
endif

rem Enemy bullets.
enemyShootTimer = max(enemyShootTimer - 1, 0)
if enemyShootTimer = 0
rem Find possible shooters. Only the bottom enemies may shoot
possible[21][2]
possibleCount = 0
for x = 0 to 20
enmY = -1
for y = 0 to 2
if enemies[x][y][ENM_ACTIVE] and enemies[x][y][ENM_BULLET_X] = -1
enmY = y
endif
next
if enmY >= 0
possible[possibleCount][0] = x
possible[possibleCount][1] = enmY
possibleCount = possibleCount + 1
endif
next

if possibleCount > 0
rem Chose an enemy.
i = rnd(possibleCount)
enemies[possible[i][0]][possible[i][1]][ENM_BULLET_X] = enemiesX + possible[i][0]*10 + 4
enemies[possible[i][0]][possible[i][1]][ENM_BULLET_Y] = enemiesY + possible[i][1]*10 + 8
enemyShootTimer = 60 + rnd(60)
play sound ENEMY_SHOOT_SOUND
endif
endif

for y = 0 to 2
for x = 0 to 20
if enemies[x][y][ENM_BULLET_X] >= 0
enemies[x][y][ENM_BULLET_Y] = enemies[x][y][ENM_BULLET_Y] + 8
rem Out of the window.
if enemies[x][y][ENM_BULLET_Y] >= 450
enemies[x][y][ENM_BULLET_X] = -1
else
rem Check for collision with player.and end the game if lives <0
bx = enemies[x][y][ENM_BULLET_X] + 1
by = enemies[x][y][ENM_BULLET_Y] + height(ENEMY_BULLET_IMAGE)
if bx >= playerX and bx < playerX + width(PLAYER_IMAGE)
if by >= playerY and by < playerY + height(PLAYER_IMAGE)
enemies[x][y][ENM_BULLET_X] = -1
       play sound HIT_SOUND
                                      lives=lives-1
                                            if lives=0 then

do
set color 0,0,0
cls
set color 255,255,255
      draw image END_IMAGE,0,0
redraw
until keydown (VK_ESC)
                      endif
endif
endif
endif
endif
next
next

rem Player.
if keydown(VK_LEFT) then playerX = max(playerX - 2, 0)
if keydown(VK_RIGHT) then playerX = min(playerX + 2, 645)

rem Player bullet.
if bulletX >= 0
rem Move up.
bulletY = bulletY - 7
rem Check for collision with enemies.
x = ((bulletX + 1) - enemiesX)/10
y = (bulletY - enemiesY)/10
if x >= 0 and x < 21 and y >= 0 and y < 3
if enemies[x][y][ENM_ACTIVE]
enemies[x][y][ENM_ACTIVE] = false
bulletX = -1
play sound ENEMY_BOOM_SOUND       
endif
endif
rem Out of window?
if bulletY < -height(PLAYER_BULLET_IMAGE) then bulletX = -1
elseif keydown(VK_SPACE, true)
rem Shoot.
bulletX = playerX + 4
bulletY = playerY - 5
play sound PLAYER_SHOOT_SOUND
endif

rem Draw.

rem Background.
rem EDIT: You forgot the coordinates,
rem draw image BACK_GROUND_IMAGE
draw image BACK_GROUND_IMAGE, 0, 0

rem Enemies.
set color 255, 255, 255
for y = 0 to 2
for x = 0 to 20
if enemies[x][y][ENM_ACTIVE]
draw image ENEMY_IMAGE, enemiesX + x*10, enemiesY + y*10, y + enemyFrame
endif
if enemies[x][y][ENM_BULLET_X] > 0
draw image ENEMY_BULLET_IMAGE, enemies[x][y][ENM_BULLET_X], enemies[x][y][ENM_BULLET_Y]
endif
next
next

rem Player
draw image PLAYER_IMAGE, playerX, playerY

rem Player bullet.
if bulletX >= 0
draw image PLAYER_BULLET_IMAGE, bulletX, bulletY
endif

set caret 100,5
set color 255,0,0
center "Lives left   ",lives
set color 255,255,255

proc SPD_HoldFrame 30
redraw
until keydown(VK_ESC) or not running()

--- End code ---

cvirus:
Hey Mopz, you could implement something like this in c.


--- Code: ---#include "windows.h"

INT32 GetDeskTopHeight();
INT32 GetDeskTopWidth();

int main(int argc, const char* argv[])

{
printf("width = %i\n",GetDeskTopWidth());
  printf("height = %i\n",GetDeskTopHeight());
getchar();
return 0;
}

INT32 GetDeskTopHeight()
{
  INT32 width = GetSystemMetrics(SM_CXSCREEN);
  return width;
}

INT32 GetDeskTopWidth()
{
  INT32 height = GetSystemMetrics(SM_CYSCREEN);
  return height;
}

--- End code ---

And then in NaaLaa something like


--- Code: ---sytemwidth = GetDeskTopWidth()
systemheight = GetDeskTopHeight()


set window 1, 1, sytemwidth , systemheight

--- End code ---

This way the fullscreen is allways like the screen resolution and nothing else i think :)

Mopz:
Thanks cvirus! Now I don't have to visit that darned msdn place :)

Goettsch:
Thanks,

set window 1, 1, 680, 384, true, 2, the game become full screen
 
set window 1, 1, 680, 384, true, it remains a small window

JSM:
glad to see someone posting a game :)

Navigation

[0] Message Index

[*] Previous page

Go to full version