Creation/Dev/Releases/Client/4.03

From Graal Bible

Release date

December 20th 2005 on Windows, Linux and Mac

New features

Graal 3D

  • fixed several crashing bugs
  • fixed the player shadow
  • on Linux and Mac you can change the mouse sensitivity in the options now
  • readded the terrain detail textures
  • fixed saving of lightmaps (meaning reentering the server is faster)
  • improved the speed on Mac

Graal 2D

  • fixed microphone support on Mac; for changing the volume of the microphone you currently need to edit ~/.graal/graal4/graal4config.txt
  • added support for animated tiles (addtiledef with mngs/gifs)
  • fixed an addtiledef problem with overwriting tiledefs for single levels / group of levels (so that the Era mines don't have snow anymore)
  • "showscriptstats" chat command for showing the clientside script commands which take most cpu time
  • level.showterraingrid = true/false for showing the terrain grid like when you open a terrain gmap in the level editor
  • new F1 window (online only)
  • the F1,F3 and F5 windows can be closed by pressing the keys again
  • when sending a Mass PM then it is also adding the "Mass Message:" in front of them in the PM history
  • fixed a crashing bug with "else else" in old scripting engine
  • it doesn't remove your local guild tag anymore when you go on the login server and then the server where you had the local tag
  • on Windows it is now logging into graal4console.log, so you/we can easier find problems when the game is crashing
  • added player.platform variable (win,mac,linux) for new scripting
  • keypressed events now have 3 parameters: keycode, character, and scancode (independend from the players language, but are different for mac, so if you use the scancode then also let some mac player test it)
  • added a new pics1.png to the installers and to the levels pack (tile fixes made by haunter and others)

Particle Engine

  • emitter.emitautomatically = true/false - if you want the emitter to automatically emit particles or not
  • emitter.emitatterrainheight = true/false - if enabled then it will emit all particles at terrain height (+emissionoffset) instead of the z of the showimg
  • emitter.emitat({x,y,z}) - for emitting a particle at a special position without needing to modify emissionoffset
  • emitter.particletypes = number, emitter.particles[] - by increasing particletypes to 2 or more (default is 1), you can let the emitter emit different particles; you can access the additional particles by emitter.particles[1] etc.; emitter.particle is the same like emitter.particles[0]
  • emitter.dropemitter, emitter.dropwateremitter - those work exactly like the emitter itself (e.g. you can edit emitter.dropemitter.particle) and are used for emitting particles once a particle drops on the ground (rain drops) or the lifetime is over (for fireworks) - once a particle is dropping the emitter is calling dropemitter.emitat() to produce the drops; if there is a dropwateremitter and the particle was dropping on water then it is using the dropwateremitter for the drop effect
  • particle.sound - a sound file or array of sound files which is played when the particle is emitted, mainly meant for combination with the emitter.dropemitter

Dropemitter example (can be used for falling lava effects or so):

//#CLIENTSIDE
function onCreated() {
  with (findimg(200)) {
    attachtoowner = true;

    // Emitter attributes
    layer = 2;
    with (emitter) {
      delaymin = 0.1;
      delaymax = 0.3;
      nrofparticles = 2;
      emissionoffset = {0, 0, 10};
      checkbelowterrain = true;
      wraptoclippingbox = true;
      cliptoscreen = true;

      with (particle) {
        lifetime = 10;
        zangle = -1;
        speed = 4;
        image = "l_snowball.png";
        mode = 1;
        alpha = 0.01;
      }

      addglobalmodifier("impulse", 0.2, 0.2, "zangle", "multiply", 0.95, 0.95);
      addlocalmodifier("once", 0, 0, "rotation", "replace", 0, 2*pi);
      addlocalmodifier("once", 0, 0, "angle", "replace", degtorad(200), degtorad(260));
      addlocalmodifier("once", 0, 0, "x", "add", -100, 100);
      addlocalmodifier("once", 0, 0, "y", "add", -100, 100);
      addlocalmodifier("once", 0, 0, "speed", "replace", 4, 8);
      addlocalmodifier("range", 0, 1, "alpha", "replace", 0.01, 1);

      with (dropemitter) {
        nrofparticles = 10;
        with (particle) {
          lifetime = 1;
          image = "l_snowball.png";
          mode = 1;
          zoom = 0.8;
          zangle = 0.5;
          sound = "walk_snow.wav,,,,,";
          spin = 4*pi;
        }
        addlocalmodifier("once", 0, 0, "angle", "replace", 0, 2*pi);
        addlocalmodifier("once", 0, 0, "speed", "replace", 3, 6);
        addlocalmodifier("once", 0, 0, "rotation", "replace", 0, 2*pi);
        addglobalmodifier("range", 0, 100000, "zangle", "add", -2, -2);
        addlocalmodifier("range", 0.5, 1, "alpha", "replace", 0.99, 0);
        addlocalmodifier("range", 0.4, 1, "zoom", "replace", 0.8, 0);
      }
    }
  }
} 

Revisions

Revision 2

December 30th 2005

Updates:

  • UDP is disabled by default now, but it is automatically enabled when you want to use the microphone (since UDP is currently required for using the voice chat in Graal); UDP can speed things up for you in the game (less lag when seeing other players moving), but it is often not working for people so it's now disabled by default, can be reenabled by the player
  • fixed copying of text (Windows)
  • fixed the keyboard-remap-thing in the options window (Linux)
  • when pressing up/down in the chatbar then it is not showing the selection anymore (it was highlighting wrong text)
  • reconnecting to the login server doesn't mess up the F8 window anymore
  • npc.canbepulled on clientside works correctly now (although its deprecated)
  • fixed crashing problems when classes are updated
  • removed the buggy GuiMenuBar and added a new control: GuiMenuCtrl; it is quite simple to use, you add menus with addMenu(menuname) and can then access the menus by menus[index], each menu is a GuiTextListCtrl, so you can add menu entries with menus[0].addrow(id,menuentrytext) etc.; here an example:
//#CLIENTSIDE
function onCreated() {
  addGuiControls();
}

function addGuiControls() {
  new GuiWindowCtrl("MenuTest_Window") {
    profile = GuiBlueWindowProfile;
    x = y = 0;
    width = height = 200;
    canmove = true;
    canmaximize = true;
    canminimize = true;
    canclose = false;
    text = "Menu Test";
    
    new GuiMenuCtrl("MenuTest_Menu") {
      profile = GuiMenuBarProfile;
      x = 5;
      y = 24;
      width = 190;
      height = 20;
      horizSizing = "width";
      setIconSize(16,16);
      
      with (addMenu("File")) {
        icon.drawimagestretched(0,0,16,16,
          "mud_apple.png",0,0,32,32);
        clearRows();
        addRow(0,"Hello");
        addRow(1,"Close"); 
      }
      with (addMenu("Edit")) {
        icon.drawimagestretched(0,0,16,16,
          "mud_stone.png",0,0,32,32);
        clearRows();
        setIconSize(16,16);
        with (addRow(0,"Hmmm")) {
          icon.drawimagestretched(0,0,16,16,
            "mud_loaf.png",0,0,32,32);
        }
        addRow(1,"Ok Dokey Schlokey");
      }
    }
  }
}

function MenuTest_Menu.onSelect(menuname,selid,seltext,selindex) {
  echo("menu selected: " @ menuname @ " - " @ selid @ 
    " - " @ seltext @ " - " @ selindex);
} 

Basicly you only need addMenu and addRow, but the example also shows how to use icons and such. I have attached the 3 images required for this.

  • Alt+4 displays the incoming and outgoing data (in bytes/sec)
  • Alt+5 displays the fps (frames per second) in Graal 3D (in Graal2D there are always 20 fps)

Revision 3

January 6th 2006

Updates:

  • Fixed disconnection problems when enabling UDP
  • Message boxes (like admin messages) now use the blue profile
  • In the options window you can choose from different refresh rates for each fullscreen mode (e.g. "1024x768 (100 Hz)")
  • Scripting: the emitter.clippingbox and emitter.wraptoclippingbox options are working now on the stats/GUI layer
  • New options in the playerlist: you can let it show the account names of people instead of the nickname, and you can disable the display of buddies which are on other servers
  • Fixed some problems of flickering text when using the bitmap fonts; if you still get that problem then please check if you see error messages in the F2 window
  • It is not displaying an error anymore when the server has no 'basepackage.gupd' (download packages)
  • Loading of tiles when entering the server has been improved, before it was sometimes not finding the tiledefs file and was showing bad tiles when entering the server

Revision 4

January 20th 2006

Engine updates:

  • Major compatibility fixes for Intel graphics cards like 82810, so things like bitmap fonts, minimap icons and particle effects should work now
  • When having a big screen and watching a single level then the right border is correctly drawn now (black) instead of showing graphic artifacts
  • weapon scripts are cached with their full name (see bug report from Rick)

Scripts:

  • you can directly write to player.ani and npc.ani, also you can access player.aniparams and npc.aniparams; when you set the ani then aniparams is replaced too
  • clientside join works now, the only thing that is not working is that oncreated is not called when the class is not loaded yet; don't forget to restart gserver and npcserver to make this work
  • improved TStaticVar for reading and writing variables from file
  • added script functions obj.savevarstoarray(sort) and obj.loadvarsfromarray(array)
  • added more documentation to the script functions (Graal4.exe -listscriptfunctions)
  • findareanpcs(x,y,width,height) works correctly now on clientside

Revision 5

January 23rd 2006

Changes: Graphics engine (Windows):

  • Improved initialization of textures to make it work on more graphics card
  • When there is no hardware graphics acceleration the game continues to work but displays a message in the F2 window
  • Several errors that were spamming the F2 window before only display one time now (like 'Error drawing image bubble.png')

Installer (Linux):

  • It's installing the offline levels now, so offline mode should work now

Scripting:

  • Fixed findareanpcs(x,y,width,height) on gmaps on clientside
  • Improved support for projectiles with different gravity (this will not be enabled until v2 is disabled though)