BasicBot documentation and changelog (will be updated for future BB updates). I think the documentation dir is best suited for these files, but if anyone wants them in the windows dir no problem, makes it easier for me :) Don't know whether anyone even checks the documentation dir anymore... The FCEU changelog is ancient.
This commit is contained in:
parent
5558cca57f
commit
3f75d638d8
|
@ -0,0 +1,144 @@
|
|||
This changelog only concerns the Basic Bot code.
|
||||
Changelog 0.3.1:
|
||||
10 september 2006
|
||||
- Change - Code - Removed the code length limit. You can now enter as much characters as you desire (and the GUI allows). This entails no overhead in variables and save files. As a result older botfiles can no longer be loaded. This change has a high impact on BB.
|
||||
- Change - Botfile - Because of the new way of handling codefields, the saved botfiles are saved slightly differently as well. It will now save a version number, to prohibit you from loading a botfile you cant load with the current version. Furthermore the saved fields now save their length, and no longer saves bytes that are unused (the '\0' bytes).
|
||||
- Change - GUI - Did a little overhaul on the GUI. Adjusted it to be able to view player one and two inputs at the same time. There is now a OK and Invalid field. The OK field tells the bot when a attempt has finished and is to be counted (like: frame=500). The invalid field tells the bot when a attempt is not to be counted (like when you die). The result part has changed to give a better view. Added two additional Tie's.
|
||||
- Change - GUI - External button is gone, instead there's now two radiobuttons that do the same thing. Pressing run still puts you in botmode, pressing stop keeps you in botmode (because it pops up the debugger for now).
|
||||
- Remove - Stats - Removed the averages. They were a nice idea, but they didnt feel very helpfull in practice.
|
||||
- Added - Stats - Now showing a counter of how many attempts were successfull and how many failed. This should (/may) give an indication as to how good/bad your code is.
|
||||
|
||||
Known issues:
|
||||
- Rollback, Max frames, Max attempts, Max parts, do nothing. They are for a future feature :)
|
||||
- The autoload/save thing is still broke. I think fceu somehow remembers the last used directory after loading/saving and uses it as the "working directory".
|
||||
- The debugger still pops up for exiting botmode, just press run and close it.
|
||||
- Test does the same as before.
|
||||
- There should be no memory leaks. They can appear now because the code uses new/free to remove the code length limit. This entails the coder to "manually" free allocated memory when done with it, which is the number one source of memory leaks. If you find a memory leak, report it please.
|
||||
- There's no manual yet :p Will try to make one soon.
|
||||
- May create some kind of "expert" button to hide half the current GUI, so new people wont be overwhelmed by the number of controls.
|
||||
|
||||
Changelog 0.3.0:
|
||||
5 september 2006
|
||||
- Change - Source - Basic Bot is now running on a byte interpreter. This is a big change, worth of a 0.1.0 increment ;) BB will now first parse the code and convert it to bytecode. Then, when computing, it feeds these bytecodes to a interpreter. This will speed up things (or should). It also allows for easier error checking.
|
||||
- Change - Command - Due to the bytecode and branching, iif and loop had to change. They both require a semi-colon (;) as terminator. Loop no longer requires brackets (but you may use them anyways). Examples: "5?3:2;" and "loop 5 ac(3) ;". For the user, the ; behaves like ), internally it copies its position to the location of the ':' or loop symbol, so the code knows where to jump to.
|
||||
- Added - Command - Shifts! I needed them for some SMB tests and they werent there. x >> y and x << y will shift x y bits to the left/right. This is not a rotation!
|
||||
|
||||
Known issues:
|
||||
- Error checking is not completely waterproof yet, bare with me.
|
||||
- Test now parses the code in the Extra field, turns it to bytecode, and shows the evaluated result (if any) in the error box. If no rom is loaded, dont use mem() or you _will_ crash. The best attempt window will show you the first 30 symbols of the byte code.
|
||||
- I broke the autosave/load thing. It still saves and loads, but somehow along the way it changes paths. Not quite sure whats up with that...
|
||||
- The crash mentioned earlier, when disabling external input after running the bot, is more of an annoying pause. Press the run button of the debugger and close it, to continue.
|
||||
|
||||
Changelog 0.2.3:
|
||||
2 september 2006
|
||||
- Fixed - GUI - Now fixes GUI texts properly when it fires up.
|
||||
- Added - GUI - Comments. You can now enter some comments (same length as codefields), like author or game info.
|
||||
- Added - GUI - BasicBot now auto saves/loads "default.bot" when opening/closing the basicbot window. It will save this to the working directory (usually same as the exe). A message is displayed whether the load was succesfull or not, if not it will load default values (like pushing clear).
|
||||
- Change - Source - Removed all the nicknames, it's my source now and the whole thing has been redone. I'm the only one working on this anyways.
|
||||
- Added - GUI - There's a button "Values" now. This will show the hardcoded values the program uses. These were hardcoded at compile time and cannot be changed, unless you recompile the exe. Shows stuff like BB version, max frames it can compute and max length of code fields.
|
||||
- Change - GUI - Changed the titlebartext.
|
||||
- Change - GUI - Check button has been replaced by the Test button. It's generally not adviced to use it since it's used by me to debug, so unpredictable things may happen :)
|
||||
|
||||
Known issues:
|
||||
|
||||
- Load behaves like update: when the code is running and you hit load, it will put these values to the memory and the GUI. This is a designflaw, but you'll have to live with it.
|
||||
- Old botfiles, for whoever has them anyways, will probably not load properly.
|
||||
- All fields still max out at about 1k, will be enlarged in a future release.
|
||||
- Code does not check for the presence of an argument for functions. If no argument is present, it will take the value 0.
|
||||
- Program crashes when stopping (to be more precise, the program crashes when switching botmode to off), this is a bug unrelated to my source but one that does need to be fixed... fast.
|
||||
- I think it's stable, but due to the rather drastic changes going on and my not so great knowledge about pointers and stuff I'm not quite convinced it really is. However, no problems rose in any of my tests...
|
||||
|
||||
Changelog 0.2.2b:
|
||||
1 september 2006
|
||||
- Change - GUI - Test button, should be ignored...
|
||||
- Fixed - GUI - The new static variables werent saved/loaded when done so. They are now.
|
||||
- Change - Source - Improved load/save functions.
|
||||
|
||||
Changelog 0.2.2:
|
||||
29 august 2006
|
||||
- Change - GUI - Run now sets FCEU in "external mode" if not already so. It also exits this mode when done/stopping. This kind of absoletes the whole botmode button for bot-purpose, but it's currently the only way to enable botmode so I'll leave it in for now :)
|
||||
- Added - Commands - Also affects GUI. New are the XYZ and PQ "static variables", no this is not a contradiction :) The strings are evaluated once, when loading them from the GUI (so also when presseing the refresh button). The XYZ values then remain the same while running. The PQ values only at the start of each attempt, to a value between 0 and P (or Q), but remain the same in every usage.
|
||||
- Added - GUI - The small "U" button above the new variables only updates those variables, none of the other code.
|
||||
- Change - Errors - The syntax errors now have 1-12 prefix instead of just 1 for me to determine where things go bad when a new syntax error was introduced (so you'll get the error 1001 through 12001 for syntax errors.
|
||||
|
||||
These changes were done pretty quickly and did not undergo much testing I'm afraid. Bugs may exist.
|
||||
|
||||
Changelog 0.2.1:
|
||||
Built binary is the work in progress at fceultra.sourceforge.net
|
||||
No guarantuees are made that any of the other stuff actually works. In fact, I'm quite certain most of it doesn't.
|
||||
This is not an official release! It's a test-release intended to test the Basic Bot part of the program, and only that.
|
||||
You have been warned.
|
||||
|
||||
- Change - Commands - ')' now also resets hexmode and negmode.
|
||||
- Change - Source - Updated the source to no longer supply arguments that I threw out the previous time.
|
||||
- Change - Source - Cleaned up comments, commented entire document.
|
||||
- Change - Source - Removed several redundant pieces of code.
|
||||
- Change - Commands - Removed ram().
|
||||
- Change - Behaviour - Previously, the goal would be reached if the result of the "end when" line would be greater then a random number between 0 and 1000 (there was actually a chance for it to be impossible to reach its goal: when that random number was 1000). I don't see the added value of the random part, you either reach your goal or you dont. If I hear any protest this can be put back in easily.
|
||||
- Fixed - Commands - "stop" now works.
|
||||
- Fixed - Errors - All errors now stop future attempts (until the run button is pressed again).
|
||||
- Change - Source - Used defines for max frames, codelength and resultwindowsize. Now we can easily change these limits.
|
||||
- Change - Source - Changed several ints to bools, when they were used as such anyways.
|
||||
- Change - Behaviour - Clears debug when starting.
|
||||
- Change - Behaviour - Upped the number of frames the bot can compute to 4k (used to be 1k), this is now a (hardcoded) variable.
|
||||
- Change - Source - The code lengths are currently set to 1k each. I've changed this 1k to one variable (hardcoded), however this would mean paying attention to loading older files. Especially if we're to decreasing this size. Size will be increased in the future.
|
||||
- Added - Errors - New error introduced: 1004. Thrown when the occurences of '(' != ')' or '?' != ':'. The characters () and :? always need to be pairs. The code does not explicitly check proper nesting (yet...), but I think that's done implicitly by parsing.
|
||||
- Fixed - Behaviour - Negative numbers work, prefix 'n' does too. Something like "n5+6 echo" shows 1, "n5 -1" shows -6. I forgot that C has signed numbers :D
|
||||
- Added - Commands - Added memw(n), which reads two bytes from the memory: ((mem(n)<<8)+(mem(n+1))), memh(n) and meml(n) read half a byte (a nibble) (they (value&0xF0)>>8 and value&0x0F the values before returning). Note that the memh() will also return values 0-15. Is there anyone who thinks memi() for 32bit numbers is really usefull?
|
||||
- Added - Commands - Added j and k. j returns the loopcounter of a nested loop, k returns teh loopcounter of a nested loop inside a nested loop.
|
||||
- Change - Commands - You can now nest loop() twice, so you can do: "5 loop(i loop(j loop(k echo)))". Any more loops will still result in 1002. To check: "rc(10) 5 loop(5 loop(5 loop(5 ac(10)))) c(10) echo" should be 625 (5x5x5x5).
|
||||
- Change - Errors - Error 1002 is now thrown when nesting loops 3+ deep.
|
||||
- Added - Commands - Added value. Completely transparent, like a nop/noop (no-operation). Can be used to use in iif's (1?500:value). Note that "value echo" is the same as "echo", value doesn't change anything, just improves readability. It is accepted as number though (unlike echo).
|
||||
- Change - GUI - Redesigned it a little bit. Still not quite the way I want it though.
|
||||
- Added - GUI - Refresh button. When the bot is running and you want to change parameters to see whether it improves, you can change the code in the GUI and press refresh. The bot will then refresh its internal code with the GUI.
|
||||
- Added - GUI - Botmode button. Toggles "external mode" on/off.
|
||||
- Added - GUI - Added some more information. It shows the score of the last attempt. There is a debug section and an error section. The averages for score and tie1-3 are shown next to them.
|
||||
- Change - Source - Had to change to vc8, because I know no other way to change the GUI. As a result I can no longer compile Luke's old code, but am stuck with the SF project files. They work, but may be even more buggy.
|
||||
- Added - Commands - Added "lastbutton", or "lb" short, which returns the button pressed in the previous frame. This will not work for the last frame pressed before the save-state, so at the first frame, this value is always 0.
|
||||
- Change - Behaviour - BB can now compute up to 2k frames (was 1k). I intend to enlarge this number greatly, but need to check out possible memory issues before I do.
|
||||
|
||||
Known issues:
|
||||
|
||||
- Player radiobutton is not selected on load. Has no effect on the code, player 1 is set by default.
|
||||
- External input button starts with "toggle" instead of its state.
|
||||
- External input button text will not be updated if the external input is toggled anywhere else (currently impossible, but hey).
|
||||
- Check button is disabled because it's too much code now, and will be much easier to do later.
|
||||
- Load behaves like update: when the code is running and you hit load, it will put these values to the memory and the GUI. This is a designflaw, but you'll have to live with it.
|
||||
- Hexmode/Negmode issue remains the same, except for ')', as mentioned.
|
||||
- Old botfiles, for whoever has them anyways, will load except for the extra2 field. You'll need to paste this into the one field.
|
||||
- All fields still max out at about 1k, will be enlarged in a future release.
|
||||
- Code does not check for the presence of an argument for functions. If no argument is present, it will take the value 0.
|
||||
|
||||
|
||||
Changelog 0.2.0:
|
||||
FCEU has not been changed, except for the about, in any way! No bugs fixed, no additional features, go back to sleep.
|
||||
|
||||
- Changed parsing method to be more robust.
|
||||
- Added "echo" command. Will print the last value to the "Frames" area on the right side. As a result, this update is disabled. Until I can figure out how to change the dialog (GUI), this is my only option.
|
||||
- Added "stop" command, but does not work yet. Stop throws an error with code 5000. The bot should stop (but doesn't right now).
|
||||
- Added "sc(x)" command. I don't know why ac() and c() were there, but sc() was not... Anyways, sc() does the same as setcounter().
|
||||
- Added some errorchecking. You will now see errors when your code is faulthy. The codes are printed in the Frames box on the left. When an error is thrown, the code stops his attempts the moment it starts them. You have to hit stop/run manually for now to try again.
|
||||
1001 = invalid character encountered (only whitespace is allows and ignored, space CRLF (return) and tab).
|
||||
1002 = nesting of loops not allowed (currently, you can not do "2 loop(3 loop())" ).
|
||||
1003 = not in hexmode (when encountering ABCDEF).
|
||||
5000 = stopped by code (user).
|
||||
- Updated the about box to make clear this is a new version.
|
||||
- Fixed dozens of bugs concerning iif (condition?true:false). You can now safely nest these and use all the available commands inside them. The previous code would execute both commands regardless of the result of the condition.
|
||||
- Changed loop(), i now starts at 0 instead of 1. If the original way is preferred this can easily be reversed.
|
||||
- Changed button, if value is 0, button will return all the buttons pressed.
|
||||
- Note, ram() is still in, but will be removed next version since it is entirely absoleted by mem().
|
||||
- Added n, works as a prefix for numbers to negate them. Technically works, but it doesn't quite show yet.
|
||||
|
||||
Known issues:
|
||||
|
||||
- "stop" does not work properly yet (eg. it fails to do what he's supposed to do: stop the bot).
|
||||
- Negative numbers are not handled properly.
|
||||
- Loop can not be nested. If there's a demand for this, this can be changed.
|
||||
- When using x or n, if you dont put whitespace behind the number, you will remain in hexmode or negmode (meaning, if another number is encountered between whitespace, that number will also be treated as if it was prefixed by x or n). I don't plan to fix this right now, for your own sanity use some whitespace.
|
||||
- Not really worth mentioning at this point, but the frame count updater has been disabled to allow minor debugging.
|
||||
|
||||
qFox, 19 august 2006
|
||||
qfox.nl
|
||||
|
||||
BB 0.1.0:
|
||||
Last code by Luke, used this as basis.
|
|
@ -0,0 +1,117 @@
|
|||
Manual for BasicBot
|
||||
Written for v0.3.1
|
||||
10 september 2006
|
||||
Peter "qFox" van der Zee
|
||||
|
||||
This is a bot. It uses a combination of probability and scripting to play games. It comes with a rather powerfull scripting language.
|
||||
To operate it you need to enter some values for the buttons. The bot will evaluate these values. The result is the chance of that button pressed, in a range from 0 to 1000 (you can check this range by pressing the value button).
|
||||
If you enter 500 for a button, there will be a chance of 50% for every frame that this button will be pressed.
|
||||
Note that you can use the scripting language to change the number. For example, you can make a button is not pressed if another button is pressed (you usually dont want left and right to be pressed at once). Or to jump if you're at the edge of a gap (read the memory and jump if it's value is x).
|
||||
|
||||
When processing a frame, the inputs are checked first (from A1 to Right2). Then the OK and invalid are processed, and if they are not 0 the score is computed. If they are 0 the extra field is executed.
|
||||
Note that the button command is reset at the start of each frame, and can only contain the buttons that have been processed so far (so for A1, button will always return 0, and the A for player 2 can only see the buttons player 1 is pressing this frame). Only the fields not for input can see all the buttons pressed this frame.
|
||||
|
||||
Note that the value of the OK and invalid fields need to be >= the max probability (1000) to stop the current attempt. Also note that the attempt will end, successfully, when the maxframes frames has been reached (currently about 2040, see values).
|
||||
|
||||
The GUI consists of a lot of fields and buttons. I'll start with the buttons.
|
||||
|
||||
Close: Closes the GUI.
|
||||
Save...: Save the current contents of the fields to a file.
|
||||
Load...: Load a file with settings of the fields.
|
||||
Clear: Reset all the fields to the default "empty" values.
|
||||
Test: A test button for me to test stuff me. At the moment of writing it will test and evaluate the code in the extra field.
|
||||
Update: While running, this allows you to adjust the settings in memory with what's in the GUI without stopping/starting the bot. It will update at the start of the next attempt.
|
||||
Play best: This will load the savestate and play the keyfile that proved to be the best so far. You can then save the resulting state and move on manually, if it's good for you :)
|
||||
Reset: Resets all the stats (last, best and the counters).
|
||||
Values: Shows you a list of hardcoded values. These are the values that can not be changed by the user.
|
||||
Run!/Stop: Will toggle the bot. It will put itself into botmode (when pressing run) if not alreay so. It will not put itself out of botmode yet, because this causes the debugger to pop up.
|
||||
|
||||
The radiobuttons "Normal" and "External" will toggle the botmode, and show you what the current state is.
|
||||
|
||||
For as far as not explained yet, here are the fields:
|
||||
Inputs: The buttons should contain the probability of being pressed each frame. They are seperated for player one and two. For now, three and four players is not supported, maybe in the future (who'll use it anyways?)
|
||||
|
||||
Comments: Just a string to describe what the current settings are meant for, not used otherwise.
|
||||
|
||||
OK when: If this would return true, the current attempt stops and is matched against the best attempt so far. If this attempt is better, the best attempt is replaced by this one. You can put a frame limit, a score goal or the distance to move here.
|
||||
Invalid when: When should te bot quit the current run and try again? Like when you die, or loose an item, or stuff like that.
|
||||
Rollback: Unused for now, but when used, it should indicate how many frames should be rolled back when the end of this attempt is reached. Not sure yet whether this is practible.
|
||||
Max frames: For a future feature, this indicates how many frames each part can be.
|
||||
Max attempts: For a future feature, this indicates how many attempts per part should be computed.
|
||||
Max parts: For a future feature, this tells the bot how many parts should be computed.
|
||||
|
||||
Score: The bot uses this value to see how good an attempt was. You can put stuff like your ingame score here, the number of coins gotten, number of kills or distance walked. This value almost always uses some kind of mem(), to get ingame information.
|
||||
Tie1-5: Behaves the same as the score field, but breaks ties when deciding which is the best. Can also be used to check out certain information each run (like how many coins you got, when score is more important, or how many times you pressed B this attempt, etc).
|
||||
|
||||
X,Y,Z: These are static variables. They are only evaluated when updating and remain the same once evaluated.
|
||||
P,Q: Almost the same as XYZ, except these will return a value between 0 and P or Q when used. This is usefull when wanting to test a certain range of probability (500+P, or whatever).
|
||||
|
||||
Extra code: This is executed once all the inputs have been evaluated, and only if the current attempt is not ended. You can enter general processing stuff here. Increase counters, or whatever.
|
||||
|
||||
|
||||
Commands:
|
||||
|
||||
The bot uses a simple but powerfull scripting language, not really based on anything. It was started by Luke, and extended by me (qFox). The language is evaluated fully and encoded to a bytecode, when updating. This bytecode is fed to an interpreter when running.
|
||||
There is no limit to bracketdepth (except perhaps a stack-depth limit, but you there's really no valid reason to reach it, ever). You can nest loops to a max of 3, because this entails annoying stuff to get i,j,k working. Any higher depth will result in a syntactical error. You can nest iif's (?:;) as much as you can nest brackets.
|
||||
The evaluator works from left to right, and has no other priority. This means that "5+3-2*8/7%3" is evaluated as "5+(3-(2*(8/(7%3))))". While most functions require brackets for their parameter, loop and iif dont, since they are terminated by the semi-colon (;). You are of course allowed to use brackets anyways.
|
||||
For whitespace you can use spaces, tabs and returns. Unix/mac/windows style returns don't matter, but since this bot is windows only (for now, programming technically) this shouldn't even matter. Any other, unknown, character will error out saying so.
|
||||
There is no real limit to the length of your code. There used to be, but I changed it.
|
||||
|
||||
Commands are case-sensitive. As a rule of thumb, all commands are lowercase, except for XYZPQ. For hex numbers, ABCDEF must be uppercase.
|
||||
|
||||
For the descriptions below, "<value>" means the last value that wasnt processed (eg: 5 loop(x), 5 would be <value>, same for return values: c(0) loop(x)).
|
||||
|
||||
Arithmatic: BasicBot supports the following operators, who will always accept parameters like "<value1> operator <value2>":
|
||||
+ Addition
|
||||
- Subtraction
|
||||
* Multiplication
|
||||
/ Devision
|
||||
% Modulation
|
||||
& Bitwise AND
|
||||
| Bitwise OR
|
||||
^ Bitwise XOR
|
||||
>> Bitwise shift right (with zero padding on the left)
|
||||
<< Bitwise shift left (with zero padding on the right)
|
||||
|
||||
There are several standard comparison operators. These operators will return 0 when false, or the max probability (at this moment 1000) when true: = != >= > <= <
|
||||
|
||||
There is one way of branching, the iif: "<value> ? x : y ;". If <value> is not 0, execute part x, else execute part y. x and y can be multiple statements, x is bound by the colon (:) and y is bound by the semi-colon (;). The ? : and ; are paired. Effectively they make the "if then else". "mem(x3FD) ? 3 ac(3) : rc(3) 2 ac(5) ;" means "if memory location 0x3FD is not 0, execute "3 ac(3)", else execute "rc(3) 2 ac(5)". These can be nested as much as desired. I may add a while branch later.
|
||||
|
||||
attempt = Returns the current attempt number.
|
||||
a = Returns the flag for button A. See also button.
|
||||
abs(x) = Returns the positive value of x.
|
||||
<value> ac(x) = Same as addcounter(x).
|
||||
<value> addcounter(x) = Add <value> to counter x
|
||||
<value> button = Returns the buttons pressed (so far) for this frame. If <value> is 0, all buttons are returned, else only those buttons supplied (<value> is ANDed with the buttons first).
|
||||
counter(x) = Returns value of counter x.
|
||||
c(x) = Same as counter(x)
|
||||
down = Returns flag for button down. See also button.
|
||||
<value> echo = Echoos <value> to the debug area, then returns <value>.
|
||||
frame = Returns the frame the bot is currently working on.
|
||||
i = When in a loop, returns the current cycle of the most inner loop.
|
||||
j = When in a loop, returns the current cycle of the second inner loop.
|
||||
k = When in a loop, returns the current cycle of the third inner loop.
|
||||
lastbutton = Returns the buttons pressed in the previous frame, always returns 0 the first frame.
|
||||
lb = Same as lastbutton.
|
||||
left = Returns flag for button left. See also button.
|
||||
<value> loop x ; = Execute "x" <value> times. The x may be more then one statement, the ; is mandatory and defines x. You may nest a max of three loops at once. Example: "3 loop 2 + i ac(5) ;"
|
||||
mem(x) = Returns the value of address x. This can only be done when a rom is loaded (in fact, the program will crash if somehow not so). It will read the memory of the running game and returns it's value. For the bot, this is probably the most used command since it's the only way to get direct info from the game. Stuff like score, but also environment. Basically anything! To know what value is stored where, you need to check out the game by other tools in FCEU first...
|
||||
memh(x) = Same as mem(x), except it returns the high nibble of a byte (so it ANDs the value with 0xF0 first).
|
||||
meml(x) = Same as mem(x), except it returns the low nibble of a byte (so it ANDs the value with 0x0F first).
|
||||
memw(x) = Same as mem(x), except it returns a word (two bytes), x and x+1 to be precies, as one value. Would be same as "(mem(x)<<8)+mem(x+1)"
|
||||
n = Puts you in negmode, the next number encountered will be interpretered as being negative. This was much much easier opposed to using the prefix '-', since that's also the operator for subtraction.
|
||||
rc(x) = Same as resetcounter(x).
|
||||
right = Returns flag for button right. See also button.
|
||||
resetcounter(x) = Resets counter x to 0. Sort of the same as "0 sc(x)".
|
||||
select = Returns flag for button select. See also button.
|
||||
start = Returns flag for button start. See also button.
|
||||
stop = Stops the bot with error code 5000.
|
||||
<value> setcounter(x) = Sets counter x to <value>.
|
||||
up = Returns flag for button up. See also button.
|
||||
x = Puts you in hexmode. The next number encountered will be interpretered as a hex number. You may use "0123456789ABCDEF" for a number in this mode. "ABCDEF" will error out when not in hexmode, and is case-sensitive!
|
||||
X,Y,Z = Returns the value entered in the static variables. Note that these values are evaluated only once, at updating time, so something like "frame" for this value is useless.
|
||||
P,Q = Almost the same as X Y and Z, except these return a random value between 0 and P or Q. The returned value remains equal for every attempt, but changes to a new value between 0 and P or Q after each attempt.
|
||||
|
||||
When an erorr is thrown, which should never be while the bot is running, a guiding message is shown in the debug part to explain what went wrong. The bot will stop running when an error is thrown.
|
||||
|
||||
That's about it for now :)
|
Loading…
Reference in New Issue