<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
    <channel>
        <title>Keeth's site</title>
        <link>http://www.byond.com/members/Keeth</link>
        <description></description>
        <lastBuildDate>Fri, 10 Feb 2012 15:23:15 +0000</lastBuildDate>
        <language>en-us</language>
    
                <item>
            <title>Cut down on duplicate posts with stickies!</title>
            <link>http://www.byond.com/members/Keeth?command=view_post&amp;post=195739</link>
            <guid>http://www.byond.com/members/Keeth?command=view_post&amp;post=195739</guid>
            <pubDate>Wed, 25 Jan 2012 13:48:03 +0000</pubDate>
            
            <comments>http://www.byond.com/members/Keeth?command=view_comments&amp;post=195739#comments</comments>
            
            <description>I think it might be worthwhile to compile a list of super common errors new developers (or old developers) often experience when working in DM. I think it's probably apparent that a lot of our users use the same reference material when they're learning, which is why we have so many similar posts on the code problems/developer how-to sections asking about the exact same problems every year for the past who knows how long.&lt;br&gt;
&lt;br&gt;
Trying to work with an uninitialized list.&lt;br&gt;
&lt;br&gt;
Setting an atom's x/y/z values individually simply not working under a great deal of circumstances.&lt;br&gt;
&lt;br&gt;
Saving your mob wholesale and then loading it back up doing things you don't understand (due to how the key value works).&lt;br&gt;
&lt;br&gt;
I think it'd probably be most beneficial to simply have a single sticky post that'd act as a repository, and then just have the list of common problems and links to satisfactorily resolved examples of said problems. Preferably the simplest resolutions that explain the entire problem. That way we don't have 1 sticky per common problem.&lt;br&gt;
&lt;br&gt;
I don't know how well this would work, since you can't really rely on people's code being the same as other people's, but I think if focus on properly explaining the principles behind what was wrong with the code rather than just posting the proper code, we can at least cut down on the &quot;spam&quot; by a decent margin.</description>
        </item>
                <item>
            <title>Volfoss Game Music</title>
            <link>http://www.byond.com/members/Keeth?command=view_post&amp;post=121571</link>
            <guid>http://www.byond.com/members/Keeth?command=view_post&amp;post=121571</guid>
            <pubDate>Sat, 03 Dec 2011 19:22:25 +0000</pubDate>
            
            <comments>http://www.byond.com/members/Keeth?command=view_comments&amp;post=121571#comments</comments>
            
            <description>&lt;center&gt;&lt;object width=&quot;425&quot; height=&quot;350&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/kUX2q2tpKfM&quot;&gt;
