Second Lesson, Break it down.
"We can dance if we want to, We can leave your friends behind"
*Looks up*
Wha!? No I wasn't dancing the safety dance. That would just be stupid!
Ok here's the second lesson, this and the next few lesions will focus on how to take a system you want to script and
break it down into smaller and smaller pieces that until you have something that you can actually script.
These lesions are intended to teach
Programming not just Ruby, in fact when we do get down to the ruby side of things
I'll only brush briefly on the concepts you need. As such it is a
VERY good idea to start reading a simple ruby tutorial in order to learn the syntax.
Programming is a
skill, one that allows a human to instruct computers to do tasks. Ruby is a
language, a
tool by which a person can program. But the fact of the matter is that when learning how to program it is best to realize that, just because one knows the syntax and grammar of a language DOSE NOT mean they can program in it.
As I said these next few lessons will focus on breaking down the system we created so that it can be scripted. That means be will be working with
layers of abstraction Read this to learn more.
Abstraction - http://en.wikipedia.org/wiki/Abstraction_(computer_science) (http://en.wikipedia.org/wiki/Abstraction_(computer_science))
Now that you know what I mean by abstraction I'll explain the process.
If you think of the entire system as a whole then you're thinking of the
highest level of abstraction that the system has.
Going one 1 layer in abstraction down you'll find that the system is made of three or four
smaller pieces. These pieces take in data, compare it to data the pieces keep internally and spit out some new data.
Going down 1 level further you'll find that those three or four smaller pieces are in turn made of other pieces that once again take in data, do something with it, and then return new data. You can keep going like this until you find that you have reached the
lowest level of abstraction in our system. This level is made of only the base statements that make up Ruby: assignments, operators, method calls to the standard library, ect.
In truth you could keep going lower from those base statements into the C language, which ruby is built on, and from there even lower into byte code. But that would be pointless. The reason Ruby is so nice to learn with is because all that complicated stuff, like memory management and manipulation, has been abstracted away so that we don't have to deal with it.
So, we are going to break down the system into smaller pieces, going 1 level of abstraction deeper each time.
You're assignment is to write down a model of the system and submit it by posting it inside a spoiler, that way other student don't have to see your work if they don't want to. I encourage you to not look at other's work you don't learn anything that way, at least not with this type of thing. Your trying to grasp a complex concept here, not memorize your multiplication tables :P.
I'll give you a little help to get you started.
Start by writing down everything the system dose, than break those actions out, start by grouping them together if they are all related think of these groups of actions as an object, a little machine that dose all these actions. then break them apart further. Stop when you think the lowest objects in your modal could be scripted in 3-20 lines of code (you don't have to know how, just as long as you think the action is simple enough to be expressed in terms of the simple statements that are Ruby).
Here's a video I mad that might explain the concept better. http://www.youtube.com/watch?v=s8HNrlvRCD8 (http://www.youtube.com/watch?v=s8HNrlvRCD8)
Each of you submit your own modal. IN SIDE A SPOLIER PLEASE (use this bbcode [spoiler][/spoiler] which results in this )
Well... Its not coded, but I catagorized the thought, and scribbled out the basic idea...
I am sure there is stuff missing, but its a start, and others can see to have a frame to build off of perhaps? :
[A Skill Progression System]
The system as a whole will advance skills via experience into new skills.
@Each skill will have its own variable, "xp". (not to be confused with .exp)
@Each skill will have a tag, "used", set as true/false dependant on use to determine atrophy.
$A skill really only needs to be checked in battle, as thats where most skills are used.
[CONFIGURATION AREA]
Skill Learning Configuration by user:
skill.id => [[pre-req.skill > usage req.],[pre-req.skill > usage req.]]
(Multiple skill requirements is optional)
(if not listed, then no 'evolution' is possible)
Skill Atrophy Configuration by user:
skill.id => [battles not used before atrophy begins, xp degraded per battle after]
(If not listed, then skill does not degrade)
Scene_Skill Configuration by user:
SHOW_XPTONEXT = true/false
SHOW_XP_BAR = true/false (requires blizzart bars?)
TOGGLE_BUTTON = Input::(button?)
Battle_End Configuration by user:
LEARNED_NEW_MSG = "[chara_name] learned [new_skill]."
EVOLVED_NEW_MSG = "[chara_name]'s skill evolved into [new_skill]."
DEGRADED_MSG = "[chara_name]'s [skill_name] has rusted due to lack of use."
[/CONFIGURATION AREA]
[BATTLE EDIT]
> Can the skill 'evolve'?
>>> If yes, then gain usage XP per use, and tag as "used" to prevent atrophy, Else: Do nothing.
[/BATTLE EDIT]
[BATTLE_END EDIT]
>>> Can the skill 'evolve'?
>>>>> If yes: Has the skill met the prerequisite(s) for 'evolving'? Else, do nothing.
>>>>>>> If yes: 'evolve'. Else, keep gaining experience on usage.
>>>>> Does the skill(s) get replaced or is a new skill learned?
>>>>>>> If replaced, then remove skills and add new skill, Else: add new skill.
>>> If yes: Can the skill degrade?
>>>>> If yes: was the skill tagged as "used"? Else, do nothing.
>>>>> If no: Has the skill been used in user-defined battles?, Else, do nothing.
>>>>>>> If no: reduce usage experience by user-inputted amount. Else, do nothing.
[/BATTLE_END EDIT]
If there is branching, then xp-to-next for skills is kind of difficult to track.
[SCENE_SKILL EDITS]
> Can the skill 'evolve'?
>>> If yes: Is the skill part of a branch or straight line?
>>>>> If branch: then do nothing.
>>>>> If straight: on configurable button-toggle, open mini-window to list skill to 'evolve' into.
?>>>> If straight: Put XP-to-next-(bar?) in skill.name. (User's choice)
[/SCENE_SKILL EDITS]
no, no, no, no. you getting a head of yourself. you NOT supposed to be writing code. your NOT even supposed to be writing pseudo code like that.
your creating a modal, like a flow chart, of how the big idea should break down into smaller parts. you can create this modal however you want. an image of a actual flowchart, or a stack of indented text I don't really care. but DON'T write code. you'll just end up messing your self up latter.
>_<
I see.
So thats... too much detail?
You want a flowchart variation of it?
Guess its time to break out Paint.NET. XD
not just make a flowchart version of what you have. your starting in the wrong place. the point is to write the modal without even touching code. Stop thinking about what needs to be edited in the RMXP scripts for it to work. Think about the system as if your making it from scratch.
I think we might all be too newb to realize the difference. Because when I try and imagine the smaller parts of the four basic functions, code comes to mind...
Think of it as a large machine that dose the task. then think of all the smaller tasks that need to be done to accomplish that task. think not how the parts work, but what the parts are. Start with the top level and go as far as you can. if you can only get two or three levels down thats fine. post it and I'll point you in the right direction to go further. this IS the HARDEST part of learning how to script and not just edit.
Exactly. Learning how to structure things from scratch is a vital part in learning how to program.
http://www.youtube.com/watch?v=s8HNrlvRCD8 (http://www.youtube.com/watch?v=s8HNrlvRCD8)
I made a quick video to hopefuly help people understand what I'm talking about when I say "break it down". now it's 4 am I'm going to get what sleep I can now.
Though sloppy, I think I kinda get what you're saying.
I'll post up a model later today when I get to tearing apart the system for a second time.
Hopefully this will help me in my endeavors of learning C# as well >_<
I'm gonna give this a shot by writing down what the system would need without touching acutal code. This is just a bunch of things that would have to be made with code, but I haven't written it in code. Am I doin' it right?
- Write a method to record the amount of times a skill is used.
- Write another method to define how the 1st method could be expressed through text.
- Write a method to actually express the 1st method in text.
- Write a method to upgrade skills when a defined amount of uses have happened.
- Write a method to get rid of the old skill once it is upgraded.
Yes?
A first try of the second lesson assigment
(http://img577.imageshack.us/img577/6342/secondassignment.png)
(
I uploaded a .png because I write it on paint.net. If it's not the right format I will change it).
perhaps a non-programming example would help...
Level 1: Brush Teeth
Level 2:
Get Toothbrush
Get Toothpaste
Combine Toothbrush & Toothpaste
Replace Toothpaste
Use Toothbrush on Teeth
Replace Toothbrush
Rinse
Level 3:
Combine T&T
Store toothbrush in right hand
Store toothpaste in left hand
Remove cap from toothpaste
Aim toothpaste at brush
While toothbrush is not full of toothpaste*
Squeeze
Stop Squeezing
* it's sometimes ok to use 'programming' terminology/concepts/logic, but in a very generic sense.
It's sometimes hard to conceptualize a modification this way, since you have already decided the mode of implementation (the language), and you're looking at the current implementation rather than just it's 'requirements'.
@AngryPacman Your making the same mistake that jragyn00 was. you trying to conceptualize it using ruby. thats NOT the point. get as far a way from ruby as humanly possible when making this system modal. don't think with Ruby methods at all.
@Dweller you've got the right Idea but your starting about two levels down. use the the idea "upgrade skills with experience gained from use" as the top level and then split that into two or three larger tasks Like I did in the video. then you can divide those big general tasks up into the more specifies tasks you've put in your modal.
Brewmister has provided a good example of Idea with the task "Brush Teeth" thank you for that. you don't have to get nearly as specific in the process as hes did just yes. thats is going to be for lesson three.
If I were to redo his modal it would look something like this.
Level 1:
Brush Teeth
Level 2:
prepare toothbrush
level 3:
get toothbrush
add toothpaste
use brush on teeth
level 3:
place on teeth
brushing motion
finish
level 3:
rinse brush
rinse mouth
replace brush
-Skill Experience System
-Skill Families (eg. Fire, Fira, and Firaga)
-Skill EXP Requirements
-Skill Experience Tracking
-EXP Gain/Loss values
-Experience Gain
-Did (actor) use (skill)
-Gain Skill EXP after battle
-Enough EXP for new skill?
-Learn new skill, forget old
-Experience Loss
-Did (actor) NOT use (skill)
-Count subsequent battles were (skill) is not used
-Is there too much neglect?
-Lose Skill EXP after battle
-Forget neglected skill, relearn old
Something like this, right? (only read first post)
Good job, you've got the idea Nym.
Skill Level System
1. XP
2. Gain XP
3. Gain via script call
3. Gain after used in battle
2. Loose XP
3. Loose via script call
3. Loose after battle not used
2. Grace period
3. Dont loose XP during a time after learning a new skill
1. Leveling
2. Level when reaching a certain amount of XP
2. Learn/Forget Skills
3. When gaining XP amount for certain skill learn, and if nesesary forget old ones
3. When loosing XP amount for certain skill learn, and if nesesary learn old ones
2. Set level via script call
Cyclope has got it.
Think I've gotted it now.
Level 1 >> XP SYSTEM
Level 2 >> LEVEL EXP
Level 3 >> GAIN FOR BEATING MONSTERS
Level 3 >> GAIN FOR WINNING BATTLES
Level 2 >> SKILL EXP
Level 3 >> GAIN FOR USING SKILL
Level 4 >> GAIN MORE FOR KILLING MONSTERS
Level 4 >> GAIN LESS FOR HIGHER SKILLS
Level 3 >> UPGRADE WHEN ENOUGH EXP
Level 4 >> UPGRADE MORE WITH MORE EXP
Level 4 >> MORE EXP REQUIRED FOR HIGHER LEVELS
Level 4 >> FORGET OLD SKILL WHEN UPGRADE
Level 3 >> REACH HIGHEST LEVEL
Level 4 >> STOP EARNING SKILL EXP
Level 3 >> CHANGE THROUGH SCRIPT CALL
Level 4 >> GAIN THROUGH SCRIPT CALL
Level 4 >> LOSE THROUGH SCRIPT CALL
Level 4 >> CHANGE LEVEL THROUGH SCRIPT CALL
Level 5 >> RAISE LEVEL THROUGH SCRIPT CALL
Level 5 >> LOWER LEVEL THROUGH SCRIPT CALL
close
Your missing the skill branch of the system. it needs some way to define skill learning ect.
Take one:
Level I: Skill Training System
*Level II: Experience
**Level III: Variables define experience/uses for each skill, for each actor
*Level II: Method for learning new skills
**Level III: When experience/uses reaches configurable amount, learn new skill
***Level IV: Configure experience/uses requirements for each skill
****Level V: Configure what skills are learned
****Level V: Configure if advanced skill replaces previous skill, or is learned alongside the previous skill
***Level IV: Be able to define 'branched' skills
****Level V: Define requisite skills
****Level V: Define how much exp/uses each requisite skill must have in order to learn
*Level II: Experience atrophy
**Level III: Configure experience atrophy for each skill
***Level IV: Configure number of exp/uses lost after each battle
**Level III: Define what states affect experience atrophy
***Level IV: Define what states hasten experience atrophy
***Level IV: Define what states slow experience atrophy
*Level II: Grace Period
**Level III: Every skill for every actor has a 'grace period on/off' function
***Level IV: Make sure that grace periods for each skill, for each actor, tick away independently of each other
***Level IV: Define that, automatically, grace period is 'on'
***Level IV: Define that after the grace period length is over, the grace period is 'off'
***Level IV: Define that if the skill is used again while the grace period is over, the grace period is 'on,' reset to maximum length defined by user
***Level IV: For each skill, define whether or not use of the script call resets/turns on the skills' 'grace period'
**Level III: Grace period length (let's say defined by battle count) defined for each skill
***Level IV: Define if grace period is defined by the actor's 'Intelligence' stat (You're smarter, so you're less inclined to forget)
***Level IV: Define if grace period exists at all, or alternatively
***Level IV: Define if grace period is indefinite
*Level II: Script Call
**Level III: Access the variable of a skill for any actor ([skillID]/[actorID])
***Level IV: Raise exp/uses
***Level IV: Lower exp/uses
**Level III: Define whether or not use of the script call resets/turns on the skills' 'grace period'
*Level II: "[actorID] has learned [skillID]!" Scene
**Level III: Displays once skill is learned, a window telling you that an actor has learned a new skill. Don't know how to break this down more...
no. thats a list of tasks to accomplish to complete a quest. you might want to take a closer look at what the others have done to get a better idea
ok so im gonna try this one more time
Level 1: Skill Level Up
Level 2:Gain EXP on Skill Use
player used skill
Gain via script call
Level 3: Lose Exp on Skill
player did not use skill
lose exp via script
Level 4:Learning Skill Based on EXP
exp at required amount
froget skill
learn new, more powerful skill
Level 5:Froget Skill based on Exp
exp at required amount
froget skill
learn weaker skill
thats good Mapper2100
QuoteLevel 5:Froget Skill based on Exp
exp at required amount
froget skill
learn weaker skill[/spoiler]
D'oh! I knew I forgot something...
- The system
- The configuration
- General settings
- Atrophy mode (Nil, Turns or Battles)
- Individual skill settings
- Array containing skills. [End skill, first ingredient skill, first ingredient skill experience, iterate the last two as necessary]
- The engine
- Ok, I really have no idea about this >______< I'll update when I have a clue, I promise.
OK guys here is it:
Start:
*Skill Evolution System "4 branches and 4 or 3 levels"
*ALL SKILLS database
*Create the DB of all possible skills. "Upgrade means that the skill in higher levels will do a bit more damage, cost less Sp and maybe have a better cooldown (if using a CD system)"
"this include the specific mechanics of the 4 types of branches"
*Kinds of skill branches =[physical, magical,support, upgrade] "this makes 16 or 12 possible new upgraded skills per skill in DB"
*Kinds of Skill experiencie points "SEP" =[physical, magical, support] "upgrade be posible if none of the requeriments are meet"
*Make a DB of monster and their kind of SEP that they give "like AP system this will include a list of NON SEP monsters"
*Upgrading system
*SEP gathering
*Check a ? / X amount of SEP required "Ex: a skill have a limit of SEP lets say 1000 but actor gains 300,300 and 400 of types A,B,C; in order to get a branch it must be at least 50% of the type that you want if requeriments aren`t meet then will be an auto-upgrade (type D)"
"Type D (upgrade) will be always available when the skill reaches maximum EXP required"
"Skills will need at least 50% of a kind of SEP in order to evolve"
*Able or diable the possible evolutions depending of the amount SEP gathered.
*Evolution window
*make a window that contains
*The desired character
*list of his/her skills
* X of Y amount of SEP
*Make selectable or not the next skill on branch by the SEP checking.
*Forget current skill and learn the selected one.
*Make items for increase/decrease a especific kind of SEP.
NOTE: once selected the type of evolution of skill in level 1 it can`t be changed to another type.
What!? Fire I is evolving! Congratulations! Fire I evolved into Fire II!!
What do we need to move to the next lesson?
frankly nothing, but I'm too busy with work on my final week of school to post it. you'll have to wait till Monday.
No problem. Good luck in your final week.
Good Luckk Ryex!!!
Is school still in session?
I haven't seen any activity here for a bit. I was kinda lurking and following progress ;)
I'd hate to see this fizzle out.
Yeah, me, too. I actually wanna learn how to script :^_^':
no, I'm still working on setting up the next lesson. first finals week kept me busy and now my first week back finding a job is keeping me busy. I'll try to finish it off tonight.
getting impatient ryex!!! hurry the hell up! you said once a week and i havent seen anything new in almost 2 months!!!
Quote from: Mapper2100 on May 22, 2011, 09:41:53 pm
getting impatient ryex!!! hurry the hell up! you said once a week and i havent seen anything new in almost 2 months!!!
You're being rude. You do not act that way towards the one who sets up YOUR lessons, and especially considering he's way more respected than you'll ever be here.
It makes you look rude. If he isn't moving fast enough for you, just go on the internet and look up tutorials instead of acting like that. Nobody is annoyed, and you learn scripting.
Perfect plan.
well if hes the one supposed to be setting up our lessons then why the fuck isnt he doing it!! oh and buddy you can go fuck yourself you cock sucker... btw im out ryex
Out? Great! You speak as though anyone actually cared if you were in to begin with. xD
Also, reported for fast punishment. :)
well as much as you may be right that I need to get my ass in gear and do this. your rude ass remarks are uncalled for. I'm doing this voluntarily as my time allows. notice the wording I've used, I "would like" to do a new lesson once a week, but theses two weeks coming back from college have been too busy for me to get around to it.
:facepalm:
@$$hole...
Anyway, I'm sure we'll have a lot more work to do in the summer. We hope.
Some people just don't have manners.
You dare to doubt the mighty Ryex?
@Ryex: Well, keep at it.
Seriously what do you want for free?
- The system
- The configuration
- General settings
- What you will allow at the beginning of game to be chosen (race, gender, name, class, etc.)
- Individual character/weapon settings
- Skillset list: What your starting or basic skills are, and, how to get experiences for each.
- Weapons "Stuff": Any weapon specific things that need to be defined specifically via scripts
- How to kill yourself: Well, not really. How will one lose experience / life / etc is defined here
- The engine
- Ok, I'll take a shot at this part..
- List and find everything the game needs for resources, like pictures, sprites, audio files, etc.
- Initialize the main loop, and, any supporting modules.
- Do game stuff here...
- Exit game loop and clean up memory, resources, etc.
Yeah, so I stole the outline from Naoise... He won't mind.. Plus, it's changedededed...
you got the general Idea down but your breaking down the entire game engine not the system we are working on.