mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-25 03:00:46 +00:00
git-svn-id: https://svn.eduke32.com/eduke32@1178 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
6f514cf91e
commit
8ec01d5ea2
34 changed files with 128 additions and 1367 deletions
|
@ -73,7 +73,8 @@ endif
|
||||||
|
|
||||||
OURCFLAGS=$(debug) -W -Wall -Wimplicit -Werror-implicit-function-declaration \
|
OURCFLAGS=$(debug) -W -Wall -Wimplicit -Werror-implicit-function-declaration \
|
||||||
-funsigned-char -fno-strict-aliasing -DNO_GCC_BUILTINS -DNOCOPYPROTECT \
|
-funsigned-char -fno-strict-aliasing -DNO_GCC_BUILTINS -DNOCOPYPROTECT \
|
||||||
-I$(INC) -I$(EINC) -I$(SRC)/jmact -I$(SRC)/jaudiolib
|
-I$(INC) -I$(EINC) -I$(SRC)/jmact -I$(SRC)/jaudiolib \
|
||||||
|
# -march=pentium3 -mtune=generic -mmmx -m3dnow -msse -mfpmath=sse
|
||||||
OURCXXFLAGS=-fno-exceptions -fno-rtti
|
OURCXXFLAGS=-fno-exceptions -fno-rtti
|
||||||
LIBS=-lm
|
LIBS=-lm
|
||||||
|
|
||||||
|
|
|
@ -58,13 +58,13 @@ $(OBJ)/mvreverb.$o: $(SRC)/jaudiolib/mvreverb.nasm
|
||||||
$(OBJ)/mv_mix-c.$o: $(SRC)/jaudiolib/mv_mix-c.c
|
$(OBJ)/mv_mix-c.$o: $(SRC)/jaudiolib/mv_mix-c.c
|
||||||
$(OBJ)/mvreverb-c.$o: $(SRC)/jaudiolib/mvreverb-c.c
|
$(OBJ)/mvreverb-c.$o: $(SRC)/jaudiolib/mvreverb-c.c
|
||||||
$(OBJ)/pitch.$o: $(SRC)/jaudiolib/pitch.c $(SRC)/jaudiolib/pitch.h
|
$(OBJ)/pitch.$o: $(SRC)/jaudiolib/pitch.c $(SRC)/jaudiolib/pitch.h
|
||||||
$(OBJ)/multivoc.$o: $(SRC)/jaudiolib/multivoc.c $(SRC)/jaudiolib/usrhooks.h $(SRC)/jaudiolib/linklist.h $(SRC)/jaudiolib/pitch.h $(SRC)/jaudiolib/multivoc.h $(SRC)/jaudiolib/_multivc.h
|
$(OBJ)/multivoc.$o: $(SRC)/jaudiolib/multivoc.c $(SRC)/jaudiolib/linklist.h $(SRC)/jaudiolib/pitch.h $(SRC)/jaudiolib/multivoc.h $(SRC)/jaudiolib/_multivc.h
|
||||||
$(OBJ)/fx_man.$o: $(SRC)/jaudiolib/fx_man.c $(SRC)/jaudiolib/multivoc.h $(SRC)/jaudiolib/ll_man.h $(SRC)/jaudiolib/fx_man.h
|
$(OBJ)/fx_man.$o: $(SRC)/jaudiolib/fx_man.c $(SRC)/jaudiolib/multivoc.h $(SRC)/jaudiolib/ll_man.h $(SRC)/jaudiolib/fx_man.h
|
||||||
$(OBJ)/dsoundout.$o: $(SRC)/jaudiolib/dsoundout.c $(SRC)/jaudiolib/dsoundout.h
|
$(OBJ)/dsoundout.$o: $(SRC)/jaudiolib/dsoundout.c $(SRC)/jaudiolib/dsoundout.h
|
||||||
$(OBJ)/openal.$o: $(SRC)/jaudiolib/openal.c $(SRC)/jaudiolib/openal.h
|
$(OBJ)/openal.$o: $(SRC)/jaudiolib/openal.c $(SRC)/jaudiolib/openal.h
|
||||||
$(OBJ)/dsl.$o: $(SRC)/jaudiolib/dsl.c $(SRC)/jaudiolib/dsl.h $(EINC)/compat.h
|
$(OBJ)/dsl.$o: $(SRC)/jaudiolib/dsl.c $(SRC)/jaudiolib/dsl.h $(EINC)/compat.h
|
||||||
|
|
||||||
$(OBJ)/midi.$o: $(SRC)/jaudiolib/midi.c $(SRC)/jaudiolib/standard.h $(SRC)/jaudiolib/usrhooks.h $(SRC)/jaudiolib/music.h $(SRC)/jaudiolib/_midi.h $(SRC)/jaudiolib/midi.h
|
$(OBJ)/midi.$o: $(SRC)/jaudiolib/midi.c $(SRC)/jaudiolib/standard.h $(SRC)/jaudiolib/music.h $(SRC)/jaudiolib/_midi.h $(SRC)/jaudiolib/midi.h
|
||||||
$(OBJ)/mpu401.$o: $(SRC)/jaudiolib/mpu401.c $(SRC)/jaudiolib/mpu401.h
|
$(OBJ)/mpu401.$o: $(SRC)/jaudiolib/mpu401.c $(SRC)/jaudiolib/mpu401.h
|
||||||
$(OBJ)/music.$o: $(SRC)/jaudiolib/music.c $(SRC)/jaudiolib/music.h $(SRC)/jaudiolib/midi.h $(SRC)/jaudiolib/mpu401.h
|
$(OBJ)/music.$o: $(SRC)/jaudiolib/music.c $(SRC)/jaudiolib/music.h $(SRC)/jaudiolib/midi.h $(SRC)/jaudiolib/mpu401.h
|
||||||
|
|
||||||
|
|
|
@ -1,495 +0,0 @@
|
||||||
8 Jun 2004
|
|
||||||
|
|
||||||
* Transparency bug noticed by Usurper should now be fixed.
|
|
||||||
* MD2 definition problem noticed by Parkar should also be fixed too.
|
|
||||||
|
|
||||||
|
|
||||||
5 Jun 2004
|
|
||||||
|
|
||||||
* Some foolish bugs in my (JonoF) code in the MD2 stuff now fixed.
|
|
||||||
* Linux should be fine now. At least, it worked on my machine.
|
|
||||||
|
|
||||||
|
|
||||||
3 Jun 2004
|
|
||||||
|
|
||||||
* MD2 model support is official now. We've also added a script reader
|
|
||||||
for the new .DEF format. KenBuild uses KENBUILD.DEF for its stuff.
|
|
||||||
|
|
||||||
|
|
||||||
26 May 2004
|
|
||||||
|
|
||||||
* glusecds is set to 0 by default now. The glusecds console variable
|
|
||||||
can be set to 1 to enable the use of the ChangeDisplaySettings()
|
|
||||||
function which works better for Intel video chipsets.
|
|
||||||
|
|
||||||
|
|
||||||
22 May 2004
|
|
||||||
|
|
||||||
* Gave things a nice overhaul to cut back the insanity of the
|
|
||||||
classic/softpolymost/glpolymost stuff. It was beginning to scare
|
|
||||||
me. The underhanded and behind-the-back tricks are banished.
|
|
||||||
|
|
||||||
The whole rendermethod thing is gone. Now, setgamemode() and
|
|
||||||
related paraphenalia all accept a 'bits-per-pixel' parameter.
|
|
||||||
Colour depths > 8 are forced to use GL polymost (naturally).
|
|
||||||
8bpp modes can use the regular renderer, and the software polymost
|
|
||||||
stuff. This means switchrendermethod() is removed from the layers.
|
|
||||||
|
|
||||||
SDLayer.c is back in sync too, so Build on Linux works again.
|
|
||||||
|
|
||||||
|
|
||||||
8 May 2004
|
|
||||||
|
|
||||||
* Finally remembered to add 33%/66% translucency support to hightile
|
|
||||||
tiles.
|
|
||||||
|
|
||||||
|
|
||||||
8 Mar 2004
|
|
||||||
|
|
||||||
* Added setpalettefadeclamps() to allow continual palette tinting
|
|
||||||
effects.
|
|
||||||
* Added back PCX format screenshot saving. The new screenshotformat
|
|
||||||
console variable selects whether to take PCX format (= 0, default)
|
|
||||||
or TGA format (= 1).
|
|
||||||
|
|
||||||
|
|
||||||
12 Feb 2004
|
|
||||||
|
|
||||||
* Greyscaling and inverting of tiles in hightile/polymost added.
|
|
||||||
This makes Duke's nightvision work better for Hightile textures
|
|
||||||
that use palette 6.
|
|
||||||
|
|
||||||
|
|
||||||
11 Feb 2004
|
|
||||||
|
|
||||||
* Broke out the non-OSD related commands from osd.c into baselayer.c.
|
|
||||||
* Added alternative display mode setting method using
|
|
||||||
ChangeDisplayMode() which can optionally be used for OpenGL mode
|
|
||||||
changes. Set the environment variable BUILD_USEGLCDS=TRUE to use.
|
|
||||||
* Added the glcolourdepth variable for selection of fullscreen GL
|
|
||||||
colour depth.
|
|
||||||
* Changed OSD_HandleKey() to not ignore releases, otherwise the game
|
|
||||||
world will always think its keys are held down. It ignores presses
|
|
||||||
though, which we want.
|
|
||||||
|
|
||||||
|
|
||||||
10 Feb 2004
|
|
||||||
|
|
||||||
* Added some protection to [k]?dfread() to indicate whether they
|
|
||||||
have failed to decompress some bytes so that the game doesn't
|
|
||||||
crash if a demo or savegame is fragged.
|
|
||||||
|
|
||||||
|
|
||||||
7 Feb 2004
|
|
||||||
|
|
||||||
* Hightile integration seems fine now. New functions to specify
|
|
||||||
replacement textures and palette tints can be seen in build.h.
|
|
||||||
* Joystick support is added. Seems to work.
|
|
||||||
* Hopefully a change I've made to the tile selector in Build when
|
|
||||||
using OpenGL mode has fixed the problem of the edges being
|
|
||||||
clipped off the screen...
|
|
||||||
|
|
||||||
|
|
||||||
22 Jan 2004
|
|
||||||
|
|
||||||
* Modified screencapture() to not overwrite existing screenshots.
|
|
||||||
|
|
||||||
|
|
||||||
19 Jan 2004
|
|
||||||
|
|
||||||
* loadboard() got a new second parameter inserted. This tells
|
|
||||||
kopen4load() where to seek out the map file. The values are:
|
|
||||||
0 - anywhere
|
|
||||||
1 - the first GRP file (same as setting strlen(fn)-1 to 0xff)
|
|
||||||
2 - any grp file
|
|
||||||
|
|
||||||
|
|
||||||
17 Jan 2004
|
|
||||||
|
|
||||||
* Fixed Bcorrectfilename() to handle Win98's different operation
|
|
||||||
of GetFullPathName() when compared to Win2k. Now Build doesn't
|
|
||||||
ascend 2 directories at once when running on 98.
|
|
||||||
|
|
||||||
|
|
||||||
16 Jan 2004
|
|
||||||
|
|
||||||
* Undid some stuff which was a little braindamaged in winlayer.c.
|
|
||||||
I can't for the life of me remember why I was destroying the
|
|
||||||
window and recreating it when switching rendering modes when it
|
|
||||||
was entirely unnecessary and could potentially piss off other
|
|
||||||
services which aren't expecting their window handle to suddenly
|
|
||||||
be invalid, like DirectSound.
|
|
||||||
* In typical JonoF style of a couple of years ago, I made an error
|
|
||||||
when I did the gruntwork to port Build to Windows and as a
|
|
||||||
sideeffect of my unchecked amateurness I bent the point
|
|
||||||
highlighting in the editor. It's straightened now. :-(
|
|
||||||
|
|
||||||
|
|
||||||
12 Jan 2004
|
|
||||||
|
|
||||||
* sdlayer.c has been brought into line with winlayer.c. Now
|
|
||||||
everything that winlayer.c also works in SDL.
|
|
||||||
|
|
||||||
|
|
||||||
10 Jan 2004
|
|
||||||
|
|
||||||
* Added uninitsinglegroupfile() to unload a particular group file.
|
|
||||||
* Added a mechanism to do a "findfirst/next" over the group files.
|
|
||||||
* Modified Build.c to include maps inside the GRPs in the file
|
|
||||||
list.
|
|
||||||
|
|
||||||
|
|
||||||
2 Jan 2004
|
|
||||||
|
|
||||||
* Crash bug on starting Build editor fixed. See list of original
|
|
||||||
bugs for information.
|
|
||||||
|
|
||||||
|
|
||||||
1 Jan 2004
|
|
||||||
|
|
||||||
* Many Polymost bugs fixed. Mirrors now work. All kinds of funky
|
|
||||||
stuff.
|
|
||||||
|
|
||||||
|
|
||||||
29 Dec 2003
|
|
||||||
|
|
||||||
* Updated screencapture() to support GL modes.
|
|
||||||
* Modified 2D mode editor screen capture to keep the status bar
|
|
||||||
visible. Done with Ken's blessing.
|
|
||||||
|
|
||||||
|
|
||||||
23 Dec 2003
|
|
||||||
|
|
||||||
* Build mouse sensitivity has changed to use a floating point value
|
|
||||||
in the configuration file to specify the sen
|
|
||||||
* First public release of Ken's new "Polymost" renderer. 6 degrees
|
|
||||||
of freedom and full 3D rendering, including OpenGL.
|
|
||||||
* Palette handling has changed somewhat drastically. The engine now
|
|
||||||
supports palette fading natively, which means where games used
|
|
||||||
to manipulate a copy of the palette and send it to the video card,
|
|
||||||
this manipulation is now done by the engine via a function named
|
|
||||||
setpalettefade(). See the header for details. In adding this,
|
|
||||||
setbrightness() gained a third parameter, which is almost always
|
|
||||||
passed as 0 unless doing a palette fade and adjusting the game
|
|
||||||
palette immediately before it, in which case pass 1 so that
|
|
||||||
setbrightness() doesn't apply its base palette, otherwise weird
|
|
||||||
palette flashes will happen and we don't want that.
|
|
||||||
This was all necessary in order to let Ken's Polymost code have
|
|
||||||
access to the basic, unmodified palette for its own purposes.
|
|
||||||
|
|
||||||
|
|
||||||
20 Dec 2003
|
|
||||||
|
|
||||||
* Dynamic player collection has been cleaned up ever so slightly and
|
|
||||||
seems to work pretty well so far on just my LAN. No internet test
|
|
||||||
has been performed yet.
|
|
||||||
* Screen tilting in game.c now uses polymost's tilting abilities if
|
|
||||||
rendmode > 0 is used.
|
|
||||||
|
|
||||||
|
|
||||||
10 Dec 2003
|
|
||||||
|
|
||||||
* Dynamic player collection works at this stage. It's all implemented
|
|
||||||
in game-land because it's easier to do at this stage, but I
|
|
||||||
anticipate moving most of the general stuff into the engine if I
|
|
||||||
find it necessary.
|
|
||||||
|
|
||||||
|
|
||||||
6 Dec 2003
|
|
||||||
|
|
||||||
* Modified the checkvideomodes() function in winlayer.c to behave
|
|
||||||
slightly different and return 0x7fffffffl if the video mode passed
|
|
||||||
is not a recognized mode in windowed operation, otherwise it
|
|
||||||
returns the video mode index in validmode*[]. Sdlayer.c isn't
|
|
||||||
modified to do this yet.
|
|
||||||
* Applied Ken's fix for crashes which ensue when calling rotatesprite
|
|
||||||
inside drawrooms. See details in bug fixes list below.
|
|
||||||
|
|
||||||
|
|
||||||
5 Dec 2003
|
|
||||||
|
|
||||||
* At 2.50pm today jmulti.c achieved operational capacity and survived
|
|
||||||
a 15 minute 2-player network game with my father on our LAN.
|
|
||||||
|
|
||||||
|
|
||||||
25 Nov 2003
|
|
||||||
|
|
||||||
* Added a missing "CDECLENDSET 6" on line 504 of a.nasm. Without it
|
|
||||||
the registers are trashed upon return which made Win98 crash when
|
|
||||||
running GCC-built executables.
|
|
||||||
|
|
||||||
|
|
||||||
24 Nov 2003
|
|
||||||
|
|
||||||
* Silly typo fixed in winlayer.c.
|
|
||||||
|
|
||||||
|
|
||||||
23 Nov 2003
|
|
||||||
|
|
||||||
* Modified build.c and config.c to use integer arithmetic for mouse
|
|
||||||
sensitivity stuff. I don't like floating-point all that much out of
|
|
||||||
a general sense of prejudice.
|
|
||||||
|
|
||||||
|
|
||||||
19 Nov 2003
|
|
||||||
|
|
||||||
* Modified the Build editor such that it no longer is constrained to
|
|
||||||
640x480 in 2D mode. It now defaults to using the same resolution
|
|
||||||
that is selected in 3D mode, but may be overridden by using a
|
|
||||||
new setting named '2dresolution' in the build.cfg file. It uses the
|
|
||||||
same mode numbers as the existing 'resolution' setting.
|
|
||||||
* Ctrl+A, Ctrl+Z, KP2, KP4, KP6, and KP8 in 3D mode, plus A and Z in
|
|
||||||
2D mode are now speed limited.
|
|
||||||
|
|
||||||
|
|
||||||
19 Oct 2003
|
|
||||||
|
|
||||||
* Fixed some brain damaged error causing crashes when hitting enter
|
|
||||||
after entering a filename for Save As. I really am dumb sometimes.
|
|
||||||
* Added mouse sensitivity to Build editor. Add this to your build.cfg
|
|
||||||
; Mouse sensitivity
|
|
||||||
; 128 = 1:2
|
|
||||||
; 256 = 1:1
|
|
||||||
; 512 = 2:1
|
|
||||||
mousesensitivity = 256
|
|
||||||
|
|
||||||
|
|
||||||
4 Oct 2003
|
|
||||||
|
|
||||||
* Modified things to allow compilation with Microsoft C. Building
|
|
||||||
with MSC requires using the C-only configuration, which is how
|
|
||||||
the makefile is currently configured.
|
|
||||||
|
|
||||||
|
|
||||||
13 Sep 2003
|
|
||||||
|
|
||||||
* Added tab-completion of symbols into the OSD.
|
|
||||||
* Moved the "dumpbuildinfo" console function from the Duke source
|
|
||||||
into the OSD as a basic function.
|
|
||||||
|
|
||||||
|
|
||||||
11 Sep 2003
|
|
||||||
|
|
||||||
* Engine now able to build entirely from C source. Assembly
|
|
||||||
is entirely optional now.
|
|
||||||
* Engine now compiles with OpenWatcom 1.0.
|
|
||||||
|
|
||||||
|
|
||||||
22 May 2003
|
|
||||||
|
|
||||||
* Fixed a bug where the movement clipping lines array was being
|
|
||||||
overrun in extreme circumstances. Thanks to BlasterDRP for
|
|
||||||
pointing this out. See the epilogue for more details.
|
|
||||||
|
|
||||||
|
|
||||||
17 May 2003
|
|
||||||
|
|
||||||
* With Ken's help the rendering performance in 1024x768 is now
|
|
||||||
dramatically improved. By making scanlines odd lengths the CPU
|
|
||||||
cache issues associated with multiples of 4096 are now eliminated.
|
|
||||||
* Modified the 16-colour emulation functions since 640 bytes is no
|
|
||||||
longer the pitch of one line.
|
|
||||||
* Added auto-repainting of the frame if WM_PAINT is posted in the
|
|
||||||
winlayer. The repaint happens on a call to handleevents();
|
|
||||||
|
|
||||||
|
|
||||||
15 May 2003
|
|
||||||
|
|
||||||
* Rewrote the map menu.
|
|
||||||
|
|
||||||
|
|
||||||
11 May 2003
|
|
||||||
|
|
||||||
* Rewrote the onscreen display. It's now a lot like Quake's console.
|
|
||||||
|
|
||||||
|
|
||||||
7 May 2003
|
|
||||||
|
|
||||||
* Changed CACHE1D.C to open the group file in read-only mode. Why it
|
|
||||||
was being opened in random-access is a mystery to me. This fixes
|
|
||||||
problems where the GRP file was read-only and the games would not
|
|
||||||
start. Thanks to Sean Magiera for this one.
|
|
||||||
* Added detection of input devices to winlayer.c (and made sdlayer.c
|
|
||||||
currently enable only keyboard and mouse without testing). Now the
|
|
||||||
Duke input code can grow a little more intelligent.
|
|
||||||
|
|
||||||
|
|
||||||
1 May 2003
|
|
||||||
|
|
||||||
* Made Ctrl+Tab show sprite stats in the way Alt+Tab does.
|
|
||||||
* Added task switching disabling to winlayer.c.
|
|
||||||
|
|
||||||
|
|
||||||
25 Apr 2003
|
|
||||||
|
|
||||||
* Modifications here and there, plus I've adjusted the Makefile to
|
|
||||||
allow code which links against the engine to compile its own copy
|
|
||||||
in its development tree. Duke uses this to compile the engine
|
|
||||||
without voxel support.
|
|
||||||
|
|
||||||
|
|
||||||
17 Apr 2003
|
|
||||||
|
|
||||||
* Various changes have been made in order to fully support my Duke3D
|
|
||||||
port.
|
|
||||||
|
|
||||||
|
|
||||||
7 Apr 2003
|
|
||||||
|
|
||||||
* Quite a few minor changes have been made here and there.
|
|
||||||
* Added support to the interface layers for game-defined input event
|
|
||||||
callbacks which are used with the jMACT library I have written for
|
|
||||||
Duke.
|
|
||||||
* Fixed a bug which was preventing screen-tilting and savegame screen-
|
|
||||||
shots from being drawn in Duke3D. Side-effect being windowed render
|
|
||||||
mode is now more similar to fullscreen in its behaviour, ie. the
|
|
||||||
frameplace variable is set to NULL when unlocked.
|
|
||||||
|
|
||||||
|
|
||||||
1 Apr 2003
|
|
||||||
|
|
||||||
* Thanks to a report by admin@combatgold1.co.uk these bugs are fixed:
|
|
||||||
- Alt-key combinations broken. Thankyou for nothing, DirectInput.
|
|
||||||
- Prompts for menu, 3d-mode quit, etc not being displayed. A little
|
|
||||||
short-sightedness on my part to blame here.
|
|
||||||
- Crash on changing palette to a palette mapping that is NULL.
|
|
||||||
This has been a bug from the very beginning in Ken's original DOS
|
|
||||||
version too, benign back then but turned malignant now thanks to
|
|
||||||
the great debugging tool known as the segmentation fault. Fixed now.
|
|
||||||
* Took a leaf from SDL's book and made the input code not suck anymore
|
|
||||||
by having buffered keyboard and mouse with event objects to tell when
|
|
||||||
there's data available. Very nice. Something I should have done from
|
|
||||||
the start had I had a brain. Mouse is now perfectly smooth.
|
|
||||||
* Made the flash speed of highlighted sprites and lines in Build derive
|
|
||||||
from the clock and not the speed at which the frames can be drawn to
|
|
||||||
the display. In DOS, locking to the display refresh worked fine, but
|
|
||||||
my haste in porting originally did not take this into account. Fixed
|
|
||||||
now.
|
|
||||||
* Fixed a problem in my very amateur DirectDraw code where I wasn't
|
|
||||||
restoring surfaces once they'd been lost (d'uh). We now have a picture
|
|
||||||
when Alt-tabbing back to the game/editor.
|
|
||||||
* Made operation on 8-bit desktops much more sane. It actually kinda
|
|
||||||
works reliably now.
|
|
||||||
|
|
||||||
|
|
||||||
Bugs present in Ken's original source
|
|
||||||
-------------------------------------
|
|
||||||
|
|
||||||
This epilogue is here for those people wishing to do their own port of
|
|
||||||
the Build source and wish to save time tracking down bugs in Ken's source.
|
|
||||||
The bugs here are the ones I found during my travels and the list should
|
|
||||||
not be considered complete. Thankfully, Ken's code is very solid and the
|
|
||||||
bugs that do exist did not pose a serious threat under DOS, but they do
|
|
||||||
make life very interesting these days.
|
|
||||||
|
|
||||||
(Line numbers refer to Ken's original source distribution)
|
|
||||||
|
|
||||||
ENGINE.C (various locations):
|
|
||||||
Before this fix is applied you may notice crashes in game.exe
|
|
||||||
if you press Enter (main keyboard). In Ken's words:
|
|
||||||
|
|
||||||
| It crashes in dorotatesprite because it accesses rx1[], ry1[],
|
|
||||||
| rx2[], and ry2[] - global arrays which were originally intended
|
|
||||||
| to be used only by drawrooms! When I wrote that code, I must have
|
|
||||||
| assumed rotatesprite would never be called INSIDE drawrooms...
|
|
||||||
| which makes sense because I wrote rotatesprite before I wrote
|
|
||||||
| all that faketimerhandler stuff.
|
|
||||||
|
|
||||||
The solution is to place this line below somewhere, Ken suggests
|
|
||||||
immediately before clippoly4, but I chose to keep it with the rest
|
|
||||||
of static variables in ENGINE.C and put it on line 156:
|
|
||||||
|
|
||||||
static long nrx1[8], nry1[8], nrx2[8], nry2[8];
|
|
||||||
|
|
||||||
Then, all references to rx1[], ry1[], rx2[], and ry2[] in
|
|
||||||
clippoly4 and dorotatesprite *ONLY* need to be prefixed with an
|
|
||||||
'n'. Only those functions need patching, and nothing else.
|
|
||||||
|
|
||||||
|
|
||||||
ENGINE.C l1222, l1388, l7225:
|
|
||||||
palookup[] is accessed from the assembly functions to translate
|
|
||||||
palette indexes to alternate indexes for palette-shifting of
|
|
||||||
images. It contains pointers to tables which map the original
|
|
||||||
palette index to the new index. Unused lookup entries have their
|
|
||||||
pointer set to NULL. If a NULL palette lookup is referenced then
|
|
||||||
a null-pointer exception is raised. In DOS this just caused
|
|
||||||
garbage palette mappings. In Windows/Linux it causes segfaults.
|
|
||||||
A fix for this is to add a line after the specified ones like:
|
|
||||||
|
|
||||||
if (!globalpalwritten) globalpalwritten = palookup[globalpal];
|
|
||||||
|
|
||||||
This remaps the NULL palette to the default one.
|
|
||||||
|
|
||||||
ENGINE.C l5691, l5692, l5697, l5698:
|
|
||||||
drawline16() is used for the 2D map view in the BUILD editor.
|
|
||||||
In the clipping calculations it sometimes happens that the x-
|
|
||||||
coordinates are not properly clipped to the left or right of the
|
|
||||||
video memory and are offscreen by one or two pixels when clipping
|
|
||||||
against the very top or very bottom rows of video memory. Adding
|
|
||||||
these checks before the closing braces of the specified lines
|
|
||||||
makes sure the coordinate does not go negative and segfault.
|
|
||||||
|
|
||||||
Line 5691 and 5698: if (x1 < 0) x1 = 0;
|
|
||||||
Line 5692 and 5697: if (x2 < 0) x2 = 0;
|
|
||||||
|
|
||||||
ENGINE.C l88, l8326:
|
|
||||||
slopalookup[] is a table used for drawing sloped sector floors
|
|
||||||
and ceilings. It holds the palette shading indicies for each
|
|
||||||
scanline. Problem is, in high resolutions somewhere around
|
|
||||||
1024x768, this array is too small and memory corruption happens
|
|
||||||
when the code writes past the end of this array. The way to fix
|
|
||||||
it is to rewrite the algorithm. Since that's an unattractive
|
|
||||||
proposition, increasing the size of this array will hold the
|
|
||||||
problem off for more typical cases.
|
|
||||||
|
|
||||||
Line 88: long slopalookup[16384];
|
|
||||||
Line 8326: ... else shoffs = ((16380-ydimen)<<15);
|
|
||||||
|
|
||||||
ENGINE.C l6773:
|
|
||||||
The addclipline() macro appends a clipping line for the movement
|
|
||||||
clipping code to test, but it doesn't attempt to see if adding
|
|
||||||
the new line would overrun the buffer. Extreme cases exist where
|
|
||||||
the buffer overruns and the game crashes. The problem can be fixed
|
|
||||||
by testing if clipnum is less than MAXCLIPNUM before adding the
|
|
||||||
new line.
|
|
||||||
|
|
||||||
#define addclipline(dax1, day1, dax2, day2, daoval) \
|
|
||||||
{ \
|
|
||||||
if (clipnum < MAXCLIPNUM) { \
|
|
||||||
clipit[clipnum].x1 = dax1; clipit[clipnum].y1 = day1; \
|
|
||||||
clipit[clipnum].x2 = dax2; clipit[clipnum].y2 = day2; \
|
|
||||||
clipobjectval[clipnum] = daoval; \
|
|
||||||
clipnum++; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
|
|
||||||
This change will increase the possibility of clipping bugs though
|
|
||||||
because not all possible sprites may being included in the test,
|
|
||||||
so increasing the MAXCLIPNUM constant on line 31 to 1024 will
|
|
||||||
decrease the chance of this happening.
|
|
||||||
|
|
||||||
ENGINE.C l7880:
|
|
||||||
The for loop that reverses the rendered image of a mirror is
|
|
||||||
iterating one too many times. Change the for loop to read:
|
|
||||||
|
|
||||||
for(dy=mirrorsy2-mirrorsy1-1;dy>=0;dy--)
|
|
||||||
|
|
||||||
BUILD.C l2137:
|
|
||||||
gettile() sometimes gets handed a tile with an index of -1, and
|
|
||||||
doesn't adjust this to something safe before it tries to draw the
|
|
||||||
cursor for the selected tile. This is demonstrated by loading
|
|
||||||
nukeland.map in Build.exe, and making a 1-way wall on the ledge
|
|
||||||
to the left of the starting point, and then pressing 'V' on the
|
|
||||||
now grey-stone wall. Adding this line fixes the crash that ensues.
|
|
||||||
|
|
||||||
Line 2137: if (tilenum < 0) tilenum = 0;
|
|
||||||
|
|
||||||
BUILD.C l2495, l3444:
|
|
||||||
bstatus, local to overheadeditor() is not initialized to 0 on entry
|
|
||||||
to the function, which sometimes causes the sprite dragging code to
|
|
||||||
misfire resulting in a crash immediately on starting the editor. The
|
|
||||||
following changes will prevent this happening.
|
|
||||||
|
|
||||||
Line 2495: "oldmousebstatus = 0;" should be changed to "bstatus = 0;"
|
|
||||||
Line 3444: append "if ((pointhighlight&0xc000) == 16384)" to "else"
|
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
The source code is covered by the terms of Ken's original license
|
|
||||||
which can be found in the file "buildlic.txt" or at
|
|
||||||
http://jonof.edgenetwk.com/buildport/buildlic.txt
|
|
||||||
|
|
||||||
My additions and modifications are covered by the same license.
|
|
||||||
|
|
||||||
-- Jonathon Fowler (10 March 2003)
|
|
|
@ -92,7 +92,8 @@ endif
|
||||||
|
|
||||||
OURCFLAGS=$(debug) -W -Wall -Wimplicit -Wno-char-subscripts \
|
OURCFLAGS=$(debug) -W -Wall -Wimplicit -Wno-char-subscripts \
|
||||||
-funsigned-char -fno-strict-aliasing -DNO_GCC_BUILTINS \
|
-funsigned-char -fno-strict-aliasing -DNO_GCC_BUILTINS \
|
||||||
-DKSFORBUILD -I$(INC)
|
-DKSFORBUILD -I$(INC) \
|
||||||
|
# -march=pentium3 -mtune=generic -mmmx -m3dnow -msse -mfpmath=sse
|
||||||
OURCXXFLAGS=-fno-exceptions -fno-rtti
|
OURCXXFLAGS=-fno-exceptions -fno-rtti
|
||||||
LIBS=
|
LIBS=
|
||||||
ASFLAGS=-s #-g
|
ASFLAGS=-s #-g
|
||||||
|
|
|
@ -29,7 +29,6 @@ $(OBJ)/osd.$o: $(SRC)/osd.c $(INC)/build.h $(INC)/osd.h $(INC)/compat.h $(INC)/b
|
||||||
$(OBJ)/pragmas.$o: $(SRC)/pragmas.c $(INC)/compat.h
|
$(OBJ)/pragmas.$o: $(SRC)/pragmas.c $(INC)/compat.h
|
||||||
$(OBJ)/scriptfile.$o: $(SRC)/scriptfile.c $(INC)/scriptfile.h $(INC)/cache1d.h $(INC)/compat.h
|
$(OBJ)/scriptfile.$o: $(SRC)/scriptfile.c $(INC)/scriptfile.h $(INC)/cache1d.h $(INC)/compat.h
|
||||||
$(OBJ)/sdlayer.$o: $(SRC)/sdlayer.c $(INC)/compat.h $(INC)/sdlayer.h $(INC)/baselayer.h $(INC)/cache1d.h $(INC)/pragmas.h $(INC)/a.h $(INC)/build.h $(INC)/osd.h $(INC)/glbuild.h
|
$(OBJ)/sdlayer.$o: $(SRC)/sdlayer.c $(INC)/compat.h $(INC)/sdlayer.h $(INC)/baselayer.h $(INC)/cache1d.h $(INC)/pragmas.h $(INC)/a.h $(INC)/build.h $(INC)/osd.h $(INC)/glbuild.h
|
||||||
$(OBJ)/sound.$o: $(SRC)/sound.c $(INC)/osd.h $(INC)/compat.h $(INC)/cache1d.h
|
|
||||||
$(OBJ)/winlayer.$o: $(SRC)/winlayer.c $(INC)/compat.h $(INC)/winlayer.h $(INC)/baselayer.h $(INC)/pragmas.h $(INC)/build.h $(INC)/a.h $(INC)/osd.h $(INC)/dxdidf.h $(INC)/glbuild.h
|
$(OBJ)/winlayer.$o: $(SRC)/winlayer.c $(INC)/compat.h $(INC)/winlayer.h $(INC)/baselayer.h $(INC)/pragmas.h $(INC)/build.h $(INC)/a.h $(INC)/osd.h $(INC)/dxdidf.h $(INC)/glbuild.h
|
||||||
$(OBJ)/gtkbits.$o: $(SRC)/gtkbits.c $(INC)/baselayer.h $(INC)/build.h $(INC)/dynamicgtk.h
|
$(OBJ)/gtkbits.$o: $(SRC)/gtkbits.c $(INC)/baselayer.h $(INC)/build.h $(INC)/dynamicgtk.h
|
||||||
$(OBJ)/dynamicgtk.$o: $(SRC)/dynamicgtk.c $(INC)/dynamicgtk.h
|
$(OBJ)/dynamicgtk.$o: $(SRC)/dynamicgtk.c $(INC)/dynamicgtk.h
|
||||||
|
|
|
@ -1,49 +0,0 @@
|
||||||
//Be careful when changing this file - it is parsed by Editart and Build.
|
|
||||||
#define SWITCH1ON 15
|
|
||||||
#define SLIME 34
|
|
||||||
#define BACKGROUND 37
|
|
||||||
#define KENPICTURE 48
|
|
||||||
#define BUILDDISK 49
|
|
||||||
#define SWITCH2ON 66
|
|
||||||
#define SWITCH2OFF 69
|
|
||||||
#define ALPHABET 73
|
|
||||||
#define NO 74
|
|
||||||
#define DEMOSIGN 75
|
|
||||||
#define COIN 76
|
|
||||||
#define COINSTACK 77
|
|
||||||
#define GIFTBOX 78
|
|
||||||
#define DIAMONDS 79
|
|
||||||
#define EVILALGRAVE 83
|
|
||||||
#define STATUSBAR 87
|
|
||||||
#define DAYSKY 89
|
|
||||||
#define WATERFOUNTAIN 90
|
|
||||||
#define USEWATERFOUNTAIN 91
|
|
||||||
#define NIGHTSKY 93
|
|
||||||
#define BULLET 98
|
|
||||||
#define BOMB 100
|
|
||||||
#define CANNON 101
|
|
||||||
#define GUNONBOTTOM 102
|
|
||||||
#define BOMBEMITTER 103
|
|
||||||
#define EXPLOSION 105
|
|
||||||
#define SPLASH 106
|
|
||||||
#define BROWNMONSTER 110
|
|
||||||
#define SKELETON 113
|
|
||||||
#define AL 114
|
|
||||||
#define EVILAL 115
|
|
||||||
#define PLAYER 120
|
|
||||||
#define SWITCH3OFF 146
|
|
||||||
#define SWITCH3ON 147
|
|
||||||
#define AIRPLANE 148
|
|
||||||
#define SPIRAL 149
|
|
||||||
#define COMPASS 150
|
|
||||||
#define FOOTPRINT 156
|
|
||||||
#define STATUSBARFILL8 160
|
|
||||||
#define STATUSBARFILL4 161
|
|
||||||
#define BOUNCYMAT 162
|
|
||||||
#define MIRROR 165
|
|
||||||
#define FLOORMIRROR 166
|
|
||||||
#define GRABBER 167
|
|
||||||
#define GRABCANNON 168
|
|
||||||
#define MISSILE 169
|
|
||||||
#define LAUNCHER 171
|
|
||||||
#define MIRRORLABEL 4000
|
|
|
@ -1,141 +0,0 @@
|
||||||
Build Source Port by Jonathon Fowler
|
|
||||||
With contributions by Ken Silverman
|
|
||||||
|
|
||||||
ReadMe Information
|
|
||||||
|
|
||||||
|
|
||||||
First Source Release: 9 March 2003
|
|
||||||
This Release: 9 October 2005
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
A Few Notes and Words
|
|
||||||
---------------------
|
|
||||||
This is a release of the source code to my port of Ken
|
|
||||||
Silverman's Build game engine [1]. The port intends to bring the engine
|
|
||||||
source up to speed so that it may be used more easily with modern
|
|
||||||
operating systems on the x86 platform, like Microsoft Windows and *nix-
|
|
||||||
like ones such as Linux and BSD.
|
|
||||||
WinBuild is the name I give to the Windows target of this port.
|
|
||||||
It uses native Windows APIs like DirectX and the GDI to provide close
|
|
||||||
interaction with Windows for the sake of performance.
|
|
||||||
I have also developed a more platform-independant layer for
|
|
||||||
use on systems other than Windows by way of the Simple Direct-media
|
|
||||||
Layer (SDL) [2]. This layer should assist as a basis for further system
|
|
||||||
ports or for easier implementation on the platforms SDL supports.
|
|
||||||
Work on this port is a continuing process. I welcome the
|
|
||||||
contributions of programmers who have something they'd like to add (or
|
|
||||||
fix).
|
|
||||||
|
|
||||||
|
|
||||||
Configuration
|
|
||||||
-------------
|
|
||||||
Runtime settings for BUILD.EXE and GAME.EXE are set in build.cfg
|
|
||||||
and game.cfg respectively. These files are normal text files. The
|
|
||||||
original SETUP.DAT that is used in Ken's original code is not used in
|
|
||||||
this port. The config files are automatically created on the first run of
|
|
||||||
the game or editor.
|
|
||||||
|
|
||||||
|
|
||||||
Building the Source
|
|
||||||
-------------------
|
|
||||||
I build the Windows binaries using the following tools and libraries:
|
|
||||||
* MSYS ('Current' version) (http://www.mingw.org)
|
|
||||||
* MinGW ('Current' version) (http://www.mingw.org)
|
|
||||||
* NASM (http://nasm.sourceforge.net/)
|
|
||||||
* DirectX 6 or above headers and import libraries
|
|
||||||
DX6: (http://www.libsdl.org/extras/win32/common/directx-devel.tar.gz)
|
|
||||||
DX9: (http://www.microsoft.com/downloads/details.aspx?FamilyID=afc15f29-d7c9-4cf7-a8d5-8ab81f14ae1b&DisplayLang=en)
|
|
||||||
* SDL 1.2 (http://www.libsdl.org/download-1.2.php)
|
|
||||||
SDL is only used for the SDL interface layer and may be
|
|
||||||
omitted if building the DirectX version.
|
|
||||||
* FMOD (http://www.fmod.org)
|
|
||||||
|
|
||||||
Some good MinGW guides and whatnot:
|
|
||||||
- http://www.libsdl.org/extras/win32/mingw32/README.txt
|
|
||||||
- http://www.spacejack.org/games/mingw/
|
|
||||||
|
|
||||||
The engine compiles under Linux, FreeBSD, and NetBSD with minimal/no
|
|
||||||
modification.
|
|
||||||
|
|
||||||
Building the source involves just typing "make" in the directory
|
|
||||||
where you have unpacked the source. Windows users should make sure the
|
|
||||||
directory structure in the ZIP is maintained on extraction. The default
|
|
||||||
interface layer on Windows is the DirectX interface. This can be overriden
|
|
||||||
to the SDL one by using the command "make RENDERTYPE=SDL" instead. Linux
|
|
||||||
builds will always use SDL.
|
|
||||||
|
|
||||||
For compilation on other operating systems, see the addendum "Other OSes".
|
|
||||||
|
|
||||||
|
|
||||||
Things Missing
|
|
||||||
--------------
|
|
||||||
Nothing much is missing anymore. Networking is being improved as
|
|
||||||
time passes.
|
|
||||||
|
|
||||||
|
|
||||||
Bugs and Whatnot
|
|
||||||
----------------
|
|
||||||
I'm sure during my hacking I've perhaps introduced a bug here or
|
|
||||||
there. I want to try and nail these as I can. If you think you've found
|
|
||||||
a bug I would certainly like to hear about it. If you get it to crash,
|
|
||||||
a crash dump would be extremely helpful. Contact me using the details
|
|
||||||
found below.
|
|
||||||
|
|
||||||
|
|
||||||
Points of Contact
|
|
||||||
-----------------
|
|
||||||
The official location for this port on the WWW is at
|
|
||||||
http://jonof.edgenetwork.org/?p=jfbuild where the latest binaries and
|
|
||||||
source may be found. You can contact me via email at jonof@edgenetwork.org
|
|
||||||
|
|
||||||
|
|
||||||
Credits and Thanks
|
|
||||||
------------------
|
|
||||||
* Ken Silverman for his patience, help, and guidance in this. I
|
|
||||||
realise my rambling is taxing but your wisdom is invaluable.
|
|
||||||
* The folks at icculus.org for inspiring me to try and equal their
|
|
||||||
work done in the first public port of the engine.
|
|
||||||
* Do I dare mention myself?
|
|
||||||
* Pimping the edgenetwork (http://www.edgenetwk.com) who host my
|
|
||||||
site wouldn't go astray.
|
|
||||||
* Pär Karlsson for his contributions
|
|
||||||
|
|
||||||
|
|
||||||
Can't think of anything else at the moment, so, enjoy!
|
|
||||||
|
|
||||||
Jonathon Fowler
|
|
||||||
|
|
||||||
|
|
||||||
[1] http://www.advsys.net/ken/buildsrc
|
|
||||||
[2] http://www.libsdl.org
|
|
||||||
|
|
||||||
|
|
||||||
Addendum: Other OSes
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
QNX 6.2.1:
|
|
||||||
I got the engine compiling and running on QNX 6.2.1 on the
|
|
||||||
23rd November 2005. The QNX 6.2.1 Non-commercial CDROM includes
|
|
||||||
the GCC 2.95-series compiler (though you do have to install the
|
|
||||||
package), and the only extra library you need to obtain and
|
|
||||||
install (probably from source like I did) is SDL 1.2.9 or newer.
|
|
||||||
You also have to disable linking to fmod and use the
|
|
||||||
sound_stub.$o in the Makefile.
|
|
||||||
|
|
||||||
SkyOS 5 beta 8.5:
|
|
||||||
Disabling fmod and using sound_stub.$o in the Makefile will get
|
|
||||||
it running.
|
|
||||||
|
|
||||||
Solaris 9:
|
|
||||||
Because of how Solaris seems to set itself up, you need to:
|
|
||||||
1. Edit Makefile and change AR to be 'gar' and RANLIB to be
|
|
||||||
'granlib'
|
|
||||||
2. Edit Makefile.shared and add (I think) /opt/sfw/bin/
|
|
||||||
to the start of SDLCONFIG's value
|
|
||||||
3. Disable fmod and use sound_stub.$o in Makefile
|
|
||||||
|
|
||||||
BSD:
|
|
||||||
Disable fmod and use sound_stub.$o in the Makefile. Use 'gmake'
|
|
||||||
to build.
|
|
||||||
|
|
|
@ -595,7 +595,7 @@ int loadoldboard(char *filename, char fromwhere, int *daposx, int *daposy, int *
|
||||||
// Hash functions
|
// Hash functions
|
||||||
struct HASH_item // size is 12/24 bits.
|
struct HASH_item // size is 12/24 bits.
|
||||||
{
|
{
|
||||||
const char *string;
|
char *string;
|
||||||
int key;
|
int key;
|
||||||
struct HASH_item *next;
|
struct HASH_item *next;
|
||||||
};
|
};
|
||||||
|
|
|
@ -104,7 +104,7 @@ void initcache(intptr_t dacachestart, int dacachesize)
|
||||||
cac[0].lock = &zerochar;
|
cac[0].lock = &zerochar;
|
||||||
cacnum = 1;
|
cacnum = 1;
|
||||||
|
|
||||||
initprintf("Initialized %.1f megabyte cache\n", (float)(dacachesize/1024.f/1024.f));
|
initprintf("Initialized %.1fM cache\n", (float)(dacachesize/1024.f/1024.f));
|
||||||
}
|
}
|
||||||
|
|
||||||
void allocache(intptr_t *newhandle, int newbytes, char *newlockptr)
|
void allocache(intptr_t *newhandle, int newbytes, char *newlockptr)
|
||||||
|
|
|
@ -1070,7 +1070,7 @@ static int defsparser(scriptfile *script)
|
||||||
char *frametokptr = script->ltextptr;
|
char *frametokptr = script->ltextptr;
|
||||||
char *frameend, *framename = 0, happy=1;
|
char *frameend, *framename = 0, happy=1;
|
||||||
int ftilenume = -1, ltilenume = -1, tilex = 0;
|
int ftilenume = -1, ltilenume = -1, tilex = 0;
|
||||||
double smoothduration = 0.0f;
|
double smoothduration = 0.1f;
|
||||||
|
|
||||||
if (scriptfile_getbraces(script,&frameend)) break;
|
if (scriptfile_getbraces(script,&frameend)) break;
|
||||||
while (script->textptr < frameend)
|
while (script->textptr < frameend)
|
||||||
|
@ -1104,8 +1104,6 @@ static int defsparser(scriptfile *script)
|
||||||
ltilenume = tilex;
|
ltilenume = tilex;
|
||||||
}
|
}
|
||||||
|
|
||||||
smoothduration = 0.1f;
|
|
||||||
|
|
||||||
if (lastmodelid < 0)
|
if (lastmodelid < 0)
|
||||||
{
|
{
|
||||||
initprintf("Warning: Ignoring frame definition.\n");
|
initprintf("Warning: Ignoring frame definition.\n");
|
||||||
|
|
|
@ -12134,8 +12134,6 @@ void HASH_init(struct HASH_table *t)
|
||||||
{
|
{
|
||||||
HASH_free(t);
|
HASH_free(t);
|
||||||
t->items=Bcalloc(1, t->size * sizeof(struct HASH_item));
|
t->items=Bcalloc(1, t->size * sizeof(struct HASH_item));
|
||||||
// memset commented because it's redundant with calloc
|
|
||||||
// Bmemset(t->items,0,t->size * sizeof(struct HASH_item));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HASH_free(struct HASH_table *t)
|
void HASH_free(struct HASH_table *t)
|
||||||
|
@ -12157,6 +12155,8 @@ void HASH_free(struct HASH_table *t)
|
||||||
tmp = cur;
|
tmp = cur;
|
||||||
cur = cur->next;
|
cur = cur->next;
|
||||||
// initprintf("Free %4d '%s'\n",tmp->key,(tmp->string)?tmp->string:".");
|
// initprintf("Free %4d '%s'\n",tmp->key,(tmp->string)?tmp->string:".");
|
||||||
|
if (tmp->string)
|
||||||
|
Bfree(tmp->string);
|
||||||
Bfree(tmp);
|
Bfree(tmp);
|
||||||
num++;
|
num++;
|
||||||
}
|
}
|
||||||
|
@ -12202,7 +12202,7 @@ void HASH_add(struct HASH_table *t, const char *s, int key)
|
||||||
return;
|
return;
|
||||||
if (t->items == NULL)
|
if (t->items == NULL)
|
||||||
{
|
{
|
||||||
initprintf("HASH_add: not initalized\n");
|
initprintf("HASH_add(): table not initialized!\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
code = HASH_getcode(s)%t->size;
|
code = HASH_getcode(s)%t->size;
|
||||||
|
@ -12211,7 +12211,7 @@ void HASH_add(struct HASH_table *t, const char *s, int key)
|
||||||
if (!cur)
|
if (!cur)
|
||||||
{
|
{
|
||||||
cur=Bcalloc(1,sizeof(struct HASH_item));
|
cur=Bcalloc(1,sizeof(struct HASH_item));
|
||||||
cur->string=s;
|
cur->string=Bstrdup(s);
|
||||||
cur->key=key;
|
cur->key=key;
|
||||||
cur->next=NULL;
|
cur->next=NULL;
|
||||||
t->items[code]=cur;
|
t->items[code]=cur;
|
||||||
|
@ -12228,7 +12228,7 @@ void HASH_add(struct HASH_table *t, const char *s, int key)
|
||||||
while (cur);
|
while (cur);
|
||||||
|
|
||||||
cur=Bcalloc(1,sizeof(struct HASH_item));
|
cur=Bcalloc(1,sizeof(struct HASH_item));
|
||||||
cur->string=s;
|
cur->string=Bstrdup(s);
|
||||||
cur->key=key;
|
cur->key=key;
|
||||||
cur->next=NULL;
|
cur->next=NULL;
|
||||||
prev->next=cur;
|
prev->next=cur;
|
||||||
|
@ -12239,14 +12239,18 @@ void HASH_replace(struct HASH_table *t, const char *s, int key)
|
||||||
struct HASH_item *cur, *prev=NULL;
|
struct HASH_item *cur, *prev=NULL;
|
||||||
int code;
|
int code;
|
||||||
|
|
||||||
if (t->items==NULL) {initprintf("HASH_add: not initalized\n");return;}
|
if (t->items==NULL)
|
||||||
|
{
|
||||||
|
initprintf("HASH_replace(): table not initialized!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
code=HASH_getcode(s)%t->size;
|
code=HASH_getcode(s)%t->size;
|
||||||
cur=t->items[code];
|
cur=t->items[code];
|
||||||
|
|
||||||
if (!cur)
|
if (!cur)
|
||||||
{
|
{
|
||||||
cur=Bcalloc(1,sizeof(struct HASH_item));
|
cur=Bcalloc(1,sizeof(struct HASH_item));
|
||||||
cur->string=s;
|
cur->string=Bstrdup(s);
|
||||||
cur->key=key;
|
cur->key=key;
|
||||||
cur->next=NULL;
|
cur->next=NULL;
|
||||||
t->items[code]=cur;
|
t->items[code]=cur;
|
||||||
|
@ -12266,7 +12270,7 @@ void HASH_replace(struct HASH_table *t, const char *s, int key)
|
||||||
while (cur);
|
while (cur);
|
||||||
|
|
||||||
cur=Bcalloc(1,sizeof(struct HASH_item));
|
cur=Bcalloc(1,sizeof(struct HASH_item));
|
||||||
cur->string=s;
|
cur->string=Bstrdup(s);
|
||||||
cur->key=key;
|
cur->key=key;
|
||||||
cur->next=NULL;
|
cur->next=NULL;
|
||||||
prev->next=cur;
|
prev->next=cur;
|
||||||
|
@ -12278,7 +12282,7 @@ int HASH_find(struct HASH_table *t, const char *s)
|
||||||
|
|
||||||
if (t->items==NULL)
|
if (t->items==NULL)
|
||||||
{
|
{
|
||||||
initprintf("HASH_find: not initalized\n");
|
initprintf("HASH_find(): table not initialized!\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
cur=t->items[HASH_getcode(s)%t->size];
|
cur=t->items[HASH_getcode(s)%t->size];
|
||||||
|
@ -12297,7 +12301,7 @@ int HASH_findcase(struct HASH_table *t, const char *s)
|
||||||
|
|
||||||
if (t->items==NULL)
|
if (t->items==NULL)
|
||||||
{
|
{
|
||||||
initprintf("HASH_findcase: not initalized\n");
|
initprintf("HASH_findcase(): table not initialized!\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
cur=t->items[HASH_getcode(s)%t->size];
|
cur=t->items[HASH_getcode(s)%t->size];
|
||||||
|
|
|
@ -105,7 +105,7 @@ static int osdcursorpal=0; */
|
||||||
|
|
||||||
static symbol_t *osdsymbptrs[MAXSYMBOLS];
|
static symbol_t *osdsymbptrs[MAXSYMBOLS];
|
||||||
static int osdnumsymbols = 0;
|
static int osdnumsymbols = 0;
|
||||||
static struct HASH_table osdsymbolsH = { MAXSYMBOLS, NULL };
|
static struct HASH_table osdsymbolsH = { MAXSYMBOLS<<1, NULL };
|
||||||
|
|
||||||
// application callbacks
|
// application callbacks
|
||||||
static void (*drawosdchar)(int, int, char, int, int) = _internal_drawosdchar;
|
static void (*drawosdchar)(int, int, char, int, int) = _internal_drawosdchar;
|
||||||
|
|
|
@ -339,7 +339,7 @@ void drawline2d(float x0, float y0, float x1, float y1, char col)
|
||||||
int cachefilehandle = -1; // texture cache file handle
|
int cachefilehandle = -1; // texture cache file handle
|
||||||
FILE *cacheindexptr = NULL;
|
FILE *cacheindexptr = NULL;
|
||||||
|
|
||||||
struct HASH_table cacheH = { MAXTILES<<2, NULL };
|
struct HASH_table cacheH = { MAXTILES<<3, NULL };
|
||||||
|
|
||||||
char TEXCACHEFILE[BMAX_PATH] = "textures";
|
char TEXCACHEFILE[BMAX_PATH] = "textures";
|
||||||
|
|
||||||
|
@ -1999,7 +1999,6 @@ static int pow2xsplit = 0, skyclamphack = 0;
|
||||||
|
|
||||||
void drawpoly(double *dpx, double *dpy, int n, int method)
|
void drawpoly(double *dpx, double *dpy, int n, int method)
|
||||||
{
|
{
|
||||||
#define PI 3.14159265358979323
|
|
||||||
double ngdx = 0.0, ngdy = 0.0, ngdo = 0.0, ngux = 0.0, nguy = 0.0, nguo = 0.0;
|
double ngdx = 0.0, ngdy = 0.0, ngdo = 0.0, ngux = 0.0, nguy = 0.0, nguo = 0.0;
|
||||||
double ngvx = 0.0, ngvy = 0.0, ngvo = 0.0, dp, up, vp, rdp, du0 = 0.0, du1 = 0.0, dui, duj;
|
double ngvx = 0.0, ngvy = 0.0, ngvo = 0.0, dp, up, vp, rdp, du0 = 0.0, du1 = 0.0, dui, duj;
|
||||||
double ngdx2, ngux2, ngvx2;
|
double ngdx2, ngux2, ngvx2;
|
||||||
|
|
|
@ -1,388 +0,0 @@
|
||||||
// FMOD Sound Interface
|
|
||||||
// for the Build Engine
|
|
||||||
// by Jonathon Fowler (jonof@edgenetwk.com)
|
|
||||||
|
|
||||||
#include "fmod.h"
|
|
||||||
#include "fmod_errors.h"
|
|
||||||
|
|
||||||
#ifndef F_CALLBACKAPI
|
|
||||||
#define FMOD_PRE370
|
|
||||||
#define F_CALLBACKAPI _cdecl
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// some Linux people may need this if GCC can't find FSOUND_Stream_Open
|
|
||||||
// #define FMOD_PRE370
|
|
||||||
|
|
||||||
#include "osd.h"
|
|
||||||
#include "compat.h"
|
|
||||||
#include "cache1d.h"
|
|
||||||
|
|
||||||
#define NUMCHANNELS 16
|
|
||||||
#define MAXWAVES 256
|
|
||||||
|
|
||||||
|
|
||||||
static int fmod_inited = 0;
|
|
||||||
static int musicstat = 0;
|
|
||||||
|
|
||||||
// general sample playback
|
|
||||||
static int numwaves;
|
|
||||||
static FSOUND_SAMPLE * samples[MAXWAVES];
|
|
||||||
static char instname[MAXWAVES][16];
|
|
||||||
static int channels[NUMCHANNELS];
|
|
||||||
|
|
||||||
void loadwaves(void);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static unsigned int F_CALLBACKAPI f_open(const char *name)
|
|
||||||
{
|
|
||||||
return kopen4load((char *)name, 0) + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void F_CALLBACKAPI f_close(unsigned int handle)
|
|
||||||
{
|
|
||||||
kclose(handle - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int F_CALLBACKAPI f_read(void *buffer, int size, unsigned int handle)
|
|
||||||
{
|
|
||||||
return kread(handle - 1, buffer, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int F_CALLBACKAPI f_seek(unsigned int handle, int pos, signed char mode)
|
|
||||||
{
|
|
||||||
return klseek(handle - 1, pos, mode);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int F_CALLBACKAPI f_tell(unsigned int handle)
|
|
||||||
{
|
|
||||||
return ktell(handle - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void initsb(char dadigistat, char damusistat, int dasamplerate, char danumspeakers, char dabytespersample, char daintspersec, char daquality)
|
|
||||||
{
|
|
||||||
char *s;
|
|
||||||
int i,j;
|
|
||||||
|
|
||||||
if (fmod_inited) return;
|
|
||||||
fmod_inited = 0;
|
|
||||||
|
|
||||||
if (dasamplerate < 6000) dasamplerate = 6000;
|
|
||||||
else if (dasamplerate > 48000) dasamplerate = 48000;
|
|
||||||
|
|
||||||
musicstat = damusistat;
|
|
||||||
|
|
||||||
printOSD("Initializing FMOD...\n");
|
|
||||||
printOSD(" Linked version: %.02f\n", FMOD_VERSION);
|
|
||||||
printOSD(" DLL version: %.02f\n", FSOUND_GetVersion());
|
|
||||||
|
|
||||||
if (FSOUND_GetVersion() < FMOD_VERSION)
|
|
||||||
{
|
|
||||||
printOSD(" ... Failure: FMOD DLL too old! Sound disabled.\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
printOSD(" Samplerate: %d hz\n", dasamplerate);
|
|
||||||
|
|
||||||
//FSOUND_SetOutput(FSOUND_OUTPUT_ASIO);
|
|
||||||
|
|
||||||
if (FSOUND_Init(dasamplerate, NUMCHANNELS, 0))
|
|
||||||
{
|
|
||||||
printOSD(" ... Success\n");
|
|
||||||
fmod_inited = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printOSD(" ... Failure: %s\n", FMOD_ErrorString(FSOUND_GetError()));
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (FSOUND_GetOutput())
|
|
||||||
{
|
|
||||||
case FSOUND_OUTPUT_NOSOUND:
|
|
||||||
s = "No Sound"; break;
|
|
||||||
case FSOUND_OUTPUT_WINMM:
|
|
||||||
s = "WINMM"; break;
|
|
||||||
case FSOUND_OUTPUT_DSOUND:
|
|
||||||
s = "DirectSound"; break;
|
|
||||||
case FSOUND_OUTPUT_OSS:
|
|
||||||
s = "OSS"; break;
|
|
||||||
case FSOUND_OUTPUT_ESD:
|
|
||||||
s = "ESound"; break;
|
|
||||||
case FSOUND_OUTPUT_ALSA:
|
|
||||||
s = "ALSA"; break;
|
|
||||||
case FSOUND_OUTPUT_ASIO:
|
|
||||||
s = "ASIO"; break;
|
|
||||||
default:
|
|
||||||
s = "Other"; break;
|
|
||||||
}
|
|
||||||
printOSD("Using FMOD \"%s\" output driver\n", s);
|
|
||||||
|
|
||||||
FSOUND_File_SetCallbacks(
|
|
||||||
(FSOUND_OPENCALLBACK)f_open,
|
|
||||||
(FSOUND_CLOSECALLBACK)f_close,
|
|
||||||
(FSOUND_READCALLBACK)f_read,
|
|
||||||
(FSOUND_SEEKCALLBACK)f_seek,
|
|
||||||
(FSOUND_TELLCALLBACK)f_tell);
|
|
||||||
//FSOUND_SetMemorySystem(fmod_cache, fmod_cachelen, NULL, NULL, NULL);
|
|
||||||
|
|
||||||
loadwaves();
|
|
||||||
|
|
||||||
for (i=0; i<NUMCHANNELS; i++) channels[i] = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void uninitsb(void)
|
|
||||||
{
|
|
||||||
if (fmod_inited)
|
|
||||||
{
|
|
||||||
FSOUND_Close();
|
|
||||||
fmod_inited = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void setears(int daposx, int daposy, int daxvect, int dayvect)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void wsayfollow(char *dafilename, int dafreq, int davol, int *daxplc, int *dayplc, char followstat)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
dafilename:
|
|
||||||
filename
|
|
||||||
|
|
||||||
dafreq:
|
|
||||||
4096 = Middle C
|
|
||||||
8192 = +1 8ve
|
|
||||||
|
|
||||||
davol:
|
|
||||||
0-256 = volume
|
|
||||||
|
|
||||||
daxplc:
|
|
||||||
dayplc:
|
|
||||||
followstat: 0 = sound emination origin (fixed)
|
|
||||||
followstat: 1 = pointer to sprite coordinates (dynamic)
|
|
||||||
|
|
||||||
followstat:
|
|
||||||
0 = position is fixed in space
|
|
||||||
1 = position follows an object
|
|
||||||
*/
|
|
||||||
unsigned char ch1, ch2;
|
|
||||||
int i, wavnum, bad, oldest=0, free=-1, ox, oy, x, y, vo;
|
|
||||||
unsigned int oldestpos=0;
|
|
||||||
int chan;
|
|
||||||
|
|
||||||
if (fmod_inited == 0) return;
|
|
||||||
|
|
||||||
for (wavnum=numwaves-1;wavnum>=0;wavnum--)
|
|
||||||
{
|
|
||||||
bad = 0;
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
while ((dafilename[i] > 0) && (i < 16))
|
|
||||||
{
|
|
||||||
ch1 = dafilename[i]; if ((ch1 >= 97) && (ch1 <= 123)) ch1 -= 32;
|
|
||||||
ch2 = instname[wavnum][i]; if ((ch2 >= 97) && (ch2 <= 123)) ch2 -= 32;
|
|
||||||
if (ch1 != ch2) {bad = 1; break;}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
if (bad != 0) continue;
|
|
||||||
|
|
||||||
for (i=0; i<NUMCHANNELS; i++)
|
|
||||||
{
|
|
||||||
if (!FSOUND_IsPlaying(channels[i]))
|
|
||||||
{
|
|
||||||
free = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (i==0) continue;
|
|
||||||
|
|
||||||
if (FSOUND_GetCurrentPosition(channels[i]) > oldestpos)
|
|
||||||
{
|
|
||||||
oldest = i;
|
|
||||||
oldestpos = FSOUND_GetCurrentPosition(channels[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (free < 0)
|
|
||||||
{
|
|
||||||
FSOUND_StopSound(channels[oldest]);
|
|
||||||
free = oldest;
|
|
||||||
}
|
|
||||||
|
|
||||||
chan = FSOUND_PlaySoundEx(FSOUND_FREE, samples[wavnum], NULL, 1);
|
|
||||||
if (chan == -1) return;
|
|
||||||
FSOUND_SetFrequency(chan, dafreq*11025/4096);
|
|
||||||
FSOUND_SetVolume(chan, davol);
|
|
||||||
|
|
||||||
FSOUND_SetPaused(chan, 0);
|
|
||||||
|
|
||||||
channels[free] = chan;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void wsay(char *dafilename, int dafreq, int volume1, int volume2)
|
|
||||||
{
|
|
||||||
unsigned char ch1, ch2;
|
|
||||||
int i, j, bad, free=-1, oldest=0;
|
|
||||||
unsigned int oldestpos=0;
|
|
||||||
int chan;
|
|
||||||
|
|
||||||
if (fmod_inited == 0) return;
|
|
||||||
|
|
||||||
i = numwaves-1;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
bad = 0;
|
|
||||||
|
|
||||||
j = 0;
|
|
||||||
while ((dafilename[j] > 0) && (j < 16))
|
|
||||||
{
|
|
||||||
ch1 = dafilename[j]; if ((ch1 >= 97) && (ch1 <= 123)) ch1 -= 32;
|
|
||||||
ch2 = instname[i][j]; if ((ch2 >= 97) && (ch2 <= 123)) ch2 -= 32;
|
|
||||||
if (ch1 != ch2) {bad = 1; break;}
|
|
||||||
j++;
|
|
||||||
}
|
|
||||||
if (bad == 0)
|
|
||||||
{
|
|
||||||
for (j=0; j<NUMCHANNELS; j++)
|
|
||||||
{
|
|
||||||
if (!FSOUND_IsPlaying(channels[j]))
|
|
||||||
{
|
|
||||||
free = j;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (j==0) continue;
|
|
||||||
|
|
||||||
if (FSOUND_GetCurrentPosition(channels[j]) > oldestpos)
|
|
||||||
{
|
|
||||||
oldest = j;
|
|
||||||
oldestpos = FSOUND_GetCurrentPosition(channels[j]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (free < 0)
|
|
||||||
{
|
|
||||||
FSOUND_StopSound(channels[oldest]);
|
|
||||||
free = oldest;
|
|
||||||
}
|
|
||||||
|
|
||||||
chan = FSOUND_PlaySoundEx(FSOUND_FREE, samples[i], NULL, 1);
|
|
||||||
if (chan == -1) return;
|
|
||||||
FSOUND_SetFrequency(chan, dafreq*11025/4096);
|
|
||||||
FSOUND_SetVolume(chan, (volume1*volume2)>>1);
|
|
||||||
// set pan
|
|
||||||
FSOUND_SetPaused(chan, 0);
|
|
||||||
|
|
||||||
channels[free] = chan;
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
i--;
|
|
||||||
}
|
|
||||||
while (i >= 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void loadwaves(void)
|
|
||||||
{
|
|
||||||
int fil, dawaversionum, i, tmp;
|
|
||||||
int wavleng[MAXWAVES], repstart[MAXWAVES], repleng[MAXWAVES], finetune[MAXWAVES];
|
|
||||||
char *p;
|
|
||||||
|
|
||||||
fil = kopen4load("WAVES.KWV", 0);
|
|
||||||
|
|
||||||
if (fil != -1)
|
|
||||||
{
|
|
||||||
kread(fil, &dawaversionum, 4); dawaversionum = B_LITTLE32(dawaversionum);
|
|
||||||
if (dawaversionum != 0) { kclose(fil); return; }
|
|
||||||
|
|
||||||
kread(fil, &numwaves, 4); numwaves = B_LITTLE32(numwaves);
|
|
||||||
for (i=0; i<numwaves; i++)
|
|
||||||
{
|
|
||||||
kread(fil, &instname[i][0], 16);
|
|
||||||
kread(fil, &wavleng[i], 4); wavleng[i] = B_LITTLE32(wavleng[i]);
|
|
||||||
kread(fil, &repstart[i], 4); repstart[i] = B_LITTLE32(repstart[i]);
|
|
||||||
kread(fil, &repleng[i], 4); repleng[i] = B_LITTLE32(repleng[i]);
|
|
||||||
kread(fil, &finetune[i], 4); finetune[i] = B_LITTLE32(finetune[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
dawaversionum = 0;
|
|
||||||
numwaves = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i=numwaves; i<MAXWAVES; i++)
|
|
||||||
{
|
|
||||||
memset(&instname[i][0], 0, 16);
|
|
||||||
wavleng[i] = 0;
|
|
||||||
repstart[i] = 0;
|
|
||||||
repleng[i] = 0;
|
|
||||||
finetune[i] = 0;
|
|
||||||
samples[i] = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fil == -1) return;
|
|
||||||
|
|
||||||
for (i=0; i<numwaves; i++)
|
|
||||||
{
|
|
||||||
if (repleng[i]) tmp = FSOUND_LOOP_NORMAL;
|
|
||||||
else tmp = FSOUND_LOOP_OFF;
|
|
||||||
samples[i] = FSOUND_Sample_Alloc(FSOUND_FREE, wavleng[i], tmp, 11025, 255, 128, 1);
|
|
||||||
if (!samples[i]) continue;
|
|
||||||
|
|
||||||
p = (char*)Bmalloc(wavleng[i]);
|
|
||||||
kread(fil,p,wavleng[i]);
|
|
||||||
FSOUND_Sample_Upload(samples[i], p, FSOUND_8BITS | FSOUND_MONO | FSOUND_UNSIGNED);
|
|
||||||
Bfree(p);
|
|
||||||
|
|
||||||
if (repleng[i]) FSOUND_Sample_SetLoopPoints(samples[i], repstart[i], repstart[i]+repleng[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
kclose(fil);
|
|
||||||
|
|
||||||
printOSD("Loaded %d waves\n", numwaves);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#if 1
|
|
||||||
static FSOUND_STREAM *musicstream = NULL;
|
|
||||||
static int musicplaying = 0;
|
|
||||||
|
|
||||||
void loadsong(char *filename)
|
|
||||||
{
|
|
||||||
if (!musicstat) return;
|
|
||||||
if (musicstream) return;
|
|
||||||
#ifdef FMOD_PRE370
|
|
||||||
musicstream = FSOUND_Stream_OpenFile(filename, FSOUND_LOOP_NORMAL, 0);
|
|
||||||
#else
|
|
||||||
musicstream = FSOUND_Stream_Open(filename, FSOUND_LOOP_NORMAL, 0, 0);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void musicon(void)
|
|
||||||
{
|
|
||||||
if (!musicstat) return;
|
|
||||||
if (!musicstream || musicplaying) return;
|
|
||||||
FSOUND_Stream_Play(FSOUND_FREE, musicstream);
|
|
||||||
musicplaying = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void musicoff(void)
|
|
||||||
{
|
|
||||||
if (!musicstat) return;
|
|
||||||
if (!musicstream || !musicplaying) return;
|
|
||||||
FSOUND_Stream_Stop(musicstream);
|
|
||||||
musicplaying = 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void refreshaudio(void)
|
|
||||||
{
|
|
||||||
}
|
|
|
@ -1,39 +0,0 @@
|
||||||
void initsb(char dadigistat, char damusistat, int dasamplerate, char danumspeakers, char dabytespersample, char daintspersec, char daquality)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void uninitsb(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void setears(int daposx, int daposy, int daxvect, int dayvect)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void wsayfollow(char *dafilename, int dafreq, int davol, int *daxplc, int *dayplc, char followstat)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void wsay(char *dafilename, int dafreq, int volume1, int volume2)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void loadwaves(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void loadsong(char *filename)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void musicon(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void musicoff(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void refreshaudio(void)
|
|
||||||
{
|
|
||||||
}
|
|
|
@ -222,7 +222,7 @@ int wm_ynbox(char *name, char *fmt, ...)
|
||||||
vsprintf(buf,fmt,va);
|
vsprintf(buf,fmt,va);
|
||||||
va_end(va);
|
va_end(va);
|
||||||
|
|
||||||
r = MessageBox((HWND)win_gethwnd(),buf,name,MB_YESNO|MB_TASKMODAL);
|
r = MessageBox((HWND)win_gethwnd(),buf,name,MB_YESNO|MB_ICONQUESTION|MB_TASKMODAL);
|
||||||
if (r==IDYES) return 1;
|
if (r==IDYES) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -3343,13 +3343,17 @@ static int SetupOpenGL(int width, int height, int bitspp)
|
||||||
else if (!Bstrcmp(glinfo.vendor,"3Dfx Interactive Inc.")) err = 1;
|
else if (!Bstrcmp(glinfo.vendor,"3Dfx Interactive Inc.")) err = 1;
|
||||||
else if (!Bstrcmp(glinfo.vendor,"Intel"))
|
else if (!Bstrcmp(glinfo.vendor,"Intel"))
|
||||||
{
|
{
|
||||||
if (Bstrcmp(glinfo.vendor,"Intel 865G"))
|
if (!Bstrcmp(glinfo.renderer,"Intel 865G"))
|
||||||
err = 1;
|
err = 0;
|
||||||
|
if (!Bstrcmp(glinfo.renderer,"Intel 945GM"))
|
||||||
|
err = 0;
|
||||||
|
else err = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
OSD_Printf("Blacklisted OpenGL driver detected. GL modes will be unavailable. Use -forcegl to override.\n");
|
OSD_Printf("Unsupported OpenGL driver detected. GL modes will be unavailable. Use -forcegl to override.\n");
|
||||||
|
wm_msgbox("Unsupported OpenGL driver", "Unsupported OpenGL driver detected. GL modes will be unavailable.");
|
||||||
ReleaseOpenGL();
|
ReleaseOpenGL();
|
||||||
unloadgldriver();
|
unloadgldriver();
|
||||||
nogl = 1;
|
nogl = 1;
|
||||||
|
|
|
@ -44,7 +44,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#include <shellapi.h>
|
#include <shellapi.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define BUILDDATE " 20081125"
|
#define BUILDDATE " 20081210"
|
||||||
#define VERSION " 1.2.0devel"
|
#define VERSION " 1.2.0devel"
|
||||||
|
|
||||||
static int floor_over_floor;
|
static int floor_over_floor;
|
||||||
|
@ -7587,7 +7587,7 @@ int ExtPreInit(int argc,const char **argv)
|
||||||
OSD_SetLogFile("mapster32.log");
|
OSD_SetLogFile("mapster32.log");
|
||||||
OSD_SetVersionString("Mapster32"VERSION,0,2);
|
OSD_SetVersionString("Mapster32"VERSION,0,2);
|
||||||
initprintf("Mapster32"VERSION BUILDDATE"\n");
|
initprintf("Mapster32"VERSION BUILDDATE"\n");
|
||||||
initprintf("Copyright (c) 2008 EDuke32 team\n");
|
// initprintf("Copyright (c) 2008 EDuke32 team\n");
|
||||||
|
|
||||||
G_CheckCommandLine(argc,argv);
|
G_CheckCommandLine(argc,argv);
|
||||||
|
|
||||||
|
@ -8583,9 +8583,7 @@ int ExtInit(void)
|
||||||
int i;
|
int i;
|
||||||
#if 1
|
#if 1
|
||||||
i=wm_ynbox("Texture Caching",
|
i=wm_ynbox("Texture Caching",
|
||||||
"Would you like to enable the on-disk texture cache? This feature will use an undetermined amount of space "
|
"Would you like to enable the on-disk texture cache?\n\n"
|
||||||
"on your hard disk to store textures in your video card's native format, enabling them to load dramatically "
|
|
||||||
"faster after the first time they are loaded.\n\n"
|
|
||||||
"You will generally want to say 'yes' here, especially if using the HRP.");
|
"You will generally want to say 'yes' here, especially if using the HRP.");
|
||||||
#else
|
#else
|
||||||
i = 1;
|
i = 1;
|
||||||
|
|
|
@ -51,7 +51,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
===================
|
===================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct HASH_table gamefuncH = { NUMGAMEFUNCTIONS, NULL };
|
struct HASH_table gamefuncH = { NUMGAMEFUNCTIONS<<2, NULL };
|
||||||
|
|
||||||
int32 CONFIG_FunctionNameToNum(char * func)
|
int32 CONFIG_FunctionNameToNum(char * func)
|
||||||
{
|
{
|
||||||
|
@ -609,11 +609,18 @@ int32 CONFIG_ReadSetup(void)
|
||||||
pathsearchmode = 1;
|
pathsearchmode = 1;
|
||||||
if (SafeFileExists(setupfilename) && ud.config.scripthandle < 0) // JBF 20031211
|
if (SafeFileExists(setupfilename) && ud.config.scripthandle < 0) // JBF 20031211
|
||||||
ud.config.scripthandle = SCRIPT_Load(setupfilename);
|
ud.config.scripthandle = SCRIPT_Load(setupfilename);
|
||||||
|
else if (SafeFileExists(SETUPFILENAME) && ud.config.scripthandle < 0)
|
||||||
|
{
|
||||||
|
Bsprintf(tempbuf,"The configuration file \"%s\" was not found. "
|
||||||
|
"Import configuration data from \"%s\"?",setupfilename,SETUPFILENAME);
|
||||||
|
|
||||||
|
i=wm_ynbox("Import Configuration Settings",tempbuf);
|
||||||
|
if (i) ud.config.scripthandle = SCRIPT_Load(SETUPFILENAME);
|
||||||
|
}
|
||||||
else if (SafeFileExists("duke3d.cfg") && ud.config.scripthandle < 0)
|
else if (SafeFileExists("duke3d.cfg") && ud.config.scripthandle < 0)
|
||||||
{
|
{
|
||||||
Bsprintf(tempbuf,"The configuration file \"%s\" was not found. "
|
Bsprintf(tempbuf,"The configuration file \"%s\" was not found. "
|
||||||
"Would you like to import configuration data "
|
"Import configuration data from \"duke3d.cfg\"?",setupfilename);
|
||||||
"from \"duke3d.cfg\"?",setupfilename);
|
|
||||||
|
|
||||||
i=wm_ynbox("Import Configuration Settings",tempbuf);
|
i=wm_ynbox("Import Configuration Settings",tempbuf);
|
||||||
if (i) ud.config.scripthandle = SCRIPT_Load("duke3d.cfg");
|
if (i) ud.config.scripthandle = SCRIPT_Load("duke3d.cfg");
|
||||||
|
|
|
@ -251,14 +251,6 @@ enum DukeWeapon_t {
|
||||||
#define deletesprite A_DeleteSprite
|
#define deletesprite A_DeleteSprite
|
||||||
void A_DeleteSprite(int s);
|
void A_DeleteSprite(int s);
|
||||||
|
|
||||||
#define __USRHOOKS_H
|
|
||||||
|
|
||||||
enum USRHOOKS_Errors {
|
|
||||||
USRHOOKS_Warning = -2,
|
|
||||||
USRHOOKS_Error = -1,
|
|
||||||
USRHOOKS_Ok = 0
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint32 bits;
|
uint32 bits;
|
||||||
short fvel, svel;
|
short fvel, svel;
|
||||||
|
|
|
@ -10832,8 +10832,8 @@ void app_main(int argc,const char **argv)
|
||||||
|
|
||||||
initprintf("%s\n",apptitle);
|
initprintf("%s\n",apptitle);
|
||||||
// initprintf("Compiled %s\n",datetimestring);
|
// initprintf("Compiled %s\n",datetimestring);
|
||||||
initprintf("Copyright (c) 1996, 2003 3D Realms Entertainment\n");
|
// initprintf("Copyright (c) 1996, 2003 3D Realms Entertainment\n");
|
||||||
initprintf("Copyright (c) 2008 EDuke32 team and contributors\n");
|
// initprintf("Copyright (c) 2008 EDuke32 team and contributors\n");
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
|
#if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
|
||||||
addsearchpath("/usr/share/games/jfduke3d");
|
addsearchpath("/usr/share/games/jfduke3d");
|
||||||
|
@ -10934,9 +10934,7 @@ void app_main(int argc,const char **argv)
|
||||||
if (glusetexcache == -1 || glusetexcachecompression == -1)
|
if (glusetexcache == -1 || glusetexcachecompression == -1)
|
||||||
{
|
{
|
||||||
i=wm_ynbox("Texture Caching",
|
i=wm_ynbox("Texture Caching",
|
||||||
"Would you like to enable the on-disk texture cache? This feature will use an undetermined amount of space "
|
"Would you like to enable the on-disk texture cache?\n\n"
|
||||||
"on your hard disk to store textures in your video card's native format, enabling them to load dramatically "
|
|
||||||
"faster after the first time they are loaded.\n\n"
|
|
||||||
"You will generally want to say 'yes' here, especially if using the HRP.");
|
"You will generally want to say 'yes' here, especially if using the HRP.");
|
||||||
if (i) ud.config.useprecache = glusetexcompr = glusetexcache = glusetexcachecompression = 1;
|
if (i) ud.config.useprecache = glusetexcompr = glusetexcache = glusetexcachecompression = 1;
|
||||||
else glusetexcache = glusetexcachecompression = 0;
|
else glusetexcache = glusetexcachecompression = 0;
|
||||||
|
@ -10946,9 +10944,8 @@ void app_main(int argc,const char **argv)
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if (ud.config.CheckForUpdates == -1)
|
if (ud.config.CheckForUpdates == -1)
|
||||||
{
|
{
|
||||||
i=wm_ynbox("Automatic Release Notification",
|
i=wm_ynbox("Automatic Update Notifications",
|
||||||
"Would you like EDuke32 to automatically check for new releases "
|
"Would you like to check for new versions of EDuke32 at startup?");
|
||||||
"at startup?");
|
|
||||||
ud.config.CheckForUpdates = 0;
|
ud.config.CheckForUpdates = 0;
|
||||||
if (i) ud.config.CheckForUpdates = 1;
|
if (i) ud.config.CheckForUpdates = 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -935,20 +935,20 @@ const memberlabel_t InputLabels[]=
|
||||||
char *bitptr; // pointer to bitmap of which bytecode positions contain pointers
|
char *bitptr; // pointer to bitmap of which bytecode positions contain pointers
|
||||||
#define BITPTR_POINTER 1
|
#define BITPTR_POINTER 1
|
||||||
|
|
||||||
struct HASH_table gamevarH = { MAXGAMEVARS, NULL };
|
struct HASH_table gamevarH = { MAXGAMEVARS<<2, NULL };
|
||||||
struct HASH_table arrayH = { MAXGAMEARRAYS, NULL };
|
struct HASH_table arrayH = { MAXGAMEARRAYS<<2, NULL };
|
||||||
struct HASH_table labelH = { 11264, NULL };
|
struct HASH_table labelH = { 11264<<2, NULL };
|
||||||
struct HASH_table keywH = { CON_END, NULL };
|
struct HASH_table keywH = { CON_END<<2, NULL };
|
||||||
|
|
||||||
struct HASH_table sectorH = { SECTOR_END, NULL };
|
struct HASH_table sectorH = { SECTOR_END<<2, NULL };
|
||||||
struct HASH_table wallH = { WALL_END, NULL };
|
struct HASH_table wallH = { WALL_END<<2, NULL };
|
||||||
struct HASH_table userdefH = { USERDEFS_END, NULL };
|
struct HASH_table userdefH = { USERDEFS_END<<2, NULL };
|
||||||
|
|
||||||
struct HASH_table projectileH = { PROJ_END, NULL };
|
struct HASH_table projectileH = { PROJ_END<<2, NULL };
|
||||||
struct HASH_table playerH = { PLAYER_END, NULL };
|
struct HASH_table playerH = { PLAYER_END<<2, NULL };
|
||||||
struct HASH_table inputH = { INPUT_END, NULL };
|
struct HASH_table inputH = { INPUT_END<<2, NULL };
|
||||||
struct HASH_table actorH = { ACTOR_END, NULL };
|
struct HASH_table actorH = { ACTOR_END<<2, NULL };
|
||||||
struct HASH_table tspriteH = { ACTOR_END, NULL };
|
struct HASH_table tspriteH = { ACTOR_END<<2, NULL };
|
||||||
|
|
||||||
void inithashnames();
|
void inithashnames();
|
||||||
void freehashnames();
|
void freehashnames();
|
||||||
|
@ -1061,16 +1061,8 @@ static int C_IncreaseScriptSize(int size)
|
||||||
}
|
}
|
||||||
|
|
||||||
//initprintf("offset: %d\n",(unsigned)(g_scriptPtr-script));
|
//initprintf("offset: %d\n",(unsigned)(g_scriptPtr-script));
|
||||||
if (size <= osize)
|
g_scriptSize = size;
|
||||||
{
|
initprintf("Resizing code buffer to %d*%d bytes\n",g_scriptSize, sizeof(intptr_t));
|
||||||
g_scriptSize = size;
|
|
||||||
initprintf("Shrinking bytecode buffer, final size: %d*%d bytes\n",g_scriptSize, sizeof(intptr_t));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_scriptSize = size;
|
|
||||||
initprintf("Increasing bytecode buffer size to %d*%d bytes...\n",g_scriptSize, sizeof(intptr_t));
|
|
||||||
}
|
|
||||||
|
|
||||||
newscript = (intptr_t *)Brealloc(script, g_scriptSize * sizeof(intptr_t));
|
newscript = (intptr_t *)Brealloc(script, g_scriptSize * sizeof(intptr_t));
|
||||||
|
|
||||||
|
@ -2174,7 +2166,7 @@ static int C_ParseCommand(void)
|
||||||
if (i == -1)
|
if (i == -1)
|
||||||
{
|
{
|
||||||
// printf("Defining Definition '%s' to be '%d'\n",label+(g_numLabels<<6),*(g_scriptPtr-1));
|
// printf("Defining Definition '%s' to be '%d'\n",label+(g_numLabels<<6),*(g_scriptPtr-1));
|
||||||
HASH_replace(&labelH,label+(g_numLabels<<6),g_numLabels);
|
HASH_add(&labelH,label+(g_numLabels<<6),g_numLabels);
|
||||||
labeltype[g_numLabels] = LABEL_DEFINE;
|
labeltype[g_numLabels] = LABEL_DEFINE;
|
||||||
labelcode[g_numLabels++] = *(g_scriptPtr-1);
|
labelcode[g_numLabels++] = *(g_scriptPtr-1);
|
||||||
if (*(g_scriptPtr-1) >= 0 && *(g_scriptPtr-1) < MAXTILES && g_dynamicTileMapping)
|
if (*(g_scriptPtr-1) >= 0 && *(g_scriptPtr-1) < MAXTILES && g_dynamicTileMapping)
|
||||||
|
@ -4833,7 +4825,7 @@ repeatcase:
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
tempbuf[j] = '\0';
|
tempbuf[j] = '\0';
|
||||||
if (Bstrcmp(setupfilename,"duke3d.cfg") == 0) // not set to something else via -cfg
|
if (Bstrcmp(setupfilename,SETUPFILENAME) == 0) // not set to something else via -cfg
|
||||||
{
|
{
|
||||||
char temp[BMAX_PATH];
|
char temp[BMAX_PATH];
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
|
@ -45,7 +45,7 @@ extern "C" {
|
||||||
//
|
//
|
||||||
// Setup program defines
|
// Setup program defines
|
||||||
//
|
//
|
||||||
#define SETUPFILENAME "duke3d.cfg"
|
#define SETUPFILENAME "eduke32.cfg"
|
||||||
|
|
||||||
|
|
||||||
// Max number of players
|
// Max number of players
|
||||||
|
|
|
@ -787,21 +787,20 @@ static int X_DoExecute(void)
|
||||||
|
|
||||||
// Huh?. This does nothing....
|
// Huh?. This does nothing....
|
||||||
// (the result is always j==0....)
|
// (the result is always j==0....)
|
||||||
if ((klabs(ActorExtra[g_i].lastvx-g_sp->x)+klabs(ActorExtra[g_i].lastvy-g_sp->y)) <
|
// if ((klabs(ActorExtra[g_i].lastvx-g_sp->x)+klabs(ActorExtra[g_i].lastvy-g_sp->y)) <
|
||||||
(klabs(ActorExtra[g_i].lastvx-s->x)+klabs(ActorExtra[g_i].lastvy-s->y)))
|
// (klabs(ActorExtra[g_i].lastvx-s->x)+klabs(ActorExtra[g_i].lastvy-s->y)))
|
||||||
j = 0;
|
// j = 0;
|
||||||
|
|
||||||
// um yeah, this if() will always fire....
|
// um yeah, this if() will always fire....
|
||||||
if (j == 0)
|
// if (j == 0)
|
||||||
{
|
{
|
||||||
// search around for target player
|
// search around for target player
|
||||||
|
|
||||||
// also modifies 'target' x&y if found..
|
// also modifies 'target' x&y if found..
|
||||||
|
|
||||||
j = A_FurthestVisiblePoint(g_i,s,&ActorExtra[g_i].lastvx,&ActorExtra[g_i].lastvy);
|
j = 1;
|
||||||
|
if (A_FurthestVisiblePoint(g_i,s,&ActorExtra[g_i].lastvx,&ActorExtra[g_i].lastvy) == -1)
|
||||||
if (j == -1) j = 0;
|
j = 0;
|
||||||
else j = 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -812,10 +811,10 @@ static int X_DoExecute(void)
|
||||||
ActorExtra[g_i].lastvy = s->y;
|
ActorExtra[g_i].lastvy = s->y;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (j == 1 && (g_sp->statnum == 1 || g_sp->statnum == 6))
|
if (j && (g_sp->statnum == 1 || g_sp->statnum == 6))
|
||||||
ActorExtra[g_i].timetosleep = SLEEPTIME;
|
ActorExtra[g_i].timetosleep = SLEEPTIME;
|
||||||
|
|
||||||
X_DoConditional(j == 1);
|
X_DoConditional(j);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -824,14 +823,14 @@ static int X_DoExecute(void)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CON_IFSQUISHED:
|
case CON_IFSQUISHED:
|
||||||
X_DoConditional(A_CheckSquished(g_i, g_p) == 1);
|
X_DoConditional(A_CheckSquished(g_i, g_p));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CON_IFDEAD:
|
case CON_IFDEAD:
|
||||||
j = g_sp->extra;
|
// j = g_sp->extra;
|
||||||
if (g_sp->picnum == APLAYER)
|
// if (g_sp->picnum == APLAYER)
|
||||||
j--;
|
// j--;
|
||||||
X_DoConditional(j < 0);
|
X_DoConditional(g_sp->extra <= 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CON_AI:
|
case CON_AI:
|
||||||
|
@ -3206,9 +3205,7 @@ static int X_DoExecute(void)
|
||||||
// -1 for none found
|
// -1 for none found
|
||||||
// <type> <maxdistvarid> <varid>
|
// <type> <maxdistvarid> <varid>
|
||||||
int lType=*insptr++, lMaxDist=Gv_GetVar(*insptr++, g_i, g_p), lMaxZDist=Gv_GetVar(*insptr++, g_i, g_p);
|
int lType=*insptr++, lMaxDist=Gv_GetVar(*insptr++, g_i, g_p), lMaxZDist=Gv_GetVar(*insptr++, g_i, g_p);
|
||||||
int lVarID=*insptr++, lFound=-1, lTemp, lTemp2, j, k;
|
int lVarID=*insptr++, lFound=-1, lTemp, lTemp2, j, k=MAXSTATUS-1;
|
||||||
|
|
||||||
k=MAXSTATUS-1;
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
j=headspritestat[tw==CON_FINDNEARACTORZVAR?1:k]; // all sprites
|
j=headspritestat[tw==CON_FINDNEARACTORZVAR?1:k]; // all sprites
|
||||||
|
@ -3251,9 +3248,7 @@ static int X_DoExecute(void)
|
||||||
// -1 for none found
|
// -1 for none found
|
||||||
// <type> <maxdist> <varid>
|
// <type> <maxdist> <varid>
|
||||||
int lType=*insptr++, lMaxDist=*insptr++, lMaxZDist=*insptr++, lVarID=*insptr++;
|
int lType=*insptr++, lMaxDist=*insptr++, lMaxZDist=*insptr++, lVarID=*insptr++;
|
||||||
int lTemp, lTemp2, lFound=-1, j, k;
|
int lTemp, lTemp2, lFound=-1, j, k=MAXSTATUS-1;
|
||||||
|
|
||||||
k=MAXSTATUS-1;
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
j=headspritestat[tw==CON_FINDNEARACTORZ?1:k]; // all sprites
|
j=headspritestat[tw==CON_FINDNEARACTORZ?1:k]; // all sprites
|
||||||
|
@ -3286,24 +3281,16 @@ static int X_DoExecute(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
case CON_FINDPLAYER:
|
case CON_FINDPLAYER:
|
||||||
|
insptr++;
|
||||||
|
Gv_SetVar(g_iReturnVarID, A_FindPlayer(&sprite[g_i],&j), g_i, g_p);
|
||||||
|
Gv_SetVar(*insptr++, j, g_i, g_p);
|
||||||
|
break;
|
||||||
|
|
||||||
case CON_FINDOTHERPLAYER:
|
case CON_FINDOTHERPLAYER:
|
||||||
insptr++;
|
insptr++;
|
||||||
{
|
Gv_SetVar(g_iReturnVarID, P_FindOtherPlayer(g_p,&j), g_i, g_p);
|
||||||
// syntax findnearactorvar <type> <maxdistvar> <getvar>
|
Gv_SetVar(*insptr++, j, g_i, g_p);
|
||||||
// gets the sprite ID of the nearest actor within max dist
|
break;
|
||||||
// that is of <type> into <getvar>
|
|
||||||
// -1 for none found
|
|
||||||
// <type> <maxdistvarid> <varid>
|
|
||||||
int var1 = *insptr++, d;
|
|
||||||
|
|
||||||
if (tw == CON_FINDPLAYER) j=A_FindPlayer(&sprite[g_i],&d);
|
|
||||||
else j=P_FindOtherPlayer(g_i,&d);
|
|
||||||
|
|
||||||
Gv_SetVar(g_iReturnVarID, j, g_i, g_p);
|
|
||||||
Gv_SetVar(var1, d, g_i, g_p);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case CON_SETPLAYER:
|
case CON_SETPLAYER:
|
||||||
case CON_GETPLAYER:
|
case CON_GETPLAYER:
|
||||||
|
|
|
@ -519,7 +519,7 @@ int Gv_SetupVar(const char *pszLabel, int lValue, unsigned int dwFlags)
|
||||||
if (i==g_gameVarCount)
|
if (i==g_gameVarCount)
|
||||||
{
|
{
|
||||||
// we're adding a new one.
|
// we're adding a new one.
|
||||||
HASH_replace(&gamevarH,aGameVars[i].szLabel,i);
|
HASH_add(&gamevarH,aGameVars[i].szLabel,i);
|
||||||
g_gameVarCount++;
|
g_gameVarCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
#include "duke3d.h"
|
#include "duke3d.h"
|
||||||
|
|
||||||
const char *s_buildDate = "20081125";
|
const char *s_buildDate = "20081210";
|
||||||
char *MusicPtr = NULL;
|
char *MusicPtr = NULL;
|
||||||
int g_musicSize;
|
int g_musicSize;
|
||||||
|
|
||||||
|
@ -175,7 +175,7 @@ int SpriteFlags[MAXTILES];
|
||||||
projectile_t ProjectileData[MAXTILES], DefaultProjectileData[MAXTILES];
|
projectile_t ProjectileData[MAXTILES], DefaultProjectileData[MAXTILES];
|
||||||
|
|
||||||
char CheatKeys[2] = { sc_D, sc_N };
|
char CheatKeys[2] = { sc_D, sc_N };
|
||||||
char setupfilename[BMAX_PATH]= "duke3d.cfg";
|
char setupfilename[BMAX_PATH]= SETUPFILENAME;
|
||||||
// char datetimestring[] = ""__DATE__" "__TIME__"";
|
// char datetimestring[] = ""__DATE__" "__TIME__"";
|
||||||
|
|
||||||
int g_doQuickSave = 0;
|
int g_doQuickSave = 0;
|
||||||
|
|
|
@ -185,7 +185,7 @@ int ScanGroups(void)
|
||||||
}
|
}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
initprintf("Found %d recognized GRP %s.\n",i,i>1?"files":"file");
|
// initprintf("Found %d recognized GRP %s.\n",i,i>1?"files":"file");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
initprintf("Found no recognized GRP files!\n");
|
initprintf("Found no recognized GRP files!\n");
|
||||||
|
|
|
@ -32,11 +32,11 @@ Modifications for JonoF's port by Jonathon Fowler (jonof@edgenetwk.com)
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "standard.h"
|
#include "standard.h"
|
||||||
#include "usrhooks.h"
|
|
||||||
#include "music.h"
|
#include "music.h"
|
||||||
#include "_midi.h"
|
#include "_midi.h"
|
||||||
#include "midi.h"
|
#include "midi.h"
|
||||||
#include "mpu401.h"
|
#include "mpu401.h"
|
||||||
|
#include "compat.h"
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
@ -1169,7 +1169,7 @@ void MIDI_StopSong
|
||||||
_MIDI_Funcs->ReleasePatches();
|
_MIDI_Funcs->ReleasePatches();
|
||||||
}
|
}
|
||||||
|
|
||||||
USRHOOKS_FreeMem(_MIDI_TrackPtr);
|
Bfree(_MIDI_TrackPtr);
|
||||||
|
|
||||||
_MIDI_TrackPtr = NULL;
|
_MIDI_TrackPtr = NULL;
|
||||||
_MIDI_NumTracks = 0;
|
_MIDI_NumTracks = 0;
|
||||||
|
@ -1204,7 +1204,6 @@ int MIDI_PlaySong
|
||||||
int tracklength;
|
int tracklength;
|
||||||
track *CurrentTrack;
|
track *CurrentTrack;
|
||||||
unsigned char *ptr;
|
unsigned char *ptr;
|
||||||
int status;
|
|
||||||
|
|
||||||
if (_MIDI_SongLoaded)
|
if (_MIDI_SongLoaded)
|
||||||
{
|
{
|
||||||
|
@ -1251,8 +1250,8 @@ int MIDI_PlaySong
|
||||||
}
|
}
|
||||||
|
|
||||||
_MIDI_TrackMemSize = _MIDI_NumTracks * sizeof(track);
|
_MIDI_TrackMemSize = _MIDI_NumTracks * sizeof(track);
|
||||||
status = USRHOOKS_GetMem((void**)&_MIDI_TrackPtr, _MIDI_TrackMemSize);
|
_MIDI_TrackPtr = Bmalloc(_MIDI_TrackMemSize);
|
||||||
if (status != USRHOOKS_Ok)
|
if (_MIDI_TrackPtr == NULL)
|
||||||
{
|
{
|
||||||
return(MIDI_NoMemory);
|
return(MIDI_NoMemory);
|
||||||
}
|
}
|
||||||
|
@ -1263,7 +1262,7 @@ int MIDI_PlaySong
|
||||||
{
|
{
|
||||||
if (*(unsigned int *)ptr != MIDI_TRACK_SIGNATURE)
|
if (*(unsigned int *)ptr != MIDI_TRACK_SIGNATURE)
|
||||||
{
|
{
|
||||||
USRHOOKS_FreeMem(_MIDI_TrackPtr);
|
Bfree(_MIDI_TrackPtr);
|
||||||
|
|
||||||
_MIDI_TrackPtr = NULL;
|
_MIDI_TrackPtr = NULL;
|
||||||
_MIDI_TrackMemSize = 0;
|
_MIDI_TrackMemSize = 0;
|
||||||
|
|
|
@ -47,7 +47,6 @@ Modifications for JonoF's port by Jonathon Fowler (jonof@edgenetwk.com)
|
||||||
#endif
|
#endif
|
||||||
#include "compat.h"
|
#include "compat.h"
|
||||||
#include "baselayer.h"
|
#include "baselayer.h"
|
||||||
#include "usrhooks.h"
|
|
||||||
#include "linklist.h"
|
#include "linklist.h"
|
||||||
#include "pitch.h"
|
#include "pitch.h"
|
||||||
#include "multivoc.h"
|
#include "multivoc.h"
|
||||||
|
@ -2794,23 +2793,6 @@ int MV_TestPlayback(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int USRHOOKS_GetMem(void **ptr, unsigned int size)
|
|
||||||
{
|
|
||||||
*ptr = malloc(size);
|
|
||||||
|
|
||||||
if (*ptr == NULL)
|
|
||||||
return(USRHOOKS_Error);
|
|
||||||
|
|
||||||
return(USRHOOKS_Ok);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int USRHOOKS_FreeMem(void *ptr)
|
|
||||||
{
|
|
||||||
free(ptr);
|
|
||||||
return(USRHOOKS_Ok);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------
|
/*---------------------------------------------------------------------
|
||||||
Function: MV_Init
|
Function: MV_Init
|
||||||
|
|
||||||
|
@ -2835,8 +2817,8 @@ int MV_Init(int soundcard, int MixRate, int Voices, int numchannels, int sampleb
|
||||||
MV_SetErrorCode(MV_Ok);
|
MV_SetErrorCode(MV_Ok);
|
||||||
|
|
||||||
MV_TotalMemory = Voices * sizeof(VoiceNode) + sizeof(HARSH_CLIP_TABLE_8);
|
MV_TotalMemory = Voices * sizeof(VoiceNode) + sizeof(HARSH_CLIP_TABLE_8);
|
||||||
status = USRHOOKS_GetMem((void **)&ptr, MV_TotalMemory);
|
ptr = Bmalloc(MV_TotalMemory);
|
||||||
if (status != USRHOOKS_Ok)
|
if (ptr == NULL)
|
||||||
{
|
{
|
||||||
MV_SetErrorCode(MV_NoMem);
|
MV_SetErrorCode(MV_NoMem);
|
||||||
return(MV_Error);
|
return(MV_Error);
|
||||||
|
@ -2868,7 +2850,7 @@ int MV_Init(int soundcard, int MixRate, int Voices, int numchannels, int sampleb
|
||||||
ptr = (char *)Bcalloc(1,TotalBufferSize + 8); // FIXME: temporarily fixes bounds error somewhere...
|
ptr = (char *)Bcalloc(1,TotalBufferSize + 8); // FIXME: temporarily fixes bounds error somewhere...
|
||||||
if (!ptr)
|
if (!ptr)
|
||||||
{
|
{
|
||||||
USRHOOKS_FreeMem(MV_Voices);
|
Bfree(MV_Voices);
|
||||||
MV_Voices = NULL;
|
MV_Voices = NULL;
|
||||||
MV_TotalMemory = 0;
|
MV_TotalMemory = 0;
|
||||||
|
|
||||||
|
@ -2895,7 +2877,7 @@ int MV_Init(int soundcard, int MixRate, int Voices, int numchannels, int sampleb
|
||||||
{
|
{
|
||||||
status = MV_ErrorCode;
|
status = MV_ErrorCode;
|
||||||
|
|
||||||
USRHOOKS_FreeMem(MV_Voices);
|
Bfree(MV_Voices);
|
||||||
MV_Voices = NULL;
|
MV_Voices = NULL;
|
||||||
MV_TotalMemory = 0;
|
MV_TotalMemory = 0;
|
||||||
|
|
||||||
|
@ -2987,7 +2969,7 @@ int MV_Shutdown(void)
|
||||||
RestoreInterrupts(flags);
|
RestoreInterrupts(flags);
|
||||||
|
|
||||||
// Free any voices we allocated
|
// Free any voices we allocated
|
||||||
USRHOOKS_FreeMem(MV_Voices);
|
Bfree(MV_Voices);
|
||||||
MV_Voices = NULL;
|
MV_Voices = NULL;
|
||||||
MV_TotalMemory = 0;
|
MV_TotalMemory = 0;
|
||||||
|
|
||||||
|
|
|
@ -1,56 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 1994-1995 Apogee Software, Ltd.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
|
|
||||||
Modifications for JonoF's port by Jonathon Fowler (jonof@edgenetwk.com)
|
|
||||||
*/
|
|
||||||
/**********************************************************************
|
|
||||||
module: USRHOOKS.H
|
|
||||||
|
|
||||||
author: James R. Dose
|
|
||||||
date: July 26, 1994
|
|
||||||
|
|
||||||
Public header file for USRHOOKS.C.
|
|
||||||
|
|
||||||
This module contains cover functions for operations the library
|
|
||||||
needs that may be restricted by the calling program. The function
|
|
||||||
prototypes in this header should not be modified.
|
|
||||||
**********************************************************************/
|
|
||||||
|
|
||||||
#ifndef __USRHOOKS_H
|
|
||||||
#define __USRHOOKS_H
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------
|
|
||||||
Error definitions
|
|
||||||
---------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
enum USRHOOKS_Errors
|
|
||||||
{
|
|
||||||
USRHOOKS_Warning = -2,
|
|
||||||
USRHOOKS_Error = -1,
|
|
||||||
USRHOOKS_Ok = 0
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------
|
|
||||||
Function Prototypes
|
|
||||||
---------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
int USRHOOKS_GetMem( void **ptr, unsigned int size );
|
|
||||||
int USRHOOKS_FreeMem( void *ptr );
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -35,7 +35,7 @@ struct dynitem
|
||||||
short vstat;
|
short vstat;
|
||||||
short val;
|
short val;
|
||||||
};
|
};
|
||||||
struct HASH_table dynnamesH = {4096, NULL};
|
struct HASH_table dynnamesH = {4096<<2, NULL};
|
||||||
|
|
||||||
struct dynitem list[]=
|
struct dynitem list[]=
|
||||||
{
|
{
|
||||||
|
|
|
@ -2254,12 +2254,13 @@ void P_DisplayWeapon(int snum)
|
||||||
pal = p->palookup;
|
pal = p->palookup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
guniqhudid = 100;
|
||||||
if (j < 6 || j > 12)
|
if (j < 6 || j > 12)
|
||||||
G_DrawTileScaled(weapon_xoffset+80-(p->look_ang>>1),
|
G_DrawTileScaled(weapon_xoffset+80-(p->look_ang>>1),
|
||||||
looking_arc+250-gun_pos,KNEE,gs,o|4|262144,pal);
|
looking_arc+250-gun_pos,KNEE,gs,o|4|262144,pal);
|
||||||
else G_DrawTileScaled(weapon_xoffset+160-16-(p->look_ang>>1),
|
else G_DrawTileScaled(weapon_xoffset+160-16-(p->look_ang>>1),
|
||||||
looking_arc+214-gun_pos,KNEE+1,gs,o|4|262144,pal);
|
looking_arc+214-gun_pos,KNEE+1,gs,o|4|262144,pal);
|
||||||
|
guniqhudid = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sprite[p->i].xrepeat < 40)
|
if (sprite[p->i].xrepeat < 40)
|
||||||
|
@ -2302,13 +2303,14 @@ void P_DisplayWeapon(int snum)
|
||||||
if (pal == 0)
|
if (pal == 0)
|
||||||
pal = p->palookup;
|
pal = p->palookup;
|
||||||
}
|
}
|
||||||
|
guniqhudid = cw;
|
||||||
if ((*kb) < 5 || (*kb) > 9)
|
if ((*kb) < 5 || (*kb) > 9)
|
||||||
G_DrawTileScaled(weapon_xoffset+220-(p->look_ang>>1),
|
G_DrawTileScaled(weapon_xoffset+220-(p->look_ang>>1),
|
||||||
looking_arc+250-gun_pos,KNEE,gs,o,pal);
|
looking_arc+250-gun_pos,KNEE,gs,o,pal);
|
||||||
else
|
else
|
||||||
G_DrawTileScaled(weapon_xoffset+160-(p->look_ang>>1),
|
G_DrawTileScaled(weapon_xoffset+160-(p->look_ang>>1),
|
||||||
looking_arc+214-gun_pos,KNEE+1,gs,o,pal);
|
looking_arc+214-gun_pos,KNEE+1,gs,o,pal);
|
||||||
|
guniqhudid = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -2614,7 +2616,7 @@ void P_DisplayWeapon(int snum)
|
||||||
else if (p->cursectnum >= 0)
|
else if (p->cursectnum >= 0)
|
||||||
pal = sector[p->cursectnum].floorpal;
|
pal = sector[p->cursectnum].floorpal;
|
||||||
else pal = 0;
|
else pal = 0;
|
||||||
|
guniqhudid = cw;
|
||||||
if ((*kb))
|
if ((*kb))
|
||||||
{
|
{
|
||||||
if ((*kb) < (*aplWeaponTotalTime[p->curr_weapon]))
|
if ((*kb) < (*aplWeaponTotalTime[p->curr_weapon]))
|
||||||
|
@ -2635,6 +2637,7 @@ void P_DisplayWeapon(int snum)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
G_DrawWeaponTile(weapon_xoffset+190-(p->look_ang>>1),looking_arc+260-gun_pos,HANDTHROW,gs,o,pal);
|
G_DrawWeaponTile(weapon_xoffset+190-(p->look_ang>>1),looking_arc+260-gun_pos,HANDTHROW,gs,o,pal);
|
||||||
|
guniqhudid = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -2653,10 +2656,12 @@ void P_DisplayWeapon(int snum)
|
||||||
else pal = 0;
|
else pal = 0;
|
||||||
|
|
||||||
weapon_xoffset = -48;
|
weapon_xoffset = -48;
|
||||||
|
guniqhudid = cw;
|
||||||
if ((*kb))
|
if ((*kb))
|
||||||
G_DrawWeaponTile(weapon_xoffset+150-(p->look_ang>>1),looking_arc+258-gun_pos,HANDREMOTE+remote_frames[(*kb)],gs,o,pal);
|
G_DrawWeaponTile(weapon_xoffset+150-(p->look_ang>>1),looking_arc+258-gun_pos,HANDREMOTE+remote_frames[(*kb)],gs,o,pal);
|
||||||
else
|
else
|
||||||
G_DrawWeaponTile(weapon_xoffset+150-(p->look_ang>>1),looking_arc+258-gun_pos,HANDREMOTE,gs,o,pal);
|
G_DrawWeaponTile(weapon_xoffset+150-(p->look_ang>>1),looking_arc+258-gun_pos,HANDREMOTE,gs,o,pal);
|
||||||
|
guniqhudid = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -330,7 +330,7 @@ static void G_PrecacheSounds(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void G_DoLoadScreen(char *statustext)
|
static void G_DoLoadScreen(char *statustext, int percent)
|
||||||
{
|
{
|
||||||
int i=0,j;
|
int i=0,j;
|
||||||
|
|
||||||
|
@ -369,7 +369,11 @@ static void G_DoLoadScreen(char *statustext)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (statustext) gametext(160,180,statustext,0,2+8+16);
|
if (statustext) gametext(160,180,statustext,0,2+8+16);
|
||||||
|
j = usehightile;
|
||||||
|
usehightile = 0;
|
||||||
|
rotatesprite(33<<16,140<<16,65536,0,LASERLINE,0,0,2+8+16,0,0,scale(xdim-1,percent,100),ydim-1);
|
||||||
|
rotatesprite(153<<16,140<<16,65536,0,LASERLINE,0,0,2+8+16,0,0,scale(xdim-1,percent,100),ydim-1);
|
||||||
|
usehightile = j;
|
||||||
X_OnEvent(EVENT_DISPLAYLOADINGSCREEN, g_player[screenpeek].ps->i, screenpeek, -1);
|
X_OnEvent(EVENT_DISPLAYLOADINGSCREEN, g_player[screenpeek].ps->i, screenpeek, -1);
|
||||||
nextpage();
|
nextpage();
|
||||||
|
|
||||||
|
@ -501,8 +505,8 @@ void G_CacheMapData(void)
|
||||||
}
|
}
|
||||||
if (totalclock - tc > TICRATE/4)
|
if (totalclock - tc > TICRATE/4)
|
||||||
{
|
{
|
||||||
sprintf(tempbuf,"Loading resources... %d%%\n",min(100,100*pc/g_precacheCount));
|
sprintf(tempbuf,"%d resources remaining\n",g_precacheCount-pc);
|
||||||
G_DoLoadScreen(tempbuf);
|
G_DoLoadScreen(tempbuf, min(100,100*pc/g_precacheCount));
|
||||||
tc = totalclock;
|
tc = totalclock;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -562,7 +566,9 @@ void G_UpdateScreenArea(void)
|
||||||
y1 = scale(y1,ydim,200);
|
y1 = scale(y1,ydim,200);
|
||||||
y2 = scale(y2,ydim,200);
|
y2 = scale(y2,ydim,200);
|
||||||
|
|
||||||
setview(x1,y1,x2-1,y2-1);
|
if (getrendermode() >= 3)
|
||||||
|
setview(x1,y1,x2-1,y2);
|
||||||
|
else setview(x1,y1,x2-1,y2-1);
|
||||||
|
|
||||||
G_GetCrosshairColor();
|
G_GetCrosshairColor();
|
||||||
G_SetCrosshairColor(CrosshairColors.r, CrosshairColors.g, CrosshairColors.b);
|
G_SetCrosshairColor(CrosshairColors.r, CrosshairColors.g, CrosshairColors.b);
|
||||||
|
@ -1706,7 +1712,7 @@ int G_EnterLevel(int g)
|
||||||
|
|
||||||
i = ud.screen_size;
|
i = ud.screen_size;
|
||||||
ud.screen_size = 0;
|
ud.screen_size = 0;
|
||||||
G_DoLoadScreen(NULL);
|
G_DoLoadScreen(NULL, -1);
|
||||||
G_UpdateScreenArea();
|
G_UpdateScreenArea();
|
||||||
ud.screen_size = i;
|
ud.screen_size = i;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
/*
|
/*
|
||||||
Duke Nukem Copyright (C) 1996, 2003 3D Realms Entertainment
|
Duke Nukem Copyright (C) 1996, 2003 3D Realms Entertainment
|
||||||
|
|
||||||
|
@ -37,36 +36,6 @@ Windows-specific hooks for JonoF's Duke3D port.
|
||||||
|
|
||||||
#include "winlayer.h"
|
#include "winlayer.h"
|
||||||
|
|
||||||
|
|
||||||
int Win_YesNoBox(char *name, char *fmt, ...)
|
|
||||||
{
|
|
||||||
char buf[1000];
|
|
||||||
va_list va;
|
|
||||||
int r;
|
|
||||||
|
|
||||||
va_start(va,fmt);
|
|
||||||
vsprintf(buf,fmt,va);
|
|
||||||
va_end(va);
|
|
||||||
|
|
||||||
r = MessageBox((HWND)win_gethwnd(),buf,name,MB_YESNO|MB_TASKMODAL);
|
|
||||||
if (r==IDYES) return 'y';
|
|
||||||
return 'n';
|
|
||||||
}
|
|
||||||
|
|
||||||
int Win_MsgBox(char *name, char *fmt, ...)
|
|
||||||
{
|
|
||||||
char buf[1000];
|
|
||||||
va_list va;
|
|
||||||
|
|
||||||
va_start(va,fmt);
|
|
||||||
vsprintf(buf,fmt,va);
|
|
||||||
va_end(va);
|
|
||||||
|
|
||||||
MessageBox((HWND)win_gethwnd(),buf,name,MB_OK|MB_TASKMODAL);
|
|
||||||
return 'y';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// this replaces the Error() function in jmact/util_lib.c
|
// this replaces the Error() function in jmact/util_lib.c
|
||||||
extern void G_Shutdown(void); // game.c
|
extern void G_Shutdown(void); // game.c
|
||||||
void Error(char *error, ...)
|
void Error(char *error, ...)
|
||||||
|
@ -82,16 +51,12 @@ void Error(char *error, ...)
|
||||||
vsprintf(buf, error, va);
|
vsprintf(buf, error, va);
|
||||||
va_end(va);
|
va_end(va);
|
||||||
|
|
||||||
MessageBox((HWND)win_gethwnd(),buf,"Fatal Error",MB_OK|MB_TASKMODAL);
|
MessageBox((HWND)win_gethwnd(),buf,"Fatal Error",MB_OK|MB_ICONERROR|MB_TASKMODAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
exit((error != NULL));
|
exit((error != NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
int G_GetVersionFromWebsite(char *buffer)
|
int G_GetVersionFromWebsite(char *buffer)
|
||||||
{
|
{
|
||||||
int wsainitialized = 0;
|
int wsainitialized = 0;
|
||||||
|
|
Loading…
Reference in a new issue