From Graal Bible

Release date

December 1999 - September 2000 for Windows


in no-playerkilling levels you can walk through unpaused players
Alt+1 works correctly without drawing npcs from other levels onto the
removed a bug with the backtile (in the editor); when you specify a backtile
 and press 'New' then a level will be created which has that backtile as background
npc weapons cannot do 'hide' anymore (caused a freezing bug with the Q window)
you cannot cheat by editing bigmap.txt anymore
when you double-click on the Graal window then the game goes to fullscreen
in the options window (Graal->F1->More options) you will find the new
 option 'Ignore mass messages'
when reading signs you can scroll back by pressing 'up'
in the npc script window: when a command has more than one parameter
 and one of that parameters is wrong, then the right paramter will be highlighted
you can directly drop an npc script onto the editor: to test it make a text file with
 the content 'if (playerenters) setgif brother1.gif'; drop it from the windows explorer
 onto a level in the editor and you will see a new npc
in the offline mode there is a new start level that explains how to use the controls
the server sends a 'message of the day' when you login
the function 'strcontains' doesn't care about capitalization anymore
F6 doesn't work on the server anymore
when resizing the editor then npcs on the right side of the screen will be displayed


the npc command 'putnpc' doesn't crash the game anymore
npcs will only be displayed in their levels
custom letter.gifs look correctly now
sending PMs doesn't cause problems
while sending PMs the server will not diconnect you for no movement


when you unpause then the server start message window will automatically
 be closed
objects (extras, bombs, etc.) will only be displayed in the right level,
 not in the nearby levels too


added an option to handle DINPUT.DLL problems (see DINPUTDLLbug.txt for more)
reconnect works better


the player list (F7) has now 4 sections (GPs,Guild,Normal,Ignore)
there is a history button in the message window and player list
 popup menu; it shows the last 50 messages received from/sent to
 the other player; the messages will not be saved on hard disk yet
added PNG support, but only for 16 color /256 color palette images;
 no support for alpha channel and interlaced images
removed many memory leaks / ressource leaks
removed a bug that disconnected the client often at startup


fixed problems with the script command 'destroy'
removed the old 'seteffect' command
less memory use (png buffers are freed)
removed a memory leak caused by explosions
when message windows are minimized then new message
 windows will not automatically be minimized  
when other players are carrying an exploding bomb
 then it will be displayed correctly
collision detection for flying objects (bushes etc.) uses 
 the right y-coordinate of the object
in 2/3/4-player mode: when throwing another player into
 water then he doesn't disappear
npc characters can swim


the debugger (F6) works now; you can select npcs and set break points
 by clicking left to a command in the list; the debugger is disabled in 
 online mode
new npc commands: showlocal, hidelocal, dontblocklocal, blockagainlocal
when saving screenshots with Alt+2 then the image format PNG is
 used, that means: 24bit, loss-less, better compression than GIF
in 2/3/4 player mode you can now change the focused player by clicking
 on the players view rectangle; if the player is focused, then you see a little
 'CHAT' right to the D icon; when you type in text, then it will be displayed
 over the focused player.
sound effects are now limited to only one sound effect of the same type
 in the same frame; so when 100 bombs explode at the same moment, then
 you only hear 1 sound effect; max 8 sound effects are played at the same time;
 that mass-sfxs messed up many computers.
midis only loop when they are longer than 10 seconds; actually this should
 solve some problems with sound cards which doesn't play the file but 
 producing a loop event which then freeze the game
when you hit someone who is on a horse then his horse looses 1 energy
 point (1 bush); when it only has 0, then the player will be pushed away 
 from the horse; so you need to eat more bushes to keep your horse fast and
when you ignore players in the player list then the account name will be saved
 into ignoredaccounts.txt; when you restart Graal then the other player is
 still ignored
when someone ignores your messages then his name turns red in the player list
you can push/pull npcs which use the showcharacter thing
you can only pull npcs which did the canbepulled command (instead of canbepushed)
there is a new script flag 'isweapon' which is true when the npc is an npc weapon
in offline mode there can ride two players on the same horse; the horse must have
 5 bushes to be able to carry two players; I plan to enable that feature in the online mode
 if you like it
