faB log of changes on DOOM LEGACY, since the Linux doom sources release
(23-Dec-1997) until the release of Legacy v1.20 (continued next file).
THE DOOM LEGACY PROJECT Contact: <email@example.com>
Project: DOOM Legacy
Web site: http://www.newdoom.com/doomlegacy
Log author: Denis Fabrice
Fri 26-12-1997: "First overview"
* Downloaded 'DOSDOOM' by Chi Hoang, compiled, runnable under Win95,
crash under true DOS.
No sound, no network, keyboard config doesnt work.
REAL slow! -devparm shows 2 to 3 tics per frame on a P166MMX !
* Corrected bugs in IdentifyVersion(), FindResponseFile();
Now runs under DOS.
* Added nice titlebar like original Doom, compile only with 'PC_DOS'
defined (uses conio.h).
* PC_DOS define : enable DOS/textmode specific stuff.
* asm_defs.h : defines all the stuff needed so that asm routines
know about vars and structs defined in C code.
* tmap.S : converted the x86 code to AT&T syntax for GAS, NASM could
be used but AT&T syntax is much better imho.
R_DrawColumn, R_DrawSpan restored.
Should be optimised for Pentium in the future.
* USEASM define : compile with ASM routines instead of C ones.
Actually, USEASM means i386/Pentium machine code.
* Compiled with ASM routines, runs the first time, but it's still
very slow... there's a lot of cpu time lost somewhere else than
drawing the screen.
Sat 27-12-1997: - "Boris and Fab in search of the lost frame"
* tmap.S : FixedDiv2, FixedMul : translated to AT&T.
After some profiling with 'gprof', we've noticed that FixedDiv
and FixedMul where used a lot. We've restored the ASM ones.
A lot of cpu time freed, but still a minimum of two tics/frame...
* i_system.c : we've restored a TimerISR interrupt for counting the
gametics, like it was in the original doom.
I_GetTime was not supposed to count the tics itself, but just
Result: IT S FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAST !!!
Problem: we have to call the old Timer int., but not at the same
speed that our new TimerISR... but we didn't find a clean way to
call the old interrupt from the new TimerISR.
So, the old timer interrupt is called faster than 18.2/sec.
Maybe we'll have to code an IRQ wrapper in ASM like in Allegro3.0
Sun 28-12-1997: - "Boris works alone"
* d_main.c : no 'HOME' environment variable under DOS, now uses
'DOOMWADDIR' for development.
* tmap.S : removed use of %ebp in FixedDiv2 and FixedMul.
* wi_stuff.c : line 1660 : object "WIOBJ" lump not found, should
be used only with 'french' version, we'll have to check why the
french version is active? Replaced by "WIOSTI" for now.
* Network restored. Seems to work fine!
* m_misc.c : M_SaveDefaults, M_LoadDefaults : now handles conversion
of scancodes/ascii when reading/writing the config file.
* Downloaded 'dosdoom2' by Chi Hoang.
He goes so fast that we don't have the time to tell him the problem
with 'I_GetTime'... we'll do a release of our port soon and we'll
send him a mail. This guy got us started on dos doom sources.
Mon 29-12-1997: - "Doom2 in 320x400 looks weird!"
* i_video.c : arranged the keyhandler from DosDoom, which didn't
PostEvent fast enough. Didn't respond when typing fast on the
* MULTIPLE VESA resolutions : added code to handle bank/switching
and setting of VESA modes.
- 320x400 runs 35fps on my P166mmx,
640x480 needs 2 tics per frame, which is SLOW !
(duke nukem runs at least 20fps 640x480 on my old P75...)
- works only in full screen, crashes when Statusbar displayed,
still lots of positioning/resizing to check out.
- visplane 'top' and 'bottom' tables used byte for y-clipping
coordinates, so of course it didn't support more than 255
- r_defs.h : visplane 'top' and 'bottom' tables changed to 'short',
r_segs.c : some compares used '0xff' changed to '0xffff'.
This is the main stuff you have to change if you want to support
- asm_defs.h : SCREENWIDTH must be changed to test different
- aspect ratio is not good for 320x400 and so...
NOTE ! These modifications will not be in the 'clean' source code
until it runs ok with status bar.
* ALLEGRO3.0 : we'll definitely use a lot of code from this GREAT
library by Shawn Hargreaves.
We'll use the sound code from Allegro3 for sound support, like
Tue 30-12-1997: - "Preparing the release for our doom dos port"
* Boris succesfully added the sound support with Allegro3.
(as DosDoom2 does)
* A lot of work to cleanup our release:
DJGPPDOS/ contains the source code specific to DOS/W95.
LINUX/ contains the source code specific to LINUX.
Implementation-specific code in the main directory has to be
enclosed by #ifdef PC_DOS or #ifdef LINUX, or such.
Linux code was removed from the DJGPPDOS/ implementation.
* makefile : somewhat improved to support ASM routines with -DUSEASM,
added support for PGCC like Allegro3 makefile
Wed 31-12-97: - "Fixed that timer stuff!"
* DJGPPDOS/i_irq.c : new timer routines, plus ticcount
irqwrap.S : asm wrapper for the irq handler
i_system.c : removed our dirty timer code, I_GetTime
now returns ticcount.
The timer handler is now fixed, but then the Allegro sound doesnt
work anymore, got to fix that.
Thu 01-01-1998: - "
* 3:49 - Our doom version succesfully started with 5 players, but
then it crashes after some seconds...
We used DOOMATIC (which replaces Ipxsetup) to launch the game with
5 net nodes. We used a map with 6 dmstarts.
* Yeehaa! erreur ridicule avec le define ST_Y sans parentheses...
Je peux enfin resizer en 320x240 !!! La status bar n'est pas affich�e
* Le makefile ne marche toujours pas et ca m'enerve!
* Tests transparence avec TINTTAB, super cool.
* Dor�navant il faut ajouter -file tinttab.wad avec un lump 'TINTTAB'.
* Dans G_Initnew(), ajout� du code pour activer le flag
'partial invisibility' pour certains objets qui doivent �tre affich�s
* Removed 7 messages from the Quitgame messages. These messages
are just coarse and boring. I have not found these messages in the
commercial versions of Doom1,Doom2,Doom95(FinalDoom),UltimateDoom,TNT,
Plutonia. So I have fucked them out!
* Implemented the following routines like in Allegro:
Now only the stuff that has been 'initted' is shutdown at the end.
I_StartupSystem is executed in i_main.c BEFORE ANYTHING ELSE, it
sets up the signal handler to trap exceptions, page faults and such.
Reworked a little the I_Error() and I_Quit() routines so that they
do a SystemShutdown().
Wow ! Now all the error messages are displayed, and the program
'crashes' cleanly to dos, restoring all interrupts, video mode,
* Meanwhile, I have discovered a 'bug' in the sound code of Allegro,
when new sounds are activated on all the channels at the same time
(eg: waking up a lot of monsters in a room), it does a 'crack' in
the sound. However it's not a serious problem: it's very very short.
After that the sounds plays together on the eight channels without
Boris log 3-1-98:
- Mouse sensitivity : peut prendre les val de 1 a 20 (avant 5 a 15)
- idclev : now work
- added control sub-menu in option menu
Boris log 4-1-98:
- added run lock key !!!
- no more hit enter if wad added only if one is missing
- finish control menu
Thu 08-01-98: "putting my nose into DosDoom latest release..."
* Mmmh, thanx to dosdoom, I have finally fixed the psprites being drawn
too small, and not at the center of the view.
When I implemented multiple-resolutions, I started to convert all
320 / 200 constants into screenwidth / screenheight dynamic variables.
Now fixed. However I'm not happy, there shouldn't be any 320/200
constants in the code. There must be a clever way to do it: by using
an aspect-ratio stuff... for later.
Sun 11-01-98: "profiling is not so easy..."
* Added VBE2.0 liner frame buffer + old vesa1 bank switching,
uses Allegro for LFB, and my old routine for Vesa1 because Allegro
'set_gfx_modes' a larger screen in Vesa1 than requested.
If VESA2 is not found, VESA1 is used, with bank switching if hires.
* We have started to work with P5PROF, a cool bunch of macros to
read the counters of the Pentium like: numbers of cycles, numbers of
cache misses... after hours trying to get it work... we are a little
deceived because it always returns very different values.
* I want to profile the stuff with GCC GPROF... crash at InitLightTables
but not in normal optimised mode. I think there's plenty of badly
allocated buffers and dirty stuff that need to be cleanly done.
I think our version is actually the most stable under DOS. But it
should NEVER crash!
* i_sound.c : raw2SAMPLE() now reads the frequency of the sample from
the DSXXXXXX rawdata header. Most samples are 11025 freq,
but some are 22050. Now the double shotgun sounds ok!
* g_game.c : G_DoPlayDemo() now uses ExtractFileBase from w_wad.c
w_wad.h : made ExtractFileBase() global.
Now demos can theorically be played with a path specification,
eg: -playdemo mydemos\cooldemo
It didn't work before because the demo is loaded by W_AddFile(), which
extract the file base name with ExtractFileBase(), because lumpnames
have max. 8 chars. So eg: mydemos\cooldemo became 'cooldemo'.
G_DoPlayDemo() now searches for the file base name.
* g_game.c : G_DoPlayDemo() : added compatibility for Doom2 v1.9 demos:
since MAXPLAYERS has changed, the header of the demos is different,
so now it assumes there's max. 4 players when demoversion is v1.9.
Playing back v1.9 demos now works! I Playback a lot of demos and they
play perfectly till the end!
This version seems to be 100% Doom2 v1.9 compatible!
It's great to look at deathmatch demos in 640x480 !!
* i_sound.c : tried to make the I_ShutdownSound() cleaner, because the
program exits from time to time with a General Protection Fault.
Now I ask Allegro itself to release the voices before quitting.
I'm still unsure if that fixes the GPF problem.
* dstrings.c : I found the bug! There was missing quotes in the quit
messages table. What a shame! It crashed sometimes
because the quit message was too long or something. fixed!
Fri 16-01-98: "bored trying to speed up the asm, so I fixed some
============= demo stuff..."
* Added a gcc_asm.doc to help people who are new to DJGPP and want to
use asm code, without the hassle of inline asm. It's not a full-featured
document, but it certainly helps if you wonder about the stack, and
passing arguments from C code to ASM code.
* vid_copy.S : screen blit routine in asm, after some profiling I have
1) DJGPP memcpy() is as fast as ASM rep/movsl
2) Copy into VESA2 LFB is 4 times faster than to 0xa0000 !!!
Anyway, the screen blit is a very small percentage of the frame rate...
R_DrawColumn eats the most.
I'll keep the asm routine for convenience, because it can copy from
different width bitmaps, so you don't need to use multiple memcpy().
* g_game.c : now calls ST_changeDemoView() when pressing F12 while viewing
a demo. This redraws the statusbar for the 'viewing' player.
st_stuff.c : load facebacks (STFBx) for all players, and display the
right faceback (the player color) on the statusbar when
changing the view.
* s_sound.c, d_main.c, p_inter.c : replaced some consoleplayer by
displayplayer so that the sounds are heard from the display
* Yeehaa!! Changing the video mode while the game runs now works!
There's a lot of cleanup to do, and some details like resetting
the colormap, but technically it runs in all VESA2 LFB modes +
the basic mode 13h !
* We have discovered a great optimisation for the rendering of wall
segments, based on the fact that 'packets' of columns share the
same scale and/or start texture address... we'll have to wait the
end of the exams to create an asm routine which draws multiple
columns at the same time: the trick is that sequential writes
in the horizontal axis are faster because the Pentium has Write
Buffers of 64bit length so successive writes to the same location
Fri 30-01-98: "phew! examinations are finished, back to the code!"
* Vid-mode change on the fly now sets the palette, and sets the right
coords for the status bar widgets, the status bar is also fully
Sat 31-01-98: "today on the menu... choose yer resolution"
* tmap.S : replaced cdq in FixedDiv2 by two simple instructions that
allow the next 2 ones to pair, while cdq doesnt.
* m_menu.c : made the video menu. It displays all the VESA2 LFB
resolutions, starting with 320x200 standard VGA.
Like in Quake, each resolution is displayed only once,
and the VESA2 linear frame buffer is always used for
the reolution, except for 320x200 which stays in the
standard mode VGA.
Video test mode, set default mode, and aspect ratio is
still not working...
Mon 02-02-98: "yeeehaaa! now I can play super-fast 320x400!"
* r_main.c : R_SetViewSize now calculates the right projection and
yslope, I have also added an 'projectiony'. The aspect
ratio is now correct in all resolutions! Yipee!
Maybe I'm not so bad at maths after all?!...
* We've tried changing vid modes while playing network: it works of
course, but there's a small slowdown since the machine sends less
packets when it is occupied setting the new mode... should fix that
Tue 03-02-98: "320x400 is definitely working, sprites ok and all!"
* r_main.c : aspect ratio and positioning of psprites is now correct.
I have looked at Dosdoom4.6: it doesn't draw the psprites
like the original Doom2, eg: with statusbar it scales down
the sprites, but it should do it only when reducing the
window. With statusbar there's no scaling except for the
aspect ratio... details I know...
Wed 04-02-98: "Web design is fun...but takes too much time!"
* Our Doom project will probably be called 'DOOM LEGACY'. Prepared
the page on our site, for the release to come... took me a lot of
time. Put some big graphics, and made the page background black...
big fat American style... I must admit that it looks good however.
* am_map.c : fixed a bug with the recalc of the automap after a vid
* hu_stuff.c, hu_lib.c : added functions to update the coords of the
heads-up widgets after a screen size change.
* v_video.c, m_menu.c :V_DrawScaledPatch now scales the patches for
the titlepic and menu to the screen size.
* v_video.c : moved WriteText and other graphics routines to v_video,
for a more general use.
* hu_stuff.c : added the Deathmatch Rankings!
Fri 06-02-98: "Freelook is ridiculously simple!"
* m_menu.c : added M_DrawTextBox to draw a box under the messages,
because sometimes the text is difficult to read with all
the stuff drawn behind.
* m_menu.c : re-ordered the main menu like Quake one : singleplayer,
multiplayer, options, help, quit.
Created the lumps for SINGLE, MULTI, and SETUPMULTI.
Singleplayer lead to: newgame,load,save,endgame.
Multiplayer will allow the player to enter its name
and color. The name will be displayed in the deathmatch
rankings and saved into demos along with player colors.
* w_wad.c : created a W_ReadLumpHeader which reads only a part of a
lump, so R_InitSpriteLumps reads only the header of the
sprites. However it is not really faster... after that
I found that it was R_GenerateLookup which takes time...
* Looking at Heretic, I suddenly noticed that the perspective didn't
change even one pixel when looking up/down. Now that I think of it
it seems evident. In fact it looks like the perspective change, but
it's just a 'optical illusion' !
Just a quick hack at r_main.c, and I was looking down in map01!
Freelook will be for the first release!!!
* g_game.c, r_main.c, r_things.c : added the freelook!
Like DukeNukem, freelook is a momentary or toggelable.
Invert mouse for the freelook is also done, but have to
put it in the menu.
I had to create another 'centerypsp' to center the
psprites right, because they moved along with the view
(look up, gun was going up...)
It looks good, but I'll have to find the best values
for the freelook so that it doesnt make people sick!!
(the perspective is wrong when looking up or down...)
* v_video.c, m_menu.c : M_DrawTextBox now fills the inner of the box
with a flat used as pattern, it looks better than just a
a plain color. V_DrawFlatFill() does the job.
Sat 07-02-98: "now I can do something of the windows keys!..."
* Changed a lot of stuff for the keyboard : I wanted to attach
commands to keys, each game command (fire,use...) could be
triggered by one or more keys. Once keys are mapped to commands
(game controls), you don't need bother with mouse/joy/keyboard
anymore since joystick and mouse buttons are treated as 'virtual'
keys, which can trigger game controls too.
Clearly, this means you can attach any action to a joystick button
g_input.c : now handles the game inputs (key/mouse/joy), and remaps
events to game controls.
m_menu.c : the controls menu has been rewritten, now it accepts
keys, mousebuttons and joybuttons as inputs for any
game control. Maximum two inputs are accepted for each
game control, like Quake 'customise controls' menu.
g_game.c : G_Responder() now asks g_input to remap an event to
a game control. G_Buildticcmd now tests the game controls
instead of gamekeys so eg:strafe left can be done with
a mousebutton... (I know someone who does this!)
Plus added support for 'lookup' 'lookdown' 'centerview'
and 'mouse aiming' game controls.
For simplicity, the speedlock ('runmode') and locking
of the mouselook will be moved as menu options: TO DO.
i_system.c : rewritten the kb handler to distinguish between keypad
keys and extended non-keypad keys. eg:uparrow is not
the same as keypad 8. If someone moves with the keypad
he/she can use the cursor keys for something else
The ASCIINames (scantoascii) table has been reworked.
Added support of the win95 keys: leftwin, rightwin, menu.
Hmmm.. took me all the day!
Still to do: save the new controls config (two keys max per control),
add menu options for speedlock and aiminglock.
* m_menu.c : fixed a bug with 'messageToPrint' messages displayed by
the menu, sometimes a text line was missing.
* m_menu.c : Customise Controls: added Backspace to clear the keys
for a control,
unknow keys are now displayed as 'KEYxxx' with the key
number (so you effectively see if multiples 'UNKNOWN'
keys are different),
fixed Escape now Cancels, does not change the key,
Escape in the menu now returns to the Options menu.
* m_misc.c, g_input.c : added temporary hack : saves the controls menu
two-keys-per-game-control in the default cfg, but if they
are not found when loading, the old 'key_xxx' values are
converted to the new game control key codes. This is to
simplify the use of our first release for the people,
they don't need to bother with the new controls, they'll
be converted automatically from old key_xxxx setup keys.
We'll have to do a new SETUP, for later...
* st_stuff.c, wi_stuff.c : now uses player's translation tables so
that the facebacks in statusbar and intermission screens
display the right colors, whatever new player colors we
add, and whatever number of players.
Before it was not good, because it loaded a 'STPBx' patch
for EACH player, which means that for 16 players you
would need 16 patches named 'STPB0' to 'STPB15' !
* wi_stuff.c : commented out the use of a 'WIOBJ' patch, that was used
only with the french version, and special conditions...
looks weird, since "WIOSTI" patch does the same.
* m_menu.c : added the multiplayer setup, choose your color and enter
your name, with an animated 'marine' to display the
Tue 10-02-98: "still finishing touches for the 1st release..."
* m_menu.c : completely redo the Options menu, text was too big, and
I needed space for mouselook,always run and such...
now uses the HU font, and includes the following:
always run toggle,
invert mouse toggle,
screen brightness has been added, this is like the
old Doom2 'F11' gamma key, just moved in the menu.
created new 'slider' graphics, to draw smaller 'thermos'
by the side of the options, like Quake, instead of a big
thermo under the option.
It's getting better and better! It's great to play with
mlook as default, and always run.. what a release for
my poor little fingers...
* m_menu.c : added mouselook sensitivity, which IS NOT THE SAME as
mouse y sensitivity. Mmmmh... maybe a mouse y sensitivity
would be useful for people who uses the mouse to move
backward and forward... I'll have to think about it.
* r_main.c, r_plane.c : added a yslopetab which is the original
yslope with slopes for the full view possible when
mouselookin' (one half above and one half below the
original viewheight), so that we don't need to recalc
the yslopes each frame for the mouselook.
Now we just make 'yslope' point somewhere in 'yslopetab'.
Doom is already slow enough! This frees hundreds divisions
* v_video.c, m_menu.c : menu now calls V_DrawFadeScreen(), which
fades down the screen, so that the menu is more readable.
Wed 11-02-98: "having fun while testing multiplayer features..."
* g_input.c, g_game.c : added the double-clicking inputs for both
joystick and mouse. To set it up in the menu, set the
mouse button two times, the second time it becomes a
I'm not happy with it, there are 'collisions' between
inputs attached to the same control : one input is
being tested and sets the control to true or false,
then the second input. At the end, the first input
does not act... to fix. Later.
* It's one week and a half that we are working me and Boris at my
home, and we planned to release the first version of our project.
So here it is, I think that it's already very good. And anyway,
the setup controls works perfect if you don't do stupid assigns
(like two mousebuttons for the same control).
* I think that we did not receive enough 'recognition' for the great
dmatch launcher 'DOomatic'. Five persons or so told us that they
liked it and it's all. How can people use DM or other crap launchers
when we do a great launcher like Doomatic?? Strange world.
Anyway, I hope that we'll have a little feedback with our doom
************************** FIRST RELEASE ******************************
* DATE: 12-02-98 TIME: 04:25:39 (wow!) *
* Found a small bug just after the release! keynamestr too short in
G_KeynumToString() ... fixed.
* v_video.c : V_DrawTiltView(), just for fun, I wanted to tilt the
view like in DukeNukem, when the marine dies. It looks
good. I may leave it, but there will be a toggle in
the menu 'Tilt view On/Off'.
* r_sky.c, r_plane.c : r_plane now uses pspriteyscale to render the
sky, so now the sky is scaled with the correct aspect
ratio. There's still a problem with mouselook : the
sky texture should be 256 lines high instead of 128.
* r_sky.c, screen.c : I have finally understand that skytexturemid
is an offset into the texture, and it is totally
independent of screen size. R_RecalcSky() is useless.
skytexturemid is initialised to the y coordinate of
the line of the sky texture, which is displayed at
the horizon (the line at the center of the view).
When you look up and down, the horizon moves too,
so the sky texture should be tall enough...
* tmap.s : made a quick cutn paste of the R_DrawColumn, modified
it so it can draw columns taller than 128 pixels (upto
256 in fact). Because of the 256 wrap, the routine could
be optimised further (to do). Added skycolfunc in r_main.c
Tested a sky of heretic (which is 256x200)... there's
some problems with centering... but now I go to bed!
Fri 13-02-98: "wow! we've already got a good feedback!"
* Yipee! Now we finally receive a little feedback for our efforts,
we've received around 20 mails, and for one time they're interes-
ting bug reports, so they're useful.
Now Doomatic also receives a good feedback, I suppose because the
people think that they need Doomatic for 8 player DM. It's not
obliged but then since there's no other launcher ready for 8 player
we've shipped Doomatic with Doom LEGACY.
A funny issue, is that we didn't dare call our 'mod' DOOM 3...
but it seems that most of the people call our mod DOOM 3 !!!
Well.. they choose! So I think the name is now DOOM 3 : LEGACY.
However, got some bug reports, and Doomatic was not the good rel-
ease, so I'll try to fix a maximum of small bugs before we update
the site tomorrow, since we have to update Doomatic , so that it
works with 8 players, I'll update Doom LEGACY at the same time.
* Bug report 1: g_game.c : now the mlook sensitivity is the same
whatever the screen height.
* r_sky.c, tmap.S : damned! the problem with centering of the sky,
was because I left out a 0x7f mask in the new
skycolfunc drawer routine! Just removed it and
the sky is right!
* doom3.wad : RSKY1,RSKY2,RSKY3 : since there is mouselook now, I had
to create taller sky textures (256x240 each) instead
of the original 256x128. I have worked all night
trying to keep the original skys looking good.
Since NWT (NewWadTools) didn't accept a picture larger
than 320x200 I had to create my own little proggy to
pack a picture into a patch_t resource. It's called
* i_system.c : as suggested, tried to fix the exit sound, I_WaitVBL
doesnt wait!! Tried to change it, does the same...
Sat 14-02-98: "updated release1 on the site"
* While replying to the mail at university, other mails where
arriving every five minutes or so!! That was very useful since
I have had a lot of feedback and a lot of bug to fix!
We've received Saturday night some 25 mails. Not bad at all!
The most reported is of course the freelook aiming which doesnt
fire in the 'look' direction...
* g_input.c, g_game.c, m_menu.c : reworked the g_input method, Boris
was right, there was a way much more simple.
Now it is possible to go backward and 'use' at the same
time, as someone asked by mail..
Fixed the setup controls : when there's already two
keys, if you enter a new one, it replaces the two
precedent, instead of just erasing the two precedent
* m_misc.c : Load and Save defaults is now much cleaner, and much
simpler, however, it is no more directly compatible with
Doom2, each time you switch between doom2 and doom3, you
loose your controls config. Not a big issue.
Sun 15-02-98: "fixing the most reported and ridiculous bugs"
* made a votes.txt with a list of the most wanted features, asked
by mail: at the top: tcp/ip, shoot up/down, open GL !!!
* m_menu.c : used "RROCK17", not found in Doom1, as a background
for boxes. Now uses borderpatchname.
* p_mobj.c : P_SpawnPlayerMissile : found how to fire missiles in
the mouse aiming direction. It works!
I'll have to add an 'autoaim' toggle to the menu,
it will be added in the player_t struct.
ticcmds will need an autoaim bit, and also an
aiming value. So demos record and playback the
freelook, and so the network just works!
For network, each player need to know the other's
autoaim toggle, plus other's aiming value.
Mouse aiming needs to be done for gun,shotgun,dblshotgun,
and also for BFG invisible rays.
Will have to check the rocket explosion, it seems that
it kills monsters below, even when the rocket explodes
a lot above the monsters on the ceiling.
Gun shots will have to be shown when fire in the ground
or ceiling. Also, fixing the gun puffs not shown on
bottom or upper texture would be nice...
Lots of work for tomorrow! Now to bed!
Mon 16-02-98: "hmmm.. have we found a bug in network?"
* s_sound.c : it seems a hack in the sound code used M_Random()
whereas it should something else because I have
found that M_Random is deterministic for the
consistancy checking in some occasions, and the rest
of the code only uses P_Random().
M_Random() is used once per tic at ST_Ticker() and
more than once per tic by WI_Ticker()...
Anyway, it seems clear to me that M_Random() shouldn't
have been used in s_sound.c, and it comes possibly from
the unix sound hacks.
Now s_sound uses rndindex without modifying it,
(using M_Random() increment rndindex).
LET S HOPE ITS THE BUG WHICH CAUSED CONSISTANCY FAILURES
IN MORE 4 PLAYERS NETWORK!!!
Tue 17-02-98: "wow! I cleaned a bug without knowing what I was doing"
* g_game.c, p_user.c, p_mobj.c : can shoot up or down, works in
network, and works in demoz (for missile weapons)!
* s_sound.c : removed the use of M_Random() in a linux hack to vary
the sound sfx picthes. Hope it was the consistancy
failure bug of the network...
* p_pspr.c : shoot up or down done for bullet weapons. There's still
works to do coz the puffs dont show on bottom and upper
* Wow! It's very hard to aim with no auto aiming! What a mess!
* i_system.c : I_Quit : made it G_CheckDemoStatus when demorecording
because when you quit with F10 while recording a demo,
it didn't save the demo. 'q' sould be used to end a
demo, but then why not the standard Doom exit key 'F10' ?
Wed 18-02-98: "I wanna see Puffs everywhere!"
* m_map.c : PTR_ShootTraverse() : did the clip of the shoots on the
ceiling and floor, was as simple as I dreamed last
night! Just a triangle stuff... I'm no math dude but I'm
learning a lot from the sources!
* m_map.c : same : I nearly fixed the problems with Puffs not being
drawn on bottom walls where front & backsector use the
sky flat. This was originally because you cant shoot on
sky hack walls. Now it tests also if the ceiling heights
are different (always diff for sky hack walls) so now you
can shoot at the outer wall in the outdoor at map01.
Still, I've found a place in a pit, in a Danzig map, where
the puffs are not shown... hmm...
* m_misc.c : shamelessly added an detailLevel = 0 after M_loaddefaults
because someone couldn't get the game running, having
detailevel set to 1 in his default.cfg...
Thu 18-02-98: "Lost some 8 hours on a MOTHERFUCKER BUG!!!"
* I'm disgusted, 8 hours lost just because that BT_AUTOAIM in
d_event.h was 6 instead of 64... why did that 4 disappear???
* m_menu.c : added Autoaim on/off, Crosshair Off/Cross/Angle/Point
in the Options menu.
* p_mobj.c, p_pspr.c : now also shoots up and down with AUTOAIM
when there's nothing to aim at.
* d_main.c, i_system.c : setvbuf now changes stderr to filebuffer
mode, so that we get all the errormessages
flushed at the end, and have them all
displayed. Somewhat cleaner now.
* g_game.c : 'q' while recording a demo now I_Quit() instead of
I_Error(), thus returning a return code 0. That's why
Doomatic didnt call lmpmast : the return code was -1
* hu_stuff.c, wi_stuff.c : fixed a bug with 'french' used as a
boolean, but it is an enum. Should have tested 'language'.
Now talk uses english keymap.
* v_video.c, screen.c, m_menu.c : fixed the scaled graphics not
at the right place because they were centered like
the scaled menu.
* hu_stuff.c : now draw the crosshair scaled. Can see it better.
* Joined readme.txt and legacy.doc in a more complete legacy.doc.
* d_main.c : added a nice blue titlebar for 'Doom LEGACY'.
Sat 21-02-98: "Started to work on the transparent water!!"
* Started to work on a real engine feature: transparent water !
The water efectively looks like it 'cut' the sector into two
parts : the underwater part and the out-of-water part. In fact
it needs only one value per sector: the height of the water!
This single value is sufficient to know where to draw the
water surface, the clipping is just nearly automatic with
floorclip and maybe a new waterclip. Visplanes are created
for the water surface, and all the water visplanes are
drawn after the non-water visplanes, using a 'shading' texture.
The water texture looks like it uses transparency, but in fact
it's just a grey-shaded texture where each pixel tells which
light colormap of Doom to use. eg: it just makes colors brighter
or darker, and looks like ripples over the surface.
* r_plane.c, r_bsp.c, r_segs.c mainly. This is done. There's still
problems with 'underwater' sectors, which are displayed as out
of the water because currently I use the floorclip to clip the
* About the water texture: the colormaps indexed by texels of the
water animated texture, could at the same time remap the colors
to 'more blue' colors. Then its like transparency between the
background picture, and a single color: the tint of the water.
Since on one side, the color is constant (water color), it
doesnt need as much precalculated data as transparency, no need
for a 64k tinttab here, and the shading is done at the same
time, which is not true for translucency!!!
Sun 22-02-98: "I need a change,.. water is getting boring"
* Yes, water starts to bore me to death: the bigger problem is
probably not enough colors in Doom palette to have great
colors for the water. I've looked for highcolor but...if I
do it just like DosDoom, it'll be a better shading and more
colours mapped for the water.
However, I'll not go to highcolor until it's really MUCH
better. eg: using highcolor textures, but then it needs a
lot of artist's work. So for now, I'll try to find a clean
solution for the water, try to find the best 8bit colors.
* Another problem with water is that it looks 'unreal' : the
stuff under the water should be deformed because of the
refraction or something... I'm trying to understand how
AlienBreed3d on Amiga does this... the water in it looks
so great! That's because the underwater part moves with the
ripples... I'll do this later, I'm bored for now.
* Added jump, as a quick-hack : still needs to find a bit in
ticcmd so that it work in multiplayer.
Added a sound when the player avatar jumps, and another sound
if the player avatar touches the ceiling (ouch!).
* Added height checks... now the player can walk under flying
* Added thing on top of another thing checks. You can now stand
on barrels, pillars ... every MF_SOLID object in fact.
Problem: when a sector rise, actors that are at different
height sometimes are pushed on the ground, and so becomes
attached. While they move in the air, they dont get attached
because they now when they collide with the height checks...
eg: if a player stands on a barrel, and then the sector under
moves up, the player and the barrel have their z coord
on the sector floor, so they get attached... in fact
the player should move up with the barrel...
* p_user.c : PlayerDeath Think view follows the attacker now
also moves the pitch of the view.
* p_inter.c : P_KillMobj : barrels remember if they were killed
by a player, so that the originator of the barrel explosion
gets the frags for all players who dies from the barrel
explosion. This information is passed from barrel to barrel!!!
* Wow! Started a quick-hack test of external camera view...
it kicks ass!!! It looks good! Surprising how the levels
look more '3d' from the exterior of the marine's eyes!!!
With demos it especially great! For now I use the 'c' key
to switch the camera view on/off.
There will be a lot of work to get the camera move right,
and that the camera always find a position inside the
level, and not outside sectors, neither in other non-connected
Wed 25-02-98: "Wow! I got that water working! Looks great!"
* Got a superb idea yesterday for the Doom console : it will
look like a hi-tech heads up display, that comes from the
left, the background will be dark green transparent, and the
text over it will be some futuristic style font.
* r_plane.c : ok, the water works : the underwater part is now
deformed in a sort of refraction... but there's a
problem with the order in which the lines are
changed on the screen, I use a very dirty hack for
now : copy the screen to a temporary buffer from
which I get the lines that are changed by the
water... but this is a waste of time. There is a
solution , it is boooring, and complicates somewhat
the water rendering, anyway, it must be done...
* p_user.c, r_main.c, info.c : created a new MT_CHASECAM type,
and used an mobj with thinker to move the camera: the advantage
is that the collision are checked against the walls, the camera
doesn't go through walls no more, and it slides along walls like
* p_map.c, p_mobj.c : fixed a little the stand-on-top-of-a-thing...
Funny little bit: the blood sometimes stay on the head
of the marine because it does not fall through!!!
* Still 'thing on thing' problems : if the thing under moves, the
thing above does not and eventually falls to the ground,
not an error, but would be better if the thing above
moved with if some special bit is set, would be fun.
* p_mobj.c : P_SpawnMob() now P_CheckPosition() to get mobj->ontopz,
and so spawn the mobj on top of existing mobjs!!! Thus as I've
tested, multiple objects are stacked one of top another,
I've made some pyramids of barrels, and then walked on top
of it! Very funny especialy when you fire a rocket at it.
* g_game.c : G_InitNewFeatures() : mad some other sprites transparent,
as people requested : baron,arachno,caco fireballs,
blood, eye in symbol, lost soul.
* i_system.c : the ENDOOM textmode end screen is back.
* d_main.c, g_game.c, ... : replaced 'fabifabo' by an global variable
'demoversion' which is tested for backward compatibility.
Fixed the bug that disabled new features after playing back
the older demos DEMO1,DEMO2... now G_InitNew() resets the
new stuff by default.
* m_menu.c : keypad arrows can be used to move in the menu.
* thing on thing : getting tired and crazy with that, so I simplified
and for now, if the 'support' thing move , the things over
it don't move.
* m_obj.c, p_map.c : MF_ONGROUND : this flag allows to minimize the
z movement checks, for things on solid floor and not moving.
If this bit is not set, ZMovement is always done, thus
a CheckPosition is always done, which consumes time in
levels with hundreds of monsters.
An object which is not on solid floor, eg: an object which
stands on another one, is always checked for ZMovement,
thus it's MF_ONGROUND bit is not set.
This is to ensure that if the 'support' thing moves, the
thing(s) on it falls to the solid floor when they are no
* AAARRARHG! I'm bored to death of a bug in map01 : imps at the
platform near the plasma gun blocks the platform because
they're stuck in each other as soon as the door is opened...
This is rare, and due to the new extended thing-on-thing
possibilities... the fact is: monsters should not occupy
the same space so the map should not be like that. Point.
Or the monsters stacks, but then they're blocked into the
ceiling, same problem.
FUCK OLE DOOM2 COMPATIBILITY, ITS GETTING ON MY NERVES!!!
I FUCK WASTED ALL MY NIGHT ON THIS SHIT THING-ON-THING PROBLEMS!!!
FUCK FUCK FUCK FUCK FUCK FUCK FUCK FUCK FUCK FUCK FUCK FUUUUUUUCK!!
Thank you for listening.
* Added a new cheat 'idfly' to fly around levels using jump key.
Sun 29-02-98: "finishing touches for update 2"
* d_main.c: Fixed detection of Ultimate doom, still : the Utltimate Doom
Startup should be printed , but then I can't check for wad
entries when the title string is printed out...
Thu 19-03-98: "At last back to code after 2 weeks of webdesign..."
For the bit of history : after release of Legacy v1.12, I started
out to redesign entirely the site, as we were invited at frag.com.
I took 2weeks to make the new 'Doom LEGACY' web site, which looks
quite cool now! Too bad I had to kick out the Leprechauns...
* p_enemy.c : P_CheckMeleeRange() : quick fix now monsters cant
attack you in melee if they're not at the same height. No
more imps attacking at MAP01 if you stand at the top of
* info.c : corrected the height of most obstacles non-moving things
as IdSoftware coders didnt bother since you couldnt walk over.
Fri 20-03-98: "DOOMWORLD vs Legacy..."
DOOMWORLD has taken some of my words on DosDoom as a news on their
site... didnt see the page, not a big issue though.
Discussed Console addition with Boris. Will be 3 modules for
real console like in Quake :
console.c : handles display of console and console text.
command.c : handles execution of commands and scripts.
commands are issued by key bindings, console input,
or even by remote server.
consvar.c : console variables, as Quake does allow for QuakeC
to add variables that are editable at the console.
Maybe not necessary, are we going to do some Doom-C ?
* p_user.c : restored repeated jumping only for IDFLY mode.
Sat 21-03-98: "Legacy vs Doomworld..."
* console.c, consvar.c, command.c : mainly the console works...
I use a simple translucent green background for now, and use
the HU FONT for the console font, chars spaced 8 pixels so
that it looks like a fixed font. Most messages are now
displayed through the console, just hacked hu_stuff.c to
do CON_Printf instead of setting some heads up widget.
Tomorrow: allow console input, draw that console better
have it gradually come on the screen instead of just on/off..
Sun 22-03-98: "Adding command execution to the Console"
* console.c : added the responder, input line, ... works great.
* command.c : lotsa work here, command execution seems to work fine.
"wait;wait;wait" sequences work.
* m_menu.c : temporary disabled KEY_MINUS coz it disables the
'_' key for the console... m_menu shoudlnt handle
screen resize keys.. to clean up
* command.c : added vid_nummodes,
-turbo cmdline parm is pushed in the command buffer, and executed
when the game starts, it works!
* command.c : added Command completion �-la-4dos
eg: type 'vid' then press TAB multiple times, you get all
possible commands which start with 'vid'.
Sat 11-04-98: "Back to the serious stuff.."
Too bad, I coded several things these last weeks but didn't update
this log. Partly because we didn't release the srcs anymore, but
I should have continued.
These last days I've been testing the 'perspective correction'
feature which looks good, but still not enough precise. Also,
I've kicked out hu_lib.c, and rewritten hu_stuff.c to do just
what was needed. Good cleanup there.
Some changes to the console print and hu_stuff handle of messages
and net chat messages are now print in white colour, which stands
out from the rest of the console text, so you don't miss it.
* i_video.c, vid_vesa.c : now frees screen buffers at exit, useless
I suppose on most systems but who knows..
* console.c, command.c : lots of cleanup
* console.c, g_game.c : now CONS_Responder() toggles the console.
* all *.c, doomdef.h : doomdef.h now includes the main header files.
* s_sound.c : added a 'stereoreverse' console variable, still not
saved to config.
And now, I really start enjoying that CONS_Printf() ...
* g_game.c : tell the player name when changing the view with F12
* p_inter.c : started death messages, 'xx frags yy' fun to code!
and 'xx suicides' (kills himself source==target)
Arranged 'specs.txt' to describe all the changes done to the
engine with each version of Legacy.
* info.c : set MF_NOCLIP for MT_PUFF, so it displays right on
upper & bottom walls. It was clipped by the collision
check code of mobj thinker because on upper/bottom walls
the puff thing standed in the middle of 2Sided lines.
A puff is not solid anyway, and disappears fast.
* console.c : like Michael Abrash says in his 'black book',
rewrite from scratch instead of adding fixes and fixes..
I've started to rewrite the console using a modulo so that
the console buffer doesnt have to scroll in memory.
Doesn't work. Now bed.
* p_map.c : fixed crusher don't crush and cannot pickup under crush
ceilings (damn test == should have been <= ).
* hu_stuff.c : fixed chat input wrap around multiple lines
(hu_lib used to do this)
* wi_stuff.c : quick-fix for scores for the Caveparty..
* p_inter.c : death messages, basic implementation
* r_sky.c, g_game.c : call R_SetupSkyDraw to set the right sky
column drawer, and scale up the old skies. Looks shit.
* i_system.c : fixed the ENDOOM screen, text cursor at bottom of
screen, and uses conio puttext instead of memcpy.
* console.c : added backward sequential command completion, like
4-dos, using shift-tab (was forward only until now).
Boris made the latest 'join' of our sources, we will keep
the new network code of Boris separate so that we have two
upcoming versions of Legacy : they will have the same
additions but one will include the new net code and will
be released as a 'network betatest' version.
* i_sound.c : use MIDI_AUTODETECT so Allegro checks the midi
setting in the sound.cfg file. DIGMID now can be set through
the sound.cfg file. The init sound error is printed to
stderr and can be seen on exit of the game if an error
occured (like not enough digital voices for DIGMID).
* d_main.c : removed fflush of stderr so all error msgs are printed
out on exit. Fflush was to prevent msgs from printing while
the game screen was initted, but now they are no such msgs
anymore, further debugging can be printed out to the console.
* m_menu.c : removed trailing spaces from player name when press
Enter, so the names looks good in console messages.
* hu_stuff.c, p_user.c : show dm rankings while in dead view, for
deathmatch. P_DeathThink() sets 'playerdeadview' which is
checked by hu_stuff.
* hu_stuff.c : the dm rankings now display the name of the view
player in white when looking at a demo, and displays the
console player name in white when really playing.
* m_menu.c : finished the testing mode in video menu, at last.
* m_menu.c : video modes menu, fixed a bug with going left in
the first modes column, cursor would move to a wrong place
* hu_stuff.c, console.c : fixed clearing the hud messages from
the view borders when playing in a reduced window. Hu_lib
used to do this before I kicked it out :)
* console.c, r_plane.c, r_things.c : added con_clipviewtop, clips
the view when the console is on, so it doesn't draw parts
of the view that are hidden by the console.
added drawing of a background console picture like Quake,
doesn't look as good as translucency, but is faster (clips
the view), and gives users the chance to customise their
added 'background' console command, to choose between the
translucent background or a picture (resource "CONSBACK")
* w_wad.h : now contains some resource structure definitions as
they are found in wad files, added pic_t for flat, non-
transparent, rectangular block of picture
* command.c : added saving the console variables where CV_SAVE flag
is set, to config.cfg
* command.c : finished the exec command : load a file and push
it in the command buffer, hard one :)
m_misc.c : FIL_ReadFile() now appends a zero byte, so that the
command execution can do strlen() on the text buffer, like
it does on console commands
d_main.c : push a "exec config.cfg" command to execute the config
settings at start of the game!
Now I have to convert most of the defaults file values to
console variables and have them in the config.cfg.
Problem is: not all values are meant to be changed at the console,
like soundcard, ect.. so default.cfg will probably stay.
* d_netcmd.c : added cvars for player name and color
* v_video.c,screen.c,d_main.c : added gamma var,
to check when gamma has changed and request a setpalette.
* r_main.c,screen.c,m_menu.c,d_main.c : added viewsize var,
* m_menu.c : added crosshair var
* hu_stuff.c : added chatmacro command, cvars, save to config
* m_menu.c : some tweaks to disable console & menu at the same time,
should be done better eg: 'routing' keys to either or the two
* m_menu.c : added invertmouse,autorun,alwaysfreelook vars
* command.c : wait now takes a value, how many tics to wait,
1 tic default
* d_main.c : flushes config.cfg for game startup, and executes
autoexec.cfg at start of Doomloop, now can put
ag: map 10 in autoexec.cfg
Added some other variables for the console
* Added 5 translucency tables, use the frame upper 16 bits,
only 3bits now reserved through FF_TRANSMASK to set the
translucency. Advantage: is per frame, not per thing.
* Made a brighter 50-50 translucency for fireballs, ect. now
they look as bright as the original, while still translucent
* Made the special torches translucency brighter too, used
it for flaming barrels and da skulls !
* When power invisibility is running out, it now toggles between
hi trans and med trans instead of toggleing between trans and
opaque, only when it is fully finished, the player becomes
* The spectres are really hard to see now!
* quick-n-dirty add command "bloodtime" .. TO FIX FOR NETWORK.
* started status bar overlay.
* solidcorpse var
* made the startup loading screen in 320x200:
- all printf replaced by CONS_Printf, does printf until the
console is ready
- it feels like it loads faster, of course it's an illusion,
but it's better, this is due to the graphics appeal instead
of the boring text screen of the game startup, probably.
- now maybe we can have the Legacy logo there as background,
and restore the original doom title screens after loading ?
Sun 03-05-1998: "we got to release soon.."
* the loading screen uses the user default video mode, so it can
be 640x480 for example, which looks nice!
* vid_vesa.c : reworked a little the vid commands, I named them
just like Quake, but why the hell? I won't go on using always
the same command names as Quake where possible, I don't think
it's really useful, and then it's getting boring.
now we have: vid_nummodes,
vid_mode (set a mode)
* console.c : added con_size var to choose the height of the
console panel in percent, eg 50 = half the screen height
* Started the HIGHCOLOR mode support ! at about 2:00 morning!
when will it be finished ? :)
Mon 04-05-1998: "we have to release soon!"
* Still on the hicolor stuff.. reorganised r_draw.c, separated
r_draw8.c and r_draw16.c, included by r_draw.c
Wed 06-05-1998: "when are we releasing!!!?"
* test of hicolor : use hicolor colormaps, convert wall & flats at
loading time, using gradients in it to see all the colours..
whoaaaa!! totally weird but colourful to the least!
While looking at the setup of sprites/flats/textures for the
loading of wad files through console at run time.. I tweaked
some other related stuff..
* s_sound, i_sound : removed precache sounds by default, this will
be useful with runtime loaded wads, to flush sounds that are
to be replaced, use -precache to precache sounds.
* r_things : sprites in pwads work!!! I always thought there was
some real problem but no!! Just disabled some ridiculous
error msgs that used to quit the game, now they just print
to the console.
Fri 08-05-1998: "parrallel coding, Boris with his portable"
* fixed sequential completion for commands and vars.
* fixed sprites in a pwad, still needs 'S_END' though.. doesnt
support old dmadds wads, is it worth it? dehacked sprites
renaming was mutual exclusive with dmadds wad support, kicked
out dmadds wad support, was it worth it ?
* made borders for console in translucent mode, not good enough:
should look more 'metal', but the code is there.
* lots of little fixes
* w_wad.c : added support for dynamic loading of wads
* g_game.c, p_setup.c ... : the 'map' command can load external
maps! it works, basically !
TODO: load textures, sprites, sounds at run time
sounds : just un-cache them so they get loaded again
textures: check for TEXTURE1/2 in current wad file,
free the arrays, and recalc them
sprites : from the sprite names, check if sprite are
defined in the wad, free arrays, recalc stuff,
uncache, free old sprite graphics
R_GetColumn will reload the new sprites
TODO: add dir command to list all wads,demos..
user easy: 'map' command,
low level: 'addwad <filename>' add a file to the wad list
'wads' show active wads & numbers
??? find something neat :) !!!
Mon 11-05-1998: "aaargh! two months! we gotta release!"
Working with Boris to finish a release.
Fri 15-05-1998: "still not released!!!"
I have broken the support of sprites in pwad, flats in pwad, ect
with the new dynamic wad loading.. have to fix that for the
* p_setup.c : at last fixed flats in pwad, no need for F_END.
Sat 16-05-1998: "wahoo! flats in pwads finished"
* p_setup.c, p_spec.c : ok, flat in pwads works 100%, no need for
P_START,P_END, accept any number of animated flat sequences
(will add easily new flat sequences, routine is ready)
should work with dynamic loaded wads
* r_data.c, r_things.c : nearly fixed sprites in pwad!! army of
death dehacked + sprites in pwad (deutex not used), works!!
just some special cases to fix ..
* vid_vesa.c : night, after work, started removing anti-windowsNT
code : use farpoke instead of direct adressing, ect..
* Added cheat commands, so that dehacked patches don't prevent me
from cheating !
* st_stuff.c : fixed postion of status bar overlay in weird
resolutions 400x300, 512x384.. not perfect.
* r_things.c : fixed replacing only some frames with sprites in
pwad, super-clean only 3 lines of code more !!
Now Army of Darkness works perfeclty!!!
Works with dmadds wad and empty resources too!
* Wohooo! Tested several old wads from dmadds to sprite renaming,
they all work!
* Fixed bug in VerifFavoritWeapon switching to supershotgun in Doom1.
RELEASE OF LEGACY V1.20 ! AT LAST!
It was to be release v1.13 but then Boris noted that the second
number after the decimal point is for bug-fixes.. so this became
the v1.2 release.
There will probably follow some updates from v1.21 up to v1.29.
The log is continued in another file, because my preferred
Navigator/editor (DOSNAV) likes to cut short too long files
in the text editor..
End of Doom source code change log (v1.0->v1.20) from 'team Legacy'