• entries
570
2427
• views
216197

# Entry #33

50 views

• Random Observation of the Day!!
I can't run Maplestory anymore... I've tried everything! But it freezes after 10 minutes and after doing all kinds of messed up visual crap...

But anyway, I did manage to get some work done without it:

Text-Based Battle a la Mushuv0.010. Legal StuffEverything contained within this document is the soleintellectual property of L Campbell ("Mushu") and MAYNOT BE USED WITHOUT EXPLICIT CONSENT.By viewing this file you implicitly agree to notredistribute, steal, implement, or otherwise claim asyour own WITHOUT EXPLICIT CONSENT.Glad that we got that out of the way! On with the show...1. Overview1.1 - PurposeTo create a text-based psudo-RPG battle system, that willallow for a variety of user-created diverse commands, each generating a unique response, culminating in epic meleefights... in text.1.2 - RequirementsSince this is to be text-based, there is no need for fancyAPIs such as D3D or OGL. It does, however, require a MUD Server to run off of, and a capable one. TA would do nicely,however, it appears there is already plans in action fora XML-based text/graphical battle system.The client-server system must contain provisions for playerstats, such as HP, STR, EXP, etc. These *should* be containedwithin the server, and forever stay in the server. SeeSecurity Provisions (TODO: add section # here) for moredetails.1.3 - Minimalist StructurePreferably, all "battle commands" would be contained withina single command, such as /attack. /attack would then haveseveral parameters:/attack   (special)The attack would be launched, the effects calculated, anda string displayed about the attack, the effects, etc.EXAMPLE: .attack dcower poke Haha In one fell swoop, Mushu reaches forward and pokes          dcower, all the while yelling "Haha". In spite of          this formidable attack, dcower only takes 2 damage. .attack Mushu poke In retaliation, dcower returns the favor by poking         Mushu in the eye, resulting in a critical hit.         Mushu takes 14 damage.Presumably, the battle would continue until a player iskilled, the fight is broken up (TODO: add section # here),or a player withdraws.2. Battle Details2.1 - Basic RulesThe following is a short list of easily-implemented rulesto help against abuse of said battle-system.- Battles may only occur in defined areas. Other areas  (such as common areas) will not allow battles.- Players (users) may elect to not participate in battles  through their own player options. This should help prevent  abuse through forced-battle.- There are limits on the number of times you can use any  given attack within a certain amount of time. Since the  attacks are used to generate response strings, limiting  the frequency an attack can be used will increase the  probability of the use of new attacks. This can be achieved  either by simply denying the use of a given attack until  a certain time limit has expired, or decrease effiency of  that attack (or both). This will force players to learn  a variety of attacks to become more "skilled".- Since the attacks are inputted through a simple /attack   command, there should be a delay between attacks. This  delay should vary by attack - an extremely powerful attack  should cause a longer delay than a simple jab. Additionally,  this should prevent scripting (since we're all programmers  to some extent) killing humans through sheer speed.- Attacks should be user-modifiable, but verified by an  administrator.  Allowing users to create their own attacks  adds customizability to the game, however, they must be  verified to make sure they are appropriate (fair).- Limits should be placed on the number of user-added attacks  per user per day (or other time period). This will prevent  server swamping and other such things resulting from  insane amounts of attack-creatoring.- Attacks should be given prerequisites. Ie, the attack  "slash" should not be available unless the character has  a blade-weapon equipped. Likewise, some attacks should  remain unavailable to characters with low stats.2.2 - Experience PointsExperience points can be earned in two ways: by defeatingyour opponent, or by putting on a good show and earning themfrom your audience.A player who has a "dead" or "reviving" (see "Death", 2.3)status cannot earn EXP.2.21: Calculating gained EXP When you defeat another player, EXP can be calculated in anumber of ways: by the level the player was in comparison toyour own, just the level of the player, or simply a fixed amount (there are others). 2.22: Distributing EXP between playersOne key point to address is that in a melee system, where multiple players could all be attacking one another, the EXP must be distributed somehow. There are two main waysto do this: all-to-one which is given either to the finalslayer, or the person who dealt the most damage, or mixed.In a mixed system, the EXP can be divided by how much eachplayer dealt, how many times that player hit the vanquished,or the % of attacks.2.23: Level GrowthWell, there are so many different ways to do this, and sincePouya has a minor in Statistics, he should know what's he'sdoing, but in all honesty, these can be arbirtarily calculated.2.24: RECOMMENDATIONS- EXP gained should be proportional to the level difference.  A higher level killing a low level should gain the killer  minimal EXP, while a low level killing a high level should  gain more EXP. HOWEVER, while the difference should be enough  to encourage same-level PvP fights, it should not be insanely  high.- Distribution should be based solely on who has hit the player.  Each player who has hit the vanquished will receive an   equal share (reducing all other shares) no matter how much  damage was done, etc. What should happen is that if a   low-level randomly steps into a high v high level combat,   the two high-levels will kill the low-level in order to   get the most EXP.- EXP required to level up should follow a quadratic relation,  so that the amount needed will increase each level, it will  not increase as fast as an exponential relation. The   reasoning behind this is in the method of gaining EXP - based  on DIFFERENCE between the levels. Thus, if everyone is the  same level, they will always gain the same amount of EXP.  An exponential relation would yield an eventual max level,  while a linear relation would make levelling too easy,   ultimately making players who easily outmatch all the others.2.3 "Death"Sometime or another, a player is going to lose a combat. Duh.This will place the user in a "dead" status. A PERSON WITHEITHER "DEAD" or "REVIVING" STATUS CANNOT GAIN EXP!A person in dead status has 0 HP, and cannot engage in battles.After a set amount of time (recomment 10 minutes) the persongoes into "reviving" status, during which HP slowly recovers.When the person's HP reaches max, their living status isrestored, and they can once again take place in battles.In all honesty the "dead" and "reviving" statuses can be simplycombined into one. But that's a minor detail.There must be a delay between dying and re-entering the battle.While some games use a EXP-penalizer, I think that a delay ismuch better. Oh well.3. Security ProvisionsWell, not much here, just a little to prevent haxxoring.- ALL CHARACTER STATS MUST BE KEPT ONLY ON THE SERVER!- ALL DAMAGE ETC IS TO BE CALCULATED ONLY ON THE SERVER!- ATTACK VALIDATIONS MUST BE... YOU GUESSED IT! ON THE SERVER!Basically, the only thing the client should be doing is sending the server the attack command. The attack listsshould be contained in a read-only folder on the server.The attack command should be validated, executed if valid,results calculated, and results outputted to all clientsthat should receive it.Screw what lag may happen. It'll be funnier that way.4. ConclusionWell, you've made it all the way through this little documentof mine. I hope I've been at least somewhat coherent throughoutthis rant, and I hope that eventually I'll know enough toimplement this kind of system. Or get someone else to do itfor me. You know what? I think I'm off to the Help Wantedsection of GDNET.Have a nice day! ~Mushu.

There are no comments to display.

## Create an account

Register a new account