Creation/Dev/Releases/Client/NewFeatures2001: Difference between revisions
From Graal Bible
Pooper200000 (talk | contribs) (Blanked the page) |
Pooper200000 (talk | contribs) No edit summary |
||
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
[[Category:Scripting Reference]] | |||
new Graal animation system using *.gani files | |||
* With setani and setcharani (script commands) you can change | |||
the animation of the player or the npc, instead of only | |||
using the default animations that are changed by accessing | |||
the variable 'sprite'; that variable still exists but will | |||
be mapped to def.gani which contains all of the old | |||
animation steps (0..40); its also possible to still read | |||
'sprite', the game will then try to convert the current | |||
animation to the old sprite number system, e.g. when the player | |||
has the animation walk.gani then reading the 'sprite' | |||
variable will result in values between 1 and 8 depending | |||
on the current animation step; new animations will always | |||
be mapped to 0, but you can get the current animation by | |||
using the #m message code (if (strequals(#m,walk)) ...) | |||
* There is an editor for gani files named 'GraalShop.exe', | |||
you can set the file association in the windows explorer | |||
to make it easier to open gani files; but you can also | |||
edit gani files with text editor | |||
* Syntax: | |||
setani <aniname>,param1,param2,...; | |||
setcharani <aniname>,param1,param2,...; | |||
Example: setani walk,; sets the walking animation | |||
defined in walk.gani. A gani contains informations | |||
about sprites and where to put them in which frame. | |||
The gani format: | |||
1. Starts with some control commands: | |||
* SPRITE 0 SPRITES 0 0 24 12 shadow | |||
=> sprite_index image_file x y w h description | |||
this defines a sprite | |||
* sprite index: is import for the animation part of | |||
gani file which will be described later; | |||
each sprite must have an unique sprite index | |||
* image file: can be | |||
* BODY HEAD HORSE SHIELD SPRITES PICS | |||
(those images will taken from the current player), | |||
* PARAM1, PARAM2, ... (are set with setani/setcharani), | |||
* myimage.png (direct filename) | |||
* x,y,width,height: describe which part of the image | |||
should be drawn | |||
* description: only for the gani editor | |||
* DEFAULTPARAMxxx newsword.png - tells the gani editor | |||
which image should be used for PARAMxxx (it can also | |||
be a number when you want to use the parameter to | |||
give a sprite number to animations) | |||
* COLOREFFECT 20 1 1 0 0.99 | |||
=> sprite_index red green blue alpha | |||
sets the alpha transparency / colors for the sprite | |||
* ZOOMEFFECT 20 5 | |||
=> sprite_index zoom | |||
sets the zoom factor for the sprite | |||
* LOOP - loops the animation | |||
* CONTINUOUS - doesn't restart the animation when you | |||
call setani/setcharani again | |||
* SINGLEDIRECTION - all four directions use the same | |||
animation steps | |||
2. It follows the animation in | |||
ANI | |||
... | |||
ANIEND | |||
The animation normally contains 4 x animation_step_count lines | |||
of sprite defintions. Each line contains of a list of | |||
sprite positions: | |||
sprite_index dx dy, sprite_index dx dy, ... | |||
* sprite index: the defined sprite with the specified sprite | |||
index should be drawn (can also be PARAM1, PARAM2 etc.) | |||
* dx: horizontal difference to the player-x coordinate | |||
* dy: vertical difference to the player-y coordinate | |||
After each frame (which means 4 lines in normal animations | |||
and 1 line in a SINGLEDIRECTION animation) you can add following | |||
commands: | |||
WAIT <waittime> - repeats the last frame <waittime> times | |||
PLAYSOUND <soundfile> dx dy - plays a wav file from position | |||
(playerx+dx,playery+dy) (that defines the posititon where it | |||
sounds loudest); this actually works like the npc command 'play' | |||
so you can theoretically play midis or avis but that is not | |||
recommended | |||
* See the existing gani files for examples, e.g. idle.gani for | |||
a very simple animation (it only contains one step) | |||
* The gani format has a lot of advantages: | |||
* it means less network traffic (because you can replace tons of | |||
showimg with one call to setani/setcharani) | |||
* you can do a lot more than with showimg | |||
* it's easier to make complex animations with it | |||
* in the online mode the player animations look less | |||
laggy because the animation continues even if the | |||
connection is slow | |||
* you can hear what other people do like they were playing | |||
on your computer because sound effects are included in | |||
the gani file | |||
* you can change the default player animations like dead.gani | |||
files are now automatically downloaded again from the server when | |||
they have been updated on the server | |||
wavs are downloaded from the server too | |||
when weapon names start with - then you can't see them | |||
in the weapons list (might be good for system npcs) | |||
new npc script variables playerhurtdx and playerhurtdy when the | |||
player is hurt (otherwise they are 0) | |||
new npc script commands 'setgender' and 'setchargender' | |||
(paramters: male / female) | |||
new npc script command setmusicvolume left,right; | |||
both values can be between 0 and 1 | |||
signs are dynamic now, you can use message codes like #n in | |||
the signs, unknown characters are drawn using a windows font; | |||
there is a new message code #K(action) which tell you the | |||
key names for the keys (0-up, 1-left, 2-down etc.) | |||
head,sword,shield and body images are saved in the right | |||
folder (levels/heads, levels/swords etc.) instead of | |||
levels/webgifs | |||
before you can drop items with S+A it checks if there is no | |||
wall in front of you | |||
the npc script command 'stopsound filename;' works now | |||
there is no error message anymore when you | |||
open a file by double-clicking on a .graal file | |||
in the windows explorer (file association) | |||
the script command 'continue' works correctly | |||
in while-loops now | |||
jumping into links shouldn't stuck you | |||
invisible npcs are non-blocking | |||
DirectSound and DirectDraw are dynamically loaded, | |||
when there is a problem with DirectDraw then | |||
the game gives you an error message and closes | |||
correctly | |||
fixed a bug that happened when you do | |||
if (playerenters) setlevel <currentlevel>; | |||
playerlist section 'Staff' instead of 'GPs', | |||
there you can also see LATs and FAQs now | |||
==1.411== | |||
when right-clicking on yourself (online mode) | |||
then you will see your own profile + stats | |||
you can not pause in sparring rooms anymore | |||
when entering a sparring level then the | |||
restart position will be updated (so you | |||
restart in the sparring level when you die) | |||
ad animations are stopped when not visible | |||
forgot to mention: there are script variables | |||
screenwidth and screenheight (pixels) for the | |||
visible area which is 640x456 by default; | |||
those variables are read-only | |||
hidden players (script command hideplayer) are | |||
now visible on the map again; we might re-enable | |||
a real hideplayer thing again but not as long | |||
as people can cheat with it | |||
Alt+1 now saves as png too (like Alt+2) | |||
when you press M in the editor then the | |||
generated map will be saved as png; if you | |||
want to use it as map for your playerworld or | |||
for the setmap command then you need to convert | |||
it to 8 bit colors before using it in the game | |||
==1.41== | |||
shooting arrows only takes half the time | |||
there is an ap bar under the ASD thing | |||
a rating system for fights in sparring rooms; | |||
to make a sparring room you must add an npc | |||
with the script 'sparringzone' (no end line | |||
characters!) to the level; | |||
then the server will see that it's a sparring | |||
level and will not change your ap/money and | |||
will rate your fighting skills depending on | |||
who you kill and who kill you; | |||
when you press R then you will see the current | |||
ratings over the heads of the players; it shows | |||
rating + rating deviation; the rating deviation | |||
tells you if the player is fighting often, only | |||
players < 80 rating deviation will be listed in | |||
the graalonline.com top50; so if you see someone | |||
with a rating of 2000 and a rating deviation with | |||
330 that means he only had one fight or so, so you | |||
can't really trust that he is a good fighter | |||
when you are in a sparring room you will see a | |||
white 'sparring' on the ap bar | |||
new option in F1->General options: fullscreen mode; | |||
you can switch to 800x600 and 1024x768; | |||
you can get the screen size in npc scripts | |||
by reading 'screenwidth','screenheight' (in | |||
case you want to align a showimg stats image on | |||
the right side of the screen) | |||
by right-clicking with the mouse on a player | |||
you will open the profile of that player; | |||
the profile now shows more stuff like the account name | |||
and sword power | |||
the server message of the day can now be | |||
HTML | |||
graal PMs and the server MOTD can contain | |||
the new tag <graalmsg>Hallo #n!</graalmsg> | |||
(the text inside the graalmsg tag works like | |||
with the npc script command 'message'); | |||
it is good for making a message which looks | |||
more personal | |||
new npc script command showstats, with this you | |||
can show/hide parts of the status bar / game | |||
showstats 1+2+4+8+16+32+64+128+256+512+1024; shows all | |||
showstats 0; hides all | |||
the argument is a bit-wise flag set | |||
1 - ASD | |||
2 - icons (for rupees, bombs, arrows) | |||
4 - rupees count | |||
8 - bombs count | |||
16 - arrows count | |||
32 - hearts | |||
64 - alignment (ap) bar | |||
128 - magicpoints (mp) bar | |||
256 - minimap (you can only hide it, you can't show it when the | |||
player pressed Alt+3) | |||
512 - inventory npcs | |||
1024 - players | |||
npc weapons can't be deleted when their name starts with a * | |||
(e.g. toweapons *Boomerang;) | |||
there is a new very good designed baddy image: | |||
baddyninja.gif from Ulrich Galbraith (Zancrus) | |||
(its the one who made some of the graphics for v1.0 | |||
like the frogs, baddies) | |||
there are some new tiles for hourse corners and | |||
inside house corners | |||
fixed a bug with negative rupees when dropping | |||
rupees while being in the bank | |||
in online mode the positions of showimgs are aligned the | |||
same way like the player position; that way its easier to | |||
use hideplayer+showimg because you can align it correctly | |||
to the shadow of the player (which can't be hidden) | |||
in online mode when you do showimg+changeimgpart it also | |||
works for bigger images now | |||
the playerlist is sorted again when your nickname | |||
is changed (it needs to be updated because the guild | |||
might have been changed) | |||
red gloves will be displayed correctly again | |||
the default keys will be set/displayed correctly; this | |||
was a problem in older versions because e.g. in France | |||
you have the A key on a different position on the keyboard; | |||
in France it uses now QSD as the default keys for lifting/ | |||
sword/weapon | |||
when you start Graal for the first time then the game | |||
will try to detect the local language automatically; | |||
because some languagexxx.txt files needed to be renamed | |||
you might need to change your language manually if you | |||
have already played | |||
'playersays' works correctly now, but keep in mind that | |||
its not supported anymore, better use strequals(#c,...) | |||
fixed a little bug with head icon transparency in 32bit | |||
showname / ap changing doesn't delete your chat text anymore | |||
==1.4== | |||
new starting window | |||
It should be simpler now, when you select 2/3/4 player mode | |||
then you can choose the player to change by clicking on the | |||
little head icon right to the character selection box; | |||
You can also set the nickname separately for each character | |||
in 2/3/4 player mode; | |||
The account name/password thing was moved to the server list | |||
server list window | |||
When you select 'One Player (online)' as game mode then | |||
you will see a server list window that will load a server | |||
list from www.graalonline.com and display it in a list; | |||
When you click at an entry then it will show you some | |||
informations about that server (language, version, homepage etc.); | |||
On the lower part of the server list window you see | |||
the edit fields for account name and password; | |||
click on 'Connect' to connect to the selected server; | |||
When you play then you can always open the server list | |||
window again by pressing F8 (it will refresh the list | |||
automatically) | |||
password are saved separately for each account name | |||
new option 'don't save passwords' in the options window | |||
(F1->General Options) | |||
new pk tag system: | |||
when having less than 40 alignment points (showap) then | |||
you can't increase your power; when you die then you will | |||
get 3 hearts back when ap<20, 5 hearts when ap<40 and | |||
full power when you die while ap>=40; | |||
when you kill someone then your power will decreased | |||
by (yourap/20+1)*(otherap/20); | |||
when ap<20 then your ap will increase every 30 seconds, | |||
when ap<40 then every 2 minutes, ..., when >=80 then | |||
every 30 minutes (no 90 ap limit anymore) | |||
There is better pk recognition: | |||
When you kill someone with bomb/arrows/fire/bushes then | |||
it will count as player-killing too | |||
New script stuff | |||
* New command: changeimgvis index,drawingheight; | |||
changes the drawing height of a showimg image; | |||
possible values for 'drawingheight': | |||
* 0: like drawunderplayer | |||
* 1: like the player | |||
* 2: like drawoverplayer (default) | |||
* 4: on screen (the img will be drawn like the status bar, | |||
it will be drawn on the image (x,y) position); | |||
so you can make your own status bar thing with | |||
this command | |||
* When doing showimg with an image index not in 0..199 then | |||
it will only be shown local | |||
* setimg/setimgpart can be used instead of setgif/setgifpart | |||
* The 'in' operator is enhanced. You can now do things like: | |||
1,2 in {1,2,3,4,5} - will check if 1 AND 2 are in specified array | |||
x in |0,64| - is true when 0<=x<=64 | |||
x in <0,64> - is true when 0<x<64 | |||
You can also combine those things, e.g. | |||
x,y in <0,10| - is true when 0<x<=10 AND 0<y<=10 | |||
* putexplosion2 bombpower,radius,x,y; | |||
for producing jolt bomb explosions (set bombpower to 3) | |||
* New command: setbody bodyimg; | |||
This is a nice command: with this you can change | |||
the body of the player, e.g. setbody body2.png | |||
(body2.png is included in v1.4, its from Antago, | |||
body3.png is from Loriel) | |||
You can also use the #8 message code to change | |||
the body img (setplayerprop #8,body2.png or | |||
setcharprop #8,body2.png); | |||
* npcs[index].attr and compus[index].attr can be changed | |||
better hacking protection | |||
explosion radius is limited to 15 (hack protection) | |||
script command setlevel2 works with floating point values for x/y | |||
you can lay down shields again | |||
Because many people had problems with the music thing | |||
there are some things chanegd/optimized: | |||
* dynamic loading of mediaplayer (so when you turn | |||
off music support then it will not load it) | |||
* winamp support -> option 'use winamp for music' | |||
==1.392== | |||
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 | |||
Example: | |||
if (playerenters) { | |||
myfunc(); | |||
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 | |||
==1.391== | |||
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 | |||
==1.39== | |||
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 | |||
==1.38== | |||
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 | |||
==1.38== | |||
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 | |||
'*Stefan' | |||
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); | |||
Example: | |||
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, | |||
hearts,timeout,glovepower,swordpower,shieldpower,hurtdx, | |||
hurtdy,id,save[],dir,sprite,ap | |||
* 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 | |||
'true' | |||
* 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 | |||
anymore | |||
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) | |||
==1.371== | |||
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 | |||
mode | |||
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) | |||
==1.37== | |||
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 | |||
time) | |||
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 | |||
==1.36== | |||
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 (bomber@graalonline.com); | |||
here a short list of the new stuff (for more read npcprogramming.doc): | |||
bombs[index].x/y/power/time | |||
arrows[index].x/y/dir/dx/dy/type/from | |||
items[index].x/y/type/time | |||
explos[index].x/y/power/time/dir | |||
horses[index].x/y/dir/bushes/bombs/bombpower/type | |||
removebomb index; | |||
removearrow index; | |||
removeitem index; | |||
removeexplo index; | |||
removehorse index; | |||
explodebomb index; | |||
reflectarrow index; | |||
takehorse index; | |||
take2 index; | |||
lay2 itemname,x,y; | |||
takeplayerhorse; | |||
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) | |||
==1.35== | |||
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 | |||
servermessage.rtf | |||
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)' | |||
==1.341== | |||
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 | |||
==1.34== | |||
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 | |||
healthy | |||
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 | |||
==1.331== | |||
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 | |||
==1.33== | |||
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 | |||
==1.324== | |||
added an option to handle DINPUT.DLL problems (see DINPUTDLLbug.txt for more) | |||
reconnect works better | |||
==1.323== | |||
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 | |||
==1.322== | |||
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 | |||
==1.32== | |||
in no-playerkilling levels you can walk through unpaused players | |||
Alt+1 works correctly without drawing npcs from other levels onto the | |||
screenshot | |||
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 graalonline.com server anymore | |||
when resizing the editor then npcs on the right side of the screen will be displayed | |||
See Creation/Dev/Releases/NewFeatures2001A for rest |
Latest revision as of 00:07, 31 January 2010
new Graal animation system using *.gani files * With setani and setcharani (script commands) you can change the animation of the player or the npc, instead of only using the default animations that are changed by accessing the variable 'sprite'; that variable still exists but will be mapped to def.gani which contains all of the old animation steps (0..40); its also possible to still read 'sprite', the game will then try to convert the current animation to the old sprite number system, e.g. when the player has the animation walk.gani then reading the 'sprite' variable will result in values between 1 and 8 depending on the current animation step; new animations will always be mapped to 0, but you can get the current animation by using the #m message code (if (strequals(#m,walk)) ...) * There is an editor for gani files named 'GraalShop.exe', you can set the file association in the windows explorer to make it easier to open gani files; but you can also edit gani files with text editor * Syntax: setani <aniname>,param1,param2,...; setcharani <aniname>,param1,param2,...; Example: setani walk,; sets the walking animation defined in walk.gani. A gani contains informations about sprites and where to put them in which frame. The gani format: 1. Starts with some control commands:
* SPRITE 0 SPRITES 0 0 24 12 shadow => sprite_index image_file x y w h description this defines a sprite * sprite index: is import for the animation part of gani file which will be described later; each sprite must have an unique sprite index * image file: can be * BODY HEAD HORSE SHIELD SPRITES PICS (those images will taken from the current player), * PARAM1, PARAM2, ... (are set with setani/setcharani), * myimage.png (direct filename) * x,y,width,height: describe which part of the image should be drawn * description: only for the gani editor * DEFAULTPARAMxxx newsword.png - tells the gani editor which image should be used for PARAMxxx (it can also be a number when you want to use the parameter to give a sprite number to animations) * COLOREFFECT 20 1 1 0 0.99 => sprite_index red green blue alpha sets the alpha transparency / colors for the sprite * ZOOMEFFECT 20 5 => sprite_index zoom sets the zoom factor for the sprite * LOOP - loops the animation * CONTINUOUS - doesn't restart the animation when you call setani/setcharani again * SINGLEDIRECTION - all four directions use the same animation steps
2. It follows the animation in ANI ... ANIEND The animation normally contains 4 x animation_step_count lines of sprite defintions. Each line contains of a list of sprite positions: sprite_index dx dy, sprite_index dx dy, ... * sprite index: the defined sprite with the specified sprite index should be drawn (can also be PARAM1, PARAM2 etc.) * dx: horizontal difference to the player-x coordinate * dy: vertical difference to the player-y coordinate After each frame (which means 4 lines in normal animations and 1 line in a SINGLEDIRECTION animation) you can add following commands: WAIT <waittime> - repeats the last frame <waittime> times PLAYSOUND <soundfile> dx dy - plays a wav file from position (playerx+dx,playery+dy) (that defines the posititon where it sounds loudest); this actually works like the npc command 'play' so you can theoretically play midis or avis but that is not recommended
* See the existing gani files for examples, e.g. idle.gani for a very simple animation (it only contains one step) * The gani format has a lot of advantages: * it means less network traffic (because you can replace tons of showimg with one call to setani/setcharani) * you can do a lot more than with showimg * it's easier to make complex animations with it * in the online mode the player animations look less laggy because the animation continues even if the connection is slow * you can hear what other people do like they were playing on your computer because sound effects are included in the gani file * you can change the default player animations like dead.gani
files are now automatically downloaded again from the server when they have been updated on the server
wavs are downloaded from the server too
when weapon names start with - then you can't see them in the weapons list (might be good for system npcs)
new npc script variables playerhurtdx and playerhurtdy when the player is hurt (otherwise they are 0)
new npc script commands 'setgender' and 'setchargender' (paramters: male / female)
new npc script command setmusicvolume left,right; both values can be between 0 and 1
signs are dynamic now, you can use message codes like #n in the signs, unknown characters are drawn using a windows font; there is a new message code #K(action) which tell you the key names for the keys (0-up, 1-left, 2-down etc.)
head,sword,shield and body images are saved in the right folder (levels/heads, levels/swords etc.) instead of levels/webgifs
before you can drop items with S+A it checks if there is no wall in front of you
the npc script command 'stopsound filename;' works now
there is no error message anymore when you open a file by double-clicking on a .graal file in the windows explorer (file association)
the script command 'continue' works correctly in while-loops now
jumping into links shouldn't stuck you
invisible npcs are non-blocking
DirectSound and DirectDraw are dynamically loaded, when there is a problem with DirectDraw then the game gives you an error message and closes correctly
fixed a bug that happened when you do if (playerenters) setlevel <currentlevel>;
playerlist section 'Staff' instead of 'GPs', there you can also see LATs and FAQs now
1.411
when right-clicking on yourself (online mode) then you will see your own profile + stats
you can not pause in sparring rooms anymore
when entering a sparring level then the restart position will be updated (so you restart in the sparring level when you die)
ad animations are stopped when not visible
forgot to mention: there are script variables screenwidth and screenheight (pixels) for the visible area which is 640x456 by default; those variables are read-only
hidden players (script command hideplayer) are now visible on the map again; we might re-enable a real hideplayer thing again but not as long as people can cheat with it
Alt+1 now saves as png too (like Alt+2)
when you press M in the editor then the generated map will be saved as png; if you want to use it as map for your playerworld or for the setmap command then you need to convert it to 8 bit colors before using it in the game
1.41
shooting arrows only takes half the time
there is an ap bar under the ASD thing
a rating system for fights in sparring rooms; to make a sparring room you must add an npc with the script 'sparringzone' (no end line characters!) to the level; then the server will see that it's a sparring level and will not change your ap/money and will rate your fighting skills depending on who you kill and who kill you; when you press R then you will see the current ratings over the heads of the players; it shows rating + rating deviation; the rating deviation tells you if the player is fighting often, only players < 80 rating deviation will be listed in the graalonline.com top50; so if you see someone with a rating of 2000 and a rating deviation with 330 that means he only had one fight or so, so you can't really trust that he is a good fighter when you are in a sparring room you will see a white 'sparring' on the ap bar
new option in F1->General options: fullscreen mode; you can switch to 800x600 and 1024x768; you can get the screen size in npc scripts by reading 'screenwidth','screenheight' (in case you want to align a showimg stats image on the right side of the screen)
by right-clicking with the mouse on a player you will open the profile of that player; the profile now shows more stuff like the account name and sword power
the server message of the day can now be HTML
graal PMs and the server MOTD can contain the new tag <graalmsg>Hallo #n!</graalmsg> (the text inside the graalmsg tag works like with the npc script command 'message'); it is good for making a message which looks more personal
new npc script command showstats, with this you can show/hide parts of the status bar / game showstats 1+2+4+8+16+32+64+128+256+512+1024; shows all showstats 0; hides all the argument is a bit-wise flag set 1 - ASD 2 - icons (for rupees, bombs, arrows) 4 - rupees count 8 - bombs count 16 - arrows count 32 - hearts 64 - alignment (ap) bar 128 - magicpoints (mp) bar 256 - minimap (you can only hide it, you can't show it when the player pressed Alt+3) 512 - inventory npcs 1024 - players
npc weapons can't be deleted when their name starts with a * (e.g. toweapons *Boomerang;)
there is a new very good designed baddy image: baddyninja.gif from Ulrich Galbraith (Zancrus) (its the one who made some of the graphics for v1.0 like the frogs, baddies)
there are some new tiles for hourse corners and inside house corners
fixed a bug with negative rupees when dropping rupees while being in the bank
in online mode the positions of showimgs are aligned the same way like the player position; that way its easier to use hideplayer+showimg because you can align it correctly to the shadow of the player (which can't be hidden)
in online mode when you do showimg+changeimgpart it also works for bigger images now
the playerlist is sorted again when your nickname is changed (it needs to be updated because the guild might have been changed)
red gloves will be displayed correctly again
the default keys will be set/displayed correctly; this was a problem in older versions because e.g. in France you have the A key on a different position on the keyboard; in France it uses now QSD as the default keys for lifting/ sword/weapon
when you start Graal for the first time then the game will try to detect the local language automatically; because some languagexxx.txt files needed to be renamed you might need to change your language manually if you have already played
'playersays' works correctly now, but keep in mind that its not supported anymore, better use strequals(#c,...)
fixed a little bug with head icon transparency in 32bit
showname / ap changing doesn't delete your chat text anymore
1.4
new starting window It should be simpler now, when you select 2/3/4 player mode then you can choose the player to change by clicking on the little head icon right to the character selection box; You can also set the nickname separately for each character in 2/3/4 player mode; The account name/password thing was moved to the server list
server list window When you select 'One Player (online)' as game mode then you will see a server list window that will load a server list from www.graalonline.com and display it in a list; When you click at an entry then it will show you some informations about that server (language, version, homepage etc.); On the lower part of the server list window you see the edit fields for account name and password; click on 'Connect' to connect to the selected server; When you play then you can always open the server list window again by pressing F8 (it will refresh the list automatically)
password are saved separately for each account name
new option 'don't save passwords' in the options window (F1->General Options)
new pk tag system: when having less than 40 alignment points (showap) then you can't increase your power; when you die then you will get 3 hearts back when ap<20, 5 hearts when ap<40 and full power when you die while ap>=40; when you kill someone then your power will decreased by (yourap/20+1)*(otherap/20); when ap<20 then your ap will increase every 30 seconds, when ap<40 then every 2 minutes, ..., when >=80 then every 30 minutes (no 90 ap limit anymore)
There is better pk recognition: When you kill someone with bomb/arrows/fire/bushes then it will count as player-killing too
New script stuff * New command: changeimgvis index,drawingheight; changes the drawing height of a showimg image; possible values for 'drawingheight': * 0: like drawunderplayer * 1: like the player * 2: like drawoverplayer (default) * 4: on screen (the img will be drawn like the status bar, it will be drawn on the image (x,y) position); so you can make your own status bar thing with this command * When doing showimg with an image index not in 0..199 then it will only be shown local * setimg/setimgpart can be used instead of setgif/setgifpart * The 'in' operator is enhanced. You can now do things like: 1,2 in {1,2,3,4,5} - will check if 1 AND 2 are in specified array x in |0,64| - is true when 0<=x<=64 x in <0,64> - is true when 0<x<64 You can also combine those things, e.g. x,y in <0,10| - is true when 0<x<=10 AND 0<y<=10 * putexplosion2 bombpower,radius,x,y; for producing jolt bomb explosions (set bombpower to 3) * New command: setbody bodyimg; This is a nice command: with this you can change the body of the player, e.g. setbody body2.png (body2.png is included in v1.4, its from Antago, body3.png is from Loriel) You can also use the #8 message code to change the body img (setplayerprop #8,body2.png or setcharprop #8,body2.png); * npcs[index].attr and compus[index].attr can be changed
better hacking protection
explosion radius is limited to 15 (hack protection)
script command setlevel2 works with floating point values for x/y
you can lay down shields again
Because many people had problems with the music thing there are some things chanegd/optimized: * dynamic loading of mediaplayer (so when you turn off music support then it will not load it) * winamp support -> option 'use winamp for music'
1.392
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 Example:
if (playerenters) { myfunc(); 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
1.391
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
1.39
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
1.38
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
1.38
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 '*Stefan'
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); Example: 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, hearts,timeout,glovepower,swordpower,shieldpower,hurtdx, hurtdy,id,save[],dir,sprite,ap * 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 'true' * 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 anymore
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)
1.371
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 mode
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)
1.37
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 time)
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
1.36
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 (bomber@graalonline.com); here a short list of the new stuff (for more read npcprogramming.doc): bombs[index].x/y/power/time arrows[index].x/y/dir/dx/dy/type/from items[index].x/y/type/time explos[index].x/y/power/time/dir horses[index].x/y/dir/bushes/bombs/bombpower/type removebomb index; removearrow index; removeitem index; removeexplo index; removehorse index; explodebomb index; reflectarrow index; takehorse index; take2 index; lay2 itemname,x,y; takeplayerhorse; 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)
1.35
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 servermessage.rtf
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)'
1.341
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
1.34
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 healthy
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
1.331
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
1.33
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
1.324
added an option to handle DINPUT.DLL problems (see DINPUTDLLbug.txt for more)
reconnect works better
1.323
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
1.322
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
1.32
in no-playerkilling levels you can walk through unpaused players
Alt+1 works correctly without drawing npcs from other levels onto the screenshot
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 graalonline.com server anymore
when resizing the editor then npcs on the right side of the screen will be displayed
See Creation/Dev/Releases/NewFeatures2001A for rest