??? Sorry,I dont quite understand. For some reason,that made no sense to me.Quote:
Originally Posted by ShadowTiger
Printable View
??? Sorry,I dont quite understand. For some reason,that made no sense to me.Quote:
Originally Posted by ShadowTiger
All that just to make a combo move diagonally. In original FF combo form, you just had to set one value to 1 and another to -1. :eyebrow: (Well, if it makes a zigzag line rather than a solid diagonal, then that looks to be the easier way.)
Lol. :lol:Quote:
Originally Posted by ShadowTiger
Yea, that's one of those new time saving spacebar features, those are high dollar. ;)
I noticed that the revolution isn't visible in the preview mode.
Cool feature, but it will be a while before I can really set down and try to figure it out.
I have to wait for some brain cells to grow back.
Maybe I can get some of those rotating fireballs figured out one of these days. ;)
Well, I'm gonna be offline for a while. I need to take a cram course of C++. ;)
Note: Frames refer to frames of game logic. To put things in perspective, the game logic is designed to run 60 times per second. Think of them as 'tics'
SETV d0,100
This sets the d0 register to 100. Tis is a counter used to determine how long the ff combo should move for in frames (as I'll explain below)
SETV xd,1
SETV yd,1
Sets the X speed and the Y speed to 1 pixel and1 pixel respectively. This makes the platform move diagnoally lright-down.
WAITFRAME
Lemme explain this a bit further (ignore the (1) for now. When a script executes, it continues executing instructions indefinitely until 1 of three things are found 1) a QUIT statement. 2) The end of a script, and 3) a WAITFRAME statement. What this basically means is that the script stops executing for that particular frame. In the next frame of game logic, the script will resume execution from the satement AFTER the WAITFRAME statement.
SUBV d0,1
Subtracts 1 from the d0 register and puts the result into d0. So, it starts at 100, so thisdecrements it by 1.
COMPAREV d0,0
Checks to see if d0 is equal to 0. Since it's not equal, the TRUEFLAG (an internal flag used by the scripts) is not set. BTW, since d0 is 99 right now, and 99 >= 0, the MOREFLAG will be set, but that's not important right now.
GOTOTRUE 9
GOTO 4
GOTOTRUE will go to the instruction number listed if the TRUEFLAG (described above) is set. Since it isn't set, it will simply skip over this instruction. GOTO goes to the instruction number regardless of anything else. So basically, the logic of this function decrements d0 by 1 every frame (instruction 4 is WAITFRAME, so it jumps to this) until d0 is 0. During this time, the platform moves 1 pixel down and 1 pixel right every frame. When d0 is 0, the TRUEFLAG is set, and GOTOTRUE executes, going to instruction 9 (see below).
SETV d0,100 ; Instruction 9
SETV xd,-1
SETV yd,-1
WAITFRAME ; Instruction 12
SUBV d0,1
COMPAREV d0,0
GOTOTRUE 1
GOTO 12
Now we can figure out the logic of this statement. d0 is set to 100 initially again, and the x accel and y accel values are reversed to -1 and -1 repectvely. Then, a WAITFRAME is read, and on the next frame, it decrements d0 by 1, checks if d0 is equal to 0, then jumps to instruction 1 if it is zero, thus restarting the script. Otherwise, it jumps to instruction 12, where it WAITFRAMES, decrements d0 again, and checks for 0 again. When 0 is reached, z accel and y accel are set to 1,1 again. Thus, the ff combo moves diagnoally right-down for 100 frames, then up-left for 100 frames, repeat ad infinium.
Hope that isnt too hard to understand.
Holy crap. That is hard to grasp.
But I'm sure I'll learn it just like I learned any other things, like the entire ZQuest program in the first place. :p
Let's see:
This one set's variable d0 to 100, this is just a variable, not speed, position or something else.Code:SETV d0,100
Set's X speed to 1 and Y speed to 1Code:SETV xd,1
SETV yd,1
To prevent... Infinite loops? and to let other things animate.Code:WAITFRAME
Substracts 1 from d0, which is actually 100, lets d0 at 99.Code:SUBV d0,1
This is an easy one, C equivalent:Code:COMPAREV d0,0
In other words, if d0 is 0 the script will GOTOTRUE 9 but d0 is 99 right now, so the script ignores this sentence and goes directly to the next sentence, which is GOTO 4, the script will go to the fourth sentence, WAITFRAME then follow to SUBV d0,1, it will substract 1 to d0, leaving it in 98, this loop will continue until d0 reaches 0.Code:if(d0 == 0)
GOTOTRUE 9
else
GOTO 4
When d0 reaches 0, COMPAREV d0,0 will become true and GOTOTRUE 9 will no longer be ignored, the script will continue in this sentence. which will set d0 to 100 again.Code:SETV d0,100
Will set X speed to -1 and Y speed to -1.Code:SETV xd,-1
SETV yd,-1
This is pretty much the same as above, when d0 reaches 0 the script will continue in sentence 1, meaning that the script will repeat itself.Code:WAITFRAME
SUBV d0,1
COMPAREV d0,0
GOTOTRUE 1
GOTO 12
EOF (End of file)Code:QUIT
:unhappy:
I'll take your word for it. ;) Okay, I think it's time to actually start learning this scripting thing.
This is definitely one awesome feature. Good job, jman2050.