<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5417138872461097808</id><updated>2012-02-22T13:12:13.929-08:00</updated><category term='object database'/><category term='Techdemo 2011 Movie HD version'/><category term='UV Seams'/><category term='Environment artist needed'/><category term='Berlin vacation'/><category term='Multiplayer'/><category term='MAG lite'/><category term='Back from vacation'/><category term='Deferred Rendering description'/><category term='Game realism'/><category term='Water beginner basics'/><category term='old vesus new'/><category term='Initial ideas for Tech Demo'/><category term='Particles'/><category term='Poop'/><category term='LOD'/><category term='ZBrush'/><category term='Transform Feedback'/><category term='Game details'/><category term='Nostalgia'/><category term='Story'/><category term='Team building'/><category term='Full body awareness'/><category term='Wikileaks'/><category term='lightshafts / volumetric fog'/><category term='Concept Art'/><category term='Sound effects'/><category term='soft particles'/><category term='Table cloth'/><category term='2011 plans'/><category term='Horror theme'/><category term='FBO Switching'/><category term='SSAO / SSGI'/><category term='tech-demo progress'/><category term='doors'/><category term='scripting'/><category term='Day / Night'/><category term='Tower22 Tech Demo 2011'/><category term='TV'/><category term='Cascaded Shadow Maps'/><category term='Hello world'/><category term='T22 Player'/><category term='OpenGL Texture DXT Compression'/><category term='Steep parallax mapping'/><category term='Parallax decal'/><category term='Vacation'/><category term='Mapping on paper'/><category term='Button bash cinematics'/><category term='Making engines or games?'/><category term='first monster'/><category term='Light history'/><category term='Sound'/><category term='game characters'/><category term='HUD'/><category term='Cloth simulation'/><category term='Ghadaffi'/><category term='Auschwitz'/><category term='Collada files'/><category term='Art subsidy'/><category term='Assets / Management of a (game) project'/><category term='Some notes about GI'/><category term='Entity DLL&apos;s for specific game logic / behavior'/><category term='First demo movie'/><category term='movie reception'/><category term='Inferred Rendering'/><category term='DDS files'/><category term='Duke Nukem Forever'/><category term='Software deployment'/><category term='Stubborn programmer'/><category term='Geometry shader basics'/><category term='Poland'/><category term='Railing'/><category term='Game concept document'/><category term='Alternative lighting models with Lookup Textures'/><category term='sofa'/><category term='C++ language'/><category term='Forbidding violent games'/><category term='Corridors'/><category term='high-poly to low'/><category term='Lightwave plugins'/><category term='Geometry shaders'/><category term='project info links'/><category term='New corridor setup'/><category term='Osama'/><category term='replacing sectors'/><category term='portal culling'/><category term='Polish president airplane crash'/><category term='New team members'/><category term='Using specular/diffuse buffers for HDR'/><category term='Portalculling with 2D overlap checks'/><category term='FMOD'/><category term='Tower 22 explanation'/><category term='Lapland trip'/><category term='Maze'/><category term='Profiling'/><category term='Tower22 Object Editor'/><category term='Controls'/><category term='Recording and camera motion logging'/><category term='Triggers'/><category term='Team and 2012 plans'/><category term='HDR fix'/><category term='Importance of graphics and detail'/><category term='Physics (Newton) help needed'/><category term='Note about multithreading'/><category term='Handling input'/><category term='Radar Station and Map design tips'/><category term='healthcare'/><category term='Story fragment #2'/><category term='Recording game movies'/><category term='virus'/><category term='Gaming is for kids? Motion blur on dynamic objects'/><category term='Prototyping'/><title type='text'>Tower22</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default?start-index=101&amp;max-results=100'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>102</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-7973059035128239447</id><published>2012-02-22T12:37:00.000-08:00</published><updated>2012-02-22T13:12:13.948-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Radar Station and Map design tips'/><title type='text'>Making of Radar demo #2: Map Design</title><content type='html'>Ah, another making of post, and a bit delayed as usual. Anyway, where were we? Oh yes, map-design. Designing your worlds, like a game God.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. Mapping: Common sense versus bullshit&lt;/span&gt;&lt;br /&gt;------------------------------------------------&lt;br /&gt;Ideas often start with pictures, snapshots from other movies/games, or weird (day)dreaming. Or being drunk. Smart professors found out that being drunk and/or tired makes you switch over to the creative parts of your brain instead of the logic portion. That's why I keep "&lt;span style="font-weight:bold;"&gt;idea-doodle&lt;/span&gt;" lists. If I saw something on TV or imagined freaky stuff just before going to sleep, I write it down on a paper. These lose, random fragments are not directly suitable for a game though. Nor are rusty factory photo’s from the internet. The Canadian/American army didn't build that Radar Station as a secret party spot for kids that want to get drunk. Neither did the design count on Tower22 or any other action-shooter maps to be made in the future. &lt;br /&gt;&lt;br /&gt;Most buildings focus purely on a certain task. Sheltered, providing all required facilities, storage space, and maybe some comfort if the wallet allows. Now concrete structures aren't exactly meant to be cozy. And unless you're talking about Hitler’s bunker, don’t expect a lot of secret narrow halls, illogical stairs, or spectacular vistas. As for Soviet apartments flats, there is not much to expect other than a central corridor and apartments... over and over again, each store. If you are lucky, there might be an office section, or shops at the ground-floor. But all in all, a skyscraper is one of the most boring places to start a game ;)&lt;br /&gt;&lt;br /&gt;So one of the first things you got to do as a map-designer, is to let go the logics. The player isn't counting toilets or inspecting your building on structural integrity, running water, if the air-ventilation makes sense, if the apartments are up to the ISO norms, or presence of salmonella. He or she wants cool places to explore, have walls and obstacles to cover or hide, find secrets, be amazed by stuff you don't see every day. &lt;br /&gt;&lt;br /&gt;Sounds easy, but that's dang difficult, especially for Beta persons. I'm used to fix (program) things with logical thinking, not with bullshit. It's easy to design a place that makes sense, as you have design-rules and countless of references all around you. Just look in your house, a factory, school, or whatever. But if the map relies on fantasy(nonsense), it gets difficult to make a picture. Imagining one crazy room with weird shapes, floating guts and dancing dragons isn't that difficult. But filling a whole game with it...  &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Powertip&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;* If you like, use realistic structures / locations as a framework, but fill them up with your own sick ideas.&lt;br /&gt;* Write down all ideas, store all crazy pics, and always keep a doodle paper next to your bed.&lt;br /&gt;* There are many photo collections about old buildings and stuff on internet.&lt;br /&gt;* Or just grab the camera and have a look in a factory. Do your homework.&lt;br /&gt;* Dare to experiment! Add or remove rooms you would normally expect, enter a room via a secret corridor instead of a frontdoor, and don't forget to reserve space for bigger "wow!" scenery.&lt;br /&gt;&lt;br /&gt;* Respect the theme. Whether your map needs to be realistic or not, you can't mix up spaghetti with choocolate ice-cream. Variation is needed, but within a certain boundary. Save bizarre ideas that are hard to place for later usage.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-R5H4bAxh6KI/T0VTNs_IeXI/AAAAAAAAAzo/v_LPByKiF9E/s1600/Doom2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 263px;" src="http://2.bp.blogspot.com/-R5H4bAxh6KI/T0VTNs_IeXI/AAAAAAAAAzo/v_LPByKiF9E/s400/Doom2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5712063197268703602" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;The very first room in Doom2, which takes places on Earth apparantly, doesn't make sense already.&lt;/span&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-fdBwCH3t9GA/T0VTf6cuEJI/AAAAAAAAAz0/guvMUQBqSok/s1600/silent-hill-room.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-fdBwCH3t9GA/T0VTf6cuEJI/AAAAAAAAAz0/guvMUQBqSok/s400/silent-hill-room.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5712063510120108178" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Don't even know what I'm looking at here (Silent Hill). Someone had a very bad dream here.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Mapping: Stitching socks&lt;/span&gt;&lt;br /&gt;------------------------------------------------&lt;br /&gt;Rooms need to be connected somehow. And in such a way that it suits your type of game. Action games require lot's of coverage, plenty stuff to blow up, and locations that lends itself for spectacular (scripted) scenes. A Metroid or Zelda game needs to be more open, contain loads of secrets, blocked routes that can be unlocked later, and fantasy architecture that remind you you are in Hyrule or on Zebes, or whatever those planets are called. Tower22 will be about puzzling and exploration, so count those elements in. &lt;br /&gt;&lt;br /&gt;To make things a bit more difficult, it needs to be scary in our case. The Heinz blood-ketchup tool only works for a short while. Your structure needs to be fundamentally f*cking scary to be horror worthy. One dull hallway spoils the climax. Bad lay-out that gives you a sense of safety, and also don’t make things too easy or the fear-factor will be ruined.&lt;br /&gt;&lt;br /&gt;The bottom line, you can't just spray random ideas over your mapcharts. All the places need to be linked with each other in such a way that it challenges the player. Whether that is blasting things up, running for monsters or puzzling your way through. You need to think back- and forward. Room1 may influence room45 later on in the game, or vice-versa.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Powertip&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;* Don't start building blindly. Write down the global game-flow first and use that as a red line.&lt;br /&gt;* Make lists of the items, monsters and puzzles you like to add in the game. So you can pick and mark them on the list.&lt;br /&gt;* Split your world up in sections, chapters, levels, area's. or whatever you like to call them. Making puzzles and routes per sub-section is easier than for the whole game, plus it's also easier to scrap or adjust sub-sections.&lt;br /&gt;* Later on, you can link the sections with bigger-scaled puzzles (find itemX in section1 to proceed in section3).&lt;br /&gt;* Tease. Show interesting stuff that can’t be accessed yet. Reason to keep playing!&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-yosO0wJPfY4/T0VUShd_9GI/AAAAAAAAA0A/1NwEpzgbZ-E/s1600/spencer-estate-floorplan2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 330px; height: 400px;" src="http://1.bp.blogspot.com/-yosO0wJPfY4/T0VUShd_9GI/AAAAAAAAA0A/1NwEpzgbZ-E/s400/spencer-estate-floorplan2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5712064379587916898" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Found this cool pic&lt;/span&gt; &lt;a href="http://awechasm.com/2011/10/27/house-from-resident-evil/"&gt;here&lt;/a&gt;. &lt;span style="font-style:italic;"&gt;It's the floorplan from the Resident Evil mansion. (Virtual) Architect George Trevor sure had weird ideas about making a comfortable home.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. Mapping: Don't Enlarge your penis&lt;/span&gt;&lt;br /&gt;------------------------------------------------&lt;br /&gt;Another important note about map-design, but certainly horror in particular, is the size of your maps. Bigger != Better (that's Nerdish for bigger isn't better), with the exception of Grand Theft Auto or WoW maybe. Development teams often agitate the public by telling "Our world is 8, EIGHT! times bigger this time, covering 100 billion acres in total!!!". And? So? Bigger is only better if the map is filled with useful things. Zelda Twilight Princess had a big world all right, a big empty world. Secrets were too spread, and because you traveled so much I never felt a cozy bond with the location. Which is usually the big charm in Zelda games for me.&lt;br /&gt;&lt;br /&gt;Several war/action-games have big environments too... filled with the same houses, trees and rocks over and over again. At first you're curious what's inside such a house so you explore the area. Later on you just keep running forwards. Screw those details, nothing to do there anyway. I just shoot a few terrorists if I need ammo.&lt;br /&gt;&lt;br /&gt;What I liked so much about Duke Nukem 3D (1995), was its realism. Realism?! Hey don't  forget that all other games of that time took place in dark dungeons or claustrophobic space-stations. Duke Nukem actually had streets, trashcans, cars, shops, and bars. Recognizable elements from real life. But don't mistake, the DN3D maps didn't make that much sense either if you think about it. Streets with 2 dead ends, spaceships, secret tunnels behind posters, green alien goop area’s, flooded cities. They dosed these fun-realistic  elements very carefully. &lt;br /&gt;&lt;br /&gt;When I did my first DN3D maps with the brilliant “Build” editor (my start as a “game maker”!), I always filled the maps with as much as possible. 4 houses, each with toilets, kitchens, bedrooms and everything. 3 bars, 2 parking lots, 10 skyscrapers, and so on. Exploring the first house and finding the toilet &amp; mirror is fun. Seeing it for the second time is less of a surprise. Seeing it three or more times just isn't fun anymore. That's (probably) why the realistic "wow!" sights in DN3D were carefully spread over all the ~30 maps. One level had a cinema. Another level had a bar. Yet another level had a livingroom + toilet. Level X had a sewer-system. Et cetera. &lt;br /&gt;&lt;br /&gt;The moral: don't repeat your ideas too often. If that means you have to reduce the overall map-size, then so be it. Especially horror-scenery can quickly become dull and predictive if you repeat it. If you look at a game like Resident Evil 1, you won't see 5 gardens, 40 bedrooms, and 6 laboratories either. In fact, the game is pretty small. If Jill had a (working) flamethrower and all keys, she could invest the whole building within 30 minutes, like a real Japanese can finish Super Metroid within 30 minutes.&lt;br /&gt;&lt;br /&gt;I hate short games though, so instead of adding more floors with the same stuff to Tower22, the puzzles, monsters and interesting sights should stretch the length. &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Powertip:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;* List all your main ideas (example, I want a lava, forest and ice world)&lt;br /&gt;* Note the sub-ideas, make an "idea tree"&lt;br /&gt;* Try to equally spread the ideas. If one section has too much while the other is empty, shuffle. Or just remove the boring parts if there is no other option.&lt;br /&gt;* Don't start too big. Adding area's can be easier than removing parts.&lt;br /&gt;* Keep closed sections in your maps. A cheap way to grow in size, but you can also fill them later on if you need to stuff more ideas in the same space.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-KgG6UVRRbO4/T0VVwLgXPEI/AAAAAAAAA0M/JpDvPC0Ty6U/s1600/West_Clock_Town.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 216px;" src="http://3.bp.blogspot.com/-KgG6UVRRbO4/T0VVwLgXPEI/AAAAAAAAA0M/JpDvPC0Ty6U/s400/West_Clock_Town.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5712065988599954498" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;One of my all time favourite game vacation spots is Clocktown (Zelda Majora's Mask). A small town, but you can spend many hours here. Finding out what all characters do on a particular time of the day, finding hidden passages, or just have a stroll on a rainy day.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4. Mapping: Review yourself&lt;/span&gt;&lt;br /&gt;------------------------------------------------&lt;br /&gt;Getting started on an idea is always difficult. One day I'm creative like melting butter, the other day it's not coming any further than blocky Wolfenstein 3D corridors. But once you are rolling, it's easy to link a whole chain of ideas and plot them as a superfast matrix-printer on paper. Or Paint in my case. MS Paint? Yeah, you heard me, MS-Paint dammit. Because it boots up within a second and doesn't bother you with anti-aliasing, hundreds of tools, artistic poopbrushes or what else. I just want to draw lines and squares, that's it. Detail is for later.&lt;br /&gt;&lt;br /&gt;Anyway, as said a few times before, you'll have to be a bit careful with your enthusiasm though. Ideas that sound better than sliced bread right now, can still suck if you review them later on critically. But if you spend many hours on drawing the whole map, it's hard to take distance of it. Some ideas just rust into your brains, and you're not open anymore for adjustments or complete different ideas. The same issue also counts for other elements in your game btw. Such as the looks of a monster, the story, et cetera. &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Powertip:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;* Start your maps simple. Don't draw all details yet, just blocky schemes so its easy to adjust shapes or scrap them if needed.&lt;br /&gt;* Make your maps, then let them rest for a few weeks.&lt;br /&gt;* Then look again... Still got that warm feeling about them? Ifso, good for you. If not, just redo them. Probably your second or third attempt combines the best of two worlds.&lt;br /&gt;* Usually I make two or three variants of an idea. Sometimes with a few months or even years between them. Each “iteration”, I pick the best ideas of the previous attempts and mix it with the new fresh ones.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-_lprG9__V38/T0VYGl64ICI/AAAAAAAAA0k/6X3InFb1NwA/s1600/Floor2_LobbyB.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 370px; height: 376px;" src="http://2.bp.blogspot.com/-_lprG9__V38/T0VYGl64ICI/AAAAAAAAA0k/6X3InFb1NwA/s400/Floor2_LobbyB.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5712068572670861346" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;5. Mapping: Radar Station&lt;/span&gt;&lt;br /&gt;------------------------------------------------&lt;br /&gt;Luckily, the Radar Station wasn't part of the game. Meaning I didn't have to follow those guidelines that strictly. So why am I telling that whole story. Dunno :p The Radar didn't have to be playable in puzzling and action terms. The monster down below wasn't even planned originally. Hence, it was meant for testing new objects &amp; physics remember? The idea was to throw a few barrels in the water to show some physics, and have a quick fly-through the building. &lt;br /&gt;&lt;br /&gt;Yet, we got a bit more ambitious... if we want to record a movie here, it should at least breath the T22 feeling a bit. At the same time, this map is meant as a playground to test objects and physics. So I wrote down the requirements. Uh... &lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;- Needs to be pretty big so you can render larger objects as well&lt;br /&gt;- Stairs for (ragdoll) physics&lt;br /&gt;- Water &amp; ice for physics, and because it looks cool&lt;br /&gt;- The camera has to be able to take 1 smooth path through the whole building. Not entering a room and turning 180 degrees each time.&lt;br /&gt;- Not only boring concrete and metal s'il vous plait&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;But on top, don't forget we're dealing with a radar. As said, the building didn't have to make perfect sense. Hell, I don't even know how a real Radar structure looks from the inside, other than from a few photos and N64 Goldeneye. Yet I could do some suggestions of course:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;- Control room: Charts and computers and stuff&lt;br /&gt;- Storage space: Small warehouse&lt;br /&gt;- High building, so... stairs, elevator&lt;br /&gt;- Personal: restrooms, beds, dressrooms&lt;br /&gt;- We wanted ice and water, so... open roof maybe? &lt;br /&gt;- How about... a radar dish?&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;With that in mind, it was only a matter of making rooms for each of those ideas and linking them in a somewhat logical, yet playful way. Got to mention that I didn't have a real good idea of how each room would look yet. Just draw a square in Paint and write "Barracks" or "Control Room". The texture setup and micro-details such as junk or rusty decals were for later concern.&lt;br /&gt;&lt;br /&gt;All in all, the Radar isn’t exactly the scariest building ever made. You could find such a thing in reality maybe. Yet did we follow the 4 rules mentioned above? Logic mixed with nonsense, check. The building has no front door, there is a hole in the roof, some places aren’t accessible, and no idea why you would need fuel drums in a radar. Connecting the rooms properly? Played with stairs, ladders and dark tunnels… Size of the map? Not too big indeed. All ideas we’re only used once, so that makes each room interesting to explore. Did we review ourselves? Erh… I did, while writing this ;)&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-f8nULAZXRQ8/T0VZNpBlloI/AAAAAAAAA0w/-DSAZ4Wg3zM/s1600/RadarRender10004.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 273px;" src="http://3.bp.blogspot.com/-f8nULAZXRQ8/T0VZNpBlloI/AAAAAAAAA0w/-DSAZ4Wg3zM/s400/RadarRender10004.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5712069793275025026" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;After the floorplans were made a bit, I made a simple mesh so the others could have a better look as well. 2D floorplans are fun, but it's hard to tell what someone has in mind without seeing any 3D shapes and colors.&lt;/span&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-ABDb41vOlZc/T0VXPSwb6tI/AAAAAAAAA0Y/BGu5fuJDBzU/s1600/F0_CenterRedLamps2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 294px;" src="http://4.bp.blogspot.com/-ABDb41vOlZc/T0VXPSwb6tI/AAAAAAAAA0Y/BGu5fuJDBzU/s400/F0_CenterRedLamps2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5712067622633990866" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-7973059035128239447?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/7973059035128239447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2012/02/making-of-radar-demo-2-map-design.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/7973059035128239447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/7973059035128239447'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2012/02/making-of-radar-demo-2-map-design.html' title='Making of Radar demo #2: Map Design'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-R5H4bAxh6KI/T0VTNs_IeXI/AAAAAAAAAzo/v_LPByKiF9E/s72-c/Doom2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-5962179088270660159</id><published>2012-02-14T13:23:00.024-08:00</published><updated>2012-02-14T15:14:55.351-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lapland trip'/><title type='text'>Avalanche</title><content type='html'>Before continuing the "Making of Rambo V" (somewhere later this week), I'd like to share some ice cold stories about our little family trip to Lapland. Lapland? Yep, north Sweden, above the &lt;a href="http://upload.wikimedia.org/wikipedia/commons/thumb/3/31/Arctic_circle.svg/350px-Arctic_circle.svg.png"&gt;Arctic circle&lt;/a&gt;, where Santa and Rudolf lives. And the terrible stinky Yeti. And broken trains, but that's another story. So if you plan an icy vacation some day, put on your thermo-pants, make some hot choco, and lay down on your reindeer fur at the fireplace.&lt;br /&gt;&lt;br /&gt;Now Lapland wasn't my idea for a vacation. Those are either beer-vacations somewhere in Western Europe, or family visits in Poland. But moms and dad thought it would be a good idea to see some more snow. It was only -18 degrees Celsius in Holland, and even the goats in Morocco bleated around, carrying a snow blanket. So, why not? Nah, the "extreme" weather (-5 is already extreme in our books) was a coincidence. Anyway, why the hell would you pick an arctic place in the middle of nowhere, instead of cocktails and a sunny beach?&lt;br /&gt;&lt;br /&gt;Well, one reason to go might be the chance to see northern light. Which we sadly didn't see. No twilight zones and magical colours from other dimensions in the sky. Another reason might be to fulfill your adventurous needs, steering the sledge with a pack of fanatic Husky dogs that run as if they were on rabies. Which we didn't do either, as we have a little girl that wants to be carried around like a lazy princess, too young for wild journeys. Or, maybe you just don't like tropical beaches that much. Like me.&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-Vd0JbTrBfXQ/TzrTRsa-SCI/AAAAAAAAAv4/VqqvzRkIzvw/s1600/snow.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-Vd0JbTrBfXQ/TzrTRsa-SCI/AAAAAAAAAv4/VqqvzRkIzvw/s400/snow.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5709107778581055522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Snowbeach&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Damn snow… Simple tasks become a challenge&lt;/span&gt;&lt;br /&gt;----------------------------------------------&lt;br /&gt;When it comes to traveling and "doing stuff", I'm quite a boring person. Yet I'm curious how people live in harsh places such as worn Soviet flats, or ice-cold Lapland in this case. And yes of course, those observations might be useful for Tower22 &amp; horror stories. How can a person make a living in a depressing concrete monsterflat, or in constant cold? Sure, happiness and fun when it starts snowing. But is it still fun when you are surrounded by thick snow layers many months each year? Now we might be a bunch of sissies, but when it snows a little bit, our whole economy freezes with it. Miles of traffic jams, people stuck with trains, busses and planes. Too cold for outside jobs like construction work. Worried about getting the houses warm (including the gas price). And also the smaller activities become true challenges. My daily 2 x 30 minutes bike tour to work could become 2 x 60 minutes + a bruised butt. And each time you walk outside, you have to carefully dress yourself. And clean the house again when walking back in with those clumsy snowboots. Shit, even taking a piss outside is dangerous with these colds (and nearly impossible when wearing 3 trousers). You have to plan forward.&lt;br /&gt;&lt;br /&gt;But luckily, we all know the snow is only a temporarily thing. Hence, a standard Hollandish winter doesn't even have snow on the menu. So when it happens, sunshine is at prospect. And in the meanwhile we make the best of it with charming activities such as ice skating, hot drinks, “snert” (thick pea soup), and if you are lucky, a day of school/work. But living in those conditions for many months, each year... And in darkness (days are shorter or the sun doesn't even come up in the early winter months.&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-eXc9Zvg20xA/TzrWGUHelWI/AAAAAAAAAwQ/k4nC6ItY-Uw/s1600/carInSnow.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/-eXc9Zvg20xA/TzrWGUHelWI/AAAAAAAAAwQ/k4nC6ItY-Uw/s400/carInSnow.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5709110881613157730" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Goddammit not again!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. Isolated&lt;/span&gt;&lt;br /&gt;----------------------------------------------&lt;br /&gt;But what may concern me even more about such places, is the isolation. Sweden / Scandinavia doesn't have a dense population (9 million Swedish, ~10% of them living in Stockholm, others spread over a large country), and you can imagine the average person doesn't go up north for more snow either. Lapland is mainly made of pine forest, and has a few very small villages (you can count the number of houses on two hands) here and there. Fine, I'm not a city-person either. Don't need to be surrounded by loads of people, traffic and urban ghetto shit all day. Yet I find it a comfy feeling to know that the facilities are within reach. Supermarkets and school are a few minutes walking. If you need a computer, car or other luxury article, it can be found next door as well. And if you want to get drunk, a couple of bars within a 5km radius, and otherwise the bus to the most nearby city drives every hour. Whether you need a Thai massage or a hotel for your dog, it's all within reach, even if you live outside the village on a farm. That's because Holland is one of the most dense populated places in the world (on average). It’s near impossible to find a spot where you can’t see a house or human-made structure here.&lt;br /&gt;&lt;br /&gt;Sweden, and Lapland in particular on the other hand, are a bunch of mini-villages. I have no idea how kids are going to school. Hopefully for them, there is a bus stop, but it will be quite a ride every day I suppose. Same thing for shopping or going out. You don't just step out the door and yell "back at 01:00!" to your mom... there is nothing. As said before, every action needs to be planned. And where do people work? With little people, there is also little needed. You can't start a kebab store in a town where you know each neighbor, and has a few 100 visitors per year at most. Construction workers don't have to build entire new suburbs either. If it isn't the cold, than it's the lack of residents that makes their work impossible. Agriculture in these conditions? Not possible. Even the oldest profession in the world is probably boring herself.&lt;br /&gt;&lt;br /&gt;If you think Lapland has poverty, think again. Things are pretty expensive here(especially alcohol!), and at the same time the living standard is high in Scandinavia, including Santa's territory. How they make all that money? Not sure, but I guess quite a lot people take a long bus/train ride to the most nearby city for work, eventually staying there whole weeks in a hotel. Plus I guess live just goes a bit more "relaxed" here. Instead of shopping little bits each day, they probably have their own winter-supplies. Brewing their own apple cider and stuff... And if the harsh weather gives a halt, people just deal with it, stay home, or do something else. Other than us stressed Dutchmen, wrecking our cars trying in the attempt to reach work/school/gym/.../ at all costs.&lt;br /&gt;&lt;br /&gt;But asides the practical problems, how about the isolated feel? Humans are social beings. And whether you live in Lapland, a ghost-town in Chernobyl or the Sahara desert, things get pretty lonely if you only see a handful of (the same) people every day. Not that I talk to every person on street, but just their presence makes me feel like a living being with a purpose too. Well, it probably just depends on what you're used to. Also Lapland-people have jobs, houses, work, family and friends. But in a different mixture than we're used to. Yet, according to some statistics, Scandinavia scores pretty well when it comes to depression, alcohol and suicide… Now you know why so many thriller books are written there ;)&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-LuD-6mOphHA/TzrUocGL_hI/AAAAAAAAAwE/b0AP0iqWnSA/s1600/IMG192.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-LuD-6mOphHA/TzrUocGL_hI/AAAAAAAAAwE/b0AP0iqWnSA/s400/IMG192.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5709109268847525394" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;In the foreground, a piece of the graveyard next to a little church... See the stones? The dead are sure burried deep here!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4. Prejudicies?&lt;/span&gt;&lt;br /&gt;----------------------------------------------&lt;br /&gt;So, that's the picture I had in mind. Depressing lonely dark locations combines with Christmas-like scenery and stunning nature, wooden houses with 3 meter thick walls to keep the cold outside, and reindeer-beef. But... are those stereotypes valid? As said before, it's amazing how fast you can adapt to different situations, and start feel comfortable or at least familiar with it. People are scared of strange/different situations, and it's a typical Western flaw to think that everything that does not have widescreens, internet, macDonalds and bars can't be a happy place. And btw, Lapland has all those things. Anyway, there is only one way to find out: have a taste yourself!&lt;br /&gt;&lt;br /&gt;Moms and dad booked a hotel in Kiruna(&lt;a href="http://www.webbkameror.se/webbkameror/kirunakommun/kirunakommun_1.php"&gt;webcam&lt;/a&gt;). Kiruna is just a village too, but seems like a whole city compared to all the other micro-towns in that region. But to review a part of our queest already; a "city" like Kiruna is probably not representative for the typical Lapland way-of-livig. People ride cars instead of dog-sleighs, shops and schools are nearby, houses are made of concrete instead of pinetrees, despite the cold quite a lot of people on the streets, and there is WiFi everywhere. So far my sad lonely isolated picture of Lapland...&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-jbjWo-axWzU/TzrW_V6orXI/AAAAAAAAAwc/p5qtEZss6sQ/s1600/FrozenTower.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/-jbjWo-axWzU/TzrW_V6orXI/AAAAAAAAAwc/p5qtEZss6sQ/s400/FrozenTower.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5709111861348707698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Frozen Tower22&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;5. Fasten your seatbelts... erh.. wait a minute...&lt;/span&gt;&lt;br /&gt;----------------------------------------------&lt;br /&gt;You can reach Lapland by plane, but we chose the adventurous approach: plane + sleeping train. Which turned out to be quite a fiasco, but more about that later. We would take the train in Holland to Schiphol, our international airport. From there, a less than 2 hour flight to Stockholm, the capitol city of Sweden. On Arlanda airport, we would take the night train to Boden, a village in Lapland. That includes sleeping in the train, as this ride takes about half a day. The last ~4 hours would be travelled with another train, to our destination.&lt;br /&gt;&lt;br /&gt;Did I tell before that I'm not much of a traveler? I hate rushing with bags and little kids that don't want to walk theirselves or otherwise run all directions. And I hate flying even more. Really, the whole vacation is overshadowed by the knowledge we got to fly there first (and back as well). The long crowded queues, heartwarming security checks, waiting with impatient kids while aircrash investigation is on TV, the smell of fear from fellow-travelers that are afraid of flying too... Screw the "flying-is-the-safest-transport-method" statistics. When I'm not in control and have a 100% chance of death when a stupid sensor malfunctions or a lazy worker forgot to remove ductape from the altitude meter, I don't feel comfortable. Once we take our seats, I'll keep focused either on the crossword puzzles in a magazine, or on the steward-faces. As long as the lady smiles, we're not dead yet. But every little bump or corner the plane takes, freezes me further into the chair. My vacation does not start until the wheels skid the ground again. And the weird thing is, it gets worse each time. First times I wasn't afraid at all, but maybe that’s because I didn't brought my family with me in this flying death coffin. Also the (fake) bomb  threat and evacution we had once at Eindhoven airport didn’t help much. Man, I really hate flying.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;• Hey, another (probably fake) bomb threat on Schiphol according to the radio, right now. Comfortable.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-DqKQY4RYYVQ/TzrYMTd8XkI/AAAAAAAAAwo/KS6RmaMm-_k/s1600/ByeHolland.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/-DqKQY4RYYVQ/TzrYMTd8XkI/AAAAAAAAAwo/KS6RmaMm-_k/s400/ByeHolland.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5709113183541419586" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Let me out!&lt;/span&gt;&lt;br /&gt;But how ironic...the only thing that went well on this whole shitty trip, was the airplane. First of all, we didn't take our train to Schiphol. If you are Dutch, you already know why. …drum roll… The trains were stuck due the weather, as usual. So, we had to take the car. Yeah, we all complain about the NS and ProRail when the damn train doesn't arrive again because squirrels took a crap on the railroad. Good thing we're going to Sweden, those Björns know how to deal with snow. Right? Well fellow Dutchmen, a cold comfort. We're not alone. In all countries I have been, the trains don't drive properly either. In Poland, the old Soviet trains drive on seemingly random schedules and are late even in summers. In India, trains crash and explode at insane speeds of 2 MPH. In well-ordered Germany, our train had delays too. Years ago, in  France, we got stuck on a station for hours and hours (and of course none of the personal wanted to speak English). Our complains about NS and Prorail might be valid, but don't forget we have one of the most complex and dense rail networks in the world (&lt;a href="http://en.wikipedia.org/wiki/Nederlandse_Spoorwegen"&gt;Wiki&lt;/a&gt;). In Sweden, the one (and only?) railroad going to the north wasn't functioning. Twice.&lt;br /&gt;&lt;br /&gt;While waiting on Arlanda, we found out the train didn't drive at all, and neither was there a guarantee it would go one day later. In that case, our vacation would have a very early end. Flying twice in two days, exactly my boys dream. The annoying thing is that nobody informs you either. No telephone message, no (English) intercom messages on the airport. If we didn't ask ourselves, we would have waited 5 hours for nothing. On a goddamn airport, of all places. But wait, SJ(Swedish Railways) did send an email... As if a foreigner has internet (paying 5 billion euro per megabyte once outside his country) enabled on his phone...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;6. Stockholm&lt;/span&gt;&lt;br /&gt;----------------------------------------------&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-Gessn3Wk-g8/Tzrau6vfKKI/AAAAAAAAAxA/boR-ezcoa2c/s1600/Stockholm2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/-Gessn3Wk-g8/Tzrau6vfKKI/AAAAAAAAAxA/boR-ezcoa2c/s320/Stockholm2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5709115977222793378" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-uJUlg2nDR50/TzraqqqVcFI/AAAAAAAAAw0/lFu02HeaMU4/s1600/Stockholm1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/-uJUlg2nDR50/TzraqqqVcFI/AAAAAAAAAw0/lFu02HeaMU4/s320/Stockholm1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5709115904186740818" /&gt;&lt;/a&gt;&lt;br /&gt;Luckily, our father works in Sweden (did several constructions like petrochemical factories and currently the Olympic stadium in Stockholm), so we visited the hotel he sleeps every week. The plan was to wait one day, see if the train would go on Sunday. And otherwise, go back home.&lt;br /&gt;&lt;br /&gt;Poor dad got a chance to see the people he sees every week in the hotel, and eat what he eats every week there. And we just bored ourselves in the hotel lobby, waiting for an update about the trains. God had mercy for once, the train would go that evening. So the rest of the day, we took a walk through Stockholm. Finally we got rid of the stress and all that luggage for a moment. Why do girls always need to take the entire H&amp;M with them for a week of vacation? And guess who gots to carry it. Next time I put a bag of cocaine between her clothes so I get rid of all that luggage.&lt;br /&gt;&lt;br /&gt;Stockholm is a typical Europe city. Not super high-tec or skyhigh. Lots of shops, old but beautiful buildings cropped on each other, canals, and narrow medieval streets. All covered with a thin layer of (salty gray) snow and cozy lights. It could be grasped from a brothers Grimm book. We just took a random route through the streets, and finally entered sort of Irish pub / sports café for beer &amp; diner. How about the cuisine Rick?&lt;br /&gt;&lt;br /&gt;Well, what do you think when you hear Sweden? IKEA, Abba, population having more (blonde) girls than guys, snow, not a bad football team, and erh... Pippi Longstocking. Honestly I don't know that much typical Swedish export products. No idea about the food either. Of course, you can eat hamburgers, fries, pizza and spaghetti in each and every restaurant (also in Lapland). But a true Swedish dish... IKEA (tm) Meatballs, reindeer steak and some fish? Didn't see much else exotic plates or power-soups on the menu cards. Nevertheless, don't worry about the amounts. Despite the relative high prizes, you get full plates, Viking+ quality. Nothing to complain. Might have something to do with your body needing more fuel when operating in cold temperatures. Didn't see fat Swedish people either by the way.&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-a_VYVs90YVc/Tzra4wTvAWI/AAAAAAAAAxM/CJ3HRKz2-fE/s1600/StockHolmNarrow.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-a_VYVs90YVc/Tzra4wTvAWI/AAAAAAAAAxM/CJ3HRKz2-fE/s400/StockHolmNarrow.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5709116146220728674" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Narrow old streets. Love them.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;7. All on board, The night train&lt;/span&gt;&lt;br /&gt;----------------------------------------------&lt;br /&gt;Finally, after waiting some more on the station (so far our vacation consisted 70% of waiting with luggage), we could board the train. Being angry at public transport is very human, but let me add some nuance. As said, Sweden isn't exactly dense populated. So what happens if the train gets stuck in the middle of nowhere? As I write this, the radio tells about a train actually being stuck in the mountains nearby Montenegro, where they have the baddest-ass winter in 60 years right now. You can imagine a warm train quickly becomes a fridge when caught by the snow, minus 30 outside. SJ just doesn't want to take that risk. I respect that decision. Only too bad SJ would screw again on our way back home...&lt;br /&gt;&lt;br /&gt;Anyway, the train was moving now, although we weren't sure how far it would reach within Lapland. If the rail ahead would become too risky, busses would take over. But for now, we were safe. So, let's go the restaurant wagon, and enjoy beers for only 6 euro each(7,80 USD!!). And enjoy the sightseeing of course. Made of... darkness. Hey, it was night, and no house or lights to see most of the part. But otherwise your vision would be mainly filled with snow, pinetrees, and a lot more pinetrees. Make sure to add the word "Pinetrees" if someone asks you about Sweden next time.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-8g3JEnNufE8/Tzrb4i-rvAI/AAAAAAAAAxY/VaXZshR6R7g/s1600/Pineforest.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/-8g3JEnNufE8/Tzrb4i-rvAI/AAAAAAAAAxY/VaXZshR6R7g/s400/Pineforest.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5709117242154400770" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Your trainview, around 15:00 o clock btw&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Didn't sleep too well in the bumpy trainwagon, but all in all, it was pretty comfortable. It sure beats the hell out of flying for me. The only annoying thing are the long stops. If trains have to pass each other, one has to wait on station since there is only 1 rail most of the part. We arrived at Boden somewhere around 12:00 next day. Too late, but luckily the other train was so kind to wait for us. Imagine you're sitting in that other train, going to work, having to wait for another darn train to arrive... As said, people are probably more laidback when it comes to scheduling around here. Just go with the flow, trying to fight nature is a lost battle here.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;8. Hot!&lt;/span&gt;&lt;br /&gt;----------------------------------------------&lt;br /&gt;Monday night we finally arrived in Kiruna. Well, not night really but the sun went down around 15:00 already. The first thing that surprised me was the crowd. Not like the idea of a remote village with people hidden in "bunker-houses" deep below the snow. Forget it. Cars, traffic lights, busses, people having a stroll with the dog, et cetera. Hotels were mainly filled with workpeople and their laptops. Little people here, so software services, machinery maintenance and other experts come in from all over the world here I guess. It might be in a remote area of this planet, Kiruna isn't retarded. The town has all comforts from any other Western location. I only missed the bars a bit. There are About 5 pizzarias, but didn't really see pubs or clubs for the youth.&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-nbw89zne2QI/Tzrd7J-UBoI/AAAAAAAAAxk/hIkzs0jwblA/s1600/IronOreMineLapland.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-nbw89zne2QI/Tzrd7J-UBoI/AAAAAAAAAxk/hIkzs0jwblA/s400/IronOreMineLapland.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5709119486004823682" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Right next to Kiruna there is an impressive iron ore delving area. That explains the contractors with their laptops everywhere.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Another surprise was the cold, which wasn't that bitter actually. Temperature indicated -23 C I believe, but it didn't feel that bad. Seriously, having a smoke outside at work in Holland feels colder than this. Of course, I'm not wearing snowboots and thermo underpants while having a smoke in Holland. Wearing good clothing makes a gigantic difference. But it also seems the air is less humid here. Thus less frozen moustaches, and achy lungs when breathing in. No really, the cold wasn't a problem at all this vacation, except if your legs are tired and you want to sit for second... don't.&lt;br /&gt;&lt;br /&gt;Speaking about cold, they sure know how to heat up buildings here. Hotels, busses, trains, it's awful warm inside everywhere. Your body gets a 50 to 60 degree difference slap in the face each time walking in and out. I'm not kidding you if I tell we slept with open windows in the hotel. Stick your hand through the window and it's -20 to -30. Pull your hand back 10 centimeters and it's 28 degrees. Good thing Lapland has a small population, otherwise the world gas and coal supply would be burned here within days. Maybe that answers the question of where people work here… timber!&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-xlX8PXCCvnw/TzrewGoL0xI/AAAAAAAAAxw/zMp98sg-ODU/s1600/Church.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/-xlX8PXCCvnw/TzrewGoL0xI/AAAAAAAAAxw/zMp98sg-ODU/s400/Church.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5709120395639771922" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Even the church was damn hot&lt;/span&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-zZeCkzaldhg/Tzrfh29hseI/AAAAAAAAAx8/V7PERw6ORyM/s1600/Kiruna.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-zZeCkzaldhg/Tzrfh29hseI/AAAAAAAAAx8/V7PERw6ORyM/s400/Kiruna.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5709121250427777506" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;9. Ice hotel&lt;/span&gt;&lt;br /&gt;----------------------------------------------&lt;br /&gt;So the idea of a red frozen nose and having a chilly uncomfortable temperature everywhere was wrong too. At least for the places we visited... Except the ice hotel. This time the thermostat was set on minus X. Nearby Kiruna, the famous ice-hotel can be visited. First I have to clear up another wrong assumption; you won't be sleeping in a hotel of ice. There are chalets right next to the “hotel”, as you can take dog-sleigh rides here and go on adventure as well. But the hotel itself is more like an artwork, an ice-sculpt to be more accurate.&lt;br /&gt;&lt;br /&gt;As the name sais, the entire structure is made of big blueish iceblocks. And like a real hotel, it has a lobby, real working sliding doors, a bar and a whole array of rooms. Not all, but many of those rooms have been touched by an artist(s), giving it a certain theme. Artists from all over the world reserved a room to get creative with the sculpting tools.&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-zGWwJzN7Iis/TzriTS6mVnI/AAAAAAAAAyI/Pa3pnCxrZTk/s1600/IceHotel1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/-zGWwJzN7Iis/TzriTS6mVnI/AAAAAAAAAyI/Pa3pnCxrZTk/s400/IceHotel1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5709124298768537202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-kggQqPf48U8/TzricmzsCgI/AAAAAAAAAyU/XpmbT6zTQM0/s1600/IceHotel2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-kggQqPf48U8/TzricmzsCgI/AAAAAAAAAyU/XpmbT6zTQM0/s400/IceHotel2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5709124458727082498" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-wEAhXPtickI/TzrimKrbgfI/AAAAAAAAAyg/RXvTjoMXe98/s1600/IceHotel4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="http://4.bp.blogspot.com/-wEAhXPtickI/TzrimKrbgfI/AAAAAAAAAyg/RXvTjoMXe98/s400/IceHotel4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5709124622974943730" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Each room has its own theme&lt;/span&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-WgPhlFPPVaI/TzrivUn-CVI/AAAAAAAAAys/wUjaOGAYCy8/s1600/IceHotel5.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/-WgPhlFPPVaI/TzrivUn-CVI/AAAAAAAAAys/wUjaOGAYCy8/s400/IceHotel5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5709124780263606610" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;For some reason, this makes me think of&lt;/span&gt; &lt;a href="http://www.thearnoldfans.com/pictures/ABking-2011/2065757663_93e8b99397_m.jpg"&gt;Conan the Barbarian&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;10. Sami&lt;/span&gt;&lt;br /&gt;----------------------------------------------&lt;br /&gt;About 1 kilometer down the road from the ice-hotel, you can see a more traditional lapland, and a real reindeer park (read a garden with 3 or 4 hungry reindeers). You get a bag of moss so you can feed the deers, which is big fun for the little ones of course. We have talked about trains, hamburgers, WiFi and glowing hot hotels. But the traditional Laplandians, "Sami", didn't live that way of course. And now that your feet are a bit frozen from the walk in the ice-hotel, you finally get a sense how harsh living can be here. It gets colder, no traffic anymore, and human structures make place for pineforest and frozen lakes as you walk out inhabitated area.&lt;br /&gt;&lt;br /&gt;Sami are like nomads, travelling around with their dogs and livestock. They made huts made of skin, that can be best compared to Indian Wigwams. Dig a hole in the snow, setup your wigwam, and let a kettle of crap boil above a small fire in the center of the tent. Supplies, clothes and livestock we're stored in simple wooden structures, sometimes setup a few meters above ground to prevent foxes, wolves or wolverines to get in for chicken nuggets.&lt;br /&gt;&lt;br /&gt;Believe it or not, there are still (a few) Sami. Probably equipped with modern comforts such as a cellphone, GPS and maybe a snowscooter. But nevertheless, it must be quite an adventure to live that way. Being one with nature. Of course, with our little girl we can't walk for hours outside. But if you really want to taste Lapland, I would advise you to go out with a sleigh, snowscooter, or rent a car to explore the area. Be prepared though, there is no help nearby if you get stuck! And another tip: reserve a car already before you go on vacation. We tried to rent a car in Kiruna, but as expected already, bad luck struck us again this vacation. No cars available.&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-SOFBWZnL6aw/Tzrk4af9iyI/AAAAAAAAAy4/XCwoDb7-MbQ/s1600/SamiHut.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-SOFBWZnL6aw/Tzrk4af9iyI/AAAAAAAAAy4/XCwoDb7-MbQ/s400/SamiHut.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5709127135482710818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;I'm looking for chief walking-tree&lt;/span&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-nDIe07MdurE/Tzrlq0Wsr4I/AAAAAAAAAzE/Ljd5XhdJx-Q/s1600/Reindeer.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/-nDIe07MdurE/Tzrlq0Wsr4I/AAAAAAAAAzE/Ljd5XhdJx-Q/s400/Reindeer.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5709128001416638338" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;11. Going home&lt;/span&gt;&lt;br /&gt;----------------------------------------------&lt;br /&gt;We planned to be 3.5 days in Kiruna, but due the problems with the traintrip, we only had 2 days. Too bad, we didn't see that much, neither northern light. But it was time to go already, so we waited for the sleeping train... Which didn't @#% come again. Some Swedish voice announced it, but translating it to English is not their strongest skill. Luckily a good man explained us we had to hurry to a bus, cause the locomotive was broken down or something.&lt;br /&gt;&lt;br /&gt;We expected a rough ride already, cause a piece of rail was damaged along the track. It would mean we had to get out the train around midnight, take the bus for a few hours, then enter another train again. So much for sleep in the sleeping train. But plans changed a bit. We would first travel by bus for 4 hours, then take the train at Boden and go directly to Arlanda airport. Sounds reasonable, and I got to compliment the busdriver for driving 100 kmh on the snowy roads (tires &amp; spikes). Yet we weren't sure if the train would arrive in time at the airport. Any further delay would mean we would miss our airplane.&lt;br /&gt;&lt;br /&gt;After spending 40% of our vacation at airports, hotel lobbies and trainstation benches, you can imagine we got pretty sick and annoyed by the idea of having to wander around on an airport for half a day again. Farticles. sure they don't it on purpose, but SJ screwed up our journey quite a bit.&lt;br /&gt;&lt;br /&gt;We got lucky though. The train was late indeed, but luckily Arlanda airport isn't stuffed with endless queues so within 30 minutes, we were already sitting in the plane. Good for me, I hate waiting at airports. And the plane took off like a charm. No turbulence, friendly ladies, and even the free sandwich tasted pretty well. Shit... would that mean I actually... No no no, still hate flying.&lt;br /&gt;&lt;br /&gt;To finish the vacation with a happy end, dad’s luggage got damaged. Don't know whether they placed his bag in the jet turbine or just dragged it over the floor behind a cargo car, but it looked as an old pirate cannonball fired a hole in it. Bag kaput, contents of the bag lost. Hurray.&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-08M-mLy6faA/Tzrnz0T3qtI/AAAAAAAAAzc/SWTgIQkcXgo/s1600/FunnyHouse.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-08M-mLy6faA/Tzrnz0T3qtI/AAAAAAAAAzc/SWTgIQkcXgo/s400/FunnyHouse.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5709130355046853330" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;12. Conclusions&lt;/span&gt;&lt;br /&gt;----------------------------------------------&lt;br /&gt;All in all, the vacation was too short to really see or do something. In other words, a bit disappointing. But hey, it’s nobody’s fault the weather got a bit extreme even for Lapland standards. That's also forms my main advise, respect nature's authority here. Buy good warm clothing, be prepared and plan forward, but also have back-up plans in case trains or busses don't drive. It's probably wise to add some extra length to your vacation in case you have to skip activities on harsh days. Yes, Sweden is expensive so reserving extra days is a bite in your wallet, but since you probably won't visit Lapland each year again, you'd better take the max out of it once you're there. Reserve a car (well in advance), and be mobile so you can enjoy a good walk or ride in Lapland’s nature. The further you get away from populated areas, the more chance you'll see northern light as well. And last but not least, keep your thermo underpants on. Hmmm, love them.&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-EE_fFvaOyyk/Tzrm-bDDBqI/AAAAAAAAAzQ/-vjk7Bw4nm8/s1600/DogSleigh.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-EE_fFvaOyyk/Tzrm-bDDBqI/AAAAAAAAAzQ/-vjk7Bw4nm8/s400/DogSleigh.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5709129437732341410" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-5962179088270660159?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/5962179088270660159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2012/02/avalanche.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/5962179088270660159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/5962179088270660159'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2012/02/avalanche.html' title='Avalanche'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Vd0JbTrBfXQ/TzrTRsa-SCI/AAAAAAAAAv4/VqqvzRkIzvw/s72-c/snow.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-7591868227011194080</id><published>2012-01-31T11:51:00.000-08:00</published><updated>2012-01-31T14:14:08.687-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Initial ideas for Tech Demo'/><title type='text'>Making of Radar demo #1</title><content type='html'>Not sure, but asides those who google “Far hairy lady/pussy”(dirty bastard!) and end up at our infamous demo1 topmodel according to the blog-traffic-statistics, I suppose most of you are curious about game-programming, or making games in general. So why not tell a little story about how that Radar Station was made? So ladies, for this week, and the upcoming ones, a little peek behind the scenes.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-l8sFv4ybLNU/TyhMh8Wk69I/AAAAAAAAAvg/5wKGonlY8sg/s1600/nitTanks.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 325px;" src="http://2.bp.blogspot.com/-l8sFv4ybLNU/TyhMh8Wk69I/AAAAAAAAAvg/5wKGonlY8sg/s400/nitTanks.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5703893074084948946" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Headquarters&lt;/span&gt;&lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt;When reading a book, you try to visualize things. Who's the protagonist? How does his house look? How would you imagine the woman referred as "the ugly lady with red curls and anchor tattoo"? Your eyes read the letters, your brain sets up the décor at the fly. But when watching a movie remake, it’s usually way off (and therefore maybe disappointing) of your own imagination version.&lt;br /&gt;&lt;br /&gt;So let me give a helping hand in case you’re trying to visualize our situation. Forget the romantic scenery and programming stereotypes. We don’t have an office or a cool room decorated with T22 concept art and a whiteboard showing complex level designs or mysterious programming formula's. The reason is pretty simple. There is no team to meet. At least not in real-life, as all of us are living thousands of kilometers away from each other. Spain, Netherlands, USA, Germany, UK; not your typical weekly trip. So far communication is done via email, sometimes via Skype, and telekinesis of course. The bottom-line: I don't even know how half of my partners look!&lt;br /&gt;&lt;br /&gt;As for having a "game-dungeon"  in my house... That would be pretty cool, and I can play Resident Evil without having to worry about our little girl, or getting kicked away by the girl who thinks doing 2 hours of Nintendo per year is more than enough for a grownup man. Yet, I'd better not isolate myself elsewhere in the house. Probably I won't see my child growing up and such. Ah, we don't have much space anyway, asides from a dusty attic.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So usually I just sit in the couch. Girl watching Polish soaps, little girl watching Mickey Mouse on the right half of my laptop, daddy programming scary stuff on the left side of the screen. You wouldn’t see the difference if I was playing WoW, or watch porn. Or, oh well, you get the point. Working days then? Oh yes, like the other team-members, there is a daily job. Or actually 2 in my case. And not surprisingly, as a programmer (harvesters, pharma-machines,  database stuff).&lt;br /&gt;&lt;br /&gt;Once home, it's dinertime &amp; playing with the little ape. When she goes to bed around 8 ó clock, I tell her a story (stopped reading fairy tales, those are freakin scary and she got a lot of nightmares about wolves and witches lately :) ). But then… I put on my captain Ultrabyte superhero programming spandex + 8-bit goggles + external underpants, to sit in the couch again with the laptop. Girl watches TV and talks, I hear half of what she says. When I’m captain Ultrabyte, I only speak Turbo Pascal. But to make it up, I usually take a break around 22:00, then continue my hero-activities till 01:00 or 02:00.&lt;br /&gt;&lt;br /&gt;Yep, that's pretty much how it happens every day. Except on beer-drinking days then. When not programming I'm usually drinking beer with friends, do stuff in the house, make diner for the girls(= demolish the kitchen), try to sport a little bit, or, sigh, got to go shopping with the girls. Yay.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-LEXlo5l75W4/TyhmmMMr8kI/AAAAAAAAAvs/EHFx_DPmlnI/s1600/IMG054.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/-LEXlo5l75W4/TyhmmMMr8kI/AAAAAAAAAvs/EHFx_DPmlnI/s400/IMG054.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5703921734360232514" /&gt;&lt;/a&gt;&lt;br /&gt;All in all, lot's of sitting &amp; computers, and pretty dull. That's why beer-drinking events are healthy. None of the friends/family is really into gaming, let alone programming, and neither do I bother them too much with binary jokes. Same story for pretty much all colleagues at work. Prevents being a game-nerd 100% of the time. Believe it or not, most people, including parents, don't even know about Tower22. I just rarely talk about programming or games, unless someone is really interested&lt;br /&gt;(or when writing here).&lt;br /&gt;&lt;br /&gt;How the other team-members do it? No idea! They just work as well, in some cases also as freelancer on other (game) projects, do their other hobbies, and some of them have kids as well. So they mainly work on T22 in their free night hours as well. When there are ideas, questions or something to show, a mail pops up (got a bit obsessed watching the mailbox the whole day for that reason). And each Friday I'll send a mail to everyone, sharing the progress. Other than that, no fixed meetings, or strict rules. That makes team-progress a bit slow, then again the laidback athmosphere makes the whole thing enjoyable instead of a second or third stressy job. There are more important things than programming games.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The Radar-Station-Motivation&lt;/span&gt;&lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt;Sounds like a disco-track title. Anyway, now that you have a slight visual on our work situation, let's proceed with the scene being used in the last Demo movie. It's called "Tech-Demo" for a reason; the scene isn't part of the T22 game, neither does it contain gameplay elements. Why spending so much energy on something that does not appear in the game? Uhm...&lt;br /&gt;&lt;br /&gt;Somewhere last spring or summer, Sergi joined the team. He would make props mainly. Props are objects to decorate the scene with. Boxes, barrels, computers, furniture, lamps, stinky corpses, et cetera. Very common for pretty much every 3D game. Well, an artist can model a trashcan in Max or another package, eventually using a concept drawing or photos from the internet. But then what?&lt;br /&gt;&lt;br /&gt;What you make in Max, is not exactly what you get in your game engine. Rendering techniques are different, and a game-prop needs to do more than being beautiful only. We want to throw, shoot, kick or interface with that trashcan! What we needed was a playground. A test-environment that uses the actual game-graphics / physics / sounds /.../. Not only to fine-tune the object, but also to give feedback to the artist.&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-2DhWvw___jo/TyhLMuGiLaI/AAAAAAAAAvU/gSasSNswNpw/s1600/ObjEd1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 239px;" src="http://3.bp.blogspot.com/-2DhWvw___jo/TyhLMuGiLaI/AAAAAAAAAvU/gSasSNswNpw/s400/ObjEd1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5703891609970683298" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Shot of the Object-Editor. Now that simple textured object does not give the artist a good idea of how an object will look / feel.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you spend 5 hours on making a soup-kettle object for the game, you want it being used, ASAP please! It does not satisfy if your 3D file disappears somewhere in the dusty virtual archives for future usage. Unfortunately, this is what often happens in hobby projects. The technology is not far enough to actually use the props, and/or programmers just don't understand the needs of an artist. Thanks for the kettle object, looks cool, bye. That does not really motivate to make an even cooler stove object, does it?&lt;br /&gt;&lt;br /&gt;So, for practical usage and for the fun-factor, I started making the "Object-Editor". As the name sais, you import your raw 3D meshes here and define an object:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; - Meshes (in several levels of detail)&lt;br /&gt; - Physical collision shapes &amp; properties (mass, name, materialtype)&lt;br /&gt; - AI script (link to a DLL that does object specific behavior)&lt;br /&gt; - Animations&lt;br /&gt; - Eventually sub-objects, connected with joints or motors&lt;br /&gt; - Define special sub-objects (lights, sprites, particles, cloth, ...)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;The combination of that crap forms an Object file that can be used in the game later on, typically when decorating empty environments(maps). Like the Sims "buy" modus. &lt;br /&gt;&lt;br /&gt;Asides constructing the object, you can test it. The view toggles to a game-map, eventually with full graphics enabled. Then you can watch your object in several setups (bright, dark, water, skylight, ...). But also throw it around to test impact effects/sounds and see how the physics work. Does it float or sink in water? How far does it slide on ice? What happens if your give your ragdoll a Porrasturvat stair dismount? Not all of those features already work btw, but that's pretty much the goal.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Mapping Ideas&lt;/span&gt;&lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt;This requires a testing-environment with some varying situations. Bright rooms, dark rooms. Water for buoyancy, wind for blowing away light stuff, icy surfaces for low-friction physics, stairs of course and an overall pretty big space that allows to throw with stuff, also larger objects. Your typical Tower22 apartment would be too small for that so I thought about a... bunker... Not just because bunkers can be made relative big, they are also easy to do. A bunch of concrete, and even more concrete. Voila, done. Hey, we shouldn't waste too much time on a playground that never reaches the game right?&lt;br /&gt;&lt;br /&gt;As usual, such ideas are shared with the others via mail. Before doing idea X, I first want to make sure everyone agrees, and give a chance to bring up better ideas. Then Julio came with photographs of an old abandon Radar station. This radar, built in Canada in the cold war era, was part of big string of radars that had to intercept Russian (nuclear) missiles. As we know by now, they better spent that money on buying bigMacs or Russian Vodka for that matter. But at least it delivered a bunch of nice photos. What caught my interest in particular, was the flooded &amp; frozen bottom part of the building. Perfect for physics, and it looks pretty spooky as well.&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-OXGBivjw9fc/TyhGurwPbjI/AAAAAAAAAvI/eaR4_TdGY4c/s1600/RadarStation.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 301px;" src="http://4.bp.blogspot.com/-OXGBivjw9fc/TyhGurwPbjI/AAAAAAAAAvI/eaR4_TdGY4c/s400/RadarStation.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5703886695897722418" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Another salient detail, instead of intercepting missiles, it's a place to drink &amp; party for kids nowadays.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes, the flags were set. Frozen Canadian bunker-radar-thing, we got you! Of course, at that point we didn’t know yet how to fill it up. And it was certainly not meant for a demo movie! But the nice thing about ideas is that you can bend them. And I realised, with a little extra care, this scene could be useful for another small movie to show. Why not? Anyway, next time I tell you more about: map design, modeling the maps, making props and how to plan stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-7591868227011194080?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/7591868227011194080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2012/01/making-of-radar-demo-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/7591868227011194080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/7591868227011194080'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2012/01/making-of-radar-demo-1.html' title='Making of Radar demo #1'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-l8sFv4ybLNU/TyhMh8Wk69I/AAAAAAAAAvg/5wKGonlY8sg/s72-c/nitTanks.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-2995437538905640796</id><published>2012-01-19T04:04:00.000-08:00</published><updated>2012-01-19T04:11:56.464-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team and 2012 plans'/><title type='text'>In the year 2012</title><content type='html'>Time to write a new love letter to this blog, don't you think? The video got received well so far, and maybe, with a bit luck, we may even appear in a real paper magazine! Isn't that just awesome? I remember reading those Club Nintendo and game magazines (PU in Holland) every month, carefully sucking up details because who knows... maybe your game will be reviewed some day! Ok, since this is a game-programming magazine, the article won't be a real preview of Tower22 where the writer played the game and makes pictures with funny jokes of it. It's more focused on the development, the team behind it, and getting some facts about the game. Anyway, I keep you updated!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As for the Uncle Sam-needs-sick-horror-fans-with-drawing-or-3D-skills recruitment session, we got about 12 offers so far. It's less stormy than a year ago, but maybe that's also an indication our requirements are formulated better. Previous year the offers would vary from good to very bad, and from 3D artists to Peruvian panflute bands we didn't ask for. So, I can't complain. so far three candidates have been selected. Still not the uber-artist I may have dreamed off, but it's probably a bit unrealistic to expect Pixar-dudes to browse the "Unpaid jobs / MOD help" forums, looking for an extra hobby project. Previous time I cheated a bit by placing the request on a "Freelance" forum (per accident) instead.&lt;br /&gt;&lt;br /&gt;Skills and some natural talent are surely important. But maybe an even more important factor is devotion. Like most skills, artists will improve themselves if they work long enough on something. We programmers need art, them artists need a challenge, so we help each other out. But the amount of work (or will to work) we spend on it, differs for each person. You could have 10 supertalented people, game-Ronaldinho's. But obviously, if all those talents only have a few hours on unreliable random intervals, it's still going to fail.&lt;br /&gt;&lt;br /&gt;And just maybe... maybe the somewhat less experienced boys &amp; girls have more time on theirvhands. They're not spending 40+ hours on Toy Story 4 each week. So while a professional comes home with a headache of being creative all day, a starter loves to spend all his free night hours on drawing / modeling / composing... And where a professional may get bored quicker cause he's been there and done that, a starter may be more passionate about a project.&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-DwgINiO1itY/TxgIOyLrFgI/AAAAAAAAAuw/lMv00U9DDek/s1600/Warehouse2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 294px;" src="http://1.bp.blogspot.com/-DwgINiO1itY/TxgIOyLrFgI/AAAAAAAAAuw/lMv00U9DDek/s400/Warehouse2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5699314378519287298" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We'll see. I think the guys who mailed me make a nice addition to the team. If it really works out can't be foreseen by looking how talented someone is. Their love and devotion for the project is what excels them in the end, not skills alone. Some are enthusiast and helpful. Others join a team, then come up with excuses every week because they found out they rather spend their free time on something else. Playing World-of-Warcraft, sleeping, girls, whatever. Personally I don't believe the "extremely busy with work" excuses that much. Of course work(+family) can eat all your time, leave you dead-tired and incapable of doing anything productive. But not for weeks/months in a row. And yes, I have a kid and two jobs as well, so I know what I’m talking about. In the end it's your decision how you fill up the hours before going to bed or your weekends. There is always some time for the things you truly love!&lt;br /&gt;&lt;br /&gt;But you can't force anyone of course, unless you pay their salaries. Neither can I expect a newcomer to share the same enthusiasm and love for the project. They just want to apply &amp; improve their creative impulses on something useful... like a promising game project! So it's my task to keep them locked &amp; loaded with challenging, fun-to-do assignments. Makes sense right? Most people just do what their boss asks on work. If the boss has nothing interesting, some will suggest or create their own work... but most others start Mine-Sweeper or take a nap at the job. Can't really blame them either...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This was one of the things I had to learn in 2011 (and still have to learn); keeping them at work with satisfying tasks, following a good strategy. It's not that I had nothing to do for them. Christ no, there are thousands of objects, textures, drawings and sounds I can think of. But you have to dose it in a good way, at the right time. No one likes modeling a stupid Ming vase that *might* be used for a map in a far future. No, distillate the tasks that are relevant and have to implemented right now. Don't bombard them either with 40 assets they can choose from. Just don't bother them with details that aren't important yet. If they really wanna know, they ask you anyway&lt;br /&gt;&lt;br /&gt;At the beginning, I thought it would be gentle to let the whole team think with every decision. Democracy you know. We can do A or B... or C if you like. Then half of the team has a different opinion you hoped for, or just doesn't reply which makes everything hold up. Since I was afraid to pick a direction that the others may not like, I asked and shared everything. And since I don't want "my artists" to spend their time on jobs they don't really like, I also gave them pretty big lists so they could pick their own tasks, allowing them to make their own schedules. Now that's sweet, right? Too bad it doesn't really work though. To compare with the chief at the office again, what would you do if your chief gives you 100 tasks that need be done "some time", "maybe"? Exactly, it would be chaos. Everything will be delayed as long as possible, tasks will be forgotten, et cetera. If the boss doesn’t really care about task-X, then why should you? It's not your responsibility to create a strategy and vision for your company. That's what the boss is for! What else he gets paid for?!&lt;br /&gt;&lt;br /&gt;It's not I'm leading Tower22 on Stalin-style now. I still ask what people prefer, and allow them to think with me, if they like. But at the same time, I must prioritize and make a clear plan for the next half year. If there are doubts or no answers from the team, then just follow your intuition. Don't stand still at each intersection point, and don't always try to find solutions that each and everyone likes. Keep your project going, and keep your artists doing what they really like; modeling, drawing, making sound, et cetera. And if they can't, just move the task to someone else.&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-kKqFixoQt6s/TxgIYohG87I/AAAAAAAAAu8/9xzY_slVolI/s1600/Radarblob%2BConcept.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 293px;" src="http://3.bp.blogspot.com/-kKqFixoQt6s/TxgIYohG87I/AAAAAAAAAu8/9xzY_slVolI/s400/Radarblob%2BConcept.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5699314547723531186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;This is how the monster looked in earlier versions of the room&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2012&lt;/span&gt;&lt;br /&gt;---------------&lt;br /&gt;So captain Costa Concordia, where are we heading to? I tell you. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1.) Game-time.&lt;/span&gt; So far the T22 TechDemo movie got praised for sound and graphics. Nice of course, but that still doesn't make a game a game. So as for programming, I will focus on making it playable. A full-screen "game.exe", a human player to control, physics that CAN climb a stair (damn that's hard), a basic GUI (menu's, bars, inventory) and animations. That's why "GUI Designer" and "Animator" we're mentioned in the movie as well btw. That probably takes me at least half a year. Robert will try to finish the player model as well.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2.) Demo 2.&lt;/span&gt; The artists will focus on drawing and then producing the contents for a next (and possibly last) demo. This demo will show real T22 gameplay again, not just a flight through some wacky radar station. So, that gives me a also a good testcase for goal 1.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3.) Tower22 preparations.&lt;/span&gt; Hopefully we will get enough concept-art time this year. The concept-artist(s), Brian(writer) and me should develop the ideas further for T22. The whole thing is already done by me, but I need input to fill in the detailed spots. Plus the long boring texts have to be transformed to pictures. Most important to get us started on the game content, is to have the first section of the building designed, so after Demo2 we can start on that.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4.) Graphics?&lt;/span&gt; Not much planned for the next months, but I should improve the performance. One trick is to optimize passing shader parameters. So I'll be looking into OpenGL's "Uniform Buffer Object" some day. I let you know.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;5.) Programming help.&lt;/span&gt; It hurts the ego, but I may need 1 or 2 (Delphi) programmers to get some load of the shoulders. They will be making specific parts of the GUI, and improving the tools the our artists use. I let you know once it’s needed.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;6.) Blog.&lt;/span&gt; I'm planning to write a "Radar Station" making off, and a Newton physics tutorial that handles character controls. But only if I succeed in making a controllable character myself! Luckily Julio Perez, the creator of Newton (the engine, not the guy) noticed T22 and is making a demo already. That should help me getting on the tracks.&lt;br /&gt;&lt;br /&gt;Sounds like a lot? Never said making games was easy! Ship ahoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-2995437538905640796?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/2995437538905640796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2012/01/in-year-2012.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/2995437538905640796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/2995437538905640796'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2012/01/in-year-2012.html' title='In the year 2012'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-DwgINiO1itY/TxgIOyLrFgI/AAAAAAAAAuw/lMv00U9DDek/s72-c/Warehouse2.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-6581617443765928442</id><published>2012-01-12T15:43:00.001-08:00</published><updated>2012-01-12T22:51:57.372-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Techdemo 2011 Movie HD version'/><title type='text'>Higher Quality movie</title><content type='html'>Where were my damn bumpMaps son?! We spend so much time on micro normalMaps, parallax maps, and cockroaches on the floor. But the low-res blurry video made it look as if the game was illegally recorded by an old phone in a dark room on a (cheap) game conference.&lt;br /&gt;&lt;br /&gt;Well, here you got it again, HD. Say hello to the details, although some of them also might reveal visual glitches. Like pornstars being afraid their hemroids become visible on HD movies ;)&lt;br /&gt;&lt;iframe src="http://player.vimeo.com/video/34987098?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="400" height="300" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen&gt;&lt;/iframe&gt;&lt;br /&gt;Still not as sharp than I would like to see, but a whole lot better than the previous blurry mess!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-6581617443765928442?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/6581617443765928442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2012/01/higher-quality-movie.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/6581617443765928442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/6581617443765928442'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2012/01/higher-quality-movie.html' title='Higher Quality movie'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-1103163353693870277</id><published>2012-01-09T14:25:00.000-08:00</published><updated>2012-01-12T23:27:34.057-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tower22 Tech Demo 2011'/><title type='text'>After the commercial break... Another movie!</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/-ljI28ZotM3k/Twtq6uyAfvI/AAAAAAAAAuk/MsASxN2h0x4/s1600/Warehouse1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 294px;" src="http://4.bp.blogspot.com/-ljI28ZotM3k/Twtq6uyAfvI/AAAAAAAAAuk/MsASxN2h0x4/s400/Warehouse1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5695763710962859762" /&gt;&lt;/a&gt;&lt;br /&gt;Hey boy, hey girl, here we go... It took almost as long as creating episode 3 for Halflife2, but there it is; another movie. Tech-movie I might add. Said it before, and I'll say it again: the purpose of this movie is to show you some visuals, and a piece of scenery that *could* but in Tower22 (but it isn't :p). Why? Well, why not. And oh yes, to attract some help on our team of course.&lt;br /&gt;&lt;br /&gt;Compared with the movie one year ago, there are some obvious changes:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;- This new tech movie does NOT show you the typical horror or game elements&lt;br /&gt;- All the textures and sounds are created by ourselves, no more borrowing from other games. And in case you didn't know, yes the whole engine is created in-house as well.&lt;br /&gt;- The sound quality should be quite a lot better. Video is still blurry though, but we'll try Vimeo within a few days. Maybe that allows to upload a higher-res variant of the video.&lt;br /&gt;- All in all, it should look and sound quite a lot better. I hope so.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Just saying. It's funny, but maybe tricky at the same time, how false rumors can spread like napalm fire. Before you know it, the player is called Robert (which is not true), the game was created with Java, I'm working as an astronaut, et cetera. Not all "journalists" actually take some effort to read the sources. They just copy from each other. Believe it or not, but I already saw on some site that T22 would be released half 2012. It even had a score (7.5 if I remember correctly). Uh... apparently they have a nearly finished version of the game! Maybe I went back in time like the Terminator to give them a game copy. Whatever.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now it's true that Tower22 does not have a clear project description. We're working on that, although the story and some game-elements will remain a secret anyway. The website is still a bit empty, but expect some updates soon. Starting with a new screenshot overview. Other than that, we shouldn't bother too much what others say. Yet when someone starts comparing this with Crysis2 and says T22 sucks, it feels a bit unfair sometimes. So one last time: it's just a tech-demo, made in far from finished engine, in the night hours, on a 0$ budget. So, there you have it :p&lt;br /&gt;&lt;br /&gt;Enough talk already. Grab some peanuts, and chase away young kids from your room:&lt;br /&gt;&lt;iframe src="http://player.vimeo.com/video/34987098?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="400" height="300" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;And a superduper, turbo-pascal, creative, fancy, moody, farty, healthy 2012!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-1103163353693870277?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/1103163353693870277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2012/01/after-commercial-break-another-movie.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/1103163353693870277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/1103163353693870277'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2012/01/after-commercial-break-another-movie.html' title='After the commercial break... Another movie!'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-ljI28ZotM3k/Twtq6uyAfvI/AAAAAAAAAuk/MsASxN2h0x4/s72-c/Warehouse1.jpg' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-4076572042007672863</id><published>2011-12-26T14:37:00.000-08:00</published><updated>2011-12-26T14:40:14.145-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Recording and camera motion logging'/><title type='text'>Take 48, cut</title><content type='html'>Next post will contain a movie release. Unless I get heartfailure while stuffing myself with Christmas food.&lt;br /&gt;&lt;br /&gt;For those who expect another gameplay / spooky horror trailer, I'll have to disappoint you a bit. It's a "Tech-Demo". Which means it shows graphical stuff mainly. The goal is not to please gamers. Screw you, the whole purpose is to attract more 2D / 3D talent :p Ok, ok, we added a little present that might please you as well ;) Nah, the movie could represent a Tower22 part (although T22 does not take place in military looking Radar Stations). It's a little taste of how things *could* look (and even better)... IF we get a team strong, talented and motivated enough to help me through that is.&lt;br /&gt;&lt;br /&gt;One problem to tackle with this next movie is the recording quality. Main issues last time were the hellish sounds and overdone blur. Both caused by the combi of Tower22 and FRAPS taking the same CPU resources. Two mangy dogs fighting for a stinky shoe. Two old ladies arguing about the TV channel. Two hoes pulling each other’s (pink)hair for a pimp. Two &lt;fill in yourself&gt;. Anyway, a year passed by, plenty of time to evaluate and prepare better for a next time. So what did we do? ...Ehr...&lt;br /&gt;&lt;br /&gt;Doing homework was never my strongest skill. In contrast to Postponing. So I started sweating again for the recording session. The desktop computer used for recording has a newer video-card, so the good news is that it should have some more firepower this time. Then again, this new demo is quite a lot more advanced than Demo1. More lights, more shading tricks, more textures and objects, et cetera. On top, I didn't try the engine for half a year on that computer. Oh boy.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As expected, the framerate crippled again, but not as bad as previous time. After some optimizations, FRAPS and T22 eventually got in Sweet Harmony. Sort of, at 20 frames per second. That's still not smooth as silk, but already better than the previous time, plus the resolution has doubled as well. Maybe we can squeeze out a few more frames. &lt;br /&gt;&lt;br /&gt;A far better approach would be recording the video-card (HDMI?) output with an external device. Like you could record your Super Mario Paint(snes) movies on VHS. Hmmm, maybe I should buy a digital camcorder or something. Let it store the video-card output on a disk, then read the digital file back on the computer. Never tried it, but it sounds like a valid plan. And otherwise you'll have to do with a more jerky movie :p&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-B2T5CvE9O48/Tvj2UVvSr7I/AAAAAAAAAuM/yVWsfMfA95w/s1600/BathroomSketch.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 286px;" src="http://2.bp.blogspot.com/-B2T5CvE9O48/Tvj2UVvSr7I/AAAAAAAAAuM/yVWsfMfA95w/s400/BathroomSketch.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5690568958475939762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Still have to pimp a few rooms. Julio takes a snapshot of an existing room, adds some photosoup magic, then passes it back so I can try to achieve the same thing with the engine.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;One thing I could solve software-o-matic, was the camera path. Like in real movies, it sometimes takes several cuts to record a scene. Or did you think Commando was recorded in one single shot; Carry tree, smile horrible while daughter puts ice on nose, smell enemies, get down, kill enemies, daughter gone, get captured, kill guy and say he's dead tired, jump out of plane, go to shopping mall, throw telephone cell, drive, chase, crash, throw little guy from a cliff, &lt;a href="http://www.youtube.com/watch?v=inTRblYTevk"&gt;fuck-you-asshole&lt;/a&gt;, infiltrate hangar, window shopper, get busted, get freed, fly to a tropical island, undress, boat, dress &amp; makeup, kill a few with tactical stealth tricks, kill 10 dozens more being absolutely not stealthy, kill with an Uzi, kill with a shotgun, shed fight, get in the villa, shoot gringo warlord, go to the basement, get shot in the shoulder, knife-fight with a fat moustache man in a chain mail (hu?), blow some steam Bennett, found daughter, happy, -fin-. Bang, 90 minutes.&lt;br /&gt;&lt;br /&gt;Arnold Schwarzenegger has awesome acting skills, but not so awesome to shoot this movie in a single 90 minute-breath. Hey, not even fucking Commando himself can do that, cause the timeline was spread over 12 hours in the movie. Enough kidding. Of course movies take multiple shots, with multiple camera's. And afterwards, the best parts are pasted together.&lt;br /&gt;&lt;br /&gt;With games that use a first-person-camera, this isn't so easy. If the camera suddenly shifts 30 centimeters to the left, or if the lighting suddenly goes a bit darker, the viewer will notice this "discontinuity". Do it too often, and you'll get an epileptic attack. Movies tend to switch the camera viewpoint every 5 seconds or so. This "switching" helps hiding discontinuities. Maybe the actor moved 10 cm to the left, maybe the sun stopped shining, maybe he lost his boner a bit(other type of movie). Or maybe a plane just happened to fly over the Coliseum, roughly 2000 years ago. Neither did I know a camera crew was taking part of the &lt;a href="http://www.youtube.com/watch?v=6Xk8dyS00Gs"&gt;battle in Ramelle&lt;/a&gt;. The point is, the viewer doesn't notice because (s)he's focused on the actors, and the camera switching hides faults too. Hence, did you know T22 Demo1 was made out of 2 parts as well? When the player runs the stairs up, a second movie was used at some point. Yep, when the camera switched from third to first person view.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This time I won't be switching camera views, so everything has to be recorded perfectly in one time. And that's difficult! You have to make sure the camera captures all the wanted "hotspots". Not too long, but not too short either. We amateur camera-men tend to record things boringly-long, or in turbo-pace. If you know what you are seeing, focusing on it for 2 seconds seems like an eternity. &lt;br /&gt;But for another viewer that is not familiar with the scene, it takes at least a second to re-focus. I always get dizzy and sick of those MTV shows where the camera crew seems to be on speed. Yo biatch, my kitchen, home cinema for real, here’s where it all happens in the master bedroom, 50 inch rims, now get off my property. 10 billion shots, they sure show a whole lot. I just have no idea what I just saw the last 10 seconds. Too fast. Anyway, finding the right pace for a movie shot is very important. And last but not least, the camera has to follow its path in a somewhat natural, curvy way.&lt;br /&gt;&lt;br /&gt;In my case, I have to navigate the camera for ~6 minutes (that's how long the movie takes) without making faults. With a jerky mouse. With FRAPS and T22 arguing for (CPU) resources. With a little kid making noise in the background. With a girl that starts talking about, ...-hell I don't know- while you are sweating and recording the whole thing. You can't do it in 2 or more parts, cause it's just impossible to redo the exact same camera path. So at the stitching points, you suddenly see the camera hopping to another point, the lighting changes, et cetera.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-FHZnDxaP2m4/Tvj2vmaRLQI/AAAAAAAAAuY/0q4vF84H_EM/s1600/Stairs.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 290px;" src="http://2.bp.blogspot.com/-FHZnDxaP2m4/Tvj2vmaRLQI/AAAAAAAAAuY/0q4vF84H_EM/s400/Stairs.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5690569426807631106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Moving the camera down a stair, with a curve, is difficult enough already. Doing it twice exactly the same is impossible.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;span style="font-weight:bold;"&gt;Do the loco-motion logger&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Hey... But I got a little idea! Nothing new really, yet very useful. What if you lock your family outside, don't run FRAPS, and run a "motion logger"? Yeah, just store the camera view every (few) cycle(s). In my case, I made a little class that stored the camera matrix 15 times per second. Just directly writing it in an opened file-stream. If you are really cool, you make a background thread that fills 2 buffers and store those in a filestream, but that wasn't necessary for the little amount of data in my case. To give you an idea about file-sizes,&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;---- 5 minutes  =  5x60  x  15(fps)  x  matrix(64 bytes) = 282 kilobyte&lt;/span&gt;&lt;br /&gt;That isn't too bad. Otherwise you may store quaternion’s instead of matrices to save more space.&lt;br /&gt;&lt;br /&gt;Now that we have the camera path stored, we can redo the navigation with a click on the button. Store all matrices in a gigantic array or better, make a (background) streamreader that fills a buffer with matrices each X seconds. Then calculate the actual camera matrix by interpolating between the current and next frame matrix. The path is 99% identical to the one you recorded earlier. Eventually you can relax and edit parts now, or let the computer calculate a spline to get a more smooth route. &lt;br /&gt;&lt;br /&gt;In case your girl started talking about spaghetti or your little brother kicked your legs while recording, causing your mouse-hand to do make a jerky movement, it's relative easy to polish. Let the camera follow the path till the point where things went wrong. Stop it, hit the capture button again, and now do a second attempt. The newer part should fit seamlessly with the previous one.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When you're finally happy with the camera route, you can finally record the movie for real. Just let the camera roll over the railtrack again, sit back, and relax. Even when the video capture program causes a jerky framerate, the camera will keep stable cause no human input is needed anymore. What a relief.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-4076572042007672863?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/4076572042007672863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/12/take-48-cut.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/4076572042007672863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/4076572042007672863'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/12/take-48-cut.html' title='Take 48, cut'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-B2T5CvE9O48/Tvj2UVvSr7I/AAAAAAAAAuM/yVWsfMfA95w/s72-c/BathroomSketch.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-6924647912212420454</id><published>2011-12-18T11:36:00.000-08:00</published><updated>2011-12-22T15:03:21.985-08:00</updated><title type='text'>Turbo Boosters</title><content type='html'>One visitor asked; &lt;span style="font-style:italic;"&gt;"Dear Santa. Where do all those magical presents(effects) in your T22 world come from? And how do you prevent the sleigh from crashing down when loading more and more of them? Yours truly, Nick, 7 years old, Nebraska.'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Well boys and girls. If you think the Tower22 engine ("Engine22") is fast as hell, ho-ho-ho, no. To the facts; currently the "Radar Station" maps run at a pounding ~17 frames per second on my laptop. Of course that depends a bit on the view. When staring at an empty corner, the speed may be an acceptable 28 fps. When looking at multiple rooms that also contain a dense cloud of litten particles, the laptop switches over to Burger-King-gravy speed: ~12 or even less.&lt;br /&gt;&lt;br /&gt;The laptop is getting old though. 32 bits, and moreover, "just" a GeForce 9800M GTS. A game like Crysis Warhead doesn't run smoothly either, though faster than this. My other desktop computer gets far better results. It's also a 32-bit dual-core relic from the past, but with a better video card (EVGA GeForce 4700 GTS). The first Demo movie for example ran about 25 frames per second on the laptop (the dark empty corridors faster though). And near to 60 fps on the desktop. Another comparison. The "Radar Station" we're working on now (almost finished!) started at 25 fps on the laptop. And now after adding more textures, more effects, more lamps and more objects, the framerate dropped to the ~17 mentioned earlier. No idea how it will behave on the desktop, but I guess it will be "acceptable". Well it better damn be! Otherwise we'll get that annoying motion-blur again due the relative large cycle intervals ;)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-u4ezJZz2Sj4/Tu5D4Ap-jSI/AAAAAAAAAtc/g31P4uCZD1k/s1600/Barrack5.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 291px;" src="http://3.bp.blogspot.com/-u4ezJZz2Sj4/Tu5D4Ap-jSI/AAAAAAAAAtc/g31P4uCZD1k/s400/Barrack5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5687558008943316258" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Compare this to &lt;a href="http://2.bp.blogspot.com/-dr3udecGOTg/TlEqo8EH3sI/AAAAAAAAAh0/-W_S8vlhhTE/s1600/Barrack%2BBeds.jpg"&gt;this&lt;/a&gt;. At least the framerate dropped for a good cause :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For gaming, such a low framerate sucks ass of course. Ever played Doom1 on a 386? You wanted to play the game so badly so you kept pushing, but the PC really said “please no! Stop it!”. For development though, a lower speed is "ok". I'm not playing, just flying through the maps to check coding adjustments or to decorate the maps. That's also the reason why I barely touch the much faster desktop computer. With a laptop, you can at least code in bed, in bath, on the toilet, while being  kidnapped by al Qaida, or wherever you are. So, I prefer mobility over speed in this case.&lt;br /&gt;&lt;br /&gt;Also have to notice that "dropping performance" happens in a gradual way. It's like getting fat; you don't gain 10kg after a week of snacking (unless you drank 6 kegs of beer in a mug like this &lt;a href="http://farm3.static.flickr.com/2675/4120808808_f4343e4207_o.jpg"&gt;-blurp-&lt;/a&gt; ). It's not that the framerate suddenly cripples when adding effect-X. Nah, usually it just slows a tiny little bit. You barely notice it, so, nothing to worry about. But all those tiny bits together...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As said, the performance cannot be compared to commercial engines. Simply, I have too little time and less experience to make it lighting fast. Then I don't worry that much about it either. It will still take years to finish this game, so performance tweaking right now is a bit of a waste of time. 2 years later there will be faster hardware, plus some of the techniques we're using might be replaced by then. Especially things like (ambient) lighting And the parallax effect showed earlier also keeps getting smarter, faster algorithms. So, I'll just take a look at some of those techniques in a few years from now again. Well, in fact, 1 or 2 graphics-programmer experts can help by then. Optimizing shaders, give professional advice, find bottlenecks, et cetera. But at this moment, maximum performance is certainly not a priority.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-gljlKPnyypA/Tu5MWLssQKI/AAAAAAAAAto/bHWokpo07io/s1600/Sink_TileWall_POM1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 295px;" src="http://1.bp.blogspot.com/-gljlKPnyypA/Tu5MWLssQKI/AAAAAAAAAto/bHWokpo07io/s400/Sink_TileWall_POM1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5687567323396587682" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;No, the damage on those tiles wasn't there first. It's just a flat decal, faking depth with Parallax Occlusion Mapping...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nevertheless, that does not mean we just blindly adding features. First of all, an effect needs to be worth it. There are dozens of papers that show awesome stuff. The next best things to sliced breath... ahum, in theory. But more than often they come at a high cost, and/or require a very specific implementation that may restrict other things in your rendering  pipeline. Take BRDF's for example. By using real-world sampled data and specific formula's, you can create a (far) more realistic look on your materials. Gold doesn't reflect light in the same way as velvet, concrete or a freakn grapefruit for that matter. Yet most games treat all the surfaces with the standard "Blinn" or "Phong" lighting model (which explains the plastic or metal look on softer surfaces such as skin or wallpaper). Why not using BRDF's then? Well:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;- Hard to fit in a deferred/inferred rendering pipeline (cause the lamps have to check on each pixel what kind of material they were made from, then have access to the BRDF parameters somehow)&lt;br /&gt;- Only 0,1% of the artists knows how to make BRDF (image) data. And most of the programmers don't know how-to either.&lt;br /&gt;- And even if they did, it requires fucking professor hardware for the BRDF acquisition. You can't just draw them by hand you know...&lt;br /&gt;   &lt;br /&gt;- As for the end-result (thus with several lamps, blurs, SSAO, ambient, reflections, post-filters and a ton of other effects applied), an untrained viewer barely notices the difference between a concrete wall rendered with Phong or Oren Nayar.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;So is it worth it... Hmmm... Eventually probably yes. But as long as we need the performance elsewhere, techniques like BRDF, or slightly sharper shadows are usually exchanged for more noticeable things such as sexy blurs or being able to put more objects in the scene. The Parallax effect is discussable too. Google for "Parallax Occlusion Mapping", and you'll see that the coolest screenshots always placed the camera right next to a brick wall or on the floor. But how many times will you see surfaces from that close really? When you got killed and fall onto the ground maybe, but otherwise the parallax effect, and certainly the subtle "self-shadowing" effect is hard to notice. Yet it comes at a very high cost. That's why we only use it for rough surfaces with obvious height differences. It's a pretty cool effect, and hardware starts to allow it. But if you run out of rendering-power, POM would be one of the first things to ditch I'd say.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-IgMoAj87Y88/Tu5M1cQ19yI/AAAAAAAAAt0/0bjELfSLQ9o/s1600/Sink_TileWall_POM2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 292px;" src="http://3.bp.blogspot.com/-IgMoAj87Y88/Tu5M1cQ19yI/AAAAAAAAAt0/0bjELfSLQ9o/s400/Sink_TileWall_POM2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5687567860419131170" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Cool, POM and shit(Parallax Occlusion Mapping). But do you still see the effect now? Same wall (below the sink), but zoomed back to a more realistic viewing distance...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Second things about maintaining our performance. When I do add an effect, I'll try to do it in a smart way. GPU's are powerful but hate to get interrupted. It's not like a multi-tasking woman that can phone, cook, chat, watch the kids, and clean the house at the same time (at least she thinks she can). Best is to create batches and do as much stuff as possible in one call. Sort out data, try to render bigger chunks with the least "state changes" as possible. That's pretty hard these days with so many different effects being pre-processed in the background. ShadowMaps need to be prepared, Animated objects such as cloth or characters may need to stream their data to a VBO or texture first, you'll need depth, velocity and all kinds image data before you can render SSAO or motion blur, and so on. What you see in the Tower22 screenshots is only a small portion of what really happens on the GPU. Before it starts rendering screen content, it draws shadowMaps, cubeMaps, mirror(for water reflections), and plenty of other things.&lt;br /&gt;&lt;br /&gt;To prevent getting slower than a tranquilized panda, these steps are combined if possible. With MRT (Multi Render Target) different types of data are rendered to different textures, but in the same pass. Which means I only have to call the GPU to draw the world geometry once. I also sort the steps on screen resolutions so that the GPU has to less switching between Frame Buffer targets on different resolutions. Just a grasp.&lt;br /&gt;&lt;br /&gt;Yet another trick to speed up is sparing bandwidth by using compressed textures, or keeping the geometry as much as possible on the videocard itself with VBO's (also for skinned/animated things). The latter means that the triangles and additional vertex data for, let's say a monster-model, is already present on the videocard. So we don't have to re-send all the triangles from the RAM memory to GPU memory (via the CPU) each cycle again.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-NL5ARB1WKEE/Tu5N6BO_PSI/AAAAAAAAAuA/k84X3Oe4AU8/s1600/OffscreenParticles.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 332px;" src="http://4.bp.blogspot.com/-NL5ARB1WKEE/Tu5N6BO_PSI/AAAAAAAAAuA/k84X3Oe4AU8/s400/OffscreenParticles.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5687569038574566690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Texture with particles, rendered in the background on a lower resolution&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Whatever you do, don't just do it without thinking. Often there are multiple ways to achieve the same thing. So before I just implement something, I usually ask around (on Gamedev for example) for some tips. One last example. Particles. The old fashioned way is to render a large amount of (transparent) points or billboard sprites(quads) into your world. A whole bunch of them forms a cloud, bloodspray, smoke, puke, waterfall or whatever you had in mind. But because so many quads are drawn on top of each other, the GPU easily suffers from fillrate problems. The same screenpixel gets treated dozens of times, and that hurts. One trick to reduce the amount of calculations is to draw the particles offline, on a smaller texture. Then in the end, draw the texture that contains all particles on top of your scene. Since the offline texture has a lower resolution, less pixel calculations have to be done. Of course, the quality(texture sharpness) also drops but for foggy/blurry stuff like fart gasses or smoke, this is actually a good thing. Two portions of happiness for the price of one.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Don't know what speed the desktop computer will reach when we record the next Tech-Demo movie. But at the end of the story, I'm focused on making Tower22. Not a super engine. Let's first just build a car that drives properly, rather than a car that drives 300 miles per hour. Besides, let those lazy Silicon Valley’s bake better video-cards instead :p Nah, of course, you can't totally neglect the performance in a game engine. If that car needs to drive faster than 150 mph eventually, you shouldn't start with a Fred Flintstone chassis prototype. But squeezing out milliseconds will be future work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-6924647912212420454?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/6924647912212420454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/12/turbo-boosters.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/6924647912212420454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/6924647912212420454'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/12/turbo-boosters.html' title='Turbo Boosters'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-u4ezJZz2Sj4/Tu5D4Ap-jSI/AAAAAAAAAtc/g31P4uCZD1k/s72-c/Barrack5.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-3664377146241145116</id><published>2011-12-08T13:29:00.000-08:00</published><updated>2011-12-08T13:37:54.391-08:00</updated><title type='text'>Echo</title><content type='html'>Sorry for the lack of fairy tails last weeks... Let's say we're very, very busy finishing the demo movie! And playing Zelda ;)&lt;br /&gt;&lt;br /&gt;A lot of stuff has been added. Shader improvements, Parallax Occlusion Mapping, objects, morphing animations, and... I lost the count. Anyway, the least thing I can do is post a few screenshots then.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-Sui9ogpaNDo/TuEtu-sV2hI/AAAAAAAAAs4/ceNNtdFiSTU/s1600/WaterPools.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 294px;" src="http://4.bp.blogspot.com/-Sui9ogpaNDo/TuEtu-sV2hI/AAAAAAAAAs4/ceNNtdFiSTU/s400/WaterPools.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5683874489844488722" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Waterpool decals&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-MOcVINYDuy0/TuEt88Cd9vI/AAAAAAAAAtE/n0rLb_b-rU4/s1600/ControlRoom.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 293px;" src="http://4.bp.blogspot.com/-MOcVINYDuy0/TuEt88Cd9vI/AAAAAAAAAtE/n0rLb_b-rU4/s400/ControlRoom.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5683874729650157298" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-vC8SKW8U0OA/TuEuHONk1kI/AAAAAAAAAtQ/ipjeKkErlNU/s1600/POM.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 230px;" src="http://4.bp.blogspot.com/-vC8SKW8U0OA/TuEuHONk1kI/AAAAAAAAAtQ/ipjeKkErlNU/s400/POM.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5683874906327275074" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-3664377146241145116?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/3664377146241145116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/12/echo.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/3664377146241145116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/3664377146241145116'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/12/echo.html' title='Echo'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Sui9ogpaNDo/TuEtu-sV2hI/AAAAAAAAAs4/ceNNtdFiSTU/s72-c/WaterPools.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-4439104209761094863</id><published>2011-11-27T02:50:00.000-08:00</published><updated>2011-11-27T04:44:00.845-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Importance of graphics and detail'/><title type='text'>The finishing garbage detail</title><content type='html'>Programmers sometimes say games aren't about graphics. Maybe we just tell that to mask our graphical-incompetency’s. But since many gamers also seem to prefer fun above slick graphics, there must be some truth in it of course. Nevertheless, graphics fetishists like me always start a game or engine with trying to make it look as good as possible. New shader here, yet another rendering technique there. And once we're happy and proud of ourselves, we find a new paper or another @#$^! engine ruins the vibe by showing a much better looking approach. We spend so much time on catching up with the graphics and polishing things that we almost forget about other aspects such as... making a fun, playable game. Jesus, we're like women dressing &amp; stressing up in front of the mirror for hours before going to a party.&lt;br /&gt;&lt;br /&gt;Obsessions are usually not a very good thing, then again I don't agree that graphics aren’t important. &lt;span style="font-style:italic;"&gt;Zelda Skyward Sword&lt;/span&gt; is, of course, on my December presents listing. Zelda is always welcome, especially with Christmas. But I can't deny that the outdated Wii graphics are becoming a royal pain in the ass. Nintendo games have never been photorealistic highlights, nor they should. But the first 3D &lt;span style="font-style:italic;"&gt;Zelda Occarina of Time&lt;/span&gt; looked awesome nevertheless. A day &amp; night cycle, (pre-rendered) photo-like backgrounds, fresh water, an open world. It was the perfect transition between the 2D and 3D era. ~5 yeras later, the Gamecube &lt;span style="font-style:italic;"&gt;Zelda Windwaker&lt;/span&gt; title looked like a quality Walt Disney cartoon. Not photorealism, but still a visual treat, even between the advancing tech used in contemporaries such as &lt;span style="font-style:italic;"&gt;Halflife2&lt;/span&gt; or F.E.A.R. And then the &lt;span style="font-style:italic;"&gt;Twilight Princess&lt;/span&gt; arrived end 2006... The bright blooming tried to mask the Wii hardware that was dated already before it came out. For me, the result was a dark, grainy, empty, dead world. Zelda isn't about graphics, but while others in the series sucked me in by showing a magical, sometimes weird, but yet cozy "check-me-out!" world, the grim TP world felt cold.&lt;br /&gt;&lt;br /&gt;And now the turn goes to &lt;span style="font-style:italic;"&gt;Zelda Skyward Sword&lt;/span&gt;. Didn’t play it yet, but I must say it looks more colorful, and therefore more atmospheric &amp; interesting to me. But still... those jagged non-anti-aliased edges are like razorblades in the eyes. The characters + facial expressions look like 1999 fruit with a face painted on it. And the lack of lighting compensated by lot’s of bright weird colored textures, looks as if your mom washed your underpants together with a whole rainbow. Sometimes tasteful, other times chaotic and messy. Yes, graphics do count, because immersion counts. Well, let's just hope Skyward Sword does what Zelda does best: delivering puzzles, a fantastic world, and an unique experiences. Although it’s going to be difficult to please this old nitpicker who played the same formula since the SNES already :p&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-PyXFlsO1iZc/TtIhIGAxSCI/AAAAAAAAAr8/OgklChHh6JI/s1600/WindWaker.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 301px;" src="http://2.bp.blogspot.com/-PyXFlsO1iZc/TtIhIGAxSCI/AAAAAAAAAr8/OgklChHh6JI/s400/WindWaker.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5679638503004129314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Zelda: Windwakerl; not a technical highlight, but a piece of art nevertheless.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;More important in our case, how could T22 be scary if it looks like pixel-blubber? The scary moments will turn out in disappointing anti-climaxes if the enemy turns out to be a Doom2 sprite, or a pile of boxes? Now Silent Hill looks like foggy shit as well, but least it's a consistent whole of foggy shit. Keep in mind that graphics is not only about awesome shaders, realtime lighting, big Hollywood blasts or photo-realistic water. From a programmer perspective, I'm inclined to say a proper graphical engine makes the graphics hot-or-not. But how come that games like Resident Evil 4 (Gamecube / PS2) still looks good even without tons of effects? And how come that custom made maps in UDK, Source or CryEngine often don't look good at all? Exactly, don't underestimate the power of art(ists). The better they master their(your) tools and engine-tricks, the better results they can make. Even with a limited technical toolkit eventually.&lt;br /&gt;&lt;br /&gt;When looking at our Radar Station that is going to be used for the next tech-demo, I'm not 100% happy with it. Of course, when seeing the same stuff over and over again for the past 10 weeks, you become tired of your own creations. And as a programmer, my focus goes to the graphical bugs and shortcomings instead of the good parts. Normals inverted. Texture missing. Lamp looks like poop. Parallax effect not good enough, bleh. While a normal viewer may not even notice it. But also a non-technical person can probably tell the screenshots are not quite yet “A++ quality”.&lt;br /&gt;&lt;br /&gt;Outsiders, but also meself are often making the same "mistake". And if you're a hobby game/graphics-programmer, you're probably guilty too.  The mistake of comparing your (unfinished) results with commercial games you just played, or (Photoshopped) screenshots from super-engines. It's good to put high standards, but give yourself a break! 4 hours in the evening versus 50 hours-in-a-week work times. Two-and-a-half artist versus the 101th Airborne 3D-nerd battalion. A null euro budget versus a X(-hundred)-million euro budget. Even if you master the code, you still lack manpower to create comparable results. Unless you’re blessed with plenty of talented volunteers to help you out of course :)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-fRi7J0Ivnio/TtIjMEzIFAI/AAAAAAAAAsI/kJ8Ya-GD3uw/s1600/ControlPanel1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 289px;" src="http://1.bp.blogspot.com/-fRi7J0Ivnio/TtIjMEzIFAI/AAAAAAAAAsI/kJ8Ya-GD3uw/s400/ControlPanel1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5679640770421199874" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;A brilliant engine still doesn't make good looking 14k meshes + textures for you... Sergi spend quiet some time on his newest invention shown above!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm writing about this (again) because I was looking at some details while playing the PS3 &lt;span style="font-style:italic;"&gt;Uncharted 2&lt;/span&gt; demo. And at the same time I was figuring how to improve the Radar Station in these last weeks. Maybe check some enhanced parallax shaders, add some more secondary detail textures on the concrete maybe... I'd say our Radar Station looks pretty good, but something is missing... Then when looking at &lt;span style="font-style:italic;"&gt;Uncharted 2&lt;/span&gt;, I noticed the individual textures, objects or shading-tricks (such as reflections or shadows) weren't that spectacular either. Nope. What really makes their environments look alive and realistic, is the high amount of "stuff" stuffed into it. In our case a balcony is typically made out of a few 3D cubes, 2 concrete textures, and maybe a drainage pipe in a corner. In uncharted, there is small crap on the floor, a broken cable hangs on the walls, pots are stacked up, a bit of water dripping in the corner, leafs and foliage growing over the walls, a pile of rubble in another corner, 6 different textures.... And that's just a simple stupid balcony, a lot more detail can be found in the surrounding background. &lt;br /&gt;&lt;br /&gt;Not just quality, also quantity matters. Do you know why the 3D office-room in your game doesn't look very realistic? Because it's empty. In your face! Let me guess... carpet tiles on the floor, a white plastered texture for the walls, system ceiling with (only) 1 lamp, a few (cloned) desks with a computer screen and keyboard on top, some chairs, and a few posters on the walls. Oh, and for the detail-connoisseur: a stapler on one the desks! Probably that stapler looks a bit out of place, because it's the only small object in the scene compared to the desks and computers. Now look around you in the real world. In my little office at work, there is more garbage than one can count. Computer here, computer there. Cables, lot's of. Electrical outlets, 6 lamps in the ceiling to lit the small room, airco unit, papers scattered everywhere, plastic coffee cups, garbage bin filled with stinky banana peels, oil-marks on the carpet, little holes and damage on the wall, some unnecessary chairs in a corner, a backpack below the desk, cardboard boxes with more electrical junk, folders, VHS Videos(hu?), circuit boards, tape, screwdrivers, business cards, elastics, plastic crap, pencils, markers, and so on. And I'm still missing a damn stapler by the way.&lt;br /&gt;&lt;br /&gt;Even simple scenes carry more detail than you would see at first. Just take a look in a random hallway. Wood-floor, painted wall, stone ceiling... That's only 3 boring textures. But look again and better this time. You’ll notice radiators, cables, wires, unused sockets, cracks, marks, skirting, holes, repaired spots, garbage, and the list goes on and on. 6 years ago we could argument that computers can't handle such large amounts of useless junk to render, but these days it shouldn't be too much of a problem to scatter pens and papers over a desk, or to throw bricks and dogturds over the 3D streets. No excuses!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-mNRDQv0MiO0/TtIovN5bQOI/AAAAAAAAAsU/hdIautUEGPM/s1600/Fusebox1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 295px;" src="http://4.bp.blogspot.com/-mNRDQv0MiO0/TtIovN5bQOI/AAAAAAAAAsU/hdIautUEGPM/s400/Fusebox1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5679646871717101794" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Here one of my major issues. The rooms are pretty large, and thus the textures need to be stretched out further as well to prevent repeating. But small stuff like these sockets suddenly look too detailed compared to the wall. Putting a slim, pretty woman next to a fat woman makes the fat one look even fatter. The solution? Increase shadowMap resolution, add decals(cracks, holes, paint, damage, ...) on the walls to make them look more detailed, add (a lot) more small stuff nearby. Or even better, less texture stretching &amp; more variants on the texture to compensate the repeating. In other words: more assets &gt; more production &gt; more artists&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The real limitation is, of course, the lack of manpower. Currently I have three guys on the assets (in their free time). Julio makes surface &amp; effect textures, Sergi makes objects(and their textures), and Robert is doing a little surprise for the tech-demo. Talking about surprising, Robert just became a father btw! A little, healthy little boy surprise entered our world last Sunday! &lt;br /&gt;&lt;br /&gt;Anyway, I can't expect three men to fabricate whole asset-libraries in a short amount of time of course. So, for now the environments are still a bit empty, and small details such as a pipe or outlets look a bit out of place. Too bad, but there isn't much we can about that now, no matter what shaders you can bake. Now you understand why games have such big budgets these days. The stapler-models alone already requires a production team of 8 artists! &lt;br /&gt;&lt;br /&gt;No, but seriously, the men separate from the boys by having well-thought, well-designed, well-filled environments. We should start with research and a huge photo-resource. Then create ideas &amp; concept-art to give direction to the modelers. Then a group of modelers and texture artists that can exactly produce what makes a room look like a room. And finally, an engine + tools that fulfills the artist needs. That's the theory... In practice I made a bunch of maps with my limited skills, and now the other guys try to fill it with some textures and objects ... Oops, that doesn't sound too hopeful for the next Demo :)&lt;br /&gt;&lt;br /&gt;Nah, I'm sure it will look pretty good, certainly for a hobby project without a budget. We can be proud we did that all by ourselves in the evening hours. But one has to analyze and place critical notes once in a while, right?  At least we have some ideas of how to improve the quality next time. And maybe I should spend some more energy on finding extra concept &amp; 3D artists rather than trying to patch everything with new shaders :p&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-pbc43hvYPKY/TtIuecari0I/AAAAAAAAAsg/G4Y29DHK0iQ/s1600/RadarPhoto.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 308px;" src="http://1.bp.blogspot.com/-pbc43hvYPKY/TtIuecari0I/AAAAAAAAAsg/G4Y29DHK0iQ/s400/RadarPhoto.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5679653180626668354" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Before the wole modeling process begins, you got to start with the proper ideas. Bad or boring ideas can’t be fixed by shaders or good looking textures. The Radar Station was based on some cool photographs Julio found on &lt;br /&gt;&lt;a href="http://www.abandoned-places.com/"&gt;abandoned-places&lt;/a&gt;. Too bad we didn’t had time to sketch good maps first. I just started modeling relative big simple rooms connected with each other. Got to admit the Radar Station wasn’t meant for a movie in the first place btw!&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-hbDIqMsY5Ws/TtIwCokoRKI/AAAAAAAAAss/v_uupU7E2-A/s1600/3330846057_ff3844350f.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 267px; height: 400px;" src="http://3.bp.blogspot.com/-hbDIqMsY5Ws/TtIwCokoRKI/AAAAAAAAAss/v_uupU7E2-A/s400/3330846057_ff3844350f.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5679654901876540578" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Here some more input a friend gave me after Googling around. Not-so-usual designs are important elements if you want to show something impressive. If Tower22 would only be made of corridors and apartments you see in any other flat, it would become boring very quickly...&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-4439104209761094863?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/4439104209761094863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/11/finishing-garbage-detail.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/4439104209761094863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/4439104209761094863'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/11/finishing-garbage-detail.html' title='The finishing garbage detail'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-PyXFlsO1iZc/TtIhIGAxSCI/AAAAAAAAAr8/OgklChHh6JI/s72-c/WindWaker.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-2440585870799739214</id><published>2011-11-13T03:01:00.000-08:00</published><updated>2011-11-13T03:18:15.098-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Game realism'/><title type='text'>The real deal</title><content type='html'>Man, heard some painfully awkward "interviews" on the radio this week, while driving to one of our harvesters. Not about Joe Frazier puffing his last smoke, Conrad Murray doing magic with medicines, or Papandreou souvlaki. No, it was about how gamers slept in front of the stores, waiting for Call of Duty: Modern Warfare 3. It's mindboggling when 55 year old people, technically left behind in the Nintendo Entertain System 8 bit era, start asking. "So this video-computer-game is about shooting other puppets with the mouse?". Even more facepalming might be the reactions from hyper enthusiast 16 year old CoD "veterans" explaining what a first-person-shooter is, using modern English generation-X words the interviewer never heard about. Online avatar? Deathmatch? Lagging problems? Shader graphics? 100 frags? LOL?!&lt;br /&gt;&lt;br /&gt;Maybe what strikes me most is that this is about CoD in specific. C'mon man, it's just a game. A polished, good looking, action packed one. But really nothing new. When fans told the interviewer about how freak'n realistic this new game is, I frowned my butt crack and had to check my ears. Wha-wha-what?! CoD, Realistic?  That's like saying "Cowboy tobacco" and "Whale sperm cells" in one sentence; it has nothing to do with each other. Oh, of course this game *looks* realistic, the visuals are excellent. But isn't this also that game where you kill more (dumb) men you can count, and re-spawn 10 meters back within 5 seconds if you got "fragged"? Imagine that would happen in a Afghanistan...&lt;br /&gt;&lt;br /&gt;Yes, I fired a couple of real guns in my life, read the real "Band of Brothers" biography book, watched Ross Kemp almost shitting his pants for Taliban gunfire, seen the Seals on Natgeo, and more important, played Hidden &amp; Dangerous 1 and 2. And let me tell you: you certainly can't kill a helicopter with a tomahawk (axe, the rocket might actually work):&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=oRRjICdrElE&amp;feature=related"&gt;Youtube Modern Warfare helicopter fun&lt;/a&gt; &lt;br /&gt;Not only CoD is guilty. Battlefield 3 is inbound dudes. So I watched some in-game footage where a boy and girl had some coop-fun. 5 minutes later, the duo had killed an entire army, caught about 40 bullets without dying, blew up a few tanks that didn't pay attention to them running around with dangerous Javelins, and popped one after another enemy as if aiming a gun is childsplay. And don't get me started on the online features. In theory, you can play a realistic, tactical game. In practice, everyone is running into each other like a Braveheart battle. Cause you don't care about your virtual gamelife anyway. Hence, you re-spawn 5 seconds later after you crashed your helicopter after a tomahawk incident. Realism, my ass.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-iusE9WixLjs/Tr-kUzRO6iI/AAAAAAAAAno/WgczhbC6yZg/s1600/LightingOnly1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 294px;" src="http://3.bp.blogspot.com/-iusE9WixLjs/Tr-kUzRO6iI/AAAAAAAAAno/WgczhbC6yZg/s400/LightingOnly1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5674434732776942114" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Those milky Lighting-only testshots always kick-ass. Maybe we should't use (diffuse) textures in this game. Saves a lot of work. The hell with realism.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So, maybe ARMA II is what this old whiner needs. Urr... Much harder, check. Lots of factors to count in, check. Big open maps, check. Realistic weapon ballistics, check. Teamwork needed, check. No stupid re-spawn/regain system, thank God check. Fun... Oh, that's because a real war isn't fun either of course. Truly a realistic game indeed.&lt;br /&gt;&lt;br /&gt;Why are the realistic, more serious games so painful? Navigating a soldier is more complicated than doing an emergency belly slide with a Boeing 767 in Warsaw. You need 2 keyboards and 4 big handles mounted on your chair just to move the legs. Why are the graphics mediocre? Why is the A.I. even more dull than in most other action games? Why does such games always contain bugs like getting hit by bullets that went through a mountain, or falling through the floor? You can say a lot about CoD or Battlefield, but at least their mechanics are smooth and slick.&lt;br /&gt;&lt;br /&gt;Isn't there a good tradeoff? Well yes there is. Or was, I should say. The last title in this series was released in 2002 I believe. We’re talking about Hidden &amp; Dangerous. Damn I wish they made a new part. That game was stiff and didn't had the brightest opponents either. But at least you were afraid of tanks instead of running into them, throwing grenades. Killing guards, disabling MG42's, sniping patroulles or destroying armored vehicles really felt like an accomplishment. A little more recent example of a well balanced game (in my opinion) is Far Cry. Looked good, plenty action, but also using your brains was rewarding in this title.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Obviously, taste differs and personally I prefer a game somewhere in the middle. It needs to be challenging, realistic, but neither a true simulator. Admit it, killing a helicopter with an axe is pretty cool, and a good laugh is also worth a penny. I think my main beef with these games, is that they are too easy; you simply can’t die anymore! CoD, Crysis, and many others have that auto-regain system and otherwise auto-saves every 20 yards. Or how about Bioshock? You didn't even had to redo stuff after getting killed in that game, the dead remained dead, and you kept all your weapons / ammo. Beautiful game, but not a challenge if you ask me. But challenge does not have to equal realism through.&lt;br /&gt;&lt;br /&gt;What is realism anyway, asides from good graphics/sound/physics? Would CoD be more fun if you had to stop and take a crap every six (game)hours? Would Battlefield be better if you need to refuel your Jeep before you blow yourself up 2 minutes later? Would Silent Hill be more fun if the player stumbles over random obstacles while running away from a monster? Would Mario be a good game if that (fat) plumber just jumps 60 centimeters high like you and me? Is a boxing-game good if both boxers hang tired in each other arms every 20 seconds? Could Doom be spiced by only carrying 2 weapons and limited ammunition? Would the Sims be cooler if those bastards sleep 8 real-life hours? Would Tower22 be more immersive if the handyman would smoke and drink beer in the bench every day after work?&lt;br /&gt;&lt;br /&gt;Games need to be fun in the first place right? If physical rules have to be thrown overboard, then so be it. If it requires 60 dumb soldiers to shoot per minute to keep the player excited, then so be it. Although I wouldn't call my games "realistic" in those cases, it's perfectly fine to do the impossible. Why else would we need games or movies for? You don't say Superman is lame just because he can fly. In fact, implementing realistic features only works out if it actually adds fun to the game. Though in my opinion, modern games removed too much elements just to make games easier and thus accessible for everyone (=$$$), you play a game to escape from reality. Not to eat bread and tying your shoelaces on the TV again.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-igL39Jeu9SA/Tr-ks5lRLCI/AAAAAAAAAn0/gbp9qP7-1fQ/s1600/LightingOnly2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 293px;" src="http://2.bp.blogspot.com/-igL39Jeu9SA/Tr-ks5lRLCI/AAAAAAAAAn0/gbp9qP7-1fQ/s400/LightingOnly2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5674435146788449314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Ok, the reason for these white shots was testing a simplified ambient method. I'm still fooling around with a realtime G.I. method, but since my laptop doesn't have that much graphical horsepower, I tried a simple method for lower end cards (and distant area's). Each vertex here has 3 pre-calculated ambient-occlusion values: Sky-occlusion, Ground-occlusion and Environment-occlusion. Depending on these 3 factors and 3 colors, the ambient will be calculated. Since we do this per vertex, it's wise to subdivide your geometry a bit (forgot that here).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;How realistic will T22 be then? In the first place, T22 needs to be scary. And easy games just aren't scary. So don't expect you can kill a monster with 5 headshots in a row. That's why I never really understood the negative comments on the camera-angles, limited ammo, and stiff controls in (old) Resident Evils. What do you expect? Rushing through the mansion like Duke Nukem? Oh wait, they actually listened to the fans, and changed these points in RE4 / 5. Quality fun games, but scary? No.&lt;br /&gt;&lt;br /&gt;Other than in many other genres, human shortcomings such as a limited stamina, fear or not being able to do Chuck Norris roundhouse kicks, are valid (realistic) limitations. Just as long as the game doesn't start feeling unfair. You need to escape or defend yourself, but certainly not in a too easy way! Testing and tweaking the rules should become an important development phase later on. The goal is to create some "Holy shit barely survived that!" moments.&lt;br /&gt;&lt;br /&gt;As you may have read, you won't be confronting monsters all the time though. How to fill the gaps then? Another oddity of horror games (and movies) is that it doesn't have to be a funride. When looking purely at gameplay, Silent Hill is pretty boring actually. You don't play it cause it feels so good. You play it cause you want to find the clues, and cause you like to test your heartbeat. I don't want to make excuses though, so we'll try to add some "fun" by doing focusing more on exploration and puzzle braincrackers. As for realistic elements, a day-night cycle, sleeping and maybe even eating are floating in the idea clouds indeed. But it needs to be integrated in such a way that it feels necessary, not an annoying repeat, and enhances the way how puzzles or confrontations can be solved. If it doesn't, the feature should be scrapped.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But yeah, Tower22 is probably not the type of game everyone will enjoy ;) Maybe the comments on CoD are just out of jealousy ;) Asides from bums, I don't expect people to sleep in front of the stores when(if) T22 finally comes out. It doesn't matter though: we'll make what whatever we please, not what sells. And isn't that the essence of making innovative, good stuff?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-2440585870799739214?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/2440585870799739214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/11/real-deal.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/2440585870799739214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/2440585870799739214'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/11/real-deal.html' title='The real deal'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-iusE9WixLjs/Tr-kUzRO6iI/AAAAAAAAAno/WgczhbC6yZg/s72-c/LightingOnly1.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-5795887940453059825</id><published>2011-11-02T08:00:00.000-07:00</published><updated>2011-11-02T08:13:16.174-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Making engines or games?'/><title type='text'>In Control</title><content type='html'>Countdown, 7 weeks remaining. Funny to see the productivity rises as soon as there are deadlines and to-do lists. Yep, if you want your team (and yourself) not to be sleeping at the job, keep making (sub)targets and easy-to-follow plannings. Or as they would say in Full Metal Jacket, keep throwing hand grenades at Beastman to keep him sharp.&lt;br /&gt;&lt;br /&gt;That felt a bit unnatural to me at first, cause basically you're asking your helpers to work hard(er), without giving them a salary in return. But trust me, it's better to push a bit and keep everyone at work rather than kindly asking if one could do asset X somewhere within the next 50 months, if he likes. Don’t forget why an artist joined you in the first place: to create awesome stuff! The more clear the targets, the more being produced, the more enthusiast people are to add their fifty cents.&lt;br /&gt;&lt;br /&gt;As for my own progress, I pimped the water with some fluid-dynamics and pretty realistic ripples caused by particles or stuff falling in the water. Improved the parallax effect a little bit for some stone floor, fixed some annoying bugs, and currently I'm breaking my neck (again) at particle-lighting. There are dozens of ways to render particles, but usually the combination of overdraw and complex particle shaders (lighting &amp; shadowMaps) quickly halts your performance. And blending all those damn sprites into a realistic "cloud" is tricky. With simple additive blending, your fog quickly becomes a radiating Fukushima cloud. With classic transparency the quads start biting each other and fade-out the background unpredictably. One second it looks good, the other second it looks as if the air was filled with pregnant flying elephants.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-a7CuZ3tKegU/TrFboXZNLxI/AAAAAAAAAnE/OB7wJaxjdag/s1600/RS_Particles2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 301px;" src="http://2.bp.blogspot.com/-a7CuZ3tKegU/TrFboXZNLxI/AAAAAAAAAnE/OB7wJaxjdag/s400/RS_Particles2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5670414154868797202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Blurry particle mess. Trying to use lights and shadows on them.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We'll talk again when/if I get those particles working properly. Usually when there is a problem or a new technique that has to be done, I start browsing the internet (really?!). And more than once, I stumble on the feature-lists, brief implementation details, or jealous-making screenshots of other A+ engines. Cryengine, UDK, 4A, Unity3D, Ogre, and so on. I could be proud that my own home-made-hobby engine somewhat approaches the (commercial) big players when it comes to rendering quality. Not saying "Engine22" looks better, but for some free-time plumbing, it isn't that bad. &lt;br /&gt;&lt;br /&gt;Yet at the same time, I sometimes wonder why the hell I'm even trying to make my own engine. What's the point? You're not going to win it from the others. Why not making Tower22 with the Cryengine? All those cool water, fog, particle, lighting and whatever LSD tripping effect you’ll need, is ready to kick ass there. And asides from graphics, it has physics, sound, AI scripting, pathfinding, GUI, multiplatform support, editors / tools, documentation, and so on.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ok, my budget of 100 euro is probably not enough to buy a Cryengine license, but there are cheap or even free engines out there as well. The point is, as a development team, you can actually focus on the game itself instead of an engine + tools that have to be made before you can even start. "Make games, not engines" (Plato, 347-428 BC), that's what they told us. Now why oh why Lord, why do we torture ourselves trying to make something that is  A: outdated as soon as you take a crap for 5 minutes,  B: takes an awful lot of time,  C: unlikely to beat other existing products? Seriously, it reduces the chance of your game ever seeing daylight, unless you have a big team of nutty professors.&lt;br /&gt;&lt;br /&gt;Are we just stubborn, or too pride maybe? For me, picking another engine (and throwing overboard my own stuff) feels like surrendering. It's like getting credit for something you didn't do yourself. It's like those modern cars that can automatically park themselves. Any man would say "Auto-parking my ass, watch this honey!".... (bump). &lt;br /&gt;&lt;br /&gt;At times like that, I have to remind myself why I'm doing it again. And honestly I can't give a perfect answer, other than I like to program my own engine! If we would switch to a ready-to-use EngineX tomorrow, there is not much left for me. Tweaking some shaders, write some A.I. scripts... yawn. I would become like the redundant manager at the office. Walking around a bit, asking stuff... "Everything ok here?", "Need some coffee maybe?". I can't help the artists much, other than giving directions and feedback. Neither can I compose sound, or make awesome concept-art. And then we have an engine. No idea what really happens under the hood... It just works.&lt;br /&gt;&lt;br /&gt;Nah. That sucks. Now I remember why I'm programming again; the need to learn new techniques. Moreover, I want full-control. If something needs to be tweaked, every last bit should be familiar stuff. I rather program my own devices just to be sure it works (or doesn't work) as expected. And I hate flying cause I don't have any control over it. Hmmm... sounds like some sort of psychological issue...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-798sf7wWBs8/TrFcbIYQ22I/AAAAAAAAAnQ/yT-V2cxj4As/s1600/Waterflow.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;" src="http://4.bp.blogspot.com/-798sf7wWBs8/TrFcbIYQ22I/AAAAAAAAAnQ/yT-V2cxj4As/s400/Waterflow.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5670415027011640162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;The same scene without particles.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;"Make games, not engines". But the same people also say that modern engines are way too much focused on graphical wow-stuff rather than solid gameplay. I disagree that graphics aren't important at all. How about immersion? If Tower22 had to be played on a Wii without shaders to create a scary dark atmosphere and good looking monsters, it will probably suck. Hey, you don't watch Low-Definition TV either, do you? Nevertheless, they have a point of course.&lt;br /&gt;&lt;br /&gt;Each engine has a certain feel. No matter what level you play, or which modification you download, certain mechanics and atmospheric aspects keep the same. IdTech has a sci-fi touch, Cryengine excels outdoors, UDK games have a blueish look, and all three are mainly made for first person action shooters. This may work out for game A, but not that well for game B. Although Crysis looks better than its predecessor "Far Cry" in every possible way, I enjoyed the old game much more. Subtle differences in controls, other game-rules, other map-design, different A.I., different pace, different overall look. &lt;br /&gt;&lt;br /&gt;When building a game on a certain platform, you automatically inherit some of its DNA. Both the good and the bad aspects. When using Cryengine for T22, the look might be more crisp &amp; flashy instead of a blurry nightmare. And I'm not so sure if I can make one big roaming world instead of loading separated levels. And how about the A.I.? T22 Monsters are completely different than stealthy North Korean soldiers... And how flexible is the engine when it comes to playing weird horror tricks? Like Demo1 that replaced the first room with another room after the monster-chase.&lt;br /&gt;&lt;br /&gt;In short, T22 is a complete different game than the action shooters that gave birth to most of the popular engines. But since you can't make a racegame on a soccergame-engine either, I doubt if there exists any engine that does exactly what I want for T22. See? Need to be in full control.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-XwWecNaKYA0/TrFcwOU_rYI/AAAAAAAAAnc/iAJvHrQpxA4/s1600/WaterSnowRipples.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 294px;" src="http://3.bp.blogspot.com/-XwWecNaKYA0/TrFcwOU_rYI/AAAAAAAAAnc/iAJvHrQpxA4/s400/WaterSnowRipples.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5670415389385796994" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Improved water. The snow that drops on the water creates ripples. Bigger ripples will result in actual 3D waves. Yeah I know, I still have to post another article about water.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;==============================================================================&lt;br /&gt;So, making games or engines? That entirely depends on you. What is your ultimate target? Learning how to program a game, or (quickly) making the actual game? Are you willing to spend an awful lot of time in researching (new) graphical / A.I. / scripting / physical / whatsoever / techniques? How much time do you have anyway? In case you aim for a complex game, you can safely add at least 4 extra development years if you plan making your own engine. Or make it 8 years, in case you never did it before. Cause you'll be scrapping and redoing parts, if not the entire engine, several times. And last but not least, is there an existing engine that does the things you want?&lt;br /&gt;&lt;br /&gt;Here, I made a little dr.Phill test for you.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;1. Target?&lt;br /&gt;----0 [a] Release a commercial game&lt;br /&gt;----1 [b] Enjoy my (finished) game&lt;br /&gt;----3 [c] Make a game &amp; sharpen my skills&lt;br /&gt;----5 [d] Learn how to make games&lt;br /&gt;----6 [e] Make a (commercial) killer engine&lt;br /&gt;&lt;br /&gt;2. Available time / release date?&lt;br /&gt;----0 [a] 1..2 years&lt;br /&gt;----1 [b] 2..4 years&lt;br /&gt;----2 [c] 4..8 years&lt;br /&gt;----3 [d] I can travel through time. It doesn't matter.&lt;br /&gt;&lt;br /&gt;3. How much time can you spend on it each week?&lt;br /&gt;----0 [a] Little. Other things to do&lt;br /&gt;----1 [b] Not so much (5..10 hours)&lt;br /&gt;----2 [c] Pretty much (10..20 hours)&lt;br /&gt;----3 [d] Unlimited, I dream code.&lt;br /&gt;&lt;br /&gt;4. Are you working alone, or together with artists that require tools?&lt;br /&gt;----0 [a] Big team (10+) &lt;br /&gt;----1 [c] A small team (&lt;10)&lt;br /&gt;----2 [b] Han Solo &lt;br /&gt;----1 [d] Not relevant, no complex tools needed&lt;br /&gt; &lt;br /&gt;5. How complex is your game?&lt;br /&gt;----0 [a] Think in terms of Halflife4 &amp; GTA7&lt;br /&gt;----1 [b] Pretty complex&lt;br /&gt;----2 [c] Pretty simple &lt;br /&gt;----3 [d] Extremely simple. Atari stuff.&lt;br /&gt;&lt;br /&gt;6. How important is the quality (graphics, physics, tools, and so on) for you(&amp; team)?&lt;br /&gt;----0 [a] Very, very. A+ quality only.&lt;br /&gt;----1 [b] Pretty much, but I don't have to win&lt;br /&gt;----2 [c] Make games, not graphics&lt;br /&gt;&lt;br /&gt;7. Do you like building your own tools &amp; editors&lt;br /&gt;----0 [a] Boring&lt;br /&gt;----1 [b] If I must...&lt;br /&gt;----3 [c] Love it&lt;br /&gt;&lt;br /&gt;8. Do you like reading technical papers?&lt;br /&gt;----0 [a] My ass does&lt;br /&gt;----1 [b] Not really, but if I must&lt;br /&gt;----3 [c] Yummy&lt;br /&gt;&lt;br /&gt;9. Do you have experience with coding engines?&lt;br /&gt;----0 [a] Dieselengines? No.&lt;br /&gt;----1 [b] A bit&lt;br /&gt;----2 [c] No / a bit, but I'd like to learn&lt;br /&gt;----3 [d] Sure.&lt;br /&gt;&lt;br /&gt;10. Are there available (free or commercial) engines in the genre you're aiming for?&lt;br /&gt;----0 [a] Yes, and I can get those&lt;br /&gt;----1 [b] Yes, but I'm not sure if I want to pay for that&lt;br /&gt;----3 [c] No / Yes but not in my budget&lt;br /&gt;&lt;br /&gt;11. Where's your heart at?&lt;br /&gt;----0 [a] The creative aspect (making game contents, maps)&lt;br /&gt;----1 [b] Create / Tweaking the game (scripts, A.I., ...)&lt;br /&gt;----3 [c] A mixture of both&lt;br /&gt;----6 [d] The technical aspect (coding stuff)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Now sum the points (max = 35, my score was 22 btw). The outcome is based on absolutely nothing, but at least it got you thinking right?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;0..12 points&lt;/span&gt;&lt;br /&gt;You really don't have time for technical bullcrap. What you want is a game, not a technical course. Don't torture yourself too much with programming, cause it's likely bringing you nowhere. Don't forget to make fun in the first place. Grab the engine / platform that fits best, and realize your dreams. &lt;br /&gt; &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;13..18 points&lt;/span&gt;&lt;br /&gt;The goal is to make a game, but you don't mind getting your hands dirty. Or maybe your type of game is pretty simple, so wrapping up your own code shouldn't be too much of a problem. Don't forget there are intermediates. XNA or Ogre for example will help you with the coding, but you are still in control.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;19..26 points&lt;/span&gt;&lt;br /&gt;Either you really like to learn how to make an engine, or the type of game you want to make simply forces you into making your own gearbox. An actual release of the game itself will be the cherry on the pie. Go out and play, but don't forget it's not a crime to ask for help or use some ready-to-use libraries.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;27..35 points&lt;/span&gt;&lt;br /&gt;Nerd ;) You don't give a shit about games really, you just want to do the stuff that the other big boys do, don't you? Whether you can realize a killer engine or not, go ahead and feed those brains.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-5795887940453059825?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/5795887940453059825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/11/in-control.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/5795887940453059825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/5795887940453059825'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/11/in-control.html' title='In Control'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-a7CuZ3tKegU/TrFboXZNLxI/AAAAAAAAAnE/OB7wJaxjdag/s72-c/RS_Particles2.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-7241780485669451812</id><published>2011-10-24T13:25:00.000-07:00</published><updated>2011-10-24T13:43:25.204-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ghadaffi'/><category scheme='http://www.blogger.com/atom/ns#' term='tech-demo progress'/><title type='text'>Up yours</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-lkC-EJ_99_E/TqXLWRVeVEI/AAAAAAAAAmU/ncV49R4rreY/s1600/TacticalMap.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 295px;" src="http://3.bp.blogspot.com/-lkC-EJ_99_E/TqXLWRVeVEI/AAAAAAAAAmU/ncV49R4rreY/s400/TacticalMap.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5667159289586668610" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Tactical plans sir.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Another big name wiped off the Risk playboard. Saddam, Bin Laden, now Ghaddafi (or whatever his name is spelled). Who's next? Il Kim 3000? Obama? Don't know what to think of Ghaddafi's fall. I'm “glad” it got taped on film so we don't have to get in doubt with conspiracy theories again. Well, what say about it… He didn't give a fair trial for his opponents either, and dictators generally suck anyway. Then again, Libya was relative rich and developed compared to some other countries in the region. Iraq turned into a hell-pit when Saddam got chased into a hole, and I don't trust the extremists who are ready to jump into this Arabic Spring either. From a dictatorial system to a deep religious system... not my cup of tea.&lt;br /&gt;&lt;br /&gt;I hope the youngsters who started these demonstrations can really create a better future without chaos, war, dictators or religious bearded dresses telling them how think, what to do, and what not to do. A tolerant place based on freedom, tolerance, and common sense. But the problem in these locations is that the word usually goes to the one with the biggest sable/AK-47, rather than a democratically chosen intellect with vision. Although… democracy has become a joke in the Western world as well. Can't remember anyone asking me about whether we should join the war in the mid-east, give more power to Brussels, how to deal with near-bankrupt countries in the EU zone, or if we should "free" Libya (for their own (oil) interests). A “No.” from the people still gets turned in a “no but, Yes - with some chocolate sauce”.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The big guys play their game anyway, no matter what we think of it. As long as we're happy with our house, car, widescreen TV and “What’s in Store!”- Bodytoaster Pro, they can keep milking tax and wipe their ass with it in any that pleases them. It's the 1% versus 99% story. A small elite of... fuckers, decides what happens in the world. Whether Ghadaffi should deliver oil, or sleep in a supermarket cooling cell. If banks should be saved whether they screw up or not. When &amp; where to fight a cozy war to bring “Democracy”. Which other cool overpaid jobs they can get via the Old Boys network. And what we, -99%-, of tax-cows should know and do to keep their thirsty machine running. The Bible sin "Greed" is a nice summary of it all.&lt;br /&gt;&lt;br /&gt;That's where the Occupy movement comes from I guess. Sounds I'm an anti-capitalist too. Well, not really. In my opinion, those who work hard should earn more than those who lay in their bench every day, bitching about everything. And a bigger salary should motivate people to use their talents instead of putting everyone behind the same factory conveyor belt. Listen up, there's no such thing as a free lunch. Instead of complaining or envying others, you'd better try to accomplish something yourself, and accept that there will always be people with more money, more women, more success, and more golden teeth whether they really deserve it or not. BUT, a system with a small superrich elite that does dark, unverifiable things stinks. But hey! What are you gonna do about it? Unless we really start rioting and build improvised tanks and Anti-Air pickup trucks, the elite probably doesn't care less about another demonstration. Hence, five days later the mess gets cleaned up by a couple of (hard working) garbage men, paid by our own tax of course. Face it, we know too little and have too much to lose to stand up against it. Bend over please.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-3m9oD6hVs6c/TqXMjfh2-wI/AAAAAAAAAmg/5DKQUytC2hc/s1600/LibyaImprovisedTank.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 259px;" src="http://3.bp.blogspot.com/-3m9oD6hVs6c/TqXMjfh2-wI/AAAAAAAAAmg/5DKQUytC2hc/s400/LibyaImprovisedTank.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5667160616246639362" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;I don’t see that happening at the Occupy demonstrations… By the way, those Libyans had some &lt;a href="http://www.theatlantic.com/infocus/2011/06/diy-weapons-of-the-libyan-rebels/100086/"&gt;excessive welding classes&lt;/a&gt; last months!&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enough politics.&lt;br /&gt;So how's the progress on that next little movie? ...Movie? For those who didn't know yet, we're trying to show a (tech)movie end this year. Or begin 2012 in case things get messed up, but the goal is to give you a Christmas present. Don't expect a "cinematic"-horror-gameplay movie though. It's merely a flythrough, showing some engine graphics stuff, and most of all, the audio, 3D and texture work that has been done by the T22 team.&lt;br /&gt;&lt;br /&gt;No secret, the goal is to attract some more 3D/Texture/Concept art people with that demo. Cause we really need it! In the Blog statistics (love them), I saw one was Googling for "Tower 22 release date". I bet you can find a T22_Install.exe on some murky Torrent website within a few years, but we really still have to start on this game! That's right, other than the assets you've seen in this Blog, a half-working engine, and a story + ideas on paper, there is no game content yet! The reason is pretty simple. I want to start on the game when:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; - The team is big, talented &amp; motivated enough&lt;br /&gt; - The engine works "good enough"&lt;br /&gt; - Development tools are "good enough"&lt;br /&gt; - All the design &amp; plans have been clearly documented&lt;br /&gt;* In the meanwhile, we build 1 or 2 more demo’s. At least one is planned for 2012&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;In other words, I don't want to build Tower22 on a fundament of shit. The good news; the engine + tools are going pretty well, the paperwork is scheduled, and the team is growing slow but steadily. Hopefully the Tech-Demo gives it another boost. Making a game isn't easy, so compare it with getting the Titanic into movement. But I have faith in it! &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-mF_21FUFxbg/TqXNmgW12QI/AAAAAAAAAm4/EO5gZZYt5Lk/s1600/Schematics.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 296px;" src="http://3.bp.blogspot.com/-mF_21FUFxbg/TqXNmgW12QI/AAAAAAAAAm4/EO5gZZYt5Lk/s400/Schematics.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5667161767520098562" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Do you know what's annoying? Rendering white paper without getting blinded by HDR bloom.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I didn't answer the question yet. How's the demo progress going? Well, a whole listing of objects(chairs, lamps, junk), textures and audio is still there. But each week I can check three to five assets, so I think the scene has enough material to look and sound properly within two months. No "borrowed" Halflife2 assets this time! As for the engine, there isn't that much noticeable improvement. The sound engine should hear the same with FMOD. The compressed DDS should look the same as the uncompressed TGA's did (I damn hope so!), and upgraded input modules aren’t going to produce anything visual either. There are some noticeable new effects though (asides from quite a lot bug-fixed and little improvements):&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; - GPU Particles (with lighting)&lt;br /&gt; - Water&lt;br /&gt; - Ice shaders&lt;br /&gt; - Wall overlays (dirt, cracks, snow, frost)&lt;br /&gt; - Anti-Aliasing&lt;br /&gt;- And stuff I probably forgot&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Currently I'm playing with realtime water-fluids to replace the stupid rolling ripple texture with something better looking (and for another water article :p). But I'm not so sure if it will make it before Christmas. We'll see. The biggest improvement should be the recording quality! I haven’t been looking for a better way yet, but let’s see if I can use an external device to record the movie so the CPU won’t be hogging and choking the sound.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-PrdG9o9euZM/TqXNVavXMwI/AAAAAAAAAms/e98TrGcHwy4/s1600/StinkyChair1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 295px;" src="http://4.bp.blogspot.com/-PrdG9o9euZM/TqXNVavXMwI/AAAAAAAAAms/e98TrGcHwy4/s400/StinkyChair1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5667161473954558722" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;The (sharp specular highlight) edges on this stinky chair and the drawers in the background are anti-aliased with FXAA. But I’m not 100% convinced. Either FXAA isn’t effective enough (and making it more powerful will blur the entire screen), or the shader has a little bug…&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-7241780485669451812?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/7241780485669451812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/10/up-yours.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/7241780485669451812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/7241780485669451812'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/10/up-yours.html' title='Up yours'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-lkC-EJ_99_E/TqXLWRVeVEI/AAAAAAAAAmU/ncV49R4rreY/s72-c/TacticalMap.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-1244375163015098448</id><published>2011-10-16T05:57:00.000-07:00</published><updated>2011-10-16T07:29:39.703-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DDS files'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenGL Texture DXT Compression'/><title type='text'>Compressor, Part 2/2</title><content type='html'>What the hell we're we doing again? Oh yes, texture compression. In short, the main advantages are less storage space, less (video)memory space, faster loading/streaming, and if you're a lucky guy, a (little) performance boost cause less bandwidth is required. Reason enough to implement compressed texture formats... but how?&lt;br /&gt;&lt;br /&gt;When you target OpenGL, you can encode pixelData into the DXT1, DXT3 or DXT5 format. So first (1.) encode, then (2.) store it in a file (a DDS for example), (3.) load the file later on, and finally (4.) send the (compressed) pixelData to the videocard. Sounds pretty complicated, but we have some nifty tools.&lt;br /&gt;&lt;br /&gt;==========================================================&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. The Creation&lt;/span&gt;&lt;br /&gt;==========================================================&lt;br /&gt;Load a (raw) image, such as a bitmap or TGA file. Then encode it to a DXT format (or BC in case you target DirectX applications). So... we have to dig in compression algorithms now, right? Of course not. Don't reinvent the wheel, be lazy, and make good use of existing tools.&lt;br /&gt;&lt;br /&gt;You can download an existing convertor tool or try to find a plugin for your favourite painting program. There are plugs for Photoshop, Paint Shop Pro, Gimp, Paint.NET... These plugins typically convert a common image format to a DDS file. You can skip step 1 and 2 of this tutorial now, peace of cake. Have a good look though. Not all convertors have equal quality and export options. &lt;br /&gt;&lt;br /&gt;When my mobile research-lab was crunching on DDS, I had an old version of Paint Shop Pro though. Just ordered a new version (PSP X4), but no cool plugins at that time. I tried some other exporters, but they usually gave wrong output. Inverted RGB channels, flipped images, Lena changing into a guy, et cetera. Some claimed ATI has a good quality exporter, so I tried this instead: &lt;a href="http://developer.amd.com/tools/compress/pages/default.aspx"&gt;ATI Compress&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Too bad, this is not a ready-to-use convertor, not even a command-line tool(I hate those, too lazy to type). It's a DLL you can include in your own programmed tools. Normally I would pass, but with the lack of good exporting tools so far, I gave it a try. And I got to say, it wasn't that hard at all (getting into C++ again took me more time). The ATI library is pretty straight forward. It has a function to compress raw image data, and some basic utilities to read/write DDS files.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;1.- Load input image (bitmap, buttmap, tga, png, ...)&lt;br /&gt;2.- Generate Mip-Maps (if you like)&lt;br /&gt;3.- Let the ATI Compress library generate compressed pixelData (for each MipMap level)&lt;br /&gt;4.- Store it as a DDS file (or your own custom format)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Mip-Maps ?!&lt;/span&gt;&lt;br /&gt;In case you never heard of them, Mip-Maps are smaller ("blurred") variants of your texture. Pretty simple, half the size until you reach a 1x1 resolution. So a 256x256 image gets a 128, 64, 32, 16, 8, 4, 2 and 1 variant. But... why would you do that? Well, when looking a textured surface from a distance, one screen-pixel may have to sample from multiple texture-pixels. This can result in pixelated/blocky results, especially for textures with a high-frequency details or pattern such as black-white tiles. When you have mip-maps, the renderer will (automatically) pick a smaller, more blurry, variant to suppress this annoying artifact. A little downside is that mip-maps require extra image space (though the smaller resolution variants really don't take that much).&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-5AWSsEEiJiE/TprhJMs6_7I/AAAAAAAAAl8/6h_zhBb-19k/s1600/mipmap.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 203px;" src="http://3.bp.blogspot.com/-5AWSsEEiJiE/TprhJMs6_7I/AAAAAAAAAl8/6h_zhBb-19k/s400/mipmap.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5664087029516533682" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Sorry if you died from an epileptic attack.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;OpenGL / DirectX have functions that generate mip-maps automatically for you. However, generating them takes time! So each time you load a texture that uses mip-mapping, you're wasting even more time with generating them. That's why some image formats (such as DDS) supports the storage of pre-fabricated mip-maps. So instead of rebuilding them each time again, you store smaller variants of the texture ready-to-use in the image file. In other words, it makes the loading times faster.&lt;br /&gt;&lt;br /&gt;==========================================================&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. DDS File-Loader&lt;/span&gt;&lt;br /&gt;==========================================================&lt;br /&gt;Once your file has been generated somehow, you got to load it again in your app. I chose to use DDS files. Pretty obvious, cause this format supports compressed pixelData, storing prefab mip-maps, and even cubeMaps or layered (3D/Array) textures if you like. On top, it’s a common standard in Gameland nowadays. Monkeys see, monkeys do.&lt;br /&gt;&lt;br /&gt;Luckily the DDS format is fairly easy. Mainly cause it doesn’t store its pixels in a wacky way. The array of pixels is stored exactly as OpenGL or DirectX expects it. This makes DDS fast to read, as you don’t have to swap bits or do other tricks before you load it to the GPU. It’s 1 on 1. But wait… D-D-S… stands for “Direct-Draw-Surace”… Isn’t that DirectX slang?? So we can’t use DDS in OpenGL apps?!&lt;br /&gt;&lt;br /&gt;It is a DirectX thing indeed, and yep, you need a header file to get things working. But don’t worry. It’s not that your OpenGL program changes into a malformed Siamese twin with DirectX. Download the DirectX SDK, or if you are a Delphi user, you can use this: &lt;a href="http://www.clootie.ru/delphi/download_dx92.html"&gt;Clootie DX Pascal headers&lt;/a&gt;&lt;br /&gt;Then include “DirectDraw.h / pas” in your program. Done.&lt;br /&gt;&lt;pre name="code" class="brush: delphi"&gt;&lt;br /&gt;// Delphi code.&lt;br /&gt;      function  TEX_LoadFile_DDS( filename : string ) : TTexData;&lt;br /&gt;      var&lt;br /&gt;            ddsd          :_DDSURFACEDESC2;&lt;br /&gt;            fileCode      : array[0..3] of char;&lt;br /&gt;            factor        : integer;&lt;br /&gt;            bufferSize    : integer;&lt;br /&gt;            readBufferSize: integer;&lt;br /&gt;            pFile         : THandle;&lt;br /&gt;            readBytes     : Longword;&lt;br /&gt;      begin&lt;br /&gt;            { Open file... Calling Powdered toast man }&lt;br /&gt;            pFile := CreateFile(PChar(filename), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);&lt;br /&gt;            if (pFile = INVALID_HANDLE_VALUE) then begin&lt;br /&gt;                showMessage( 'DDS Load Error: Cannot open file ' + filename );&lt;br /&gt;                Exit;&lt;br /&gt;            end;&lt;br /&gt;&lt;br /&gt;            { Verify if it is a true DDS file. Not made-in-China fake stuff }&lt;br /&gt;            ReadFile( pFile, fileCode, 4, ReadBytes, nil);&lt;br /&gt;            if (fileCode[0] + fileCode[1] + fileCode[2] &lt;&gt; 'DDS') then begin&lt;br /&gt;                showMessage( 'DDS Load Error: file is not a valid DDS file.'#13+filename );&lt;br /&gt;                CloseHandle(pFile);&lt;br /&gt;                exit;&lt;br /&gt;            end;&lt;br /&gt;&lt;br /&gt;            { Read surface descriptor.&lt;br /&gt;              A struct that tells what we can expect in this file. }&lt;br /&gt;            ReadFile( pFile, ddsd, sizeof(ddsd), ReadBytes, nil );&lt;br /&gt;&lt;br /&gt;            case ddsd.ddpfPixelFormat.dwFourCC of&lt;br /&gt;                FOURCC_DXT1 : &lt;br /&gt;                      begin&lt;br /&gt;                        // DXT1's compression ratio is 8:1&lt;br /&gt;                        result.outputFormat := GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;&lt;br /&gt;                        result.isCompressed := True;&lt;br /&gt;                        factor := 2;&lt;br /&gt;                      end;&lt;br /&gt;                FOURCC_DXT3 : &lt;br /&gt;                      begin&lt;br /&gt;                        // DXT3's compression ratio is 4:1&lt;br /&gt;                        result.outputFormat := GL_COMPRESSED_RGBA_S3TC_DXT3_EXT;&lt;br /&gt;                        result.isCompressed := True;&lt;br /&gt;                        factor := 4;&lt;br /&gt;                      end;&lt;br /&gt;                FOURCC_DXT5 : &lt;br /&gt;                      begin&lt;br /&gt;                        // DXT5's compression ratio is 4:1&lt;br /&gt;                        result.outputFormat := GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;&lt;br /&gt;                        result.isCompressed := True;&lt;br /&gt;                        factor := 4;&lt;br /&gt;                      end;&lt;br /&gt;                else begin&lt;br /&gt;                      { Not compressed. Oh shit, didn't implement that! }&lt;br /&gt;                      result.isCompressed := False;&lt;br /&gt;                      showMessage( 'DDS Load Error: Uncompressed format not supported!'+#13 + filename );&lt;br /&gt;                      CloseHandle(pFile);&lt;br /&gt;                      exit;&lt;br /&gt;                end;&lt;br /&gt;            end; // case ddsd.ddpfPixelFormat.dwFourCC&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            { How big will the buffer need to be to load all of the pixel data&lt;br /&gt;               including mip-maps? }&lt;br /&gt;            if( ddsd.dwLinearSize = 0 ) then&lt;br /&gt;            begin&lt;br /&gt;                showMessage( 'DDS Load Error: dwLinearSize is 0!'+#13 + filename );&lt;br /&gt;                CloseHandle(pFile);&lt;br /&gt;                exit;&lt;br /&gt;            end;&lt;br /&gt;            if( ddsd.dwMipMapCount &gt; 1 ) then&lt;br /&gt;                bufferSize := ddsd.dwLinearSize * factor else&lt;br /&gt;                bufferSize := ddsd.dwLinearSize;&lt;br /&gt;&lt;br /&gt;            { Allocate pixel buffer, then read the (compressed)&lt;br /&gt;              PixelData (containing 1 or more MipMap levels) from the file }&lt;br /&gt;            readBufferSize := bufferSize * sizeof(char);  // Calc buffer-size&lt;br /&gt;            GetMem( result.pixels, readBufferSize );      // Allocate memory&lt;br /&gt;            ReadFile( pFile, result.data^ , readBufferSize, ReadBytes, nil);&lt;br /&gt;            CloseHandle(pFile); // Close file&lt;br /&gt;&lt;br /&gt;            { More output info }&lt;br /&gt;            result.width      := ddsd.dwWidth;&lt;br /&gt;            result.height     := ddsd.dwHeight;&lt;br /&gt;            result.numMipMaps := ddsd.dwMipMapCount;&lt;br /&gt;&lt;br /&gt;            { Do we have a fourth Alpha channel doc? }&lt;br /&gt;            if( ddsd.ddpfPixelFormat.dwFourCC = FOURCC_DXT1 ) then&lt;br /&gt;                result.components := 3 else&lt;br /&gt;                result.components := 4;&lt;br /&gt;      end; // TEX_LoadFile_DDS&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-vKoyWBrqDMo/TprnIYxZH_I/AAAAAAAAAmI/W8VUMiGEm4o/s1600/RadarCylinder_Contrast.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 262px;" src="http://3.bp.blogspot.com/-vKoyWBrqDMo/TprnIYxZH_I/AAAAAAAAAmI/W8VUMiGEm4o/s400/RadarCylinder_Contrast.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5664093612646408178" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Just a shot. Playing around with ingame contrast here...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;==========================================================&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. Pumping to the video-card&lt;/span&gt;&lt;br /&gt;==========================================================&lt;br /&gt;The final, and probably also most easiest step, is loading the (compressed) pixelData to the video-card. No worries, it’s pretty much the same as generating any other texture. Start with the daily stuff:&lt;br /&gt;&lt;pre name="code" class="brush: Delphi"&gt;&lt;br /&gt;    glEnable( GL_TEXTURE_2D );&lt;br /&gt;    glGenTextures( 1, @resultHandle );&lt;br /&gt;    glBindTexture( GL_TEXTURE_2D, resultHandle);&lt;br /&gt;    // Texture settings. Using mipmapping here...&lt;br /&gt;    glTexParameteri(GL_TEXTURE_2D,, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR );&lt;br /&gt;    glTexParameteri(GL_TEXTURE_2D,, GL_TEXTURE_MAG_FILTER, GL_LINEAR );&lt;br /&gt;    glTexParameteri( GL_TEXTURE_2D, &lt;whatever&gt; );&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Next we send the pixelData to the Twilight zone. One little thing to keep in mind is that we might have loaded multiple mipmaps, all in the same array of pixelData. So for each mipmap level, calculate the bytesize and offset in the array.&lt;br /&gt;&lt;pre name="code" class="brush: Delphi"&gt;&lt;br /&gt;      if textureData.usingCompression then begin&lt;br /&gt;          if textureData.outputFormat = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT then&lt;br /&gt;              nBlockSize := 8  else&lt;br /&gt;              nBlockSize := 16;&lt;br /&gt;          { Size of mipmap level 0 (original size) }&lt;br /&gt;          nHeight     := textureData.height;&lt;br /&gt;          nWidth      := textureData.width;&lt;br /&gt;          nOffset     := 0;&lt;br /&gt;&lt;br /&gt;          { Send the compressed mipmap(s) data to the texture }&lt;br /&gt;          for i:=0 to data.numMipMaps-1 do begin&lt;br /&gt;              if nWidth  = 0 then nWidth  := 1;&lt;br /&gt;              if nHeight = 0 then nHeight := 1;&lt;br /&gt;&lt;br /&gt;              nSize := ((nWidth+3) div 4) * ((nHeight+3)div 4) * nBlockSize;&lt;br /&gt;              glCompressedTexImage2DARB( GL_TEXTURE_2D,&lt;br /&gt;                                         i, //mipmap level&lt;br /&gt;                                         data.outputformat, // DXT1,3,5&lt;br /&gt;                                         nWidth,&lt;br /&gt;                                         nHeight,&lt;br /&gt;                                         0,&lt;br /&gt;                                         nSize,&lt;br /&gt;                                         pointer( integer(data.data) + nOffset)&lt;br /&gt;                                        );&lt;br /&gt;              nOffset := nOffset  + nSize;  // Offset in pixel buffer next time&lt;br /&gt;              // Half the image size for the next mip-map level...&lt;br /&gt;              nWidth  := (nWidth  div 2);&lt;br /&gt;              nHeight := (nHeight div 2);&lt;br /&gt;          end; // for i&lt;br /&gt;      end else ...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Texture quality&lt;/span&gt;&lt;br /&gt;Last, here's a little Kung-fu trick. Probably you noticed the "Texture Quality" setting in most games. Chose between "Godlike, medium or fucked-up". Obviously, computers with lower-end hardware and/or limited video-memory should pick a lower setting. And you want this option too, don't you? Pretty easy. Just skip the first mipmap level(s) in the loop. This way OpenGL will only deal with smaller textures, as the higher level(s) get disposed again. That's all you need to know for now, Daniel San.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-1244375163015098448?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/1244375163015098448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/10/compressor-part-22.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/1244375163015098448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/1244375163015098448'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/10/compressor-part-22.html' title='Compressor, Part 2/2'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-5AWSsEEiJiE/TprhJMs6_7I/AAAAAAAAAl8/6h_zhBb-19k/s72-c/mipmap.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-4766888009481866677</id><published>2011-10-08T08:45:00.001-07:00</published><updated>2011-10-09T12:57:05.526-07:00</updated><title type='text'>Turbo marketing</title><content type='html'>No more calling home for Steve Jobs. I'm not really familiar with Apple products, but condolences to his beloved ones and many, many iFans. 56 is not an age to die, especially not if your head is still full of ideas and ambitions. Rest in peace Steve.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pfew. The storm of emails and reactions is a bit over now. If you thought that demo movie was scary, I got my nerves in the throat as well last week! Having this unexpected, “massive” attention on the project is great free advertisement and can open doors, but is also scary at the same time. We hobby-developers, C++ and Turbo Pascal nerds may think T22 is sweet. But the common man who just wants to play a good game looks from a different perspective of course. It's either a cool product, or a piece of shit. If you buy a car, you don't care how much love was put into it, as long as it drives properly. In other words, T22 sort of got a little stress-test.&lt;br /&gt;&lt;br /&gt;And... should I look for another hobby (such as whispering horses, playing flute, collecting Iranian stamps), or are we still standing? I suppose so :). Most of the reactions we're positive, a few hated it, and a couple found the second half of the demo movie an anti climax. Ugly HUD logo's, scripted shift!-run! (“QTE”) sequence, a goofy monster, and what in the devils name was that fat sprite doing at the end? &lt;br /&gt;&lt;br /&gt;Taste differs of course. Especially when it comes to horror. I’m scared of clowns and porcelain puppets, others love them. Though some responders might have skipped the fact that this little demo-movie was done by a programmer without real art skills, in a 10% finished engine. Do you really want to know why the last part was scripted so much? Ok then... stair-climbing physics were still so bad that the player couldn't run up in a decent tempo. So I putted him on a rail, just like that goofy monster :D The available assets were very limited, which is why the weird robotic-hand comes from this test-model I made years ago in 5 minutes:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-DB0ZDca2FmM/TpBxIDz88iI/AAAAAAAAAlc/OqUbTJheYHk/s1600/door2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 296px;" src="http://3.bp.blogspot.com/-DB0ZDca2FmM/TpBxIDz88iI/AAAAAAAAAlc/OqUbTJheYHk/s400/door2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5661149114880815650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Third person?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Oh well, as long as the Angry Video Game Nerd doesn't say Tower22 is shitcrackers and he rather eats boiled apeballs, I guess we're ok. But sure, we still have a looong way to go. Rome wasn't made in one day either, especially not in the late night hours after a day of plumbing work! It's funny to see some think that we're actually almost done with a (sellable) Indie game. For example, I got mail from a website, asking if we could send a copy for review, as soon as the game is playable. I wish we can, but... do you have a minute?&lt;br /&gt;&lt;br /&gt;As said before, we first need some more artists at least. The good news is that, just before T22 showed up on the internet, an extra person offered his help on the audio (when not busy with real work). Say hello to David Garcia Diaz(Espanol gringo):&lt;br /&gt;&lt;a href="http://davidgarciadiaz.com/"&gt;http://davidgarciadiaz.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The whole thing got me a bit thinking about... the Power of Internet (oooh). The reason why I'm not shouting T22 of the roofs, is because I like to make sure I show something good. Friends and others sometimes ask me about showing it to publishers, sending it to website X, doing aggressive marketing, and so on. Ok, I’m not trying to beat CryEngine or UDK, but showing half baked garbage is like cutting yourself with a knife. Imagine Apple shows a cheap plastic, not-white-colored, monochrome, clunky prototype of the iPad6. Jobs would beat the hell out of the marketing team!&lt;br /&gt;&lt;br /&gt;It definitely becomes clear that internet can be a jump platform that launches you sky-high. Think about young talented boys &amp; girls that suddenly got famous via Youtube. Or the amount of clicks Half-life fan websites get every day. But the Internet can also be a deep pitfall. To show you, here some professor Dolittle statistics:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;amount of views on this Blog on an average day: ~50 &lt;br /&gt;...(half from them are looking for an Albert Einstein picture, or stuff like Horseporn)&lt;br /&gt;amount of views on the Blog on Friday 30 September: ~2.000&lt;br /&gt;amount of Youtube views last 10 months, 1 week ago: ~2050 &lt;br /&gt;amount of Youtube views today: ~28.500&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Enough ego tripping, but see what I mean? Because of some "advertisement", the numbers mega-quadripled. If, say 80%, of the viewers leave with a positive feeling about T22, we can be proud on ourselves. On the other hand, if 50% or more doesn't really like it or even hates it, you have a problem. Now Tower22 doesn't involve money, commercial stakes, and neither was it under development for many years already. But imagine your product, blood-sweat and tears, got burned because it leaked in an unfinished state, or just because the majority doesn't like it? I can imagine some developers must feel really, REALLY bad if their (life)work receives a lousy 5.0 on Gamespot, only 2 stars at IGN, or a Crocodile Dundee Turd award for the worst game of 2011.&lt;br /&gt;&lt;br /&gt;The first blow is half the battle. Now we weren't prepared to fight actually, but all in all, we can breathe a sigh of relief. Reactions such as "&lt;span style="font-style:italic;"&gt;Thanks, another set of underpants ruined&lt;/span&gt;", "&lt;span style="font-style:italic;"&gt;Dont give up on this!&lt;/span&gt;", or people who like to buy this non-existing game are heartwarming. More than ever we have good reasons to keep developing. Cause there is a lot to improve! For one thing, it's time to have a website that explains things a bit better. Although it's really fun to see people speculating about the game;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;- Demo1 was a programmer "art" movie with very limited assets&lt;br /&gt;- I know, too much (motion) blur sucks&lt;br /&gt;- Don't worry, I hate QTE too&lt;br /&gt;- The game is far from finished. First trying to form a proper team&lt;br /&gt;- The game is not in Russia. Sorry for the confusion. But yes, the setting is inspired on it.&lt;br /&gt;- Yes, the game is all about the story, and I won't tell you. Hence, some  of the team members don't even know the story! Top secret shit.&lt;br /&gt;- The genre is a platform-survival-music game. Ok, survival horror then.&lt;br /&gt;- It all takes place in a massive building. Though it’s not only dusty corridors and Soviet-IKEA apartments…&lt;br /&gt;- No military, failed experiments or spooky hospitals in this game.&lt;br /&gt;- Most the time, you won’t see monsters or other badguys. Slow suspence, getting winded up, claustrophobia and sound should do most of the terror.&lt;br /&gt;- The player is not named Robert (unless we really can’t find a name. I didn’t name my own daughter yet either. Picking names is so damn difficult).&lt;br /&gt;- Your character isn’t an action figure, yet he won’t be completely defenseless either&lt;br /&gt;- A next (Tech) Demo is planned end this year&lt;br /&gt;- Another movie that shows bits of the gameplay and boogiemen is planned for 2012&lt;br /&gt;- A true release date indication? When it’s done!&lt;br /&gt;- The game uses a homebrew engine programmed in classic Delphi7. It uses the libraries OpenGL 2x, Cg, FMOD, Python and Newton.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-uKJzVmSnT0c/TpB2MJlJOCI/AAAAAAAAAlk/UsiC4saa6dc/s1600/T22_PressImage1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 295px;" src="http://4.bp.blogspot.com/-uKJzVmSnT0c/TpB2MJlJOCI/AAAAAAAAAlk/UsiC4saa6dc/s400/T22_PressImage1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5661154682706933794" /&gt;&lt;/a&gt;&lt;br /&gt;I like to finish this post with quotes that made me laugh, cry, vomit, or piss my pants. Next time we're back on Compression DDS files!&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;"This shit is trippy",&lt;br /&gt;"Boner at 3:40"&lt;br /&gt;"YOUR MOM is more scary than Tower22."&lt;br /&gt;"He’s a plumber? Now it doesn’t suprise me that at the &lt;br /&gt;.....destroyed apartment the only thing that didn’t collapse was the pipe. &lt;br /&gt;&gt;&gt;"It’s all a cunning plan to increase his plumbing business by making you shit bricks."&lt;br /&gt;&lt;br /&gt;"but the monster encounter and very last bit were more than a little ridiculous."&lt;br /&gt;"I can't wait to shit my pants :)"&lt;br /&gt;"You're in my world now? Batman...."&lt;br /&gt;"I shitted my pants. Twice." &lt;br /&gt;"What the FUCK did I just watch?!?&lt;br /&gt;......And who's going to pay for my now-ruined chair? &lt;br /&gt;"Note to self: chairs aren't good at holding huge amounts of shat bricks "&lt;br /&gt;"If i was playing I would of dived the fuck out that window at the end, falling to your death is better than staying in that fucking haunted shit hole!"&lt;br /&gt;"do you play as steve form minecraft? he looks very blocky"&lt;br /&gt;&gt;&gt; "it's actually steve holt"&lt;br /&gt; &lt;br /&gt;“fuck watching this again at 1am "just before bed"&lt;br /&gt;“I have a fever, and the onlyprescription is more motion blur”&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-4766888009481866677?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/4766888009481866677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/10/turbo-marketing.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/4766888009481866677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/4766888009481866677'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/10/turbo-marketing.html' title='Turbo marketing'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-DB0ZDca2FmM/TpBxIDz88iI/AAAAAAAAAlc/OqUbTJheYHk/s72-c/door2.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-9128193041679029601</id><published>2011-09-30T04:06:00.000-07:00</published><updated>2011-09-30T06:19:03.940-07:00</updated><title type='text'>The plumber</title><content type='html'>Woke up, went to work, got myself some coffee, parked my ass on a chair, turned on the laptop, scratched my balls, checked the email...  holy butcrack.&lt;br /&gt;&lt;br /&gt;Wow. &lt;a href="http://www.rockpapershotgun.com/2011/09/30/highrising-fear-tower22/"&gt;rockpapershotgun.com&lt;/a&gt; &amp; &lt;a href="http://indiegames.com/2011/09/trailer_tower22_rick_nieuwlaat.html"&gt;IndieGames.com&lt;/a&gt;, a blog about, yep, Indy games, got notice of T22. Suddenly a lot more traffic on this crappy hole on the WWW, a dozen of Youtube abonnees + jokes, and some articles about T22 on these websites.&lt;br /&gt;&lt;br /&gt;I'm shy by nature and hate to stand in the spotlights, but having this attention on your (life)work is great. Got to correct a few wrong assumptions though!&lt;br /&gt;&lt;br /&gt;------------------------------------------------&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;...Skyscraper in the Soviet Union...&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;I mentioned the word "Soviet era style" several times. But... T22 is not really in the Soviet Union. The theme is certainly related, not only on the map design, but in the end the story has not much to do with Stalin &amp; comrades.&lt;br /&gt; &lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;...You play as Robert...&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Thanks for the name suggestion! But honestly, Robert is a real-life person who is busy designing the player. The protagonist himself has no name yet! But I bet Robert is pleased!&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;...Then what the # is the game about?!...&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Uh... It's hard to tell without spoiling things. The whole story and game is one big quest basically. All I can tell is that you are a caretaker doing jobs for the boss in a big (sort of Soviet style) skyscraper indeed.&lt;br /&gt; &lt;br /&gt;And after a while, you do want your freedom (back). So the player, codename Robert, wants "to break free. God knows, God knows I want to break free." "I've Fallen in love"... wait, that's Queen. No love for Robert here!&lt;br /&gt; &lt;br /&gt;And yep, the building is pretty much abondon. You'll try to puzzle/search your way out, which makes it a bit different than a zombie slasher or action game. But that doesn't mean you won't get your hands dirty eventually! Be prepared to be affraid, very affraid.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;The demo movie is a bunch of scripted events btw. The game itself should give freedom. You decide where to go, when to go, and what to do if something happens. But hey, I wasn't that far programming ;)&lt;br /&gt; &lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;...The sound hurts my ears / too much blur...&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;The sound, SSAO and motion blur are making havoc in this movie indeed. Partially because unfinished business, partially because of the cracky framerate. The movie was recorded on a somewhat older videocard (GeForce 8800) with FRAPS killing the CPU in the background. It made the sound go berserk, and the motion blur even nastier as the deltaTime between 2 frames was relative big.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;...I'm a Plumber...&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;That would be pretty romantic right? Not sure if "a plumber by trademark" means I'm doing a proper job, or actually being a plumber? Too bad. The truth is, I can barely hold a baco. Never ever ask me to fix your toilet, unless you want a sinflood! In real life, I'm programming operating systems for pharmaceutical machines, warehouses, and my sweet 30 ton babies:&lt;br /&gt;&lt;a href="http://www.youtube.com/results?search_query=ar-4w&amp;aq=f"&gt;youtube1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/results?search_query=epd538&amp;aq=f"&gt;youtube2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;...Out soon...&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Oh dear :) Don't want to spoil the party, but this game won't be out anywhere soon. Since we try to put the visual standard pretty high, and the T22 world is going to be kinda big, there is sh~tload of work to do. Programming the engine further, and having some maps, models, textures, sounds and animations would be nice too.&lt;br /&gt; &lt;br /&gt;Do you remember the famous words "When it's done!". Well, that game is "done" all right. I'm going to say the same :) But seriously, the current target is forming a team, rather than creating the game right away. I can dream all I want, creating a "big" game with just a few hobbyists is not realistic.&lt;br /&gt; &lt;br /&gt;So let's see if we can ensemble enough talented people to create a game in our spare time... Or at least make a good start, and then look further to get this baby on a more professional level. Doing this Blog and demo movies are part of the strategy; hopefully it attracts talented people!&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;That still sounds like a little boys dream, and... yes, maybe it is. So what? It doesn't mean it's impossible. The people we have here now are capable to create a game like this. The only problem is the lack of manpower so far. Let's show those bastards you don't need a 30-trillion budget to create a good game!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-sGWLcBbahvM/ToWytJF3CUI/AAAAAAAAAk8/LBmYU5bkXGA/s1600/FloodTunnel1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 296px;" src="http://3.bp.blogspot.com/-sGWLcBbahvM/ToWytJF3CUI/AAAAAAAAAk8/LBmYU5bkXGA/s400/FloodTunnel1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5658124995465251138" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Ever thought about sending this pitch to a publisher?&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Yes, but the project is still pretty premature. As said, a team too small for mass production, lot's to add to the engine (including fixing the motion blur! ). First things first, then we'll look further. At this point, I simply can't promise anything to an investor. Unless we work 400% on it maybe, but I don't think the other girls in this house would appreciate that :)&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;What to expect anywhere soon then?&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;* A second tech-Demo movie is targetted end this year. Not a "cinematic" horror movie like before, merely a showcase of the Radar Station map we use to test objects.&lt;br /&gt;* A third horror-gameplay movie is targetted somewhere next year.&lt;br /&gt;* A (simple) website end 2011 / begin 2012&lt;br /&gt;* In the meanwhile, collecting more people. Currently we are looking for 3D environment mappers, environment concept-artists, possibly 1 more audio dude(tte), and a texture artist. In 2012 we'll be needing an animator as well.&lt;br /&gt;* When the team is big enough and oiled, we'll start creating actual game content.&lt;br /&gt;  &lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;"Julio Iglesias is in charge of the concept art?.&lt;br /&gt;You mean the singer?"&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Yes.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt; &lt;br /&gt;What color of underpants do you wear?&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Transparent-blue or with a panda print.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt; &lt;br /&gt;Halflife2 / Source MOD&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;No, it's not a Source MOD, neither using another engine such as UDK. it's all coded in-house. And Yes, quite some contents from the first demo movie are from HL2 indeed. Not that I wanted to, but how the hell is a plumber/programmer to create those textures and sounds then? Creating that monster (and animating it) required the maximum of my programmer-art skills. Got to start somewhere. Can't attract good people if I show stuff like this!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-F5se0BwOJgw/ToWvqSxBHII/AAAAAAAAAks/K_I_ASNqtgw/s1600/BibleGames.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 376px; height: 290px;" src="http://2.bp.blogspot.com/-F5se0BwOJgw/ToWvqSxBHII/AAAAAAAAAks/K_I_ASNqtgw/s400/BibleGames.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5658121647987694722" /&gt;&lt;/a&gt; &lt;br /&gt;Excuses, got to play dirty sometimes. The next movie however will have our own textures and sounds though. In fact, pretty much most screenshots on the Blog from this year are using our own texture sets.&lt;br /&gt; &lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;"This stupid video made me broke my Shift key"&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Apologees, we'll send a new one.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt; &lt;br /&gt;...Amnesia / Penumbra...&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;T22 is quite often compared to Amnesia. And that's a good thing! They managed to put down a f#cking scary game with limited horsepower as well. Though it's not inspired on Amnesia. Never heard of the game until recently when one of the team members gave  me a link. As a matter of fact, I don't know much horror games anyay. Only played a Doom3, a few Silent Hill's and Gamecube Resident Evils. And Amnesia made me poop my pants. Isn't that ironic?&lt;br /&gt; &lt;br /&gt;The gamestyle is a bit similiar though. In Amnesia, instead of fighting, you run for a single enemy that wanders the area. A lot more terrifying if you ask me, although the ability to defend yourself once in a while would be nice...&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt; &lt;br /&gt;... The fat lady at the end of that Demo movie, wtf?...&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;That was just a joke, putting that photo of my girlfriend there. No, Polish women aren't that fat :) Though this woman is as flat as a 2D sprite as well.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-8s8l7oWLoWE/ToWwYruDICI/AAAAAAAAAk0/SOSxB59mmlo/s1600/FatLady.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 400px;" src="http://1.bp.blogspot.com/-8s8l7oWLoWE/ToWwYruDICI/AAAAAAAAAk0/SOSxB59mmlo/s400/FatLady.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5658122444960112674" /&gt;&lt;/a&gt;&lt;br /&gt;Thank you all for reading and your (positive) feedback. It makes it all worth! Back to work now!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-9128193041679029601?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/9128193041679029601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/09/plumber.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/9128193041679029601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/9128193041679029601'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/09/plumber.html' title='The plumber'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-sGWLcBbahvM/ToWytJF3CUI/AAAAAAAAAk8/LBmYU5bkXGA/s72-c/FloodTunnel1.jpg' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-8052154478122913230</id><published>2011-09-24T05:13:00.000-07:00</published><updated>2011-09-24T08:18:19.851-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenGL Texture DXT Compression'/><title type='text'>Compressor, Part 1/2</title><content type='html'>In case you are a programmer or texture-artist, you probably have heard about DDS files or texture compression. But if you are like me, you may have skipped all those articles. Pfff, compression, who needs that? Bitmaps and TGA files work for me, Pixel-data is pixel-data right? Besides, I've been taught that compression makes the quality worse, and reduces the performance because in the end, your pixels still have to be decompressed to a raw format. So what's the point?&lt;br /&gt;&lt;br /&gt;Well forgive my ignorance. Guess I'm still traumatized because 12 years ago, I couldn't figure out why my sprites had jaggy pink edges when using JPEG files. Oh yes, the compression did that. But although the quality / performance arguments are valid, texture compression actually gives some nice possibilities. In this post, I'll write about using DXT compressed textures in your OpenGL program, and the DDS file format that can store this format.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. For beginners: (de)compression&lt;/span&gt;&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;For starters, as the name sais, compression is a technique to store (large) buffers of data with some tricks to reduce the size. When it comes to images, we usually have a big array of bytes. In a classic RGB (24 bit) image, each pixel takes 3 bytes. 8 bit for red, 8 bit for green, 8 bit for blue. Some images also have an 8-bit alpha channel, which makes the total size of a pixel 32 bit. Calculating the total buffer size is easy:&lt;br /&gt;.....width * height * pixelSize. 512 x 512 x RGBA8(32 bit) = 1 MB&lt;br /&gt;&lt;br /&gt;Cool, but 1 megabyte for a pretty small texture is huge (1 floppydisk!). Older photo camera’s would have their SD cards full after just a few clicks. So, that's why JPEG is often used. JPEG uses Huffman encoding, which is based on the probability a certain piece of data (pixelcolor) occurs. If we only have 20 different colors in an image, we can index the pixelcolors with a 5-bit (=32 possibilities) code. Further compression can be done by giving frequent colors a short bitcode, while rare colors get a longer code. Well, for a way better description, &lt;a href="http://www.cs.duke.edu/csed/poop/huff/info/"&gt;check this.&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-cjw88Zlp63M/Tn3elHZVSsI/AAAAAAAAAkc/oQqrE9syh1g/s1600/CompressionExample.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 257px;" src="http://1.bp.blogspot.com/-cjw88Zlp63M/Tn3elHZVSsI/AAAAAAAAAkc/oQqrE9syh1g/s400/CompressionExample.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5655921436269038274" /&gt;&lt;/a&gt;&lt;br /&gt;Smart huh? However, compressing the image has three main disadvantages. First there is usually &lt;span style="font-weight:bold;"&gt;quality loss&lt;/span&gt;. You probably have seen blurry blocks in JPEG images, especially when the color contrast is low. To put it simple, most compressed images NEVER reach the quality of a raw format (such as BMP or uncompressed TGA / PNG). Then again, if the resolution is big enough, compression settings are ok, and/or the small details don't really matter anyway, the loss is acceptable.&lt;br /&gt;&lt;br /&gt;Second problem is the &lt;span style="font-weight:bold;"&gt;decompression-time&lt;/span&gt;. It simply takes some more time to convert the cryptic pixelmess to a raw format. Your video-card needs to produce raw (RGB 8-bit) pixeldata first, before the monitor can show it. Compare it to translating a Chinese movie to English. First a translator has to write down the English subtitles or do voice acting before it can be shown on TV. This process takes some time.&lt;br /&gt;&lt;br /&gt;A third little problem is &lt;span style="font-weight:bold;"&gt;the compression itself&lt;/span&gt;. Just like decoding, encoding takes some extra effort as well. Luckily computers are fast these days, so you won't really notice. However... it's not fast enough to do many textures on the fly while rendering a game. This is why it usually happens "offline":&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; 1.- Create your image (photograph / paint / capture raw data)&lt;br /&gt; 2.- Compress it in whatever file format&lt;br /&gt; 3.- Load in your application&lt;br /&gt; 4.- Decompress it back to raw-data&lt;br /&gt; 5.- Use (render) it.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-qz0HcH1qiQQ/Tn3Xgy24TYI/AAAAAAAAAkU/HgNRP0KLvMI/s1600/LenaCompressed.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 246px;" src="http://3.bp.blogspot.com/-qz0HcH1qiQQ/Tn3Xgy24TYI/AAAAAAAAAkU/HgNRP0KLvMI/s400/LenaCompressed.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5655913665454951810" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Usually some quality loss is acceptable.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Compression &amp; realtime Graphics&lt;/span&gt;&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;So far, the only main advantage of using compressed images, is the reduced space on disk. You can't just load a JPEG and send it to the video-card texture memory right away. Nope, first you'll have to decode the data, then send a raw buffer of colors to the video-mem. So in the end you are still using the same amount of memory, it took extra time to decode, AND you lost quality. In other words, screw JPEG or any other compressed image format for graphics.&lt;br /&gt;&lt;br /&gt;But wait. Things have changed a bit. Video-card memory has grown a lot last 10 years. From 32 MB to a gig or more. Unfortunately, games grow even faster. We want ultra-high res textures, and LOT's of them. Using all those textures at the same time requires quite a lot memory space, and bandwidth. Bandwidth? Imagine 10.000 hungry fat guys. You need 100 mcDonalds trucks to transport hamburgers. If all those trucks need to travel through a tunnel at the same time you get traffic-jams. Wouldn't it be nice if a single truck can carry more hamburgers, ending up with less trucks?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So, the graphic masters came up with compression algorithms specially designed for video-cards. I'm a newbie here as well, so I can't tell you the fine details, but you may have heard about DXT1, DXT3, DXT5, S3TC, BC1..7. Each of them is a compression method. Picking one is a trade-of between quality and space, and it also depends on what kind of image you want to compress (a normalMap, a simple blurry texture, a grayscale image, transparency yes/no). The compression ratio can be up to 1:6, which means a 1MB texture becomes ~170 kb.&lt;br /&gt;&lt;br /&gt;The way the pixels are trashed together, is compatible with OpenGL / DirectX. That means you don't have to decompress the pixeldata first, before sending it to the videocard. No, you can send the packed buffer right away. That means the video-memory will be spared as well. Decompression happens on the fly by the hardware. I'm not sure if there is no performance penalty at all, but it seems the hardware can read compressed data just as fast as raw data. In fact...&lt;br /&gt;you can even boost the performance! Remember the mcDonalds trucks? Since you need to transport less data on the buses, there will be less bandwidth issues as well. Now you probably won't notice this is you were only using a few textures anyway, but complex scenery such as a FPS game can benefit... Up to 20% according to some!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-IWsLV6pAgww/Tn3x75An2iI/AAAAAAAAAkk/-x6s8vsdh1k/s1600/JunkRacks.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 293px;" src="http://2.bp.blogspot.com/-IWsLV6pAgww/Tn3x75An2iI/AAAAAAAAAkk/-x6s8vsdh1k/s400/JunkRacks.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5655942718265219618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;So far only 10 different textures are used in this snapshot. Or well, actually 20 as most objects also use a second or third image (normal/emissive/specular/height Map). Most textures have a resolution of 512x512 or 1024x1024, RGBA. So in total, there would be around (1024*1024 * 4(rgba) * 20(textures) = 80 MB of texture data pumped around every cycle (mip-maps, shadowMaps and deferred buffers not included). With compression, we can reduce this to ~20 MB.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Another cool detail is the loading time. Since you don’t need to convert stuff, and your harddisk or Blu-ray has to read less bytes, streaming goes faster. Who doesn’t like fast loading times? Tower22 streams maps and textures in the background while playing, so faster streaming is certainly nice.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Advantages&lt;br /&gt; + Less space required on disk / CD-Rom / Floppy disk / Blu-ray / Tape &lt;br /&gt; + Smaller files are loaded / streamed faster as well&lt;br /&gt; + Pre-build mipMaps in DDS files make the loading even faster.&lt;br /&gt; + Less space required in the video memory&lt;br /&gt; + Less bandwidth required. *Could* be a performance win.&lt;br /&gt; + Less quality maybe... but you can use bigger resolutions as well!&lt;br /&gt;Disadvantages&lt;br /&gt; - Quality loss. In some cases, compression is not worth it.&lt;br /&gt; - Extra offline steps for the artists to produce compressed (DDS) files.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;About the quality loss, this depends a bit. Matt(MJP) gave me some tips:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;* Chose the proper compression methods&lt;br /&gt;......- DXT1: Lower quality, higher compression, 1-bit alpha only(on/off)&lt;br /&gt;......- DXT3: Better quality RGB, 4-bits for the alpha. Suitable for transparent ......        textures like foliage or a metal fence/grate.&lt;br /&gt;......- DXT5: Suitable for images with smooth alpha channels or for normalMaps. Compress R and G, reconstruct B in shader.&lt;br /&gt;&lt;br /&gt;* Use the right compression tool (nVidia, ATI, Microsoft, ...). Some do a better job than others, so carefully pick your weapons.&lt;br /&gt;   &lt;br /&gt;* You could pick a bigger resolution to compensate the quality loss, and still use less space in the end in some cases.&lt;br /&gt;   &lt;br /&gt;* Keep the option to use uncompressed textures, in case the quality sucks too much hairy balls.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Okidoki, but how in the name of SaintCrap can we make use of it? Consider three steps:&lt;br /&gt;1.- Create a file with compressed image data... DDS files!&lt;br /&gt;2.- Load the file in your program&lt;br /&gt;3.- Create a (OpenGL/DirectX) texture using the compressed data&lt;br /&gt;&lt;br /&gt;Next time, I'll tell you how to create DDS files, how to load them, and how to create an OpenGL texture using an (DXT) compressed image. Now it's time for beer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-8052154478122913230?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/8052154478122913230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/09/compressor-part-12.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/8052154478122913230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/8052154478122913230'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/09/compressor-part-12.html' title='Compressor, Part 1/2'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-cjw88Zlp63M/Tn3elHZVSsI/AAAAAAAAAkc/oQqrE9syh1g/s72-c/CompressionExample.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-3644397804590446980</id><published>2011-09-12T23:06:00.000-07:00</published><updated>2011-09-13T00:15:39.737-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='T22 Player'/><category scheme='http://www.blogger.com/atom/ns#' term='game characters'/><title type='text'>Play on Player</title><content type='html'>Yea, my foot has been “restored”! Gypsum is gone, and now I can walk again (as if raped by a bull). Drink your milk boys &amp; girls!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Movie-knowledge-check. A muscular robot? --&gt; Arnold Schwarzenegger. That dude doing kicks and splits with a French accent; Jean Claude van Damme. The black man with that magical voice; Morgan Freeman of course. The simple guy telling his whole life story on a bus-stop bench; Tom Hanks. The psychopath shouting that Johny is here, Jack Nicholson. The teasing woman spreading her legs, Sharon Stone. "&lt;span style="font-style:italic;"&gt;Can you fly bobby?&lt;/span&gt;", Kurtwood Smit. Roundhouse 360 kick; Chuck Norris.The little fatman with the big ###, uh, Ron Jeremy.&lt;br /&gt;&lt;br /&gt;Just a grasp in the Hollywood Lucky Dip. And by now, the game scene also has an impressive repertoire of virtual actors. The jumping guy that looks like the earlier mentioned Ron; Super Mario. The medieval sadomachosism man with a whip; Simon Belmont. The fast blue hedgehog thing; Sonic. Hatatjapoerasturvat-something; Ruy from Streetfighter. "&lt;span style="font-style:italic;"&gt;Your face, your ass, what's the difference?&lt;/span&gt;", Duke Nukem. The first polygonal breasted adventurer; Lara Croft. The chain-smoking sneaky grandpa; Solid Snake. That asswhipe stealing the princess every time; Bowser. The fairy-dude with the green hat; Link. Female bounty hunter; Samus Aran. The ninja with the skeleton head... Skorpion wins. The clumsy wannabe pirate; Guybrush Threepwood.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-CKi4mdqhHXA/Tm75ZO_Ll_I/AAAAAAAAAj0/nrSFj1TPc6c/s1600/Dressroom_Bench1b.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://4.bp.blogspot.com/-CKi4mdqhHXA/Tm75ZO_Ll_I/AAAAAAAAAj0/nrSFj1TPc6c/s400/Dressroom_Bench1b.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5651728794311694322" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Now that my foot is ok, I can finally sport again. So here's a dressroom bench. It has been a while since I did a 3D object myself!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Not all games have strong characters with a complete biography, but creating a bond between game and player usually starts with putting down a loveable or interesting protagonist. A character being worth to pick up the joypad/keyboard. Cause, who wants to play a game with a stupid character anyway? Action hero's usually require a good look, a set of biceps and a doses of one-liners to make friends with the player. More serious games pass decorate the protagonist with a mysterious background. Lost your family, grew up in an underground sewer, shit like that. Who are you? Play the game and find out.&lt;br /&gt;&lt;br /&gt;Yet other games manage to create a character that everybody instantly loves, such as Sackboy from Little Big Planet. Did you ever hear Mario talking by the way? We don’t even know where he lives exactly. Yet Mario is the most famous game-sprite in history. Some characters have that love-factor, others don’t. Now how about Tower22? What’s our plan to grab the player and drag him into the screen?&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-pNVXeFyZUTo/Tm76BXWomTI/AAAAAAAAAj8/W94_p6THBj4/s1600/T22Maincharacter-Web.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 223px; height: 400px;" src="http://2.bp.blogspot.com/-pNVXeFyZUTo/Tm76BXWomTI/AAAAAAAAAj8/W94_p6THBj4/s400/T22Maincharacter-Web.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5651729483752315186" /&gt;&lt;/a&gt;&lt;br /&gt;Here you go, a sketch of the player by Robert. There is still some cloth shopping and cheese-grater work to do here and there, but we’re getting somewhere. Not that Tower22 has much to do with “Communism” or “Russia”, but we chose the Soviet theme as a design-code. Therefore the character needs a typical Eastern Europe / Russian look as well. I’m not a fashion queen, but after a couple of visits in Eastern Europe, I can tell a few details. First, most men have a normal posture. No body building bullshit (who can afford the sport school), and neither fat. Most people work too hard to become fat. Second, a lot of men have short dark or blonde hair, often flat on the head (because they wore a cap or didn’t have time to smear 10 kg gel in it). A little bit the “army” look. Having a “tough-guy” attitude seems to be popular here by the way; lot’s of youth are wearing army trousers, trying to look dangerous and stuff.&lt;br /&gt;&lt;br /&gt;Now our guy isn’t a kid or football hooligan anymore, he looks a bit exhausted. Yes, although things are slowly getting better in these regions, people still have sort of an depressed look if you ask me. Maybe it’s Slavic DNA, but I guess being bored, or just tired from all that work is playing part here as well. Read the lips: “Life isn’t easy”. Men like our player don’t have time (and money) to trim theirselves a cool George Cloney beard, buy the latest fashion shoes, and enjoy life. Fuck that, he wakes up to work. Nothing more, nothing less. Now that’s the kind of look we from T22 Next Top Model are looking for.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-WmVuQcWRoIo/Tm76Ud2EwMI/AAAAAAAAAkE/H5Hd4RzrOZo/s1600/T22-Heads2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 192px;" src="http://2.bp.blogspot.com/-WmVuQcWRoIo/Tm76Ud2EwMI/AAAAAAAAAkE/H5Hd4RzrOZo/s400/T22-Heads2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5651729811912310978" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Robert made a whole set of (3D) "sketches" to pick from. We chose this one, because it has the tired "fuck-off", yet friendly, look. Now Robert is busy making a real 3D version. That version will be slightly different, and with little details such as beard, elder-marks, maybe a little scar, oil smear, sweat... In the meanwhile I have to make a realistic skin shader one day.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Not 100% sure, but most probably, the game will be using the first-person camera perspective. In other words, who knows how the player really looks like. Ok, you will see him in mirrors or in a few cut-scenes maybe, but most of the time you can just as well imagine playing the game with Robocop or Whoopy Goldberg... wait the player has white male arms. Never mind, you get the point. You won't see the player that much, the looks alone is not enough to make you care about the player.&lt;br /&gt;&lt;br /&gt;So there goes the "lovely" factor. We need something else to get a love-match. A vast amount of cut-scenes with Reservoir Dogs dialogs maybe? Meeeh... not that I don't like those movies, but our player isn't exactly a joking piece of thug. And even if he was, T22 is a horror game remember. The game is supposed to make you poop your pants, not to piss yourself because it was so hilarious. Many horror-game/movie protagonists are normal, frightened, very human boys and girls. Would Resident Evil 1 still be scary if you run/jetpack through the corridors with Duke kicking ass? No, we want a fragile, sensitive, weak girl/guy. Like the Silent Hill or (older) Resident Evil characters... Though Chris took a steroid cure as well, his arms were 6 times bigger in the last RE game. But hey, RE5 wasn't scary either.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-AAUWrRGDrg0/Tm7-g1v3QcI/AAAAAAAAAkM/SOiP-j64STE/s1600/HeatherChris.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 396px; height: 400px;" src="http://3.bp.blogspot.com/-AAUWrRGDrg0/Tm7-g1v3QcI/AAAAAAAAAkM/SOiP-j64STE/s400/HeatherChris.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5651734422533652930" /&gt;&lt;/a&gt;&lt;br /&gt;Heather from Silent Hill3, and Chris Redfield (without motor-oil injections) in the &lt;span style="font-style:italic;"&gt;GC Remake version. Now Chris looks as if he can defend himself, but the difficult camera positions, stiff controls and scarce ammo still made him vulnerable for a bunch of stupid zombies. And for good reason, otherwise the game wouldn't be scary.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Although anti-hero, it's easier to identify with such characters in horrific settings. The player does the same what you would do: miss your gunshot and run like a girl. Well, probably you would also lock yourself on the toilet, rather than exploring a haunted zombie infested mansion. At least that's what I would do :) Either way, both you and the player are in the same nasty situation, so that makes a bond. And in case of a first-person-view, it's even easier to imagine that your own person is the player. Hence, likely T22 will be using the "Link" method. The what method? Yep, "Link", from Zelda. Or whatever his name is, because the player can always enter his own short name at the start of the game. This character keeps his mouth shut, has little to no emotions, and even a custom name. &lt;br /&gt;&lt;br /&gt;In other words, your fantasy has to "complete" the character. Like with books. Some writers describe more details than others, but in the end your fantasy has to picture how the characters and scenery looks like. That's also why book-based-movies can disappoint. Shit, my hero didn't had a beard and brown hair! And that girl was a hot blonde, not a small Viking! Well, some people like to use their fantasy, others prefer to get everything served in ready-to-swallow chunks. But since the horror-genre is for a more select group anyway, I trust on your fantasy.&lt;br /&gt;&lt;br /&gt;I'm not sure yet whether the (nameless) T22 player should talk or not. For one thing, there's not much company in that damn building anyway. But if the Boss gives a phone call, it would be silly to reply with silence. Other than that, our man is about 33 years old, normal functioning, and prefer to work with his hands. He's not a genius, neither dumb. An average, working-class (Russian) Joe, or should I say Dimitri or Jaroslaw? You didn't really plan to work in Tower22, but your hands were needed to take care of the building...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-x9EAhg1psTA/Tm74bk3fffI/AAAAAAAAAjs/8IRuz-h9RSM/s1600/BarrelReflection.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 285px;" src="http://2.bp.blogspot.com/-x9EAhg1psTA/Tm74bk3fffI/AAAAAAAAAjs/8IRuz-h9RSM/s400/BarrelReflection.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5651727735033134578" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;More barrels. Sergi is busy doing all kinds of IKEA object(sets). Boxes, barrels, beds, lamps, and so on. We need stuff to decorate that empty building with, right?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So let’s see… We have a non-hero, possibly without a name, that doesn't talk (much)... A prototype, normal human being. The type of guy who drops himself in the sofa with his stinky socks and a beer after work. Good to identify yourself with, but isn't that a bit... 'bland"? How about the mysterious background?!&lt;br /&gt;&lt;br /&gt;Well, it would be stupid to spoil everything right here - right now, but let me say the player does have sort of a background. No, your parents weren't murdered. No, you didn't got raised in a spooky orphanage. No, you don't have CIA/KGB chips in your head. No, you didn't do ninja school. No, you don't suffer hallucinations after a mortar hit in Vietnam. No, you are not looking for your family. And no, you can't shit lightning-bolts from your arse either. So what the hell IS he? Play the game and find out :p&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-3644397804590446980?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/3644397804590446980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/09/play-on-player.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/3644397804590446980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/3644397804590446980'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/09/play-on-player.html' title='Play on Player'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-CKi4mdqhHXA/Tm75ZO_Ll_I/AAAAAAAAAj0/nrSFj1TPc6c/s72-c/Dressroom_Bench1b.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-8112954565241410279</id><published>2011-09-03T07:12:00.001-07:00</published><updated>2011-09-03T08:38:20.275-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='old vesus new'/><category scheme='http://www.blogger.com/atom/ns#' term='Nostalgia'/><category scheme='http://www.blogger.com/atom/ns#' term='Duke Nukem Forever'/><title type='text'>Damn, still looking good!?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-c1X4Sc0wn9I/TmI7hndM47I/AAAAAAAAAjU/xMNMiTl7jAA/s1600/Doom2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 316px; height: 197px;" src="http://3.bp.blogspot.com/-c1X4Sc0wn9I/TmI7hndM47I/AAAAAAAAAjU/xMNMiTl7jAA/s400/Doom2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5648142331389207474" /&gt;&lt;/a&gt;&lt;br /&gt;Wow! Doom is finally legalized in Germany! National Day! I guess most German gamers had their illegal copy on 5 floppy disks anyway, but those bans on violent games... sigh. You know what I think about games &amp; violence:&lt;br /&gt;&lt;a href="http://tower22.blogspot.com/2010/07/ernst-knows-whats-good-for-ya.html"&gt;Forbidding violent games?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But about Doom. If you tell the new generation of gamers about "id Software", then don't expect ringing alarm bells, twinkling enjoyed eyes, or hours of nostalgic talk. At its best, they might remember something about “Doom III”. In my opinion a very good game, but in the shadows(literally) of more innovative games of that time, such as Halflife2 and Farcry. Doom3 was well, 20 hours of shitting your pants &amp; brainless shooting in darkness. Good enough for me, but not a shocking new formula.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;New cars versus Grandpa’s unbreakable steam-tractor&lt;/span&gt;&lt;br /&gt;Maybe they also noticed all the fuzz about that game "Duke Nukem Forever", which made the old boys nervous the last 15 years, but turned out to be a piece of &lt;fill in for yourself&gt;. Conclusion of the new generation: we old bastards got stuck in history with Duke and Boom, or whatever that game was called. No doubt it was fun back then, but it’s time to move on. We old bastards on the other hand keep telling that games are shit these days. Like grandpa claiming his old steam-tractor is still superior to those modern machines equipped with electronics that nobody understands.&lt;br /&gt;&lt;br /&gt;Nostalgia is a strong thing. Mark my words, you new generation wannabe-gamers (2000..anno now) will be complaining in 10 years as well. Telling everyone Call of Duty: Modern Warfare was way better than all those too-easy-4-hour-crap-virtual-3D-iMotion games we may meet in the future. As usual, everything was better in the good old days. Ask Alexander The Great, and he will confirm.&lt;br /&gt;&lt;br /&gt;Nintendo &amp; Wii tries to tickle the Nostalgia, using a different marketing strategy: Good old fun for the whole family (including labrador)... Too bad that they can't(don't want) get rid of their kiddy status. Asides from Nintendo's own series, most of the Wii games are weak excuses to wrap shitty stuff without immersion in a game-package, relying on the overrated Nunchuck. Simple, uncomplicated fun? Maybe, but not enough to hook this old gamer.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-tyeQJSQkTZY/TmI2ejAd-0I/AAAAAAAAAi8/p3fiXrztQT8/s1600/Sink1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 281px;" src="http://4.bp.blogspot.com/-tyeQJSQkTZY/TmI2ejAd-0I/AAAAAAAAAi8/p3fiXrztQT8/s400/Sink1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5648136781097204546" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;OT, Sergi made a sink... Don't know what to say more about sinks, but we need them.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Less serious, more fun&lt;/span&gt;&lt;br /&gt;Now, who is right? Is nostalgia blinding us, or do we really have a point when complaining? All right, some nuance first. Doom was made in an era where good-looking quality games were scarce. Hence, it was one of the first "3D" games! Duke was the first game with boobs, humor and cities to explore instead of boring stone corridors. So titles like these would quickly rise above the average, had little to no competition, and got declared holy by the game-popes.&lt;br /&gt;&lt;br /&gt;Yet, I dare to say games like Super Mario, Doom(1 / 2) or Duke Nukem still have a better thought-through design than many modern games. Whereas new games are taking themselves (too) serious with photo-realistic graphics and dramatic, cinematic gameplay, old games were more focusing on simple, yet challenging and very addictive mechanics. I finished "Double Dragon (SNES)" with my little brother about 5 million times, while I hardly finish new games these days anymore. At some point, I just lose interest. Even with quality titles such as GTA or Metal Gear Solid. Of course, that also has to do with my age, busy schedule, and being spoiled with too many good games last 18 years already. Chocolate cake doesn’t taste that special anymore after eating it six thousand times. &lt;br /&gt;&lt;br /&gt;But when I'm in for a quick game, I usually start Doom or Red Alert, rather than newer titles. How come? Old rusty habits, or are these games really more fun? Both, I think. My major problems with nowadays games:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;- It takes a while to get in the mood (complex story, slow build-up, learning all controls, ...). Not good if you don't have many hours of free time.&lt;br /&gt;- But once used to it, these games are often (way) too easy.&lt;br /&gt;- Not worth a second run. Once finished, they dissapear in the (virtual) cabinet.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Point 3 is typical for modern games. Their graphics, advanced scenery, teasers, and immersion usually keep you interested till the end. But the core-elements such as blasting foes or jumping platforms just isn't that much fun. Take GTA for example. Everyone loves the dialogs and exploring the city. But playing it all over again... Racing isn't that much of a challenge, neither are the simple shoot-outs where the computers does 95% of the aiming and cover for you. So what's left, are the dialogs and scenes you have already seen.&lt;br /&gt;&lt;br /&gt;A game like Doom on the other hand brings you straight down to the action, 15 seconds after double-clicking \doom.exe. After 50 runs the AI and level-structure isn't really surprising either of course, but you can increase the difficulty to insane heights, and more important, firing the double barreled shotgun at an imp from nearby keeps satisfying, forever. These games are simple, yet brilliant and diverse at the same time.&lt;br /&gt;&lt;br /&gt;A simple explanation for their good design might be the available time they got to tweak the levels and weapons. Now lot’s and lot’s of time is spend on making the maps and objects look good in the first place. High poly characters, huge libraries of textures, polishing the lighting, and so on. Making content for older games was simpler, so there was more time to test the maps. Where to put ammo, when to give a health bonus, where to place baddies. And if it sucked, maps or monsters were easy to scrap and replace.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-R2QtwrX1dKc/TmI6XOPJkWI/AAAAAAAAAjM/rlJ_LH4pg30/s1600/Sink2b.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 351px;" src="http://2.bp.blogspot.com/-R2QtwrX1dKc/TmI6XOPJkWI/AAAAAAAAAjM/rlJ_LH4pg30/s400/Sink2b.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5648141053309063522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;More sinks! Btw, making this model + normalMap + specularMap takes more time than making a low-res sprite of a sink or toilet. Therefore it's harder to replace content, in case it doesn't really fit in the game.&lt;/span&gt;&lt;br /&gt;----------------------------------------------------------------&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Duke Legacy&lt;/span&gt;&lt;br /&gt;I guess this is where it went wrong with the new Duke Nukem Forever… Too much struggle on making the content, too little testing, too much sweat/ego to scrap and redo things… As an old rusty gamer, I was a bit sad about the new Duke not being “Hail to the King baby”. DNF isn’t a bad game, and neither did I expect it to live up the hype. But it didn’t bring back old well-oiled shooter fun, and it certainly did not convince the new gamer generation. A mediocre product, nowhere near the old Duke achievement in 1996.&lt;br /&gt;&lt;br /&gt;I already had sort of a bad feeling about it when seeing the few demo movies that were released throughout the years. Duke was struck by an identity crisis. Should he try to be an innovative, fresh game with modern elements such as sniping, driving vehicles and easy-gameplay (plenty of auto-saves, linear levels, lot's of hints, not too much enemies). Or should he stay with his core-business: shooting everything that moves &amp; saving babes up tempo?&lt;br /&gt;&lt;br /&gt;I wasn't there at the development, but it seems the creators got stuck somewhere between. Resulting in a game that is neither an oldskool-hardcore shooter, and neither a refreshing new game with superb graphics. It's frustrating difficult at some points, and too easy at the same time. It’s not long, nor short. It's a lot of firepower, but only carrying 2 guns and no mighty-boot at the same time. It's Duke humor but being-a-pussy-getting-killed-by-just-a-few-bullets at the same time. The enemies don't overwhelm you by intelligence, neither with big swarms as they did in the past. The pace was not slow &amp; stealth, neither on steriods. The levels try to look good, but forgot the secrets, humor, freedom and fun that make you want to get the max out of them. &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-DfpCnBDbySw/TmI8uF7mC6I/AAAAAAAAAjc/laQ8Th48BBs/s1600/DukeRabidTransit.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 285px;" src="http://3.bp.blogspot.com/-DfpCnBDbySw/TmI8uF7mC6I/AAAAAAAAAjc/laQ8Th48BBs/s400/DukeRabidTransit.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5648143645239806882" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Vehicles or moving stuff doesn't surprise anyone anymore. But back then, this "metro" was a (also technological) highlight!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As said, it's not a bad game. But the new generation that compares it to Crysis or Deus-Ex will be disappointed by the many shortcomings; the game excels in nothing, and Duke’s silly poop-jokes won’t fix that either. Then, we older games get disappointed by the lack of challenge, not killing 100 pigs per minute, and boring level design. Yes, it surprised me that most of the scenes you have seen in 10-year old demo-movies, such as the casino, hoover dam, and cowboy stuff are still in the game. You can't tell me that it took fourteen years to finish those (few) levels... The problem was likely something else: it missed the simple yet addictive and aggressive gameplay that made the 1996 release so brilliant.&lt;br /&gt;&lt;br /&gt;I think 3D Realms realized this very well in a pretty early stage. The fun isn't just there when firing a rocket at a bunch of aliens flying with a jetpack. But instead of having Duke-balls of steel and starting over from scratch, they grasped with the ideas &amp; content they made so far, and tried to improve what they got. But probably this was a mission-impossible. Having spend so much blood, sweat and tears in their product, 3D Realms probably didn't want to scrap and disappoint their fans. But at the same time, they might have been too ashamed/unsure to release the game in its current shape. That's where 2K-Games interfered, by putting Gearbox on the Duke. Not to make it a better game, but just to make it sellable, finally. I understand their choice, yet it's a pity to witness the downfall of our old hero.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Roots, bloody roots&lt;/span&gt;&lt;br /&gt;I’m just speculating of course, but it seems they took a few fundamental wrong decisions. Once they got behind schedule, being surpassed by better engines and other innovative games, they probably had to adjust their selling points as well. Making a copy of ’96 Duke 3D with improved graphics wouldn’t be enough. At least, not according to publishers that want to sell the game to a wide audience. Times of nonstop brainless shooting, 30 + 2 secret levels, and hard difficulty settings were over. Who to please? The old loyal fans, or the new generation of gamers? Probably they tried to please both, and that’s exactly what made the game fail I think.&lt;br /&gt;&lt;br /&gt;In my humble opinion, Duke should have been more like its predecessor. That sounds lazy, but trying to be new and better is near to impossible these days, especially in the shooter genre. Duke wasn't going to steal the hearts of new gamers anyway, there are simply too much players out there now. (Virtual) heroes are just as easily forgotten as they rise these days. So why not going back to the roots, making a decent shooter game. Fast, aggressive humorous action, heavy weapons, whole armies of foes to shoot. A big bunch of fun-levels, not bound to realistic rules or a complex story. And a difficulty setting to separate the men from the boys. &lt;br /&gt;&lt;br /&gt;For 2011 standards, that would actually make quite an original game. Hell, I dare to say it would even be fun with 2.5D (but High Quality) sprite graphics. Damn, that would look good. Or least original. Maybe the newer gamers wouldn't be interested... then again, Retro 2D Mario sells again, and I'm pretty sure there are plenty of old grumpy guys that haven't played a good old shooter since Halflife1, in their experience.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-IxBt5JfK5gQ/TmI-B7stUkI/AAAAAAAAAjk/PQnceumj_Ns/s1600/D2Teaser.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 294px; height: 400px;" src="http://1.bp.blogspot.com/-IxBt5JfK5gQ/TmI-B7stUkI/AAAAAAAAAjk/PQnceumj_Ns/s400/D2Teaser.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5648145085602026050" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Little teaser for Demo2...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ok professor, how about Tower22?&lt;/span&gt;&lt;br /&gt;What design rules would Tower22 follow? Well, neither of them. Horror games are a complete different genre. The target is to give you just a single-ride, with complex &amp; difficult gameplay. But a ride you will never forget because it was so goddamn strange/weird/unique/scary. Like Silent Hill or the older Resident Evil games did. However... I would love to make a 2.5D Duke Nukem, Command &amp; Conquer, or beat 'm up like Double Dragon!&lt;br /&gt;&lt;br /&gt;Talking about games, do you have a top10 (old or new, doesn't matter)? In random order:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;0- Super Metroid (SNES)&lt;br /&gt;1- Crusader: No Remorse (PC)&lt;br /&gt;2- Doom2 (PC)&lt;br /&gt;3- Halflife (PC)&lt;br /&gt;4- Goldeneye (N64)&lt;br /&gt;5- Zelda (SNES, N64, Majora's mask in particular)&lt;br /&gt;6- Resident Evil Remake (GC)&lt;br /&gt;7- C&amp;C: Red Alert (PC)&lt;br /&gt;8- GTA: San Andreas (PS2)&lt;br /&gt;9- Red Dead Redemption (PS3, hey, that's a new game!)&lt;br /&gt;10- Super Mario (Bros 3, World, 64... and I likes the Wii ones as well)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;My top 10... counting from 0 ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-8112954565241410279?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/8112954565241410279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/09/damn-still-looking-good.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/8112954565241410279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/8112954565241410279'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/09/damn-still-looking-good.html' title='Damn, still looking good!?'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-c1X4Sc0wn9I/TmI7hndM47I/AAAAAAAAAjU/xMNMiTl7jAA/s72-c/Doom2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-8606665354402397871</id><published>2011-08-28T12:42:00.000-07:00</published><updated>2011-10-08T12:27:32.023-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Transform Feedback'/><category scheme='http://www.blogger.com/atom/ns#' term='Particles'/><title type='text'>Golden particle shower</title><content type='html'>Let’s discuss some graphical tricks again. You may have seen ice patches in the screenshots from previous posts, but it still looks kinda odd, don’t you think. Is there something wrong with the ice shader, or is it just… What would you think if you if your steaming hot bathtub was half-frozen at the same time? We graphic programmers sometimes forget that effects can’t be tested on realism individually. It’s the whole picture that convinces or not.&lt;br /&gt;&lt;br /&gt;In this case, the environment has to look freezing cold. Otherwise the water wouldn’t freeze right? A few tricks you can use for that:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;- Use a grayscaled / blueish screen filter. Blue looks cold.&lt;br /&gt;- Use blueish or gray-white fog&lt;br /&gt;- Put snow / ice on all surfaces, not just a few pieces of ice on the water&lt;br /&gt;- Make windy snowdust particles (nearby air-vents and such)&lt;br /&gt;- Let is snow, let it snow, let it snow&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-UoE-zjPPom0/Tlqa3AIOhDI/AAAAAAAAAik/ANF-la6wdM4/s1600/SnowParticles1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 278px;" src="http://3.bp.blogspot.com/-UoE-zjPPom0/Tlqa3AIOhDI/AAAAAAAAAik/ANF-la6wdM4/s400/SnowParticles1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5645995352580326450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Still got to learn those little fuckers not to fall through the ceiling. Maybe the depth-texture (from the player point of view) may help...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Since the summer here was one big fiasco (Global Freezing), I’m already in a Christmas mood. So I decided to start with some snow. But as usual, it required a whole lot more to implement a solid basis to make such effects. What we needed was a particle generator (and an editor to define them).&lt;br /&gt;&lt;br /&gt;Now Engine22 already had a few techniques, but not flexible enough for Micheal Jackson moves, and certainly not fast enough to spray massive amounts of particles. And when it comes to particles, density does matter. Usually 5.000 smaller dots make a better volumetric shape than 5.00 somewhat bigger dots. Time for a revision on the old, CPU-based, particle code.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For starters, particles is nothing more than a “cloud” of (small) sprites that move around in a certain way. Simple examples are bloodsprays or flying debris after bullet impacts. But it’s also useful for complex volumetric shapes such as fire, smoke, gas, clouds or a water fountain. The power of particles is the simplicity to draw them, which allows to render large numbers that form a shape together. A single particle looks like shit, but as with ants, killer bees or football hooligans, the group dynamics make it a strong whole.&lt;br /&gt;&lt;br /&gt;A particle can be a simple dot, or a textured billboard sprite. The simpler, the faster of course. But you can also apply lighting &amp; shadowMapping on your particles to create cool effects such as lightshafts. Or let it bend / blur the background to create a heat haze for example. Same stuff as usual. More difficult is to render it in insane quantities, and to update particle positions in a realistic way. How smoke moves through the air? Well, I can’t tell you really. But at least I can share some methods to render large numbers of particles.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-HCRqKCVxp5s/TlqbSHYqWiI/AAAAAAAAAis/m8E3z2MIz0E/s1600/SmokeTest1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 368px;" src="http://3.bp.blogspot.com/-HCRqKCVxp5s/TlqbSHYqWiI/AAAAAAAAAis/m8E3z2MIz0E/s400/SmokeTest1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5645995818384775714" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Smoke test - You'd better not try to model that in real 3D... And a single animated 2D sprite won't do the trick neither anno 2011...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Transform-Feedback (Vertex Streaming)&lt;/span&gt;&lt;br /&gt;The simple way of doing particles is creating a big array of particle-structs. Let the CPU loop through the array, update the position with gravity or whatever forces, then render it as a sprite. Not bad, but your CPU will cripple when doing really large numbers (ten thousands). The GPU on the other hand… Wouldn’t it be nice to benefit from the GPU math skills and having all vertex data loaded on the GPU already, rather than passing thousands of coordinates? Think in magnitudes of hundred-thousands of particles, rather than thousands. Well, in theory that is. Having a lot of layers of transparent quads filling the screen can still cause fill-rate issues.&lt;br /&gt;&lt;br /&gt;Maybe you know how to pass a VBO with vertex data to the GPU, but how to update the particle positions and store them back in a VBO without needing the CPU? Transform-Feedback is the magic OpenGL word. You don’t need that freaking CPU, neither clumsy textures to store data in pixels.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;0. Create a VBO with vertex-data (positions, maybe texcoords/colors, or force vectors in case of particles).&lt;br /&gt;&lt;br /&gt;1. Make a Vertex-Shader that updates the vertex data (positions, forces)&lt;br /&gt;2. Store the Vertex-Shader output directly back into a second VBO (= Transform Feedback)&lt;br /&gt;3. Render your particles (or cloth, or skinned character, or anything else) with the second VBO as input. Eventually use a geometry-shader to make billboards out of single vertices.&lt;br /&gt;4. Next cycle, use the second VBO as input in step 1 and store results in the first VBO. Toggle for each cycle.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Dance dammit&lt;/span&gt;&lt;br /&gt;So, as for particles, you can create a VBO that contains the maximum amount of particles. In case you can spawn up to 10.000 particles, then create a VBO with 10.000 points. Since geometry shaders can produce sprites out of a single vertex-position, you don’t need to store all 4 corner coordinates in that VBO. Asides positions, you probably need some more info to store per point. For example:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;TVBO_Particle  = packed record&lt;br /&gt;......Position     : TVector4f; // XYZ, W=scale&lt;br /&gt;......Force        : TVector4f; // Current velocity / force vector,  W=lifetime&lt;br /&gt;......Color        : TVector3f; // Color modulator&lt;br /&gt;......LookupCoords : TVector4f; // Pick a sub-texture from a bigger atlas texture&lt;br /&gt;......Randoms      : TVector4f; // Some more random numbers to vary data&lt;br /&gt;End;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;When creating the VBO, you only have to fill the static data; properties that won’t change such as the color, size lookup coordinates and random numbers. The dynamic properties such as position, lifetime and force will be updated in the Vertex-Shader that updates the VBO each cycle. A very simple approach could be:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; &lt;vertex shader&gt;&lt;br /&gt; OUT.Force.xyz  = IN.Force.xyz + Gravity.xyz * cycleDeltaTime;&lt;br /&gt; OUT.Force.a   = IN.Force.a - cycleDeltaTime;  // Decrease lifetime&lt;br /&gt; OUT.Position.xyz = IN.Position.xyz + Force.xyz; // Update position&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Go Recycle&lt;/span&gt;&lt;br /&gt;Right, this will make your vertex fall down. At some point, it hits the ground or it should simply vanish after X seconds. Then what? You can’t create new vertices in a VBO… But you can recycle them of course. Notice I used “force.a” as a lifetime value:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;If ( ( OUT.Force.a &lt; 0.f ) || (OUT.Position.y &lt; floor.y))&lt;br /&gt;{&lt;br /&gt;......// Particle ran out of time, or hit the ground&lt;br /&gt;......// Respawn it (eventually with a delay)&lt;br /&gt;......OUT.Force.a  = maxParticleLifeTime * randomFactor;&lt;br /&gt;......OUT.Force.xyz  = initialParticleForce;&lt;br /&gt;......OUT.Position.xyz = initialParticlePosition.xyz;&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;It will start over again next cycle. Probably you want to vary the initial properties a bit to prevent all particles starting at exactly the same point, with the same forces. Use some shader-math, input parameters, or like me, use a lookup texture. Depending on the overall time, you can pick from a texture that tells where to place it, what force to use, what color to use, and so on.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; tx.x   = elapsedTime / totalGeneratorLifeTime;&lt;br /&gt; OUT.Position.xyz = generatorCenter.xyz + tex2D( dataTexture, tx );&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;You can also use such textures to morph the color over the time, or to fade them out after a while. Whatever you like Mac. In case of complex movement such as dancing Plutonium molecules, or a tornado, you can eventually encode an entire movement pattern in a 2D or 3D lookup texture. Use your creativity!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-LK7nIEG9vsE/TlqeeXh8sVI/AAAAAAAAAi0/KJDsHFrfp1Y/s1600/SnowParticles2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 295px;" src="http://2.bp.blogspot.com/-LK7nIEG9vsE/TlqeeXh8sVI/AAAAAAAAAi0/KJDsHFrfp1Y/s400/SnowParticles2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5645999327412007250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;I still lack textures and finished shaders to show some cooler effects, but you can also use particles for tornados, rain, lava, flies circling around a turd, slime dripping from leaking pipes, electicity sparks, water splashes, fire, weather effects, plasma generators, exhaust pipes, and so on.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Make it quads please&lt;/span&gt;&lt;br /&gt;For simplicity sake and to reduce the VBO size with 75%, we only store 1 vertex struct per particle. That means you can’t just render the damn thing. That’s where geometry shaders (finally) become useful. Given the camera matrix, particle position, and particle size, you can let it make billboards that always face the camera. Here some code:&lt;br /&gt;&lt;pre name="code" class="Cpp"&gt;&lt;br /&gt;POINT    TRIANGLE_OUT&lt;br /&gt;void main(  AttribArray&lt;float4&gt; iPos  : POSITION,&lt;br /&gt;                uniform float3 camPos  , // camera position  &lt;br /&gt;) {&lt;br /&gt; // Make quad-sprites from points&lt;br /&gt; float4 p1,p2,p3,p4;&lt;br /&gt; float3 particleCenterPos = iPos[0].xyz;&lt;br /&gt; float size = iPos[0].w; // Stored size here&lt;br /&gt;&lt;br /&gt; float3  vAt = particleCenterPos.xyz - cameraPos.xyz;&lt;br /&gt;  vAt = normalize( vAt );&lt;br /&gt; float3  vRight = cross( float3( 0.0, 1.0, 0.0 ), vAt );&lt;br /&gt; float3  vUp = cross( vAt, vRight );&lt;br /&gt;  vRight = normalize( vRight );&lt;br /&gt;  vUp = normalize( vUp );&lt;br /&gt;&lt;br /&gt; float3 dir1  = (-size * vRight.xyz) + ( +size * vUp.xyz );&lt;br /&gt; float3 dir2  = (+size * vRight.xyz) + ( +size * vUp.xyz );&lt;br /&gt; float3 dir3  = (-size * vRight.xyz) + ( -size * vUp.xyz );&lt;br /&gt; float3 dir4  = (+size * vRight.xyz) + ( -size * vUp.xyz );&lt;br /&gt;  p1 = mul( glstate.matrix.mvp, float4(particleCenterPos.xyz + dir1,1 ) );&lt;br /&gt;  p2 = mul( glstate.matrix.mvp, float4(particleCenterPos.xyz + dir2,1 ) );&lt;br /&gt;  p3 = mul( glstate.matrix.mvp, float4(particleCenterPos.xyz + dir3,1 ) );&lt;br /&gt;  p4 = mul( glstate.matrix.mvp, float4(particleCenterPos.xyz + dir4,1 ) );&lt;br /&gt; // Don't forget the texcoords&lt;br /&gt;  const float2 tx1 = { 1,0 };&lt;br /&gt;  const float2 tx2 = { 0,0 };&lt;br /&gt;  const float2 tx3 = { 1,1 };&lt;br /&gt;  const float2 tx4 = { 0,1 };&lt;br /&gt;&lt;br /&gt;  emitVertex( p1 : POSITION,  tx1 : TEXCOORD0 );&lt;br /&gt;  emitVertex( p2 : POSITION,  tx2 : TEXCOORD0 );&lt;br /&gt;  emitVertex( p3 : POSITION,  tx3 : TEXCOORD0 );&lt;br /&gt;  emitVertex( p4 : POSITION,  tx4 : TEXCOORD0 );&lt;br /&gt;  restartStrip();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Transformers!&lt;/span&gt;&lt;br /&gt;Nice and all, but how to use transform-feedback? Here some directions. Not sure if this also works on ATI/AMD cards though…&lt;br /&gt;&lt;pre class="brush: delphi"&gt;&lt;br /&gt;// Specify target for transform feedback&lt;br /&gt;// Toggle between 2 vbo’s&lt;br /&gt;glBindBufferOffsetNV(GL_TRANSFORM_FEEDBACK_BUFFER_NV, 0,  particleVBO [0 or 1], 0);&lt;br /&gt;glBeginTransformFeedbackNV( GL_POINTS );&lt;br /&gt;glEnable(GL_RASTERIZER_DISCARD_NV);    // disable rasterization ( = no pixel output to textures/screen)&lt;br /&gt;// Apply shaders &amp; draw the VBO&lt;br /&gt;  render_ParticleVBO;&lt;br /&gt;&lt;br /&gt;glDisable(GL_RASTERIZER_DISCARD_NV); // Return normal modus&lt;br /&gt;glEndTransformFeedbackNV();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;As for the VBO creation, here is one way:&lt;br /&gt;&lt;pre name="code" class="brush: delphi"&gt;&lt;br /&gt;glGenBuffersARB( 2, @particleVBO[0] ); // Make 2 buffers&lt;br /&gt;for j:=0 to 1 do begin&lt;br /&gt;    glBindBufferARB(  GL_ARRAY_BUFFER_ARB,  particleVBO [j] ); // Set target&lt;br /&gt;    // Pump array of structs into the VBO&lt;br /&gt;    glBufferDataARB( GL_ARRAY_BUFFER_ARB, self.props.maxParticles * sizeof(TVBO_Particle), @part[0], GL_STATIC_DRAW_ARB );&lt;br /&gt;    // Don’t forget, specify which attributes to store&lt;br /&gt;    glTransformFeedbackAttribsNV(5, @attribs[0], GL_INTERLEAVED_ATTRIBS_NV);&lt;br /&gt;end; // for j&lt;br /&gt;glBindBufferARB( GL_ARRAY_BUFFER_ARB, 0 ); // unbind&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Final notes&lt;/span&gt;&lt;br /&gt;VBO’s &amp; Transform feedback allows to render lot’s more particles. That still doesn’t fix all problems though. First of all, the performance will still decrease rapidly when looking into a dense cloud of particles where the quads overlap lot’s of times (meaning each pixel gets overdrawn many times).&lt;br /&gt;&lt;br /&gt;Then there is depth-sorting. No matter how many particles you use, if your front particles mask the ones behind, it still doesn’t pay off. When using additive or multiply blending methods, this is not a problem. Though you may risk to get extreme bright/dark results as soon as particles overlap on the screen. When using normal transparency, you still need to sort things out. I believe there are methods to sort on the GPU as well, but I never really looked at them yet. Another way might be using multiple particle generators, sort them on the CPU, then render them all to get a combined result.&lt;br /&gt;&lt;br /&gt;Finally, I’m not so sure if this technique is also advisable for small amounts of particles. For example, when shooting at a wall, you may only need a handful of debris particles flying around.  Setting up a VBO takes some extra time, so either use the good old CPU approach, or use a fixed set of premade particle generators.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-8606665354402397871?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/8606665354402397871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/08/golden-particle-shower.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/8606665354402397871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/8606665354402397871'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/08/golden-particle-shower.html' title='Golden particle shower'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-UoE-zjPPom0/Tlqa3AIOhDI/AAAAAAAAAik/ANF-la6wdM4/s72-c/SnowParticles1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-336326154656776944</id><published>2011-08-21T07:21:00.001-07:00</published><updated>2011-08-21T09:45:20.049-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Berlin vacation'/><title type='text'>Funf Bier bitte schnell, danke.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-APnVTWQnj3g/TlEqgrEEWNI/AAAAAAAAAhs/OcaowOgtWiY/s1600/Reichstag.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 285px;" src="http://2.bp.blogspot.com/-APnVTWQnj3g/TlEqgrEEWNI/AAAAAAAAAhs/OcaowOgtWiY/s400/Reichstag.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5643338548875909330" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Just in time to shoot this pic!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Excuses for the delay. See, I'm a temporarily crippled programmer now. Allow me to explain.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Two weeks ago we came back from our little vacation in Germany's Capital city: Curry Gewürz, I mean Berlin. No, leave the Bratwurst and Heidi Jokes in the trunk. The image of big bellied, mustached beer drinking champs with lederhosen and a hat+feather is a bit false. At least here in Berlin. Which is a shame by the way, but more about that later. Berlin is a modern, big city with modern citizens. Did we really expect something else then? No of course not. Yet Berlin is quite different when comparing it, for example, to our Dutch cities such as Amsterdam or our beloved Breda.&lt;br /&gt;&lt;br /&gt;Right after leaving the Haupt Bahnhoff (Central Station), the first things you'll notice are the colossal structures. Berlin doesn't have a lot of highrise like American cities do, yet it's filled with massive blocks and monuments, placed asides the wide roads(no gigantic traffic jams here!). Many of them looking threatening, imposing. Maybe once fulfilling a dark task, in the DDR or WOII era.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Needless to say, Berlin has quite a history. Varying from the Iron Curtain that separated the liberated Western from the communistic world, to the last days of Hitler during the WOII. Speaking of which, it just happened to be that our hotel was placed right on top of Hitler's Bunker. Yep, the site you'll see in the (great) movie "Der Untergang". Don't expect much of it though. The Russian took quite some effort to remove the bunker. Hitler's "grave" is nothing more than a parking lot between a couple of calm buildings nowadays. Only a sign will remind you what happened here. We found this out while playing Red Alert (with the Stalin cutscenes yes), and wondered why there were so many people outside, standing near that sign. Wait a minute… yep, we were playing war games on the grave of one of world’s most infamous leaders.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-PgPXL6EOMHI/TlEtl0ZIS8I/AAAAAAAAAiM/rGz5Y6HJ1h4/s1600/BerlinSovietWarMonument.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 297px;" src="http://3.bp.blogspot.com/-PgPXL6EOMHI/TlEtl0ZIS8I/AAAAAAAAAiM/rGz5Y6HJ1h4/s400/BerlinSovietWarMonument.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5643341935814396866" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Soviet war Monument.&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-dr3udecGOTg/TlEqo8EH3sI/AAAAAAAAAh0/-W_S8vlhhTE/s1600/Barrack%2BBeds.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 296px;" src="http://2.bp.blogspot.com/-dr3udecGOTg/TlEqo8EH3sI/AAAAAAAAAh0/-W_S8vlhhTE/s400/Barrack%2BBeds.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5643338690878496450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-zmOFAk9xl5Y/TlEp87eGy0I/AAAAAAAAAhk/aBBF9PvJ3wk/s1600/HitlerBunkerParkinglot.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 297px;" src="http://1.bp.blogspot.com/-zmOFAk9xl5Y/TlEp87eGy0I/AAAAAAAAAhk/aBBF9PvJ3wk/s400/HitlerBunkerParkinglot.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5643337934804798274" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Nothing to see here, move along. Our apartment was just outside the picture in the left upper corner. The other picture is not Hitler's bunker btw, it's our Radar Station testing map. We're starting to get some objects to decorate the place with.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Berlin makes you think about war, and the more recent DDR era that forced its people into the socialist ideology with instruments like the Stasi. The remains of this history are spread throughout the city, giving a grim look over some parts. But of course, there is more than oppression and bloodshed; Berlin didn't stood still last decades. An excellent subway system, Modern office buildings are placed between the old Stasi offices, hip restaurants pretty much everywhere. Unlike some ex-communistic cities I saw in Poland, Berlin looks fresh, clean and structured. Certainly not as if the KGB is still watching there. Although I didn't like Checkpoint Charlie. A few sandbags, American flags, two actors, and... a fucking macDonalds 4 meters further. The ultimate price of a Western society.&lt;br /&gt;&lt;br /&gt;You can still see and visit many remains, including the Wall and the evil looking Reichstag building. Yet, just like with Auswitz Birkenau, it's hard to get a good feeling of what really happened. Time erases the past. Then again, did you really think 5 guys would visit Berlin for history lessons? I can dream operation Blitzkrieg and Barbarossa after seeing 6.000 documentaries already. No, what healthy Dutch boys really want is beer. Lots of it.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-4bqhYa1kjRQ/TlExNXQg--I/AAAAAAAAAiU/FG7bjQIWOG8/s1600/BerlinFernsehturm.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 282px;" src="http://1.bp.blogspot.com/-4bqhYa1kjRQ/TlExNXQg--I/AAAAAAAAAiU/FG7bjQIWOG8/s400/BerlinFernsehturm.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5643345913723288546" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-20rhQCkx3jw/TlErsGzM7BI/AAAAAAAAAiE/gI9Hut7ryS8/s1600/BerlinScienceCenter.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 314px;" src="http://4.bp.blogspot.com/-20rhQCkx3jw/TlErsGzM7BI/AAAAAAAAAiE/gI9Hut7ryS8/s400/BerlinScienceCenter.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5643339844811549714" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Meet modern Berlin. As a friend would say, this looks like an IPad3 or something.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And that's where we got stuck a bit. Instead of 130 KG feather-hat, mustached lederhosen guys sitting at a table with roasted pork and beer, we only saw modern, cozy(not) purple LED-light bars. Music volume -4, only a few people, closed pretty early... Aye, that's not what are used to. In Amsterdam, you can get drunk in 60 seconds as soon as you arrive in the center. In Berlin, you need a sniffing-dog specialed in tracing beer, because this large city doesn't really have all stuff concentrated at one central point. The bars are sure out there, but spread or well hidden. And in most cases, not really alive. Although I liked the fact that Berlin people are calm and friendly, the noise of 600 drunken people and the feeling you can get involved in a barfight any time, "engages" here in Holland. In Berlin, I often had the idea that we noisy, farting, burping, belging, laughing idiots were annoying for other people who try to have a calm conversation. But I also had that feeling in France. And in Belgium. And a bit in Prague...&lt;br /&gt;&lt;br /&gt;Well, making noise, trying to get drunk, and waking up 06:30 on the floor with a flower bouquete in my underpants (yes, that happened) is maybe just a Dutch thing... And British probably. I'm sure there is a lot more to find in Berlin, just have to dig a little bit deeper. Other than that, we had a good time. And a nice bonus feature is the price. Whether you need beer or a Rumpsteak at a restaurant, Berlin is cheap compared to other Western Europe cities. Same goes for the hotel.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And... Friday actually delivered what we want when it comes to lederhosen, beer and schlager (and Rammstein): Berlin's international Beer-festival! Dozens of beer stalls, tables, music, and würst. Hurray! With as a grand finale a broken foot. Drunk and satisfied, we went home and waited in the Metro station. I felt down somehow, and hurted my foot badly. My friends had to transport 95 kg of drunken flesh through the wide streets of Berlin. Luckily it happened on the very last night, but a few days later it turned out that my metatarsals were broken at 3 or 4 spots. End result: I’m driving in a wheelchair with a laptop between the harvesting and tabletting machines like Stephen Hawking now. Except that Stephen is not so stupid to drink and break his foot probably.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-1vZFX-XVtVw/TlE12I0IP1I/AAAAAAAAAic/9YXV7nasi4Q/s1600/05082011.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="http://4.bp.blogspot.com/-1vZFX-XVtVw/TlE12I0IP1I/AAAAAAAAAic/9YXV7nasi4Q/s400/05082011.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5643351012267278162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Yeah keep laughin, but not for long anymore. Not everyone likes to wear Lederhosen by the way.&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-aBf3PhBsTqc/TlEq5tE4K0I/AAAAAAAAAh8/yb54aCApYrk/s1600/Ice%2BTunnel.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 293px;" src="http://2.bp.blogspot.com/-aBf3PhBsTqc/TlEq5tE4K0I/AAAAAAAAAh8/yb54aCApYrk/s400/Ice%2BTunnel.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5643338978912906050" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Next time, back on games&lt;/span&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-336326154656776944?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/336326154656776944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/08/funf-bier-bitte-schnell-danke.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/336326154656776944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/336326154656776944'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/08/funf-bier-bitte-schnell-danke.html' title='Funf Bier bitte schnell, danke.'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-APnVTWQnj3g/TlEqgrEEWNI/AAAAAAAAAhs/OcaowOgtWiY/s72-c/Reichstag.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-7213840677503666991</id><published>2011-07-30T01:44:00.000-07:00</published><updated>2011-07-30T01:45:01.696-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Portalculling with 2D overlap checks'/><title type='text'>X-Ray</title><content type='html'>Time for a little vacation in Berlin with my fellow beer-buddies. Wurst, Bier, Heidi und Schlager. What does a men need more? But before we can become “Berliners”, first a little-big story about portal-culling.&lt;br /&gt;*1. What is portal-culling?&lt;br /&gt;*2. Recursive function to get visible sectors&lt;br /&gt;*3. Checking if portals are in your view with a 2D overlap check&lt;br /&gt;*4. View-frustum narrowing&lt;br /&gt;*5. Optimizing with Scissoring&lt;br /&gt;*6. Portals that are partially in front, partially behind the camera&lt;br /&gt;*7. Preventing infinite loops&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. I see what you don't see&lt;/span&gt;&lt;br /&gt;The best part about programming is doing the stuff you like, with quick results. Adding the last straws on the other hand... Don't know about you, but in my case it often leads to 90% finished parts. The other 10% is... well, for another day.&lt;br /&gt;&lt;br /&gt;Of course, with limited time you can't fine-tune everything till perfection. At the time it's perfect, it's probably also outdated, in this insane fast evolving software world. But sometimes you forget about important missing parts. Now that all Radar Station maps are imported, I noticed a relative low framerate on my laptop (~20 to 24 FPS). Now my laptop isn't the fastest anymore, but suddenly I remembered I didn't finish the portal-culling engine... This particular map has quite a lot of rooms and walls between them, resulting in a lot of overdraw.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-wYDrVHq8oXI/TjMtYRbVGWI/AAAAAAAAAg0/yZtODy5jgjI/s1600/SectorOverdraw.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 142px;" src="http://4.bp.blogspot.com/-wYDrVHq8oXI/TjMtYRbVGWI/AAAAAAAAAg0/yZtODy5jgjI/s400/SectorOverdraw.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5634897453788764514" /&gt;&lt;/a&gt;&lt;br /&gt;For those unfamiliar with (portal)culling, or rendering performance in general, this technique helps preventing stuff from getting rendered for nothing. Unless you are spying or wearing X-Ray goggles, "rendering" the interior of your neighbor’s house is useless, cause you can't see it anyway. Walls and stuff. If we don't cull, invisible parts of the map will be called for nothing, and pixels will be drawn on the screen, and then get overdrawn by something else in front = a waste of time. In an ideal 3D world, each pixel will be drawn only once (asides overlapping pixels with alpha blending enabled).&lt;br /&gt;&lt;br /&gt;A deferred-rendering engine already helps reducing the lighting complexity, but when rendering the contents for your deferred pipeline (data textures), shadow/depth Maps or other passes, you still want to exclude rooms you can't see. Or how about rooms you can only see partially? Behind a door or window, there could be st.Paul’s Cathedral. Yet you only see the bits behind the opened doors/windows ("portals").&lt;br /&gt;&lt;br /&gt;With &lt;span style="font-weight:bold;"&gt;portal-culling&lt;/span&gt;, you divide your world into rooms, hallways, terrain chunks, or as I would like to call them: “&lt;span style="font-weight:bold;"&gt;Sectors&lt;/span&gt;”. The openings between them (open space, doors, windows, holes, ...) are called "&lt;span style="font-weight:bold;"&gt;Portals&lt;/span&gt;". In a perfect definition of a sector, for each corner(vertex) of a “room”, you can see all other corners of the same room without obstacles between them. But you can cheat a bit of course. Since rendering works best with bigger batches of data, try to prevent ending up with hundreds of tiny sectors. Because you will render sector by sector.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Portal Culling recursive function&lt;/span&gt;&lt;br /&gt;Before you render your scene, you first have to determine what sectors are visible for the camera. Making such a list isn't that difficult, but it has some tricky (math) catches. Don't worry, my math doesn't go much further than counting potatoes, yet it succeeded. Here a pic, and some pseudo code:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-hKXxASJb4tc/TjMurRUyhSI/AAAAAAAAAg8/-eK2zHqOytQ/s1600/PortalCull%2BRoutine.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 182px;" src="http://1.bp.blogspot.com/-hKXxASJb4tc/TjMurRUyhSI/AAAAAAAAAg8/-eK2zHqOytQ/s320/PortalCull%2BRoutine.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5634898879690474786" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;// Make a list of visible sectors&lt;br /&gt;1- Start in the sector your camera(player) is standing. Add to the list&lt;br /&gt;2- FOR EACH portal IN currentSector.portalList&lt;br /&gt;......3- Check if the portal(quad?) is inside/intersecting the camera view-frustum&lt;br /&gt;............4- Add the sector behind the portal to the list, IF not done before. &lt;br /&gt;............   Be aware that the same sector can be visible through multiple portals.&lt;br /&gt;............5- For each sector, manage a list of portals that made it visible. Add ............   this portal to the sectors list. &lt;br /&gt;............6- repeat step 2 for the sector behind the portal&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Now when you go rendering your world, just loop through that sector-list. Eventually do it backwards to help with the depth-sorting for alpha-blended/transparent surfaces. The furthest sectors will be rendered first, your current sector last. Oh, and did I mention this "visible sector list" is also handy for other stuff like updating lamps, A.I., and vegetarian cooking? Having a list of visible sectors helps you to exclude unnecessary checks.&lt;br /&gt;&lt;br /&gt;Now that's easy, just a recursive function, some looping, little list... done. But wait, as said, there are some catches. Circular references may occur, and how the hell do you know whether a portal is (partially) visible or not? If you are like me, you Googled "triangle sphere collision" and the likes quite some times. But "portal(or quad) versus frustum test" didn't gave me a lot useful results. Mostly you'll need combinations of functions, as collision-test routines are often incomplete. In case your portals are quads, they can be fully inside your camera frustum, intersect it, or completely overlap it (when standing nearby a big portal).&lt;br /&gt;&lt;br /&gt;And that's where I didn't finish the code. Just made a cheap check to make sure portals would be visible. But due the margins, invisible sectors still became visible according to the checks. Time for a revision.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. 3D to 2D&lt;/span&gt;&lt;br /&gt;Checking if 3D stuff collides, intersects or overlaps isn't so easy. Narrowing the view-frustum when it travels through a portal neither. Checking if 2D rectangles overlap on the other hand... So why not do the math in 2D? It still has a few flaws, but at least it's an easy way. And a solution that actually works is also worth something right?&lt;br /&gt;&lt;br /&gt;So, instead of doing 3D math, we convert the view-frustum and portals to simple 2D rectangles first. Initially, your view covers the entire screen, which means it’s rectangle would have the following coordinates: {-1,-1,+1,+1}. Where -1 is the left or top of the screen, 0,0 the center, and +1 the right or bottom. This conversion still requires a little bit matrix-math though. There are multiple ways to convert a 3D point to 2D, but what I did is using the camera ModelViewProjection (MVP) matrix. Wha? The same matrix you use in vertex shaders to convert 3D points to projection space(ehm... am I saying that right)? You can get this matrix in OpenGL as follow:&lt;br /&gt;&lt;pre name="code" class="brush: delphi"&gt;&lt;br /&gt; // 1. First, make sure your camera is set. For example:&lt;br /&gt; glutLookat( ... ); // Point the camera at a target somewhere&lt;br /&gt; gluPerspective( ratio, fov, near, far );&lt;br /&gt; &lt;br /&gt; // 2. Now buy your matrices for only 99 cents&lt;br /&gt; glGetFloatv( GL_MODELVIEW_MATRIX  , @modelViewMatrix );&lt;br /&gt; glGetFloatv(GL_PROJECTION_MATRIX  , @projectionMatrix );&lt;br /&gt; // Construct the MVP (matrix x matrix)&lt;br /&gt;        MVP := matrixMultiply( modelViewMatrix, projectionMatrix );&lt;br /&gt;&lt;br /&gt; // 3. Convert a 3D point to 2D with the MVP (matrix * vector)&lt;br /&gt; p2D.xyzw = vectorTransform( MVP, worldPos3D );&lt;br /&gt; p2D.x := p2D.x / p2D.z;&lt;br /&gt; p2D.y := p2D.y / p2D.z;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;With this MVP matrix, you can convert 3D points to 2D space, in the range[-1..+1]. If you like, you can multiply further with the screen-resolution to get real screen pixel coordinates, but we don't need that here. Oh, AND your 2D point should also carry a Z. You can use the Z to check whether a point is in front or behind the camera-view frustum.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Testing, testing&lt;/span&gt;&lt;br /&gt;&lt;pre name="code" class="brush: delphi"&gt;&lt;br /&gt;PointInsideViewFrustum :=  (p2D.x &gt;= -1) and (p2D.x &lt;= +1) and &lt;br /&gt;    (p2D.y &gt;= -1) and (p2D.y &lt;= +1) and&lt;br /&gt;    (p2D.z &gt;=  0);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The -1, +1 are the screen bounds, the Z tells if a point is in front or not. That's how you can check a single point. But, Portals aren't just points right? Portals can be seen as quad (since doors and windows are rectangular). But if you really like, you could also make complex shapes such as... circles, or... kangaroos. &lt;br /&gt;&lt;br /&gt;What I do is simplifying the calculation by making simple rectangles out of whatever shape you want to check. First of all, your own view-frustum happens to be a rect; the entire screen. But hold on, your frustum may get narrowed as it passes through portals! (See Scissor chapter below). Next is the portal. Simply loop through all its (vertex) points, convert each one to 2D, and determine the most left/right/top/bottom ones. That makes a rectangle, or 2D “bounding box”. &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-lirO1Hv9h4U/TjO7lpBFdGI/AAAAAAAAAhE/waWc2TvvBmM/s1600/PortalCull_Rects.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 292px;" src="http://1.bp.blogspot.com/-lirO1Hv9h4U/TjO7lpBFdGI/AAAAAAAAAhE/waWc2TvvBmM/s400/PortalCull_Rects.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5635053814110581858" /&gt;&lt;/a&gt;&lt;br /&gt;Sure, rectangles fill more space than, say, a circle. So your portal might become visible even when you can't really look through it yet. But who needs complex portals anyway. Quads, or sets of quads, will do in almost any situation, and keeps the amount of point conversions limited. Asides, it’s wise to have some margin anyway. On top, the usage of rectangles gives an extremely nice bonus-track... but more about that later. Let's show how to do the overlap-check first:&lt;br /&gt;&lt;pre name="code" class="brush: delphi"&gt;&lt;br /&gt; rect1 := viewFrustumRect;  // "screen"&lt;br /&gt; rect2 := portalRect;&lt;br /&gt; overlap := (rect1.left &lt; rect2.right) and (rect.right &gt; rect2.left) and &lt;br /&gt;     (rect1.bottom &lt; rect2.top) and (rect1.top &gt; rect2.bottom);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Still alive? Bon, because you're almost through the math-part. There is still one nasty bug at this point though, don't raise the flags yet.&lt;br /&gt;&lt;br /&gt;* Always expand your portal 2D bounds a little bit to prevent leaky edges.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4. Portal Narrow&lt;/span&gt;&lt;br /&gt;We know how to determine whether a portal is visible or not now. But usually a portal is a lot smaller than the sector behind it. Imagine you have a wall with a little Alice-in-Wonderland hole. Although you can fade-out and block the portal after a few meters (use this trick to keep distant sectors hidden), you will still have to render the entire sector behind that hole at some point. And how about the portals in that background sector? Maybe you can't even see them, yet they are in the view-&lt;br /&gt;frustum:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-Hm4WBeA6Xbc/TjO88JzlYeI/AAAAAAAAAhM/KZwCofLjzp8/s1600/PortalCull_HiddenPortal.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 170px;" src="http://3.bp.blogspot.com/-Hm4WBeA6Xbc/TjO88JzlYeI/AAAAAAAAAhM/KZwCofLjzp8/s320/PortalCull_HiddenPortal.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5635055300381073890" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This was one of the reasons why the Radar Station maps went slower and slower. Pretty much all rooms had an opening to another sector somewhere, so at some camera angles, the entire map would be rendered. While you only saw ~35% of it. A waste of precious horsepower.&lt;br /&gt;&lt;br /&gt;What we should do, is "&lt;span style="font-weight:bold;"&gt;narrowing&lt;/span&gt;" the view frustum after each portal. That sounds like awful 3D vector math, and, it is. But wait, we worked with 2D rects right? Narrowing the view-frustum is just as easy as using an AND-operator on 2 rects. Well, that still sounds difficult. Look:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;narrowFrustum.left  := max( previousFrustum.left, portalBounds2D.left );&lt;br /&gt;narrowFrustum.right := min( previousFrustum.right, portalBounds2D.right );&lt;br /&gt;narrowFrustum.bottom := max( previousFrustum.bottom, portalBounds2D.bottom );&lt;br /&gt;narrowFrustum.top := min( previousFrustum.top, portalBounds2D.top );&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Just adapt to the portal rect. That's it. In the recursive "PortalCulling" function, narrow the frustum each time it passes through a portal. And don't forget your view might enter the same sector via multiple portals, resulting in different results.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;5. Scissor sisters&lt;/span&gt;&lt;br /&gt;Narrowing the view prevents portals that are in the view, but occluded by foreground geometry to be evaluated. But it still doesn't fix the huge overdraw when rendering a gigantic sector behind a tiny portal. Call in the Scissor Sisters.&lt;br /&gt;&lt;br /&gt;Yet another great feature of 2D rectangles, is... 2D rectangles. In OpenGL, you can tell where to draw by giving up a rectangle, and enabling "scissor testing". Pixels inside the rect will be drawn, others outside will go to the pixel hell.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;glScissor( portalBounds2D.left, portalBounds2D.bottom, portalBounds2D.width, portalBounds2D.height ); &lt;br /&gt;glEnable( GL_SCISSOR_TEST );&lt;br /&gt;&lt;draw sector behind this portal&gt;&lt;br /&gt;glDisable( GL_SCISSOR_TEST );&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;This is why I added the portals to a list(per sector) as well in the Portal Culling function. So later on, when looping through that list, just BEFORE rendering the sector, you can setup a scissor. In case you found multiple portals you might activate multiple scissor rects (not sure if this is possible), or just combine the portals to make 1 bigger rect. Don't always hurt yourself with math, enjoy life. With a scissor enabled on the portal, only the visible part of a sector will be drawn, no matter how !#@$ big it was. &lt;br /&gt;&lt;br /&gt;However, it does not prevent the render-calls. All triangles / objects inside that sector will be pushed, the scissor just discards pixels that didn't fall inside the rectangle. If you have massive amounts of objects / vertex-data, you may want to split up the sector in smaller chunks. And don't forget about LOD systems. Portal Culling can help a lot, but still doesn't make your game fly of course. Games like Crysis or GTA use lower-poly meshes or even sprite billboards for distant objects.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;6. The exceptionals; portals partial behind / in front of the camera&lt;/span&gt;&lt;br /&gt;So far, so good. I would almost throw the portal-culling code asides again, leaving it "95% done". If it wasn't there is a not-to-ignore bug still present. How to handle with portals that are (partially) behind the camera? Take this scenario:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-kIQWATKOGfA/TjO_SIV23EI/AAAAAAAAAhU/rkzFbKGYPK8/s1600/PortalCull_SidePortal.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 140px;" src="http://4.bp.blogspot.com/-kIQWATKOGfA/TjO_SIV23EI/AAAAAAAAAhU/rkzFbKGYPK8/s320/PortalCull_SidePortal.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5635057876968332354" /&gt;&lt;/a&gt;&lt;br /&gt;Two or only one point of the (quad) portal are in front of the camera, and will produce normal 2D coordinates. The other points are somewhere behind the camera. Math wouldn't be math if there wasn't always an annoying exception on the rule. If all points still had a positive Z value, there is nothing to worry about. The portal rectangle will be partially outside the screen-bounds, but that doesn't give any problems. But in this case, the rear-portal points have a negative Z value. So, when doing the division with Z, the X and Y coordinates will get mirrored too.&lt;br /&gt;&lt;br /&gt;This makes a wrong rectangle. Luckily, there is an easy fix. I’m not 100% sure if this is the best way, but I did it anyway. And so far it works:&lt;br /&gt;&lt;pre name="code" class="brush: delphi"&gt;&lt;br /&gt; p2D.x /= p2D.z;&lt;br /&gt; p2D.y /= p2D.z;&lt;br /&gt; if (p2D.z &lt; 0) then begin&lt;br /&gt;  if (p2D.x &gt; 0) then p2D.x := -1.0 - p2D.x else // Put it left from the left side of the screen&lt;br /&gt;        p2D.x := +1.0 - p2D.x;&lt;br /&gt;  if (p2D.y &gt; 0) then p2D.y := -1.0 - p2D.y else // Put it below the bottom of the screen&lt;br /&gt;        p2D.y := +1.0 - p2D.y;&lt;br /&gt; end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now just make a rect out of all portal points and test it with the view frustum rect as usual, but be prepared for one exception:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;if ALL points were negative, the test failed&lt;/span&gt;. At least 1 point has to be in the foreground. If you forget this, portals behind you can get visible as well.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;7. Loop-back / Circular referencing&lt;/span&gt;&lt;br /&gt;A problem with checking visible portals/sectors, especially with the 2D overlap check, is that we may get stuck in infinite loops, or lack info about which portals made a sector visible. Take this scenario:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-vF_NOyaFM8U/TjPDYaI1kJI/AAAAAAAAAhc/JGvsgbufzAs/s1600/PortalCull_Loops.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 227px;" src="http://4.bp.blogspot.com/-vF_NOyaFM8U/TjPDYaI1kJI/AAAAAAAAAhc/JGvsgbufzAs/s400/PortalCull_Loops.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5635062382871285906" /&gt;&lt;/a&gt;&lt;br /&gt;In this particular case, first the room behind the 3 windows will be checked. This room has a door that leads to a toilet on the right. This toilet has another door that leads back into the big-room we started from. Although the toilet exit door is in front of the background room door, all their 2D rects will overlap (one shortcomings of doing 2D checks). In other words, after our toilet visit in the recursive functions, we get back to the main-room.&lt;br /&gt;&lt;br /&gt;This isn't so bad, but we have to be careful not to add the room twice. But neither should we stop as soon as we detect an already-inserted room. Since we entered the room via a different route, it may show other portals that weren't visible before. This gives yet another problems: infinite loops.&lt;br /&gt;&lt;br /&gt;To prevent walking circles, you can block portals. Once checked, they can't be checked again. But… this leads to wrong scissor-rects though, or even missing sectors. In complex situations, the same portal might be visible through multiple foreground portals. Each "route" can lead to different results, and will also produce a different scissor-rectangle. Crikey, how to deal with that? Not blocking means infinite loops. Blocking means incomplete data.&lt;br /&gt;&lt;br /&gt;So instead of just blocking a sector or portal right away, I look if the sector was already made visible by a(nother) portal with equal or a bigger overlapping rectangle than the current one. Ifso, no need to check. Because it can't produce new results anyway. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Well, enough Portal Culling. The 2D approach has some flaws and still can evaluate portals that aren't really visible for the camera. Yet it's a relative simple (and fast) way to do culling. Just make sure your loop really checks all scenario's, in case parts of the scene are missing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-7213840677503666991?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/7213840677503666991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/07/x-ray.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/7213840677503666991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/7213840677503666991'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/07/x-ray.html' title='X-Ray'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-wYDrVHq8oXI/TjMtYRbVGWI/AAAAAAAAAg0/yZtODy5jgjI/s72-c/SectorOverdraw.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-7122281113589245466</id><published>2011-07-17T12:40:00.000-07:00</published><updated>2011-07-17T12:52:38.015-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Environment artist needed'/><title type='text'>Could the real Da Vinci please stand up?</title><content type='html'>Begging modus engaged. Concept artist required.&lt;br /&gt;&lt;br /&gt;Question. Are you (or do you know) an artist, specialized in drawing realistic, but horrific environments? Do you love horror, and do you have at least 5 hours MC-Hammer drawing time a week? Then maybe you like to help us. We need an extra artists that can draw environment. Both realistic looking posters to illustrate the atmosphere, as schematic sketches to support the 3D modelers with making maps. If you are interested, see the contact info below.&lt;br /&gt;&lt;br /&gt;Requirements:&lt;br /&gt;- Ability to draw realistic, eerie looking environments. Reference pic:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_x5fwyfmBUV0/TSLjeItDmkI/AAAAAAAAAVM/ossV2JwLsyc/s1600/ControlRoom1.jpg"&gt;Control Room&lt;/a&gt;&lt;br /&gt;- Available 5 hours or more (quite a lot needs to be drawn, so I need someone with time)&lt;br /&gt;- Eye for detail &amp; architecture&lt;br /&gt;- Affinity with the horror &amp; fantasy theme. Able to make unreal, bizare, dreamish or nightmarish rooms.&lt;br /&gt;&lt;br /&gt;What needs to be done:&lt;br /&gt;- Working out the main themes of the game (athmosphere sketches, example environments)&lt;br /&gt;- Building exterior (it's not just an ordinary flat of course)&lt;br /&gt;- Schematic sketches / material sets to support the 3D modellers with making specific locations&lt;br /&gt;&lt;br /&gt;What we can offer:&lt;br /&gt;- Hopefully a fun &amp; learnful time!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Before contacting me, please add a link or attachment to the mail with one(or more) drawings in this style. I can't judge the "match" if your art-work has a complete different style! Address:&lt;br /&gt;nieuwlaat dot r AT gmail dot com&lt;br /&gt;&lt;br /&gt;cheers&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-7122281113589245466?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/7122281113589245466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/07/could-real-da-vinci-please-stand-up.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/7122281113589245466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/7122281113589245466'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/07/could-real-da-vinci-please-stand-up.html' title='Could the real Da Vinci please stand up?'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-403532126139939410</id><published>2011-07-17T12:12:00.000-07:00</published><updated>2011-07-18T03:20:45.137-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Assets / Management of a (game) project'/><title type='text'>The Office</title><content type='html'>If one would ask how Demo2 is going, then I would say , “Steadily”… uhm, “slowly”. Pity, but not a complete surprise though. Quite a lot things have been upgraded thoroughly in the code, several more things yet have to be made. Or usually the required features are already in the Engine, but limited. So it has to be revised anyway. Another slowdown is the lack of materials, textures, sounds and 3D props. This time I don’t want to “borrow” media from other games anymore, so we have to make everything ourselves. From a simple carpet texture to a noisy wind ambient loop.&lt;br /&gt;&lt;br /&gt;I’m planning to release a movie in the meanwhile though. Not in-game or cinematic sequence of (horror)stuff. Merely a tech-movie. Just showing some fancy shader stuff, that’s all folks. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Nevertheless, a little bit more tempo would be nice. The problem with making a game is that it’s not just big…. It’s f$cking big! And I’m not just talking about all the programming work. Even a simple room can already hold 5 or more different textures(from each requires additional images such as a normal- or specularMap), 10 different props (bench, TV, painting, lamp, …), and several decal/overlay textures (dust, dirt, moss, holes, power sockets, …). Well, just look around in the room, toilet, or stinky office you’re sitting at the moment. And that’s just one room… A game like this needs hundreds, if not thousands.&lt;br /&gt;&lt;br /&gt;Of course, after making a couple of environments, your so called library of textures, models, sounds and other shit to put in the game will start growing so that future locations can be filled faster with already-existing assets. But making a start feels like pushing forward a big Diesel Locomotive. Derailed. And because progress is so slow at the start, it’s harder to motivate people. We all prefer quick results, like mcDonalds hamburgers. Painting, modeling, programming or sound engineering is difficult without seeing direct results. Certainly when spending your precious free-time on it.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/--UsR_lmFIYY/TiM1nbKW0pI/AAAAAAAAAgM/CAG-sOnwCi4/s1600/RS_RadarStairs.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 296px;" src="http://1.bp.blogspot.com/--UsR_lmFIYY/TiM1nbKW0pI/AAAAAAAAAgM/CAG-sOnwCi4/s400/RS_RadarStairs.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5630402910565618322" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Off topic. Added some more specular intensity, and it turned out pretty nice for this screenshot that uses only 2 different textures by the way.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nevertheless, if you want to realize a big project, you shouldn’t be afraid to bleed. Rome wasn’t built in one day either. In my case it requires a lot of effort from the modelers, drawers and anyone else involved. No assets = no game. But it also requires my support, feedback, motivating and vision. Just like in any other company, whether it’s the local tobacco store, a cheese-pudding factory, FC Barcelona, or the Navy Seals, employees need clear goals, a planning, and need to get helped or pushed time to time. This interaction between employees, managers and direction is crucial for any company. If the sales are bad, you can’t just blame the employees because they were too lazy to bake cookies. And neither can you expect to solve all problems simply by replacing a manager. It takes two to dance the Tango.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now this “managing” task is harder than I thought. Just giving a good idea (“gonna make a cool game, yeah!”), then waiting until the 3D models of double barreled shotguns, awesome monsters and picturesque locations stream in via the mailbox is not going to work. But as a typical worker (don’t talk, just work), I’m not used to socialize a lot with others, demand things, push them, or stipple out rock-solid strategies. I’m used to get some assignments, then just execute them. Managers… ttsk. Talking all day, but never touched a hammer or made their hands dirty. Who needs managers?&lt;br /&gt;&lt;br /&gt;In theory, managers are nothing but overhead indeed. If all workers do what they have to do, one Boss-guy should be enough. In practice, worker aren’t always motivated, don’t always know what to do, have internal problems, or are just waiting for feedback / approval before they continue. And certainly; the bigger the company, the harder to get them all facing the same direction.&lt;br /&gt;&lt;br /&gt;Now I don’t have to command a whole army of Borgs. The complexity here is the distance and limited, fragmented time. I don’t know my helpers personally. Don’t know their faces, or voices. They spend some hours in their free time, but on varying intervals. This makes it easier to forget things, and a whole lot harder to make robust appointments. The lack of appointments makes it near to impossible to plan anything. As a result, no clear mission. Nobody really knows what to do when, and finally that degrades the motivation. Why work hard if there are no concrete results to expect anywhere soon? It works like a chain; if one link gets stuck, the whole chain starts stuttering.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-OrZi3DoTZGI/TiM2bLHWSMI/AAAAAAAAAgU/OYX3XQSnj7s/s1600/RS_Ice1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 298px;" src="http://4.bp.blogspot.com/-OrZi3DoTZGI/TiM2bLHWSMI/AAAAAAAAAgU/OYX3XQSnj7s/s400/RS_Ice1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5630403799611230402" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Ice, ice baby. Asides being David Brent, I spend time doing (cheap) Sub-Surface-Scattering &amp; Fresnel for this ice effect. Not done yet though. Pretty darn difficult, certainly to get it right in relative dark indoor situations.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Enough metaphors. Let’s fix this sink boy. To get more done, I could ask for more people to help (like I just did for the Concept Art). But in the end, I believe smaller, flexible, motivated teams can do more than big chunky ones. So before buying extra horsepower, it’s worth trying to get the maximum out of your current team. You can do this by threatening (you’ll lose your job!), but since this is a charity project, I’d better try it the positive way. Not by kindly asking, but by providing. The A-Team won’t be able to get in action if no one provides ammunition and cigars.&lt;br /&gt;&lt;br /&gt;So, it was time to look in the mirror to acknowledge my faults or shortcomings. One of the problems was the amount of info. Not that they don’t know anything about the project. No, there are so much documents, mails and posts scattered around that it’s simply too much. Admit it. Asides from nice books, do you really read tons of paperwork? No. It’s a waste of time making them, because 95% of the people will skip it anyway. I should learn to keep my descriptions short, and less suggestive. Don’t ask “should we do this or that?”. Just tell them what to do. Show them who’s the Boss! And if you need opinions or feedback, put it in simple, compact polls. You don’t have to rule the joint like Stalin, but as a chief, you are expected to chose directions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Asset manager&lt;/span&gt;&lt;br /&gt;As said earlier, another difficulty with games is the tremendous amount of assets to make. Assets? Yes, sounds, textures, models, maps, shaders, concept-art, story dialogs, an animated mouse-cursor… pretty much anything that is relevant for the game. If you want your helpers to do something, they’ll need to know what to make of course. And since there is usually more than just one asset to make, someone needs to prioritize things as well.&lt;br /&gt;&lt;br /&gt;To make it more complex, game-assets are often interleaved. A map asset may require other texture assets, going to be made by another person. So to prevent endless waiting, the priorities of all helpers need to align. Person A can’t finish his map if person B has low priority on certain important sub-assets of the same map. This is what would be called “miscommunication” in a normal company. Obviously, the complexity grows when more and more assets &amp; personel arrive on the scene.&lt;br /&gt;&lt;br /&gt;Yet another problem with assets is the “unknown”. Do you really know already what EXACT assets to create for, let’s say, a corridor map? Often it’s up to the artist to decide what materials, music or decorations suit best. But to find that out, you’ll have to put the bastard at work first. To do so, he needs to know about this corridor in the first place. In other words, assets can be seen as a tree-structure. From top-level, abstract, global assets such as “making game Tower22”. Going down deeper and deeper till the actual game-content assets such as “&lt;span style="font-style:italic;"&gt;ConcreteWall #34 normalMap texture&lt;/span&gt;”. First you’ll write out the top-level assets, then you start zooming in, further and further.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-WD6u0W3QxrE/TiM3_zczKAI/AAAAAAAAAgc/U9jeDKNUj8I/s1600/RS_Ice2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 292px;" src="http://4.bp.blogspot.com/-WD6u0W3QxrE/TiM3_zczKAI/AAAAAAAAAgc/U9jeDKNUj8I/s400/RS_Ice2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5630405528425539586" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;The red/green/blue bands is caused by an effect called "Dispersion". Now this code isn't exactly based on realistic wavelength calculations. But it looks cool nevertheless. Maybe overdone for ice, but glass objects can certainly make good use of this. How it's done? Just by calculating 3 different refraction vectors, and sampling 3 times from the background texture. One coordinate for Red, one for Green and another for Blue.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I think most of us hobby game developers made listings in Notepad or Excel. This and that map, blue chair, orange bench, dustbin and a Ming vase model. Go. But then you probably also recognize the quality of these listings: not up-to-date, incomplete, lacking detail, and asides you, no one really looks into them. It works for small assignments, but not for something in the magnitude of a game. So, I did two things:&lt;br /&gt;A:- Ask a person (Brian) to help me managing&lt;br /&gt;B:- Made a database tool to manage the assets&lt;br /&gt;&lt;br /&gt;Since Brian is a writer, he probably knows better than me how to “RAR” my huge documents into short but powerful (proper English) texts. He can help me building the assets listing. He does not know about the deep gritty details such as which shaders need to be made to render a 3D turd. But he does now about story telling… and since we have to fine-tune the story and all of its assets (locations, themes, characters) first, before we can go deeper… The splitting process automatically will dig up the story details and paths that yet need a decision.&lt;br /&gt;&lt;br /&gt;To manage all of this, I made a simple MS Access database. And a graphical program around it. In a folder-structure (the top-down approach), you can insert assets. An asset here is made of:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;- Short name&lt;br /&gt;- Type (texture, character, game info, 3D object, …)&lt;br /&gt;- Description&lt;br /&gt;- Design info (text, additional files, papers and weblinks that explain HOW-TO make it)&lt;br /&gt;- Status (not started, work in progress, almost done, done, suspended, aborted)&lt;br /&gt;- Priority (lowest to highest)&lt;br /&gt;- Assigned person(s)&lt;br /&gt;- Planned / released data (to make appointments)&lt;br /&gt;- Estimated &amp; spend hours (for administrative purposes)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;And yet a more powerful feature is the ability to drag &amp; drop assets into another. This allows to make abstract assets, split out in deeper, detailed assets. Example:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Player&lt;br /&gt;----Models&lt;br /&gt;---------High poly body&lt;br /&gt;---------High poly head&lt;br /&gt;---------Low poly body&lt;br /&gt;---------Low poly head&lt;br /&gt;----Textures&lt;br /&gt;---------AlbedoMap body&lt;br /&gt;---------NormalMap body&lt;br /&gt;---------SpecularMap body&lt;br /&gt;---------AlbedoMap head&lt;br /&gt;---------NormalMap head&lt;br /&gt;---------SpecularMap head&lt;br /&gt;----Animations&lt;br /&gt;----Info&lt;br /&gt;---------Background docs&lt;br /&gt;----Sounds&lt;br /&gt;---------Footsteps&lt;br /&gt;---------Voice&lt;br /&gt;---------Dialogs&lt;br /&gt;----Programming&lt;br /&gt;---------Animating&lt;br /&gt;---------Controlling&lt;br /&gt;------------------Navigating&lt;br /&gt;------------------Weapon handling&lt;br /&gt;------------------Ladder climbing&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;We can already insert the “Player” asset, without knowing which sub-assets we’ll exactly need. Hell, I don’t know what kind of animations or sounds we’ll need. The same asset can also be referred by multiple parent nodes. For example, Demo2 requires the “Ladder climbing code” asset.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-OjAQpnZdQb0/TiM5lxbc7XI/AAAAAAAAAgk/qADnWF4c4wM/s1600/AssetBrowser.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 224px;" src="http://1.bp.blogspot.com/-OjAQpnZdQb0/TiM5lxbc7XI/AAAAAAAAAgk/qADnWF4c4wM/s400/AssetBrowser.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5630407280229674354" /&gt;&lt;/a&gt;&lt;br /&gt;Well, this program allows Brian and me to manage the assets of course. But it also allows others to have a look or eventually to update their own progress. Be careful not to let a whole bunch of persons mess around in your database, or it will get mess as every person as a different grouping / naming strategy. Each person can see his (priority) pending tasks (+ explanations), or the progress from others. Hopefully, this helps streamlining everything, and ultimately, helps motivating people. If two persons work slow, the third will be less motivated as well. If two persons work hard, the third has a better chance to get sucked into this “fanatic workflow”.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Rick&lt;br /&gt;CEO of… uh, crap, still no name yet&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-403532126139939410?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/403532126139939410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/07/office.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/403532126139939410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/403532126139939410'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/07/office.html' title='The Office'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/--UsR_lmFIYY/TiM1nbKW0pI/AAAAAAAAAgM/CAG-sOnwCi4/s72-c/RS_RadarStairs.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-7627033462079260813</id><published>2011-07-03T15:21:00.000-07:00</published><updated>2011-07-03T22:23:24.214-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gaming is for kids? Motion blur on dynamic objects'/><title type='text'>Forever young</title><content type='html'>Easy, the second part of the water tutorial will come. Got to finish some more rooms first... Last week I spend most programming-time on adding motion blur on rotating objects (see bottom), improving Cascaded ShadowMaps for long-range lights such as the sun, and a fancy loading-screen system! We programmers all know debugging means changing 2 letters, recompile, and run the program again for the 1235th time. When having long loading times (10 seconds or more), this can get quite annoying. So here a little tip to make all the waiting a little bit more bearable; show your concept art!&lt;br /&gt;&lt;br /&gt;Concept artists do their best making teasing images or good reference work. By now, we got a whole truckload of old-flat photographs and the likes. So why not showing a few random pictures while waiting? Just to bring you in the mood, and to make sure all that hard work won't be forgotten.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-mreQqXY6aok/ThDt9bUROYI/AAAAAAAAAfs/2bY3xFPEvfA/s1600/RS_F0_Center.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 298px;" src="http://1.bp.blogspot.com/-mreQqXY6aok/ThDt9bUROYI/AAAAAAAAAfs/2bY3xFPEvfA/s400/RS_F0_Center.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5625257574146324866" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;See? There are still parts missing. And the brown chunks on the water should be ice...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Boy, all that talk about games. How old are you? I’m 27, and could become a grandpa within 13 years in theory already (didn’t count the 6 year old moms). Well she’d better not, but what I’m trying to say is: aren’t we a little bit too old for playing games? Or like me, spending thousands of hours trying to make one? Uhm… although I’m not playing that often anymore, and although the impact and charm isn’t the same as ten years ago, I still enjoy them. Mom cooking, little daughter drawing “things”, daddy shooting cowboys in Rockstar’s Red Dead Redemption. Which is an absolute masterpiece by the way, way deeper than the GTA series.&lt;br /&gt;&lt;br /&gt;Yet, when someone asks about my hobbies, game-programming is often replaced with “&lt;span style="font-style:italic;"&gt;doing creative stuff&lt;/span&gt;” (or sporting, yeah right). When colleagues at work ask “&lt;span style="font-style:italic;"&gt;how did you learn all that stuff huh?&lt;/span&gt;”, I answer with “&lt;span style="font-style:italic;"&gt;School and a little bit fooling around at home&lt;/span&gt;”. While the fact is that most of the experience comes from the endless attempt to make games. It’s just not cool to admit you’re doing kiddy things against a bunch of non-digital workers smeared in oil, even not when having a cigarette in the corner of your mouth.&lt;br /&gt;&lt;br /&gt;Needless to say, openly telling your exciting Super Mario adventures and your boy dreams of being a muscular Doom Space Marine is not exactly what you tell the girls either. Grown men drink beer, demolish things, drive motorcycles and shit without toilet paper. Ok, the modern metro-man shaves legs, knows everything about expensive perfume and hits the club every Tuesday. But neither of them plays games. Not done. Just like you shouldn’t play with Lego, read superhero comics, draw bad monsters, or enjoy Commando with Arnold Schwarzenegger at my age.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-Eyf_b1jUe1s/ThDudxxGrdI/AAAAAAAAAf8/_1TuwDU5QWw/s1600/RS_RadarTop.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 295px;" src="http://4.bp.blogspot.com/-Eyf_b1jUe1s/ThDudxxGrdI/AAAAAAAAAf8/_1TuwDU5QWw/s400/RS_RadarTop.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5625258129928662482" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Talking about action movies. This is the Radar-Station (work in progress), our test playground map for the object Editor I mentioned a couple of times last posts.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Of course, many people do have a secret Marklin modeltrain platform on their attic (where the wife doesn’t come). Oil platform workers play Pokémon on the pink NDS of their girlfriend. And just look how excited all the boys are when the word “Lego” falls. Tssssk, bet what happens if you throw a box of Lego between a bunch of full-grown drunk men on a party. Happy like never before. Being full-grown sucks, but we have suppress our feelings anyway. Otherwise the guys at the office will laugh, and your wife is too ashamed to walk in public with you.&lt;br /&gt;&lt;br /&gt;Basically, “growing-up” means throwing your fantasy overboard. Because that’s what really happens. And whether you like it or not, sooner or later you start noticing Rambo III isn’t as funny as it used to be. Superheroes are kind of lame, Duke Nukem isn’t real, and instead of imagining your own action-packed stories, you lazily let the TV do all the work. Or maybe you read a book. Just as long as you don’t have to surrender yourself to your own fantasies, because that’s childish. &lt;br /&gt;&lt;br /&gt;Some give a brave struggle, others fall quickly. But we all get old sooner or later. And for what? Give yourself a pat on the back. Because you didn’t only grow up(7 years after your girl, as she claims), you also got officially boring due the lack of fantasy an impulsive thinking. Perhaps resulting in the so called midlife-crisis, ten years later, as you finally realize you did nothing but working, watching TV and adapting yourself to age, wife, kids, environment, and the “norms”. Shit, you could have played Counterstrike for at least five more years, or maybe still even drink beer and laugh about farts every Saturday with fellow 40 year old childish friends! Now you suddenly got to compensate with parachute jumps and climbing a mountain.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now seriously. Isn’t it a pity we hide or even discard our hobbies, loves and fantasies just to prove our maturity? When looking at my little daughter, it reminds me how special little things once were. Every year I hope to catch that nostalgic feeling when setting up the Christmas tree, but after two days I’m not even looking anymore. But as a kid, I was fascinated just by the red and green colors of those tree lamps. The whole atmosphere could become exciting, just by adding some colors, sounds, a specific smell or event. Kids are still unbiased, open for everything. Life is a big adventure, and when they play they live their fantasies, unashamed, pure. Doesn’t that make you jealous sometimes? At least they are still happy with everything they see and do.&lt;br /&gt;&lt;br /&gt;I’m Goddamn happy with my game-programming hobby. Childish or not. As you may guess, my grownup girlfriend doesn’t really understand either why I’m wasting so much time behind the computer. Programming a game… ok… But for me, it feels like the last station between childhood and maturity. Already lost a lot of luggage when it comes to absurd humor, farts, partying and building fantasy cities on the attic. So please! Let me be young and dream away in my fantasy for a little longer! And if you think that’s childish, maybe. But at least I’m happy with it! Touché.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/--I2D7wLZZpw/ThDuv-IejAI/AAAAAAAAAgE/D6JBHEjB8SE/s1600/RS_Barrack1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 290px;" src="http://4.bp.blogspot.com/--I2D7wLZZpw/ThDuv-IejAI/AAAAAAAAAgE/D6JBHEjB8SE/s400/RS_Barrack1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5625258442485566466" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;If fantasies about old barracks in spooky environments are already childish, then how the hell could a man think of Mushroom Kingdom, Harry Potter, Star Wars, or Family Guy? Exactly. Screw them, just use your fantasy and be proud of it, no matter what they say!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Motion blur on rotating objects?&lt;/span&gt;&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Not a very high quality blur, but at least it’s cheap and easy. For a good description, check this link:&lt;br /&gt;&lt;a href="http://http.developer.nvidia.com/GPUGems3/gpugems3_ch27.html"&gt;GPU Gems 3: Motion blur as a post effect&lt;/a&gt;&lt;br /&gt;In turbo-short, perform this post-effect on the whole screen as follow; &lt;br /&gt;- Calculate the previous (screen)position of each pixel by using the preview modelview matrix&lt;br /&gt;- Calculate the 2D motion vector by subtracting the previous position from the current pixel position&lt;br /&gt;- Create a blur-streak, using the motion vector to offset the texcoords.&lt;br /&gt;&lt;br /&gt;This creates a blur while (quickly) rotating the camera. However, it does not make fast moving/rotating objects blur by itself. Got to give a helping hand. In the earlier passes, I also store the motion vector in one of those buffers. Just like you can store depth in a texture, you can also store a 2D or 3D velocity. Calculating this velocity is easy. For each object, store the previous matrix. You know, the position / rotation matrix you would set with glLoadMatrix before rendering your object. In the (vertex)shader, use the current and previous matrix to calculate 2 world positions. Subtract them to get the velocity. &lt;br /&gt;&lt;br /&gt;Although somewhat more work, you can do the same trick for animated characters if you pass all previous bone matrices as well. This allows to blur fast moving limbs, such as E.Honda's Hundred-Hand-Slap. Now back to the final step. Just sample the motion vector and add it to the camera motion. Done. Burp.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-qRd7dXFU1i4/ThDuMfAjKAI/AAAAAAAAAf0/sSA-eoCHni8/s1600/RS_F3_BigRoom.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 293px;" src="http://3.bp.blogspot.com/-qRd7dXFU1i4/ThDuMfAjKAI/AAAAAAAAAf0/sSA-eoCHni8/s400/RS_F3_BigRoom.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5625257832835393538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;We still have to produce more textures, and then fill the rooms with objects. But it is a start.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-7627033462079260813?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/7627033462079260813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/07/forever-young.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/7627033462079260813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/7627033462079260813'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/07/forever-young.html' title='Forever young'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-mreQqXY6aok/ThDt9bUROYI/AAAAAAAAAfs/2bY3xFPEvfA/s72-c/RS_F0_Center.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-3664026942804226168</id><published>2011-06-24T01:09:00.000-07:00</published><updated>2011-06-24T02:00:13.401-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software deployment'/><title type='text'>Send report to Microsoft?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-ly_r9bWqxG0/TgRQ6z9ZFfI/AAAAAAAAAfE/KTKXgrLgK7Q/s1600/Barrel1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 290px;" src="http://3.bp.blogspot.com/-ly_r9bWqxG0/TgRQ6z9ZFfI/AAAAAAAAAfE/KTKXgrLgK7Q/s400/Barrel1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5621707206175561202" /&gt;&lt;/a&gt;&lt;br /&gt;You might expected another "water tutorial". Excuses. Already wrote the text (a month ago actually), but I'd like to have some water pictures with it. I'd like to finish some maps first. You don't show photo's of your grandma when talking about your new girl either.&lt;br /&gt;&lt;br /&gt;I got some other pics though. Sergi started producing various models. So while I was stinking in bed, he made an old computer, a lamp, comfortable bed, and a barrel. What kind of game doesn't use barrels?! Doom, Double Dragon, Halflife, Crysis, Final Fight, Donkey Kong. Except for Tetris, every game should have barrels. Especially the red explosive ones. A game without barrels (and crates) is like beef without beef.&lt;br /&gt;&lt;br /&gt;To help the modeling guys, they finally got a working editor. This tool can import meshes, and render them in a test environment with the same graphics we use in the real game. As a little bonus, you can toss around objects to test their physics, and test the impact. Impact effects are collision, scrape, roll and spin sounds, particles, splat decals, bullet shots, et cetera.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-5W50tOlrl2E/TgRRHLLfnvI/AAAAAAAAAfM/WE3gRIhdkh4/s1600/IKEA_HokeBunkerBed.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 296px;" src="http://2.bp.blogspot.com/-5W50tOlrl2E/TgRRHLLfnvI/AAAAAAAAAfM/WE3gRIhdkh4/s400/IKEA_HokeBunkerBed.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5621707418567155442" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Deployment my ass&lt;/span&gt;&lt;br /&gt;Getting it to work on another computer wasn't so easy. I never had ATI videocards or a 64-bit machine, so the Editor went to unknown, possibly dangerous, territory. The very first issue was a mysterious "&lt;span style="font-weight:bold;"&gt;Runtime error 217&lt;/span&gt;". It seems to happen before the creation of any form, and the application just stops. Grumble!! Checked the DLL's dozen's of time with Dependancy Walker, but finally it turned out we had a "Millennium bug". Sort of. Sascha mentioned something about date function problems. The Delphi(7) function "&lt;span style="font-style:italic;"&gt;strToDate('01-01-1900')&lt;/span&gt;", called at one of the unit initialisations, was making havoc indeed. What, not a valid date @#$%@#... my great grandmother was born in 1896 or something (married Julius Caesar, lived in a dolmen, and fought in the Eighty Years'War).&lt;br /&gt;&lt;br /&gt;Now it works, and surprisingly it didn't produce tons of shader-compiler-errors... at least not on the computers with modern nVidia cards. One of the many programming horrors is to make your app "multi-platform". Yeah sure Java, OpenGL and the likes claim to be multi-platform, but in practice every PC is different. Even when using the same operating system. Conflicting security rights, hardware, Windows service pack version, screen resolution, component XYZ installed or not... It's a mess. &lt;br /&gt;&lt;br /&gt;Any programmer should know that your program isn't finished as soon as you say "it's finished!". On your dev-station maybe, but you'll be amazed what kind of (stupid) errors will appear as soon as you deploy your hard-work on a customer computer for the first time. "Array index out of bounds... cannot open file... Hey... that's strange... Normally that doesn't happen.". Yes admit it, you said that more than once!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-2IHBiW5BCp8/TgRRQu8cwoI/AAAAAAAAAfU/MnRBBofh-I8/s1600/Lamp1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 290px;" src="http://1.bp.blogspot.com/-2IHBiW5BCp8/TgRRQu8cwoI/AAAAAAAAAfU/MnRBBofh-I8/s400/Lamp1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5621707582786552450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Congratulations, you have been selected to become a Beta tester!&lt;/span&gt;&lt;br /&gt;That's why I try to delay my releases usually. Keep testing, add logbooks, and make use of those "try - catch" statements. If something goes wrong -and it will-, you can locate the cause somewhat better. At least try to give the client the impression you got it all under control hmm?&lt;br /&gt;&lt;br /&gt;But yet, if you don't have extensive testing capabilities (thus 30 different computers including one with coffee spilled on it, and another one completely screwed up by porn websites), you got to move on at some point, and hand it over. For one thing, you are not a proper beta-tester, as you know how to use your own system unaware. You won't be hitting buttons 10 times in a row like a monkey, you don't click the cross while you should click "save". But don't underestimate the "stupidity" of your clients when it comes to using your software! They will produce fault-reports like Beethoven can write symphonies. Professional program-crashers as they are!&lt;br /&gt;&lt;br /&gt;In other words, you'll need customer feedback to create stable software. Therefore it's wise to hand over your "&lt;span style="font-weight:bold;"&gt;Beta&lt;/span&gt;" version first to a few trusted persons (with a lot of patience!), before throwing it in the public. The problem is, the average user will stick to his/her first impression. If this first impression is "&lt;span style="font-style:italic;"&gt;Access violation at address FF01234&lt;/span&gt;", they won't trust your software anymore. Even when build 4.0g12 is rock solid. First make sure it works as desired for a few test-persons (make them feel good about theirselves by telling they are specially selected to test your Beta!), then take the next step.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-1_DjwvFSrg0/TgRRYi_I9VI/AAAAAAAAAfc/-D5Ynt9CIyg/s1600/BarrelFriends.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 290px;" src="http://1.bp.blogspot.com/-1_DjwvFSrg0/TgRRYi_I9VI/AAAAAAAAAfc/-D5Ynt9CIyg/s400/BarrelFriends.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5621707717015565650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;fuel barrels, empty barrels, rusty barrels, stinky barrels, bumped barrels, broken barrels, shiny barrels, important barrels, holy barrels, shitty barrels...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;This card doesn't support multi-texturing&lt;/span&gt;&lt;br /&gt;The advantage of a fixed hardware setup (like a PLC in a range of machines, or gaming console) is that the platform is equal everywhere. You know what to expect, now deal with it. Once it works perfectly on your development-machine, it should work on any other machine as well. But obviously, Tower22 is aimed for the PC. Maybe it will be ported to  the XBox 720 Roundhouse kick, PS Forty-core, or Nintendo W00t some day :) But let's focus on my own dev-station first.&lt;br /&gt;&lt;br /&gt;At some older ATI card, the Editor already didn't work. At least not with all the shaders enabled (you can still render with textures only). Well, I could do two things. Make a profile with simplified graphics and shaders that make it run on older machines. Or B:, ignore them. When releasing a game, more audience means more money. So obviously engine-makers try to get CryEngine2 run on an Atari as well (although one has to draw a line somewhere of course). Yet, I chose option B. For now. Why? &lt;br /&gt;&lt;br /&gt;Adding support for older platforms takes time, of course. You can't just disable a few tricks and get a result that is "good enough". At the same time, T22 is far from finished. The graphics I produce today, are likely to be (out)dated two years later. So instead of spending energy on the past, I'd better try to focus on the future. Waste too much time on making your engine "backward compatible", and you will stick in the past. The average gaming computer might not be able to run T22 smoothly right now, but don't forget the "average gaming computer" evolves too. I'm pretty sure these systems can run (the current) T22 nicely in two years.&lt;br /&gt;&lt;br /&gt;Other than that, I'm just too lazy to work through all those shaders again :) Hey, programming a game all alone in your free time isn't easy!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-X9lmc-ecCYs/TgRRt6YQ6vI/AAAAAAAAAfk/sBl26Z-YjvY/s1600/ConcreteTextures.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 283px;" src="http://2.bp.blogspot.com/-X9lmc-ecCYs/TgRRt6YQ6vI/AAAAAAAAAfk/sBl26Z-YjvY/s400/ConcreteTextures.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5621708084072213234" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Playing around with some concrete textures. We'll need a lot of those for the upcoming Radar Station map.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-3664026942804226168?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/3664026942804226168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/06/send-report-to-microsoft.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/3664026942804226168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/3664026942804226168'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/06/send-report-to-microsoft.html' title='Send report to Microsoft?'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-ly_r9bWqxG0/TgRQ6z9ZFfI/AAAAAAAAAfE/KTKXgrLgK7Q/s72-c/Barrel1.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-1004094360671199329</id><published>2011-06-11T00:42:00.000-07:00</published><updated>2011-06-14T23:27:24.368-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Poland'/><category scheme='http://www.blogger.com/atom/ns#' term='Auschwitz'/><title type='text'>Poland, Auschwitz</title><content type='html'>Visited Poland, once again. That means trying to spot some Soviet stuff here and there, having a stroll in the forest hills. And mainly eating and drinking. Feeling like a sugar donut getting stuffed with even more jelly. Sausages are not just sausages here, you can feed a damn Tyrannosaurus Rex with it. Maybe Poland is not the richest country around on this planet, but you won't starve here. And neither run out of alcohol. I'll spare you the alcoholic drama stories this time, but yet I just like to mention I saw an older friendly looking grandpa-man with a baby-buggy... So sweet... wait, that isn't a baby. That’s a pile of beer and wodka bottles.&lt;br /&gt;&lt;br /&gt;Since Tower22 uses the communistic atmosphere and architecture as a background (though the story has nothing to do with Stalin or other comrades) I always keep my eyes open for the typical details here. We love old worn buildings, rusty bus-stops, cheap interiors and batteries of tall flats which make you wonder how a person could ever become happy there. Plenty of things are different from my (over)organized, clean, efficient, modern, somewhat obediently Holland. Certainly in combination with those alcohol stories. But honestly, it all isn't THAT dramatic. We didn't spot Pyongyang buildings, KGB agents or jumped 60 years back in time. Many youngsters do have a Samsung Galaxy telephone by now.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-Z1LwrD2LM0A/TfM84VE5fOI/AAAAAAAAAcs/MQoWTpg_qy4/s1600/Oswiecim%2Bflat.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/-Z1LwrD2LM0A/TfM84VE5fOI/AAAAAAAAAcs/MQoWTpg_qy4/s400/Oswiecim%2Bflat.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5616900098689170658" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-u8Pu5W1FzDs/TfM8_NDflJI/AAAAAAAAAc0/IZlhfS-1e2w/s1600/SovietPlayyard2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 325px;" src="http://1.bp.blogspot.com/-u8Pu5W1FzDs/TfM8_NDflJI/AAAAAAAAAc0/IZlhfS-1e2w/s400/SovietPlayyard2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5616900216794879122" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;What would a Polish landscape without a red-white striped chimney somewhere in the background?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;On a train&lt;/span&gt;&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;The fantasy tries to see things that aren't there (anymore). And maybe I'm just getting a little bit used to the cracked pavement, concrete blackened by smoke, weird-color-painted walls, rusty metal commercial signs on buildings, cheap products, noisy old cars that bump over the hole-filled streets, funny narrow passages, the “air raid” that goes off almost every day after a thunderstorm to call the firemen out of their beds/bars, and the fact that you can never get what you really want. I needed some veal to cook a meal for my family. Nowhere. Tortillas: huh? One year ago, I searched two(!) CITIES for a photo-camera and GTA San Andreas for the PS2 (present for little brother in law). On 24 fucking December. Just before giving up we finally found a shop with decent camera's, but no GTA:SA in entire Poland. Sunglasses (not the cheap plastic ones): not in this town. &lt;br /&gt;&lt;br /&gt;Maybe a ticket to Krakow, one of Poland’s major cities, not that far away from us then... According to the atlas, there is a railroad between Zywiec (the most nearby city from our town Milowka) and Krakow, so we should be there in a 90 minutes... Ok, ok 2.5 hours, as the trains don't go that fast here. Well… forget about it. That train doesn't exist or only drives at 20:00 ó clock or something. Any alternative (bus)routes then? Here in Holland every idiot can plan a journey after 4 clicks on one of the route-planning websites. But my parents in law never heard of internet of course, and the annoyed grumpy ladies at the station ticket-window apparently neither. She searches for an old book and starts telling it's basically impossible to get there unless we take a long detour. And we need some luck as she is not sure whether train X comes or not. Not sure?!&lt;br /&gt;&lt;br /&gt;The bus-ladies weren't very helpful either. Krakow?! Of course there is no bus going there! Don't you know?! No, because if we knew, we wouldn't be asking bitch. Do your damn job. Exceptions there, nice customer service doesn’t seem to be a well known word in Eastern Europe. You would expect a shop-owner to be happy if you buy something, giving the fact that it's hard enough to sell enough wares to make a living here. But most of them don't seem to give a crap... Pfff, got to work again, another annoying (spoiled) customer. Bleh.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-O2qVBy5uRGk/TfNA5J_l8TI/AAAAAAAAAc8/MPq4HSu46JQ/s1600/Polska%2BTrain2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-O2qVBy5uRGk/TfNA5J_l8TI/AAAAAAAAAc8/MPq4HSu46JQ/s400/Polska%2BTrain2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5616904510940508466" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;For Dutch readers, you will respect and love NS &amp; Pro-Rail once you tried to travel here. We complain if the train is 5 minutes late. But at least it drives every (half) hour, and brings you everywhere pretty fast. Other than the Polish trains who creak and ramble as an 200 year old ladie in a rusty wheelchair getting raped. And don’t forget our railways are one of the most occupied ones in the world. In Poland the smaller train-stations still have houses and a lady to operate the switches (hopefully not in a drunk mood). All in all charming, but not very efficient of course.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Oswiecim&lt;/span&gt;&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;Nevertheless, we finally managed to find a route to Oswiecim (nearby Krakow). Oswiecim... yes, that is what the Germans would call Auschwitz. With a car it would take less than two hours. With our logical combination of trains and buses, it only took four or five hours. From which most of the time was spend waiting because the train stood still, or waiting for a bus. But hey! We did it. For Auschwitz I was willing to make an exception, as the 1,3 million people who once were deported to this place, didn't have a comfortable ride either.&lt;br /&gt;&lt;br /&gt;Oswiecim is a little city, just like any other Polish city here. But behind the station and trees, it hides one of the most gruesome historical happenings; the extermination of 1,1 million men, women and children. Mainly Jews, but also arrested Poles, Russians, and minorities such as disabled people or gypsies, who didn't fit in Hitler’s picture of a perfect world either. The grandfather of my girlfriend had to leave his house and help building the camp. Others ended up dead there.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-Zz_VEp-mpmk/TfNRg9-vkqI/AAAAAAAAAdU/Y5mOI5FdaHA/s1600/Auschwitz%2BTrainstation.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/-Zz_VEp-mpmk/TfNRg9-vkqI/AAAAAAAAAdU/Y5mOI5FdaHA/s400/Auschwitz%2BTrainstation.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5616922787096531618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-hiwIiTxWtlk/TfNKlrqFWNI/AAAAAAAAAdE/mkELrk1cy4M/s1600/Auschwitz_BirkenauMap.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 262px;" src="http://1.bp.blogspot.com/-hiwIiTxWtlk/TfNKlrqFWNI/AAAAAAAAAdE/mkELrk1cy4M/s400/Auschwitz_BirkenauMap.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5616915171495991506" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;What kind of architects does it require to design a place to kill...?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Not far from the train station, just behind the city, lies Birkenau with camp Auschwitz. Camp number II out of III actually. 3 kilometers away lies camp 1, with the well known “Arbeit macht frei” sign (“Work makes freedom”, sure). Auschwitz III, Monowitz, was more of a work camp where factories like Krupp Stahl and IG Farben were installed. But we didn’t visit those camps. No internet, no car, or map. We went by foot and just asked directions to “Auschwitz” and ended up at camp 2, the destruction camp. Following a pretty busy asphalt road with plenty of trees, bush and typical Polish houses on both sides. As said, we weren’t prepared (which is a shame hindsight), so I really had no idea what to expect... Except that it might "disappoint" a little. I'll explain.&lt;br /&gt;&lt;br /&gt;We all know Auschwitz from the books, scary black-white pictures and maybe movies such as Schindlers List where trains loaded like cattle wagons drive through the gatehouse, with the horrific smoking chimneys of the incinerators in the background. It's dark, cold, noisy, full of angry SS soldiers, and even more terrified people that have no clue what will come... And that scenario is not spiced with Hollywood movie ingredients. The reality might have been even worse.&lt;br /&gt;&lt;br /&gt;And here we are. After passing a little hill and curve in the road, we suddenly see the gatehouse, and the long, long fences with the wooden watchtowers. But what we also see are touring busses going on and off, and singing birds, grass and flowers as it's a beautiful sunny day in June. I can't help it, but the normal houses here that have a view on Auschwitz while barbequing in the backyard make an absurd contrast. The remains of Auschwitz are still there, but life obviously continued.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-YF7JWJqxnAI/TfNWiFwfaSI/AAAAAAAAAd0/NVXPQDm7eUE/s1600/Auschwitz%2BApproaching1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-YF7JWJqxnAI/TfNWiFwfaSI/AAAAAAAAAd0/NVXPQDm7eUE/s400/Auschwitz%2BApproaching1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5616928303922243874" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Could you tell world most famous deathcamp is only half a mile behind these houses?&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-9NVkMhGZczc/TfNRNA6jmrI/AAAAAAAAAdM/OKgeTd9G1oo/s1600/Gatehouse1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-9NVkMhGZczc/TfNRNA6jmrI/AAAAAAAAAdM/OKgeTd9G1oo/s400/Gatehouse1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5616922444286892722" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Compare this picture to &lt;a href="http://en.auschwitz.org.pl/m/index.php?option=com_ponygallery&amp;func=detail&amp;id=710&amp;Itemid=17"&gt;this&lt;/a&gt;, and you understand why it's difficult to get a good image of what really happened. About the railroad; although it seems unseparatable from the gatehouse, this rail wasn’t there until 1944. Prisoners had to walk in. As a “welcome”, an orchest was playing cheery music, while dead bodies were stapled on the other side as a warning sign.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Once through the gate, we tried to separate from the groups of tourists. Although the guides do a good job giving a background story with all of its (gruesome) details, I didn't want to stand between giggling girls, photographing dad's, annoyed kids and people acting being shocked, then yapping on two seconds later. Not here. Luckily it wasn't that crowded, and Auschwitz is a really large place. So finding some rest wasn't difficult. We started on the East side of the entrance, walking through the few wooden barracks that remained. This is where mainly Jewish men had to 'live'. With up to 500 men in wooden stables that were originally stables to house about 52 horses. Hunger and execution weren't the only concerns here. The barely isolated barracks are ovens in the summer, and freezing cold in the harsh Polish winters. And due the bad hygiene all over the camp, insects and diseases were ever present. And I don’t have to tell you where a visit at the doctor would bring you when feeling ill…&lt;br /&gt;&lt;br /&gt;It's quite strange to see the first line of barracks are only 50 meters away from freedom. A patch of grass (mined?), a not too deep ditch, a 4 or 5 meter tall fence, and watchtowers every 100 or 200 meters. You may wonder why there weren't massive break-outs, at the "top" days when Auschwitz kept 90.000 prisoners. Well, some people did escape. Especially at the beginning when the fences weren't electrified yet. Prisoners also managed to blew up one of the gas chambers by the way. But probably most the prisoners were too unsure, too afraid, and too weakened for escaping. In total, about 700 prisoners escaped. Only 300 actually survived.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-j9Ph6XSHVs4/TfNUsjTv02I/AAAAAAAAAdc/AiWKzflyqyM/s1600/Barracks5.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-j9Ph6XSHVs4/TfNUsjTv02I/AAAAAAAAAdc/AiWKzflyqyM/s400/Barracks5.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5616926284630184802" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-crOX-LyQ39c/TfNU6Hb9CmI/AAAAAAAAAds/CoKECFg7ZCo/s1600/Watchtower.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-crOX-LyQ39c/TfNU6Hb9CmI/AAAAAAAAAds/CoKECFg7ZCo/s400/Watchtower.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5616926517666581090" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Some tried to escape here, others used the (eletrified) wires to commit suicide.&lt;br /&gt;"Er ging zu den Drähten" (he went to the wires).&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-xSB1YhgMw00/TfNUzdwrkUI/AAAAAAAAAdk/plc_ubsuiTs/s1600/Barracks1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/-xSB1YhgMw00/TfNUzdwrkUI/AAAAAAAAAdk/plc_ubsuiTs/s400/Barracks1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5616926403400012098" /&gt;&lt;/a&gt;&lt;br /&gt;It has to be said that the Nazi's tried to hide evidence of the Holocaust at the end of the war. Yes, the bastards themselves must have realized they were doing something terribly wrong, something not to be proud of... The four gas-chambers are completely burned (camp 1 has an intact one, open for public), and most of the barracks are gone as well. Only the stone fundaments and small chimneys (used as central heating systems in each barrack) are still standing. This makes Auschwitz a large, but also an empty place. So we stand here, trying to depict all the misery, chaos and inhumanity. But honestly, the silence, the emptiness, the shiny weather, the green grass, groups of tourists and cars that drive by the fence now and then in the background make it very hard to get the slightest idea of how bad it really was.&lt;br /&gt;&lt;br /&gt;Auschwitz is not an attraction, or horror-museum, trying to shock you. It's just what it is. And the people who work here try to preserve this with the donations they get (entrance is free, but you can make a deposit). Of course. It shouldn't be anything else, we're not in Disney World for a day of fun. But yet, this may feel as some sort of disappointment; I just couldn’t really imagine what happened here. Then again, this is a personal feeling, and I guess each person will experience this place differently.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Gas chambers&lt;/span&gt;&lt;br /&gt;We went back to the central path with the rail-roads. When the trains stopped here, people would get divided in groups. Jews, non Jews, women and children, men. Imagine this was probably the last time you would see your family... Groups of new-arrived people would be transported to the so called "Sauna" on the East-North side of the camp. But some were less “lucky”. The weaker ones (elder, pregnant, disabled…) were transported for immediate destruction right away. Not being able to work would death here.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-Lgx1UAox7o4/TfNXajMv4wI/AAAAAAAAAd8/Rz1YcoJKW1M/s1600/Railtracks.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 257px;" src="http://3.bp.blogspot.com/-Lgx1UAox7o4/TfNXajMv4wI/AAAAAAAAAd8/Rz1YcoJKW1M/s400/Railtracks.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5616929273898066690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-Kh-SNGLlY7g/TfNXgf8LTXI/AAAAAAAAAeE/I6O7smPgR0g/s1600/Wagon.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 257px;" src="http://2.bp.blogspot.com/-Kh-SNGLlY7g/TfNXgf8LTXI/AAAAAAAAAeE/I6O7smPgR0g/s400/Wagon.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5616929376102468978" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Days of traveling without food or water, packed like cattle, would take its toll on quite a lot prisoners already. But if the prisoners would knew their true end-destination, maybe dying here wasn’t so bad after all…&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-oVBk4-Zch3g/TfNYskQSmbI/AAAAAAAAAeM/X9rGSrYou7E/s1600/Gaschamber%2B3%2Bentrance.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 257px;" src="http://2.bp.blogspot.com/-oVBk4-Zch3g/TfNYskQSmbI/AAAAAAAAAeM/X9rGSrYou7E/s400/Gaschamber%2B3%2Bentrance.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5616930682930633138" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Krema III entrance... Unbelievable that hundred thousands did their last steps here.&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-MEyzfwVg8Yk/TfNbgNqnivI/AAAAAAAAAeU/GkYJEAD4Q5Q/s1600/Gaschamber%2BMap.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-MEyzfwVg8Yk/TfNbgNqnivI/AAAAAAAAAeU/GkYJEAD4Q5Q/s400/Gaschamber%2BMap.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5616933769243495154" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;The terror-core of the camp, the four gas chambers plus crematoria. Compared to other deathcamps from that time, the chambers in Auschwitz Birkenau were "superior" with a capacity of gassing up to 2.000 people in one time. Prisoners usually didn't know they would get gassed though, as they were told they get a delousing procedure instead. People would undress first, and then get moved into the chambers where Zyklon-B gas was pumped into the rooms. The dead-bodies would then be incinerated, including their documents. Erased from history.&lt;br /&gt; &lt;br /&gt;A dirty detail; valuables like golden teeth were removed from the bodies in room H.&lt;br /&gt;From Wikipedia:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Unterscharführer Hackenholt was making great efforts to get the engine running. But it doesn't go. Captain Wirth comes up. I can see he is afraid, because I am present at a disaster. Yes, I see it all and I wait. My stopwatch showed it all, 50 minutes, 70 minutes, and the diesel [engine] did not start. The people wait inside the gas chambers. In vain. They can be heard weeping, "like in the synagogue", says Professor Pfannenstiel, his eyes glued to a window in the wooden door. Furious, Captain Wirth lashes the Ukrainian [prisoner] assisting Hackenholt twelve, thirteen times, in the face. After 2 hours and 49 minutes — the stopwatch recorded it all — the diesel started. Up to that moment, the people shut up in those four crowded chambers were still alive, four times 750 persons, in four times 45 cubic meters. Another 25 minutes elapsed. Many were already dead, that could be seen through the small window, because an electric lamp inside lit up the chamber for a few moments. After 28 minutes, only a few were still alive. Finally, after 32 minutes, all were dead . . . Dentists [then] hammered out gold teeth, bridges, and crowns. In the midst of them stood Captain Wirth. He was in his element, and, showing me a large can full of teeth, he said: "See, for yourself, the weight of that gold! It's only from yesterday, and the day before. You can't imagine what we find every day — dollars, diamonds, gold. You'll see for yourself!"&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Sauna&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-vzML0I8B5Hg/TfNh7lGf0gI/AAAAAAAAAec/vJJhGyRJSjc/s1600/Introduction%2BSauna.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-vzML0I8B5Hg/TfNh7lGf0gI/AAAAAAAAAec/vJJhGyRJSjc/s400/Introduction%2BSauna.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5616940836460679682" /&gt;&lt;/a&gt;&lt;br /&gt;No matter how hard I tried, it's almost impossible to realise that you are looking at the ruins and soil that caught the ashes of hundred thousands of people. The only real witnesses are the tall green trees that still stand there. Maybe the large memorial monument between the two chambers distracts too much. Personally, I think this monument was a good idea, but shouldn't be placed inside the camp. But who am I to judge? A path behind the monument leads to some sewage systems, a forest path where even more dead bodies would be burned in the open air, and the Sauna. If one place managed to give me the shivers, it was here.&lt;br /&gt;&lt;br /&gt;The Sauna was used to "receive" new arrived prisoners, turning them into numbers. Again, this building is mostly empty and sober. Auschwitz was made to be cheap, quick and efficient. So don't expect any detail in the buildings. But I could imagine the horrible procedures new prisoners would undergo here. First they had to give up all their personal belongings. Unusable stuff was burned in ovens (operated by other prisoners), other belongings were cleaned in some sort of steam kettles. In the meanwhile, the prisoners would get disinfected in shower rooms. And it wouldn’t be Auschwitz if the shower water was either freezing cold or boiling hot on purpose.&lt;br /&gt;&lt;br /&gt;Prisoners would then get their infamous striped costumes, and their names were replaced by a number-tattoo. Both men and women were shaved with blunt tools at great speeds, so injuries and screaming were all part of the introduction. Now imagine you are a mother. Humiliated in every possible way. Being naked, shaved and hurt, in front of the eyes of your own children. Not being able to help them, and being worried sick of the fates or other relatives. It all happens between a bunch of Nazi soldiers (men, but also women), who would treat you as a ragdoll, or cattle. After doing it endless times before, you couldn't count on any compassion or any dignity from their sides anymore.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-qVDCN_4t2lc/TfNiRxUiLXI/AAAAAAAAAes/bBF52ZoZvic/s1600/Sauna%2Bshower%2Bprocess.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-qVDCN_4t2lc/TfNiRxUiLXI/AAAAAAAAAes/bBF52ZoZvic/s400/Sauna%2Bshower%2Bprocess.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5616941217697901938" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/--YEGGoJ1mys/TfNiDlCpF_I/AAAAAAAAAek/u2RX5EZXgNw/s1600/Sauna%2BDisinfection%2Bsteam%2Bkettles.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/--YEGGoJ1mys/TfNiDlCpF_I/AAAAAAAAAek/u2RX5EZXgNw/s400/Sauna%2BDisinfection%2Bsteam%2Bkettles.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5616940973883463666" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Why?&lt;/span&gt;&lt;br /&gt;We completed our tour by walking through the west side of the camp, where mainly women and children were kept later on. These (stone) barracks were also close to the infamous infirmaries where "doctors" like Josef Mengele would do experiments. "Clean" baby blood for example was used to cure sick SS soldiers. Because the poor hygiene everywhere, insects and diseases didn't discriminate on Jews and prisoners only. Other experiments included removing limbs from twins (usually without anaesthesia), injecting bacteria to see how long it would take before a patient died, and electrocution.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-UwD6xM44GM8/TfNmv_e4G5I/AAAAAAAAAe0/1CwWG6PVMyI/s1600/Women%2BBarracks2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-UwD6xM44GM8/TfNmv_e4G5I/AAAAAAAAAe0/1CwWG6PVMyI/s400/Women%2BBarracks2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5616946134941965202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;The stone women barracks were slightly “better” than the wooden barracks for men. But could you sleep here, on these three story-bunks, together with hundreds of other faces that come and go?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I didn't really caught “the horror” in Auschwitz itself. But once I was lying in bed that night, this whole experience started rambling. You start figuring how people can do this. Killing is one thing, but why like this? A beast that murdered ten people who ends up in Death-row, still has a somewhat clean cell, and a shower. He can choose his last-meal, and eventually let a Priest visit before he gets executed in a, relative, painless way. His remains will be returned to his relatives, so the family can finish the story. &lt;br /&gt;&lt;br /&gt;Not saying the death-penalty is good or wrong, but compared to the Auschwitz methods, at least it still has some respect to a human being. The train-ride to Auschwitz, the separation process, the induction, showering, shaving, tattooing, housing, beds, food and practically everything else here, was done in the most inhumane ways possible. A pig on his way to a slaughter house may suffer less. And we are not talking about criminals or cattle here... Auschwitz holds a room where they tried to reconstruct the background of some of the murdered families with the help of photo's, belongings and diaries. What you see here are smiling children, new born babies, men and women in love, people playing instruments and having fun, families trying to make a normal living.&lt;br /&gt;&lt;br /&gt;How on earth can people do this to each other? I'm afraid the inconvenient truth is that any person can be turned into an emotionless machine, by the influence of group solidarity. Just look at Hooligans, or the "Prison Break" experiment. “Them versus us”. Would a single, random German (SS) soldier hurt women and children, without a good reason? Most probably not. Don't forget these men had families too. The "endlösung"(final solution)  was the idea of a few very sick minds, not of the individual soldier. But the group dynamics, fear-for-punishment and discipline that rules especially in military structures make it possible that an average man will follow such instructions. Maybe with questioning himself, but without questioning the system. Let him murder once, and he may feel awful. Let him murder every day, and it becomes a routine, without regret and emotion. Let him make jokes and create bond with his fellow soldiers to find (false) reasons to justify his deeds, and he doesn't have to feel bad about himself anymore.&lt;br /&gt;&lt;br /&gt;Like Stalin (not uncommon with deathcamps either) said:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;The death of one man is a tragedy, the death of millions is a statistic.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;If you are ever nearby Krakow, I can certainly recommend to take a visit. Don't expect to see a lot of spectacular things, but this visit is certainly a life lesson.&lt;br /&gt;And if you go, prepare yourself better than we did, to get a better understanding of what the eye sees. There are only few places on this planet that show the contrast between good and evil in such a pure way. But also the thin line between it. Maybe I didn’t manage to get a good image of what really happened, just because it so inhumane. But it did happen. And it's up to us to prevent it from happening again. Asides from preserving these black pages in human history (which sadly starts to fade away already, as the last Auschwitz survivors will be dead within ten years, kids think Holocaust is a Thai herbal, and some people even start questioning if it really happened), Auschwitz should be considered as a warning to all of us. Respect life. Don't let hate form your decisions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-1004094360671199329?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/1004094360671199329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/06/poland-auschwitz.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/1004094360671199329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/1004094360671199329'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/06/poland-auschwitz.html' title='Poland, Auschwitz'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Z1LwrD2LM0A/TfM84VE5fOI/AAAAAAAAAcs/MQoWTpg_qy4/s72-c/Oswiecim%2Bflat.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-2284050252922159000</id><published>2011-05-24T16:08:00.000-07:00</published><updated>2011-05-24T17:06:11.652-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Water beginner basics'/><category scheme='http://www.blogger.com/atom/ns#' term='LOD'/><title type='text'>Ou est le swimming pool? #1</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-jLphKvTT16o/Tdw67K_vmFI/AAAAAAAAAb4/vd50a58Vsq8/s1600/TerminatorJudgementDay.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 211px;" src="http://2.bp.blogspot.com/-jLphKvTT16o/Tdw67K_vmFI/AAAAAAAAAb4/vd50a58Vsq8/s400/TerminatorJudgementDay.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5610424024035203154" /&gt;&lt;/a&gt;&lt;br /&gt;What a shame, the world didn't end yet. And of course that old fool from Family Radio didn't admit he was wrong either. "&lt;span style="font-style:italic;"&gt;What can I say, I'm not a Genius.&lt;/span&gt;" Yeah, God works in mysterious ways, so maybe you'd shut up next time? Making up stories to scare the hordes of sheep, tssk. For those who spend all of their money before 21 May: HAHAHA. Read Darwin next time.&lt;br /&gt;&lt;br /&gt;Sorry, I got carried away. Still a little bit angry about this documentary from Louis Theroux I just on Belgian TV one week ago:&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=ticxD0GfewA"&gt;The most hated family in America&lt;/a&gt;&lt;br /&gt;Very cute, but fundamental idiots like grandpa Harold or those intolerant assholes from the link above caused dozens of wars, crusades and other stupidity throughout history. Claiming to be God’s messengers, but doing nothing but threatening with Hell, Doom, Sinfloods… Let me say this:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;- For the mouth speaks what the heart is full of  (Matthew 12) - &lt;/span&gt;&lt;br /&gt;And now go jerk off yourselves.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To the happy news then. First, we get some more help on the modeling part. Another bandito from Spain, Sergi.&lt;br /&gt;&lt;a href="http://nueveparadas.blogspot.com/"&gt;http://nueveparadas.blogspot.com/&lt;/a&gt;&lt;br /&gt;He’ll be making models, maps, and eventually some of the textures that are required for them. Let's hope he can boost the development speed! The other good news; I just started adding some water-effects.&lt;br /&gt;=====================================================================&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;WATER&lt;/span&gt;&lt;br /&gt;=====================================================================&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-LusaZA2MkGA/Tdw9dPCXvYI/AAAAAAAAAcQ/UN1BYpuSszk/s1600/WaterPool2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 282px;" src="http://2.bp.blogspot.com/-LusaZA2MkGA/Tdw9dPCXvYI/AAAAAAAAAcQ/UN1BYpuSszk/s400/WaterPool2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5610426808258772354" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Do you want to go to the plage with me?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;H20&lt;/span&gt;, the magical substance that is believed to be the source of life. And the source of eye-candy when it comes to visual scenes. Where there is water, there is life. No wonder scientists are curious about what they might find on Europa, one of Jupiters moon's that is covered with a thick shell of ice.&lt;br /&gt;&lt;br /&gt;And where there is water, there are decent graphics programmers (ahum). No doubt that water is one of the eye-catchers when it comes to showing your game(engine). Now I'm not a real expert on this matter, as the last time I implemented it was years ago. So I might missed a few new gadgets. But since one of the readers here asked for some water-rendering tips not too long ago, I thought why not writing a little tutorial? For young and old:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;1.- Basic water techniques (non-shaders, beginners stuff)&lt;br /&gt;2.- (Basic) shader tricks&lt;br /&gt;3.- Adding reflections and refractions&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Users who already did some water and shaders might skip part one (and two). Although some of the tricks are quite universal. I won't mangle too much with waves and fluid dynamics though, as I simply never did that before. Anyway, have fun!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;BASICS&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------------------------&lt;br /&gt;You could try to implement an aqua volume that reflects and refracts light exactly physically correct. Or you just fake it with some tricks, with a wink to mister Fresnel. As usual, games tend to pick the second approach. And although water in games like Crysis or Halflife2 looks pretty real by now, we can nicely see how the fake tricks evolved from a blue texture to sparkling clear water.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-J-piK1GYR0M/Tdw8WalApsI/AAAAAAAAAcA/RSD9qaYvBjI/s1600/GameWaterEvolution.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 368px; height: 400px;" src="http://4.bp.blogspot.com/-J-piK1GYR0M/Tdw8WalApsI/AAAAAAAAAcA/RSD9qaYvBjI/s400/GameWaterEvolution.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5610425591586137794" /&gt;&lt;/a&gt;&lt;br /&gt;Doom and Duke Nukem simply painted an animated(2 or 3 frames!) texture on the floors. So much for water. But pretty soon things evolved to a transparent water surface quad, with a moving wave texture rolling on it. You can laugh about it, but we have to start somewhere. Plus some hardware can't do much better anyway (The Wii? Just joking). Well, how do we do this?&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;- Make a quad(or a grid of quads) -&gt; the water surface&lt;br /&gt;- Apply a seamless (mipmapped) texture that "rolls" over the surface. &lt;br /&gt;  You can do this by  accumulating the UV coordinates (glTexcoord2f( x+time, y+time )&lt;br /&gt;- Disable specular and diffuse lighting before rendering. Don’t apply light, or &lt;br /&gt;  an ambient color only.&lt;br /&gt;- Make it half transparent (glColor4f( rgb, transparency)&lt;br /&gt;- Let it blend. Don’t forget to disable these settings after rendering the water btw!&lt;br /&gt;     glEnable( GL_BLEND );&lt;br /&gt;     glEnable( GL_ALPHA_TEST );&lt;br /&gt;     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);&lt;br /&gt;&lt;/blockquote&gt; &lt;br /&gt;Done. You can't get it much simpler than that. But at least most players will understand they are dealing with water here. How about some more effects dude? Sure.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Multi Texturing &amp; Caustics&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------------------------&lt;br /&gt;Apply the wave texture twice, using multi-texturing. Let the second texture scale and move in a different direction. Eventually use a different (wave) texture. &lt;br /&gt;&lt;a href="http://www.opengl.org/resources/code/samples/sig99/advanced99/notes/node60.html"&gt;http://www.opengl.org/resources/code/samples/sig99/advanced99/notes/node60.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hey… if you can draw a second(or third, or fourth) texture on that water-plane… Then it’s also possible to draw a “caustics” texture onto the walls/floors/ceilings nearby the water-surface right? Sure, you can use the very same wave texture, grayscale it, and render it on top with additive blending modus. Man, you can even render it on the objects / characters that wade through the water.&lt;br /&gt;   &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Underwater fog&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------------------------&lt;br /&gt;You can cut your world in 2 halfs: everything below and above the water surface. Everything rendered below the surface can use a much thicker fog value. This effect will make deeper or distant underwater polygons fade out in a basic color. &lt;br /&gt;Use dark blue for an ocean, or brown for a muddy canal. If you want to do it really good, you'll need to use "height-fog". This is not a standard OpenGL feature, and requires a shader though, but a very simple one :)&lt;br /&gt;&lt;br /&gt;Or instead of using traditional fog, you can simply decide the fog value based on the height of a vertex(or pixel, if you can use shaders).&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; fog = min( 1.0f, (watersurface.y - pixel.y) * thicknessFactor );&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;This would be a crude pixel-shader formula. If you can't use pixel-shaders, you can still do it per vertex. For each vertex you render, use glColor3f( fogRGB );, where fogRGB is computed based on the vertex height. However, this won't work very well if you have relative large polygons though. If you wonder in which order you should render things now: &lt;br /&gt;1.- Stuff underwater with fat fog. &lt;br /&gt;2.- Stuff above water with normal fog&lt;br /&gt;3.- (Transparent) waterplane&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-odIsWChvJS8/Tdw9LKX2AXI/AAAAAAAAAcI/H5w67oF-MFI/s1600/WaterPool_Brown1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 281px;" src="http://1.bp.blogspot.com/-odIsWChvJS8/Tdw9LKX2AXI/AAAAAAAAAcI/H5w67oF-MFI/s400/WaterPool_Brown1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5610426497769013618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;pic&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Here the Swimming Pool map anno 2011. I only had a few textures to decorate it, and no other contents. But here some first water effects nevertheless. The brownish look is simply (height) fog. The deeper the pixel, the darker. I didn't make caustics yet by the way...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Waves (&amp; LOD)&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------------------------&lt;br /&gt;A single flat quad can’t make 3D wave shapes of course. Split your quad up in multiple smaller quads ("subdivide"). When rendering the water surface, you'll calculate the height(Y) coordinate for each vertex based on a wave formula. Now this can be damn tricky! I have zero experience with wave formula's, but I suspect it's a mixture of lot's of sines &amp; factors. So let's keep the code simple, you can go figure out that formula yourself :)&lt;br /&gt;&lt;pre name="code" class="brush: delphi"&gt;&lt;br /&gt;  function wave(x,y:single) : single;&lt;br /&gt;  begin&lt;br /&gt;        // Very simple wave function...&lt;br /&gt;        // _elapsedTime just increases with the deltatime every cycle&lt;br /&gt;        result := cos(x + _elapsedTime) + sin(y + _elapsedTime*4) * 0.2;&lt;br /&gt;  end;&lt;br /&gt;  ...&lt;br /&gt;  For y:=0 to 100 do begin&lt;br /&gt;      glBegin( GL_QUAD_STRIP );  // Render horizontal rows of 1x1 meter quads&lt;br /&gt;          // Render the first 2 vertices on the left side&lt;br /&gt;          vertex1 := vec3(0, wave(0,y+0) , y+0);&lt;br /&gt;          vertex2 := vec3(0, wave(0,y+1) , y+1);&lt;br /&gt;          glTexcoord2f( 0 * uvScale, (y+0)*uvScale ); glVertex3fv( @vertex1 );&lt;br /&gt;          glTexcoord2f( 0 * uvScale, (y+1)*uvScale ); glVertex3fv( @vertex2 );&lt;br /&gt;          for x:=0 to 5 do begin&lt;br /&gt;             vertex1 := AffineVectorMake(x, wave(x,y+0) ,y+0);&lt;br /&gt;             vertex2 := AffineVectorMake(x, wave(x,y+1) ,y+1);&lt;br /&gt;             glTexcoord2f( x*uvScale, (y+0)*uvScale ); glVertex3fv(@vertex1 );&lt;br /&gt;             glTexcoord2f( x*uvScale, (y+1)*uvScale ); glVertex3fv(@vertex2 );&lt;br /&gt;             // Eventually calculate the normals here as well,&lt;br /&gt;          end; // for x&lt;br /&gt;      glEnd;&lt;br /&gt;  end; // for y&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;LOD (Level of Detail)&lt;br /&gt;Wait a minute. I end up with a few billion vertices if I want to make waves on a 10x10 km water surface! So, decrease the detail for distant quads. If you look over an ocean, do you see any waves at the horizon? Unless you have a monster tsunami, you won't. Simple, because it's way too far to see such details. So neither do we have to render them.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-jlmiiBAg70c/TdxFtSkODLI/AAAAAAAAAcg/kaVoOmXCpag/s1600/heightField_LOD.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 230px;" src="http://2.bp.blogspot.com/-jlmiiBAg70c/TdxFtSkODLI/AAAAAAAAAcg/kaVoOmXCpag/s400/heightField_LOD.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5610435880176979122" /&gt;&lt;/a&gt;&lt;br /&gt;The trick is to make the grid less dense at distances. But how? Again, I never did LOD on heightfields or water-surfaces so I have to apologize. But I might have some ideas though. From the top of my head:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;1- Make a 3x3 initial grid. Around the camera(player)&lt;br /&gt;2- Evaluate all (9) quads you just made&lt;br /&gt;3- If 1 or more points from a quad are inside X meters from  the camera (just check   the distance, simple enough), subdivide the quad:&lt;br /&gt; * don't do any (wave/heightMap) height calculations yet!&lt;br /&gt; * don't think about triangles or OpenGL yet, just manage cells and points&lt;br /&gt;&lt;br /&gt;4- Repeat step 2 &amp; 3, but with a smaller radius around the camera.&lt;br /&gt;   Do this until the radius comes nearby the camera. The more steps you take, the &lt;br /&gt;   more divisions (but also the more work of course).&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;You don't have a 3D mesh yet, just a bunch of quads/points. Now you have to do 3 or 4 things to make soup out of this:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;  - Triangulate the shape (=make triangles)&lt;br /&gt;  - Calculate uv coordinates (interpolate)&lt;br /&gt; u = ((point.x - fieldOffset.x) / totalFieldWidth) * repeatUcount&lt;br /&gt;     or&lt;br /&gt; u = (parentQuad.leftVertex.u + parentQuad.rightVertex.y) / 2  &lt;br /&gt;  - Calculate height ( y = getHeight(xz) or getWave(xz) )&lt;br /&gt;  - Optional, calculate normals (based on your surrounding point coordinates)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Sounds not too difficult, except for the triangulating part. You can keep track in each cell(quad) while dividing. Normally, a cell has 4 points on the corners. When subdividing, a new point will occur in the center, and 4 new cells will be generated. More tricky are cells that have extra points from a divided neighbor cell. See the picture for possible triangulating options.&lt;br /&gt;&lt;br /&gt;LOD is a useful technique for large surfaces such as water with waves or heightMaps (terrains). The implementation above is just my quick thought. You might find better ways on the web.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Specular light&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------------------------&lt;br /&gt;So far we didn't use any lights except an overall ambient color. Which might be a little bit odd of course. If you shine a flashlight on the bathtub, you won't see a nice circle spot caused by diffuse light. But what you do see is reflected light (=specular light). Well, sort off. Don't shoot me if that is not exactly correct, I slept during physics lessons.&lt;br /&gt;&lt;br /&gt;Anyway, as water often comes with a sun or moon in outdoor scenes, you can activate specular light from that specific source. Be careful, you'll need sufficient triangles to do this (or use per-pixel lighting(and thus shaders)). That means you have to sub-divide your water quad. See LOD above. If your triangles are too big, the specular light effect will be chunky as well.&lt;br /&gt;&lt;br /&gt;If you are doing real 3D waves, you will need to calculate correct vertex-normals as well, or your specular light suck.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-neIffoyaJdw/Tdw_UZo8VBI/AAAAAAAAAcY/TY-AW6__POg/s1600/WaterPool1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 283px;" src="http://4.bp.blogspot.com/-neIffoyaJdw/Tdw_UZo8VBI/AAAAAAAAAcY/TY-AW6__POg/s400/WaterPool1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5610428855509341202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Here you can clearly see the effect of specular light. Per-pixel specular with simplified Fresnel that is though.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Miscellaneous&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------------------------&lt;br /&gt;I’ll keep it short. Don’t forget water splashes, underwater bubble sprites or drawing (additive transparent) ripple sprites on top of the surface whenever something falls in the water. There are advanced tricks for this as well, but with some simple sprites and particles you can come quite far already. Don’t underestimate the impact of these effects! You can have a horny Lagune-shader, but the illusion of water will still break in thousand shards when a fat man bombs himself into the water without making a splash.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So, enough for this long post. To be continued. Take two or three weeks to read it, cause I’m going to Poland this Sunday for a little vacation… If that fucking Volcano in Iceland let us go, that is…&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-2284050252922159000?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/2284050252922159000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/05/ou-est-le-swimming-pool-1.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/2284050252922159000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/2284050252922159000'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/05/ou-est-le-swimming-pool-1.html' title='Ou est le swimming pool? #1'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-jLphKvTT16o/Tdw67K_vmFI/AAAAAAAAAb4/vd50a58Vsq8/s72-c/TerminatorJudgementDay.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-6467235483129689257</id><published>2011-05-13T11:36:00.000-07:00</published><updated>2011-05-13T11:49:36.920-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Collada files'/><category scheme='http://www.blogger.com/atom/ns#' term='Stubborn programmer'/><title type='text'>Pina Collada</title><content type='html'>&lt;span style="font-style:italic;"&gt;-Sorry if you see this post twice... Blogger suddenly removed it, so let's post it again-&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Programmers are stubborn. nerdy, pimply, annoying persons. Ok, that might be too much of a stereotype, but stubborn we certainly are. No miracle, because when working with computers there are 7 million different ways leading to Rome. There are no single, simple, comprehensive solutions in computer-land. If someone asks how to implement a small administrative database for the local kebab store, You can’t just point to a single book which has the universal explanation for such a task.&lt;br /&gt; &lt;br /&gt;For a start, what hardware/platform to chose? A MacBook? Unix station, PLC, Microcontroller, Industrial PC, Gameboy Advance? Next step, which programming language do we use? .NET, Java or are we going to print good old IBM Punch cards? Those who read some technical forums, know these discussions are guaranteed for some hot nerd-fights. Hail Linux! Windows 4Eva! Pic16F microchip for real yo. The funny thing is, after choosing your hardware and development platform, you still have nothing; the program has yet to be made. So, unless you need some very specific hardware, stop arguing and just pick the tools you are comfortable with, because it gives the best chance of actually succeeding.&lt;br /&gt;&lt;br /&gt;Then when it comes to programming itself, again we have an infinite amount of strategies. OOP programming? Functional programming? Design patterns, or something very different? Do you use existing frameworks, or do you make your own components? A* pathfinding or Dijkstra pathfinding? OpenGL versus DirectX. XML files or binary files. Sigh.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-X93lPbcjkeM/Tc17KwZZU3I/AAAAAAAAAbg/05FzqdD70HE/s1600/RadarRender10002.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 273px;" src="http://4.bp.blogspot.com/-X93lPbcjkeM/Tc17KwZZU3I/AAAAAAAAAbg/05FzqdD70HE/s400/RadarRender10002.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5606272535866463090" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Off topic. The Radar Station test-map in progress. This map will be a playground for the Object Editor. Plenty of stairs to torture ragdolls. This is a not an Engine render by the way.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Honestly I never really readed books about programming (except some Delphi beginner books a LONG time ago), and developed my own "style" throughout the years. A mixture of Karate, Jujitsu, and Turkish oil wrestling. And I guess that's how most programmers do it, more or less. Following advises from the books or not, at some point we'll have to decide whether to go left or right. And after X years you have a portfolio filled with a couple of languages, hardware, platforms and techniques you'd prefer. Which hopefully gives you a nose for things.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And that's how we become stubborn. Because with so many other techniques out there, we have to defend our chosen methods continuously. If some Cobol fanboy touches Delphi, he touches me. C'mon, you and me, after schooltime! Nah, but if you can't convince yourself walking the right path, you'll be lost in no time. It's not there are just one or two other alternatives you can try.... There are one or two THOUSAND alternatives to try, and each takes days, weeks or even years to master. It's just too much. You can ask around on the forums for some guidance (C++ or Java, OpenGL or DirectX?), but in the end you'll have to throw up a coin, or follow your heart. And don't forget that these forum guys, also the experts, are biased just as well. John Carmack’s advise will probably be very different from Tim Sweeney.&lt;br /&gt;&lt;br /&gt;And of course, you'll be making wrong decisions now and then. Linux sucks after all ( :) ), Windows can't run 24/7 without a crash, OpenGL may become obsolete, DX doesn't run on your target platform, C++ was too difficult, Java too slow, Delphi not 64 bit. Whatever. But don't worry, making faults is a crucial part of the learning process. You can’t become a boxer without ever getting punched on the nose. Nevertheless... it hurts to discard a technique you spend many, many hours or even months on. Which is why programmers are even more stubborn than the average Joe. Don't admit your faults and fight till the very last man. Americans in Bagdad? Where? Russians in Berlin? We'll show them. Now you know why programmers have entrenched habits, and are deaf to criticism sometimes :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You may have read the title, "Collada", and now you think "What the hell has a tropical drink / file format to do with the personal problems of a programmer?". Well, as said, Collada is a file format. For 3D related stuff to be more precise. These files can contain geometry data, materials, physical properties of a mesh, scene setup and animations I believe. Right, so we have 3DS, OBJ, LWO, MS3D, X and a few billion other 3D file formats. What format to chose?! Arh, another decision to make. And yes, it does matter what you pick. Some formats are more mature than others. And more important, you'll be telling which tools to use. If you make an *.MS3D (Milkshape) file importer, your modelers will need Milkshape or at least a (good working) exporter plug-in in their software. Unfortunately, plug-ins often include errors (outdated), and tossing around converted models from package to&lt;br /&gt;package requires extra (annoying) time and is prone to mistakes.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-rynxypDK4ak/Tc19C-YtCSI/AAAAAAAAAbw/NDTBDUB5CxI/s1600/ControlBox_Components.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 329px;" src="http://4.bp.blogspot.com/-rynxypDK4ak/Tc19C-YtCSI/AAAAAAAAAbw/NDTBDUB5CxI/s400/ControlBox_Components.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5606274601205958946" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;A (love) letter to Julio who made this model. The trick is to put as much as info as possible in a model. Engine22 objects aren't just meshes with a texture. It also contains physical info (collision shapes &amp; hitzones), Level of Detail variants so we can use a lower-resolution mesh for distant rendering, attachments such as lamps or particle generators. And eventually sub-objects that are connected with physical joints such as a door hinge.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is why Collada was made; an attempt to create an universal, simple, all-round file format that will be supported by all 3D packages. Now I'm not sure if they actually accomplished that goal, but at least Blender and 3DS Max support this format, and newer version of Lightwave as well I believe. Yet, I made a Lightwave (LWO) importer ~6 years ago. A logical decision, since I used Lightwave. But from all formats, the LWO is one tough son of a bitch. And at this point, I'm forcing my fellow helpers (who use Blender and Max) to either find a LWO exporter, or we mess around with the OBJ format. Max to OBJ, to LWO, to Tower22. Bleh.&lt;br /&gt;&lt;br /&gt;Wouldn't it be smarter to write a Collada importer then? Maybe, but this is where my stubborn, defensive programmer instinct comes around the corner again:&lt;br /&gt;..A: I spend many f#cking hours in thet LWO importer, it finally works now :(&lt;br /&gt;..B: Collada, pfff, don't let me laugh.&lt;br /&gt;&lt;br /&gt;For one thing, I just don't like the name "Collada". It sounds like a tropical alcohol free drink or a kids icecream you buy on vacation. But what struck me more was the XML format. Yes, Collada files are just XML files. Which mean you can actually open the file as a text, or view it as a tree structure in any internet browser. I’m more a binary-format man. Never followed the Extensible Markup Language(XML) hype. Text formats… pfff. 50% of those files is overhead you don't need. Instead of just loading array's of data, you'll be "parsing" a whole pile of shit before you finally found something useful. It takes time, extra storage space, extra code to “understand” the file… No sir, I'm no fan of XML. And therefore neither of that Icecream format.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Fair enough? Maybe not. Just because I don't like it, doesn't mean it's rubbish. But it's just the way how my programming career got raised, people are afraid for changes, forgive me. Fact is that XML is used in many applications. Fact is also that Pina Collada is used in several 3D packages, at least more than my beloved Lightwave LWO format. Live with it. So, after many years, I finally decided to take a look at it... And with the Delphi &lt;a href="http://www.destructor.de/xmlparser/745"&gt;TLibXMLparser &lt;/a&gt; it took me 6 whole hours to make a (basic) Collada importer for the Object Editor. The LWO format took me 6 light(wave)years...&lt;br /&gt;&lt;br /&gt;Ok, ok, I've done this so many times that I can write file importers while sitting on the toilet, reading a Chuck Norris article. But I'll confess: I was wrong. I can hardly get it out my hands on the keyboard, but here you go: Boys and girls, if you need to pick a fileformat for an environment with a variety of 3D software packages, Collada is a good choice, and programming your own importer isn't so hard, certainly not if you can find a nice XML reader. Happy now?&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/--lrfr0ZGIJA/Tc17zL8Z8_I/AAAAAAAAAbo/ueHlPgFF8wA/s1600/RadarRender10004.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 273px;" src="http://1.bp.blogspot.com/--lrfr0ZGIJA/Tc17zL8Z8_I/AAAAAAAAAbo/ueHlPgFF8wA/s400/RadarRender10004.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5606273230455829490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;There will be water and ice here. Gives a nice chance to play with water shaders and low-friction. You know what... I might just make a tech-movie once this map is up and running...&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-6467235483129689257?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/6467235483129689257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/05/pina-collada.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/6467235483129689257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/6467235483129689257'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/05/pina-collada.html' title='Pina Collada'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-X93lPbcjkeM/Tc17KwZZU3I/AAAAAAAAAbg/05FzqdD70HE/s72-c/RadarRender10002.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-287533339752552425</id><published>2011-05-02T14:10:00.000-07:00</published><updated>2011-05-02T15:40:42.376-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tower22 Object Editor'/><category scheme='http://www.blogger.com/atom/ns#' term='Osama'/><title type='text'>Smoke them out</title><content type='html'>Bin Laden dead? C'mon, put your AK-47’s in the air, scream it out on the streets, and do a victory dance. Ok enough silliness, let's just return to work.  Osama dead eeyh... Now what? Asides from Gadaffi, and Kim Yong Pangang Il Turbo, there are no charismatic badguys at the moment. And... is the dead of Osama a symbolic thing, or will it really change the world? Unlike Hitler who was the "end-boss" of the WOII game, Al-Qaeda and the likes are usually independent cells. Osama was/is more like an inspirator, a motivator, a pop idol. Dead or alive.&lt;br /&gt;&lt;br /&gt;I guess panic for terrorism is still there, and the real hardcore terrorist probably  knows how to hate &amp; how to detonate a bomb, even without uncle Bins. Anyway, if this Osama person really did what we he did (I know, there a lot of theories about him), he deserves to be dead. Not just for 9/11 and putting the Western and Islamic world into  a dirty cagefight. Also for terrorizing Afghan people by using religion as an excuse for the 8th century barbaric Taliban ideology. Downgrading women to R2D2 service robots and forbidding kiting for kids. So... have a nice time in heaven with 72 lovely virgin piglets.&lt;br /&gt;&lt;br /&gt;Or... maybe he got his paycheck, shaved his beard, shaked hands with the Navy Seals, and drove off in his Ferrari with a smile after ~25 years of outstanding acting work. It would fit in the complot theories. Who shall say. The story that his body has been dumped in the sea right after he was killed is odd, the least to say. Out of respect for Islamic rules that state Muslims have to be buried within 24 hours. Could be me, but I never saw soldiers cleaning up body pieces of Taliban that have been hit with a .50 in the desert. The meanest of them all, the uber-bombastic terror maestro, would get a fancy sea burial (is that allowed for Muslims anyway?). Out of respect… yeah right. With all those complot theories about 9/11 being an inside job, you would expect the Americans to show Bin Laden’s last minutes in full HD to prove the contrary. Or even better, catch him alive and “bring him to justice” like they did with Saddam. I hate complot theories, but this story smells a bit... like an old wet beard.&lt;br /&gt;&lt;br /&gt;Sorry, I just don't trust politicians that much. Well, hopefully things will get explained soon. I think the world owes that, after 10 years of war and getting my underpants frisked at the airport. But assuming they really got him, it has to be said that the Americans kept their word.  You can say all kinds of things about them, but not that they don't have the balls to accomplish big things. Other than we Dutchmen(&amp; European in general) who prefer to criticize from the sidelines (like I just did now). Hey, guys like Osama don’t get smoked out just by talking you know. Talking about mysterious deaths, where the hell is Hitlers body?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------------------&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-7Q8bgFAwGg4/Tb8uGw1UO2I/AAAAAAAAAa4/9l7LJLWUA58/s1600/TechScene.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 272px;" src="http://1.bp.blogspot.com/-7Q8bgFAwGg4/Tb8uGw1UO2I/AAAAAAAAAa4/9l7LJLWUA58/s320/TechScene.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5602247155194805090" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Here, an old pic rendered by the great grandpa of our current engine, at times Saddam Hussain was still alive! This engine used Lightmaps btw, and a very special "pee shader" for that orange tube. Hey, got to show something.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ok, how's Tower22 going? No new pics lately huh? True. But cheer up, plenty of things are being done. It's just that I'm not busy with any graphical programming tasks at the moment. In fact, the game doesn't even start at the moment as I'm doing all kinds of upgrades. And one update on X initiates two other updates on YZ. And before you know it, the whole source-code is turned inside out for the 600th time. I know, leaving your game “un-executable” for too long can be a critical point in the design traject. It's like stop cooling the Fukushima core for too long. But the planning is to have it back online within a month. With:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;- FMOD Sound DLL&lt;br /&gt;- Input DLL&lt;br /&gt;- Newton2 Physics DLL&lt;br /&gt;- A new Entity system (the stuff I wrote about in the "Puppeteer" posts)&lt;br /&gt;- Several new features in the engine like trigger volumes or moveable platforms like elevators.&lt;br /&gt;- A new Object Editor&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Initially I was only implementing those custom DLL's to control the behavior of objects. But while doing so, you walk into all kinds of outdated stuff that had to be upgraded sooner or later anyway. Physics too old. Object Editor messy. Animation system sucks. Blablabla. So before you know it, you have a whole dozen of tasks.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;One of the more “catchy” upgrades at the moment might be the Object Editor. To clarify, an object in T22 is a 3D mesh that can be duplicated and placed everywhere. Like furniture, decorations, barrels or other junk. Objects usually make use of physics, can be destroyed sometimes, or can be picked up for usage. More advanced types of objects are the animated ones, or the "thinking" one (which simply make use of a more advanced DLL/script to control them).&lt;br /&gt;&lt;br /&gt;These objects have to be made somehow, starting with a 3D mesh. All those raw Lightwave, Max, Blender or whatever program meshes &amp; animations have to be imported into the game somehow. So far the Engine22 Editor already had tools for that, but a little bit outdated. So, since we are driving the touristic route already, a few more or less miles don't matter anyway. It would be a nice chance to update some of the object aspects, like synchronizing it's collision volumes with a ragdoll (or vice-versa), adding Inverse Kinematics, using those AI / behavior DLL's, ...uh … pretty much everything.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-pvsvrouDe58/Tb8sOO39UOI/AAAAAAAAAaw/s7Rx7aNZ7SA/s1600/ObjectEditor.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 271px;" src="http://3.bp.blogspot.com/-pvsvrouDe58/Tb8sOO39UOI/AAAAAAAAAaw/s7Rx7aNZ7SA/s400/ObjectEditor.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5602245084494778594" /&gt;&lt;/a&gt;&lt;br /&gt;Another good reason to make some work of it, is because my fellow modelers still need a tool to see/test their own work. I can promise all kind of things, but seeing is believing. So far I could only send them screenshots of their productions after being imported into the game. Nice vacation pictures, but a real modeler wants to play around and tweak his work inside a real game environment of course. I could send them the Map Editor which has been used for everything so far, but it's too huge and buggy to share yet. Programming experience tells not to release your products to the public until a monkey can use it. Giving half-baked crap to your clients/users will give them a wrong impression and distrust of the product.&lt;br /&gt;&lt;br /&gt;Then again, I can't let them wait forever. So, I'll focus my Super Sayan level 2 energy on releasing a stand-alone object editor first. But it makes use of the same engine modules, so it should come with two extremely nice features:&lt;br /&gt;-  Physics testing (throw around your object through a room)&lt;br /&gt;-  Full-shaded graphics. What you see is what you get&lt;br /&gt;&lt;br /&gt;So it's not just an editor which allows to import some meshes, and tweak a script. It should also be able to play with your object in a test-map that actually uses the same graphics as the real game. Sure, it takes some energy to produce such a thing. But if I get happy modelers as a return, it will be worth it. Really, don't underestimate the effect of feedback. A modeler, mapper, sound engineer or whatever kind of member should be able to see, hear, play, read or experience his work back into "the product", otherwise the motivation to keep producing may drop to zero at some point. So before inviting all kinds of people on your project, make sure they can get the right tools to work with, and give them some options to see their work in action. All work and no play makes Jack a dull boy.&lt;br /&gt;&lt;br /&gt;For the same reason I’m a little bit quite last months. I guess most people who visit here just want to see pictures. But sorry, all the programming hours went into upgrading lot's of boring code modules and editors. And playing "Tower Defense" plus staring at the screen :). Well hopefully I can place some nice pictures of a test-map being used for that object editor soon! Since it should have a pool to test buoyancy graphics, I might just as well program some water-shaders as well...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-TgdzNV5BvPk/Tb8vOQLNZ0I/AAAAAAAAAbA/TKbpfqm8ytI/s1600/pool4.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 139px;" src="http://4.bp.blogspot.com/-TgdzNV5BvPk/Tb8vOQLNZ0I/AAAAAAAAAbA/TKbpfqm8ytI/s320/pool4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5602248383378843458" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Here, another prehistoric render. That was one of my last water-shaders, time for a boost! Oh, people who live in Oudenbosch, you may recognize that pool :)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-287533339752552425?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/287533339752552425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/05/smoke-them-out.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/287533339752552425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/287533339752552425'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/05/smoke-them-out.html' title='Smoke them out'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-7Q8bgFAwGg4/Tb8uGw1UO2I/AAAAAAAAAa4/9l7LJLWUA58/s72-c/TechScene.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-7932790183206876245</id><published>2011-04-18T14:56:00.001-07:00</published><updated>2011-04-18T15:06:07.837-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Story fragment #2'/><title type='text'>A long time ago #2</title><content type='html'>Excuses for the somewhat lacking amount of posts last weeks… months. The reason is not that we’re doing nothing anymore. But there is simply no visual eye-candy at the moment! Busy with upgrading physics and that entity system at the moment. So I could show you some dull movies of tumbling boxes, buoyancy physics with still some errors, or Micheal Jackson ragdolls that get an epileptic attack (don’t worry, doctor Sascha Willems is on it). But then I could better refer to some REAL physics for now:&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=qMAaza_rrxQ"&gt;http://www.youtube.com/watch?v=qMAaza_rrxQ&lt;/a&gt;&lt;br /&gt;1:33 is even more badass than Charlie Sheen. If I ever make a RTS game, that’s how the physics should look. 2:32 reminds me of squeezing pimples BTW.&lt;br /&gt;&lt;br /&gt;Anyway, instead of pictures, I might interest you with some more story bits… Morgan Freeman, up to you.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;============================================================================&lt;br /&gt;Story fragment #2&lt;br /&gt;============================================================================&lt;br /&gt;" &lt;br /&gt;For some reason, I can't recall how this flat -number '22'- looks from the outside. It feels as I've been working here all my life really... But judging from the interior, my guess is that the building looks pretty much the same as the other gray concrete monsters around here, except that it's a lot taller. Don't know the exact height, neither when this block was built. Probably somewhere in the late fifties. Although some parts here look a lot older already. But that just might be deferred maintenance as well.&lt;br /&gt;&lt;br /&gt;Just like other buildings, it has a few elevators, a stairhouse, and endless corridors. Dark, old, corridors with countless doors. Closed, unnumbered anonymous doors, telling nothing about who might live there. The wallpaper and paintwork can be peeled off just by looking at it. Bugs found their way in the little holes and gaps. Some ceilings were left unfinished, revealing the rusty beating pipes and electric wires above them. Not uncommon either, the building has a couple of shared facilities here and there. Such as a laundry, or showers and toilets for the apartments that aren't connected to the water.&lt;br /&gt;&lt;br /&gt;The same goes for the apartment interiors. We all share the same collections of furniture, thin mattress beds and kitchen sets. Some bright plastic utilities, flower curtains and small cheap decorations to add a little bit happiness to the otherwise depressing, pre-fabricated rooms. The apartments just do what they have to do: provide shelter and warmth for the cold winters.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Though I must say there are some impressive halls and wall paintings scattered around the building. Ones you would find in a church, or stately building. Who would have made them? I can't imagine they were part of the original design for a building like this.&lt;br /&gt;&lt;br /&gt;When thinking about it, I noticed more and more uncommon details. For one thing, many of the windows are barricaded or just not there. It's hard to get a glimpse on the world outside here. Another thing that strikes me is the unusual floor lay-out. You would expect the elevators, central stairs and main corridors to connect all the apartments in a logical manner. But from what I have seen so far, not a single floor looked the same. Elevators aren't working or only bring you at a few locations. Stairs just stop at some point, and the hallways are mangled like a maze. Clearly the architect didn't follow his study here, where simplicity and efficiency are basic construction fundaments.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;My work brings me at places where a normal person wouldn't or shouldn't come. Such as maintenance area's or ducts. With such 'privileges', one would think I could dream this building by now. But I feel there is a whole other world behind the locked doors, service ladders and twisted hidden shafts. In fact, in combination with the absence of anything alive except the crawling bugs so far, I'm feeling... claustrophobic. Scared actually.&lt;br /&gt;&lt;br /&gt;I asked for a map, a layout of the building. But apparently, there is none. Again the Boss didn't really answer my request. Just a vague reply. Words like "The doors will lead your way, or block your way where you are not supposed to come.". Guess I'll have to make a map and notes myself on a piece of paper. Before I get lost some day.&lt;br /&gt;"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-7932790183206876245?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/7932790183206876245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/04/long-time-ago-2.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/7932790183206876245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/7932790183206876245'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/04/long-time-ago-2.html' title='A long time ago #2'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-424610560270096124</id><published>2011-04-04T15:02:00.000-07:00</published><updated>2011-04-04T23:37:54.909-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Entity DLL&apos;s for specific game logic / behavior'/><title type='text'>Puppeteer Part #2</title><content type='html'>Nice. Our cry for someone who can solve E=MC^2 formula's has been answered by Sascha Willems. If you think, "Hey, I heard of that name", then you are right. He is a moderator on the Newton forums, made Delphi headers to use the DLL’s, and part of the Newton development team. So... guess I can't get much closer to the source! Well, I just wrote a document with 100 and one Physics questions he can hopefully answer. I guess some of the questions + answers can help other Newton users as well, so I was thinking about publishing that document once it got answered.Either how, this subject will surely return a couple of times on this Blog.&lt;br /&gt;&lt;a href="http://www.saschawillems.de"&gt;www.saschawillems.de&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Another little detail I forgot to mention is the (prototype) logo on top of this Blog. Just a little present from a good friend who has his own business in logo &amp; design since a while:&lt;br /&gt;&lt;a href="http://www.pixelridder.nl/"&gt;www.pixelridder.nl&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Last but not least, in case you missed, we gave our engine a name…. Engine22. Not as brilliant as “Source”, but yet I like its simplicity. It doesn’t change the quality of the game, or how Earth orbits around the Sun, but it’s nice to call the beast with a name.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-JbCMoB-ofBQ/TZpBDRi-8wI/AAAAAAAAAaI/TmXxMIms66s/s1600/T22_EntranceSketch.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 316px; height: 320px;" src="http://4.bp.blogspot.com/-JbCMoB-ofBQ/TZpBDRi-8wI/AAAAAAAAAaI/TmXxMIms66s/s320/T22_EntranceSketch.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5591853411839439618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Off topic. Quick drawing by Jesse. Nitpickers as we are, sketches should help the modelers with details like these, rather than just go ahead and poop some polygons. Atmosphere is key baby, so every stupid wooden panel is handmade craftwork. The expected release date for Tower22 is May 2086 BFSM (Before Flying Spaghetti Monster) by the way&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Back to the “input &amp; output” story then. Previous time in The Bold &amp; The Beautiful, we made an Input module. To register keypresses, mouse motion, sweat sensors and lightsaber velocity. Yeah, with some hardware knowledge you can do whatever you want there. Measure the player heartbeat, use the room temperature, make your own exotic joysticks, Duckhunt Zappers, dumbbell sensors for your own Dolph Lundgren fitness game, install a Boeing cockpit in your room and so on. The Input module abstracts the physical input to a listing of common controls that can be used in most types of games. And otherwise it's easy to extend.&lt;br /&gt;&lt;br /&gt;But the real question is, what to do with it? Unlike earlier (messier) engine attempts, I made a strict difference between Input and Output this time. The Input module isn't aware at all of the game status. It doesn't know if you are controlling a HUD menu, Haiku Robot, or Lara Croft. Neither does it know which buttons are allowed or not. It just registers input, that's it. What to do with it completely depends on "the others"... whatever that is.&lt;br /&gt;&lt;br /&gt;Sounds pretty simple, but there is a catch. Where exactly do we code the output? Didn't I say to keep game/entity specific actions apart from the core-engine? You don't have to follow my advice, but personally I don't want to litter Engine22(yeah) entity system with stuff like &lt;br /&gt;&lt;span style="font-style:italic;"&gt;- "player spawns 20 blood decals on bullet hit"&lt;br /&gt;- "tanks accelerates forward when FORWARD is pressed" &lt;br /&gt;- "Goku charges up powerlevel to a maximum of 45.000 while bashing the ACTION2 button"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You could try to make a super-entity that can do everything in the world, but that is asking for failure. Abstracting everything makes hard-to-understand and/or lacking code that just doesn’t do what you really want. Instead, like you do in small specific industrial applications, focus on the specific task. More effective, faster, less error-prone, and especially more fun. Finally you feel like you are programming an actual game!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-NSW9DJRd934/TZpJ_IaPQwI/AAAAAAAAAag/nsT8z-nzcm8/s1600/CarpetShot4.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/-NSW9DJRd934/TZpJ_IaPQwI/AAAAAAAAAag/nsT8z-nzcm8/s320/CarpetShot4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5591863236272014082" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;To break up this large piece of text, just some relaxing carpet. A dull screenshot indeed, but carpetting the building has to be done as well. It should be somewhat more spectacular as soon as the carpet layer makes some holes and throws around carpet-tiles...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Right, that means we have to move the specific "game-logic" elsewhere. I'm not 100% done with the design, but I have some ideas... Half a year ago I mentioned Python scripts already. In short, when the engine detects a certain event such as &lt;span style="font-weight:bold;"&gt;onBulletHit&lt;/span&gt;(), &lt;span style="font-weight:bold;"&gt;onUse&lt;/span&gt;() or &lt;span style="font-weight:bold;"&gt;onSectorLeave&lt;/span&gt;(), it can call a Python script for the specific execution. Each entity (a barrel, player, monster, shotgun, …) can have its own script. Since Python scripts are external files, you can do whatever you want here. And also adjust whenever you want without needing Delphi, MS Visual Studio or other tools. Python scripts compile at run time, so you don't have to rebuild the Game project when you just added a "player health = 9999" cheat in the player script. That also means you can screw up the game any time you want :D&lt;br /&gt;&lt;br /&gt;This is effective, but it still has some downsides. So far I used Python scripts for rather simple tasks that are only executed when X happens, not every cycle. Updating complex tasks like physics, controls, animations, AI and pathfinding each cycle (more than 30 times per second) might be too much. I have no idea how slow or fast Python really is, but it IS slower than normal compiled code. That's for sure. Maybe updating one entity isn't much of a problem, but how about 10. Or 100? I'm not taking the risk, neither do I buy "&lt;span style="font-style:italic;"&gt;That few milliseconds don't matter as long as it works&lt;/span&gt;". That's a lazy approach sir.&lt;br /&gt;&lt;br /&gt;Asides from speed, Python isn't as flexible than your trusted uncle Delphi. For real complex stuff I still prefer a traditional language (or at least I don't know Python that well). So... what to do now? How about making entity DLL's? &lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;• Each entity can(doesn’t have to) be assigned to a DLL&lt;br /&gt;• DLL does the cyclic update, physics, events, queries from other objects, handling the input, etcetera, etcetera&lt;br /&gt;• DLL gets access to the Engine API so it can call all kinds of things (render something, apply force, get another entity, play sound, and so on).&lt;br /&gt;• Most “simple” objects like a stupid box or chair can all do with the same DLL. So don’t worry, you won’t end-up with thousands of little programs.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Instead of letting the engine fool around with lots of specific actions, let the DLL do it. Yeah, even maintaining a simple "health" value can be different for each entity. Some are immortal, some are sensitive for headshots, others bounce back bullets, others explode when they got hit, etcetera. So, remove "health" and all the possible effects from the core-engine, and let the DLL (or script) do the job call.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-3cyTuKQXMHc/TZpGuvw0YmI/AAAAAAAAAaQ/Y9obTTLMk7E/s1600/Engine22.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 353px;" src="http://3.bp.blogspot.com/-3cyTuKQXMHc/TZpGuvw0YmI/AAAAAAAAAaQ/Y9obTTLMk7E/s400/Engine22.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5591859656243044962" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;The Engine is doing less and less… specific action is moved to the surrounding units, making the Engine more like a “manager”. All rendering functionality is (still) inside though. Even though we could move that to an external unit as well of course.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Engine22 only does what all entities should do when getting updated, hit, spawned, or whatever event there is. The DLL and/or Script tell the specific output by using the API delivered by the engine. API? Yeah, Application Programming Interface. Engine22 has a large list of varying functions that can be called by Python scripts. And also by DLL's now.&lt;br /&gt;&lt;br /&gt;In Delphi terms, we just pass an "Interface" type towards the DLL when it asks for it. This interface is just one big listing of method pointers, towards the engine. You don't have to do it that way of course, but it looks nice. Either how, we can call those functions whenever we like. The beauty is that you can drop the choking "keep it universal" way of thinking once you are in your DLL. Sure, using some frameworks helps, but basically you can code whatever you want here. Ah.... it almost feels as good as when I began with programming games 10 years ago. No worries.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-5YxtZnE7NbE/TZq4qOzXOWI/AAAAAAAAAao/YwN0VLW4V3k/s1600/Engine22_API.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 286px;" src="http://4.bp.blogspot.com/-5YxtZnE7NbE/TZq4qOzXOWI/AAAAAAAAAao/YwN0VLW4V3k/s400/Engine22_API.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5591984923001436514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Some of the DLL &amp; API functions...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Next time, in the last part, I’ll give some example code to illustrate some common game mechanics. In the meanwhile, eat your vegetables!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-424610560270096124?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/424610560270096124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/04/puppeteer-part-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/424610560270096124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/424610560270096124'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/04/puppeteer-part-2.html' title='Puppeteer Part #2'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-JbCMoB-ofBQ/TZpBDRi-8wI/AAAAAAAAAaI/TmXxMIms66s/s72-c/T22_EntranceSketch.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-110133013572154085</id><published>2011-03-31T03:19:00.000-07:00</published><updated>2011-03-31T03:29:32.037-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Physics (Newton) help needed'/><title type='text'>Could the real Isaac Newton please stand up?</title><content type='html'>HEY! Do you happen to be a programmer with good experience in:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; - Newton(2) Physics library (you made some advanced projects with it)&lt;br /&gt; - Inverse Kinematics &amp; Skeleton Animations&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Ifso, I need some good advice. Sooner or later this year I need to update the physics part. Although I know how to use Newton 1 a little bit, I won't call myself Isaac. So before doing stupid things... &lt;br /&gt;&lt;br /&gt;It's not really a programming job offer (but who knows), more like a request to have 1 or 2 experienced people on my side to mail with to dry my tears when the computer said mean words again. To give an idea of what needs to be done:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; - Player movement (including @#$ stair climbing)&lt;br /&gt; - Inverse kinematics (feet, hands, snakelike monsters)&lt;br /&gt; - Combine Physics &amp; Animation &amp; IK&lt;br /&gt; - Physics: proper behavior of all objects (now they react "unnatural" on collisions)&lt;br /&gt; - Joints (swinging lamps, chains, doors, ...)&lt;br /&gt; - Advanced raycasting for sensoring the environment&lt;br /&gt; - Trigger volumes (player inside a water mesh?)&lt;br /&gt; - Buoyancy&lt;br /&gt; - Material feedback (on what kind of floor am I walking,&lt;br /&gt;   what type of material did I just shot?)&lt;br /&gt; - Hitzones (headshot, hit his balls)&lt;br /&gt; - Collision sounds (hit, scrape, roll, bang, snap, crack)&lt;br /&gt; - Destroy stuff&lt;br /&gt; - Ragdolls&lt;br /&gt; - Multithreading optimizations advise?&lt;br /&gt; - Pour in the engine or a wrapper DLL to simplify&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;I tried to ask on the Newton forums several times, but let's say my answers often don't get answered there. So, I prefer a personal coach;) On top, Newton 2 has quite some nice new functions, but I'm totally new to them. And last but not least, I’m stupid so please only react if you are patient enough to explain things to a 3-year old. Oh, and it is on voluntary basis of course.&lt;br /&gt;&lt;br /&gt;Sounds like fun to have an advisor role? Then feel free to contact me (see "contact" link on the right). Ciao.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-AFdcJGynido/TZRXCTiV4nI/AAAAAAAAAaA/x_d3rizTU44/s1600/albert-einstein.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 246px; height: 320px;" src="http://1.bp.blogspot.com/-AFdcJGynido/TZRXCTiV4nI/AAAAAAAAAaA/x_d3rizTU44/s320/albert-einstein.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5590188734589297266" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-110133013572154085?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/110133013572154085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/03/could-real-isaac-newton-please-stand-up.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/110133013572154085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/110133013572154085'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/03/could-real-isaac-newton-please-stand-up.html' title='Could the real Isaac Newton please stand up?'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-AFdcJGynido/TZRXCTiV4nI/AAAAAAAAAaA/x_d3rizTU44/s72-c/albert-einstein.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-1410125799670932415</id><published>2011-03-26T14:46:00.000-07:00</published><updated>2011-03-26T15:48:03.986-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++ language'/><title type='text'>Esperanto++</title><content type='html'>Let's pick a fight :) Not with Gadaffi, but with the C++ camp! NAVO gunships ready? C++ Anti-Aircraft guns ready? Propaganda machines ready?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Are you like me, doing 100 things at the same time for your projects? Yesterday it was ambient lighting, today controls, tomorrow a sound system. Professionally-wise, probably not the best way to get things done. But, since I'm not making this game(engine) on a professional basis anyway, I don't care. As long as it is fun. Motivation is key-factor #1 when it comes to accomplish big things.&lt;br /&gt;&lt;br /&gt;So, one of the tasks is updating the sound module to FMOD. OpenAL is nice (and free), but FMOD comes with free coffee, bonus points, and a cool badge. For example, FMOD has a tool called Designer to make the sound libraries. It supports many formats. It does a lot of memory and sound priority management for you. It is multi-platform. It has 3D reverbs. And especially sweet: you can define 3D geometry for sound occlusion. So, I'm making a DLL wrapper, see pic. More details will come when I'm done implementing it.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-isMVF8XxreE/TY5fK_9K5sI/AAAAAAAAAZo/_UEwA_mYvME/s1600/SoundWrapper.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 178px;" src="http://2.bp.blogspot.com/-isMVF8XxreE/TY5fK_9K5sI/AAAAAAAAAZo/_UEwA_mYvME/s320/SoundWrapper.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5588508830184695490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Engine22? Yeah, we figured a name would be handy. Not the most creative name ever, but I like simple names (Like "Source", brilliant). It doesn't imply to be the best thing since sliced bread. It just does what it's supposed to do: Run Tower22!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Funny detail. Instead of Delphi, I chose C++ to write this wrapper DLL. For two reasons: don't want to make FMOD headers. And B: it's good to refresh the skills once in a while, it has been a while. I use C pretty often for microcontrollers &amp; shaders, but it’s really not the same as C++. The problem of using less popular languages like Delphi, is that you have a limited source of info, downloadable units, examples and forums with helping hands. Then again, I always get reminded why I like Delphi so much when doing C++. First, the old MSVC 6.0 IDE was kind of minimal comparing to the rich Delphi IDE. That changed with MSVC 2005 and higher, which is an excellent environment if I may say so. However, old grumpy C++ himself didn't change a bit of course.&lt;br /&gt;&lt;br /&gt;How to put it... C++ is like rocket science, playing with dangerous Godlike powers, reinventing the wheel every day, talking old traditional Chinese to kids, baking a cake with the CERN, flying a thunderbird VI with Russian instructions, reading the entire Bible every day just for fun, sadomasochism for the advanced, bit tripping, writing pyramid hieroglyphs. &lt;span style="font-style:italic;"&gt;Choosing the path of agony for the Greater Good&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;First there is C. Basic, pure, yet mighty. Kind of cryptic when comparing to more readable languages like VB or Pascal. And of course, pointers don't have remorse for beginners. But you'll love it as soon as your microcontroller is doing a LED disco. You don't need to understand the whole concept of OOP, mastering hundreds of libraries, API's, frameworks or design strategies made up by other people. It's just you and C, blood brothers. Type what you want, and go.&lt;br /&gt;&lt;br /&gt;Then there is C++... The evil little brother of the old friendly giant C. Still pure compared to other languages, not that much different at a first glance, but expanded with OOP in a rather horrible way. Not horrible in a functional sense - it's probably the most powerful language there is - but horrible in terms of user-friendliness. Where other languages tried to simplify things by presenting coding strategies with some human-logic, C++ took the bumpy path. &lt;br /&gt;&lt;br /&gt;The already difficult syntax got even more tricky, and countless of options and boobytraps will make sure the newcomer pees his pants. I wasted hours and days, with vague errors. The compiler doesn't help  you with "look here sir, you can't assign text to a numeric value.". Instead it barks angry C++ compiler messages that require a translator. And once you thought you solved them, the program still doesn't run because of that #@#$! Linker. Things got re-declared, Header files included in a wrong way, strange symbols, whatever.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-Ph0g5F2kneA/TY5lv9e5TzI/AAAAAAAAAZw/ekyrug5SJ6Y/s1600/F2Lobby1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 225px;" src="http://1.bp.blogspot.com/-Ph0g5F2kneA/TY5lv9e5TzI/AAAAAAAAAZw/ekyrug5SJ6Y/s320/F2Lobby1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5588516062245769010" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Off topic. Another room for the next demo in progress. Far from done though, all the interior objects still have to be made, and all the textures have to be replaced with our own work. But ok, previous week it was still a MS Paint drawing.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I know, it's a matter of learning. And still, C++ is the most popular language when it comes to gaming engine. Because of its purity, and thus potential performance (IF, IF you use it right). And probably because "the others do it" as well... ? So, the good news is that there are many forums and helpers on the internet to save the day... However, it strikes me that many C++ programmers are just as user-friendly as their language is. Jesus Christ. While other communities are relative friendly, helpful, and patient, the C++ disciples are strict and edgy. Little Jimmy, 8 years old, from Illinois wrote:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"Dear friends, &lt;br /&gt;why is this not compiling:&lt;br /&gt;.    float factorDiv = 1 * 2 + 3;&lt;br /&gt;.    int  a += b; // &lt;- error&lt;br /&gt;"&lt;/span&gt;&lt;br /&gt;The first answer never try to advise something. It's just: "Is this C or C++?(angry)". "Which compiler are you using?". "I can't solve the problem without seeing the entire code". “read the forum rules.”, or "why are you using factorDiv"? Valid questions maybe, but the undertone is like “get lost boy, we don’t take your kind around here.”. Yes, you should feel stupid.&lt;br /&gt;&lt;br /&gt;It's if those C++ guru's are frustrated by their own difficult language. Pissing about small details, and always in a bad mood. Ok. ok, ok... a little nuance. It's not all that bad of course. I got helped more than once by C++ guru's, in a kind way. And remember, languages don't put spelling or grammar errors on paper, you do. And... it has to be said, some guys just don't know how to ask. How many times I've read something like&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"Hello. having probs wit code blow. could u look @ it plz? I ned quick reply becuz this is&lt;br /&gt;for school tomorow :#&lt;br /&gt;--- 500 lines of (shit)code ---&lt;br /&gt;"&lt;/span&gt;&lt;br /&gt;Yet, while searching the internet when having a Johny Quest error message again, the atmosphere in some C++ forums is just different. This language is the hardest to master, maybe that brings some arrogance to the pro's. But allright, my C++ DLL runs now, and it can be used by a Delphi program. Not without a struggle of course. C(++ whatever) thinks it's a good idea to change the export names of your functions. Even when using declarations like &lt;br /&gt;- &lt;span style="font-style:italic;"&gt;extern "C" __declspec(dllexport) void __stdcall lickMyButt(){}&lt;/span&gt;&lt;br /&gt;the "mangling" still happened. I had to use "dependency walker" (nice little free tool to analyze the exports of a DLL and what other libs it needs) to discover why my Delphi app couldn't find the entry-point. Strange, because another DLL with exact the same declarations DID work. When replacing __stdcall with __cdecl, the problem was gone. Uh... ok. Trying to find a logical explanation - no way.&lt;br /&gt;&lt;br /&gt;Call me a n00b R-Tard amateur, but how come that ALL other languages I know don't have this crazy backstabbing tricks? I know why C++ changes names: so you can overload the functions with different parameters. But why not warning about it, or disable name-decorations and forbid overloading export functions by default? I'm sure the C club has arguments, but fact is that other languages solve this problem with ease. &lt;br /&gt;&lt;br /&gt;Just another typical C++ struggle I had last days. Hey, C++ is not crazy, the rest of the world is crazy. But it works now, and especially with a hardcore language like C++, that feels good. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/--YJafKlAfpM/TY5n3_IaGxI/AAAAAAAAAZ4/r-9CCVrApn8/s1600/F2Lobby2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 227px;" src="http://2.bp.blogspot.com/--YJafKlAfpM/TY5n3_IaGxI/AAAAAAAAAZ4/r-9CCVrApn8/s320/F2Lobby2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5588518399150529298" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;What kind of sound to put here?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Compiling&lt;/span&gt;:&lt;br /&gt;error C4430: - 22 bad-English syntax errors - \blog.h 46&lt;br /&gt;error C2310: - 3 falsehoods found - \blog.h 47&lt;br /&gt;warning: - don’t take it all too serious! -&lt;br /&gt;Happy debugging! --&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-1410125799670932415?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/1410125799670932415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/03/esperanto.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/1410125799670932415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/1410125799670932415'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/03/esperanto.html' title='Esperanto++'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-isMVF8XxreE/TY5fK_9K5sI/AAAAAAAAAZo/_UEwA_mYvME/s72-c/SoundWrapper.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-7543412187231581228</id><published>2011-03-17T16:21:00.000-07:00</published><updated>2011-03-18T00:31:14.103-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Handling input'/><title type='text'>Puppeteer Part #1</title><content type='html'>Hot damn, seems mama Earth is angry again. Tectonic violence, God frustrated, Godzilla, who knows. Thank God the death toll didn't exceed a 5-zeroed number like in Haiti or the 2004 tsunami. When I saw that monstrous whirlpool (wtf, I thought only cartoons had these), and massive waves swallowing up everything with the greatest ease,  I expected the casualties to be a lot higher to be honest.&lt;br /&gt;&lt;br /&gt;Nevertheless, what a drama. And now that Fukushima reactor. Not only is it still threatening with a meltdown, the whole economy in Japan (the number 3 economy in the world) is offline. Yet, one cold comfort, I was amazed how calm the Japanese people remain. No chaos, plundering, raping or complete dismay. They behave like intelligent, civilized people. Hard working has never been a problem for the Japanese, so I'm sure they have the knowledge, strength and will to overcome all of this. You can do it, let the sun rise again Japan! &lt;br /&gt;-------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ok, programming then. Instead of graphics I'd like to focus on something else for a change. Controls. You mean keyboards, Wii Nunchucks and that kind of stuff? Yawn. C'mon, everyone knows how to detect a mouse-click or how to check whether the forward button was pressed. Basic stuff, already invented in the Commodore 64 era. Hell, Pong era.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-9wYkZXEMqRY/TYKZ77azJXI/AAAAAAAAAZY/8SVmm7eaqbA/s1600/InputOutput.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 385px; height: 211px;" src="http://3.bp.blogspot.com/-9wYkZXEMqRY/TYKZ77azJXI/AAAAAAAAAZY/8SVmm7eaqbA/s400/InputOutput.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5585195742734263666" /&gt;&lt;/a&gt; &lt;br /&gt;True. But how would you implement everything without knowing what to expect? When dealing with I/O, you usually exactly know what should happen. Sensor X goes off. Then engage actuator Y if analog value Z is lower than Setpoint W. Got to love the logic when dealing with PLC's or Microcontrollers. Clear &amp; simple. Games aren't different, although the diversity of "output" goes a lot wider than switching a few relays or proportional valves. What happens if you press Forward? Pfff, just a grasp:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;- Change animation to "walk" (if possible. Maybe the game is paused, or playing a cuts-cene, or you are dead, or ...)&lt;br /&gt;- Move the character forwards... how fast by the way?&lt;br /&gt;- Play sounds (GAS!, in case you drive a vehicle)&lt;br /&gt;- Maybe trigger some A.I. (others can see you better, motion-detector sees you &amp; triggers alarm, ...)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;But it gets worse. Games are often context-sensitive. C.J. can walk &amp; run in GTA, but also drive cars, bicycles, apaches, or even jetpacks. And in other situations that "forward" button (or analog stick) has yet another meaning. Like doing dance-moves in that annoying mini-game. And who says Forward = forward? Maybe you prefer the WASD keys for movement. Or maybe you use a gyro-scope sensor in the joystick. Or telekinesis.&lt;br /&gt;&lt;br /&gt;Hence, who says you are steering a vehicle or trigger-happy idiot anyway? Maybe you are navigating through a menu, or playing Tetris. Controls(input) on themselves do not know what happens if they are triggered. Unless you hard-code all actions right behind the "onPress(key)" event:&lt;br /&gt;&lt;pre name="code" class="brush: delphi"&gt;&lt;br /&gt;procedure onKeyDown( keyCode : asciiCode );&lt;br /&gt;begin&lt;br /&gt; case keyCode of&lt;br /&gt;  13{enter}  : player.doHijackCarBiatch();&lt;br /&gt;  38:{up}  : player.moveForward( doRun := isKeyDown(shift) );&lt;br /&gt;  27:{esc} : game.escapeToMainMenu();  &lt;br /&gt; end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I don't like this approach though. First of all, you should be able to change the key-bindings. You can replace the exact ASCII codes with variables of course. But... what if you don't use a keyboard at all? If you plan anything multi-platform, dealing with different input is certainly on the menu. And how about complex controls (pressure sensitive buttons, analog sticks, gyro-scopes, motion detectors) that become more and more popular? Or… howto check a good old Mortal Kombat comb? (FINISH HIM!  up, up, left, hold A 2 secs, tap B 3 times within 200 millisecs --&gt; Raiden stuffed in Johny Cages arse, Excellent! Johny Wins).&lt;br /&gt;&lt;br /&gt;Then there are also some conditions. The forward button shouldn’t work if your player is dead of course. And walking away during a cut-scene is just plain rude. Asides from all these little problems, I just don't want to hardcode the outcome of a key-event inside the engine core. Who says you are controlling a player at all? And who says it should "walk" when pressing forward? Maybe I like to use the same engine for a wheelchair racing game. Separating engine core business from specific game-related events always makes the design of apparent simple things a lot more difficult.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-5Deubx-9y-8/TYKcaY04NpI/AAAAAAAAAZg/YrTA2rLC7M0/s1600/Floor2_Lobby3b.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 221px;" src="http://2.bp.blogspot.com/-5Deubx-9y-8/TYKcaY04NpI/AAAAAAAAAZg/YrTA2rLC7M0/s320/Floor2_Lobby3b.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5585198465047606930" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Off topic. New scene in the make. No, this isn't an engine shot. It's a simple Lightwave model with a MS Paint jacket. Got to start somewhere. By showing each other relative simple models like these, there is still space to suggest, improve, fix or to throw it away.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So… we need some abstraction. Both on input &amp; output sides. I saw a lot of engines have a separate "Input" module (like a DLL), so I started there. This module simply detects input, and puts it in a ControlState we can pass further. Now you can't make EVERYTHING abstract. You could make the Input module so universal that it can handle a NES-8bit joystick, as well as a Space shuttle Simulator. But it will cost you (too) much time. So what I did was defining a list of common inputs:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;- forward, backward, left, right, leanleft, leanright, boost&lt;br /&gt;- action1,2,3, reload&lt;br /&gt;- use, examine, pickup, drop&lt;br /&gt;- get down, get up / ascend, descend&lt;br /&gt;- jump&lt;br /&gt;- toggle items / jump to item 0..9&lt;br /&gt;- quick item 1,2,3 (flashlight, nightvision toggle, gun fire modus, etc.)&lt;br /&gt;- team command1,2,3&lt;br /&gt;- focus / aim / zoom&lt;br /&gt;- inventory, stats, briefing, exit&lt;br /&gt;- ...&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;As you can see, these inputs can be translated to most games. Whether you do a racing, RTS, puzzling or sports game: some navigation, menu and action buttons are always welcome. These inputs have a record with its current state:&lt;br /&gt;&lt;pre name="code" class="brush: delphi"&gt;&lt;br /&gt;TControlInput = record&lt;br /&gt;   keybinding : integer; // Key/mouse/button to listen at &lt;-- configurable&lt;br /&gt;   isDown     : boolean;// pressed at the moment&lt;br /&gt;   isPressed  : boolean;// from false to true&lt;br /&gt;   isReleased : boolean;// from true to false&lt;br /&gt;   pressure   : single; // 0..100% for analog controls. A keyboard button is just 0 or 100%&lt;br /&gt;   releasedTime : single; // secs being released since last down&lt;br /&gt;   downTime   : single; // secs being down currently&lt;br /&gt;   tapCount   : integer; // Amount of presses within a short time&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;// Polling the input (in another module) would be something like this:&lt;br /&gt;if (controlState.input[ INPUT_FORWARD ].isDown) and&lt;br /&gt;   (controlState.input[ INPUT_BOOST ].isDown) then --&gt; run&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;With that info, you can check if a (mouse)button is down, but you can also check for more complex controls, like combo's or button bashing. I also store a few combined controls to make motion vectors (for analog stick, motion sensors, or gyro-scopes). Depending on pressure from 2 (X and Y) inputs, you can make a 2D position and motion vector. In a normal PC game, thise would be used for the Mouselook &amp; cursor position.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Each game cycle updates all (active) inputs by polling the physical key, mouse, stick or whatever it is. What to do with the input depends on other modules, we just pass the info. Don't shoot the messenger! Finally there is also feedback to the Input module. Most joysticks have "rumble" or "force-feedback" function these days. Or other physical output (LED's, sound, buzzers, ...).&lt;br /&gt;&lt;br /&gt;To make a long story full of stupid jokes a little bit shorter:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-OjbVgesCAO0/TYKX_39NKsI/AAAAAAAAAZQ/7byAMfnjrR4/s1600/InputDLL.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 264px;" src="http://1.bp.blogspot.com/-OjbVgesCAO0/TYKX_39NKsI/AAAAAAAAAZQ/7byAMfnjrR4/s400/InputDLL.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5585193611501054658" /&gt;&lt;/a&gt;&lt;br /&gt;And what we got for all this? Well, we can remove some code from the main-engine. And believe me, less is better when your project grows and grows. But more important, you can reuse and replace this module. If the physical inputs require a complete different approach, we can make adjustments in the DLL or ship the game with a specific platform DLL. The outcome of the DLL remains the same, no matter what key-bindings or inputs you use. That makes input handling in the engine or other modules easier, and reduces the chance on errors.&lt;br /&gt;&lt;br /&gt;So far the Input module. It can handle the mouse and keyboard for now, but you can also relative easily add other controllers for specific platforms, without having to litter the core engine or game-code. Next time I’ll tell how you can handle all that input without having to litter your engine with game-specific code.&lt;br /&gt;&lt;br /&gt;Talking about input… Still have to make my own Zapper one day, so I can play Halflife with a real gun in my hands. Would be a nice Microcontroller fun project. Ah, another time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-7543412187231581228?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/7543412187231581228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/03/puppeteer-part-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/7543412187231581228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/7543412187231581228'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/03/puppeteer-part-1.html' title='Puppeteer Part #1'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-9wYkZXEMqRY/TYKZ77azJXI/AAAAAAAAAZY/8SVmm7eaqbA/s72-c/InputOutput.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-2356773038426705195</id><published>2011-03-09T07:13:00.000-08:00</published><updated>2011-03-09T07:44:49.706-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Multiplayer'/><title type='text'>Killing Spree</title><content type='html'>Progress anyone? Still toying around with the ambient-shaders. There is an annoying little bug somewhere, can't really trace it. Each time I change 2 letters in the shader-code, then reload the program... wait 2 minutes (with Windows 7 it suddenly takes 6 times longer to load ?!). Shit, typo in the shader. Reload... In the meanwhile, my daughter and I are watching old 1945 Goofy cartoons on the right side of the screen. In other words, not so much progress.&lt;br /&gt;&lt;br /&gt;The others were busy as well. Visiting the GDC (Game Development Congress), doing a CG Society contest, or earning money (not totally unimportant). Most progress was probably done in fantasy-land, in the upper chambers. Drawing floorplans, and Robert made some character sketches. Lot's of ideas have been written down. But... without actual 3D content all those ideas still aren't worth much. Maybe I should make some simple test-maps in the meanwhile. Just to try out some new mechanics that have to be implemented... Such as climbing a ladder.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-HFg_i4QH8M0/TXeZfAdq5bI/AAAAAAAAAYg/WVF8yRd1vAM/s1600/MonsterSketch.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 387px;" src="http://4.bp.blogspot.com/-HFg_i4QH8M0/TXeZfAdq5bI/AAAAAAAAAYg/WVF8yRd1vAM/s400/MonsterSketch.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5582099021128459698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Hello, my name is Custard pie head. Piece of sketch from Robert looking around the corner. One of the (fun!) things to do is to create a huge base of sketches &amp; ideas. Then a jury (Tyra Banks, Sharon Osbourne and Dolph Lundgren) will judge which ones go to the next round.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I Also had a look at the Crysis 2 Multiplayer demo. Ah, that's always frustrating. Just when you are catching up with all the graphics, those bastards at Crytek sweep the floor again. As suspected, it looks darn good (even though the realtime ambient lighting isn't that accurate). On the other hand, I didn't had a real good chance to observe everything though. Each time when I was looking peacefully at the flowerbeds, bumpmap walls, reflecting floors, or the indirect light casted by a TV, I got killed by some asshole with a shotgun. No, Multiplayer games aren't my piece of pie.&lt;br /&gt;&lt;br /&gt;Then I realised again that awesome graphics still don't make a game refreshing. I can't judge Crysis2 based on small demo of course. But asides the good looking futuristic maps (no jungles this time), I doubt if this shooter will be truly innovative (like Farcry was).  At least the Multiplayer was the same as usual; 10 guys running around like mad, firing 500 bullets per second, having an average lifecycle of 11,74 seconds.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Multiplayer games... Always enjoyed beating 1.000 Footclan ninja's in Turtles in Time(snes) together with my little brother. Arguing together because of Mario Kart. Sneaked for hours towards German bunkers in Hidden &amp; Dangerous Cooperative modus. Then end up fighting again because either my brother or I threw a grenade only 1 meter far, killing the whole squad. Had quite some fun building custom maps for Age of Empires II, then playing them together with friends. Usually I had a large empire, and the others were placed in slave-camps to break out. Revolution mid-east style. Favorite multiplayer game? Goldeneye (n64). Also liked the Counter-operative modus in Perfect Dark (n64). Why do proper shooters such as Halflife2 never have a Coop or that Counter-Operative modus? Those shitty mods never work very well, or get released 3 years after when you already got tired of that game. Oh, in case you wonder what “Counter-Operative” is: one player had to finish a normal Single-Player mission, as usual. The other could take over control of a random (weak) foe. Pretty fun to look play a map from the CPU perspective.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But "fragging" other strangers in Quake, Unreal Tournament, Crysis or Battlefield? Hmmm... no. In theory those team-based multiplayer games sound like a lot fun. Realistic opponents, real teamwork, headsets, planning tactics, helping each other... The few times I played Battlefield 1942, I stranded up the front cover of a jeep, driven by a guy named "Joop". 20 seconds later the jeep with the two of us drove into a cliff. A tragically but fun dead. Tactics? Everyone who spawned stole a tank or airplane ASAP, then to commit Kamikaze in the enemy camp. So I decided to go bananaz as well, hi-jacked a Aircraft Carrier ship (every soldier knows how to steer those) and crashed the big boat onto Wake Island. To get scolded for "fking n00b!#!", "lame-ass, pls ban that dork" or "GWEG34 ROLFOL" whatever that may mean.&lt;br /&gt;&lt;br /&gt;Turns out these soldiers were bloody serious about there defeating the Japs after all. Like real killers, they ran into an enemy base, started unloading their M1-Garand on another Japanese while circling around each other at high-speed in a bloodcurdling duel on life and death. Running, shooting, jumping, crouching, firing bazooka’s, reloading… Who would fall first?! Realism. Now I finally understand what our boys went through in Afghanistan. Running circles around "n00b!" shouting terrorists, throwing grenades at our guys. And even worse, the fallen ones get humiliated; the terrorist "p0wns" him by repeating jumping and heeling on the dead body.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-ez36dfjLE_0/TXefzA8eYsI/AAAAAAAAAYw/-J9DfsOguws/s1600/BattleField1942_FlyingBoat.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/-ez36dfjLE_0/TXefzA8eYsI/AAAAAAAAAYw/-J9DfsOguws/s400/BattleField1942_FlyingBoat.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5582105961924813506" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;I did the same. With the 7800 tons USS Wake Island. Parents worry that games get more and more realistic.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Either you play it serious, or you make jokes all together. But playing such games with semi-professional 15 year old Killers is just stupid. At least for me. I'm sure a game like Battlefield offers everything to play the game with real general Patton or Navy Seals tactics. But unless you organize matches with clans &amp; playrules where each fills his role seriously(medic, defensive, assault, scout), it just doesn't happen. People don't know each other, medkits are used to knock out the enemy, and dying because of stupidity has no consequences. Just wait 20 seconds (or 2 minutes for Counter Strike) and you'll be back in battle. All that really matters is your score. The more kills, the better. Your teammates help you, they run into the frontline with Duke Nukem Reaper cannons, destroying everything that moves. Then to get killed themselves 2.5 seconds later.&lt;br /&gt;&lt;br /&gt;And even if you are slowly sneaking through a map, taking good care of yourself, you'll get banned because of "camping" (staying hidden on the same spot all the time). That's what happens to deserters.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If I had to make a multiplayer game, I would the force the players to follow a 2 week bootcamp with a fixed assigned group of fellow-recruits, under the lead of capt. Sobel. Then when they get killed during a campaign later on, they have to restart or shut the game and do their homework for school. But hey, that's just me. I'm old and grumpy, and a few billion others enjoy p0wning each other on a chaotic battlefield, so maybe I should shut my mouth.&lt;br /&gt;&lt;br /&gt;Will T22 have multiplayer then? Hmmm, probably not. Although I do like co-operative games. Or maybe let the other one take control of the enemies. Only problem is that story/puzzle driven games usually don't lend themselves very well for multi-player, because of the specific triggers. If you get locked in a room with a time-bomb that requires a puzzle while the other is sitting on a toilet two stores below, the scripting sequence could mess up. You really have to design a game for cooperative action (like they did in Resident Evil 5 for example).&lt;br /&gt;&lt;br /&gt;On top, a horror game like this won't be that scary anymore if you can baseball-bat opponents like a bunch of drunk hooligans. And since T22 isn't exactly a combat game, having a partner doesn't add much value. You could just as well invite your mother to look over your shoulder at the PC screen, helping with solving puzzles. But who knows... Despite my grumbling above, two doubles the fun. But maybe we should finish a second demo first, don’t you think?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-5m8MiTj9fgE/TXeaX8CvFMI/AAAAAAAAAYo/eFxh9e7X3sg/s1600/JengaSticks.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 269px;" src="http://4.bp.blogspot.com/-5m8MiTj9fgE/TXeaX8CvFMI/AAAAAAAAAYo/eFxh9e7X3sg/s400/JengaSticks.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5582099999194289346" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Got a couple more building photo’s from a friend. I couldn’t decide which was the worst so I just posted one. Dunno what kind of architects they had there, but it looks like someone won a box stacking contest from the local supermarket. Hey, if you live in one of those things, feel free to send us a vacation card!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-2356773038426705195?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/2356773038426705195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/03/killing-spree.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/2356773038426705195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/2356773038426705195'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/03/killing-spree.html' title='Killing Spree'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-HFg_i4QH8M0/TXeZfAdq5bI/AAAAAAAAAYg/WVF8yRd1vAM/s72-c/MonsterSketch.jpg' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-785704494310107450</id><published>2011-02-26T12:44:00.001-08:00</published><updated>2011-02-26T13:30:33.210-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Some notes about GI'/><title type='text'>G.I. Joe</title><content type='html'>Time for another technical themed post, if it wasn't that I didn't touch much keys last week(s). At least, the fingers didn't produce Turbo Pascal. Way too busy finding a 21th century telephone for my girl. She might be friends with a programmer, but she really doesn't know how those damn electronic things work. Ha, there was an initiative in Europe that states that, asides having food, house, and a bed, Internet has to become another basic necessity of life... Well, I can safely say that High Speed Internet was the last concern in their house. Finding (and keeping) work to finance those other three needs is slightly more important in Poland...&lt;br /&gt;&lt;br /&gt;Anyway, time to show her some next-century technology. Here, have a look at the PC! Internet is this button, you can also do Minesweeper but that sucks, and this button starts Microsoft Visual Studio. Ok ok, just type Google, then "shoes", + "cheap" please. No, left mouse button. Clicking once is enough.  Here, see? No the computer isn't crazy, you just clicked that minus sign, making the screen disappear. No you don't stop by pressing the power button. Great stuff right, computers and Internet? Just  when she finally has enough courage to start the computer with a cup of coffee.... Internet page not found.  Router cannot be found. Windows has been recovered from a severe error(what to click?! Panic!). Google Chrome crashed, send report?&lt;br /&gt;&lt;br /&gt;Or how about this one: "Windows delayed write disk failed". Reboot... Windows system.dll cannot be loaded. Windows cannot start. Don't know how she does it, but that happened about three times. For some reason, my Samsung HD103UJ disk suddenly starts failing to read/write. Well, suddenly... Maybe those little fingers from our petit gnome has something to do with it. Programming stuff like mad, then suddenly "zap", screen black, computer off. And I hear someone smiling half a meter below. &lt;br /&gt;&lt;br /&gt;Samsung has a fix tool called shdiag.exe. But I simply don't trust that cursed piece of metal anymore. A (new!) disk crashing three times, fuck that. I'm going to enjoy torturing that thing with the hammer. But, tears up. A new HD has just arrived, and more important, I didn't lost any T22 code... Didn't reinstall everything yet, but when I saw those "write failure" balloons I already knew "make a back-up. NOW.". Which was a smart thing to do.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-3sS5u9zczPA/TWlmdwBhsuI/AAAAAAAAAYA/QGCpGKAcQlU/s1600/IndirectLight.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 229px; height: 320px;" src="http://4.bp.blogspot.com/-3sS5u9zczPA/TWlmdwBhsuI/AAAAAAAAAYA/QGCpGKAcQlU/s320/IndirectLight.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5578102274768614114" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Indirect light... Without it, only the small spot on the floor would be litten.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So, that's why I didn't program much.  But I just might tell a few details about the programming-work on T22 I'm lately doing though. All graphics programmers probably heard &amp; saw Crysis new approach on realtime G.I. (Global Illumination, ambient light). Which basically means: when light falls on a surface, reflect("bounce") it further in all directions. And again, and again... The reason why most places, even during night, aren't completely black.&lt;br /&gt;&lt;br /&gt;Easy does it, but while most visual phenomenons have been tricked by the game industry (reflecting water, dynamic shadows, smoke, refractions, god-rays, ...), doing realtime GI appeared to be one son of a bitch. Most games still aren't much further than Doom1 or Quake. Either by using a simple "ambient color" per area, and/or pre-baked lightMaps. Of course the lightMap quality is much better, and Occlusion Maps have been added to the weapon arsenal for somewhat more flexibility. But that's pretty much it.&lt;br /&gt;&lt;br /&gt;For scenery that doesn't change much (switching lights, large moving objects, day/night cycle) lightMaps are usually sufficient. For bigger/outdoor scenes with only a few global lights (sun), an occlusionMap or even a simple fixed ambient color may do the trick because the (indirect) light doesn't vary much. So, developing GI wasn't that urgent, and the required computing power was simply not worth the deal. Of course, lot's of techniques have been tried in the background, but even on todays hardware, most of the tricks have serious drawbacks. Too slow, doesn't work with moving stuff, ugly, can't apply on bigger scenes, damn difficult to tweak it right, and so on. The bottom line is, a good old pre-fabricated still look better(and a hell lot faster).&lt;br /&gt;&lt;br /&gt;But, stagnation means decline. Someone has to do the dirty job. And Crytek just did. Supergraphics with realtime GI, that even runs on a XBox 360 or PS3. And the Wii can render the skybox, without clouds. Problem solved? No, no, no. Even the brains at Crytek weren't able to tackle all problems. The solution is physically inaccurate, the detail is low (don't expect a bookcase model with small details having cool GI, think in terms of cubic meters). And it only does one bounce, which means a little light falling through a window still doesn't emmit the whole room). But from all solutions so far, it is probably the best one available. It handles huge area's, no pre-calculations at all, it works for dynamic objects, for sort of a fake it looks pretty good. And also important, the calculation time is relative low. The XBox/PS3 proves it.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-tuotSHvExDk/TWlqeby9CCI/AAAAAAAAAYQ/4jDB_t2IcRo/s1600/cryengine3_global_illumination_on_off.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 308px;" src="http://2.bp.blogspot.com/-tuotSHvExDk/TWlqeby9CCI/AAAAAAAAAYQ/4jDB_t2IcRo/s400/cryengine3_global_illumination_on_off.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5578106684565162018" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now I'm not exactly copying Crytek's approach for the T22 graphics (I'm too stupid for Spherical Harmonics anyway), but I took some of the components and combined it with my current realtime GI "solution". Yes, T22 does have realtime GI for 2 years already. But the quality is so bad that you hardly notice it. How it works? If you were a piece of wall, you might see other pieces of the opposite wall. Or a floor, ceiling, piano, skybox. Everything you see, could send (reflect diffuse) light towards you. You could raytrace to figure out the relations between all "surface patches", but you could also pre-calculate the relations. In my old solution, each patch has about 256 other patches to collect reflected light from. So what it did:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; - Generate lightMap texture coordinates for a room.&lt;br /&gt; - Each pixel on that map was converted to a patch (3D position, normal, surface emissive &amp; reflectivity value)&lt;br /&gt; - Calculate for each patches which 256 other patches it can "see" (by raycasting for example) when looking into it's normal direction. &lt;br /&gt; - Store this data together with the room.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Since you quickly get hundred-thousands of data records, memory storage size grows rapidly. So, one of the biggest issues with this technique is the extreme low-resolution lightMaps to temper the size. Thinking about it now, I could have been better of with less relations per patch, but having more patches. Anyway, @runtime this data is used to spread(or collect if you prefer) direct light via the pre-calculated relations.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; - Render a sector with lights(and shadowMaps) applied as a flat 2D texture&lt;br /&gt; - Read the texture to the CPU.&lt;br /&gt; - Let the CPU spread the light (used 4 bounces) with the pre-calc. patches&lt;br /&gt; - Draw the results back into a texture (3 actually for simple normalMapping)&lt;br /&gt;   and use that as a "indirect-LightMap"&lt;br /&gt;&lt;/blockquote&gt;  &lt;br /&gt;Asides having lightMaps being so small that the quality was awfull (just incorrect), it had more issues:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; - The average room already required a few megabytes disk &amp; memory space to store the patch data&lt;br /&gt; - Can't use it on dynamic objects (well, you can, but not by nature)&lt;br /&gt; - glReadPixels operation stalls the rendering pipeline. Speed drops.&lt;br /&gt; - Realtime? Needing ~200 millisec to update a map (in a background thread) isn't exactly realtime. When having multiple rooms, you could clearly see the light being updated in steps.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;However, I still like the idea of having pre-calculated info. It might result into somewhat more accurate results, and doing multiple bounces is far less of a problem than with the Crytek approach. The screenshots here for example use 4 bounces. So, I tried to take the best out of both worlds, resulting in my new "Ambi-Gather" technique. I won't reveal yet how it works (it still has to prove if it works at all!) but so far the progress is steady. This time it runs entirely on the GPU, it updates every cycle (thus real realtime), it requires far less memory, and it just looks better so far. Smarter, faster, bigger, better, Robocop 2.0, Terminator 3.0, Rambo 4.0.&lt;br /&gt;&lt;br /&gt;Ok, give me some more time, and pray for the God's the hard-drive stays intact for a change.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-crkEbn7xOtQ/TWlnB1M3CWI/AAAAAAAAAYI/Y-hVibNVmqw/s1600/IndirectLightGreen.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-crkEbn7xOtQ/TWlnB1M3CWI/AAAAAAAAAYI/Y-hVibNVmqw/s320/IndirectLightGreen.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5578102894633617762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Stupid light bouncing around all realistically… Horror scenes aren’t supposed to be bright. Luckily there are still parameters to adjust, telling how strong and what colors the indirect light should have for a specific lightsource, or for the entire scene. In this case I chosed acid green.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5417138872461097808-785704494310107450?l=tower22.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tower22.blogspot.com/feeds/785704494310107450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tower22.blogspot.com/2011/02/gi-joe.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/785704494310107450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5417138872461097808/posts/default/785704494310107450'/><link rel='alternate' type='text/html' href='http://tower22.blogspot.com/2011/02/gi-joe.html' title='G.I. Joe'/><author><name>Rick</name><uri>http://www.blogger.com/profile/04196340535742326978</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_x5fwyfmBUV0/S27HQ6XamWI/AAAAAAAAABg/2iuTdDUBIF0/S220/RickJulia.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-3sS5u9zczPA/TWlmdwBhsuI/AAAAAAAAAYA/QGCpGKAcQlU/s72-c/IndirectLight.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5417138872461097808.post-6453703196764281686</id><published>2011-02-15T15:10:00.000-08:00</published><updated>2011-02-26T01:05:29.081-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Horror theme'/><title type='text'>The Horror</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-6auJjw4O9OM/TVsMlD-hiUI/AAAAAAAAAX4/S9chNeV71Rs/s1600/Thing.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://3.bp.blogspot.com/-6auJjw4O9OM/TVsMlD-hiUI/AAAAAAAAAX4/S9chNeV71Rs/s320/Thing.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5574062794663364930" /&gt;&lt;/a&gt;&lt;br /&gt;Scooby Doo. We all like to torture ourselves with shocks and climaxes that makes you want to run away. Well, many of us. But what exactly is scary? A 13 year old Hentai ghost girl with pitch black hair? Mice and rats? Empty environments with a threatening tune? Burning zombies that puke out their own balls? Let's see how Tower22 tries to make you cry.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When discussing stuff like environments or characters with my fellows, it appears that describing something scary is utterly difficult. Not just because I lack English words to do so, but also because fear is a very personal thing. The nightmares / "things" that scared me most are probably normal or just vague to others. When I would describe it, the reaction would probably be "and then?" or "oh....".&lt;br /&gt;&lt;br /&gt;But let's give it a shot anyway. Luckily I've seen quite some horror-things. Virtual drama's I mean. Still can't compare my "experience" with children who saw their family getting murdered or something of course. Nah, Liveleaks movies don't make me vomit, but when drama becomes reality I rather skip it. Taliban shot in half is not really my cup of tea. Guess that's normal... there is a difference between a vivid fantasy or a sick fantasy :) No, when it comes to inspiration I focus on games, movies, dreams, random thoughts, personal phobia's and history. Yes, our history is full of drama. From mythological stories to gas chambers. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Too bad I have some memory-leaks as well, so I forgot a lot of things. But if I had to list a few of the most scary movies/games, the first things that come in my mind are:&lt;br /&gt;- The Shining&lt;br /&gt;- Resident Evil 1 Remake&lt;br /&gt;- Amnesia (only did the demo recently, but that was already pretty damn scary)&lt;br /&gt;&lt;br /&gt;What these three titles have in common might be the lack of gore. I enjoy intestines, monsters and tomato sauce. But over-the-top horror usually doesn't scare me that much (although Doom3 or Silent Hill did a good job). No, you won't be disgusted by these titles when comparing it to Braindead, The Thing, Cannibal Holocaust (wtf) or Dead Space. Blood and extreme situations are fun, and I'll sure put them in T22 (more than in Resident Evil games for example). We won't turn our heads for guts, bizarre chambers, nudity or extreme violence. Hey, the upcoming Demo movie will have a pretty dirty scene! I wouldn't mind if the PEGI rating becomes so high that I'm officially too young to program my own game :) BUT, blood, boobs and gore are not the Core Business.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-IQRO4de4aBo/TVsIO0eACiI/AAAAAAAAAXg/Q9ra9ziBOeU/s1600/WallTexture_CorridorTest2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://1.bp.blogspot.com/-IQRO4de4aBo/TVsIO0eACiI/AAAAAAAAAXg/Q9ra9ziBOeU/s320/WallTexture_CorridorTest2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5574058014496786978" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Not a beautiful scene, but I was playing around with some new textures Julio made. Making an uncomfortable environment is at least as important than angry monsters.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tower 22 horror fundaments&lt;/span&gt;&lt;br /&gt;Extreme shock moments are tasty, but they only work a few times. So we'll have to place them wisely. So what could make a game/movie really scary? As said, opinions differ. But for me the "can't place it" and "continuous terror" are the keywords. With "can't place it" I mean situations that  are so strange that your brain gets a blue-screen when trying to reason. Dreams are usually a good example. Scenery that might look pretty normal still don't make sense, as they don't have to obey the rules of logic. Chambers are suddenly replaced with something else. Persons transform into something different even while you are talking to them. And of course, guns always change into Super-soakers where you have to shout the "Bam!" gunfire yourself (don't worry, we won't use that trick). Silent Hill is a good example. Environments could suddenly change, putting you from one nightmare deeper into another. The character dialogs are so strange that you trust nobody, and even common objects or rooms don't feel like they were designed by humans. A few other examples are The Cube (movie) and some of the Clive Barker books (famous from Hellraiser).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The "continuous terror" thing is the feeling that you could get in troubles any time. Well. In action games like F.E.A.R. you actually are in trouble continuously. But once you learned how to fight it, it becomes "normal" (until you see that damn little girl again). Older Resident Evil games or Amnesia are much slower paced. You won't be fighting 600 zombies per minute. But when it happens, you'll get in panic. RE controls are difficult and you always lack ammunition. Amnesia doesn't give the player a defence mechanism at all. So, with every step you take, you are 200% alert. Even the safe-rooms with calming music in RE feel like a dangerous place. That's why ghost movies with cliché scary moments still work good in common.&lt;br /&gt;&lt;br /&gt;Last, maybe we should try to add some emotional drama’s? You know, player lost his 3 year old son, his father is also his mother, witnessing how your best buddy gets eaten... No. You’ll be all alone in Tower22. For one, to enhance the claustrophobia and loneliness feeling. Second, I don’t believe in game-emotions. Don’t know about you, but I’m just to sober to create a bond with a polygonal character. When Richard gets brutally eaten by a shark in Resident Evil, I’m only interested in the shotgun he leaves behind. Thank you.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Concept work&lt;/span&gt;&lt;br /&gt;All right, put these ingredients in the blender, add some blood-sauce, and it should give a Tower22 meal. Should be easy for Jamie Oliver. But of course, making up a character that actually scares you (after seeing so many dirty monsters in other games/movies already) or an empty environment that makes you nervous just by the looks and sound, is darn difficult. So how should we accomplish this task? Every room, object, sound, music, creature or piece of story that goes into the game should get a "DTS" (Damn-that's-scary) label first. Considering that the content should make up a game that takes at least 8 hours (still short if you ask me), this will be an even more challenging task than programming an engine that can render blood decals.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-MrWe4tQQtcw/TVsJy9sDj6I/AAAAAAAAAXo/_9AhvIWoOxU/s1600/Rick_WindowCrawler.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://4.bp.blogspot.com/-MrWe4tQQtcw/TVsJy9sDj6I/AAAAAAAAAXo/_9AhvIWoOxU/s320/Rick_WindowCrawler.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5574059734958575522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Made within 13 minutes. And my digital drawing skills really aren't good! Making quick concepts first helps you creating an "inspiration source", and prevents wasting a lot of time on working out your first silly ideas in detail already. Would this curious guy make it into the game?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It all starts with making concepts. Don't work-out a super-cool one armed dude with a burned skin texture and a loose intestine right away. The more hours you put in a drawing or model, the harder it will get to take distance of it (and the more precious time wasted when it gets discarded). Maybe other team members don't really like it (but don't dare to say because you spend so much effort and love in it). Or you'll realise it's pretty stupid actually, a few days or weeks later.&lt;br /&gt;&lt;br /&gt;Therefore, start with quick concept drawings or reference pictures. When a weird idea pops-up, write and draw it on the paper. If you browse accidentally on a cool photo, store it. If you saw a nice movie, list it. The more ideas, the better. Instead of trying to make the perfect bogeyman right from the start, collect as many as possible ideas. It doesn't matter if your concept drawing sucks