removed a big bug that had to do with loading images from the server


the player list works similar to v1.33 again; there is now a special
 'buddy' part in the player list; to move players to that section right-click
 on a name and click on 'buddy'; the account names of the buddies are
 saved in the file buddyaccounts.txt in the Graal folder
when you are hit by a healing sword or similar 'hurting' device then your horse
 doesn't loose power (bushes)
you can use message codes when doing setplayerprop #Cx and 
 setcharprop #Cx
when sending player positions the x/y positions will be rounded
 instead of truncated; this solves some problems in sparring fights where
 players coming from down/right cannot hurt other players easier anymore
super bombs will be displayed correctly when carried
in the editor you can press 'M' to make a map of the current bigmap levels
if you carry a player in the two-player mode then he doesn't disappear
 when an npc does 'hideplayer' on you
removed a little memory leak that has to do with npc scripts (else statement)
modal message windows (e.g. error windows) doesn't disappear behind the
 main Graal window when you switch between tasks
when pressing D when riding on horse then the script event 'firedonhorse'
 is fired


removed the screenshot-bug (Alt+2)
you can drag text files onto the editor again (to place npcs);
 it crashed Graal in v1.34
you can have two characters with the same head image in headsconfig.txt
the server startup message is only displayed once; it's saved to
you can see toalls when in pause mode
PMs are now displayed with HTML; links are automatically added 
 when you write 'www...';
 if you have problems with this new feature, then you can turn 
 HTML off in the options window (Graal->F1->More Options)
the default joystick selection for player 2/3/4 is '(none)'


the server can now hold up to 28000 players instead of 220
you can limit the lenght of nicknames in the option window
 (Graal->F1->More options)
fixed a bomb-dropping bug
there is no error message anymore when there is no sound card
the TWebBrowser class (for HTML PMs) is loaded dynamically,
 so people who don't have Internet Explorer can PM again
when you select a player in the player list then you see his
 nickname displayed on the M map
in the editor you cannot select fields which are outside the level anymore
when you press F4 while the debugger frame is open then the game 
 doesn't crash when you press F6 again 
showtimer works for 'showcharacter' npcs too; the amount of money
 is shown over the npc's head when it got some
