electron TODO/history file


algemeen:

- message systeem: er moet een soort algemeen message systeem komen
  voor client/server communicatie, vooral van server naar
  client. Voorbeeld: 'You have died'. 'You were killed by player
  %s'. Bij dit soort berichten moet een client die iets anders wil
  doen (een gruwelijke doodskreet afspelen... Wraak aan %s!) geen text
  string hoeven parsen. Dus: algemeen systeem

  string-packet (code) (variables)

  code      = message identifyer
  variables = variabel aantal parameters, string of int
  
  Dit kan bijvoorbeeld in een system message gebeuren, waarbij je de
  string dan codeert om meerdere parameters te bevatten. (gescheiden
  door een bepaald teken of zo) Messages met alleen numerieke
  parameters kunnen simpeler: in een command packet bijvoorbeeld
  waarin je 0-4 getal parameters mee kunt geven.

- kaartparser moet opletten of er comments zijn 'weggeparst'.
  De mapeditor kan een waarschuwing geven: de variabele
  'comments_eaten' (server/parser/tools.h) bevat het aantal opgevroten
  comments. 

- Mapeditor
   - del functie (belangrijkst) (lattice->clear, storage->lowlevel_remove,delete_electron_recursive)
   - change type of current room.
   - dingen aan menu hangen
   - mechanisme om dingen neer te zetten maken
   - backup systeem?
   - dingen weghalen kan nog niet

- Net:
 - Winsock versie van Plug schrijven

