Log In  


Cart #32479 | 2016-11-15 | Code ▽ | Embed ▽ | No License
261

Fly your Arwing to victory in this demake of a certain, iconic SNES game.

Controls:
Arrow Keys: Move ship, Select level in title screen
z/o: Fire

Features:
Filled 3D polygon graphics-- reminiscent of SuperFX chip
3 levels -- select with left or right on the title screen
2 enemy types
Music

Special thanks:
Star Fox Cornerea music sequenced by PJBarnes.com (http://www.khinsider.com/midi/snes/starfox) and imported using kittenm4ster's midi to pico-8 tracker translator (https://github.com/andmatand/midi-to-pico8)

Notes:
I finished this game with our three week old son sitting in my lap. I guess this is one our first father-son activities together--kinda sweet in a very nerdy way. Perhaps his first words will be in Lua.

Let me know if you would be interested in a cleaned up version of the 3D library that I put together for this project.

261


Well this is just nuts.

I think we'd all be interested in the engine you created for this. I was not a big Star Fox fan but I'm a fan of rail shooters, so I can see using this for any number of third-person shooter games.

Just amazing to me...I mean, I'm still figuring out how to use f'ing sin/cos effectively and here's this thing.


Wow. Just WOW! :D


Realy great visual, I like the "horizontal lines" shading. Only odd part was the music not stopping/changing when you finish a level.


Wow, awesome demake! clap clap


Good job.


Holy shit, this is on point. I'm a fan of the shading as well, it fits really well with this style of graphics and doesn't become distracting.


Fantastic job! Very authentic.


this has completely blown my damn mind. just unbelievable


Runs rather smoothly nice.
If ya wanted more controls could combine the player two buttons for it but kinda hard to set that up practically without easy ways to bind them to an actual controller.

Hope to see some more games using this style and setup.


yes this is amazing, much more smooth than the original SNES :D
seriously, really impressive.


Wow, incredible! Hats off to you.


I would love to get at that cleaned up 3D code!


I just posted a 3D library for folks to use: https://www.lexaloffle.com/bbs/?tid=28077


3

Does anyone else mutter "Good Luck!" to themselves in a mechanical voice when starting each level?


Love the game and the 3d library! I noticed the token count is pretty high for this game due to the arrays of numbers. If you pack the numbers into strings and load them at runtime it can save you a bunch of tokens. I gave it a go on PicoFox and got the token count down from 8177 to 6821.
The compressed size went down a bit too from 13745 to 13533. That might give you some breathing space for more game features :-)

Here is the function and all the vertices replaced with strings. Numbers are separated by spaces and each string must end in a space. I also removed any tab characters.

-- split number string into an array
function s(str)
 local t={}
 local t_index=1
 local start_index=1
 for i=1,#str do
  if sub(str,i,i)==" " then
   t[t_index]=sub(str,start_index,i-1)+0
   t_index+=1
   start_index=i+1
  end
 end
 return t
end

tower_tall_v={
s"6.000000 0.045053 -6.000000 ",
s"6.000000 0.045053 6.000000 ",
s"-6.000001 0.045053 5.999998 ",
s"-5.999996 0.045053 -6.000004 ",
s"6.000003 35 -5.999997 ",
s"5.999996 35 6.000005 ",
s"-6.000003 35 5.999997 ",
s"-5.999999 35 -6.000000 ",
}

tower_tall_f={
s"6 7 3 6 6 ", -- face a
s"2 6 3 6 6 ", --face a
s"1 5 2 5 5 ", --face b
s"5 6 2 5 5 ", --face b
--s"8 7 6 6 5 ", --face c
--s"5 8 6 6 5 ", --face c
s"7 8 4 13 13 ", --face d
s"3 7 4 13 13 ", -- face d
}

tower_tall_blue_f={
s"6 7 3 1 1 ", -- face a
s"2 6 3 1 1 ", --face a
s"1 5 2 1 13 ", --face b
s"5 6 2 1 13 ", --face b
--s"8 7 6 6 5 ", --face c
--s"5 8 6 6 5 ", --face c
s"7 8 4 13 12 ", --face d
s"3 7 4 13 12 ", -- face d
}

