<?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-7359374204471886664</id><updated>2012-01-13T21:33:18.096+01:00</updated><category term='GunRunner'/><category term='Project Management'/><category term='VipeGames'/><category term='Tilemaps'/><category term='Sponsorship'/><category term='Nape'/><category term='Amber Moon'/><category term='VipeSites'/><category term='Molehill'/><category term='Blasting Forever'/><category term='VipeSoft'/><category term='WCK'/><category term='Dawn of the Hulker'/><category term='Mochi'/><category term='ShareThis'/><category term='Algorythm'/><category term='Starling'/><category term='Projects'/><category term='AddThis'/><category term='Speedtests'/><category term='Collaboration'/><category term='Tools'/><category term='founding'/><category term='physics'/><category term='Flash Rogue'/><category term='social media'/><category term='Line Of Sight'/><category term='ND2D'/><category term='Narayan'/><category term='Marshmellow'/><title type='text'>VipeSoft</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.vipesoft.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>TOdorus</name><uri>http://www.blogger.com/profile/06814322372324616407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_z9kVpvtYgO4/S3q1a-9fRBI/AAAAAAAAAAM/d7owvLGKcWc/S220/Vipe.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>22</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-165569794874161871</id><published>2012-01-08T14:55:00.001+01:00</published><updated>2012-01-13T20:59:39.770+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blasting Forever'/><category scheme='http://www.blogger.com/atom/ns#' term='VipeGames'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Collaboration'/><title type='text'>Creating tools for collaboration</title><content type='html'>For the realization of Blasting Forever I’m going to take a stab at collaboration. As a coder I can make this collaboration go much smoother by providing my fellow non-coder collaborators with tools, so they don’t have to see a line of code.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;If an artist on the team wants to create a new asset for example. I want him/her to be able to import a png, slap a polygon around it and see how it works in the engine. This not only speeds op the process, but it gives an artist immediate feedback on what works inside the game engine. No need to explain potential pitfalls as a coder, the artist can experience it firsthand and actually understand what’s wrong with the design from a gameplay perspective.&lt;br /&gt;&lt;br /&gt;A integral part of these tools is storing the new additions and loading in the new assets, settings, sounds made by the artists, game designer, composer, writer etc. The way I implemented it, is by storing a bytearray holding a configuration class with all the settings and assets. These is a nice generic solution as the only thing that needs to be changed for another collaboration project is the function that reads the file.&lt;br /&gt;&lt;br /&gt;For example, this is the class that reads and writes the config in Blasting Forever.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;private function loadconfig():void&lt;br /&gt;{&lt;br /&gt;     var loader:URLLoader = new URLLoader();&lt;br /&gt;     loader.dataFormat = URLLoaderDataFormat.BINARY;&lt;br /&gt;     loader.addEventListener(Event.COMPLETE, onComplete);&lt;br /&gt;     loader.addEventListener(IOErrorEvent.IO_ERROR, onIOerror);&lt;br /&gt;     loader.load(new URLRequest(Constants.CONFIGURL));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected function onIOerror(event:IOErrorEvent):void&lt;br /&gt;{&lt;br /&gt;     throw("couldn't load config file");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected function onComplete(event:Event):void&lt;br /&gt;{&lt;br /&gt;     var loader:URLLoader = URLLoader(event.target);&lt;br /&gt;     var bytes:ByteArray = ByteArray (loader.data);&lt;br /&gt;     var config:ConfigVO = ConfigVO(bytes.readObject());&lt;br /&gt;     &lt;br /&gt;     //Read the serialized data into objects with added functionality&lt;br /&gt;     var thrusters:Array = unserialize(config.thrusters, ThrusterVO);&lt;br /&gt;     var turrets:Array = unserialize(config.turrets, TurretVO);&lt;br /&gt;     var sprites:Array = unserialize(config.sprites, SpriteVO);&lt;br /&gt;     var components:Array = unserialize(config.components, ComponentVO);&lt;br /&gt;     var armors:Array = unserialize(config.armors, ArmorVO);&lt;br /&gt;     &lt;br /&gt;     //Store the data in a static manager class&lt;br /&gt;     Resources.allComponents = new ArrayCollection(components);&lt;br /&gt;     Resources.allSprites = sprites;&lt;br /&gt;     Resources.allThrusters = new ArrayCollection(thrusters);&lt;br /&gt;     Resources.allTurrets = new ArrayCollection(turrets);&lt;br /&gt;     Resources.allArmors = new ArrayCollection(armors);&lt;br /&gt;     &lt;br /&gt;     Resources.allParts = new ArrayCollection(unserialize(config.parts, PartVO));&lt;br /&gt;     all = Resources.allParts;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//Injects data into a target class and returns a list with the data injected &lt;br /&gt;protected function unserialize(list:Array, targetClass:Class):Array {&lt;br /&gt;     var result:Array = [];&lt;br /&gt;     var i:int;&lt;br /&gt;     var length:int = list.length;&lt;br /&gt;     var item:ISerialized&lt;br /&gt;     var instance:ISerializable;&lt;br /&gt;     for (i = 0; i &amp;lt; length; i++){&lt;br /&gt;          item = list[i];&lt;br /&gt;          instance = new targetClass() as ISerializable;&lt;br /&gt;          instance.unserialize(item);&lt;br /&gt;          result.push(instance);&lt;br /&gt;     }&lt;br /&gt;     return result;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public function save(list:Array):void {&lt;br /&gt;     &lt;br /&gt;     var config:ConfigVO = new ConfigVO();&lt;br /&gt;     &lt;br /&gt;     config.thrusters = serialize(Resources.allThrusters.source);&lt;br /&gt;     config.turrets = serialize(Resources.allTurrets.source);&lt;br /&gt;     config.sprites = serialize(Resources.allSprites);&lt;br /&gt;     &lt;br /&gt;     var componentList:Array = [];&lt;br /&gt;     var i:int;&lt;br /&gt;     var length:int = list.length;&lt;br /&gt;     var component:ComponentVO;&lt;br /&gt;     var part:PartVO;&lt;br /&gt;     for(i = 0; i &amp;lt; length; i++){&lt;br /&gt;          part = list[i];&lt;br /&gt;          part.component.id = i+1;&lt;br /&gt;          component = part.component;&lt;br /&gt;          componentList.push(component);&lt;br /&gt;     }&lt;br /&gt;     config.components = serialize(componentList);               &lt;br /&gt;     config.armors = serialize(Resources.allArmors.source);&lt;br /&gt;     &lt;br /&gt;     config.parts = serialize(list);&lt;br /&gt;     &lt;br /&gt;     var byteArray:ByteArray = new ByteArray();&lt;br /&gt;     byteArray.writeObject(config);&lt;br /&gt;     &lt;br /&gt;     fileRef.save(byteArray,"config.bf");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function serialize(serializables:Array):Array&lt;br /&gt;{&lt;br /&gt;     var result:Array = [];&lt;br /&gt;     var i:int;&lt;br /&gt;     var length:int = serializables.length;&lt;br /&gt;     var serializable:ISerializable;&lt;br /&gt;     for(i = 0; i &amp;lt; length; i++){&lt;br /&gt;          serializable = serializables[i];&lt;br /&gt;          result.push(serializable.serialize());&lt;br /&gt;     }&lt;br /&gt;     return result;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public function load():void {&lt;br /&gt;     fileRef.addEventListener(Event.SELECT, onSelect);&lt;br /&gt;     fileRef.browse();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected function onSelect(event:Event):void&lt;br /&gt;{&lt;br /&gt;     fileRef.removeEventListener(Event.SELECT, onSelect);&lt;br /&gt;     &lt;br /&gt;     fileRef.addEventListener(Event.COMPLETE, onLoad);&lt;br /&gt;     fileRef.load();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected function onLoad(event:Event):void&lt;br /&gt;{&lt;br /&gt;     fileRef.removeEventListener(Event.COMPLETE, onLoad);&lt;br /&gt;     var loaded:Array = fileRef.data.readObject() as Array;&lt;br /&gt;     all = new ArrayCollection(all.source.concat(loaded));&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-165569794874161871?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/165569794874161871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/165569794874161871'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2012/01/creating-tools-for-collaboration.html' title='Creating tools for collaboration'/><author><name>TOdorus</name><uri>http://www.blogger.com/profile/06814322372324616407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_z9kVpvtYgO4/S3q1a-9fRBI/AAAAAAAAAAM/d7owvLGKcWc/S220/Vipe.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-8958552497361081701</id><published>2011-11-06T23:06:00.000+01:00</published><updated>2012-01-13T21:01:13.373+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Nape'/><category scheme='http://www.blogger.com/atom/ns#' term='Blasting Forever'/><category scheme='http://www.blogger.com/atom/ns#' term='ND2D'/><category scheme='http://www.blogger.com/atom/ns#' term='VipeGames'/><category scheme='http://www.blogger.com/atom/ns#' term='GunRunner'/><category scheme='http://www.blogger.com/atom/ns#' term='Starling'/><category scheme='http://www.blogger.com/atom/ns#' term='Speedtests'/><category scheme='http://www.blogger.com/atom/ns#' term='Molehill'/><title type='text'>Blasting Forevers rendering</title><content type='html'>I found time to work on games again this weekend. Part of that was spent playing UFO: Enemy Unknown (I'll love that game to death) and part of that on how to use Molehill for rendering Blasting Forever. Oh didn't I mention Gunrunner has gotten it's true name? Let's start with that.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Blasting Forever&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Since I started conceptualizing Gunrunner, I was inspired by the Forever games, which are ,interestingly enough, made by different indies. Warning Forever (Hikoza'n-CHI X), Battleships Forever (Wyrdysm Games) and Captain Forever&amp;nbsp;(Farbs)&amp;nbsp;all feature spaceships made out of components, which can be shot off. Gunrunner also uses this concept and includes some Massively Singleplayer elements as well (thanks to&amp;nbsp;Anthony from Kongregate support for that one). Since this is a spiritual successor to these games I want to pay homage to them by naming my game Forever as well. I think this will attract the fans of the "series" and let others discover the Forever games, assuming it'll do well ;) So from now on, no more Gunrunner, but Blasting Forever.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Molehill 2D&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;Like I said, part of the weekend was spent looking how to use Molehill for rendering in Blasting Forever. After some research I found Starling and ND2D, which are frameworks that mimmick the AS3 displaylist API, so I wouldn't have to worry about figuring out how low-level rendering actually works. Pfew.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-om4S8XgoO00/TrcABf1mpAI/AAAAAAAAABA/gaJUCrA1q9A/s1600/MolehillSpeedtest.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://1.bp.blogspot.com/-om4S8XgoO00/TrcABf1mpAI/AAAAAAAAABA/gaJUCrA1q9A/s320/MolehillSpeedtest.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;I wrote a test with Nape, to get an idea what kind of performance I could get for Blasting Forever. I noticed that the two frameworks do work mostly the same way. The only thing I didn't like about initializing ND2D is that it relies on the AddedToStage Event to get the stage. I like Starlings way of letting the developer supply the stage a lot better. I'll have to look into both some more, as I haven't really compared their different features yet. I only wanted to quickly do a speed comparison.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;On my laptop I don't really see any differences in performance, what about you guys?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.todorus.com/gunrun/speedtests/starling/" target="_blank"&gt;Starling + Nape speed test&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.todorus.com/gunrun/speedtests/nd2d/" target="_blank"&gt;ND2D + Nape speed test&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-8958552497361081701?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/8958552497361081701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/8958552497361081701'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2011/11/blasting-forevers-rendering.html' title='Blasting Forevers rendering'/><author><name>VipeSoft</name><uri>http://www.blogger.com/profile/03814536265637517273</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-1QL6gJx_u7o/Trb1SiZJUaI/AAAAAAAAAAQ/DzY5BGcS8l8/s220/Vipe.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-om4S8XgoO00/TrcABf1mpAI/AAAAAAAAABA/gaJUCrA1q9A/s72-c/MolehillSpeedtest.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-6200074098389677057</id><published>2011-10-15T13:50:00.001+02:00</published><updated>2011-10-15T13:50:05.737+02:00</updated><title type='text'>Paying rent</title><content type='html'>&lt;p&gt;Fun experience this week. Since my previous employer ceased doing business I’m currently freelancing from me and my girls new appartment. Sadly enough, it apparently takes weeks to provide an internet connection to a home with all the infrastructure. Go figure. Since not having a decent (or stable) internet connection can be a bit of a drag when you’re doing webdevelopment, so I considered my options for getting some temporary office space. &lt;/p&gt;  &lt;p&gt;Well, last time I was &lt;a href="http://www.quince.nl/" target="_blank"&gt;Quince&lt;/a&gt; (the company my previous employer rented office space from), the joke was made that a case of beer would suffice as rent. Word of advice: don’t make those kind of jokes around someone like me ;)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-8M6-vcjygVU/TplzalZrW8I/AAAAAAAAAGM/gqNZIukES7s/s1600-h/CaseInPoint%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Case in point" border="0" alt="CaseInPoint" src="http://lh3.ggpht.com/-PncNparV8eg/TplzbD2RyTI/AAAAAAAAAGU/r6rblLTlSD8/CaseInPoint_thumb%25255B1%25255D.jpg?imgmax=800" width="240" height="180" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It was a nice experience: dropping a case of beer on someone’s desk and placing your laptop on another. Did some work, had a few good chats while not bieng associated with my former employer. Fun times.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-6200074098389677057?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/6200074098389677057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/6200074098389677057'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2011/10/paying-rent.html' title='Paying rent'/><author><name>TOdorus</name><uri>http://www.blogger.com/profile/06814322372324616407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_z9kVpvtYgO4/S3q1a-9fRBI/AAAAAAAAAAM/d7owvLGKcWc/S220/Vipe.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-PncNparV8eg/TplzbD2RyTI/AAAAAAAAAGU/r6rblLTlSD8/s72-c/CaseInPoint_thumb%25255B1%25255D.jpg?imgmax=800' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-6340242937566854742</id><published>2011-10-13T03:41:00.001+02:00</published><updated>2012-01-13T21:01:24.506+01:00</updated><title type='text'>PeterKerris.nl is live</title><content type='html'>&lt;a href="http://www.peterkerris.nl/" target="_blank" title="Official site of Peter Kerris"&gt;&lt;img alt="PeterKerris" border="0" height="166" src="http://lh3.ggpht.com/-eUAnJ79ZPBg/TpZBQh9GVrI/AAAAAAAAAFk/N4Jl6viG-ck/PeterKerris%25255B5%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="PeterKerris" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;A while ago a good friend of mine asked me if I could make him a website. I’m more of a developer, but hey: “Challenge accepted!”. I took my time for it and experimented with it. I learned some J2EE, Spring and some Linux administration in the process. &lt;a href="http://www.peterkerris.nl/" target="_blank" title="Official site of Peter Kerris"&gt;The site&lt;/a&gt; went live last week and I’m quite pleased how it turned out. Now for a post mortem.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;&lt;/h4&gt;&lt;h4&gt;Concept&lt;/h4&gt;Now my friend, Peter Kerris, is a young and upcoming Dutch politian and uses social media &lt;em&gt;a lot&lt;/em&gt;. I wanted the site to resonate that, as I think those are the traits that make him stand out of the politician crowd.&lt;br /&gt;First the idea of a channel came to mind. Somewhere where all media produced by Peter Kerris would be gathered and displayed in a multimedia’ish way. When looking around the web for inspiration I came about two beautifull sites: &lt;a href="http://thewhalehunt.org/whalehunt.html" target="_blank" title="The Whale Hunt"&gt;The Whale Hunt&lt;/a&gt; and &lt;a href="http://summitonthesummit.com/climb.html#/intro" target="_blank" title="Summit on the Summit"&gt;Summit on the Summit&lt;/a&gt;.&lt;br /&gt;&lt;a href="http://thewhalehunt.org/whalehunt.html" target="_blank" title="The Whale Hunt"&gt;&lt;img alt="TheWhaleHunt" border="0" height="164" src="http://lh6.ggpht.com/-jPQHYdortPk/TpZBYolBdLI/AAAAAAAAAFs/O0Tv-EMu58Y/TheWhaleHunt%25255B6%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="TheWhaleHunt" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://summitonthesummit.com/climb.html#" target="_blank" title="Summit on the Summit"&gt;&lt;img alt="SummitOnTheSummit" border="0" height="118" src="http://lh4.ggpht.com/-061HUuXGlwk/TpZBdDIB_BI/AAAAAAAAAF0/J6O6gIB7ArA/SummitOnTheSummit%25255B8%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="SummitOnTheSummit" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;Both featured a really nice way to display postings of media on a timeline. I had found my concept!&lt;br /&gt;&lt;h4&gt;Development&lt;/h4&gt;Now that I had my concept I could start on development. I initially wanted to do everything client side and use the restfull api’s of the big social media to get the data. This worked initially during testing and I could develop the client. After experimenting with the twitter feed, it became apparent to me, that Twitter will only return the last 200 tweets, even when more are requested. To circumvent this, I had to store the tweets somewhere and serve them as the site was visited. I had to build my first backend ever.&lt;br /&gt;Now my colleagues used Spring with BlazeDS to build backends for Flash clients. Now some of you who may have worked with Spring may already know this, but that piece of framework has got one of the steepest learning curves I’ve ever seen. Configuring that is hell. No feedback what’s wrong in your configuration until you do it completely right. And Spring is all about the configuration.&lt;br /&gt;When I tackled the initial setup and got my services up and running, the next step was learning JSP and configuring this in Spring, to be able to serve static content to sites like Google and Facebook. This time I was a little more experienced with Spring and the configuration only took me one evening to figure out. You probably won’t notice it until you turn off javascript, but the server serves the static content underneath the Flash movie. Since Google won’t index Flash movies it’ll only see the static content provided by the JSP. Another bonus was that these pages could be used to link to in Facebook posts. As Facebook looks up metadata from the url you give to display in the post, it needs static content. &lt;br /&gt;&lt;h4&gt;&lt;/h4&gt;&lt;h4&gt;Getting it online&lt;/h4&gt;&lt;a href="http://lh4.ggpht.com/-alimhY5emdU/TpZBmLOVGDI/AAAAAAAAAF8/185xXzho9UQ/s1600-h/glassfish%25255B6%25255D.png"&gt;&lt;img align="right" alt="glassfish" border="0" height="97" src="http://lh3.ggpht.com/-HAnIiPTKGUM/TpZBqMOc0VI/AAAAAAAAAGE/0g9CGlIwnto/glassfish_thumb%25255B5%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; float: right; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="glassfish" width="180" /&gt;&lt;/a&gt;&lt;br /&gt;Another new for me: maintaining a server. Never done it and I’m still a pretty novice user. During the development phase I found Glassfish a really easy to use J2EE server. I know Apache is more popular, but Glassfish instantly worked for me and came with a graphic administration tool to boot. N00bs like me are suckers for that kind of thing.&lt;br /&gt;Luckily I found &lt;a href="http://www.nabisoft.com/tutorials/glassfish/installing-glassfish-311-on-ubuntu" target="_blank" title="Installing Glassfish 3.1.1 on Ubuntu 10.04 LTS"&gt;a very thorough tutorial&lt;/a&gt; and a pretty cheap (and getting cheaper still) &lt;a href="http://www.xlshosting.nl/" target="_blank" title="XLS hosting"&gt;vps hosting company&lt;/a&gt;. Now that my server was set up, I could look at how virtual hosting would work with Glassfish. It took me about a week to figure out, as it just wouldn’t work on my machine the first try. I don’t know why it initially wouldn’t work, but the process is really simple. Just create a new virtual server, select which webapplication it uses and presto.&lt;br /&gt;&lt;h4&gt;Reception&lt;/h4&gt;I believe the most coined term is: “Hip”. Now I don’t know if “hip” still is hip in the rest of the world, but it was exactly what I was going for in Dutch. So in short: this developer is damn proud of his work.&lt;br /&gt;&lt;h4&gt;In the end&lt;/h4&gt;I learned a lot from this project. I’ve always worked on the front-end side of things and a project of this complexity was a perfect mixture of difficulty and novelty to keep me challenged throughout the project. I’m really looking forward toward doing a next site front- to backend. &lt;br /&gt;I’m hoping to set my teeth in some Html5 as I’ve had very little experience with Html at all. And why not throw in iPad compatibility while we’re at it. If Peter’s willing I already have a concept in mind for the next version of his site, so who knows: maybe next year you’ll experience this site in full blown Html5.&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-6340242937566854742?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/6340242937566854742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/6340242937566854742'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2011/10/peterkerrisnl-is-live.html' title='PeterKerris.nl is live'/><author><name>TOdorus</name><uri>http://www.blogger.com/profile/06814322372324616407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_z9kVpvtYgO4/S3q1a-9fRBI/AAAAAAAAAAM/d7owvLGKcWc/S220/Vipe.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-eUAnJ79ZPBg/TpZBQh9GVrI/AAAAAAAAAFk/N4Jl6viG-ck/s72-c/PeterKerris%25255B5%25255D.png?imgmax=800' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-4472061900205141593</id><published>2011-08-21T17:16:00.000+02:00</published><updated>2012-01-13T21:01:36.366+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VipeGames'/><category scheme='http://www.blogger.com/atom/ns#' term='GunRunner'/><category scheme='http://www.blogger.com/atom/ns#' term='Sponsorship'/><category scheme='http://www.blogger.com/atom/ns#' term='Project Management'/><title type='text'>GunRunner: an experiment in UGC and phased release</title><content type='html'>&lt;br /&gt;You know that feeling that you only think of huge projects you want to make, but you never actually get to finish them? I was telling my girlfriend about my latest geeky endeavor GunRunner(working title) and she replied:"But what about that other project you were working on?" Good point. Luckily this time I had given that some thought and could give her a decent reply. My plan is to build the game in phases and present these to the public. A sort of open beta thing. The reason I can do this is because the game is designed around user generated content.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;User Generated Content&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;The idea started out with me thinking of a topdown scrolling shooter in which your home planet is bieng attacked by a never ending stream of enemy ships. The character the player controls know his cause is doomed and decides to give them hell before he has to go. The dynamic here is that the ships close to the players planet are the smaller/weaker ships of the fleet, but as he moves away from his planet he's going to meet the heavy hitters of the fleet that are still making their way towards the planet.&lt;br /&gt;&lt;br /&gt;Since the difficulty would ramp up with distance from the home planet and time (to simulate the heavy ships getting closer) I needed a way to let the game spawn ships with a large variety of difficulty. Since I've been experimenting with Java/MySQL backends I saw a solution in a database of ships, which would be loaded in as the player would continue to progress during it's run. In comes the user generated content. I was inspired by Spore here, who made a huge range of creatures, buildings and whatnot available by letting the users design them. The same with Little Big Planet. If I make an editor for users to design and upload their ships I can have a huge range of enemy ships available, plus I have the creativity of a community contributing to the project instead of just me or a partner.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Release in phases&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;I want to go the Spore route and make the editor available first to let users play with it and upload their designs. I the meantime I can create a versus gamemode which puts two players' designs against each other. In this mode players can duke it out with other players designs and see who is the victor in the hope to finetune their designs. The results this versus mode generates can then be used to gauge the rating of the designs by using one of the rating systems used for chessplayers. So while I'm building the survival mode I set out to build in the first place, the database can fill up with battle tested designs. This allows me to stay creative and finish the game in short sprints instead of just one long sprint.&lt;br /&gt;&lt;br /&gt;This method of releasing your game may also offer other advantages other than keeping the project fresh and organized. It also gives you an insight in how the game will be recieved and how many people are awaiting the release of a new phase. This gives you a strong argument when approaching a potential sponsor, since you can show statistics on the size and activity of the community. There is a caveat to this logic though. If you don't keep the momentum going the community may lose interest and leave before you can finish your last phase. This means that a sponsorship negotiation shouldn't take too long and you may find yourself forced to release before you can secure a sponsorship.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Progress&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;At the moment I'm working on the first phase: the editor. It's starting to look nice and I like the rate at which I'm adding functionality. I'm thinking about going to look for an artist to help me with some initial content. I believe initial content is a big factor in the succes of a UGC project, as this is the bar the first submitters will hold themselves to. A high bar will show that the project is a serious one. In addition it will motivate people to try to adhere to the same standard, providing a high bar for submitters yet to come.&lt;br /&gt;&lt;br /&gt;I'll keep you guys posted on my progress.&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-4472061900205141593?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/4472061900205141593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/4472061900205141593'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2011/08/gunrunner-experiment-in-ugc-and-phased.html' title='GunRunner: an experiment in UGC and phased release'/><author><name>TOdorus</name><uri>http://www.blogger.com/profile/06814322372324616407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_z9kVpvtYgO4/S3q1a-9fRBI/AAAAAAAAAAM/d7owvLGKcWc/S220/Vipe.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-6289298772800449186</id><published>2011-07-21T17:12:00.009+02:00</published><updated>2012-01-13T21:01:49.783+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VipeSites'/><category scheme='http://www.blogger.com/atom/ns#' term='social media'/><category scheme='http://www.blogger.com/atom/ns#' term='ShareThis'/><category scheme='http://www.blogger.com/atom/ns#' term='AddThis'/><title type='text'>AS3 and social media</title><content type='html'>I'm busy with a Flash site which gets 99.99% of it's content from social media. The experience so far is really challenging and rewarding as I haven't had a real chance to work with social media yet. For me this naturally brought up that sharing should be included in the site's design. Now most of the Facebook, Twitter etc widgets use javascript and are extremely well protected to avoid abuse. I understand completely, but dropping a javascript button in a stylized Flash experience (site or game) is a pretty big 'no no' for me. The alternative is writing against the avaible API's of the social media. Now there are social media sites popping up every week so that means writing agains possibly a lot of API's. In addition: having to keep up with API changes of social media, which can be pretty extreme, isn't really my favorite passtime.&lt;br /&gt;&lt;br /&gt;I was looking for a solution for this and came across the&amp;nbsp;&lt;a href="http://sharethis.com/"&gt;ShareThis&lt;/a&gt; and &lt;a href="http://www.addthis.com/"&gt;AddThis&lt;/a&gt;&amp;nbsp;services. Both offer a javascript button and an endpoint to call the service. As I said a javascript button wasn't really an option, so I looked into the endpoints of ShareThis and AddThis.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;ShareThis&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;After fumbling around with ShareThis I found that the service isn't matured yet. I tried the &lt;a href="http://help.sharethis.com/api/sharing-api"&gt;ShareThis endpoint&lt;/a&gt; with Facebook as a casestudy and stopped before I even moved on to Twitter. First there are some small bugs in getting setup (I happened to run into pretty much everyone) and the endpoint solution uses a Facebook app to post to someone's wall. This isn't so bad but it asks for A LOT of permissions, when I only want to post to a wall. Also it uses the legacy API of Facebook, which Facebook is phasing out as we speak, which doesn't offer a lot for long term support of the endpoint solution of ShareThis.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;AddThis&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;After taking about a week to get the endpoint of ShareThis to actually reply a void result instead of an error,&amp;nbsp;I moved on to AddThis. For me it took about 10 minutes to look through their &lt;a href="http://www.addthis.com/help/sharing-api"&gt;endpoint documentation&lt;/a&gt; and get a post out to Facebook. The only break in experience is that another page opens with the Facebook sharing module. I tried the same with Twitter and presto, it works instantly. You even can create a template for Twitter with automated url shortening. Now this is what I call an API: give the developer a few hooks to work with and hide all the complexities.&lt;br /&gt;&lt;br /&gt;It is probably clear by now that I've intregated AddThis into the site. If you'd like to get started yourself, AddThis has a &lt;a href="http://www.addthis.com/help/sharing-api#from_flash"&gt;section for Flash developers&lt;/a&gt;, which explains all in some detail. For those of you less well versed in reading API documentation but do understand AS3, here's my AddThis class I use in the site.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;package vipesites.addthis &lt;br /&gt;{&lt;br /&gt; import flash.events.Event;&lt;br /&gt; import flash.net.navigateToURL;&lt;br /&gt; import flash.net.URLRequest;&lt;br /&gt; import flash.net.URLRequestMethod;&lt;br /&gt; import flash.net.URLVariables;&lt;br /&gt; import flash.text.TextField;&lt;br /&gt; /**&lt;br /&gt;  * @author Todorus  &lt;br /&gt;  * www.vipesoft.com&lt;br /&gt;  */&lt;br /&gt; public class AddThisManager &lt;br /&gt; {&lt;br /&gt;  private static var _logger:TextField;&lt;br /&gt;  &lt;br /&gt;  public function AddThisManager() &lt;br /&gt;  {&lt;br /&gt;   &lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  static public function share(service:String, url:String, title:String = null, description:String = null, template:String = null, pubid:String = null):void {&lt;br /&gt;   var requestUrl:String = "http://api.addthis.com/oexchange/0.8/forward/" + service + "/offer"&lt;br /&gt;   var data:URLVariables = new URLVariables();&lt;br /&gt;   data.url = url;&lt;br /&gt;   if (title) data.title = title;&lt;br /&gt;   if (description) data.description = description;&lt;br /&gt;   if (template) data.template = template;&lt;br /&gt;   if (pubid) data.pubid = pubid;&lt;br /&gt;   &lt;br /&gt;   var request:URLRequest = new URLRequest(requestUrl);&lt;br /&gt;   request.method = URLRequestMethod.POST; &lt;br /&gt;   request.data = data;&lt;br /&gt;   &lt;br /&gt;   navigateToURL(request, "_blank");&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  static private function log(val:*):void {&lt;br /&gt;   if (logger) logger.appendText(String(val));&lt;br /&gt;   trace(val)&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  static public function get logger():TextField &lt;br /&gt;  {&lt;br /&gt;   return _logger;&lt;br /&gt;   logger.wordWrap = true;&lt;br /&gt;   logger.multiline = true;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  static public function set logger(value:TextField):void &lt;br /&gt;  {&lt;br /&gt;   _logger = value;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-6289298772800449186?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/6289298772800449186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/6289298772800449186'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2011/07/as3-and-social-media.html' title='AS3 and social media'/><author><name>TOdorus</name><uri>http://www.blogger.com/profile/06814322372324616407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_z9kVpvtYgO4/S3q1a-9fRBI/AAAAAAAAAAM/d7owvLGKcWc/S220/Vipe.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-235107144116820857</id><published>2011-07-07T01:42:00.001+02:00</published><updated>2012-01-13T21:02:06.219+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VipeSoft'/><title type='text'>VipeSoft &gt; VipeGames</title><content type='html'>&lt;br /&gt;&lt;div style="margin-bottom: 0cm;"&gt;I've been pretty much inactive at thisblog. A big part of the reason is that I wanted this blog to beexclusively for my hobby projects, which consisted of games at thetime. I've developed from a hobbyist Flash game maker to aprofesional webdeveloper. Naturally my available time and interestshave shifted. I felt I could write less and less at this blog, asthis blog was about games.&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;That's why I decided to switch thesubject of this blog from my game projects to... well any project andsubject related to development that happens to catch my interest. Soyou'll be reading about web development and gui more from now on.Let's not totally exclude games. VipeGames is still here, it has justbecome part of something bigger. VipeSoft.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-235107144116820857?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/235107144116820857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/235107144116820857'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2011/07/vipesoft-vipegames.html' title='VipeSoft &gt; VipeGames'/><author><name>TOdorus</name><uri>http://www.blogger.com/profile/06814322372324616407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_z9kVpvtYgO4/S3q1a-9fRBI/AAAAAAAAAAM/d7owvLGKcWc/S220/Vipe.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-8522859162895940771</id><published>2011-01-24T02:16:00.001+01:00</published><updated>2012-01-13T21:02:39.820+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Nape'/><category scheme='http://www.blogger.com/atom/ns#' term='VipeGames'/><category scheme='http://www.blogger.com/atom/ns#' term='physics'/><title type='text'>Nape Drawing Class</title><content type='html'>As my girlfriend needed to work on her report, she left me to amuse myself this sunday evening. The geek that I am, I decided to play with &lt;a href="http://code.google.com/p/nape/"&gt;Nape&lt;/a&gt;. Nape is a physics engine, written in Haxe (but SWC's are also available), by DeltaLuca. Since my &lt;a href="http://www.vipegames.com/2011/01/wck-minus-ck.html"&gt;WCK post&lt;/a&gt; last week, people have been pointing me towards Nape and I'm quite impressed with the demo's I've seen. In the everlasting search for the faster physics engine, I gave it a spin.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://code.google.com/p/nape/"&gt;&lt;img border="0" height="225" src="http://2.bp.blogspot.com/_z9kVpvtYgO4/TTzRzkff83I/AAAAAAAAAFI/Rh1j1RvMAfI/s320/logoaoj.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;The playing stopped real fast however, when I found out that Nape doesn't have a standard drawing class, which draws what's going on. Instead you need to assign a Sprite to a Shape. I can see how this benefits the quick creation of game assets, but it makes debugging quite cumbersome. Not to mention what a lot of Sprites on stage would do to performance. So instead of playing with the engine, I've spent my evening coding a simple drawing class and left my girlfriend to fall vast asleep.&lt;br /&gt;&lt;br /&gt;So for anyone wanting to enjoy a sunday evening with his/her girlfriend, here is the &lt;a href="https://sites.google.com/site/vipegames/NapeDraw.zip?attredirects=0&amp;amp;d=1"&gt;NapeDraw class&lt;/a&gt;. It only draws shapes at the moment and it hasn't been thoroughly tested. If you decide to use it, please leave some feedback, so I can develop it further.&lt;br /&gt;&lt;br /&gt;26 jan Small update:&lt;br /&gt;Made a few optimizations after bieng notified by DeltaLuca of some properties to avoid downcasting.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://sites.google.com/site/vipegames/NapeDraw.zip?attredirects=0&amp;amp;d=1"&gt;NapeDraw class&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-8522859162895940771?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/8522859162895940771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/8522859162895940771'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2011/01/nape-drawing-class.html' title='Nape Drawing Class'/><author><name>TOdorus</name><uri>http://www.blogger.com/profile/06814322372324616407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_z9kVpvtYgO4/S3q1a-9fRBI/AAAAAAAAAAM/d7owvLGKcWc/S220/Vipe.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_z9kVpvtYgO4/TTzRzkff83I/AAAAAAAAAFI/Rh1j1RvMAfI/s72-c/logoaoj.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-5324155143401509512</id><published>2011-01-16T18:40:00.042+01:00</published><updated>2012-01-13T21:02:58.823+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VipeGames'/><category scheme='http://www.blogger.com/atom/ns#' term='WCK'/><category scheme='http://www.blogger.com/atom/ns#' term='physics'/><title type='text'>WCK minus the CK</title><content type='html'>The moment I read about the &lt;a href="http://www.sideroller.com/wck/"&gt;World Creation Kit (WCK) by Jesse Sternberg&lt;/a&gt; I wanted to use it for my projects. It is a Alchemy port of Box2D with component wrappers, so you can create a world in the Flash IDE. While everybody seems overly exited about creating and editing worlds in Flash, the thing that interested me was the Alchemy port,&amp;nbsp;which is Box2D on 'roids. It would mean my days optimizing my own 2D physics engine(s) are over, which is something for me to get exited about.&lt;br /&gt;&lt;br /&gt;Now all the examples talk about using the&amp;nbsp;Flash&amp;nbsp;to set things up and use the&amp;nbsp;Flash&amp;nbsp;to edit. Now I'm a FlashDevelop guy, so I wanted to know, what files exactly are needed to run just the Alchemy port. It turned out to be a little simpler as WCK's file structure suggests.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;Adding Library&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_z9kVpvtYgO4/TTMpQwUfNFI/AAAAAAAAAFE/Vdf9dhHSWBU/s1600/WCKrar.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="290" src="http://4.bp.blogspot.com/_z9kVpvtYgO4/TTMpQwUfNFI/AAAAAAAAAFE/Vdf9dhHSWBU/s400/WCKrar.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;When you download and open the rar file from the &lt;a href="https://github.com/jesses/wck"&gt;git repository&lt;/a&gt;, you'll see a lot more folders than the good old Box2D folder. There are demo files and a lot of wrapper classes to make WCK work in&amp;nbsp;Flash. The only folders you'll need for the Alchemy port are Box2DAS and Box2D, so just extract these to your own libraries directory.&lt;br /&gt;&lt;br /&gt;Now create a new FlashDevelop project and add the folders to your classpath. Finally you'll need to add the Box2DAS\Box2D.swc to your library as well and you've got the Alchemy port available in your project.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Contact listening&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;In Box2D all contacts were automaticly listened to. You could tap into this by extending the b2ContactListener class. In the Alchemy port this works a little differently. First you need to activate listening on a fixture by setting the contact listening flags to true.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;fixture.m_reportBeginContact = true;&lt;br /&gt;fixture.m_reportEndContact = true;&lt;br /&gt;fixture.m_reportPreSolve = true;&lt;br /&gt;fixture.m_reportPostSolve = true;&lt;/pre&gt;Now the fixture will dispatch ContactEvents which you can listen to, like you would to any other event.&lt;br /&gt;&lt;pre class="brush: java"&gt;  private function onBeginContact(e:ContactEvent):void &lt;br /&gt;  {&lt;br /&gt;   trace("begin contact");&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  private function onEndContact(e:ContactEvent):void &lt;br /&gt;  {&lt;br /&gt;   trace("end contact");&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  private function onPreSolve(e:ContactEvent):void &lt;br /&gt;  {&lt;br /&gt;   trace("pre solve");&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  private function onPostSolve(e:ContactEvent):void &lt;br /&gt;  {&lt;br /&gt;   trace("post solve");&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Putting it all together&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;For anyone interested I've got a hello world example, which creates a world, a simple box and a platform to see all of this in action.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://sites.google.com/site/vipegames/Main.as?attredirects=0&amp;amp;d=1"&gt;Hello World example&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-5324155143401509512?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/5324155143401509512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/5324155143401509512'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2011/01/wck-minus-ck.html' title='WCK minus the CK'/><author><name>TOdorus</name><uri>http://www.blogger.com/profile/06814322372324616407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_z9kVpvtYgO4/S3q1a-9fRBI/AAAAAAAAAAM/d7owvLGKcWc/S220/Vipe.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_z9kVpvtYgO4/TTMpQwUfNFI/AAAAAAAAAFE/Vdf9dhHSWBU/s72-c/WCKrar.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-513173331799750355</id><published>2011-01-14T00:46:00.002+01:00</published><updated>2012-01-13T21:03:09.558+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VipeGames'/><category scheme='http://www.blogger.com/atom/ns#' term='Dawn of the Hulker'/><title type='text'>Dawn of the Hulker 2: Setting</title><content type='html'>The few people that have played Dawn of the Hulker (DotH) seem to be &lt;a href="http://www.kongregate.com/games/TOdorus/dawn-of-the-hulker"&gt;calling out for a sequel&lt;/a&gt; more and more. Probably because it is out for quite a while now and it still hasn't got a sequel. The story is also far from finished, as the game tells about a race preparing for a prophecy of an upcoming armageddon. This has me thinking about the sequel and scribbling down ideas now and then, on both setting and gameplay mechanics.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Setting&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Armageddon is still to come. The first game was about (natural) selection. The goal was to find the seeds to grow a new galactic order, strong enough to resist the oncoming armageddon. The second game will thus be about building this order. My problem is, how do I fit this in a game which mechanics are based on conflict? The answer so far is "protection", although I'm not quite happy with it.&lt;br /&gt;&lt;br /&gt;The original Hulker, which was the player character in DotH, has become the new Great Prophet, guiding the new order with his power of foresight. However when a new order grows there will be dissedents. These are in form of other prophets challenging the visions and leadership of the Great Prophet. A new cult grows around these renegade prophets and the order is no longer the only power in the galaxy.&lt;br /&gt;&lt;br /&gt;Naturally dissedents invoke response from the powers that be. The player is part of the army that makes up this response. He starts out small, but can grow in rank (can command more ships) and funding (can buy better ship parts), as he is sent out on several campaign across multiple sectors of the galaxy.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That's it for now. I'll jolt down some more notes and get back to you on DotH2 when I get a better idea of the general gameplay mechanics.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-513173331799750355?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/513173331799750355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/513173331799750355'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2011/01/dawn-of-hulker-2-setting.html' title='Dawn of the Hulker 2: Setting'/><author><name>TOdorus</name><uri>http://www.blogger.com/profile/06814322372324616407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_z9kVpvtYgO4/S3q1a-9fRBI/AAAAAAAAAAM/d7owvLGKcWc/S220/Vipe.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-4312882699649402147</id><published>2010-09-11T04:25:00.006+02:00</published><updated>2011-07-05T21:53:00.201+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VipeGames'/><category scheme='http://www.blogger.com/atom/ns#' term='Marshmellow'/><title type='text'>The long overdue update</title><content type='html'>Now and again I've found some time to work on Marshmellow. I've done some major overhauls too. I've optimized the map format by going from 2D arrays to 1D vectors. The speed increase is... well huge. The game still is quite a resourcehog, but if Starcraft 2 can sell that well, than I guess it's acceptable. The other big change is, that I've finally put in a decent trigger system. (So decent I'm going to use it for all my games from now on. It lacks some optimizations I still want to make before posting it though)&lt;br /&gt;&lt;br /&gt;All these upgrades made sure the editor is far from compatible with the mapformat, so I'll have to rewrite about half of it again. The upside is, that I'll probably be able to include a triggereditor into the leveleditor. This means a lot less time coding -&amp;gt; compiling -&amp;gt; testing levels for me. It also means players can write their own missions. Now that wouldn't be huge, it would be legen... dary.&lt;br /&gt;&lt;br /&gt;But really I shouldn't be uploading this. No really: it's got glitches all over the place and one non-fatal null object bug. On the other hand: I won't be updating untill I can get the editor running properly and I can let people try out creating levels. Than again: I'm quite sleepy over here, so my judgement may prove to bite me in the ass, when I wake up and realize what I've done.&lt;br /&gt;&lt;br /&gt;Soooh without further ado: &lt;a href="http://home.planet.nl/~bogaa096/Marshmellow/Marshmellow.html"&gt;Marshmellow as it is now&lt;/a&gt;.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Click Campaign.&lt;/li&gt;&lt;li&gt;Double click on a Save slot.&lt;/li&gt;&lt;li&gt;Enjoy.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-4312882699649402147?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/4312882699649402147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/4312882699649402147'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2010/09/long-overdue-update.html' title='The long overdue update'/><author><name>TOdorus</name><uri>http://www.blogger.com/profile/06814322372324616407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_z9kVpvtYgO4/S3q1a-9fRBI/AAAAAAAAAAM/d7owvLGKcWc/S220/Vipe.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-6774374249167051891</id><published>2010-05-16T19:04:00.007+02:00</published><updated>2012-01-13T21:03:32.254+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VipeGames'/><category scheme='http://www.blogger.com/atom/ns#' term='Marshmellow'/><title type='text'>Alive and teasing</title><content type='html'>&lt;em&gt;This week is a bit more of a polisihing week, to get it ready for the harsher beta crowd&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;And then you land a job and all deadlines are off. Not to dispair: I do find time to work on Vipe Games now and then and Marshmellow is definitly pushing forward. I don't have a new build to show as I want to finish some polish first. The next build you probably will see is the beta, so this post is more of a teaser.&lt;br /&gt;&lt;br /&gt;BUT!&lt;br /&gt;&lt;br /&gt;I found out that I can easily add a RSS feed to my blog, so subscribe to it and you can hear about it the very day it goes live. (I'm really starting to doubt the service Blogger is providing by the follower option)&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;strong&gt;Characters&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;I found the opposition not to be varied enough. Enemies can wield all weapontypes, but still, that doesn't really make the game that vivid. I needed some inspiration! The game I mostly compare Marshmellow to nowadays is &lt;a href="http://en.wikipedia.org/wiki/Crusader_(game_series)"&gt;Crusader&lt;/a&gt;.  Looking at Crusaders main fansite &lt;a href="http://www.cyberionsystems.com/echosector/"&gt;Echo Sector&lt;/a&gt; (still active!), I found lots. Two new enemies are already in the game: the Android and the Scout. The Android can wield a machinegun or the new grenadelauncher. The Scout can wield the new sniper rifle or the new heavy submachinegun. It's all about giving the characters more "character". Next up are the allied and enemy commander characters.&lt;br /&gt;&lt;br /&gt;And the downside: I haven't found time to properly adjust my A* routine to handle units that are bigger than a tile. I know where the problem is and how to solve it, but it takes the debugger to do and that costs time. The only unit in the game bigger than a tile is the Spider tank. I'd love to have it in the game, but I'm not sure if it will make it.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size: 130%;"&gt;Weapons&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;I also found myself running out of ammo in the middle of firefights. Since you could carry only one weapon, you used to run like hell to find a drop of a dead enemy. The solution: you can now carry two weapons (one active one spare, no dual-wielding unfortunatly). Modern Warfare style.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size: 130%;"&gt;Missions&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;I see that the alpha on this site is really getting old. Thanks to this &lt;a href="http://active.tutsplus.com/tutorials/actionscript/thinking-in-commands-part-1-of-2/"&gt;great tutorial on the command design&lt;/a&gt; I've implemented a framework for triggers, so I now have some pretty solid control over the objectives and events in the game. I'm not really planning very intracite mission designs though, as the game really should be about emergent behavior, but it's nice to have the control to add variety to the rules of the game.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That was just a tease to keep you guys interested. I hope you don't have to wait too long.&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-6774374249167051891?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/6774374249167051891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/6774374249167051891'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2010/05/alive-and-teasing.html' title='Alive and teasing'/><author><name>TOdorus</name><uri>http://www.blogger.com/profile/06814322372324616407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_z9kVpvtYgO4/S3q1a-9fRBI/AAAAAAAAAAM/d7owvLGKcWc/S220/Vipe.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-2397065170254900766</id><published>2010-03-29T01:14:00.017+02:00</published><updated>2011-07-05T21:53:35.350+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VipeGames'/><category scheme='http://www.blogger.com/atom/ns#' term='Marshmellow'/><title type='text'>Marshmellows first milestone</title><content type='html'>&lt;ul&gt;&lt;li&gt;AI overhaul&lt;/li&gt;&lt;li&gt;Importing/Exporting levels&lt;/li&gt;&lt;li&gt;Scenario Menu&lt;/li&gt;&lt;/ul&gt;Allright first milestone! I didn't upload it until now because the AI overhaul for some reason makes the flag capturing AI a bit expensive. So expensive that it interferes with the mouse-input, but not with the game mechanics. You'd expect it to be the other way around, so that's a liiiiiittle bit weird. I was planning on rewriting it anyway, so it's all the more motivation. I actually wanted to fix it today, but last nights party carried over into today. Not to keep you wanting, here's the upload with all the features in it, albeit a bit unpolished.&lt;br /&gt;This week is a bit more of a polishing week, to get it ready for the harsher beta crowd.&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-2397065170254900766?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/2397065170254900766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/2397065170254900766'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2010/03/marshmellows-first-milestone.html' title='Marshmellows first milestone'/><author><name>TOdorus</name><uri>http://www.blogger.com/profile/06814322372324616407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_z9kVpvtYgO4/S3q1a-9fRBI/AAAAAAAAAAM/d7owvLGKcWc/S220/Vipe.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-148039245803322328</id><published>2010-03-23T04:47:00.013+01:00</published><updated>2012-01-13T21:04:05.414+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VipeGames'/><category scheme='http://www.blogger.com/atom/ns#' term='Marshmellow'/><title type='text'>Marshmellows final weeks</title><content type='html'>For those that may have been checking &lt;a href="http://home.planet.nl/~bogaa096/Marshmellow/Marshmellow.html"&gt;Marshmellow &lt;/a&gt;from time to time, may have noticed that I'm updating it in secret. This update does demand a blogpost though, as I'm getting ready to leave Alpha and move onto Beta. I've set the deadline for Marshmellow to be the first of May. How am I going to do this? Milestones!&lt;br /&gt;I've only tested the current build a few minutes, so I might have missed a bug, but most of this weeks milestone is already in there. You won't notice the AI overhaul, as it's a reorganization under the hood. Currently all characters have a general AI, with some pointers to have custom behavior. The reorganization will give every character their own AI so I can more easily have specific behaviors.&lt;br /&gt;&lt;span style="font-size: 180%;"&gt;So go check it out and post some feedback!&lt;/span&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;27-3 Alpha&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;AI overhaul&lt;/li&gt;&lt;li&gt;Importing/Exporting levels&lt;/li&gt;&lt;li&gt;Scenario Menu&lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;3-4 Beta&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Spread level loading over several frames&lt;/li&gt;&lt;li&gt;More content in the editor&lt;/li&gt;&lt;li&gt;Levelmap&lt;/li&gt;&lt;li&gt;Three Campaign levels&lt;/li&gt;&lt;li&gt;User friendly editor&lt;/li&gt;&lt;li&gt;"Nicefied" menu&lt;/li&gt;&lt;li&gt;Graphics optimization (removing glitches)&lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;10-4 Beta&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Feedback beta&lt;/li&gt;&lt;li&gt;More Campaign content&lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;17-4 Beta&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Feedback beta&lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;24-4 Beta&lt;/strong&gt; &lt;span style="font-size: 85%;"&gt;(I'm away for the weekend, so the update may be late/early)&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Feedback beta&lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;5-1 Gold&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Feedback beta&lt;/li&gt;&lt;li&gt;Bughunting&lt;/li&gt;&lt;li&gt;Optimization&lt;/li&gt;&lt;li&gt;Press Kit&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-148039245803322328?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/148039245803322328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/148039245803322328'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2010/03/marshmellows-final-weeks.html' title='Marshmellows final weeks'/><author><name>TOdorus</name><uri>http://www.blogger.com/profile/06814322372324616407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_z9kVpvtYgO4/S3q1a-9fRBI/AAAAAAAAAAM/d7owvLGKcWc/S220/Vipe.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-6117162357626760933</id><published>2009-12-06T22:51:00.017+01:00</published><updated>2012-01-13T21:04:39.294+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash Rogue'/><category scheme='http://www.blogger.com/atom/ns#' term='VipeGames'/><category scheme='http://www.blogger.com/atom/ns#' term='Narayan'/><category scheme='http://www.blogger.com/atom/ns#' term='Marshmellow'/><category scheme='http://www.blogger.com/atom/ns#' term='Dawn of the Hulker'/><title type='text'>Time to recap and look ahead</title><content type='html'>&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;Just spent some time submitting Dawn of the Hulker to a few dozen websites (please leave a high rating on &lt;a href="http://www.kongregate.com/games/TOdorus/dawn-of-the-hulker"&gt;Kong &lt;/a&gt;and &lt;a href="http://www.newgrounds.com/portal/view/520283"&gt;Newgrounds&lt;/a&gt; ;) ). No sponsor backing it, I'm truly bieng indie on this one. Here's hoping it does well.&lt;/div&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="center"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5412256496243030002" src="http://3.bp.blogspot.com/_lffcMiZ_97Y/Sxwym6Pdt_I/AAAAAAAAACI/s5s0gyyD-FQ/s400/screen1.jpg" style="cursor: hand; display: block; height: 289px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;span style="font-size: 78%;"&gt;&lt;em&gt; Dawn of the Hulker in it's full glory&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;span style="font-size: 78%;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div align="center"&gt;&lt;span style="font-size: 78%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;Looking forward there's some projects in the pipeline. Some of you that have been watching the forums may already know that I'm especially excited to have Marshmellow at alpha status. You can now get a feel of what this action packed shooter is about (explosions, explosions!) when you follow &lt;a href="http://home.planet.nl/~bogaa096/Marshmellow/Marshmellow.html"&gt;this link&lt;/a&gt;. I'm also picking up some books on how to use databases to let people down- or upload levels that you can create with the level editor that will ship with the game. If you have something to say about it, do leave a comment and tell me what you think and what your general FPS was.&lt;/div&gt;&lt;div align="center"&gt;&lt;/div&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;/div&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5412257826763335762" src="http://2.bp.blogspot.com/_lffcMiZ_97Y/Sxwz0W0OaFI/AAAAAAAAACg/PjAAXNBd2_c/s400/AlphaScreenshot2.png" style="cursor: hand; display: block; height: 399px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt; &lt;br /&gt;&lt;div align="center"&gt;&lt;em&gt;&lt;span style="font-size: 78%;"&gt;Fire!&lt;/span&gt; &lt;span style="font-size: 78%;"&gt;Explosions! &lt;/span&gt;&lt;/em&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5412257702434993762" src="http://1.bp.blogspot.com/_lffcMiZ_97Y/SxwztHqCdmI/AAAAAAAAACY/DjvuYuvwhSg/s400/AlphaScreenshot1.png" style="cursor: hand; display: block; height: 246px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt; &lt;br /&gt;&lt;div align="center"&gt;&lt;em&gt;&lt;span style="font-size: 78%;"&gt;More fire! More explosions!&lt;/span&gt;&lt;/em&gt;&lt;/div&gt;&lt;em&gt;&lt;span style="font-size: 78%;"&gt;&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;em&gt;&lt;/em&gt;Alongside Marshmellow I've been collaberating with Ace. A genuine pixel artist. These pixel titans are a dying breed, with all of them 3D gods out there, so I'm quite glad to be working with him on a Flash roguelike. It is conveniently codenamed Flash Rogue, but it isn't developed far enough yet to be released (this will probably will have to wait till beta). It has some nice features already though: random dungeons, lots of playable characters and enemies, but my favourite feature is that almost every item can be combined with every other item (poisoned armor, enchanted sword, potion mix anyone?). I'm seriously hoping to be having this up for beta by januari, but don't pin me down on it.&lt;br /&gt;&lt;br /&gt;Further ahead will be Narayan in colloberation with Mitch, an artist with some really good game design ideas, not to mention the person to know the most synonyms for the word "Awesome". I'll be working with him on a game about hacking, with the file icons literally battling it out on your desktop. Mitch has excellent ideas on how to visualize that stuff.&lt;br /&gt;&lt;br /&gt;Soooh... lots of stuff to keep me busy, not to mention uni ;) I'll keep you posted with the regular PR blurb on any of these projects.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-6117162357626760933?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/6117162357626760933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/6117162357626760933'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2009/12/time-to-recap-and-look-ahead.html' title='Time to recap and look ahead'/><author><name>TOdorus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_lffcMiZ_97Y/SfOsRg2zkII/AAAAAAAAAAY/7rJN2BVyAz4/S220/Vipe.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_lffcMiZ_97Y/Sxwym6Pdt_I/AAAAAAAAACI/s5s0gyyD-FQ/s72-c/screen1.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-3735800630536355388</id><published>2009-12-03T02:10:00.026+01:00</published><updated>2012-01-13T21:05:10.028+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VipeGames'/><category scheme='http://www.blogger.com/atom/ns#' term='Tilemaps'/><category scheme='http://www.blogger.com/atom/ns#' term='Speedtests'/><title type='text'>Tilemaps: 2D vs 1D</title><content type='html'>I've always assumed that 1D array lookups should be faster than 2D array lookups. This makes sense as a 1D array checks only 1 array and a 2D array checks two. Logicly a 2D array should take twice the time as a 1D array.&lt;br /&gt;&lt;br /&gt;The next assumption I've had is that an array lookup is relativly expensive compared to math operations.&lt;br /&gt;&lt;br /&gt;This leads to the conclusion that a tilemap using a 2D array would be slower than a 1D array using a function to convert a 2D coordinate to a index number.&lt;br /&gt;&lt;br /&gt;Before actually implementing this I decided to put it to the test. I've created a test swf (see end of this post) and it gave me some really weird results. They varied from the 1D array bieng a little bit faster to the 1D array bieng significantly slower compared to the 2D array. I can't explain why the results vary that much. Each time I fire the debugger it gives me another result.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Data after a few tries (all in miliseconds)&lt;br /&gt;&lt;span style="font-style: normal; font-weight: normal; line-height: normal;"&gt;&lt;br /&gt;1D: µ = 3015.40 (105.55%) σ = 55.85248427778303&lt;br /&gt;2D: µ = 2856.80 (100.00%) σ = 19.013153341831543&lt;br /&gt;&lt;br /&gt;1D: µ = 2864.90 (102.08%) σ = 44.38580854282143&lt;br /&gt;2D: µ = 2806.60 (100.00%) σ = 0.7745966692414834&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1D: µ = 2867.70 (102.41%) σ = 40.15968127363563&lt;br /&gt;2D: µ = 2800.20 (100.00%) σ = 5.128352561983234&lt;br /&gt;&lt;br /&gt;1D: µ = 2864.90 (101.59%) σ = 44.51291947289012&lt;br /&gt;2D: µ = 2820.00 (100.00%) σ = 9.838699100999074&lt;br /&gt;&lt;br /&gt;1D: µ = 2825.00 (100.83%) σ = 3.872983346207417&lt;br /&gt;2D: µ = 2801.70 (100.00%) σ = 4.242640687119285&lt;br /&gt;&lt;br /&gt;1D: µ = 2827.30 (99.90%) σ = 15.697133496278868&lt;br /&gt;2D: µ = 2830.00 (100.00%) σ = 6.324555320336759&lt;br /&gt;&lt;br /&gt;1D: µ = 2873.10 (99.50%) σ = 15.668439615992398&lt;br /&gt;2D: µ = 2887.60 (100.00%) σ = 14.303845636750978&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As you can tell the 2D method is faster than the 1D method most of the time. Looking at the standard deviations the 1D method seems to vary more in the time needed for a lookup than the 2D method. I'm pretty much flabbergasted by those results. This can mean a few things:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;My assumption of a 2D array lookup bieng slower than a 1D array lookup is incorrect (I refure to believe that) &lt;/li&gt;&lt;li&gt;My assumption of array lookups bieng slower than math operators is incorrect &lt;/li&gt;&lt;li&gt;Math operations vary A LOT in execution time. &lt;/li&gt;&lt;/ol&gt;I'm not really interested in testing these hypotheses, as my main conclusion is this: When using arrays as tilemaps in Flash, use 2D arrays.&lt;br /&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&lt;br /&gt;I'll have to take back that conclusion. rrh from the forums of kirupa.com had this to say: "I was able to get times between 80 and 90% out of 1D by setting rows to a power of two, like 2048 or 4096, and using a bitwise or in place of the plus." My own experience is that it can even be around under 65% with a tilemap of 2048*2048. That's an increase of 35%! Now I'm not too familiar with bit operations, but next up would be a setter function using the same trick.&lt;br /&gt;&lt;strong&gt;UPDATE 2&lt;/strong&gt;&lt;br /&gt;WordBlind from the Kongregate forums (among others from FGL forums) suggested using vectors which gave even more of a speed increase. GustTheASGuy from the Newgrounds forums added byteArrays to that, but those seem really slow at reading. The 2D ByteArray would even give a timeout. I may be doing something wrong as I don't know anything about ByteArray optimization.&lt;br /&gt;&lt;a href="http://home.planet.nl/~bogaa096/Vipe/Array1D%20vs%20Array2D%20test.swf"&gt;SWF&lt;/a&gt;&lt;br /&gt;&lt;a href="http://home.planet.nl/~bogaa096/Vipe/Array1DvsArray2D.txt"&gt;AS&lt;/a&gt; (sorry guys, my provider doesn't allow the AS extension)&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-3735800630536355388?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/3735800630536355388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/3735800630536355388'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2009/12/tilemaps-2d-vs-1d.html' title='Tilemaps: 2D vs 1D'/><author><name>TOdorus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_lffcMiZ_97Y/SfOsRg2zkII/AAAAAAAAAAY/7rJN2BVyAz4/S220/Vipe.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-6239322075545155493</id><published>2009-10-27T15:39:00.002+01:00</published><updated>2011-07-05T21:54:34.859+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VipeGames'/><category scheme='http://www.blogger.com/atom/ns#' term='Dawn of the Hulker'/><title type='text'>Houston, we're going commercial!</title><content type='html'>I've been getting Dawn of the Hulker ready for release out into the wild and adjusting the presentation accordingly. Moved some of the loading screens so the player can browse trough the menu's without seeing one (except for the one loading the swf ofcourse). This way players don't get put off by seeing a loading screen first thing. Mochi-ads' version control seems to be ok with the game now too. Added the interface to the tactical view and did a lot of work on tutorials. Still not happy with the way I explain things. I guess when it's not about code I'm not that much of a teacher :p&lt;br /&gt;&lt;br /&gt;I'm pretty excited as how the sponsorship will turn out. Wrote a nice e-mail with to some of the bigger sites with links to a press package and the game. I've also put it on &lt;a href="http://www.flashgamelicense.com/view_game.php?game_id=8175"&gt;Flash Gaming License&lt;/a&gt; (at the time of writing it's pending approval). Fingers crossed!&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-6239322075545155493?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/6239322075545155493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/6239322075545155493'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2009/10/houston-were-going-commercial.html' title='Houston, we&apos;re going commercial!'/><author><name>TOdorus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_lffcMiZ_97Y/SfOsRg2zkII/AAAAAAAAAAY/7rJN2BVyAz4/S220/Vipe.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-6358661955997300114</id><published>2009-08-08T02:56:00.006+02:00</published><updated>2012-01-13T21:05:37.182+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mochi'/><category scheme='http://www.blogger.com/atom/ns#' term='VipeGames'/><category scheme='http://www.blogger.com/atom/ns#' term='Dawn of the Hulker'/><title type='text'>What's in a name?</title><content type='html'>Well I promised to get a beta working this week, so I did. Not all the graphics and story are in there, but the gameplay and (after scrutinous inspection) menu mechanics are. So it really can be considered beta. I'll be adding those later this week, but I need a break for the weekend. And with the betatesting there will probably be a ton of suggestions in which I can lose myself.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now you might be wondering: where is it? Funny story actually. I'm currently awaiting the approval of &lt;a href="http://www.mochimedia.com/"&gt;Mochi&lt;/a&gt;, because I want to test it in as much of a reallife situation as possible, MochiAds included. That's not the funny part. The funny part is that I spent a good 4 hours of getting it to work properly with Mochi's version control, which rocks bigtime, so I really wanted version control.&lt;br /&gt;&lt;br /&gt;I uploaded my swf to Mochi and what happened was, that when I tried out my new encrypted file the ad would show, the game would load and then... nothing. Skimming through the Mochi forums I found out a few threads &lt;a href="https://www.mochimedia.com/community/forum/topic/problems-with-ads-error-1009-cannot-access-a-property-or-method"&gt;here&lt;/a&gt;&lt;a href="https://www.mochimedia.com/community/forum/topic/how-important-is-encryption-anyway#0"&gt; &lt;/a&gt;and &lt;a href="https://www.mochimedia.com/community/forum/topic/how-important-is-encryption-anyway"&gt;there&lt;/a&gt; about the stage not existing at the time the swf starts. Though I was unaware of this before, the changes in my code didn't fix it. Since version control allows you to update your game without the need of reuploading the encrypted swf (it will load in the updated version), I didn't think of doing just that: reupload the encrypted swf. And low and behold: it worked!&lt;br /&gt;&lt;br /&gt;What I did wrong was to rename the swf I got from Mochi. I can now say: DON'T!!! Upload another swf with the name you want and download the new swf (with the same name) you get from Mochi. Pretty funny in hindsight, but it gave me a long night of frustration.&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-6358661955997300114?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/6358661955997300114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/6358661955997300114'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2009/08/whats-in-name.html' title='What&apos;s in a name?'/><author><name>TOdorus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_lffcMiZ_97Y/SfOsRg2zkII/AAAAAAAAAAY/7rJN2BVyAz4/S220/Vipe.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-4312674827914877906</id><published>2009-08-01T03:06:00.011+02:00</published><updated>2012-01-13T21:05:48.204+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Marshmellow'/><category scheme='http://www.blogger.com/atom/ns#' term='Dawn of the Hulker'/><category scheme='http://www.blogger.com/atom/ns#' term='Amber Moon'/><title type='text'>Small update</title><content type='html'>Glad that Spark reminded me of not really blogging while having a blog (I have a fanbase!). What's the point in that? Development has been on the backburner a bit due to some academical obligations, but it's far from stalled.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size: 130%;"&gt;Dawn of the Hulker&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Dawn of the Hulker is really shaping up. I'm inclined to say that it will be due next week, but I've been doing that for two weeks now. Maybe I can get away with saying that an open beta is due next week? Only one bug on the buglist left to get rid off(and it's more of a cosmetic one) and some GUI design and it should be ready for beta. That still leaves writing dialog and backstory, but that shouldn't hamper betatesting. The coming month I have some free time on my hands, so it's going to be finished somewhere in august. Yep, I commited myself to a deadline.&lt;br /&gt;&lt;br /&gt;Considering game design the game really has been a learning experience. Somewhat recently Kevin published his game &lt;a href="http://www.kongregate.com/games/wx3lab/starcom"&gt;Starcom&lt;/a&gt; which really gives me ideas for a sequel. The betatesting pRadvan did for me in his spare time was invaluable to say the least. Really good suggestions and making points I would've never considered myself. More on all that in the postmortem.&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size: 130%;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size: 130%;"&gt;Marshmellow&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;I've put aside Marshmellow for a while to make Dawn of the Hulker ready for beta, so there isn't much exciting news on that front. It did give me a chance to take some distance from it and review it's current state. As it is now I ain't quite satisfied with the gameplay. It has become somewhat of a "who shoots first" game. Because a shot is calculated and damage is done, there isn't any dodging possible. Hence bieng the first to shoot = bieng the one to win. Drawing inspiration from the &lt;a href="http://en.wikipedia.org/wiki/Crusader_(game_series)"&gt;Crusader series&lt;/a&gt;, I've decided to make bullets actual visible projectiles and add in a roll move. This should enable some pretty Rambo like tactics alongside with some nice sneaking action. &lt;br /&gt;The game still is really in a prototype/techdemo kind of phase, but the actual development should continue pretty rapidly as most of the mechanics are already in place. The game is geared for emergent behavior/action, so I'm actually looking forward to the experiences players will have with it.&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;strong&gt;Amber Moon&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;I find that bieng able to switch between projects really helps the motivation to keep going. Because Dawn of the Hulker is becoming finished, I'm already thinking of my next project to develop alongside Marshmellow. I've always wanted to do an adventure game and I was thinking of developing a framework for it. It's only brainstorming right now, but I think I've got the technical side covered.&lt;br /&gt;For anybody wondering about the title. I promised somebody that my next game would be called this. She wanted to do the writing, but I wonder if I can actually take her up on it. Cornyness aside: I do like that title.&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-4312674827914877906?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/4312674827914877906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/4312674827914877906'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2009/08/small-update.html' title='Small update'/><author><name>TOdorus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_lffcMiZ_97Y/SfOsRg2zkII/AAAAAAAAAAY/7rJN2BVyAz4/S220/Vipe.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-8181470328844982951</id><published>2009-05-23T03:16:00.014+02:00</published><updated>2012-01-13T21:06:03.514+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Line Of Sight'/><category scheme='http://www.blogger.com/atom/ns#' term='Marshmellow'/><category scheme='http://www.blogger.com/atom/ns#' term='Algorythm'/><title type='text'>Good ideas happen in the shower</title><content type='html'>While working on Marshmellow (work in progress) I'm develloping some nice algorythms for tilebased games. The simplest and probably the most generally applicable is the line of sight (LOS) algorythm, which checks if there is an unobscured line from one tile to another. The Bresenham's line algorythm is probably the most known algorythm for checking a LOS in a tilebased game, but I found it lacking, as the actual LOS runs through more tiles than the Bresenham's line algorythm would. This way a LOS could sometimes pass through a wall, because the tile which contains the wall isn't checked.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_lffcMiZ_97Y/ShdQZhNK-QI/AAAAAAAAABY/NsH6vXB-Xag/s1600-h/ShowerTiles.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5338824282611579138" src="http://2.bp.blogspot.com/_lffcMiZ_97Y/ShdQZhNK-QI/AAAAAAAAABY/NsH6vXB-Xag/s320/ShowerTiles.png" style="cursor: hand; float: left; height: 161px; margin: 0px 10px 10px 0px; width: 226px;" /&gt;&lt;/a&gt; While showering and just looking at the showertiles, the following occured to me. When you'd draw a line through the tiles, you can see how many vertical and horizontal lines it would cross, simply by calculating the difference in x and y of the tiles. Using some simple algebra, the times of the crossings could be calculated too. This would provide a basis of an algorythm that could step through all the tiles the line would cross until it would reach an obstruction or it would reach it's destination! Boy was I ready to begin my day.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Take the picture as an example. A line runs through the grid from one position to another, starting in one tile and ending in another, crossing several lines in the proces. In tile coordinates (not actual coordinates), the line runs from (0,0) to (3,1). That would mean it would cross three vertical lines (dX = 3 - 0 = 3) and 1 horizontal line (dY = 1 - 0 = 0). In total it would visit four tiles (dX + dY = 3 + 1 = 4) to reach the end tile. The values of dX and dY also tell us something about the direction of the steps. If dX &amp;gt; 0 every vertical crossing is to the right and if dX &amp;lt;&amp;gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Now the algorythm knows it will cross a 3 vertical and 1 horizontal line an in which direction, but it doesn't know when. First the tile coordinates need to be converted to the actual values of the vertical and horizontal lines. The start tilecoordinate is known as is dX, so the x values of the vertical lines can be calculated (startTileX + i * tileWidth), by looping from 1 to dX (going right) or from 0 to dX (going left). Left and right have different values because my tiles have their reference point in the topleft corner. Next the time for that x needs to be calculated and stored in an array. The same is done for the horizontal crossings.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Basicly we now have all the info we need. First the algorythm needs to select if it is going to extend in a horizontal or vertical direction. This can be done by sorting the arrays holding the crossingtimes and picking the one with the lowest crossingtime (the one with the lowest crossingtime = the first line the LOS crosses). Remove that time from the array and check the tile the LOS is crossing into (child). If the child is obscured (for instance, the tile is a wall) then the previous tile (or parent) is the tile the LOS ends in. If it isn't obscured, the algorythm needs to check if it has reached the destination tile. If that is the case, then there is an unobscured LOS to the target.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;This is quite a simple algorythm, but I found it can be adapted to do many other things. In Marshmellow an adaption is used to simulate gunshots, simply by modifying the check if the child is obscuring to check for characters occupying the child and the childs height. Another usage could be for collision detection of fast moving objects (moving more then one tile per update), but I'm yet to get it working for objects that are big enough to occupy several tiles. I'm still expermenting with it, but once I get a good optimized one I'll post some AS3.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-8181470328844982951?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/8181470328844982951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/8181470328844982951'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2009/05/good-ideas-happen-in-shower.html' title='Good ideas happen in the shower'/><author><name>TOdorus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_lffcMiZ_97Y/SfOsRg2zkII/AAAAAAAAAAY/7rJN2BVyAz4/S220/Vipe.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_lffcMiZ_97Y/ShdQZhNK-QI/AAAAAAAAABY/NsH6vXB-Xag/s72-c/ShowerTiles.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-572588817325428687</id><published>2009-05-07T02:20:00.010+02:00</published><updated>2012-01-13T21:06:20.299+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Projects'/><category scheme='http://www.blogger.com/atom/ns#' term='Marshmellow'/><category scheme='http://www.blogger.com/atom/ns#' term='Dawn of the Hulker'/><title type='text'>Current projects</title><content type='html'>Currently I'm working on two projects. A space rts called "Dawn of the Hulker" and a shooter with the working title "Marshmellow".&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt; &lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;span style="font-size: 130%;"&gt;Dawn of the Hulker&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;em&gt;It is foreseen by The Prophet that, if life as is known is to survive, the strong must be selected. After having this revelation The Prophet, in his wisdom, called his Hulkers: elite captains that command gigantic spaceships. He gave them their mission: to bring armageddon to the universe which only the strong are able to survive. This day the Hulkers have set out on their mission in their gigantic flagships. These ships are able to sustain their crews like a large floating city, enabling the Hulkers to wage their war on the galaxy for the centuries to come.&lt;/em&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the game the player takes on the role of a Hulker and starts out with a few technolgies and his gigantic flagsip. Along the path of destruction new technology and shipupgrades are unlocked when a world is conquered, which the player can use to customize it's ship. Additional ships can also be conquered this way, so the player forms his fleet of alien technology during the game. I hope to finish it somewhere this month.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5332878717989620082" src="http://4.bp.blogspot.com/_lffcMiZ_97Y/SgIw8HADCXI/AAAAAAAAAA4/wAuvkN4yyVM/s320/BattleSnap3.jpg" style="cursor: hand; display: block; height: 230px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5332879284966576450" src="http://1.bp.blogspot.com/_lffcMiZ_97Y/SgIxdHJ40UI/AAAAAAAAABA/umrYbDOzlm8/s320/BattleSnap4.jpg" style="cursor: hand; display: block; height: 236px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;br /&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5332879491277259330" src="http://1.bp.blogspot.com/_lffcMiZ_97Y/SgIxpHuMAkI/AAAAAAAAABI/tdX1r0VRvWY/s320/DockSnap2.jpg" style="cursor: hand; display: block; height: 233px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size: 130%;"&gt;Marshmellow&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;It's to early to show screenshots from this, but I can give you a feature list:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Explosions, lots and lots of explosions&lt;/li&gt;&lt;li&gt;Destructable terrain&lt;/li&gt;&lt;li&gt;Frantic shooting&lt;/li&gt;&lt;li&gt;Marshmellows&lt;/li&gt;&lt;/ul&gt;I did develop two interesting algorythms for this game that might be interesting to other developers. One is a line of sight check using tiles and the other is a modified &lt;a href="http://www.geocities.com/temerra/los_rays.html"&gt;&lt;span style="font-size: 85%;"&gt;field of vision check&lt;/span&gt; &lt;/a&gt;to create convincing explosions. I'll dedicate a post to them as I get them finetuned.&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-572588817325428687?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/572588817325428687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/572588817325428687'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2009/05/current-projects.html' title='Current projects'/><author><name>TOdorus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_lffcMiZ_97Y/SfOsRg2zkII/AAAAAAAAAAY/7rJN2BVyAz4/S220/Vipe.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_lffcMiZ_97Y/SgIw8HADCXI/AAAAAAAAAA4/wAuvkN4yyVM/s72-c/BattleSnap3.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-7359374204471886664.post-3436289861448549422</id><published>2009-04-26T01:54:00.002+02:00</published><updated>2011-07-05T21:54:59.645+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VipeGames'/><category scheme='http://www.blogger.com/atom/ns#' term='founding'/><title type='text'>Hello World, this is Vipe Games</title><content type='html'>After working on a few flash games, as a hobby for a few years I've created my share of unfinished projects. The last few months I've been thinking about making it a profession. I like making flash games, so why not make money while doing something I enjoy? These thoughts of becoming an indie game developer made me take developing games more seriously and gave me a need to tell the world about them; hence the creation of this blog. Hello world, this is Vipe Games.&lt;br /&gt;&lt;br /&gt;I choose the form of a blog because I want to post about several subjects and not only do PR for my games. I want Vipe Games to be more than that. In a indie spirit I want a place where I can post articles about programming, game design besides my progress on my own games. The internet is a community, the biggest in the world, and I want to take part in it and contribute to it. I can't wait to see what it gives me in return.&lt;div class="blogger-post-footer"&gt;Read more at &lt;a href="http://vipegames.blogspot.com/"&gt;Vipe Games&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7359374204471886664-3436289861448549422?l=www.vipesoft.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/3436289861448549422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7359374204471886664/posts/default/3436289861448549422'/><link rel='alternate' type='text/html' href='http://www.vipesoft.com/2009/04/hello-world-this-is-vipe-games.html' title='Hello World, this is Vipe Games'/><author><name>TOdorus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://3.bp.blogspot.com/_lffcMiZ_97Y/SfOsRg2zkII/AAAAAAAAAAY/7rJN2BVyAz4/S220/Vipe.jpg'/></author></entry></feed>
