1.1 update:
- Code optimisation
- Muted alert sound for low fuel/ammo
- Reinstated original title screen (much better!)
- Added btn(5) X as alternative acceleration button for those using joypads/sticks.
My third little game - an arcade racer / shooter a bit like RoadBlasters, which was a favourite of mine as a kid.
Up = Accelerate
Down = Brake
Left/Right = Turn left / right
Z = Shoot
X = Alternative accelerate
Hope you enjoy it. Don't bother asking for improvements, I'm at the token limit :D On to the next thing!
Nice to see this one finished!
Good gameplay - blowing up cars is always fun!
Note: "I'm at the token limit"
...
No f**ng" way!!
You still have gazillion of tokens available:
- replace all table creation by their inline variant. Ex:
function new_scenery(x,y,z,width,height,sprite_x,sprite_y,sprite_width,sprite_height,b_flip,stype,cwidth) return { x=x, y=y, z=z, width=width, height=height, sprite_x=sprite_x, sprite_y=sprite_y, sprite_width=sprite_width, sprite_height=sprite_height, collide_width=cwidth, b_flip=b_flip, stype=stype, } end |
That's 15 tokens less than the original version
- abuse of single line variable initialization:
-- yes local a,b,c=1,5,3 -- no local a=1 local b=5 local c=3 |
First variant saves ~2 tokens per variables (and you have a lot of variables!)
Now you have plenty of space left :), couple of things could be improved:
- real games are 60 fps :]
- slightly reduce screenshake!
- explosions should stay in place (seems to keep moving)
- very annoying beep sound (low bullets)
Some more token savers:
palt()'s second argument defaults to true, so e.g. you can say palt(14) instead of palt(14,true) - two fewer tokens
pal() with no args includes what palt() with no args does, so you don't need to call both.
Why this?
sy=30 while sy<40 do sy+=1 ... end |
Rather than this?
for sy=31,40 do ... end |
Should be able to save tokens by doing something like this in draw_flag():
local sn,y=245+f,60-20-4+sin(x/80+frame/30)*2 spr(sn,x,y) spr(sn,x,y+8) spr(sn,x,y+16) spr(sn,x,y+24) |
Similar stuff in draw_enemy_cars() and draw_player().
Use camera() for constant offsets to draw locations. Change:
rectfill(0,55-hud_offset,128,66-hud_offset,c1) rectfill(0,45-hud_offset,128,55-hud_offset,c2) rectfill(0,37-hud_offset,128,47-hud_offset,c3) line(0,54-hud_offset,128,54-hud_offset,c1) line(0,52-hud_offset,128,52-hud_offset,c1) line(0,46-hud_offset,128,46-hud_offset,c2) line(0,44-hud_offset,128,44-hud_offset,c2) line(0,42-hud_offset,128,42-hud_offset,c2) line(0,35-hud_offset,128,35-hud_offset,c3) line(0,33-hud_offset,128,33-hud_offset,c3) line(0,31-hud_offset,128,31-hud_offset,c3) |
To:
camera(0,hud_offset) -- or maybe -hud_offset, I forget rectfill(0,55,128,66,c1) rectfill(0,45,128,55,c2) rectfill(0,37,128,47,c3) line(0,54,128,54,c1) line(0,52,128,52,c1) line(0,46,128,46,c2) line(0,44,128,44,c2) line(0,42,128,42,c2) line(0,35,128,35,c3) line(0,33,128,33,c3) line(0,31,128,31,c3) camera() -- reset |
Side note: rectfill()'s arguments are inclusive, e.g. to draw the width of the screen, use 0..127, not 0..128.
Token counting aside...
8747 points
Looks great, a real blast-from-the-past feel to it. :)
Thanks guys for the token count recommendations - if I have room, I might be able to put back in road mines and my previous title screen.
I'll change the alert beep sound to be less intrusive - I've just loved alerts and flashing HUDs since Wing Commander :) I'll tone down the screenshake a bit. Twitter people were divided on that too but I think it adds punch. Perhaps could half it for enemy explosions.
60 fps would mean re-timing everything...I'll think about it ;)
Explosions were stationary initially but now move on purpose because momentum.
Thanks for all the expert tips on token optimisation...I did my best but I'm not a natural coder, so if something looks weird it's because that's how I did it.
Also, my math is shaky.
Just noticed another easy token save:
Where I suggested you do this:
camera(0,hud_offset) -- or maybe -hud_offset, I forget rectfill(0,55,128,66,c1) rectfill(0,45,128,55,c2) rectfill(0,37,128,47,c3) line(0,54,128,54,c1) line(0,52,128,52,c1) line(0,46,128,46,c2) line(0,44,128,44,c2) line(0,42,128,42,c2) line(0,35,128,35,c3) line(0,33,128,33,c3) line(0,31,128,31,c3) camera() -- reset |
You can also assume that, once set, a color sticks, so you can also remove duplicate color args:
camera(0,hud_offset) -- or maybe -hud_offset, I forget rectfill(0,55,128,66,c1) rectfill(0,45,128,55,c2) rectfill(0,37,128,47,c3) line(0,54,128,54,c1) line(0,52,128,52) line(0,46,128,46,c2) line(0,44,128,44) line(0,42,128,42) line(0,35,128,35,c3) line(0,33,128,33) line(0,31,128,31) camera() -- reset |
You might have other instances--I only noticed this when glancing at my suggestions.
Oh, actually, if you fix some accidental rectfill overlap, you can reduce it further by interleaving the rectfills without color args too:
camera(0,hud_offset) -- or maybe -hud_offset, I forget line(0,31,128,31,c3) line(0,33,128,33) line(0,35,128,35) rectfill(0,37,128,47) line(0,42,128,42,c2) line(0,44,128,44) line(0,46,128,46) rectfill(0,48,128,55) line(0,52,128,52,c1) line(0,54,128,54) rectfill(0,56,128,66) camera() -- reset |
Should save 16 tokens.
1.1 update uploaded.
@Felice - Most of your recommendations implemented. Many thanks. I now had enough room (1 token remaining :D) to put back my original title screen. Thank you.
While you are at it: can we skip the score at the end of a track? That's way too long :/
Sorry @fred72, I misappropriated your first reply to @Felice, I didn't realise you'd put in some valuable input too further up - that was very rude of me. Sorry! Thank you.
I'll decrease the score increment timer. perhaps it does take a little too long. I might have been too enamoured with the effect.
[Please log in to post a comment]