tower_tall_red_f={
s"6 7 3 2 2 ", -- face a
s"2 6 3 2 2 ", --face a
s"1 5 2 2 1 ", --face b
s"5 6 2 2 1 ", --face b
--s"8 7 6 6 5 ", --face c
--s"5 8 6 6 5 ", --face c
s"7 8 4 2 4 ", --face d
s"3 7 4 2 4 ", -- face d
}

tower_tall_wide_v={
s"6.000000 0.045053 -21.5 ",
s"6.000000 0.045053 6.000000 ",
s"-21.000001 0.045053 6 ",
s"-21.5 0.045053 -21.5 ",
s"6.000003 35 -21.5 ",
s"6 35 6 ",
s"-21.5 35 6 ",
s"-21.5 35 -21.5 ",
}

tower_medium_wide_v={
s"6.000000 0.045053 -21.5 ",
s"6.000000 0.045053 6.000000 ",
s"-21.000001 0.045053 6 ",
s"-21.5 0.045053 -21.5 ",
s"6.000003 25 -21.5 ",
s"6 25 6 ",
s"-21.5 25 6 ",
s"-21.5 25 -21.5 ",
}

tower_short_wide_v={
s"6.000000 0.045053 -21.5 ",
s"6.000000 0.045053 6.000000 ",
s"-21.000001 0.045053 6 ",
s"-21.5 0.045053 -21.5 ",
s"6.000003 15 -21.5 ",
s"6 15 6 ",
s"-21.5 15 6 ",
s"-21.5 15 -21.5 ",
}

tower_medium_v={
s"6.000000 0.045053 -6.000000 ",
s"6.000000 0.045053 6.000000 ",
s"-6.000001 0.045053 5.999998 ",
s"-5.999996 0.045053 -6.000004 ",
s"6.000003 25 -5.999997 ",
s"5.999996 25 6.000005 ",
s"-6.000003 25 5.999997 ",
s"-5.999999 25 -6.000000 ",
}

tower_medium_f={
s"6 7 3 6 6 ", -- face a
s"2 6 3 6 6 ", --face a
s"1 5 2 5 5 ", --face b
s"5 6 2 5 5 ", --face b
s"8 7 6 7 7 ", --face c
s"5 8 6 7 7 ", --face c
s"7 8 4 13 13 ", --face d
s"3 7 4 13 13 ", -- face d
}

tower_medium_blue_f={
s"6 7 3 1 1 ", -- face a
s"2 6 3 1 1 ", --face a
s"1 5 2 1 13 ", --face b
s"5 6 2 1 13 ", --face b
s"8 7 6 13 13 ", --face c
s"5 8 6 13 13 ", --face c
s"7 8 4 13 1 ", --face d
s"3 7 4 13 1 ", -- face d
}

tower_medium_red_f={
s"6 7 3 2 2 ", -- face a
s"2 6 3 2 2 ", --face a
s"1 5 2 2 1 ", --face b
s"5 6 2 2 1 ", --face b
s"8 7 6 2 14 ", --face c
s"5 8 6 2 14 ", --face c
s"7 8 4 2 4 ", --face d
s"3 7 4 2 4 ", -- face d
}

tower_short_v={
s"6.000000 0.045053 -6.000000 ",
s"6.000000 0.045053 6.000000 ",
s"-6.000001 0.045053 5.999998 ",
s"-5.999996 0.045053 -6.000004 ",
s"6.000003 15 -5.999997 ",
s"5.999996 15 6.000005 ",
s"-6.000003 15 5.999997 ",
s"-5.999999 15 -6.000000 ",
}

column_v={
s"2.000000 0.045053 -2.000000 ",
s"2.000000 0.045053 2.000000 ",
s"-2.000001 0.045053 2 ",
s"-2 0.045053 -2 ",
s"2.000003 25 -2 ",
s"2 25 3.000005 ",
s"-2.000003 25 2 ",
s"-2 25 -2.000000 ",
}