&lt;param name=&quot;wmode&quot; value=&quot;opaque&quot;&gt;
&lt;embed src=&quot;http://www.youtube.com/v/kUX2q2tpKfM&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;425&quot; height=&quot;350&quot; wmode=&quot;opaque&quot;&gt;&lt;/object&gt;&lt;br&gt;
&lt;a href='http://www.youtube.com/playlist?list=PLB57DAC68F33F7C9E'&gt;Volfoss OST Playlist&lt;/a&gt; (Incomplete)&lt;br&gt;
I took some liberties with naming, as there are no track names.&lt;/center&gt;
&lt;br&gt;
&lt;br&gt;
This is music from a game called Volfoss, which I recently purchased. So far, a pretty cool turn-based strategy RPG game (like Final Fantasy Tactics), set in a post-apocalyptic world, with alien-seeming monsters and structures abound. The combat and character advancement stuff is pretty cool. It looks like there are a number of mutant-type creatures in the world, and then the main characters. You seem to recruit the mutants, and each of them has a set of abilities unique to them. The &lt;a href='http://pb.xors3d.com/Junkyard/Volfoss/1.png'&gt;Junicorn&lt;/a&gt;, for example, can launch his horn to hurt enemies from afar. (&lt;a href='http://pb.xors3d.com/Junkyard/Volfoss/Compendium.html'&gt;Here's&lt;/a&gt; a more complete mutant set, with other characters near the bottom.)&lt;br&gt;
&lt;br&gt;
ANYWAY...&lt;br&gt;
&lt;br&gt;
I personally ripped this, after some trouble finding out how to rip them from the XA files. Eventually I got it though, and I've taken the liberty of uploading a couple of the notable songs from the set. It's pretty unique in that it sports some pretty awesome heavy metal guitar riffs in most every song on the damn thing. The reason I only uploaded the few I did was because most of the songs are pretty similar, and most of them are used for combat situations.&lt;br&gt;
&lt;br&gt;
I might upload the rest in RAR/ZIP format to some hosting service later, if anyone is interested. There are some nice songs in there other than the few I uploaded.&lt;br&gt;
&lt;br&gt;
I'll also upload the 5 ending movies once I get a chance.</description>
        </item>
                <item>
            <title>Combat (D): Predictable Combat as a Foundation</title>
            <link>http://www.byond.com/members/Keeth?command=view_post&amp;post=121284</link>
            <guid>http://www.byond.com/members/Keeth?command=view_post&amp;post=121284</guid>
            <pubDate>Fri, 25 Nov 2011 03:06:56 +0000</pubDate>
            
            <comments>http://www.byond.com/members/Keeth?command=view_comments&amp;post=121284#comments</comments>
            
            <description>We're going to start with a slightly different approach than most of you have probably taken... we're not going to start with any attributes! No weapons! No armor! Flat rates for everything, no modifiers or nuffin'. Creatures will have health, and in combat, they will do a flat amount of damage, at a flat rate of attack.&lt;br&gt;
&lt;br&gt;
Before we even decide what we want these numbers to be, I'm going to decide something else. I want combat to last only 10 seconds. So two creatures, completely equal, will kill one another in 10 seconds flat.&lt;br&gt;
&lt;br&gt;
So, now that we have that single parameter, let's get some figures to use. If we assume mobs have 100 health, there are only so many formulas we can use to ensure combat ends in 10 seconds. We could do 10 hits/second for 1 damage, 5 hits/second for 2 damage, 1 hit/second for 10 damage, 0.5 hits/second (1 hit every 2 seconds) for 20 damage, and so on. In the interest of simplicity, we're going to use 1 hit per second, 10 damage a hit. Simple, no? I think everyone can follow this.&lt;br&gt;
&lt;br&gt;
So now, considering we have designed all of the elements that go into combat, combat should always, always look something like this:&lt;br&gt;
&lt;br&gt;
Mob A attacks Mob B for 10 damage.&lt;br&gt;
Mob B attacks Mob A for 10 damage.&lt;br&gt;
...1 second...&lt;br&gt;
Mob A attacks Mob B for 10 damage.&lt;br&gt;
Mob B attacks Mob A for 10 damage.&lt;br&gt;
...1 second...&lt;br&gt;
[repeat 8 more times]&lt;br&gt;
Mob A kills Mob B!&lt;br&gt;
&lt;br&gt;
Wallah. We have our basic combat with no attributes. It works perfectly according to plan -- combat ends in 10 seconds (that's my story and I'm sticking to it), and nothing ever happens that we can't really predict.&lt;br&gt;
&lt;br&gt;
&lt;div style='padding:5px; padding-left:15px; padding-right:15px; font-size:75%; font-family:georgia; border-left:1px solid #000000;'&gt;Some smarty pants might have noticed that this isn't actually 10 seconds. It's 9 seconds. Or maybe more accurately, 9.001~ seconds. Basically, only 9 delays occur (only 9 delays have a chance to occur), but 10 attacks occur. This is because we are attacking at the instant a second begins.&lt;br&gt;
&lt;br&gt;
To demonstrate this point, here's a pretty awesome graph:&lt;br&gt;
&lt;center&gt;&lt;img src='http://files.byondhome.com/Keeth/combat_timeline_1.gif'&gt;&lt;/center&gt;
&lt;br&gt;
Basically, the problem is that we are attacking before a second actually passes. Because of this, we are attacking, essentially, twice within a second. If you start counting from 0, we are attacking at the first instant of 0, and the first instant of of 1. The difference between the exact instance 0 ends and the exact instance 1 begins is something you can't really differentiate, so we can call it something like two hits per 1.001~ seconds.&lt;br&gt;
&lt;br&gt;
This will even out exactly every time a second ends. It's something that is unavoidable. So for the sake of consistency in this text, we're going to ignore this fact, and say 10 hits with a 1 second delay is 10 seconds. We'll just secretly count out the rest of the second in our heads, so combat never ends at 9.001~ seconds, only 10.&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
Now let's start adding attributes that tweak the mechanics a bit. Not too much, just a bit. For starters, let's add a strength attribute. One point in our strength attribute accounts for 2 damage for our attacks. Therefore, everyone starts with 5 strength, to make it consistent with our system. On top of that, let's add vitality, which will give us 20 health per point. If you noticed the pattern, that means we're going to start with 5 vitality, to remain consistent with our combat mockup.&lt;br&gt;
&lt;br&gt;
So now all mobs start with 5 strength -&amp;gt; 10 damage, and 5 vitality -&amp;gt; 100 health. With our system in play, we can safely say every point of strength decreases combat length by 20%-ish, and that every point of vitality increases the length of combat by 20%-ish. With this system in play, you can pretty much just compare two fighter's attributes, and we know how long a fight will last, and who will win depending on who hits first (sometimes not at all depending on who hits first).&lt;br&gt;
&lt;br&gt;
Here are some simulations:&lt;br&gt;
&lt;center&gt;&lt;img src='http://files.byondhome.com/Keeth/combat_simulations_1.gif'&gt;&lt;/center&gt;
&lt;br&gt;
&lt;br&gt;
If you want to run a few simulations yourself, it's not too hard. You can grab the snippets from the previous entry, make a little combat loop that makes two mobs attack, based on our rules, with the proper delays. See if you can accurately predict the outcomes.</description>
        </item>
                <item>
            <title>Combat (P): Modularity Makes Life Easier</title>
            <link>http://www.byond.com/members/Keeth?command=view_post&amp;post=121140</link>
            <guid>http://www.byond.com/members/Keeth?command=view_post&amp;post=121140</guid>
            <pubDate>Sat, 19 Nov 2011 10:41:05 +0000</pubDate>
            
            <comments>http://www.byond.com/members/Keeth?command=view_comments&amp;post=121140#comments</comments>
            
            <description>Like anything else you're designing, we want to make sure that the combat system conforms to a strict set of rules. I'm starting with this combat system because I seem to find more and more people using the same badly implemented combat system. I don't expect this to reduce that count any, but I like writing, and I like programming, and it's something I haven't done in awhile. So here we go.&lt;br&gt;
&lt;br&gt;
Starting out first, the most important thing when designing anything is consistency. What seems to be one of the most common implementations of combat, according to the developer forums, is something gross like this:&lt;br&gt;
&lt;div class=&quot;dmcode&quot;&gt;
&lt;table width=&quot;100%&quot; border=&quot;0&quot;&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre class=&quot;dmcode&quot;&gt;
mob&lt;br&gt;    &lt;span class=&quot;dmkeyword&quot;&gt;proc&lt;/span&gt;&lt;br&gt;        deathCheck(mob/killer)&lt;br&gt;            &lt;span class=&quot;dmkeyword&quot;&gt;if&lt;/span&gt;(health &amp;lt; 1)&lt;br&gt;                world &amp;lt;&amp;lt; &lt;span class=&quot;dmstring&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;dmbrace&quot;&gt;[killer]&lt;/span&gt;&lt;span class=&quot;dmstring&quot;&gt; killed &lt;/span&gt;&lt;span class=&quot;dmbrace&quot;&gt;[src]&lt;/span&gt;&lt;span class=&quot;dmstring&quot;&gt;.&amp;quot;&lt;/span&gt;&lt;br&gt;                &lt;span class=&quot;dmkeyword&quot;&gt;if&lt;/span&gt;(client)&lt;br&gt;                    loc = locate(1,1,1) &lt;span class=&quot;dmcomment&quot;&gt;// etc...&lt;/span&gt;&lt;br&gt;                &lt;span class=&quot;dmkeyword&quot;&gt;else&lt;/span&gt;&lt;br&gt;                    &lt;span class=&quot;dmkeyword&quot;&gt;del&lt;/span&gt; src &lt;span class=&quot;dmcomment&quot;&gt;// lol&lt;/span&gt;&lt;br&gt;&lt;br&gt;    &lt;span class=&quot;dmkeyword&quot;&gt;verb&lt;/span&gt;&lt;br&gt;        punch(mob/target &lt;span class=&quot;dmkeyword&quot;&gt;in&lt;/span&gt; oview(1))&lt;br&gt;            target.health -= rand(1,100)&lt;br&gt;            target.deathCheck(src)
&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
There are a couple of problems with this implementation. Mostly, it's redundant. Every time we reduce the enemy's health, we have to manually call deathCheck for them. Not to mention that if in the future you wanted to add something like damage reduction, you end up having to do a lot of extra work on top of what we're already doing. Instead we should sum up all of this stuff in one single function. Since all of them are directly related and there is probably no situation, or very few, where the exact same process isn't going to be repeated for every instance of damage taking, a single function approach will suit us just fine.&lt;br&gt;
&lt;br&gt;
&lt;div class=&quot;dmcode&quot;&gt;
&lt;table width=&quot;100%&quot; border=&quot;0&quot;&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre class=&quot;dmcode&quot;&gt;
mob&lt;br&gt;    &lt;span class=&quot;dmkeyword&quot;&gt;proc&lt;/span&gt;&lt;br&gt;        getHurt(damage, mob/attacker)&lt;br&gt;            health -= damage&lt;br&gt;            &lt;span class=&quot;dmkeyword&quot;&gt;if&lt;/span&gt;(health &amp;lt; 1)&lt;br&gt;                &lt;span class=&quot;dmcomment&quot;&gt;// death stuff&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
Now instead of lowing their health and doing a death check every time, we'll just call mob.getHurt() when we want a mob to take damage, and eventually die. Since everything is confined to the one function, changing how we take damage, and how we die, or what defines death, just takes a couple of lines. For example, if we want to add something like &quot;damage resistance,&quot; we could just do something like:&lt;br&gt;
&lt;br&gt;
&lt;div class=&quot;dmcode&quot;&gt;
&lt;table width=&quot;100%&quot; border=&quot;0&quot;&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre class=&quot;dmcode&quot;&gt;
mob&lt;br&gt;    &lt;span class=&quot;dmkeyword&quot;&gt;proc&lt;/span&gt;&lt;br&gt;        getHurt(damage, mob/attacker)&lt;br&gt;            &lt;span class=&quot;dmkeyword&quot;&gt;var&lt;/span&gt;/damageResistance = getDamageResistance() &lt;span class=&quot;dmcomment&quot;&gt;// some value representing how much damage needs to be mitigated, as a percentage, like 60% (0.6).&lt;/span&gt;&lt;br&gt;            &lt;span class=&quot;dmkeyword&quot;&gt;if&lt;/span&gt;(damageResistance)&lt;br&gt;                damage *= 1-damageResistance &lt;span class=&quot;dmcomment&quot;&gt;// reduce the damage by the given percentage. 1 - 0.6 = 0.4, 40% of what we originally had.&lt;/span&gt;&lt;br&gt;&lt;br&gt;            health -= damage&lt;br&gt;            &lt;span class=&quot;dmkeyword&quot;&gt;if&lt;/span&gt;(health&amp;lt;1)&lt;br&gt;                &lt;span class=&quot;dmcomment&quot;&gt;// etc...&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
Now, in the spirit of modularity (removing as much redundant code, and making things that we want to repeat a lot, maybe in other places in code, into individual functions), we can end up with quite a few nifty functions that, maybe right now we don't have much use for, but later on could be pretty nice to have around.&lt;br&gt;
&lt;br&gt;
&lt;i&gt;Edited to include the variables we use, added &lt;b&gt;isDying()&lt;/b&gt;, which determines if we should die now (health&amp;lt;1, etc...), and &lt;b&gt;isDead()&lt;/b&gt; now checks if we're currently dead (added a death-state for mobs). Also added &lt;b&gt;live()&lt;/b&gt; for making creatures &quot;live&quot; again, which is used by &lt;b&gt;respawn()&lt;/b&gt;.&lt;/i&gt;&lt;br&gt;
&lt;div class=&quot;dmcode&quot;&gt;
&lt;table width=&quot;100%&quot; border=&quot;0&quot;&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre class=&quot;dmcode&quot;&gt;
mob&lt;br&gt;    &lt;span class=&quot;dmkeyword&quot;&gt;var&lt;/span&gt;&lt;br&gt;        health      = 100&lt;br&gt;        maxHealth   = 100&lt;br&gt;&lt;br&gt;        &lt;span class=&quot;dmcomment&quot;&gt;// boolean indicating we've died&lt;/span&gt;&lt;br&gt;        dead        = FALSE&lt;br&gt;&lt;br&gt;    &lt;span class=&quot;dmkeyword&quot;&gt;proc&lt;/span&gt;&lt;br&gt;        &lt;span class=&quot;dmcomment&quot;&gt;// take some hurt.&lt;/span&gt;&lt;br&gt;        &lt;span class=&quot;dmcomment&quot;&gt;// optional attacker can be provided, for when someone is killing us.&lt;/span&gt;&lt;br&gt;        getHurt(damage, mob/attacker)&lt;br&gt;            &lt;span class=&quot;dmkeyword&quot;&gt;if&lt;/span&gt;(isDead()) &lt;span class=&quot;dmcomment&quot;&gt;// nothing to be done if we're already dead.&lt;/span&gt;&lt;br&gt;                &lt;span class=&quot;dmkeyword&quot;&gt;return&lt;/span&gt;&lt;br&gt;&lt;br&gt;            health -= damage&lt;br&gt;&lt;br&gt;            &lt;span class=&quot;dmkeyword&quot;&gt;if&lt;/span&gt;(isDying())&lt;br&gt;                die(attacker)&lt;br&gt;&lt;br&gt;        &lt;span class=&quot;dmcomment&quot;&gt;// should we die? can we even die? let's check.&lt;/span&gt;&lt;br&gt;        isDying()&lt;br&gt;            &lt;span class=&quot;dmcomment&quot;&gt;//if(isModerator())&lt;/span&gt;&lt;br&gt;            &lt;span class=&quot;dmcomment&quot;&gt;//  return FALSE&lt;/span&gt;&lt;br&gt;            &lt;span class=&quot;dmkeyword&quot;&gt;return&lt;/span&gt; (health &amp;lt; 1) &lt;span class=&quot;dmcomment&quot;&gt;// by default, &amp;lt;1 should be impending death for all&lt;/span&gt;&lt;br&gt;&lt;br&gt;        &lt;span class=&quot;dmcomment&quot;&gt;// are we currently dead?&lt;/span&gt;&lt;br&gt;        &lt;span class=&quot;dmcomment&quot;&gt;// this is for games where death does not instantly result in returning to the game.&lt;/span&gt;&lt;br&gt;        &lt;span class=&quot;dmcomment&quot;&gt;// you could have an in-between state where the character is a ghost and has to find&lt;/span&gt;&lt;br&gt;        &lt;span class=&quot;dmcomment&quot;&gt;// their body, or they go to hell or heaven, or something fancy like that.&lt;/span&gt;&lt;br&gt;        isDead()&lt;br&gt;            &lt;span class=&quot;dmkeyword&quot;&gt;return&lt;/span&gt; (dead == TRUE)&lt;br&gt;&lt;br&gt;        &lt;span class=&quot;dmcomment&quot;&gt;// do some dying.&lt;/span&gt;&lt;br&gt;        die(mob/killer)&lt;br&gt;            dead = TRUE &lt;span class=&quot;dmcomment&quot;&gt;// we're dead now.&lt;/span&gt;&lt;br&gt;            &lt;span class=&quot;dmcomment&quot;&gt;//deathAnnounce(src, killer || null)&lt;/span&gt;&lt;br&gt;            &lt;span class=&quot;dmcomment&quot;&gt;//deathCry()&lt;/span&gt;&lt;br&gt;            &lt;span class=&quot;dmkeyword&quot;&gt;if&lt;/span&gt;(client)&lt;br&gt;                &lt;span class=&quot;dmcomment&quot;&gt;//dropCorpse()&lt;/span&gt;&lt;br&gt;                respawn()&lt;br&gt;&lt;br&gt;            &lt;span class=&quot;dmkeyword&quot;&gt;else&lt;/span&gt;&lt;br&gt;                &lt;span class=&quot;dmcomment&quot;&gt;//killer.getKillExperience(src) -- instead of putting the formula here, we can do it over there... another useful trick&lt;/span&gt;&lt;br&gt;                &lt;span class=&quot;dmcomment&quot;&gt;//dropCorpse()&lt;/span&gt;&lt;br&gt;                &lt;span class=&quot;dmkeyword&quot;&gt;del&lt;/span&gt; src&lt;br&gt;&lt;br&gt;        &lt;span class=&quot;dmcomment&quot;&gt;// if we have anything special we need to do to make this character&lt;/span&gt;&lt;br&gt;        &lt;span class=&quot;dmcomment&quot;&gt;// become &amp;quot;alive&amp;quot; again, do it here. like losing our halo, restoring our&lt;/span&gt;&lt;br&gt;        &lt;span class=&quot;dmcomment&quot;&gt;// normal icon (maybe we became a ghost?), or anything like that. might also&lt;/span&gt;&lt;br&gt;        &lt;span class=&quot;dmcomment&quot;&gt;// be wise to restore our health here instead of respawn().&lt;/span&gt;&lt;br&gt;        live()&lt;br&gt;            dead = FALSE&lt;br&gt;            &lt;span class=&quot;dmcomment&quot;&gt;//restoreHealth()&lt;/span&gt;&lt;br&gt;&lt;br&gt;        &lt;span class=&quot;dmcomment&quot;&gt;// throw us to our graveyard.&lt;/span&gt;&lt;br&gt;        &lt;span class=&quot;dmcomment&quot;&gt;// unlike live(), respawn() is meant to restore us to life&lt;/span&gt;&lt;br&gt;        &lt;span class=&quot;dmcomment&quot;&gt;// and then move us to a proper respawn point.&lt;/span&gt;&lt;br&gt;        respawn()&lt;br&gt;            live() &lt;span class=&quot;dmcomment&quot;&gt;// we're back alive now. woo.&lt;/span&gt;&lt;br&gt;            &lt;span class=&quot;dmcomment&quot;&gt;//Move(getGraveyard())&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
Now we have a nifty way of determing if people should die, and a way to instantly kill someone. Now the act of dying is not dependant on the player losing their health; since we've separated the function of dying from simply getting hurt, we can, with absolutely certainty, kill someone with one function call. Ignoring any type of damage mitigation, any type of inability to die (immortals, zombies, whatever). Pretty cool, right? Now you can add like, a slay command that doesn't have to do like... damage(mob, 99999999999999999999999999999999). Which is the most important command in a game, right?&lt;br&gt;
&lt;br&gt;
We've also partitioned the act of respawning, which doesn't have much use right now, but it does separate the act of respawning from dying, which will make our code a lot easier to read, where everyone can tell what every line of code is doing based on just the name of the function being called.&lt;br&gt;
&lt;br&gt;
Now we have a framework that we can build on. It is consistent with itself, and there is never a time during combat when we are going to be unsure about the status of the combatants. They die when they are supposed to, and we can kill them if we need to. Or move them back to the graveyard with full health. Or whatever.</description>
        </item>
                <item>
            <title>Modified and Moved</title>
            <link>http://www.byond.com/members/Keeth?command=view_post&amp;post=116812</link>
            <guid>http://www.byond.com/members/Keeth?command=view_post&amp;post=116812</guid>
            <pubDate>Fri, 05 Aug 2011 17:14:00 +0000</pubDate>
            
            <comments>http://www.byond.com/members/Keeth?command=view_comments&amp;post=116812#comments</comments>
            
            <description>Alright, I've released my text handling library for the second time here. I've gone to great lengths to document it and stuff (haha, cause it was hard).&lt;br&gt;
&lt;br&gt;
I've also decided to implement the library a bit differently. Instead of including everything on the global scale, everything is defined on a datum (in this case, called kText). This includes functions and other globally available variables.&lt;br&gt;
&lt;br&gt;
To give access to the functionality, I include a variable containing an instance of this datum, with the same name as the library, on the global scale.&lt;br&gt;
&lt;br&gt;
This means to access the library's global functionality, you will be calling &lt;tt&gt;kText.blah()&lt;/tt&gt; instead of just &lt;tt&gt;blah()&lt;/tt&gt;, or even &lt;tt&gt;k_blah()&lt;/tt&gt;. I think this makes code a bit less gross to read, and in cases where you will have to access a lot of data from the library, it's not as obscure; KTEXT_BLAH_BLAH, as opposed to kText.BLAH_BLAH. I think this is a bit more comfortable, since people will read it as &quot;we're accessing kText's BLAH_BLAH variable!&quot;, as opposed to &quot;we're accessing this big huge obnoxious variable named KTEXT_BLAH_BLAH.&quot;&lt;br&gt;
&lt;br&gt;
I'll be re-releasing my two other libraries using this same setup, after rewriting them as well (haha).</description>
        </item>
                <item>
            <title>versioning</title>
            <link>http://www.byond.com/members/Keeth?command=view_post&amp;post=110309</link>
            <guid>http://www.byond.com/members/Keeth?command=view_post&amp;post=110309</guid>
            <pubDate>Thu, 03 Mar 2011 04:22:45 +0000</pubDate>
            
            <comments>http://www.byond.com/members/Keeth?command=view_comments&amp;post=110309#comments</comments>
            
            <description>Versioning format: 0.0.0.0&lt;br&gt;
&lt;br&gt;
The &lt;b&gt;first digit&lt;/b&gt; is the major version, which is really just an indication of what I have deemed a big enough change to necessitate a number change. This is generally reserved for a process where I decide which features I want to implement to get it up to version X. For example, for the beginning phase of a project I just started, I have a set of features necessary before I will consider the game version 1. Once all of these have been implemented, the major version will be 1.&lt;br&gt;
&lt;br&gt;
The &lt;b&gt;second digit&lt;/b&gt; is the minor version, which is an indication of a somewhat major feature implementation, but doesn't necessarily facilitate increasing the major version (which, like I explained above, is reserved for certain things). For example, maybe I decide, after I implement all of the game features in version 1, that the players want a system for writing letters to each other. After implementing the letter writing system, I would increase the minor version by 1.&lt;br&gt;
&lt;br&gt;
&lt;i&gt;I am also wondering whether or not I should just consider the revision in which I release the updated features to the public the &quot;next minor version,&quot; or if I should increment the minor version once for EVERY feature added. I am thinking I'll do the first one, probably. It might get hectic otherwise.&lt;/i&gt;&lt;br&gt;
&lt;br&gt;
The &lt;b&gt;third digit&lt;/b&gt; is the development stage (I knicked this concept off of wikipedia, sue me). The numbers here go from 0 to 3.&lt;br&gt;
&lt;br&gt;
&lt;table style='font-size:150%; text-align:center; margin:0 auto;' border='1' cellpadding='5' cellspacing='0'&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;alpha&lt;/td&gt;
&lt;td&gt;Features being implemented.&lt;br&gt;
Closed (usually) testing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;beta&lt;/td&gt;
&lt;td&gt;Feature complete.&lt;br&gt;
Open or closed testing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;release candidate&lt;/td&gt;
&lt;td&gt;Thoroughly tested for bugs.&lt;br&gt;
Further testing to weed out any lingering bugs.&lt;br&gt;
On its way to a full release.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;public release&lt;/td&gt;
&lt;td&gt;No more changes to be made to the source.&lt;br&gt;
Ready for production.&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;br&gt;
&lt;br&gt;
The &lt;b&gt;fourth digit&lt;/b&gt; is the revision number. Basically, this indicates which release number we're at for this version. What constitutes a &quot;release&quot; or &quot;revision&quot; would be any modification to the source, followed by publication.&lt;br&gt;
&lt;br&gt;
&lt;i&gt;I'm thinking that this number should reset with every major version update, maybe with every minor version update as well. I have also considered never reseting it. I'm not really sure at this point, so I'll probably just go with what feels right.&lt;/i&gt;&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;
version = 0.1.0.1
pretty  = 0.1-a1
&lt;/pre&gt;</description>
        </item>
                <item>
            <title>true colors (seizure inducing) vs. greyish (underexposed) colors?</title>
            <link>http://www.byond.com/members/Keeth?command=view_post&amp;post=110067</link>
            <guid>http://www.byond.com/members/Keeth?command=view_post&amp;post=110067</guid>
            <pubDate>Sat, 26 Feb 2011 01:12:18 +0000</pubDate>
            
            <comments>http://www.byond.com/members/Keeth?command=view_comments&amp;post=110067#comments</comments>
            
            <description>&lt;a href='http://i55.tinypic.com/1zfr7fc.jpg'&gt;Scanned&lt;/a&gt; vs. &lt;a href='http://i51.tinypic.com/wt64g8.jpg'&gt;Leveled&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
My current problem right now is that, I believe the leveled version here represents the true colors of the image (blacks are black, whites are white, and the reds are red), but at the same time, when representing it on a computer screen, the image is unbelievably bright. If you look at the leveled version, your eyes will probably explode due to the image being surrounded by white...&lt;br&gt;
&lt;br&gt;
The scanned version is underexposed, I think? The whites and blacks are greyer, the reds are noticeably greyer as well. They definitely do not as accurately represent the actual image.&lt;br&gt;
&lt;br&gt;
Being that the intent of this is to show digital copies of the image, I'm wondering if it would be beneficial to meet somewhere &lt;a href='http://i56.tinypic.com/6yp06e.jpg'&gt;in between the two&lt;/a&gt;...&lt;br&gt;
&lt;br&gt;
&lt;b&gt;EDIT&lt;/b&gt;&lt;br&gt;
&lt;br&gt;
Back side:&lt;br&gt;
&lt;a href='http://i54.tinypic.com/2s82t8z.jpg'&gt;Scanned&lt;/a&gt; - &lt;a href='http://i54.tinypic.com/28b6yxh.jpg'&gt;Leveled&lt;/a&gt; - &lt;a href='http://i51.tinypic.com/de0mfd.jpg'&gt;In Between&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
&lt;b&gt;EDIT #2&lt;/b&gt;&lt;br&gt;
&lt;br&gt;
I just realized there are horrible artifacts in these images hosted on tinypic...&lt;br&gt;
&lt;br&gt;
wtf tinypic?</description>
        </item>
                <item>
            <title>Repop() handled via areas?</title>
            <link>http://www.byond.com/members/Keeth?command=view_post&amp;post=132992</link>
            <guid>http://www.byond.com/members/Keeth?command=view_post&amp;post=132992</guid>
            <pubDate>Mon, 29 Jun 2009 12:44:48 +0000</pubDate>
            
            <comments>http://www.byond.com/members/Keeth?command=view_comments&amp;post=132992#comments</comments>
            
            <description>Would it be possible to break down the Repop() (world) function so it repops AREAS? That is to say, make it so we can Repop() one area (/area) on the map without repopulating every part of the map at once.&lt;br&gt;
&lt;br&gt;
I'm using the BYOND maps (obviously), and I'd like to make it so areas repop faster the longer players stay out of them. Right now the only alternative would be to create my own system of resets (I'd have to list all of the mobs and/or objects that respawn at which points, etc...). It'd just make everything a lot easier if we could do this by areas.&lt;br&gt;
&lt;br&gt;
Of course it's not necessary, but it would be nice. Not sure how many people would use it, but whatever.</description>
        </item>
                <item>
            <title>Player count; telnet user count?</title>
            <link>http://www.byond.com/members/Keeth?command=view_post&amp;post=133258</link>
            <guid>http://www.byond.com/members/Keeth?command=view_post&amp;post=133258</guid>
            <pubDate>Sun, 04 Jan 2009 06:57:07 +0000</pubDate>
            
            <comments>http://www.byond.com/members/Keeth?command=view_comments&amp;post=133258#comments</comments>
            
            <description>Just a small request... would it be possible to make the hub record telnet users as well?&lt;br&gt;
I don't mean report their IP address or anything, but maybe just a little counter like it has for guests.&lt;br&gt;
&lt;br&gt;
&quot;X Telnet Users; X Guests; X Players: [list of BYOND keys connected]&quot;&lt;br&gt;
&lt;br&gt;
Or maybe just add to the player counter without listing anything.&lt;br&gt;
&lt;br&gt;
I'd just like some kind of official counter so people don't see that the game has nobody connected because they're all from telnet.</description>
        </item>
                <item>
            <title>Assocating someone with a key</title>
            <link>http://www.byond.com/members/Keeth?command=view_post&amp;post=159859</link>
            <guid>http://www.byond.com/members/Keeth?command=view_post&amp;post=159859</guid>
            <pubDate>Fri, 02 Jan 2009 06:49:33 +0000</pubDate>
            
            <comments>http://www.byond.com/members/Keeth?command=view_comments&amp;post=159859#comments</comments>
            
            <description>I was wondering if it was possible to associate someone OUTSIDE of BYOND with a BYOND key. Like a way to ask them for a key, and a password, and then it'd send it to the BYOND and verify it was correct, and then I could confirm that they're associated with it.&lt;br&gt;
&lt;br&gt;
This is so I can award people with BYOND subscriptions.&lt;br&gt;
Of course, it is related to BYOND.</description>
        </item>
            
    </channel>
</rss>


