User:Xudojnik
I know Wesnoth from version 1.1.2a. This is really perspective game not only as strategy, but as RPG too. Large world, filled by history, epic battles, heroes and factions, is perfect for creating RPG. It's not so hard because Wesnoth have simple language, what support wide variety of events, easy way to define dialogs, items, forum and Wiki, where always can be found answer for any question.
WesMMO
To play it (now only in theory):
- Design new character.
- Download WesMMO era.
- Download beginner's map, designed for WesMMO.
- Create game in lobby.
- Create an "account" and character on it.
- Win beginner's scenario.
- Get fun.
- Download some other playable map, designed for WesMMO.
- Create game in lobby.
- Map will automatically use your account. Now choose any three units from your account and play.
- Spell system
- Each class have some predefined spells. In most cases they are not simple "damage unit X for Y hp". That's why they are the greatest headache for me.
- Each unit can use it's spell once per turn.
- There are no limit of uses through whole scenario.
Character is a "team" of three units. Each unit have own stats, small inventory and spellbook.
- Stats should be simple
- Stamina - increases your hitpoints by 5 per point.
- Strength - increases your melee damage.
- Speed - increases your movement points.
- Agility - increase your defense on each type of terrain by 1% per point and ranged damage.
- Intellect - increase magical potence of unit
- Inventory contains
- Healing Potion - number of them.
- Melee Weapon - affects melee combat: strength_multiplier and number_of_strikes and possibly defenses.
- Ranged Weapon - affects ranged combat: damage_from_agility_multiplier and number_of_strikes.
- Amulet - affects base stats, magical resistances and magical potency of unit
- Body Armor - affects base stats, all resistances and defenses.
- Boots - affects base stats and have movement_multipier.
- Helm - affects melee resistances and magical potence of unit.
Each item has it own's id. This ID is the key to macro what will apply effect of item stats to unit structure. Data about it will be stored inside WesMMO era. That allows me to implement 'inventory slots'. Players will carry unused items in them.
- Classes of units
- Deprecated
Class | Name | Description | |
---|---|---|---|
Stalwart tank Should stand alone and do few damage to 1 target, but heavy damage to 3+ nearby targets. |
Whirlwind | Damages all nearby units for weapon damage. | |
Stun | Temporary stun nearby enemy. | ||
Circle defense | Increase resistances of nearby allies by 50% of caster's resistance. Cancels when caster moves. | ||
Last Stand | Increase all resistances by 1/4 and decreases strength by 1/2. | Self-aura | |
Berserker melee damage-dealer Critical to hold line. Should not be far from others or he die fast. Deal heavy damage to 1-3 nearby targets and have no bonuses from increasing number of targets nearby. |
Reklesness | Temporary increase damage by 25% and decrease all resistances by 1/2. | Spell |
Inspire | Increase damage of all nearby allies by 25% and decrease own damage by 50%. Cancels when caster moves. | Aura | |
Berserker's strike | Damage nearby enemy for 2x of weapon damage. | Spell | |
Cleave attack | Damage three nearby enemies for weapon damage.(targeted and two nearby to it and caster) | Spell | |
Poacher ranged damage-dealer Weak in line holding due to few resistances. Specialises in dealing damage to straight lines of enemies. |
Piercing shot | Damage enemy and unit behind it. | Spell |
Way Guidance | Temporary gives to nearby allied units an ability to ignore ZoC and terrain cost. | Spell | |
Throw net | Decrease movement costs of three nearby enemies.(targeted and two nearby to it and caster) | Spell | |
Camouflage | Hides nearby allied units if they are on the same terrain as a caster. Cancels when caster moves. | Aura | |
Cleric healer, spell damage-dealer Support hero. Weakens enemies and buff friends. |
Medicine | Heal full and cure nearby allied unit. | Spell |
Lightbeam | Channels the pure beam of light to burn caster's enemy. | Spell | |
Inner light | Gives nearby units an ability to ignore ToD. Cancels when caster moves. | Aura | |
Anti-magic Shield | Increases resistances of all nearby allies by 50% of caster's resistances. Cancel when caster moves. | Aura |
Virtual data about units will be stored in structure "character[<number of sides>].unit[]..." Each item have it's own stats. And slot of item now is array, where index is number of stat inside it.
Content of "unit" structure. | |||||||||||||||||||||||||||||||||
|
Class should not determine defenses and resistances
|
|
Variables "inv.slot_item_id" will be stored as persistent variable. Other structures will be forgotten, because there will be functions to calculate their content.
unit Player; StoreUnit( Player ); //This function counts output values, what player will see on the right panel. void UpdateStats( unit * Player ) { Player.damage = Temp = Player.max_hitpoints / Player.hitpoints; Player.max_hitpoints = ( Player.class.stamina + Player.inv.body.stamina + Player.inv.boots.stamina + Player.buffed.stamina ) * Player.buffed.hitpoints_multiplier; Player.hitpoints = Player.max_hitpoints / Temp; Player.max_moves = ( Player.class.speed + Player.inv.boots.speed + Player.buffed.speed ) * Player.inv.boots.speed_multiplier * Player.buffed.speed_multiplier; Player.defense.castle = Player.buffed.defense.castle + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5; // I can easily tweak it later. Player.defense.cave = Player.buffed.defense.cave + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5; // I can easily tweak it later. Player.defense.deep_water = Player.buffed.defense.deep_water + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5; Player.defense.flat = Player.buffed.defense.flat + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5; Player.defense.forest = Player.buffed.defense.forest + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5; Player.defense.frozen = Player.buffed.defense.frozen + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5; Player.defense.fungus = Player.buffed.defense.fungus + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5; Player.defense.hills = Player.buffed.defense.hills + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5; Player.defense.reef = Player.buffed.defense.reef + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5; Player.defense.sand = Player.buffed.defense.sand + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5; Player.defense.shallow_water = Player.buffed.defense.shallow_water + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5; Player.defense.swamp_water = Player.buffed.defense.swamp_water + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5; Player.resistance.arcane = Player.buffed.resistance.arcane + Player.body.arcane; Player.resistance.fire = Player.buffed.resistance.fire + Player.body.fire; Player.resistance.cold = Player.buffed.resistance.cold + Player.body.cold; Player.resistance.pierce = Player.buffed.resistance.pierce + Player.body.pierce + Player.head.pierce; Player.resistance.blow = Player.buffed.resistance.blow + Player.body.blow + Player.head.blow; Player.resistance.blade = Player.buffed.resistance.blade + Player.body.blade + Player.head.blade; Player.attack[0].damage = ( Player.class.strength + Player.inv.body.strength + Player.inv.boots.strength + Player.buffed.strength ) * Player.inv.melee.strength_multiplier * Player.buffed.damage_multiplier; Player.attack[0].number = Player.inv.melee.speed; Player.attack[1].damage = ( Player.class.agility + Player.inv.body.agility + Player.inv.boots.agility + Player.buffed.agility ) * Player.inv.melee.agility_multiplier * Player.buffed.damage_multiplier; Player.attack[1].number = Player.inv.ranged.speed; } UnstoreUnit();
I will add to the Era thread sample feedback:
1) What version of Wesnoth, WesMMO and which scenario have you played? 2) How difficult did you find the scenario? (1-10) 3) How clear did you find the scenario objectives? 4) How clear and interesting did you find the dialog and storyline of the scenario? 5) What were your major challenges in meeting the objectives of the scenario? 6) How fun do you think the scenario is? (1-10) 7) What, if any, are changes you would have made to the scenario to make it more fun? 8) Was there any event that caused you to lose the game and forced you to restart the game? Thoughts:
Ideas:
- situation: players A,B,C,D starts the game. player B leaves game before it ends. spectator E (player A) takes control of units B. players A,E,C,D ends the game and information about their units is stored to persistent. player E gets units of player B.
- suggestion: Best items should kill much time before player get them, but players should get something each time they play this game. Ways to reach this objective:
- 1) Add "random stats" to items. Then item drops, RNG choose stats on them between predefined sets. 1/4 of randem stat set (RaSS) should be awesome and 1/4 should be real crap.
- 2) Add "crafted items". Players should collect some resourses and get to place where they can craft this item.
- Itemisation(1). WesMMO will be published by patches. In each patch I will add some new items and functions to players. Items added in new patch should be better than items added in previous patch. But difference should not be enormous.
- levelling(1). I would not change standart mechanic of XP colection of BfW. Each player have 3 unit, what allows them to prapare and perform last-hit for any unit. Levelling shouldn't make items of this patch worster.
- Levelling(2). Data, stored in unit.class[], should contain multipliers of stats. Later this will be used to recalculate stats of unit.
- Itemisation(2). There are three items: A(require 1-3 of X), B(require 2-5 of X), C(require 4-8 of X). While player have 3 X, he can't share A and B to others if he get them and can not use C. But when he collect 4 X, he can share A, can't share B and can use C.
- Crafted items++. If craft of new items will require resourses from old patch, old maps will become outdated only if I will want this.
- Itemisation(3). Items should have requirments by level.
- Levelling(3). There should be a level cap in each patch.
TODO:
REWRITE spell descriptions. Spells now divided to auras and specials. Players will enchance weapons and units by them to change mechanic of their attacks. Task critical because without it MMO will not be unique.
Add missed formulas to UpdateStats();.
Update PickUpItem();.
Update TakeOffItem();.
Implement free slots.
Make things clear about spells.
Make things clear about AMLA.
Make things clear about trade.
Implement loot tables from bosses and mobs.
Implement "Group Loot".