column_f={
s"6 7 3 1 1 ", -- face a
s"2 6 3 1 1 ", --face a
s"1 5 2 1 3 ", --face b
s"5 6 2 1 3 ", --face b
s"8 7 6 13 6 ", --face c
s"5 8 6 13 6 ", --face c
s"7 8 4 1 13 ", --face d
s"3 7 4 1 13 ", -- face d
}

small_block_v={
s"2.560000 0.022037 -2.560000 ",
s"2.560000 0.022037 2.560000 ",
s"-2.560000 0.022037 2.559999 ",
s"-2.559999 0.022037 -2.560001 ",
s"4.000002 4.022038 -3.999998 ",
s"3.999998 4.022038 4.000002 ",
s"-4.000001 4.022038 3.999999 ",
s"-4.000000 4.022038 -4.000000 ",
s"2.560001 8.022038 -2.559999 ",
s"2.559999 8.022038 2.560002 ",
s"-2.560001 8.022038 2.559999 ",
s"-2.560000 8.022038 -2.560000 ",
}

small_block_f={
s"6 10 11 6 6 ", --tf
s"7 6 11 6 6 ", --tf
s"3 2 7 13 13 ", --bf
s"2 6 7 13 13 ", --bf
s"1 5 6 5 1 ", --bl
s"2 1 6 5 1 ", --bl
s"5 9 10 5 5 ", --tl
s"6 5 10 5 5 ", --tl
s"7 8 4 13 5 ", --br
s"3 7 4 13 5 ", --br
s"8 7 12 13 13 ", --tr
s"7 11 12 13 13 ", --tr
s"12 11 10 7 7 ", --top
s"9 12 10 7 7 ", --top
}

atc_v={
s"1.57362 0.028255 -1.57362 ",
s"1.57362 0.028255 1.57362 ",
s"-1.57362 0.028255 1.57362 ",
s"-1.57361 0.028255 -1.57363 ",
s"1.127749 21.761099 -1.127747 ",
s"1.127747 21.761099 1.127749 ",
s"-1.127748 21.761099 1.127748 ",
s"-1.127748 21.761099 -1.127748 ",
s"2.966041 23.744837 -2.966038 ",
s"2.966037 23.744837 2.966041 ",
s"-2.966040 23.744837 2.966038 ",
s"-2.966039 23.744837 -2.966040 ",
s"1.442129 26.852680 -1.442128 ",
s"1.442128 26.852680 1.442130 ",
s"-1.442130 26.852680 1.442129 ",
s"-1.442129 26.852680 -1.442129 ",
}

atc_f={
s"6 7 3 6 6 ", --bf
s"2 6 3 6 6 ", --bf
s"5 6 2 5 5 ", --bl
s"1 5 2 5 5 ", --bl
s"7 8 4 13 13 ", --br
s"3 7 4 13 13 ", --br

s"6 10 11 8 8 ", --cbf
s"7 6 11 8 8 ", --cbf
s"10 14 15 15 15 ", --ctf
s"11 10 15 15 15 ", --ctf

s"7 11 12 4 8 ", --cbr
s"8 7 12 4 8 ", --cbr
s"12 11 15 14 14 ", --ctr
s"16 12 15 14 14 ", --ctr

s"5 9 10 4 4 ", --cbl
s"6 5 10 4 4 ", --cbl
s"9 13 14 4 4 ", --ctl
s"10 9 14 4 4 ", --ctl
}

gate_left_v={
s"-6.385633 0.056900 -1.581046 ",
s"-10.385633 0.056900 -1.581046 ",
s"-6.385633 9.280018 -1.581046 ",
s"-10.385633 9.280018 -1.581046 ",
s"-7.570441 0.056900 0.788571 ",
s"-9.200825 0.056900 0.788571 ",
s"-9.200825 9.280018 0.788571 ",
s"-7.570441 9.280018 0.788571 ",
}

gate_left_f={
s"8 5 1 5 5 ", --l
s"6 5 8 6 6 ", --f
s"7 4 2 13 13 ", --r
s"3 8 1 5 5 ", --l
s"7 6 8 6 6 ", --f
s"6 7 2 13 13 ", --r
}

