tag:blogger.com,1999:blog-75823465223451491422024-03-12T21:00:03.188-07:00From Video games to Heavy Metal - The adventures of FooflesAssorted discussions about everyone's favorite PS3 video games, including LittleBigPlanet, my own programming projects, my music and more!Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.comBlogger42125tag:blogger.com,1999:blog-7582346522345149142.post-87153889451675833132011-04-28T13:55:00.000-07:002011-04-28T13:55:57.807-07:00New apartment and PSN downtime woesWell, I signed my lease this morning so I officially have a new apartment. :)<br />
<br />
PSN is down but don't worry! The month of may I will work on brand new levels and of course GAMES! Games that will be playable on mobile phones and within web browsers! Stay tuned!<br />
<br />
In LBP2 I will extend the madness series with new types of gameplay and action. It will still follow the story of our hapless LBP Federation Captain.<br />
<br />
The gameplay will include a lot more action and 2D Side-scrolling segments, and the puzzle gameplay will be something unique entirely :)Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com0tag:blogger.com,1999:blog-7582346522345149142.post-8674270576079272512011-04-20T16:22:00.000-07:002011-04-20T16:22:54.170-07:00Rush of Battle - LBP2 Song Guitar Tab<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5c768TVMxKTJPyCjtLpC8pCv0VX8uprZVqc5Wpz81tRnkqazTeLV7di1fcTUuIS4K1Zu02emZCRtbgEBoO3fkHOrrt6xfyzocjjRMSJ6b7GM8UzOnqmLrNI2z4MqhnKC2ERlHAamPaWcs/s1600/fooftunes.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5c768TVMxKTJPyCjtLpC8pCv0VX8uprZVqc5Wpz81tRnkqazTeLV7di1fcTUuIS4K1Zu02emZCRtbgEBoO3fkHOrrt6xfyzocjjRMSJ6b7GM8UzOnqmLrNI2z4MqhnKC2ERlHAamPaWcs/s200/fooftunes.jpg" width="200" /></a></div>So now and then I figure I might as well share a bit about how to play some the more popular Foof Tunes in LBP2! (And otherwise!)<br />
<br />
This is one of my favorites to play, I'll often play this for fans as I pop into their games. The Rush of Battle (at the end of Maximum Carnage - Level here <a href="http://lbp.me/v/xnbyvw">http://lbp.me/v/xnbyvw</a> , song here <a href="http://www.youtube.com/watch?v=7iGNq2jlet0">http://www.youtube.com/watch?v=7iGNq2jlet0</a> )<br />
<br />
The two main riffs to the song are pretty simple to play. Tempo about 180 bpm, the beginning starts in E minor like so:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaqYhVvKIaYzq4pFLUi9eKuRL6g4sGsNGmUgpPTNJVsYOT5EeFpA7HcVGaiZ_7bBmorAMOWFh3PGfHGceKr27AlrmpgPSU9-lRHDSjVStHLpSmRK-RR2RjE0dNvoRDoFVdoacZwz0wU4L0/s1600/RUSHBATTLE_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaqYhVvKIaYzq4pFLUi9eKuRL6g4sGsNGmUgpPTNJVsYOT5EeFpA7HcVGaiZ_7bBmorAMOWFh3PGfHGceKr27AlrmpgPSU9-lRHDSjVStHLpSmRK-RR2RjE0dNvoRDoFVdoacZwz0wU4L0/s1600/RUSHBATTLE_1.png" /></a></div><div class="separator" style="clear: both; text-align: center;">That goes twice and then it switches to A Minor like so: (just move up a string!)</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_eon_oCWQw7OKF96acURjWD1xzjd5FwLLlQ2j8SrciHEH2VSoALXERshwEyplY4C7p7vj-TgrttOVJDIOP1wYED0TUZZL7EyWEGpAOVpG3LtmIwHEJEmkHdVd_UIUI-4YK87fessDAqiI/s1600/RUSHBATTLE_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_eon_oCWQw7OKF96acURjWD1xzjd5FwLLlQ2j8SrciHEH2VSoALXERshwEyplY4C7p7vj-TgrttOVJDIOP1wYED0TUZZL7EyWEGpAOVpG3LtmIwHEJEmkHdVd_UIUI-4YK87fessDAqiI/s1600/RUSHBATTLE_2.png" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;">Then it goes into my favorite riff in the song, starts on a D:</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim_tE_tPqNDm3XdfGibpIjYEjRqmhY07TonHyn2kPWm_etnBU-_la6s5hb9Zt6mgZ1nJNflv1h07DzudDiJ-hqYwMv7It3bw-3zHqn3XvTGDITvNYQCitST0DWskGz9b39Xj01f4alQEIx/s1600/RUSHBATTLE_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim_tE_tPqNDm3XdfGibpIjYEjRqmhY07TonHyn2kPWm_etnBU-_la6s5hb9Zt6mgZ1nJNflv1h07DzudDiJ-hqYwMv7It3bw-3zHqn3XvTGDITvNYQCitST0DWskGz9b39Xj01f4alQEIx/s1600/RUSHBATTLE_3.png" /></a></div><div class="separator" style="clear: both; text-align: center;">This plays 3 times and then:</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3ICgrZ1Wf6AEHQWBPnSGw8sJOnHYp_9TOqPhYVlZu9NuA7JMgyMhpXNbZIsQucU8z0hs8Sr-mJIxGoeV27gdMU3kmfCjjV9FKDls3M-PDdVq99gcWAp3VAiqC0eOGwym0tqF716u1s14_/s1600/RUSHBATTLE_4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3ICgrZ1Wf6AEHQWBPnSGw8sJOnHYp_9TOqPhYVlZu9NuA7JMgyMhpXNbZIsQucU8z0hs8Sr-mJIxGoeV27gdMU3kmfCjjV9FKDls3M-PDdVq99gcWAp3VAiqC0eOGwym0tqF716u1s14_/s1600/RUSHBATTLE_4.png" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;">And then we just start the whole thing off of an E!</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSqr0M8pKe2JDf5v90NIufa5IoLimI498q43rkea-qNowcvcGYtVkTkcc6f5-zJV4QCx2L7cW0fQQYqQeaWrM2dcG073sDDCoLxstRlYWRq2wcTc9pPR2Lb-82cqmVzLl_xTFRFoXPBldE/s1600/RUSHBATTLE_5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSqr0M8pKe2JDf5v90NIufa5IoLimI498q43rkea-qNowcvcGYtVkTkcc6f5-zJV4QCx2L7cW0fQQYqQeaWrM2dcG073sDDCoLxstRlYWRq2wcTc9pPR2Lb-82cqmVzLl_xTFRFoXPBldE/s1600/RUSHBATTLE_5.png" /></a></div><div class="separator" style="clear: both; text-align: center;">This 3 times again, and then:</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_KCh3Nxe3HSs8OqIju9SFcmkenUhsYvA5O-yRgwPtezINmiKLYelwdhmFj89P2dWyYXCf2LZYalHjQbmFzsy4y7dDNQXjKgxkl9utsaxM0i3DoHKXGVSZboBJl1HLcFMQeERnB1hTs07E/s1600/RUSHBATTLE_6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_KCh3Nxe3HSs8OqIju9SFcmkenUhsYvA5O-yRgwPtezINmiKLYelwdhmFj89P2dWyYXCf2LZYalHjQbmFzsy4y7dDNQXjKgxkl9utsaxM0i3DoHKXGVSZboBJl1HLcFMQeERnB1hTs07E/s1600/RUSHBATTLE_6.png" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;">And those are the two basic riffs to the song!</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><br />
</div>Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com0tag:blogger.com,1999:blog-7582346522345149142.post-36115630828906511612011-04-19T04:48:00.000-07:002011-04-19T04:48:04.225-07:00Methods to the Madness - User Interface<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOOiXXy6ka49uh516_mhKAce5tSOvBZGHOmH5TOvZOXIZkU75CLr1gMGHjlgi8fL8BZW-ChL8wZ75GeLqIJTtW3p9GgKeBX_nm8F5GSaaLK_rr001wrNgrsr26dCy9THPXyUfSLZUcowKZ/s1600/ESSENCEMENU.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="278" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOOiXXy6ka49uh516_mhKAce5tSOvBZGHOmH5TOvZOXIZkU75CLr1gMGHjlgi8fL8BZW-ChL8wZ75GeLqIJTtW3p9GgKeBX_nm8F5GSaaLK_rr001wrNgrsr26dCy9THPXyUfSLZUcowKZ/s320/ESSENCEMENU.png" width="320" /></a></div>Part 2 of the "Methods to the Madness" series of posts will deal with User Interface. A good user interface is essential to any good gaming experience. It must be clear and concise to fit the purpose of the game. Of course the first thing you should do is decide if your game even needs one - sometimes the best UI is none at all! But when you do, everything should be clear and non-distracting.<br />
<div><br />
</div><div>Creating text in LBP is a bit of a chore. In Essence of Madness I created an entirely new curvy font set to replace the pixelated letters in Corridors. But how? </div><div><br />
</div><div>Hamster Tubes. Yes, Hamster tubes!</div><div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVEE0hlKT9pewygVshf0ONspvEzsldjWakfhHcFaLsIKd6_NzUAu6sDeJ61avhJtTQFGM1X3UjjMzASnhsX8prtT9V0XgnuU9ij0EzRJw2A5cCplJJUFYIV-PPcKhk80WutGg_9719aYGM/s1600/HAMSTERTUBE_E.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVEE0hlKT9pewygVshf0ONspvEzsldjWakfhHcFaLsIKd6_NzUAu6sDeJ61avhJtTQFGM1X3UjjMzASnhsX8prtT9V0XgnuU9ij0EzRJw2A5cCplJJUFYIV-PPcKhk80WutGg_9719aYGM/s320/HAMSTERTUBE_E.jpg" width="320" /></a></div><br />
</div><div>They align to the big grid perfectly, and I just shaped all my letters out of hamster tubes and then stenciled them out with cardboard - making for perfectly aligned curves. To do that just overlap the shape with any solid material and it will embed the letter. You can then subtract this stencil from another slab of material to create a character in any material you desire! Everyone has their own methods and there are plenty of fonts available in the community, but you know me - I like to do everything myself. :)</div><div><br />
</div><div>After text, the symbols and colors are very important. It's usually best to stick to a tight theme of colors within each user interface. You'll find in Essence I like to stick to shades of blue and silver to fit the cold depths of space motif, but use green and red for the health display.</div><div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikuFn2WH4ScpypVKrXtnRmQENXj3Er_1uva-u0zQlyKGrUNe-uDHkD1f4eiaqq3GbvT74oqM8Yzu2-G3GOcboIDrYwHYgqu9u_cAa1oAJDQiGRWvBDAAabqxi0aWqqqZHaXf1SW3jJIKP_/s1600/EKG.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikuFn2WH4ScpypVKrXtnRmQENXj3Er_1uva-u0zQlyKGrUNe-uDHkD1f4eiaqq3GbvT74oqM8Yzu2-G3GOcboIDrYwHYgqu9u_cAa1oAJDQiGRWvBDAAabqxi0aWqqqZHaXf1SW3jJIKP_/s320/EKG.jpg" width="320" /></a></div><br />
</div><div>In Corridors of Madness I used the game's Counter to give a visual cue for the health, but in Essence I felt I had to go a step beyond. The health display became an EKG.</div><div><br />
</div><div>To create the effect I used a series of timers set to "Start count down" hooked up to cross sections of an EKG line display. With these timers on a looping sequencer, it means it will just fade between cross sections giving the effect of the moving line. </div><div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP2GSQwmhsmNEV8ug5ODUzFGIfanGLdFA4z3xQtMdk8TsQ1-S3Kc6gpJPpeR5A45qmw3MLEtUplWHECeHfpagIcaWByOVPL6ddE9QEHDQHiZW90LcDc6PEJbpKZi82RQuOllkuUO6nn9Wg/s1600/SEQUENCER_EKG.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP2GSQwmhsmNEV8ug5ODUzFGIfanGLdFA4z3xQtMdk8TsQ1-S3Kc6gpJPpeR5A45qmw3MLEtUplWHECeHfpagIcaWByOVPL6ddE9QEHDQHiZW90LcDc6PEJbpKZi82RQuOllkuUO6nn9Wg/s320/SEQUENCER_EKG.jpg" width="320" /></a></div><br />
</div><div>Once the health drops beyond a certain threshold, I activate a different series of these to turn the line red and flash the word DANGER. The sequencer is also faster in this mode.</div><div><br />
</div><div> One key thing to keep in mind when designing UIs is that holographic material works by adding its color to what's behind it. That means if you put a black sticker on it, it will be invisble. This means you can create sprites by using the color black as a mask. All the cursor graphics use this in Essence. </div><div><br />
Another big element of a UI is being able to move through different gameplay and/or menu screen. I personally like to achieve this by using multiple controllinators and activating them on demand.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1-3d-z0wjxjHN3105cE3D05tItbFwRgaW2q0deYuQPS76nv7Klrdlv6zp3F1ZcRj4tVXsubHCaMXbzszldERP2AjtUTSP0RcjndDYmhxoZaEOq4M6kkA27Ldzwcxc4FP_nhO4VCsgX5-K/s1600/MICROCHI_CONTROL.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1-3d-z0wjxjHN3105cE3D05tItbFwRgaW2q0deYuQPS76nv7Klrdlv6zp3F1ZcRj4tVXsubHCaMXbzszldERP2AjtUTSP0RcjndDYmhxoZaEOq4M6kkA27Ldzwcxc4FP_nhO4VCsgX5-K/s320/MICROCHI_CONTROL.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: left;">If you put a wireless controllinator on a microchip and then deactivate the chip the controllinator will not respond to input. So you can use to separate all your submenus and gameplay types instead of using millions of AND gates! I just wire the outputs of a selector into these.</div><br />
I hope this helps give people some ideas for constructing the UIs in their LBP2 games!</div>Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com1tag:blogger.com,1999:blog-7582346522345149142.post-22700871724183927282011-04-15T13:14:00.000-07:002011-04-15T13:14:37.111-07:00Methods to the Madness - The Music<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEher6DX2nYe6x5-TKWQVpD8qzOLgkqb_K60sxQRoIej86TlxT3oBZUKv-ZsvJPqL_XGETryQYt7e7gC_NbmQ7BoXphwuK-UxS2CZIHYeE8lkkgLkc97uLyqmUxh7Shl4EXLsMyZ7CvZWZhS/s1600/fooftunes.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEher6DX2nYe6x5-TKWQVpD8qzOLgkqb_K60sxQRoIej86TlxT3oBZUKv-ZsvJPqL_XGETryQYt7e7gC_NbmQ7BoXphwuK-UxS2CZIHYeE8lkkgLkc97uLyqmUxh7Shl4EXLsMyZ7CvZWZhS/s1600/fooftunes.png" /></a></div>Welcome to the first part of the "Methods to the Madness" series - detailing every step along my journey of creating both "Madness" Levels. The first thing I created for both "Madness" levels was the soundtrack. I have been playing and writing music for 10 years now. You can check out a collection of all my retail songs in this level - which will continually be updated - <a href="http://lbp.me/v/z0n-kq">http://lbp.me/v/z0n-kq</a>.<br />
<br />
I know a fair amount of music theory and there are some approaches I take in particular to writing music. It's best to go into this post with a rudimentary understanding of music theory.<br />
<br />
First off, I think in big terms when first approaching a composition. Does the song have an ambient feel? Kind of sad? Does it have a driving rhythm? <br />
<br />
Rhythm is the most important part of music. Most of the time I will lay out the drum track first since it gives the song life. Whether the drums are fast, slow, have a bounce... whether the drum hits are soft or hard, are all vital to the feel of a song. The music sequencer in the game fits well to even rhythms. Every 4 spaces on the piano roll is a beat, so if you're not sure what to do it's a safe bet to just start with a bass drum on each beat. Then shape the rhythm from there. Maybe you want to stress the backbeat? That's very common and I love doing that. I always think of songs in 4/4 time in the music sequencer, that means the beats count 1 - 2 - 3 - 4. So you could stress the backbeat by putting a snare on every 2 and 4.<br />
<br />
The next most important part after drums is the accompaniment or the rhythm section. These would be the backing arpeggios, chords, and/or sounds that go behind the melody. Often in my "space" songs I will just use simple triad based arpeggios as backing. One of the trickiest things in writing chord progressions is leading the voices properly. Chord triads form the same chord as long as the notes are the same - it doesn't matter what order they are in. For chord progressions to sound most melodic, you want each note to move the least amount it has to and keep as many common tones as you can the same.<br />
<br />
For example, say we want to go from C Major to A minor. If we already have a C Major down, C - E - G (In any order), then we need to turn that into an A minor (A - C - E in any order). C and E are common to both, so all we need to do is raise our G to become an A. It is possible to copy and paste the notes and move them downwards until we land on the A to create A minor, but I guarantee short movement gives the best results.<br />
<br />
After I have my feel to the song in place, I lay down the melody. My melodies are often improvised on guitar while the accompaniment plays. The mood I'm going for has the biggest impact on how the melody goes. If I'm going for something space related, it's a pretty safe bet to stick to wide intervals for that "floaty" feel. I use a lot of min9 and min11 arpeggios. For example, the glockenspiel in the backing of "Lonely Galaxy" is just constantly jamming around a Bmin11 arpeggio. <br />
<br />
One of the beauties of synthesized music is we can write things that are physically impossible to play otherwise. I have many runs cross over octaves quickly to give a reverb like ambience.<br />
<br />
Beyond pure songwriting, the music sequencer has plenty of nuances to get used to. First off, the audio effects are VERY powerful. Playing with reverb and delay can really help give a full sound, but don't overuse it! Super saturated delay is no substitute for natural sounds and will only make the sound muddy!<br />
<br />
There is also timbre. Timbre is the natural sound of an instrument, aside from dynamics from the player. Each instrument can vary the timbre quite a lot so use the right stick left/right to experiment with sounds. Sometimes I'll mix some timbres within a chord to give a very full dynamic range. <br />
<br />
One of the coolest features is the ability to bend pitch. If you drag the end of a note up or down you'll actually be blending one note into another. You can also hit R1/L1 on this bend note to scale it more. This way you can bend to a note and sustain, or even bend - sustain - and bend again!.<br />
<br />
The note ends can be independently scaled with the right stick for different volumes or timbres - this means you can gradually fade in and out, or even distort the timbre of a sustained note! There are quite a bunch of possibilities that I am only starting to touch on - I will make much more music in the future, I guarantee!<br />
<br />
Stay tuned for the next installment - User Interfaces!Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com1tag:blogger.com,1999:blog-7582346522345149142.post-85110415003959635072011-03-30T15:13:00.000-07:002011-03-30T15:14:18.097-07:00Essence of Madness<div class="separator" style="clear: both; text-align: center;"><a href="http://i7.lbp.me/img/bl/fb7d24979756d9c92105e908160fe236484bc497.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://i7.lbp.me/img/bl/fb7d24979756d9c92105e908160fe236484bc497.png" /></a></div><br />
My latest LBP2 level has been published, and it includes 6 original music tracks! Plus a few short interludes . :) All available as prizes! This has a much bigger focus on the graphic adventure gameplay. Check it out on LBP.me here : <a href="http://lbp.me/v/zbdvtk">http://lbp.me/v/zbdvtk</a> This is called "Essence of Madness" and is a direct sequel to Corridors of Madness.<br />
<br />
I will publish a post detailing just about everything that went into this within the next week - "Method to the Madness"... stay tuned. :)Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com0tag:blogger.com,1999:blog-7582346522345149142.post-50440824540642733052011-02-20T04:38:00.000-08:002011-02-20T04:38:42.887-08:00The sequel to Corridors of Madness - and more!<div class="separator" style="clear: both; text-align: center;"><a href="http://ia.lbp.me/img/bl/91ac53ddd17ab90d29332824b1812f05f9faadd9.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://ia.lbp.me/img/bl/91ac53ddd17ab90d29332824b1812f05f9faadd9.png" /></a></div>To my LBP fans - I'm sure you've at least heard of my LBP2 level <a href="http://lbp.me/v/xbgkk4">Corridors of Madness (LBP.me link)</a><br />
<br />
Well within the next week or two I hope to have the sequel published! It will be bigger and feature more genre-bending action.<br />
<br />
For a small preview, check out one of the songs from the new soundtrack: <a href="http://www.youtube.com/watch?v=detpDCQ03pw">Insomnia</a><br />
<br />
I write all the music myself that I use in my levels.<br />
<br />
This sequel will follow the story of our brave LBP federation captain as you drift into space following his escape from his ship when it was overrun by aliens. Tumbling through space, both physical and metaphysical, you will encounter a strange world with many challenges for survival.<br />
<br />
This will feature:<br />
<br />
<ul><li>Enhanced pseudo-3D rendering engine</li>
<li>All original soundtrack</li>
<li>Multiple Endings</li>
<li>Multiple modes of gameplay</li>
</ul>Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com1tag:blogger.com,1999:blog-7582346522345149142.post-52771170136163353492011-02-20T04:28:00.000-08:002011-02-20T04:28:43.210-08:00The woes of the computerlessI'm sorry I haven't been updating my blog or youtube channel lately, aside from just very hard times in general, I've been having lots of trouble repairing my computer - it looks like I'm going to have to pretty much replace it. Lesson?<br />
<br />
Make sure the cables you use to interface hardware with your computer are good quality and in good condition - its possible to short circuit your motherboard otherwise. Trust me, I'd know. ;)Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com0tag:blogger.com,1999:blog-7582346522345149142.post-3501592529141450782011-02-02T09:48:00.000-08:002011-02-02T09:48:08.701-08:00Broken Computers, world records, and LBP2I haven't been so active lately since my computer died. :( I've also been snowed in constantly so couldn't drive it to the shop for repairs, but rest assured, I will be updating regularly again in no time.<div><br />
</div><div>If anyone was watching or attending the IGN gaming world record event at the sony styles store, you might have seen me there! IT was great meeting everyone there and awesome witnessing the records being shattered.</div><div><br />
</div><div>I'm also almost done with my first entry into retail LittleBigPlanet 2 ... it's going to be special. :)</div>Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com0tag:blogger.com,1999:blog-7582346522345149142.post-1620328107374784332011-01-15T11:39:00.000-08:002011-01-15T11:39:35.460-08:00So you want to be a vigilante?<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglVPQRGv5rXMsSUVdjkgD-3SGOweZFHIw5qnD132YyoPw1w0BFpuz2yi1jXFM7TDkdQgeyJmiwwCGS-2x_u1khfcLBPrxpSvAS7GUIPZxXASgrGveDISFtcB22xAuzeOwDX95Su7MkeJMI/s1600/mask.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglVPQRGv5rXMsSUVdjkgD-3SGOweZFHIw5qnD132YyoPw1w0BFpuz2yi1jXFM7TDkdQgeyJmiwwCGS-2x_u1khfcLBPrxpSvAS7GUIPZxXASgrGveDISFtcB22xAuzeOwDX95Su7MkeJMI/s1600/mask.jpg" /></a></div>If you want to fight bad guys sign up for the local police department. Then you actually get paid and won't be arrested.<br />
<br />
That out of the way... <br />
<b><u><br />
DISCLAIMER: This is meant for educational purposes only and the management does not accept responsibility for any actions taken with this information.</u></b><br />
<br />
The problem with most bullet-proof vests is they will only stop handgun rounds. They won't stop knives, arrows, or any rifle rounds. I guess that's better than nothing, but still something to consider. They can be ordered online depending on where you live.<br />
<u><b><br />
You need to work out. A lot.</b></u><br />
There's a ton of running and jumping involved, and fighting. Make sure you're in shape and can hold your own in a brawl.<br />
<br />
The most important part of your crime-fighting outfit is the SHOES. Most people focus on the aesthetics like the mask or the cape, but no, the SHOES are the most important. Think of all the running you'll do! You need to make sure your shoes and pants are comfortable and form fitting enough that you can comfortably run and jump over obstacles. Also speaking of capes, capes are actually counterproductive because it has a very high chance to snag on something, and not to mention gives the enemy something very easy to grab onto. Not good.<br />
<br />
If you are going to wear a mask, make sure it's something that doesn't obscure your vision in any way. Soft rubber-like masks are probably best, as plastic might splinter and cause injuries to your face and eyes if someone hits you in the face. Again, avoid things that stick out. I am very sad that I had to omit my lengthy bunny ears from my costume, but otherwise it'd make it too easy for a bad guy to grapple me down.<br />
<br />
The problem with being a vigilante is that you don't have the same legal freedoms a cop does; that means you need to restrict your arsenal to the least lethal means to avoid legal complications. It's a very unsettling thought to imagine people shooting you and you not being able to shoot back, but there are still options:<br />
<ul><li>Short and Long range stun guns/tasers - this will be one of your best friends. The incapacitation lasts only as long as the device is on, so use it and quickly subdue the criminal. I advise using rope or handcuffs, the police will handle the rest.</li>
<li>Tranquilizer guns - An effect that lasts longer than a taser, however since it is harpooning a syringe at your target, you need to be very careful where you aim. Always aim center mass/torso, the sedative will quickly find its way through the blood stream.</li>
<li>"Tear Gas" - Useful as a distraction for either your entrance or your getaway</li>
</ul><br />
Do NOT use any blunt or sharp weapons such as: Baseball bats, knives, swords, chainsaws, sledgehammers, etc. These all inflict trauma that is potentially lethal, which would look bad for you legally. Plus they're cumbersome and leave a mess. <br />
<br />
Do not use ANY firearms - even if it's loaded with beanbag or rubber bullets, within 20-50 yards or so, which will be your most common range of engagement vs the badguys, they still carry enough kinetic force to be lethal.<br />
<br />
Tasers may not be legal everywhere, so you may have to improvise on finding one. <br />
<br />
<b><u>Make sure you have good health and personal item insurance.</u></b><br />
<br />
Chances are, you'll get your hiney kicked now and then, maybe your car blown up, your house burned down, etc. Get it all insured! Shop around for the best rates, remember, don't reveal that you are a vigilante! Your monthly payments will skyrocket.Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com0tag:blogger.com,1999:blog-7582346522345149142.post-69097693669775685552011-01-11T15:35:00.000-08:002011-01-11T15:35:55.010-08:00LittleBigPlanet 2 Beta servers are now offline. Bring on retail!<div class="separator" style="clear: both; text-align: center;"><a href="http://playstationlifestyle.net/wp-content/uploads/2010/05/little-big-planet-2-boxart.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="http://playstationlifestyle.net/wp-content/uploads/2010/05/little-big-planet-2-boxart.jpg" width="173" /></a></div>Well, that's it. That was pretty long for a pre-release, server stress test beta! So what did I do in the last hour? ... Well... http://www.youtube.com/watch?v=uoLshULoaEM<br />
<br />
I've done my share to push the beta and squash bugs and I must say, I'm royally impressed with the game. The tools have so much more potential over the previous game. The first game warmed my heart instantly with its playful approach. It was very child-like in its approach and I felt some of this would be lost in LittleBigPlanet 2. Not at all!<br />
<br />
Although the new logic tools imply a sense of mechanical cerebrality, that couldn't be further from the truth. It is rare that a sequal absolutely improves on an original, especially when the original is something as unique as LittleBigPlanet, but this seems like it will be an astounding success.<br />
<br />
I have been posting plenty of things on my blog about the game and will continue to, as well as discuss what I plan to do in retail.<br />
<br />
I WILL make a full fledged version of my dungeon crawler, "Corridors of Madness" ... It will have better and more varied graphics, as well as much more varied gameplay.<br />
<br />
I will continue the top down shooting series with improvements, since I've learned much since I made them.<br />
<br />
Bunnies will make a return but in a way you might not expect. :)<br />
<br />
The graphics are also greatly improved, the lighting engine is very welcome and easy on the eyes. I think my favorite features are the new logic tools and the holographic material. That of course includes the impact sensor.<br />
<br />
Impact sensor + invisible hologram = super win!<br />
<br />
I also promise a very in depth tutorial on creating the dungeon crawler after I create it in release. I promise - the techniques have been perfected and I'm saving it as a treat for you all. :)Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com0tag:blogger.com,1999:blog-7582346522345149142.post-22020264483031414832011-01-05T18:17:00.000-08:002011-01-05T18:17:51.305-08:00More 3D android stuff - animated modelsOk I have barely been home in the past couple of weeks so couldn't work on this little android 3D engine side project much, but here's an example of my animation class so far:<br />
<br />
<a href="http://www.youtube.com/watch?v=MTh6nbvCcZg">http://www.youtube.com/watch?v=MTh6nbvCcZg</a><br />
<br />
Uses Hierarchy type animation, as opposed to the skeletal animation in the PC 3D stuff I've been doing. Imagine each section of the model being devoted to one and only one bone instead of 4 bone weights per vertex, I figure this is the lowest cost on the hardware since I'm not sure how much I can push the android. The next step I guess would be to either use softskinning via direct vertex pos interpolation between keyframes, or bones with 1 or 2 weights per vertex.<br />
<br />
This is all done with OpenGL in Java.<br />
<br />
Each little section of the model can also have a unique material property which I guess I'll have to showcase next, but I need to get my hands on a real android so I can take video that isn't so choppy. Emulation sucks.Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com0tag:blogger.com,1999:blog-7582346522345149142.post-86739970035514473402010-12-17T21:16:00.000-08:002010-12-17T21:16:06.703-08:00Here I come, Android - Trying out 3D on the android<a href="http://www.youtube.com/watch?v=LuMMCLcDVIA"></a>Remember my "Foof Engine" for the PC? My ongoing 3D engine project which was seemingly surrounded in ridiculous characters? :) It was truly a prototype for bigger and better things, and I'm still not ready to showcase what's been going on with that.<br />
<br />
BUT! Today I figured I should try my hand on 3D on the Android! I've been working on some Android apps lately (again, will showcase those when I'm ready) and figured it's time to tackle 3D. First vid here:<br />
<br />
<a href="http://www.youtube.com/watch?v=LuMMCLcDVIA">http://www.youtube.com/watch?v=LuMMCLcDVIA</a><br />
<br />
Not bad for a day's work I'd say. This was all from scratch and most of the work was spent on writing the mesh class and the math. I got a little spoiled by the D3DX and XNA math libraries. It's been a while since I touched OpenGL but it hasn't changed a bit, anyone familiar with it at all should feel at home with the implementation on the Android.<br />
<br />
I rolled a custom model format based on the one I use in the Foof Engine tech demos, but watered down tremendously - no bone weights, no support for normal maps, etc. I think I'll use a simple hierarchy based animation system in favor of more processor intense ones like vertex tweening or bones.<br />
<br />
I put all my models and textures into the /res/assets/ folder, this is where you should put all your raw data that you don't want the IDE to give built in ID codes to, so you can access them by name. <br />
<br />
Textures in the sample were borrowed from CGTextures.com, and the unicorns are actually a snapshot of ones I made in LittleBigPlanet 2. The mushrooms I drew, aren't they pretty?<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj52_0vsBD9iUoutALtV5_GwtgMUZKa73FSWeygL6QDbwtuZCf4TDm6m-RNdUGKnxjgfRI9Yi1G029_kshfBopcIvD0XIcrONxtnYYcT82TIJIKiVHp3qXN6vhBOUMsSl-LMg2AcYMG3UNn/s1600/shroom1.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj52_0vsBD9iUoutALtV5_GwtgMUZKa73FSWeygL6QDbwtuZCf4TDm6m-RNdUGKnxjgfRI9Yi1G029_kshfBopcIvD0XIcrONxtnYYcT82TIJIKiVHp3qXN6vhBOUMsSl-LMg2AcYMG3UNn/s1600/shroom1.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Mushroom Mushroom</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td></tr>
</tbody></table> But all that aside, the render function right now just consists of clearing the screen and then going through a list of meshes and rendering them. I'm going to create a system of hashes to catalog the textures and meshes like I do in Foof Engine. <br />
<br />
I think I can make something cool out of this, so stay tuned. I have some ideas and this, as usual, is just a prototype for bigger and better things.Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com0tag:blogger.com,1999:blog-7582346522345149142.post-35219666754531152502010-12-13T11:31:00.000-08:002010-12-13T11:32:08.339-08:00Unicorns like to danceUm... so there's a bug in 1.04 of the beta that prevents me from editing music online. Poop. So I loaded an empty level offline to see if I still could edit - and I could! So then one thing led to another...<br />
<br />
<a href="http://www.youtube.com/watch?v=nxm-p_MZoJU">http://www.youtube.com/watch?v=nxm-p_MZoJU</a><br />
<br />
The unicorns each have a recorded animation to just move their arms around, and their legs and movement is handled by movers, and they also have anti-gravity. So it just keeps emitting them to form the congo line sort of thing.Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com0tag:blogger.com,1999:blog-7582346522345149142.post-70019954342342874462010-12-11T13:14:00.000-08:002010-12-14T07:14:11.011-08:00Unicorn Nightmare - More LBP2 Ray Caster Fun<a href="http://foofles.blogspot.com/2010/11/indepth-look-at-ray-casting-theory-and.html"><br />
</a><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi538mvGxDZaL8aSG95sjIsCuP7MQBN2tt2BS-gvuuPzYxfboMV8sikXuhd7rlyzEOkNsS2sFbTdg81OR2hpmZNUiDZF7aPA0JaVNDNvorOnOYi5ysgW0k6MQac8qch3R1rxAacYA8aZgup/s1600/UNICORNNIGHTMARE9.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi538mvGxDZaL8aSG95sjIsCuP7MQBN2tt2BS-gvuuPzYxfboMV8sikXuhd7rlyzEOkNsS2sFbTdg81OR2hpmZNUiDZF7aPA0JaVNDNvorOnOYi5ysgW0k6MQac8qch3R1rxAacYA8aZgup/s320/UNICORNNIGHTMARE9.jpg" width="320" /></a></div> So yesterday I worked on this wonder for the most of the day. <a href="http://www.youtube.com/watch?v=VthaIYW3OVA">http://www.youtube.com/watch?v=VthaIYW3OVA</a><br />
<br />
This is NOT using the layer glitch. Although I've had plenty of ideas for using the layer glitch with the ray casting method. Raphael has published a level that uses my ray casting idea combined with his knowledge of emitting into glitched layers (Sackenstein 3D) and I will detail the key to both methods. Please see my other blog post as well: <a href="http://foofles.blogspot.com/2010/11/indepth-look-at-ray-casting-theory-and.html">http://foofles.blogspot.com/2010/11/indepth-look-at-ray-casting-theory-and.html</a><br />
<br />
First off, my ray casters, all of them, are entirely <i>pseudo-3D</i>. That means the perspective effect is just an illusion and is provided by a series of rays hitting walls at incrementing angles. It looks something like this:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjozu7nCR3yxWVsAbhFkzHvXae8beENCukIs6UodpxM_K-StjO0eEp8Rda6rV2vcy0W_QOHLYeP_jOUFKDos2fbiA7u3DmyYvKNJfK8cDv3sAuucKWGNmAq_ua-epWJil8hXnGB__kW0VVg/s1600/PERSPECTIVE_RAYS.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjozu7nCR3yxWVsAbhFkzHvXae8beENCukIs6UodpxM_K-StjO0eEp8Rda6rV2vcy0W_QOHLYeP_jOUFKDos2fbiA7u3DmyYvKNJfK8cDv3sAuucKWGNmAq_ua-epWJil8hXnGB__kW0VVg/s1600/PERSPECTIVE_RAYS.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 1: Diagram of "shish kebab" or "Spider Web" Perspective Projection of rays. </td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td></tr>
</tbody></table>The calculations recursively travel down each line in the web, stopping when one piece intersects a wall. Due to the arc-like shape, we achieve a perspective effect in the same manner as Wolfenstein 3D or Ken's Labyrinth. This translates well to my methods of treating the rendering side of the equation as plotting 2D pixels. Thus, this method is best combined with either thin hologram or solid material in layers combined with a <i>fully flat camera view</i>. Note a fully flat camera view can still be mixed with depth of field or depth attenuation via hologram brightness or light by layer. If using holographic material or not using the layer glitch,<i> microchip based early cancellation is necessary. This can be both a blessing or a curse. </i>On one hand, it's good to be able to cut off all extraneous calculations in the chain. On another, recursion is slow. You must use a workaround to make sure the microchip recursion does not lag - such as wiring a "dummy" chain of inputs and outputs aside from the "NOT -> Activate" chain. The full implementation of this style of recursive microchip logic is detailed here: <a href="http://foofles.blogspot.com/2010/11/indepth-look-at-ray-casting-theory-and.html">http://foofles.blogspot.com/2010/11/indepth-look-at-ray-casting-theory-and.html</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHyUWur3BFOysBWROmkf5oYiVUf2PK4PLwWTKdsRiw7PKfIW7duWvJ756Mp4_xCeNB7uBZwNsBVKPpG1YBWbnU7r64JBHMvvKkzBwKcVj9XuSMx3_1Lro105iPkxTA0QFpI20adBgduEuz/s1600/ADVANTAGES2.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="40" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHyUWur3BFOysBWROmkf5oYiVUf2PK4PLwWTKdsRiw7PKfIW7duWvJ756Mp4_xCeNB7uBZwNsBVKPpG1YBWbnU7r64JBHMvvKkzBwKcVj9XuSMx3_1Lro105iPkxTA0QFpI20adBgduEuz/s200/ADVANTAGES2.jpg" width="200" /></a></div><br />
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" /></a> <br />
<i><b>Does not require knowledge/use of the 3D layer glitch.</b></i><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" /></a></div> Full control over FOV angle<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" /></a> <br />
Naturally suited to 2D pixel mapping <i>which is easier on the eyes.</i><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" /></a><br />
Can be used with holographic OR solid material<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" /></a> Can be mixed with the glitched layers to provide higher res depth testing for game sprites.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjioY_T3k-yT92csWFWXIl4pVPZMFjLq7TbP15KUYhIYAxtvp3hK08yd5cPAK87foiLd17eOqRyUhhFS-t0PcWeMEBEQFJsLGMd5pOWIFfcKDKbcKtw8ET_MWxYjOfB5eisz9UL8GxTFB1N/s1600/DISADVANTAGES.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="40" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjioY_T3k-yT92csWFWXIl4pVPZMFjLq7TbP15KUYhIYAxtvp3hK08yd5cPAK87foiLd17eOqRyUhhFS-t0PcWeMEBEQFJsLGMd5pOWIFfcKDKbcKtw8ET_MWxYjOfB5eisz9UL8GxTFB1N/s200/DISADVANTAGES.jpg" width="200" /></a></div><br />
<br />
<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a></div>Microchip based recursion has exponential latency - there will be bigger delays the further away on the chain you are. <i>Unless you use workarounds</i>.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a> Takes time and effort to get accurate angle increments in the rays.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a> Fixed camera height and orientation. <br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a> Works best with flat camera view. Texture mapping per distance must be simulated.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><br />
</a> <br />
<br />
Sackenstein 3D is performed slightly differently. Perspective effect is slightly more 3D, it uses the glitched layers to provide a sense of depth and perspective. Therefore mixing it with an artificial perspective as in my arc based ray routine is unnecessary and may lead to strange results. Rather, an orthogonal projection is probably better.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6ZtpK3R0UG2Qhe619rANrJzMOeiaFLCoWeC9T7P2cfY3qkNEr48NZJUjp9-gxYLmn7nngU9fORVBNCJmIfL3bEG3aYi3HZ9_p_C4VfndvITwR_6glzFEHASrJh05Pz_dF-jzvVMs5wbK5/s1600/ORTHOGONAL_RAYS.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6ZtpK3R0UG2Qhe619rANrJzMOeiaFLCoWeC9T7P2cfY3qkNEr48NZJUjp9-gxYLmn7nngU9fORVBNCJmIfL3bEG3aYi3HZ9_p_C4VfndvITwR_6glzFEHASrJh05Pz_dF-jzvVMs5wbK5/s1600/ORTHOGONAL_RAYS.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 2: Diagram of orthogonal "net" type setup. Recursion is not necessary. </td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td></tr>
</tbody></table>Rather than simulate perspective with differently scaled slices of material, it uses the game's 3D graphics to do it with the glitched layers. In Sackenstein 3D and similar approaches, all the material is solid and emitted within a grid like figure 2 - imagine the Y axis of this grid to be further away in layers, and the X axis to be left and right. <br />
<br />
Recursion is unnecessary - We are not trying to render a true orthogonal view, we don't want the rays to function in columns or that is the effect we will have. Rather, all cells in this grid have an impact sensor - just like the shish kebob method. Let's say it's set to read tag "WALL". Then all that happens is each cell is paired up with an emitter in the world, and when a cell impacts with wall the emitter is turned on. (Emit with 0.1 lifespan constantly to turn "on" solid material). The slices of material each take up a thick layer.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHyUWur3BFOysBWROmkf5oYiVUf2PK4PLwWTKdsRiw7PKfIW7duWvJ756Mp4_xCeNB7uBZwNsBVKPpG1YBWbnU7r64JBHMvvKkzBwKcVj9XuSMx3_1Lro105iPkxTA0QFpI20adBgduEuz/s1600/ADVANTAGES2.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="40" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHyUWur3BFOysBWROmkf5oYiVUf2PK4PLwWTKdsRiw7PKfIW7duWvJ756Mp4_xCeNB7uBZwNsBVKPpG1YBWbnU7r64JBHMvvKkzBwKcVj9XuSMx3_1Lro105iPkxTA0QFpI20adBgduEuz/s200/ADVANTAGES2.jpg" width="200" /></a><br />
<br />
<br />
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHyUWur3BFOysBWROmkf5oYiVUf2PK4PLwWTKdsRiw7PKfIW7duWvJ756Mp4_xCeNB7uBZwNsBVKPpG1YBWbnU7r64JBHMvvKkzBwKcVj9XuSMx3_1Lro105iPkxTA0QFpI20adBgduEuz/s1600/ADVANTAGES2.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><br />
</a><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" /> Since it is 3D you can perform effects like the camera rolling or moving up and down.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHyUWur3BFOysBWROmkf5oYiVUf2PK4PLwWTKdsRiw7PKfIW7duWvJ756Mp4_xCeNB7uBZwNsBVKPpG1YBWbnU7r64JBHMvvKkzBwKcVj9XuSMx3_1Lro105iPkxTA0QFpI20adBgduEuz/s1600/ADVANTAGES2.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><br />
</a><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" /> Texture mapping for distance is handled by game engine.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHyUWur3BFOysBWROmkf5oYiVUf2PK4PLwWTKdsRiw7PKfIW7duWvJ756Mp4_xCeNB7uBZwNsBVKPpG1YBWbnU7r64JBHMvvKkzBwKcVj9XuSMx3_1Lro105iPkxTA0QFpI20adBgduEuz/s1600/ADVANTAGES2.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><br />
</a><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" />Naturally clips against sprites well - put sprites in thin layer<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHyUWur3BFOysBWROmkf5oYiVUf2PK4PLwWTKdsRiw7PKfIW7duWvJ756Mp4_xCeNB7uBZwNsBVKPpG1YBWbnU7r64JBHMvvKkzBwKcVj9XuSMx3_1Lro105iPkxTA0QFpI20adBgduEuz/s1600/ADVANTAGES2.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><br />
</a><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" />The ray casting portion is extremely simple to setup. <br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a><br />
<br />
<b><i>Requires knowledge/use of 3D layer glitch. </i></b><br />
<b><i><br />
</i></b><br />
<i></i><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a>Wall Slices are solid blocks with fixed orientation relative to the camera. This makes for a visual phenomena that is very annoying to look at and <i>confuses and give headaches easily.</i><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a>Lack of early cancellation means all impact sensors are being calculated constantly.<br />
<br />
<br />
Both have their strong points and weak points. Also, with character sprites, in Unicorn Nightmare I use holographic images for them - this leads to translucency and duplicate ray hits. Using layer glitch in <b>either</b> method will allow you to use a solid material for sprites - meaning that one cannot emit into the same space as the other, minimizing the ghosting effect.<br />
<br />
Both however share one fatal flaw: too many impact sensors in one place will cause them all to stop working.<br />
<br />
This ray caster concept I've started last month has really gone to town. I'm very glad I brought this idea to the community but it is beginning to reach its technical limits - for all simulated 3D, from now on I will use the 90 degree dungeon crawler style variant of my ray caster - stay tuned for full feature on it this weekend.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><br />
</a><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHyUWur3BFOysBWROmkf5oYiVUf2PK4PLwWTKdsRiw7PKfIW7duWvJ756Mp4_xCeNB7uBZwNsBVKPpG1YBWbnU7r64JBHMvvKkzBwKcVj9XuSMx3_1Lro105iPkxTA0QFpI20adBgduEuz/s1600/ADVANTAGES2.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><br />
</a>Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com0tag:blogger.com,1999:blog-7582346522345149142.post-37016574448427196172010-12-05T08:29:00.000-08:002010-12-07T14:48:05.845-08:00Beaten to the punch, eep!Anyone reading this blog or watching my youtube lately probably knows about how much time I've been putting into my ray casting techniques for the 360 degree raycaster and the dungeon crawler model, my attempts for full 3D with no layer glitch.<br />
<br />
A couple weeks ago I was having a conversation with someone, discussing the limitations - namely clipping sprites against walls. Then it hit me - use the game's depth buffer! I might have to dabble in the layer glitch after all, but I decided to make it a surprise for the community.<br />
<br />
But I was beaten to the punch! Checkout Sackenstein 3D by Raphael: <a href="http://www.youtube.com/watch?v=34S7h0k5oIY&feature=player_embedded">http://www.youtube.com/watch?v=34S7h0k5oIY&feature=player_embedded</a><br />
<br />
That's ok, at least I got to see what it'd look like in motion and it looks like the resolution can't be too great :( I think this ray casting idea is starting to reach its functional limitations.<br />
<br />
Good job Raphael!Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com2tag:blogger.com,1999:blog-7582346522345149142.post-86999336913683114522010-11-27T18:28:00.000-08:002010-12-14T07:09:41.850-08:00An indepth look at ray casting theory and how I've applied it to LittleBigPlanet 2<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div style="text-align: justify;">Full explanation of various methods and theories on implementing a ray casting renderer in LittleBigPlanet 2.</div><div style="text-align: justify;">(If you have the beta you can run the samples here: <a href="http://beta.lbp.me/v/b78w">3D Raycaster Tech Demo </a>, <a href="http://beta.lbp.me/v/b79x">3D Raycaster top down/concept view</a></div><div style="text-align: justify;"><b>This assumes an intermediate understanding of the tools in LittleBigPlanet 2</b></div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;"><u><i>Contents:</i></u></div><div style="text-align: justify;"><ol><li><i>Introduction</i></li>
<li><i>Preparing Solid Color Wall Slices</i></li>
<li> <i>Creating the Rays</i></li>
<li><i>Creating The Player Chassis</i></li>
<li><i>Putting It All Together!</i></li>
<li><i>Different Colors And Textures</i></li>
<li><i>Backgrounds, Floors, Ceilings</i></li>
<li><i>Character and Object Sprites... are a problem.</i></li>
<li><i>Conclusions </i><i></i></li>
</ol></div><div class="separator" style="clear: both; text-align: center;"><i>Part 1: Introduction </i></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;">Have you ever wondered how games like Wolfenstein 3D or Ken's Labyrinth achieved their 3D effects? The genius is in the simplicity. They utilize a technique called ray casting, and I decided it'd be interesting to try to get this into LittleBigPlanet 2, and here I will detail all my implementations, theories, and observations of the process.</div><br />
First off: Imagine the screen as a grid of columns and rows. for example in a resolution of 320 x 280, we have 320 columns to represent the width and 280 rows to represent the height. Ray casting in Wolfenstein 3D is achieved by giving each column of the width its own ray, and testing this ray against a grid of 2D shapes.<br />
<br />
For a 3D-like effect, the engine assumes each ray has an origin at the player's eye. It then gives each ray an angular offset to achieve a desired field of view and gives us the perspective effect. Think back to art class, lines vanishing into the distance. <br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-vu9_tYPEqywMJaHtPJHYbtVuAHhJVLAQE7YoPV3MvaNlBOEkWTaI3rOg_SdT3MU3zYtCnVEE91e-r3ZwrfCXhenmqZcyho15OPqGYk0NBS0UOI0QWNavkCA-wRVTams_thCmqeCTUWYX/s1600/PERSPECTIVE1.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-vu9_tYPEqywMJaHtPJHYbtVuAHhJVLAQE7YoPV3MvaNlBOEkWTaI3rOg_SdT3MU3zYtCnVEE91e-r3ZwrfCXhenmqZcyho15OPqGYk0NBS0UOI0QWNavkCA-wRVTams_thCmqeCTUWYX/s320/PERSPECTIVE1.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 1: Example of a 3D-Like effect by simulating perspective with a vanishing point.</td><td class="tr-caption" style="text-align: center;"></td><td class="tr-caption" style="text-align: center;"></td><td class="tr-caption" style="text-align: center;"></td><td class="tr-caption" style="text-align: center;"></td></tr>
</tbody></table><br />
You may notice something in the above image: Things further away appear to get smaller. This is what simple Ray Casting renderers exploit.<br />
<br />
There is a reason Ray Casters like in Wolfenstein 3D and even up to more advanced like the Build engine (Duke Nukem 3D) are called "Pseudo 3D": The routine is only calculated in 2 dimensional space. In the case of Wolfenstein 3D, it is simplified by using a uniform grid, with each cell being able to hold a wall.<br />
<br />
We will impose and exploit three very important limitations: The player's eye never moves up or down, the camera cannot roll side to side (eg. barrel roll), and walls will always go from floor to ceiling. This means that the horizon line / vanishing point will be directly in the center of the screen. Renderers like in Wolfenstein 3D operate column by column as mentioned. As each ray is cast from the eye, it eventually intersects a wall and to simulate perspective we simply scale the wall texture vertically; the further the ray to wall intersection is from the wall, the shorter the wall slice will appear, and simply center the slice vertically within the column. When you have a whole series of these lined up side by side, you get your perspective illusion. This is the "3D" effect that we see. <i>Important note: </i>There is a slight distortion in the perspective due to the fact that we're simulating the FOV of something round (the human eye or a camera lens) with something that is flat (the computer screen) ... there is a small step involved in solving for this error in real raycasters but for now it will be ignored in this article, just be mindful of that in case you're wondering what's going on. It can be as simple as just scaling the rays so they're projected in such a way that their arc creates a flat trapezoid shape instead of a round arc.<br />
<br />
<br />
<div style="text-align: center;"><i>Part 2: Preparing Solid Color Wall Slices</i></div><div style="text-align: center;"><br />
</div>In LittleBigPlanet2 I've used a solid color to present the most basic effect. Holographic material in LBP2 is extremely versatile, so first things first - let us create the wall slices per distance. We'll go through all the different ways I've come up with.<br />
<br />
<b><u><i>PRACTICAL METHOD A</i></u></b>: <i>Do-it-yourself. </i>Create slabs of holo to represent distances and then overlay them.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwplq2C25E7nCEZL9i4g0CV8rfLVNZu_RDMuX31eacZAod_MZFY6DEs6iMxCDJ0ECVPw-_qYmd3OtuXb-6HyLsTVB90qY0EjTG2ViCCNS9t6IMtGjvhmQ2IinVIEDG8UpsSXTY0P4P_Diz/s1600/DRAW.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwplq2C25E7nCEZL9i4g0CV8rfLVNZu_RDMuX31eacZAod_MZFY6DEs6iMxCDJ0ECVPw-_qYmd3OtuXb-6HyLsTVB90qY0EjTG2ViCCNS9t6IMtGjvhmQ2IinVIEDG8UpsSXTY0P4P_Diz/s320/DRAW.jpg" width="180" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 2: Slices of holographic material representing different distances in one column.</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td></tr>
</tbody></table><br />
For your slices, I recommend setting your OFF color as the same as your ON color. If your walls are red, make sure the same shade of red is selected as your OFF color. Disable animation on both unless you want that funky pulsing effect. You also see the smaller slices get darker. This is another trick of perspective, distance attenuation: things further away appear darker. So I simply lower the brightness per each piece with a minimum of 0.<br />
<br />
We have some options here. In both samples I have each of these different heights overlayed per column and just activate the appropriate piece of holo for the distance ( Part 3 will cover different ray casting theories and how to translate that to your height chunk.) You can also emit the appropriate height rather than having them all overlayed at once: even if it's invisible, having tons of holographic material overlayed at once causes very strange things to happen in the engine - collisions stop registering, the players constantly respawn or fall through the level boundaries, etc. Make sure to be working in grid mode the entire time.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHyUWur3BFOysBWROmkf5oYiVUf2PK4PLwWTKdsRiw7PKfIW7duWvJ756Mp4_xCeNB7uBZwNsBVKPpG1YBWbnU7r64JBHMvvKkzBwKcVj9XuSMx3_1Lro105iPkxTA0QFpI20adBgduEuz/s1600/ADVANTAGES2.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="40" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHyUWur3BFOysBWROmkf5oYiVUf2PK4PLwWTKdsRiw7PKfIW7duWvJ756Mp4_xCeNB7uBZwNsBVKPpG1YBWbnU7r64JBHMvvKkzBwKcVj9XuSMx3_1Lro105iPkxTA0QFpI20adBgduEuz/s200/ADVANTAGES2.jpg" width="200" /></a></div><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" /></a><br />
Very easy to design and implement<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" /></a> <br />
Dependable<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" /></a><br />
Easy to punch in depth shading / fog as either preset per piece or with dimmer functions<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjioY_T3k-yT92csWFWXIl4pVPZMFjLq7TbP15KUYhIYAxtvp3hK08yd5cPAK87foiLd17eOqRyUhhFS-t0PcWeMEBEQFJsLGMd5pOWIFfcKDKbcKtw8ET_MWxYjOfB5eisz9UL8GxTFB1N/s1600/DISADVANTAGES.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="40" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjioY_T3k-yT92csWFWXIl4pVPZMFjLq7TbP15KUYhIYAxtvp3hK08yd5cPAK87foiLd17eOqRyUhhFS-t0PcWeMEBEQFJsLGMd5pOWIFfcKDKbcKtw8ET_MWxYjOfB5eisz9UL8GxTFB1N/s200/DISADVANTAGES.jpg" width="200" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a></div>Easy for low depth-resolution, but becomes increasingly tedious for high ones<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a><br />
<br />
A lot of overlayed holographic material causes engine eccentricities.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a><br />
<br />
It may be tricky to get a stable image if emitting the appropriate piece per ray hit distance.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a><br />
<br />
Holographic material's base texture may sit oddly on the slices. Experiment with UV tool. <br />
<br />
<b><i><u>THEORETICAL METHOD B:</u> </i></b><i>Spread 'em</i><b> </b><br />
<b><br />
</b><br />
Here rather than having to hand craft each height for the slice, We'd use some combination of pistons, emitters and more to achieve maximum resolution fill with the least amount of wires. For example, 3 pieces of invisible holo. One on the horizon line, 1 above, and 1 below - with the two off-center being equidistant from the horizon. Attach the outer two to the center holo with pistons, and you'd be able to modulate them in and out in sync to create a boundary. The idea here would then be to use emitters to "fill in" holographic material. Possible ways could be emitting bits of holo out vertically and have them wired to self-destruct when they collide with the barrier (put a tag on the outer pieces, put impact sensor on the emitted pixels and wire it to a destroyer set to "disappear") , a single "paint brush" piece of holo that bounces between the barriers and constantly emits a color with a short lifespan (to bounce use impact sensor, toggle, and 2 movers. ... eg. toggle -> Move up, toggle->NOT-> Move down).<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHyUWur3BFOysBWROmkf5oYiVUf2PK4PLwWTKdsRiw7PKfIW7duWvJ756Mp4_xCeNB7uBZwNsBVKPpG1YBWbnU7r64JBHMvvKkzBwKcVj9XuSMx3_1Lro105iPkxTA0QFpI20adBgduEuz/s1600/ADVANTAGES2.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="40" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHyUWur3BFOysBWROmkf5oYiVUf2PK4PLwWTKdsRiw7PKfIW7duWvJ756Mp4_xCeNB7uBZwNsBVKPpG1YBWbnU7r64JBHMvvKkzBwKcVj9XuSMx3_1Lro105iPkxTA0QFpI20adBgduEuz/s200/ADVANTAGES2.jpg" width="200" /></a></div><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" /></a></div>Would easily scale to very high depth resolution.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" /></a> <br />
A lot less lag in create mode<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" /></a> <br />
Potential for less wires flying around <br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" /></a> <br />
<br />
Potential for more modularity and easier enhancement.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjioY_T3k-yT92csWFWXIl4pVPZMFjLq7TbP15KUYhIYAxtvp3hK08yd5cPAK87foiLd17eOqRyUhhFS-t0PcWeMEBEQFJsLGMd5pOWIFfcKDKbcKtw8ET_MWxYjOfB5eisz9UL8GxTFB1N/s1600/DISADVANTAGES.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="40" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjioY_T3k-yT92csWFWXIl4pVPZMFjLq7TbP15KUYhIYAxtvp3hK08yd5cPAK87foiLd17eOqRyUhhFS-t0PcWeMEBEQFJsLGMd5pOWIFfcKDKbcKtw8ET_MWxYjOfB5eisz9UL8GxTFB1N/s200/DISADVANTAGES.jpg" width="200" /></a></div><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a></div>Impact sensors are unreliable if something is moving very fast<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a></div> Bit of work to get the boundaries to scale appropriately<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a> <br />
Would take work to get distance shading / fog to work<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a> <b>HAS NOT BEEN SUCCESSFULLY IMPLEMENTED.</b><br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br />
</a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><i>Part 3: Creating the Rays</i><br />
<div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: left;">Sounds like a pretty fundamental part of the ray caster, huh? :) Each column is associated with a ray, which all have an origin at the eye position. In any case, the rays will need to use an impact sensor to detect a particular tag. If you want to draw "walls", simply draw material and put your "WALL" tag on it. It helps to be made of holographic material since it doesn't collide.</div><div class="separator" style="clear: both; text-align: left;"></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU-6Pw79XPonrP_uRzUMkxf7frsK7Bfv3-WBrYsLO2KThp4aki3pIyvw1lwXVAxlWkTUwtOXRzFWKP2rH5nIFVS_Ll5_1S4TvYU-1AHkWoy-edJjfOYqlGNnOrusgieA0xYxSfIBE3qwz7/s1600/SAMPLEVIEW.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU-6Pw79XPonrP_uRzUMkxf7frsK7Bfv3-WBrYsLO2KThp4aki3pIyvw1lwXVAxlWkTUwtOXRzFWKP2rH5nIFVS_Ll5_1S4TvYU-1AHkWoy-edJjfOYqlGNnOrusgieA0xYxSfIBE3qwz7/s320/SAMPLEVIEW.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 3: Overhead view of a player's field of vision. Blue represents walls. This is the space everything is computed in.</td></tr>
</tbody></table><div class="separator" style="clear: both; text-align: left;"><i><b>PRACTICAL METHOD A:</b></i> <i>The Shish Kabob Technique.</i></div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;">I call this shish kabob because it's like chunks of shish kebob on a skewer. Essentially, for each level of depth you have an independent piece with this microchip on it.</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;">Very simple, just an impact switch set to INCLUDE TOUCHING - YES, INCLUDE TAG - YES and I set it to a blue tag with label "WALL", which is also wired into a NOT gate. What happens is if each piece of our ray kebab fails to intersect, it'll query the next piece by feeding the output of the NOT gate into the activation input of the next kebab chunk's microchip, like so:</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgpzRRaUNB3EjeMPrGnHfoCtRWXGPB2K6lHzA4WLNWR95lNphIQOsyv6iV8EqygngzDxw4klojHzWnvFssdX6mHaKZVTvV3d37ju7d-Wl18EfpTRO6Cuw85j0vrDoqjgX9OXV2ztg-V_Jm/s1600/RAYLOGIC.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgpzRRaUNB3EjeMPrGnHfoCtRWXGPB2K6lHzA4WLNWR95lNphIQOsyv6iV8EqygngzDxw4klojHzWnvFssdX6mHaKZVTvV3d37ju7d-Wl18EfpTRO6Cuw85j0vrDoqjgX9OXV2ztg-V_Jm/s320/RAYLOGIC.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 4: Each link in the ray will check intersection with walls, if there is none it will go to the next one.</td></tr>
</tbody></table><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;">This way, we end up recursively checking at predesignated distances and we stop as soon as we hit something. We then wire that impact sensor into our holo slice routine. I combine this with the pre-made slices to get the effect in the sample. Also, since we'll want this to be mobile, glue all the chunks together using the advanced glue tool.</div><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDaSs27XHwyn0J8heIyFJjlEJo8FoWLalMzHZm2cUHxBBkh8Svz2XKwpWfMQc66mSEbRTTOkNLnd7h_HlgKUIKYgmodtdMrX_9rbHzNQ39WOqO0C3iifQL3QIkanhyphenhypheneuhMVVSWSSr9U6FI/s1600/CHAIN.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDaSs27XHwyn0J8heIyFJjlEJo8FoWLalMzHZm2cUHxBBkh8Svz2XKwpWfMQc66mSEbRTTOkNLnd7h_HlgKUIKYgmodtdMrX_9rbHzNQ39WOqO0C3iifQL3QIkanhyphenhypheneuhMVVSWSSr9U6FI/s320/CHAIN.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 5: The "ray" is a chain of recursive intersection tests and will cancel out if one of them is true.</td></tr>
</tbody></table><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHyUWur3BFOysBWROmkf5oYiVUf2PK4PLwWTKdsRiw7PKfIW7duWvJ756Mp4_xCeNB7uBZwNsBVKPpG1YBWbnU7r64JBHMvvKkzBwKcVj9XuSMx3_1Lro105iPkxTA0QFpI20adBgduEuz/s1600/ADVANTAGES2.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="40" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHyUWur3BFOysBWROmkf5oYiVUf2PK4PLwWTKdsRiw7PKfIW7duWvJ756Mp4_xCeNB7uBZwNsBVKPpG1YBWbnU7r64JBHMvvKkzBwKcVj9XuSMx3_1Lro105iPkxTA0QFpI20adBgduEuz/s200/ADVANTAGES2.jpg" width="200" /></a></div><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" /></a></div>Extremely simple to understand and implement.<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" /></a> <br />
<br />
Extremely stable and dependable.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjioY_T3k-yT92csWFWXIl4pVPZMFjLq7TbP15KUYhIYAxtvp3hK08yd5cPAK87foiLd17eOqRyUhhFS-t0PcWeMEBEQFJsLGMd5pOWIFfcKDKbcKtw8ET_MWxYjOfB5eisz9UL8GxTFB1N/s1600/DISADVANTAGES.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="40" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjioY_T3k-yT92csWFWXIl4pVPZMFjLq7TbP15KUYhIYAxtvp3hK08yd5cPAK87foiLd17eOqRyUhhFS-t0PcWeMEBEQFJsLGMd5pOWIFfcKDKbcKtw8ET_MWxYjOfB5eisz9UL8GxTFB1N/s200/DISADVANTAGES.jpg" width="200" /></a></div><br />
<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a></div>Very easy for low depth-resolution but becomes tedious to manually wire each output at a high res.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a><br />
Too many impact sensors occupying a small space can cause them to not register properly.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a><br />
Also introduces another piece of holo for each step of depth. Multiply that by your horizontal resolution.<br />
<br />
<br />
<u><i><b>THEORETICAL METHODS B & C:</b></i></u> <i>The Facehugger and The Bouncing Bullet</i><br />
<br />
I've experimented with using piston and mover based rays. I had a piston based ray working but it broke apart when I added more columns. The idea is that the sensor is on the end of a piston and it'll try its best to hug a surface. It was a little jittery but it did hug the wall. (use impact sensors and forward/backward input on the piston). I also experimented with using a little piece of holo that quickly was shot out and bounce back to the eye. In both cases, the piece of holo touching the wall would have a tag sensor looking for "EYE" and report its closeness to the render column, and from there on we can either extract the analog value and activate a specific height piece or scale and shade one of the theoretical dynamic wall slices.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHyUWur3BFOysBWROmkf5oYiVUf2PK4PLwWTKdsRiw7PKfIW7duWvJ756Mp4_xCeNB7uBZwNsBVKPpG1YBWbnU7r64JBHMvvKkzBwKcVj9XuSMx3_1Lro105iPkxTA0QFpI20adBgduEuz/s1600/ADVANTAGES2.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="40" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHyUWur3BFOysBWROmkf5oYiVUf2PK4PLwWTKdsRiw7PKfIW7duWvJ756Mp4_xCeNB7uBZwNsBVKPpG1YBWbnU7r64JBHMvvKkzBwKcVj9XuSMx3_1Lro105iPkxTA0QFpI20adBgduEuz/s200/ADVANTAGES2.jpg" width="200" /></a></div><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" /></a></div>Would significantly decrease the amount of impact sensors and holo onscreen to achieve a higher res<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" /></a><br />
<br />
A lot less wires flying around the level.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcsY99hODlal9LmRslRUUsh2uYuPa1IxRenzy74oOJyRpqHSoRJQkezijikI5gKzr_r64ThHlDfpBBZl8ZJMnvqQlXGzi9aCg0vfpweKHGoaRd_O1ajzaMS8pfSDlguABqf4zHDC-0ljA/s1600/PLUS.jpg" /></a><br />
Would give a full 0-100% range in terms of scale and shading and/or fog.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjioY_T3k-yT92csWFWXIl4pVPZMFjLq7TbP15KUYhIYAxtvp3hK08yd5cPAK87foiLd17eOqRyUhhFS-t0PcWeMEBEQFJsLGMd5pOWIFfcKDKbcKtw8ET_MWxYjOfB5eisz9UL8GxTFB1N/s1600/DISADVANTAGES.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="40" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjioY_T3k-yT92csWFWXIl4pVPZMFjLq7TbP15KUYhIYAxtvp3hK08yd5cPAK87foiLd17eOqRyUhhFS-t0PcWeMEBEQFJsLGMd5pOWIFfcKDKbcKtw8ET_MWxYjOfB5eisz9UL8GxTFB1N/s200/DISADVANTAGES.jpg" width="200" /></a></div><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a></div> Pistons are extremely unstable. They have tendency to just break apart and go crazy.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a> <br />
<br />
Movers are unreliable. Impossible to get enough speed to follow the player well for bouncing bullet.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a><br />
Even if it was, impact sensors fail at high speeds.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGVHUaCdl-m-yKQreLBOQOh81doZa0l6HZkOpX3ZjtXtymPN5P9JVj1Dn1EgpM5E99arGrbZPHM973NwaY3VJCX_EAdOC7raxLJD_4rvBOFPfGrd5sPSwbRX4L_FvPbniSalFH294HFB84/s1600/MINUS.jpg" /></a><br />
Both prone to ray misses or other eccentricities when rapidly approaching nearer wall: <br />
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3vScKkVGuwZ5AuTKQv3QnYyKbFAW4e6r05c-yd6Ni983Y4mSBJBN9fA4YD_efEAOIlLZ1wo7LgVZ5vi8A_aXXH-mBrh1oTV5e7mNYnfzzjUlhszPjbp0RQBoRr8wH_31oqn9OEawN-mwT/s1600/RAYMISS.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3vScKkVGuwZ5AuTKQv3QnYyKbFAW4e6r05c-yd6Ni983Y4mSBJBN9fA4YD_efEAOIlLZ1wo7LgVZ5vi8A_aXXH-mBrh1oTV5e7mNYnfzzjUlhszPjbp0RQBoRr8wH_31oqn9OEawN-mwT/s320/RAYMISS.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 6: An example of a piston based ray. If I were to move the ray to the left quickly, it would ignore the truly nearest wall. There are possible workarounds but they end up putting more stress on the game engine than they're worth.</td></tr>
</tbody></table><br />
<div style="text-align: center;"><i>Part 4: Creating The Player Chassis</i></div><div style="text-align: center;"><b>(This will NOT cover player-wall collision detection.)</b></div><div style="text-align: center;"><b> </b> </div><div style="text-align: left;">As important as ray casting itself is the ability to move around in the world. The fact that I need to glue the ray routines to the chassis posed some challenges of its own. </div><div style="text-align: left;"><br />
</div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht9h6HPerVuCL4cElKlkNyXFL68hTbzM0-Jj4veeA4ts9iXdLFMUMoV1Mh6pEqQZcBt0eBpg8viF8GvDL52gmkmY7fLqyDq2Tfif0WKLyAwYgYC1fLyvnQi2VRd7HQNlpcy4GX6b5_-EZg/s1600/CHASSIS.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht9h6HPerVuCL4cElKlkNyXFL68hTbzM0-Jj4veeA4ts9iXdLFMUMoV1Mh6pEqQZcBt0eBpg8viF8GvDL52gmkmY7fLqyDq2Tfif0WKLyAwYgYC1fLyvnQi2VRd7HQNlpcy4GX6b5_-EZg/s320/CHASSIS.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 7: Basic view of the chassis (right) and a controllinator seat</td></tr>
</tbody></table><div style="text-align: left;"><br />
</div><div style="text-align: left;">But it's not too complicated. For the samples I used cardboard for the chasses but you can use whatever material you wish. Essentially, we have one piece to which all view rays will be glued to (this is their origin). This will receive all rotational and movement input from a controllinator. In my sample I use an advanced mover with local space ON to provide full forward, backward, and strafing movement like in a typical first person shooter. I also use the right stick wired to an advanced rotator to provide turning.</div><div style="text-align: left;"><br />
</div><div style="text-align: left;">The problem is, if this was left as is the center of rotation would NOT be the origin of the rays, but the center of the entire glued mass - it would give VERY odd results. So to keep it relatively confined to rotate around the origin, I use another mass of material and bolt it to the ray origin material. On this is a very strong gyroscope and anti-gravity so it does not fall or rotate, and now the ray origin disc will rotate properly. </div><div style="text-align: left;"><br />
</div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqmlOoLuU84iU5GKIENq6n5_Ioed0HDKHF2pEKA7jg1RJVSykQik20Xs0U0rT_uoae-weEy1-VTzUhNCYUrJTg4ird7fOMsLeVSNsNbq6Rtxt8tZpmSohur7pfTP_escpb1CR1bF1247pV/s1600/CHASSIS+2.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqmlOoLuU84iU5GKIENq6n5_Ioed0HDKHF2pEKA7jg1RJVSykQik20Xs0U0rT_uoae-weEy1-VTzUhNCYUrJTg4ird7fOMsLeVSNsNbq6Rtxt8tZpmSohur7pfTP_escpb1CR1bF1247pV/s320/CHASSIS+2.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 8: The logic behind the chassis. Very simple but necessary to maintain properly centered rotation.</td></tr>
</tbody></table><div style="text-align: left;"><br />
</div><div style="text-align: center;"><i>Part 5: Putting It All Together!</i></div><div style="text-align: center;"><br />
</div><div style="text-align: center;">Ok, so now you have a single render column, a view ray, and an apparatus to move the player around. We need to copy the column/ray pairs to suit the resolution you want, and glue all the rays to the player eye, as well as rotate in increments to give us a nice perspective effect. Daunting? Well, here's some tips:</div><ul><li>ALWAYS have grid snap on when you're creating your column and ray and make sure your ray and column each fit neatly on the grid. This will allow you to copy and paste it along the grid without problems.</li>
<li>If doing it all manually, make use of angle snap. In the sample I have a 90 degree FOV So I use a 45 degree snap on the very first and very last ray. Then I just went in halves and filled in what was too tight for angle snap by eye. So after putting down the very first and last making 90, I'd split the ray group in half. The one(s) in the middle would be (around) 0 degrees and I'd glue that in.Then I split each half in half, and the one in the middle would be the halfway point between whatever's already glued. </li>
<li>Rotational speed on bolts and rotators refers to how many degrees of rotation it will spin per second. You can create a jig that rotates at regular intervals to give you exact and precise angle between rays.</li>
<li>With a little bit of work in the column department, you can create a system that automatically creates the rays and columns for you. (You'd just have to glue it afterwards). Keep in mind that the speed of a mover is the amount of small grid units it will move per half-second. You can create something that moves along the bottom of your intended frame at regular intervals, that also contains a tag. Maybe "Column anchor". Then on your column you'd need to clue a little base to the display portion and give it some logic to follow this "Column Anchor" and deactivate the follower as soon as it's on top of it. Also, a very strong gyroscope pointing straight up. Then, have a small piece of material that rotates and emits the pairs of column/ray from its center at regular intervals. You could end up with a full and precise array of columns and rays like this, at the cost of a little extra logic per ray. Just remember to glue it to the base afterwards.</li>
<li>Keep an eye on the thermometer. Even though an individual column/ray combo takes up almost nothing on the meter, adding a ton of pairs will start to add up fast, especially if you're using the overlayed method. If you're using a series of emitters to emit pre-made heights or you're using dynamic slices, it may be different. </li>
<li>If your wall slices all have their heights overlayed internally at all times, creating too high a resolution may break the impact sensors. Be careful and if you're doing it all by hand, do a quick function test before you start glueing.</li>
</ul><div style="text-align: center;"><i>Part 6: Different Colors and Textures </i></div><div style="text-align: center;"><br />
</div><div style="text-align: left;">What's that? Getting bored of having walls just one color? Well, there are ways around that. For example, instead of just using "WALL" we could expand on that impact sensor, and then go something like "if ( collides with wall) { collides with blue wall? collides with red wall? } " as shown here.</div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibr2FQTcMhaMzs_qNixYnlQVMJ_DHIMEdxsoELY2y3YfU7RM7kze_hKzvFoSjN13_lr38O7lO-KPGWNtkttbbeDX0TA4j3KyA-aixXP4QcuTP45FlWVSTvK8sMJKxIp4dIGzEINelq65x6/s1600/2wall.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibr2FQTcMhaMzs_qNixYnlQVMJ_DHIMEdxsoELY2y3YfU7RM7kze_hKzvFoSjN13_lr38O7lO-KPGWNtkttbbeDX0TA4j3KyA-aixXP4QcuTP45FlWVSTvK8sMJKxIp4dIGzEINelq65x6/s320/2wall.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 9: Example logic to handle multiple colored walls. First there is an "Impacts Wall" check, which will then activate a microchip containing checks for each type of wall. Those are only evaluated if the "Impacts Wall" is true.</td></tr>
</tbody></table><div style="text-align: left;"><br />
</div><div style="text-align: left;">This is mainly useful with the shish kebab method, if you only have one sensor piece per ray then you don't need to check for "WALL" first. I am not sure if doing this is more or less efficient than just checking for both red and blue right away, but I have a feeling it should be better to do an extra check on the hit than N checks on everything, hit or miss. Imagine you have 5 different colors, that's 5 different impacts you'd have to check for at each link of the kebab. Mmmm. I love kebab.</div><div style="text-align: left;"><br />
</div><div style="text-align: left;">And ... textures? Did I say textures? Yes I did. As mentioned, games like Wolfenstein 3D used a uniform grid to test their rays against, which also made it very easy to do uniform texture mapping... we can translate some of this to LittleBigPlanet2. <b> </b><br />
<br />
One way you could accomplish it is to create a massive square of your desired texture in game, <b> </b>and then scale it down for each slice and cut the slice down to size, trying to keep the same general look in each column but scaled down. This works best for textures that would tile well from column to column, like bricks.<b><br />
</b><br />
<br />
Though another way that would better and be more open ended, albeit a little more work...<br />
<b> </b><br />
<b>This theory requires either the PS Eye or ample time to draw by hand in the game - of which I have neither therefore could not test yet. If anyone has a PS Eye and would like to help me implement a texture mapped sample let me know!</b></div><div style="text-align: left;"><br />
</div><div style="text-align: left;">First off, let's take a texture. To make things really easy, I'm gonna take one that can tile well in vertical stripes - a brick texture from cgtextures.com. (I'll also explain how to do things for textures that wouldn't tile well like that, for the masochists amongst us)</div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0cI8Ifeb1tcgyU4g90PWDxEXyOUhKRyGrLWyHExmuVRM5aSY1iJ8TYKl8JnYKm1NTH8RLuv3OoH7D6wldQjp5jU4PedQLEipYGOizBzRIEoEv_1vnLzRVz_zj-iEEPZuJ_IdwwPSW04Gk/s1600/BRICKTEXTURE_FULLS.jpg" style="margin-left: auto; margin-right: auto;" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 10: Basic base texture of a brick wall</td></tr>
</tbody></table><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;">Now, let's take a slice that we could tile onto the walls. </div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbuePm6M1mEsT7arufV0fE9aoay8FT_DhYV45lQA-n2Oqf2RHWPq17Xux35gxX6oAQO4TSDAqhBy5ClWRIb9Gc5ll_qqLe5b9kUn2bdmif37CxZSvuXAS7jNZWYE0vRgVjPsN-5ns-9Iz9/s1600/BRICKCUT2.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbuePm6M1mEsT7arufV0fE9aoay8FT_DhYV45lQA-n2Oqf2RHWPq17Xux35gxX6oAQO4TSDAqhBy5ClWRIb9Gc5ll_qqLe5b9kUn2bdmif37CxZSvuXAS7jNZWYE0vRgVjPsN-5ns-9Iz9/s320/BRICKCUT2.jpg" width="103" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 11: Cropped out what will map to a single column in the renderer</td></tr>
</tbody></table><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;">And now we resample this for every height in our depth resolution. (Vertically Only)</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0dZ2ahr7vTknyhjAp8AshK8KUSn7tWwX9fKS8bVSbRW-IfV-kH5O8SbRhYMhuAcVkXStb7JQxweiQQgahp6uMaZ2HEM_YGuEb40f4J7oNdekDccJnqdPbVoxHoedPkYeXBMcvrfltHBwX/s1600/BRICK_SCALED+SLICES2.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0dZ2ahr7vTknyhjAp8AshK8KUSn7tWwX9fKS8bVSbRW-IfV-kH5O8SbRhYMhuAcVkXStb7JQxweiQQgahp6uMaZ2HEM_YGuEb40f4J7oNdekDccJnqdPbVoxHoedPkYeXBMcvrfltHBwX/s320/BRICK_SCALED+SLICES2.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 12: A full mipmap chain for a single column for each distance. They are only scaled vertically.</td></tr>
</tbody></table><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: left;">We can then take this into the game via the PS Eye. Remember that black is fully transparent when stickered onto holographic material, use this to create translucency in your sprites and textures.</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;">What about slices that wouldn't neatly tile horizontally? What if you want to sample the texture horizontally? Well, then you'd need to do the above process, but also at uniform points horizontally on the texture... which could turn into a daunting task. For example, you'd have to make stripes of the full res texture, and then create a full mipmap chain of each stripe for your renderer's depth resolution. And that's not even the hard part...</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: left;">There are many ways I could fathom to read in texture coordinates but one that I think would be easiest is to maintain a gridlike style to your level like in Wolfenstein 3D, and have each cell have a separate portion and tag for UP, LEFT, RIGHT, DOWN, so you know which side of the wall you hit. Then have little tags at the corners and a tag sensor on your ray and read the distance to the appropriate corner tag. Then feed the tag sensor into a sequencer so you can map it's analog value to a particular slice of the texture. This however is a massive feat and would require a lot of effort and holographic material, might be best tackled with emitting each particular slice as it's actually needed, I'm sure it would be extremely unstable if it was all overlayed at once. I'm sure this would work. I know this all sounds very abstract, but I cannot test this so I can't detail a full implementation. Again, if anyone has a PS Eye and is willing to help me, let me know!</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><i>Part 7 - Backgrounds, Floors, Ceilings</i></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;">You might notice something about Wolfenstein 3D - the floors and ceilings are a solid color. As I said, the horizon point would always be in the center of the screen so you can just freely split the screen in half, floor and ceiling. Years ago when I coded my own raycaster (which I might provide vids and source code of, it's still backed up), every frame I would blit a bitmap of a solid color floor and ceiling, but they also had a black gradient applied to it to tie in with my distance attenuation shading. It's another great help to the illusion of 2D. </div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: left;">In my LBP2 raycaster sample, I just used 2 pieces of blue wood (it's very neutral when colored) and gave them a light hue and used the black gradient tool to aid in the illusion. They are always behind the walls being drawn.</div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLWQJsgowHu2648J6W5Cevm518NcQ0mYSoqYSYkN8u9rU5OYnl0FlydLWRDGaKe8rC8WFd8bclwr4grJQ5ovaSXjTLLCZ7FE7RfNltySlDaaO6LPDpn17izwScYw4f-ZVON9aCIcyaAaq5/s1600/BG.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLWQJsgowHu2648J6W5Cevm518NcQ0mYSoqYSYkN8u9rU5OYnl0FlydLWRDGaKe8rC8WFd8bclwr4grJQ5ovaSXjTLLCZ7FE7RfNltySlDaaO6LPDpn17izwScYw4f-ZVON9aCIcyaAaq5/s320/BG.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 13: The background of the LBP2 ray casting sample</td></tr>
</tbody></table><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: left;">They are dark enough to not present too many artifacts on the "shaded" walls (remember, their shading is just them being translucent and showing more black), but light enough to notice when there isn't a wall on top of it. If you were inclined to make colored walls and floors, you could just draw them in for each height slice (or if you're using dynamic slices, make secondary barriers that will rest on the desired view frame, and do the same filling technique but for ceiling and floor colors - filling inbetween the frame and moving boundaries). </div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><i>Part 8 - Character and Object Sprites... are a problem.</i></div><div class="separator" style="clear: both; text-align: center;"></div><div style="text-align: left;"><br />
</div><div style="text-align: left;">Tip: Remember that black is totally transparent on holo. Use black backgrounds behind your characters and objects to make a clipping mask.</div><div style="text-align: left;"><br />
</div><div style="text-align: left;">Of course there's no fun in just running around neat hallways. You need something to shoot at! Unfortunately, there are problems here. It is easy enough to create the sprites themselves; just like creating a slice of the wall per distance, make a scaled copy of the sprite to fit for distance. One problem is clipping against the walls; there isn't any. Sprites would always appear to be drawn over walls no matter what, there is no way to clip them like in Wolfenstein 3D. In that game when the walls are rendered there is also something called a depth buffer that is created, and all game sprites are clipped against this so they are not drawn over walls they're behind and most certainly not out of the rendering frame as would be the case in LBP2. </div><div style="text-align: left;"><br />
</div><div style="text-align: left;">As mentioned, you could create the scaled sprites easily enough. You would NOT be using the same rays or the same ray casting technique as for walls with sprites, you'd just use a simple tag sensor on the EYE to detect the distance and maybe hook it up to a (positional) sequencer to allow selection of the appropriate scaled sprite. </div><div style="text-align: left;"><br />
</div><div style="text-align: left;">For the position on the screen, I suppose you could try to emulate the inverse camera matrix multiplication done in Wolfenstein 3D, but I'm not sure how effective that would be. I think one way would be to just make a solid arc encompassing the full FOV and on intersection with tag "ENEMY" and have a tag sensor on one corner reading how far from the left or right side the ENEMY is and use that to manipulate pistons holding the enemy sprites. But again... it's a bit of a pain to get that working, if it can be done.</div><div style="text-align: left;"></div><div style="text-align: left;">Another possible option is to have a smaller resolution of solid rays (Not linked like the shish kebab method) and have fixed horizontal coordinates where enemy sprites could appear, and activate the appropriate scale still using the "distance from the eye to ENEMY" technique. Of course this would mean you could only effectively determine one enemy / game sprite at a time... </div><div style="text-align: left;"><br />
</div><div style="text-align: left;">Which means another option still is to just use a very low res shish kebob method for sprites. And use that to determine horizontal coordinates AND scale, without using the "distance from EYE to ENEMY" technique. I'd say just use your existing shish kebab, but then you have the problem of duplicate hits and you'd end up with blurred sprites. That's why the resolution has to be... low. Though like anything there are workarounds, but it's all a matter of it being worth it or not, being too much stress on the engine, etc. </div><div style="text-align: left;"><br />
</div><div style="text-align: left;">All in all I'd say game sprites in a full 360 freedom of view holographic material based Ray casting engine is just too problematic to effectively implement in LBP2.</div><div style="text-align: left;"><br />
</div><div style="text-align: center;"><i>Part 9 - Conclusions</i></div><div style="text-align: left;"><br />
</div><div style="text-align: left;">So, we can get some pretty interesting pseudo-3D effects in LBP2 and I hope this has helped you understand how I've been going about it. There are some limitations with the engine that prevent it from being too great. Limits with how much holographic material can be onscreen and/or overlapping, limits with how many impact sensors can be active in the same space, etc. put great constraints on how much detail you can squeeze out of your image. </div><div style="text-align: left;"><br />
</div><div style="text-align: left;">Using emitter based techniques to draw may help squeeze more real estate, but I doubt I will ever reach my target resolution of 320 x 280 pixels. More research will be highly necessary, and I'm sure I could get a better resolution than I have now. It's all a matter of pushing a little bit at a time to make sure it still works. The sample's resolution is 45 x 22 if I remember correctly, but this was with all the columns being overlaid and not emitted, putting great strain on the engine. I will eventually experiment with emitter based techniques to improve the quality and reduce engine load, but for now the sample will do as a proof of concept and I'm sure this article will also aid its cause. </div><div style="text-align: left;"><br />
</div><div style="text-align: left;">Note that there is also a delay to the logic computations in LBP2. You can notice a lag in the fill rate due to the nature of the signals passing down the chain in the shish kebab method.</div><div style="text-align: left;"><br />
</div><div style="text-align: left;">The techniques and methods here need not be limited to this type of rendering. For example, you can use the ray cast technique to simulate an enemy's line of sight. I will also post in detail of a knockoff of this rendering technique, my pseudo-3D dungeon crawler, which easily supports game sprites. I hope you enjoyed this read and look forward to seeing what everyone will come up. :)</div>Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com10tag:blogger.com,1999:blog-7582346522345149142.post-40589330078496088702010-11-23T13:08:00.001-08:002010-11-23T13:08:21.118-08:00Collecting dust since the 90s... games I never finished!So I still have plenty of games lying around that I still never finished!... some of them I doubt I could get even a quarter for so I might as well play it! Any suggestions are welcome, especially for PS1 or PC games:<br />
<br />
Playstation 1: <br />
<br />
Alundra<br />
Azure Dreams<br />
Blood Omen: Legacy of Kain<br />
Brave Fencer Musashi<br />
Breathe of Fire 4<br />
Final Fantasy 7 (WTF you can't be serious Foofles... I AM I AM!)<br />
Lunar 1 & 2<br />
Star Ocean 2<br />
Tales of Destiny 1 & 2<br />
<br />
Thousand Arms<br />
Tombu 2<br />
Xenogears<br />
<br />
Dreamcast:<br />
<br />
Blue Stinger<br />
Evolution: World of sacred Device<br />
Elemental Gimmick Gear / E.G.G.<br />
Resident Evil Code : Veronica<br />
Shenmue (!?!?!??!?! WTF AGAIN)<br />
Silver ( Maybe)<br />
<br />
Nintendo 64 and Gamecube:<br />
<br />
<br />
Duke Nukem : Zero Hour (In honor of Duke Nukem Forever especially)<br />
Super Mario Sunshine<br />
The legend of Zelda: Wind Waker<br />
<br />
A lot of RPGs on that list! Any good RPG suggestions are welcome! :DFoofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com0tag:blogger.com,1999:blog-7582346522345149142.post-85677868864165334802010-11-21T10:06:00.000-08:002010-11-21T10:06:44.808-08:00LittleBigPlanet 2 - Dungeon Crawler concept<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjddxLGTTWB8P_GzyZUsRxnN8KyHBdHJVwgjm4aCbmknGr0DS7ZhAksxU7b6gGpMNPJNVGUBuaHdhPXRpz_og5Rg84U-H4o7bG4s5_dyFtTwLhc3Ma-2YYN86GJVaaNgyqk9ue7HWVgb7Sp/s1600/DUNGEONSHOT_RESI.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjddxLGTTWB8P_GzyZUsRxnN8KyHBdHJVwgjm4aCbmknGr0DS7ZhAksxU7b6gGpMNPJNVGUBuaHdhPXRpz_og5Rg84U-H4o7bG4s5_dyFtTwLhc3Ma-2YYN86GJVaaNgyqk9ue7HWVgb7Sp/s320/DUNGEONSHOT_RESI.jpg" width="320" /></a></div>Well folks, here's more from me in LBP2: <a href="http://www.youtube.com/watch?v=SmzE2VcOsgI">http://www.youtube.com/watch?v=SmzE2VcOsgI</a><br />
<br />
This uses similar concepts to my pseudo-3D raycaster except the 3D illusion is even more fake and you're restricted to moving in sort of "tiles" and can only turn in 90 degree angles.<br />
<br />
Those restrictions make it easy to make some detail though, in this sample I have 3 unique "corridor" tiles, corner tiles, and a "dead end" tile. Also a "Monster".<br />
<br />
I'm thinking of making this into a full fledged game complete with mazes, doors you can unlock with keys, and of course monsters. Also need to improve the rendering process slightly. It only uses about a single notch on the thermometer so it has plenty of room for variety!<br />
<br />
The main differences between this and my other ray caster are that this launches a single ray outwards and while it does stop when it hits a wall, it also reads every grid tile it hits before it gets there - the other ray caster is not bound to a grid and only reads up to a wall. I will provide a very in-depth series of videos about both systems, including the full theory and implementation through the next couple of weeks.<br />
<br />
But in short, for each level of distance there is a slice on the display, that is why it has this gridlocked sort of appearance. A very necessary limitation to achieve the cool textures. Which are at the moment just cheated with stickers, as indicated by their low resolution and the beta info text in the bottom corner of each slice. Higher quality art can be done by manually drawing with holo material.Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com1tag:blogger.com,1999:blog-7582346522345149142.post-82445971600776488202010-11-20T17:06:00.000-08:002010-11-20T17:06:56.690-08:00LittleBigPlanet 2 - Get modularity with microchips.Did you know you can turn microchips into easily reusable functions? You can give them custom-named inputs and outputs and use them just like the built in logic tools!<br />
<br />
Check out the video here: <a href="http://www.youtube.com/watch?v=jiPXvpBaNKU">http://www.youtube.com/watch?v=jiPXvpBaNKU</a><br />
<br />
Here is a small tutorial that should give you some ideas on how you can create easily reusable pieces of logic that I will henceforth call functions.<br />
<br />
When you wire to and from a microchip, it creates ports and will remember where each port is wired to, so you can then copy the microchip and plug in any acceptable input into a port. Functions do not have to return anything, but in this simple example we're going to make a function that implements a "dead - zone" : The signal will only be used if it fits within a certain % range. <br />
<br />
A sequencer set to "Input Mode : Positional" Will use its analog input to adjust the current play cursor to fit within the given % of the total range. Confused?<br />
<br />
For example: If your sequencer has 10 columns and you feed a signal of 50%, the cursor will rest right between column 5 and 6 - activating anything there such as batteries and tags.<br />
<br />
I use this to provide a threshold. Keep in mind, only the absolute value is taken into consideration: A value of -50% will still be halfway on the sequencer. <br />
<br />
Anyway, hope this helps. This is fully scalable to any amount of inputs/ outputs until the game crashes. :) Just remember the one on the bottom ALWAYS activates/deactivates the entire chip.Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com0tag:blogger.com,1999:blog-7582346522345149142.post-83432633265979087102010-11-18T17:01:00.000-08:002010-11-18T17:01:36.099-08:00LittleBigPlanet 2 Music - Lonley Galaxy / Cosmic TearsClicky here: <a href="http://www.youtube.com/watch?v=CFNFa4uRt10">http://www.youtube.com/watch?v=CFNFa4uRt10</a><br />
<br />
This was a song I wrote by request for a space theme. I think it turned out pretty well! I have the MP3 of this straight from the PS3's audio out. I am going to be transcribing this to real midi so it won't be gone forever when the beta ends.Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com0tag:blogger.com,1999:blog-7582346522345149142.post-25085504336602367172010-11-18T16:28:00.000-08:002010-11-18T17:05:42.342-08:00LittleBigPlanet 2 - Cursor Based UI - Basic Menu Tutorial 2<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOubOKJhI86aw9SOb_VXE5ytdmHgRzyv1UIT_NHGw4we3Rrf0KG6Grz_X5433IKYk0AXmtkDvAnfyTf3hbyeb6IUjaPsyZtoL3dqVTd_XeXslnEJfwpZAA4oJwaT0z_d9o_i0PANhHsqwp/s1600/LCICKY.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="175" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOubOKJhI86aw9SOb_VXE5ytdmHgRzyv1UIT_NHGw4we3Rrf0KG6Grz_X5433IKYk0AXmtkDvAnfyTf3hbyeb6IUjaPsyZtoL3dqVTd_XeXslnEJfwpZAA4oJwaT0z_d9o_i0PANhHsqwp/s200/LCICKY.jpg" width="200" /></a></div> Check out the youtube video <a href="http://www.youtube.com/watch?v=7nKPkZE1mIY">Here: http://www.youtube.com/watch?v=7nKPkZE1mIY</a><br />
<br />
So you want to improve the technology of your menus and use some of that new-fangled point and click functionality? No problem!<br />
<br />
Creating cursor based UIs is actually a little more intuitive than the digital counterparts. First thing we'll need is your cursor <br />
<br />
- this can be any kind of visual, from a cross-hair, to an arrow, a finger, anything! The visual aspect is insignificant - it's the <br />
<br />
HOTSPOT we care about!<br />
<br />
The hotspot can be a small piece of invisible hologram material - perhaps a tiny circle - that will act as the user's cursor <br />
<br />
position, and will interact with clickable objects. Be sure to scale the thickness of this to match the objects you want to test <br />
<br />
against - it MUST intersect them!<br />
<br />
Glue your hotspot to your cursor and place a microchip on it. If you'd like to keep your cursor level at all times, you could put a <br />
<br />
gyroscope there to make sure it stays put. Also put an advanced mover there - set speed to your desired cursor speed. I also like <br />
<br />
to set the acceleration to 100% just to keep it constant, and also the deceleration to 100% to make sure it stops when you want it <br />
<br />
to. Alternatively, you can use a setup with some NOT gates on your desired analog input and hook those up to anti-gravity object tweaks <br />
<br />
with dampening set to 100% - That makes absolute sure!<br />
<br />
At this point you probably gathered we want to wire our movement input (eg, left analog stick) to the appropriate left/right and <br />
<br />
up/down speed inputs of the advanced mover. That's great! we have a cursor that moves around! But it doesn't do anything...<br />
<br />
What I like to do, as shown in the video, is put some tags down. Tags are an extremely powerful feature of LBP2 and should not be <br />
<br />
taken for granted. For things like UI I like to use white tags, so put a white tag on your cursor hotspot's microchip and name it <br />
<br />
MOUSEOVER. You guessed it - Anything that now intersects with the hotspot can detect this tag and perform a "OnMouseOver" style <br />
<br />
function. For mouse click, put down another white tag but name it MOUSECLICK - you can activate this however you'd like to register <br />
<br />
a click, eg. the output of X from the controllinator. Depending on your intentions, you could also implement an ON TAP (see the <br />
<br />
blog post) function if you'd like to differentiate between rapid clicks and/or holding the mouse button down.<br />
<br />
Now that we have a fully functional cursor, let's make something to click on! Everything clickable only needs to implement means to <br />
<br />
read MOUSEOVER and/or MOUSECLICK. Implement? MOUSEOVER? This sounds like real programming! Shablago!<br />
<br />
But it truly is. This is an object oriented style approach, where each object in the world has its own role and methods. But <br />
<br />
anyway, all we care about is - YAY, BUTTONS. First you need to make sure your object - or your object's hitbox (an invisible piece <br />
<br />
of hologram you can use to handle intersections) - contains the appropriate IMPACT SENSOR switches.<br />
<br />
For MOUSEOVER, make sure your impact sensor is set to INCLUDE TOUCHING - YES, and REQUIRE TAG - YES - White, MOUSEOVER. Now this <br />
<br />
can do whatever you'd like. Perhaps you have a sackbot, and you'd like to now loop an animation for "YAY PICK ME". Or maybe it's a <br />
<br />
button and you want it to glow. YAY, BUTTONS.<br />
<br />
That's great, but how about on mouse click? Same deal! Make an impact sensor set to INCLUDE TOUCHING - YES, REQUIRE TAG - YES - <br />
<br />
White, MOUSECLICK. And now this can be wired to do amazing things. Like start a game. GNARLY.<br />
<br />
There can be a lot more you can do with mouse cursors. For example, clicking and dragging objects. Maybe picking something up and rotating it with the SIXAXIS, differentiating between two types of cursor clicks, the sky's the limit. That all goes beyond the <br />
<br />
scope of this tutorial and hopefully the basics have served you well.Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com0tag:blogger.com,1999:blog-7582346522345149142.post-56946606911038903972010-11-18T15:44:00.000-08:002010-11-18T17:06:27.984-08:00LittleBigPlanet 2 - Basic Menu Tutorial 1.<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9jRqp-RRsRZi0M0M-v8ezaJ2ynWEZfIs-u-HoAkgCsMWG0oOVwDDJUVLVFlnvi4uXYU_HGyTGON6kGSaRBw9Rzoyv2_1hccwy3tG9eaQb6K4yH0iZPxteRS8MRjjCMpqCyIC6a7wfpeki/s1600/MENU-1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="175" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9jRqp-RRsRZi0M0M-v8ezaJ2ynWEZfIs-u-HoAkgCsMWG0oOVwDDJUVLVFlnvi4uXYU_HGyTGON6kGSaRBw9Rzoyv2_1hccwy3tG9eaQb6K4yH0iZPxteRS8MRjjCMpqCyIC6a7wfpeki/s200/MENU-1.jpg" width="200" /></a></div>(Check out the youtube video <a href="http://www.youtube.com/watch?v=IVGAZ32aWD0">here</a>)<br />
(<a href="http://foofles.blogspot.com/2010/11/littlebigplanet-2-on-tap-function.html">On Tap Function</a>, <a href="http://foofles.blogspot.com/2010/11/littlebigplanet-2-signal-inverter.html">Signal Inverter</a>)<br />
<br />
So let's make some fancy menus for custom options and other doodads! I've designed multiple methods for this and I'm going to <br />
<br />
present what I think are easiest to visualize.<br />
<br />
To make a menu you pretty much just need 4 basic components:<br />
<br />
1) Visual cue to the items you can select<br />
2) Some sort of selection indicator. Either a little dot or overlay, or even something that follows triggered magnetic keys.<br />
3) A selector or series of selectors<br />
4) A way to cycle through the inputs.<br />
<br />
First, draw up your menu's layout. Also include what will be the indicators that can either light up, become emitted, etc. <br />
<br />
Experiment! Use physical lights in LBP, use sackbot animations, the sky's the limit.<br />
<br />
Typically people use a controllinator to handle UIs. To perform a simple, single column UI list you can use a single selector set <br />
<br />
the number of options in the list, and wire each selector output to your indicators in order.<br />
<br />
You can wire a directional output (such as the left analog stick or D-Pad) to the cycle of the selector. A positive value will <br />
<br />
cycle forwards, a negative value will cycle backwards. If you feel the input isn't cooperating in the order you'd like, you can <br />
<br />
invert the signal (See SIGNAL INVERTER blog post).<br />
<br />
Using a series of AND gates, fed by selector outputs and your method of selection (For example, wiring the X output of the <br />
<br />
controllinator into the other part) you can then fire off functions for each individual option. Maybe begin a cut scene, change <br />
<br />
your sackbot's animation, play a fart sound - anything!<br />
<br />
If you feel single column menus are too simple, try out one with multiple columns! A method I find that's easy to follow is to use <br />
<br />
one selector for the rows, and one for the columns - So if you have 4 rows by 2 columns :<br />
<br />
SELECTOR A is set to 4 slots - Cycle through this with your UP/DOWN methods<br />
SELECTOR B is set to 2 slots - Cycle through this with your LEFT/RIGHT methods.<br />
<br />
I also use a grid of AND gates to combine them, so in this case we'd have a grid of 8 AND gates and just go in lines adding the <br />
<br />
selector outputs to the AND gate inputs. <br />
<br />
It is these AND gates that indicate your selection. From here on you can continue the single column menu's approach, use AND gates <br />
<br />
with your grid AND gates, and your confirmation method, to fire off your "Do Option" function for each choice.<br />
<br />
Simple... but complicated. Enjoy and make your own UIs! Remember there are multiple methods to doing anything in engineering, you <br />
<br />
might find methods of doing this that you find easier or more efficient - Good! I can't wait to see what you all do.Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com0tag:blogger.com,1999:blog-7582346522345149142.post-13370810942947797932010-11-18T15:04:00.000-08:002011-02-02T22:26:05.530-08:00LittleBigPlanet 2 - On Tap FunctionSimply use a counter with a limit of 1 that resets itself to create a function that outputs only once per cycle.<br />
<br />
For example - The X output of a controllinator into a counter of 1 that outputs to both its own reset input and some menu function.<br />
<br />
I have previously described an overly complicated version of this, because in the version of the code I was running at the time, the counter resetting itself took precedence towards resetting and wouldn't output to the rest of the chain. Now a counter can reset itself while still outputting to other devices.Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com1tag:blogger.com,1999:blog-7582346522345149142.post-32987635036065223522010-11-18T14:53:00.000-08:002010-11-18T17:08:44.804-08:00LittleBigPlanet 2 - Signal Inverter.<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3rjEfFdh6dXOQ8gtjn0PY342fvBKO_024DvuA-lhvHBpEEhlhVKkg6wh8Dof6iMyV3Bb7-Xb4hkCbTUNXICgLUdFhAcBk9p0udchx73srODBHCxu4EJH6VAjubO2Wt2g7P5tIkNaRNp9t/s1600/SignalInverter8.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3rjEfFdh6dXOQ8gtjn0PY342fvBKO_024DvuA-lhvHBpEEhlhVKkg6wh8Dof6iMyV3Bb7-Xb4hkCbTUNXICgLUdFhAcBk9p0udchx73srODBHCxu4EJH6VAjubO2Wt2g7P5tIkNaRNp9t/s320/SignalInverter8.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Signal Inverter</td></tr>
</tbody></table>This is an extremely simple utility chip.<br />
<br />
To invert a directional signal you can just take a<br />
(1) directional splitter and then put the + output of that into the - input of a (2) Directional Combiner, and then take the - output of the (1) Directional Splitter and punch that into the + input of the (2) Directional Combiner; essentially reversing the signs.<br />
<br />
Presto!Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com2tag:blogger.com,1999:blog-7582346522345149142.post-67465448704389343692010-11-18T14:36:00.000-08:002010-11-18T17:09:12.386-08:00A pseudo-3D Raycaster in LBP2?... YES!Yes it is true, I am insane. I have been toying the last few days with many ideas to implement a raycasting renderer in the LittleBigPlanet 2 Beta similar to the ones in games like Wolfenstein 3D or Ken's Labyrinth. Of course I don't know if I'm insane enough to implement texture mapping, I think I'd settle for at least differently colored walls.<br />
<br />
Youtube Link here: <a href="http://www.youtube.com/user/MrFoofles?feature=mhum#p/a/u/1/2z9atzuWJ84">LBP2 Raycaster concept</a><br />
<br />
This is not using any glitches (eg. 50 layer glitch) to accomplish its goal and of course would allow full movement on the horizontal plane. I am attempting to raise the resolution but so far my efforts result in catastrophe, the game hates it. I'm still going to try to at least get a better video up.Foofleshttp://www.blogger.com/profile/07471663289517896076noreply@blogger.com0