Goto or jump functions
-
Hello Folks,
I got started with coding when I discovered Pokémon Rom Hacking in 2017.
I was used to writing scripts for ROMs
via Offsets and Free Space Finders which was kinda the same as scripting everything in Basic.The only different thing seems to be the compiler and the Syntax sometimes but the rest like operators and such is still the same.
When I scripted on ROMs I was used to creating an Offset with
@"offsetname"I could use that Offset as an Adress to read from.
So for example if on Line 20 the compiler reads
"Goto @Offset" the script jumps to the Line where that Offset is and continues from there.
if the Offset is on a higher line than the goto command does not matter.Im missing this kind of function in F4 which would add so much versatility or would make things easier for me.
OR im just misreading and dumb and have missed something.
Could it be that there is such a function and that it just has a similar or different name?Anyways, thanks for this wonderful piece of software.
-
Hi there. Please see this previous post that I did about the lack of goto: https://fuzearena.com/forum/topic/1084/unexpected-end-of-file-and-i-dunno-wh/3
Fuze support functions which should hopefully make goto unecessary
-
@Mechanical So at first there is no goto in fuze.
But maybe there is a workaround to make a goto in Fuze but i dont think so. I can understand that you miss goto that was the same thing with me in python. But I understood that goto is not realy god. A function can do exact the same thing and you can even give parameters to the function. When I find a way to do a goto like thing then I will tell you. But dont expect to much -
Okay so just for everyone with the same problem, here is what I've learned now:
A function isn't the same as goto but much more versatile. It can do the same but much better. Therefore goto isn't needed in F4.
Everyone who misses goto should read about functions.
Thread can be closed
-
@Mechanical threads get only closed if its going away from the topic. I think
-
@Mechanical https://fuzearena.com/forum/topic/1099/a-goto-workaround That may will help you
-
Functions are great! Once you get used to them, you’ll never want to go back.
Also give structs a try. They’re the ones that look like
player.pos player.colour player.shiptype
etc. Comes in handy, makes your stuff more readable too :) -
@toxibunny Exactly nevertheless I made a goto workaround how may will help persons who miss theyre goto and so they can feel a bit better in fuze
-
I've asked myself if I couldn't write a complete function for my Main Screen, Game Screen ect.
If I scripted that on ROMs I just would do this
@Maintext // Stores text data
" This is the Main Screen"
@Gametext // Same
"This is the Game"
@IntroAsk
"Do you want to play?"Start
Msgbox 6,@Maintext /shows text dataMsgbox 5,@IntroAsk / ask yes no question
If LASTRESULT 1 goto @Gamescreen@Game Screen
Msgbox 6,@GametextEnd
-
@Mechanical Yeah sure but you cant jump with this
@ exampleMaybe you should read the chapter about functions
-
@Mechanical said in Goto or jump functions:
I've asked myself if I couldn't write a complete function for my Main Screen, Game Screen ect.
If I scripted that on ROMs I just would do this
@Maintext // Stores text data
" This is the Main Screen"
@Gametext // Same
"This is the Game"
@IntroAsk
"Do you want to play?"Start
Msgbox 6,@Maintext /shows text dataMsgbox 5,@IntroAsk / ask yes no question
If LASTRESULT 1 goto @Gamescreen@Game Screen
Msgbox 6,@GametextEnd
I think you need to work your way through some of the tutorials! This isn't ROM (don't know what that is - well, I know what a ROM is, but I know you're not talking about that)
Things just don't work in the same way here! For starters there isn't really a start to finish flow of things, you need a loop that runs forever
Very loosely (pseudo-code to a certain extent) you would have:
mainText = "This is the Main Screen" gameText = "This is the Game" introAsk = "Do you want to play?" // This is not real code! loop while attract clear() // Ask if they want to play a game update() repeat while play clear() // Play the game update() repeat repeat
-
Okay I can say that I understand it to a certain extend now.
Rn I wrote a function that is my Main Game Engine. This Engine can be extended and improved by altering the function itself and will start after setting the needed Parameters in a main menu.
Here is what I learned the last time I used them:
If I want to Improve the Engine, every Variable that is used in the function itself must be determined in a Library before it is used in the function. Otherwise the compiler tells me that the Variable doesn't exist.
On the other side that means every Variable that's been defined inside of a function will Vanish after the Function is being executed. They only exist to work for the function
-
@Mechanical So variables can be local or global. As you say variables that are declared within a function are local to it and will cease to exist outside of the function. Variables declared outside of a function are global and they will persist even after the function has exited.
-
@pianofire but with the next update there will changes right?
-
@petermeisenstein There will be a change to the way that parameters are passed to functions. Global and local variables will remain the same.
-
@pianofire sooo, practically I need to change Syntax when the new update rolls out? Or does it stay the same on the frontend?
-
@Mechanical There was some confusion about whether parameters were being passed to functions by reference or by value. To clarify the situation the default is now by value and if you want to pass by reference you will need to add "ref" in front of the parameter (from the next patch)
-
@pianofire but it wont be possible for variables declared "new" in your function so a variable who is only declared inside your function
-
@petermeisenstein Sorry I don't understand the question
-
@pianofire So here is an example
function()
my_variable=1
return voidCan i use my_variable outside this function