Log In  

84

Cart [#32479#] | Copy | Code | 2016-11-14 | Link
84

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.

3d starfox flight simulator shump space


P#32480 2016-11-14 22:57

::

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.

P#32481 2016-11-14 23:24

::

Wow. Just WOW! :D

P#32483 2016-11-15 00:46

::

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

P#32484 2016-11-15 01:23

::

Wow, awesome demake! clap clap

P#32490 2016-11-15 05:02

::

Good job.

P#32506 2016-11-15 11:57

::

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.

P#32519 2016-11-15 15:02

::

Fantastic job! Very authentic.

P#32525 2016-11-15 17:57

::

this has completely blown my damn mind. just unbelievable

P#32533 2016-11-15 21:29

::

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.

P#32534 2016-11-15 22:14

::

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

P#32550 2016-11-16 09:16

::

Wow, incredible! Hats off to you.

P#32553 2016-11-16 10:04

::

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

P#32565 2016-11-16 15:54

::

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

P#32576 2016-11-17 02:00

::

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

P#33552 2016-12-16 03:06

:: reducing token count

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
}

P#34756 2017-01-02 15:00

::

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.)

P#34762 2017-01-02 16:40

::

Very cool! Looking forward to the new release

P#34771 2017-01-02 18:22

::

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.

P#34887 2017-01-03 20:35

::

This is amazing!

P#34929 2017-01-04 15:32

::

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!

P#34969 2017-01-04 22:33

::

Esto esta encabronadamente increible...

P#36610 2017-01-24 17:26

Log in to post a comment

user:
password:

New User | Account Help
:: New User
X
About | Contact | Updates | Terms of Use
Follow Lexaloffle:
Generated 2017-03-23 14:12 | 0.090s | 2097k