Accname
2D-Graphics enthusiast
- Reaction score
- 1,462
Hey guys.
I have been thinking alot about RPG's lately. I was thinking about an own magic system for a multiplayer RPG, possible an MMORPG, I think it would be really cool but incredibly complicated to code.
So I ask you guys what you think about it, would you like to play a game like this? Is it too complicated for use? Too much effort for the casual gamer?
Every player has a Spellbook. The spellbook can hold a certain number of spells. The number of spells you can have in your spellbook at any point in time is limited by your level as a wizard.
You can select a certain number of spells from your spellbook as "prepared" spells. The more powerful those selected spells are the less spells can you select. Every spell which is "prepared" can be used by you at any point in time.
You can deselect a prepared spell and prepare a new spell anytime and everywhere, but it takes some seconds in which you can do nothing else, you are completely helpless and unprotected and very very vulnerable to attacks.
You get spells by writing your own. There is a GUI coding system which you can use to create your very own spells.
When you write a spell you will get a scroll. You can copy this scroll into your spellbook which will destroy the scroll. You can give scrolls to other players to share a spell you wrote.
Writing spells is structured like this:
I think this would be great for a competitive MMORPG.
What do you guys say?
Too complicated?
Too much?
Any feedback?
Thanks in advance.
Edit: Some example spells:
Every variable starting with "udl_" will be a "user-defined-local" and saved permanently until the spell is finished.
Every variable starting with "tmp_" will be a temporary local variable and freed when the current code block is left.
I have been thinking alot about RPG's lately. I was thinking about an own magic system for a multiplayer RPG, possible an MMORPG, I think it would be really cool but incredibly complicated to code.
So I ask you guys what you think about it, would you like to play a game like this? Is it too complicated for use? Too much effort for the casual gamer?
Every player has a Spellbook. The spellbook can hold a certain number of spells. The number of spells you can have in your spellbook at any point in time is limited by your level as a wizard.
You can select a certain number of spells from your spellbook as "prepared" spells. The more powerful those selected spells are the less spells can you select. Every spell which is "prepared" can be used by you at any point in time.
You can deselect a prepared spell and prepare a new spell anytime and everywhere, but it takes some seconds in which you can do nothing else, you are completely helpless and unprotected and very very vulnerable to attacks.
You get spells by writing your own. There is a GUI coding system which you can use to create your very own spells.
When you write a spell you will get a scroll. You can copy this scroll into your spellbook which will destroy the scroll. You can give scrolls to other players to share a spell you wrote.
Writing spells is structured like this:
- Each spell consists of several (unlimited) "actions".
- An "action" consists of a "trigger" and several (unlimited) "commands".
- A trigger is one of the following:
- Instantly {when the spell is cast; each spell needs at least one action with this trigger}
- Time has passed in seconds (int) {since the action was enabled}
- Every (int) seconds
- Reaction: A game object dies / vanishes / is removed
- Reaction: A game object does an Action
- Reaction: The state of a game object changes
- Reaction: A missle got in range of a target
- All actions of the spell are initially disabled except for the actions with the trigger "Instantly"
- A game object is for example:
- A missle used for a spell / attack
- A unit of any kind (Player character, NPC, monster, summoned being, etc)
- A doodad, a lifeless object
- An item
- A "change of state" of an object is for example:
- Took damage
- Was healed
- was hit by a buff
- a buff was removed
- Lost mana
- Restored mana
- Got revived from the dead
- Died
- Commands can be for example:
- Create missle (with ID, design, movement pattern, collision, speed, etc)
- Summon unit (with ID, type, AI-Script, status, etc)
- Query unit/missle/doodad info
- Set local variables
- Play Sound/Visual effects
- Change state of unit/doodad (Damage, Apply buffs, kill instantly, move instantly)
- Give AI commands to missles or summoned units (only those created by this spell!)
- Enable / Disable spell action
- The mana cost / casting time of a spell depends on the complexity and length of its code.
- All additional actions / missles created / units summoned / etc will make the spell more costly
I think this would be great for a competitive MMORPG.
What do you guys say?
Too complicated?
Too much?
Any feedback?
Thanks in advance.
Edit: Some example spells:
Every variable starting with "udl_" will be a "user-defined-local" and saved permanently until the spell is finished.
Every variable starting with "tmp_" will be a temporary local variable and freed when the current code block is left.
Poison damage over time buff:
Simple instant heal spell:
Simple Fireball (missle following target)
Code:
Define
{
RANGE = 32
DAMAGE_PERCENT = 0.01
DAMAGE_TYPE = DMGTYPE_POISON
DAMAGE_INTERVAL = 3.00
}
Action1
Trigger: Instantly
{
// Get mouse pointer position for owner of casting unit
Set tmp_point = get_mouse_location( get_owner( CONST_CASTER ) )
// Get random unit in range of 32 of mouse pointer position; this unit is the target for the poison spell
Set udl_target = get_random( get_units( tmp_point, RANGE ) )
// Enable damage function
Enable: Action2
Enable: Action3
}
Action2
Trigger: Every DAMAGE_INTERVAL seconds
{
// Damage dealt will be 1% of max-hp of target
Set tmp_damage = get_status( udl_target, MAX_HP ) * DAMAGE_PERCENT
// Damage dealt will be of poison type
damage( udl_target, DAMAGE_TYPE, tmp_damage )
}
Action3
Trigger: Unit dies
{
if ( TRG_UNIT == udl_target)
{
Disable: Action2
Disable: Action3
}
}
Simple instant heal spell:
Code:
Define
{
HEAL_CONSTANT = 125
HEAL_FACTOR = 0.25
}
Action1
Trigger: Instantly
{
heal( CONST_CASTER, HEAL_CONSTANT + get_status( CONST_CASTER, MAX_HP ) * HEAL_FACTOR )
}
Simple Fireball (missle following target)
Code:
Define
{
MISSLE_DESIGN = DESIGN_FIREBALL
MISSLE_LIFE_TIME = 30.00
MISSLE_SPEED = 4.25
MISSLE_SIZE = 16
DAMAGE_TYPE = DMGTYPE_FIRE
DAMAGE = 225
}
Action1
Trigger: Instantly
{
Set tmp_point = get_mouse_location( get_owner( CONST_CASTER ) )
Set udl_target = get_random( get_units( tmp_point, RANGE ) )
Set tmp_target_loc = get_location( udl_target )
Set tmp_spawn_loc = get_location( CONST_CASTER )
Set udl_missle = create_missle( tmp_spawn_loc )
set_design( udl_missle, MISSLE_DESIGN )
set_timed_life( udl_missle, MISSLE_LIFE_TIME )
set_speed( udl_missle, MISSLE_SPEED )
set_collision( udl_missle, COLLISION_CIRCLE, MISSLE_SIZE )
command( udl_missle, move_to_loc( tmp_target_loc ) )
Enable: Action2
}
Action2
Trigger: Missle reached target
{
if ( TRG_MISSLE == udl_missle )
{
kill( udl_missle )
damage( udl_target, DAMAGE_TYPE, DAMAGE )
Disable: Action2
Disable: Action3
}
}
Action3
Trigger: Missle dies
{
if ( TRG_MISSLE == udl_missle )
{
Disable: Action2
Disable: Action3
}
}