gate_right_v={
s"6.385633 0.056900 -1.581046 ",
s"10.385633 0.056900 -1.581046 ",
s"6.385633 9.280018 -1.581046 ",
s"10.385633 9.280018 -1.581046 ",
s"7.570441 0.056900 0.788571 ",
s"9.200825 0.056900 0.788571 ",
s"9.200825 9.280018 0.788571 ",
s"7.570441 9.280018 0.788571 ",
}

gate_right_f={
s"8 5 1 13 13 ", --l
s"6 5 8 6 6 ", --f
s"7 4 2 5 5 ", --r
s"3 8 1 13 13 ", --l
s"7 6 8 6 6 ", --f
s"6 7 2 5 5 ", --r
}

gate_top_v={
s"-5.527887 10.090361 -1.581046 ",
s"-6.374729 9.280018 -1.581046 ",
s"-10.374729 9.280018 -1.581046 ",
s"-5.527887 14.090361 -1.581046 ",
s"5.533557 10.090361 -1.581046 ",
s"6.380398 9.280018 -1.581046 ",
s"10.380400 9.280018 -1.581046 ",
s"5.533557 14.090361 -1.581046 ",
s"-9.189920 9.280018 0.788571 ",
s"-7.559537 9.280018 0.788571 ",
s"-5.527887 12.904385 0.790907 ",
s"-5.527887 11.276337 0.790907 ",
s"9.195591 9.280018 0.788571 ",
s"7.565207 9.280018 0.788571 ",
s"5.533557 12.904385 0.790907 ",
s"5.533557 11.276337 0.790907 ",
}

gate_top_f={
s"7 15 13 7 7 ", --lt
s"8 15 7 7 7 ", --lf
s"16 13 15 6 6 ", --lf
s"14 13 16 6 6 ", --lf

s"14 5 6 13 5 ", --lb
s"16 5 14 13 5 ", --lb

s"10 12 9 6 6 ", --rf
s"12 11 9 6 6 ", --rf
s"10 2 1 5 1 ", --rb
s"12 10 1 5 1 ", --rb
s"3 9 11 13 13 ", --rt
s"4 3 11 13 13 ", --rt

s"1 5 16 5 1 ", --cb
s"12 1 16 5 1 ", --cb

s"11 15 8 6 7 ", --ct
s"4 11 8 6 7 ", --ct
s"11 12 15 6 6 ", --cf
s"12 16 15 6 6 ", --cf
}

ring_v={
s"1.314192 -4.043813 -4.092414 ",
s"-0.030381 -5.381969 -3.967768 ",
s"-0.030382 -3.967754 -5.381979 ",
s"1.314192 -5.753181 -0.034364 ",
s"-0.030381 -6.611262 0.999994 ",
s"-0.030382 -6.611260 -1.000006 ",
s"1.314192 -4.092413 4.043815 ",
s"-0.030381 -3.967766 5.381971 ",
s"-0.030382 -5.381978 3.967756 ",
s"1.314192 -0.034362 5.753181 ",
s"-0.030381 0.999996 6.611262 ",
s"-0.030382 -1.000004 6.611260 ",
s"1.314192 4.043817 4.092410 ",
s"-0.030381 5.381973 3.967762 ",
s"-0.030382 3.967759 5.381975 ",
s"1.314192 5.753182 0.034360 ",
s"-0.030381 6.611262 -0.999999 ",
s"-0.030382 6.611261 1.000001 ",
s"1.314192 4.092410 -4.043818 ",
s"-0.030381 3.967762 -5.381974 ",
s"-0.030382 5.381975 -3.967760 ",
s"1.314192 0.034359 -5.753181 ",
s"-0.030381 -1.000000 -6.611261 ",
s"-0.030382 1.000000 -6.611261 ",
}

ring_f={
s"1 2 3 10 9 ",
s"4 5 6 10 9 ",
s"7 8 9 10 9 ",
s"10 11 12 10 9 ",
s"13 14 15 10 9 ",
s"16 17 18 10 9 ",
s"19 20 21 10 9 ",
s"22 23 24 10 9 ",
}

