======================================================================== v1.2 12 Mar 98 ------------------------------------------------------------------------ Fixed bug in DrawPatchIndirectFlipped() in v_video.c that caused crash in DOOM2 Finale. ------------------------------------------------------------------------ Applied bug patches from Cyril Deble for rotatemap and maponhu. Use 'z' to cycle through map types. ------------------------------------------------------------------------ DIRECTCGX and DEH weren't recognised as tooltypes. Fixed in amiga_main.c. ------------------------------------------------------------------------ Added support for Graffiti gfx adaptor in amiga_video.c and amiga_main.c using graffiti.library. New options -graffiti (for 320x256) and -graffiti2 (for 640x256, AGA only). I can't test these options properly because I don't have a Graffiti board. ------------------------------------------------------------------------ Made bug-fix to R_DrawPlanes() in amiga_draw.s as suggested by Arto Huusko. Fixes glitch with first sky column. ------------------------------------------------------------------------ Attempted to implement Graffiti support using graffiti.library in amiga_video.c and v_video.c. New options -graffiti (320x256) and -graffiti2 (640x256, AGA only). I'm told, however, that it doesn't work, perhaps because of the Window that is opened for IDCMP input. ------------------------------------------------------------------------ Explicitly set topaz8 font. The -fps option may have crashed before if a larger font was used and text overflowed the bitmap. ------------------------------------------------------------------------ Translate keys '<' to ',' and '>' to '.' so SHIFT and strafe work at the same time. Numeric keys '1'..'9' and '0' are translated directly from the raw keycode instead of using MapRawKey() so you don't need SHIFT to change weapons on French keyboards. The DEL key is now the same as F11 (change gamma) instead of KEY_BACKSPACE. ------------------------------------------------------------------------ Changed "if (french)" to "if (language==french)" in several places in wi_stuff.c and hu_stuff.c because french is always 1. This appears to have fixed problems with cooperative network play beyond level 1 and also keymap translation for messages in network play. ------------------------------------------------------------------------ Fixed bug in st_stuff.c that caused IDCLEVnn cheat to fail with commercial WADs. (Variable epsd was set to 0 instead of 1.) ------------------------------------------------------------------------ Split amiga_draw.s into several files: amiga_draw.s; amiga_things.s; amiga_segs.s; amiga_data.s; amiga_sight.s; amiga_plane.s. ------------------------------------------------------------------------ Applied patches supplied by Arto Huusko to several amiga_*.s routines. Added some more assembly routines from Arto too. ------------------------------------------------------------------------ Changed smakefile to assemble *.s files with PhxAss v4.37 instead of with Macro68 and asm. Made minor changes to several *.s files so they assembled with PhxAss, e.g, QUAD directive -> CNOP 0,4. ------------------------------------------------------------------------ Added -rawkey option in amiga_video.c for translating keys the old way with a static table. ------------------------------------------------------------------------ Replaced amiga_sound.c with version from Joe Fenton which LoadSeg()s a separate ADoom_SndSrvr module for music and sound effects. This module does proper stereo panning with sound effects and can play up to 16 sounds at once. The file amiga_music.c is no longer used. ======================================================================== v1.1 20 Feb 98 ------------------------------------------------------------------------ Restored MAXVISSPRITES, MAXDRAWSEGS and MAXVISPLANES to their original values. They took up too much memory and often caused structures to be allocated in chipmem, slowing the game down. ------------------------------------------------------------------------ Explicitly declare KeymapBase in amiga_video.c and explicitly open and close keymap.library. Otherwise SAS/C tries to open v38 of keymap.library (because __oslibversion == 38 in amiga_main.c) and this fails in OS3.0 which comes with only v37 of keymap.library. ------------------------------------------------------------------------ Increased MAXSPECIALCROSS in p_enemy.c from 8 to 20 to match p_map.c. (With the original value of 8, array indices go out of bounds in p_map.c.) ======================================================================== v1.0 19 Feb 98 ------------------------------------------------------------------------ Changed amiga_video.c to pre-calculate amiga colourtables for all possible palettes for a given gamma level. Added new routine I_RecalcPalettes(). Added another argument to I_SetPalette(). Change all places where I_SetPalette() is called and also where usegamma is modified. Fixed bug with colour 0. ------------------------------------------------------------------------ Added support for different display resolutions. Added -width and -height options in v_video.c. SCREENWIDTH and SCREENHEIGHT are now variables. All static arrays with size dependent on SCREENWIDTH and SCREENHEIGHT are now dynamically allocated. In particular, openings[], floorclip[], ceilingclip[], spanstart[], spanstop[], yslope[], distscale[], cachedheight[], cacheddistance[], cachedxstep[], cachedystep[], xtoviewangle[], negonearray[], screenheightarray[], ylookup[], ylookup2[], columnofs[] and FUZZOFFSET[] are now pointers instead of arrays. Dynamically initialise FUZZOFFSET[] table. Also the top[] and bottom[] arrays in visplane_t are now pointers to shorts instead of arrays of bytes. Row index no longer fits in a byte. Changed many lea instructions in amiga_draw.s to movea.l instructions to handle pointers instead of arrays. Many occurrances of SCREENWIDTH and SCREENHEIGHT changed to 320 and 200 respectively because they refer to, e.g, fixed data read from file. On the other hand, many constants changed to formulas involving SCREENWIDTH and SCREENHEIGHT because they deal with display offsets. Added V_DrawPatchInDirect() and V_DrawPatchInDirectFlipped() functions to v_video.c which stretch a patch while rendering to display. Used these for stretching init/help/finale screens and for stretching icons and text. Modified R_DrawViewBorder() in r_draw.c to draw border around sides of status bar. Many of the ideas and code snippets for high resolution modes came from v0.47 of DOSDOOM, a DOS port of LinuxDOOM by Chi Hoang (cyhoang@acs.ucalgary.ca). Modified C2P routines to handle large displays. Chip buffers are now dynamically allocated in amiga_video.c. Very long blits are split into smaller blits that the blitter can cope with. Changed the vertical scale for rendering the sky so it doesn't "wrap around" in high resolution modes. New variable: pspriteiscale2. ------------------------------------------------------------------------ Added dehacked.c from Cyril Deble <Cyril.Deble@inforoute.cgs.fr> for parsing .DEH format patch files. Called from d_main.c. ------------------------------------------------------------------------ Rewrote keyboard handling routine. Now call keymap.library MapRawKey() for raw keycodes < 0x40. Translate numeric keypad keys to different codes. ------------------------------------------------------------------------ Call cybergraphics.library BestCModeIDTags() to find best mode (if cybergraphics.library was successfully opened). ------------------------------------------------------------------------ Added I_MarkRect() to amiga_video.c to record dirtybox. Every rendering function that used to call V_MarkRect() now calls I_MarkRect() to record the rectangle that was dirtied. The main 3D viewwindow is the only thing not so marked. I_FinishUpdate() uses this information to minimise the amount of copying with WPA8() or C2P(). (Unfortunately most C2P routines still convert the entire display because they don't handle offset and modulo.) ------------------------------------------------------------------------ Had another go at getting -directcgx working properly with double-buffering. Double-buffering uses a double-height Screen and ScrollVPort(), not ChangeScreenBuffer(). Not everyone has the latest version of CyberGraphX which supports ChangeScreenBuffer() yet. The main problem I had before is that I forgot to recalculate the ylookup[] and ylookup2[] arrays of screen addresses whenever the buffer flipped. So ADoom always rendered the 3D view into the same buffer. At the end of each frame with -directcgx, the dirtybox is copied to the other buffer with ClipBlit(). That's because text, icons, status bar, etc, must be rendered into both buffers. The 3D viewwindow is not copied unless it falls within the dirtybox. Hopefully ClipBlit() uses the gfx-card's blitter because both the src and dest are in the CyberGraphX Window. I'm still stymied at being unable to read displayed information back from a CyberGraphX Window, as is done by the wipe routine at the start of each level (I_ReadScreen()). ReadPixelArray8() from the hidden part of a CyberGraphX Window seems to return junk. Is this a bug in cybergraphics.library? LockBitMapTags() followed by memcpy() from the framebuffer also seems to return junk. Is the GVP Spectrum 28/24 framebuffer write-only? ------------------------------------------------------------------------ Added several hand-optimised assembly replacements for various C routines to amiga_draw.s as emailed to me by Arto Huusko <arto.huusko@pp.qnet.fi>. This resulted in a signifi...
amigafan