amiga_notes.txt

(34 KB) Pobierz
========================================================================
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...
Zgłoś jeśli naruszono regulamin