<?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-8497846259593927702</id><updated>2011-07-08T07:56:19.141-07:00</updated><category term='game development'/><category term='FAQ'/><category term='gaming'/><category term='rant'/><category term='OSS'/><category term='projectoh'/><title type='text'>Ocean Horizons</title><subtitle type='html'>Ocean Horizons's dev blog</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://magickpanda.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://magickpanda.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>magick panda</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8497846259593927702.post-8993105197674259790</id><published>2009-07-01T23:35:00.000-07:00</published><updated>2009-07-01T23:44:14.691-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projectoh'/><title type='text'>More than 1 year of Ocean Horizons SourceForge project</title><content type='html'>It has been more than 1 year since I uploaded the &lt;del&gt;worthless&lt;/del&gt; Ocean Horizons svn dump to Sourceforge project site.&lt;br /&gt;&lt;br /&gt;I did make some major progress but the development is slowed down to a crawl now, for the &lt;del&gt;retarded&lt;/del&gt; overcomplicated GUI system built on top of guichan and lack of GFX sprites.&lt;br /&gt;&lt;br /&gt;I tried to learn blender to create simple ship models to make create ship sprites easier, but I find blender is just not for me, I find the interface utterly confusing and unusable, maybe it's just me too stupid to figure out their proper usage and functionalities, I followed the blender noob-to-pro guide carefully to create a simple model, but as soon as I apply the subsurf modifier to smoothe the model everything is messed up.&lt;br /&gt;&lt;br /&gt;I guess I will forget about blender for now and stick to gimp for the sprites, hopefully the development will be back on track soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8497846259593927702-8993105197674259790?l=magickpanda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magickpanda.blogspot.com/feeds/8993105197674259790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8497846259593927702&amp;postID=8993105197674259790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/8993105197674259790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/8993105197674259790'/><link rel='alternate' type='text/html' href='http://magickpanda.blogspot.com/2009/07/more-than-1-year-of-ocean-horizons.html' title='More than 1 year of Ocean Horizons SourceForge project'/><author><name>magick panda</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8497846259593927702.post-7093543549132881399</id><published>2009-07-01T23:07:00.000-07:00</published><updated>2009-07-01T23:33:59.143-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='gaming'/><title type='text'>So Blizz confirmed removal of LAN gameplay in SC2..</title><content type='html'>Few days ago Blizzard confirmed the removal of LAN feature in SC2, their excuses were piracy and new battle.net services, but in my opinions the excuses are irrelevant. One of the reasons Blizzard's previous titles become very popular is LAN/Direct-IP-over-internet gameplay capacities most other games of the same genre doesn't offer, removing LAN/Direct-IP feature would be a shot in the foot. Battle.net is nice but it's definitely not for everyone, especially when you are geographically distant from one of the battle.net servers. A laggy as hell only multiplayer will hurt the sales and the fanbase for sure.&lt;br /&gt;&lt;br /&gt;WoW has transformed Blizzard into a money hungry control freak, it's not the company that we used to know who did hear players' voices, now what they do daily is pretty much sending 48-hours Cease And Desist Legal-Threat Letters to their avid fans who is trying to create a mod or total conversion of Blizzard Title either in a standalone project or in other game, or an innocent individual who accidentally put a Blizzard's game file on a web server.&lt;br /&gt;&lt;br /&gt;Probably one day we will be charged for infringement of their copyrighted trademark WoW when we say "WOW" in real-life(tm) heh.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8497846259593927702-7093543549132881399?l=magickpanda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magickpanda.blogspot.com/feeds/7093543549132881399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8497846259593927702&amp;postID=7093543549132881399' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/7093543549132881399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/7093543549132881399'/><link rel='alternate' type='text/html' href='http://magickpanda.blogspot.com/2009/07/so-blizz-confirmed-removal-of-lan.html' title='So Blizz confirmed removal of LAN gameplay in SC2..'/><author><name>magick panda</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8497846259593927702.post-4204168876524756354</id><published>2008-11-04T03:07:00.000-08:00</published><updated>2008-11-04T08:14:38.720-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projectoh'/><title type='text'>Implementing Multiplayer</title><content type='html'>At the moment I am plugging SDL_Net into Ocean Horizons, the newly added basic AI and movement states need to send/receive requests to/from server game in multiplayer game, there are also tons of things needed to be addressed in network/SDL_Net/server game in general:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Message Struct:&lt;/span&gt;&lt;br /&gt;Ocean Horizons needs an universal serialized header format to identify a message's type, length and possibly a timestamp indicating the birth of such message in game time.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Serializing Game Objects over Network:&lt;/span&gt;&lt;br /&gt;Generally sending a whole object over network is a big nono in most applications. However, in a game like Ocean Horizons, such thing is unavoidable. Probably I will just copy-paste the save to file serialization functions and replace FILE/OFSTREAM buffer with a char* buffer =D Reusable codes *cough*&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sending AI order/action changes events over Network:&lt;/span&gt;&lt;br /&gt;AI Order/Action are the fundamentals of a simple "state-machine" AI used in pretty much every game genre, sometimes they are also referred as "Goals" in games have relatively higher level intelligence, e.g:FPS bots.&lt;br /&gt;An Order/Action should be as simple and as small in size as possible, since they change alot in a game, and every object that has AI has at least 1 instance of both.&lt;br /&gt;For example, when sending an attack-some-target order, you will need:&lt;br /&gt;1.The attacker&lt;br /&gt;2.The target&lt;br /&gt;3.IF in range THEN attack ELSE move-to-attack&lt;br /&gt;4.IF move-to-attack THEN get-target-position&lt;br /&gt;&lt;br /&gt;The order 'ATTACK' is just an enum or constant that is probably only 1 byte if you have less than 255 order types(well if you have more than 255 order types, you fail at making a game =o), while the attacker and the target are probably multiple bytes objects, to minimize the network overhead you will need an unique id for every object in game, sending Unique Id(usually 4-8 bytes, depends on how you handle Unique Id and how many objects your game has) is much more efficient than serializing the 2 objects, both in time and in space.&lt;br /&gt;&lt;br /&gt;In Server Client model Ocean Horizons will be using the overhead of Sending AI order/action will be significant on server, basically one AI order/action message will need to be send [number of players] times by the server, so having slim AI order/action messages will be critical.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Synchronization over Network:&lt;/span&gt;&lt;br /&gt;Synchronization is a bit tricky in a game with tons of objects, if you synchronize all objects every few second, you will probably run out of bandwidth. Though if you don't synchronize them frequently enough, desynchronization will happen, which is bad because one or more players might be playing an entirely different game from others..&lt;br /&gt;Server Client model should minimize desynchronization, but it does come at a price:the reduced responsiveness when you are issuing orders, executing commands as non-server player. Basically you have to do:&lt;br /&gt;&lt;br /&gt;1.Someone needs to issue order 'move to X' for my ship with id 123&lt;br /&gt;2.Send Request TYPE:SHIP_ORDER_MOVE SOURCE:123 TARGETX:0 TARGETY:0 to server&lt;br /&gt;3.Server receives Request and Process, if it's a valid order then send granted Request to all connected players&lt;br /&gt;4.The original Request Sender being one of the connected players, so he receives granted Request and his ship begins to move to X eventually..&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;In-game join:&lt;/span&gt;&lt;br /&gt;To join in game you probably need to download the last server game save and synchronize with all server's game states. I think there is no other simple and efficient way to do this..&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Handling Dropped Player/Player X has left:&lt;/span&gt;&lt;br /&gt;The best way of doing this I have seen is openttd's: when one player drops/leaves his units/buildings remain intact but got taken over by AI, other player or the dropped/left player may join to regain control over his old assets later.&lt;br /&gt;&lt;br /&gt;I typed too much again =/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8497846259593927702-4204168876524756354?l=magickpanda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magickpanda.blogspot.com/feeds/4204168876524756354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8497846259593927702&amp;postID=4204168876524756354' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/4204168876524756354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/4204168876524756354'/><link rel='alternate' type='text/html' href='http://magickpanda.blogspot.com/2008/11/implementing-multiplayer.html' title='Implementing Multiplayer'/><author><name>magick panda</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8497846259593927702.post-6896265093592232168</id><published>2008-09-29T06:15:00.000-07:00</published><updated>2008-09-29T09:54:21.456-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projectoh'/><title type='text'>Pathfinding and Map Wrapping rants 2</title><content type='html'>I forgot that Planet Earth is a sphere...so the map wrap for Y coords is wrong, the intersection of equator and prime meridian divides meridian projection(tile map) into 4 "areas" like this:&lt;br /&gt;&lt;br /&gt;Y Max&lt;br /&gt;[NW][NE]&lt;br /&gt;[SW][SE]&lt;br /&gt;Y Min&lt;br /&gt;&lt;br /&gt;So when your whatever moving object hits Y Max in [NW] area, your ship should reappear at [NE] area with Y Max minus 1..Hitting is Y Min in [SW] is similar except it's Y Min plus 1, also X coords is mirrored when your hit Y Max or Y Min:&lt;br /&gt;&lt;br /&gt;X Min[NW][NE]X Max&lt;br /&gt;X Min[SW][SE]X Max&lt;br /&gt;&lt;br /&gt;Lets say we have a ship at X(100), Y(MAX-1) on 1000x1000 map(starting index 0):&lt;br /&gt;[NW]'s X coords range would be 0-499&lt;br /&gt;[NE]'s X coords range would be 500-999&lt;br /&gt;&lt;br /&gt;When ship moves towards Y axis positively(north) by one, the ship reappears at X(999 - 100), Y(MAX-1)...It's very confusing, even on papers, in game the renderer needs to flip all tiles that have been "Y wrapped"(the "wrapped" tiles are on the other side of the sphere, so they are upside down and mirrored.It needs to draw from right to left and swap point 1,2 with 3,4 on quads...)&lt;br /&gt;&lt;br /&gt;Though i will ignore this issue for now, since it's tolerable and in 1500's no ship could reach max Y(northpole) or min Y(southpole) intact... =o&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8497846259593927702-6896265093592232168?l=magickpanda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magickpanda.blogspot.com/feeds/6896265093592232168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8497846259593927702&amp;postID=6896265093592232168' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/6896265093592232168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/6896265093592232168'/><link rel='alternate' type='text/html' href='http://magickpanda.blogspot.com/2008/09/pathfinding-and-map-wrapping-rants-2.html' title='Pathfinding and Map Wrapping rants 2'/><author><name>magick panda</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8497846259593927702.post-3104082499975239794</id><published>2008-09-12T11:13:00.000-07:00</published><updated>2008-09-12T11:19:51.673-07:00</updated><title type='text'>Site updated</title><content type='html'>Updated the site hosted by sourceforge.net &lt;a href="http://projectoh.sourceforge.net"&gt;site&lt;/a&gt; to a few table-layout html pages with contents ripped from forums, it's definitely better than the old good blank page with 2 links. =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8497846259593927702-3104082499975239794?l=magickpanda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magickpanda.blogspot.com/feeds/3104082499975239794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8497846259593927702&amp;postID=3104082499975239794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/3104082499975239794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/3104082499975239794'/><link rel='alternate' type='text/html' href='http://magickpanda.blogspot.com/2008/09/site-updated.html' title='Site updated'/><author><name>magick panda</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8497846259593927702.post-4763481698880431507</id><published>2008-09-05T01:47:00.000-07:00</published><updated>2008-09-05T02:20:41.885-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projectoh'/><title type='text'>Pathfinding and Map Wrapping rants</title><content type='html'>Okay, here is the rants about Pathfinding and Map Wrapping in Ocean Horizons,they are royal pains really, why? Let me explain:&lt;br /&gt;&lt;br /&gt;Pathfinding on HUGE tiles map:&lt;br /&gt;Initially I naively thought a decent pathfinding algorithm will solve the problem, so I &lt;del&gt;ripped&lt;/del&gt; borrowed A* Array implementation codes from an excellent pathfinding example program called PathFinder2D, but soon I realized pathfinding on a HUGE tile map will be a CPU hog, not to mention the enormous overhead of memory used by PathPlanner to store tile information like block status, open/closed flag, terrain type and stuff.&lt;br /&gt;&lt;br /&gt;I have to make a simple and stupid pathplanner that only plans next node to move towards, basically it loops through 8 directions and find the one that is closest to the destination, it sucks but works.Probably a last-node needs to be passed to that function to avoid lock between 2 tiles.&lt;br /&gt;&lt;br /&gt;Additionally a navigation graph needs to be incorporated into pathfinding system, once the graph is contructed, the routes between nodes are trusted, which means there is no obstruction between 2 linked nodes in graph, so pathfinding is not needed when doing long distance traverse.&lt;br /&gt;&lt;br /&gt;Map Wrapping:&lt;br /&gt;What is Map Wrapping?You may wonder, Map Wrapping is wrapping the coords when reaching map edges, it's a must because planet Earth is not flat, at least in our game. So whenever the map reaches edges(MAX_WIDTH or MAX_HEIGHT), the map needs to be wrapped to X-0 Y-0 again, this sounds easy enough, but there is tons of stuff that need to take Map Wrapping into consideration:&lt;br /&gt;&lt;br /&gt;When units move to a coordination that is larger than max x, max y, you will need to cap it.&lt;br /&gt;When screen draws tiles x, y bigger than max x, max y, you will need to draw the wrapped ones.&lt;br /&gt;Distance between tiles calculation must checkwhether the distance is greater than 1/2 of map height or width, because distance between X-1023 and X-1 is actually 2 on a 1024 width map, but you might get broken result 1023-1 if you don't..&lt;br /&gt;&lt;br /&gt;Hopefully I will be able to resolve these headaches gracefully. =D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8497846259593927702-4763481698880431507?l=magickpanda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magickpanda.blogspot.com/feeds/4763481698880431507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8497846259593927702&amp;postID=4763481698880431507' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/4763481698880431507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/4763481698880431507'/><link rel='alternate' type='text/html' href='http://magickpanda.blogspot.com/2008/09/pathfinding-and-map-wrapping-rants.html' title='Pathfinding and Map Wrapping rants'/><author><name>magick panda</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8497846259593927702.post-7988097301771847342</id><published>2008-05-09T02:19:00.000-07:00</published><updated>2008-05-09T02:40:30.916-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projectoh'/><title type='text'>Source available at sourceforge svn</title><content type='html'>You can check out the source code via sourceforge svn now:&lt;br /&gt;&lt;br /&gt;https://projectoh.svn.sourceforge.net/svnroot/projectoh&lt;br /&gt;&lt;br /&gt;Or browse my &lt;del&gt;hacks&lt;/del&gt; magick via sourceforge viewvc:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://projectoh.svn.sourceforge.net/viewvc/projectoh/"&gt;Browse SVN&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Currently it's far from playable,though I would like to make the development more transparent to others.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8497846259593927702-7988097301771847342?l=magickpanda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magickpanda.blogspot.com/feeds/7988097301771847342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8497846259593927702&amp;postID=7988097301771847342' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/7988097301771847342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/7988097301771847342'/><link rel='alternate' type='text/html' href='http://magickpanda.blogspot.com/2008/05/source-available-at-sourceforge-svn.html' title='Source available at sourceforge svn'/><author><name>magick panda</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8497846259593927702.post-3958183512414918230</id><published>2008-04-08T02:44:00.000-07:00</published><updated>2008-04-10T05:39:21.834-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projectoh'/><title type='text'>Progress on pre-alpha part 3</title><content type='html'>I am having a problem with map at the moment,I will need to either store mover objects pointers in map tile or make collision-test on all objects every frame,apparently the latter sounds a bit stupid,but pointers-in-maptile has its own problem:&lt;br /&gt;&lt;br /&gt;In Ocean Horizons,each tile is 32 by 32 pixels big,so in order to represent the 'world' at an acceptable size,I will need tons of them,more precisely 1024x1024+ of them,in a worst case scenario,there might be few hundreds objects overlapping each other in one tile at a time,let's say 200,then there will need to be 1024x1024x200 pointers,in 32bit it's 1024x1024x200x4 bytes or 800MB,in 64bit it's 1024x1024x200x8 bytes or 1.6 GIGABYTE!Now this sounds even more stupid than the collision-test on all objects every frame idea.&lt;br /&gt;&lt;br /&gt;Perhaps I should allocate them dynamically,but a pointer pointing to array of pointers on each tile doesn't sound like a good solution either.Hopefully I will get this problem sorted out soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8497846259593927702-3958183512414918230?l=magickpanda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magickpanda.blogspot.com/feeds/3958183512414918230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8497846259593927702&amp;postID=3958183512414918230' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/3958183512414918230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/3958183512414918230'/><link rel='alternate' type='text/html' href='http://magickpanda.blogspot.com/2008/04/progress-on-pre-alpha-part-3.html' title='Progress on pre-alpha part 3'/><author><name>magick panda</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8497846259593927702.post-5468580025118895176</id><published>2008-03-13T05:33:00.000-07:00</published><updated>2008-03-14T06:59:23.799-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSS'/><category scheme='http://www.blogger.com/atom/ns#' term='game development'/><title type='text'>Why OSS game developments suck</title><content type='html'>Firstly, this is not a rant about OSS game developments(Open-Source-Software for those that don't understand geeky abbreviations),  so don't take it personally.It's just some random thoughts I have after observing various OSS game projects.&lt;br /&gt;&lt;br /&gt;1.&lt;del&gt;retarded&lt;/del&gt; precise versioning&lt;br /&gt;  Almost all open source games use a 3 tier versioning technique,that is,Major.Minor.MinorMinor,as you may wonder:WTF is MinorMinor? MinorMinor is the actual version number that gets incremented by 1 every time a release is published.An example&lt;br /&gt;game version 0.0.1(initial alpha)&lt;br /&gt;minor release = 0.0.1 + 0.0.1 (takes 1-3 months)&lt;br /&gt;major release = 0.0.1 + 0.1.0 (takes about 10 minor release)&lt;br /&gt;breakthrough = 0.0.1 + 1.0.0(takes about 5 major release)&lt;br /&gt;&lt;br /&gt;So...let's work out the formula&lt;br /&gt; Development of an Open Source Games would take 5*10*(1-3months) or 50 months to 150 months to reach 1.0.0,I bet most players will be scared after reading this if they do play 0.0.x version of an OSS game.&lt;br /&gt;&lt;br /&gt;2.&lt;del&gt;Irresolute&lt;/del&gt; Cautious to do release&lt;br /&gt;OSS developer always over-cautious about the quality of a release,whether it's alpha,beta or release candidate,this further increases the delay between minor releases.&lt;br /&gt;&lt;br /&gt;3.More people make the project's development faster???&lt;br /&gt;  OSS developers believe more developers will make the project's development faster,this is simply NOT the truth.Sometimes 1 good developer with iron-fist style development style will be a lot faster than 2 good developers or more,since with more than one experts in one field,the actual works on code will be replaced by endless &lt;del&gt;flamewars&lt;/del&gt; expert-exchanges between the developers.&lt;br /&gt;&lt;br /&gt;4.Write perfect game not perfect code and documentation&lt;br /&gt;  An impatient player who cares only about graphics will take a look at the in-game graphics and say:this game looks like 80's,then uninstall it and never install it again.&lt;br /&gt;&lt;br /&gt;  An average causal player who cares more about gameplay will play the game for a few minutes,and he will uninstall this game if the controls/user interfaces is uncomfortable.&lt;br /&gt;&lt;br /&gt;  The most patient and wise player will try his best to play throughout the game and will only uninstall this game if it has no replayability or depth.&lt;br /&gt;&lt;br /&gt;5.Mess with the best &lt;del&gt;die like the rest&lt;/del&gt;&lt;br /&gt;  Exist libraries have been used/field-tested for years and they are ready for production,while some developers irresistibly want to write libraries from scratch for their game,because they think the exist wheel is not good enough,unfortunately their ambition usually ends up as a broken wheel,with a broken lib/core the game project's death will be imminent.&lt;br /&gt;&lt;br /&gt;6.Get bound by your own freedom&lt;br /&gt;  What would you feel if your painting can be reworked by anyone including those who are not even artists and those who alter it in a destructive way?&lt;br /&gt;  To satisfy the project host,distro distributors,OSS project admins are forced to &lt;del&gt;dupe&lt;/del&gt; convince the artists to release their arts under GPL/CC-by-sa.This behavior particularly pisses artists off,cause artists care more about the integrity of their arts and their names being mentioned as original author.&lt;br /&gt; &lt;br /&gt;  Please note that avoiding the problems I listed won't guarantee your project success,but it should help prevent your project from being slow-downed or killed by the pitfalls that creep in OSS game development.The key contributes to an OSS game project is still your dedication,and the best way to motivate yourself is to play and learn to love the game you are developing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8497846259593927702-5468580025118895176?l=magickpanda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magickpanda.blogspot.com/feeds/5468580025118895176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8497846259593927702&amp;postID=5468580025118895176' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/5468580025118895176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/5468580025118895176'/><link rel='alternate' type='text/html' href='http://magickpanda.blogspot.com/2008/03/why-oss-game-developments-suck.html' title='Why OSS game developments suck'/><author><name>magick panda</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8497846259593927702.post-1558901648697132713</id><published>2008-02-25T04:03:00.000-08:00</published><updated>2008-02-25T04:46:30.882-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projectoh'/><title type='text'>Progress on pre-alpha part 2</title><content type='html'>I was mainly working on Opengl renderer,the SDL blit speed is simply not good enough for 32bit color tiles,with 800x600/32x32 tiles and 256 Guichan image buttons,an optimized windows/linux release build linked against release version of SDL(provided by SDL site/distro,assuming they are O2) runs at approximately 10fps,while a debug one runs at about 5fps on windows/3fps on linux.&lt;br /&gt;   Now Opengl renderer is working and it has much better performance than SDL,but it will require a 3D card that supports 1.1 version of opengl.&lt;br /&gt;   Data loading via GM is sorta working,I can load info of different ship parts from .gm files.Current goal is to make a working ship sprite with 8 directions(45 degree per frame),so I could test the mobile object class I wrote earlier.Another goal is keeping both texture size and texture amount as low as possible,my goal is keeping total amount under 32MB.&lt;br /&gt;&lt;br /&gt;32MB = 32 * 1024 * 1024 B = 32 * 512 * 512 * 4 B = roughly 32 512x512 32bit bitmap's&lt;br /&gt;&lt;br /&gt;   Wow that's a lot,now I should really stop talking to myself on this lifeless blog and get back to coding. =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8497846259593927702-1558901648697132713?l=magickpanda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magickpanda.blogspot.com/feeds/1558901648697132713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8497846259593927702&amp;postID=1558901648697132713' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/1558901648697132713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/1558901648697132713'/><link rel='alternate' type='text/html' href='http://magickpanda.blogspot.com/2008/02/progress-on-pre-alpha-part-2.html' title='Progress on pre-alpha part 2'/><author><name>magick panda</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8497846259593927702.post-298914440707028621</id><published>2008-02-10T05:48:00.000-08:00</published><updated>2008-02-25T04:45:52.753-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projectoh'/><title type='text'>Progress on pre-alpha</title><content type='html'>I registered and created a project on sourceforge.net(and they approved my project,thanks sourceforge.net).I will import local svn repository on my harddisk into sourceforge.net as soon as test data is relatively complete and compile-able on both windows and linux.&lt;br /&gt; Actually I have been working on this project for more than half a year now,but due to other projects draining most of my spare time,it did not progress very well =(&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Renderer:&lt;/span&gt;&lt;br /&gt;  I wrote a simple tile drawer using SDL_Blit functions,but it's more 3d orientated than 2d orientated,so the performance is a bit unacceptable with 32bit per pixel.I might consider using OGL to do the pixel fill instead.&lt;br /&gt;&lt;br /&gt;Current renderer features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Draw background layer(draw an image before anything else)&lt;/li&gt;&lt;li&gt;Draw grids(a hack to draw 4 (1*TileWidth) rect to resemble grids around a tile)&lt;/li&gt;&lt;li&gt;Draw tiles&lt;/li&gt;&lt;li&gt;Per pixel scrolling&lt;/li&gt;&lt;/ul&gt;  Despite all the crappyness,I still considered my renderer an improvement compare to the original game's render,because the old one was 1994 and it did not even support per pixel scrolling if memory serves me right.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Input:&lt;/span&gt;&lt;br /&gt;Current Input system uses SDL input events,I added some basic features such as doubleclick and hold.&lt;br /&gt;&lt;br /&gt;Features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SDL input based input&lt;/li&gt;&lt;li&gt;double-click handling&lt;/li&gt;&lt;li&gt;hold handling with duration&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;GUI:&lt;/span&gt;&lt;br /&gt;GUI uses guichan library,which is probably the best and the most versatile GUI library available,its forums and its author are also very helpful,for a list of features it supports please refer to guichan's site: &lt;a href="http://guichan.sourceforge.net/"&gt;http://guichan.sourceforge.net&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Scripting:&lt;/span&gt;&lt;br /&gt;I use gamemonkey(GM) script,which is an underrated/unpopular scripting language designed specifically for games.GM supports universal table(any element in any table can be any data type) like LUA but GM is more powerful than LUA for games.&lt;br /&gt;&lt;br /&gt;Currently GM is only used for data loading and storage.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sound and Network:&lt;br /&gt;&lt;/span&gt;No time has been spent on them yet,they have the least priority in my todo list. =)&lt;br /&gt;&lt;br /&gt;That's all for now.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8497846259593927702-298914440707028621?l=magickpanda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magickpanda.blogspot.com/feeds/298914440707028621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8497846259593927702&amp;postID=298914440707028621' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/298914440707028621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/298914440707028621'/><link rel='alternate' type='text/html' href='http://magickpanda.blogspot.com/2008/02/progress-on-pre-alpha.html' title='Progress on pre-alpha'/><author><name>magick panda</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8497846259593927702.post-2368521750680055667</id><published>2008-02-04T06:35:00.000-08:00</published><updated>2008-02-04T07:25:37.863-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FAQ'/><title type='text'>Magick Panda' FAQ</title><content type='html'>Q:What is your hobby game project?&lt;br /&gt;A:It's an open-source clone of old school SNES game named &lt;span style="font-size:-1;"&gt;&lt;b&gt;Uncharted Waters&lt;/b&gt;: &lt;b&gt;New Horizons&lt;/b&gt; Also known as &lt;span style="font-weight: bold;"&gt;Daikoukai Jidai II&lt;/span&gt; in Japanese,firstly released in 1994,with a superb graphics which is utterly unacceptable for you modern peeps who are accustomed to state-of-art 3D graphics.&lt;br /&gt;&lt;br /&gt;Q:What is your game's goals?&lt;br /&gt;A:&lt;br /&gt;*Top-down plain 2D game 32bit graphics(this roughly quadruples the amount of pixels to fill compare to  8bit(256),so 3D acceleration might be needed)&lt;br /&gt;*All functionalities from original game&lt;br /&gt;*Small scale MP support 2-8 players&lt;br /&gt;&lt;br /&gt;Q:Ah you mentioned open-source,License?&lt;br /&gt;A:code and contents I created will be released under GNU GPL V3&lt;br /&gt;&lt;br /&gt;Will add more later&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8497846259593927702-2368521750680055667?l=magickpanda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magickpanda.blogspot.com/feeds/2368521750680055667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8497846259593927702&amp;postID=2368521750680055667' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/2368521750680055667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/2368521750680055667'/><link rel='alternate' type='text/html' href='http://magickpanda.blogspot.com/2008/02/magick-panda-faq.html' title='Magick Panda&apos; FAQ'/><author><name>magick panda</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8497846259593927702.post-4320252616967078800</id><published>2008-02-04T06:19:00.000-08:00</published><updated>2008-02-04T23:50:12.040-08:00</updated><title type='text'>Magick Panda's blog test</title><content type='html'>I am never a fan of blog hype nor am I like writing articles and shytz online like most others do,but I would like to open a blog for my hobby game project.&lt;br /&gt;&lt;br /&gt;This is a test post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8497846259593927702-4320252616967078800?l=magickpanda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magickpanda.blogspot.com/feeds/4320252616967078800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8497846259593927702&amp;postID=4320252616967078800' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/4320252616967078800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8497846259593927702/posts/default/4320252616967078800'/><link rel='alternate' type='text/html' href='http://magickpanda.blogspot.com/2008/02/magick-pandas-blog-test.html' title='Magick Panda&apos;s blog test'/><author><name>magick panda</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
