Copyright © 2026 by Víctor Parada
This is a little game for the 2026 NOMAM's BASIC 10-liners Contest. This program fits in the "stock" PUR-80 category, and it was written in Atari BASIC for the 8-bits ATARI XL/XE. Development started on 2026-02-14, and it took 1+6 days. The final version's date is 2026-03-15.
UPDATE: It obtained the 1st place of 31 entries in the category.
Chop the wood and avoid the branches. How many chops could you do in 75 seconds?
|
Press the button to start. |
|
Chop the trunk of the tree moving the joystick to the left or to the right. The lumberjack will move to that side of the tree at the same time the tree goes down. |
|
Move to the other side of the tree to avoid the branches. You get one point on each chop. |
|
When the time is over, two branches will appear at the same level blocking the path. |
|
The game is over when one of a branch hits the lumberjack and traps him against the ground. Press the button to play again. |
The ZPH show presented Timberman, a port of a lumberjack game for Atari 8-bit computers, and it was commented that a tenliner could be written for that game. Months later, after the call for the contest, Adam (one of the developers of the Atari Port) wrote me because he'd like to see a tenliner version of the game. He offered some help and explained me the rules, which might be different on each port.
Timberman port for the Atari 8bits.
Trying to understand them well, I started to code a prototype, and decided to write it in Atari BASIC and see how it would evolve. After some tests and adjuntements, I found that it could fit in the PUR-80 category, even when it didn't have bitmaps, just fonts. It was a playable game, not as fast as other ports, but adictive enough.
First proto with fonts and timer.
Proto with different patterns to see the scroll down.
After some optimizations, I could change the bitmaps of the fonts and got a better looking version. I tried many bitmaps including some that Adam proposed, but the cost was to remove some of the features.
Design of the character.
Proto with modified bitmap.
Many days later, I came again to this project and made many optimizations and changed the game rules many times in order to get the fastest game I could get for Atari BASIC. The resulting one was a 75 seconds challenge going for score. The latest version does not have a visible timer, but the pitch of the chop sound increases with the time.
Removed the timer to speed up the game.
Get the TENBIRMA.ATR file and set it as drive 1 in a real Atari (or emulator). Turn on the computer and the game should start after loading. Don't press OPTION key as internal BASIC is required. A joystick in port 1 is also required.
NOTE: This is a PAL game. To run in NTSC computers, press [RESET] key and type:
The abbreviated BASIC code is the following:
The full and expanded BASIC listing is:
|
|
TENBIRMAM (Timberman/Lumberjack) Atari BASIC PUR-80 Tenliner by Victor Parada Version 2026-03-15 |
0 |
LINE 0: SET-UP |
dim b$(200),f$(32680-adr(b$)),a$(200), d$(231),c$(999) |
B$: Staging area for next frame (20x10) F$: Filler to align A$ to page 128 plus the current offset of SAVMSC (32680=32768-200+112) A$: Current SAVMSC to manipulate screen data using string operations D$: Bottom section of the screen (20x2: ground, score and timer) plus a filler to line up D$ to page 130 C$: Predefined section shapes for the tree plus bitmap data |
f$="{zero}"
f$(999)=f$
f$(2)=f$
|
Initialize filler with zeroes |
graphics 18 |
Set screen to graphics mode 2 (ANTIC 7) without text window (20x12) |
print #6;"TENBIRMAM" |
|
poke 89,128 |
Move HI of SAVMSC to page 128 (LO=111) |
c$=f$ |
Initialize bitmap area |
for g=0 to 79 poke 33408+g,peek(57472+g) next g |
Copy digits bitmaps from ROM |
c$="{binary data}"
|
Define section shapes plus tile bitmaps 7: Axe 8: Body 9: Trunk A: Leaves B: Head C: Branch/floor |
3 |
LINE 3: PROGRAM LOOP |
sound 0,0,0,0 |
Turn off the sound |
on f goto 6 |
Next game loop unless the next lumberjack's position was not free |
for x=0 to 1 sound 0,95+z*3,6,z/2 z=z-(z>0) x=1-strig(0) next x |
Wait for the trigger |
z=30 |
Z: Counter for sound FX at game over (first time is zero by default -> no sound) |
poke 40545,128 |
Point HI byte SDLSTL to the SAVMSC area in A$ |
poke 756,130 |
Enable the new bitmaps |
poke 711,244 |
Brown instead of purple |
d$=f$ |
Clear the bottom of the playfield |
d$(6,15)="{binary data}"
|
Draw the floor (grass) |
f=1 |
F: Iteration flag |
s=0 |
S: Score |
a$=f$ |
Initialize Playfield |
a$(10,11)="{binary data}"
|
Add the top of the trunk |
a$(21)=a$ |
Build the full trunk |
a$(173,173)="{binary data}"
a$(192,193)="{binary data}"
|
Display the lumberjack |
poke 18,0 poke 19,0 |
Reset timer |
6 |
LINE 6: GAME LOOP |
poke 77,0 |
Disable attract mode |
j=stick(0) |
Check for a joystick movement |
m=m+(j=15) |
Check if the joystick was released (0=moved, 1+=released) |
k=((j=11)+3*(j=7))*(m>0) |
Check the side (1=left, 3=right, 0=none) only if the joystick came from a released state |
on k=0 goto 3 |
Skip the chop animation if no move is detected |
position 9,11 |
Prepare for printing the score |
a$(190,191)="{binary data}"
a$(170,171)="{binary data}"
|
Chop the tree |
m=0 |
Set the joystick flag as moved |
b$=a$ |
Copy the playfield to the stage area |
l=147+2*k |
Position of the lumberjack in the next frame |
f=b$(l,l)="{binary data}"
|
Check if the new lumberjack position is free |
s=s+1 |
Increase the score |
sound 0,99-peek(19),8,12 |
Makes a sound |
b$(l,l)="{binary data}"
|
Draw a head in the floor |
if f then b$(l-1,l)="{binary data}"
b$(l-20,l-20)="{binary data}"
|
If the spot was empty, replace the head with the body and put the head over it |
9 |
LINE 9: |
n=(int(rnd(0)*3)*6+8)*(peek(19)<15)+1 |
Select the next section of the tree, with branches at both sides if there is no more time |
a$(27,34)=c$(n) |
Put the new section in the playfield |
a$(41)=b$ |
Draw the remaining of playfield from the stage area |
print #6;s |
Display the score (using standard IO) |
goto 6 |
Return to my 10-liners page.
© 2026 by Víctor Parada - 2026-03-14 (updated: 2026-04-04)