Earth's Last Stand by 6502Nerd
About
* 10 Line BASIC Challenge *
* PUR-80 Category submission *
TITLE : Earth's Last Stand
PLATFORM : Oric Atmos
GAME DESCRIPTION
You are the last remaining defence of Earth against the invading alien hordes!
In your trusty ship, you must shoot the descending aliens and not allow any to
reach the ground. Unfortunately, when an alien is destroyed, another one will
take its place, and even though the end it inevitable, humans will not go down
without a fight. It is truly Earth's last stand, but let it be a noble one!
When the game is started, aliens will appear near the top of the screen and
start to descend.
Keyboard controls are Z and X keys for left/right and / key to fire your
missile. When a missile is fired, you cannot fire another one until that
missile has either hit an alien or reached the top of the screen.
An alien is hit, your score is increased by an amount dependend on how close
the alien is to the bottom. A new alien will regenerate, but not as high up
as at the beginning of the game, and typically all aliens will start to descend
more regularly. This is how the difficulty of the game progresses, and it gets
hard quite quickly!
The game does not end until an alien reaches the same level as your ship, so
keep going and try tactics like hitting the lowest aliens first and moving as
soon as possible to get to the next alien you want to target.
My best score is 665, which I did by initially waiting to hit aliens when they
were in the yellow zone so as to get more points. As the difficulty increases
quite quickly, it's then a case of just trying to get as many as possible and
definitely do not miss in the later stages because the aliens continue to
descend while you are waiting for the next missle to be ready!
INSTALLATION INSTRUCTIONS
Recommend to use an Oric-1 emulator, I have used Oricutron 1.2 which runs fine
on Windows 10.
1. Download the zip file from here:
http://www.emucamp.com/oric/oricutron/windows/Oricutron_win32_v12.zip
2. Extract to a folder called Oric or similar
3. Copy the file INVADERS.TAP to the Oric\tapes folder
4. Start the emulator oricutron.exe (will start in Atmos mode by default)
5. Type CLOAD"INVADERS.TAP" and press enter
6. Game will load almost instantly
7. LIST to show the program
8. Type RUN to play the game
9. Keyboard controls: 'Z'=Left, 'X'=Right, '/'=Fire
TECHNICAL DESCRIPTION
Oric BASIC only allows less than 80 characters per line hence PUR-80 category.
This uses the standard text mode of the Oric, which is 40 columns by 28 rows
(the very top row is for system use - so 27 user accessible rows).
The background colour is set to green, yellow, red depending on the row, and
the foreground colour is set to blue, with these exceptions:
- Row 0 : Background colour is black
- Row 1 : Foreground colour is green (same as background colour!)
- Row 26: Background colour is black
Row 1 has a special purpose; when the missile is not active, it is still
plotted but at row 1. However it cannot be seen because it is the same colour
as the background! This saves having to make code provision to not process
the missile movement.
Single letter variables are used in place of constants as they are a little
faster to process and take up less code space. A big challenge is avoiding the
use of IF..THEN, so a lot of Boolean logic is utilised (although still had to
use it once).
How does Boolen logic help? A Boolean expression evaluates to -1 for True and
0 for False. These values can be directly used in expressions to update the
positions of player, alien and missle without the usual use of IF to check for
boundary conditions. Another interesting way is that the value is used to
determine whether to jump to a subroutine in line 6 to process an alien being
hit. By inverting so that 1=True, the ON..GOSUB command can be use to only go
to a subroutine if an expression is true and hence avoid IF..THEN!
There was enough space to squeeze in user defined graphics. There are three
characters re-defined to represent the player's ship, aliens and the missle.
The characters are designed using a 6x8 matrix, which is narrower than the
usual 8x8 found on computers like C64 or Atari.
Good sound effects are possible in such a short program due to Oric BASIC
including single keywords called ZAP, SHOOT and EXPLODE - which do what you
would expect!
PROGRAM LISTING
0 U=520:W=34:X=20:Y=25:P=X:DIMJ(40):M=123:B=32:A=125:Z=124:O=24:GOSUB7:REPEAT
1 K=PEEK(U):PLOTX,Y,B:X=X+(K=170ANDX>2):X=X-(K=176ANDX<37):PLOTX,Y,M:PLOTP,Q,B
2 F=-(K=159ANDQ<2):G=-(F=0):P=P*G+X*F:Q=(Q+(Q>1))*G+(Y-1)*F:V=RND(1)-.3<(L/20)
3 H=-(Q>1ANDSCRN(P,Q)=A):PLOTP,Q,Z:ONHGOSUB6:IFFTHENPLOT1,O,7:ZAP:PLOT1,O,4
4 L=L+H:I=-(I<w)*(i+4)-4*(i>=W):J=J(I):PLOTI,J,B:J=(J-V)*-(J<y)-2*(j<2):j(i)=j 5="" h="-(Q">1ANDSCRN(I,J)=Z):PLOTI,J,A:ONHGOSUB6:L=L+H:UNTILJ=Y:EXPLODE:END
6 SHOOT:PLOTP,Q,42:S=S+Q:PLOT18,0,STR$(S):J(P)=1+L/2:WAIT7:PLOTP,Q,B:Q=1:RETURN
7 INK4:CLS:POKE#26A,10:FORG=0TO26:F=2*-(G>0ANDG<9)-(G>8ANDG<18)*3-(G>17ANDG<=Y)
8 PLOT0,G,F+16:NEXT:FORG=47064TO47087:READD:POKEG,D:NEXT:PLOT1,1,2:PLOT1,0,7
9 Q=1:RETURN:DATA0,12,12,45,45,63,63,30,0,8,4,8,4,8,4,0,33,18,30,45,45,63,18,33</y)-2*(j<2):j(i)=j></w)*(i+4)-4*(i>
System requirements for PC
Last Modified: Mar 1, 2021
Where to buy
itch.io