sparrow_shadow_v ={
s"-0.000000 -0.143790 -4.131912 ",
 s"1.444643 -0.143790 -0.131913 ",
 s"-1.444643 -0.143790 -0.131913 ",
 s"-1.335428 -0.143790 -0.269312 ",
 s"-3.899004 -0.143790 0.976128 ",
 s"-0.736040 -0.143790 -1.590867 ",
 s"1.335428 -0.143790 -0.269312 ",
 s"3.899004 -0.143790 0.976128 ",
 s"0.736040 -0.143790 -1.590867 ",
}

sparrow_shadow_f={
 s"3 1 2 3 3 ",
 s"4 5 6 3 3 ",
 s"7 9 8 3 3 ",
}

missile_v={
s"0.605502 -0.016251 -0.483898 ",
s"-0.622070 -0.016251 -0.483897 ",
s"-0.005903 0.000000 -3.763774 ",
s"-0.005823 0.612172 0.114134 ",
s"-0.000387 -0.622139 0.114134 ",
s"-0.513121 -0.012158 -0.942357 ",
s"-0.982464 -0.008801 0.965153 ",
s"-1.269821 -0.476112 -0.362477 ",
s"-1.263134 0.458825 -0.362477 ",
s"0.495601 -0.012158 -0.942357 ",
s"0.964944 -0.008801 0.965153 ",
s"1.252301 -0.476112 -0.362477 ",
s"1.245614 0.458825 -0.362477 ",
}

missile_f={
s"5 3 1 7 7 ", --body b
s"4 5 1 8 9 ", --bady back
s"2 4 3 6 6 ",
s"4 2 5 9 4 ", --body back
s"4 1 3 5 5 ",
s"6 9 7 6 6 ",
s"9 8 7 5 5 ",
s"8 6 7 6 6 ", --engine back
s"8 9 6 5 5 ", --engine
s"3 5 2 5 5 ", --body c
s"10 11 13 6 6 ", --body a
s"13 11 12 5 5 ",
s"12 11 10 6 6 ", --engine back
s"12 10 13 5 5 ", --engine
}

bird_v={
s"1.366011 -0.551232 -0.404929 ",
s"-1.396024 -0.551232 -0.404928 ",
s"-0.009650 -2.533146 -3.288191 ",
s"-0.009470 1.293751 -0.791158 ",
s"1.292668 0.055527 -1.062871 ",
s"3.097031 1.765656 -1.326379 ",
s"2.524086 2.736222 -0.714591 ",
s"4.102667 -0.470794 -0.365055 ",
s"4.806459 2.715913 0.201633 ",
s"-2.410486 -0.758736 -0.505636 ",
s"-1.882767 -1.109086 -0.882269 ",
s"-3.522005 -2.970685 1.731706 ",
s"-1.472019 -0.057090 -0.649734 ",
s"-1.294312 0.055527 -1.062871 ",
s"-3.098674 1.765656 -1.326379 ",
s"-2.525730 2.736222 -0.714591 ",
s"-4.104311 -0.470794 -0.365055 ",
s"-4.808104 2.715913 0.201633 ",
s"2.408843 -0.758736 -0.505635 ",
s"1.881123 -1.109086 -0.882269 ",
s"3.520360 -2.970685 1.731707 ",
s"1.470375 -0.057090 -0.649734 ",
}

bird_f={
s"2 4 3 6 6 ", --body_left
s"4 1 3 7 7 ", --body right
s"6 9 8 13 14 ", --right wing lower right
s"9 7 8 14 14 ",
s"5 6 8 13 13 ", --right wing lower left
s"7 9 6 15 15 ", --right right upper side
s"7 6 5 14 14 ", --wing right upper
s"5 8 7 15 15 ", --right wing back
s"3 1 2 5 5 ",
s"1 4 2 5 5 ", --body under
s"11 13 12 9 9 ", --leg left
s"13 10 12 9 9 ", --leg left
s"12 10 11 9 9 ", --leg left
s"10 13 11 9 9 ", --leg left
s"15 17 18 13 2 ", --left wing left low
s"18 17 16 14 14 ",
s"14 17 15 13 13 ", --left wing right low
s"16 15 18 14 14 ", --left wing left upper
s"16 14 15 15 15 ", --left wing right upper
s"14 16 17 15 15 ",
s"20 21 22 9 9 ", --right leg
s"22 21 19 9 9 ", --right leg
s"21 20 19 9 9 ", --right leg
s"19 20 22 5 5 ",
}

