<?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-4023996430602445784</id><updated>2012-02-16T20:24:06.573-08:00</updated><category term='creatures'/><category term='Spammer Blocker'/><category term='housing'/><category term='javascript'/><category term='AI'/><category term='realism'/><category term='optimize'/><category term='mmorpg'/><category term='nemesis star'/><category term='faq'/><category term='canvas'/><category term='ASP htaccess'/><category term='bored'/><category term='canvas engine'/><category term='lychgate'/><category term='pacific ocean gyre'/><category term='roadmap'/><category term='ASP IP Deny'/><category term='MMORPG Stories'/><title type='text'>Lychgate: JavaScript MMORPG Canvas Engine</title><subtitle type='html'>A JavaScript game engine based on the new HTML5 canvas tag. Heavy emphasis is placed on mmorpg aspects of gaming but the engine itself it not limited to that.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>31</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-8928291213955785920</id><published>2011-05-12T00:00:00.000-07:00</published><updated>2011-05-13T13:41:01.247-07:00</updated><title type='text'>Testing, Testing, Testing. ugh!</title><content type='html'>After lots of testing with the canvas tag I've come to the conclusion that trying to use just the regular 2D canvas will just not work for me. I mean I can get a lot better speed than a lot of the other engines I've seen trying the same thing but still it isn't good enough, then again i am overly picky with things like this.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What I am working on now is trying to use the new WebGL structures to simulate a 2.5D environment. I do not yet have anything to show you, primarily been reading tutorials on shaders, OpenGL and such. From what few demo's I have managed to find concerning WebGL it is very very promising and many times faster than the regular 2D canvas. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Will post something on the site when i get a good test working.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-8928291213955785920?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/8928291213955785920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2011/05/testing-testing-testing-ugh.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/8928291213955785920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/8928291213955785920'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2011/05/testing-testing-testing-ugh.html' title='Testing, Testing, Testing. ugh!'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-1239965075797603880</id><published>2011-03-20T05:28:00.001-07:00</published><updated>2011-03-20T05:41:24.099-07:00</updated><title type='text'>Isometric Sprite Maker</title><content type='html'>Ok, since my "game engine" is primarily based on an isometric view I started trying to find a way to better automate my sprite creation. I've played with World Creator 1.5 before but sadly they have discontinued the free version and only have &lt;a href="http://www.inet2inet.com/main/main.htm"&gt;World Creator 2.5&lt;/a&gt; available now for about $120.00 USD. I did order a copy of this because i know it works well and does walls along with the floors. Still waiting on my order to finish, been almost 24 hours now though.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I checked out some demo's for some other stuff as well. Primarily what I was looking for was something I could put a 3-D model into, move the model into place, then let it cycle through all the animations in the model creating a sprite set with either 4 or 8 views. The only demo I even remotely got working kept crashing due to "missing files" of some sort. Un-installed it. :/&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So I i'm hoping it will be &lt;a href="http://unity3d.com/"&gt;Unity3D&lt;/a&gt; to the rescue! Going to do some tests but pretty sure I will be able to create a web-based version where I can load up the model and have it do all the things I am looking for. Even better would be if I can also get it to automatically render the clothing and armor. If it works i'll announce the beta of it here along with a link.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hopefully I will also be starting an alpha of my Nemesis Star game soon too. But as previously stated my time is limited so it may be a bit, sooner the better I think though. Feel free to leave me a message if you are interested in participating.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-1239965075797603880?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/1239965075797603880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2011/03/isometric-sprite-maker.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/1239965075797603880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/1239965075797603880'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2011/03/isometric-sprite-maker.html' title='Isometric Sprite Maker'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-5126059888427466831</id><published>2011-03-09T03:28:00.000-08:00</published><updated>2011-03-09T03:38:21.357-08:00</updated><title type='text'>Many Many Voltrons Later</title><content type='html'>Got a few days of vacation left. I notice that I have really neglected in working on quite a few things due to life situations (again). Not going into any rants this time though. I have however decided that I'm tired of life getting in the way and will begin some real work on this despite other's, and I will just leave it at that. Got a few days of vacation left which I will be working on this, specifically I will be ironing out the kinks in the JavaScript Isometric Mapping. Been almost a year since I worked on it now so will have to relearn my own code but I do remember the last thing was that I did get it working but was having a problem with it dynamically changing/loading new sectors.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The first two days of my vacation where spent enjoying Fallout New Vegas, but i have already become quite bored with it seeing how i finished it on hard-core mode in two days. If i pay that much for a game it shouldn't be so easy. :/&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The next few days I spent updating my new&lt;a href="http://www.jssota.com/"&gt; JavaScript Game Developers&lt;/a&gt; site that you can visit by clicking on the link there. The blog and the site there will be for more theory and code not specifically related to this engine.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That's it for now, got to get to work. Yes vacation for me means only having to work one job instead of two. But i'm the only one in the house willing to keep a job (much less two) so I gotta do what it takes to make sure the bills keep paid. Hopefully By this weekend I will iron out the bugs in that map and can show it off with a character walking around.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-5126059888427466831?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/5126059888427466831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2011/03/many-many-voltrons-later.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/5126059888427466831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/5126059888427466831'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2011/03/many-many-voltrons-later.html' title='Many Many Voltrons Later'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-8204084891530422115</id><published>2010-02-24T23:09:00.000-08:00</published><updated>2010-02-24T23:49:42.535-08:00</updated><title type='text'>Our Trip to Mars ...</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;People who have gathered themselves into a nation NEED something to believe in so that they may remain a nation. I have wondered recently if Kennedy wasn't shot like he was, if we would have even went to the moon. Or would we have given up their too? Belief stirs hope and hope for something is the only thing that keeps a great many of us going. When our nation does something great that stirs joy in every one of that Nations citizens.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Do you really understand why the Hover Damn was built? Not only did it provide a water reservoir and electricity, it stirred hope in people. It let them dream again. With those new dreams they had the willpower to build all that we now have today. But dreams and hope are fickle and easily swept away under a tide of problems.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;If our leaders fail at this, if they fail us yet again .... I cannot remember the last time something truly good came out of our nations capital. And corporations ... well that's the same thing isn't it? Peas in a pod so to speak? Can we really continue to trust people to adjust their bottom lines by the number who have died? Once a upon a time if one person died it was too many ... Now as long as the dollars paid out in the lawsuits are not as much as the cost of the recall then it's business as usual. I think I will keep placing my trust elsewhere thank you very much.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;It doesn't seem to be ... 'if our leaders fail at this ...', they already have. They are bought and paid for corporate lackeys who see the tax dollars that we earn through our blood and sweat as a giant piggy bank.  Our tax dollars .... the last time my parents needed a fireman, yes they showed up but then refused to put out the fire because they had not donated $50.00 into the fireman's fund. THAT is our tax dollars at work. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(34, 30, 31); "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;The tree of liberty must be refreshed from time to time with the blood of patriots and tyrants."&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(34, 30, 31); "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(34, 30, 31); "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;If our nation will not do it, and we cannot trust corporations to do it, then perhaps it is time to do it ourselves. We are the ones who build this nation, it is our money, our blood and sweat .. our tears. We are a nation of adventurer's and explorers. It is time to expand that spirit and venture out of our womb that we call Earth.  If we do not then I fear the last of our dreams may very well be lost as we seem to enter this new age where we are no longer individuals or people, just a statistic. And after we are gone and hope no longer remains the title of our obituary shall read ...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(34, 30, 31); "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(34, 30, 31); "&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;b&gt;327,000,000 Dreamers Lost&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-8204084891530422115?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/8204084891530422115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2010/02/our-trip-to-mars.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/8204084891530422115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/8204084891530422115'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2010/02/our-trip-to-mars.html' title='Our Trip to Mars ...'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-9102056539898987075</id><published>2009-12-29T10:22:00.001-08:00</published><updated>2009-12-29T10:26:23.792-08:00</updated><title type='text'>quick post</title><content type='html'>busy as hell doing everything in the world but what i want to be doing (working on this game engine). But i did some reading on IE 9 and wanted to say something about it ... not that i think Microsoft gives a crap what the developers really think or want ... If IE 9 does not have support for the canvas tag i will ban the IE browser from my sites. A simple check and redirect to a page telling them to download a real browser that does support the w3c standards, why they should do it and links to the most popular browsers will do nicely i believe. I do encourage everyone who is trying to set up canvas-specific sites to do the same. If they don't want to support us ... they can talk to 404.html. :-)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;going to go beat up a pillow now. cheers!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-9102056539898987075?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/9102056539898987075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/12/quick-post.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/9102056539898987075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/9102056539898987075'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/12/quick-post.html' title='quick post'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-7018116677262424998</id><published>2009-12-19T06:15:00.000-08:00</published><updated>2009-12-19T06:24:03.366-08:00</updated><title type='text'>Progress</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px; white-space: pre-wrap; "&gt;Ok, court could not have went more wrong but i won't vent about that but that is over now. Now to just get the move and holiday stuff out of the way! I did work on it a bit as soon as i got home while the wife woke up though. Added the image preloader so that it works fine the first time instead of having to press the browser 'reload' button to get it to go. Next is to get it to scroll beyond the current 3x3 grid which will involve some duct tape, a crow bar and a 10 lb sledge hammer. :)&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:monospace;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:monospace;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; white-space: pre-wrap;"&gt;This first version will remain as a flat-isometric  plane but i do have plans on adding  a layered isometric plane later on. Performance is good in Firefox and Opera but in chrome it just flies! IE ... screw IE we don't care about them. :p perhaps in the next version they will add canvas support but i'm not getting my hopes up. not going to post a new link or even upload the newest version yet. I will do that when i get it to dynamically load a map from the server and it is scrolling beyond the current 3x3 grid. Maybe i'll even add in a fence or a cow or something else in addition to the trees and grassland.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-7018116677262424998?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/7018116677262424998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/12/progress.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/7018116677262424998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/7018116677262424998'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/12/progress.html' title='Progress'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-551929095364139271</id><published>2009-12-14T02:31:00.000-08:00</published><updated>2009-12-14T02:45:44.394-08:00</updated><title type='text'>Court Week has finally arrived!</title><content type='html'>ok, my wifes insurance claims are finally going to court. Doesn't seem like they are going to offer a real settlement at all so i guess we'll have to go the whole nine yards with this one. Bleh! like i have time for this! STILL in the middle of moving ... my wife, bless her heart, has us moving tiny bit by tiny bit. Move a few things then set them up in the new place, move a few more then set them up. Me i just want to get the crap over their and then set it up then. At this rate it seems like Christmas will be gone before we are finished. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ok so it's like 5:36am and i have to jump in the shower in just a minute but I'll throw out my idea for the first game the canvas engine will be laid out on. I purchased a domain called moghack.com. No it has nothing to do at all with hacking mmo's. :p Instead it will be a multi-player version of nethack. Though I will be getting a lot of ideas from nethack it will not be a duplicate or a web-based clone of it. That's been done before for starters and the current base design of nethack does not lend itself to multi-player options. Their are two features that will be absolutely migrated over, random-dungeon generation and perma-death. I have several ideas laid out on paper for the multi-player aspects of it but they are still in their infancy so will not be releasing those ideas quite yet.  More details to come in January i hope if everything goes as currently planned ... which it never does. :p&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-Matthew H.&lt;/div&gt;&lt;div&gt;aka Wetlander&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-551929095364139271?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/551929095364139271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/12/court-week-has-finally-arrived.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/551929095364139271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/551929095364139271'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/12/court-week-has-finally-arrived.html' title='Court Week has finally arrived!'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-2122399119173122799</id><published>2009-12-08T02:42:00.000-08:00</published><updated>2009-12-08T02:47:15.190-08:00</updated><title type='text'>General FYI</title><content type='html'>Ugh, Christmas is in full swing so working all the hours that I can get. Along with 2nd job, trying to drum up more business for home and in the middle of moving i barely have time to breath. Come January though this should all settle down though as by then we will have finished moving and have the new house unpacked along with reduced hours at one of the two jobs. a heck of a lot less travel time is going to help as well, about one hour per day that i won't be sitting in traffic.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Good thing about working at wally world though is that it's pretty mindless so i'm carrying around a small notebook in which to write down ideas and plan my January to-do lists. Doubt i'll post much till then though so merry Christmas to everyone! &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-2122399119173122799?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/2122399119173122799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/12/general-fyi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/2122399119173122799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/2122399119173122799'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/12/general-fyi.html' title='General FYI'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-3363556582970535277</id><published>2009-11-10T18:57:00.000-08:00</published><updated>2009-11-10T19:42:50.133-08:00</updated><title type='text'>The Universe is a Big Place ...</title><content type='html'>Ok anyone who has done any sort of research on the universe at all, or attended some basic science classes, or opened a book, or looked up into the sky ... ect, knows that the universe is big. Very big, really big, we has humans cannot even grasp exactly how big it is much less see across the whole thing. Currently we can see somewhere like 13-14 billion light years away because that is how long it has been since the big bang. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So what?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some games have lots of different playable worlds, which according to string theory is plausible, but the main reason for this has been server limitations. For a web-based mmo game however there is no real good reason for this limitation if you design your engine to work across multiple servers. Their has been great advances in cloud computing so as such I believe it is entirely feasible to create a JavaScript version of this and apply it to an mmo game.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I very much believe in the K.I.S.S. method even in programming. I've seen many programmers over complicate things just to prevent theft of their work or to justify their jobs. In it's simplest form this is what i'm thinking:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Servers ...&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;1 login server&lt;/li&gt;&lt;li&gt;1 chat server&lt;/li&gt;&lt;li&gt;1 AI server (?: possibly a cloud depending on the number of units it needs to control)&lt;/li&gt;&lt;li&gt;1 server for every X number of users&lt;/li&gt;&lt;li&gt;1 database server (?: possibly it's own separate cloud at a later point) to bind them all in darkness.&lt;/li&gt;&lt;li&gt;(?: possibly) Star-map server. The only thing it does is path-finding as the star-map is fixed. Would be a behind-the-scenes server like the database-server.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;With exception of the database server itself all of the other server programs should be a single entity to make installing and expanding easier. The base program will load the required modules for that type of server so as such initially they can all be loaded onto a single server and then expanded outwards as required.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Client Side ...&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Each user is given a list of of user servers (#4) to poll for data, the system polls the list and uses the one with the fastest response time.&lt;/li&gt;&lt;li&gt;The servers are re-polled every (x) minutes to help reduce server lag and overloading.&lt;/li&gt;&lt;li&gt;Script will keep track of data return times and will force a re-polling in case of lag from a single server.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;So it seems fairly simple and as such should be possible, but what about new players?&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Players are not given a starting world, they must find their own world to colonize (possible addition to 'autopilot' to a inhabitable planet.&lt;/li&gt;&lt;li&gt;Players are given a copy of the the latest available copy of the compendium (all publicly available knowledge)&lt;/li&gt;&lt;li&gt;You start as a colony of the faction you choose, not your own independent nation (this however does not mean you can't be attacked even as a noob).&lt;/li&gt;&lt;li&gt;Technically speaking you can be a leach and never leave your colony and never perform any research at all. Factions share group knowledge with their members including leaches ... this however may make your leaders unhappy but that is up to the players themselves.&lt;/li&gt;&lt;li&gt;New players will naturally migrate out towards the edge of the known galaxy.&lt;/li&gt;&lt;li&gt;Their are fixed travel lines between stars (though it is possible later to circumvent these travel lines but it takes a much longer time)&lt;/li&gt;&lt;li&gt;More than 1 player can inhabit the same planet ...&lt;/li&gt;&lt;li&gt;That's right you can start on the same planet as your bestest buddie in the whole world.&lt;/li&gt;&lt;li&gt;You don't have to colonize a planet, you can choose to build a space colony instead. Though this idea does have strategic advantages it comes with it's own obvious set of problems such as expense and habitation limitations.&lt;/li&gt;&lt;li&gt;Shared Knowledge: Just via interaction with other players, trade ... ect. Knowledge is shared with each other in the form of bonus points, the time it takes to research something is reduced.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;I will expand more on these ideas in later posts.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-3363556582970535277?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/3363556582970535277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/11/universe-is-big-place.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/3363556582970535277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/3363556582970535277'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/11/universe-is-big-place.html' title='The Universe is a Big Place ...'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-4044952759457103395</id><published>2009-11-09T19:26:00.000-08:00</published><updated>2009-11-09T19:40:47.363-08:00</updated><title type='text'>Moving, ugh!</title><content type='html'>Ok, so for like the next two weeks we seem to be renting two places at the same time, talk about expensive ... but can't afford for me to take any time off either. So for my next couple of days off will be spent trying to get the lead out of my butt and get this moving thing done. Good news about the new place is the fact that we will be paying less rent than what we are here, and we'll have about 400 sq ft more space! The wife and I are &lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 17px; border-collapse: collapse; white-space: pre; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;definitely &lt;/span&gt;hoarders and seem to have issues throwing anything away! lol. Instead it get's tossed in a box where it will remain for 2-5 years before donation to the salvation army. :p&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've set my DVR to record episodes of 'The Universe' on the discovery channel to see if I can get some more ideas for the Nemesis Star game. Still thinking to do that one first but at this stage I'm still flip-flopping quite a bit so anything is up for grab's. Everything that will be needed in both games is very similar for the JavaScript engine, the only big difference is the addition of a flat or 3/4 view perspective in addition to the isometric drawing routines ... which is infinitely easier.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For the server side I've been doing some research on SSJS (Server Side JavaScript). There seems to be way too many choices and confusion about it with little real information. I have though ruled out using any SSJS engines that are programed in php or any other server side scripting language ... i don't mind sacrificing a little bit of speed for ease of use, but not that much. Hell at this point it might just be easier to program the server side in C# with spider monkey overlaying it for the scripting routines.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well i got to get my lazy butt to work get these next couple of days over with (work two jobs 3 days of the week). Then it's moving time! Ugh!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-4044952759457103395?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/4044952759457103395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/11/moving-ugh.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/4044952759457103395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/4044952759457103395'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/11/moving-ugh.html' title='Moving, ugh!'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-8918685312917515752</id><published>2009-11-07T05:03:00.000-08:00</published><updated>2009-11-07T05:26:09.181-08:00</updated><title type='text'>General Updates</title><content type='html'>Busy busy busy! The freaking Christmas season is almost here! Ok at least at good ole wally world it is.  Yes yes, I'm still working two jobs one of which is for Walmart ... hey they have benefits! Just about anyone working in the computer field as a web programmer will tell ya ... unless you get a great gig working for Google or some other large company you probably won't get benefits anywhere. Getting ready to move soon again! ugh! but at least now with this move I will be 1.6 miles from work! which means more time to do the stuff I want to be doing (aka, this game design thing)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Was reading through a forum news feed archive and came across this: &lt;a href="http://news.ycombinator.com/item?id=751075"&gt;http://news.ycombinator.com/item?id=751075&lt;/a&gt; Instead of resurrecting an old thread (3 months at the time of this writing) I figured i would cover one of the topics that someone their suggested. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;CSS Sprites and Javascript Canvas ...&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The long story short ... don't waste your time using CSS to clip the sprites from a large png image ... all the browsers have big performance issues when clipping and if your going to build a GUI or game of any real scale this alone will kill any good performance you would get. This isn't to day that the persons idea was so off either ... the advantage to using fewer files is faster load times especially if you are using xmlHTTP requests to tell it what files to load. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A simple tile prototype ...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;function Tile()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;  this.img = new Image();   // create a new Image object.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;  this.width = 128;         // width of the tile. defaults to 128&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;  this.height = 64;         // height of the tile. defaults to 64&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;  this.offX = 0;            //X offset for drawing abnormal sized tiles&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;  this.offY = 0;            //Y offset for drawing abnormal sized tiles&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;From the above i think you can get the picture here already ... you simply load the big file then you piece it out into actual tile objects thus pre-clipping everything. You get the speed performance from using smaller images that don't require clipping and reduce server latency time because you are pulling fewer files. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Also another way to get great performance increase ... use multiple canvas's! ... How many you use and what each of these layers does is of course entirely up to you just remember that the top most layer is the layer the user actually interacts with for your event processing.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;If their is interest i will discuss this in greater detail with actual numbers to back up my claims here. I've done quite a bit of testing and this is the fastest way to process canvas games of any real size or scale. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;M. Hagston&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-8918685312917515752?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/8918685312917515752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/11/general-updates.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/8918685312917515752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/8918685312917515752'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/11/general-updates.html' title='General Updates'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-9031058274848505583</id><published>2009-09-10T12:26:00.000-07:00</published><updated>2009-09-10T12:35:01.285-07:00</updated><title type='text'>Moving On!</title><content type='html'>ok, i told myself no games, no nothing on my two days off here so i can get stupid map working....and then i get a cold. So with my blankie and an entire box of tissues done and i'm sure a nose that is kin to rudolf i finally fixed the error. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.nemesisstar.com/lychgate/map_test_002.html"&gt;javascript isometric map&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;perhaps if i get comments then i'll post how it works, otherwise you can just figure it out yourself. The super-short of it is it has a 3x3 buffer, it the data from these buffers to actually render the current viewport. Next phase is to get it to update these buffers as the user scrolls in order to create the illusion of an infinately scrolling map. after that it will be to get an actual charecter into the map and walk around. :-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;i'll spell check these posts later, but i'm going to bed now and fein death for a few hours. ughhhh. **sneezes**&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-9031058274848505583?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/9031058274848505583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/09/moving-on.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/9031058274848505583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/9031058274848505583'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/09/moving-on.html' title='Moving On!'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-1793110743381820295</id><published>2009-09-06T23:43:00.001-07:00</published><updated>2009-09-06T23:52:07.366-07:00</updated><title type='text'>FINALLLY! making progress</title><content type='html'>hour here, hour there, finally making some progress! Nothing i wish to post quite yet (but the same url is in the blog history if you really want to find it map test 002). I warn you though with all the test stuff activated (and new ruler bar that's dynamicly drawn), it takes like 10-12 seconds to first render in google chrome. With the test draws i would not suggest any other browser besides chrome untill it's optimized again. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anywho! Finally got that error somewhat fixed, at least on the vertical axis it seems to be working correctly for P1 (top left drawing panel). I finally figured out if i make it clip correctly then it draws it correctly, something i planned on doing for optimization because letting the browser clip anything outside the window leads to slower draw times. Now i just have to get the other 3 panel layers clipped right and then the inital map phase is well under-way to being completed! Might have to increase the buffer from a 3x3 to a 4x4 area though in order for it to properly preload a map in all directions.  Will do some testing as far as that goes though, would prefer to stick with the slightly smaller size just to avoid being a memory hog.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So hopefully soon i'll have a little guy walking around the map and behind tree's and such, first rendition i will avoid collision and pathfinding but neither should be that complicated to add (yeah right). I do have some simple pathfinding already programmed for javascript that navigated across and old starmap type thing, just have to locate which file it's in. Well lunch is almost over and I need to get some more work done! Hopefully i'll have something for people to actually play with soon, the first thing i'm shooting for is a small grassland to walk around in, then I will create a small space-station which will help test the collision and pathfinding. Not to mention it the type of map that will primarily be required for the Nemesis Star game. Seeyaz!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-1793110743381820295?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/1793110743381820295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/09/finallly-making-progress.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/1793110743381820295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/1793110743381820295'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/09/finallly-making-progress.html' title='FINALLLY! making progress'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-3493407347873413719</id><published>2009-08-28T23:38:00.000-07:00</published><updated>2009-08-28T23:44:40.871-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='mmorpg'/><category scheme='http://www.blogger.com/atom/ns#' term='nemesis star'/><title type='text'>Life Get's in the way ...</title><content type='html'>Ok, has been WAY too long since my last post and that's going to stop now I hope. Still don't have any more time than I did a week ago, just getting a bit better at managing it. :-)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Going to begin working on this again starting first thing in the morning, though it will be the nemesis-star version of my javascript mmo and not the lychgate version. Nemesis star is more space-based and not fantasy land-based, and it has been fleshed out for a few years now on paper. I have done a fair bit of graphic testing on it already and given the current canvas support i belive it will work out better overall than to start with than lychgate, due to ease of implimentation. Maybe by next weekend I will have a link to post to start showing off the work.  Well on my lunch break and it's already over, got to get back!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Will also see if i can find the initial story line and post the alpha copy of it for your review in the morning :-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;M. Hagston&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-3493407347873413719?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/3493407347873413719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/08/life-gets-in-way.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/3493407347873413719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/3493407347873413719'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/08/life-gets-in-way.html' title='Life Get&apos;s in the way ...'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-3951876121532986129</id><published>2009-05-11T07:26:00.000-07:00</published><updated>2009-05-11T07:39:42.218-07:00</updated><title type='text'>General Updates</title><content type='html'>Been working here and their as I have time. I accidently (hehehe) installed the old 'Call to Power 2' on my puter ... between that and playing Fallout on the weekend I do belive I have neglected my programming for about a month now.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Things have settled down at good ole Wally World and I am on their perminant now (which i was hoping for for the benefits alone). Bad thing about working these computer jobs is that they never seem to last long and unless you work for someone like Google or Microsoft your probably not getting any bennies either. Family always comes first and my wife definatly needs medical insurance.&lt;br /&gt;&lt;br /&gt;Nearly got my garden out! If you have a back-yard and you haven't planted a garden yet then get off your lazy ass and get out their and do it! I've started to late myself to get anything going from seed this year so we cheated and got some plants at Lowes. Not to badly priced either and some already have some little buds on them.  Couple of years back when tomatoes got to $4 a lb i was really thankfull that mine only cost me about $8-$10 total for all the 'maters i could eat! If you do plant tomatoes make sure you plant some marigolds (a flower) with them, they are a natural pest deturent for tomatoes. Planting some mint nearby (pots?) will also help to deture insects from getting into your veggies. So not only do i get all the veggies i can eat, they're chemical free. ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ok, not realy the kind of updates you were looking for aye? Ok, nothing that i'm going to show off quite yet but i nearly got the map scrolling perfected. I need to add in a few more little details then add in the ajax engine and do some load testing to and from the server.  If all goes to plan it should provide smooth scrolling with no noticeable loading. The only problem that it may have is when it actualy has to render the map. It takes about 3 seconds to render a 3x3 map (9 of my map grids). With the way the new system works it only has to redraw 3 of them instead of all 9. That's still a 1 second delay though which in human terms is very noticeable.  That though is only if the redraws take the same time as the initial load time which i'm hoping it doesn't as it is also loading the graphics as well. The new firebug timers don't work nearly as well as the old ones. At least they don't seem to provide the extremely detailed information that they once did. Time will tell!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-3951876121532986129?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/3951876121532986129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/05/general-updates.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/3951876121532986129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/3951876121532986129'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/05/general-updates.html' title='General Updates'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-1075279160461592682</id><published>2009-04-14T18:33:00.000-07:00</published><updated>2009-04-14T18:39:46.506-07:00</updated><title type='text'>Matthew's Miracle Diet</title><content type='html'>Ok, want a diet that works? This is especially for computer geek types like me who tend to sit at their computer a lot. Try not being able to get a full time job building websites and such and having to work full time night-shift at Walmart along with holding at least 1 part time job. Just being out 16+ hours a day means you won't even have time to bother with pesky things like food or sleep. :p Not to mention all that excersize that you'll be getting! Ugh, i'm too old for this sh*t. But hey! it's keeping my bills paid and the people at their are great, a few lazy people (but you'll find those in any job) but none of the back-stabbing that tends to flutter around office jobs. Just temporary work though, helping to reconstruct a walmart into a super-walmart so I maybe have a month left their tops. I do plan on getting back to work this weekend though on the engine as getting a working game that can generate me some mula may be my only option out of this hole.&lt;br /&gt;&lt;br /&gt;On the plus side i think i've lost about 20 lbs now and just getting into my 3rd week working their. Not that i was really over weight but was starting to put on some pudgy marriage weight. :p&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ok, gotta go don't wanna be late! Cheers!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-1075279160461592682?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/1075279160461592682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/04/matthews-miracle-diet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/1075279160461592682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/1075279160461592682'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/04/matthews-miracle-diet.html' title='Matthew&apos;s Miracle Diet'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-8342721471470413259</id><published>2009-03-24T05:58:00.000-07:00</published><updated>2009-03-24T06:13:03.318-07:00</updated><title type='text'>Perfectionism</title><content type='html'>Wikipedia ...&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Perfectionism&lt;/span&gt;, in psychology, is a belief that perfection can and should be attained. In its pathological form, perfectionism is a belief that work or output that is anything less than perfect is unacceptable. At such levels, this is considered an unhealthy belief, and psychologists typically refer to such individuals as &lt;span class="Apple-style-span" style="font-style: italic;"&gt;maladaptive &lt;/span&gt;perfectionists.&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;Ok, i realize trying to make everything flow absolutely perfect is unhealthy and cannot really be achieved ... but i just can't help it. I mean it has to work right! The lives of villagers depend on it! Ok, not really ..  :p&lt;br /&gt;&lt;br /&gt;Making good progress on getting the map to flow correctly though! What i've done is created 9 arrays that hold the basic map data. each of these arrays draws to a seperate canvas that is 2048x1024 ... i do this in order to speed processing. While i *could* try and make that canvas buffer larger that in itself would run into more problems, mainly having to go through map reloads. the 3x3 buffer allows me to reload and redraw areas off-screen and reduce the amount of time that the useri has to spend reloading data.&lt;br /&gt;&lt;br /&gt;Also, the 3x3 array is dynamic ... meaning that the data as position 1,1 may not always be what's in the top, left corner. I simply have a pseudo-pointer (javascript doesn't do real pointers), that points to the current top-left of the drawing area. since the width and height of the array are fixed this allows me to draw the overflow sections by using 1st grade math ... p1+3 (right side), p1+1 (bottom), p1+4 (buttom right). Very simple!&lt;br /&gt;&lt;br /&gt;The biggest trick is having to fit the pieces together smoothly. Because the minimap is click-able and draggable this changes a lot of the reference data. The good thing is that once i get this working, the same math applies to square tile-based layouts as it does to isometric tile based layouts.&lt;br /&gt;&lt;br /&gt;And thus no code to show off today, perhaps soon though but again i only allow myself to work on this for a little while each week as bills come first. bleh!&lt;br /&gt;&lt;br /&gt;Once i get this done, build some simple animation routines and get the basic collision working I will start making some mini-games in order to test the engine out properly. Not sure what i'm going to do first, i'm thinking perhaps a canvas-based tower defense game.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-8342721471470413259?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/8342721471470413259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/03/perfectionism.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/8342721471470413259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/8342721471470413259'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/03/perfectionism.html' title='Perfectionism'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-438642552908907765</id><published>2009-03-20T10:35:00.000-07:00</published><updated>2009-03-20T11:13:58.488-07:00</updated><title type='text'>Guilds in RPG's</title><content type='html'>Not going to spend long on this today, too many things on the "honey-do" list not to mention sites that I need to get completed to keep food in our bellies. For starters in most mmo's their seem's to be a severe lack of real guild support for the players. Not to mention the fact that most of these mmo's are mearly about the grind and getting levels and seem to forget about other things.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Umm, idk why we can't get more female players ... i mean there's like 7 billion different monsters to kill! Ugh!...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That seems to be the general attitude that i've heard from admins and developers of games. Ok, well I guess i have the luxury of having a wife that likes to playe rpgs, well at least now she does. She very much doesn't like the grind and prefers to up her other crafting type skills and most monster-killing that she does do is related to that. Now i know that not all women prefer this type of thing ... which is really my point, no one strickly likes any one thing. But I digress I do seem to be getting slightly off topic.&lt;br /&gt;&lt;br /&gt;The whole point being in order to even make these expansions of what guild can do, you also have to expand the content available to them. The only real problem with any of this is the fact that it expands the possibility of cheaters and scammers, but the only real way to deal with that is with the help and support of your player base.&lt;br /&gt;&lt;br /&gt;In addition to guild and town buildings/housing their should be ways to organize this ... for both the players and the guild owners. Here is a breakdown of my ideas ...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;MMORPG Guild Structures ...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Nation -&gt; County -&gt; Town&lt;br /&gt;&lt;br /&gt;To form a Nation you have to have at least 2 Counties.&lt;br /&gt;&lt;br /&gt;To form a County you have to have at least 2 Towns&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Society -&gt; Faction -&gt; Circle&lt;br /&gt;&lt;br /&gt;Societies are secret clans, they may not form cities (that would defeat the "secret" part).&lt;br /&gt;Members of a circle cannot see members of other circles, only the officers and leaders can see this amount of structure.&lt;br /&gt;&lt;br /&gt;A society themselves may be public and have an office so that they may give off a certain appearence. The factions and circles however, and their intentions,  always remain secret. For example your Women's Society has a faction named the Black Widow's that is dedicated to only killing male players.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Clan -&gt; Guild -&gt; Squad&lt;br /&gt;&lt;br /&gt;"Guild" is the starting point, they may break their members into squads if they wish. Multipul guilds can form a clan. You can be a Member of multipul guilds (i.e.: Your a member of Knights of Ni and the Gardening guild.)&lt;br /&gt;&lt;br /&gt;Guilds are usually based in towns that they help to support, but they are not required (obviously unless the town you build your 'base' in requires your help).&lt;br /&gt;&lt;br /&gt;Guilds can build bases in multipul towns ... for example Your Guild, The Brotherhood of Bronze has their main office built in Noviscus but a minor recruitment type office in nearly every other major town.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All of the above should be able to share resources, though societies this is obviously limited due to their nature. All of these resources though take up space so you have to have a place to put these donations.&lt;br /&gt;&lt;br /&gt;This is definatly the early stages of this idea and up for change. But i think you see the basic idea that I am getting too ... more possibilities for players and stop trying to limit them. They do all of this anyways!!! If you impose a limit of 15 players per guild, all they do is make multipul guilds. Impliment it into the game, keep their possibilities open and just let them have fun with it.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-438642552908907765?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/438642552908907765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/03/guilds-in-rpgs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/438642552908907765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/438642552908907765'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/03/guilds-in-rpgs.html' title='Guilds in RPG&apos;s'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-6760185518376109963</id><published>2009-03-18T11:58:00.000-07:00</published><updated>2009-03-18T12:41:15.205-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lychgate'/><category scheme='http://www.blogger.com/atom/ns#' term='housing'/><title type='text'>Expansion on Housing</title><content type='html'>Ok, going to expand on my ideas for player owned housing. The idea of the players being able to build and modify the existing landscape will be one of the core elements on the actual javascript engine. This, like all other items beyond basic drawing routines will be built as a module so it can be added too and/or modified easily.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the other game I am developing, Nemesis Star (a space-based MMOR), actual habitable planets are somewhat rare so the players have the option of construction massive space stations. In addition to this they will be able to rent sections of their newly constructed station out. As such it makes sense to me, since i have this similar idea in multiple games, that it should be built into the core engine. Not to mention the fact that a great portion of online players really like the idea of having their own little piece of the world that they own.&lt;br /&gt;&lt;br /&gt;I have played way too many mmorpg's in my life, quite a few of them in their early release and beta stages. A great many of them totally flop on their ideas for housing, perhaps due to a lack of understanding of the wants and needs of their player base? Or problems due to lack of available land, or allowing them to build houses pretty much anywhere. I remember one 3D FPS types mmorpg that some friends and I played, we put our house on top of a gigantic tree. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyways I'm rambeling a bit here so here's  an expansion of the list of core ideas that should be addressed.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Guild Housing.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Almost all players join a guild and as such they should be allowed special housing just for them! Any housing built for the guild is owned by the guild itself, not any one player. This is to prevent characters who go inactive but control the resources of the guild.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Hiring Workers.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Not all players will want to spend the time leveling up construction and building skills just to add a single room to their house. You should be able to hire other players to build your house for you! Not only does this encourage a few to work these skills, but it opens up a whole new market for the players beyond just crafting a billion arrows to sell.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Hiring NPC's.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In order to get people from spamming the town square with their goods they are wanting to sell you will have the ability to hire a merchant to sell them for you. This obviously is not a new idea for any of those who have played Ultima Online. In addition you can hire protection for your house, expecially seeing how you can be attacked by "monsters".&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Traps and Magical devices.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Certain sensitive rooms you may wish to put traps on if you are part of a PvP town. Their will of course be areas that you can store your hard-earned items but anything stored your house withing this type of town is up for grabs by an expert thief. You may have to feed and pay an NPC guard untill the day they die, but an Iron Golem never sleeps and doesn't care for gold.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;To Catch A Thief ...&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;In order to prevent a massive uprising of theives their has to be a way for players to bring them to justic. And as such your traps and NPC guards always have a chance to capture the player roaming around your home. This can lead to prison time or even public hangings, it is entirely up to the town. I'm sure their will have to be quite a bit of tweaking work in order to get it to run smoothly, but it is an idea that has been mentioned repeatedly across many different mmorpg's but has never been taken seriously. &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Environmental Changes ...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Due to the fact that the map is saved on the server and delivered dynamicly you will be able to make some changes to the map itself. Things such as planting trees, cutting trees down that are in your way, leveling the ground out and more. Say for example your land area borders a mountain / cliff area. You do have the option to begin a tunnel and continue your town inside of the mountain. The downside, to that is if your town get's taken over by mob's, they also take over your new dunegon.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Unbuildable Areas ...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Their are none, but some areas may require a great deal more work to ... pacify .. than others. Not to mention if you just start throwing up a house just anywhere you may find the kings guards on your doorstep demanding their taxes and other fees. Or perhaps you build your house within a PvP town's area without their permission ... they now have the right to take the taxes out of your hide.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Underwater Cities ...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes, when i said you should be able to build anywhere ... with the right technology and skills ... you can build anywhere!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;That about sums up the core ideas I have for housing, next i will touch on player guilds, factions, towns, nations.&lt;br /&gt;&lt;br /&gt;-M&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-6760185518376109963?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/6760185518376109963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/03/expansion-on-housing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/6760185518376109963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/6760185518376109963'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/03/expansion-on-housing.html' title='Expansion on Housing'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-5744153190447429922</id><published>2009-03-17T06:36:00.001-07:00</published><updated>2009-03-18T12:41:25.117-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lychgate'/><category scheme='http://www.blogger.com/atom/ns#' term='housing'/><title type='text'>Goal for Lychgate</title><content type='html'>Nothing to report yet on my new logo page, having some problems still with the icons hopping around like little bunny rabbits. Pretty sure I know how to remedy it, just have to make the time to do it. But as always paying jobs come before any hobby work!!&lt;br /&gt;&lt;br /&gt;Anyways, my primary goal for lychgate is PvE, not PvP. Almost all games that i've played concentrate more on PvP than anything else (except for graphics). Me, i'd rather have more of a real story-line and some real character buildup / skill base.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For example, one of the things that really made Ultima Online was the fact that it had a large skill-base and PoH (Player Owned Housing). Their biggest problem was also PoH ... the world seems quite large untill you figure in a hundred thousand players all trying to build their new houses on top of each other. &lt;br /&gt;&lt;br /&gt;My ideas for remedying this? ...&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Super large maps / play area.&lt;br /&gt;&lt;br /&gt;The Biggest problem with this idea, beyond the obvious server-storage issues, is movement time. This is easy to remedy though by allowing a more intriquite teleport and gateing system. Also allowing players to build transportation networks (roads, ships, ect.) to increase travel speed.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Housing Decay.&lt;br /&gt;&lt;br /&gt;Yes, in real life if you don't properly maintain your house it will fall right on top of your head! Players who are inactive or just never visit their house will find that have decayed. While they will not dissapear entirely for quite some time, other players can take over the property and fix it up!&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Housing Prices.&lt;br /&gt;&lt;br /&gt;Prices for player housing in most of these games are way too cheap. Plus if you are within the bounderies of a kingdom you will have taxes to pay if the current king (emporer, mayor, whatever) deems it so. To offset these prices a rental system should be put in place as well. &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;PvE (Player vs Environment)&lt;br /&gt;&lt;br /&gt;Built your house right on top of a goblin village? You may find the goblins attacking your new house then! If you build a house / town / anything, you will have to defend it, this is not a human-friendly environment untill you make it so.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;PvP (Player vs Player)&lt;br /&gt;&lt;br /&gt;If you are part of a town that participates in PvP then your house and town can be attacked by other players as well as "monsters".&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Dynamic Construction&lt;br /&gt;&lt;br /&gt;You are not limited to a prefabricated anything. Build up your house one room at a time or all at once. Don't forget to put a roof on it if you have wood floors though as that will increase the decay rate of your home. When you purchase rights to build within a kingdom, you actualy purchase a piece of land to build on, so if you wish you can build a stone wall around your entire lot.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;That's it for now, have to head out for the day!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-M&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-5744153190447429922?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/5744153190447429922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/03/goal-for-lychgate.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/5744153190447429922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/5744153190447429922'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/03/goal-for-lychgate.html' title='Goal for Lychgate'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-6173282421841298707</id><published>2009-03-13T12:59:00.000-07:00</published><updated>2009-03-13T13:08:41.521-07:00</updated><title type='text'></title><content type='html'>Worked some on my new logo page again, i added an icon to one of the spikes then discovered just how bad they were hopping around in the wrong places. Tried to correct it by just modifying the starting angle by which it was being drawn but no dice there, made the problem worse. hehe. Finally figured by doing a little bit of flipping around in the object arrays it workes just fine. Next up on the list will be to add more interactivity than simple cheesy mouse-overs. I added color to the object so i could track the spikes location easily, but will leave it in there. Will also add in border-color to the next version to show what is currently highlighted. A lot of what i'm working on with this simple logo will will be applied to the canvas engine, especialy the mouse-detection within a triangle portion. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.nemesisstar.com/sb_index_nemi3.html"&gt;http://www.nemesisstar.com/sb_index_nemi3.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Trying to slow down how much i was playing Atlantica ... way too addictive! Had a few friends of mine play it and I have barely seen them online since ... lol. Pretty much confirms to me that your game doesn't have to be exactly like 'WoW' in order to be popular. I already knew this but it is always nice to have real confrimation.&lt;br /&gt;&lt;br /&gt;Ok, going to work on this some more but i doubt i have more to post quickly. If you want to look at the source code just go to the link above and view-source.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-M.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-6173282421841298707?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/6173282421841298707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/03/worked-some-on-my-new-logo-page-again-i.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/6173282421841298707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/6173282421841298707'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/03/worked-some-on-my-new-logo-page-again-i.html' title=''/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-1900078723209285094</id><published>2009-03-11T11:14:00.001-07:00</published><updated>2009-03-11T11:29:10.217-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP IP Deny'/><category scheme='http://www.blogger.com/atom/ns#' term='Spammer Blocker'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP htaccess'/><title type='text'>ASP IP Ban/deny list from .htaccess file.</title><content type='html'>:::&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;General Information&lt;/span&gt; :::&lt;div&gt;&lt;br /&gt;Granted I did not search for very long for for those familiar with microsoft servers know that trying to use an .htaccess file with IIS just doesn't work. If you have direct access to the server then you can follow &lt;a href="http://support.microsoft.com/kb/324064"&gt;microsofts directions&lt;/a&gt; on how to do it, but alas not everyone can do that. So I decided to write a little include script to  correct this issue.&lt;br /&gt;&lt;br /&gt;So far the only thing in the .htaccess file that it pays attention too is 'deny from' and 'allow from', and it will work across an ip range ... example:   192.168.1.1/100&lt;br /&gt;&lt;br /&gt;Just rename the .htaccess file that you want to use to htaccess.txt, save this script into a file that you can include in your asp pages. Very simple. If are not a developer and want this on your site then please &lt;a href="http://www.mnrinnovations.com"&gt;visit my site&lt;/a&gt; and I will get it up their for you. If you are a developer than feel free to use this script! You cannot charge for the script itself though, or include this script in a larger package that you charge for without my express permission.&lt;br /&gt;&lt;br /&gt;If there's something relating to .htaccess files that you want added to this script then please let me know and I will update it and repost it here. &lt;br /&gt;&lt;br /&gt;If your looking for a list of ip addresses then visit&lt;a href="http://www.wizcrafts.net/htaccess-blocklists.html"&gt;http://www.wizcrafts.net/htaccess-blocklists.html&lt;/a&gt; they have .htaccess files for several known spamming and scamming places, including ip's for several web-proxies to preven them from back-dooring into your site.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;:::&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;EDITS &amp;amp; UPDATES&lt;/span&gt; :::&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;none yet requested.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::: &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;SOURCE CODE&lt;/span&gt; ::: &lt;span class="Apple-style-span" style="font-style: italic;"&gt;11MAR2009&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;Dim FSO, FO, File, numitems, htfile, line, ips, ip, ip4, userIP, accessallowed, overrideaccess&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;accessallowed = true&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;overrideaccess = false&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;userIP = Request.ServerVariables("REMOTE_ADDR") &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;htfile   = "htaccess.txt"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;Set Fso  = Server.CreateObject ("Scripting.FileSystemObject")&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;Set Fo   = FSO.GetFile(Server.MapPath("\" &amp;amp; htfile))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;set File = FSO.OpenTextFile(Server.MapPath("\" &amp;amp; htfile),1,true)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt;' Pre-check for ALLOWed IP's. ...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;Do While Not File.AtEndOfStream&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;  line = File.readline                                  &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt;' Open the file for reading&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;  line = LTrim(LTrim(line))                           &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt;  ' Trim any excess space from edges&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;  if LCase(left(line,10)) = "allow from" then          &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt; ' IP Deny list, process this line&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;    if line &lt;&gt; "all" then                            &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt;   ' We won't be using the "all" keyword&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;      procDeny = LTrim(RTrim(Mid(left(line,10), 10))) &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt;  ' Trims out the ip list itself.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;      ips = Split(line, " ")                           &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt; ' List is usually seperated with a space, this is used as the delimiter&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;      for n = 0 to UBound(ips)                        &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt;  ' Loop through all the possible IP's.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;        ip = Split(ips(n), ".")                        &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt; ' Split IP string into an array&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;        if UBound(ip) = 3 then                        &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt;  ' Got an ip address and not a command. (should start at #2 normally but never assume!)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;          ip4 = split(ip(3), "/")                      &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt; ' Try to Split 4th IP address string into an array&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;          if UBound(ip4) = 1 then                      &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt; ' Lower and upper bound of the IP address. otherwise it is just an ip address!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;            for m = ip4(0) to ip4(1)                   &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt; ' Loop through all the IP's in this range and check them.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;              if ip(0)&amp;amp;"."&amp;amp;ip(1)&amp;amp;"."&amp;amp;ip(2)&amp;amp;"."&amp;amp;m = userIP then&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;                overrideaccess = true                   &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt;' Known good user, over ride the deny-checker and let them in&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;              end if&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;            next&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;          else&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;              if join(ip, ".") = userIP then         &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt;   ' Single ip address, not a group, check it.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;                overrideaccess = true                  &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt; ' Known good user, over ride the deny-checker and let them in&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;              end if&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;          end if&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;        end if&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;      next&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;    end if&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;  end if&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;Loop&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt;' we do a simple close and reopen of the file as to increase server compatibility&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;File.close()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;Set File = FSO.OpenTextFile(Server.MapPath("\" &amp;amp; htfile),1,true)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;if overrideaccess = false then&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;  Do While Not File.AtEndOfStream&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;    line = File.readline                                 &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt; ' Open the file for reading&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;    line = LTrim(LTrim(line))                             &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt;' Trim any excess space from edges&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;    if LCase(left(line,9)) = "deny from" then             &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt;' IP Deny list, process this line&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;      if line &lt;&gt; "all" then                              &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt; ' We won't be using the "all" keyword&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;        procDeny = LTrim(RTrim(Mid(left(line,9), 10)))    &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt;' Trims out the ip list itself.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;        ips = Split(line, " ")                           &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt; ' List is usually seperated with a space, this is used as the delimiter&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;        for n = 0 to UBound(ips)                         &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt; ' Loop through all the possible IP's.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;          ip = Split(ips(n), ".")                        &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt; ' Split IP string into an array&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;          if UBound(ip) = 3 then                         &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt; ' Got an ip address and not a command. (should start at #2 normally but never assume!)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;            ip4 = split(ip(3), "/")                      &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt; ' Try to Split 4th IP address string into an array&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;            if UBound(ip4) = 1 then                       &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt;' Lower and upper bound of the IP address. otherwise it is just an ip address!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;              for m = ip4(0) to ip4(1)                   &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt; ' Loop through all the IP's in this range and check them.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;                if ip(0)&amp;amp;"."&amp;amp;ip(1)&amp;amp;"."&amp;amp;ip(2)&amp;amp;"."&amp;amp;m = userIP then&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;                  accessallowed = false                   '&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt; Known bad user, deny them access.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;                end if&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;              next&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;            else&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;                if join(ip, ".") = userIP then            ' Single ip address, not a group, check it.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;                  accessallowed = false                   ' Known bad user, deny them access.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;                end if&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;            end if&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;          end if&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;        next&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;      end if&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;    end if&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;  Loop&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;end if&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;File.close()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;Set FO = nothing&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;Set FSO = nothing&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;Set File = nothing&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;if accessallowed = false then&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;  Response.Redirect "/no_access.asp"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 0, 153);"&gt;end if&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-1900078723209285094?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/1900078723209285094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/03/asp-ip-bandeny-list-from-htaccess-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/1900078723209285094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/1900078723209285094'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/03/asp-ip-bandeny-list-from-htaccess-file.html' title='ASP IP Ban/deny list from .htaccess file.'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-2971985886413857269</id><published>2009-03-06T19:39:00.001-08:00</published><updated>2009-03-06T19:49:17.332-08:00</updated><title type='text'>New javascript/canvas splash page</title><content type='html'>Still working on my new splash page, i'm just not happy untill it works 100% like i want it too. You can view version two here:&lt;a href="http://www.nemesisstar.com/sb_index_nemi2.html"&gt; http://www.nemesisstar.com/sb_index_nemi2.html&lt;/a&gt; the first version is still in the same place, just go the the other blog entry to look at it and the code walkthrough.&lt;br /&gt;&lt;br /&gt;Not going to go through all of this, basicly i had to get the 3 points of the triangle(s) and run them through a barycentric calculation.  If you want an explination on how that math works then visit these two sites ...&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://www.blackpawn.com/texts/pointinpoly/default.html"&gt;http://www.blackpawn.com/texts/pointinpoly/default.html&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://2000clicks.com/mathhelp/GeometryPointAndTriangle3.htm"&gt;http://2000clicks.com/mathhelp/GeometryPointAndTriangle3.htm&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Now here's the main piece of code that has been added ...&lt;br /&gt;&lt;br /&gt;&lt;div&gt;        if ((((mouseX-ckW)&lt;x)&gt;x)) &amp;amp;&amp;amp; (((mouseY-ckW)&lt;y)&gt;y)))&lt;/div&gt;&lt;div&gt;        {&lt;/div&gt;&lt;div&gt;          // Calculate the points.&lt;/div&gt;&lt;div&gt;          px1 =  x;&lt;/div&gt;&lt;div&gt;          py1 =  0;&lt;/div&gt;&lt;div&gt;          px2 = ((spikes[i].width * angCos[mmAng]) - (38 * angSin[mmAng]))+x;&lt;/div&gt;&lt;div&gt;          py2 = ((38 * angCos[mmAng]) + (spikes[i].width * angSin[mmAng]));&lt;/div&gt;&lt;div&gt;          px3 = ((0 * angCos[mmAng]) - (77 * angSin[mmAng]))+x;&lt;/div&gt;&lt;div&gt;          py3 = ((77 * angCos[mmAng]) + (0 * angSin[mmAng]));&lt;/div&gt;&lt;div&gt;          &lt;/div&gt;&lt;div&gt;          // Y-Axis Scale modification&lt;/div&gt;&lt;div&gt;          py1 = ((py1+y)*(scaleY))+ ctxHeight*((1-scaleY)/2);&lt;/div&gt;&lt;div&gt;          py2 = ((py2+y)*(scaleY))+ ctxHeight*((1-scaleY)/2);&lt;/div&gt;&lt;div&gt;          py3 = ((py3+y)*(scaleY))+ ctxHeight*((1-scaleY)/2);&lt;/div&gt;&lt;div&gt;          &lt;/div&gt;&lt;div&gt;          // barycentric calculation&lt;/div&gt;&lt;div&gt;          b0 =  (px2 - px1) * (py3 - py1) - (px3 - px1) * (py2 - py1);&lt;/div&gt;&lt;div&gt;          b1 = ((px2 - mouseX) * (py3 - mouseY) - (px3 - mouseX) * (py2 - mouseY)) / b0;&lt;/div&gt;&lt;div&gt;          b2 = ((px3 - mouseX) * (py1 - mouseY) - (px1 - mouseX) * (py3 - mouseY)) / b0;&lt;/div&gt;&lt;div&gt;          b3 = ((px1 - mouseX) * (py2 - mouseY) - (px2 - mouseX) * (py1 - mouseY)) / b0;&lt;/div&gt;&lt;div&gt;          &lt;/div&gt;&lt;div&gt;          if (b1&gt;0 &amp;amp;&amp;amp; b2&gt;0 &amp;amp;&amp;amp; b3&gt;0) {&lt;/div&gt;&lt;div&gt;           spikes[i].mouseover = true;&lt;/div&gt;&lt;div&gt;           } else {&lt;/div&gt;&lt;div&gt;           spikes[i].mouseover = false;&lt;/div&gt;&lt;div&gt;           }&lt;/div&gt;&lt;div&gt;          &lt;/div&gt;&lt;div&gt;        } else {&lt;/div&gt;&lt;div&gt;          spikes[i].mouseover = false;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        }&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Not going to walk you through every line of code there but basicly it it calculated the rotation of the 3 points (without the Y axis modification). Then it adds in and scales the points according to the current scaleY. After that it simply runs through the barycentric calculation formulas and does a simple check.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you read the last blog entry you should also notice that it doesn't draw the spikes from an image any longer, now javascript renders them to the canvas through a simple object prototype called 'Spikes' ...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;    function Spikes()&lt;/div&gt;&lt;div&gt;    {&lt;/div&gt;&lt;div&gt;      this.x = 0;&lt;/div&gt;&lt;div&gt;      this.y = 0;&lt;/div&gt;&lt;div&gt;      this.rad = 0.0;&lt;/div&gt;&lt;div&gt;      this.width = 105;&lt;/div&gt;&lt;div&gt;      this.ctx = '';&lt;/div&gt;&lt;div&gt;      this.mouseover = false;&lt;/div&gt;&lt;div&gt;      this.draw = function()&lt;/div&gt;&lt;div&gt;      {&lt;/div&gt;&lt;div&gt;        this.ctx.save();&lt;/div&gt;&lt;div&gt;        this.ctx.strokeStyle = "rgba(255,0,0,0.5)";&lt;/div&gt;&lt;div&gt;        this.ctx.lineWidth = 1;&lt;/div&gt;&lt;div&gt;        this.ctx.translate(x,y);&lt;/div&gt;&lt;div&gt;        this.ctx.rotate(rad);&lt;/div&gt;&lt;div&gt;        this.ctx.beginPath();&lt;/div&gt;&lt;div&gt;        this.ctx.moveTo(0,0);&lt;/div&gt;&lt;div&gt;        this.ctx.bezierCurveTo(0, 15,  85, 23, this.width,  38)&lt;/div&gt;&lt;div&gt;        this.ctx.bezierCurveTo(85, 53, 0, 62, 0,  77)&lt;/div&gt;&lt;div&gt;        this.ctx.bezierCurveTo( 5, 67, 5, 10, 0,  0)&lt;/div&gt;&lt;div&gt;        if (this.mouseover) this.ctx.fillStyle = "rgba(255,0,0,0.5)";&lt;/div&gt;&lt;div&gt;        this.ctx.fill();&lt;/div&gt;&lt;div&gt;        this.ctx.restore();&lt;/div&gt;&lt;div&gt;      };&lt;/div&gt;&lt;div&gt;    }&lt;/div&gt;&lt;div&gt;    spikes = new Array();&lt;/div&gt;&lt;div&gt;    for (i = 0; i&lt;=8; i++) { spikes[i] = new Spikes(); }&lt;/div&gt;&lt;div&gt; &lt;br /&gt;&lt;br /&gt;yes, draw is a function not a string ... remember EVAL is EVIL, we don't use it. If you haven't used javascript prototypes before then you definatly will have to read up on them as i progress through this, or if you want to mess with anything in the google api.&lt;br /&gt;&lt;br /&gt;Ok, i need a break and am going to go blow something up.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-2971985886413857269?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/2971985886413857269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/03/new-javascriptcanvas-splash-page.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/2971985886413857269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/2971985886413857269'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/03/new-javascriptcanvas-splash-page.html' title='New javascript/canvas splash page'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-3626669124744545672</id><published>2009-03-05T05:26:00.001-08:00</published><updated>2009-03-05T18:35:54.272-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AI'/><category scheme='http://www.blogger.com/atom/ns#' term='lychgate'/><category scheme='http://www.blogger.com/atom/ns#' term='creatures'/><title type='text'>AI Game Theory</title><content type='html'>Still waking up, and very unfortunately I am sipping tea instead of coffee. The wife insists that it's better for me. I'm not sure about all that ... :-)&lt;br /&gt;&lt;br /&gt;My thoughts on how I want the default AI to work in my lychgate engine:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Multiple levels of AI intelligence&lt;/span&gt;. Deer, and rabbits will not react as well as goblins, who will not react as well as dragons. I don't believe this should go by the default rule and just make them much stronger just to simulate this. Not going to do any JavaScript neural net programming ... i think that would possible be overkill. Instead the more creatures with more intelligence should have their own databases for battles with the characters marking successful and unsuccessful attack methods. Very simple, not real complicated programming and it has been proven to work in games such as computer chess.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Animal Intelligence.&lt;/span&gt; Be default animals fear sentient creatures that attack them so as such herbivore and omnivore animals should by default make an attempt to run away. This will be a bit more difficult due to the battle style that I have chosen to go with but I'm sure with some trial and error in the alpha tests we can get this to work very well.  Carnivores though, especially pack animals, may decide that attacking is their best choice so should run the simplest version of rule #1.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Sub-Human.&lt;/span&gt; Goblins, and other related creatures will be classified as sub-human, and use the second simplest version of rule #1. They will though always travel in packs but may not always rush to help their friends due to their higher fear factor.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Human. &lt;/span&gt;While it will never be close to real human intelligence, but through building it's own database of battle techniques to use against varying foes I believe we can simulate it very well. These and the other more intelligent foes always give more experience as well. The game should not be about the grind, every other game concentrates on that, i'm looking for more social interaction and group activities not just "hey, i killed 10,500 orcs and completed my noobie quest!"&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Above-Human.&lt;/span&gt; Better usage of the database, goal will be to be the big-blue of rpg battles. Yes, i have this problem where i dream to big. :p But if your going to dream that's the only way to do it.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;God-Like.&lt;/span&gt; Not only will it try to always choose the best usage of the database, they can influence all other creatures and can randomly be taken-over by the Admins! The rest of the god-like creatures will remain a secret ... for now.&lt;/li&gt;&lt;/ol&gt;Creatures will also war against other creatures ... they are not all friendly and cozy together. Also because of this creatures, sub-human and above, can gain simple experience levels. Nothing nearly as complicated as actual players (too much data to keep track of) but just and additional 2-3 bits of information. Also they will have the ability to change out their weapons and armor ... the biggest reason for this is the god-like creatures and humans who wish to be 'evil'.&lt;br /&gt;&lt;br /&gt;Ok, that's enough ranting, some or all of these ideas may change depending on how will they work in actual implimentation ... but it's just me making this game at the moment and as such i'm the only one to bounce ideas off myself. :p&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-3626669124744545672?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/3626669124744545672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/03/ai-game-theory.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/3626669124744545672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/3626669124744545672'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/03/ai-game-theory.html' title='AI Game Theory'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-8144070248994333712</id><published>2009-03-04T04:59:00.000-08:00</published><updated>2009-03-05T05:26:01.691-08:00</updated><title type='text'>Busy Busy Busy</title><content type='html'>Ugh, barely any time to breath let alone work on lychgate. Been driving around Raleigh for what seems like an eternity now dropping of resumes and shaking hands. Most calls though have been from recruiters, which isn't that bad but they'll pretty much call anyone. Finally though the efforts are paying off and getting some real interviews.&lt;br /&gt;&lt;br /&gt;I've never had any luck with any of these job-posting sites though, only people who call me from them is the recruiters. Yes I'm still very much a geek and believe more and more things will migrate to the internet. But even in all it's glory it still can't beat the personal touch of actually meeting someone face-to-face when handing them a resume and shaking their hand.&lt;br /&gt;&lt;br /&gt;Perhaps if my job interview this afternoon goes well then I'll be able to have more time to concentrate on my game engine. Otherwise my wife and I will end up homeless soon. Neither of us have any family close by, but one of our friends in an online game we play invited us to stay with them if we do get our butts kicked out the door.&lt;br /&gt;&lt;br /&gt;Been playing a Korean made game called Atlantica though for some stress relief. It's pretty fun, reminds me of final fantasy a bit. The battles are somewhat more tactical than most mmo's I've played, but their pay is based off selling items and then calling it free. Which it is free, no real limitations and you don't have to buy anything. But you can also get to level 95+ in a couple weeks if you don't have a life at all. Seemed like it was a great concept but they got side tracked along the way.&lt;br /&gt;&lt;br /&gt;Well got to get to work, will post my interview results tomorrow and spell check this later.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-edit: spelling must be getting better, only FF only spotted one real error. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-8144070248994333712?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/8144070248994333712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/03/busy-busy-busy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/8144070248994333712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/8144070248994333712'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/03/busy-busy-busy.html' title='Busy Busy Busy'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-1898910746371252941</id><published>2009-02-25T11:06:00.000-08:00</published><updated>2009-02-25T12:17:26.760-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='canvas'/><category scheme='http://www.blogger.com/atom/ns#' term='nemesis star'/><title type='text'>New Logo using JavaScript and Canvas</title><content type='html'>&lt;blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;Been working on a new logo for my &lt;a href="http://www.nemesisstar.com/"&gt;nemesisstar.com&lt;/a&gt; website. Well not changing the logo really, just adding a bit of flair to it without using flash. If you want to take a look at it you can find it &lt;a href="http://www.nemesisstar.com/sb_index_nemi.html"&gt;here&lt;/a&gt;. Again, don't bother trying to look at it using IE, as the internet explorer browser does not yet support canvas, and no official work that i know of that IE8 will support it either. &lt;div&gt;&lt;br /&gt;Break down of how the script is working ...&lt;br /&gt;&lt;br /&gt;Ok, for speed reasons I'm using 3 canvas's, not just one. All the base objects are wrapped in a div tag, the first 'img' tag inside the div will be used for those browsers that do not support the canvas object. For non-game stuff I have not reason not to provide some sort of backwards-compatibility support ... at very least so the search engines can still browse the site. the very last. I will throw everything into  a nice style sheet and make it pretty a bit later.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Setup of the cavas objects ...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    var logo = document.getElementById('myLogo');&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    var logoBG = document.getElementById('myLogoBG');&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    var logoBG2 = document.getElementById('myLogoBG2');&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    var ctx = logo.getContext('2d');&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    var ctxBG = logoBG.getContext('2d');&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    var ctxBG2 = logoBG2.getContext('2d');&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    ctxWidth = parseInt(document.getElementById('myLogo').offsetWidth);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    ctxHeight = parseInt(document.getElementById('myLogo').offsetHeight);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    document.getElementById('myLogo').width = ctxWidth;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    document.getElementById('myLogo').height = ctxHeight;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    document.getElementById('myLogoBG').width = ctxWidth;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    document.getElementById('myLogoBG').height = ctxHeight;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    document.getElementById('myLogoBG2').width = ctxWidth;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    document.getElementById('myLogoBG2').height = ctxHeight;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    ctx.globalCompositeOperation = 'source-over';&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    ctxBG.globalCompositeOperation = 'source-over';&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    ctxBG2.globalCompositeOperation = 'source-over';&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Because I'm fitting the canvas objects to the screen width and height i need to adjust these values so that they are transformed to their appropriate 000px values. Otherwise, on some browsers at least, everything will have to pass through the scale routines and for some reason things really start to slow down.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Preloading the Graphics ...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Any graphics you use need to be preloaded, or if you are loading them as you need them in your script you need to verify that they are actually loaded before you use them ...&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    var imgLogoA = new Image();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    var imgLogoB = new Image();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    var imgLogoC = new Image();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    imgLogoA.src = "assets/images/logo1a2.png";&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    imgLogoB.src = "assets/images/logo1d.png";&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    imgLogoA.onload = function() { loadCntr++; chkLoad(); }&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    imgLogoB.onload = function() { loadCntr++; chkLoad(); }&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    function chkLoad()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;      if (loadCntr==loadTotal)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;      {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;        renderLogo();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;      }&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    }&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Very simple if you've done it before, no reason at all to make anything more complicated than you require. If you don't preload then you will get some very funky errors ... but inside the error text it will say 'no data' which is the key point to the error. The browser has 'no data' to work with .. as in, the image has not loaded.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;The animation script ...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;The script itself is pretty simple if you just walk through it line-by-line. Which I'm not going to do here. First everything needs to be set up and initialized ...&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    function renderLogo()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;      ctxBG.drawImage(imgLogoA, centerX-203, centerY-203);&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;      window.setTimeout(doRotate, 100);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;    }&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;The ctxBG is the middle layer which is holding the static logo. It is not moving at all in this portion of the script so their is no reason to keep redrawing it. Plus by sandwiching it between the three layers we can simulate the 3d effect.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;angCos[curAng] and angSin[curAng]&lt;/span&gt; ...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Very simple simple if you have worked on any sort of 3d application. It takes more time to access Math.sin than it does an array. So we pre-calculate any sin or cos value that we might need and put them into these two arrays. As for the rest of the formula it is a very simple circle drawing routine from basic math class ...&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;        x = (250 * angCos[curAng]+centerX);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;        y = (200 * angSin[curAng]+centerY);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;        rad = curAng*0.01745 + offAng;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;That tells us exactly where to draw all of the little spikes. The next line of code after the x,y are calculated converts the degree's to radians which is required by the canvas.rotate() function.  After that we actually have to do the drawing but there are two different buffers to draw too.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;          if (fbuff==false)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;The fbuff variable simply stands for "flip buffer" which tells the screen whether to draw to the foreground or the background based on the 'y' (vertical) value.  After that we do the actual drawing ...&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;            ctxBG2.save();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;            ctxBG2.translate(x,y);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;            ctxBG2.rotate(rad);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;            ctxBG2.drawImage(imgLogoB, 0, 0);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;            ctxBG2.restore();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;            curAng += 45;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;The canvas.save() and canvas.restore() do exactly like the sound, they save the current state of the canvas, allow us to do our manipulations, then restore it. canvas.translate(x,y) moves the origin point so that when we call the canvas.rotate(radian) function it rotates around the correct point and not the top of the screen (0,0).  canvas.drawImage(img,x,y) does exactly like it sounds ... draw's the little spike to the screen .. finally.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;      ctx.translate(0,ctxHeight*((1-scaleY)/2));&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;      ctxBG2.translate(0,ctxHeight*((1-scaleY)/2));&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;      ctx.scale(1,scaleY);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;      ctxBG2.scale(1,scaleY);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Above all that in the code is this piece which simply adjusts the vertcale scale value and re-centers the origin. The coupled with the buffer flipping is what gives us our pseudo-3d look without having to bother with full 3d code which is slow at best with the current canvas object. Full 3d support is to be added to the canvas object later, but they will have to get past the arguments about the standards first. Myself if i wanted to add full 3D i would just use &lt;a href="http://www.unity3d.com/"&gt;Unity 3D&lt;/a&gt; even though I don't like plug-ins.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Speed of the canvas rendering ...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I've done everything that I've been able to think of to make this run as fast as possible and have a great more that I do wish to add. So far Chrome seems to run it the fastest for me by far and the few people I've had test it have said that a higher end video card does help in the rendering speed. The only thing I don't like is with the black on white it seems a bit shaky in the rendering. I could probably add in 2 more buffers and then flip the visibility after they are rendered to remove that but I'm not positive how that will work out.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Future additions ...&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Add interactivity so the user can play with the logo&lt;br /&gt;* double-click top and it will spin top-to-bottom&lt;br /&gt;* double-click side and it will spin left-to-right&lt;br /&gt;* drag the spikes to increase or decrease the spinning speed.&lt;br /&gt;* be able to click and select a spike&lt;br /&gt;* add a highlight-glow to currently selected spike/icon&lt;/li&gt;&lt;li&gt;Add icons to the spikes&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Make the center image change according to the icon clicked on.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;See if i can get more speed by removing the canvas.scale() and converting the spikes to vector drawings instead of images.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Convert the entire script into an animation object/class.&lt;br /&gt;Will be using this same type of animation in the nemesis-star game so that i can add space-station and such around planets. When being used on a smaller scale like that the animation speed should &lt;span class="Apple-style-span"   style="border-collapse: collapse;   white-space: pre; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family:Arial;font-size:13px;"&gt;drastically &lt;/span&gt;increase.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-1898910746371252941?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/1898910746371252941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/02/new-logo-using-javascript-and-canvas.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/1898910746371252941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/1898910746371252941'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/02/new-logo-using-javascript-and-canvas.html' title='New Logo using JavaScript and Canvas'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-8015709503271386729</id><published>2009-02-24T08:10:00.001-08:00</published><updated>2009-02-24T08:36:10.975-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AI'/><category scheme='http://www.blogger.com/atom/ns#' term='MMORPG Stories'/><category scheme='http://www.blogger.com/atom/ns#' term='realism'/><title type='text'>MMORPG Stories</title><content type='html'>&lt;span class="Apple-style-span" style="color: rgb(41, 48, 59); font-size: 13px; "&gt;I had a question the other day relating to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;MMORPG's&lt;/span&gt; that I could not give a good answer too.  The question was ...&lt;br /&gt;&lt;blockquote style="font-style: italic; padding-top: 0px; padding-right: 32px; padding-bottom: 0px; padding-left: 32px; line-height: 1.6; margin-top: 0px; margin-right: 0px; margin-bottom: 0.6em; margin-left: 0px; "&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial; "&gt;&lt;blockquote style="font-style: italic; padding-top: 0px; padding-right: 32px; padding-bottom: 0px; padding-left: 32px; line-height: 1.6; margin-top: 0px; margin-right: 0px; margin-bottom: 0.6em; margin-left: 0px; "&gt;Can you name any &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;mmorpg&lt;/span&gt; that has an active story line that compels the player to play along with the story, not just walk around and randomly kill mobs, and skill?&lt;br /&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;br /&gt;Me, I could not think of one single game that did that. I asked a few of my friends and one of them suggested a new game in beta called &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Jumpgate&lt;/span&gt; in which he is participating in the beta. he said.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial; "&gt;&lt;div&gt;&lt;span style="display: block; padding-left: 6em; text-indent: -1em; "&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-style: italic; "&gt;The player is not REQUIRED to participate&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="display: block; float: left; color: rgb(136, 136, 136); "&gt;&lt;span class="Apple-style-span" style="font-style: italic; "&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="display: block; padding-left: 6em; "&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-style: italic; "&gt;but the players are actively influenced with the results.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="display: block; float: left; color: rgb(136, 136, 136); "&gt;&lt;span class="Apple-style-span" style="font-style: italic; "&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="display: block; padding-left: 6em; "&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-style: italic; "&gt;Example...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="display: block; float: left; color: rgb(136, 136, 136); "&gt;&lt;span class="Apple-style-span" style="font-style: italic; "&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="display: block; padding-left: 6em; "&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-style: italic; "&gt;A new line of weapons come out&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="display: block; float: left; color: rgb(136, 136, 136); "&gt;&lt;span class="Apple-style-span" style="font-style: italic; "&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="display: block; padding-left: 6em; "&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-style: italic; "&gt;If their faction doesn't complete the faction missions, then their weapons isn't released&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="display: block; float: left; color: rgb(136, 136, 136); "&gt;&lt;span class="Apple-style-span" style="font-style: italic; "&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="display: block; padding-left: 6em; "&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-style: italic; "&gt;and they will be at a collective disadvantage&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One of the things I want to do in my lychgate game itself, not the engine, was to make the story more interactive. Encourage group play that goes along with the story and weekly events to defend the 'human kingdom' from attack. While nobody should ever be required to play, it is just a game and not a job. Players should defiantly be encouraged to participate via rewards of some sort. Not just meaningless quests ... "please, this tree monkey offended me so go kill 100 of them and I'll give you some free stuff". &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Bleh&lt;/span&gt;, some quest.&lt;br /&gt;&lt;br /&gt;I also think the monsters/mobs themselves need a great deal more AI than what they have.  How hard could it possibly be to script some action in the town and not just have everyone standing in one spot all day and night!&lt;br /&gt;&lt;br /&gt;Also, I'm guessing no game designer has ever went deer hunting ... they don't freaking run to attack you! they run away! And a group of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Orcs&lt;/span&gt; which would supposedly be sentient, i mean they built houses however crude they might be. But you can walk up and attack one, and the others don't run to help their buddy? yeah right. Yes adding some more realism would make it more difficult for the players, but in turn it would also make it a lot less "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;ok&lt;/span&gt;, only 57 more demons and I'll level up again", and a lot more "hey guys, let's go raid the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Orc&lt;/span&gt; village together before they attack us!".&lt;br /&gt;&lt;br /&gt;And in concerns with the deer, unless your stealth can surpass the alertness of a deer (not likely w/o magic), your not going to kill one with your "+10 &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;vorpal&lt;/span&gt; sword of deer-slaying".  Use tracking to find it, and a bow or some sort of traps to kill it (traps for smaller game). Or go out with friends, some will be sent around to flush the deer or other game to you. This would not be that difficult to program and &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_8"&gt;I'm&lt;/span&gt; not sure why nobody really has yet.  Just too much "kill, gain exp, kill, gain exp" and not enough game anymore.&lt;br /&gt;&lt;br /&gt;I'll have a lot more comments on these ideas later. ;-) Feel free to post your ideas and comments about this!&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-8015709503271386729?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/8015709503271386729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/02/mmorpg-stories.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/8015709503271386729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/8015709503271386729'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/02/mmorpg-stories.html' title='MMORPG Stories'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-5533068127454698153</id><published>2009-02-17T07:44:00.000-08:00</published><updated>2009-02-17T08:29:20.763-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='optimize'/><title type='text'>Another jobless day</title><content type='html'>Another day passes, few phone calls yesterday from recruiters but I have not had very much luck with them so I won't get my hopes up.  At this point willing to relocate to just about anywhere to get a job. Wife insists that it's not the economy it's that I'm just lazy and haven't applied my self enough to the job hunt. Me being the quiet mousey type i just sit there and say nothing, I've learned that there's no point in arguing with her, she will keep going until she feels like she has won no matter how long it takes. But still, we're scraping by thanks to the grace of god and as long as that's happening we're a step above a lot of people in this day in age.&lt;br /&gt;&lt;br /&gt;Anyways, did a bit more work last night on the canvas engine. Seems like Firebug has changed since I've lasted worked with the profile in the console. It no longer lists all the functions that are called like the old version. The old version would even list what classes were accessed, how often, and how much time it took. But alas I will have to just make due with it, just seems like their development progress took a step back. I have the mini map scrolling properly across the mm buffer, just need to get it updating the main map area fluidly.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fluid updating of the map .... I've seen other's try this with DHTML and run into problems.  After you have optimized the draw portions of your map-renderer you then need a way to interact with it. Though I do try to avoid global variables for the obvious problems they can cause I've implemented a global boolean variable called notDrawing. This actually should be in the drawing class itself and it will be placed there later when I restructure it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At the beginning of any event function that will do any rendering to the map the variable 'notDrawing' is set to false. When the calculations and rendering is complete then notDrawing is set to true. This allows you to very simply check the renderer .... &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;if (notDrawing)&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;drawDetails(obj, x, y, tx, ty)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Very simple, but what is the point you may ask! Ok in order to make the mini map and the large main map move fluid they have to be redrawn as fast as the browser will allow. What you want to avoid though is over sending these draw calls as it will cause a slowdown instead and could lead to the browser being locked up. Even a short lockup of the browser will frustrate users and cause them to leave. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some other ways to optimize your JavaScript code... Avoid using EVAL, eval is bad as it forces a delay in your script and causes the browser to call it's parsing program. Other places where you use eval and might not even not it ... widows.setTimeout, or windows.setInterval. It has been common practice for years and i see this mistake in tutorials all the time where they do something like ... &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;windows.setInterval="myFunction();"&lt;/span&gt;. This is just like an eval statement and forces the browser to call it's parser routine. Instead remove the quotes and the parenthesis so it looks like .... &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;windows.setInterval=myFunction&lt;/span&gt;;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another way to optimize your JavaScript code is to use VAR. In JavaScript you do not have to declare your variables, but by doing so it becomes a global, and as stated previously use of global's is bad. This is one of the primary problems that people run into when using JS Scripts from multiple sources, the fact that the variables conflict. I've seen some scripts use super long variable names to avoid this, which is ok i guess but seems a bit pointless. Just predeclare all your variables that you use with a VAR statement instead. That limits their scope to inside the {} brackets and I'm pretty sure it limits it to inside the .js script file as well, though i would need to do some testing first to be totally positive on that. &lt;br /&gt;&lt;br /&gt;Ok, time to start wandering around Raleigh dropping off resumes to the local web business's. I was told by a recruiter that this looks desperate ... but then again he drives a Ferrari so I'm pretty sure that he hasn't tried to find a job in quite some time, especially in this economy.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-5533068127454698153?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/5533068127454698153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/02/another-jobless-day.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/5533068127454698153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/5533068127454698153'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/02/another-jobless-day.html' title='Another jobless day'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-6950626562456637895</id><published>2009-02-13T12:56:00.000-08:00</published><updated>2009-02-13T16:48:25.026-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='canvas engine'/><category scheme='http://www.blogger.com/atom/ns#' term='roadmap'/><category scheme='http://www.blogger.com/atom/ns#' term='lychgate'/><title type='text'>Lychgate Roadmap</title><content type='html'>&lt;span class="Apple-style-span"  style=" ;font-family:'Times New Roman';"&gt;&lt;div   style="margin-top: 6px; margin-right: 6px; margin-bottom: 6px; margin-left: 6px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; min-height: 1100px; counter-reset: __goog_page__ 0;   line-height: normal; font-family:'Times New Roman';font-size:12pt;"&gt;&lt;p align="center" id="fqbb" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span"  style=" font-weight: bold;font-size:24px;"&gt;Lychgate - the JavaScript Game Engine&lt;/span&gt;&lt;/p&gt;&lt;p align="center" id="fqbb" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" id="fqbb2" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;This is a portion of a Google document that I have created to assist me in my programming activities. I believe the first full game I will design this engine for will be for my Nemesis Star game. By doing this it will include support for ground, air and space activities across multiple planets. Nemesis Star however encompasses both RTS and RPG elements which should make the design of the basic engine a bit trickier but overall I think it would be a better final product for it.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;I will be revising this as I go and put forth a more detailed road-map to a full fledged game, but at the current moment getting these few things done would allow me to open up some closed alpha testing and tweak the game till it works properly. I do have a list started for requests from people to be part of the closed alpha, but if you wish to participate you must make this request before it begins.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" id="fqbb2" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;A few requirements I have laid down for myself ...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Classes&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Classes will be broken into groups based on what they do.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;These groups should work as independantly from each other as possible.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Allow dynamic loading and unloading of these classes and scripts.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Each group type will have basic get/put elements that are required for interaction with that group.&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;(this all allows multiple types of the same group.)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Cannot load more than one group type at the same time.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Graphics&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="western" id="fqbb4" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Graphic animation strips should be small, 1 animation type/direction per file. This means multiple files however it does give a big speed processing. I've tested this quite a bit and the larger the file the more the slowdown when clipping from it.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;The graphics library must support dynamic buffering. This would be the dynamic creating/deletion of canvas objects where needed. Back-buffering is a very old trick but it does very much apply when using the canvas tag to render scenes and animations. By pre-rendering certain things you get a great improvement in performance.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Dynamic loading and unloading of graphics. The map object will be designed to support a nearly infinite amount of different tile terrains. Because the base graphics are loaded into via smaller files the map engine itself can select what terrain tiles that it wishes to load. This allows the coder to put just what they want into the map from any terrain library that they wish.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A simple web-based graphics editor. Not really so much for creating graphics as for clipping, arranging animations and such. Can make the graphics editor more complicated later.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Web-based map editor. Their is none, map edits would be made by the GM/Owner in real time in the game world itself. Why create two version of the same thing.&lt;/li&gt;&lt;/ol&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p id="fqbb6" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;The to do list ...&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb11" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb12" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;h1 class="western" id="fqbb13" style=""&gt;&lt;span id="fqbb14"  style="font-family:Arial Black, sans-serif;"&gt;&lt;span id="fqbb15"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;A Super-Basic RPG&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;&lt;ol id="fqbb16" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb17" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb18" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb19"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb20"&gt;&lt;b id="fqbb21"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Basic Client Side Graphics Development&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb22" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb23" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb24" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb25"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb26"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Create the Draw Class&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb27" type="a" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb28" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb29" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb30"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb31"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;This class is responsible for all the drawing&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li id="fqbb32" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb33" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb34"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb35"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Create the Sprite Class&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb36" type="a" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb37" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb38" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb39"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb40"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;This is an extension of the ‘Draw’ class as it gives it the ability to use tiny buffers to perform animations and movement.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li id="fqbb41" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb42" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb43"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb44"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Create the Timer Class&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb45" type="a" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb46" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb47" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb48"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb49"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;This is what controls the Sprite Class and Draw class in order to insure that everything runs at the same speed across all supported types of computer systems.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li id="fqbb50" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb51" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb52"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb53"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Map-Drawing Layers&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb54" type="a" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb55" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb56" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb57"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb58"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Ground Layer&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb59" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb60" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb61"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb62"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Object Layer&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb63" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb64" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb65"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb66"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Mini-map&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb67" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb68" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb69"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb70"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Character Map&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li id="fqbb71" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb72" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb73"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb74"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Create the Panel Class, this utilizes the Draw class to display the panel information. But all the information itself is contained within this class. The “Overall Display” is a series of Panels so that they are more easily moved and migrated as required.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb75" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb76" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb77"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb78"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Primary Information Panel&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb79" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb80" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb81"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb82"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Overall Generic Display Setup&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li id="fqbb83" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb84" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb85"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb86"&gt;&lt;b id="fqbb87"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Basic Server Side Database&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb88" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb89" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb90" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb91"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb92"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Tables&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb93" type="a" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb94" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb95" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb96"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb97"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;MOB&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb98" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb99" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb100"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb101"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Map&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb102" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb103" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb104"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb105"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Player&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb106" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb107" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb108"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb109"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;NPC&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb110" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb111" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb112"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb113"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Scripts&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li id="fqbb114" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb115" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb116"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb117"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Encapsulation&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb118" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb119" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb120"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb121"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Write DB Access scripts, ultimately should support SQL and postGreSQL, (access support would be useless to include, so don’t!)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb122" type="a" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb123" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb124" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb125"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb126"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Methods … (Check W3C? or another Open Source Solution first?)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul id="fqbb127" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb128" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb129" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb130"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb131"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Open&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb132" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb133" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb134"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb135"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Get&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb136" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb137" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb138"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb139"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Set&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li id="fqbb140" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb141" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb142"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb143"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Properties&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li id="fqbb144" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb145" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb146"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb147"&gt;&lt;b id="fqbb148"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Basic Server Side Data Server&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb149" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb150" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb151" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb152"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb153"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Basic AJAX setup, XML&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb154" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb155" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb156"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb157"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Challenge-Pass.( Insure login through every connection via Sessions and Privacy Protection.)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb158" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb159" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb160"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb161"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;XML Packages …&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb162" type="a" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb163" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb164" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb165"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="ourg"&gt;&lt;i id="fqbb166"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Note:&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; Packages should ultimately be scriptable though an Admin section. The packages will be XML Templates with pre-programmed variables and scripting methods. This is done to ease later programming and increase the overall flexibility of the server.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb167" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb168" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb169"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb170"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;MAP Package&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb171" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb172" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb173"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb174"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Player Package&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb175" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb176" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb177"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb178"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;MOB Package&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb179" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb180" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb181"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb182"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;NPC Package&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb183" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb184" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb185"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb186"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Script Package&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb187" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb188" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb189"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb190"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Graphics Package&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li id="fqbb191" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb192" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb193"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb194"&gt;&lt;b id="fqbb195"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Navigating the Map&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb196" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb197" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb198" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb199"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb200"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Now we add the ability to move around. Phase 1.1 is where we test our ability to draw the map. This is in all encapsulated in a draw class.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb201" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb202" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb203"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb204"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Create the MOB class, “Mobile Object”&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb205" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb206" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb207"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb208"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Create the Player Class&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb209" type="a" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb210" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb211" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb212"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb213"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Add ability for the player to move&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb214" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb215" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb216"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb217"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Add animations&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li id="fqbb218" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb219" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb220"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb221"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Create the NPC Class&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb222" type="a" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb223" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb224" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb225"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb226"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;This first instance is super generic and only displays the NPC as a static object. We give it the ability to move later in Phase 1.06.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li id="fqbb227" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb228" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb229"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb230"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Create the Collision Class&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb231" type="a" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb232" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb233" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb234"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb235"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;An extension of the Map Class but does no drawing.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb236" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb237" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb238"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb239"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Prevents the player from moving into certain area’s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb240" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb241" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb242"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb243"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Controls trigger areas&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li id="fqbb244" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb245" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb246"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb247"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Create the Script Class&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb248" type="a" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb249" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb250" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb251"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb252"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;The script class load/unload scripts&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb253" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb254" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb255"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb256"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Is what the Collision class activates, specifically triggers.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li id="fqbb257" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb258" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li id="fqbb259" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb260" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb261"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb262"&gt;&lt;b id="fqbb263"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Our first battle&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb264" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb265" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb266" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb267"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb268"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Loading from remote server&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb269" type="a" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb270" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb271" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb272"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb273"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Battle-map&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb274" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb275" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb276"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb277"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Players&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul id="fqbb278" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb279" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb280" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb281"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb282"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;The first battle this will be a single player&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li id="fqbb283" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb284" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb285"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb286"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Enemies&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul id="fqbb287" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb288" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb289" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb290"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb291"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Initial Monster will be the standard ole Green Slime. After that it will be a combination of slimes and/or goblins.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li id="fqbb292" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb293" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb294"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb295"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;NPC’s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul id="fqbb296" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb297" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb298" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb299"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb300"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;The NPC will be the second part to this phase, buy a mercenary from the shop and it will participate in the battle with you.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li id="fqbb301" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb302" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb303"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb304"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Initial Drawing Setup&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb305" type="a" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb306" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb307" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb308"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb309"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Map&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb310" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb311" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb312"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb313"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Mini-Map&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb314" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb315" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb316"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb317"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Battle Panel Overlay&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb318" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb319" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb320"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb321"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Pre-load and Pre-draw Common Animations for speed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li id="fqbb322" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb323" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb324"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb325"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Initiative Phase&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb326" type="a" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb327" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb328" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb329"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb330"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Determine type of battle (turn-based or real-time)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb331" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb332" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb333"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb334"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Set Initial Initiative Matrix&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li id="fqbb335" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb336" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb337"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb338"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Battle Sequence&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb339" type="a" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb340" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb341" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb342"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb343"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Using Initiative Matrix begin the battle&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb344" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb345" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb346"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb347"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;When in turn-based mode everyone goes one-at a time.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb348" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb349" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb350"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb351"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;When in real-time mode everyone goes at the same time.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb352" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb353" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb354"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb355"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Keep repeating until one team is victorious&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li id="fqbb356" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb357" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb358"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb359"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Ending Sequence&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb360" type="a" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb361" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb362" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb363"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb364"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Give out items and experience to winners if the player is victorious.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li id="fqbb365" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb366" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb367"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb368"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Cleanup&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb369" type="a" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb370" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb371" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb372"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb373"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Close and destroy all object and classes created in this battle. Each object is stored in an object array called ‘trashcan’ when it is created.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li id="fqbb374" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb375" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb376"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb377"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Draw player onto map&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li id="fqbb378" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb379" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb380"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb381"&gt;&lt;b id="fqbb382"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Interacting with NPC’s&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb383" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb384" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb385" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb386"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb387"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Simple NPC Shop&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="fqbb388" type="a" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li id="fqbb389" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb390" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb391"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb392"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;The NPC should already be drawn by this time.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb393" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb394" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb395"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb396"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Setup NPC animations&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb397" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb398" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb399"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb400"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Setup shop window&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb401" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb402" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb403"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb404"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Setup shop XML Package. Refer to 1.3.3.a for details on this&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="fqbb405" style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p class="western" id="fqbb406" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;span id="fqbb407"  style="font-family:Arial, sans-serif;"&gt;&lt;span id="fqbb408"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Retrieve Data Package from server for specific NPC&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p class="western" id="fqbb427" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-6950626562456637895?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/6950626562456637895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/02/lychgate-roadmap.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/6950626562456637895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/6950626562456637895'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/02/lychgate-roadmap.html' title='Lychgate Roadmap'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-433852147886890298</id><published>2009-02-11T16:38:00.000-08:00</published><updated>2009-02-11T17:03:16.816-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bored'/><category scheme='http://www.blogger.com/atom/ns#' term='pacific ocean gyre'/><title type='text'>Ocean Cleanup</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://earthfirst.com/the-pacific-ocean-gyre-a-huge-swirling-mass-of-sadness-and-plastic/"&gt;http://earthfirst.com/the-pacific-ocean-gyre-a-huge-swirling-mass-of-sadness-and-plastic/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://en.wikipedia.org/wiki/North_Pacific_Gyre"&gt;http://en.wikipedia.org/wiki/North_Pacific_Gyre&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I see a lot of people talk about this and how big of a problem it is, bla bla bla. The only solutions I see offered as of yet is to reduce our use of plastic and/or convert to more bio-degradable plastic. Both good solutions as to not increase this disaster any further but it does little to fix the problem.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The oceans are the life blood of the planet, if we destroy them we might as well move the doomsday clock to midnight. I myself don't go to the beach much, can't even swim, grew up in the Midwest far way from any oceans. But alas I have contributed to this problem as everyone else on the planet has through passiveness and through my contributions to our disposable society.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It would not be a difficult process to begin to gather all of this plastic out of the ocean, it has to be done and the sooner the better. However it would be a lengthy process and then there is the matter of, "ok we got this big chunk of mess out of there, now what". The above link states that it's "twice the size of the continental U.S.".  I'm not sure how dense it is so any real calculations are out the window but it sounds like good material to build our own green island!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Why not? I've seen much dumber ideas pushed through the public (reference: the entire Bush presidency) and you have to do something with it. Can't just throw it into the ground that's a whole other problem in itself. Could burn it but who's going to put a power plant in the middle of the ocean?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Push the water through filters to gather out the particles, use the sun to melt the mass together, walla instant island! then since it would be outside any nations boundaries, declare your own green country! Margaritas anyone!?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ok ok, I was really bored this evening while working on websites. :-) &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-433852147886890298?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/433852147886890298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/02/ocean-cleanup.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/433852147886890298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/433852147886890298'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/02/ocean-cleanup.html' title='Ocean Cleanup'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4023996430602445784.post-8009971730590987971</id><published>2009-02-09T15:09:00.000-08:00</published><updated>2009-02-09T20:54:30.457-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='canvas engine'/><category scheme='http://www.blogger.com/atom/ns#' term='lychgate'/><category scheme='http://www.blogger.com/atom/ns#' term='faq'/><category scheme='http://www.blogger.com/atom/ns#' term='canvas'/><category scheme='http://www.blogger.com/atom/ns#' term='mmorpg'/><title type='text'>Lychgate: a JavaScript MMORPG game</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;General Info&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Ok, so I've finally found a couple of minutes to setup a real blog for this. You can see previous entries for my Lychgate project at &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;a href="http://code.google.com/p/lychgate/wiki/MiniBlog"&gt;http://code.google.com/p/lychgate/wiki/&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;a href="http://code.google.com/p/lychgate/wiki/MiniBlog"&gt;MiniBlog&lt;/a&gt;, but it looked like it would start getting a bit long so I've set this one up.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Goal of this project: To create an JavaScript MMORPG using the new HTML5 &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Canvas &lt;/span&gt;HTML Tag:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Specification: HTML5&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Standardized by: &lt;a href="http://www.whatwg.org/"&gt;WHATWG.org&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Initially released by Apple the canvas html element is now supported by FireFox, Opera, Chrome and Safari natively. In short, canvas allows you to draw anything you wish straight to the web-page. No plugins required so you are only limited by your imagination as far as what it can do. The only draw back is lack of support from Microsoft in IE, though there is a very clunky JavaScript version available it will not run the more complicated things that i develop here ... which is of course games.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;FAQ&lt;/span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Some questions people have asked me over the year or so that I have been working on this project.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Why Do this?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Because I can! Few other people are really attempting such a project and no others are that I currently know of are developing it in canvas. It is also the best way that I can think of to really show off my skills in JavaScript. While I could do this outside of canvas but this has been done and the results are ok at best with a couple of exceptions, yet even those exceptions have their limitations.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Why not just make a flash game?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Have you played some of the flash games out there? Flash is horrible at best.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;What is the best browser to use?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Difficult question, Google's new Chrome browser is by far fastest in pure processing speed, but it does have a few graphic quirks such as it will not properly apply opacity to images. Firefox, though somewhat slower, does render canvas very well but Opera and Safari both are right behind it. So as long as it's not IE it's pretty much up to you unless your on a slower computer then you should use Chrome.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Will this be open source?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Yes the base-code for the client side of the game will be open source. This will not include specialized code for the game I will be developing using this code, nor will it include any server-side code.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Will this require any other JavaScript Modules?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;No, it will not require anything else and will be completely self-sustaining to include it's own prototyping and classing systems and at the moment will be built on a maximum of JavaScript 1.5 though I may change this to 1.3 at a later time.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;How will you do sound-effect and music?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Unfortunately JavaScript cannot do sound natively. So I plan on writing interpreters in flash, java and unity3d to play sound so that the user can use any or just turn sound off entirely.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Will support be added for Internet Explorer?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Currently there is no plans to add any sort of specialized code to just to make it work in IE.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;When will there be a playable alpha version?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;I currently work for myself, so that and job-searching takes up a great deal of my time. Such is how life goes at times so unfortunatly there is no definitive release date. People who are paying me to work on their website for them always come first over hobby projects.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;How will maps load?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Maps will be qued up and pre-rendered to a buffer to avoid the horrible "loading please wait". The entire engine will be run via a custom Ajax script that I have custom built. While i could just use a pre-built Ajax script such as one mootools offers the requirements of something like this are much more intense than just a simple web2.0 website. This queing of the maps not only reduce/eliminate the loading screens it also has a nice side effect of increasing overall draw-rates.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4023996430602445784-8009971730590987971?l=javascript-mmorpg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javascript-mmorpg.blogspot.com/feeds/8009971730590987971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/02/lychgate-javascript-mmorpg-game.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/8009971730590987971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4023996430602445784/posts/default/8009971730590987971'/><link rel='alternate' type='text/html' href='http://javascript-mmorpg.blogspot.com/2009/02/lychgate-javascript-mmorpg-game.html' title='Lychgate: a JavaScript MMORPG game'/><author><name>M.Hagston</name><uri>http://www.blogger.com/profile/10972886419070208015</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://4.bp.blogspot.com/__G1irVlL3Qo/SZB052jOO5I/AAAAAAAAAAM/ga46grjyQJM/S220/matthew_hagston.jpg'/></author><thr:total>0</thr:total></entry></feed>