there are a lot of new variables and script functions that let you access
 objects in the current level; the variables can only be read, not changed;
 if you think changing the variables would be good for some effects then
 let me know which variables you want to access (;
 here a short list of the new stuff (for more read npcprogramming.doc):
   removebomb index;
   removearrow index;
   removeitem index;
   removeexplo index;
   removehorse index;
   explodebomb index;
   reflectarrow index;
   takehorse index;
   take2 index;
   lay2 itemname,x,y;
 In future Graal versions there will be also ways to access the attributes
 of other npcs
the script editor shows an error message when a command
 gets too many parameters
message codes can be used with the setstring command and inside
 #s()/#v() codes; here a little example:
   i = 3;
   setstring testvar#v(i)yeah, 5;
   j = strtofloat(#s(testvar#v(i)yeah));
 You get j=3. You see that you can simulate arrays of
 string variables by appending a number to the string variable.
 A second example:
   var3 = 7;
   k = strtofloat(#v(var#v(i)));
 You get k=7. That way you can access nomal variables like they
 were array variables, although it might be a lot slower than 
 accessing normal arrays. 
you can use message codes for filenames; you already could
 do that in previous versions, but now the editor doesn't check for
 the file when the filename contains a # (and doesn't show an
 error message when the file doesn't exist)


many small bug fixes and improvements (e.g. support for
 non-transparent pngs, support for 4bit-pngs with odd width,
 the tiles list is resized to the window size,
 when using the sword while riding on a horse then the
 horse is animated instead of looking like standing still)
no crash when editing an npc which has an 'if ()' in the
 script (empty boolean expression)
throwing tons of bombs doesn't crash the game anymore
 (it crashed when two of your bombs were flying at the same
the sound effects system has been changed: the sound effects
 are played with different volumes depending on the distance to
 the player
the script command 'showimg' works for normal npcs too;
 but only the current player can see it
new npc commands:
 * carryobject - carries an object, only works for 'showcharacter' npcs;
   see commands.rtf for a complete list of possible object names
 * throwcarry - throws the object
 * playlooped - plays a wav file looped
 * stopsound - stops playing a (looped) wav file
message codes can finally use ALL variables, so it's now
 possible to do message #v(rupees) #v(this.myvar);
when doing setarray on a variable which is already an array
 variable, then the array will only be resized and the previous content
 copied to the new array
you can initialize arrays by doing 'myarr = {var1,var2,..,varN};'
there are now built-in flags 'true' and 'false'
with 'hasweapon(weaponname)' you can check if the player has
 a special weapon
when you get a fullheart then the flag 'gotheart_currentlevelname'
 is set; so you don't need to set such a flag manually in your npc scripts


only for GPs: the remotecontrol has been updated,
 you can write PMs / toalls, players can see you in the
 player list with a (RC) guild tag
fixed the hide/show command for 'showcharacter' npcs
fixed a problem with invisible bodies when changing the window
the npc baddies are more intelligent when hunting the player
when moving the mouse over the minimap then the
 nicknames (displayed in a yellow hint window) doesn't
 hide the toalls anymore
in the debugger 'else if' is displayed correctly (green)
when pressing F6 in fullscreen then the debugger will be
 resized to screen size
with Alt+8/Alt+9 you can zoom in/out; this is only
 a feature just for fun
when a gif image doesn't have a transparent color, then
 black is taken as transparent color again; I have only
 re-added for compability with older levels;
 pngs are still only drawn transparent when a transparent
 color is specified (the first color index with full transparency)


jailed people can write PMs to RCs
'setnick nickname' command on the server
'warpto x y levelname' or only 'warpto x y' - commands
 for GPs on the server
when logging in with the account name as nickname
 then you get a * before your name which shows that you
 are the owner of the account, other people can't have
 have that name;
 Example: You have the account name Stefan, setting
 nick name to 'Stefan', then the server will change it
 to '*Stefan'; other people can't have the nick name
PMs are saved on hard disk with date and time; they are
 saved to the 'pms' folder; when you click on the
 'history' button in the player list then the messages
 will be loaded from that files; when you 'ignore' someone
 then his messages will be deleted; you can also delete
 them manually if you want (delete pms/messages_accountname.txt)
you can't dupe items (rupees) anymore, because when
 you get the item then the server increases your rupee
 count (in case no one else has taken the item yet)
with pressing Ctrl+A/B/D/E/F/G/H/L/M/O/P/R/S/T/W/X/Z you
 can display an emotion icon, the icons for brb (B),
 afk (A), zZ (Z) will be displayed till you move;
 the emotion icons were made by Ibonic, MrHack and Linkson
a gif2mng converter for command line use;
 do 'gif2mng filename.gif', it will create an 8bit png
 or mng (=png animation); the mngs are not optimized yet,
 so they will be bigger than gif animations, but we are
 working on it
better support for mng files 
New npc script commands/functions:
 * onwater(x,y) - tells you if (x,y) is water
 * testcompu(x,y), testplayer(x,y), testnpc(x,y), testitem(x,y),
   testbomb(x,y), testexplo(x,y), testhorse(x,y) tests if there is
   and object on (x,y) and gives you the index of that object
   in the object list, otherwise it returns -1 (except testplayer:
   returns -2 because -1 means the current npc character);
     i = testbomb(x,y);
     if (i>=0) explodebomb i;
 * you can do 'if (myvar in {1,2,3})' or 'if (array1==array2)'
 * changeimgpart index,x,y,width,height - changes the
   visible part of a 'showimg' image; it will be reset
   to the whole image when calling showimg again
 * you can access npcs[index].<attributename> variables (read/write):
   x,y,width,height(fields not pixels),rupees,darts,bombs,
 * new command 'hitnpc index,halfhearts,fromx,fromy'
 * setlevel2 levelname,x,y
 * some calculations of variables and boolean expressions are
   optimized/precalculated, like '1==1' will be converted to
 * the 'Test' button gives you more error messages when
   you type variable names wrong
'only' 1024 explosions will be displayed
new color 'transparent'
you can change the keys by editing graalconfig.txt, there
 can be 3 different keys for each action, each key can only
 be used one time; only some keys can be used:
 A-Z,0-9,Tab,Enter,Shift,Space,P_Up (page up),P_Down (page down),
 Up,Left,Down,Right,N0-N9 (numpad 0-9),Add,Sub,Mul,Div,Dec
 (numpad +,-,*,/,.), F9-F15;
 in future Graal versions there will be a special window where
 you can change the keys and the joystick buttons
when you lay your shield down then other people can see
 that you don't have a shield anymore
the M map is displayed in the vertical middle of the screen
 when it is smaller than the screen
better level linking when walking on outside levels (no
 invisible walls)
the F6 debugger shows bombscount, npcscount etc.
when opening the maximized editor then the scrollbars will
 be resized correctly
empty lines at the end of signs will automatically be deleted
In the editor: when moving the mouse then in the status bar
 you see the mouse posiiton and the tile under the mouse
In the editor: when double-clicking then the tile under the mouse
 will be made to the background tile (like when double-clicking
 in the tiles panel)
in the starting window: the languages in the languages combo box
 are sorted alphabetically
when pressing F5 in the online mode and loading a non-
 existing level then the game shows an error message and closes
 instead of letting you play the level that you was in
you can lift an npc that is carried by another player
when you eat a bush with the horse then you will only get a the
 bush count increased when you have finished eating
the flags 'gotbow','gotsword' etc. aren't supported anymore
in the offline mode the baddies doesn't follow you to other levels
in the npc script window the font name is now 'courier new'
when pressing 'Test' in the npc script window then it doesn't
 jump back to the beginning of the script
in the online mode other people doesn't look like
 they are jumping randomly around when going to another level
using the sword on an npc / calling the hitplayer command doesn't
 change the timeout variable of the npc, the sprite will only be
 set to 39 if hearts>0, the hearts will only be decreased if
 the sprite is not 39 or 40
the editor doesn't produce errors when you drag a selection
 outside the regular 64x64 area
some new tiles in pics1.png
a lot more (little bug fixes)


there is the new option 'don't connect levels' in the option
 window (Graal->F1->More options); if you enable that
 option, then you only see one level when walking through
 outside levels; this also means less data to send / receive,
 so enable that option if you have problems with lag in regions
 with many players like Graal city
fixed the warping (was a problem with empty signs)
the 'bombs' attribute of npcs works again
fixed the alignment bug with npcs (were sometimes drawn
 one pixel beside the real postition)
normal animation speed when walking diagonally
dragging a selection half out of the regular 64x64 area doesn't
 mess it up
the function to retrieve the message code doesn't
 hang on some codes like the previous version
 (e.g. when you say '#c' on the Mantara statue machine)
your horse doesn't get a bush when it eats a bomb
added caching of up to 50 toall-messages for each player;
 when a player sends several toall-messages in short time
 then you can see all of them by clicking several times
 on the toall-bubble of that player;
 this feature has been added to make future Graal extensions
 like a separate chat client possible
the new water tiles from v1.38 are now recognized as water tiles
forgot to mention: there is a new flag 'isonmap' which tells you
 if the player is currently in a level which is showed on the M map


completely different handling of head images, this should speed up
 Graal and drastically reduce the resources needed by the game
Profiles: In the player list click on 'profile' to change
 your own profile or right-click on a nickname and select 'profile'
 to see the profile of a player
 (Antago suggested profiles in Dec 1999)
there is a special option window for the player list: just
 click on the 'options' button in the player list; there
 is the option to turn off HTML in PMs, to ignore mass PMs
 plus two new options:
 * No images in HTML: deletes <img> tags out of PMs
 * sort player list by nickname: sorts the playerlist in alphabetically order
<script> and <object> tags in PMs doesn't work anymore
New options in the Graal->F1->More options window:
 * Ignore toalls: doesn't show 'toall:' messages anymore
 * Don't load heads for the playerlist / map: the game will
   not load the head image for the icon of a player for drawing
   it on the playerlist / map; all players will have the head
   of you except players which were in your level when they
   connected to the server (so the head needs to be loaded anyway);
   this reduces the login time / lag while the game because
   the game doesn't need to load images so often
When you type in chat text, then you can go back to
 previous messages by pressing the UP key; you can navigate
 through the last 100 chat lines by pressing UP and DOWN;
 when you edit a line or press RETURN then it will became your
 current chat line
in the editor you can 'draw' with tiles - select a single
 tile in the tiles panel, then click on the level, hold
 the left mouse button down, move around; you will paste tiles
 till you release the left mouse button
In 2/3/4 player mode: when you open the weapons list and press the key 'Delete',
 then the selected weapon of the currently 'focused' player will be deleted
 instead of the selected weapon of the first player;
 the focused player is that player who has the 'chat' icon near his status bar and
 can be changed by clicking with the mouse on the visible screen area of a player
you don't see 'failed' when warped between levels of a player world anymore
faster sending of messages to the server
removed some problems with floating point values in the npc scripts
 (e.g. 0.1+0.1+0.1-0.1-0.1-0.1 is now 0)
the M map shows a normal head for you too instead of a stretched
 player which sometimes freezed Graal
the M map is much faster (no drawing in the background anymore)
dead people are non-blocking
on the minimap PM-icons are drawn above toall-icons
the filenames for PMs on the hard disk have been changed to
 allow special characters like '\' or '/' in the account name;
 you should delete the old PMs in the pms folder if you already
 have a lot of files there, otherwise Windows could get
 problems with it
the weapon list (Q) is drawn using the function which also draws
 signs and the Continue/End window, so it works correctly
 with custom letters.gif (setletters); the background of
 the selected weapon is still blue
the weapon lists of player 3 / 4 are scrolled down too
 when it gets too big
by mouse-clicking on a weapon in the weapon list you can
 directly select a weapon without needing to navigate with the
 arrow keys
added some tiles and corrected the tile type for the
 dirty water; the futuric house tiles weren't added yet
 (must find a way to get around the 2MB-image limit)
you can directly drag image files (gif/png/mng) onto a level;
 the game will automatically generate an npc with that image
 at the mouse position


fixed a bug with transparent heads when starting Graal in 32bit
 video mode and switching to fullscreen
when sending messages to more than 50 people then the message
 will not be saved on hard disk (so it doesn't take a half minute till
 you can play again)
when viewing a profile of a player then you also see the
 kills/deaths/onlinetime that the player has in the current world;
 you only see it when the player already made a profile (pushed the
 'send' button in the profile window)
<applet> tags in PMs doesn't work anymore


removed bugs with caching levels on hard disk,
 this version should work better with playerworld
 servers running on different ports
when someone is invisible (hideplayer) then you still
 see his shadow and nickname
npc script enhancements:
 * functions
   if (playerenters) {
     playerdarts += 50;
   function myfunc() {
     message Hello!;
     if (playerrupees<50) return;
     playerbombs += 50;
   With 'function' you define a function, with
   funcname() you call it. It doesn't matter at what
   place in the script you define the function. With
   'return' you immediatelly return to one line behind the
   caller script position.
   There are no function parameters yet and you cannot
   use it in calculations. You can only call functions
   from the same script.
   With this new function thing it's much easier to
   make scripts look simplier.
 * new npc script variables: signscount, signs[index].x/.y
 * testsign(x,y)
 * callnpc index,playertouchsme; you can use this for
   calling the scripts of other npcs; calling that function
   doesn't run the npc's script immediatelly, it might take
   0.05 till the script of the other npc is actually executed
 * a function keydown(0..10) which tells you if a key is pressed
   0..3: movement, 4..6 A/S/D, 7 map, 8 tab, 9 Q, 10 P
 * you can use break, continue inside of loops to
   end a loop / continue with the next loop round
 * you can do myvar = (timeout? 5 : 3);
 * you can assign 'boolean' operation results to normal variables
   like myvar = (timeout && myflag);
   then myvar is 1 when the boolean expression 'timeout && myflag'
   is true, 0 otherwise