fox_v={
s"0.986111 -0.025855 0.300339 ",
s"-1.005903 -0.025855 0.300340 ",
s"-0.005903 0.000000 -3.763774 ",
s"-0.005903 1.000000 0.300339 ",
s"-0.005903 0.525322 1.004954 ",
s"-1.636132 -0.269847 -0.689093 ",
s"-1.874824 0.244348 0.182332 ",
s"-1.743159 1.274788 1.228072 ",
s"-1.264151 0.050001 0.029176 ",
s"-4.5 -1.035814 1.553706 ",
s"-1.189264 -0.440330 -1.404416 ",
s"-1.015540 0.175132 0.075046 ",
s"1.851038 0.244348 0.182331 ",
s"1.240366 0.050001 0.029176 ",
s"0.991755 0.175132 0.075046 ",
s"1.612347 -0.269847 -0.689093 ",
s"4.5 -1.035814 1.553705 ",
s"1.165478 -0.440330 -1.404416 ",
s"1.719373 1.274788 1.228071 ",
}

fox_f={
s"1 4 5 5 5 ", --cowel left
s"4 2 5 6 6 ", --cowel right
s"2 1 5 9 8 ", --engine
s"2 4 3 7 7 ", --ship right
s"1 2 3 5 5 ", --ship bottom
s"4 1 3 6 6 ", --ship left
s"6 7 2 7 7 ", --right wing inside
s"10 7 6 6 6 ", --right wing front --hidden
s"10 2 7 6 6 ", --right wing top
s"6 2 10 5 5 ", --right wing bottom
s"11 9 8 1 1 ",
s"9 8 12 1 1 ", --right spoil top
s"9 11 12 1 1 ", --right spoil side
s"11 12 8 1 1 ", --right spoil front
s"17 16 13 6 6 ", --right wing front
s"18 19 14 1 1 ",
s"14 19 15 1 1 ", --left spoil top
s"14 15 18 1 1 ", --left spoil side
s"18 15 19 1 1 ", --left spoil bottom
s"17 1 13 6 6 ", --left wing back
s"16 13 1 6 6 ",
s"16 17 1 5 5 ", --left wing bottom
}


Thanks for the functions!

I have a new version of the 3D library that I am about to release which can load data from strings as well as a python script to convert obj files into string data. (There will also be a juicy speed increase.)


Very cool! Looking forward to the new release


This... This is just plain balls to the walls insane. I think I found the first IRL cart I'd buy, if the PICO-8 ever had a true hardware release.


This is amazing!


Yeah, pack it up boys. We're done here. No need to Pico anything anymore. This takes the cake.

No but seriously, this is fantastic. Haven't seen anything this impressive in quite a while, Pico-8 or otherwise!

Keep up the good work, I'm expecting to see you set the bar much higher for yourself in the future!


Esto esta encabronadamente increible...


I'd love to use the titlescreen of Picofox as an example of what can be done with #Pico8 for my book. Would that be fine with you?


Hey, very good! ^^
Cool pixel art, too.


Hi Tassilo,

It's heavily referenced from the original SNES art, so I don't really think it's original enough to go into a book, but I am definitely honored.

Original SNES art: https://i.ytimg.com/vi/kTD8FanEKd0/maxresdefault.jpg

-Electric Gryphon


this is literally the best Pico-8 game iver ever seen, im so proud of you


This is amazing! Get thrills when the classic music plays.

I will have to study the code and try to add barrel rolls :D
(control: press right or left twice)


If it moves I'm shooting it.

Oh yes, and a STAR for captain my captain. :)


It's amazing to play Starfox with a framerate this smooth


you're on your own fox


best game them tune ever.


Very splendid! I suggest you could also make a demake of Chip's Challenge, naming it "Pico's Challenge".


so awesome!



[Please log in to post a comment]