<?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-501453360028352333</id><updated>2011-08-01T11:09:36.256-07:00</updated><category term='scaleable server'/><category term='pngout'/><category term='erlang'/><title type='text'>Evidyon Summer</title><subtitle type='html'>A record of the development of Evidyon during summer 2009</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>66</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-2181184492249870714</id><published>2009-08-30T08:42:00.000-07:00</published><updated>2009-08-30T11:32:43.458-07:00</updated><title type='text'>Finalizing Fixes</title><content type='html'>After last week's semi-successful debug launch, I'm working today on finishing up the revised version with updated...everything!  So far, the changes include:&lt;div&gt;- new hp/mp calculations&lt;/div&gt;&lt;div&gt;- new spell system&lt;/div&gt;&lt;div&gt;- consumables now work&lt;/div&gt;&lt;div&gt;- sacrificing to a geosid now triggers an "event" every &lt;configurable&gt; of geonite.  generating consumables on this event is currently implemented&lt;/configurable&gt;&lt;/div&gt;&lt;div&gt;- redesigned chaos effects&lt;/div&gt;&lt;div&gt;- new design equations for how agility/intelligence/strength affect magic speed/damage and physical speed/damage&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Before the release tomorrow,  I still need to finish up a few things:&lt;/div&gt;&lt;div&gt;- allow town geosids to create a portal when they are triggered&lt;/div&gt;&lt;div&gt;- make gold look like gold on the ground&lt;/div&gt;&lt;div&gt;- make town geosids act like safe zones (good players can't be killed) and wild geosids act like pvp arenas (players don't lose exp for dying, don't drop items when killed, etc)&lt;/div&gt;&lt;div&gt;- add an npc type for town guard that attacks evil&lt;/div&gt;&lt;div&gt;- revise special effects for all of the spells&lt;/div&gt;&lt;div&gt;- create the hunter/warrior spell spread&lt;/div&gt;&lt;div&gt;- generate the new map&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;b&gt;1430&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Looking good so far:&lt;/div&gt;&lt;div&gt;- town guard has been added&lt;/div&gt;&lt;div&gt;- hunter spell spread is nearly complete (it seems really cool!)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-2181184492249870714?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/2181184492249870714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=2181184492249870714' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/2181184492249870714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/2181184492249870714'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/08/finalizing-fixes.html' title='Finalizing Fixes'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-3653228660722146183</id><published>2009-08-24T13:55:00.000-07:00</published><updated>2010-01-12T10:13:38.721-08:00</updated><title type='text'>Wow!  What a crazy release</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-3653228660722146183?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/3653228660722146183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=3653228660722146183' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/3653228660722146183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/3653228660722146183'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/08/wow-what-crazy-release.html' title='Wow!  What a crazy release'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-7845835782006017436</id><published>2009-08-20T04:56:00.000-07:00</published><updated>2009-08-20T08:41:11.753-07:00</updated><title type='text'>Pulling in to the Station</title><content type='html'>&lt;div&gt;This release is looking good!  We will almost certainly have it out on time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;New Experimental Design Feature:  PVP Damage Adjustment&lt;/b&gt;&lt;div&gt;Erich and I discussed this mechanic I came up with this morning, and we're really excited about it!  Let's just jump in:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;i&gt; &lt;/i&gt;&lt;/span&gt;&lt;i&gt;PVP damage is multiplied by a factor based on the ratio of the attacked to attacker's level&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;So here's an example:  a level 20 attacks a level 40 and does 2x base damage.  A level 40 attacks a level 20 and does 1/2 base damage.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The actual formula is:  damage defender takes = (5 + defender's level) / (5 + attacker's level)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The 5+... ensures that a level 1 attacking a level 100 doesn't do 100x damage, only 20x damage.  In fact, it's for this reason that the "introductory levels" were all collected into 1 set:  from levels 1-5, you will not drop any items on death and your PVP damage doesn't work this way--it works normally.  So level 4 attacking level 80 does a level 4's damage (nothin').  A level 10, however, can be killed by the level 80--but will do 85/15 = 560% normal damage.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now here's where the magic works:  that ratio seems huge, right?  Well, if you use the actual DPS numbers we came up with, that amount is only 30% of the dps a level 80 does to another level 80--so it's significantly weaker, but not so much so that a level 80 could just sit around not caring that a whole guild of level 10's are attacking him!    (In the reverse case--80 attacking 10--the level 80 does about 350% of a normal level 10's DPS, so he's still much stronger.  However, he's not impossibly strong)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, this also affects our defense equations: the "correct" amount of armor at any level now gives 20% damage reduction to attacks *from* any level.  A level 100 with 2k armor gets the same damage reduction as a level 20 does with 400 armor.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What are the results of all this?&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;Guilds are now even more important:  &lt;/b&gt;having a band of friends that know how to fight together is better than having a band that is high level&lt;/li&gt;&lt;li&gt;&lt;b&gt;PVPing isn't limited just to high levels:  &lt;/b&gt;you can PVP within a *much* larger level range, and enjoy doing so at any level.  If you don't want to grind your character, you can participate in guild events without any problems.&lt;/li&gt;&lt;li&gt;&lt;b&gt;PVE combat is still based on level&lt;/b&gt;: you need to be higher level to explore harder dungeons.  Since monster damage isn't level-adjusted in the same way, low level players will still get pwned by high-level dungeons.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Levels give you access to cool new stuff, but they don't matter as much as how you build your character&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Epic items are truly *epic*&lt;/b&gt;.  If an epic item does 200% of the dps that it should for the minimum level that can equip it, that player will be uber powerful when using that item.  Think of our level 10 going after the level 80--he will be doing nearly 70% of the level 80's dps, and will be a force to be reckoned with.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Phew!  I hope this mechanic works, it could really unlock a lot of potential in this game.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, for a list of stuff I've done:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;enchantments work&lt;/li&gt;&lt;li&gt;items can now have on-death effects (such as a resurrecting heal!)&lt;/li&gt;&lt;li&gt;resurrection commands should work&lt;/li&gt;&lt;li&gt;added "wishing" property to items: wishing ring = add 20% to chance not to drop equipment on death.  if player wears 5 wishing rings, they will never drop items--but they're filling 5 ring slots with something that doesn't add to their hp/mp/dps/defense&lt;/li&gt;&lt;/ul&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/501453360028352333-7845835782006017436?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/7845835782006017436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=7845835782006017436' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/7845835782006017436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/7845835782006017436'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/08/pulling-in-to-station.html' title='Pulling in to the Station'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-8235414391060675523</id><published>2009-08-19T05:56:00.001-07:00</published><updated>2009-08-19T13:47:55.836-07:00</updated><title type='text'>Bug Fixin', Feature Makin'</title><content type='html'>Nuked:&lt;div&gt;- items don't show up on map&lt;/div&gt;&lt;div&gt;- sometimes geosid owner isn't retrieved&lt;/div&gt;&lt;div&gt;- spawn point effect lasts 1000 seconds instead of 1000 milliseconds&lt;/div&gt;&lt;div&gt;- changing to overhead viewpoint revealed the backs of walls weren't drawn correctly&lt;/div&gt;&lt;div&gt;- enable use-geosid magic&lt;/div&gt;&lt;div&gt;- g/home and g/sethome don't work&lt;/div&gt;&lt;div&gt;- need a targeted portal type&lt;/div&gt;&lt;div&gt;- add guild command:  &lt;i&gt;g/abandon [geosid name]&lt;/i&gt; to voluntarily give up a geosid (usually so you can take over another; leader-only)&lt;/div&gt;&lt;div&gt;- add party commands, including &lt;b&gt;p/close&lt;/b&gt;&lt;/div&gt;&lt;div&gt;- compile enchantment types&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;Noticed:&lt;/div&gt;&lt;div&gt;- gold needs scenery&lt;/div&gt;&lt;div&gt;- something causes geosid burst to stop working until logoff/login&lt;/div&gt;&lt;div&gt;- add type to spin: bow or weapon, weapon only, bow only&lt;/div&gt;&lt;div&gt;- after a geosid-based trans, player is locked in place until another magic is used&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/501453360028352333-8235414391060675523?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/8235414391060675523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=8235414391060675523' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/8235414391060675523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/8235414391060675523'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/08/bug-fixin-feature-makin.html' title='Bug Fixin&apos;, Feature Makin&apos;'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-2985569542750969561</id><published>2009-08-18T07:09:00.001-07:00</published><updated>2009-08-18T14:03:58.877-07:00</updated><title type='text'>Hooray Geosids!</title><content type='html'>Geosids are in the game now, and a guild can take over/own a geosid.  Their name will display below the geosid's name on the map.  Now--on to adding other geonite-based effects and testing.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;1500&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Hooray!   I've got two geosids up and running--a white one and a red one.  You can take them over, effects display and it uses geonite.  Sacrificing works great.  Now to be sure the bonuses are working and everything saves correctly.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;1700&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Ironed out some bugs, seems to work fine.  I think it's time to see what the "real" game feels like--time to design some maps tomorrow with Erich and get this content all imported!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-2985569542750969561?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/2985569542750969561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=2985569542750969561' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/2985569542750969561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/2985569542750969561'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/08/hooray-geosids.html' title='Hooray Geosids!'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-8406974784488735250</id><published>2009-08-06T09:33:00.000-07:00</published><updated>2009-08-06T10:43:21.389-07:00</updated><title type='text'>You'd be surprised \ There's so much to be done</title><content type='html'>It seems sometimes like no matter how much we accomplish, more tasks turn up that are still unfinished.  Since we &lt;span style="font-weight: bold;"&gt;have&lt;/span&gt; to release pre-beta next week, it really is crunch time now.  There's not much choice in this matter--if it doesn't go out, we won't have enough time to test everything before school starts, all of our time will be consumed by classes and the summer will end without a release.  That I'm starting to feel a little burned out doesn't help me worry less.  However, this is going to happen.  It has to.  This just means the mantra "what's the simplest thing that could possibly work" is even more important now than ever, given the number of tasks left to complete.&lt;br /&gt;&lt;br /&gt;To help organize my thoughts, I'm going to list all of the biggest things (no details, like in the document we've been maintaining) that need to be implemented before pre-beta can go out:&lt;br /&gt;&lt;br /&gt;- Spells&lt;br /&gt;- Monster AI&lt;br /&gt;- Treasure&lt;br /&gt;- Geosid item-sacrifice &amp;amp; portaling system&lt;br /&gt;- Merchants (bazaar, geosid, storage)&lt;br /&gt;- Design &amp;amp; Implementation w/ Editor...this is where all the content gets implemented and the world is built.&lt;br /&gt;&lt;br /&gt;I think the most immediately important thing is to get monsters alive, interacting and dropping loot.  Since most of the melee stuff is implemented, the next most important thing would be to get the merchants back online (this is prerequisite for the geosid system).  Finally, filling out the rest of the spells, finishing up the design and implementing all the content with the editor, and taking care of the miscellaneous stuff (like logging server data).&lt;br /&gt;&lt;br /&gt;Ah!  Here's a breakthough--I think I just figured out how to do the geosid portals:  give players a "spell" that allows them to use geonite to create a portal.  The different levels of spell are only available when they can be used--i.e. near a geosid with a portal configured for that amount of geonite--and when the player is both high enough level to have that spell and has enough geonite.&lt;br /&gt;&lt;br /&gt;For example, players get a Geosid Portal I spell at level 1.  The description indicates "Use this ability to have a nearby Geosid consume 10 of your Geonite and create a portal to another nearby Geosid.  This ability is not strong enough to move you beyond the Chaos."&lt;br /&gt;&lt;br /&gt;Geosid Portal II, a higher-level ability (say 10) could say "Use this ability to have a nearby Geosid create a portal.  This consumes 1000 Geonite ."  As you gain more levels, you can consume ever more geonite creating portals to more remote areas.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ok, well that makes me feel better.  I can implement that.  First, though, I need to solve the monster problem.  The basic melee monster is in the editor, but doesn't attack.  That's first on my list to fix.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So I had to backtrack a bit.  I noticed monsters weren't disappearing from the client when they died, so I fixed that first.  There is no need now for a destroy-actor message, since all clients will remove an actor from the world at a maximum of &lt;span style="font-family: courier new;"&gt;300 +&lt;/span&gt; &lt;span style="font-family: courier new;"&gt;lag&lt;/span&gt; milliseconds (max ~500), which is short enough that players shouldn't even notice.  Instead of basing it purely on a time delay, it is now based on a sync--this has the added benefit of not nuking all of a client's on-screen data just because their network had a lag spike.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-8406974784488735250?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/8406974784488735250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=8406974784488735250' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/8406974784488735250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/8406974784488735250'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/08/youd-be-surprised-theres-so-much-to-be.html' title='You&apos;d be surprised \ There&apos;s so much to be done'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-4927851937119791713</id><published>2009-08-05T16:50:00.000-07:00</published><updated>2009-08-05T17:23:57.617-07:00</updated><title type='text'>Lights, Camera, ... months of work... action?</title><content type='html'>Since my last post, many new systems have been implemented and we're on the final stretch before pre-beta release.  The design side of things has been particularly challenging lately, since we don't really know how these numbers are going to behave once we get them in-game.  I'm starting to have a nagging feeling that our damages are too high, but I think we can remedy our situation simply by stretching everything to give us a buffer.  Once all of our equations are set, slash damage in half, reduce xp to 25% of what we think it should be, make armor half as good as it is supposed to be, and so on.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For the record, here's what happened since my last post (simply copied from the pre-beta document):&lt;br /&gt;&lt;div style="color: rgb(0, 0, 0);"&gt;       &lt;span class="Apple-style-span"  style="font-size:78%;"&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;&lt;strike&gt;&lt;/strike&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-style-span"  style="font-size:78%;"&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;&lt;strike&gt;Triggers&lt;/strike&gt;&lt;/span&gt;&lt;/span&gt;     &lt;/div&gt;     &lt;div style="color: rgb(0, 0, 0);"&gt;       &lt;span class="Apple-style-span"  style="font-size:78%;"&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;&lt;strike&gt;Display zone names &amp;amp; zone effects (background sound)&lt;/strike&gt;&lt;/span&gt;&lt;/span&gt;     &lt;/div&gt;     &lt;div style="color: rgb(0, 0, 0);"&gt;       &lt;span class="Apple-style-span"  style="font-size:78%;"&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;&lt;strike&gt;Display player names&lt;/strike&gt;, &lt;strike&gt;player name toggle&lt;/strike&gt;&lt;/span&gt;&lt;/span&gt;     &lt;/div&gt;     &lt;div style="color: rgb(0, 0, 0);"&gt;       &lt;span class="Apple-style-span"  style="font-size:78%;"&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;&lt;strike&gt;Item attachment points - preview in editor&lt;/strike&gt;&lt;/span&gt;&lt;/span&gt;     &lt;/div&gt;     &lt;div style="color: rgb(0, 0, 0);"&gt;       &lt;span style="font-size:78%;"&gt;&lt;strike&gt;Arena - no PK consequences&lt;/strike&gt; &lt;span class="writely-comment" id="zfr3" style="background-color: rgb(255, 255, 215);"&gt;created "zone rules"&lt;/span&gt;&lt;/span&gt;     &lt;/div&gt;     &lt;div style="color: rgb(0, 0, 0);"&gt;     &lt;/div&gt;     &lt;div style="color: rgb(0, 0, 0);"&gt;     &lt;/div&gt;     &lt;div style="color: rgb(0, 0, 0);"&gt;     &lt;/div&gt;     &lt;div style="color: rgb(0, 0, 0);"&gt;       &lt;span class="Apple-style-span"  style="font-size:78%;"&gt;&lt;strike&gt;Attach VisualFX to actor type &lt;/strike&gt; &lt;span class="writely-comment" id="py9f" style="background-color: rgb(255, 255, 215);"&gt;no support for attaching to anything other than feet currently; also, might not look right when geonans die (effect might stay vertical) -Karlgluck 7/22/09 5:50 PM&lt;/span&gt; &lt;/span&gt;     &lt;/div&gt;     &lt;div style="color: rgb(0, 0, 0);"&gt;       &lt;span style="font-size:78%;"&gt;&lt;strike&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;&lt;span class="Apple-style-span"&gt;Special FX bindings - be sure hidden scenery bindings are hidden&lt;/span&gt;&lt;/span&gt;&lt;/strike&gt;&lt;/span&gt;     &lt;/div&gt;     &lt;div style="color: rgb(0, 0, 0);"&gt;       &lt;span class="Apple-style-span"  style="font-size:78%;"&gt;    &lt;strike&gt;framework&lt;/strike&gt;&lt;/span&gt;     &lt;/div&gt;     &lt;div style="color: rgb(0, 0, 0);"&gt;       &lt;span class="Apple-style-span"  style="font-size:78%;"&gt;    &lt;strike&gt;implementation&lt;/strike&gt;&lt;br /&gt;      &lt;/span&gt;     &lt;/div&gt;     &lt;div style="color: rgb(0, 0, 0);"&gt;       &lt;span class="Apple-style-span"  style="font-size:78%;"&gt;    &lt;strike&gt;tools&lt;/strike&gt;&lt;br /&gt;      &lt;/span&gt;     &lt;/div&gt;     &lt;div style="color: rgb(0, 0, 0);"&gt;       &lt;span class="Apple-style-span"  style="font-size:78%;"&gt;    &lt;strike&gt;compilation&lt;/strike&gt;&lt;br /&gt;      &lt;/span&gt;     &lt;/div&gt;     &lt;div style="color: rgb(0, 0, 0);"&gt;       &lt;div&gt;         &lt;div&gt;           &lt;span style="font-size:78%;"&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;&lt;span class="Apple-style-span"&gt;&lt;strike&gt;Mouse-over-actor&lt;/strike&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;         &lt;/div&gt;         &lt;div&gt;           &lt;span style="font-size:78%;"&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;&lt;span class="Apple-style-span"&gt;Equip Items&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;         &lt;/div&gt;         &lt;div&gt;           &lt;span class="Apple-style-span"  style="font-size:78%;"&gt;           &lt;div&gt;             &lt;div&gt;               &lt;div&gt;                 &lt;strike&gt; Make client actor manager detect swimming/wading/falling/visibility correctly&lt;/strike&gt;&lt;b&gt;&lt;br /&gt;                &lt;strike&gt;All equations&lt;/strike&gt;&lt;/b&gt;               &lt;/div&gt;             &lt;/div&gt;           &lt;/div&gt;           &lt;/span&gt;         &lt;/div&gt;       &lt;/div&gt;     &lt;/div&gt;      &lt;div style="color: rgb(0, 0, 0);"&gt;     &lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;strike&gt;    HP, MP&lt;/strike&gt;&lt;/b&gt;&lt;/span&gt;   &lt;/div&gt;   &lt;div style="color: rgb(0, 0, 0);"&gt;   &lt;/div&gt;   &lt;div style="color: rgb(0, 0, 0);"&gt;     &lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;strike&gt;     Movement Speed, Action Speed&lt;br /&gt;    &lt;/strike&gt;&lt;/b&gt;&lt;/span&gt;   &lt;/div&gt;   &lt;div style="color: rgb(0, 0, 0);"&gt;     &lt;span style="font-size:78%;"&gt;&lt;b&gt;     &lt;div&gt;       &lt;b&gt;&lt;strike&gt;    Alignment&lt;/strike&gt;&lt;/b&gt;     &lt;/div&gt;     &lt;/b&gt;&lt;/span&gt;   &lt;/div&gt;   &lt;div style="color: rgb(0, 0, 0);"&gt;     &lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;strike&gt;     Melee Damage/Defense, Spell Damage/Defense&lt;/strike&gt;&lt;/b&gt;&lt;/span&gt;   &lt;/div&gt;   &lt;div style="color: rgb(0, 0, 0);"&gt;     &lt;span style="font-size:78%;"&gt;&lt;b&gt;     &lt;div&gt;       &lt;b&gt;&lt;strike&gt;    EXP: from party, xp to level, xp from monster&lt;/strike&gt;&lt;/b&gt;     &lt;/div&gt;     &lt;div&gt;       &lt;div&gt;       &lt;/div&gt;       &lt;div&gt;                  &lt;div&gt;           &lt;div&gt;             &lt;strike&gt;&lt;span style="font-weight: normal;"&gt;Pits &amp;amp; falling into them&lt;/span&gt;&lt;/strike&gt;           &lt;/div&gt;           &lt;div&gt;             &lt;strike&gt;&lt;span style="font-weight: normal;"&gt;Melee System&lt;/span&gt;&lt;/strike&gt;           &lt;/div&gt;           &lt;div&gt;             &lt;strike&gt;&lt;span style="font-weight: normal;"&gt;Fix client-server request interaction&lt;/span&gt;&lt;/strike&gt;           &lt;/div&gt;           &lt;div&gt;             &lt;strike&gt;&lt;span style="font-weight: normal;"&gt;swimming&lt;/span&gt;&lt;/strike&gt;           &lt;/div&gt;         &lt;/div&gt;                &lt;/div&gt;     &lt;/div&gt;     &lt;span style="font-weight: normal;"&gt; Event System&lt;br /&gt;    &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;   &lt;/div&gt;  &lt;blockquote class="webkit-indent-blockquote" style="border: medium none ; margin: 0pt 0pt 0pt 40px; color: rgb(0, 0, 0);"&gt;   &lt;span style="font-size:78%;"&gt;&lt;strike&gt;Framework&lt;br /&gt;      projectile&lt;br /&gt;      targeted special effect&lt;br /&gt;      manager&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;Create "projectile" that compiles an event&lt;/strike&gt;, &lt;strike&gt;embed object for ranged weapons&lt;/strike&gt;&lt;br /&gt;      &lt;strike&gt;&lt;i&gt;resulted in necessity of extracting old projectiles -&gt; magic -&gt; spells...&lt;/i&gt;&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;dynamic event compiler&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;Integrate framework &amp;amp; types into editor&lt;br /&gt;      &lt;i&gt;this actually became unnecessary!  all types that require events actually contain the events themselves, and integrate them using the dynamic compiler&lt;/i&gt;&lt;br /&gt;  Add preview dialog&lt;br /&gt;      &lt;i&gt;since the types are dynamic, any preview dialog would have to be container-specific; for example, a preview dialog for ranged weapons, one for spells, etc.  so this is unnecessary work&lt;/i&gt;&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;Enable compilation of events&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;Enable compilation of projectiles in server item description&lt;br /&gt;  Integrate event framework into client&lt;br /&gt;      acquireResources&lt;br /&gt;      disable old projectile/magicfx/magic/spells code&lt;br /&gt;          &lt;i&gt;done by assigning 0 to number of array entries in each, assert(false) in loader&lt;/i&gt;&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;&lt;b&gt;benchmark test: do server and client start up and work normally?&lt;/b&gt;&lt;br /&gt;      &lt;i&gt;passed!!!&lt;/i&gt;&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;create network messages for projectile event management&lt;br /&gt;      create projectile event&lt;br /&gt;      destroy event&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;    pass messages client-side to the event framework&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;enable ranged weapon combat on the server&lt;/strike&gt;&lt;br /&gt;      &lt;strike&gt;client to send create projectile/destroy event packets&lt;/strike&gt;&lt;br /&gt;      &lt;strike&gt;detect ranged weapon in processAttackRequest&lt;/strike&gt;&lt;br /&gt;      &lt;strike&gt;updateRangedAttack&lt;/strike&gt;&lt;br /&gt;      &lt;strike&gt;processProjectiles&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;add 'range' to item description&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;remove old scenery renderer from client&lt;/strike&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Goal:  finished on Thursday, July 30&lt;br /&gt;  Test:  ability to kill monsters with shots from ranged weapons&lt;br /&gt;  Completed: 3:00 PM&lt;br /&gt; &lt;br /&gt;  &lt;/b&gt;&lt;i&gt;extra time spent applying new combat profiles, including swimming profile, and debugging the event framework; all item types are now in the game and should compile into their specializations correctly (added: crossbow, javelin, thrown and spear)&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;                                        &lt;/blockquote&gt; &lt;div style="color: rgb(0, 0, 0);"&gt;   &lt;div&gt;     &lt;span class="Apple-style-span"  style="font-size:78%;"&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;b&gt;&lt;span class="Apple-style-span"&gt;Magic System - I&lt;/span&gt;&lt;/b&gt;       &lt;/div&gt;     &lt;/div&gt;     &lt;/span&gt;   &lt;/div&gt; &lt;/div&gt; &lt;blockquote class="webkit-indent-blockquote" style="border: medium none ; margin: 0pt 0pt 0pt 40px; color: rgb(0, 0, 0);"&gt;   &lt;span style="font-size:78%;"&gt;&lt;strike&gt;finish framework outline&lt;br /&gt;  integrate types into editor&lt;br /&gt;      shared/magic&lt;br /&gt;      shared/magic/tools&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;write header for dynamic compiler for magic&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;add spells framework:&lt;br /&gt;          mp cost, listed in classes, casting action, CONTAIN magic&lt;br /&gt;          &lt;i&gt;action delay is specified by magic, not by spell--this lets spells' delay go down noticeably at a level-threshold if that is appropriate for a given magic (beam, for ex)&lt;/i&gt;&lt;/strike&gt;&lt;br /&gt;      &lt;strike&gt;shared/spell&lt;br /&gt;      shared/spell/tools&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;write tool actions&lt;br /&gt;      complete-editor/spell/spellactions&lt;br /&gt;      complete-editor/magic/magicactions&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;write source file for Tools::MagicCompiler&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;compile types&lt;br /&gt;      magic list for server&lt;br /&gt;      spells list for client &amp;amp; server&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;load spell list in client&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;    get rid of old spell descriptions&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;load magic &amp;amp; spells in server&lt;br /&gt;      game-file manager&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;processCastRequest&lt;/strike&gt;&lt;br /&gt;&lt;/span&gt;                              &lt;span class="Apple-style-span" style="color: rgb(0, 0, 0);font-size:78%;" &gt;&lt;strike&gt;updateUsingMagic&lt;/strike&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Goal: finished on Friday, July 31&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Test: can kill a monster using direct-damage flame attack&lt;br /&gt;  Completed: July 31 at 11 pm&lt;br /&gt;  &lt;/b&gt;&lt;/span&gt;          &lt;/blockquote&gt; &lt;div style="color: rgb(0, 0, 0);"&gt;   &lt;div&gt;     &lt;span class="Apple-style-span"  style="font-size:78%;"&gt;     &lt;div&gt;       &lt;div&gt;         &lt;strike&gt;remove old projectile/magicfx/magic/spells/enchantments code&lt;br /&gt;        &lt;b&gt;sanity check: can 2 players still see each other online? &lt;/b&gt;&lt;i&gt;yep, looks good so far&lt;/i&gt;&lt;/strike&gt;&lt;br /&gt;        &lt;strike&gt;code cleanup - clean out all old stuff that has been replaced so far&lt;/strike&gt;&lt;br /&gt;       &lt;br /&gt;      &lt;/div&gt;       &lt;div&gt;         &lt;b&gt;&lt;span class="Apple-style-span"&gt;Magic System - II&lt;/span&gt;&lt;/b&gt;       &lt;/div&gt;     &lt;/div&gt;     &lt;/span&gt;   &lt;/div&gt; &lt;/div&gt; &lt;blockquote class="webkit-indent-blockquote" style="border: medium none ; margin: 0pt 0pt 0pt 40px; color: rgb(0, 0, 0);"&gt;   &lt;span style="font-size:78%;"&gt;&lt;strike&gt;direct damage&lt;br /&gt;      validate distance before applying damage&lt;/strike&gt;  &lt;br /&gt;&lt;strike&gt;AOE spells&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;        handle request type&lt;br /&gt;              fix parameters in editor&lt;br /&gt;          packet event types (p-&gt;p, p-&gt;l, l-&gt;l, l-&gt;l+p, p-&gt;l+p)&lt;br /&gt;          updateUsingMagic&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;    create spell of each type in editor &amp;amp; recompile (save creating &amp;amp; recompiling multiple times later!)&lt;br /&gt;          had to change the avatar spells to make referencing work correctly&lt;br /&gt;          instead of creating each by hand, write "create spell of each type" method&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;&lt;i&gt;after recompiling, I noticed that I had to fix the spell availability mask &lt;/i&gt;&lt;i&gt;update code&lt;/i&gt;&lt;/strike&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;    &lt;strike&gt;AOE spells work!&lt;/strike&gt;&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;      &lt;strike&gt;teleport&lt;/strike&gt;&lt;br /&gt;      &lt;strike&gt;projectiles&lt;br /&gt;          handle request type&lt;br /&gt;          updateUsingMagic&lt;/strike&gt;&lt;br /&gt;      portals&lt;br /&gt;          &lt;strike&gt;processCastRequest&lt;br /&gt;          incrementMagicStage&lt;br /&gt;          advancePortals&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;        &lt;i&gt;add chaos effects to opening a portal to an invalid map&lt;/i&gt;&lt;i&gt;&lt;br /&gt;          write code for raytrace-validating teleports (needed for dimension doors)&lt;/i&gt;&lt;/strike&gt;&lt;br /&gt;          &lt;strike&gt;fix portal description in editor&lt;/strike&gt;&lt;br /&gt;          &lt;i&gt;&lt;strike&gt;rebuild (fix syntax errors), compile new game file with editor&lt;/strike&gt;&lt;/i&gt;&lt;br /&gt;          &lt;strike&gt;&lt;b&gt;test: dimension door - &lt;i&gt;passed!&lt;/i&gt;&lt;/b&gt;&lt;/strike&gt;&lt;br /&gt;          &lt;strike&gt;mark system&lt;/strike&gt;&lt;br /&gt;              &lt;strike&gt;set via text ("mark1" thru "mark0"), handle in Client netmsg&lt;/strike&gt;&lt;br /&gt;              &lt;strike&gt;&lt;b&gt;test: self port to mark 1&lt;/b&gt; - &lt;b&gt;&lt;i&gt;passed&lt;/i&gt;&lt;i&gt;!&lt;/i&gt;&lt;/b&gt;&lt;/strike&gt;&lt;br /&gt;              &lt;strike&gt;give maps a hashed unique ID&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;            save marks to database on logout&lt;br /&gt;              load marks from database at login&lt;/strike&gt;&lt;br /&gt;              &lt;strike&gt;invalid map -&gt; chaos&lt;/strike&gt;&lt;br /&gt;&lt;strike&gt;    spin attack&lt;br /&gt;          editor type&lt;br /&gt;          processCastRequest&lt;br /&gt;          incrementMagicStage&lt;/strike&gt;&lt;br /&gt;          &lt;strike&gt;recompile &amp;amp; test&lt;/strike&gt;&lt;br /&gt;          &lt;strike&gt;remove radius from spin attack (it's taken from the weapon)&lt;/strike&gt;&lt;br /&gt;      &lt;strike&gt;attack run&lt;br /&gt;          editor type&lt;br /&gt;          processCastRequest&lt;br /&gt;          incrementMagicStage - (shouldn't get here--assert!)&lt;br /&gt;          updateAttackRun&lt;br /&gt;          recompile &amp;amp; test&lt;/strike&gt;&lt;br /&gt;      &lt;strike&gt;leap&lt;/strike&gt;&lt;br /&gt;          &lt;strike&gt;editor type&lt;br /&gt;          processCastRequest&lt;br /&gt;          incrementMagicStage - (shouldn't get here--assert!)&lt;/strike&gt;&lt;br /&gt;          &lt;strike&gt;updateAttackRun&lt;/strike&gt;&lt;br /&gt;          &lt;strike&gt;update client to move character vertically when leaping&lt;/strike&gt;&lt;br /&gt;          &lt;strike&gt;recompile &amp;amp; test&lt;/strike&gt;&lt;br /&gt;      &lt;strike&gt;heal&lt;br /&gt;          editor type&lt;br /&gt;          processCastRequest&lt;br /&gt;          incrementMagicStage&lt;br /&gt;      cure&lt;br /&gt;          remove from -hp regen&lt;br /&gt;        &lt;i&gt;its just a buff&lt;/i&gt;&lt;/strike&gt;&lt;br /&gt;      buff&lt;br /&gt;          configurable buff icons in editor&lt;br /&gt;      mutations (including &lt;i&gt;flying&lt;/i&gt;, levitating)&lt;br /&gt;      enchantment - armor&lt;br /&gt;          make enchantments show up in character descriptions&lt;br /&gt;      enchantment - shield&lt;br /&gt;      enchantment - reactive healing&lt;br /&gt;      enchantment - thorns&lt;br /&gt;  add # limit to all AOEs (bow-spin included)&lt;br /&gt;  separate threshold levels&lt;br /&gt;&lt;br /&gt;&lt;i&gt;    DOT/AOE cloud&lt;br /&gt;      aoe-buff&lt;br /&gt;      dot-aoe-buff&lt;br /&gt;      branching&lt;br /&gt;      summon&lt;br /&gt;      trap - dimension door&lt;br /&gt;      trap - black hole&lt;br /&gt;      disenchant&lt;br /&gt;      invisibility&lt;/i&gt;&lt;br /&gt;     &lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;Notes along the way:&lt;br /&gt;      - terrain blending rules aren't compiled!&lt;br /&gt;need jumping animation&lt;br /&gt;&lt;/span&gt;                                  &lt;/blockquote&gt;         &lt;span style="color: rgb(0, 0, 0);font-size:78%;color:#999999;" class="Apple-style-span"  &gt;     &lt;div&gt;              &lt;div&gt;         &lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;        &lt;strike&gt;Swimming/javelin profiles&lt;br /&gt;        Add javelin &amp;amp; other ranged weapons to item types&lt;br /&gt;        Need to fix the swimming profile so that it is applied at first entrance to the water (instead of after first action)&lt;/strike&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(0, 0, 0);font-size:78%;color:#999999;" class="Apple-style-span"  &gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;strike&gt;&lt;/strike&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;Quite a lot, in other words!  I broke off from doing the spells today in favor of implementing the treasure system.  Although I haven't created the editing utility yet...it's quite a pain to design...the limited testing I've done indicates that the categorized weighting system works quite well.&lt;br /&gt;&lt;br /&gt;We're going to make it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-4927851937119791713?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/4927851937119791713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=4927851937119791713' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/4927851937119791713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/4927851937119791713'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/08/lights-camera-months-of-work-action.html' title='Lights, Camera, ... months of work... action?'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-3344227310760295902</id><published>2009-07-30T11:49:00.001-07:00</published><updated>2010-01-12T10:13:19.093-08:00</updated><title type='text'>It's amazing what a little plan can do</title><content type='html'>Last night I was pretty tired even though it was only 10:30, so instead of trying to hammer out the event system I added a copious amount of detail to some of the more vague entries in the pre-beta document.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-3344227310760295902?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/3344227310760295902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=3344227310760295902' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/3344227310760295902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/3344227310760295902'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/07/its-amazing-what-little-plan-can-do.html' title='It&apos;s amazing what a little plan can do'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-8945823935512714204</id><published>2009-07-29T04:49:00.000-07:00</published><updated>2009-07-29T13:21:06.558-07:00</updated><title type='text'>Can't talk now - good things are happening!</title><content type='html'>The new client-interaction system is in place and working.  You can walk around and melee just fine, and the system feels really smooth.  All of the new equations are also in place.  The action delay numbers need to be tweaked as attacking is a bit too slow right now and the fastest movement could stand to be about 25% faster.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Oh, equipping items and changing combat styles specializations also works.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are a few things I'm going to code today before I can get started on the Event system, which is what controls projectiles and instantiates magic effects.   I'm going to write the falling-down-a-pit, swimming and flying code.  They're pretty straightforward.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;900&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Swimming works.  That was easy!  I also added the delayed-logoff code so that you have to stand still for 3 seconds before the game will log you out.  Now on to falling...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;1600&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Falling and swimming both work beautifully.  Melee combat works in the right situations, logging off doesn't cause problems, respawning is super simple--and to top it all off, I just deleted about 8000 lines of old code (15 files) that were replaced by this new, better-thought-out 3500 line system that does about 10x more.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I need something to activate flying before I can really test that out, so it's on to the spell system.  I don't want to get ahead of myself...but I think we're going to make the deadline for pre-beta next week!!!&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/501453360028352333-8945823935512714204?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/8945823935512714204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=8945823935512714204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/8945823935512714204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/8945823935512714204'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/07/cant-talk-now-good-things-are-happening.html' title='Can&apos;t talk now - good things are happening!'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-4612963444122887058</id><published>2009-07-27T05:28:00.001-07:00</published><updated>2009-07-27T05:28:48.892-07:00</updated><title type='text'>Ugh.  Not looking forward to VS 2010</title><content type='html'>&lt;a href="http://blogs.ijw.co.nz/chris/index.php/2009/07/visual-studio-2010-10-is-the-new-6-but-not-the-way-they-wanted/"&gt;http://blogs.ijw.co.nz/chris/index.php/2009/07/visual-studio-2010-10-is-the-new-6-but-not-the-way-they-wanted/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-4612963444122887058?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/4612963444122887058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=4612963444122887058' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/4612963444122887058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/4612963444122887058'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/07/ugh-not-looking-forward-to-vs-2010.html' title='Ugh.  Not looking forward to VS 2010'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-1253400455889081650</id><published>2009-07-26T13:44:00.001-07:00</published><updated>2009-07-26T13:48:07.824-07:00</updated><title type='text'>Taking it further</title><content type='html'>The revamped client code is one of those rare moments where something gets about 10x better and twice as simple in one shot.  I'm incredibly happy with the design!  I've figured out how to handle the rest of the core features this afternoon--p2p trading, bazaar, storage, inventory stuff, equipping items--and I am pleased to say they fit in quite elegantly.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; Well, back to it.  I have to start filling in this framework at some point, but I'd like to make sure all the fringe cases are nailed down first.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-1253400455889081650?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/1253400455889081650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=1253400455889081650' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/1253400455889081650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/1253400455889081650'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/07/taking-it-further.html' title='Taking it further'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-7730919385835027938</id><published>2009-07-24T06:54:00.000-07:00</published><updated>2009-07-24T13:58:52.453-07:00</updated><title type='text'>Launching into Spells</title><content type='html'>It's time.  I'm about to start the framework code for the biggest modification needed before pre-beta: fixing spells and the client-server interaction.  Wish me luck.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;1651&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Finally!  I think I've laid out a system that can handle some pretty sweet stuff:&lt;/div&gt;&lt;div&gt;&lt;b&gt;Flying &lt;/b&gt;- gas form, flying mounts--you name it.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Falling down a pit&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Swimming&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Casting &lt;/b&gt;single spells, multi-stage spells (teleport to projectile, create wall from A to B, etc), multi-part spells (shoot off multiple waves of fireballs), periodic AOEs (poison gas cloud) and portals&lt;/div&gt;&lt;div&gt;&lt;b&gt;Attack Run&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Leap&lt;/b&gt; - jump from your point to somewhere else, over any pits/obstacles in the way&lt;/div&gt;&lt;div&gt;&lt;b&gt;Charge &lt;/b&gt;- run at target coordinates and bash people out of the way, doing damage with your shield&lt;/div&gt;&lt;div&gt;&lt;b&gt;Dying / resurrecting&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;On-death effects&lt;/b&gt; - recharge HP/MP, return to primary mark, etc.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Changing form into something else&lt;/b&gt; - a kind of monster or imitating another player, for example&lt;/div&gt;&lt;div&gt;&lt;b&gt;Enchantments and Buffs&lt;/b&gt; - I made a distinction here that an enchantment is something permanent with a visualization and an icon that expires via timeout, replacement or disenchantment only and has the same strength throughout, whereas a buff is something that you can cast multiple times on a single actor, has no visualization other than the casting one, does have an icon and decays down to nothing in all cases.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Examples:&lt;/div&gt;&lt;div&gt;Poison - buff&lt;/div&gt;&lt;div&gt;Armor - buff or enchantment, depending on type&lt;/div&gt;&lt;div&gt;Weapon damage - buff&lt;/div&gt;&lt;div&gt;turn to fireball - enchantment&lt;/div&gt;&lt;div&gt;add melee damage - buff&lt;/div&gt;&lt;div&gt;increase hp regen - buff&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-7730919385835027938?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/7730919385835027938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=7730919385835027938' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/7730919385835027938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/7730919385835027938'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/07/launching-into-spells.html' title='Launching into Spells'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-6100026405369853940</id><published>2009-07-23T09:00:00.000-07:00</published><updated>2009-07-23T12:38:38.298-07:00</updated><title type='text'>Special FX Emitters -- the final step</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;span class="Apple-style-span" style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TmvXR4qQUSM/SmieUd_2eII/AAAAAAAAAHA/oJqSCojfLLQ/s1600-h/portal.PNG"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 211px;" src="http://2.bp.blogspot.com/_TmvXR4qQUSM/SmieUd_2eII/AAAAAAAAAHA/oJqSCojfLLQ/s320/portal.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5361709430871586946" /&gt;&lt;/a&gt;&lt;br /&gt;I adjusted the way that I'm doing special effects to make them finalized.  Yesterday I was 90% of the way there--just a few tweaks today and we'll have absolutely amazing special effects.  It already looks really good, but this will allow some stuff that will really blow the players' minds the first time they see it.  I'll post a screenshot of the portal spell once I have the rest of this wrangled together.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After that, I write the compiler, integrate with the client, add a configuration field for mouse-over, recompile and see what happens.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;1330&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Well, the emitter system is in place.  There's only one kind right now but it works exactly like it should.  Time to send this stuff to the client.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;1530&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Done!  Fixed a few bugs along the way and also implemented the mouse-over-actor effect.  Please ignore the stupid looking brick-rock that's crushing one of the crawlers...it's a stand-in for all items right now.&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;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TmvXR4qQUSM/Smi7_Fx1FlI/AAAAAAAAAHI/4Px10WIubZk/s1600-h/mouse-over-actor.PNG"&gt;&lt;img src="http://4.bp.blogspot.com/_TmvXR4qQUSM/Smi7_Fx1FlI/AAAAAAAAAHI/4Px10WIubZk/s320/mouse-over-actor.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5361742048941905490" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 320px; height: 251px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-6100026405369853940?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/6100026405369853940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=6100026405369853940' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/6100026405369853940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/6100026405369853940'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/07/special-fx-emitters-final-step.html' title='Special FX Emitters -- the final step'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TmvXR4qQUSM/SmieUd_2eII/AAAAAAAAAHA/oJqSCojfLLQ/s72-c/portal.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-5862672435112989485</id><published>2009-07-22T13:43:00.000-07:00</published><updated>2009-07-22T17:55:27.415-07:00</updated><title type='text'>Good news, everyone!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TmvXR4qQUSM/Sme00fPOrWI/AAAAAAAAAGw/TkCU0-on_IM/s1600-h/new+emitters.PNG"&gt;&lt;/a&gt;&lt;div style="text-align: left;"&gt;20 or so files and a lot of thoughtful code later... the special effects framework and all bindings are finished!  I'm about to start testing some of the configuration for it.  Unfortunately there's no previewer yet--it's almost 5 and I've just gotten the basic stuff working--but that should be a snap since it's almost identical to the visual FX previewer.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Although I've also planned out the MagicFX system (which is considerably smaller, and just creates special bindings for projectiles and whirling chain balls and such) I'm not going to code it yet--I can get to the next milestone without it.  That system interfaces directly with the spell system, so I'd like to update those two together anyway.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I should have a pretty smooth day tomorrow.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;---&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Something I wanted to talk over by writing it down: where should special effects be attached to actors--at the client actor, actor profile, skinned mesh or animated mesh level?  Well animated mesh is not right, that would be like attaching visual effects to the mesh instead of to the scenery.  Skinned mesh would be the scenery-equivalent, but there is no way to uniquely reference a skinned mesh (actors have an ID number...but only at the client level).  Then again, bindings are pushed not pulled so that doesn't matter--if you have the client actor, you have the whole chain.  So I guess it really matters where you want the transform to go and what else makes sense with it.  The transform is pushed into the skinned mesh from the actor.  But only in the updateAnimation, and updateAnimation doesn't seem like a place where the visual fx would go.  So...I'll leave them attached to the actor profile for now.  This does makes sense because all forms should have the same effect if it's always attached.  That way I could also configure effects to be attached in different ways--such as to hands or feet (instead of just body), if I wanted to make a flaming daemon or something.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;BUT WAIT! If I want to be able to attach effects to armors those have to go on the skinned mesh forms, since that is how armor is defined.  ...ah, but what I'm looking for is a way to define effects that are racial (i.e. they exist for all forms).  Then again what if some forms would override or hide the racial effect...well, those shouldn't exist actually so I think I'm fine.  Thanks to this system's modularity I can add and remove stuff like this without much fuss.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); "&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TmvXR4qQUSM/Sme00fPOrWI/AAAAAAAAAGw/TkCU0-on_IM/s1600-h/new+emitters.PNG"&gt;&lt;img src="http://1.bp.blogspot.com/_TmvXR4qQUSM/Sme00fPOrWI/AAAAAAAAAGw/TkCU0-on_IM/s320/new+emitters.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5361452695239437666" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 320px; height: 159px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;img src="http://4.bp.blogspot.com/_TmvXR4qQUSM/SmeJavsAwsI/AAAAAAAAAGo/KdBqMuRvslc/s320/lucans-in-space.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5361404973978534594" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 320px; height: 163px; " /&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/501453360028352333-5862672435112989485?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/5862672435112989485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=5862672435112989485' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/5862672435112989485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/5862672435112989485'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/07/good-news-everyone.html' title='Good news, everyone!'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_TmvXR4qQUSM/Sme00fPOrWI/AAAAAAAAAGw/TkCU0-on_IM/s72-c/new+emitters.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-5070093061999764066</id><published>2009-07-20T06:45:00.000-07:00</published><updated>2009-07-20T13:59:47.172-07:00</updated><title type='text'>Progress progressing</title><content type='html'>We had a great meeting yesterday and outlined the rest of development from pre-beta through beta.  I started early today and have made great progress on the list so far:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;server-side map triggers are now enabled (they don't *quite* work right--you can teleport on a square without tripping the trigger) but it's like 95% of the way there, that's a simple fix that will come when i rework request interaction a bit&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Zone names display and one of the possible zone effects (changing the background sounds/music) is enabled.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Names for all characters can be toggled on/off&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Item attachment points can be modified in real-time in the editor.  FINALLY! =D  I tested it out by making a character dual-wield weapons...and it looks &lt;b&gt;amazing&lt;/b&gt;.  All attachment points work great, we could even attach belts, capes, boots, and miscillaneous character-unique items (pendants and stuff) if we wanted :D&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've added a new "Zone Rules" type that lets us specify which set of game mechanics to apply in a given region.  This allows for a more sensible town safety type, as well as the ability to create a pvp arena.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;DAY/NIGHT&lt;/b&gt;&lt;/div&gt;&lt;div&gt;I've found that it must be accomplished using coordinated fog and lighting settings.  There is pretty much no way around this in the FVF pipeline...makes me wish I could use shaders :/  Maybe I'll release a version with shaders once I get some time to play.  Well, it'll look really good anyway so its not a big deal.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;===================&lt;/div&gt;&lt;div&gt;I'm spending the rest of today working on the special fx manager.  I'm going to do it RIGHT.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Special FX manager and bindings are a go.  Tomorrow should wrap that all up.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-5070093061999764066?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/5070093061999764066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=5070093061999764066' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/5070093061999764066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/5070093061999764066'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/07/progress-progressing.html' title='Progress progressing'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-3089998297205478038</id><published>2009-07-18T12:09:00.000-07:00</published><updated>2009-07-18T20:49:02.336-07:00</updated><title type='text'>Another long day of development.</title><content type='html'>And I'm going to sleep.  Here's my to-do list for tomorrow.  Release is so close I can almost taste it.  Clients can connect, walk around, talk, fight, cast spells, kill monsters, pick up/drop items, recall...all that good stuff.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- fix special fx bindings...why don't they work?? :( probably because its using a super old hack of a system instead of writing a good one, which would take a while longer&lt;div&gt;- create the border map-layer type:  should +chaos for a good distance, +triggers for wrapping the map&lt;/div&gt;&lt;div&gt;- add solid-chaos type&lt;/div&gt;&lt;div&gt;- enable chaos effect on client&lt;/div&gt;&lt;div&gt;- &lt;b&gt;enable triggers on the server&lt;/b&gt;&lt;/div&gt;&lt;div&gt;- finish filling out swarm spawn's update method&lt;/div&gt;&lt;div&gt;- re-enable consumable items&lt;/div&gt;&lt;div&gt;- fill out equip-item code&lt;/div&gt;&lt;div&gt;- figure out why clients in water don't sink correctly&lt;/div&gt;&lt;div&gt;- check out spell-casting targeting (add mouse-over-actor indicator to test?)&lt;/div&gt;&lt;div&gt;- &lt;b&gt;preview &amp;amp; edit actor attachment points&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;finally:&lt;/div&gt;- get all the media for this update from erich&lt;/div&gt;&lt;div&gt;- assign scenery for items&lt;/div&gt;&lt;div&gt;- put spells back together (effects + items)&lt;/div&gt;&lt;div&gt;- rebuild the game's map&lt;/div&gt;&lt;div&gt;- add monsters back in&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;stuff that probably won't make it:&lt;/div&gt;&lt;div&gt;quests&lt;/div&gt;&lt;div&gt;enchantments&lt;/div&gt;&lt;div&gt;portals&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-3089998297205478038?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/3089998297205478038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=3089998297205478038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/3089998297205478038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/3089998297205478038'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/07/another-long-day-of-development.html' title='Another long day of development.'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-3326930256583111690</id><published>2009-07-17T13:26:00.000-07:00</published><updated>2009-07-17T13:36:57.930-07:00</updated><title type='text'>The Perils of #pragma( pack )</title><content type='html'>I just spent the last 3 hours buried in heap corruption errors, data alignment problems and a game file that seemed to compile fine but was incomprehensible by both client and server.  All because I added a #pragma pack (push, 1) and followed it NOT by #pragma pack(pop) but by a seemingly innocuous variant:  #pragma pack(pop, 1)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Turns out, that completely changes the behavior of the compiler directive, causing everything to become 1-byte aligned.  This seriously screws up...well...just about everything.  Any library not compiled with the same alignment becomes corrupted if you try to typecast virtual classes...sometimes.  Random methods fail even if you know their implementation and that, just before the method is called, it has what appears to be perfectly normal data inside.  And the compiler generates NOT A SINGLE WARNING about this TOTALLY INSANE behavior.  GWARRAR!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Good news is Erich's meshes look amazing, and this update is nearing completion.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-3326930256583111690?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/3326930256583111690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=3326930256583111690' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/3326930256583111690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/3326930256583111690'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/07/perils-of-pragma-pack.html' title='The Perils of #pragma( pack )'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-2805077515374797467</id><published>2009-07-16T07:14:00.000-07:00</published><updated>2009-07-16T15:33:25.345-07:00</updated><title type='text'>Client, Server Online</title><content type='html'>We're finally back!  I've got the client loading its game file, the server loading its game file...and I've never been so glad to see the "no connection" screen.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also:  to reduce the download time for the game, I should use bsdiff to create &amp;amp; apply patches. &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;b&gt;1140&lt;/b&gt;&lt;/div&gt;&lt;div&gt;The client is starting up again, and I've gotten all the way into the world before hitting one of those asserts.  Looks like I gotta write the client's actor manager now.  Not too much longer!&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;b&gt;1600&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Actor manager is written, and I'm about to install it.  Client maps are now loading and should render just fine once I manage to log in.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-2805077515374797467?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/2805077515374797467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=2805077515374797467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/2805077515374797467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/2805077515374797467'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/07/client-server-online.html' title='Client, Server Online'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-7086300379318288132</id><published>2009-07-15T10:19:00.000-07:00</published><updated>2009-07-15T13:25:22.784-07:00</updated><title type='text'>Raising the Server</title><content type='html'>Server game file is loading just fine; server is starting to get back on its feet.  I might have it done today!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;1500&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Server starts up.  Crippled; has no ai/treasure or quests.  The rest seems to be fine.&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;span class="Apple-style-span" style="font-size: large;"&gt;Phases of a Very Large Conversion&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Principles:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;Maintain Buildability&lt;/b&gt; - Recompile after every change; don't make sweeping changes until you're sure you can rebuild afterward (don't run blindly down an alley hoping to come out the other side)&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;Process:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;One unit at a time, &lt;b&gt;convert elements that have new equivalents&lt;/b&gt; and delete the old elements.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;If, during conversion, maintaining principle #1 requires fixing a class that is going to be erased, fix it now as long as the change is relatively minor (even though the fix will be deleted later).&lt;/li&gt;&lt;li&gt;Remove elements that have no new equivalents as far up the call-chain as possible; assert(false) areas that are incomplete or for which extraction would incur a lot of unbuildable changes (don't violate principle #1)&lt;/li&gt;&lt;li&gt;Use preprocessor guards and #include replacement files from within old ones. #if FALSE ... #endif the old content.  This separates the step of finding all the places a given file is #included and updating the references.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-7086300379318288132?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/7086300379318288132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=7086300379318288132' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/7086300379318288132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/7086300379318288132'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/07/raising-server.html' title='Raising the Server'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-8123630693579197564</id><published>2009-07-14T05:58:00.000-07:00</published><updated>2009-07-14T12:11:54.781-07:00</updated><title type='text'>Push to Release</title><content type='html'>&lt;span class="Apple-style-span"  style="color: rgb(51, 51, 51);  line-height: 20px; font-size:13px;"&gt;&lt;div&gt;From yesterday, implemented:&lt;/div&gt;&lt;div&gt;Client-side&lt;/div&gt;&lt;div&gt;- race/class descriptions&lt;/div&gt;&lt;div&gt;- items&lt;/div&gt;&lt;div&gt;Server-side&lt;/div&gt;- level-up experience&lt;div&gt;- races/classes&lt;/div&gt;&lt;div&gt;- ai lifeforms: need to re-add NPC lifeforms&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;b&gt;Today:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Projectiles/enchantments/spells/magic/specialfx will be implemented exactly the same way they were in the old version.  The code isn't pretty, but it should work with minimal changes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then:&lt;/div&gt;&lt;div&gt;- gut the client of all of its current subsystems&lt;/div&gt;&lt;div&gt;- place sparkly new systems in&lt;/div&gt;&lt;div&gt;- write game file loader&lt;/div&gt;&lt;div&gt;- write client actor instance controller&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next, server:&lt;/div&gt;- rewrite game file loader- integrate new map form, incl. triggers&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color: rgb(51, 51, 51);  line-height: 20px; font-size:13px;"&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Finally, reenable:&lt;/div&gt;&lt;div&gt;- reserved names&lt;/div&gt;&lt;div&gt;- quests&lt;/div&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-size:100%;color:#333333;"&gt;&lt;span class="Apple-style-span"  style=" line-height: 20px;font-size:13px;"&gt;&lt;div&gt;- inhabitants (NPCs)&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;b&gt;1320&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Finished bringing in spells, magic, magic fx, and treasure.  Now I have to make them compile.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;1500&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Well, they compile.  I think I'm there.  Time to load into the server...goodbye, v2 code.  This is going to be epic.&lt;/div&gt;&lt;/span&gt;&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/501453360028352333-8123630693579197564?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/8123630693579197564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=8123630693579197564' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/8123630693579197564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/8123630693579197564'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/07/push-to-release.html' title='Push to Release'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-7652281373709572429</id><published>2009-07-13T08:25:00.000-07:00</published><updated>2009-07-13T13:18:26.750-07:00</updated><title type='text'>Tying up loose ends</title><content type='html'>The server and client now both compile their game files properly, and with a bit of tweaking I've managed to get a 30 MB data file down to 7 MB on disk for the client--this should really help out with the download times!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I need to make a list of what has to be tackled before this update, so here it goes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Client-side&lt;/div&gt;&lt;div&gt;- race/class descriptions (easy, 15 minutes max)&lt;/div&gt;&lt;div&gt;- quests (easy, only task is to re-import into project &amp;amp; compile them)&lt;/div&gt;&lt;div&gt;- client actor instance controller; this handles rendering text, parsing actor IDs and handing out sync packets.  I have the idea for this one pretty much formed.&lt;/div&gt;&lt;div&gt;- &lt;b&gt;projectiles/enchantments/spells/magic/specialfx&lt;/b&gt;&lt;/div&gt;&lt;div&gt;- &lt;b&gt;items&lt;/b&gt;&lt;/div&gt;&lt;div&gt;- gut the client of all of its current subsystems&lt;/div&gt;&lt;div&gt;- place sparkly new systems in&lt;/div&gt;&lt;div&gt;- write game file loader&lt;/div&gt;&lt;div&gt;Server-side&lt;/div&gt;- rewrite game file loader&lt;div&gt;- reserved names&lt;/div&gt;&lt;div&gt;- races/classes&lt;/div&gt;&lt;div&gt;- level-up experience&lt;/div&gt;&lt;div&gt;- projectiles/spells/magic&lt;/div&gt;&lt;div&gt;- ai lifeforms:  need to re-add NPC lifeforms&lt;/div&gt;&lt;div&gt;- quests&lt;/div&gt;&lt;div&gt;- integrate new map form, incl. triggers&lt;/div&gt;&lt;div&gt;- inhabitants (NPCs)&lt;/div&gt;&lt;div&gt;- treasure ... ???&lt;/div&gt;&lt;div&gt;Misc&lt;/div&gt;&lt;div&gt;- add ability to preview equipped item attachment points&lt;/div&gt;&lt;div&gt;- add ability to attach items to avatars&lt;/div&gt;&lt;div&gt;- HAVE to fill in mutate() methods&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;1340&lt;/b&gt;&lt;/div&gt;&lt;div&gt;avatars are re-implemented, minus spell list for classes (will add when spells are added)&lt;/div&gt;&lt;div&gt;interactive npc is added, minus quest-text&lt;/div&gt;&lt;div&gt;filled in mutate() for actor renderer, but it's a hack that takes more memory than it should.  better method is to check for same skinned mesh and do a mutate() on that.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;found a dumb linking problem with vc++: apparently the compiler/linker doesn't save the path of a file when building, so "project\a.cpp" is the same file as "project\subpath\anotherfolder\xyz\a.cpp".  intellisense doesn't reveal this problem, though--it separates them just fine.  whoo, now I've gotta come up with a convolution to my otherwise awesome naming scheme =/&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;had a random idea for race-specific abilities: dantalian can wear shield w/ 2h weapons; geonans get reditus; volucris can fly (over pits/short walls/water) and dual-wield; lucans get "bloodlust", which makes them do more damage as they take more damage, and take less damage as they do more damage&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;b&gt;1600: &lt;/b&gt;Items are re-integrated.  Needs food and break.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-0&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-7652281373709572429?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/7652281373709572429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=7652281373709572429' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/7652281373709572429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/7652281373709572429'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/07/tying-up-loose-ends.html' title='Tying up loose ends'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-6229052877354608385</id><published>2009-07-12T08:30:00.000-07:00</published><updated>2009-07-12T15:21:43.262-07:00</updated><title type='text'>I &lt;3 my serializer class</title><content type='html'>Working more on the compiler today.  I've created a new specialization of the serializer class to handle reading and writing to the game file.  It has made my life SO much easier!  No more fwrite array size, fwrite array elements or loop through array elements, fwrite sub-arrays...it handles it all for me.  All I have to do is provide template arguments--and both the writer and reader is generated automatically!  Plus, it's HELLA fast and handles compression (and encryption) automatically.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I think I could release this serializer class as a very useful library at some point.  There are only a few extensions I can think of right now that would really round it out:  a Copy type so that an individual element can be memcpy-ed instead of copied via copy constructor (for large elements), a way to support arrays of arrays...or serializers of serializers...for complex hierarchies, and a serializer "scanner" that lets you look forward and pull out only the array sizes from the next chunk to be deserialized.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;noon&lt;/b&gt;&lt;/div&gt;&lt;div&gt;time to write the compilation code for the most complex game object: the map.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;five&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Client-side map compilation is nearly complete.  It collects, sorts and tabulates all of the locations correctly and I'm about to implement my special compression trick.&lt;/div&gt;&lt;div&gt;...and it's done!  from the debug output:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt; testing map is 512 x 512&lt;/div&gt;&lt;/div&gt;&lt;div&gt; testing map is now 511528 bytes; compression ratio = &lt;b&gt;&lt;i&gt;4.4348%&lt;/i&gt;&lt;/b&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/501453360028352333-6229052877354608385?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/6229052877354608385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=6229052877354608385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/6229052877354608385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/6229052877354608385'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/07/i-3-my-serializer-class.html' title='I &lt;3 my serializer class'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-8559017804220095865</id><published>2009-07-11T07:22:00.000-07:00</published><updated>2009-07-11T12:59:38.899-07:00</updated><title type='text'>Triggers &amp; Compilation</title><content type='html'>&lt;div&gt;I realized yesterday that the map needed triggers added to it, so I am working on that this morning.  I wrote the compiler framework last night, and its implementation should be straightforward (if dull).&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;b&gt;1600&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Compilation code is going quite well.  Far easier now that everything is well organized; however, I'm using a couple of very large (50+ line) #define-s to parse the data lists into straight arrays.  Whatev, it saves me typing out for loops and stl iterators over and over...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-8559017804220095865?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/8559017804220095865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=8559017804220095865' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/8559017804220095865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/8559017804220095865'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/07/triggers-compilation.html' title='Triggers &amp; Compilation'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-2186767456342326057</id><published>2009-07-10T09:50:00.000-07:00</published><updated>2009-07-10T10:41:06.547-07:00</updated><title type='text'>Spawning is BACK!</title><content type='html'>It's fully functional in the editor now, and looks great.  Spawns can be previewed in the map editor, and placed with a click of a button.  Onward, to importing old stuff!  Items &amp;amp; spells to start...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Oh: randf() and its friends have made my coding life so much easier.  Never again will I have to type (rand()/float(RAND_MAX)) * SCALE or (rand()-RAND_MAX/2)/float(RAND_MAX)...these are now just randf() and randfSymmetric().  I can also do randfAngleRadians(), randf(scale), and could easily implement randfGaussian and randfCenterWeighted if I needed them.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ok, one more thing before I get to importing:  I should describe how the spawning system works so that I have notes on it other than in the code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Step 1: add swarm spawn target level layers.  These define to which level of player the spawns at each location on the map should be configured.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Step 2:  add a swarm spawning layer.  This layer is masked to affect a defined area on the map.  Attributes include the ability to clear all existing swarm spawns (default behavior is to simply add more options), and limit the number that this layer adds (the layer can have 32 specified spawns, each with an independent probability of occurring, and the layer can add all of them--but they'll overwrite each other once the maximum is reached.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the list of swarm references, each swarm has a min/max level and only adds itself to locations that are within this level range.  There is also a % chance to be added, so some monster spawns can be very rare.  Finally, there is a list of AI types that can be added at the location.  Want to spawn 3 kinds  of 15 types of rogues?  Just stick 'em all in a single reference, set the thing to 100% spawn probability, set the # of monsters to spawn to be 3 and bam! whenever the spawn is triggered, one of three of a random selection of those 15 kinds will be created.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Finally, step 3:  There is a boolean mask that triggers whether or not something is spawned on the location at all.  This is how you configure spawn points: simply turn it on or off and the configured monsters will show up or go away.&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/501453360028352333-2186767456342326057?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/2186767456342326057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=2186767456342326057' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/2186767456342326057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/2186767456342326057'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/07/spawning-is-back.html' title='Spawning is BACK!'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-700348489601412020</id><published>2009-07-09T06:18:00.000-07:00</published><updated>2009-07-09T21:03:16.383-07:00</updated><title type='text'>Actors Acting and Time Trackers Tracking</title><content type='html'>Good article on time tracking:  &lt;a href="http://www.swaroopch.com/blog/why-i-do-time-tracking/"&gt;http://www.swaroopch.com/blog/why-i-do-time-tracking/&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This puts the vague feelings I've had about work and productivity into a very concise list of words.  It seems like this is exactly the sort of thing I should do.  Maybe I'll take a look at that once I feel like I've gotten back to where I need to be.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On another note, actors are basically done and the dialog to test them is finished.  I'm cranking it up this morning, and will leave it in whatever state (as long as it's working) by noon, latest.  Next up is spawning and AI, which I hope to have finished this evening since they are fairly simple.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Midnight, on the dot&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Actors are finished &amp;amp; working, they'll be a snap to plug into the full version.  They look REALLY good now (tested with Volucris model).  Includes features such as automatically estimating the speed of action (attack/spin) animations by how quickly the actor repeats them--all it takes is 1 repeat to judge the true speed!  No more overlapping animations for Evidyon.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;AI lifeforms are implemented, as is attaching skinned meshes to the map.  The meshes don't update though...and attaching them in the way I did doesn't seem *quite* right for some reason.  Maybe it's because there is so much data to store alongside them.  I'd rather have a "scenery type" for each location with either "animated scenery" or "scenery", where animated scenery is a new type that is like a skinned mesh, but only has 1 form and references a particular animation.  Oh well, this works for now.&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-700348489601412020?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/700348489601412020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=700348489601412020' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/700348489601412020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/700348489601412020'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/07/actors-acting-and-time-trackers.html' title='Actors Acting and Time Trackers Tracking'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-7021627830086359170</id><published>2009-07-06T08:36:00.000-07:00</published><updated>2009-07-06T10:25:13.346-07:00</updated><title type='text'>Got distracted, made some progress</title><content type='html'>I decided yesterday while working on the actor stuff that I wanted to add the flickering light effect that I had in mind for torches n' stuff for so long.  Well, it took all afternoon to implement correctly (!) but I finally got something that looks pretty darn good.  Lighting looks really swanky overall, and renders in just 1 step.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To make things look even better, I can increase the contrast of all ground textures and make them darker but this is something we can tweak later.  Onward, to the actors!&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;b&gt;1320&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Actors are going extremely well.  This new system supports swimming, different weapon types (bows, 2h weapons, dual wielding, staves and more), different attack types and speeds, and it also manages to take up less packet-space than the old version did.  Hooray!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Not having compiled the game for so long is making me really antsy.  But I'm plowing forward anyway and I'm sure it will be worth it in the very near future--I only need to implement lifeforms &amp;amp; spawning before I can get a playable game again, as long as I pull in the old spell and item systems.  Those can be gutted later.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-7021627830086359170?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/7021627830086359170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=7021627830086359170' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/7021627830086359170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/7021627830086359170'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/07/got-distracte-made-some-progress.html' title='Got distracted, made some progress'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-5673224752083413494</id><published>2009-07-05T07:12:00.000-07:00</published><updated>2009-07-05T10:32:43.138-07:00</updated><title type='text'>Back in Action!</title><content type='html'>Well, it's been a while since I've really been able to get down to a solid day of development but I have now returned to Ithaca and am going to get working hard on Evidyon.  On today's schedule:&lt;div&gt;&lt;ol&gt;&lt;li&gt;Get the skinned / animated mesh editor to a point where it can be used effectively (test by importing what I have of Erich's human models)&lt;/li&gt;&lt;li&gt;Get Actor framework working (with combat profiles)&lt;/li&gt;&lt;li&gt;Add new ArtificialLifeform framework for monsters/inhabitants&lt;/li&gt;&lt;li&gt;Set up new swarm-spawning method and associated map layers&lt;/li&gt;&lt;li&gt;Enable previews &amp;amp; modifications in the map editor&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;#1 done, Erich's meshes look GREAT!  Working on #2.&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/501453360028352333-5673224752083413494?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/5673224752083413494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=5673224752083413494' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/5673224752083413494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/5673224752083413494'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/07/back-in-action.html' title='Back in Action!'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-9041904916849410391</id><published>2009-06-28T08:03:00.000-07:00</published><updated>2009-06-28T08:06:11.355-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pngout'/><title type='text'>Animated Meshes and PNGOut</title><content type='html'>Animated meshes are rendering, but not animated.  Animations will be working in the next hour.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Found a great utility this morning via Y-Combinator's Hacker News.  Called "pngout", this tool compresses PNG files while maintaining all information they contain.  I tested it on some of the stuff for the new website and found it made the files on average 10% smaller.  It might be worth integrating this tool into the game editor to reduce the size of the compiled images... &lt;a href="http://advsys.net/ken/utils.htm"&gt;http://advsys.net/ken/utils.htm&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-9041904916849410391?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/9041904916849410391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=9041904916849410391' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/9041904916849410391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/9041904916849410391'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/06/animated-meshes-and-pngout.html' title='Animated Meshes and PNGOut'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-8006668515161167854</id><published>2009-06-27T05:54:00.000-07:00</published><updated>2009-06-27T05:56:55.013-07:00</updated><title type='text'></title><content type='html'>Slogging through the animated mesh /skinned mesh renderers.  It's always annoying when things require so much code before I have anything to show.  Right now I can't actually tell if the last few thousand lines I wrote even do what I intended.  They compile OK and run through without error, but I can't see anything on the screen because the part that does the drawing isn't quite done.  Today, hopefully, that will change.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-8006668515161167854?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/8006668515161167854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=8006668515161167854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/8006668515161167854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/8006668515161167854'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/06/slogging-through-animated-mesh-skinned.html' title=''/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-7681144988683500096</id><published>2009-06-24T07:49:00.000-07:00</published><updated>2009-06-24T07:51:56.190-07:00</updated><title type='text'>Sounds &amp; Special FX</title><content type='html'>Sound manger is in and working again, sounds seem to work fine.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next up is the special FX manager which lets you do the really cool spell effects--combining sounds and patterning multiple visual effects together.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ah, still so much to integrate.  Going smoothly though.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-7681144988683500096?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/7681144988683500096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=7681144988683500096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/7681144988683500096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/7681144988683500096'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/06/sounds-special-fx.html' title='Sounds &amp; Special FX'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-29978368434317422</id><published>2009-06-23T09:05:00.000-07:00</published><updated>2009-06-23T09:58:40.095-07:00</updated><title type='text'>Aaand, we're back</title><content type='html'>Vacation was great!  I'm really recharged and am ready to head back into Evidyon again for the rest of the summer.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While on the 10 hours+ of plane-time, I managed to solve a couple of pressing problems:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;How portals work&lt;/li&gt;&lt;li&gt;Making AI navigate easily&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Both solutions are pretty elegant.  Hopefully we'll have a dev meeting soon to discuss them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For now I'm going into the editor and am finishing up the visual FX engine.  Cool stuff going on there, screenshots soon.  After that I need to work on the map a bit more--adding triggers and spawn points is a big priority.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also, a formula I need to remember:  (1/2*screen dimension) + 2*overlap border &lt;&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-29978368434317422?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/29978368434317422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=29978368434317422' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/29978368434317422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/29978368434317422'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/06/aaand-were-back.html' title='Aaand, we&apos;re back'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-8416118273814302977</id><published>2009-06-12T08:06:00.000-07:00</published><updated>2009-06-12T08:13:24.532-07:00</updated><title type='text'>More pics from the new editor</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TmvXR4qQUSM/SjJwjsv6ZjI/AAAAAAAAAGg/ib4NME8vVxs/s1600-h/scenery-editor.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 156px;" src="http://1.bp.blogspot.com/_TmvXR4qQUSM/SjJwjsv6ZjI/AAAAAAAAAGg/ib4NME8vVxs/s200/scenery-editor.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5346459466252052018" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TmvXR4qQUSM/SjJwX3su0jI/AAAAAAAAAGY/jSfZHKxmIqA/s1600-h/hold-tab.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 156px;" src="http://2.bp.blogspot.com/_TmvXR4qQUSM/SjJwX3su0jI/AAAAAAAAAGY/jSfZHKxmIqA/s200/hold-tab.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5346459263033070130" /&gt;&lt;/a&gt;&lt;br /&gt;I'm getting tons of work done--so much I can't really stop to blog about it!  Brand new features of the editor that work very well:&lt;div&gt;- Intuitive scenery editor that lets you rescale, move, rotate, retexture and compare side-by-side all scenery in the game.  Lets you automatically create variations on scenery, too!  Completely WYSIWYG:  it uses *exactly* the same renderer as both the map editor and (soon) the actual game client.  Includes a semitransparent ground-plane and wireframe tile renderers to give you a feel for the scale.&lt;/div&gt;&lt;div&gt;- VERY cool map editor.  Lets you draw on different map masks directly and can update those masks to disk--no more going back-and-forth drawing in two colors in Paint or exporting from Photoshop every time you want to see how something would look.  Also provides a very snazzy-looking overlay for navigability types (impassable wall, water, safe zone...)&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/501453360028352333-8416118273814302977?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/8416118273814302977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=8416118273814302977' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/8416118273814302977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/8416118273814302977'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/06/more-pics-from-new-editor.html' title='More pics from the new editor'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_TmvXR4qQUSM/SjJwjsv6ZjI/AAAAAAAAAGg/ib4NME8vVxs/s72-c/scenery-editor.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-5873357411637286677</id><published>2009-06-11T08:15:00.000-07:00</published><updated>2009-06-11T13:05:55.815-07:00</updated><title type='text'>I like this graph!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://static.guim.co.uk/sys-images/Guardian/Pix/pictures/2009/6/9/1244556652985/games-music-dvds.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 292px; height: 200px;" src="http://static.guim.co.uk/sys-images/Guardian/Pix/pictures/2009/6/9/1244556652985/games-music-dvds.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-5873357411637286677?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/5873357411637286677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=5873357411637286677' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/5873357411637286677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/5873357411637286677'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/06/i-like-this-graph.html' title='I like this graph!'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-5992961587991173887</id><published>2009-06-09T07:59:00.000-07:00</published><updated>2009-06-09T20:42:04.036-07:00</updated><title type='text'>Day 30</title><content type='html'>So yesterday sometime around 2 or 3 pm the code started to crawl because my damn right-hand keyboard's up arrow stopped working.  I verified the keyboard was working by disassembling it and making sure the arrow worked when I connected the circuit on the printed sheet, but I just couldn't get the thing working again.  My momentum was broken and sleepiness finally started muddling my brain...as a result I gave up for the time being and packed for my trip home and cleaned the house.  Looks pretty good now.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My goal is to have this editor working and integrated into the game by Friday night.  This is going to be a lot of work because there is SO MUCH new stuff, but if I can do that then we're pretty much golden for Beta.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I do have to say though, a single keyboard just isn't doing it for me anymore.  It's &lt;b&gt;so cramped&lt;/b&gt; I feel carpel tunnel setting in just using this laptop keyboard.  Ugh.  I wish that stupid other keyboard were working.&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;b&gt;2330&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Leaving on a plane in the morning.  &lt;b&gt;&lt;i&gt;Editor WORKS!  &lt;/i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;The map system integrated *perfectly*.  It does exactly what I want it to do and it's really easy to set up.  I haven't tested all the features yet, I'm going to get some sleep tonight so I can knock all that out tomorrow.  Score one for the home team.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I should also mention its REALLY slick--smooth, intuitive, and fun to use!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-5992961587991173887?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/5992961587991173887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=5992961587991173887' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/5992961587991173887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/5992961587991173887'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/06/day-30.html' title='Day 30'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-8622715320522291432</id><published>2009-06-08T04:45:00.000-07:00</published><updated>2009-06-08T06:57:22.137-07:00</updated><title type='text'>28++</title><content type='html'>Hour 25, still going strong.  Going to get through this and roll out an update like never before.  Finished:&lt;div&gt;&lt;ol&gt;&lt;li&gt;New map engine&lt;/li&gt;&lt;li&gt;Unified map layer masks (can use any # of colors)&lt;/li&gt;&lt;li&gt;Made layer masks even more awesome to use by allowing multiple references to the same mask&lt;/li&gt;&lt;li&gt;Layers can even reference each other, and the system is very flexible &amp;amp; extensible.  Triggers, npc spawn points, etc. are going to be a breeze.  You'll also be able to see all of this stuff in the editor instead of just guessing at where it might be.&lt;/li&gt;&lt;li&gt;Blending between layers is significantly more simple, more powerful and FAR faster.  Not tested yet, working up to it....&lt;/li&gt;&lt;li&gt;Rebuilding editor tool to use all up-to-date code, which will significantly speed things up and make it easier to use.&lt;/li&gt;&lt;li&gt;Wrote mesh converter from D3DX to unified format&lt;/li&gt;&lt;li&gt;Finished all images &amp;amp; implementation, added preview functionality to test new rendering method&lt;/li&gt;&lt;li&gt;Finished all textures &amp;amp; implementation--integrated new scene manager so that game will now run not only the same behavior but the same actual module of code.  Before two modules were emulating one-another.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Phew!  Gotta keep going....&lt;/div&gt;&lt;div&gt;&lt;ol start="10"&gt;&lt;li&gt;Meshes, mesh renderer added...&lt;/li&gt;&lt;li&gt;Scenery, scenery renderer added..&lt;/li&gt;&lt;/ol&gt;Things are looking good!  Next up is the map in all its new glory.  *crossing fingers*... err ... *uncrossing fingers to type*&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/501453360028352333-8622715320522291432?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/8622715320522291432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=8622715320522291432' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/8622715320522291432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/8622715320522291432'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/06/28.html' title='28++'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-4151520211883177324</id><published>2009-06-07T07:02:00.001-07:00</published><updated>2009-06-07T23:17:22.471-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='scaleable server'/><title type='text'>28 Erlang</title><content type='html'>I read an &lt;a href="http://www.devmaster.net/articles/mmo-scalable-server/"&gt;article on DevMaster.net&lt;/a&gt; this morning on how straightforward it is to code an MMO server with Erlang.  I haven't even started looking at issues of scaleability yet, but if it's really as effective as he claims, this could be a good choice should Evidyon become extremely popular (like we hope ;)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Coding is going very well--I'm looking forward to having the new map engine integrated with the editor, client, server and new map editor by Tuesday.  This will be a huge step forward since we'll be able to build a massive, interesting world with minimal pain.&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;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's technically day 29 now, but this is like 28++ because Im not going to sleep tonight.  Good stuff happening, gotta get it while it's hot!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;3&gt;../bin/sandbox/\sandbox_d.exe : fatal error LNK1120: 158 unresolved externals&lt;/div&gt;&lt;div&gt;3&gt;Build log was saved at "file://c:\Unseen\Projects\Evidyon\apps\build\sandbox\Debug\BuildLog.htm"&lt;/div&gt;&lt;div&gt;3&gt;sandbox - 1331 error(s), 0 warning(s)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Whoops.  That's ok I'll be there by morning.&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/501453360028352333-4151520211883177324?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/4151520211883177324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=4151520211883177324' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/4151520211883177324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/4151520211883177324'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/06/28-erlang.html' title='28 Erlang'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-9068385624583340875</id><published>2009-06-06T12:47:00.001-07:00</published><updated>2009-06-06T14:44:29.254-07:00</updated><title type='text'>Has it really been 27 days?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TmvXR4qQUSM/Siri6b13HYI/AAAAAAAAAGQ/ji4zQ9RH2bU/s1600-h/newmap.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 310px;" src="http://1.bp.blogspot.com/_TmvXR4qQUSM/Siri6b13HYI/AAAAAAAAAGQ/ji4zQ9RH2bU/s320/newmap.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5344333401362472322" /&gt;&lt;/a&gt;&lt;br /&gt;I'm amazed the time has passed so quickly.  Fortunatey, plenty has gotten done and more is on the way.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Today's white noise:  &lt;a href="http://code.google.com/events/io/sessions/MythGeniusProgrammer.html"&gt;Myth of the Genius Programmer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Map renderer does its job perfectly--occlusion, lighting, fluids, pits, walls...you name it.  I'll add new features as time allows (corner walls is on this list), but the framework to support them is solid and will let me get on with integrating this into Evidyon's client and editor either today or tomorrow without jeopardizing future functionality.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've coded up improved scenery and mesh renderers too.  Scenery renderer takes over the job of its predecessor from the client application (drawing items on players and drops on the map) as well as some of the burden from the old map renderer (drawing trees/bushes/lamps/etc).  This should make the client HUGELY more efficient, and hopefully solve that nasty BSOD bug.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also, the new scenery renderer is buit to have special effects attached.  Sparkly swords, flaming torches, and dazzling armor--here we come!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-9068385624583340875?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/9068385624583340875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=9068385624583340875' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/9068385624583340875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/9068385624583340875'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/06/has-it-really-been-27-days.html' title='Has it really been 27 days?'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_TmvXR4qQUSM/Siri6b13HYI/AAAAAAAAAGQ/ji4zQ9RH2bU/s72-c/newmap.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-5886144957665130296</id><published>2009-06-05T07:14:00.000-07:00</published><updated>2009-06-05T20:15:10.358-07:00</updated><title type='text'>Day 26, T minus 9 and counting</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TmvXR4qQUSM/Sine35NHOzI/AAAAAAAAAGI/Kt8yk1GinoA/s1600-h/visibility+almost+working.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 250px; height: 250px;" src="http://2.bp.blogspot.com/_TmvXR4qQUSM/Sine35NHOzI/AAAAAAAAAGI/Kt8yk1GinoA/s320/visibility+almost+working.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5344047484681796402" /&gt;&lt;/a&gt;&lt;br /&gt;I go home for vacation in 9 days, and Evidyon needs to be in a mostly-compete state by then.  It's time to get down to business (again)!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Today:&lt;/div&gt;&lt;div&gt;1. Map editor&lt;/div&gt;&lt;div&gt;2. Map editor&lt;/div&gt;&lt;div&gt;3. Map editor?&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;2300&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Shabam!  I can't do the new map editor without this new format, and boy am I glad I waited on finishing it.  I found a much more efficient way of doing what I was doing before, and I've made huge strides today.  I should be abe to have a basic working editor up tomorrow if all goes well, followed by a reasonably usable one on Sunday.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-5886144957665130296?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/5886144957665130296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=5886144957665130296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/5886144957665130296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/5886144957665130296'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/06/day-26-t-minus-9-and-counting.html' title='Day 26, T minus 9 and counting'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TmvXR4qQUSM/Sine35NHOzI/AAAAAAAAAGI/Kt8yk1GinoA/s72-c/visibility+almost+working.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-7343689537481064334</id><published>2009-06-04T09:42:00.000-07:00</published><updated>2009-06-04T17:44:03.901-07:00</updated><title type='text'>25% = 1/4</title><content type='html'>Creative, I know.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyway I fixed some stuff with the questing this morning and they seem to be working just fine now.  In the future I'd really like to support group quests--they could be a lot of fun!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm going to work on the map editor today.&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;2035&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Well, I ended up taking a personal day instead.  Went to the store, cleaned, etc.  Two things to report on from this front that aren't strictly Evidyon or Unseen-related, but are cool enough to mention:&lt;/div&gt;&lt;div&gt;1.  For the most enjoyable coffee I've had in a while from beans I had thought were a bust, mix 2 tbsp sugar with 1/3 cup grounds and brew (small flat-bottom).  It comes out so mild and delicious that I don't even add any sugar and only a splash of milk.  I think putting some sugar in the grounds separates them and allows them to steep differently, because the difference is like night and day--not even comparable to brewing then adding sugar.&lt;/div&gt;&lt;div&gt;2.  This is the first thing that I'm writing on a pair of keyboards that I hacked up to allow me one keyboard for each hand*.  Using two USB keyboards, I cut each such that I can sit in a chair, rest my hands on the arms and without moving them, type on the computer quite comfortably.  It's a somewhat unnerving effect because typing like this is so comfortable and natural that it almost seems wrong.  Now if only I could control the mouse by looking I would have a perfect interface!  Hehe.  Geeky, no?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyway, tomorrow I'll need to do some more cleaning around here (using a hacksaw on the keyboards created a lot of plastic dust and it's late enough I can't spot it all) but I'm going to start, quite comfortably, on the map editor coding tonight.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;*Hooray!  No more RSI effects :D&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-7343689537481064334?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/7343689537481064334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=7343689537481064334' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/7343689537481064334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/7343689537481064334'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/06/25-14.html' title='25% = 1/4'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-1346571569553149676</id><published>2009-06-03T05:39:00.001-07:00</published><updated>2009-06-03T11:22:47.561-07:00</updated><title type='text'>twentyfour - show quests on client</title><content type='html'>Ok, so all I have to do is get quests showing up on the client and I can finally release this quest update.  The big decision here is how much info to give the client: should the client be told how much they've progressed on a given quest?  The description says they have to kill 230 orcs to complete this quest and bring back a golden rapier from one of their corpses.  Should the quest display "210/230 orcs killed"?  This seems a bit...well, artificial.  It would seem to me that would make the game seem less pure.  Plus it's not fun to code and puts a burden on the server...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So unless players ask for it, I'm going only to display timers (and names)!&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;1315&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Quests are sent to clients and there is now a display panel for them accessible via right-clicking one's own player.  It also displays tooltips (compiling this to test right now) with the description in them.  Move the text-wrapping method to the font...finally...so it doesn't run on forever.  Can probably use exactly the same thing for the chat log.  Super cool.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Last thing I need to test:  being able to give up on a quest by clicking it in the quest log.&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;1415&lt;/span&gt;&lt;/div&gt;&lt;div&gt;IT IS DONE!  Time to make some quests that people can actually test out.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-1346571569553149676?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/1346571569553149676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=1346571569553149676' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/1346571569553149676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/1346571569553149676'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/06/twentyfour-show-quests-on-client.html' title='twentyfour - show quests on client'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-5269590284825156268</id><published>2009-06-02T12:08:00.000-07:00</published><updated>2009-06-02T20:48:12.703-07:00</updated><title type='text'>Microsoft's "Natal" is like a Wii times 23</title><content type='html'>If the "Natal" project &lt;a href="http://www.youtube.com/watch?v=g_txF7iETX0"&gt;from this video by Microsoft Research&lt;/a&gt; is really as good as it looks...it will completely revolutionize the world.  No kidding.  From the &lt;a href="http://procrastineering.blogspot.com/2009/06/project-natal.html"&gt;post by Johnny Lee&lt;/a&gt; on his blog, the 3d pointcloud scanning ability already far exceeds the ability of even the most state-of-the-art ragefinders.  Not only is the density hugely impressive, it's behaving in friggin real-time!  That's incredible!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyway, quests are nearly complete!  I'm coding the last two database methods now and am about to test :D&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;1715&lt;/span&gt;&lt;/div&gt;&lt;div&gt;SWEEEEET!!!! The Aurelian Blade quest works great.  Doesn't save quest history to DB yet, will add that in now.  Left to do:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;set up day/week/month quest offer times&lt;/li&gt;&lt;li&gt;saving quests to db&lt;/li&gt;&lt;li&gt;load quests from db&lt;/li&gt;&lt;li&gt;log kill count (specific &amp;amp; qualified)/pk count/death count/map change/etc.&lt;/li&gt;&lt;li&gt;instantly fail quests w/ that parameter enabled&lt;/li&gt;&lt;li&gt;show quests on client, allow quest failure&lt;/li&gt;&lt;li&gt;competitive quests&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;1730&lt;/span&gt;&lt;/div&gt;&lt;div&gt;BAM time finished.  Going to test taking items from players on quest complete.  Already tested and confirmed that only items generated *after* a quest starts qualify to complete that quest.&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;1800&lt;/span&gt;&lt;/div&gt;&lt;div&gt;2, 3 done; fixed bug with % showing up in speech log.&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;1830&lt;/span&gt;&lt;/div&gt;&lt;div&gt;4 done .. dinner ... 4 tested &amp;amp; works!&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;2330&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Moved 56k of data off the stack in the client, maybe this will solve login issues since windows won't have to allocate such a big amount of stack memory.  Did some code reorganization, too.  Also...quests might not be working quite as well as i thought, looks like I can repeat the blade quest as many times as i want on an alternate character.  hrm.&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/501453360028352333-5269590284825156268?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/5269590284825156268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=5269590284825156268' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/5269590284825156268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/5269590284825156268'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/06/microsofts-natal-is-like-wii-times-23.html' title='Microsoft&apos;s &quot;Natal&quot; is like a Wii times 23'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-6085824681065737130</id><published>2009-06-01T08:04:00.001-07:00</published><updated>2009-06-01T18:53:56.087-07:00</updated><title type='text'>22 Quests</title><content type='html'>Questing is going GREAT!  I've coded all the behavioral stuff into the NPC (the different phrases) and I'm about to test him out.  Gotta recompile because I added another phrase, though:  accepted quest but can't pay.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's my list for today:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Test NPC dialogue for various situations with hard-coded quest parameters (half an hour)&lt;/li&gt;&lt;li&gt;Implement quest proposal display on client with accept/decline buttons (1 hour)&lt;/li&gt;&lt;li&gt;Write quest interaction code that checks to see if you qualify for a quest, have completed a quest, etc&lt;/li&gt;&lt;li&gt;Save questing data between sessions and ensure consistency&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;6 pm already?!?!?!!?!?!!?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Well that was crazy, I woke up at 7...had some food...took a shower...wrote this post around 8:30 and started coding.  I forgot lunch, whoops!  I guess that's what happens when you're having a BLAST doing something you're really interested in.  Quick accomplishment list then I'm going to work out:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;NPCs speak to the player and can have very long phrases that don't interfere with one-another.  Situation:  two players both trigger an NPC to say a different set of phrases at the same time.  Whose phrases win?  Well, in this system BOTH do!  The NPC sends out the entire phrase at once to all clients when it is generated, along with the actor to whom he is speaking.  If a client realizes that the NPC is speaking to its avatar, it will lock the NPC's speech as "persistent" and only display that NPC's phrases, even if the NPC is triggered to say something else by another client.  This also makes it so that the client is entirely responsible for rolling through the NPC's spoken phrases, which takes a lot of burden off of the server.&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;REALIZATION:&lt;/span&gt; This is why I love this blog!  I just realized that because of this system I don't even have to sprintf the actor's names into the spoken text anymore, I can just leave the %'s and do a straight-up send on the text!  Since the clients know which actor is being spoken to, they know that actor's name implicitly!!!!!!  (&lt;span class="Apple-style-span" style="font-style: italic;"&gt;minus the no-name bug....guess I'm gonna have to fix that one before quests go out&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;The quest accept/decline panel works great&lt;/li&gt;&lt;li&gt;All methods for quest states are stubbed out&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;ten&lt;/span&gt;&lt;/div&gt;&lt;div&gt;phew, I've implemented the prerequisite method stubs.  tomorrow i should be able to do more coding, then actually be able to try out a quest or two!  Wednesday looks good for release =D&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/501453360028352333-6085824681065737130?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/6085824681065737130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=6085824681065737130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/6085824681065737130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/6085824681065737130'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/06/22-quests.html' title='22 Quests'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-7121453020834126985</id><published>2009-05-31T07:29:00.000-07:00</published><updated>2009-05-31T17:14:57.084-07:00</updated><title type='text'>21 Things Evidyon Should Watch Out For</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TmvXR4qQUSM/SiMdS5u_FMI/AAAAAAAAAGA/tH6TS9xZlhE/s1600-h/quest.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_TmvXR4qQUSM/SiMdS5u_FMI/AAAAAAAAAGA/tH6TS9xZlhE/s320/quest.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5342145793564284098" /&gt;&lt;/a&gt;&lt;br /&gt;Well, I needed to use a number so it might not be 21...but the guy reviewing Darkfall Online, a game I read about today and thought "crap! they did what we're doing" sure made me feel good about our project.  It looks like they went to release, several years late, with problems that we've already solved or are in the process of solving:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.eurogamer.net/articles/darkfall-online-review"&gt;http://www.eurogamer.net/articles/darkfall-online-review&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As one commenter put it, "I thought I'd stumbled into a re-re-review of Age of Conan."  Ouch.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=knzMFC6s4Bw&amp;amp;feature=channel"&gt;I feel fantastic&lt;/a&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;Steps remaining to implement quests:&lt;/div&gt;&lt;div&gt;- Generate action-trigger UserEvent on alt-click&lt;/div&gt;&lt;div&gt;- on action-trigger UserEvent, check until one succeeds:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;nonself actor - if valid:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;if npc: send quest trigger to server&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;if player/monster: show name instantly&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;self actor - if valid, pull up stats menu&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;location: &lt;span class="Apple-style-span" style="font-style: italic;"&gt;??? if location has items, examine the stack???&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;send location quest-trigger to server&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;- on server, on for quest trigger &lt;actor_id,&gt;:&lt;/actor_id,&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;validate distance to target&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;if actor, get actor's list of quest triggers.  break after the first trigger that activates.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;if not actor or not triggered, check location's trigger(s)&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;Quest trigger flags:&lt;/div&gt;&lt;div&gt;preconditions:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;currently on quest (quest)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;not on quest (quest)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;then action:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;check end quest (quest)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;OR&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;give quest (quest) -- must check to be sure client isn't on too many quests...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;NPCs can each give 2 quests and end 2 quests.  They don't necessairily have to end the same quests that they begin--this allows for delivery quests.  They are given 2 quest commentary slots where they can say something when a player is on a quest (to give hints, etc.  again it doesn't have to be the same quests that they give or end!)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="text-decoration: underline;"&gt;For giving quests:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;- it is implied that a player cannot be given a quest that they already undertook&lt;/div&gt;&lt;div&gt;- a player can only be on one quest that an NPC gives at a time (the npc won't give you a second quest)&lt;/div&gt;&lt;div&gt;- if an NPC gives 1 or more quests but the triggering avatar doesn't qualify for any of them, the NPC has a phrase for both &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;if the actor could qualify for one in the future&lt;/span&gt;, and one for &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;if the actor could never qualify&lt;/span&gt;&lt;/div&gt;&lt;div&gt;- if a triggering avatar qualifies for a quest, but &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;is on too many quests already &lt;/span&gt;the NPC says something&lt;/div&gt;&lt;div&gt;- the NPC has a phrase for &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;if an avatar qualifies for a quest&lt;/span&gt;.  when spoken, the server will cause the quest description box to pop up on the client's screen.  this will also display the quest (and the ability to cancel the quest) in the player's UI&lt;/div&gt;&lt;div&gt;- NPC has text both for &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;avatar accepting &lt;/span&gt;and &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;declining &lt;/span&gt;a quest.&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;span class="Apple-style-span" style="text-decoration: underline;"&gt;For ending quests:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;when triggered, if the NPC will cause the client's quest-state to be checked:&lt;/div&gt;&lt;div&gt;- if the time limit has not been reached:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;- if &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;the client succeeded&lt;/span&gt;, say something and do success action&lt;/div&gt;&lt;div&gt;- if the quest's time-limit has been exceeded:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;- if client failed by time limit, say the &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;time failure phrase &lt;/span&gt;&amp;amp; do failure action&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;- if the client &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;succeeded at the quest&lt;/span&gt;, say something &amp;amp; do success-over-limit action&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- if quest not terminated (has not succeeded or failed):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;- if client &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;failed by an irreversible reason, say the reason text &lt;/span&gt;and do failure action.  ex. irreversible reasons are are lost competition, too many deaths, changing map and too many pks&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;- if still not terminated, check the in-progress quest commentary&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="text-decoration: underline; "&gt;For in-progress quest commentary:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;- if the player is on a referenced quest and trigger-clicks the npc, the npc says &lt;span class="Apple-style-span" style=""&gt;something to them about the quest based on how much time is left:  &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;just getting  started (&lt;5&gt;, &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;in-progress (&gt; 5 minutes, &lt;50%)&lt;/span&gt;, &lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;half-expired (&gt;50% expired but more than 5 minutes left), nearly out of time (&lt;5&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Locations can end quests too, but without all of the fancy phrases.  This is to be used for ending quests at a location.  For instance, you are given a quest and teleported into a shrine where reaching the end will give you 1 point added to strength.  If you change maps (i.e. leave the shrine) the quest is failed.  The quest has no requirements to complete it, so anything that triggers termination of the quest results in a success.  For this, each location just has the index of a quest for which it examines termination and performs the quest-configured success/failure actions.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Phew!  Welp, now I feel like I have something better specified to implement.&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;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;Do be doo...8 pm and it's time for the Simpsons&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Also, SCORE quests can be compiled &amp;amp; triggered XD&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-7121453020834126985?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/7121453020834126985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=7121453020834126985' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/7121453020834126985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/7121453020834126985'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/21-things-evidyon-should-watch-out-for.html' title='21 Things Evidyon Should Watch Out For'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_TmvXR4qQUSM/SiMdS5u_FMI/AAAAAAAAAGA/tH6TS9xZlhE/s72-c/quest.PNG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-6620670104305047396</id><published>2009-05-30T06:26:00.001-07:00</published><updated>2009-05-30T19:56:48.831-07:00</updated><title type='text'>I'm still 20 for another three weeks</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TmvXR4qQUSM/SiHCYg6kc-I/AAAAAAAAAFg/ANpwBm9VZTo/s1600-h/quests-in-editor.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 116px;" src="http://2.bp.blogspot.com/_TmvXR4qQUSM/SiHCYg6kc-I/AAAAAAAAAFg/ANpwBm9VZTo/s320/quests-in-editor.bmp" border="0" alt="" id="BLOGGER_PHOTO_ID_5341764359446361058" /&gt;&lt;/a&gt;&lt;br /&gt;You know your code project is huge when you can start a recompile, get some coffee, take a shower, return, write a blog post, start up your SVN server computer, commit the changes and it's still goi...oh wait it just finished :D&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I gave Unseen Studios a file-header and added it to a bunch of files.  Anywho, I'll be implementing quests today so let's see how that goes.&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;Wow, it's eleven already?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Implementing quests is genuinely hard!  It's quite an interesting challenge though--there are lots of things to paramaterize.  For instance, we should be able to define competitive quests where a certain number of people succeeding at the quest causes the rest to fail (i.e. frontiering).  Another flag specifies whether meeting criteria for termination causes an instant or delayed effect.  For frontier quests, when the time limit is up everyone fails and they are teleported to a given location.  For delivery quests with a time limit, if the limit is succeeded the quest isn't failed until the player talks to someone involved with the quest and they inform them of the fact.  Also, some quests are succeeded by simply arriving at a given location or talking to an NPC--these external triggers force a quest to succeed, so it's not even necessary for a quest to be innately competeable.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Somewhere along the way I lost my list-of-three.  Gotta keep it going!&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Finish building the quest server format&lt;/li&gt;&lt;li&gt;Create the quest client format&lt;/li&gt;&lt;li&gt;Integrate quests into the game compiler&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Played a bit today and noticed a bug with the auto-refresher in the bazaar.  Fixed it, will release change with next update.  Also reducing timer to 10 seconds instead of 15 so there are 3 refreshes per cycle.&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;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;(I'm just talking myself through this and organizing my thoughts)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's possible that I could be trying to be a bit too general with the quest system.  I was doing some mental simulation on how to format competitive quests, and I think competitive quests might better be modeled as a different kind of quest altogether.  Quests of the natural type are independent of each other:  multiple players can get the "kill bugs" quest at different points in time (or simultaneously) and complete it without any affect on one another.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Competitions, however, are generally launched simultaneously, can have a limit on participation, have an end-trigger that affects all involved parties, and when terminated ranks participants and performs an action on each based on their placement.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For instance, a frontering quest could be a competition whose end is triggered either by time limit (5 minutes) or by a participant finding 10 Red Charms.  When either of these is triggered, all players are ranked and given prizes: an individual succeeding at the quest (finding all 10 before the time limit) gets the success prize.  Others could get a ranking prize.  All participants are teleported back to the frontiering geosid where they started.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ranking prizes would be difficult to hand out properly, however, since a frontier could begin with only 2 participants, which would make 2nd place accessible with zero effort.  Perhaps it's better not to have these at all.&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;a href="http://bolddream.com/2009/05/30/the-unemployed-developer-a-tale-with-expected-end/"&gt;The Unemployed Developer - A Tale with Expected End&lt;/a&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;br /&gt;&lt;/div&gt;&lt;div&gt;Aha!  Just had an awesome idea:  since action-click (right-click for a RH mouse) will be used to activate information about NPCs/locations for quests and stuff, why not use it for the player too?  I'll make it so that right-clicking yourself brings up the central avatar menu.  This should make it really intuitive to navigate the world since everything's consistent!&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;Se7en&lt;/span&gt;&lt;/div&gt;&lt;div&gt;That's how you do that right?  Still working.  Do be doo.  Compiling code has been written, stubbed out the encryption stuff.  Time to add it to the main editor...w00t!&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;span class="Apple-style-span" style="font-weight: bold;"&gt;eleven again...sigh&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Watchin' hockey.  Sa-weet.  Editor compiles quests correctly for both client and server, double-sweet.  Both client and server can load!  Working on GlobalQuestManager.  Recognized need for being able to specify the creation of indices in database.cfg, have been wanting to do this for a while so I finally got it working.  Just add a * in front of the name and suddenly a linear search turns into a binary or even hash-speed query.  Will be very helpful once more queries are being executed. ...tested, works perfectly!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Yawn&lt;/span&gt;!  No bed until 11:30.  That's my schedule:  7 AM to 11:30 PM.  YEAH!  I'm sleepy though so I'm going to work on the new website's layout.&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/501453360028352333-6620670104305047396?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/6620670104305047396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=6620670104305047396' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/6620670104305047396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/6620670104305047396'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/im-still-20-for-another-three-weeks.html' title='I&apos;m still 20 for another three weeks'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TmvXR4qQUSM/SiHCYg6kc-I/AAAAAAAAAFg/ANpwBm9VZTo/s72-c/quests-in-editor.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-7252101157018350177</id><published>2009-05-29T05:03:00.000-07:00</published><updated>2009-05-29T19:43:07.629-07:00</updated><title type='text'>Nineteen</title><content type='html'>&lt;div&gt;Articles!&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://chrishecker.com/Do_Your_Job_Well,_Please"&gt;http://chrishecker.com/Do_Your_Job_Well,_Please&lt;/a&gt;&lt;a href="http://chrishecker.com/Do_Your_Job_Well,_Please"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://chrishecker.com/Kurt_G%C3%B6del_is_Laughing_His_Ass_Off_Right_Now"&gt;http://chrishecker.com/Kurt_Gödel_is_Laughing_His_Ass_Off_Right_Now&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.uwlax.edu/faculty/will/svd/index.html"&gt;http://www.uwlax.edu/faculty/will/svd/index.html&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://somethinbeautiful.blogspot.com/2009/05/cool-art-with-folded-paper-paper.html"&gt;http://somethinbeautiful.blogspot.com/2009/05/cool-art-with-folded-paper-paper.html&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;When I got right down to it, designing the questing system wasn't all that difficult.  I'm implementing a quest creator tool now that, thanks to the way I redesigned the editor's save format, will be the first tool that's separate from the main game-file compiler and should let Joe/Erich build quests that can be easily merged with the main game.&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;Four&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Wow, it's 4 already?  I've been hard at work on the quest editor, and things are going great.  I created an Evidyon tool-project template so that the next tool can be created much more quickly, and have finished writing out all of the quest data structures.  I'm just implementing some actions then I'll crank this thing up and see what happens.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One of the tricky problems I had to solve was how to get a localized editor (i.e. an editor for quests) that references data outside of that which it loads (such as items) to be able to edit those references.  Long story short, I added a "recursive" flag to the load method of the sql database resource storage so that these other resources can be loaded in name-only generic format.  Then, I made it so that references could be set simply using path-names.  I haven't tested it yet (later tonight) but this should allow the editor to save into the main game file without the need to actually know how it works--so even if the data format or structure types of the rest of the file change completely, an out-of-date local editor should still work fine.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've decided &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;not &lt;/span&gt;to include quest initiation or termination NPCs or locations inside of the quest definition itself.  Why?  Lots of reasons:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;The manner in which quests are given is more flexible--you can get one automatically by entering a dungeon, for example&lt;br /&gt;&lt;/li&gt;&lt;li&gt;We can have several NPCs give the same quest but have different dialogue for doing so&lt;/li&gt;&lt;li&gt;The termination points for a given quest can also be edited independently of the quest itself.  Since changing the map and NPCs are events that occur outside of the quest editor (and the quest editor can't "see" the map or edit the NPCs)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;This could allow for a quest to have multiple endpoints!&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another interesting quest item: there are now 3 termination methods.  Success, success over time limit and failure.  This is an effect of the time limit possibly not being a failure-condition.  We can have quests that give different rewards based on whether or not you met the time allotted.&lt;/div&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;2235&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Quest editor done--tool template complete, will be refined as I make more tools.  Note to self:  when item are required to finish a quest, they must have been generated after the quest was initiated.  So store the ID # of the next item to be generated and be sure only items created after that point qualify.&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/501453360028352333-7252101157018350177?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/7252101157018350177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=7252101157018350177' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/7252101157018350177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/7252101157018350177'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/articles-httpchrishecker.html' title='Nineteen'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-585247170171985006</id><published>2009-05-28T17:00:00.000-07:00</published><updated>2009-05-28T17:01:43.695-07:00</updated><title type='text'>What's the Simplest Thing that Could Possibly Work?</title><content type='html'>After much coding this evening, a break reading YCombinator News has come through for me again.  When designing my code tomorrow, &lt;a href="http://www.artima.com/intv/simplest3.html"&gt;this is the thought to keep in mind&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-585247170171985006?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/585247170171985006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=585247170171985006' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/585247170171985006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/585247170171985006'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/whats-simplest-thing-that-could.html' title='What&apos;s the Simplest Thing that Could Possibly Work?'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-800050384844680826</id><published>2009-05-28T06:11:00.000-07:00</published><updated>2009-05-28T15:53:27.740-07:00</updated><title type='text'>Day 18</title><content type='html'>The walls are kindof annoying, but definitely necessary.  I'm going to work on those some more this morning, then maybe do some quest stuff since that's more engaging.&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;Ten&lt;/span&gt;&lt;/div&gt;&lt;div&gt;I'm EVEN MORE officially a business--I've got my own Employer Identification Number!  =D&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;Eleven&lt;/span&gt;&lt;/div&gt;&lt;div&gt;I found a very useful DX FAQ here:  &lt;a href="http://tomsdxfaq.blogspot.com/"&gt;http://tomsdxfaq.blogspot.com/&lt;/a&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;This DX development has made me realize that writing a new map engine is going to take a LOT more work than I had anticipated.  Although the basic standalone system is fairly straightforward, integrating it into the game is going to be much harder.  First, if I change the map renderer then the map format is going to have to change on the client to support the new information on visibility/occlusion and walls, which means rewriting the editor's mapping component (both the compilation part and the visualization part).  Since the editor changes, the server will also have to change to read the new format.  Add in debugging time for all of this, and this project will probably take two weeks before it settles down into something useful--but in that time, I could have coded a significant number of other features.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Since the game does work without this map update and I'm &lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;not &lt;/span&gt;&lt;/span&gt;100% sure it will fix the major bug I'm trying to nail down (BSOD), I think it would be best to develop in parallel:  work both on the map and on features that the game doesn't have at all, splitting my days between them.  Comparing the time I've spent working on the map so far (3 days) with its results (nothing new) with the time I spent working on gameplay updates (1 day) with &lt;span class="Apple-style-span" style="font-style: italic;"&gt;its&lt;/span&gt; results (massive), I'm afraid I'll tinker away all my time with the map, mid-June will roll around and the game will still be lacking major features.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's effective (if sometimes tedious) to fix and/or unify components that has been implemented, since you know how they are supposed to work--but unless they're fundamentally broken, it may not be the best use of time.  I'd say the map is at 80% right now, and I could get it to 95% with a week of work.  Quests and frontiering are at 0%, and I could pull them up to 50% in a few days.&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;span class="Apple-style-span" style="font-weight: bold;"&gt;Three&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Fixed the installer and significantly updated it.  Added a very basic license agreement and rules.  Also put in a nice lookin' Evidyon banner at the top!  Also, I found that all I need to do in order to have the installer overwrite previous version is remember to update the version number each release.  I wish there were a way to make that automatic... Looks like it hasn't been updated since 2.5.0&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Going to work on Vista file-permissions bug.&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;330&lt;/span&gt;&lt;/div&gt;&lt;div&gt;I'm now a file-permissions guru.  Basically, the Program Files directory has moved for programs that actually need to update themselves.  Unless you want to splay your program over multiple folders, it's now the Common Files directory.  Also, you can use the following function to find configured folders so I'm using it to put screenshots into "My Pictures" instead of the Evidyon install directory.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb762181.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb762181.aspx&lt;/a&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;Four&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Found &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c4a25ab9-649d-4a1b-b4a7-c9d8b095df18&amp;amp;DisplayLang=en"&gt;AppVerifier from Microsoft&lt;/a&gt;.  Using it to test Evidyon for errors--let's see if it helps find BSOD!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;...bummer.  That was a waste of time.  Oh well.&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;br /&gt;&lt;/div&gt;&lt;div&gt;Installer works great now, tested the new version.  Also completetely revamped the instructions document, complete with fun Evidyon ASCII text.  Woot.&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;span class="Apple-style-span" style="font-weight: bold;"&gt;sixthirty&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.rexx.com/~dkuhlman/python_101/python_101.html#SECTION004000000000000000000"&gt;I now know Python&lt;/a&gt;, as well as how to &lt;a href="http://www.dev-explorer.com/articles/excel-spreadsheets-and-python"&gt;write Excel spreadsheets&lt;/a&gt; with it.  It would be very powerful to write quest scripts with Python--my only reservation is the sensitive execution time of the server.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-800050384844680826?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/800050384844680826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=800050384844680826' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/800050384844680826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/800050384844680826'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/day-18.html' title='Day 18'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-2768266405345165546</id><published>2009-05-27T04:52:00.000-07:00</published><updated>2009-05-27T20:05:21.799-07:00</updated><title type='text'>floor(exp(2.84))</title><content type='html'>Fixed some problems with the last release.  Item drops now work properly, and order of equipped items doesn't affect their chance to drop (so you can't protect items by equipping them last, for example).  Also fixed going evil too rapidly--if you took 6 hits to kill someone, it would count you as 6 pks instead of 1.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Alignment now regenerates more quickly.  +1 unit per day seemed very slow--it's upped to 4/24 hours.  However, the first 20 hours after your last pk counts as a day so players who log in often regenerate a bit faster.  Also, after 48 hours the rate drops to 2/day and is capped at 30 so that inactive characters don't gain a huge amount of alignment.&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;span class="Apple-style-span" style="font-weight: bold;"&gt;Two&lt;/span&gt;&lt;/div&gt;&lt;div&gt;tweak tweak tweak!&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;Three&lt;/span&gt;&lt;/div&gt;&lt;div&gt;The living room has been reorganized.  I've got my double-strength green tea with honey.  Time to pwn some code.&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;Seven&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Lots of code done.  Working on quest system since I got bored of messing with walls.  Nobody has any good articles, looks like I'm on my own again.&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;Eleven&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Skype rocks my socks.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-2768266405345165546?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/2768266405345165546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=2768266405345165546' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/2768266405345165546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/2768266405345165546'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/floorexp284.html' title='floor(exp(2.84))'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-580002885451786811</id><published>2009-05-26T07:03:00.000-07:00</published><updated>2009-05-26T13:24:16.107-07:00</updated><title type='text'>Sixteen Candles</title><content type='html'>After our group meeting yesterday, I worked hard on the alignment &amp;amp; PK system for Evidyon and churned out a bunch of new code.  The only things left to do before I can release this update are (1) implement the "Evil Town" where players who go evil and are killed spawn, and (2) do a bunch of testing to make sure everything works.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Eleven&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Evil spawn point is implemented.  Rebuilding the editor and going to get started testing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Whoops, forgot that actor templates need to have an alignment parameter.&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;Noon&lt;/span&gt;&lt;/div&gt;&lt;div&gt;After much testing, the system works great!  The hour counter was more difficult than I anticipated but using GetSystemTime, SystemTimeToFileTime and some hints from RtlTimeToSecondsSince1970, I managed to make it work.  I can use this same system for handling account time, too!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One more thing to do before I release:  put alignment on the player's stats screen.&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;Four&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Back from a long lunch.  Alignment is on the stats screen.  I'd like to add race/class display to the screen also (temporary hack for now, this screen is going to be redone anyway).  Fixed a small bug I found in the server code that caused evil players to register as PKs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another cool idea for PKers I wanted to write down:  after a PK, you get a glowing red effect around you for a few minutes (so you're easily identified as a killer!)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-580002885451786811?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/580002885451786811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=580002885451786811' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/580002885451786811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/580002885451786811'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/sixteen-candles.html' title='Sixteen Candles'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-2608455088016021756</id><published>2009-05-25T07:58:00.001-07:00</published><updated>2009-05-25T08:08:05.781-07:00</updated><title type='text'>I'd have 15 cents...</title><content type='html'>If I had a nickel for each time I've written a Direct3D rendering state manager.  See how I worked today's number in there?  Pretty slick.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyway, the new terrain renderer is SO COOL I don't know what I can say about it.  It's coming soon and supports a ton of features, and I've finally solved some problems that I had been ignoring (point-light effects being one of them).  I'm integrating it with the other components and I'm unifying all my D3D rendering code in the process.  New (very simple) component I'm just about to write handles lights on the map.  This will essentially "allocate" lights for effects.  Since D3D can only handle 8 enabled lights at a time and the lights have to be repositioned based on the camera's location (the world moves around the camera, not the camera through the world...weird, yes), this manager will let other classes allocate and free lighting structures so that magic effects can illuminate the world.  Groovy.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also, found a memory leak bug in the client's actor effect binding allocator.  Uploading quick update to fix that.  That reminds me, I should mention that I'm adding another new effect binding type:  scenery binding.  This will let scenery have special effects attached, so swords can have sparkles and glow.  To create the special effects for weapon attacks might be a bit difficult. Right now when an actor gets hit, it just sets a "blood" flag in the update packet.  It doesn't specify the actor that hit it, since it's obvious to a player watching and was (up till now) immaterial to the game client.  However, if a fire-sword bursts into flame when it hits a monster...that means the sword needs to register a hit or the monster needs to say who hit it. AH!  The former is much more simple to do, since landing a hit is always recorded on the server.  I can add a "special hit effect" to weapons and pass the sfx id into the attack structure, then just generate the sfx if valid when registering damage.  Piece of cake.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ok, finished compiling back to code!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-2608455088016021756?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/2608455088016021756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=2608455088016021756' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/2608455088016021756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/2608455088016021756'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/id-have-15-cents.html' title='I&apos;d have 15 cents...'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-3397200308173461631</id><published>2009-05-24T06:52:00.000-07:00</published><updated>2009-05-24T17:13:23.255-07:00</updated><title type='text'>All Fourteen Ducks in a Row</title><content type='html'>Apparently the value of  (-5)%3 is &lt;a href="http://www.velocityreviews.com/forums/t437061-modulus-of-a-negative-number.html"&gt;not well defined, and is inconsistent between platforms&lt;/a&gt;.  Well, nuts to whoever decided that one.  I need negative % for the map code, so here's a fun hack:  to make a%b work over a exists in (-c,+c), instead use (a + d)%b where d is some multiple of b that is larger than c.  In other words, just make it positive in a way that doesn't affect the result.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The map editor is going well.  I've finished the framework for the renderer, and not only is it a bazillion times more efficient than the old one, it looks better and is more simple!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Map renderer&lt;/div&gt;&lt;div&gt;2. Bugs&lt;/div&gt;&lt;div&gt;3. Map Tool&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;One&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Map still coming along.  Occluded areas are colored slightly darker to make it more obvious one cannot see them.  Going to have to use fog for pits instead of coloring the vertices, but that's not a big deal and it should be that way anyway.  A cool effect though is that I can fog an area and you can't see the pits in it, then if you fall in one you'll go "beneath" the fog and you'll be able to see them.&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;Two&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Took a walk in the gorge, it's a beautiful day.  Also, occlusion works great!&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;Eight&lt;/span&gt;&lt;/div&gt;&lt;div&gt;I'm making a render-state manager that's essentially a mixed speical FX and texture manager.   This'll make it simple to integrate the same effects into the editor and client--right now they were developed separately so even though they do the same thing, they aren't a shared structure.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-3397200308173461631?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/3397200308173461631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=3397200308173461631' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/3397200308173461631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/3397200308173461631'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/all-fourteen-ducks-in-row.html' title='All Fourteen Ducks in a Row'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-6627241588853619620</id><published>2009-05-23T08:39:00.000-07:00</published><updated>2009-05-23T10:52:46.151-07:00</updated><title type='text'>Lucky 13 and I Heart DBs</title><content type='html'>"CREATE INDEX IF NOT EXISTS ..."&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I did a lot of optimization on sqlite iteslf using various pragmas, securing it only for single-threaded access and using only pre-prepared statements with bound parameters.  Next, I changed the queries to build the hierarchy using unique keys instead of path strings.  Finally, I created an index for the owner keys that build the hierarchy and the loading time went from 15-20 minutes down to 6-10 seconds.  YEAH!!!!!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have learned a lot about databases while doing this fix.  Namely, if you're looking for something frequently it should be an integer key and should be indexed.  Also, databases are great but their flexibility and power has to be well managed.&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;span class="Apple-style-span" style="font-weight: bold;"&gt;High Noon&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Fixed a small problem with dcReference.  Noticed that the swarm spawning density, which implements dcGenericResource directly, didn't implement toString correctly so it wasn't being saved (0 densities everywhere) and compiling caused an infinite loop.  Fixed, and editor works great now.  Going to start on the next list items.   Let's take a look at our beta document.   Says BSOD bug &amp;amp; map tool.  Well, rewriting the map engine is a prereq for the BSOD bug fixes (*crosses fingers*)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. New Map Renderer, carefully programmed to fix BSOD&lt;/div&gt;&lt;div&gt;2. Get people with BSOD problem to play, if not fixed add testing code for that&lt;/div&gt;&lt;div&gt;3. Vista file-permissions bug, fix installer crappyness, freezing at log-in bug (hopefully fixed by map also)&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;span class="Apple-style-span" style="font-weight: bold;"&gt;Thinking on Paper&lt;/span&gt;&lt;/div&gt;&lt;div&gt;The map needs to support several distinct features:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Terrain composed of square tiles with different textures in 4 rotated versions&lt;/li&gt;&lt;li&gt;Walls&lt;/li&gt;&lt;li&gt;The ability to black-out sections of the map based on what the user can see (to hide the contents of rooms beyond a wall)&lt;/li&gt;&lt;li&gt;Pits&lt;/li&gt;&lt;li&gt;Second terrain layer for overlays like water, lava, acid and whatnot.&lt;/li&gt;&lt;li&gt;Special effects attached to map&lt;/li&gt;&lt;li&gt;Map triggers.  This is already implemented somewhat, but we need triggers for scripts.&lt;/li&gt;&lt;li&gt;The ability for the server to change elements of the map (?)  Could be useful for switches and such.  This seems like it would be a set of "region flags" that are sent when a new region is entered to describe the state of that region.&lt;/li&gt;&lt;li&gt;Lighting settings so that dungeons are dark, inside it's bright.  Probably a float-variable where -1.0 is always night, 0.0 follows day/night cycle and +1.0 is always day.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Let's see...&lt;/div&gt;&lt;div&gt;region_flag = flag_index &gt; 8 ? 1 : ((flags &gt;&gt; flag_index)&amp;amp;1);&lt;/div&gt;&lt;div&gt;if (region_flag) {&lt;/div&gt;&lt;div&gt;flag_parameters = getParams(region_flag);&lt;/div&gt;&lt;div&gt;switch (flag_parameters.type) {&lt;/div&gt;&lt;div&gt;case SPECIALFX:   specialfx_manager_.createSpecialFX(flag_parameters.specialfx); break;&lt;/div&gt;&lt;div&gt;case SCENERY: scenery_manager_.createScenery(flag_parameters.scenery); break;&lt;/div&gt;case WALL_DOWN: map_manager_.wallDown(flag_parameters.wall_down); break;&lt;br /&gt;case WALL_UP: map_manager_.wallUp(flag_parameters.wall_up); break;&lt;div&gt;}&lt;br /&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Yeah that could work!  Up to 8 different triggered effects per 16x16 region, but any number of allowable effect types.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Walls first.  I don't like how a lot of games use a straight LOS algorithm that produces crazy shadows on the map everywhere (ala Diablo).  It's too dark and makes you feel like the game's artificially restricting you.  However, I can't just have monsters waiting in a room while you're standing there on the other side of a partially-open wall looking at them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I think the solution here is to show all areas of the map that are connected by non-occluding tiles to the one you're occupying, but compute an LOS between actors and only display those that are directly visible to one another.  I can even do a quick/cool "fade in" of the mesh for characters that just came out of a shadow.  This does mean, however, that all solid walls shouldn't be occluding.  This would make characters pop in and out of existence randomly and that doesn't seem reasonable.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So the map needs a new layer for occlusion is the upshot of this.  Layers for now include:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Texture / rotation&lt;/li&gt;&lt;li&gt;Terrain Height (lower than some threshold will color terrain black to indicate a pit)&lt;/li&gt;&lt;li&gt;Fluid Texture (flat plane at -1/4*tile_size depth)&lt;/li&gt;&lt;li&gt;Wall flag, wall height&lt;/li&gt;&lt;li&gt;Occluder (boolean)&lt;/li&gt;&lt;li&gt;Scenery (objects), Animated Meshes (swaying grass?)&lt;/li&gt;&lt;li&gt;Navigability (walk/swim/impassable/prevent teleport/no spells/reduced speed)&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;And per-region:&lt;/div&gt;&lt;div&gt;&lt;ol start="8"&gt;&lt;li&gt;Monster swarm spawner&lt;/li&gt;&lt;li&gt;NPCs&lt;/li&gt;&lt;li&gt;Triggers (map teleport, regen HP, scripted event)&lt;/li&gt;&lt;li&gt;Flagged Actions (controllable wall up/down, scenery action ex. open door, special effect)&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ok, let's get started!  This is going to be fun :D&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/501453360028352333-6627241588853619620?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/6627241588853619620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=6627241588853619620' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/6627241588853619620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/6627241588853619620'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/lucky-13-and-i-heart-dbs.html' title='Lucky 13 and I Heart DBs'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-6102907358693981564</id><published>2009-05-22T07:10:00.001-07:00</published><updated>2009-05-22T14:34:20.215-07:00</updated><title type='text'>12 Times the Lines</title><content type='html'>The damn SQLite database just won't load!  It saves the file fine and I can look at it in a standalone editor...but can the program open the file?  No way. RAWR.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;1 hour later...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;CRAP.  I had already fopen'ed the file and was trying to re-open it with SQLite.  That was pretty dumb.  Still, if it isn't one thing its another--now the loader is very slow.  *fixing*&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;1 pm&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Almost fixed!  :D  Also, &lt;a href="http://www.spectrum.ieee.org/may09/8788"&gt;here's a good article&lt;/a&gt; I read on the Netflix movie-prediction competition while my code was compiling.  Five minutes later, still compiling.  Read an article on &lt;a href="http://www.pcplus.co.uk/node/3059/"&gt;how silicon chips are made&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ah!  I forgot I had not updated the 3-things-I'm-doing post.  Well, I guess it didn't change much:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1.  (Still) changing editor save format&lt;/div&gt;&lt;div&gt;2. Bugs&lt;/div&gt;&lt;div&gt;3. Map tool&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;3 pm&lt;/span&gt;&lt;/div&gt;&lt;div&gt;The performance of the loader is still sucking pretty bad.  The problem is that since the file isn't linear anymore, all of the resources must be looked up by name when they are loaded.  That's a TON of string comparisons.  I think I've found a way around the problem by saving an "index hint" in the record that should allow correctly-saved resources to completely shortcut the comparison, but we'll see what happens...&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;4pm&lt;/span&gt;&lt;/div&gt;&lt;div&gt;I've downloaded the Visual Studio standalone command-line profiler and found &lt;a href="http://msdn.microsoft.com/en-us/library/aa985627.aspx"&gt;this awesome walkthrough&lt;/a&gt; because this is just getting silly.  I have to say that the profiler works GREAT.  Unfortunately it told me what I suspected, that the SQLite database is being dumb.  Trying some optimizations.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If only I still had milk so I could drink coffee...and sleep more.  My brain's a bit fuzzy today and I feel like I've been hammering at a problem for a second day that should have taken me only a few hours.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-6102907358693981564?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/6102907358693981564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=6102907358693981564' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/6102907358693981564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/6102907358693981564'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/12-times-lines.html' title='12 Times the Lines'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-8818496728343919929</id><published>2009-05-21T08:01:00.000-07:00</published><updated>2009-05-22T09:50:43.572-07:00</updated><title type='text'>Eleventh Heaven</title><content type='html'>Finished the core spreadsheet, for now.  Only design points left untouched: regeneration rates and regeneration spells (healing).  Player HP may need to take a hit, or possibly monster dps increased,  when these are introduced.  ...Actually, everything's calibrated for players being completely killed by a single monster in 4-5 seconds right now anyway so maybe not.  We'll see.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Changing editor save format&lt;/div&gt;&lt;div&gt;2. Minor Bug Fixing&lt;/div&gt;&lt;div&gt;3. Map Tool&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;12:30 pm&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Modifiying the save format is going very well.  I should have it done this afternoon.&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;6:00 pm&lt;/span&gt;&lt;/div&gt;&lt;div&gt;I've integrated the new saving method into the editor.  There are some residual problems with how reference links are saved.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-8818496728343919929?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/8818496728343919929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=8818496728343919929' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/8818496728343919929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/8818496728343919929'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/eleventh-heaven.html' title='Eleventh Heaven'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-214789559839118383</id><published>2009-05-20T05:51:00.000-07:00</published><updated>2009-05-20T09:15:33.176-07:00</updated><title type='text'>10tinnabuation</title><content type='html'>I can't believe it's noon already!  I've taken the morning to do some design work that will help lay the foundation for a balanced game, and things are coming along extremely well.  It's important that we start getting numbers together that jive with each other--after all, most of what the server does is just running gameplay equations.  Unfortunately this takes dev time away from finding code bugs, which is my next task.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As for the list of three things that I'm working on next:&lt;/div&gt;&lt;div&gt;1- Balancing global design equations in a big excel spreadsheet so Erich/Joe/Alex can assign  numbers to the items they make that won't have to be continuously revamped and should stay balanced&lt;/div&gt;&lt;div&gt;2- Changing the way the game editor saves files to use a database.  For many projects I'd imagine this would be a huge change; however, I expect to have it done tomorrow.  This solves a big problem:  it will let me write tools that load and work on only sections of the game file individually without having to know how to handle the parts it doesn't recognize.  For example, I can write an item editor that *only* edits items--even though all of the textures, images, maps, npcs, meshes etc etc are all in the same file, they are transparently ignored by the specific editor.  It can just go in, do its thing and leave.  By being able to make very modular editors, I should be able to improve the overall quality of each.  Included in this "step" is to write an item editing tool using the new editor model to make sure everything is working.&lt;/div&gt;&lt;div&gt;3- Bug fix update&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-214789559839118383?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/214789559839118383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=214789559839118383' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/214789559839118383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/214789559839118383'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/10tinnabuation.html' title='10tinnabuation'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-4598536241172755043</id><published>2009-05-19T06:17:00.000-07:00</published><updated>2009-05-19T13:10:49.363-07:00</updated><title type='text'>To the 9s</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TmvXR4qQUSM/ShK0ewdLD_I/AAAAAAAAAFY/kbvZ0xiZLi0/s1600-h/breakfast-coffee.gif"&gt;&lt;img style="float:right; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 174px; height: 320px;" src="http://3.bp.blogspot.com/_TmvXR4qQUSM/ShK0ewdLD_I/AAAAAAAAAFY/kbvZ0xiZLi0/s320/breakfast-coffee.gif" border="0" alt="Coffe Nutrition Facts" id="BLOGGER_PHOTO_ID_5337526948883795954" /&gt;&lt;/a&gt;&lt;br /&gt;Found the other divide-by-zero bug.  Same story, different day--magical weapon attacks with 0 random damage.  Fix going out with the bazaar update.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As far as that goes, the bazaar works quite well though I'm still worrying about how to handle gold. Gold needs to be tradeable and droppable just like an item--problem is, it's not completely an item since we don't want it cluttering players' inventories.   Maybe if there were a "bank" (or perhaps storage?) where putting gold would stack it up into the fluid number in the corner if the screen, and from there it was spendable, but to trade or drop it you would have to carry it around as an item.  Seems like it would be a bit annoying, but I can't think of a better way at the moment that doesn't require making a whole lot of hacks into the other systems.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Adding the items into trade was really easy.  All I did was add a parameter to the network message for currency (SUPER easy thanks to the serializer...omg I love that code) and in the trade controller for how much was offered on each side.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the course of developing that, I realized I could create a generic "user inputs number" prompt fairly easily using the code I'd already written from the Bazaar and changing the GUIModule code slightly so that it gets passed messages after they are sent to the subcontrols.  The upshot is that with only a few lines I can stick in prompts anywhere they're needed, and they correctly block the user from interacting with all other controls.  W00t!  I love modularity.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After thinking about the problem for a while, I decided NOT to treat currency and items the same way.  For one, items have a lot of special processing and are used throughout the server.  Adding more special processing would just complicate things, and all I really needed to do was to be able to drop items on the ground.  Since dropping 1 gold several times on a single square of the map should still result in just 1 pile of gold if I implemented it along with items this wouldn't be possible.  Long story short, gold is stored alongside items in the world regions in a separate map.  There are a few lines for special processing, and gold will persist as long as the region is active--it's never "cleared" like items are.  It would be trivial to add this, but I think it's kinda cool that it doesn't work that way because then you can tell if an area's been active recently by whether or not there's gold present.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I think this update's ready.  Entering gold into the system is a bit hacked in right now (fixed chance 1/20 to drop any gold, drops 1-10 randomly 90% of the time and 20-30 the other 10%), but I think it'll let gold start working its way into the system until I put something more final into place.  Also, I'm going to list some items in the bazaar for players to buy so they can see some cool stuff.  I'll make up some new items just to have something interesting for them to ogle.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Only other  minorly sucky point: gold looks like a big chest on the ground.  It'd look much cooler as a nugget or a pile of coins or something.&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;span class="Apple-style-span" style="font-weight: bold;"&gt;3 pm&lt;/span&gt;&lt;/div&gt;&lt;div&gt;I gave in and made the pile of coins icon.  Ahh, much better.  Also I moved beam so it's not coming out of the crotch anymore--it's actually coming out of the hands, or closer to where they're going to be when I add that animation.&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;4 pm&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Update's out.  Works like a charm.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-4598536241172755043?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/4598536241172755043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=4598536241172755043' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/4598536241172755043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/4598536241172755043'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/to-9s.html' title='To the 9s'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_TmvXR4qQUSM/ShK0ewdLD_I/AAAAAAAAAFY/kbvZ0xiZLi0/s72-c/breakfast-coffee.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-4982696026151310451</id><published>2009-05-18T06:51:00.001-07:00</published><updated>2009-05-18T16:38:38.520-07:00</updated><title type='text'>Eight, eight my office is great</title><content type='html'>Today marks the official start of summer development.  I'm &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;done&lt;/span&gt; for the semester and it's time to get down to development.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First things first: checking out my office space.  A few words, "superb" and "comfortable" come to mind.  I have dual screens on a big desk, sunny south-facing windows, a big LCD TV with Wii Fit and a full-size refridgerator.  Doesn't get much more luxurious than this.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;moving on!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm going to have to power through this Bazaar GUI creation.  We'll see how it goes.  On a side note, I'm not sure what I'll do when I'm on post 73 and can't come up with a clever title.  I might have to break this silly pattern.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I was looking for GUI design stuff last night and found &lt;a href="http://welie.com/index.php"&gt;Welie.com&lt;/a&gt;, a website that just lists all kinds of different GUI elements.  It's pretty fantastic.&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;span class="Apple-style-span" style="font-weight: bold;"&gt;5:30 pm&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Bazaar is up and running!  Now just to make it a bit prettier, do some thorough testing and release it.&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;7:30 pm&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://danieltenner.com/posts/0009-how-to-make-your-application-viral.html"&gt;Interesting article on making apps that "go viral"&lt;/a&gt;.  Complete with fun mathy viral coefficient.  Bazaar has been tested, fringe cases (listing bazillions of items) seem taken care of.  Just need to be able to drop gold on ground and get it into players' hands somehow (autobuyer?) and away the economy goes!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-4982696026151310451?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/4982696026151310451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=4982696026151310451' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/4982696026151310451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/4982696026151310451'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/eight-eight-my-office-is-great.html' title='Eight, eight my office is great'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-6548618022396758623</id><published>2009-05-17T08:44:00.000-07:00</published><updated>2009-05-17T16:17:44.717-07:00</updated><title type='text'>Still crashing on the 7</title><content type='html'>The server's still getting divide-by-zero errors.  It's so weird that I'd have multiple ones that all show up in the same release.  This one is much more mysterious.  It's *probably* being caused by a buffer overflow of some sort.  Symptoms:  corrupted stack variables, debugger trace doesn't go all the way back up the call path, it breaks down in areas that should never break (the STL in hash_map, ws2_32.dll, ...)&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;6 pm&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Server hasn't crashed yet.  Murphy's law, attaching a debugger to a normal run makes it work great.  Wtfs abound.  Also, bazaar's coming together.  Got items display on the client like a charm.  GUI is still a huge pain, not sure what I can do about it yet but I have to think of something because there's no way taking 2 days to add a single set of menus is sustainable.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I did some work with the hp equations and realized what curve I really want:  exponential rise up to a straight-line.  All dps should be based on hp.&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;span class="Apple-style-span" style="font-weight: bold;"&gt;7pm&lt;/span&gt;&lt;/div&gt;&lt;div&gt;The bazaar is almost finished.  There HAS to be a better way.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-6548618022396758623?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/6548618022396758623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=6548618022396758623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/6548618022396758623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/6548618022396758623'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/still-crashing-on-7.html' title='Still crashing on the 7'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-5375389925497830866</id><published>2009-05-16T09:15:00.000-07:00</published><updated>2009-05-16T14:21:57.474-07:00</updated><title type='text'>On the 6th of the season, I found the divide-by-zero</title><content type='html'>For the last week, Evidyon has been plagued by an "integer divide-by-zero" error that crashed the server several times a day.  A perfect example of a Heisenbug, it occurred after a seemingly random amount of time, never on my test code and nobody knew what was causing it.  I had the insight to install MSVC++ 2008 Express on the server, transfer over the PDB and catch the error the next time it occurred.  The first couple of times the error looked like it was coming from the enet_host_service method, but the stack was all messed up and it just didn't seem like a logical place for the errror to occur.  This morning, however, I attached the debugger in a different way (attach to the process when it created the exception, then hit "break all", then OK on the dialog) and it took me into the melee combat controller.  A few updates back I changed how characters calculate their damage, and apparently some had a zero range--so when damage = base_damage + rand()%damage_range was invoked, damage_range was sometimes zero and a modulus by zero invokes a divide-by-zero exception.  Bam!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;1pm&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Changed the view perspective.  It's MUCH better looking now.  Also added day/night lighting effects--nothing fancy, though.  Update went fairly smoothly.  The EXE was corrupted in the upload though and something weird happened.  Recompiling fixed it.&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;2pm&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Another problem has reared its ugly head: melee damage is fuxed.  Players are doing far less per hit than they should be.  I'm going to work on this after bazaar, since it deals with armor/weapon damages/etc.  They're all linked.&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;4pm&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Coded EvidyonGUIActionButtonList, EvidyonGUIModule_BazaarCategories, EvidyonGUIModule_BazaarCategoryItems and EvidyonGUIModule_Bazaar.  Added actions to the UserActionQueue, fixed a minor oversight with the tell-items network message.  *phew* coding UI is tedious.  Going to get through it though.&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;5pm&lt;/span&gt;&lt;/div&gt;&lt;div&gt;I didn't fix the error.  Stupid % not being dominant.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-5375389925497830866?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/5375389925497830866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=5375389925497830866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/5375389925497830866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/5375389925497830866'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/on-6th-of-season-i-found-divide-by-zero.html' title='On the 6th of the season, I found the divide-by-zero'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-4909294731656789761</id><published>2009-05-15T05:34:00.000-07:00</published><updated>2009-05-15T12:47:45.029-07:00</updated><title type='text'>5</title><content type='html'>&lt;a href="http://www.wolframalpha.com/screencast/introducingwolframalpha.html"&gt;Wolfram Alpha is incredible&lt;/a&gt;!&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;You can get almost any information you want with it... now I don't know what to use it for, but I'll keep it in mind for future assignments.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Watched an &lt;a href="http://video.google.nl/videoplay?docid=1966651363723137945&amp;amp;q=source:012957665200967062741&amp;amp;hl=nl"&gt;old Xenimus PVP movie&lt;/a&gt;.  Good examples of style.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've learned a lot more about DLL "hooking" by reading some articles about wallhacks.  Most of them are l33t h4x0r types, but &lt;a href="http://www.gamedev.net/community/forums/topic.asp?topic_id=359794&amp;amp;PageSize=25&amp;amp;WhichPage=1"&gt;this article on GameDev.net&lt;/a&gt; is really good.  He gives full source-code for hooking a d3d9 application.  I'd love to have it as a drop-in profiling/debugging tool for Evidyon so I could hook the game on various computers and see what's going on.  Unfortunately, although it works on the two simple samples I tried (vertices tutorial, meshes tutorial) it *doesn't* work on Evidyon!  Somehow, the DLL (which swaps out the Direct3DCreate9 method) only gets loaded *after* the method is invoked...so it never has a chance to be called!  Unless there's a way to up the priority of this library then I'm not sure it can work.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In fact, there &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;is&lt;/span&gt; a way!  Thanks to this &lt;a href="http://en.wikipedia.org/wiki/DLL_injection"&gt;Wikipeda article on DLL injection&lt;/a&gt;, if I put the DLL in &lt;span class="Apple-style-span" style="font-family: '-webkit-monospace'; line-height: 19px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;c:\windows\system32&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;and add it to the registry key &lt;span class="Apple-style-span" style="font-family: -webkit-monospace; font-size: 10px; line-height: 19px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia; font-size: 16px; line-height: normal; "&gt; it is loaded whenever user32.dll is brought into memory by the program.  I played around with this a little and thanks to some code I found on the web originally for creating your own wall hacks, was able to intercept several method calls on IDirect3DDevice8 objects from D3D8.DLL.  Groovy.&lt;/span&gt;&lt;/span&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;br /&gt;&lt;/div&gt;&lt;div&gt;Reading &lt;a href="http://www.fastcompany.com/node/28121/print"&gt;this article&lt;/a&gt; on how software is developed for the Space Shuttle inspired me to write out the following idea I had for small-scale robust software development that I'd like to try at Unseen Studios once it grows a bit:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Each project is tackled by three teams:  Specifiers, Programmers and Verifiers (or in less stoic lingo Dreamers, Hackers and Smashers).  Everyone working on a project is either a Programmer, Verifier, Specifier-Verifier or Specifier-Programmer.  Only management can be just Specifiers.  Assume gaining "points" is motivating.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Verifiers gain points when they find a bug in the code or something missing from the spec.  Programmers gain points when they find nontrivial unspecified behavior in the spec, or discover a way to shorten the &lt;span class="Apple-style-span" style="font-style: italic;"&gt;current &lt;/span&gt;development cycle.  An example would be reusing old code instead of writing new code.  Programmers also gain points when code they've written gets reused.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-4909294731656789761?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/4909294731656789761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=4909294731656789761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/4909294731656789761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/4909294731656789761'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/five.html' title='5'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-1155390578870398282</id><published>2009-05-14T05:38:00.000-07:00</published><updated>2009-05-14T11:24:43.211-07:00</updated><title type='text'>IV</title><content type='html'>Articles read this morning while watching the news:  &lt;a href="http://www.flipcode.com/archives/Being_A_Better_Programmer.shtml"&gt;Being a Better Programmer&lt;/a&gt;, &lt;a href="http://playtechs.blogspot.com/2007/03/raytracing-on-grid.html"&gt;Raytracing on a Grid&lt;/a&gt;, &lt;a href="http://sc.tri-bit.com/Computing_LOS_for_Large_Areas"&gt;Computing LOS for Large Areas&lt;/a&gt;, &lt;a href="http://www.gamedev.net/reference/articles/article728.asp"&gt;Tile-Based FAQ&lt;/a&gt;, &lt;a href="http://www.gamasutra.com/features/20050629/mcshaffry_01.shtml"&gt;Game Coding Complete:  Smart Design Practices&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;div&gt;A couple of those articles are from &lt;a href="http://www-cs-students.stanford.edu/~amitp/gameprog.html#paths"&gt;Amit's Game Programming Information&lt;/a&gt;, which has really good information of tile-based games that is applicable to Evidyon's map.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Interesting side note, &lt;a href="http://www.flipcode.com/archives/C_Coding_Style-My_Code_Style.shtml"&gt;this was the article&lt;/a&gt; that defined my coding style for a long time.  I really liked the spaced-out, easy-to-read and well-commented code written this way.  Honestly, I still do like that style--but now I use a modified Google style because I can write code more quickly and I can see more on the screen at the same time.  Using OCAML (Java) -like function names is my major difference from Google's code spec.  If you ask me, their way of naming methods is a major flaw that probably confuses a lot of their coders--functions look exactly the same as every single variable.  Maybe I'll write something on it at some point.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In preparation for registering Unseen Studios, I've just purchased UnseenStudios.org, UnseenStudios.net and UnseenStudios.info for the astronomically huge price of $16.  Woot.  I'm just glad nobody else got to this first.  Then again, Xenimus.com has been around for almost a decade now and noone has purchased Xenimus.net.  That reminds me, would it be an effective marketing campaign to purchase unused domain names related to other games and redirect them to Evidyon?  After all, I'm sure people visit incorrect domains all the time...and if one were to post "worldofwarcraft.biz" links, chances are many people would visit, and if the investment brings in even 1 new player then it's paid for itself.  Hmm...  is it incredibly apparent that I've been studying for my entrepreneurship exam all day?&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/501453360028352333-1155390578870398282?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/1155390578870398282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=1155390578870398282' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/1155390578870398282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/1155390578870398282'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/articles-read-this-morning-while.html' title='IV'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-2312466209133295794</id><published>2009-05-13T06:18:00.000-07:00</published><updated>2009-05-13T15:44:55.312-07:00</updated><title type='text'>Day Three</title><content type='html'>Still sick.  Final test in Entrepreneurship tomorrow.  That reminds me, I really need to register Unseen Studios as a company asap.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Read the Game Developer magazine that came this morning.  It has an interesting article on asynchronous resource loading using fibers.  Cool idea because fibers stay within a thread, so that works around the problem of both concurrent resource access and DX's hatred of multithreaded apps.  There was also an ad for &lt;a href="http://www.intel.com/software/gpa"&gt;Intel's Graphics Performance Analyzer&lt;/a&gt; that seemed particularly interesting.  I signed up and downloaded it (327 MB!)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I hope to get the Bazaar finished today, but we'll see how it goes with my head feeling like it's stuffed with cotton...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Intel GPA tool is really interesting!  I managed to get it working on my machine, and it lets me just snap frames of data and analyze exactly what's going on with them at some later date.  Even better, I can modify the current state and see what happens to rendering times and such.  Very cool.  One thing I tried was to enable lighting on the skeleton meshes to see what was screwing them up.  ...and now, all of a sudden, lighting works again!  Wtf!  Before, it was causing the skeleton meshes to lose a limb when rendering.  Now it's perfect.  *sigh*  Lighting does look cool though.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I also found another nifty tool for redirecting inter-module Win32 function calls created by Microsoft Research.  It's called Detours.  It should really be called Hijacks.  Or perhaps Highway Robberies...you can pretty much do anything to any program with it.  I'm surprised they provide this tool, it seems like they're doing a virus hacker's work for them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bazaar is going very well.  Mostly done with server-side interface, about to start coding DB stuff.  Not quite sure how to do commission at the moment--i.e. should it just be yoinked from the player, or should they be able to see how much it costs?  Probably the latter.  I want to base it on how many items they player's already listed, though--that way we don't have to institute max # of items listed, just have a really high price for listing more than a few items (so high that almost nobody will pay it).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bazaar server-side (client interface, database, network messages, request processing) almost finished.   Cool way of handling more items than a single screen:  just have the server cache items on a screen and rotate them every few minutes.  That way, not only does the bazaar look "active", it also reduces server load since the bigger DB queries are very spread out.  Other nifty side effect: you can watch other players buy items, since they're just marked "sold" in the cache and still sent out to players browsing a given category.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now that I have long blocks of time to devote, I can completely focus on spending an extra hour teasing out all the nuances of designing new code.  As a result, the bazaar's design is rock solid.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There's no way to describe how freeing it is to code when there's nothing else on my mind.  I haven't had this luxury in a very long time.  It's going to be a good summer.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-2312466209133295794?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/2312466209133295794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=2312466209133295794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/2312466209133295794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/2312466209133295794'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/day-three.html' title='Day Three'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-220230651861100026</id><published>2009-05-12T07:16:00.000-07:00</published><updated>2009-05-12T07:20:48.460-07:00</updated><title type='text'>Visual Leak Detector</title><content type='html'>&lt;a href="http://www.codeproject.com/KB/applications/visualleakdetector.aspx"&gt;I &amp;lt;3 VLD&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  Simple and effective--copy in the files, link the library and read off memory leaks in the exact same way you do compiler errors.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Not only that, it has a stack trace that Visual Studio recognizes (so actual lines of files are linked) and gives you a preview of the leaked memory.  It deserves a post of its own in his blog because it's helped me on so many occasions, and did so once again today.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-220230651861100026?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/220230651861100026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=220230651861100026' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/220230651861100026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/220230651861100026'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/visual-leak-detector.html' title='Visual Leak Detector'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-5436827066149531104</id><published>2009-05-12T05:03:00.001-07:00</published><updated>2009-05-12T14:59:52.459-07:00</updated><title type='text'>Day Two</title><content type='html'>TurboSquid doesn't suck as much as I thought!  Years ago I was turned off of TS, but they have a &lt;a href="http://www.turbosquid.com/3d-models/max-12-fantasy-character/153779"&gt;cool set of models&lt;/a&gt; there that Richard sent and TS will convert them for free to a usable format.  Groovy.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also, &lt;a href="http://www.the3dstudio.com/product_details.aspx?id_product=63047"&gt;good armor models $50&lt;/a&gt; over at the3dstudio.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course, upgrading to VS2008 broke Evidyon on some computers since it now uses v9.0 of the CRT, and the installer only added v8.0 to users' computers.  Re-compiled installer and uploaded new version.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Added MD5 password hashing to passwords last night.  Temporarily disabled since the DB will have to change.  Or will it?  I could send password as a MD5 string and store the string in the DB...32 characters = 32 bytes as opposed to 32 hexs = 16 bytes.   *sigh*  I guess that's ok.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Added names to trade screen.  Serializer code I wrote yesterday is **fantastic**--normally it would have taken 10-15 minutes to make the change just because editing network messages used to be a huge pain.  New system took 30 seconds.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I noticed that the fastsync gets fuxed for 1 cycle when a client logs off since the type counter goes OBO (noticeable behavior: XP bar flashes full).  Changed some stuff that might fix that.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I must say that upgading to VS2008 was a great idea--the debug mode is substantially faster than in 2005.  I can run two clients and server all from the debugger without lag.  Doing just client/server was enough to bring down 2005's debugger.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fixed problem with items disappearing too quickly from ground.  I'm now convinced that I should sit on a problem for a little while and let my mind work out the background stuff.  I had thought it was a very difficult thing to fix up-front that would require rewriting the item removal system.  Turns out it took about 5 lines of code doing it a way I hadn't initially considered.  Solutions just seem to pop into my head sometimes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Added list labels to all screens that were missing them (inventory, storage, geoling, use item, cast spell)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Added "name:" label on create character screen, cleaned up some memory leaks (see VLD post :D)-&lt; )&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Removed "Lacertus" spell from knights.  Not sure why it's not working, but better not to have dangling features.   Added button sounds, they work beautifully.  Added footstep sounds, they're also great!  Forgot that removing a spell screws up all the key indices.  Key bindings are reset.  Upgrading to version 2.14 and releasing.&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;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.it-c.dk/people/pagh/papers/cuckoo-undergrad.pdf"&gt;Read an article on Cuckoo Hashing&lt;/a&gt;.  Pretty nifty way to have a hash table with no linked lists.  Basic idea is to have a hash table for which each possible member generates two distinct hashes, and can be at either location in the table.   Should one spot be filled, it can take the other.  Should both be filled, it replaces one and that one is re-inserted (hopefully into its other--blank--hash location).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.gamasutra.com/view/feature/4024/examining_game_pace_how_.php?print=1"&gt;Single-player level design&lt;/a&gt; is also a good article (Gamasutra).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm trying to import meshes into fragMOTION and link them to the character models.  It seems to work OK, so the armor meshes I'm about to buy should look great.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Right-click now splits a stack of items in half.  Fixed bug where picking up a stackable item doesn't immediately update the stack's size on the client.  Clicking on a stackable item in inventory (which normally equips an item) re-stacks the item first so you can assemble stacks easily.  Items are now consumed in last-first order when triggered by a key binding.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-5436827066149531104?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/5436827066149531104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=5436827066149531104' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/5436827066149531104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/5436827066149531104'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/day-two.html' title='Day Two'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-34962516462995617</id><published>2009-05-11T07:50:00.000-07:00</published><updated>2009-05-11T11:45:20.084-07:00</updated><title type='text'>Day One</title><content type='html'>Installed Visual Studio 2008 to replace 2005, which has stopped compiling MSI files every week or so.  Really annoying, hopefully the upgrade will fix that.&lt;br /&gt;&lt;br /&gt;Watched the &lt;a href="http://www.youtube.com/watch?v=qlzM3zcd-lk"&gt;Human Computation Google talk&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Looked into drag-and-drop with OLE/COM while installer was running.  &lt;a href="http://www.catch22.net/tuts/dragdrop/1"&gt;Great tutorial at catch22.net&lt;/a&gt;.  Stupidly complicated, don't know if it's worth my time to figure out how to use it for the upgraded game editor.  I suppose it might be if adding would save editors time adding new content.&lt;br /&gt;&lt;br /&gt;Released trade screen update yesterday.  Going to clean up code this afternoon and start working on items (not sure what: editor and/or server).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Did a lot of work on serializer class for network messages.  Making it really easy to add new functionality.  Simple example:&lt;br /&gt;&lt;br /&gt;&lt;blockquote  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;char buffer[512];&lt;br /&gt;typedef &lt;/span&gt;&lt;span style="font-size:85%;"&gt;BufferSerializer&amp;lt;Array&amp;lt;char&amp;gt;&lt;array&gt;&lt;char&gt;&lt;array&gt;&lt;char,&gt;, int, int, int&gt;  Message;&lt;/char,&gt;&lt;/array&gt;&lt;/char&gt;&lt;/array&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Message&lt;/span&gt;&lt;span style="font-size:85%;"&gt;::writeBuffer(buffer, buffer + 512, &amp;amp;CopiedArray&lt;char&gt;("hello there!"), 1, 2, 3);&lt;/char&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Code copies string and numbers into 'buffer'.  To read out data again,&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;char text[128];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;size_t text_chars;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;int a, b, c;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;Message::readBuffer(buffer, buffer + 512, &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&amp;amp;CopiedArray&lt;char&gt;(text, 128, &amp;amp;text_chars), &amp;amp;a, &amp;amp;b, &amp;amp;c);&lt;/char&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Also making classes for TranslatedArray (instead of CopiedArray) so that big structures can be packed down automatically.  Nice thing about templates: all of this code gets optimized and inlined.&lt;br /&gt;&lt;br /&gt;Finished integrating new serializer into Evidyon.  Cleaned out a lot of dead code left over from the Evidyon Alpha 1.0 and even PV days.  Housekeeping, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-34962516462995617?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/34962516462995617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=34962516462995617' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/34962516462995617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/34962516462995617'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/day-one.html' title='Day One'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-501453360028352333.post-6760417011966155018</id><published>2009-05-11T07:47:00.000-07:00</published><updated>2009-05-11T07:50:45.001-07:00</updated><title type='text'>A Summer in Development</title><content type='html'>This blog is mostly for my own reference, so I can keep track of what happened summer 2009 regarding the development of &lt;a href="http://www.evidyon.com"&gt;Evidyon&lt;/a&gt; and my company, &lt;a href="http://www.unseenstudios.com"&gt;Unseen Studios&lt;/a&gt;.  Many of the posts will only make sense to me, so if you stumble across this wondering "why would anyone ever put this on the web?" my answer is, "why not?"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/501453360028352333-6760417011966155018?l=evidyon-summer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://evidyon-summer.blogspot.com/feeds/6760417011966155018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=501453360028352333&amp;postID=6760417011966155018' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/6760417011966155018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/501453360028352333/posts/default/6760417011966155018'/><link rel='alternate' type='text/html' href='http://evidyon-summer.blogspot.com/2009/05/summer-in-development.html' title='A Summer in Development'/><author><name>Karl</name><uri>http://www.blogger.com/profile/03363127082332575461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