- Common:

 - er zit (zat?) een fijne bug ergens in de netwerk code. Kan
   eventueel aan kernel 2.4.2 liggen: dit is niet zeker. Soms klapt
   opeens de client eruit, je krijgt dan de melding 
   `Read error in Plug' uit packet: plug::read heeft < 0
   geretourneerd. Een aantal malen kregen we error code 104 (met een
   abort statement erbij) in plug::read : 

#define ECONNRESET      104     /* Connection reset by peer */

   Deze trad voornamelijk op als in de client cntrl-alt-end werd
   gebruikt, maar we hebben hem ook gezien bij escape (gewoon
   uitloggen dus) en waarschijnlijk is het de zelfde bug als hierboven
   vermeld. Verder zoeken als het meer optreed!

   10-2-2002 : ja, het treedt weer op. echter alleen in het eerste
   half uur dat we bezig zijn. Plug::read is nu volgezet met asserts,
   en er is een extra clausule ingebouwd (met can_read) zodat ie maar
   1 keer (na 0.1 sec) opnieuw probeert een half pakketje verder te
   lezen. 

   Een deel van de read errors is nu verdwenen: bij het afsluiten
   ontstaan ze niet meer. Als je de client doodschopt nog wel, maar
   dat hoort. Je krijgt dan ook _altijd_ de melding over error 104 te
   zien.

   De mysterieuze bug is nog niet gevonden.

 - Als er nog meerdere soorten (non-weapon) keys komen: Doorkey en
   andere varianten afleiden van 1 gezamenlijke baseclass.
 - als er nu nog timeouts optreden bij levende connecties moet
   uitgezocht worden of de timeout waarde omhoog moet.
 - server en client moeten checken of functies die gewijzigd zijn (zie
   DONE 11/12-4-2000) nu error codes teruggeven. meest belangrijk:
   check of packet->read_from(Plug) en varianten de Packet->err
   variabele gezet heeft! ongeldige pakjes kunnen gewoon voorkomen.
   gedeeltelijk al gedaan. (atom::add verbetert)
  - !!!!!!Fork class : gooit object weg (delete_object) als er
   geen lijsten in zitten, om te voorkomen dat je dingen kwijtraakt 
   (memory leak) dit is wel wat gevaarlijk als we Fork ooit voor iets
   anders gebruiken. 


- Client:
  - get from implementeren, ala put in
  - soundrenderer
    - evt doppler dingen
    - flip stereo optie maken, want allegro's flip-pan is wat onbetrouwbaar
  -laser moet mooier
  - renderer: static objecten moeten states krijgen. (denk aan door)
    zodat ze verschillende plaatjes kunnen tonen afhankelijk van de state.
  - setup_connection moet nog iets doen met de returnwaarde van init_renderer.
    plan is om de renderer default textures te geven als hij z'n data niet kan laden.
    (kan dan dus niet fout)
  - alle //! markeringen langslopen
  - setup_textures moet textures niet met een index vinden, maar met een naam
    zoeken in de datafile , dan is de volgorde en versie in de datafile niet zo belangrijk meer
    dus eerst file laden en dan in geheugen de namen scannen
  Niet zo belangrijke dingen:
  - ping afmaken
  - alle pakketjes gaan interpreteren (doe ik volgens mij al)
  - alle commando's uitwerken         (doe ik volgens mij al)
  Langstaande dingen:
  - speler verdwijnt soms -> probeer systeem te ontdekken (al heel lang niet meer gezien
  weer gezien op 9-dec-2001: aan de onderzijde van de kaart een stuk
  of 10 kamers lang, en aan de rechterzijde als je er tegenaan 'botst'
  heeeeel eventjes.)
  
- Server:
* belangrijk
  - scenery object maken
  - random kaart genereren + opslaan (evt in mapeditor?)
  - rondrijdende 'janitors' die dode spelers etc op komen halen
    idee: racende ambulance die eerst naar je toe komt (even wachten)
    en je dan naar de startpositie terugbrengt. als ie het niet kan
    vinden gooit ie je er uit.
  - aanroepen overgebleven triggers (inventory changes, explode, die)
  - spam controle: maximum aantal gebufferde commando's
  - put in / get from commando's testen (put in werkt al)
    mogelijk maken om dingen in een kist op de grond te doen
  - ping maken
* minder belangrijk
  - startposities in de kaart (lijst van maken)
  - meer game types bedenken
  - server-server bouwen
  - invisibility - hoe? idee: is_invis(Electron *) functie in Electron
    maken die je kunt overloaden. op die manier hoeven alleen objecten
    die invis *kunnen* worden die functie te hebben.
    - hoe zorg je dat de client invis objecten niet krijgt
    - hoe hou je bij welke spelers het object kunnen zien? dit is met
      bovenstaande suggestie (denk aan mine) op te lossen door alleen
      voor de 'owner' (intern opgeslagen) zichtbaar te zijn.
  - server routines nakijken op overbodige if's, ASSERT gebruiken
  - garbage lijst: misschien een dead() functie schrijven ipv clear
    gebruiken. dit is netter ivm het feit dat clear een soort
    destructor is. die functie moet dan het dead vlaggetje zetten en
    ook alle pointerverbindingen wissen en zo. Je voorkomt daarmee dat
    clear 2 keer achter elkaar wordt aangeroepen.

?- uitgebreid testen van de netwerk functionaliteit (bijvoorbeeld
  maximale stringlengte)

9-2-2002
Server
X - tank en slauncher hebben nu ook een fire_at functie die de atom
    van het target opzoekt en daarop mikt.
X - safe room
X - weaponmachine: spelers worden nu _in_ hun voertuig geplaatst, en
    alleen in kamers waar het voertuig in kan. In een hover kun je dus op
    water terecht komen, anders niet.
X - plug: bij niet genoeg lezen wacht de plug nu 0.1 seconde,
    vervolgens wordt error geretourneerd. dit kapt telnet connecties
    effectief af.
X - onbekende connecties (telnet) worden nu herkend en geweigerd.
X - pakjes met errors worden nu correct afgehandeld, ook tijdens de
    inlogprocedure.
X - player object wordt nu pas tijdens de inlogprocedure aan een user
    toegekend, in de handshake. Pas op: nadat het player object
    toegekend is _moet_ de hangup functie gebruikt worden, je mag niet
    meer zomaar user->state op SHAKE_HANGUP zetten!
X - bomb shop: check op ammo_pad ipv weaponsmith: je kunt nu alleen
    rig doen op de weaponsmith ipv op een pad er naast.
X - game crasht als je in een active game (tag of twoteam) de dummy
    player die geen user heeft, doodschiet. hier moet het eigenlijk
    tegen kunnen... of je moet verbieden dat players in de map geladen
    worden. Spelers kunnen nu ook geen damage meer krijgen van mijnen:
    alleen voertuigen beschadigen nog in een tag game.

Client:
X- shoot met 1 argument moet COMMAND_FIRE_AT gaan gebruiken ipv zelf coordinaten berekenen
X- shoot met 0 argumenten moet crosshair geven
X- debugfuncties gemaakt (bugserver stuff)
X- soundrenderer now has stopped list for stopped voices
X- graphics gemaakt

Mapedito:
X- commandline functie om map te laden

9-12-2001

Server
X - exploderen van laserbeams nalopen, dat moet anders:
    de client moet ze anders tekenen. Het lijkt nu goed te werken,
    misschien nog een keer nakijken.
X - bomb-shop commando maken voor weaponsmith voor self-destruct van
    vehicles
X - andere game elementen afmaken: weapon machine.
X - (game clock foolproof maken), en vote resultaat meenemen. 
X - server kan nu de kaart uit de ingebouwde data dir lezen of van een
    absoluut pad. map namen zonder / erin worden uit de ELECTRON_HOME
    gehaald, gebruik ./naam voor de huidige directory.

X- algemeen:
   configure script werkt, hoewel de waarden in config.h nog niet worden
   gebruikt.

   make install werkt nu ook, en het pad wat aan configure --prefix= wordt
   meegegeven wordt gebruikt en ingecompileerd als datafile path

X- client
  - lasers tekenen


13-10-2001

Server
X - Game / Clock : game duration instelbaar in tabel, game.cc
    een en ander werkt nu ook: countdown en countup tijd instelbaar in
    clock.cc (10 seconden nu), na countup begint de game. 10 seconden
    voor het einde komt een waarschuwing en na 10 seconden eindigt het
    spel. 
X - eventlist.cc: Eventlist::tick() aangepast. Deze lijst traversie
    was niet fool proof: er konden zowel elementen uit de te traverseren
    lijst weggemikt worden terwijl je bezig bent, als dat er nieuwe dingen
    toegevoegd konden worden: add_event werd aangeroepen tijdens
    fire(). Dat lijkt niet erg maar is het wel: add_event doet ook een
    lijst traversie over de eventlist, en verplaatst de cursor van
    eventlist! Een en ander is nu opgelost door de te behandelen
    events (when <= clock) te selecteren met List::filter, en 'deleted'
    events te markeren en achteraf met List::filter te wissen.
    Hiervoor was het wel nodig om consequent set() en clear() in alle
    events te plaatsen.
X - Fusebox omgebouwd: heeft nu een init functie ipv. constructor met
    argumenten. Server accepteert nu -p <port> als commandline
    argument. Een en ander synchroniseren met Jacob's Fusebox versie,
    en proberen Jacob deze wijziging ook door te laten voeren.
X - Commando 'COMMAND_GAMETIME' toegevoegd. Geeft nu via een message
    de gametime (timer, duration & time left) door. Dit moet via een
    toekomstig algemeen message systeem verstuurd gaan worden.
X - Klein foutje in do_vote verbetert. Vote laat nu ook het totaal
    aantal uitgebrachte stemmen zien (en berekend ze correct).

X - CLient
  - soundrenderer
    - bij het opstarten een tabel met symbolic names vullen met pointers naar de samples
      met behulp van datafile names, zodat het opzoeken later niet meer hoeft,
      maar ze toch op naam uit de datafile worden gevist.


9-06-2001

X - makefile dependencies afmaken: zie server/makefile. actors
    directory is nog niet af, client en common en anderen moeten ook
    nog. Vooral actors is lastig: de actors.inc file moet nu zonder
    paden en extensies.

    fixdep.pl en new_actor.pl verhuisd naar scripts/
    directory. new_actor.pl is aangepast aan het nieuwe makefile
    systeem met dependencies.

Server:
X - votemachine gemaakt. doet verder niks, maar je mag alleen stemmen
    bij de vote machine, en in een vote room.
X - gameclock gemaakt. Een en ander is nog niet foolproof: controleer
    op randgevallen! (onder andere spelers die halverwege het
    inlogproces inloggen..)
    volgorde van aanroep:
    - start_tag_game
    - game->announce
    - new_clock
    - game->clock->start
    - new_game_event(Game_event::START)
    - fire: game->start, new_game_event(WARN)
    - fire: game->warn, new_game_event(STOP)
    - fire: game->stop

12-05-2001
Server:
X - methode bedenken (voting machine dus) om netjes verschillende
    games te starten. Zie vote.cc. Spelers kunnen nu met het 'vote'
    commando stemmen op een game type. alias moet nog systeem alias
    worden. 
X - makefile dependencies gemaakt, begonnen tenminste. script
    server/fixdep.pl aanroepen op net gegenereerde dependency file om
    het pad goed te zetten: bv 
    'gcc -I.. -MM events/bla.cc | ./fixdep.pl events/'
    fixdep.pl heeft geen argument nodig als de c file in de huidige
    directory staat.
X - spelers een vlaggetje geven 'in game' zodat je ze kunt markeren
    als 'niet meer actief in dit spel'. Anders kun je geen onderscheid
    maken tussen spelers die nog rennen en spelers die er uit
    zijn. Aan wel/geen team kun je zien of ze uberhaupt in het spel
    meedoen.
X - two team game afmaken; verplaatsen van dode spelers, score
    bijhouden, game laten ophouden als er niemand meer over is
X - tag game laten ophouden als er niemand meer over is (niet alleen
    als het ene team leeg is) en eventueel mensen uit het spel halen
    als ze doodgaan.

Client:
X- tile_size naar de texture datafile verplaatst
X- client zo gemaakt dta hij ook daadwerkelijk een andere tile_size dan 64 aan kan
X- losse dir electron_data gemaakt met scripts om de datafile te genereren
   voor verschillende tile_sizes
X- ververst de client de huidige regel text iedere zoveel seconden?
    da's niet handig als je aan het terugscrollen bent. Kan dat onder
    een toets (^R of zo)? . fixed.
X- client: move timer (mag ik al weer lopen) wordt niet gereset als je
    opnieuw inlogt. daardoor doen de pijltjestoetsen het dan niet.
X- pickup (geen argument): escape logt uit ipv window weg.
    als je dan weer inlogt staat het window er nog steeds: weer pickup
    (window blijft), enter -> window weg

X- datafile gesplitst in een sound gedeelte en een gfx gedeelte

??-??-2001



Server
X- assert failed als speler doodgaat: er is geen game
   maak een default 'no-game' dat dat soort dingen afvangt en
   actief is als er geen ander spel gaande is.

2-3-2001

Server
X- Vote_room actor gemaakt: kamer type (safe) om te stemmen en om
   dooie spelers naar te verplaatsen. Tevens constructie gemaakt in de
   parser om een 'vote' tag te kunnen lezen, net als het startpunt. Er
   mogen wel meerdere vote rooms in een kaart zijn, maar er is maar 1
   'reset punt'. Het is aan de kaart bouwer om geen losse vote rooms
   te laten slingeren.

Common
X- lattice aangepast voor vote point
X- new_actor.pl 'ALLOW_FREELIST' verwijderd

28-2-2001

Eindelijk weer eens verder:

Server
X- Twoteam game gemaakt. Recht toe recht aan, 2 teams, een om een
   spelers verdelen. Nog niet af: eindconditie is er nog niet. Dit kan
   op 2 manieren opgelost worden, 1) gameclock loopt af, 2) vlaggetjes
   bijhouden wie er nog in game zijn en als er nog maar 1 over is
   stoppen. Beide zijn nodig. Verder moeten spelers bij doodgaan niet
   naar het reset punt verplaatst worden, maar naar de voting area (of
   zo) en uit het actieve game gehaald worden. Dit geld ook voor Tag.

X- Nogame game gemaakt. Deze wordt actief zogauw het spel start
   (globals.cc) en zogauw een ander game stopt (game.cc : stop). Dit
   game vangt damage af (via return waarde van game->damage_player) en
   doodgaan (via return waarde van game->die_player). Dat werkt nu, en
   geeft een bericht voor de duidelijkheid.

26-11-2000

X- het hele project in CVS gezet, eindelijk :-)
   CVSROOT op /home/files/cvs
   in CVS gezet met commit
   files ophalen (uitchecken) met cvs checkout of cvs update
   files inchecken met cvs commit
   cvs release kan de locale kopie verwijderen.

Server
X- Game gemaakt: baseclass voor verschillende game types
   eerste afgeleide gametype gemaakt -> Tag voor tikkertje spelen.
   nog niet af: score bijhouden van Tag is nog niet zinnig (vereist
   een score per speler, niet alleen per team). Controleren of het in
   alle gevallen wel goed gaat! (doodgaan, damage krijgen)

Common
X- ALLOW_FREELIST overal weggehaald en in plaats daarvan de default
   van allowed_in_freelist van electron op 1 gezet, stond op 0.
   als je nu wilt dat een electron (of object algemeen) NIET in een
   freelist mag, dan moet je allowed_in_freelist overloaden en 0 laten
   teruggeven.

22-10-2000

Server
X- user array vervangen door array van User pointers
   set, clear, init en exit functies naar behoren aanpassen

16-10-2000

X- static lists verwijderd uit de code: dit werkt niet samen met de
   reference count in object <-> list. Als alternatief kunnen we lists
   in een freelist stoppen om het aanmaken van tijdelijke lists te
   versimpelen.

X- aantal pakjes limiteren dat in 1 gameloop verstuurd wordt uit de
   send_queue, om te voorkomen dat de client hoteldebotel gaat.
   moet in de send_queue en niet in de kaart-stuur-routine, want de
   kaart sturen moet in 1 keer, anders verandert ie halverwege. de
   send_queue houdt zijn volgorde, dus daar is het niet erg.

X- operatie Fork:
  - martijn maakt Fork: een container met lists erin, die ook weer
    afgeleid is van list. Fork wil alleen maar Packets opeten met
    Push, alle andere functies geven een fatal. 
  - Fork dupliceert packets die gepushed worden, met behulp van
    functies als 'new_packet_command(Packet_command *other)'
  - de functies 'send_queue_packet' (global) en 'packet_to_queue'
    hoeven in principe niet aangepast te worden zolang ze alleen maar
    'push' gebruiken.
  - de server moet bij het inloggen van een user diens sendqueue in de
    fork hangen, en bij het uitloggen er weer uit halen.
  - optionele optimalisatie: in plaats van het dupliceren van packets
    kan ook in Object een reference count worden bijgehouden als een
    object aan een list wordt toegevoegd.

07-10-2000

Server
X- ammo_pad afgemaakt: hij triggert nu op binnenkomende wapens en kan
   hover, tank en launcher herladen.
X- tank heeft nu ammo, en stuurt zijn variabelen over naar de client
X- hover stuurt variabelen nu over naar de client

Client
X- plaatjes gemaakt voor weaponsmith en ammo_pad

03-10-2000

X- makefiles: een actors.inc makefile maken waar alle actors in staan.
   dan met een regel als:
    
	    actors/obj/%.o: actors/s%.cc 
   en	    
	    actors/obj/%.o: actors/c%.cc
	
  de client en server makefiles aanpassen. Common kan gewoon gelijk
  blijven. Het new_actor.pl script kan die actors.inc dan ook
  automatisch bijwerken, 1 actor per regel. # END_OF_ACTORS aan het
  eind laten staan: new_actor.pl heeft dat nodig!
  Er zijn een paar dummie files aangemaakt in common/actors,
  client/actors, server/actors. Deze zijn leeg maar zorgen er voor dat
  alles wel gewoon bouwt. Dit is nodig omdat common wat extra classes
  heeft (vehicle, room enzo) en client en server hebben (s/c)new_act.cc

02-10-2000

Server
X- baseclass Spad gemaakt voor Pads (virtual afleiden!)
X- Rvfunc nu als virtual baseclass gemaakt (reinterpret_cast
   gebruiken)
X- Weaponsmith gemaakt
X- Ammo_pad bijna af

Common
X- delete_electron_recursive gemaakt

Mapeditor
X-  kan nu cur_coom_type uit het menu kiezen

27-09-2000

Server
X- Ambulance afgemaakt, in combinatie met Medical_pad.
   Alle pads moeten afgeleid worden van Pad. Routeplanner wordt nu
   aangeroepen met een callback functie zodat de ambulance water
   vermijdt en liever niet door deuren rijdt.

25-09-2000

Common
X- Electron heeft nu een virtual functie map_finish() die aangeroepen
   wordt nadat het electron is geladen uit de kaart. Handig om je
   inventory bij elkaar te rapen in Repair_vehicles, etc.

Server
X- Ambulance geschreven. Afgeleid van Repair_vehicle. Repair_vehicle
   afgeleiden moeten in de server variant (Sambulance) tevens afgeleid
   worden van Rvfunc, en deze initialiseren in hun constructor. Met
   behulp van een Repair_event kan de pulse() functie aangeroepen
   worden om de zoveel tijd. 

X- Rvfunc klasse bevat functionaliteit voor Repair_vehicles om 
     - te bewegen (state machine)
     - nieuwe routes te zoeken met behulp van Routeplanner
     - in en uit te pakken

Algemeen
- datafile: grootte van de plaatjes opnemen zodat we een versie met
  32x32 plaatjes (geanimeerd) kunnen maken ter beperking van de grootte.

- Mapeditor
   - buiten het menu klikken gaat nog fout.
   - muis werkt nu helemaal nie meer


15-09-2000

Common:
 Routeplanner geschreven, zoekt een route van punt a naar punt b op de kaart

Server
X- deuren afmaken: wat gebeurt er als de deur dichtgaat terwijl er
   iemand in zit. Nu komt die persoon vast te zitten.

12-09-2000

Mapeditor
X   - cursor (dummy player) moet nog bewegen.
X   ('graafmode', om lopend kamers uit te graven? of met selecteren)
X            JAAAAAAAAAAAA! :)  we dig it :>

Server
X- Water gemaakt (kamer)
X- Door gemaakt
X- Doorkey gemaakt, + verknoping met Door
X- open, close, lock en unlock gemaakt
X- bug in move_to_top gevonden: eerst naar de client het drop commando
   sturen en dan pas naar de server, anders is de parent * al
   veranderd.

11-09-2000

Common/Server
X- Lightcycle kan nu stuk. Hij verdwijnt niet maar is
   BROKEN. (int_var) Je kunt er dan niet meer mee rijden maar je mag
   hem dan wel oppakken om naar een garage te brengen.

09-09-2000

Server
X- garbage lijst maken voor dode electrons
   create.cc: garbage_electron en empty_garbage functies
   aangeroepen vanuit destroy_electron en game_loop

X- het afvuren van Vehicles via de Key is niet meer mogelijk als je
   niet in het vehicle zit. (afstandbestuurde tanks en hovers :)

X- text aangepast bij zelfmoord: je krijgt nu geen kill meer als je
   jezelf neerschiet.

07-09-2000

Common
X- translate_types array uitbreiden met permissions array informatie
   : gedaan. functies init_permissions en shutdown_permissions
   gemaakt.

Server
X- werking van Shover::lay_mine controleren en testen
   eea werkt nu: do_lay_mine geschreven en het DO_LAY_MINE commando
   toegevoegd. lay mine werkt nu kortaf alleen uit een hover. 
   extra mogelijkheden toevoegen in do_lay_mine (server/fire.cc)

04-09-2000

Mapeditor
 - probleempje met allegro's menu functies
   als je een menu aanklikt staat alles stil:
   oplossing -> allegro's gui.c, guiproc.c menu.c kopieren en
   aanpassen, evt tergugleveren aan allegro.

   nodig: -een manier waarop een object de input kan claimen
          -ook een MENU_PLAYER systeem maken

   niet opgelost, maar even een d_mymenu_proc geschreven die
   de boel stil zet zodra je een menu aanklikt

Server
X- trigger enter en leave worden nu aangeroepen
   Enter_event gemaakt om pas bij aankomst in de kamer de enter
   trigger af te laten gaan en niet meteen
X- mine ontploft nu goed
X- Splayer::die, die_player aangepast om geen crash te veroorzaken als
   de killer pointer NULL is. (warning en message gebruikten killer
   voor ophalen van naam en score)
X- werking van Shover::fire_at controleren en testen
   Het werkt nu, na wat aanpassingen. Source en target worden nu echt
   gezet zodat de client ze ook krijgt.

14-08-2000

Server
X- Shover::fire_at uitgebreid en aangepast. Hover_event doet nu
   recharge van de batterij en ook een reset van de reloading
   vlag. Dit moet eventueel nog aangepast worden met een los event om
   reloading te resetten.

Common
X- Electron is nu afgeleid van Trigger. Virtuele functie prototypes om
   te overloaden in server actors. Aanroep van trigger functies moet nog!

Client:
   -renderer->overlay_bitmap() toegevoegd
   -init heeft nu een extra parameter om aan te geven of het om
    de client of de mapeditor gaat (wordt gebruikt in cmdline)

Mapeditor:
   -begin gemaakt met dialoogcode
   
08-07-2000
X- sed leren gebruiken. event, eventlist, list, object moeten met een
   hoofdletter beginnen.


07-07-2000

Common
X- drop/pickup geven actor_id's (4byte) door in arg1 en arg2 (2 byte)
X- put/take (om iets ergens in/uit te doen)


Client:
X- parser: alias moet default alle argumenten doorgeven, en de alias-expander moet niet zeuren
    als een alias te weinig argumenten krijgt
X- commando history moet !12 (met meer dan 1 cijfer) snappen
X- console moet breedte instellen afhankelijk van font

06-07-2000

Common
X- TRACE macro gemaakt a la allegro: gebruikt warning

Server
X- overbodige spam uit map parser verwijdert
X- spider maken (buggy of zo) : hover (kan mijnen laten vallen)

Client
X- console wordwrap -> afhankelijk van het font
X-ppe mipmaps (niet veel resultaat)

05-07-2000

mapedit utility asc2map gemaakt, die ascii kaart met 'r' voor kamers en
's' voor startpunt omzet naar niew map formaat

Client
X- cons_gets moet het spel niet stil leggen (doet het dus nog wel,
   maar wordt niet meer gebruikt)
X- state machine in controls.cc + callbackfuncties etc om te zorgen dat
   het spel doorgaat tijdens het wachten op invoer
X- keybinding, alle toetsen behalve pijltjes, ctrl-pijltjes enter,
   backspace en ctrl-u 
   zijn nu met bind_key geimplementeerd (en staan dus in de configfile)
X - variabele prompt
   
Server
X- kaart lees routines
   parser directory bevat de parser
   rules.lex en rules.par zijn respectievelijk lexer en parser regels
   tools.cc bevat alle hulpfuncties die vanuit de parser aangeroepen
   worden. 
X- nieuw kaart format is nu redelijk functioneel, inclusief inventory
   structuur (blokken) en sleutel referenties (tag en for keywords)

01-07-2000

X- Makefile aangepast, make veryclean haalt nu ook .bkp files weg

28-06-2000

X- beter mannetje getekend
X- launcher en balletjes getekend

- Common

X- in list.cc staat nu een check op dubbel gepushte objecten
   is daar wat *te* strict want bv in dirty_list van dfe client mag dat best
   misschien daar alleen een warning genereren ofzo
   in ieder geval kan die check (binnen #ifdef DEBUGXXX want sloom)
   wel in atom, waar nooit dubbele dingen in mogen
   (denk ook aan garbagelist)
   check staat nu aan met DEBUGLIST, behalve als je hem expliciet uit zet
   met double_push_allowed

-Client
X- renderer moet base class worden met pure virtual functies,
   waarvan renderer_ppe een afgeleide klasse wordt
X- geen interpolatie bij tijd 0 van de server
X- ctrl-u in console moet huidige regel leeggooien
X- set_num_var vergeet om actortypes te vertalen
X- n2id in parser moet zoeken in parent's inventory ipv atom
X- pickup-drop gaat nog fout (sleutel neerleggen in tank laat sleutel zien)
X- launcher en balletjes display objecten gemaakt
X- pijltjes moeten huneigen keyrepeat bijhouden afhangkelijk van het voertuig
X- commando history

- Server:
X- tank luik testen
X- put in / get from commando's maken (kogels in launcher)
   nog wel wat simplistisch: het werkt alleen als beide objecten
   in je inventory zitten. (of de container met daarin het andere ding)
   put iets_in_inventory into box_in_room werkt dus nog niet.
X- grenade damage aanpassen (andere grenade?): blue_ball, red_ball en
   yellow_ball gemaakt, met verschillende explosie eigenschappen
X- events opnemen in aparte directory, headers opgesplitst. (URGH!)
X- lightcycle damage testen (damage van lightcycle wordt nu gekopieerd
   naar cyclewall)
X- kill score testen. Player hp etc worden nu gereset als ie dood gaat

24-06-2000

- Client
X- display states voor objecten
X- state machines -> waarschijnlijk client classes (CTANK etc)

- Server:
X- messages added to permission functions
X- Launcher created
X- Score of dying and killing is now kept (test if it works)
X- Tank now has a hatch which can be closed
X- nog een ASSERT fout verwijderd: hangup mag geen send_q.destroy()
   doen maar moet delete_objects(&send_q) doen. Idem voor read_q.

-common
X- alle objecten hebben nu een functie allowed_inm_freelist
   die default true geeft, maar voor electrons default false,
   om te voorkomen dat per ongeluk niet afgeleide electrons
   (dus niet de S of C varianten) in de freelist komen

20-06-2000

- Common
X- weeres een bughunt dagje ;-)
   in object::~object zit nu een check dat je geen objecten die in een freelist
   kunnen met delete weggooit, en in delete_object( ) (de delete van het freelist systeem)
   zit een check dat alleen geldige objecten in de lijst worden gedaan die dat mogen
   dit gaf nogal wat verbouwingswerkzaamheden, met name in common, waar hier en daar
   globale en statische objkecten werden gebruikt, waarvan dan de destructor
   concludeerde dat ze in een freelist hadden gemoeten.
   dit heef een groot aantal gevonden bugs opgeleverd (niet leuk maar wel nuttig ;-)


- Server:
X- Server now sends 'still reloading' messages to the client
X- quitting now does move_to_top(player) first (drop items in room)
X- duplicate call of hot_potato removed
X- alle static objecten verwijderd (zie punt 1 common). storage en
   evl zijn nu pointers.
X- meerdere keys per vehicle
X- fire_at functie van tank maken: algemeen gemaakt mbv
   electron::fire_at die nu fire_to aanroept
   
-Client
  -Parser
   X-check recursieve aliases
   X- unalias
   X- aliases komen bij help, waarom?
   X- save aliases in configfile

   
  X- default player
  X- bug? in comm.cc als een electron werd weggegooit werd het
    direct weggegooit met delete_object, terwijl het toch zou moeten wachten tot
    de garbage_collect functie. Is verandered
  X- bug2? garbage collect gebruikte list->destroy, die negeert freelists
  X- bug3 : Atom::destroy deed ook list.destroy, is veranderd
     er worden nu nergens objecten weggegooid die een freelist index hebben
     

  
17-06-2000

-Client:
X- health laten zien op een of andere manier
X- speed blur
X- commandline option -nl (nausea_level) voor camera nauseatingness

-Server:
X- 'error' pakket maken om de client te laten weten dat iets niet
   werkt. Move foutmeldingen, schiet foutmeldingen, berichten als je
   vehicle onder je vandaan geschoten wordt.
X- cyclewalls kamers laten blokkeren 

13-06-2000
- Server:
X- REUSE_ADRESS wordt nu goed gezet: server blijft niet meer de poort
   bezet houden bij afsluiten.
X- explode functie van bullet / grenade doet nog niks
   hulpfunctie maken in bullet: iets als 'damage_all_in_room'
   deze kun je dan gebruiken in grenade->explode
X- check wat er gebeurt als je met een lightcycle over een tank rijdt
X- can_be_entered functies van lightcycle, room en tank controleren
   (keys)
X- bij het oversturen van de inventory structuur (hot_potato) ook
   turn commando's voor vehicles sturen om de initiele 'facing' goed
   te zetten.


X- rename tron dir to 'electron'
X- laat archive-tron het archief 'electron-xxx-xxx.tar.gz' noemen ipv 
   'tron-xxx-xxx.tgz'. tags.sh script aangepast.

-Client
X- parser 'functies' maken (niet zeker of nodig, misschien met default variabelen
    zoals mouse_x in allegro) is gedaan, functies hebben geen argumenten en geven altijd een
    int terug. wordt intern gebruikt voor dingen als 'vehicle' 'me' en andere
    variabelen die van de situatie afhangkelijk zijn
X-symbolic names ('tank', meaning the first tank found) (partially done)

X- foutieve animaties bij drop/pickup weghalen

07-06-2000

Server
X- die functie schrijven voor electronen
   dat was dus wat ingewikkelder dan het leek: overal checks toevoegen
   dat je niet packets stuurt over een electron dat niet meer bestaat.
   player->die() doet wat ingewikkelder: die stuurt een STC_YER_DEAD
   gevolgd door een HANGUP, en daarna gaat ie naar SHAKE_FINISH om
   zijn queues te flushen en dan naar SHAKE_HANGUP.
X- tank kan nu niet draaien als ie nog rijdt
   drive, turn en reload time weer normaal gezet
X- bij het inloggen van een speler worden nu niet alleen de electronen
   overgestuurd, maar ook de onderlinge inventory structuur. (hot_potato)

Client
  X- voeg verschillende console modes toe aan renderer (overlay, groot klein etc)
  X- parser beter gemaakt. system aliases gemaakt (zien er voor de speler
     uit als normale commando's maar zijn geimplementeerd als alias)
  X- beter detectie van dichtgeklapte link.
  X- interpolatie vervangen door dx/dy systeem (veel beter!)

Common:
 X- list::filter kan nu ook een NULL to-lijst aan
 X- electron heeft nu een 'dead' variabele die gezet wordt als een
    electron uit het spel in de freelist gaat.
   
30-05-2000

Common
X- electron werkt nu foutloos over een modemverbinding :)
X- plaatjes voor explode en grenade gemaakt
X- testen of de fire functionaliteit werkt (Tank->fire_to)
   werkt nu, vergeten om de grenade ook intern te moven, alleen de
   client kreeg een move packet maar lattice->move was vergeten.
X- uitzoeken waarom pakketjes niet heelhuids aankomen over een
   modemlink, kijken naar het gebruik van canWriteWait, en mischien
   naar de code die leest in een lus: het is mogelijk dat pakjes door
   tcp/ip worden gesplitst en in 2 delen binnenkomen. De server kan
   het sturen van de kaart indien mogelijk beter via de send_queues
   doen, zodat er 1 oplossing geschreven kan worden voor het sturen
   van grote hoeveelheden data. (kijk of je kunt schrijven, zoniet,
   doe het straks nog een keer)

   Het probleem was tweeledig: in plug::read werd niet in een lus
   gelezen zoals bij write. dit is dus WEL nodig. als de buffer vol
   raakt ligt de tcp/ip grens niet op onze packet grens, dus krijg je
   in eerste instantie een half packet binnen. Plug::read aangepast,
   en read_packet_static, en Packet::read_from (retry indien 0 bytes
   gelezen). 

   De client checkte niet op error vlag van packet: dit is
   toegevoegd. Blijf hierop letten, het is de enige manier om te zien
   of een fout opgetreden is bij het lezen van een packet!!

Client:
X-aliases in de command interpreter!

27-05-2000

Client
  X- rotatie van huidige hoek naar niewe hoek moet evt ook
    geinterpoleerd worden, in ieder geval voor tanks, over nadenken.
  X- simpele command interpreter gemaakt
  X- console 'smooth scrolling'
  X- dynamic lighting (sloom)
  X- 'stretched rendering'
  X- 8 bits colordept gerepareerd

X- nadenken over schietcommandos
   het handigst is waarschijnlijk om electron een algemen fire functie
   te geven. Weapon kan dan eventueel komen te vervallen (is nog wel
   handig voor is_group(weapon)). de server moet bij een fire commando
   dan zowel het wapen van een speler als het vehicle als de speler
   zelf (in die volgorde) proberen om af te vuren.
   *correctie*
   dit gaan we iets anders oplossen: als een vehicle moet kunnen
   vuren, dan moet het vehicle een key hebben met een fire
   functie. Key wordt standaard van het type weapon. Key roept
   vervolgens van het Vehicle de fire functie aan (1 van 3 varianten:
   fire_dir, fire_to, fire_player) en dat wordt dus de fire functie
   van electron. Als het vehicle zelf de respectievelijke fire functie
   heeft, wordt deze gebruikt, anders doet de default van electron niks.

Common:
  X- Tank_event kan nu ook reloading resetten
  X- Explode_event gemaakt
  X- grenade gemaakt
  X- explosies maken
  X- Electron heeft nu een fire_to, fire_dir en fire_at functie
  X- Key is nu een weapon en heeft een fire_to functie

Server:
  X- fire_to functie van tank afmaken
     (grenade maken, explosie maken, explode_event, reload_event)
  X- commando 'TURN' wordt nu ook geinterpreteerd
  X- Stank heeft nu een fire_to functie
  X- fire.cc: do_fire_to functie gemaakt, en distance functie

21-05-2000
Client:
  X- multistate display objecten maken (voor mannetje wat loopt/staat etc)
  X- pickup-drop wordt nu ondersteund door de renderer

20-05-2000
Server:
X- Tank geschreven. Het ding draait (COMMAND_TURN), rijdt, en heeft
   een sleutel. Plaatje gemaakt zodat er iets zichtbaar is.

Client:
X- hele renderer in een class gestopt om alles wat overzichtelijker bij elkaar te hebben
   renderer wat omgebouwd zodat het makkelijker is om evt een opengl versie ervan te maken
   console is nu onderdeel van de renderer

X- init_renderer staat nog verkeerd (in setup_map_stats)
    moet verplaatst naar na het antwoord van de speler of hij mee wil doen.
X- console wordt niet ge-update als de gameloop stopt ???
    (ik dacht dat message( ) ook de console 'flushte' , nalopen)
    (gekeken, doet ie dus niet meer (was ook niet zo mooi))


16-05

X-Client:
 X-ventilators gemaakt: probleempje nog in ppe met
 dubbelzijdige objecten . nu gemaakt door een spiegelbeeld versie
 er tegemover te zetten , maar die word nu per ongelijk gewist in
 decorate_pos(   )
 X- misschien in ppe bijhouden welke dingen bij elkaar horen in 1 building (yech)
  beter een betere decorate_pos schrijven

X-losse eindjes weggewerkt: kan nu resolutie/colordepth kiezen, de lijst met eerder gekozen
hostnames wordt bewaard, alle settings worden bewaaard, het kiesdialoog past nu in 320x200
overbodige clear() uit de renderloop gehaald

13-05-2000


Common
X- list aangepast: filter functie toegevoegd, copy functie toegevoegd,
   clearcopy functie toegevoegd. 
X- controleren waarom lightcycle::set_throttle 3 keer wordt
   aangeroepen. 2 keer is logisch (constructor, set) maar 3 keer?
   Dit wordt veroorzaakt door het static object wat in new_actor wordt
   aangemaakt. Als je 2 lightcycles maakt krijg je de melding 5 keer
   (2 keer per fiets plus 1 keer extra). Eventueel kunnen we nog wat
   optimaliseren door de constructors set() niet te laten aanroepen:
   dit gebeurt toch altijd al in new_actor. Het is ook niet erg want
   het gebeurt alleen als het object nieuw aangemaakt moet
   worden. (niet als ie uit een freelist komt).
X- kijken of en zoja waar write timeouts optreden
   waarschijnlijk in de client (server knikkert meteen de speler
   eruit). Als dit inderdaad voorkomt moet de timeout omhoog of we
   moeten kijken wat er misgaat.
   ze traden op als er een dode connectie was (client heeft connectie
   verbroken) en dat is nu gefixed. plug->read geeft nu ook een error
   als de connectie dood is : is sneller bij het afvangen (deze
   reageert meteen).

Server
X- Scyclewall::explode gefixed: tijdens het aflopen van de player list
   werd de lijst veranderd! (speler werdt uit de lijst gehaald, en
   current was dan verschoven naar de volgende. als je dan
   list->next() doet, sla je 1 speler over!)
X- sigint wordt afgevangen: nette shutdown met bericht aan spelers
X- nakijken of afgeleide classes het echt goed doen en geen crashes
   veroorzaken
X- random_push testen. werkt het altijd goed?
   ja (tenminste, voor zover ik kan zien) maar het is verwarrend dat
   de player niet van de kaart verdwijnt als ie in de lightcycle
   stapt, dus soms denk je dat er een speler niet beweegt maar dat is
   de 'schaduw' van de player die in de lightcycle zit.


Client
X- BELANGRIJK ppe: animated textures maken -> lightcycle draait!
X- schematische kaart gemaakt
X- weggegooide objecten worden nu ook uit storage gegooit,
   was nog problematisch omdat de renderer ze nog even nodig heeft nadat
   zzze uit de kaart zijn  gegooit/



29-04-2000

Common
X-  x en y coordinaten verwijderen uit Electron en doorschuiven naar
   Atom. Dit vergt wat denkwerk: waarschijnlijk moet Electon nu ipv
   een x en y coordinaat een Atom * hebben die gezet wordt zogauw het
   Electron geen parent * meer heeft.
   (is zo gedaan)

Client
X- Client:
  - de renderer moet beter interpoleren (zie interfac.cc in advance_logic)

Server
X- testen of info pakketten nu ook gesnapt worden. (werkt: set throttle)
X- doorgeven van de 'verbruikte tijd' aan brake event, zodat ie weet
   wanneer het volgende event moet komen. dat is dus NIET altijd
   gelijk voor verschillende commando's.
X- server houdt de verbruikte tijd nu bij (User en Player ::time_spent
   etc). dit zorgt er voor dat de client en server in principe
   synchroon lopen.
X- permissies gefixed (aanroep van 3d array had argumenten
   omgewisseld)
X- Lightcycle::set_throttle werkt nu goed
X- Server stuurt info pakketten nu ook terug naar iedereen op het
   moment dat er iets gezet wordt.

26-4-2000  -- release op web site
- Client:
  X- ppe : dynamic objects moeten een rotatie argument krijgen
  X- focus gefixt,
  X- plaatje voor CYCLEWALL
  
- Server:
  X- SIGPIPE afvangen
  X- afmaken: Scyclewall:: random_push, valid_push_room
  X- timer installeren in de server.


18-4-2000

Plug en Fusebox herschreven zonder copyright.
sockets zijn blocking voor read / write
listen socket is non-blocking

select werkt NIET (docs zeggen van wel) of een connect() al klaar is.
select werkt wel om te kijken of je kunt lezen / schrijven.

  X- move is stuk: 2 keer bewegen werkt niet: player staat op -1, -1 ???
     foutje in Atom::add. code was fout gewijzigd 12-4, nu verbeterd

12-4-2000

X- Client:\
  X-de nieuwe renderer geeft beeld, en werkt een stuk prettiger ;-)
    de renderer moet een 2d array van map_dirty flags krijgen
    elk static object maakt de positie waar het komt en de
    8 daaromheen dirty

    de renderer kan dan bij de volgende render actie
     decorate_map aanroepen, de alle dirty vakje opnieuw gaat bouwen.


X- Server:
   - nalopen van de volgende lijst:
        lightcycle->move_step
        cyclewall
        cyclewall->explode
        remove_event
        remove_event->fire
        destroy_electron

X- common:
   - Atom::add fatal functies verwijderd en vervangen door warnings
     return waarde -1 wordt nu ook echt gebruikt als error waarde
   - Lattice::set fatal functie gewijzigd in warning. als dit voorkomt
     is het wel serieus! de functie retourneert nu een int: 0 =
     failure, 1 = succes
   - print_packet geeft nu geen failure meer op een NULL packet en ook
     niet meer bij een ongeldig packet type, warning wordt nu
     gebruikt.
   - Packet_info_string::set (::read_from)
     fatal functie gewijzigd in warning bij fout in het lezen van het
     netwerk, niet alleen worden nu de Packet::error en err variabele
     gezet, tevens wordt string_length en string_value op 0 / NULL gezet.
   - alle expect functies aangepast zodat ze nu controleren op p->err, 
     indien gezet wordt Packet::error afgedrukt. dit kan dubbelop
     zijn, maar daar geven we de voorkeur aan boven het missen van fouten.

8-4-2000

X- Server:
   - Cyclewall actor gemaakt
   - explode() functie van Cyclewall doet alleen nog damage op alle spelers 
     in de kamer.
   - Remove_event gemaakt
   - destroy_electron functie gemaakt, wordt nu gebruikt
     in User::hangup en in remove_event
   - Slightcycle::move_step maakt nu Cyclewalls aan, en laat ze exploderen, 
     en haalt ze met een remove_event weer weg na 100 server loops.

X- Client:
   - veel aan de nieuwe rendering engine gedaan
   - basis objecten beheer/texture beheer zou nu goed moeten zijn

5-4-2000
- Server:
  X- move functies gesorteerd, 
       get_target_atom
       do_move_electron
     geschreven als hulpfuncties. player en lightcycle maken daar nu
     gebruik van.
  X- lightcycles kunnen nu meer dan 1 kamer tegelijk moven, en ze
     kunnen dood met behulp van damage
  X- electron->damage(amount) afmaken
  X- functionaliteit verhuizen naar afgeleide classes (die functie,
    move functies, etc)

- Client: 
  x- client crasht bij 2e keer inloggen, of geeft een vreemde
    kaart. fout lijkt te zitten in ppe. volgende keer kijken naar de
    assert failures in ppe: deze zijn nog niet allemaal nagelopen.
    (was bug in herinitialisatie van ppe)
  x- nieuwe rendering engine gestart.
    scripts client/or en client/nr switchen tussen de oude en de nieuwe
  x- makefiles omgebouwd om de rendering engine beter te scheiden van de rest
     -> librenderer.a


1-4-2000

X- server stuurt nu niet alleen de objecten in de kaart, maar ook
   automatisch alle variabelen van die objecten. Hiervoor hebben we
   een algemene write_vars functie gemaakt in electron, plus een
   heerlijke macro-hak om in alle afgeleide actors simpel die functie
   toe te voegen. kandidaat voor toekomstige mooi-makerij.
   in de server zijn 2 functies toegevoegd voor het oversturen van een
   vers (net aangemaakt) electron nadat het in de kaart geplaatst is:
   create_client_electron(electron, plug *plug) en
   create_client_electron(electron, list *queue)
   hiermee kan in een keer het electron van -1, -1 gemoved worden EN
   worden alle variabelen overgestuurd.

X- vreemde crash met sockets uitzoeken: het gaat fout als de client 2
  keer achtereen een socket op het zelfde adres opent. brrrrr.

  uitgezocht: er waren meerdere dingen aan de hand. de server kon niet
  tegen parallel inloggen (en dat gebeurde door 2 keer direct
  achtereen te verbinden) : de queues werden gebruikt terwijl spelers
  nog niet actief waren, ze hadden nog geen naam, etc. opgelost door:
  spelers de queues pas actief te laten worden na SHAKE_MAP, en pas
  volledig actief bij SHAKE_PLAYING. zie handshake.cc

X- freelist code gedebugged : dump functie gebruikt. fouten verwijderd
   uit server (freelist index niet goed) en brake_event gebruikt nu
   ook gerecyclede events. (1 millioen per minuut!) -> 2 totaal.

X- client crasht niet meer bij het afsluiten van het programma: ppe
   werd 2 keer afgesloten door een at_exit functie.


23-3-2000b

X- classes waar nodig afleiden (zie DUMMIES.txt)


X- !!!!!!!BELANGRIJK, MOET EERST templates gebruiken voor de new_obj functie
  zie serever/tests/template.cc
  een probleem hier is dat de template functie de freelist index moet hebben.
  Je wil deze uit het type zelf halen, maar dat mag alleen bij static class
  members. Dat is niet handig, omdat je dan in *elke* afgeleide class
  van object (die dus ook in onze algemene delete_object functie kan)
  een static int met dezelfde naam in de laagste afleiding moet hebben.

  Die is niet fijn.

  oplossing.

  object heeft een variabele (niet static) freelist_index.
  Die wordt geinitialiseerd in de constructor (dus
  automatisch in de laatste trap van de afleiding)

  we maken nu in onze template new_obj functie een static referentie object aan,
  waarvan we dan de freelist id kunnen gebruiken. (hu wat een omwegen)

  voorbeeld template functie dus:

  template < class T >
  T *new_obj()
  {
      static T example; //ha ha ha hack
      T *ret;

      ret = get_freelist_obj(example.freelist_index);

      if (!ret)
         new T;

      return ret;
  }

  je moet hierna dus nog *zelf* de set() functie van het object aanroepen.
  misschioen moeten we dit *alleen* voor actors gebruiken, en eisen dat die altijd
  dezelfde set() functiwe hebben (bv met alleeen een actor_id).



23-3-2000:

X- allegro: client pauzeert 2 tiende seconde
  een korte tijd nadat een keypress is geweest?????????

LANG gezocht maar gevonden, mysterieus delay in netwerkcommunicaties
 combinatie van oorzaken:
 -server neemt veel cputijd
 -programma's en logfiles gingen over het netwerk (NFS), dat stoorde met
  de netwerkcommunicatie
  hehe, dat was 2.5 weken zoeken ;-(


- Server:
  X- probleem:
    X- server heeft functies nodig uit common
      (memberfuncties van een vehicle bijvoorbeeld)
      die serverspecifieke gegevens nodig hebben,
      en serverspecifie dingen doen (sendqueues)
      evt. oplossing:
    X- implementeer deze functies in libserver.a
      ern maak dummies in libclient.a, als met utils (fatal, warning)
    IDEE AFGEKEURD, zie DUMMIES.txt, we gaan toch afgeleide classes maken.

  X- functies maken (algemeen) voor beschadigen van electrons
    - electron->is_dit_electron_beschadigbaar()
    - electron->get_hmd(int &health, int &damage_mult, int &damage)
    - electron->set_hmd(int new_health, int new_damage_mult, int new_damage)
    IS IETS ANDERS GEWORDEN, zie electron.h.

  X- verbroken connections worden nu gedetecteerd: doe er iets mee
    (hang op)

- Client:
  X- client kan nog geen objecten weggooien


9-3-2000:

    Server:

 X- dode connecties worden nu gedetecteerd, nu nog ophangen
 X- ownership van vehicles regelen met keys
    (is_owner functie of iets dergelijks)
    - heb je de key
    - zit je in het zelfde atom als het vehicle
 X- controleren dat bij het zetten van variabelen fatsoenlijk
    gecontroleerd wordt op de owner. (hetzij in inventory, hetzij de
    key in de inventory)

4-3-2000:

   Server:
X- system message (info pakketten) gaan interpreteren (message hangup
   etc)

X- Key gemaakt (nieuwe actor)

   Client
X- ppe omgehakt zodat het (bijna) werkt :)
   ruwe eerste versie is er.
   animatie werkt bijna, interpolatie klopt nog niet.

X- nodig :
   tabel met permissies voor het zetten van variabelen in electrons
   (vanuit infopakketten)

   char const *permissions[ACTOR_LAST][3] =
   { /* intvars, stringvars, vectorvars */
     { "sssaaaoo--o", "--", ""}, /* Example_actor */
     { "sssaaaoo--o", "--", ""}, /* Example_actor 2 */
   }

   permissies zijn alleen voor schrijven, lezen mag altijd
   s = system, o = owner, a = all, - = none
   1e char is 1e var, 2e char = 2e var etc.

   client negeert deze permissies (behalve misschien debug
   op '-'(none) ).

   bijbehorende functie
   int permission_granted(int actor_type, int var_type, int var_index,
	                  int owner, int system_priviliges)

   retourneert of je wel of geen permissie hebt, afhankelijk van of je
   eigenaar bent en of je system_priviliges hebt.

X- server:
    int User::set_info_allowed(Electron *e, Packet *p);
    int User::set_int_allowed(Electron *e, int var_id);
    int User::set_string_allowed(Electron *e, int var_id);
    int User::set_vector_allowed(Electron *e, int var_id);

23-2-2000:

X- Client
 -implemented drop/pickup, quick hacks in controls.cc (F1 - F4)

X-Server
  -debugged enter/exit/drop/pickup
  -debugged vehicle move
 
X-Common
 -lightcycle intvars aangemaakt
 -can be entered functie gemaakt

 
20-2-2000:
server:
X- move	moet ook vehicles kunnen
   vehicle->move_dir wordt nu aangeroepen
   lightcycle->move_dir werkt nu. lightcycles overrijden nog geen
   players en crashen ook nog niet.

X- er moeten dus ook vehicles worden geschreven-> inclusie instappen 
   commando's(er is 1 lightcycle, voorlopig genoeg)

17-2-2000:

X- Probleem:!!!! (OPLOSSING 2 GEBRUIKT)
  de client heeft extra data nodig in Electron voor het tekenen
  (start /endframe, etc.)
  Nieuwe classes afleiden van de actors geeft problemen met de freelists ;-(
  en is veel werk.

 oplossing ?
   een default NULL void * opnemen in electron, waar de client
   extra data aan kan hangen. De clear functie/ of set functie van electron
   zet de pointer op NULL (zonder deleten).
   De client moet dus zelf de zxtra data managen.
   (niet erg C++ like, maar wel makkelijk)
    
 oplossing 2:
   geen void * maar een object * opnemen.
   voordeel: het is nu mogelijk (niet noodzakelijk natuurlijk) om in
   de destructor van electron automatisch het object te wissen. tevens
   is het mogelijk om in de delete_bla functies automatisch het object
   in een freelist te hangen indien gewenst. wel oppassen: 


X- nog een freelist verbetering:
  alle objecten die in een freelist moeten kunnen  zijn afgeleid van object,
  het datatype waar een listelement naar wijst.

  We maken nu een freelist_index variabele in object,
  en een virtuele functie object::clear() die niets doet,
  we kunnen dan een algemene delete_object(object *) schrijven
  die checkt of de freelistindex geldig is
  (wordt in object constructor op -1 gezet)
  en het object in de juiste freelist gooit
  ( en anders een waarschuwing geeft, of het ding gewoon weggooit)


X-client displaying werkt nu zoals het zou moeten
  via een dirty list die dingen doorgeeft aan een aparte rendermodule

X-Server:
  - move moet ook vehicles kunnen , exit, pickup etc.
  - pickup drop enter exit klaar
  - move (vehicle) structuur is aangepast en verbeterd
  - send_queues aangepast: er is nu ook een globale send_queue die voor alle
    spelers verzonden wordt. file send_q.cc en send_q.h
    vanaf nu dus send_queue_packet(Packet *) en niet
    user->send_queue_packet(Packet *) gebruiken voor 'normale' dingen.

X- common:
   -lightcycle gemaakt als test-vehicle

X- Eventueel een find() functie om de current ergens halverwege te
   kunnen zetten.

   dit is geworden: een
        object *find(object const *);
   en een
        void ifnotfoundpush(object *other); 
   functie. ifnotfoundpush doet letterlijk wat ie zegt: kijk of
   een object in de list zit, zo ja doe niks, zonee, push het in de list.


10-2-2000:

X- eventlist naar server verhuizen, want de delete_event functie die de
  server moet gaan gebruiken, vereist kennis van alle events. dit
  willen we niet in de common library hebben, dus moet de hele
  eventlist naar de server verhuisd worden. (wordt ook niet door de
  client gebruikt dus is ook niet zo common)

X- inventory functions geoptimaliseerd (erg!)
X- extra commands toegevoegd
X- virtual Electron->can_be_entered() gemaakt  + geimplementeerd in vehicle.

Server
X- COMMAND_ENTER geprogrammeerd aan de serverkant(niet getest).

Client

X- nagedacht, design doc geschreven.


3-2-2000:

X- free list systeem bouwen in common: verhuizen van server -> common
  init_free_lists functie o. i. d. met als argument het aantal
  freelists wat je wilt maken BOVENOP de standaard free lists die
  common al maakt. vervolgens functie recycle_object(list #, object*)
  en een functie new_object(list #), en voor ieder type list een macro
  functie new_specifiek_object() die iets doet als 

  (specifiek object *)new_object(COMMON_FREELIST_MAX + list)

  dit dus alleen voor freelists uit de server of client: de common
  freelists krijgen een simpel macro als 

  (specifiek object *)new_object(list)

  dus ook een enum maken met alle common_free_lists, en in de server
  en client ook zo'n enum maken + alle macros.

X- list:
  X- interne static free list (private) maken met bijbehorende private
    functies new_element en del_element


27-1-2000:

General rehash day!!!!

grote delen van electron/atom/lattice veranderd.

X- free lists maken voor command_event: dit gaat 40 keer per seconde
   gebeuren of iets dergelijks.
X- info pakjes werken nu (hoop ik). testen!
X- send queue op de juiste plek legen, en vullen voor ALLE spelers en
    niet maar voor 1

X- command packet uitbreiden met arg5 om tijd mee te kunnen geven met
  move acties
  
X- common,
  functies schrijven om electrons van electrons naar map te verplaatsen etc.
  drop/pickup (misschien throw als alternatief voor drop?)
  besloten om toch alle objecten in elkaar te doen, dus de player komt
   in de room etc.
   elk atom heeft dus 1 top level object.
   de gesorteerde lijstjes worden dus bijgewerkt voor alle children
   van een electron, als je een electron toevoegt aan een atom.

   Atom::add -> Atom::lowlevel_add
   Atom::remove -> Atom::lowlevel_remove

   Atom::add/remove werkt ook de inventories bij
   Lattice->add*el,x,y) voegt altijd toe aan het top_level_object
   van een atom (meestal de kamer), behalve het eerste object, wat
   het top level object wordt.
   
   Lattice->move_to(Electron *e, Electron *new_parent) toegevoegd

21-1-2000
X- list:
  X- get_next en get_prev wijzigen in een get() functie die de current
  pointer NIET verplaatst, en een next() en een prev() functie die
  alleen de pointer verplaatsen en niks teruggeven.


Common
 X- added parent and inventory pointers to electron so electrons can contain
  other electrons

 X-added gx(),gy() etc functions sto set/get coordinates, 'cause coordinates
   can now get looped back to the containing electron

X- Server:
  X- gameloop schrijven (STATE_PLAYING) in een aparte functie. hierin
    moeten alle mogelijke pakjes worden opgevangen die de client kan
    sturen. -- controleren, afmaken


server was traag door usleep , usleep wacht veel te lang lijkt het.


12-1-2000

X- common: 1 algemene init() en exit() functie schrijven die zaken als
   init_translate_dinges en exit_translate_dinges aanroept.

X- atom: destroy functie schrijven die van alle lists destroy() aanroept.

X- System actor uitbreiden met set_string_var, set_int_var,
   set_vector_var en get_string_var functies.

   Server
X- system actor aanmaken (mag niet als globale variabele ivm
   init_translate_dinges).
X- alle objecten weer opruimen bij het afsluiten (storage->destroy
   aanroepen / maken)

   Client
X- dialoog cancel knop afvangen
X- storage weggooien bij het afsluiten (destroy())

6-1-2000

X- client: -mogelijk maken meerdere servers te proberen achtereen
           dit moet verder afgemaakt worden
          -kaart ontvangen, globale atom als in server voor opslag
           van objecten
          
X- start protocol uitbreiden (kaart oversturen etc)

X- list types moeten in een tabel komen te staan, zodat vanuit een
  actor_type een list_type geconstrueerd kan worden. de constructors
  van de verschillende actors moeten van deze tabel gebruik gaan
  maken. elders kan die tabel ook gebruikt worden.

X- player class schrijven

X- server: overal waar actors gecreeerd worden (init_lattice!) deze
  toevoegen aan de globale storage Atom


27-12-1999

X- client: console geschreven
           meerdere malen verbinden nu mogelijk

X- server: globale variabelen toegevoegd
           user class geschreven
           lattice creatie toegevoegd
           lattice wordt overgestuurd

X- scripts schrijven voor :
  - backups maken (make clean, tar gz etc)
  - TAGS file aanmaken (en opnemen in config file van emacs)

X- nieuwe kernel bouwen en NFS repareren


15-12-1999 (session 7)

X- bug verwijderd uit Packet_info_string: var_id werd niet meegestuurd

X- start protocol uitbreiden (namen van spelers etc)

X- in de file client/cl_utils.cc staan nog wat functies die nagekeken
  moeten worden en misschien naar common moeten worden verhuisd.
  Een en ander is terecht gekomen in common/act_type.cc


9-12-1999

X- startprotocol geschreven. 

- utils gesplitst in een client, een common en een server versie
- expect functies geschreven voor 4 packet types voor packet identificatie
- opsplitsen in losse source files van zowel client als server, beide
  zijn nu klaar om uitgebouwd te worden.
- testprotocol verder afgemaakt tot en met 'ja ik wil / nee ik wil
  niet', daar tussendoor moeten nog player names en map statistics
  worden overgestuurd.
- state machine voor de server geschreven: handshake is nu
  non-blocking en werkt voor meerdere spelers tegelijk.


??-11-1999

X- lattice uitbreiden met add(Electron *) en remove(Electron *)
  functies

X- start protocol verzinnen (server vol etc)


19-11-1999

X- testprogramma voor lattice/atom/electron systeem
  (oude testprogramma's *niet* weg)


17-11-1999

X- classes gemaakt: Electron, Atom, Lattice

X- linked list aangepast (destroy(), clear() member functies)

X- dichttimmeren van foutencondities in de packet classes:
  returnwaarden van read en write fatsoenlijk controleren.

X- afsluiten van sockets aan beide kanten als de andere kant ophangt

X- overbodige warnings verwijderen


11-11-1999
   prehistoric times, unknown...

