Importing source for great justice

git-svn-id: https://svn.eduke32.com/eduke32@5 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
Plagman 2006-04-13 20:47:06 +00:00
parent 17cdbabc42
commit 09f0c239b6
260 changed files with 179831 additions and 0 deletions

495
polymer/build/ChangeLog Normal file
View file

@ -0,0 +1,495 @@
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"

7
polymer/build/LICENSE Normal file
View file

@ -0,0 +1,7 @@
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)

View file

@ -0,0 +1,47 @@
# GNU Makefile to prepare source and binary distributions.
# make -f MakeDistributions [source|binary]
SOURCEFILES=build.cfg buildlic.txt ChangeLog game.cfg LICENSE \
Makefile Makefile.deps Makefile.shared Makefile.msvc Makefile.watcom \
MakeDistributions makegnu.bat makemsc.bat makew.bat NAMES.H README
BINARYFILES=build.cfg build.exe buildlic.txt ChangeLog fmod.dll \
game.cfg game.exe LICENSE NAMES.H neatsong.ogg README
BINARYCHECKS=checkfmoddll checkneatsongogg
.PHONY: source binary $(BINARYCHECKS)
datenow=$(shell date +%Y%m%d)
sourcedir=txbuild_src_$(datenow)
binarydir=txbuild_$(datenow)
all: source binary
source:
rm -rf $(sourcedir) $(sourcedir).zip
mkdir $(sourcedir) $(sourcedir)/obj.gnu $(sourcedir)/obj.watcom $(sourcedir)/obj.msc
touch $(sourcedir)/obj.gnu/keep.me $(sourcedir)/obj.watcom/keep.me $(sourcedir)/obj.msc/keep.me
cp $(SOURCEFILES) $(sourcedir)
find . -name "*~" -exec rm -rf '{}' ';';
find . -name "*.orig" -exec rm -rf '{}' ';';
find . -name "*.rej" -exec rm -rf '{}' ';';
find . -name "*.mine" -exec rm -rf '{}' ';';
find . -name "*.c.r*" -exec rm -rf '{}' ';';
cp -R src rsrc include devcpp osx $(sourcedir)
find $(sourcedir) | grep -i svn | xargs rm -rf
rm -f $(sourcedir)/src/tmp/*
touch $(sourcedir)/src/tmp/keep.me
kzip -r $(sourcedir).zip $(sourcedir)
binary: $(BINARYCHECKS)
make RELEASE=1
upx --best build.exe game.exe
mkdir $(binarydir)
cp $(BINARYFILES) $(binarydir)
kzip -r $(binarydir).zip $(binarydir)
# Binary checks
checkfmoddll: fmod.dll
checkneatsongogg: neatsong.ogg

285
polymer/build/Makefile Normal file
View file

@ -0,0 +1,285 @@
# Build Makefile for GNU Make
# Notes:
# As of 6 July 2005, the engine should handle optimisations being enabled.
# If things seem to be going wrong, lower or disable optimisations, then
# try again. If things are still going wrong, call me.
#
# Engine options - these may be overridden by game makefiles
# SUPERBUILD - enables voxels
# POLYMOST - enables Polymost renderer
# USE_OPENGL - enables OpenGL support in Polymost
# DYNAMIC_OPENGL - enables run-time loading of OpenGL library
# USE_A_C - enables use of C version of classic renderer
# NOASM - disables the use of inline assembly pragmas
#
# SETSPRITEZ - set to 1 for Shadow Warrior
SUPERBUILD ?= 1
POLYMOST ?= 1
USE_OPENGL ?= 1
DYNAMIC_OPENGL ?= 1
USE_A_C ?= 0
NOASM ?= 0
SETSPRITEZ ?= 0
# Debugging options
# RELEASE - 1 = no debugging
# EFENCE - 1 = compile with Electric Fence for malloc() debugging
RELEASE?=1
EFENCE?=0
# SDK locations - adjust to match your setup
DXROOT=c:/sdks/msc/dx61
FMODROOTWIN=c:/sdks/fmodapi374win/api
# build locations - OBJ gets overridden to the game-specific objects dir
OBJ?=obj.gnu/
SRC=src/
RSRC=rsrc/
INC=include/
# filename extensions - these won't need to change
o=o
res=o
asm=nasm
# debugging and release
ifneq ($(RELEASE),0)
# debugging disabled
debug=-fomit-frame-pointer -O2
else
# debugging enabled
debug=-ggdb -O0 -DDEBUGGINGAIDS -DNOSDLPARACHUTE
endif
CC=gcc
CXX=gcc
AS=nasm
RC=windres
AR=ar
RANLIB=ranlib
OURCFLAGS=$(debug) -W -Wall -Wimplicit -Wno-char-subscripts -Wno-unused \
-funsigned-char -fno-strict-aliasing -DNO_GCC_BUILTINS \
-DKSFORBUILD -I$(INC:/=) -I../jfaud/src
OURCXXFLAGS=-fno-exceptions -fno-rtti
LIBS=
GAMELIBS=../jfaud/libjfaud.a #../jfaud/mpadec/libmpadec/libmpadec.a
ASFLAGS=-s #-g
EXESUFFIX=
include Makefile.shared
ifneq (0,$(USE_A_C))
ENGINEOBJS=$(OBJ)a-c.$o
else
ENGINEOBJS=$(OBJ)a.$o
endif
ENGINEOBJS+= \
$(OBJ)baselayer.$o \
$(OBJ)cache1d.$o \
$(OBJ)compat.$o \
$(OBJ)crc32.$o \
$(OBJ)defs.$o \
$(OBJ)engine.$o \
$(OBJ)engineinfo.$o \
$(OBJ)glbuild.$o \
$(OBJ)kplib.$o \
$(OBJ)lzf_c.$o \
$(OBJ)lzf_d.$o \
$(OBJ)md4.$o \
$(OBJ)mmulti.$o \
$(OBJ)osd.$o \
$(OBJ)pragmas.$o \
$(OBJ)scriptfile.$o
EDITOROBJS=$(OBJ)build.$o \
$(OBJ)config.$o
GAMEEXEOBJS=$(OBJ)game.$o \
$(OBJ)jfaud_sound.$o \
$(OBJ)config.$o \
$(OBJ)$(ENGINELIB)
EDITOREXEOBJS=$(OBJ)bstub.$o \
$(OBJ)$(EDITORLIB) \
$(OBJ)$(ENGINELIB)
# detect the platform
ifeq ($(PLATFORM),LINUX)
ASFLAGS+= -f elf
LIBS+= -lm
endif
ifeq ($(PLATFORM),BSD)
ASFLAGS+= -f elf
OURCFLAGS+= -I/usr/X11R6/include
LIBS+= -lm
endif
ifeq ($(PLATFORM),WINDOWS)
OURCFLAGS+= -DUNDERSCORES -I$(DXROOT)/include -I$(FMODROOTWIN)/inc
LIBS+= -lm
GAMELIBS+= -L$(FMODROOTWIN)/lib
ASFLAGS+= -DUNDERSCORES -f win32
endif
ifeq ($(PLATFORM),BEOS)
ASFLAGS+= -f elf
TARGETOPTS+= -DNOASM
endif
ifeq ($(PLATFORM),SUNOS)
LIBS+= -lm
endif
ifeq ($(PLATFORM),SYLLABLE)
ASFLAGS+= -f elf
endif
ifeq ($(RENDERTYPE),SDL)
ENGINEOBJS+= $(OBJ)sdlayer.$o
OURCFLAGS+= $(subst -Dmain=SDL_main,,$(SDLCONFIG_CFLAGS))
ifeq (1,$(HAVE_GTK2))
OURCFLAGS+= -DHAVE_GTK2 $(shell pkg-config --cflags gtk+-2.0)
ENGINEOBJS+= $(OBJ)gtkbits.$o
GAMEEXEOBJS+= $(OBJ)game_banner.$o
EDITOREXEOBJS+= $(OBJ)editor_banner.$o
endif
GAMEEXEOBJS+= $(OBJ)game_icon.$o
EDITOREXEOBJS+= $(OBJ)build_icon.$o
endif
ifeq ($(RENDERTYPE),WIN)
ENGINEOBJS+= $(OBJ)winlayer.$o
EDITOROBJS+= $(OBJ)buildstartwin.$o
GAMEEXEOBJS+= $(OBJ)gameres.$(res) $(OBJ)gamestartwin.$o
EDITOREXEOBJS+= $(OBJ)buildres.$(res)
endif
ifneq (0,$(EFENCE))
LIBS+= -lefence
OURCFLAGS+= -DEFENCE
endif
OURCFLAGS+= $(BUILDCFLAGS)
.PHONY: clean veryclean all utils writeengineinfo enginelib editorlib
# TARGETS
# Invoking Make from the terminal in OSX just chains the build on to xcode
ifeq ($(PLATFORM),DARWIN)
ifeq ($(RELEASE),0)
style=Development
else
style=Deployment
endif
.PHONY: alldarwin
alldarwin:
cd osx/engine && xcodebuild -target All -buildstyle $(style)
cd osx/game && xcodebuild -target All -buildstyle $(style)
endif
UTILS=kextract$(EXESUFFIX) kgroup$(EXESUFFIX) transpal$(EXESUFFIX) wad2art$(EXESUFFIX) wad2map$(EXESUFFIX)
all: game$(EXESUFFIX) build$(EXESUFFIX) $(OBJ)$(ENGINELIB) $(OBJ)$(EDITORLIB)
utils: $(UTILS)
enginelib: $(OBJ)$(ENGINELIB)
$(OBJ)$(ENGINELIB): $(ENGINEOBJS)
$(AR) rc $@ $^
$(RANLIB) $@
editorlib: $(OBJ)$(EDITORLIB)
$(OBJ)$(EDITORLIB): $(EDITOROBJS)
$(AR) rc $@ $^
$(RANLIB) $@
game$(EXESUFFIX): $(GAMEEXEOBJS)
$(CC) $(CFLAGS) $(OURCFLAGS) -o $@ $^ $(LIBS) $(GAMELIBS) $(STDCPPLIB)
build$(EXESUFFIX): $(EDITOREXEOBJS)
$(CC) $(CFLAGS) $(OURCFLAGS) -o $@ $^ $(LIBS)
pragmacheck$(EXESUFFIX): $(OBJ)pragmacheck.$o $(OBJ)pragmas.$o
$(CC) $(subst -Dmain=app_main,,$(OURCFLAGS)) -o $@ $^
kextract$(EXESUFFIX): $(OBJ)kextract.$o $(OBJ)compat.$o
$(CC) -o $@ $^
kgroup$(EXESUFFIX): $(OBJ)kgroup.$o $(OBJ)compat.$o
$(CC) -o $@ $^
transpal$(EXESUFFIX): $(OBJ)transpal.$o $(OBJ)pragmas.$o $(OBJ)compat.$o
$(CC) -o $@ $^
wad2art$(EXESUFFIX): $(OBJ)wad2art.$o $(OBJ)pragmas.$o $(OBJ)compat.$o
$(CC) -o $@ $^
wad2map$(EXESUFFIX): $(OBJ)wad2map.$o $(OBJ)pragmas.$o $(OBJ)compat.$o
$(CC) -o $@ $^
generateicon$(EXESUFFIX): $(OBJ)generateicon.$o $(OBJ)kplib.$o
$(CC) -o $@ $^
cacheinfo$(EXESUFFIX): $(OBJ)cacheinfo.$o $(OBJ)compat.$o
$(CC) -o $@ $^
enumdisplay$(EXESUFFIX): src/misc/enumdisplay.c
$(CC) -g -Os -o $@ $^ -I$(DXROOT)/include -lgdi32
# DEPENDENCIES
include Makefile.deps
.PHONY: $(OBJ)engineinfo.$o
$(OBJ)engineinfo.$o:
echo "const char _engine_cflags[] = \"$(CFLAGS) $(OURCFLAGS)\";" > $(SRC)tmp/engineinfo.c
echo "const char _engine_libs[] = \"$(LIBS)\";" >> $(SRC)tmp/engineinfo.c
echo "const char _engine_uname[] = \"$(shell uname -a)\";" >> $(SRC)tmp/engineinfo.c
echo "const char _engine_compiler[] = \"$(CC) $(shell $(CC) -dumpversion) $(shell $(CC) -dumpmachine)\";" >> $(SRC)tmp/engineinfo.c
echo "const char _engine_date[] = __DATE__ \" \" __TIME__;" >> $(SRC)tmp/engineinfo.c
$(CC) $(CFLAGS) $(OURCFLAGS) -c $(SRC)tmp/engineinfo.c -o $@ 2>&1
# RULES
$(OBJ)%.$o: $(SRC)%.nasm
$(AS) $(ASFLAGS) $< -o $@
$(OBJ)%.$o: $(SRC)%.c
$(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@ 2>&1
$(OBJ)%.$o: $(SRC)%.cpp
$(CXX) $(CXXFLAGS) $(OURCXXFLAGS) $(OURCFLAGS) -c $< -o $@ 2>&1
$(OBJ)%.$o: $(SRC)tmp/%.c
$(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@ 2>&1
$(OBJ)%.$o: $(SRC)misc/%.rc
$(RC) -i $^ -o $@
$(OBJ)%.$o: $(SRC)util/%.c
$(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@ 2>&1
$(OBJ)%.$o: $(RSRC)%.c
$(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@ 2>&1
$(OBJ)game_banner.$o: $(RSRC)game_banner.c
$(OBJ)editor_banner.$o: $(RSRC)editor_banner.c
$(RSRC)game_banner.c: $(RSRC)game.bmp
echo "#include <gdk-pixbuf/gdk-pixdata.h>" > $@
gdk-pixbuf-csource --extern --struct --raw --name=startbanner_pixdata $^ | sed 's/load_inc//' >> $@
$(RSRC)editor_banner.c: $(RSRC)build.bmp
echo "#include <gdk-pixbuf/gdk-pixdata.h>" > $@
gdk-pixbuf-csource --extern --struct --raw --name=startbanner_pixdata $^ | sed 's/load_inc//' >> $@
# PHONIES
clean:
ifeq ($(PLATFORM),DARWIN)
cd osx/engine && xcodebuild -target All clean
cd osx/game && xcodebuild -target All clean
else
-rm -f $(OBJ)*
endif
veryclean: clean
ifeq ($(PLATFORM),DARWIN)
else
-rm -f $(ENGINELIB) $(EDITORLIB) game$(EXESUFFIX) build$(EXESUFFIX) $(UTILS)
endif
.PHONY: fixlineends
fixlineends:
for a in `find . -type f \( -name '*.c' -o -name '*.h' -o -name 'Makefile*' \) \! -path '*/.svn/*'`; do \
echo Fixing $$a && tr -d "\015" < $$a > $$a.fix && mv $$a.fix $$a; \
done

View file

@ -0,0 +1,46 @@
# Build Engine dependencies
#
$(OBJ)a-c.$o: $(SRC)a-c.c $(INC)a.h
$(OBJ)a.$o: $(SRC)a.$(asm)
$(OBJ)baselayer.$o: $(SRC)baselayer.c $(INC)compat.h $(INC)baselayer.h $(INC)build.h $(INC)osd.h
$(OBJ)bstub.$o: $(SRC)bstub.c $(INC)compat.h $(INC)a.h $(INC)build.h $(INC)pragmas.h $(INC)baselayer.h $(INC)names.h $(INC)osd.h $(INC)cache1d.h $(INC)editor.h
$(OBJ)build.$o: $(SRC)build.c $(INC)build.h $(INC)pragmas.h $(INC)compat.h $(INC)baselayer.h $(INC)editor.h
$(OBJ)cache1d.$o: $(SRC)cache1d.c $(INC)compat.h $(INC)cache1d.h $(INC)pragmas.h $(INC)baselayer.h
$(OBJ)compat.$o: $(SRC)compat.c $(INC)compat.h
$(OBJ)config.$o: $(SRC)config.c $(INC)compat.h $(INC)osd.h $(INC)editor.h
$(OBJ)crc32.$o: $(SRC)crc32.c $(INC)crc32.h
$(OBJ)defs.$o: $(SRC)defs.c $(INC)build.h $(INC)baselayer.h $(INC)scriptfile.h $(INC)compat.h
$(OBJ)engine.$o: $(SRC)engine.c $(SRC)polymost.c $(INC)kplib.h $(SRC)hightile.c $(SRC)mdsprite.c $(INC)md4.h $(INC)lzf.h $(INC)lzwnew.h $(INC)compat.h $(INC)build.h $(INC)pragmas.h $(INC)cache1d.h $(INC)a.h $(INC)osd.h $(INC)baselayer.h
$(OBJ)game.$o: $(SRC)game.c $(INC)compat.h $(INC)build.h $(INC)names.h $(INC)pragmas.h $(INC)cache1d.h $(INC)game.h $(INC)osd.h $(INC)baselayer.h
$(OBJ)glbuild.$o: $(SRC)glbuild.c $(INC)glbuild.h $(INC)baselayer.h
$(OBJ)jfaud_sound.$o: $(SRC)jfaud_sound.cpp $(INC)osd.h $(INC)compat.h $(INC)cache1d.h
$(OBJ)kplib.$o: $(SRC)kplib.c $(INC)compat.h
$(OBJ)lzf_c.$o: $(SRC)lzf_c.c $(SRC)lzfP.h
$(OBJ)lzf_d.$o: $(SRC)lzf_d.c $(SRC)lzfP.h
$(OBJ)lzwnew.$o: $(SRC)lzwnew.c
$(OBJ)md4.$o: $(SRC)md4.c $(INC)md4.h $(INC)compat.h
$(OBJ)mmulti_null.$o: $(SRC)mmulti_null.c $(INC)mmulti.h
$(OBJ)mmulti.$o: $(SRC)mmulti.c
$(OBJ)osd.$o: $(SRC)osd.c $(INC)build.h $(INC)osd.h $(INC)compat.h $(INC)engineinfo.h $(INC)baselayer.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)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)gtkbits.$o: $(SRC)gtkbits.c $(INC)baselayer.h $(INC)build.h
$(OBJ)gameres.$(res): $(SRC)misc/gameres.rc
$(OBJ)buildres.$(res): $(SRC)misc/buildres.rc
$(OBJ)gamestartwin.$o: $(SRC)gamestartwin.c $(INC)winlayer.h $(INC)build.h $(INC)compat.h
$(OBJ)buildstartwin.$o: $(SRC)buildstartwin.c $(INC)winlayer.h $(INC)build.h $(INC)compat.h
$(OBJ)game_icon.$o: $(RSRC)game_icon.c
$(OBJ)build_icon.$o: $(RSRC)build_icon.c
$(OBJ)kextract.$o: $(SRC)util/kextract.c $(INC)compat.h
$(OBJ)kgroup.$o: $(SRC)util/kgroup.c $(INC)compat.h
$(OBJ)transpal.$o: $(SRC)util/transpal.c $(INC)compat.h $(INC)pragmas.h
$(OBJ)wad2art.$o: $(SRC)util/wad2art.c $(INC)compat.h $(INC)pragmas.h
$(OBJ)wad2map.$o: $(SRC)util/wad2map.c $(INC)compat.h $(INC)pragmas.h
$(OBJ)generateicon.$o: $(SRC)util/generateicon.c
$(OBJ)cacheinfo.$o: $(SRC)util/cacheinfo.c $(INC)compat.h

166
polymer/build/Makefile.msvc Normal file
View file

@ -0,0 +1,166 @@
# Build Makefile for Microsoft NMake
!ifdef OVERRIDES
!include $(OVERRIDES)
!endif
SRC=src\ #
!ifndef OBJ
OBJ=obj.msc\ #
!endif
INC=include\ #
!ifndef CFLAGS
CFLAGS=/DSUPERBUILD /DPOLYMOST /DUSE_OPENGL /DDYNAMIC_OPENGL /DKSFORBUILD
!endif
o=obj
res=res
asm=masm
ENGINELIB=engine.lib
EDITORLIB=build.lib
DXROOT=c:\sdks\msc\dx7
FMODROOT=c:\sdks\fmodapi374win\api
# /D these to enable certain features of the port's compile process
# USE_A_C This uses a C version of the classic renderer code rather
# than the assembly version in A.ASM.
# If this is defined, alter the $(OBJ)a.$o in the
# ENGINEOBJS declaration to be $(OBJ)a-c.$o
# NOASM When defined, uses C instead of Microsoft inline
# assembly for the features in PRAGMAS.H
TARGETOPTS=#/DUSE_A_C #/DNOASM
!ifdef DEBUG
# debugging options
flags_cl=/G6 /Ot /Z7
flags_link=/DEBUG
!else
# release options
#flags_cl=/G6Fy /Ox
flags_cl=/G6 /O2
flags_link=/RELEASE
!endif
CC=cl
AS=ml
RC=rc
LINK=link /opt:nowin98 /opt:ref /nologo
CFLAGS=$(CFLAGS) /nologo /MD /J $(flags_cl) $(TARGETOPTS) /I$(INC) /I$(DXROOT)\include /I$(FMODROOT)\inc
LIBS=fmodvc.lib #opengl32.lib
ASFLAGS=/nologo /coff
EXESUFFIX=.exe
ENGINEOBJS=$(OBJ)a.$o \
$(OBJ)baselayer.$o \
$(OBJ)cache1d.$o \
$(OBJ)compat.$o \
$(OBJ)crc32.$o \
$(OBJ)defs.$o \
$(OBJ)engine.$o \
$(OBJ)engineinfo.$o \
$(OBJ)glbuild.$o \
$(OBJ)kplib.$o \
$(OBJ)lzf_c.$o \
$(OBJ)lzf_d.$o \
$(OBJ)lzwnew.$o \
$(OBJ)md4.$o \
$(OBJ)mmulti.$o \
$(OBJ)osd.$o \
$(OBJ)pragmas.$o \
$(OBJ)scriptfile.$o \
$(OBJ)winlayer.$o
EDITOROBJS=$(OBJ)build.$o \
$(OBJ)buildstartwin.$o \
$(OBJ)config.$o
GAMEEXEOBJS=$(OBJ)config.$o \
$(OBJ)game.$o \
$(OBJ)gameres.$(res) \
$(OBJ)gamestartwin.$o \
$(OBJ)sound.$o \
$(OBJ)$(ENGINELIB)
EDITOREXEOBJS=$(OBJ)bstub.$o \
$(OBJ)buildres.$(res) \
$(OBJ)$(EDITORLIB) \
$(OBJ)$(ENGINELIB)
RENDERTYPE=WIN
LIBS=$(LIBS) user32.lib gdi32.lib shell32.lib dxguid.lib wsock32.lib
CFLAGS=$(CFLAGS) /DRENDERTYPE$(RENDERTYPE)=1
# RULES
.SUFFIXES: .masm
{$(SRC)}.masm{$(OBJ)}.$o:
$(AS) /c $(ASFLAGS) /Fo$@ $<
{$(SRC)tmp}.c{$(OBJ)}.$o:
$(CC) /c $(CFLAGS) /Fo$@ $<
{$(SRC)util}.c{$(OBJ)}.$o:
$(CC) /c $(CFLAGS) /Fo$@ $<
{$(SRC)misc}.rc{$(OBJ)}.$(res):
$(RC) /fo$@ /r $<
{$(SRC)}.c{$(OBJ)}.$o:
$(CC) /c $(CFLAGS) /Fo$@ $<
# TARGETS
UTILS=kextract$(EXESUFFIX) kgroup$(EXESUFFIX) transpal$(EXESUFFIX) wad2map$(EXESUFFIX) wad2map$(EXESUFFIX)
all: game$(EXESUFFIX) build$(EXESUFFIX) $(OBJ)$(ENGINELIB) $(OBJ)$(EDITORLIB) ;
utils: $(UTILS) ;
enginelib: $(OBJ)$(ENGINELIB) ;
$(OBJ)$(ENGINELIB): $(ENGINEOBJS)
lib /out:$@ /nologo $**
editorlib: $(OBJ)$(EDITORLIB) ;
$(OBJ)$(EDITORLIB): $(EDITOROBJS)
lib /out:$@ /nologo $**
game$(EXESUFFIX): $(GAMEEXEOBJS)
$(LINK) /OUT:$@ /SUBSYSTEM:WINDOWS /LIBPATH:$(DXROOT)\lib /LIBPATH:$(FMODROOT)\lib $(flags_link) /MAP $** $(LIBS) msvcrt.lib
build$(EXESUFFIX): $(EDITOREXEOBJS)
$(LINK) /OUT:$@ /SUBSYSTEM:WINDOWS /LIBPATH:$(DXROOT)\lib /LIBPATH:$(FMODROOT)\lib $(flags_link) /MAP $** $(LIBS) msvcrt.lib
# the tools
kextract$(EXESUFFIX): $(OBJ)kextract.$o $(OBJ)compat.$o
$(LINK) /OUT:$@ /SUBSYSTEM:CONSOLE $(flags_link) /MAP $** msvcrt.lib
kgroup$(EXESUFFIX): $(OBJ)kgroup.$o $(OBJ)compat.$o
$(LINK) /OUT:$@ /SUBSYSTEM:CONSOLE $(flags_link) /MAP $** msvcrt.lib
transpal$(EXESUFFIX): $(OBJ)transpal.$o $(OBJ)pragmas.$o $(OBJ)compat.$o
$(LINK) /OUT:$@ /SUBSYSTEM:CONSOLE $(flags_link) /MAP $** msvcrt.lib
wad2map$(EXESUFFIX): $(OBJ)wad2map.$o $(OBJ)pragmas.$o $(OBJ)compat.$o
$(LINK) /OUT:$@ /SUBSYSTEM:CONSOLE $(flags_link) /MAP $** msvcrt.lib
wad2art$(EXESUFFIX): $(OBJ)wad2art.$o $(OBJ)pragmas.$o $(OBJ)compat.$o
$(LINK) /OUT:$@ /SUBSYSTEM:CONSOLE $(flags_link) /MAP $** msvcrt.lib
# DEPENDENCIES
!include Makefile.deps
$(OBJ)engineinfo.$o: writeengineinfo $(SRC)tmp\engineinfo.c
writeengineinfo:
echo const char _engine_cflags[] = "$(CFLAGS:\=\\)"; > $(SRC)tmp\engineinfo.c
echo const char _engine_libs[] = "$(LIBS)"; >> $(SRC)tmp\engineinfo.c
echo const char _engine_uname[] = "unknown"; >> $(SRC)tmp\engineinfo.c
echo const char _engine_compiler[] = "$(CC)"; >> $(SRC)tmp\engineinfo.c
echo const char _engine_date[] = __DATE__ " " __TIME__; >> $(SRC)tmp\engineinfo.c
# PHONIES
clean:
-del $(ENGINEOBJS) $(EDITOROBJS) $(GAMEEXEOBJS) $(EDITOREXEOBJS)
veryclean: clean
-del $(OBJ)$(ENGINELIB) $(OBJ)$(EDITORLIB) game$(EXESUFFIX) build$(EXESUFFIX) $(UTILS)

View file

@ -0,0 +1,160 @@
# Shared make information between Build engine and games
ENGINELIB=libengine.a
EDITORLIB=libbuild.a
# These are used when DYNAMIC_OPENGL is false
GLLIBWIN=-lopengl32
GLLIBBSD=-lopengl32
GLLIBLIN=-lGL
SDLCONFIG=sdl-config
#SDLCONFIG=/usr/local/bin/sdl11-config
# overridden for OSes that don't have the cutdown stdc++ that is supc++
STDCPPLIB=-lsupc++
BUILDCFLAGS=
# Detect the platform if it wasn't explicitly given to us from
# the outside world. This allows cross-compilation by overriding
# CC and giving us PLATFORM specifically.
ifndef PLATFORM
uname=$(strip $(shell uname -s))
PLATFORM=UNKNOWN
ifeq ($(findstring Linux,$(uname)),Linux)
PLATFORM=LINUX
endif
ifeq ($(findstring BSD,$(uname)),BSD)
PLATFORM=BSD
endif
ifeq ($(findstring MINGW,$(uname)),MINGW)
PLATFORM=WINDOWS
endif
ifeq ($(findstring Darwin,$(uname)),Darwin)
PLATFORM=DARWIN
endif
ifeq ($(findstring BeOS,$(uname)),BeOS)
PLATFORM=BEOS
endif
ifeq ($(findstring skyos,$(uname)),skyos)
PLATFORM=SKYOS
endif
ifeq ($(findstring QNX,$(uname)),QNX)
PLATFORM=QNX
endif
ifeq ($(findstring SunOS,$(uname)),SunOS)
PLATFORM=SUNOS
endif
ifeq ($(findstring syllable,$(uname)),syllable)
PLATFORM=SYLLABLE
endif
endif
ifeq ($(PLATFORM),LINUX)
RENDERTYPE=SDL
ifneq ($(DYNAMIC_OPENGL),1)
LIBS+= $(GLLIBLIN)
endif
ifeq ($(findstring x86_64,$(shell uname -m)),x86_64)
# on my 64bit Gentoo these are the 32bit emulation libs
LIBS+= -m32 -L/emul/linux/x86/usr/lib
BUILDCFLAGS+= -m32
override WITHOUT_GTK=1
endif
endif
ifeq ($(PLATFORM),WINDOWS)
RENDERTYPE ?= WIN
EXESUFFIX=.exe
LIBS+= -lmingwex -lwinmm -L$(DXROOT)/lib -lwsock32 #-lshfolder
ifneq ($(DYNAMIC_OPENGL),1)
LIBS+= $(GLLIBWIN)
endif
endif
ifeq ($(PLATFORM),BSD)
RENDERTYPE=SDL
ifneq ($(DYNAMIC_OPENGL),1)
LIBS+= $(GLLIBBSD)
endif
endif
ifeq ($(PLATFORM),BEOS)
RENDERTYPE=SDL
STDCPPLIB=-lstdc++
endif
ifeq ($(PLATFORM),SKYOS)
RENDERTYPE=SDL
EXESUFFIX=.app
override USE_A_C=1
BUILDCFLAGS+= -DUNDERSCORES
SDLCONFIG=
SDLCONFIG_CFLAGS=-I/boot/programs/sdk/include/sdl
LIBS+= -lSDL -lnet
endif
ifeq ($(PLATFORM),QNX)
RENDERTYPE=SDL
override USE_OPENGL=0
override USE_A_C=1
STDCPPLIB=-lstdc++
LIBS+= -lsocket
endif
ifeq ($(PLATFORM),SUNOS)
RENDERTYPE=SDL
override USE_OPENGL=0
override NOASM=1
override USE_A_C=1
STDCPPLIB=-lstdc++
LIBS+= -lsocket -lnsl
endif
ifeq ($(PLATFORM),SYLLABLE)
RENDERTYPE=SDL
override USE_OPENGL=0
override NOASM=1
endif
ifeq ($(RENDERTYPE),SDL)
ifneq ($(SDLCONFIG),)
LIBS+= $(shell $(SDLCONFIG) --libs)
SDLCONFIG_CFLAGS+=$(shell $(SDLCONFIG) --cflags)
endif
ifeq (1,$(WITHOUT_GTK))
HAVE_GTK2=0
else
ifneq (No,$(shell pkg-config --exists gtk+-2.0 || echo No))
HAVE_GTK2=1
LIBS+= $(shell pkg-config --libs gtk+-2.0)
else
HAVE_GTK2=0
endif
endif
else
ifeq ($(RENDERTYPE),WIN)
LIBS+= -mwindows -ldxguid
endif
endif
BUILDCFLAGS+= -DRENDERTYPE$(RENDERTYPE)=1
ifneq (0,$(SUPERBUILD))
BUILDCFLAGS+= -DSUPERBUILD
endif
ifneq (0,$(POLYMOST))
BUILDCFLAGS+= -DPOLYMOST
endif
ifneq (0,$(USE_OPENGL))
BUILDCFLAGS+= -DUSE_OPENGL
ifneq (0,$(DYNAMIC_OPENGL))
BUILDCFLAGS+= -DDYNAMIC_OPENGL
endif
endif
ifneq (0,$(USE_A_C))
BUILDCFLAGS+= -DUSE_A_C
endif
ifneq (0,$(NOASM))
BUILDCFLAGS+= -DNOASM
endif
ifneq (0,$(SETSPRITEZ))
BUILDCFLAGS+= -DSETSPRITEZ
endif

View file

@ -0,0 +1,174 @@
# Build Makefile for Watcom Make
!ifdef OVERRIDES
!include $(OVERRIDES)
!endif
SRC=src\
!ifndef OBJ
OBJ=obj.watcom\
!endif
INC=include\
!ifndef CFLAGS
CFLAGS=-dSUPERBUILD -dPOLYMOST -dUSE_OPENGL -dDYNAMIC_OPENGL -dKSFORBUILD
!endif
o=obj
res=res
asm=wasm
ENGINELIB=engine.lib
EDITORLIB=build.lib
DXROOT=c:\sdks\msc\dx7
FMODROOT=c:\sdks\fmodapi374win\api
!ifdef __LOADDLL__
! loaddll wcc386 wccd386
!endif
# -d these to enable certain features of the port's compile process
# USE_A_C This uses a C version of the classic renderer code rather
# than the assembly version in A.ASM.
# If this is defined, alter the $(OBJ)a.$o in the
# ENGINEOBJS declaration to be $(OBJ)a-c.$o
# NOASM When defined, uses C code instead of Watcom inline
# assembly for the features in PRAGMAS.H
TARGETOPTS=#-dUSE_A_C #-dNOASM
CC=wcc386
AS=wasm
RC=wrc
CFLAGS+= -5r -s -orb -fp5 $(TARGETOPTS) -d2 -dRENDERTYPEWIN=1 &
-i=$(INC) -i=$(DXROOT)\include -i=$(FMODROOT)\inc
LIBS=dxguid.lib wsock32.lib fmodwc.lib #opengl32.lib
ASFLAGS=# -d1
EXESUFFIX=.exe
ENGINEOBJS=$(OBJ)a.$o &
$(OBJ)baselayer.$o &
$(OBJ)cache1d.$o &
$(OBJ)compat.$o &
$(OBJ)crc32.$o &
$(OBJ)defs.$o &
$(OBJ)engine.$o &
$(OBJ)engineinfo.$o &
$(OBJ)glbuild.$o &
$(OBJ)kplib.$o &
$(OBJ)lzf_c.$o &
$(OBJ)lzf_d.$o &
$(OBJ)lzwnew.$o &
$(OBJ)md4.$o &
$(OBJ)mmulti.$o &
$(OBJ)osd.$o &
$(OBJ)pragmas.$o &
$(OBJ)scriptfile.$o &
$(OBJ)winlayer.$o
EDITOROBJS=$(OBJ)build.$o &
$(OBJ)config.$o &
$(OBJ)buildstartwin.$o
GAMEEXEOBJS=$(OBJ)game.$o &
$(OBJ)sound.$o &
$(OBJ)config.$o &
$(OBJ)gamestartwin.$o
EDITOREXEOBJS=$(OBJ)bstub.$o
# RULES
.EXTENSIONS: .wasm .res .rc
.wasm: $(SRC)
.c: $(SRC)
.c: $(SRC)tmp/
.c: $(SRC)util/
.rc: $(SRC)misc/
.wasm.$o:
$(AS) $(ASFLAGS) -fo=$(OBJ).$o $[@
.c.$o:
$(CC) $(CFLAGS) -fo=$(OBJ).$o $[@
.rc.$(res):
$(RC) -fo=$^*.$(res) -r $[@
# TARGETS
UTILS=kextract$(EXESUFFIX) kgroup$(EXESUFFIX) transpal$(EXESUFFIX) wad2art$(EXESUFFIX) wad2map$(EXESUFFIX)
all: game$(EXESUFFIX) build$(EXESUFFIX) $(OBJ)$(ENGINELIB) $(OBJ)$(EDITORLIB) .SYMBOLIC
%null
utils: $(UTILS) .SYMBOLIC
%null
enginelib: $(OBJ)$(ENGINELIB) .SYMBOLIC
%null
$(OBJ)$(ENGINELIB): $(ENGINEOBJS)
%create $(OBJ)$(ENGINELIB).tmp
for %i in ($(ENGINEOBJS)) do %append $(OBJ)$(ENGINELIB).tmp +%i
wlib -b -n $^* @$(OBJ)$(ENGINELIB).tmp
erase $(OBJ)$(ENGINELIB).tmp
editorlib: $(OBJ)$(EDITORLIB) .SYMBOLIC
%null
$(OBJ)$(EDITORLIB): $(EDITOROBJS)
%create $(OBJ)$(EDITORLIB).tmp
for %i in ($(EDITOROBJS)) do %append $(OBJ)$(EDITORLIB).tmp +%i
wlib -b -n $^* @$(OBJ)$(EDITORLIB).tmp
erase $(OBJ)$(EDITORLIB).tmp
game$(EXESUFFIX): $(GAMEEXEOBJS) $(OBJ)gameres.$(res) $(OBJ)$(ENGINELIB)
wlink NAME $@ &
SYSTEM WIN95 &
DEBUG ALL &
OPTION MAP &
FILE { $(GAMEEXEOBJS) } &
RESOURCE $(OBJ)gameres.$(res) &
LIBPATH $(DXROOT)\lib &
LIBPATH $(FMODROOT)\lib &
LIBPATH $(OBJ) &
LIBRARY { $(ENGINELIB) $(LIBS) }
build$(EXESUFFIX): $(EDITOREXEOBJS) $(OBJ)buildres.$(res) $(OBJ)$(ENGINELIB) $(OBJ)$(EDITORLIB)
wlink NAME $@ &
SYSTEM WIN95 &
DEBUG ALL &
OPTION MAP &
FILE { $(EDITOREXEOBJS) } &
RESOURCE $(OBJ)buildres.$(res) &
LIBPATH $(DXROOT)\lib &
LIBPATH $(FMODROOT)\lib &
LIBPATH $(OBJ) &
LIBRARY { $(ENGINELIB) $(EDITORLIB) $(LIBS) }
kextract$(EXESUFFIX): $(OBJ)kextract.$o $(OBJ)compat.$o
wlink NAME $@ SYSTEM 386 DEBUG ALL FILE { $< }
kgroup$(EXESUFFIX): $(OBJ)kgroup.$o $(OBJ)compat.$o
wlink NAME $@ SYSTEM 386 DEBUG ALL FILE { $< }
transpal$(EXESUFFIX): $(OBJ)transpal.$o $(OBJ)pragmas.$o $(OBJ)compat.$o
wlink NAME $@ SYSTEM 386 DEBUG ALL FILE { $< }
wad2art$(EXESUFFIX): $(OBJ)wad2art.$o $(OBJ)pragmas.$o $(OBJ)compat.$o
wlink NAME $@ SYSTEM 386 DEBUG ALL FILE { $< }
wad2map$(EXESUFFIX): $(OBJ)wad2map.$o $(OBJ)pragmas.$o $(OBJ)compat.$o
wlink NAME $@ SYSTEM 386 DEBUG ALL FILE { $< }
# DEPENDENCIES
!include Makefile.deps
$(OBJ)engineinfo.$o: writeengineinfo $(SRC)tmp\engineinfo.c
writeengineinfo: .SYMBOLIC
echo const char _engine_cflags[] = "$(CFLAGS:\=\\)"; > $(SRC)tmp\engineinfo.c
echo const char _engine_libs[] = "$(LIBS:\=\\)"; >> $(SRC)tmp\engineinfo.c
echo const char _engine_uname[] = "unknown"; >> $(SRC)tmp\engineinfo.c
echo const char _engine_compiler[] = "$(CC)"; >> $(SRC)tmp\engineinfo.c
echo const char _engine_date[] = __DATE__ " " __TIME__; >> $(SRC)tmp\engineinfo.c
# PHONIES
clean: .SYMBOLIC
-erase /q $(OBJ)* game$(EXESUFFIX) build$(EXESUFFIX) $(UTILS) *.err

49
polymer/build/NAMES.H Normal file
View file

@ -0,0 +1,49 @@
//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

141
polymer/build/README Normal file
View file

@ -0,0 +1,141 @@
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.

104
polymer/build/build.cfg Normal file
View file

@ -0,0 +1,104 @@
; Build editor configuration
; Video mode selection
; 0 - Windowed
; 1 - Fullscreen
fullscreen = 0
; Video resolution selection
; 0 - 320 x 200
; 1 - 360 x 200
; 2 - 320 x 240
; 3 - 360 x 240
; 4 - 320 x 400
; 5 - 360 x 400
; 6 - 640 x 350
; 7 - 640 x 400
; 8 - 640 x 480
; 9 - 800 x 600
; 10 - 1024 x 768
; 11 - 1280 x 1024
; 12 - 1600 x 1200
; You can select a seperate 2D editor resolution by
; removing the semicolon from the second line below
; and selecting a mode number. The minimum 2D mode
; is 640x480 (mode #8)
resolution = 8
;2dresolution = 8
; 3D-mode colour depth
bpp = 8
; Maximum OpenGL mode refresh rate (Windows only, in Hertz)
maxrefreshfreq = 60
; 3D mode brightness setting
; 0 - lowest
; 15 - highest
brightness = 0
; Sound sample frequency
; 0 - 6 KHz
; 1 - 8 KHz
; 2 - 11.025 KHz
; 3 - 16 KHz
; 4 - 22.05 KHz
; 5 - 32 KHz
; 6 - 44.1 KHz
samplerate = 4
; Music playback
; 0 - Off
; 1 - On
music = 1
; Enable mouse
; 0 - No
; 1 - Yes
mouse = 1
; Mouse sensitivity
mousesensitivity = 1.0
; Key Settings
; Here's a map of all the keyboard scan codes: NOTE: values are listed in hex!
; +---------------------------------------------------------------------------------------------+
; | 01 3B 3C 3D 3E 3F 40 41 42 43 44 57 58 46 |
; |ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 SCROLL |
; | |
; |29 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E D2 C7 C9 45 B5 37 4A |
; | ` '1' '2' '3' '4' '5' '6' '7' '8' '9' '0' - = BACK INS HOME PGUP NUMLK KP/ KP* KP- |
; | |
; | 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 2B D3 CF D1 47 48 49 4E |
; |TAB Q W E R T Y U I O P [ ] \ DEL END PGDN KP7 KP8 KP9 KP+ |
; | |
; | 3A 1E 1F 20 21 22 23 24 25 26 27 28 1C 4B 4C 4D |
; |CAPS A S D F G H J K L ; ' ENTER KP4 KP5 KP6 9C |
; | KPENTER|
; | 2A 2C 2D 2E 2F 30 31 32 33 34 35 36 C8 4F 50 51 |
; |LSHIFT Z X C V B N M , . / RSHIFT UP KP1 KP2 KP3 |
; | |
; | 1D 38 39 B8 9D CB D0 CD 52 53 |
; |LCTRL LALT SPACE RALT RCTRL LEFT DOWN RIGHT KP0 KP. |
; +---------------------------------------------------------------------------------------------+
keyforward = C8
keybackward = D0
keyturnleft = CB
keyturnright = CD
keyrun = 2A
keystrafe = 9D
keyfire = 1D
keyuse = 39
keystandhigh = 1E
keystandlow = 2C
keylookup = D1
keylookdown = C9
keystrafeleft = 33
keystraferight = 34
key2dmode = 9C
keyviewcycle = 1C
key2dzoomin = D
key2dzoomout = C
keychat = F

View file

@ -0,0 +1,71 @@
BUILD SOURCE CODE LICENSE TERMS: 06/20/2000
[1] I give you permission to make modifications to my Build source and
distribute it, BUT:
[2] Any derivative works based on my Build source may be distributed ONLY
through the INTERNET.
[3] Distribution of any derivative works MUST be done completely FREE of
charge - no commercial exploitation whatsoever.
[4] Anything you distribute which uses a part of my Build Engine source
code MUST include:
[A] The following message somewhere in the archive:
// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman
// Ken Silverman's official web site: "http://www.advsys.net/ken"
// See the included license file "BUILDLIC.TXT" for license info.
[B] This text file "BUILDLIC.TXT" along with it.
[C] Any source files that you modify must include this message as well:
// This file has been modified from Ken Silverman's original release
[5] The use of the Build Engine for commercial purposes will require an
appropriate license arrangement with me. Contact information is
on my web site.
[6] I take no responsibility for damage to your system.
[7] Technical support: Before contacting me with questions, please read
and do ALL of the following!
[A] Look through ALL of my text files. There are 7 of them (including this
one). I like to think that I wrote them for a reason. You will find
many of your answers in the history section of BUILD.TXT and
BUILD2.TXT (they're located inside SRC.ZIP).
[B] If that doesn't satisfy you, then try going to:
"http://www.advsys.net/ken/buildsrc"
where I will maintain a Build Source Code FAQ (or perhaps I might
just provide a link to a good FAQ).
[C] I am willing to respond to questions, but ONLY if they come at a rate
that I can handle.
PLEASE TRY TO AVOID ASKING DUPLICATE QUESTIONS!
As my line of defense, I will post my current policy about
answering Build source questions (right below the E-mail address
on my web site.) You can check there to see if I'm getting
overloaded with questions or not.
If I'm too busy, it might say something like this:
I'm too busy to answer Build source questions right now.
Sorry, but don't expect a reply from me any time soon.
If I'm open for Build source questions, please state your question
clearly and don't include any unsolicited attachments unless
they're really small (like less than 50k). Assume that I have
a 28.8k modem. Also, don't leave out important details just
to make your question appear shorter - making me guess what
you're asking doesn't save me time!
----------------------------------------------------------------------------
-Ken S. (official web site: http://www.advsys.net/ken)

View file

@ -0,0 +1,68 @@
[Project]
FileName=Build.dev
Name=KenBuild Editor
UnitCount=2
Type=0
Ver=1
ObjFiles=
Includes=..\include
Libs=C:\sdks\msc\dx7\include
PrivateResource=Build_private.rc
ResourceIncludes=..\
MakeIncludes=
Compiler=-DRENDERTYPEWIN=1_@@_-DSUPERBUILD_@@_-DPOLYMOST_@@_-DUSE_OPENGL_@@_-DDYNAMIC_OPENGL_@@_-DNO_GCC_BUILTINS_@@_-DUNDERSCORES_@@_-funsigned-char_@@_
CppCompiler=
Linker=libeditor.a_@@_libengine.a_@@_-ldxguid_@@_-lws2_32_@@_
IsCpp=0
Icon=
ExeOutput=..\devcpp
ObjectOutput=..\devcpp
OverrideOutput=0
OverrideOutputName=libengine.a
HostApplication=
Folders=
CommandLine=
UseCustomMakefile=0
CustomMakefile=
IncludeVersionInfo=0
SupportXPThemes=0
CompilerSet=0
CompilerSettings=0000000000100010000d0
[VersionInfo]
Major=0
Minor=1
Release=1
Build=1
LanguageID=1033
CharsetID=1252
CompanyName=
FileVersion=
FileDescription=Developed using the Dev-C++ IDE
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=
AutoIncBuildNr=0
[Unit1]
FileName=..\src\bstub.c
CompileCpp=0
Folder=KenBuild Editor
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit2]
FileName=..\src\misc\buildres.rc
Folder=KenBuild Editor
Compile=1
Link=0
Priority=1000
OverrideBuildCmd=0
BuildCmd=

View file

@ -0,0 +1,98 @@
[Project]
FileName=Game.dev
Name=KenBuild Game
UnitCount=5
Type=0
Ver=1
ObjFiles=
Includes=..\include;C:\sdks\fmodapi373win\api\inc
Libs=C:\sdks\msc\dx7\include;C:\sdks\fmodapi373win\api\lib
PrivateResource=Game_private.rc
ResourceIncludes=..\
MakeIncludes=
Compiler=-DRENDERTYPEWIN=1_@@_-DSUPERBUILD_@@_-DPOLYMOST_@@_-DUSE_OPENGL_@@_-DDYNAMIC_OPENGL_@@_-DNO_GCC_BUILTINS_@@_-DUNDERSCORES_@@_-funsigned-char_@@_
CppCompiler=
Linker=libeditor.a_@@_libengine.a_@@_-ldxguid_@@_-lws2_32_@@_-lfmod_@@_
IsCpp=0
Icon=
ExeOutput=..\devcpp
ObjectOutput=..\devcpp
OverrideOutput=0
OverrideOutputName=libengine.a
HostApplication=
Folders=
CommandLine=
UseCustomMakefile=0
CustomMakefile=
IncludeVersionInfo=0
SupportXPThemes=0
CompilerSet=0
CompilerSettings=0000000000100010000d0
[VersionInfo]
Major=0
Minor=1
Release=1
Build=1
LanguageID=1033
CharsetID=1252
CompanyName=
FileVersion=
FileDescription=Developed using the Dev-C++ IDE
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=
AutoIncBuildNr=0
[Unit3]
FileName=..\src\sound.c
CompileCpp=0
Folder=KenBuild Editor
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit4]
FileName=..\src\misc\gameres.rc
Folder=KenBuild Game
Compile=1
Link=0
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit1]
FileName=..\src\config.c
CompileCpp=0
Folder=KenBuild Editor
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit2]
FileName=..\src\game.c
CompileCpp=0
Folder=KenBuild Editor
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit5]
FileName=..\src\gamestartwin.c
CompileCpp=0
Folder=KenBuild Game
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=

View file

@ -0,0 +1,5 @@
const char _engine_cflags[] = "Dev-C++ made this";
const char _engine_libs[] = "Dev-C++ made this";
const char _engine_uname[] = "Dev-C++";
const char _engine_compiler[] = "Dev-C++";
const char _engine_date[] = __DATE__ " " __TIME__;

View file

@ -0,0 +1,79 @@
[Project]
FileName=libEditor.dev
Name=Build Editor library
UnitCount=3
Type=2
Ver=1
ObjFiles=
Includes=..\include;..\src
Libs=
PrivateResource=
ResourceIncludes=
MakeIncludes=
Compiler=-DRENDERTYPEWIN=1_@@_-DSUPERBUILD_@@_-DPOLYMOST_@@_-DUSE_OPENGL_@@_-DDYNAMIC_OPENGL_@@_-DNO_GCC_BUILTINS_@@_-DUNDERSCORES_@@_-funsigned-char_@@_
CppCompiler=
Linker=
IsCpp=0
Icon=
ExeOutput=..\devcpp
ObjectOutput=..\devcpp
OverrideOutput=1
OverrideOutputName=libeditor.a
HostApplication=
Folders=
CommandLine=
UseCustomMakefile=0
CustomMakefile=
IncludeVersionInfo=0
SupportXPThemes=0
CompilerSet=0
CompilerSettings=0000000000100010000d0
[VersionInfo]
Major=0
Minor=1
Release=1
Build=1
LanguageID=1033
CharsetID=1252
CompanyName=
FileVersion=
FileDescription=Developed using the Dev-C++ IDE
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=
AutoIncBuildNr=0
[Unit3]
FileName=..\src\buildstartwin.c
CompileCpp=0
Folder=KenBuild Editor
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit1]
FileName=..\src\build.c
CompileCpp=0
Folder=Build Editor library
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit2]
FileName=..\src\config.c
CompileCpp=0
Folder=Build Editor library
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=

View file

@ -0,0 +1,198 @@
[Project]
FileName=libEngine.dev
Name=Build Engine library
UnitCount=15
Type=2
Ver=1
ObjFiles=
Includes=..\include;..\src;C:\sdks\msc\dx7\include
Libs=
PrivateResource=
ResourceIncludes=
MakeIncludes=
Compiler=-DRENDERTYPEWIN=1_@@_-DSUPERBUILD_@@_-DPOLYMOST_@@_-DUSE_OPENGL_@@_-DDYNAMIC_OPENGL_@@_-DNO_GCC_BUILTINS_@@_-DUNDERSCORES_@@_-DKSFORBUILD_@@_-funsigned-char_@@_
CppCompiler=
Linker=
IsCpp=0
Icon=
ExeOutput=..\devcpp
ObjectOutput=..\devcpp
OverrideOutput=1
OverrideOutputName=libengine.a
HostApplication=
Folders=
CommandLine=
UseCustomMakefile=0
CustomMakefile=
IncludeVersionInfo=0
SupportXPThemes=0
CompilerSet=0
CompilerSettings=0000000000100010000d0
[Unit1]
FileName=..\src\cache1d.c
CompileCpp=0
Folder=Engine
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit2]
FileName=..\src\engine.c
CompileCpp=0
Folder=Engine
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit3]
FileName=..\src\crc32.c
CompileCpp=0
Folder=Engine
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit4]
FileName=..\src\osd.c
CompileCpp=0
Folder=Engine
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit5]
FileName=..\src\pragmas.c
CompileCpp=0
Folder=Engine
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit6]
FileName=..\src\a.nasm
Folder=Engine
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=1
BuildCmd=nasm -s -DUNDERSCORES -f win32 ../src/a.nasm -o ../devcpp/a.o
[Unit7]
FileName=engineinfo.c
CompileCpp=0
Folder=Engine
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit8]
FileName=..\src\defs.c
CompileCpp=0
Folder=Engine
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit9]
FileName=..\src\compat.c
CompileCpp=0
Folder=Engine
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit10]
FileName=..\src\baselayer.c
CompileCpp=0
Folder=Engine
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit11]
FileName=..\src\glbuild.c
CompileCpp=0
Folder=Engine
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit12]
FileName=..\src\kplib.c
CompileCpp=0
Folder=Engine
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit13]
FileName=..\src\mmulti.c
CompileCpp=0
Folder=Engine
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit14]
FileName=..\src\scriptfile.c
CompileCpp=0
Folder=Engine
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[VersionInfo]
Major=0
Minor=1
Release=1
Build=1
LanguageID=1033
CharsetID=1252
CompanyName=
FileVersion=
FileDescription=Developed using the Dev-C++ IDE
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=
AutoIncBuildNr=0
[Unit15]
FileName=..\src\winlayer.c
CompileCpp=0
Folder=Build Engine
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=

97
polymer/build/game.cfg Normal file
View file

@ -0,0 +1,97 @@
; KenBuild configuration
; Video mode selection
; 0 - Windowed
; 1 - Fullscreen
fullscreen = 0
; Video resolution selection
; 0 - 320 x 200
; 1 - 360 x 200
; 2 - 320 x 240
; 3 - 360 x 240
; 4 - 320 x 400
; 5 - 360 x 400
; 6 - 640 x 350
; 7 - 640 x 400
; 8 - 640 x 480
; 9 - 800 x 600
; 10 - 1024 x 768
; 11 - 1280 x 1024
; 12 - 1600 x 1200
resolution = 8
; 3D-mode colour depth
bpp = 8
; 3D mode brightness setting
; 0 - lowest
; 15 - highest
brightness = 0
; Maximum OpenGL mode refresh rate (Windows only, in Hertz)
maxrefreshfreq = 60
; Sound sample frequency
; 0 - 6 KHz
; 1 - 8 KHz
; 2 - 11.025 KHz
; 3 - 16 KHz
; 4 - 22.05 KHz
; 5 - 32 KHz
; 6 - 44.1 KHz
samplerate = 4
; Music playback
; 0 - Off
; 1 - On
music = 1
; Enable mouse
; 0 - No
; 1 - Yes
mouse = 1
; Key Settings
; Here's a map of all the keyboard scan codes: NOTE: values are listed in hex!
; +---------------------------------------------------------------------------------------------+
; | 01 3B 3C 3D 3E 3F 40 41 42 43 44 57 58 46 |
; |ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 SCROLL |
; | |
; |29 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E D2 C7 C9 45 B5 37 4A |
; | ` '1' '2' '3' '4' '5' '6' '7' '8' '9' '0' - = BACK INS HOME PGUP NUMLK KP/ KP* KP- |
; | |
; | 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 2B D3 CF D1 47 48 49 4E |
; |TAB Q W E R T Y U I O P [ ] \ DEL END PGDN KP7 KP8 KP9 KP+ |
; | |
; | 3A 1E 1F 20 21 22 23 24 25 26 27 28 1C 4B 4C 4D |
; |CAPS A S D F G H J K L ; ' ENTER KP4 KP5 KP6 9C |
; | KPENTER|
; | 2A 2C 2D 2E 2F 30 31 32 33 34 35 36 C8 4F 50 51 |
; |LSHIFT Z X C V B N M , . / RSHIFT UP KP1 KP2 KP3 |
; | |
; | 1D 38 39 B8 9D CB D0 CD 52 53 |
; |LCTRL LALT SPACE RALT RCTRL LEFT DOWN RIGHT KP0 KP. |
; +---------------------------------------------------------------------------------------------+
keyforward = C8
keybackward = D0
keyturnleft = CB
keyturnright = CD
keyrun = 2A
keystrafe = 9D
keyfire = 1D
keyuse = 39
keystandhigh = 1E
keystandlow = 2C
keylookup = D1
keylookdown = C9
keystrafeleft = 33
keystraferight = 34
key2dmode = 9C
keyviewcycle = 1C
key2dzoomin = D
key2dzoomout = C
keychat = F
keyconsole = 29

245
polymer/build/include/a.h Normal file
View file

@ -0,0 +1,245 @@
// Assembly-language function wrappers for a.asm functions
// for the Build Engine
// by Jonathon Fowler (jonof@edgenetwk.com)
#ifndef __a_h__
#define __a_h__
#if defined(USE_A_C)
#define ENGINE_USING_A_C
void setvlinebpl(long dabpl);
void fixtransluscence(long datransoff);
void settransnormal(void);
void settransreverse(void);
void sethlinesizes(long logx, long logy, long bufplc);
void setpalookupaddress(char *paladdr);
void setuphlineasm4(long bxinc, long byinc);
void hlineasm4(long cnt, long skiploadincs, long paloffs, unsigned long by, unsigned long bx, long p);
void setupslopevlin(long logylogx, long bufplc, long pinc);
void slopevlin(long p, long i, long slopaloffs, long cnt, long bx, long by);
void setupvlineasm(long neglogy);
void vlineasm1(long vinc, long paloffs, long cnt, unsigned long vplc, long bufplc, long p);
void setupmvlineasm(long neglogy);
void mvlineasm1(long vinc, long paloffs, long cnt, unsigned long vplc, long bufplc, long p);
void setuptvlineasm(long neglogy);
void tvlineasm1(long vinc, long paloffs, long cnt, unsigned long vplc, long bufplc, long p);
void msethlineshift(long logx, long logy);
void mhline(long bufplc, unsigned long bx, long cntup16, long junk, unsigned long by, long p);
void tsethlineshift(long logx, long logy);
void thline(long bufplc, unsigned long bx, long cntup16, long junk, unsigned long by, long p);
void setupspritevline(long paloffs, long bxinc, long byinc, long ysiz);
void spritevline(long bx, long by, long cnt, long bufplc, long p);
void msetupspritevline(long paloffs, long bxinc, long byinc, long ysiz);
void mspritevline(long bx, long by, long cnt, long bufplc, long p);
void tsetupspritevline(long paloffs, long bxinc, long byinc, long ysiz);
void tspritevline(long bx, long by, long cnt, long bufplc, long p);
void setupdrawslab (long dabpl, long pal);
void drawslab (long dx, long v, long dy, long vi, long vptr, long p);
void stretchhline (long p0, long u, long cnt, long uinc, long rptr, long p);
void mmxoverlay();
#elif defined(__WATCOMC__) // USE_A_C
extern long mmxoverlay();
#pragma aux mmxoverlay modify [eax ebx ecx edx];
extern long sethlinesizes(long,long,long);
#pragma aux sethlinesizes parm [eax][ebx][ecx];
extern long setpalookupaddress(char *);
#pragma aux setpalookupaddress parm [eax];
extern long setuphlineasm4(long,long);
#pragma aux setuphlineasm4 parm [eax][ebx];
extern long hlineasm4(long,long,long,long,long,long);
#pragma aux hlineasm4 parm [eax][ebx][ecx][edx][esi][edi];
extern long setuprhlineasm4(long,long,long,long,long,long);
#pragma aux setuprhlineasm4 parm [eax][ebx][ecx][edx][esi][edi];
extern long rhlineasm4(long,long,long,long,long,long);
#pragma aux rhlineasm4 parm [eax][ebx][ecx][edx][esi][edi];
extern long setuprmhlineasm4(long,long,long,long,long,long);
#pragma aux setuprmhlineasm4 parm [eax][ebx][ecx][edx][esi][edi];
extern long rmhlineasm4(long,long,long,long,long,long);
#pragma aux rmhlineasm4 parm [eax][ebx][ecx][edx][esi][edi];
extern long setupqrhlineasm4(long,long,long,long,long,long);
#pragma aux setupqrhlineasm4 parm [eax][ebx][ecx][edx][esi][edi];
extern long qrhlineasm4(long,long,long,long,long,long);
#pragma aux qrhlineasm4 parm [eax][ebx][ecx][edx][esi][edi];
extern long setvlinebpl(long);
#pragma aux setvlinebpl parm [eax];
extern long fixtransluscence(long);
#pragma aux fixtransluscence parm [eax];
extern long prevlineasm1(long,long,long,long,long,long);
#pragma aux prevlineasm1 parm [eax][ebx][ecx][edx][esi][edi];
extern long vlineasm1(long,long,long,long,long,long);
#pragma aux vlineasm1 parm [eax][ebx][ecx][edx][esi][edi];
extern long setuptvlineasm(long);
#pragma aux setuptvlineasm parm [eax];
extern long tvlineasm1(long,long,long,long,long,long);
#pragma aux tvlineasm1 parm [eax][ebx][ecx][edx][esi][edi];
extern long setuptvlineasm2(long,long,long);
#pragma aux setuptvlineasm2 parm [eax][ebx][ecx];
extern long tvlineasm2(long,long,long,long,long,long);
#pragma aux tvlineasm2 parm [eax][ebx][ecx][edx][esi][edi];
extern long mvlineasm1(long,long,long,long,long,long);
#pragma aux mvlineasm1 parm [eax][ebx][ecx][edx][esi][edi];
extern long setupvlineasm(long);
#pragma aux setupvlineasm parm [eax];
extern long vlineasm4(long,long);
#pragma aux vlineasm4 parm [ecx][edi] modify [eax ebx ecx edx esi edi];
extern long setupmvlineasm(long);
#pragma aux setupmvlineasm parm [eax];
extern long mvlineasm4(long,long);
#pragma aux mvlineasm4 parm [ecx][edi] modify [eax ebx ecx edx esi edi];
extern void setupspritevline(long,long,long,long,long,long);
#pragma aux setupspritevline parm [eax][ebx][ecx][edx][esi][edi];
extern void spritevline(long,long,long,long,long,long);
#pragma aux spritevline parm [eax][ebx][ecx][edx][esi][edi];
extern void msetupspritevline(long,long,long,long,long,long);
#pragma aux msetupspritevline parm [eax][ebx][ecx][edx][esi][edi];
extern void mspritevline(long,long,long,long,long,long);
#pragma aux mspritevline parm [eax][ebx][ecx][edx][esi][edi];
extern void tsetupspritevline(long,long,long,long,long,long);
#pragma aux tsetupspritevline parm [eax][ebx][ecx][edx][esi][edi];
extern void tspritevline(long,long,long,long,long,long);
#pragma aux tspritevline parm [eax][ebx][ecx][edx][esi][edi];
extern long mhline(long,long,long,long,long,long);
#pragma aux mhline parm [eax][ebx][ecx][edx][esi][edi];
extern long mhlineskipmodify(long,long,long,long,long,long);
#pragma aux mhlineskipmodify parm [eax][ebx][ecx][edx][esi][edi];
extern long msethlineshift(long,long);
#pragma aux msethlineshift parm [eax][ebx];
extern long thline(long,long,long,long,long,long);
#pragma aux thline parm [eax][ebx][ecx][edx][esi][edi];
extern long thlineskipmodify(long,long,long,long,long,long);
#pragma aux thlineskipmodify parm [eax][ebx][ecx][edx][esi][edi];
extern long tsethlineshift(long,long);
#pragma aux tsethlineshift parm [eax][ebx];
extern long setupslopevlin(long,long,long);
#pragma aux setupslopevlin parm [eax][ebx][ecx] modify [edx];
extern long slopevlin(long,long,long,long,long,long);
#pragma aux slopevlin parm [eax][ebx][ecx][edx][esi][edi];
extern long settransnormal();
#pragma aux settransnormal parm;
extern long settransreverse();
#pragma aux settransreverse parm;
extern long setupdrawslab(long,long);
#pragma aux setupdrawslab parm [eax][ebx];
extern long drawslab(long,long,long,long,long,long);
#pragma aux drawslab parm [eax][ebx][ecx][edx][esi][edi];
#elif defined(__GNUC__) && defined(__i386__) // __WATCOMC__
#if defined(__linux) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__SYLLABLE__)
#define __cdecl
#endif
extern long __cdecl mmxoverlay();
extern long __cdecl sethlinesizes(long,long,long);
extern long __cdecl setpalookupaddress(char *);
extern long __cdecl setuphlineasm4(long,long);
extern long __cdecl hlineasm4(long,long,long,long,long,long);
extern long __cdecl setuprhlineasm4(long,long,long,long,long,long);
extern long __cdecl rhlineasm4(long,long,long,long,long,long);
extern long __cdecl setuprmhlineasm4(long,long,long,long,long,long);
extern long __cdecl rmhlineasm4(long,long,long,long,long,long);
extern long __cdecl setupqrhlineasm4(long,long,long,long,long,long);
extern long __cdecl qrhlineasm4(long,long,long,long,long,long);
extern long __cdecl setvlinebpl(long);
extern long __cdecl fixtransluscence(long);
extern long __cdecl prevlineasm1(long,long,long,long,long,long);
extern long __cdecl vlineasm1(long,long,long,long,long,long);
extern long __cdecl setuptvlineasm(long);
extern long __cdecl tvlineasm1(long,long,long,long,long,long);
extern long __cdecl setuptvlineasm2(long,long,long);
extern long __cdecl tvlineasm2(long,long,long,long,long,long);
extern long __cdecl mvlineasm1(long,long,long,long,long,long);
extern long __cdecl setupvlineasm(long);
extern long __cdecl vlineasm4(long,long);
extern long __cdecl setupmvlineasm(long);
extern long __cdecl mvlineasm4(long,long);
extern long __cdecl setupspritevline(long,long,long,long,long,long);
extern long __cdecl spritevline(long,long,long,long,long,long);
extern long __cdecl msetupspritevline(long,long,long,long,long,long);
extern long __cdecl mspritevline(long,long,long,long,long,long);
extern long __cdecl tsetupspritevline(long,long,long,long,long,long);
extern long __cdecl tspritevline(long,long,long,long,long,long);
extern long __cdecl mhline(long,long,long,long,long,long);
extern long __cdecl mhlineskipmodify(long,long,long,long,long,long);
extern long __cdecl msethlineshift(long,long);
extern long __cdecl thline(long,long,long,long,long,long);
extern long __cdecl thlineskipmodify(long,long,long,long,long,long);
extern long __cdecl tsethlineshift(long,long);
extern long __cdecl setupslopevlin(long,long,long);
extern long __cdecl slopevlin(long,long,long,long,long,long);
extern long __cdecl settransnormal();
extern long __cdecl settransreverse();
extern long __cdecl setupdrawslab(long,long);
extern long __cdecl drawslab(long,long,long,long,long,long);
extern void __cdecl stretchhline(long,long,long,long,long,long);
#elif defined(_MSC_VER) // __GNUC__ && __i386__
extern long _cdecl mmxoverlay();
extern long _cdecl sethlinesizes(long,long,long);
extern long _cdecl setpalookupaddress(char *);
extern long _cdecl setuphlineasm4(long,long);
extern long _cdecl hlineasm4(long,long,long,long,long,long);
extern long _cdecl setuprhlineasm4(long,long,long,long,long,long);
extern long _cdecl rhlineasm4(long,long,long,long,long,long);
extern long _cdecl setuprmhlineasm4(long,long,long,long,long,long);
extern long _cdecl rmhlineasm4(long,long,long,long,long,long);
extern long _cdecl setupqrhlineasm4(long,long,long,long,long,long);
extern long _cdecl qrhlineasm4(long,long,long,long,long,long);
extern long _cdecl setvlinebpl(long);
extern long _cdecl fixtransluscence(long);
extern long _cdecl prevlineasm1(long,long,long,long,long,long);
extern long _cdecl vlineasm1(long,long,long,long,long,long);
extern long _cdecl setuptvlineasm(long);
extern long _cdecl tvlineasm1(long,long,long,long,long,long);
extern long _cdecl setuptvlineasm2(long,long,long);
extern long _cdecl tvlineasm2(long,long,long,long,long,long);
extern long _cdecl mvlineasm1(long,long,long,long,long,long);
extern long _cdecl setupvlineasm(long);
extern long _cdecl vlineasm4(long,long);
extern long _cdecl setupmvlineasm(long);
extern long _cdecl mvlineasm4(long,long);
extern long _cdecl setupspritevline(long,long,long,long,long,long);
extern long _cdecl spritevline(long,long,long,long,long,long);
extern long _cdecl msetupspritevline(long,long,long,long,long,long);
extern long _cdecl mspritevline(long,long,long,long,long,long);
extern long _cdecl tsetupspritevline(long,long,long,long,long,long);
extern long _cdecl tspritevline(long,long,long,long,long,long);
extern long _cdecl mhline(long,long,long,long,long,long);
extern long _cdecl mhlineskipmodify(long,long,long,long,long,long);
extern long _cdecl msethlineshift(long,long);
extern long _cdecl thline(long,long,long,long,long,long);
extern long _cdecl thlineskipmodify(long,long,long,long,long,long);
extern long _cdecl tsethlineshift(long,long);
extern long _cdecl setupslopevlin(long,long,long);
extern long _cdecl slopevlin(long,long,long,long,long,long);
extern long _cdecl settransnormal();
extern long _cdecl settransreverse();
extern long _cdecl setupdrawslab(long,long);
extern long _cdecl drawslab(long,long,long,long,long,long);
extern void _cdecl stretchhline(long,long,long,long,long,long);
#else // _MSC_VER
#error Unsupported compiler or architecture.
#endif // else
#endif // __a_h__

View file

@ -0,0 +1,126 @@
// Base services interface declaration
// for the Build Engine
// by Jonathon Fowler (jonof@edgenetwk.com)
#ifndef __baselayer_h__
#define __baselayer_h__
#ifdef __cplusplus
extern "C" {
#endif
extern int _buildargc;
extern char **_buildargv;
extern char quitevent, appactive;
extern char *startwin_labeltext;
// video
extern long xres, yres, bpp, fullscreen, bytesperline, imageSize, frameplace;
extern char offscreenrendering;
extern void (*baselayer_onvideomodechange)(int);
#ifdef USE_OPENGL
struct glinfo {
const char *vendor;
const char *renderer;
const char *version;
const char *extensions;
float maxanisotropy;
char bgra;
char clamptoedge;
char texcompr;
char texnpot;
char multisample;
char nvmultisamplehint;
};
extern struct glinfo glinfo;
#endif
extern char inputdevices;
// keys
#define KEYFIFOSIZ 64
extern char keystatus[256], keyfifo[KEYFIFOSIZ], keyfifoplc, keyfifoend;
extern unsigned char keyasciififo[KEYFIFOSIZ], keyasciififoplc, keyasciififoend;
// mouse
extern long mousex, mousey, mouseb;
// joystick
extern long *joyaxis, *joyhat, joyb;
extern char joyisgamepad, joynumaxes, joynumbuttons, joynumhats;
extern long joyaxespresent;
int initsystem(void);
void uninitsystem(void);
void initprintf(const char *, ...);
void debugprintf(const char *,...);
int handleevents(void);
typedef void (*KeyPressCallback)(long,long);
typedef void (*MousePressCallback)(long,long);
typedef void (*JoyPressCallback)(long,long);
int initinput(void);
void uninitinput(void);
void releaseallbuttons(void);
void setkeypresscallback(void (*callback)(long,long));
void setmousepresscallback(void (*callback)(long,long));
void setjoypresscallback(void (*callback)(long,long));
const unsigned char *getkeyname(int num);
const unsigned char *getjoyname(int what, int num); // what: 0=axis, 1=button, 2=hat
unsigned char bgetchar(void);
int bkbhit(void);
void bflushchars(void);
int initmouse(void);
void uninitmouse(void);
void grabmouse(char a);
void readmousexy(long *x, long *y);
void readmousebstatus(long *b);
void setjoydeadzone(int axis, unsigned short dead, unsigned short satur);
void getjoydeadzone(int axis, unsigned short *dead, unsigned short *satur);
int inittimer(int);
void uninittimer(void);
void sampletimer(void);
unsigned long getticks(void);
int gettimerfreq(void);
void (*installusertimercallback(void (*callback)(void)))(void);
int checkvideomode(int *x, int *y, int c, int fs);
int setvideomode(int x, int y, int c, int fs);
void getvalidmodes(void);
void resetvideomode(void);
void begindrawing(void);
void enddrawing(void);
void showframe(int);
int setpalette(int start, int num, char *dapal);
//int getpalette(int start, int num, char *dapal);
int setgamma(float ro, float go, float bo);
int switchrendermethod(int,int); // 0 = software, 1 = opengl | bool = reinit
int wm_msgbox(char *name, char *fmt, ...);
int wm_ynbox(char *name, char *fmt, ...);
void wm_setapptitle(char *name);
// baselayer.c
int baselayer_init();
#ifdef __cplusplus
}
#endif
#endif // __baselayer_h__

View file

@ -0,0 +1,121 @@
// Base services interface declaration
// for the Build Engine
// by Jonathon Fowler (jonof@edgenetwk.com)
#ifndef __baselayer_h__
#define __baselayer_h__
#ifdef __cplusplus
extern "C" {
#endif
extern int _buildargc;
extern char **_buildargv;
extern char quitevent, appactive;
extern char *startwin_labeltext;
// video
extern long xres, yres, bpp, fullscreen, bytesperline, imageSize, frameplace;
extern char offscreenrendering;
extern void (*baselayer_onvideomodechange)(int);
#ifdef USE_OPENGL
struct glinfo {
const char *vendor;
const char *renderer;
const char *version;
const char *extensions;
float maxanisotropy;
char bgra, clamptoedge, texcompr, texnpot;
};
extern struct glinfo glinfo;
#endif
extern char inputdevices;
// keys
#define KEYFIFOSIZ 64
extern char keystatus[256], keyfifo[KEYFIFOSIZ], keyfifoplc, keyfifoend;
extern unsigned char keyasciififo[KEYFIFOSIZ], keyasciififoplc, keyasciififoend;
// mouse
extern long mousex, mousey, mouseb;
// joystick
extern long *joyaxis, *joyhat, joyb;
extern char joyisgamepad, joynumaxes, joynumbuttons, joynumhats;
extern long joyaxespresent;
int initsystem(void);
void uninitsystem(void);
void initprintf(const char *, ...);
void debugprintf(const char *,...);
int handleevents(void);
typedef void (*KeyPressCallback)(long,long);
typedef void (*MousePressCallback)(long,long);
typedef void (*JoyPressCallback)(long,long);
int initinput(void);
void uninitinput(void);
void releaseallbuttons(void);
void setkeypresscallback(void (*callback)(long,long));
void setmousepresscallback(void (*callback)(long,long));
void setjoypresscallback(void (*callback)(long,long));
const unsigned char *getkeyname(int num);
const unsigned char *getjoyname(int what, int num); // what: 0=axis, 1=button, 2=hat
unsigned char bgetchar(void);
int bkbhit(void);
void bflushchars(void);
int initmouse(void);
void uninitmouse(void);
void grabmouse(char a);
void readmousexy(long *x, long *y);
void readmousebstatus(long *b);
void setjoydeadzone(int axis, unsigned short dead, unsigned short satur);
void getjoydeadzone(int axis, unsigned short *dead, unsigned short *satur);
int inittimer(int);
void uninittimer(void);
void sampletimer(void);
unsigned long getticks(void);
int gettimerfreq(void);
void (*installusertimercallback(void (*callback)(void)))(void);
int checkvideomode(int *x, int *y, int c, int fs);
int setvideomode(int x, int y, int c, int fs);
void getvalidmodes(void);
void resetvideomode(void);
void begindrawing(void);
void enddrawing(void);
void showframe(int);
int setpalette(int start, int num, char *dapal);
//int getpalette(int start, int num, char *dapal);
int setgamma(float ro, float go, float bo);
int switchrendermethod(int,int); // 0 = software, 1 = opengl | bool = reinit
int wm_msgbox(char *name, char *fmt, ...);
int wm_ynbox(char *name, char *fmt, ...);
void wm_setapptitle(char *name);
// baselayer.c
int baselayer_init();
#ifdef __cplusplus
}
#endif
#endif // __baselayer_h__

View file

@ -0,0 +1,126 @@
// Base services interface declaration
// for the Build Engine
// by Jonathon Fowler (jonof@edgenetwk.com)
#ifndef __baselayer_h__
#define __baselayer_h__
#ifdef __cplusplus
extern "C" {
#endif
extern int _buildargc;
extern char **_buildargv;
extern char quitevent, appactive;
extern char *startwin_labeltext;
// video
extern long xres, yres, bpp, fullscreen, bytesperline, imageSize, frameplace;
extern char offscreenrendering;
extern void (*baselayer_onvideomodechange)(int);
#ifdef USE_OPENGL
struct glinfo {
const char *vendor;
const char *renderer;
const char *version;
const char *extensions;
float maxanisotropy;
char bgra;
char clamptoedge;
char texcompr;
char texnpot;
char multisample;
char nvmultisamplehint;
};
extern struct glinfo glinfo;
#endif
extern char inputdevices;
// keys
#define KEYFIFOSIZ 64
extern char keystatus[256], keyfifo[KEYFIFOSIZ], keyfifoplc, keyfifoend;
extern unsigned char keyasciififo[KEYFIFOSIZ], keyasciififoplc, keyasciififoend;
// mouse
extern long mousex, mousey, mouseb;
// joystick
extern long *joyaxis, *joyhat, joyb;
extern char joyisgamepad, joynumaxes, joynumbuttons, joynumhats;
extern long joyaxespresent;
int initsystem(void);
void uninitsystem(void);
void initprintf(const char *, ...);
void debugprintf(const char *,...);
int handleevents(void);
typedef void (*KeyPressCallback)(long,long);
typedef void (*MousePressCallback)(long,long);
typedef void (*JoyPressCallback)(long,long);
int initinput(void);
void uninitinput(void);
void releaseallbuttons(void);
void setkeypresscallback(void (*callback)(long,long));
void setmousepresscallback(void (*callback)(long,long));
void setjoypresscallback(void (*callback)(long,long));
const unsigned char *getkeyname(int num);
const unsigned char *getjoyname(int what, int num); // what: 0=axis, 1=button, 2=hat
unsigned char bgetchar(void);
int bkbhit(void);
void bflushchars(void);
int initmouse(void);
void uninitmouse(void);
void grabmouse(char a);
void readmousexy(long *x, long *y);
void readmousebstatus(long *b);
void setjoydeadzone(int axis, unsigned short dead, unsigned short satur);
void getjoydeadzone(int axis, unsigned short *dead, unsigned short *satur);
int inittimer(int);
void uninittimer(void);
void sampletimer(void);
unsigned long getticks(void);
int gettimerfreq(void);
void (*installusertimercallback(void (*callback)(void)))(void);
int checkvideomode(int *x, int *y, int c, int fs);
int setvideomode(int x, int y, int c, int fs);
void getvalidmodes(void);
void resetvideomode(void);
void begindrawing(void);
void enddrawing(void);
void showframe(int);
int setpalette(int start, int num, char *dapal);
//int getpalette(int start, int num, char *dapal);
int setgamma(float ro, float go, float bo);
int switchrendermethod(int,int); // 0 = software, 1 = opengl | bool = reinit
int wm_msgbox(char *name, char *fmt, ...);
int wm_ynbox(char *name, char *fmt, ...);
void wm_setapptitle(char *name);
// baselayer.c
int baselayer_init();
#ifdef __cplusplus
}
#endif
#endif // __baselayer_h__

View file

@ -0,0 +1,516 @@
// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman
// Ken Silverman's official web site: "http://www.advsys.net/ken"
// See the included license file "BUILDLIC.TXT" for license info.
//
// This file has been modified from Ken Silverman's original release
// by Jonathon Fowler (jonof@edgenetwk.com)
#ifndef __build_h__
#define __build_h__
#ifdef __cplusplus
extern "C" {
#endif
#define MAXSECTORSV8 4096
#define MAXWALLSV8 16384
#define MAXSPRITESV8 16384
#define MAXSECTORSV7 1024
#define MAXWALLSV7 8192
#define MAXSPRITESV7 4096
#define MAXSECTORS MAXSECTORSV8
#define MAXWALLS MAXWALLSV8
#define MAXSPRITES MAXSPRITESV8
#define MAXTILES 15360
#define MAXVOXELS 4096
#define MAXSTATUS 1024
#define MAXPLAYERS 16
#define MAXXDIM 1600
#define MAXYDIM 1200
#define MAXPALOOKUPS 256
#define MAXPSKYTILES 256
#define MAXSPRITESONSCREEN 2048
#define MAXUNIQHUDID 256 //Extra slots so HUD models can store animation state without messing game sprites
#define CLIPMASK0 (((1L)<<16)+1L)
#define CLIPMASK1 (((256L)<<16)+64L)
//Make all variables in BUILD.H defined in the ENGINE,
//and externed in GAME
#ifdef ENGINE
# define EXTERN
#else
# define EXTERN extern
#endif
#ifdef __GNUC__
#define BPACK __attribute__ ((packed))
#else
#define BPACK
#endif
#ifdef _MSC_VER
#pragma pack(1)
#endif
#ifdef __WATCOMC__
#pragma pack(push,1);
#endif
//ceilingstat/floorstat:
// bit 0: 1 = parallaxing, 0 = not "P"
// bit 1: 1 = groudraw, 0 = not
// bit 2: 1 = swap x&y, 0 = not "F"
// bit 3: 1 = double smooshiness "E"
// bit 4: 1 = x-flip "F"
// bit 5: 1 = y-flip "F"
// bit 6: 1 = Align texture to first wall of sector "R"
// bits 7-8: "T"
// 00 = normal floors
// 01 = masked floors
// 10 = transluscent masked floors
// 11 = reverse transluscent masked floors
// bits 9-15: reserved
//40 bytes
typedef struct BPACK
{
short wallptr, wallnum;
long ceilingz, floorz;
short ceilingstat, floorstat;
short ceilingpicnum, ceilingheinum;
signed char ceilingshade;
char ceilingpal, ceilingxpanning, ceilingypanning;
short floorpicnum, floorheinum;
signed char floorshade;
char floorpal, floorxpanning, floorypanning;
char visibility, filler;
short lotag, hitag, extra;
} sectortype;
//cstat:
// bit 0: 1 = Blocking wall (use with clipmove, getzrange) "B"
// bit 1: 1 = bottoms of invisible walls swapped, 0 = not "2"
// bit 2: 1 = align picture on bottom (for doors), 0 = top "O"
// bit 3: 1 = x-flipped, 0 = normal "F"
// bit 4: 1 = masking wall, 0 = not "M"
// bit 5: 1 = 1-way wall, 0 = not "1"
// bit 6: 1 = Blocking wall (use with hitscan / cliptype 1) "H"
// bit 7: 1 = Transluscence, 0 = not "T"
// bit 8: 1 = y-flipped, 0 = normal "F"
// bit 9: 1 = Transluscence reversing, 0 = normal "T"
// bits 10-15: reserved
//32 bytes
typedef struct BPACK
{
long x, y;
short point2, nextwall, nextsector, cstat;
short picnum, overpicnum;
signed char shade;
char pal, xrepeat, yrepeat, xpanning, ypanning;
short lotag, hitag, extra;
} walltype;
//cstat:
// bit 0: 1 = Blocking sprite (use with clipmove, getzrange) "B"
// bit 1: 1 = transluscence, 0 = normal "T"
// bit 2: 1 = x-flipped, 0 = normal "F"
// bit 3: 1 = y-flipped, 0 = normal "F"
// bits 5-4: 00 = FACE sprite (default) "R"
// 01 = WALL sprite (like masked walls)
// 10 = FLOOR sprite (parallel to ceilings&floors)
// bit 6: 1 = 1-sided sprite, 0 = normal "1"
// bit 7: 1 = Real centered centering, 0 = foot center "C"
// bit 8: 1 = Blocking sprite (use with hitscan / cliptype 1) "H"
// bit 9: 1 = Transluscence reversing, 0 = normal "T"
// bits 10-14: reserved
// bit 15: 1 = Invisible sprite, 0 = not invisible
//44 bytes
typedef struct BPACK
{
long x, y, z;
short cstat, picnum;
signed char shade;
char pal, clipdist, filler;
unsigned char xrepeat, yrepeat;
signed char xoffset, yoffset;
short sectnum, statnum;
short ang, owner, xvel, yvel, zvel;
short lotag, hitag, extra;
} spritetype;
typedef struct BPACK {
unsigned long mdanimtims;
short mdanimcur;
short angoff;
short pitch, roll;
short xoff, yoff, zoff;
unsigned char flags;
char filler[3];
} spriteexttype;
#define SPREXT_NOTMD 1
#define SPREXT_NOMDANIM 2
EXTERN spriteexttype spriteext[MAXSPRITES+MAXUNIQHUDID];
EXTERN long guniqhudid;
EXTERN sectortype sector[MAXSECTORS];
EXTERN walltype wall[MAXWALLS];
EXTERN spritetype sprite[MAXSPRITES];
EXTERN long spritesortcnt;
EXTERN spritetype tsprite[MAXSPRITESONSCREEN];
EXTERN long xdim, ydim, ylookup[MAXYDIM+1], numpages;
EXTERN long yxaspect, viewingrange;
#define MAXVALIDMODES 256
EXTERN long validmodecnt;
struct validmode_t {
long xdim,ydim;
char bpp;
char fs; // bit 0 = fullscreen flag
char filler[2];
long extra; // internal use
};
EXTERN struct validmode_t validmode[MAXVALIDMODES];
EXTERN short numsectors, numwalls;
EXTERN /*volatile*/ long totalclock;
EXTERN long numframes, randomseed;
EXTERN short sintable[2048];
EXTERN char palette[768];
EXTERN short numpalookups;
EXTERN char *palookup[MAXPALOOKUPS];
EXTERN char parallaxtype, showinvisibility;
EXTERN long parallaxyoffs, parallaxyscale;
EXTERN long visibility, parallaxvisibility;
EXTERN long windowx1, windowy1, windowx2, windowy2;
EXTERN short startumost[MAXXDIM], startdmost[MAXXDIM];
EXTERN short pskyoff[MAXPSKYTILES], pskybits;
EXTERN short headspritesect[MAXSECTORS+1], headspritestat[MAXSTATUS+1];
EXTERN short prevspritesect[MAXSPRITES], prevspritestat[MAXSPRITES];
EXTERN short nextspritesect[MAXSPRITES], nextspritestat[MAXSPRITES];
EXTERN short tilesizx[MAXTILES], tilesizy[MAXTILES];
EXTERN char walock[MAXTILES];
EXTERN long numtiles, picanm[MAXTILES], waloff[MAXTILES];
//These variables are for auto-mapping with the draw2dscreen function.
//When you load a new board, these bits are all set to 0 - since
//you haven't mapped out anything yet. Note that these arrays are
//bit-mapped.
//If you want draw2dscreen() to show sprite #54 then you say:
// spritenum = 54;
// show2dsprite[spritenum>>3] |= (1<<(spritenum&7));
//And if you want draw2dscreen() to not show sprite #54 then you say:
// spritenum = 54;
// show2dsprite[spritenum>>3] &= ~(1<<(spritenum&7));
//Automapping defaults to 0 (do nothing). If you set automapping to 1,
// then in 3D mode, the walls and sprites that you see will show up the
// next time you flip to 2D mode.
EXTERN char show2dsector[(MAXSECTORS+7)>>3];
EXTERN char show2dwall[(MAXWALLS+7)>>3];
EXTERN char show2dsprite[(MAXSPRITES+7)>>3];
EXTERN char automapping;
EXTERN char gotpic[(MAXTILES+7)>>3];
EXTERN char gotsector[(MAXSECTORS+7)>>3];
EXTERN char captureformat;
extern char vgapalette[5*256];
extern unsigned long drawlinepat;
extern void faketimerhandler(void);
extern char apptitle[256];
typedef struct {
unsigned char r,g,b,f;
} palette_t;
extern palette_t curpalette[256], curpalettefaded[256], palfadergb;
extern char palfadedelta;
extern long dommxoverlay, novoxmips;
#ifdef SUPERBUILD
extern long tiletovox[MAXTILES];
extern long usevoxels, voxscale[MAXVOXELS];
#endif
#ifdef POLYMOST
extern long usemodels, usehightile;
#endif
extern char *engineerrstr;
extern char noclip;
/*************************************************************************
POSITION VARIABLES:
POSX is your x - position ranging from 0 to 65535
POSY is your y - position ranging from 0 to 65535
(the length of a side of the grid in EDITBORD would be 1024)
POSZ is your z - position (height) ranging from 0 to 65535, 0 highest.
ANG is your angle ranging from 0 to 2047. Instead of 360 degrees, or
2 * PI radians, I use 2048 different angles, so 90 degrees would
be 512 in my system.
SPRITE VARIABLES:
EXTERN short headspritesect[MAXSECTORS+1], headspritestat[MAXSTATUS+1];
EXTERN short prevspritesect[MAXSPRITES], prevspritestat[MAXSPRITES];
EXTERN short nextspritesect[MAXSPRITES], nextspritestat[MAXSPRITES];
Example: if the linked lists look like the following:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
Sector lists: Status lists:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ
Sector0: 4, 5, 8 Status0: 2, 0, 8
Sector1: 16, 2, 0, 7 Status1: 4, 5, 16, 7, 3, 9
Sector2: 3, 9
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Notice that each number listed above is shown exactly once on both the
left and right side. This is because any sprite that exists must
be in some sector, and must have some kind of status that you define.
Coding example #1:
To go through all the sprites in sector 1, the code can look like this:
sectnum = 1;
i = headspritesect[sectnum];
while (i != -1)
{
nexti = nextspritesect[i];
//your code goes here
//ex: printf("Sprite %d is in sector %d\n",i,sectnum);
i = nexti;
}
Coding example #2:
To go through all sprites with status = 1, the code can look like this:
statnum = 1; //status 1
i = headspritestat[statnum];
while (i != -1)
{
nexti = nextspritestat[i];
//your code goes here
//ex: printf("Sprite %d has a status of 1 (active)\n",i,statnum);
i = nexti;
}
insertsprite(short sectnum, short statnum);
deletesprite(short spritenum);
changespritesect(short spritenum, short newsectnum);
changespritestat(short spritenum, short newstatnum);
TILE VARIABLES:
NUMTILES - the number of tiles found TILES.DAT.
TILESIZX[MAXTILES] - simply the x-dimension of the tile number.
TILESIZY[MAXTILES] - simply the y-dimension of the tile number.
WALOFF[MAXTILES] - the actual 32-bit offset pointing to the top-left
corner of the tile.
PICANM[MAXTILES] - flags for animating the tile.
TIMING VARIABLES:
TOTALCLOCK - When the engine is initialized, TOTALCLOCK is set to zero.
From then on, it is incremented 120 times a second by 1. That
means that the number of seconds elapsed is totalclock / 120.
NUMFRAMES - The number of times the draw3dscreen function was called
since the engine was initialized. This helps to determine frame
rate. (Frame rate = numframes * 120 / totalclock.)
OTHER VARIABLES:
STARTUMOST[320] is an array of the highest y-coordinates on each column
that my engine is allowed to write to. You need to set it only
once.
STARTDMOST[320] is an array of the lowest y-coordinates on each column
that my engine is allowed to write to. You need to set it only
once.
SINTABLE[2048] is a sin table with 2048 angles rather than the
normal 360 angles for higher precision. Also since SINTABLE is in
all integers, the range is multiplied by 16383, so instead of the
normal -1<sin(x)<1, the range of sintable is -16383<sintable[]<16383
If you use this sintable, you can possibly speed up your code as
well as save space in memory. If you plan to use sintable, 2
identities you may want to keep in mind are:
sintable[ang&2047] = sin(ang * (3.141592/1024)) * 16383
sintable[(ang+512)&2047] = cos(ang * (3.141592/1024)) * 16383
NUMSECTORS - the total number of existing sectors. Modified every time
you call the loadboard function.
***************************************************************************/
int initengine(void);
void uninitengine(void);
void initspritelists(void);
long loadboard(char *filename, char fromwhere, long *daposx, long *daposy, long *daposz, short *daang, short *dacursectnum);
long loadmaphack(char *filename);
long saveboard(char *filename, long *daposx, long *daposy, long *daposz, short *daang, short *dacursectnum);
long loadpics(char *filename, long askedsize);
void loadtile(short tilenume);
long qloadkvx(long voxindex, char *filename);
long allocatepermanenttile(short tilenume, long xsiz, long ysiz);
void copytilepiece(long tilenume1, long sx1, long sy1, long xsiz, long ysiz, long tilenume2, long sx2, long sy2);
void makepalookup(long palnum, char *remapbuf, signed char r, signed char g, signed char b, char dastat);
void setvgapalette(void);
void setbrightness(char dabrightness, char *dapal, char noapply);
void setpalettefade(char r, char g, char b, char offset);
void squarerotatetile(short tilenume);
long setgamemode(char davidoption, long daxdim, long daydim, long dabpp);
void nextpage(void);
void setview(long x1, long y1, long x2, long y2);
void setaspect(long daxrange, long daaspect);
void flushperms(void);
void plotpixel(long x, long y, char col);
char getpixel(long x, long y);
void setviewtotile(short tilenume, long xsiz, long ysiz);
void setviewback(void);
void preparemirror(long dax, long day, long daz, short daang, long dahoriz, short dawall, short dasector, long *tposx, long *tposy, short *tang);
void completemirror(void);
void drawrooms(long daposx, long daposy, long daposz, short daang, long dahoriz, short dacursectnum);
void drawmasks(void);
void clearview(long dacol);
void clearallviews(long dacol);
void drawmapview(long dax, long day, long zoome, short ang);
void rotatesprite(long sx, long sy, long z, short a, short picnum, signed char dashade, char dapalnum, char dastat, long cx1, long cy1, long cx2, long cy2);
void drawline256(long x1, long y1, long x2, long y2, char col);
void printext16(long xpos, long ypos, short col, short backcol, char *name, char fontsize);
void printext256(long xpos, long ypos, short col, short backcol, char *name, char fontsize);
long clipmove(long *x, long *y, long *z, short *sectnum, long xvect, long yvect, long walldist, long ceildist, long flordist, unsigned long cliptype);
long clipinsidebox(long x, long y, short wallnum, long walldist);
long clipinsideboxline(long x, long y, long x1, long y1, long x2, long y2, long walldist);
long pushmove(long *x, long *y, long *z, short *sectnum, long walldist, long ceildist, long flordist, unsigned long cliptype);
void getzrange(long x, long y, long z, short sectnum, long *ceilz, long *ceilhit, long *florz, long *florhit, long walldist, unsigned long cliptype);
long hitscan(long xs, long ys, long zs, short sectnum, long vx, long vy, long vz, short *hitsect, short *hitwall, short *hitsprite, long *hitx, long *hity, long *hitz, unsigned long cliptype);
long neartag(long xs, long ys, long zs, short sectnum, short ange, short *neartagsector, short *neartagwall, short *neartagsprite, long *neartaghitdist, long neartagrange, char tagsearch);
long cansee(long x1, long y1, long z1, short sect1, long x2, long y2, long z2, short sect2);
void updatesector(long x, long y, short *sectnum);
void updatesectorz(long x, long y, long z, short *sectnum);
long inside(long x, long y, short sectnum);
void dragpoint(short pointhighlight, long dax, long day);
void setfirstwall(short sectnum, short newfirstwall);
void getmousevalues(long *mousx, long *mousy, long *bstatus);
long krand(void);
long ksqrt(long num);
long getangle(long xvect, long yvect);
void rotatepoint(long xpivot, long ypivot, long x, long y, short daang, long *x2, long *y2);
long lastwall(short point);
long nextsectorneighborz(short sectnum, long thez, short topbottom, short direction);
long getceilzofslope(short sectnum, long dax, long day);
long getflorzofslope(short sectnum, long dax, long day);
void getzsofslope(short sectnum, long dax, long day, long *ceilz, long *florz);
void alignceilslope(short dasect, long x, long y, long z);
void alignflorslope(short dasect, long x, long y, long z);
long sectorofwall(short theline);
long loopnumofsector(short sectnum, short wallnum);
long insertsprite(short sectnum, short statnum);
long deletesprite(short spritenum);
long changespritesect(short spritenum, short newsectnum);
long changespritestat(short spritenum, short newstatnum);
long setsprite(short spritenum, long newx, long newy, long newz);
long screencapture(char *filename, char inverseit);
#define STATUS2DSIZ 144
void qsetmode640350(void);
void qsetmode640480(void);
void qsetmodeany(long,long);
void clear2dscreen(void);
void draw2dgrid(long posxe, long posye, short ange, long zoome, short gride);
void draw2dscreen(long posxe, long posye, short ange, long zoome, short gride);
void drawline16(long x1, long y1, long x2, long y2, char col);
void drawcircle16(long x1, long y1, long r, char col);
int setrendermode(int renderer);
int getrendermode(void);
void setrollangle(long rolla);
// pal: pass -1 to invalidate all palettes for the tile, or >=0 for a particular palette
// how: pass -1 to invalidate all instances of the tile in texture memory, or a bitfield
// bit 0: opaque or masked (non-translucent) texture, using repeating
// bit 1: ignored
// bit 2: 33% translucence, using repeating
// bit 3: 67% translucence, using repeating
// bit 4: opaque or masked (non-translucent) texture, using clamping
// bit 5: ignored
// bit 6: 33% translucence, using clamping
// bit 7: 67% translucence, using clamping
// clamping is for sprites, repeating is for walls
void invalidatetile(short tilenume, long pal, long how);
void setpolymost2dview(void); // sets up GL for 2D drawing
long polymost_drawtilescreen(long tilex, long tiley, long wallnum, long dimen);
void polymost_glreset(void);
void polymost_precache(long dapicnum, long dapalnum, long datype);
#if defined(POLYMOST) && defined(USE_OPENGL)
extern long glanisotropy;
extern long glusetexcompr;
extern long gltexfiltermode;
extern long glredbluemode;
extern long glusetexcache, glusetexcachecompression;
extern long glmultisample, glnvmultisamplehint;
void gltexapplyprops (void);
#endif
void hicinit(void);
// effect bitset: 1 = greyscale, 2 = invert
void hicsetpalettetint(long palnum, unsigned char r, unsigned char g, unsigned char b, unsigned char effect);
// flags bitset: 1 = don't compress
int hicsetsubsttex(long picnum, long palnum, char *filen, float alphacut, char flags);
int hicsetskybox(long picnum, long palnum, char *faces[6]);
int hicclearsubst(long picnum, long palnum);
int md_loadmodel(const char *fn);
int md_setmisc(int modelid, float scale, int shadeoff, float zadd);
int md_tilehasmodel(int tilenume);
int md_defineframe(int modelid, const char *framename, int tilenume, int skinnum);
int md_defineanimation(int modelid, const char *framestart, const char *frameend, int fps, int flags);
int md_defineskin(int modelid, const char *skinfn, int palnum, int skinnum, int surfnum);
int md_definehud (int modelid, int tilex, double xadd, double yadd, double zadd, double angadd, int flags);
int md_undefinetile(int tile);
int md_undefinemodel(int modelid);
int loaddefinitionsfile(char *fn);
extern long mapversion; // if loadboard() fails with -2 return, try loadoldboard(). if it fails with -2, board is dodgy
long loadoldboard(char *filename, char fromwhere, long *daposx, long *daposy, long *daposz, short *daang, short *dacursectnum);
#ifdef _MSC_VER
#pragma pack()
#endif
#ifdef __WATCOMC__
#pragma pack(pop)
#endif
#undef BPACK
#ifdef __cplusplus
}
#endif
#endif // __build_h__

View file

@ -0,0 +1,63 @@
// cache1d.h
#ifndef __cache1d_h__
#define __cache1d_h__
#ifdef __cplusplus
extern "C" {
#endif
void initcache(long dacachestart, long dacachesize);
void allocache(long *newhandle, long newbytes, char *newlockptr);
void suckcache(long *suckptr);
void agecache(void);
extern int pathsearchmode; // 0 = gamefs mode (default), 1 = localfs mode (editor's mode)
int addsearchpath(const char *p);
int findfrompath(const char *fn, char **where);
int openfrompath(const char *fn, int flags, int mode);
BFILE *fopenfrompath(const char *fn, const char *mode);
long initgroupfile(char *filename);
void uninitsinglegroupfile(long grphandle);
void uninitgroupfile(void);
long kopen4load(char *filename, char searchfirst); // searchfirst: 0 = anywhere, 1 = first group, 2 = any group
long kread(long handle, void *buffer, long leng);
long klseek(long handle, long offset, long whence);
long kfilelength(long handle);
long ktell(long handle);
void kclose(long handle);
enum {
CACHE1D_FIND_FILE = 1,
CACHE1D_FIND_DIR = 2,
CACHE1D_FIND_DRIVE = 4,
CACHE1D_OPT_NOSTACK = 0x100,
// the lower the number, the higher the priority
CACHE1D_SOURCE_DRIVE = 0,
CACHE1D_SOURCE_CURDIR = 1,
CACHE1D_SOURCE_PATH = 2, // + path stack depth
CACHE1D_SOURCE_ZIP = 0x7ffffffe,
CACHE1D_SOURCE_GRP = 0x7fffffff,
};
typedef struct _CACHE1D_FIND_REC {
char *name;
int type, source;
struct _CACHE1D_FIND_REC *next, *prev, *usera, *userb;
} CACHE1D_FIND_REC;
void klistfree(CACHE1D_FIND_REC *rec);
CACHE1D_FIND_REC *klistpath(const char *path, const char *mask, int type);
int kdfread(void *buffer, bsize_t dasizeof, bsize_t count, long fil);
int dfread(void *buffer, bsize_t dasizeof, bsize_t count, BFILE *fil);
void kdfwrite(void *buffer, bsize_t dasizeof, bsize_t count, long fil);
void dfwrite(void *buffer, bsize_t dasizeof, bsize_t count, BFILE *fil);
#ifdef __cplusplus
}
#endif
#endif // __cache1d_h__

View file

@ -0,0 +1,432 @@
// Compatibility declarations for things which might not be present in
// certain build environments. It also levels the playing field caused
// by different platforms.
#ifndef __compat_h__
#define __compat_h__
// Define this to rewrite all 'B' versions to library functions. This
// is for platforms which give us a standard sort of C library so we
// link directly. Platforms like PalmOS which don't have a standard C
// library will need to wrap these functions with suitable emulations.
#define __compat_h_macrodef__
#ifdef __cplusplus
# include <cstdarg>
#else
# include <stdarg.h>
#endif
#ifdef __compat_h_macrodef__
# ifdef __cplusplus
# include <cstdio>
# include <cstring>
# include <cstdlib>
# include <ctime>
# else
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
# include <time.h>
# endif
# include <fcntl.h>
# include <ctype.h>
# include <sys/types.h>
# include <sys/stat.h>
# include <errno.h>
# if defined(_WIN32)
# include <io.h>
# else
# include <unistd.h>
# endif
#endif
#ifdef EFENCE
# include <efence.h>
#endif
#if defined(__WATCOMC__)
# define inline __inline
# define int64 __int64
# define uint64 unsigned __int64
# define longlong(x) x##i64
#elif defined(_MSC_VER)
# define inline __inline
# define int64 __int64
# define uint64 unsigned __int64
# define longlong(x) x##i64
#else
# define longlong(x) x##ll
typedef long long int64;
typedef unsigned long long uint64;
#endif
#ifndef NULL
# define NULL ((void *)0)
#endif
#if defined(__linux)
# include <endian.h>
# if __BYTE_ORDER == __LITTLE_ENDIAN
# define B_LITTLE_ENDIAN 1
# define B_BIG_ENDIAN 0
# elif __BYTE_ORDER == __BIG_ENDIAN
# define B_LITTLE_ENDIAN 0
# define B_BIG_ENDIAN 1
# endif
# define B_ENDIAN_C_INLINE 1
#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
# include <sys/endian.h>
# if _BYTE_ORDER == _LITTLE_ENDIAN
# define B_LITTLE_ENDIAN 1
# define B_BIG_ENDIAN 0
# elif _BYTE_ORDER == _BIG_ENDIAN
# define B_LITTLE_ENDIAN 0
# define B_BIG_ENDIAN 1
# endif
# define B_SWAP64(x) __bswap64(x)
# define B_SWAP32(x) __bswap32(x)
# define B_SWAP16(x) __bswap16(x)
#elif defined(__APPLE__)
# if defined(__LITTLE_ENDIAN__)
# define B_LITTLE_ENDIAN 1
# define B_BIG_ENDIAN 0
# elif defined(__BIG_ENDIAN__)
# define B_LITTLE_ENDIAN 0
# define B_BIG_ENDIAN 1
# endif
# include <libkern/OSByteOrder.h>
# define B_SWAP64(x) OSSwapConstInt64(x)
# define B_SWAP32(x) OSSwapConstInt32(x)
# define B_SWAP16(x) OSSwapConstInt16(x)
#elif defined(__BEOS__)
# include <posix/endian.h>
# if LITTLE_ENDIAN != 0
# define B_LITTLE_ENDIAN 1
# define B_BIG_ENDIAN 0
# elif BIG_ENDIAN != 0
# define B_LITTLE_ENDIAN 0
# define B_BIG_ENDIAN 1
# endif
# define B_ENDIAN_C_INLINE 1
#elif defined(__QNX__)
# if defined __LITTLEENDIAN__
# define B_LITTLE_ENDIAN 1
# define B_BIG_ENDIAN 0
# elif defined __BIGENDIAN__
# define B_LITTLE_ENDIAN 0
# define B_BIG_ENDIAN 1
# endif
# define B_ENDIAN_C_INLINE 1
#elif defined(__sun)
# if defined _LITTLE_ENDIAN
# define B_LITTLE_ENDIAN 1
# define B_BIG_ENDIAN 0
# elif defined _BIG_ENDIAN
# define B_LITTLE_ENDIAN 0
# define B_BIG_ENDIAN 1
# endif
# define B_ENDIAN_C_INLINE 1
#elif defined(_WIN32) || defined(SKYOS) || defined(__SYLLABLE__)
# define B_LITTLE_ENDIAN 1
# define B_BIG_ENDIAN 0
# define B_ENDIAN_C_INLINE 1
#endif
#if !defined(B_LITTLE_ENDIAN) || !defined(B_BIG_ENDIAN)
# error Unknown endianness
#endif
#ifdef __cplusplus
extern "C" {
#endif
#if defined B_ENDIAN_X86_INLINE
# if defined(_MSC_VER)
// inline asm using bswap/xchg
# elif defined(__GNUC__)
// inline asm using bswap/xchg
# elif defined(__WATCOMC__)
// inline asm using bswap/xchg
# endif
#elif defined B_ENDIAN_C_INLINE
static inline unsigned short B_SWAP16(unsigned short s) { return (s>>8)|(s<<8); }
static inline unsigned long B_SWAP32(unsigned long l) { return ((l>>8)&0xff00)|((l&0xff00)<<8)|(l<<24)|(l>>24); }
static inline uint64 B_SWAP64(uint64 l) { return (l>>56)|((l>>40)&0xff00)|((l>>24)&0xff0000)|((l>>8)&0xff000000)|((l&255)<<56)|((l&0xff00)<<40)|((l&0xff0000)<<24)|((l&0xff000000)<<8); }
#endif
#if B_LITTLE_ENDIAN == 1
# define B_LITTLE64(x) (x)
# define B_BIG64(x) B_SWAP64(x)
# define B_LITTLE32(x) (x)
# define B_BIG32(x) B_SWAP32(x)
# define B_LITTLE16(x) (x)
# define B_BIG16(x) B_SWAP16(x)
#elif B_BIG_ENDIAN == 1
# define B_LITTLE64(x) B_SWAP64(x)
# define B_BIG64(x) (x)
# define B_LITTLE32(x) B_SWAP32(x)
# define B_BIG32(x) (x)
# define B_LITTLE16(x) B_SWAP16(x)
# define B_BIG16(x) (x)
#endif
#ifndef FP_OFF
# define FP_OFF(__p) ((unsigned)(__p))
#endif
#ifdef __compat_h_macrodef__
# ifndef O_BINARY
# define O_BINARY 0
# endif
# ifndef O_TEXT
# define O_TEXT 0
# endif
# ifndef F_OK
# define F_OK 0
# endif
# define BO_BINARY O_BINARY
# define BO_TEXT O_TEXT
# define BO_RDONLY O_RDONLY
# define BO_WRONLY O_WRONLY
# define BO_RDWR O_RDWR
# define BO_APPEND O_APPEND
# define BO_CREAT O_CREAT
# define BO_TRUNC O_TRUNC
# define BS_IRGRP S_IRGRP
# define BS_IWGRP S_IWGRP
# define BS_IEXEC S_IEXEC
# define BS_IWRITE S_IWRITE
# define BS_IREAD S_IREAD
# define BS_IFIFO S_IFIFO
# define BS_IFCHR S_IFCHR
# define BS_IFBLK S_IFBLK
# define BS_IFDIR S_IFDIR
# define BS_IFREG S_IFREG
# define BSEEK_SET SEEK_SET
# define BSEEK_CUR SEEK_CUR
# define BSEEK_END SEEK_END
#else
# define BO_BINARY 0
# define BO_TEXT 1
# define BO_RDONLY 2
# define BO_WRONLY 4
# define BO_RDWR 6
# define BO_APPEND 8
# define BO_CREAT 16
# define BO_TRUNC 32
# define BS_IRGRP 0
# define BS_IWGRP 0
# define BS_IEXEC 1
# define BS_IWRITE 2
# define BS_IREAD 4
# define BS_IFIFO 0x1000
# define BS_IFCHR 0x2000
# define BS_IFBLK 0x3000
# define BS_IFDIR 0x4000
# define BS_IFREG 0x8000
# define BSEEK_SET 0
# define BSEEK_CUR 1
# define BSEEK_END 2
#endif
#ifdef UNDERSCORES
# define ASMSYM(x) "_" x
#else
# define ASMSYM(x) x
#endif
#ifndef min
# define min(a,b) ( ((a) < (b)) ? (a) : (b) )
#endif
#ifndef max
# define max(a,b) ( ((a) > (b)) ? (a) : (b) )
#endif
#define BMAX_PATH 260
struct Bdirent {
unsigned short namlen;
char *name;
unsigned mode;
unsigned size;
unsigned mtime;
};
typedef void BDIR;
BDIR* Bopendir(const char *name);
struct Bdirent* Breaddir(BDIR *dir);
int Bclosedir(BDIR *dir);
#ifdef __compat_h_macrodef__
# define BFILE FILE
# define bsize_t size_t
# define bssize_t ssize_t
#else
typedef void BFILE;
typedef unsigned long bsize_t;
typedef signed long bssize_t;
#endif
#ifdef __compat_h_macrodef__
# define Brand rand
# define Balloca alloca
# define Bmalloc malloc
# define Bcalloc calloc
# define Brealloc realloc
# define Bfree free
# define Bopen open
# define Bclose close
# define Bwrite write
# define Bread read
# define Blseek lseek
# if defined(__GNUC__)
# define Btell(h) lseek(h,0,SEEK_CUR)
# else
# define Btell tell
# endif
# define Bstat stat
# define Bfopen fopen
# define Bfclose fclose
# define Bfeof feof
# define Bfgetc fgetc
# define Brewind rewind
# define Bfgets fgets
# define Bfputc fputc
# define Bfputs fputs
# define Bfread fread
# define Bfwrite fwrite
# define Bfprintf fprintf
# define Bstrdup strdup
# define Bstrcpy strcpy
# define Bstrncpy strncpy
# define Bstrcmp strcmp
# define Bstrncmp strncmp
# if defined(__WATCOMC__) || defined(_MSC_VER) || defined(__QNX__)
# define Bstrcasecmp stricmp
# define Bstrncasecmp strnicmp
# else
# define Bstrcasecmp strcasecmp
# define Bstrncasecmp strncasecmp
# endif
# if defined(_WIN32)
# define Bstrlwr strlwr
# define Bstrupr strupr
# define Bmkdir(s,x) mkdir(s)
# else
# define Bmkdir mkdir
# endif
# define Bstrcat strcat
# define Bstrncat strncat
# define Bstrlen strlen
# define Bstrchr strchr
# define Bstrrchr strrchr
# define Batoi atoi
# define Batol atol
# define Bstrtol strtol
# define Bstrtoul strtoul
# define Bstrtod strtod
# define Btoupper toupper
# define Btolower tolower
# define Bmemcpy memcpy
# define Bmemmove memmove
# define Bmemchr memchr
# define Bmemset memset
# define Bmemcmp memcmp
# define Bprintf printf
# define Bsprintf sprintf
# ifdef _MSC_VER
# define Bsnprintf _snprintf
# define Bvsnprintf _vsnprintf
# else
# define Bsnprintf snprintf
# define Bvsnprintf vsnprintf
# endif
# define Bvfprintf vfprintf
# define Bgetcwd getcwd
# define Bgetenv getenv
# define Btime() time(NULL)
#else
int Brand(void);
void *Bmalloc(bsize_t size);
void Bfree(void *ptr);
int Bopen(const char *pathname, int flags, unsigned mode);
int Bclose(int fd);
bssize_t Bwrite(int fd, const void *buf, bsize_t count);
bssize_t Bread(int fd, void *buf, bsize_t count);
int Blseek(int fildes, int offset, int whence);
BFILE *Bfopen(const char *path, const char *mode);
int Bfclose(BFILE *stream);
int Bfeof(BFILE *stream);
int Bfgetc(BFILE *stream);
void Brewind(BFILE *stream);
char *Bfgets(char *s, int size, BFILE *stream);
int Bfputc(int c, BFILE *stream);
int Bfputs(const char *s, BFILE *stream);
bsize_t Bfread(void *ptr, bsize_t size, bsize_t nmemb, BFILE *stream);
bsize_t Bfwrite(const void *ptr, bsize_t size, bsize_t nmemb, BFILE *stream);
char *Bstrdup(const char *s);
char *Bstrcpy(char *dest, const char *src);
char *Bstrncpy(char *dest, const char *src, bsize_t n);
int Bstrcmp(const char *s1, const char *s2);
int Bstrncmp(const char *s1, const char *s2, bsize_t n);
int Bstrcasecmp(const char *s1, const char *s2);
int Bstrncasecmp(const char *s1, const char *s2, bsize_t n);
char *Bstrcat(char *dest, const char *src);
char *Bstrncat(char *dest, const char *src, bsize_t n);
bsize_t Bstrlen(const char *s);
char *Bstrchr(const char *s, int c);
char *Bstrrchr(const char *s, int c);
int Batoi(const char *nptr);
long Batol(const char *nptr);
long int Bstrtol(const char *nptr, char **endptr, int base);
unsigned long int Bstrtoul(const char *nptr, char **endptr, int base);
void *Bmemcpy(void *dest, const void *src, bsize_t n);
void *Bmemmove(void *dest, const void *src, bsize_t n);
void *Bmemchr(const void *s, int c, bsize_t n);
void *Bmemset(void *s, int c, bsize_t n);
int Bmemcmp(const void *s1, const void *s2, bsize_t n);
int Bprintf(const char *format, ...);
int Bsprintf(char *str, const char *format, ...);
int Bsnprintf(char *str, bsize_t size, const char *format, ...);
int Bvsnprintf(char *str, bsize_t size, const char *format, va_list ap);
char *Bgetcwd(char *buf, bsize_t size);
char *Bgetenv(const char *name);
#endif
char *Bgethomedir(void);
unsigned int Bgetsysmemsize(void);
int Bcorrectfilename(char *filename, int removefn);
int Bcanonicalisefilename(char *filename, int removefn);
char *Bgetsystemdrives(void);
long Bfilelength(int fd);
char *Bstrtoken(char *s, char *delim, char **ptrptr, int chop);
long Bwildmatch (const char *i, const char *j);
#if !defined(_WIN32)
char *Bstrlwr(char *);
char *Bstrupr(char *);
#endif
#ifdef __cplusplus
}
#endif
#endif // __compat_h__

View file

@ -0,0 +1,20 @@
#ifndef __crc32_h__
#define __crc32_h__
#ifdef __cplusplus
extern "C" {
#endif
void initcrc32table(void);
unsigned long crc32once(unsigned char *blk, unsigned long len);
void crc32init(unsigned long *crcvar);
void crc32block(unsigned long *crcvar, unsigned char *blk, unsigned long len);
unsigned long crc32finish(unsigned long *crcvar);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -0,0 +1,332 @@
#ifndef __dxdidf_h__
#define __dxdidf_h__
// Keyboard
static DIOBJECTDATAFORMAT c_dfDIKeyboard_odf[] = {
{ &GUID_Key, 0, 0x8000000C, 0x00000000 },
{ &GUID_Key, 1, 0x8000010C, 0x00000000 },
{ &GUID_Key, 2, 0x8000020C, 0x00000000 },
{ &GUID_Key, 3, 0x8000030C, 0x00000000 },
{ &GUID_Key, 4, 0x8000040C, 0x00000000 },
{ &GUID_Key, 5, 0x8000050C, 0x00000000 },
{ &GUID_Key, 6, 0x8000060C, 0x00000000 },
{ &GUID_Key, 7, 0x8000070C, 0x00000000 },
{ &GUID_Key, 8, 0x8000080C, 0x00000000 },
{ &GUID_Key, 9, 0x8000090C, 0x00000000 },
{ &GUID_Key, 10, 0x80000A0C, 0x00000000 },
{ &GUID_Key, 11, 0x80000B0C, 0x00000000 },
{ &GUID_Key, 12, 0x80000C0C, 0x00000000 },
{ &GUID_Key, 13, 0x80000D0C, 0x00000000 },
{ &GUID_Key, 14, 0x80000E0C, 0x00000000 },
{ &GUID_Key, 15, 0x80000F0C, 0x00000000 },
{ &GUID_Key, 16, 0x8000100C, 0x00000000 },
{ &GUID_Key, 17, 0x8000110C, 0x00000000 },
{ &GUID_Key, 18, 0x8000120C, 0x00000000 },
{ &GUID_Key, 19, 0x8000130C, 0x00000000 },
{ &GUID_Key, 20, 0x8000140C, 0x00000000 },
{ &GUID_Key, 21, 0x8000150C, 0x00000000 },
{ &GUID_Key, 22, 0x8000160C, 0x00000000 },
{ &GUID_Key, 23, 0x8000170C, 0x00000000 },
{ &GUID_Key, 24, 0x8000180C, 0x00000000 },
{ &GUID_Key, 25, 0x8000190C, 0x00000000 },
{ &GUID_Key, 26, 0x80001A0C, 0x00000000 },
{ &GUID_Key, 27, 0x80001B0C, 0x00000000 },
{ &GUID_Key, 28, 0x80001C0C, 0x00000000 },
{ &GUID_Key, 29, 0x80001D0C, 0x00000000 },
{ &GUID_Key, 30, 0x80001E0C, 0x00000000 },
{ &GUID_Key, 31, 0x80001F0C, 0x00000000 },
{ &GUID_Key, 32, 0x8000200C, 0x00000000 },
{ &GUID_Key, 33, 0x8000210C, 0x00000000 },
{ &GUID_Key, 34, 0x8000220C, 0x00000000 },
{ &GUID_Key, 35, 0x8000230C, 0x00000000 },
{ &GUID_Key, 36, 0x8000240C, 0x00000000 },
{ &GUID_Key, 37, 0x8000250C, 0x00000000 },
{ &GUID_Key, 38, 0x8000260C, 0x00000000 },
{ &GUID_Key, 39, 0x8000270C, 0x00000000 },
{ &GUID_Key, 40, 0x8000280C, 0x00000000 },
{ &GUID_Key, 41, 0x8000290C, 0x00000000 },
{ &GUID_Key, 42, 0x80002A0C, 0x00000000 },
{ &GUID_Key, 43, 0x80002B0C, 0x00000000 },
{ &GUID_Key, 44, 0x80002C0C, 0x00000000 },
{ &GUID_Key, 45, 0x80002D0C, 0x00000000 },
{ &GUID_Key, 46, 0x80002E0C, 0x00000000 },
{ &GUID_Key, 47, 0x80002F0C, 0x00000000 },
{ &GUID_Key, 48, 0x8000300C, 0x00000000 },
{ &GUID_Key, 49, 0x8000310C, 0x00000000 },
{ &GUID_Key, 50, 0x8000320C, 0x00000000 },
{ &GUID_Key, 51, 0x8000330C, 0x00000000 },
{ &GUID_Key, 52, 0x8000340C, 0x00000000 },
{ &GUID_Key, 53, 0x8000350C, 0x00000000 },
{ &GUID_Key, 54, 0x8000360C, 0x00000000 },
{ &GUID_Key, 55, 0x8000370C, 0x00000000 },
{ &GUID_Key, 56, 0x8000380C, 0x00000000 },
{ &GUID_Key, 57, 0x8000390C, 0x00000000 },
{ &GUID_Key, 58, 0x80003A0C, 0x00000000 },
{ &GUID_Key, 59, 0x80003B0C, 0x00000000 },
{ &GUID_Key, 60, 0x80003C0C, 0x00000000 },
{ &GUID_Key, 61, 0x80003D0C, 0x00000000 },
{ &GUID_Key, 62, 0x80003E0C, 0x00000000 },
{ &GUID_Key, 63, 0x80003F0C, 0x00000000 },
{ &GUID_Key, 64, 0x8000400C, 0x00000000 },
{ &GUID_Key, 65, 0x8000410C, 0x00000000 },
{ &GUID_Key, 66, 0x8000420C, 0x00000000 },
{ &GUID_Key, 67, 0x8000430C, 0x00000000 },
{ &GUID_Key, 68, 0x8000440C, 0x00000000 },
{ &GUID_Key, 69, 0x8000450C, 0x00000000 },
{ &GUID_Key, 70, 0x8000460C, 0x00000000 },
{ &GUID_Key, 71, 0x8000470C, 0x00000000 },
{ &GUID_Key, 72, 0x8000480C, 0x00000000 },
{ &GUID_Key, 73, 0x8000490C, 0x00000000 },
{ &GUID_Key, 74, 0x80004A0C, 0x00000000 },
{ &GUID_Key, 75, 0x80004B0C, 0x00000000 },
{ &GUID_Key, 76, 0x80004C0C, 0x00000000 },
{ &GUID_Key, 77, 0x80004D0C, 0x00000000 },
{ &GUID_Key, 78, 0x80004E0C, 0x00000000 },
{ &GUID_Key, 79, 0x80004F0C, 0x00000000 },
{ &GUID_Key, 80, 0x8000500C, 0x00000000 },
{ &GUID_Key, 81, 0x8000510C, 0x00000000 },
{ &GUID_Key, 82, 0x8000520C, 0x00000000 },
{ &GUID_Key, 83, 0x8000530C, 0x00000000 },
{ &GUID_Key, 84, 0x8000540C, 0x00000000 },
{ &GUID_Key, 85, 0x8000550C, 0x00000000 },
{ &GUID_Key, 86, 0x8000560C, 0x00000000 },
{ &GUID_Key, 87, 0x8000570C, 0x00000000 },
{ &GUID_Key, 88, 0x8000580C, 0x00000000 },
{ &GUID_Key, 89, 0x8000590C, 0x00000000 },
{ &GUID_Key, 90, 0x80005A0C, 0x00000000 },
{ &GUID_Key, 91, 0x80005B0C, 0x00000000 },
{ &GUID_Key, 92, 0x80005C0C, 0x00000000 },
{ &GUID_Key, 93, 0x80005D0C, 0x00000000 },
{ &GUID_Key, 94, 0x80005E0C, 0x00000000 },
{ &GUID_Key, 95, 0x80005F0C, 0x00000000 },
{ &GUID_Key, 96, 0x8000600C, 0x00000000 },
{ &GUID_Key, 97, 0x8000610C, 0x00000000 },
{ &GUID_Key, 98, 0x8000620C, 0x00000000 },
{ &GUID_Key, 99, 0x8000630C, 0x00000000 },
{ &GUID_Key, 100, 0x8000640C, 0x00000000 },
{ &GUID_Key, 101, 0x8000650C, 0x00000000 },
{ &GUID_Key, 102, 0x8000660C, 0x00000000 },
{ &GUID_Key, 103, 0x8000670C, 0x00000000 },
{ &GUID_Key, 104, 0x8000680C, 0x00000000 },
{ &GUID_Key, 105, 0x8000690C, 0x00000000 },
{ &GUID_Key, 106, 0x80006A0C, 0x00000000 },
{ &GUID_Key, 107, 0x80006B0C, 0x00000000 },
{ &GUID_Key, 108, 0x80006C0C, 0x00000000 },
{ &GUID_Key, 109, 0x80006D0C, 0x00000000 },
{ &GUID_Key, 110, 0x80006E0C, 0x00000000 },
{ &GUID_Key, 111, 0x80006F0C, 0x00000000 },
{ &GUID_Key, 112, 0x8000700C, 0x00000000 },
{ &GUID_Key, 113, 0x8000710C, 0x00000000 },
{ &GUID_Key, 114, 0x8000720C, 0x00000000 },
{ &GUID_Key, 115, 0x8000730C, 0x00000000 },
{ &GUID_Key, 116, 0x8000740C, 0x00000000 },
{ &GUID_Key, 117, 0x8000750C, 0x00000000 },
{ &GUID_Key, 118, 0x8000760C, 0x00000000 },
{ &GUID_Key, 119, 0x8000770C, 0x00000000 },
{ &GUID_Key, 120, 0x8000780C, 0x00000000 },
{ &GUID_Key, 121, 0x8000790C, 0x00000000 },
{ &GUID_Key, 122, 0x80007A0C, 0x00000000 },
{ &GUID_Key, 123, 0x80007B0C, 0x00000000 },
{ &GUID_Key, 124, 0x80007C0C, 0x00000000 },
{ &GUID_Key, 125, 0x80007D0C, 0x00000000 },
{ &GUID_Key, 126, 0x80007E0C, 0x00000000 },
{ &GUID_Key, 127, 0x80007F0C, 0x00000000 },
{ &GUID_Key, 128, 0x8000800C, 0x00000000 },
{ &GUID_Key, 129, 0x8000810C, 0x00000000 },
{ &GUID_Key, 130, 0x8000820C, 0x00000000 },
{ &GUID_Key, 131, 0x8000830C, 0x00000000 },
{ &GUID_Key, 132, 0x8000840C, 0x00000000 },
{ &GUID_Key, 133, 0x8000850C, 0x00000000 },
{ &GUID_Key, 134, 0x8000860C, 0x00000000 },
{ &GUID_Key, 135, 0x8000870C, 0x00000000 },
{ &GUID_Key, 136, 0x8000880C, 0x00000000 },
{ &GUID_Key, 137, 0x8000890C, 0x00000000 },
{ &GUID_Key, 138, 0x80008A0C, 0x00000000 },
{ &GUID_Key, 139, 0x80008B0C, 0x00000000 },
{ &GUID_Key, 140, 0x80008C0C, 0x00000000 },
{ &GUID_Key, 141, 0x80008D0C, 0x00000000 },
{ &GUID_Key, 142, 0x80008E0C, 0x00000000 },
{ &GUID_Key, 143, 0x80008F0C, 0x00000000 },
{ &GUID_Key, 144, 0x8000900C, 0x00000000 },
{ &GUID_Key, 145, 0x8000910C, 0x00000000 },
{ &GUID_Key, 146, 0x8000920C, 0x00000000 },
{ &GUID_Key, 147, 0x8000930C, 0x00000000 },
{ &GUID_Key, 148, 0x8000940C, 0x00000000 },
{ &GUID_Key, 149, 0x8000950C, 0x00000000 },
{ &GUID_Key, 150, 0x8000960C, 0x00000000 },
{ &GUID_Key, 151, 0x8000970C, 0x00000000 },
{ &GUID_Key, 152, 0x8000980C, 0x00000000 },
{ &GUID_Key, 153, 0x8000990C, 0x00000000 },
{ &GUID_Key, 154, 0x80009A0C, 0x00000000 },
{ &GUID_Key, 155, 0x80009B0C, 0x00000000 },
{ &GUID_Key, 156, 0x80009C0C, 0x00000000 },
{ &GUID_Key, 157, 0x80009D0C, 0x00000000 },
{ &GUID_Key, 158, 0x80009E0C, 0x00000000 },
{ &GUID_Key, 159, 0x80009F0C, 0x00000000 },
{ &GUID_Key, 160, 0x8000A00C, 0x00000000 },
{ &GUID_Key, 161, 0x8000A10C, 0x00000000 },
{ &GUID_Key, 162, 0x8000A20C, 0x00000000 },
{ &GUID_Key, 163, 0x8000A30C, 0x00000000 },
{ &GUID_Key, 164, 0x8000A40C, 0x00000000 },
{ &GUID_Key, 165, 0x8000A50C, 0x00000000 },
{ &GUID_Key, 166, 0x8000A60C, 0x00000000 },
{ &GUID_Key, 167, 0x8000A70C, 0x00000000 },
{ &GUID_Key, 168, 0x8000A80C, 0x00000000 },
{ &GUID_Key, 169, 0x8000A90C, 0x00000000 },
{ &GUID_Key, 170, 0x8000AA0C, 0x00000000 },
{ &GUID_Key, 171, 0x8000AB0C, 0x00000000 },
{ &GUID_Key, 172, 0x8000AC0C, 0x00000000 },
{ &GUID_Key, 173, 0x8000AD0C, 0x00000000 },
{ &GUID_Key, 174, 0x8000AE0C, 0x00000000 },
{ &GUID_Key, 175, 0x8000AF0C, 0x00000000 },
{ &GUID_Key, 176, 0x8000B00C, 0x00000000 },
{ &GUID_Key, 177, 0x8000B10C, 0x00000000 },
{ &GUID_Key, 178, 0x8000B20C, 0x00000000 },
{ &GUID_Key, 179, 0x8000B30C, 0x00000000 },
{ &GUID_Key, 180, 0x8000B40C, 0x00000000 },
{ &GUID_Key, 181, 0x8000B50C, 0x00000000 },
{ &GUID_Key, 182, 0x8000B60C, 0x00000000 },
{ &GUID_Key, 183, 0x8000B70C, 0x00000000 },
{ &GUID_Key, 184, 0x8000B80C, 0x00000000 },
{ &GUID_Key, 185, 0x8000B90C, 0x00000000 },
{ &GUID_Key, 186, 0x8000BA0C, 0x00000000 },
{ &GUID_Key, 187, 0x8000BB0C, 0x00000000 },
{ &GUID_Key, 188, 0x8000BC0C, 0x00000000 },
{ &GUID_Key, 189, 0x8000BD0C, 0x00000000 },
{ &GUID_Key, 190, 0x8000BE0C, 0x00000000 },
{ &GUID_Key, 191, 0x8000BF0C, 0x00000000 },
{ &GUID_Key, 192, 0x8000C00C, 0x00000000 },
{ &GUID_Key, 193, 0x8000C10C, 0x00000000 },
{ &GUID_Key, 194, 0x8000C20C, 0x00000000 },
{ &GUID_Key, 195, 0x8000C30C, 0x00000000 },
{ &GUID_Key, 196, 0x8000C40C, 0x00000000 },
{ &GUID_Key, 197, 0x8000C50C, 0x00000000 },
{ &GUID_Key, 198, 0x8000C60C, 0x00000000 },
{ &GUID_Key, 199, 0x8000C70C, 0x00000000 },
{ &GUID_Key, 200, 0x8000C80C, 0x00000000 },
{ &GUID_Key, 201, 0x8000C90C, 0x00000000 },
{ &GUID_Key, 202, 0x8000CA0C, 0x00000000 },
{ &GUID_Key, 203, 0x8000CB0C, 0x00000000 },
{ &GUID_Key, 204, 0x8000CC0C, 0x00000000 },
{ &GUID_Key, 205, 0x8000CD0C, 0x00000000 },
{ &GUID_Key, 206, 0x8000CE0C, 0x00000000 },
{ &GUID_Key, 207, 0x8000CF0C, 0x00000000 },
{ &GUID_Key, 208, 0x8000D00C, 0x00000000 },
{ &GUID_Key, 209, 0x8000D10C, 0x00000000 },
{ &GUID_Key, 210, 0x8000D20C, 0x00000000 },
{ &GUID_Key, 211, 0x8000D30C, 0x00000000 },
{ &GUID_Key, 212, 0x8000D40C, 0x00000000 },
{ &GUID_Key, 213, 0x8000D50C, 0x00000000 },
{ &GUID_Key, 214, 0x8000D60C, 0x00000000 },
{ &GUID_Key, 215, 0x8000D70C, 0x00000000 },
{ &GUID_Key, 216, 0x8000D80C, 0x00000000 },
{ &GUID_Key, 217, 0x8000D90C, 0x00000000 },
{ &GUID_Key, 218, 0x8000DA0C, 0x00000000 },
{ &GUID_Key, 219, 0x8000DB0C, 0x00000000 },
{ &GUID_Key, 220, 0x8000DC0C, 0x00000000 },
{ &GUID_Key, 221, 0x8000DD0C, 0x00000000 },
{ &GUID_Key, 222, 0x8000DE0C, 0x00000000 },
{ &GUID_Key, 223, 0x8000DF0C, 0x00000000 },
{ &GUID_Key, 224, 0x8000E00C, 0x00000000 },
{ &GUID_Key, 225, 0x8000E10C, 0x00000000 },
{ &GUID_Key, 226, 0x8000E20C, 0x00000000 },
{ &GUID_Key, 227, 0x8000E30C, 0x00000000 },
{ &GUID_Key, 228, 0x8000E40C, 0x00000000 },
{ &GUID_Key, 229, 0x8000E50C, 0x00000000 },
{ &GUID_Key, 230, 0x8000E60C, 0x00000000 },
{ &GUID_Key, 231, 0x8000E70C, 0x00000000 },
{ &GUID_Key, 232, 0x8000E80C, 0x00000000 },
{ &GUID_Key, 233, 0x8000E90C, 0x00000000 },
{ &GUID_Key, 234, 0x8000EA0C, 0x00000000 },
{ &GUID_Key, 235, 0x8000EB0C, 0x00000000 },
{ &GUID_Key, 236, 0x8000EC0C, 0x00000000 },
{ &GUID_Key, 237, 0x8000ED0C, 0x00000000 },
{ &GUID_Key, 238, 0x8000EE0C, 0x00000000 },
{ &GUID_Key, 239, 0x8000EF0C, 0x00000000 },
{ &GUID_Key, 240, 0x8000F00C, 0x00000000 },
{ &GUID_Key, 241, 0x8000F10C, 0x00000000 },
{ &GUID_Key, 242, 0x8000F20C, 0x00000000 },
{ &GUID_Key, 243, 0x8000F30C, 0x00000000 },
{ &GUID_Key, 244, 0x8000F40C, 0x00000000 },
{ &GUID_Key, 245, 0x8000F50C, 0x00000000 },
{ &GUID_Key, 246, 0x8000F60C, 0x00000000 },
{ &GUID_Key, 247, 0x8000F70C, 0x00000000 },
{ &GUID_Key, 248, 0x8000F80C, 0x00000000 },
{ &GUID_Key, 249, 0x8000F90C, 0x00000000 },
{ &GUID_Key, 250, 0x8000FA0C, 0x00000000 },
{ &GUID_Key, 251, 0x8000FB0C, 0x00000000 },
{ &GUID_Key, 252, 0x8000FC0C, 0x00000000 },
{ &GUID_Key, 253, 0x8000FD0C, 0x00000000 },
{ &GUID_Key, 254, 0x8000FE0C, 0x00000000 },
{ &GUID_Key, 255, 0x8000FF0C, 0x00000000 }
};
const DIDATAFORMAT c_dfDIKeyboard = { 24, 16, 0x00000002, 256, 256, c_dfDIKeyboard_odf };
// Mouse
static DIOBJECTDATAFORMAT c_dfDIMouse_odf[] = {
{ &GUID_XAxis, 0, 0x00FFFF03, 0x00000000 },
{ &GUID_YAxis, 4, 0x00FFFF03, 0x00000000 },
{ &GUID_ZAxis, 8, 0x80FFFF03, 0x00000000 },
{ NULL, 12, 0x00FFFF0C, 0x00000000 },
{ NULL, 13, 0x00FFFF0C, 0x00000000 },
{ NULL, 14, 0x80FFFF0C, 0x00000000 },
{ NULL, 15, 0x80FFFF0C, 0x00000000 }
};
const DIDATAFORMAT c_dfDIMouse = { 24, 16, 0x00000002, 16, 7, c_dfDIMouse_odf };
// Joystick
static DIOBJECTDATAFORMAT c_dfDIJoystick_odf[] = {
{ &GUID_XAxis, 0, 0x80FFFF03, 0x00000100 },
{ &GUID_YAxis, 4, 0x80FFFF03, 0x00000100 },
{ &GUID_ZAxis, 8, 0x80FFFF03, 0x00000100 },
{ &GUID_RxAxis, 12, 0x80FFFF03, 0x00000100 },
{ &GUID_RyAxis, 16, 0x80FFFF03, 0x00000100 },
{ &GUID_RzAxis, 20, 0x80FFFF03, 0x00000100 },
{ &GUID_Slider, 24, 0x80FFFF03, 0x00000100 },
{ &GUID_Slider, 28, 0x80FFFF03, 0x00000100 },
{ &GUID_POV, 32, 0x80FFFF10, 0x00000000 },
{ &GUID_POV, 36, 0x80FFFF10, 0x00000000 },
{ &GUID_POV, 40, 0x80FFFF10, 0x00000000 },
{ &GUID_POV, 44, 0x80FFFF10, 0x00000000 },
{ NULL, 48, 0x80FFFF0C, 0x00000000 },
{ NULL, 49, 0x80FFFF0C, 0x00000000 },
{ NULL, 50, 0x80FFFF0C, 0x00000000 },
{ NULL, 51, 0x80FFFF0C, 0x00000000 },
{ NULL, 52, 0x80FFFF0C, 0x00000000 },
{ NULL, 53, 0x80FFFF0C, 0x00000000 },
{ NULL, 54, 0x80FFFF0C, 0x00000000 },
{ NULL, 55, 0x80FFFF0C, 0x00000000 },
{ NULL, 56, 0x80FFFF0C, 0x00000000 },
{ NULL, 57, 0x80FFFF0C, 0x00000000 },
{ NULL, 58, 0x80FFFF0C, 0x00000000 },
{ NULL, 59, 0x80FFFF0C, 0x00000000 },
{ NULL, 60, 0x80FFFF0C, 0x00000000 },
{ NULL, 61, 0x80FFFF0C, 0x00000000 },
{ NULL, 62, 0x80FFFF0C, 0x00000000 },
{ NULL, 63, 0x80FFFF0C, 0x00000000 },
{ NULL, 64, 0x80FFFF0C, 0x00000000 },
{ NULL, 65, 0x80FFFF0C, 0x00000000 },
{ NULL, 66, 0x80FFFF0C, 0x00000000 },
{ NULL, 67, 0x80FFFF0C, 0x00000000 },
{ NULL, 68, 0x80FFFF0C, 0x00000000 },
{ NULL, 69, 0x80FFFF0C, 0x00000000 },
{ NULL, 70, 0x80FFFF0C, 0x00000000 },
{ NULL, 71, 0x80FFFF0C, 0x00000000 },
{ NULL, 72, 0x80FFFF0C, 0x00000000 },
{ NULL, 73, 0x80FFFF0C, 0x00000000 },
{ NULL, 74, 0x80FFFF0C, 0x00000000 },
{ NULL, 75, 0x80FFFF0C, 0x00000000 },
{ NULL, 76, 0x80FFFF0C, 0x00000000 },
{ NULL, 77, 0x80FFFF0C, 0x00000000 },
{ NULL, 78, 0x80FFFF0C, 0x00000000 },
{ NULL, 79, 0x80FFFF0C, 0x00000000 }
};
const DIDATAFORMAT c_dfDIJoystick = { 24, 16, 0x00000001, 80, 44, c_dfDIJoystick_odf };
#endif // __dxdidf_h__

View file

@ -0,0 +1,68 @@
// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman
// Ken Silverman's official web site: "http://www.advsys.net/ken"
// See the included license file "BUILDLIC.TXT" for license info.
#ifndef __editor_h__
#define __editor_h__
#ifdef __cplusplus
extern "C" {
#endif
#define NUMBUILDKEYS 20
extern long qsetmode;
extern short searchsector, searchwall, searchstat;
extern long zmode, kensplayerheight;
extern short defaultspritecstat;
extern short temppicnum, tempcstat, templotag, temphitag, tempextra;
extern char tempshade, temppal, tempxrepeat, tempyrepeat;
extern char somethingintab;
extern char buildkeys[NUMBUILDKEYS];
extern long ydim16, xdimgame, ydimgame, bppgame, xdim2d, ydim2d;
extern int ExtInit(void);
extern void ExtUnInit(void);
extern void ExtPreCheckKeys(void);
#ifdef SUPERBUILD
extern void ExtAnalyzeSprites(void);
#endif
extern void ExtCheckKeys(void);
extern void ExtPreLoadMap(void);
extern void ExtLoadMap(const char *mapname);
extern void ExtPreSaveMap(void);
extern void ExtSaveMap(const char *mapname);
extern const char *ExtGetSectorCaption(short sectnum);
extern const char *ExtGetWallCaption(short wallnum);
extern const char *ExtGetSpriteCaption(short spritenum);
extern void ExtShowSectorData(short sectnum);
extern void ExtShowWallData(short wallnum);
extern void ExtShowSpriteData(short spritenum);
extern void ExtEditSectorData(short sectnum);
extern void ExtEditWallData(short wallnum);
extern void ExtEditSpriteData(short spritenum);
int loadsetup(const char *fn); // from config.c
int writesetup(const char *fn); // from config.c
void editinput(void);
void clearmidstatbar16(void);
long getnumber256(char namestart[80], long num, long maxnumber, char sign);
long getnumber16(char namestart[80], long num, long maxnumber, char sign);
void printmessage256(char name[82]);
void printmessage16(char name[82]);
void getpoint(long searchxe, long searchye, long *x, long *y);
long getpointhighlight(long xplc, long yplc);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -0,0 +1,6 @@
extern const char _engine_cflags[];
extern const char _engine_libs[];
extern const char _engine_uname[];
extern const char _engine_compiler[];
extern const char _engine_date[];

View file

@ -0,0 +1,56 @@
// game.h
void operatesector(short dasector);
void operatesprite(short dasprite);
long changehealth(short snum, short deltahealth);
void changenumbombs(short snum, short deltanumbombs);
void changenummissiles(short snum, short deltanummissiles);
void changenumgrabbers(short snum, short deltanumgrabbers);
void drawstatusflytime(short snum);
void drawstatusbar(short snum);
void prepareboard(char *daboardfilename);
void checktouchsprite(short snum, short sectnum);
void checkgrabbertouchsprite(short snum, short sectnum);
void shootgun(short snum, long x, long y, long z, short daang, long dahoriz, short dasectnum, char guntype);
void analyzesprites(long dax, long day);
void tagcode(void);
void statuslistcode(void);
void activatehitag(short dahitag);
void bombexplode(long i);
void processinput(short snum);
void view(short snum, long *vx, long *vy, long *vz, short *vsectnum, short ang, long horiz);
void updatesectorz(long x, long y, long z, short *sectnum);
void drawscreen(short snum, long dasmoothratio);
void movethings(void);
void fakedomovethings(void);
void fakedomovethingscorrect(void);
void domovethings(void);
void getinput(void);
void initplayersprite(short snum);
void playback(void);
void setup3dscreen(void);
void findrandomspot(long *x, long *y, short *sectnum);
void warp(long *x, long *y, long *z, short *daang, short *dasector);
void warpsprite(short spritenum);
void initlava(void);
void movelava(char *dapic);
void doanimations(void);
long getanimationgoal(long animptr);
long setanimation(long *animptr, long thegoal, long thevel, long theacc);
void checkmasterslaveswitch(void);
long testneighborsectors(short sect1, short sect2);
long loadgame(void);
long savegame(void);
void faketimerhandler(void);
void getpackets(void);
void drawoverheadmap(long cposx, long cposy, long czoom, short cang);
long movesprite(short spritenum, long dx, long dy, long dz, long ceildist, long flordist, long clipmask);
void waitforeverybody(void);
void searchmap(short startsector);
void setinterpolation(long *posptr);
void stopinterpolation(long *posptr);
void updateinterpolations(void);
void dointerpolations(void);
void restoreinterpolations(void);
void printext(long x, long y, char *buffer, short tilenum, char invisiblecol);
void drawtilebackground (long thex, long they, short tilenum, signed char shade, long cx1, long cy1, long cx2, long cy2, char dapalnum);

View file

@ -0,0 +1,211 @@
#ifdef USE_OPENGL
#ifdef RENDERTYPEWIN
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif
#if defined(__APPLE__)
# include <OpenGL/gl.h>
#else
# include <GL/gl.h>
#endif
// get this header from http://oss.sgi.com/projects/ogl-sample/registry/
// if you are missing it
//#include <GL/glext.h>
#if defined(__APPLE__)
# include <OpenGL/glext.h>
#else
# include "glext.h"
#endif
#ifndef GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT
#error You should get an updated copy of glext.h from http://oss.sgi.com/projects/ogl-sample/registry/
#endif
#ifdef DYNAMIC_OPENGL
#ifndef APIENTRY
# define APIENTRY
#endif
extern void (APIENTRY * bglClearColor)( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha );
extern void (APIENTRY * bglClear)( GLbitfield mask );
extern void (APIENTRY * bglColorMask)( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha );
extern void (APIENTRY * bglAlphaFunc)( GLenum func, GLclampf ref );
extern void (APIENTRY * bglBlendFunc)( GLenum sfactor, GLenum dfactor );
extern void (APIENTRY * bglCullFace)( GLenum mode );
extern void (APIENTRY * bglFrontFace)( GLenum mode );
extern void (APIENTRY * bglPolygonOffset)( GLfloat factor, GLfloat units );
extern void (APIENTRY * bglPolygonMode)( GLenum face, GLenum mode );
extern void (APIENTRY * bglEnable)( GLenum cap );
extern void (APIENTRY * bglDisable)( GLenum cap );
extern void (APIENTRY * bglGetFloatv)( GLenum pname, GLfloat *params );
extern void (APIENTRY * bglGetIntegerv)( GLenum pname, GLint *params );
extern void (APIENTRY * bglPushAttrib)( GLbitfield mask );
extern void (APIENTRY * bglPopAttrib)( void );
extern GLenum (APIENTRY * bglGetError)( void );
extern const GLubyte* (APIENTRY * bglGetString)( GLenum name );
extern void (APIENTRY * bglHint)( GLenum target, GLenum mode );
// Depth
extern void (APIENTRY * bglDepthFunc)( GLenum func );
extern void (APIENTRY * bglDepthMask)( GLboolean flag );
extern void (APIENTRY * bglDepthRange)( GLclampd near_val, GLclampd far_val );
// Matrix
extern void (APIENTRY * bglMatrixMode)( GLenum mode );
extern void (APIENTRY * bglOrtho)( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val );
extern void (APIENTRY * bglFrustum)( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val );
extern void (APIENTRY * bglViewport)( GLint x, GLint y, GLsizei width, GLsizei height );
extern void (APIENTRY * bglPushMatrix)( void );
extern void (APIENTRY * bglPopMatrix)( void );
extern void (APIENTRY * bglLoadIdentity)( void );
extern void (APIENTRY * bglLoadMatrixf)( const GLfloat *m );
// Drawing
extern void (APIENTRY * bglBegin)( GLenum mode );
extern void (APIENTRY * bglEnd)( void );
extern void (APIENTRY * bglVertex2f)( GLfloat x, GLfloat y );
extern void (APIENTRY * bglVertex2i)( GLint x, GLint y );
extern void (APIENTRY * bglVertex3d)( GLdouble x, GLdouble y, GLdouble z );
extern void (APIENTRY * bglVertex3fv)( const GLfloat *v );
extern void (APIENTRY * bglColor4f)( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha );
extern void (APIENTRY * bglColor4ub)( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha );
extern void (APIENTRY * bglTexCoord2d)( GLdouble s, GLdouble t );
extern void (APIENTRY * bglTexCoord2f)( GLfloat s, GLfloat t );
// Lighting
extern void (APIENTRY * bglShadeModel)( GLenum mode );
// Raster funcs
extern void (APIENTRY * bglReadPixels)( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels );
// Texture mapping
extern void (APIENTRY * bglTexEnvf)( GLenum target, GLenum pname, GLfloat param );
extern void (APIENTRY * bglGenTextures)( GLsizei n, GLuint *textures ); // 1.1
extern void (APIENTRY * bglDeleteTextures)( GLsizei n, const GLuint *textures); // 1.1
extern void (APIENTRY * bglBindTexture)( GLenum target, GLuint texture ); // 1.1
extern void (APIENTRY * bglTexImage2D)( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels );
extern void (APIENTRY * bglTexSubImage2D)( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ); // 1.1
extern void (APIENTRY * bglTexParameterf)( GLenum target, GLenum pname, GLfloat param );
extern void (APIENTRY * bglTexParameteri)( GLenum target, GLenum pname, GLint param );
extern void (APIENTRY * bglGetTexLevelParameteriv)( GLenum target, GLint level, GLenum pname, GLint *params );
extern void (APIENTRY * bglCompressedTexImage2DARB)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
extern void (APIENTRY * bglGetCompressedTexImageARB)(GLenum, GLint, GLvoid *);
// Fog
extern void (APIENTRY * bglFogf)( GLenum pname, GLfloat param );
extern void (APIENTRY * bglFogi)( GLenum pname, GLint param );
extern void (APIENTRY * bglFogfv)( GLenum pname, const GLfloat *params );
#ifdef RENDERTYPEWIN
// Windows
extern HGLRC (WINAPI * bwglCreateContext)(HDC);
extern BOOL (WINAPI * bwglDeleteContext)(HGLRC);
extern PROC (WINAPI * bwglGetProcAddress)(LPCSTR);
extern BOOL (WINAPI * bwglMakeCurrent)(HDC,HGLRC);
extern BOOL (WINAPI * bwglSwapBuffers)(HDC);
extern int (WINAPI * bwglChoosePixelFormat)(HDC,CONST PIXELFORMATDESCRIPTOR*);
extern int (WINAPI * bwglDescribePixelFormat)(HDC,int,UINT,LPPIXELFORMATDESCRIPTOR);
extern int (WINAPI * bwglGetPixelFormat)(HDC);
extern BOOL (WINAPI * bwglSetPixelFormat)(HDC,int,const PIXELFORMATDESCRIPTOR*);
#endif
#else // DYNAMIC_OPENGL
#define bglClearColor glClearColor
#define bglClear glClear
#define bglColorMask glColorMask
#define bglAlphaFunc glAlphaFunc
#define bglBlendFunc glBlendFunc
#define bglCullFace glCullFace
#define bglFrontFace glFrontFace
#define bglPolygonOffset glPolygonOffset
#define bglPolygonMode glPolygonMode
#define bglEnable glEnable
#define bglDisable glDisable
#define bglGetFloatv glGetFloatv
#define bglGetIntegerv glGetIntegerv
#define bglPushAttrib glPushAttrib
#define bglPopAttrib glPopAttrib
#define bglGetError glGetError
#define bglGetString glGetString
#define bglHint glHint
// Depth
#define bglDepthFunc glDepthFunc
#define bglDepthMask glDepthMask
#define bglDepthRange glDepthRange
// Matrix
#define bglMatrixMode glMatrixMode
#define bglOrtho glOrtho
#define bglFrustum glFrustum
#define bglViewport glViewport
#define bglPushMatrix glPushMatrix
#define bglPopMatrix glPopMatrix
#define bglLoadIdentity glLoadIdentity
#define bglLoadMatrixf glLoadMatrixf
// Drawing
#define bglBegin glBegin
#define bglEnd glEnd
#define bglVertex2f glVertex2f
#define bglVertex2i glVertex2i
#define bglVertex3d glVertex3d
#define bglVertex3fv glVertex3fv
#define bglColor4f glColor4f
#define bglColor4ub glColor4ub
#define bglTexCoord2d glTexCoord2d
#define bglTexCoord2f glTexCoord2f
// Lighting
#define bglShadeModel glShadeModel
// Raster funcs
#define bglReadPixels glReadPixels
// Texture mapping
#define bglTexEnvf glTexEnvf
#define bglGenTextures glGenTextures
#define bglDeleteTextures glDeleteTextures
#define bglBindTexture glBindTexture
#define bglTexImage2D glTexImage2D
#define bglTexSubImage2D glTexSubImage2D
#define bglTexParameterf glTexParameterf
#define bglTexParameteri glTexParameteri
#define bglGetTexLevelParameteriv glGetTexLevelParameteriv
#define bglCompressedTexImage2DARB glCompressedTexImage2DARB
#define bglGetCompressedTexImageARB glGetCompressedTexImageARB
// Fog
#define bglFogf glFogf
#define bglFogi glFogi
#define bglFogfv glFogfv
#ifdef RENDERTYPEWIN
#define bwglCreateContext wglCreateContext
#define bwglDeleteContext wglDeleteContext
#define bwglGetProcAddress wglGetProcAddress
#define bwglMakeCurrent wglMakeCurrent
#define bwglSwapBuffers SwapBuffers
#define bwglChoosePixelFormat ChoosePixelFormat
#define bwglDescribePixelFormat DescribePixelFormat
#define bwglGetPixelFormat GetPixelFormat
#define bwglSetPixelFormat SetPixelFormat
#endif
#endif
#endif //USE_OPENGL
extern char *gldriver;
int loadgldriver(const char *driver);
int loadglextensions(void);
int unloadgldriver(void);

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,15 @@
#ifndef __gtkbits_h__
#define __gtkbits_h__
extern void gtkbuild_init(int *argc, char ***argv);
extern void gtkbuild_exit(int r);
extern int gtkbuild_msgbox(char *name, char *msg);
extern int gtkbuild_ynbox(char *name, char *msg);
extern void gtkbuild_create_startwin(void);
extern void gtkbuild_settitle_startwin(const char *title);
extern void gtkbuild_puts_startwin(const char *str);
extern void gtkbuild_close_startwin(void);
extern void gtkbuild_update_startwin(void);
extern void *gtkbuild_get_app_icon(void);
#endif

View file

@ -0,0 +1,21 @@
//High-level (easy) picture loading function:
extern void kpzload (const char *, long *, long *, long *, long *);
//Low-level PNG/JPG functions:
extern void kpgetdim (const char *, long, long *, long *);
extern long kprender (const char *, long, long, long, long, long, long, long);
//ZIP functions:
extern long kzaddstack (const char *);
extern void kzuninit ();
extern long kzopen (const char *);
extern long kzread (void *, long);
extern long kzfilelength ();
extern long kzseek (long, long);
extern long kztell ();
extern long kzgetc ();
extern long kzeof ();
extern void kzclose ();
extern void kzfindfilestart (const char *); //pass wildcard string
extern long kzfindfile (char *); //you alloc buf, returns 1:found,0:~found

101
polymer/build/include/lzf.h Normal file
View file

@ -0,0 +1,101 @@
/*
* Copyright (c) 2000-2005 Marc Alexander Lehmann <schmorp@schmorp.de>
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-
* CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-
* CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH-
* ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Alternatively, the contents of this file may be used under the terms of
* the GNU General Public License version 2 (the "GPL"), in which case the
* provisions of the GPL are applicable instead of the above. If you wish to
* allow the use of your version of this file only under the terms of the
* GPL and not to allow others to use your version of this file under the
* BSD license, indicate your decision by deleting the provisions above and
* replace them with the notice and other provisions required by the GPL. If
* you do not delete the provisions above, a recipient may use your version
* of this file under either the BSD or the GPL.
*/
#ifndef LZF_H
#define LZF_H
/***********************************************************************
**
** lzf -- an extremely fast/free compression/decompression-method
** http://liblzf.plan9.de/
**
** This algorithm is believed to be patent-free.
**
***********************************************************************/
#define LZF_VERSION 0x0105 /* 1.5 */
/*
* Compress in_len bytes stored at the memory block starting at
* in_data and write the result to out_data, up to a maximum length
* of out_len bytes.
*
* If the output buffer is not large enough or any error occurs
* return 0, otherwise return the number of bytes used (which might
* be considerably larger than in_len, so it makes sense to always
* use out_len == in_len - 1), to ensure _some_ compression, and store
* the data uncompressed otherwise.
*
* lzf_compress might use different algorithms on different systems and
* even diferent runs, thus might result in different compressed strings
* depending on the phase of the moon or similar factors. However, all
* these strings are architecture-independent and will result in the
* original data when decompressed using lzf_decompress.
*
* The buffers must not be overlapping.
*
* If the option LZF_STATE_ARG is enabled, an extra argument must be
* supplied which is not reflected in this header file. Refer to lzfP.h
* and lzf_c.c.
*
*/
unsigned int
lzf_compress (const void *const in_data, unsigned int in_len,
void *out_data, unsigned int out_len);
/*
* Decompress data compressed with some version of the lzf_compress
* function and stored at location in_data and length in_len. The result
* will be stored at out_data up to a maximum of out_len characters.
*
* If the output buffer is not large enough to hold the decompressed
* data, a 0 is returned and errno is set to E2BIG. Otherwise the number
* of decompressed bytes (i.e. the original length of the data) is
* returned.
*
* If an error in the compressed data is detected, a zero is returned and
* errno is set to EINVAL.
*
* This function is very fast, about as fast as a copying loop.
*/
unsigned int
lzf_decompress (const void *const in_data, unsigned int in_len,
void *out_data, unsigned int out_len);
#endif

View file

@ -0,0 +1,2 @@
long lzwcompress (unsigned char *ucompbuf, long ucompleng, unsigned char *compbuf);
long lzwuncompress (unsigned char *compbuf, long compleng, unsigned char *ucompbuf, long ucompleng);

View file

@ -0,0 +1,38 @@
/* MD4.H - header file for MD4C.C
Modified from original version published in RFC1320 by
Jonathon Fowler (jonof@edgenetwork.org)
*/
/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.
License to copy and use this software is granted provided that it
is identified as the "RSA Data Security, Inc. MD4 Message-Digest
Algorithm" in all material mentioning or referencing this software
or this function.
License is also granted to make and use derivative works provided
that such works are identified as "derived from the RSA Data
Security, Inc. MD4 Message-Digest Algorithm" in all material
mentioning or referencing the derived work.
RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.
These notices must be retained in any copies of any part of this
documentation and/or software.
*/
/* MD4 context. */
typedef struct {
unsigned long state[4]; /* state (ABCD) */
unsigned long count[2]; /* number of bits, modulo 2^64 (lsb first) */
unsigned char buffer[64]; /* input buffer */
} MD4_CTX;
void md4once(unsigned char *block, unsigned int len, unsigned char digest[16]);
void md4init(MD4_CTX *);
void md4block(MD4_CTX *, unsigned char *, unsigned int);
void md4finish(unsigned char [16], MD4_CTX *);

View file

@ -0,0 +1,29 @@
// mmulti.h
#ifndef __mmulti_h__
#define __mmulti_h__
#define MAXMULTIPLAYERS 16
extern long myconnectindex, numplayers;
extern long connecthead, connectpoint2[MAXMULTIPLAYERS];
extern char syncstate;
long initmultiplayersparms(long argc, char **argv);
long initmultiplayerscycle(void);
void initmultiplayers(long argc, char **argv, char damultioption, char dacomrateoption, char dapriority);
void setpackettimeout(long datimeoutcount, long daresendagaincount);
void uninitmultiplayers(void);
void sendlogon(void);
void sendlogoff(void);
long getoutputcirclesize(void);
void setsocket(short newsocket);
void sendpacket(long other, char *bufptr, long messleng);
long getpacket(long *other, char *bufptr);
void flushpackets(void);
void genericmultifunction(long other, char *bufptr, long messleng, long command);
long isvalidipaddress(char *st);
#endif // __mmulti_h__

View file

@ -0,0 +1,65 @@
#ifndef __MMULTIMSGS_H__
#define __MMULTIMSGS_H__
/*
* Ok, so this header file defines the message bytes and outlines the basic
* message descriptions for out-of-band messages that are common to all games
* that utilize my net code. Once a game determines that it is indeed talking
* to another peer of the same genus, the rest is up to the game itself to
* decide, but for basic stuff, the interfaces will be identical.
*
* Why am I not choosing to implement all this engine-side? Because all the
* games are different and about the only thing they are guaranteed to use in
* common that I can be certain of is the services my net code will provide.
* So, since I can't code anything in particular with every Build game in mind,
* I'm putting handling all the game-visible messages into the game's domain.
* The engine will still handle its own internal messages because the game
* never sees them. Ever.
*
* CMDs are messages sent by a peer to another, and RSPs are the replies.
*
* The master of the network game, regardless if the eventual game is talking
* with a peer-to-peer design or not, shall enumerate each peer as it joins
* and the master will always assign itself peer number 0. This simplifies
* things all-round because each peer that joins automatically knows that
* id 0 is its master and it already knows the master's address. Technically
* every other peer who joins may get a sequential number for its id so maybe
* even transmitting the peer unique ids is unnecessary and we'd be easier
* just sending a number of players, but the less craftiness at this point
* in time, the better.
*
* -- Jonathon
*/
#define MSGPROTOVER 0x00
// 0x00 20031209
#define MSG_CMD_GETGAMEINFO 0x10
// char MSG_CMD_GETGAMEINFO
// char MSGPROTOVER
#define MSG_RSP_BADPROTO 0x11
// char MSG_RSP_BADPROTO
#define MSG_RSP_NOGAME 0x12
// char MSG_RSP_NOGAME
// char[8] gamename
#define MSG_RSP_GAMEINFO 0x13
// char MSG_RSP_GAMEINFO
// char[8] gamename eg. DUKE3DSW/DUKE3D\x00\x00/DUKE3DAT
// ... other information particular to the game
#define MSG_CMD_JOINGAME 0x20
// char MSG_CMD_JOINGAME
#define MSG_RSP_GAMEINPROG 0x21
// char MSG_RSP_GAMEINPROG
#define MSG_RSP_JOINACCEPTED 0x22
// char MSG_RSP_JOINACCEPTED
// short uniqueid
// char numtofollow
// short[numtofollow] peeruid
// ... other information particular to the game
#define MSG_RSP_GAMEFULL 0x23
// char MSG_RSP_GAMEFULL
#endif

View file

@ -0,0 +1,49 @@
//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

View file

@ -0,0 +1,77 @@
// On-screen display (ie. console)
// for the Build Engine
// by Jonathon Fowler (jonof@edgenetwk.com)
#ifndef __osd_h__
#define __osd_h__
typedef struct {
int numparms;
const char *name;
const char **parms;
const char *raw;
} osdfuncparm_t;
#define OSDCMD_OK 0
#define OSDCMD_SHOWHELP 1
// initializes things
void OSD_Init(void);
// sets the file to echo output to
void OSD_SetLogFile(char *fn);
// sets the functions the OSD will call to interrogate the environment
void OSD_SetFunctions(
void (*drawchar)(int,int,char,int,int),
void (*drawstr)(int,int,char*,int,int,int),
void (*drawcursor)(int,int,int,int),
int (*colwidth)(int),
int (*rowheight)(int),
void (*clearbg)(int,int),
int (*gettime)(void),
void (*onshow)(int)
);
// sets the parameters for presenting the text
void OSD_SetParameters(
int promptshade, int promptpal,
int editshade, int editpal,
int textshade, int textpal
);
// sets the scancode for the key which activates the onscreen display
void OSD_CaptureKey(int sc);
// handles keyboard input when capturing input. returns 0 if key was handled
// or the scancode if it should be handled by the game.
int OSD_HandleKey(int sc, int press);
// handles the readjustment when screen resolution changes
void OSD_ResizeDisplay(int w,int h);
// shows or hides the onscreen display
void OSD_ShowDisplay(int onf);
// draw the osd to the screen
void OSD_Draw(void);
// just like printf
void OSD_Printf(const char *fmt, ...);
#define printOSD OSD_Printf
// executes buffered commands
void OSD_DispatchQueued(void);
// executes a string
int OSD_Dispatch(const char *cmd);
// registers a function
// name = name of the function
// help = a short help string
// func = the entry point to the function
int OSD_RegisterFunction(const char *name, const char *help, int (*func)(const osdfuncparm_t*));
#endif // __osd_h__

View file

@ -0,0 +1,7 @@
#ifndef __osxbits_h__
#define __osxbits_h__
int osx_msgbox(char *name, char *msg);
int osx_ynbox(char *name, char *msg);
#endif

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,26 @@
typedef struct {
char *textbuf;
unsigned int textlength;
char *ltextptr; // pointer to start of the last token fetched (use this for line numbers)
char *textptr;
char *eof;
char *filename;
int linenum;
long *lineoffs;
} scriptfile;
char *scriptfile_gettoken(scriptfile *sf);
int scriptfile_getnumber(scriptfile *sf, int *num);
int scriptfile_getdouble(scriptfile *sf, double *num);
int scriptfile_getstring(scriptfile *sf, char **st);
int scriptfile_getsymbol(scriptfile *sf, int *num);
int scriptfile_getlinum(scriptfile *sf, char *ptr);
int scriptfile_getbraces(scriptfile *sf, char **braceend);
scriptfile *scriptfile_fromfile(char *fn);
scriptfile *scriptfile_fromstring(char *string);
void scriptfile_close(scriptfile *sf);
int scriptfile_getsymbolvalue(char *name, int *val);
int scriptfile_addsymbolvalue(char *name, int val);
void scriptfile_clearsymbols(void);

View file

@ -0,0 +1,21 @@
// SDL interface layer
// for the Build Engine
// by Jonathon Fowler (jonof@edgenetwk.com)
#ifndef __build_interface_layer__
#define __build_interface_layer__ SDL
#include "baselayer.h"
struct sdlappicon {
int width,height;
unsigned int *pixels;
unsigned char *mask;
};
#else
#if (__build_interface_layer__ != SDL)
#error "Already using the " __build_interface_layer__ ". Can't now use SDL."
#endif
#endif // __build_interface_layer__

View file

@ -0,0 +1,15 @@
typedef struct {
unsigned long samplerate; // sample rate of the sound
unsigned short channels; // number of channels
unsigned short bitspersample; // bits per sample
unsigned short format; // 0 = pcm
unsigned long soundlength; // bytes required for sound storage
} SoundInfo;
int ReadVOCInfo(int fh, SoundInfo *snd);
int ReadVOCData(int fh, char *data, int bufferlen);
int ReadWAVInfo(int fh, SoundInfo *snd);
int ReadWAVData(int fh, char *data, int bufferlen);

View file

@ -0,0 +1,159 @@
#ifdef USE_C_FUNCTION_PRAGMAS
long sqr(long a);
long scale(long a, long d, long c);
long mulscale(long a, long d, long c);
long mulscale1(long a, long d);
long mulscale2(long a, long d);
long mulscale3(long a, long d);
long mulscale4(long a, long d);
long mulscale5(long a, long d);
long mulscale6(long a, long d);
long mulscale7(long a, long d);
long mulscale8(long a, long d);
long mulscale9(long a, long d);
long mulscale10(long a, long d);
long mulscale11(long a, long d);
long mulscale12(long a, long d);
long mulscale13(long a, long d);
long mulscale14(long a, long d);
long mulscale15(long a, long d);
long mulscale16(long a, long d);
long mulscale17(long a, long d);
long mulscale18(long a, long d);
long mulscale19(long a, long d);
long mulscale20(long a, long d);
long mulscale21(long a, long d);
long mulscale22(long a, long d);
long mulscale23(long a, long d);
long mulscale24(long a, long d);
long mulscale25(long a, long d);
long mulscale26(long a, long d);
long mulscale27(long a, long d);
long mulscale28(long a, long d);
long mulscale29(long a, long d);
long mulscale30(long a, long d);
long mulscale31(long a, long d);
long mulscale32(long a, long d);
long dmulscale(long a, long d, long S, long D, long c);
long dmulscale1(long a, long d, long S, long D);
long dmulscale2(long a, long d, long S, long D);
long dmulscale3(long a, long d, long S, long D);
long dmulscale4(long a, long d, long S, long D);
long dmulscale5(long a, long d, long S, long D);
long dmulscale6(long a, long d, long S, long D);
long dmulscale7(long a, long d, long S, long D);
long dmulscale8(long a, long d, long S, long D);
long dmulscale9(long a, long d, long S, long D);
long dmulscale10(long a, long d, long S, long D);
long dmulscale11(long a, long d, long S, long D);
long dmulscale12(long a, long d, long S, long D);
long dmulscale13(long a, long d, long S, long D);
long dmulscale14(long a, long d, long S, long D);
long dmulscale15(long a, long d, long S, long D);
long dmulscale16(long a, long d, long S, long D);
long dmulscale17(long a, long d, long S, long D);
long dmulscale18(long a, long d, long S, long D);
long dmulscale19(long a, long d, long S, long D);
long dmulscale20(long a, long d, long S, long D);
long dmulscale21(long a, long d, long S, long D);
long dmulscale22(long a, long d, long S, long D);
long dmulscale23(long a, long d, long S, long D);
long dmulscale24(long a, long d, long S, long D);
long dmulscale25(long a, long d, long S, long D);
long dmulscale26(long a, long d, long S, long D);
long dmulscale27(long a, long d, long S, long D);
long dmulscale28(long a, long d, long S, long D);
long dmulscale29(long a, long d, long S, long D);
long dmulscale30(long a, long d, long S, long D);
long dmulscale31(long a, long d, long S, long D);
long dmulscale32(long a, long d, long S, long D);
long tmulscale1(long a, long d, long b, long c, long S, long D);
long tmulscale2(long a, long d, long b, long c, long S, long D);
long tmulscale3(long a, long d, long b, long c, long S, long D);
long tmulscale4(long a, long d, long b, long c, long S, long D);
long tmulscale5(long a, long d, long b, long c, long S, long D);
long tmulscale6(long a, long d, long b, long c, long S, long D);
long tmulscale7(long a, long d, long b, long c, long S, long D);
long tmulscale8(long a, long d, long b, long c, long S, long D);
long tmulscale9(long a, long d, long b, long c, long S, long D);
long tmulscale10(long a, long d, long b, long c, long S, long D);
long tmulscale11(long a, long d, long b, long c, long S, long D);
long tmulscale12(long a, long d, long b, long c, long S, long D);
long tmulscale13(long a, long d, long b, long c, long S, long D);
long tmulscale14(long a, long d, long b, long c, long S, long D);
long tmulscale15(long a, long d, long b, long c, long S, long D);
long tmulscale16(long a, long d, long b, long c, long S, long D);
long tmulscale17(long a, long d, long b, long c, long S, long D);
long tmulscale18(long a, long d, long b, long c, long S, long D);
long tmulscale19(long a, long d, long b, long c, long S, long D);
long tmulscale20(long a, long d, long b, long c, long S, long D);
long tmulscale21(long a, long d, long b, long c, long S, long D);
long tmulscale22(long a, long d, long b, long c, long S, long D);
long tmulscale23(long a, long d, long b, long c, long S, long D);
long tmulscale24(long a, long d, long b, long c, long S, long D);
long tmulscale25(long a, long d, long b, long c, long S, long D);
long tmulscale26(long a, long d, long b, long c, long S, long D);
long tmulscale27(long a, long d, long b, long c, long S, long D);
long tmulscale28(long a, long d, long b, long c, long S, long D);
long tmulscale29(long a, long d, long b, long c, long S, long D);
long tmulscale30(long a, long d, long b, long c, long S, long D);
long tmulscale31(long a, long d, long b, long c, long S, long D);
long tmulscale32(long a, long d, long b, long c, long S, long D);
long divscale(long a, long b, long c);
long divscale1(long a, long b);
long divscale2(long a, long b);
long divscale3(long a, long b);
long divscale4(long a, long b);
long divscale5(long a, long b);
long divscale6(long a, long b);
long divscale7(long a, long b);
long divscale8(long a, long b);
long divscale9(long a, long b);
long divscale10(long a, long b);
long divscale11(long a, long b);
long divscale12(long a, long b);
long divscale13(long a, long b);
long divscale14(long a, long b);
long divscale15(long a, long b);
long divscale16(long a, long b);
long divscale17(long a, long b);
long divscale18(long a, long b);
long divscale19(long a, long b);
long divscale20(long a, long b);
long divscale21(long a, long b);
long divscale22(long a, long b);
long divscale23(long a, long b);
long divscale24(long a, long b);
long divscale25(long a, long b);
long divscale26(long a, long b);
long divscale27(long a, long b);
long divscale28(long a, long b);
long divscale29(long a, long b);
long divscale30(long a, long b);
long divscale31(long a, long b);
long divscale32(long d, long b);
long readpixel(void *D);
void drawpixel(void *D, long a);
void drawpixels(void *D, long a);
void drawpixelses(void *D, long a);
void clearbuf(void* D, long c, long a);
void copybuf(void *S, void *D, long c);
long mul3(long a);
long mul5(long a);
long mul9(long a);
long divmod(long a, long b);
long moddiv(long a, long b);
long klabs(long a);
long ksgn(long b);
long umin(long a, long b);
long umax(long a, long b);
long kmin(long a, long b);
long kmax(long a, long b);
void swapchar(void *a, void *b);
void swapshort(void *a, void *b);
void swaplong(void *a, void *b);
void swapbuf4(void *a, void *b, long c);
void swap64bit(void *a, void *b);
void swapchar2(void *a, void *b, long S);
#endif

View file

@ -0,0 +1,54 @@
// Windows DIB/DirectDraw interface layer
// for the Build Engine
// by Jonathon Fowler (jonof@edgenetwk.com)
#ifndef __build_interface_layer__
#define __build_interface_layer__ WIN
extern int backgroundidle; // set to 1 to tell winlayer to go to idle priority when inactive
extern unsigned maxrefreshfreq;
extern int glusecds;
long win_gethwnd(void);
long win_gethinstance(void);
// resource ids
#define WIN_STARTWIN 1000
#define WIN_STARTWIN_ITEMBITMAP 100 // banner bitmap
#define WIN_STARTWIN_ITEMTEXT 101 // text header
#define WIN_STARTWIN_ITEMLIST 102 // output list box
#define WIN_STARTWINBMP 200
// *hwnd - receives the window handle to the startup dialog box
// saferect[] - receives the safe area to draw controls over (l,t,w,h)
// onclose - called before the startup window closes
// returns 0 if successful, 1 if the window isn't open
int win_getstartupwin(long *hwnd, long saferect[4], void (*onclose)(void));
int win_getstartupcommand(void);
void win_allowtaskswitching(int onf);
int win_checkinstance(void);
/*
#ifdef KENBUILD
#define DISCLAIMER "IMPORTANT:\n" \
"\tThis is a source port by Jonathon Fowler (jonof@edgenetwk.com) of the Build Engine, " \
"editor and test game by Ken Silverman to the Windows and Linux operating systems. It is " \
"distributed under the terms listed in BUILDLIC.TXT included with this package."
#endif
#ifdef DUKE3D
#define DISCLAIMER "IMPORTANT:\n" \
"\tThis port of Duke Nukem 3D was done by Jonathon Fowler (jonof@edgenetwk.com) and is not " \
"endorsed or supported by 3D Realms or Apogee. They will not provide support for it. Visit " \
"http://jonof.edgenetwk.com/buildport/duke3d/ for details."
#endif
*/
#include "baselayer.h"
#else
#if (__build_interface_layer__ != WIN)
#error "Already using the " __build_interface_layer__ ". Can't now use Windows."
#endif
#endif // __build_interface_layer__

View file

@ -0,0 +1 @@
make -f Makefile %1 %2 %3 %4 %5

View file

@ -0,0 +1 @@
nmake /f Makefile.msvc %1 %2 %3 %4 %5

1
polymer/build/makew.bat Normal file
View file

@ -0,0 +1 @@
wmake -f Makefile.watcom %1 %2 %3 %4 %5

View file

View file

View file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,5 @@
const char _engine_cflags[] = "";
const char _engine_libs[] = "";
const char _engine_uname[] = "Darwin megumi.fnord 7.9.0 Darwin Kernel Version 7.9.0: Wed Mar 30 20:11:17 PST 2005; root:xnu/xnu-517.12.7.obj~1/RELEASE_PPC Power Macintosh powerpc";
const char _engine_compiler[] = "gcc 3.3 ppc-darwin";
const char _engine_date[] = __DATE__ " " __TIME__;

View file

@ -0,0 +1,10 @@
#!/bin/sh
UNAME=`uname -a`
CC="gcc"
CCVERSION=`$CC -dumpversion`
CCMACHINE=`$CC -dumpmachine`
echo "const char _engine_cflags[] = \"$OTHER_CFLAGS\";" > engineinfo.c
echo "const char _engine_libs[] = \"$LIBS\";" >> engineinfo.c
echo "const char _engine_uname[] = \"$UNAME\";" >> engineinfo.c
echo "const char _engine_compiler[] = \"$CC $CCVERSION $CCMACHINE\";" >> engineinfo.c
echo "const char _engine_date[] = __DATE__ \" \" __TIME__;" >> engineinfo.c

View file

@ -0,0 +1,11 @@
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import <Cocoa/Cocoa.h>
@interface SDLMain : NSObject
@end

View file

@ -0,0 +1,179 @@
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import <SDL/SDL.h>
#import "build.osxmain.h"
#import <sys/param.h> /* for MAXPATHLEN */
#import <unistd.h>
static int gArgc;
static char **gArgv;
static BOOL gFinderLaunch;
/* A helper category for NSString */
@interface NSString (ReplaceSubString)
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString;
@end
@interface SDLApplication : NSApplication
@end
@implementation SDLApplication
/* Invoked from the Quit menu item */
- (void)terminate:(id)sender
{
/* Post a SDL_QUIT event */
SDL_Event event;
event.type = SDL_QUIT;
SDL_PushEvent(&event);
}
@end
/* The main class of the application, the application's delegate */
@implementation SDLMain
/* Set the working directory to the .app's parent directory */
- (void) setupWorkingDirectory:(BOOL)shouldChdir
{
char parentdir[MAXPATHLEN];
char *c;
strncpy ( parentdir, gArgv[0], sizeof(parentdir) );
c = (char*) parentdir;
while (*c != '\0') /* go to end */
c++;
while (*c != '/') /* back up to parent */
c--;
*c++ = '\0'; /* cut off last part (binary name) */
if (shouldChdir)
{
assert ( chdir (parentdir) == 0 ); /* chdir to the binary app's parent */
assert ( chdir ("../../../") == 0 ); /* chdir to the .app's parent */
}
}
/* Fix menu to contain the real app name instead of "SDL App" */
- (void)fixMenu:(NSMenu *)aMenu withAppName:(NSString *)appName
{
NSRange aRange;
NSEnumerator *enumerator;
NSMenuItem *menuItem;
aRange = [[aMenu title] rangeOfString:@"SDL App"];
if (aRange.length != 0)
[aMenu setTitle: [[aMenu title] stringByReplacingRange:aRange with:appName]];
enumerator = [[aMenu itemArray] objectEnumerator];
while ((menuItem = [enumerator nextObject]))
{
aRange = [[menuItem title] rangeOfString:@"SDL App"];
if (aRange.length != 0)
[menuItem setTitle: [[menuItem title] stringByReplacingRange:aRange with:appName]];
if ([menuItem hasSubmenu])
[self fixMenu:[menuItem submenu] withAppName:appName];
}
[ aMenu sizeToFit ];
}
/* Called when the internal event loop has just started running */
- (void) applicationDidFinishLaunching: (NSNotification *) note
{
int status;
/* Set the working directory to the .app's parent directory */
[self setupWorkingDirectory:gFinderLaunch];
/* Set the main menu to contain the real app name instead of "SDL App" */
//[self fixMenu:[NSApp mainMenu] withAppName:[[NSProcessInfo processInfo] processName]];
[self fixMenu:[NSApp mainMenu] withAppName:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]];
/* Hand off to main application code */
status = SDL_main (gArgc, gArgv);
/* We're done, thank you for playing */
exit(status);
}
@end
@implementation NSString (ReplaceSubString)
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString
{
unsigned int bufferSize;
unsigned int selfLen = [self length];
unsigned int aStringLen = [aString length];
unichar *buffer;
NSRange localRange;
NSString *result;
bufferSize = selfLen + aStringLen - aRange.length;
buffer = NSAllocateMemoryPages(bufferSize*sizeof(unichar));
/* Get first part into buffer */
localRange.location = 0;
localRange.length = aRange.location;
[self getCharacters:buffer range:localRange];
/* Get middle part into buffer */
localRange.location = 0;
localRange.length = aStringLen;
[aString getCharacters:(buffer+aRange.location) range:localRange];
/* Get last part into buffer */
localRange.location = aRange.location + aRange.length;
localRange.length = selfLen - localRange.location;
[self getCharacters:(buffer+aRange.location+aStringLen) range:localRange];
/* Build output string */
result = [NSString stringWithCharacters:buffer length:bufferSize];
NSDeallocateMemoryPages(buffer, bufferSize);
return result;
}
@end
#ifdef main
# undef main
#endif
/* Main entry point to executable - should *not* be SDL_main! */
int main (int argc, char **argv)
{
/* Copy the arguments into a global variable */
int i;
/* This is passed if we are launched by double-clicking */
if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) {
gArgc = 1;
gFinderLaunch = YES;
} else {
gArgc = argc;
gFinderLaunch = NO;
}
gArgv = (char**) malloc (sizeof(*gArgv) * (gArgc+1));
assert (gArgv != NULL);
for (i = 0; i < gArgc; i++)
gArgv[i] = argv[i];
gArgv[i] = NULL;
[SDLApplication poseAsClass:[NSApplication class]];
NSApplicationMain (argc, argv);
return 0;
}

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>build</string>
<key>CFBundleIdentifier</key>
<string>au.id.jonof.build</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>NSMainNibFile</key>
<string>osxmain</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>game</string>
<key>CFBundleIdentifier</key>
<string>au.id.jonof.kenbuild</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>NSMainNibFile</key>
<string>osxmain</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>

View file

@ -0,0 +1,11 @@
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import <Cocoa/Cocoa.h>
@interface SDLMain : NSObject
@end

View file

@ -0,0 +1,179 @@
/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import <SDL/SDL.h>
#import "game.osxmain.h"
#import <sys/param.h> /* for MAXPATHLEN */
#import <unistd.h>
static int gArgc;
static char **gArgv;
static BOOL gFinderLaunch;
/* A helper category for NSString */
@interface NSString (ReplaceSubString)
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString;
@end
@interface SDLApplication : NSApplication
@end
@implementation SDLApplication
/* Invoked from the Quit menu item */
- (void)terminate:(id)sender
{
/* Post a SDL_QUIT event */
SDL_Event event;
event.type = SDL_QUIT;
SDL_PushEvent(&event);
}
@end
/* The main class of the application, the application's delegate */
@implementation SDLMain
/* Set the working directory to the .app's parent directory */
- (void) setupWorkingDirectory:(BOOL)shouldChdir
{
char parentdir[MAXPATHLEN];
char *c;
strncpy ( parentdir, gArgv[0], sizeof(parentdir) );
c = (char*) parentdir;
while (*c != '\0') /* go to end */
c++;
while (*c != '/') /* back up to parent */
c--;
*c++ = '\0'; /* cut off last part (binary name) */
if (shouldChdir)
{
assert ( chdir (parentdir) == 0 ); /* chdir to the binary app's parent */
assert ( chdir ("../../../") == 0 ); /* chdir to the .app's parent */
}
}
/* Fix menu to contain the real app name instead of "SDL App" */
- (void)fixMenu:(NSMenu *)aMenu withAppName:(NSString *)appName
{
NSRange aRange;
NSEnumerator *enumerator;
NSMenuItem *menuItem;
aRange = [[aMenu title] rangeOfString:@"SDL App"];
if (aRange.length != 0)
[aMenu setTitle: [[aMenu title] stringByReplacingRange:aRange with:appName]];
enumerator = [[aMenu itemArray] objectEnumerator];
while ((menuItem = [enumerator nextObject]))
{
aRange = [[menuItem title] rangeOfString:@"SDL App"];
if (aRange.length != 0)
[menuItem setTitle: [[menuItem title] stringByReplacingRange:aRange with:appName]];
if ([menuItem hasSubmenu])
[self fixMenu:[menuItem submenu] withAppName:appName];
}
[ aMenu sizeToFit ];
}
/* Called when the internal event loop has just started running */
- (void) applicationDidFinishLaunching: (NSNotification *) note
{
int status;
/* Set the working directory to the .app's parent directory */
[self setupWorkingDirectory:gFinderLaunch];
/* Set the main menu to contain the real app name instead of "SDL App" */
//[self fixMenu:[NSApp mainMenu] withAppName:[[NSProcessInfo processInfo] processName]];
[self fixMenu:[NSApp mainMenu] withAppName:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]];
/* Hand off to main application code */
status = SDL_main (gArgc, gArgv);
/* We're done, thank you for playing */
exit(status);
}
@end
@implementation NSString (ReplaceSubString)
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString
{
unsigned int bufferSize;
unsigned int selfLen = [self length];
unsigned int aStringLen = [aString length];
unichar *buffer;
NSRange localRange;
NSString *result;
bufferSize = selfLen + aStringLen - aRange.length;
buffer = NSAllocateMemoryPages(bufferSize*sizeof(unichar));
/* Get first part into buffer */
localRange.location = 0;
localRange.length = aRange.location;
[self getCharacters:buffer range:localRange];
/* Get middle part into buffer */
localRange.location = 0;
localRange.length = aStringLen;
[aString getCharacters:(buffer+aRange.location) range:localRange];
/* Get last part into buffer */
localRange.location = aRange.location + aRange.length;
localRange.length = selfLen - localRange.location;
[self getCharacters:(buffer+aRange.location+aStringLen) range:localRange];
/* Build output string */
result = [NSString stringWithCharacters:buffer length:bufferSize];
NSDeallocateMemoryPages(buffer, bufferSize);
return result;
}
@end
#ifdef main
# undef main
#endif
/* Main entry point to executable - should *not* be SDL_main! */
int main (int argc, char **argv)
{
/* Copy the arguments into a global variable */
int i;
/* This is passed if we are launched by double-clicking */
if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) {
gArgc = 1;
gFinderLaunch = YES;
} else {
gArgc = argc;
gFinderLaunch = NO;
}
gArgv = (char**) malloc (sizeof(*gArgv) * (gArgc+1));
assert (gArgv != NULL);
for (i = 0; i < gArgc; i++)
gArgv[i] = argv[i];
gArgv[i] = NULL;
[SDLApplication poseAsClass:[NSApplication class]];
NSApplicationMain (argc, argv);
return 0;
}

View file

@ -0,0 +1,825 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 39;
objects = {
AB2B5CB408E698F600899067 = {
fileType = archive.ar;
isa = PBXReferenceProxy;
path = libenginez.a;
refType = 3;
remoteRef = AB2B5CB808E6992B00899067;
sourceTree = BUILT_PRODUCTS_DIR;
};
AB2B5CB808E6992B00899067 = {
containerPortal = AB3AFA5F08DEE45000C0AA42;
isa = PBXContainerItemProxy;
proxyType = 2;
remoteGlobalIDString = AB2B5C9708E6979600899067;
remoteInfo = enginez;
};
AB2B5D3708E69B7D00899067 = {
containerPortal = AB3AF9E808DEE39200C0AA42;
isa = PBXContainerItemProxy;
proxyType = 1;
remoteGlobalIDString = AB3AFEC008DF04E300C0AA42;
remoteInfo = editor;
};
AB2B5D3808E69B7D00899067 = {
isa = PBXTargetDependency;
target = AB3AFEC008DF04E300C0AA42;
targetProxy = AB2B5D3708E69B7D00899067;
};
AB3A002208DF064900C0AA42 = {
fileRef = AB3AFABF08DF035400C0AA42;
isa = PBXBuildFile;
settings = {
};
};
AB3A002408DF064900C0AA42 = {
fileRef = AB3AFA6F08DEE50200C0AA42;
isa = PBXBuildFile;
settings = {
};
};
AB3A002508DF064900C0AA42 = {
fileRef = AB3AFA7308DEE53C00C0AA42;
isa = PBXBuildFile;
settings = {
};
};
AB3A002608DF066200C0AA42 = {
isa = PBXFileReference;
lastKnownFileType = archive.ar;
name = libeditor.a;
path = /Users/jonof/ports/build/osx/engine/build/libeditor.a;
refType = 0;
sourceTree = "<absolute>";
};
AB3A002708DF066200C0AA42 = {
fileRef = AB3A002608DF066200C0AA42;
isa = PBXBuildFile;
settings = {
};
};
AB3AF9E408DEE39200C0AA42 = {
children = (
AB3AFA5F08DEE45000C0AA42,
ABBC7AA3099344E40064C16C,
AB3AF9EE08DEE3A100C0AA42,
AB3AF9EC08DEE39A00C0AA42,
AB3AFA7908DEFECF00C0AA42,
AB3AF9F908DEE3EE00C0AA42,
);
isa = PBXGroup;
refType = 4;
sourceTree = "<group>";
};
AB3AF9E608DEE39200C0AA42 = {
buildSettings = {
COPY_PHASE_STRIP = NO;
GCC_OPTIMIZATION_LEVEL = 0;
};
isa = PBXBuildStyle;
name = Development;
};
AB3AF9E708DEE39200C0AA42 = {
buildSettings = {
COPY_PHASE_STRIP = YES;
DEPLOYMENT_POSTPROCESSING = YES;
GCC_OPTIMIZATION_LEVEL = 2;
};
isa = PBXBuildStyle;
name = Deployment;
};
AB3AF9E808DEE39200C0AA42 = {
buildSettings = {
};
buildStyles = (
AB3AF9E608DEE39200C0AA42,
AB3AF9E708DEE39200C0AA42,
);
hasScannedForEncodings = 0;
isa = PBXProject;
mainGroup = AB3AF9E408DEE39200C0AA42;
productRefGroup = AB3AF9F908DEE3EE00C0AA42;
projectDirPath = "";
projectReferences = (
{
ProductGroup = ABBC7AA5099344E60064C16C;
ProjectRef = ABBC7AA3099344E40064C16C;
},
{
ProductGroup = AB3AFA6208DEE45200C0AA42;
ProjectRef = AB3AFA5F08DEE45000C0AA42;
},
);
targets = (
AB3AFBF108DF03C900C0AA42,
AB3AF9F708DEE3EE00C0AA42,
AB3AFEC008DF04E300C0AA42,
);
};
AB3AF9EC08DEE39A00C0AA42 = {
children = (
AB3AF9ED08DEE39E00C0AA42,
AB3AFA7708DEFEC100C0AA42,
AB3AF9FB08DEE3EE00C0AA42,
);
isa = PBXGroup;
name = Game;
refType = 4;
sourceTree = "<group>";
};
AB3AF9ED08DEE39E00C0AA42 = {
children = (
AB3AFA6D08DEE4D700C0AA42,
AB3AF9F108DEE3DA00C0AA42,
AB3AF9F208DEE3DA00C0AA42,
AB3AF9F308DEE3DA00C0AA42,
ABBC7A9A099344CF0064C16C,
);
isa = PBXGroup;
name = Sources;
refType = 4;
sourceTree = "<group>";
};
AB3AF9EE08DEE3A100C0AA42 = {
children = (
AB3AF9EF08DEE3AB00C0AA42,
AB3AFEC308DF04E300C0AA42,
);
isa = PBXGroup;
name = Editor;
refType = 4;
sourceTree = "<group>";
};
AB3AF9EF08DEE3AB00C0AA42 = {
children = (
AB3AFECC08DF059E00C0AA42,
AB3AF9F008DEE3C100C0AA42,
);
isa = PBXGroup;
name = Sources;
refType = 4;
sourceTree = "<group>";
};
AB3AF9F008DEE3C100C0AA42 = {
fileEncoding = 30;
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.c;
name = bstub.c;
path = ../../src/bstub.c;
refType = 2;
sourceTree = SOURCE_ROOT;
};
AB3AF9F108DEE3DA00C0AA42 = {
fileEncoding = 30;
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.c;
name = config.c;
path = ../../src/config.c;
refType = 2;
sourceTree = SOURCE_ROOT;
};
AB3AF9F208DEE3DA00C0AA42 = {
fileEncoding = 30;
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.c;
name = game.c;
path = ../../src/game.c;
refType = 2;
sourceTree = SOURCE_ROOT;
};
AB3AF9F308DEE3DA00C0AA42 = {
fileEncoding = 30;
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.c;
name = sound.c;
path = ../../src/sound.c;
refType = 2;
sourceTree = SOURCE_ROOT;
};
AB3AF9F408DEE3EE00C0AA42 = {
buildActionMask = 2147483647;
files = (
AB3AFA7808DEFEC200C0AA42,
);
isa = PBXResourcesBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
};
AB3AF9F508DEE3EE00C0AA42 = {
buildActionMask = 2147483647;
files = (
AB3AFA5C08DEE43500C0AA42,
AB3AFA5D08DEE43500C0AA42,
AB3AFA6E08DEE4D700C0AA42,
ABBC7A9B099344CF0064C16C,
);
isa = PBXSourcesBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
};
AB3AF9F608DEE3EE00C0AA42 = {
buildActionMask = 2147483647;
files = (
ABBC7B6409934A410064C16C,
AB3AFAC008DF035400C0AA42,
AB3AFB5708DF037500C0AA42,
AB3AFABE08DF030B00C0AA42,
AB3AFA7008DEE50200C0AA42,
AB3AFA7408DEE53C00C0AA42,
ABBC7B6609934A5A0064C16C,
);
isa = PBXFrameworksBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
};
AB3AF9F708DEE3EE00C0AA42 = {
buildPhases = (
AB3AF9F408DEE3EE00C0AA42,
AB3AF9F508DEE3EE00C0AA42,
AB3AF9F608DEE3EE00C0AA42,
ABBC7B40099347230064C16C,
);
buildRules = (
);
buildSettings = {
FRAMEWORK_SEARCH_PATHS = /Users/jonof/ports/jfaud/osx/build;
GCC_CHAR_IS_UNSIGNED_CHAR = YES;
GCC_ENABLE_CPP_EXCEPTIONS = NO;
GCC_ENABLE_CPP_RTTI = NO;
GCC_PREPROCESSOR_DEFINITIONS = "SUPERBUILD POLYMOST USE_OPENGL NOASM RENDERTYPESDL=1";
HEADER_SEARCH_PATHS = "/Developer/SDKs/fmodapi3741mac/api/inc ../../include";
INFOPLIST_FILE = "game-Info.plist";
INSTALL_PATH = "$(USER_APPS_DIR)";
LIBRARY_SEARCH_PATHS = "/Developer/SDKs/fmodapi3741mac/api/lib ../engine/build";
OTHER_CFLAGS = "";
OTHER_LDFLAGS = "";
OTHER_REZFLAGS = "";
PRODUCT_NAME = game;
SECTORDER_FLAGS = "";
WARNING_CFLAGS = "-Wno-four-char-constants -Wno-unknown-pragmas";
};
dependencies = (
AB3AFAB608DF00A400C0AA42,
);
isa = PBXNativeTarget;
name = game;
productName = game;
productReference = AB3AF9F808DEE3EE00C0AA42;
productSettingsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
<plist version=\"1.0\">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>game</string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.game</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
";
productType = "com.apple.product-type.application";
};
AB3AF9F808DEE3EE00C0AA42 = {
explicitFileType = wrapper.application;
includeInIndex = 0;
isa = PBXFileReference;
path = game.app;
refType = 3;
sourceTree = BUILT_PRODUCTS_DIR;
};
AB3AF9F908DEE3EE00C0AA42 = {
children = (
AB3AF9F808DEE3EE00C0AA42,
AB3AFEC108DF04E300C0AA42,
);
isa = PBXGroup;
name = Products;
refType = 4;
sourceTree = "<group>";
};
AB3AF9FB08DEE3EE00C0AA42 = {
isa = PBXFileReference;
lastKnownFileType = text.xml;
path = "game-Info.plist";
refType = 2;
sourceTree = SOURCE_ROOT;
};
AB3AFA5C08DEE43500C0AA42 = {
fileRef = AB3AF9F108DEE3DA00C0AA42;
isa = PBXBuildFile;
settings = {
};
};
AB3AFA5D08DEE43500C0AA42 = {
fileRef = AB3AF9F208DEE3DA00C0AA42;
isa = PBXBuildFile;
settings = {
};
};
AB3AFA5F08DEE45000C0AA42 = {
isa = PBXFileReference;
lastKnownFileType = "wrapper.pb-project";
name = engine.xcode;
path = ../engine/engine.xcode;
refType = 2;
sourceTree = SOURCE_ROOT;
};
AB3AFA6208DEE45200C0AA42 = {
children = (
AB3AFA6308DEE45200C0AA42,
AB3AFA6408DEE45200C0AA42,
AB2B5CB408E698F600899067,
);
isa = PBXGroup;
name = Products;
refType = 4;
sourceTree = "<group>";
};
AB3AFA6308DEE45200C0AA42 = {
fileType = archive.ar;
isa = PBXReferenceProxy;
path = libengine.a;
refType = 3;
remoteRef = AB3AFA6708DEE46200C0AA42;
sourceTree = BUILT_PRODUCTS_DIR;
};
AB3AFA6408DEE45200C0AA42 = {
fileType = archive.ar;
isa = PBXReferenceProxy;
path = libeditor.a;
refType = 3;
remoteRef = AB3AFA6808DEE46200C0AA42;
sourceTree = BUILT_PRODUCTS_DIR;
};
AB3AFA6708DEE46200C0AA42 = {
containerPortal = AB3AFA5F08DEE45000C0AA42;
isa = PBXContainerItemProxy;
proxyType = 2;
remoteGlobalIDString = AB3AF5F508DEDABE00C0AA42;
remoteInfo = engine;
};
AB3AFA6808DEE46200C0AA42 = {
containerPortal = AB3AFA5F08DEE45000C0AA42;
isa = PBXContainerItemProxy;
proxyType = 2;
remoteGlobalIDString = AB3AF9DE08DEE2CF00C0AA42;
remoteInfo = editor;
};
AB3AFA6D08DEE4D700C0AA42 = {
fileEncoding = 30;
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.objc;
path = game.osxmain.m;
refType = 2;
sourceTree = SOURCE_ROOT;
};
AB3AFA6E08DEE4D700C0AA42 = {
fileRef = AB3AFA6D08DEE4D700C0AA42;
isa = PBXBuildFile;
settings = {
};
};
AB3AFA6F08DEE50200C0AA42 = {
isa = PBXFileReference;
lastKnownFileType = wrapper.framework;
name = OpenGL.framework;
path = /System/Library/Frameworks/OpenGL.framework;
refType = 0;
sourceTree = "<absolute>";
};
AB3AFA7008DEE50200C0AA42 = {
fileRef = AB3AFA6F08DEE50200C0AA42;
isa = PBXBuildFile;
settings = {
};
};
AB3AFA7308DEE53C00C0AA42 = {
isa = PBXFileReference;
lastKnownFileType = wrapper.framework;
name = SDL.framework;
path = /Library/Frameworks/SDL.framework;
refType = 0;
sourceTree = "<absolute>";
};
AB3AFA7408DEE53C00C0AA42 = {
fileRef = AB3AFA7308DEE53C00C0AA42;
isa = PBXBuildFile;
settings = {
};
};
AB3AFA7708DEFEC100C0AA42 = {
isa = PBXFileReference;
lastKnownFileType = wrapper.nib;
path = osxmain.nib;
refType = 2;
sourceTree = SOURCE_ROOT;
};
AB3AFA7808DEFEC200C0AA42 = {
fileRef = AB3AFA7708DEFEC100C0AA42;
isa = PBXBuildFile;
settings = {
};
};
AB3AFA7908DEFECF00C0AA42 = {
children = (
AB3A002608DF066200C0AA42,
AB3AFABD08DF030B00C0AA42,
ABBC7AD6099345F70064C16C,
AB3AFABF08DF035400C0AA42,
AB3AFB5608DF037500C0AA42,
ABBC7B6509934A5A0064C16C,
AB3AFA6F08DEE50200C0AA42,
AB3AFA7308DEE53C00C0AA42,
);
isa = PBXGroup;
name = Frameworks;
refType = 4;
sourceTree = "<group>";
};
AB3AFAB508DF00A400C0AA42 = {
containerPortal = AB3AFA5F08DEE45000C0AA42;
isa = PBXContainerItemProxy;
proxyType = 1;
remoteGlobalIDString = AB3AF5F408DEDABE00C0AA42;
remoteInfo = engine;
};
AB3AFAB608DF00A400C0AA42 = {
isa = PBXTargetDependency;
name = "engine (from engine.xcode)";
targetProxy = AB3AFAB508DF00A400C0AA42;
};
AB3AFABD08DF030B00C0AA42 = {
isa = PBXFileReference;
lastKnownFileType = archive.ar;
name = libengine.a;
path = /Users/jonof/ports/build/osx/engine/build/libengine.a;
refType = 0;
sourceTree = "<absolute>";
};
AB3AFABE08DF030B00C0AA42 = {
fileRef = AB3AFABD08DF030B00C0AA42;
isa = PBXBuildFile;
settings = {
};
};
AB3AFABF08DF035400C0AA42 = {
isa = PBXFileReference;
lastKnownFileType = wrapper.framework;
name = AppKit.framework;
path = /System/Library/Frameworks/AppKit.framework;
refType = 0;
sourceTree = "<absolute>";
};
AB3AFAC008DF035400C0AA42 = {
fileRef = AB3AFABF08DF035400C0AA42;
isa = PBXBuildFile;
settings = {
};
};
AB3AFB5608DF037500C0AA42 = {
comments = "Needed for fmod to link.";
isa = PBXFileReference;
lastKnownFileType = wrapper.framework;
name = Carbon.framework;
path = /System/Library/Frameworks/Carbon.framework;
refType = 0;
sourceTree = "<absolute>";
};
AB3AFB5708DF037500C0AA42 = {
fileRef = AB3AFB5608DF037500C0AA42;
isa = PBXBuildFile;
settings = {
};
};
AB3AFBF108DF03C900C0AA42 = {
buildPhases = (
);
buildSettings = {
OTHER_CFLAGS = "";
OTHER_LDFLAGS = "";
OTHER_REZFLAGS = "";
PRODUCT_NAME = All;
SECTORDER_FLAGS = "";
WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
};
dependencies = (
AB3AFBF308DF03D200C0AA42,
AB2B5D3808E69B7D00899067,
);
isa = PBXAggregateTarget;
name = All;
productName = All;
};
AB3AFBF208DF03D200C0AA42 = {
containerPortal = AB3AF9E808DEE39200C0AA42;
isa = PBXContainerItemProxy;
proxyType = 1;
remoteGlobalIDString = AB3AF9F708DEE3EE00C0AA42;
remoteInfo = game;
};
AB3AFBF308DF03D200C0AA42 = {
isa = PBXTargetDependency;
target = AB3AF9F708DEE3EE00C0AA42;
targetProxy = AB3AFBF208DF03D200C0AA42;
};
AB3AFEBD08DF04E300C0AA42 = {
buildActionMask = 2147483647;
files = (
AB3AFECE08DF05AE00C0AA42,
);
isa = PBXResourcesBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
};
AB3AFEBE08DF04E300C0AA42 = {
buildActionMask = 2147483647;
files = (
AB3AFECA08DF058D00C0AA42,
AB3AFECD08DF059E00C0AA42,
);
isa = PBXSourcesBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
};
AB3AFEBF08DF04E300C0AA42 = {
buildActionMask = 2147483647;
files = (
AB3A002208DF064900C0AA42,
AB3A002708DF066200C0AA42,
AB3AFECF08DF063D00C0AA42,
AB3A002408DF064900C0AA42,
AB3A002508DF064900C0AA42,
);
isa = PBXFrameworksBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
};
AB3AFEC008DF04E300C0AA42 = {
buildPhases = (
AB3AFEBD08DF04E300C0AA42,
AB3AFEBE08DF04E300C0AA42,
AB3AFEBF08DF04E300C0AA42,
);
buildRules = (
);
buildSettings = {
GCC_CHAR_IS_UNSIGNED_CHAR = YES;
GCC_ENABLE_CPP_EXCEPTIONS = NO;
GCC_ENABLE_CPP_RTTI = NO;
GCC_PREPROCESSOR_DEFINITIONS = "SUPERBUILD POLYMOST USE_OPENGL NOASM USE_A_C RENDERTYPESDL=1";
HEADER_SEARCH_PATHS = ../../include;
INFOPLIST_FILE = "editor-Info.plist";
INSTALL_PATH = "$(USER_APPS_DIR)";
LIBRARY_SEARCH_PATHS = ../engine/build;
OTHER_CFLAGS = "";
OTHER_LDFLAGS = "";
OTHER_REZFLAGS = "";
PRODUCT_NAME = build;
SECTORDER_FLAGS = "";
WARNING_CFLAGS = "-Wno-four-char-constants -Wno-unknown-pragmas";
};
dependencies = (
AB3AFEC508DF04EB00C0AA42,
AB3AFEC708DF04EB00C0AA42,
);
isa = PBXNativeTarget;
name = editor;
productName = editor;
productReference = AB3AFEC108DF04E300C0AA42;
productSettingsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
<plist version=\"1.0\">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>editor</string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.editor</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
";
productType = "com.apple.product-type.application";
};
AB3AFEC108DF04E300C0AA42 = {
explicitFileType = wrapper.application;
includeInIndex = 0;
isa = PBXFileReference;
path = build.app;
refType = 3;
sourceTree = BUILT_PRODUCTS_DIR;
};
AB3AFEC308DF04E300C0AA42 = {
isa = PBXFileReference;
lastKnownFileType = text.xml;
path = "editor-Info.plist";
refType = 2;
sourceTree = SOURCE_ROOT;
};
AB3AFEC408DF04EB00C0AA42 = {
containerPortal = AB3AFA5F08DEE45000C0AA42;
isa = PBXContainerItemProxy;
proxyType = 1;
remoteGlobalIDString = AB3AF5F408DEDABE00C0AA42;
remoteInfo = engine;
};
AB3AFEC508DF04EB00C0AA42 = {
isa = PBXTargetDependency;
name = "engine (from engine.xcode)";
targetProxy = AB3AFEC408DF04EB00C0AA42;
};
AB3AFEC608DF04EB00C0AA42 = {
containerPortal = AB3AFA5F08DEE45000C0AA42;
isa = PBXContainerItemProxy;
proxyType = 1;
remoteGlobalIDString = AB3AF9DD08DEE2CF00C0AA42;
remoteInfo = editor;
};
AB3AFEC708DF04EB00C0AA42 = {
isa = PBXTargetDependency;
name = "editor (from engine.xcode)";
targetProxy = AB3AFEC608DF04EB00C0AA42;
};
AB3AFECA08DF058D00C0AA42 = {
fileRef = AB3AF9F008DEE3C100C0AA42;
isa = PBXBuildFile;
settings = {
};
};
AB3AFECC08DF059E00C0AA42 = {
fileEncoding = 30;
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.objc;
path = build.osxmain.m;
refType = 2;
sourceTree = SOURCE_ROOT;
};
AB3AFECD08DF059E00C0AA42 = {
fileRef = AB3AFECC08DF059E00C0AA42;
isa = PBXBuildFile;
settings = {
};
};
AB3AFECE08DF05AE00C0AA42 = {
fileRef = AB3AFA7708DEFEC100C0AA42;
isa = PBXBuildFile;
settings = {
};
};
AB3AFECF08DF063D00C0AA42 = {
fileRef = AB3AFABD08DF030B00C0AA42;
isa = PBXBuildFile;
settings = {
};
};
ABBC7A9A099344CF0064C16C = {
fileEncoding = 30;
isa = PBXFileReference;
lastKnownFileType = sourcecode.cpp.cpp;
name = jfaud_sound.cpp;
path = ../../src/jfaud_sound.cpp;
refType = 2;
sourceTree = SOURCE_ROOT;
};
ABBC7A9B099344CF0064C16C = {
fileRef = ABBC7A9A099344CF0064C16C;
isa = PBXBuildFile;
settings = {
};
};
ABBC7AA3099344E40064C16C = {
isa = PBXFileReference;
lastKnownFileType = "wrapper.pb-project";
name = jfaud.xcode;
path = ../../../jfaud/osx/jfaud.xcode;
refType = 2;
sourceTree = SOURCE_ROOT;
};
ABBC7AA5099344E60064C16C = {
children = (
ABBC7AA6099344E60064C16C,
ABBC7AA7099344E60064C16C,
ABBC7AA8099344E60064C16C,
);
isa = PBXGroup;
name = Products;
refType = 4;
sourceTree = "<group>";
};
ABBC7AA6099344E60064C16C = {
fileType = wrapper.framework;
isa = PBXReferenceProxy;
path = jfaud.framework;
refType = 3;
remoteRef = ABBC7AAA099344F50064C16C;
sourceTree = BUILT_PRODUCTS_DIR;
};
ABBC7AA7099344E60064C16C = {
fileType = archive.ar;
isa = PBXReferenceProxy;
path = libmpadec.a;
refType = 3;
remoteRef = ABBC7AAB099344F50064C16C;
sourceTree = BUILT_PRODUCTS_DIR;
};
ABBC7AA8099344E60064C16C = {
fileType = wrapper.application;
isa = PBXReferenceProxy;
path = jfaudtest.app;
refType = 3;
remoteRef = ABBC7AAC099344F50064C16C;
sourceTree = BUILT_PRODUCTS_DIR;
};
ABBC7AAA099344F50064C16C = {
containerPortal = ABBC7AA3099344E40064C16C;
isa = PBXContainerItemProxy;
proxyType = 2;
remoteGlobalIDString = 8DC2EF5B0486A6940098B216;
remoteInfo = jfaud;
};
ABBC7AAB099344F50064C16C = {
containerPortal = ABBC7AA3099344E40064C16C;
isa = PBXContainerItemProxy;
proxyType = 2;
remoteGlobalIDString = ABE7399C095277C50040A74A;
remoteInfo = mpadec;
};
ABBC7AAC099344F50064C16C = {
containerPortal = ABBC7AA3099344E40064C16C;
isa = PBXContainerItemProxy;
proxyType = 2;
remoteGlobalIDString = ABE7394E09526A5B0040A74A;
remoteInfo = jfaudtest;
};
ABBC7AD6099345F70064C16C = {
isa = PBXFileReference;
lastKnownFileType = wrapper.framework;
name = jfaud.framework;
path = /Users/jonof/ports/jfaud/osx/build/jfaud.framework;
refType = 0;
sourceTree = "<absolute>";
};
ABBC7B40099347230064C16C = {
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
ABBC7B410993474A0064C16C,
);
isa = PBXCopyFilesBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
};
ABBC7B410993474A0064C16C = {
fileRef = ABBC7AD6099345F70064C16C;
isa = PBXBuildFile;
settings = {
};
};
ABBC7B6409934A410064C16C = {
fileRef = ABBC7AD6099345F70064C16C;
isa = PBXBuildFile;
settings = {
};
};
ABBC7B6509934A5A0064C16C = {
isa = PBXFileReference;
lastKnownFileType = wrapper.framework;
name = OpenAL.framework;
path = ../../../../../../Library/Frameworks/OpenAL.framework;
refType = 2;
sourceTree = SOURCE_ROOT;
};
ABBC7B6609934A5A0064C16C = {
fileRef = ABBC7B6509934A5A0064C16C;
isa = PBXBuildFile;
settings = {
};
};
};
rootObject = AB3AF9E808DEE39200C0AA42;
}

View file

@ -0,0 +1,7 @@
{
IBClasses = (
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{ACTIONS = {}; CLASS = SDLMain; LANGUAGE = ObjC; SUPERCLASS = NSObject; }
);
IBVersion = 1;
}

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBDocumentLocation</key>
<string>52 97 356 240 0 0 1024 746 </string>
<key>IBEditorPositions</key>
<dict>
<key>29</key>
<string>196 422 195 44 0 0 1024 746 </string>
</dict>
<key>IBFramework Version</key>
<string>364.0</string>
<key>IBOpenObjects</key>
<array>
<integer>29</integer>
</array>
<key>IBSystem Version</key>
<string>7W98</string>
</dict>
</plist>

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View file

@ -0,0 +1,192 @@
#include "sdlayer.h"
static unsigned int sdlappicon_pixels[] = {
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff654848, 0xffad8484,
0xffb18888, 0xffbb8f8f, 0xff936d6d, 0xff130303, 0xff987373, 0xff936d6d,
0xff100000, 0xff815f5f, 0xffaa8181, 0xff362020, 0xffa98080, 0xff5c3f3f,
0xff715252, 0xffb78b8b, 0xff130202, 0xff100000, 0xff2f1a1a, 0xffa07a7a,
0xffb78c8c, 0xffbd9090, 0xff856262, 0xff140303, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff432a2a, 0xff825f5f, 0xff190808, 0xff4c3131, 0xffd5a2a2, 0xff2c1717,
0xff7e5b5b, 0xff543939, 0xff100000, 0xff674848, 0xff6e4f4f, 0xff100000,
0xffb58989, 0xff1c0a0a, 0xff513535, 0xff7f5d5d, 0xff100000, 0xff100000,
0xff100000, 0xffa97f7f, 0xff271414, 0xff220f0f, 0xffbb8d8d, 0xff442b2b,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff432a2a, 0xffba8e8e, 0xffb88d8d, 0xffc19494,
0xff987171, 0xff110101, 0xff7e5b5b, 0xff533939, 0xff100000, 0xff694949,
0xff6e4f4f, 0xff100000, 0xffb08585, 0xff1c0a0a, 0xff513535, 0xff7b5a5a,
0xff100000, 0xff100000, 0xff100000, 0xffa67c7c, 0xff261212, 0xff100000,
0xff956e6e, 0xff704f4f, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff4c3232, 0xff896565,
0xff261212, 0xff503535, 0xffd4a2a2, 0xff351e1e, 0xff755454, 0xff835f5f,
0xff261111, 0xff936c6c, 0xff715050, 0xff160505, 0xffb28686, 0xff241111,
0xff573a3a, 0xff836060, 0xff251111, 0xff674949, 0xff140303, 0xffa77e7e,
0xff392222, 0xff3a2222, 0xffbf9191, 0xff3b2424, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff725252, 0xffb78a8a, 0xffc19292, 0xffba8c8c, 0xff866161, 0xff110101,
0xff2c1818, 0xffb28585, 0xffc49393, 0xffab8080, 0xff261313, 0xff3f2727,
0xffb18686, 0xff644545, 0xff7c5a5a, 0xffb98c8c, 0xffc09191, 0xffba8c8c,
0xff341e1e, 0xffa77e7e, 0xffbf9090, 0xffba8d8d, 0xff745353, 0xff110101,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff272159, 0xff383793, 0xff3e3da3, 0xff2e286b,
0xff2e296e, 0xff2a2157, 0xff100001, 0xff37358e, 0xff140611, 0xff353286,
0xff3d3ca0, 0xff3f3c9f, 0xff180a1a, 0xff323080, 0xff353285, 0xff261e51,
0xff322c75, 0xff100000, 0xff322e7b, 0xff1f153a, 0xff333284, 0xff3b3a9d,
0xff403fa8, 0xff13040b, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff2e296d, 0xff251c4b,
0xff1a0d25, 0xff110104, 0xff353284, 0xff5453db, 0xff1a0d22, 0xff3e3da6,
0xff231a47, 0xff332f7d, 0xff150714, 0xff2c225b, 0xff1f1333, 0xff2b2461,
0xff281f54, 0xff2a235d, 0xff5454df, 0xff251a44, 0xff38358f, 0xff211841,
0xff332f7e, 0xff1c0f29, 0xff140611, 0xff100000, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff2f296f, 0xff3e3ca0, 0xff332e7d, 0xff100000, 0xff363287, 0xff2d2667,
0xff3f3ca0, 0xff4746bc, 0xff241b4a, 0xff2a235f, 0xff1e1436, 0xff3d3b9e,
0xff1f1231, 0xff2a225d, 0xff271f52, 0xff2a2461, 0xff30296e, 0xff4441af,
0xff4443b2, 0xff231944, 0xff3e3ea5, 0xff3c3998, 0xff1a0e25, 0xff100000,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff302a73, 0xff2e2768, 0xff241b48, 0xff1e1232,
0xff39358f, 0xff190d24, 0xff35307f, 0xff5150d4, 0xff22173f, 0xff4746b9,
0xff2a2159, 0xff4947bd, 0xff261d4d, 0xff35307f, 0xff352f7d, 0xff2d2667,
0xff261c4c, 0xff292158, 0xff5555df, 0xff231a47, 0xff38358f, 0xff251b49,
0xff261c4c, 0xff110205, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff221842, 0xff2f286c,
0xff2f286b, 0xff221840, 0xff383b78, 0xff292c43, 0xff2a2c43, 0xff4650a1,
0xff252633, 0xff424a92, 0xff4650a3, 0xff3d4587, 0xff252634, 0xff404990,
0xff40498f, 0xff363c6e, 0xff2f3458, 0xff252633, 0xff4851a4, 0xff1a0e26,
0xff2d2666, 0xff2f286b, 0xff2e276a, 0xff110206, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff446281, 0xff527ea5,
0xff4f799e, 0xff537fa6, 0xff517ca3, 0xff5a88b3, 0xff45698a, 0xff537fa7,
0xff4e779b, 0xff5480a8, 0xff5581a9, 0xff5683ac, 0xff5987b1, 0xff5887b0,
0xff547fa7, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff241d34, 0xff251f3c, 0xff1c101d, 0xff14080c,
0xff4d5c85, 0xff546a96, 0xff4b5f87, 0xff36475f, 0xff5b6f86, 0xff507096,
0xff405683, 0xff394d6e, 0xff51657c, 0xff556f92, 0xff405785, 0xff394e72,
0xff435d86, 0xff466094, 0xff466095, 0xff261c33, 0xff211b3a, 0xff221d3b,
0xff150913, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff100000, 0xff170b1a, 0xff505cb1, 0xff363d88,
0xff241e3f, 0xff31305e, 0xff45498c, 0xff424381, 0xff3c3c7e, 0xff2a295d,
0xff6b72a4, 0xff2c2d76, 0xff2e2f7e, 0xff252565, 0xff6771a5, 0xff2c2d78,
0xff2f3180, 0xff292970, 0xff424999, 0xff313188, 0xff2d2d7b, 0xff414a9c,
0xff343490, 0xff2f2e7f, 0xff150b1c, 0xff100000, 0xff100103, 0xff150714,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff32305e,
0xff3a3f98, 0xff394095, 0xff1e163c, 0xff3f3c77, 0xff323388, 0xff434991,
0xff303082, 0xff39438f, 0xff313385, 0xff323481, 0xff3e4598, 0xff2d2e7d,
0xff454ba0, 0xff2c2c7a, 0xff3b429e, 0xff2c2c79, 0xff4249ac, 0xff323289,
0xff191532, 0xff4c51a2, 0xff393998, 0xff211e48, 0xff100104, 0xff100000,
0xff180b1f, 0xff251c4a, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff100000, 0xff4751a7, 0xff3b3b9e, 0xff424ea6, 0xff1f173f, 0xff3e4293,
0xff363694, 0xff3b4598, 0xff353592, 0xff424793, 0xff373796, 0xff3b3f8f,
0xff393a9b, 0xff393a89, 0xff4244a1, 0xff2d2f7a, 0xff27225c, 0xff272460,
0xff4a50b1, 0xff3e3ea5, 0xff383b95, 0xff4b53c0, 0xff4343ae, 0xff3a3c98,
0xff100206, 0xff100000, 0xff2a225b, 0xff1d112e, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff1a0e22, 0xff545bc6, 0xff3e42a0, 0xff464db5,
0xff231b47, 0xff4f58b7, 0xff3e3ea3, 0xff4e53ab, 0xff393998, 0xff4045a8,
0xff4040a7, 0xff3d4798, 0xff4141ab, 0xff3d459a, 0xff4242ad, 0xff3a4094,
0xff4444b0, 0xff3c439c, 0xff4445b1, 0xff2d2c76, 0xff1d1736, 0xff4c54bf,
0xff36358e, 0xff11030a, 0xff0f0000, 0xff100000, 0xff4547ab, 0xff1b0f29,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff3a3671, 0xff494bb6,
0xff4c52a4, 0xff5052b1, 0xff2b2663, 0xff4b52c0, 0xff4445b1, 0xff4344af,
0xff2d2a70, 0xff4d58be, 0xff3e3ea2, 0xff4149a6, 0xff4040a7, 0xff464da6,
0xff4444b1, 0xff454ca2, 0xff4444b0, 0xff414ca1, 0xff4444b3, 0xff343585,
0xff323473, 0xff4a4cc3, 0xff3f45a1, 0xff1e182d, 0xff100000, 0xff190e26,
0xff758bf0, 0xff21173f, 0xff100000, 0xff100000, 0xff100000, 0xff100001,
0xff5052af, 0xff4545b8, 0xff4e51bd, 0xff4444b4, 0xff36378f, 0xff525ac3,
0xff333284, 0xff12050e, 0xff170915, 0xff4c52c6, 0xff4343b2, 0xff5053c2,
0xff3a3a9c, 0xff4045aa, 0xff4848be, 0xff484abf, 0xff4242b0, 0xff3f45a6,
0xff4545b7, 0xff4343b2, 0xff474cab, 0xff4545b9, 0xff4646bd, 0xff1f1a45,
0xff160918, 0xff5e65c0, 0xffc4d6f6, 0xff4244a4, 0xff100103, 0xff100000,
0xff100000, 0xff1a0e23, 0xff575cd5, 0xff4140aa, 0xff34307b, 0xff4949c3,
0xff3d439f, 0xff4b4ec4, 0xff2b2666, 0xff100000, 0xff13040a, 0xff313279,
0xff3f3fa9, 0xff3e41a5, 0xff333681, 0xff333183, 0xff4041ad, 0xff4248ae,
0xff4751b6, 0xff5467ca, 0xff556bcc, 0xff5870d1, 0xff7385d6, 0xff7b87d3,
0xff9096d5, 0xff969fd7, 0xffb6bef0, 0xffebeff9, 0xfffafafa, 0xffadc5f7,
0xff5567c8, 0xff2e2768, 0xff100000, 0xff373872, 0xff5154d4, 0xff332e7a,
0xff33326d, 0xff4d4dcf, 0xff474fa7, 0xff4444b4, 0xff2d2761, 0xff2a2751,
0xff3a4186, 0xff4b52bb, 0xff535ed5, 0xff5762df, 0xff5666e6, 0xff5a66ef,
0xff5b6bee, 0xff5b73d9, 0xff5062b6, 0xff444f9c, 0xff3d4685, 0xff373b71,
0xff373769, 0xff433b67, 0xff433c66, 0xff433e70, 0xff7179d1, 0xffccd9f6,
0xffd1dbf4, 0xff6166bd, 0xff201639, 0xff110205, 0xff100001, 0xff525abb,
0xff5050d7, 0xff231a45, 0xff3c3a63, 0xff3d3da4, 0xff3e46a1, 0xff404ba1,
0xff3f47a2, 0xff3f42a7, 0xff4545b7, 0xff4c4ccb, 0xff5050d7, 0xff4e4fd1,
0xff393792, 0xff251c4d, 0xff160a1b, 0xff100103, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff1a0f29, 0xff6d87f4, 0xff5b67d8, 0xff150712, 0xff100000, 0xff100000,
0xff1c1227, 0xff5b66de, 0xff4646bf, 0xff261f4e, 0xff3c4389, 0xff3c4599,
0xff2f317c, 0xff2d2d7a, 0xff303081, 0xff34348f, 0xff383898, 0xff3b3b9e,
0xff2a2a64, 0xff150817, 0xff0f0000, 0xff100000, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff100103, 0xff5863e1, 0xff2e286a, 0xff100000,
0xff100000, 0xff100000, 0xff38386d, 0xff4143aa, 0xff3f499e, 0xff374089,
0xff2b2b73, 0xff2b2b75, 0xff2a2a73, 0xff2b2b74, 0xff2d2d7b, 0xff303081,
0xff2c2e75, 0xff150f1c, 0xff0f0000, 0xff100000, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff4c4bc6,
0xff150815, 0xff100000, 0xff100000, 0xff100000, 0xff3a438e, 0xff353f84,
0xff262766, 0xff262665, 0xff262666, 0xff272769, 0xff272769, 0xff28286d,
0xff292970, 0xff272769, 0xff120a0f, 0xff100000, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff100001, 0xff3a358f, 0xff0f0000, 0xff100000, 0xff100000, 0xff100000,
0xff170e10, 0xff16060e, 0xff13050e, 0xff19060e, 0xff19070e, 0xff110103,
0xff100002, 0xff100002, 0xff100002, 0xff100001, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff13050e, 0xff28215b, 0xff100000, 0xff100000,
0xff100000, 0xff100000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000,
0xff000000, 0xff000000, 0xff000000, 0xff000000,};
static unsigned char sdlappicon_mask[] = {
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255,};
struct sdlappicon sdlappicon = {
32,32, // width,height
sdlappicon_pixels,
sdlappicon_mask
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

File diff suppressed because it is too large Load diff

BIN
polymer/build/rsrc/game.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
polymer/build/rsrc/game.xcf Normal file

Binary file not shown.

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View file

@ -0,0 +1,192 @@
#include "sdlayer.h"
static unsigned int sdlappicon_pixels[] = {
0xff415f7a, 0xff364a5c, 0xff364a5c, 0xff607486, 0xff667a8c, 0xff667a8c,
0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff667a8c,
0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff667a8c,
0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff667a8c,
0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff607486, 0xff364a5c,
0xff364a5c, 0xff415f7a, 0xff364a5c, 0xff202020, 0xff202020, 0xff747474,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff747474, 0xff202020, 0xff202020, 0xff364a5c, 0xff364a5c, 0xff334d66,
0xff334d66, 0xff747474, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff747474, 0xff334d66, 0xff334d66, 0xff364a5c,
0xff364a5c, 0xff334d66, 0xff334d66, 0xff747474, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff747474, 0xff334d66,
0xff334d66, 0xff364a5c, 0xff364a5c, 0xff202020, 0xff202020, 0xff5c5c5c,
0xff404040, 0xff808080, 0xff646464, 0xff686868, 0xff686868, 0xff686868,
0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868,
0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868,
0xff686868, 0xff686868, 0xff686868, 0xff646464, 0xff7c7c7c, 0xff404040,
0xff5c5c5c, 0xff202020, 0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020,
0xff202020, 0xff6c6c6c, 0xff686868, 0xff808080, 0xff686868, 0xff808080,
0xff808080, 0xff808080, 0xff6c6c6c, 0xff6a6a6a, 0xff727272, 0xff6c6c6c,
0xff6c6c6c, 0xff767676, 0xff626262, 0xff6c6c6c, 0xff808080, 0xff6c6c6c,
0xff686868, 0xff747474, 0xff808080, 0xff808080, 0xff808080, 0xff707070,
0xff787878, 0xff686868, 0xff6c6c6c, 0xff202020, 0xff202020, 0xff364a5c,
0xff364a5c, 0xff202020, 0xff202020, 0xff747474, 0xff808080, 0xff808080,
0xff686868, 0xff808080, 0xff808080, 0xff808080, 0xff6c6c6c, 0xff6a6a6a,
0xff727272, 0xff6a6a6a, 0xff6a6a6a, 0xff808080, 0xff6c6c6c, 0xff6c6c6c,
0xff808080, 0xff6c6c6c, 0xff7c7c7c, 0xff6c6c6c, 0xff808080, 0xff808080,
0xff808080, 0xff707070, 0xff787878, 0xff808080, 0xff747474, 0xff202020,
0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020, 0xff202020, 0xff747474,
0xff808080, 0xff808080, 0xff686868, 0xff808080, 0xff808080, 0xff808080,
0xff767676, 0xff6c6c6c, 0xff7c7c7c, 0xff707070, 0xff707070, 0xff767676,
0xff6c6c6c, 0xff767676, 0xff6c6c6c, 0xff767676, 0xff6c6c6c, 0xff7e7e7e,
0xff808080, 0xff808080, 0xff808080, 0xff707070, 0xff787878, 0xff808080,
0xff747474, 0xff202020, 0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020,
0xff202020, 0xff747474, 0xff808080, 0xff808080, 0xff646464, 0xff686868,
0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868,
0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868,
0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff646464,
0xff787878, 0xff808080, 0xff747474, 0xff202020, 0xff202020, 0xff364a5c,
0xff364a5c, 0xff202020, 0xff202020, 0xff747474, 0xff808080, 0xff808080,
0xff686868, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff707070, 0xff787878, 0xff808080, 0xff747474, 0xff202020,
0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020, 0xff202020, 0xff747474,
0xff808080, 0xff808080, 0xff686868, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff707070, 0xff787878, 0xff808080,
0xff747474, 0xff202020, 0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020,
0xff202020, 0xff747474, 0xff808080, 0xff808080, 0xff686868, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff707070,
0xff787878, 0xff808080, 0xff747474, 0xff202020, 0xff202020, 0xff364a5c,
0xff364a5c, 0xff202020, 0xff202020, 0xff747474, 0xff808080, 0xff808080,
0xff646464, 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868,
0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868,
0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868,
0xff686868, 0xff646464, 0xff787878, 0xff808080, 0xff747474, 0xff202020,
0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020, 0xff202020, 0xff747474,
0xff808080, 0xff808080, 0xff686868, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff707070, 0xff787878, 0xff808080,
0xff747474, 0xff202020, 0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020,
0xff202020, 0xff747474, 0xff808080, 0xff808080, 0xff686868, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff707070,
0xff787878, 0xff808080, 0xff747474, 0xff202020, 0xff202020, 0xff364a5c,
0xff364a5c, 0xff202020, 0xff202020, 0xff747474, 0xff808080, 0xff808080,
0xff686868, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff707070, 0xff787878, 0xff808080, 0xff747474, 0xff202020,
0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020, 0xff202020, 0xff747474,
0xff808080, 0xff808080, 0xff6c6c6c, 0xff686868, 0xff686868, 0xff686868,
0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868,
0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868,
0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff787878, 0xff808080,
0xff747474, 0xff202020, 0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020,
0xff202020, 0xff747474, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff747474, 0xff202020, 0xff202020, 0xff364a5c,
0xff364a5c, 0xff202020, 0xff202020, 0xff666666, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080,
0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff666666, 0xff202020,
0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020, 0xff202020, 0xff3c3c3c,
0xff666666, 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff747474,
0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff747474,
0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff747474,
0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff666666,
0xff3c3c3c, 0xff202020, 0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020,
0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020,
0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020,
0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020,
0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020,
0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff364a5c,
0xff364a5c, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020,
0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020,
0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020,
0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020,
0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020,
0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020, 0xff202020, 0xff202020,
0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff302424, 0xff3e3e3e,
0xff484848, 0xff444444, 0xff444444, 0xff464646, 0xff4c4c4c, 0xff484848,
0xff484848, 0xff4a4a4a, 0xff4c4c4c, 0xff4c4c4c, 0xff4c4c4c, 0xff4c4c4c,
0xff4a4a4a, 0xff404040, 0xff343434, 0xff343434, 0xff343434, 0xff343434,
0xff2c2c2c, 0xff202020, 0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020,
0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020,
0xff3c3c3c, 0xff727272, 0xff707070, 0xff565656, 0xff505050, 0xff525252,
0xff6a6a6a, 0xff787878, 0xff767676, 0xff747474, 0xff7a7a7a, 0xff7c7c7c,
0xff787878, 0xff787878, 0xff7a7a7a, 0xff727272, 0xff505050, 0xff484848,
0xff484848, 0xff484848, 0xff464646, 0xff202020, 0xff202020, 0xff364a5c,
0xff364a5c, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020,
0xff202020, 0xff202020, 0xff444444, 0xff6c6c6c, 0xff6c6c6c, 0xff303030,
0xff202020, 0xff202020, 0xff545454, 0xff787878, 0xff747474, 0xff747474,
0xff787878, 0xff7c7c7c, 0xff808080, 0xff808080, 0xff7a7a7a, 0xff747474,
0xff505050, 0xff484848, 0xff484848, 0xff484848, 0xff484848, 0xff202020,
0xff202020, 0xff364a5c, 0xff364a5c, 0xff282828, 0xff606060, 0xff686868,
0xff747474, 0xff4e4e4e, 0xff565656, 0xff202020, 0xff444444, 0xff686868,
0xff6c6c6c, 0xff303030, 0xff202020, 0xff202020, 0xff545454, 0xff767676,
0xff767676, 0xff767676, 0xff7c7c7c, 0xff787878, 0xff7c7c7c, 0xff7c7c7c,
0xff7e7e7e, 0xff767676, 0xff505050, 0xff484848, 0xff484848, 0xff484848,
0xff484848, 0xff202020, 0xff202020, 0xff364a5c, 0xff364a5c, 0xff606060,
0xffa8a8a8, 0xff7e7e7e, 0xffa8a8a8, 0xff6c6c6c, 0xff7c7c7c, 0xff202020,
0xff444444, 0xff6a6a6a, 0xff6c6c6c, 0xff303030, 0xff202020, 0xff202020,
0xff545454, 0xff747474, 0xff787878, 0xff787878, 0xff7e7e7e, 0xff7c7c7c,
0xff787878, 0xff787878, 0xff828282, 0xff7c7c7c, 0xff505050, 0xff484848,
0xff484848, 0xff484848, 0xff484848, 0xff202020, 0xff202020, 0xff364a5c,
0xff364a5c, 0xff7c7c7c, 0xff808080, 0xff404040, 0xffa8a8a8, 0xffa0a0a0,
0xff7c7c7c, 0xff202020, 0xff464646, 0xff767676, 0xff727272, 0xff303030,
0xff202020, 0xff202020, 0xff545454, 0xff767676, 0xff7a7a7a, 0xff787878,
0xff7e7e7e, 0xff7c7c7c, 0xff787878, 0xff7c7c7c, 0xff8c8c8c, 0xff7e7e7e,
0xff505050, 0xff484848, 0xff484848, 0xff484848, 0xff484848, 0xff222222,
0xff25303a, 0xff364a5c, 0xff364a5c, 0xff606060, 0xffa8a8a8, 0xff7e7e7e,
0xffa8a8a8, 0xff6c6c6c, 0xff7c7c7c, 0xff202020, 0xff484848, 0xff787878,
0xff727272, 0xff303030, 0xff202020, 0xff202020, 0xff585858, 0xff808080,
0xff808080, 0xff808080, 0xff888888, 0xff868686, 0xff7e7e7e, 0xff7a7a7a,
0xff848484, 0xff747474, 0xff505050, 0xff484848, 0xff484848, 0xff484848,
0xff484848, 0xff252b30, 0xff2a4054, 0xff385168, 0xff3a5874, 0xff282c30,
0xff606060, 0xff686868, 0xff747474, 0xff4e4e4e, 0xff565656, 0xff202020,
0xff484848, 0xff787878, 0xff707070, 0xff303030, 0xff202020, 0xff202020,
0xff585858, 0xff7c7c7c, 0xff7a7a7a, 0xff787878, 0xff828282, 0xff808080,
0xff808080, 0xff7c7c7c, 0xff828282, 0xff747474, 0xff505050, 0xff484848,
0xff484848, 0xff484848, 0xff484848, 0xff242424, 0xff26394c, 0xff364a5c,
0xff4c7498, 0xff334d66, 0xff202428, 0xff202020, 0xff202020, 0xff202020,
0xff202020, 0xff202428, 0xff4c5660, 0xff747474, 0xff707070, 0xff585858,
0xff585858, 0xff5c5c5c, 0xff747474, 0xff7c7c7c, 0xff707070, 0xff787878,
0xff7c7c7c, 0xff787878, 0xff7c7c7c, 0xff868686, 0xff828282, 0xff787878,
0xff505050, 0xff484848, 0xff484848, 0xff484848, 0xff464646, 0xff202020,
0xff202020, 0xff364a5c, 0xff4c7498, 0xff4c7498, 0xff3a5874, 0xff364a5c,
0xff364a5c, 0xff364a5c, 0xff364a5c, 0xff3a5874, 0xff55738e, 0xff5a6e80,
0xff5e7284, 0xff5e7284, 0xff64788a, 0xff687c8e, 0xff6c8092, 0xff667a8c,
0xff627688, 0xff627688, 0xff627688, 0xff627688, 0xff64788a, 0xff6a7e90,
0xff667a8c, 0xff627688, 0xff4e6274, 0xff4a5e70, 0xff4a5e70, 0xff4a5e70,
0xff44586a, 0xff364a5c, 0xff364a5c, 0xff415f7a,};
static unsigned char sdlappicon_mask[] = {
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255,};
struct sdlappicon sdlappicon = {
32,32, // width,height
sdlappicon_pixels,
sdlappicon_mask
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

298
polymer/build/src/a-c.c Normal file
View file

@ -0,0 +1,298 @@
// A.ASM replacement using C
// Mainly by Ken Silverman, with things melded with my port by
// Jonathon Fowler (jonof@edgenetwork.org)
//
// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman
// Ken Silverman's official web site: "http://www.advsys.net/ken"
// See the included license file "BUILDLIC.TXT" for license info.
#include "a.h"
#ifndef ENGINE_USING_A_C
# error A.H has indicated that optimized code has been requested. This means a-c.c is being compiled \
when USE_A_C has not been defined.
#endif
long krecip(long num); // from engine.c
#define BITSOFPRECISION 3
#define BITSOFPRECISIONPOW 8
extern long asm1, asm2, asm3, asm4, fpuasm, globalx3, globaly3;
extern void *reciptable;
static long bpl, transmode = 0;
static long glogx, glogy, gbxinc, gbyinc, gpinc;
static char *gbuf, *gpal, *ghlinepal, *gtrans;
//Global variable functions
void setvlinebpl(long dabpl) { bpl = dabpl; }
void fixtransluscence(long datransoff) { gtrans = (char *)datransoff; }
void settransnormal(void) { transmode = 0; }
void settransreverse(void) { transmode = 1; }
//Ceiling/floor horizontal line functions
void sethlinesizes(long logx, long logy, long bufplc)
{ glogx = logx; glogy = logy; gbuf = (char *)bufplc; }
void setpalookupaddress(char *paladdr) { ghlinepal = paladdr; }
void setuphlineasm4(long bxinc, long byinc) { gbxinc = bxinc; gbyinc = byinc; }
void hlineasm4(long cnt, long skiploadincs, long paloffs, unsigned long by, unsigned long bx, long p)
{
char *palptr;
palptr = (char *)&ghlinepal[paloffs];
if (!skiploadincs) { gbxinc = asm1; gbyinc = asm2; }
for(;cnt>=0;cnt--)
{
*((char *)p) = palptr[gbuf[((bx>>(32-glogx))<<glogy)+(by>>(32-glogy))]];
bx -= gbxinc;
by -= gbyinc;
p--;
}
}
//Sloped ceiling/floor vertical line functions
void setupslopevlin(long logylogx, long bufplc, long pinc)
{
glogx = (logylogx&255); glogy = (logylogx>>8);
gbuf = (char *)bufplc; gpinc = pinc;
}
void slopevlin(long p, long i, long slopaloffs, long cnt, long bx, long by)
{
long *slopalptr, bz, bzinc;
unsigned long u, v;
bz = asm3; bzinc = (asm1>>3);
slopalptr = (long *)slopaloffs;
for(;cnt>0;cnt--)
{
i = krecip(bz>>6); bz += bzinc;
u = bx+globalx3*i;
v = by+globaly3*i;
(*(char *)p) = *(char *)(slopalptr[0]+gbuf[((u>>(32-glogx))<<glogy)+(v>>(32-glogy))]);
slopalptr--;
p += gpinc;
}
}
//Wall,face sprite/wall sprite vertical line functions
void setupvlineasm(long neglogy) { glogy = neglogy; }
void vlineasm1(long vinc, long paloffs, long cnt, unsigned long vplc, long bufplc, long p)
{
gbuf = (char *)bufplc;
gpal = (char *)paloffs;
for(;cnt>=0;cnt--)
{
*((char *)p) = gpal[gbuf[vplc>>glogy]];
p += bpl;
vplc += vinc;
}
}
void setupmvlineasm(long neglogy) { glogy = neglogy; }
void mvlineasm1(long vinc, long paloffs, long cnt, unsigned long vplc, long bufplc, long p)
{
char ch;
gbuf = (char *)bufplc;
gpal = (char *)paloffs;
for(;cnt>=0;cnt--)
{
ch = gbuf[vplc>>glogy]; if (ch != 255) *((char *)p) = gpal[ch];
p += bpl;
vplc += vinc;
}
}
void setuptvlineasm(long neglogy) { glogy = neglogy; }
void tvlineasm1(long vinc, long paloffs, long cnt, unsigned long vplc, long bufplc, long p)
{
char ch;
gbuf = (char *)bufplc;
gpal = (char *)paloffs;
if (transmode)
{
for(;cnt>=0;cnt--)
{
ch = gbuf[vplc>>glogy];
if (ch != 255) *((char *)p) = gtrans[(*((char *)p))+(gpal[ch]<<8)];
p += bpl;
vplc += vinc;
}
}
else
{
for(;cnt>=0;cnt--)
{
ch = gbuf[vplc>>glogy];
if (ch != 255) *((char *)p) = gtrans[((*((char *)p))<<8)+gpal[ch]];
p += bpl;
vplc += vinc;
}
}
}
//Floor sprite horizontal line functions
void msethlineshift(long logx, long logy) { glogx = logx; glogy = logy; }
void mhline(long bufplc, unsigned long bx, long cntup16, long junk, unsigned long by, long p)
{
char ch;
gbuf = (char *)bufplc;
gpal = (char *)asm3;
for(cntup16>>=16;cntup16>0;cntup16--)
{
ch = gbuf[((bx>>(32-glogx))<<glogy)+(by>>(32-glogy))];
if (ch != 255) *((char *)p) = gpal[ch];
bx += asm1;
by += asm2;
p++;
}
}
void tsethlineshift(long logx, long logy) { glogx = logx; glogy = logy; }
void thline(long bufplc, unsigned long bx, long cntup16, long junk, unsigned long by, long p)
{
char ch;
gbuf = (char *)bufplc;
gpal = (char *)asm3;
if (transmode)
{
for(cntup16>>=16;cntup16>0;cntup16--)
{
ch = gbuf[((bx>>(32-glogx))<<glogy)+(by>>(32-glogy))];
if (ch != 255) *((char *)p) = gtrans[(*((char *)p))+(gpal[ch]<<8)];
bx += asm1;
by += asm2;
p++;
}
}
else
{
for(cntup16>>=16;cntup16>0;cntup16--)
{
ch = gbuf[((bx>>(32-glogx))<<glogy)+(by>>(32-glogy))];
if (ch != 255) *((char *)p) = gtrans[((*((char *)p))<<8)+gpal[ch]];
bx += asm1;
by += asm2;
p++;
}
}
}
//Rotatesprite vertical line functions
void setupspritevline(long paloffs, long bxinc, long byinc, long ysiz)
{
gpal = (char *)paloffs;
gbxinc = bxinc;
gbyinc = byinc;
glogy = ysiz;
}
void spritevline(long bx, long by, long cnt, long bufplc, long p)
{
gbuf = (char *)bufplc;
for(;cnt>1;cnt--)
{
(*(char *)p) = gpal[gbuf[(bx>>16)*glogy+(by>>16)]];
bx += gbxinc;
by += gbyinc;
p += bpl;
}
}
//Rotatesprite vertical line functions
void msetupspritevline(long paloffs, long bxinc, long byinc, long ysiz)
{
gpal = (char *)paloffs;
gbxinc = bxinc;
gbyinc = byinc;
glogy = ysiz;
}
void mspritevline(long bx, long by, long cnt, long bufplc, long p)
{
char ch;
gbuf = (char *)bufplc;
for(;cnt>1;cnt--)
{
ch = gbuf[(bx>>16)*glogy+(by>>16)];
if (ch != 255) (*(char *)p) = gpal[ch];
bx += gbxinc;
by += gbyinc;
p += bpl;
}
}
void tsetupspritevline(long paloffs, long bxinc, long byinc, long ysiz)
{
gpal = (char *)paloffs;
gbxinc = bxinc;
gbyinc = byinc;
glogy = ysiz;
}
void tspritevline(long bx, long by, long cnt, long bufplc, long p)
{
char ch;
gbuf = (char *)bufplc;
if (transmode)
{
for(;cnt>1;cnt--)
{
ch = gbuf[(bx>>16)*glogy+(by>>16)];
if (ch != 255) *((char *)p) = gtrans[(*((char *)p))+(gpal[ch]<<8)];
bx += gbxinc;
by += gbyinc;
p += bpl;
}
}
else
{
for(;cnt>1;cnt--)
{
ch = gbuf[(bx>>16)*glogy+(by>>16)];
if (ch != 255) *((char *)p) = gtrans[((*((char *)p))<<8)+gpal[ch]];
bx += gbxinc;
by += gbyinc;
p += bpl;
}
}
}
void setupdrawslab (long dabpl, long pal)
{ bpl = dabpl; gpal = (char *)pal; }
void drawslab (long dx, long v, long dy, long vi, long vptr, long p)
{
long x;
while (dy > 0)
{
for(x=0;x<dx;x++) *(char *)(p+x) = gpal[(long)(*(char *)((v>>16)+vptr))];
p += bpl; v += vi; dy--;
}
}
void stretchhline (long p0, long u, long cnt, long uinc, long rptr, long p)
{
p0 = p-(cnt<<2);
do
{
p--;
*(char *)p = *(char *)((u>>16)+rptr); u -= uinc;
} while (p > p0);
}
void mmxoverlay() { }
/*
* vim:ts=4:
*/

2664
polymer/build/src/a.masm Normal file

File diff suppressed because it is too large Load diff

2751
polymer/build/src/a.nasm Normal file

File diff suppressed because it is too large Load diff

2420
polymer/build/src/a.wasm Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,206 @@
#include "compat.h"
#include "osd.h"
#include "build.h"
#include "engineinfo.h"
#include "baselayer.h"
#ifdef RENDERTYPEWIN
#include "winlayer.h"
#endif
#ifdef USE_OPENGL
struct glinfo glinfo = {
"Unknown", // vendor
"Unknown", // renderer
"0.0.0", // version
"", // extensions
1.0, // max anisotropy
0, // brga texture format
0, // clamp-to-edge support
0, // texture compression
0, // non-power-of-two textures
0, // multisampling
0, // nvidia multisampling hint
};
#endif
static int osdfunc_dumpbuildinfo(const osdfuncparm_t *parm)
{
OSD_Printf(
"Build engine compilation:\n"
" CFLAGS: %s\n"
" LIBS: %s\n"
" Host: %s\n"
" Compiler: %s\n"
" Built: %s\n",
_engine_cflags,
_engine_libs,
_engine_uname,
_engine_compiler,
_engine_date);
return OSDCMD_OK;
}
static void onvideomodechange(int newmode) { }
void (*baselayer_onvideomodechange)(int) = onvideomodechange;
static int osdfunc_setrendermode(const osdfuncparm_t *parm)
{
int m;
char *p;
char *modestrs[] = {
"classic software", "polygonal flat-shaded software",
"polygonal textured software", "polygonal OpenGL"
};
if (parm->numparms != 1) return OSDCMD_SHOWHELP;
m = Bstrtol(parm->parms[0], &p, 10);
if (m < 0 || m > 3) return OSDCMD_SHOWHELP;
setrendermode(m);
OSD_Printf("Rendering method changed to %s\n", modestrs[ getrendermode() ] );
return OSDCMD_OK;
}
#if defined(POLYMOST) && defined(USE_OPENGL)
#ifdef DEBUGGINGAIDS
static int osdcmd_hicsetpalettetint(const osdfuncparm_t *parm)
{
long pal, cols[3], eff;
char *p;
if (parm->numparms != 5) return OSDCMD_SHOWHELP;
pal = Batol(parm->parms[0]);
cols[0] = Batol(parm->parms[1]);
cols[1] = Batol(parm->parms[2]);
cols[2] = Batol(parm->parms[3]);
eff = Batol(parm->parms[4]);
hicsetpalettetint(pal,cols[0],cols[1],cols[2],eff);
return OSDCMD_OK;
}
#endif
static int osdcmd_glinfo(const osdfuncparm_t *parm)
{
char *s,*t,*u,i;
if (bpp == 8) {
OSD_Printf("glinfo: Not in OpenGL mode.\n");
return OSDCMD_OK;
}
OSD_Printf("OpenGL Information:\n"
" Version: %s\n"
" Vendor: %s\n"
" Renderer: %s\n"
" Maximum anisotropy: %.1f%s\n"
" BGRA textures: %s\n"
" Non-x^2 textures: %s\n"
" Texure compression: %s\n"
" Clamp-to-edge: %s\n"
" Multisampling: %s\n"
" Nvidia multisample hint: %s\n"
" Extensions:\n",
glinfo.version,
glinfo.vendor,
glinfo.renderer,
glinfo.maxanisotropy, glinfo.maxanisotropy>1.0?"":" (no anisotropic filtering)",
glinfo.bgra ? "supported": "not supported",
glinfo.texnpot ? "supported": "not supported",
glinfo.texcompr ? "supported": "not supported",
glinfo.clamptoedge ? "supported": "not supported",
glinfo.multisample ? "supported": "not supported",
glinfo.nvmultisamplehint ? "supported": "not supported"
);
s = Bstrdup(glinfo.extensions);
if (!s) OSD_Printf(glinfo.extensions);
else {
i = 0; t = u = s;
while (*t) {
if (*t == ' ') {
if (i&1) {
*t = 0;
OSD_Printf(" %s\n",u);
u = t+1;
}
i++;
}
t++;
}
if (i&1) OSD_Printf(" %s\n",u);
Bfree(s);
}
return OSDCMD_OK;
}
#endif
static int osdcmd_vars(const osdfuncparm_t *parm)
{
int showval = (parm->numparms < 1);
if (!Bstrcasecmp(parm->name, "screencaptureformat")) {
const char *fmts[2][2] = { {"TGA", "PCX"}, {"0", "1"} };
if (showval) { OSD_Printf("captureformat is %s\n", fmts[captureformat]); }
else {
int i,j;
for (j=0; j<2; j++)
for (i=0; i<2; i++)
if (!Bstrcasecmp(parm->parms[0], fmts[j][i])) break;
if (j == 2) return OSDCMD_SHOWHELP;
captureformat = i;
}
return OSDCMD_OK;
}
#ifdef SUPERBUILD
else if (!Bstrcasecmp(parm->name, "novoxmips")) {
if (showval) { OSD_Printf("novoxmips is %d\n", novoxmips); }
else { novoxmips = (atoi(parm->parms[0]) != 0); }
}
else if (!Bstrcasecmp(parm->name, "usevoxels")) {
if (showval) { OSD_Printf("usevoxels is %d\n", usevoxels); }
else { usevoxels = (atoi(parm->parms[0]) != 0); }
}
#endif
return OSDCMD_SHOWHELP;
}
int baselayer_init(void)
{
#ifdef POLYMOST
OSD_RegisterFunction("setrendermode","setrendermode <number>: sets the engine's rendering mode.\n"
"Mode numbers are:\n"
" 0 - Classic Build software\n"
" 1 - Polygonal flat-shaded software\n"
" 2 - Polygonal textured software\n"
#ifdef USE_OPENGL
" 3 - Polygonal OpenGL\n"
#endif
,
osdfunc_setrendermode);
#endif
OSD_RegisterFunction("dumpbuildinfo","dumpbuildinfo: outputs engine compilation information",osdfunc_dumpbuildinfo);
OSD_RegisterFunction("screencaptureformat","screencaptureformat: sets the output format for screenshots (TGA or PCX)",osdcmd_vars);
#ifdef SUPERBUILD
OSD_RegisterFunction("novoxmips","novoxmips: turn off/on the use of mipmaps when rendering 8-bit voxels",osdcmd_vars);
OSD_RegisterFunction("usevoxels","usevoxels: enable/disable automatic sprite->voxel rendering",osdcmd_vars);
#endif
#if defined(POLYMOST) && defined(USE_OPENGL)
#ifdef DEBUGGINGAIDS
OSD_RegisterFunction("hicsetpalettetint","hicsetpalettetint: sets palette tinting values",osdcmd_hicsetpalettetint);
#endif
OSD_RegisterFunction("glinfo","glinfo: shows OpenGL information about the current OpenGL mode",osdcmd_glinfo);
#endif
return 0;
}

574
polymer/build/src/bstub.c Normal file
View file

@ -0,0 +1,574 @@
// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman
// Ken Silverman's official web site: "http://www.advsys.net/ken"
// See the included license file "BUILDLIC.TXT" for license info.
//
// This file has been modified from Ken Silverman's original release
// by Jonathon Fowler (jonof@edgenetwk.com)
#include "compat.h"
#include "a.h"
#include "build.h"
#include "editor.h"
#include "pragmas.h"
#include "baselayer.h"
#include "names.h"
#include "osd.h"
#include "cache1d.h"
static char tempbuf[256];
#define NUMOPTIONS 9
char option[NUMOPTIONS] = {0,0,0,0,0,0,1,0,0};
char keys[NUMBUILDKEYS] =
{
0xc8,0xd0,0xcb,0xcd,0x2a,0x9d,0x1d,0x39,
0x1e,0x2c,0xd1,0xc9,0x33,0x34,
0x9c,0x1c,0xd,0xc,0xf,0x45
};
//static long hang = 0;
//static long rollangle = 0;
//Detecting 2D / 3D mode:
// qsetmode is 200 in 3D mode
// qsetmode is 350/480 in 2D mode
//
//You can read these variables when F5-F8 is pressed in 3D mode only:
//
// If (searchstat == 0) WALL searchsector=sector, searchwall=wall
// If (searchstat == 1) CEILING searchsector=sector
// If (searchstat == 2) FLOOR searchsector=sector
// If (searchstat == 3) SPRITE searchsector=sector, searchwall=sprite
// If (searchstat == 4) MASKED WALL searchsector=sector, searchwall=wall
//
// searchsector is the sector of the selected item for all 5 searchstat's
//
// searchwall is undefined if searchstat is 1 or 2
// searchwall is the wall if searchstat = 0 or 4
// searchwall is the sprite if searchstat = 3 (Yeah, I know - it says wall,
// but trust me, it's the sprite number)
long averagefps;
#define AVERAGEFRAMES 32
static unsigned long frameval[AVERAGEFRAMES];
static long framecnt = 0;
char *defsfilename = "kenbuild.def";
char *startwin_labeltext = "Starting Build Editor...";
int nextvoxid = 0;
int ExtPreInit(int *argc,char ***argv)
{
return 0;
}
int ExtInit(void)
{
long i, rv = 0;
/*printf("------------------------------------------------------------------------------\n");
printf(" BUILD.EXE copyright(c) 1996 by Ken Silverman. You are granted the\n");
printf(" right to use this software for your personal use only. This is a\n");
printf(" special version to be used with \"Happy Fun KenBuild\" and may not work\n");
printf(" properly with other Build engine games. Please refer to license.doc\n");
printf(" for distribution rights\n");
printf("------------------------------------------------------------------------------\n");
getch();
*/
initgroupfile("stuff.dat");
bpp = 8;
if (loadsetup("build.cfg") < 0) initprintf("Configuration file not found, using defaults.\n"), rv = 1;
Bmemcpy((void *)buildkeys,(void *)keys,NUMBUILDKEYS); //Trick to make build use setup.dat keys
if (option[4] > 0) option[4] = 0;
if (initengine()) {
wm_msgbox("Build Engine Initialisation Error",
"There was a problem initialising the Build engine: %s", engineerrstr);
return -1;
}
initinput();
initmouse();
//You can load your own palette lookup tables here if you just
//copy the right code!
for(i=0;i<256;i++)
tempbuf[i] = ((i+32)&255); //remap colors for screwy palette sectors
makepalookup(16,tempbuf,0,0,0,1);
kensplayerheight = 32;
zmode = 0;
defaultspritecstat = 0;
pskyoff[0] = 0; pskyoff[1] = 0; pskybits = 1;
#ifdef SUPERBUILD
tiletovox[PLAYER] = nextvoxid++;
tiletovox[BROWNMONSTER] = nextvoxid++;
#endif
#ifdef _WIN32
// allowtaskswitching(0);
#endif
return rv;
}
void ExtUnInit(void)
{
uninitgroupfile();
writesetup("build.cfg");
}
void ExtSetupSpecialSpriteCols(void)
{
return;
}
//static long daviewingrange, daaspect, horizval1, horizval2;
void ExtPreCheckKeys(void)
{
long /*cosang, sinang, dx, dy, mindx,*/ i, j, k;
if (keystatus[0x3e]) //F4 - screen re-size
{
keystatus[0x3e] = 0;
//cycle through all vesa modes, then screen-buffer mode
if (keystatus[0x2a]|keystatus[0x36]) {
setgamemode(!fullscreen, xdim, ydim, bpp);
} else {
//cycle through all modes
j=-1;
// work out a mask to select the mode
for (i=0; i<validmodecnt; i++)
if ((validmode[i].xdim == xdim) &&
(validmode[i].ydim == ydim) &&
(validmode[i].fs == fullscreen) &&
(validmode[i].bpp == bpp))
{ j=i; break; }
for (k=0; k<validmodecnt; k++)
if (validmode[k].fs == fullscreen && validmode[k].bpp == bpp) break;
if (j==-1) j=k;
else {
j++;
if (j==validmodecnt) j=k;
}
setgamemode(fullscreen,validmode[j].xdim,validmode[j].ydim,bpp);
}
}
#if 0
if (keystatus[0x2a]|keystatus[0x36])
{
if (keystatus[0xcf]) hang = max(hang-1,-182);
if (keystatus[0xc7]) hang = min(hang+1,182);
}
else
{
if (keystatus[0xcf]) hang = max(hang-8,-182);
if (keystatus[0xc7]) hang = min(hang+8,182);
}
if (keystatus[0x4c]) { hang = 0; horiz = 100; }
if (hang != 0)
{
walock[4094] = 255;
// JBF 20031117: scale each dimension by a factor of 1.2, and work out
// the aspect of the screen. Anywhere you see 'i' below was the value
// '200' before I changed it. NOTE: This whole trick crashes in resolutions
// above 800x600. I'm not sure why, and fixing it is not something I intend
// to do in a real big hurry.
dx = (xdim + (xdim >> 3) + (xdim >> 4) + (xdim >> 6)) & (~7);
dy = (ydim + (ydim >> 3) + (ydim >> 4) + (ydim >> 6)) & (~7);
i = scale(320,ydim,xdim);
if (waloff[4094] == 0) allocache(&waloff[4094],/*240L*384L*/dx*dy,&walock[4094]);
setviewtotile(4094,/*240L,384L*/dy,dx);
cosang = sintable[(hang+512)&2047];
sinang = sintable[hang&2047];
dx = dmulscale1(320,cosang,i,sinang); mindx = dx;
dy = dmulscale1(-i,cosang,320,sinang);
horizval1 = dy*(320>>1)/dx-1;
dx = dmulscale1(320,cosang,-i,sinang); mindx = min(dx,mindx);
dy = dmulscale1(i,cosang,320,sinang);
horizval2 = dy*(320>>1)/dx+1;
daviewingrange = scale(65536,16384*(xdim>>1),mindx-16);
daaspect = scale(daviewingrange,scale(320,tilesizx[4094],tilesizy[4094]),horizval2+6-horizval1);
setaspect(daviewingrange,scale(daaspect,ydim*320,xdim*i));
horiz = 100-divscale15(horizval1+horizval2,daviewingrange);
}
#endif
}
#ifdef SUPERBUILD
#define MAXVOXMIPS 5
extern char *voxoff[][MAXVOXMIPS];
void ExtAnalyzeSprites(void)
{
long i, *longptr;
spritetype *tspr;
for(i=0,tspr=&tsprite[0];i<spritesortcnt;i++,tspr++)
{
if (usevoxels && tiletovox[tspr->picnum] >= 0)
{
switch(tspr->picnum)
{
case PLAYER:
if (!voxoff[ tiletovox[PLAYER] ][0]) {
if (qloadkvx(tiletovox[PLAYER],"voxel000.kvx")) {
tiletovox[PLAYER] = -1;
break;
}
}
//tspr->cstat |= 48; tspr->picnum = tiletovox[tspr->picnum];
longptr = (long *)voxoff[ tiletovox[PLAYER] ][0];
tspr->xrepeat = scale(tspr->xrepeat,56,longptr[2]);
tspr->yrepeat = scale(tspr->yrepeat,56,longptr[2]);
tspr->shade -= 6;
break;
case BROWNMONSTER:
if (!voxoff[ tiletovox[BROWNMONSTER] ][0]) {
if (qloadkvx(tiletovox[BROWNMONSTER],"voxel001.kvx")) {
tiletovox[BROWNMONSTER] = -1;
break;
}
}
//tspr->cstat |= 48; tspr->picnum = tiletovox[tspr->picnum];
break;
}
}
tspr->shade += 6;
if (sector[tspr->sectnum].ceilingstat&1)
tspr->shade += sector[tspr->sectnum].ceilingshade;
else
tspr->shade += sector[tspr->sectnum].floorshade;
}
}
#endif
void ExtCheckKeys(void)
{
long i;//, p, y, dx, dy, cosang, sinang, bufplc, tsizy, tsizyup15;
long j;
if (qsetmode == 200) //In 3D mode
{
#if 0
if (hang != 0)
{
bufplc = waloff[4094]+(mulscale16(horiz-100,xdimenscale)+(tilesizx[4094]>>1))*tilesizy[4094];
setviewback();
cosang = sintable[(hang+512)&2047];
sinang = sintable[hang&2047];
dx = dmulscale1(xdim,cosang,ydim,sinang);
dy = dmulscale1(-ydim,cosang,xdim,sinang);
begindrawing();
tsizy = tilesizy[4094];
tsizyup15 = (tsizy<<15);
dx = mulscale14(dx,daviewingrange);
dy = mulscale14(dy,daaspect);
sinang = mulscale14(sinang,daviewingrange);
cosang = mulscale14(cosang,daaspect);
p = ylookup[windowy1]+frameplace+windowx2+1;
for(y=windowy1;y<=windowy2;y++)
{
i = divscale16(tsizyup15,dx);
stretchhline(0,(xdim>>1)*i+tsizyup15,xdim>>2,i,mulscale32(i,dy)*tsizy+bufplc,p);
dx -= sinang; dy += cosang; p += ylookup[1];
}
walock[4094] = 1;
Bsprintf(tempbuf,"%d",(hang*180)>>10);
printext256(0L,8L,31,-1,tempbuf,1);
enddrawing();
}
#endif
if (keystatus[0xa]) setaspect(viewingrange+(viewingrange>>8),yxaspect+(yxaspect>>8));
if (keystatus[0xb]) setaspect(viewingrange-(viewingrange>>8),yxaspect-(yxaspect>>8));
if (keystatus[0xc]) setaspect(viewingrange,yxaspect-(yxaspect>>8));
if (keystatus[0xd]) setaspect(viewingrange,yxaspect+(yxaspect>>8));
//if (keystatus[0x38]) setrollangle(rollangle+=((keystatus[0x2a]|keystatus[0x36])*6+2));
//if (keystatus[0xb8]) setrollangle(rollangle-=((keystatus[0x2a]|keystatus[0x36])*6+2));
//if (keystatus[0x1d]|keystatus[0x9d]) setrollangle(rollangle=0);
begindrawing();
i = frameval[framecnt&(AVERAGEFRAMES-1)];
j = frameval[framecnt&(AVERAGEFRAMES-1)] = getticks(); framecnt++;
if (i != j) averagefps = ((mul3(averagefps)+((AVERAGEFRAMES*1000)/(j-i)) )>>2);
Bsprintf(tempbuf,"%ld",averagefps);
printext256(0L,0L,31,-1,tempbuf,1);
enddrawing();
editinput();
}
else
{
}
}
void ExtCleanUp(void)
{
}
void ExtPreLoadMap(void)
{
}
void ExtLoadMap(const char *mapname)
{
char title[256];
Bsprintf(title, "BUILD by Ken Silverman - %s", mapname);
wm_setapptitle(title);
}
void ExtPreSaveMap(void)
{
}
void ExtSaveMap(const char *mapname)
{
}
const char *ExtGetSectorCaption(short sectnum)
{
if ((sector[sectnum].lotag|sector[sectnum].hitag) == 0)
{
tempbuf[0] = 0;
}
else
{
Bsprintf(tempbuf,"%hu,%hu",(unsigned short)sector[sectnum].hitag,
(unsigned short)sector[sectnum].lotag);
}
return(tempbuf);
}
const char *ExtGetWallCaption(short wallnum)
{
if ((wall[wallnum].lotag|wall[wallnum].hitag) == 0)
{
tempbuf[0] = 0;
}
else
{
Bsprintf(tempbuf,"%hu,%hu",(unsigned short)wall[wallnum].hitag,
(unsigned short)wall[wallnum].lotag);
}
return(tempbuf);
}
const char *ExtGetSpriteCaption(short spritenum)
{
if ((sprite[spritenum].lotag|sprite[spritenum].hitag) == 0)
{
tempbuf[0] = 0;
}
else
{
Bsprintf(tempbuf,"%hu,%hu",(unsigned short)sprite[spritenum].hitag,
(unsigned short)sprite[spritenum].lotag);
}
return(tempbuf);
}
//printext16 parameters:
//printext16(long xpos, long ypos, short col, short backcol,
// char name[82], char fontsize)
// xpos 0-639 (top left)
// ypos 0-479 (top left)
// col 0-15
// backcol 0-15, -1 is transparent background
// name
// fontsize 0=8*8, 1=3*5
//drawline16 parameters:
// drawline16(long x1, long y1, long x2, long y2, char col)
// x1, x2 0-639
// y1, y2 0-143 (status bar is 144 high, origin is top-left of STATUS BAR)
// col 0-15
void ExtShowSectorData(short sectnum) //F5
{
int i;
if (qsetmode == 200) //In 3D mode
{
}
else
{
begindrawing();
clearmidstatbar16(); //Clear middle of status bar
Bsprintf(tempbuf,"Sector %d",sectnum);
printext16(8,ydim16+32,11,-1,tempbuf,0);
printext16(8,ydim16+48,11,-1,"8*8 font: ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789",0);
printext16(8,ydim16+56,11,-1,"3*5 font: ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789",1);
i=ydim16; ydim16=ydim;
drawline16(320,i+68,344,i+80,4); //Draw house
drawline16(344,i+80,344,i+116,4);
drawline16(344,i+116,296,i+116,4);
drawline16(296,i+116,296,i+80,4);
drawline16(296,i+80,320,i+68,4);
ydim16=i;
enddrawing();
}
}
void ExtShowWallData(short wallnum) //F6
{
if (qsetmode == 200) //In 3D mode
{
}
else
{
begindrawing();
clearmidstatbar16(); //Clear middle of status bar
Bsprintf(tempbuf,"Wall %d",wallnum);
printext16(8,ydim16+32,11,-1,tempbuf,0);
enddrawing();
}
}
void ExtShowSpriteData(short spritenum) //F6
{
if (qsetmode == 200) //In 3D mode
{
}
else
{
begindrawing();
clearmidstatbar16(); //Clear middle of status bar
Bsprintf(tempbuf,"Sprite %d",spritenum);
printext16(8,ydim16+32,11,-1,tempbuf,0);
enddrawing();
}
}
void ExtEditSectorData(short sectnum) //F7
{
short nickdata;
if (qsetmode == 200) //In 3D mode
{
//Ceiling
if (searchstat == 1)
sector[searchsector].ceilingpicnum++; //Just a stupid example
//Floor
if (searchstat == 2)
sector[searchsector].floorshade++; //Just a stupid example
}
else //In 2D mode
{
Bsprintf(tempbuf,"Sector (%d) Nick's variable: ",sectnum);
nickdata = 0;
nickdata = getnumber16(tempbuf,nickdata,65536L,0);
printmessage16(""); //Clear message box (top right of status bar)
ExtShowSectorData(sectnum);
}
}
void ExtEditWallData(short wallnum) //F8
{
short nickdata;
if (qsetmode == 200) //In 3D mode
{
}
else
{
Bsprintf(tempbuf,"Wall (%d) Nick's variable: ",wallnum);
nickdata = 0;
nickdata = getnumber16(tempbuf,nickdata,65536L,0);
printmessage16(""); //Clear message box (top right of status bar)
ExtShowWallData(wallnum);
}
}
void ExtEditSpriteData(short spritenum) //F8
{
short nickdata;
if (qsetmode == 200) //In 3D mode
{
}
else
{
Bsprintf(tempbuf,"Sprite (%d) Nick's variable: ",spritenum);
nickdata = 0;
nickdata = getnumber16(tempbuf,nickdata,65536L,0);
printmessage16("");
printmessage16(""); //Clear message box (top right of status bar)
ExtShowSpriteData(spritenum);
}
}
void faketimerhandler(void)
{
sampletimer();
}
//Just thought you might want my getnumber16 code
/*
getnumber16(char namestart[80], short num, long maxnumber)
{
char buffer[80];
long j, k, n, danum, oldnum;
danum = (long)num;
oldnum = danum;
while ((keystatus[0x1c] != 2) && (keystatus[0x1] == 0)) //Enter, ESC
{
sprintf(&buffer,"%s%ld_ ",namestart,danum);
printmessage16(buffer);
for(j=2;j<=11;j++) //Scan numbers 0-9
if (keystatus[j] > 0)
{
keystatus[j] = 0;
k = j-1;
if (k == 10) k = 0;
n = (danum*10)+k;
if (n < maxnumber) danum = n;
}
if (keystatus[0xe] > 0) // backspace
{
danum /= 10;
keystatus[0xe] = 0;
}
if (keystatus[0x1c] == 1) //L. enter
{
oldnum = danum;
keystatus[0x1c] = 2;
asksave = 1;
}
}
keystatus[0x1c] = 0;
keystatus[0x1] = 0;
return((short)oldnum);
}
*/
/*
* vim:ts=4:
*/

7422
polymer/build/src/build.c Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,178 @@
#ifndef RENDERTYPEWIN
#error Only for Windows
#endif
#include "build.h"
#include "editor.h"
#include "winlayer.h"
#include "compat.h"
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
#define IDCFULLSCREEN 100
#define IDC2DVMODE 101
#define IDC3DVMODE 102
static void PopulateVideoModeLists(int fs, HWND list2d, HWND list3d)
{
int i,j;
char buf[64];
ComboBox_ResetContent(list2d);
ComboBox_ResetContent(list3d);
for (i=0; i<validmodecnt; i++) {
if (validmode[i].fs != fs) continue;
// all modes get added to the 3D mode list
Bsprintf(buf, "%ldx%ld %dbpp", validmode[i].xdim, validmode[i].ydim, validmode[i].bpp);
j = ComboBox_AddString(list3d, buf);
ComboBox_SetItemData(list3d, j, i);
if (xdimgame == validmode[i].xdim && ydimgame == validmode[i].ydim && bppgame == validmode[i].bpp)
ComboBox_SetCurSel(list3d, j);
// only 8-bit modes get used for 2D
if (validmode[i].bpp != 8) continue;
Bsprintf(buf, "%ldx%ld", validmode[i].xdim, validmode[i].ydim);
j = ComboBox_AddString(list2d, buf);
ComboBox_SetItemData(list2d, j, i);
if (xdim2d == validmode[i].xdim && ydim2d == validmode[i].ydim && 8 == validmode[i].bpp)
ComboBox_SetCurSel(list2d, j);
}
}
static INT_PTR CALLBACK LaunchWindowProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg) {
case WM_INITDIALOG: {
char buf[64];
if (lParam) {
long *saferect = (long*)lParam;
RECT unresized, playbutton, exitbutton;
int dx, dy;
GetWindowRect(hwndDlg, &unresized);
GetWindowRect(GetDlgItem(hwndDlg, IDOK), &playbutton);
GetWindowRect(GetDlgItem(hwndDlg, IDCANCEL), &exitbutton);
playbutton.right = 1 + playbutton.right - playbutton.left;
playbutton.bottom = 1 + playbutton.bottom - playbutton.top;
exitbutton.right = 1 + exitbutton.right - exitbutton.left;
exitbutton.bottom = 1 + exitbutton.bottom - exitbutton.top;
playbutton.left = playbutton.left - unresized.left;
playbutton.top = playbutton.top - unresized.top;
exitbutton.left = exitbutton.left - unresized.left;
exitbutton.top = exitbutton.top - unresized.top;
dx = saferect[2] - (unresized.right - unresized.left);
dy = saferect[3] - (unresized.bottom - unresized.top);
playbutton.left += dx; exitbutton.left += dx;
playbutton.top += dy; exitbutton.top += dy;
// reposition the dialog, play and exit buttons
MoveWindow(hwndDlg, saferect[0], saferect[1], saferect[2], saferect[3], FALSE);
MoveWindow(GetDlgItem(hwndDlg, IDOK),
playbutton.left, playbutton.top, playbutton.right, playbutton.bottom, FALSE);
MoveWindow(GetDlgItem(hwndDlg, IDCANCEL),
exitbutton.left, exitbutton.top, exitbutton.right, exitbutton.bottom, FALSE);
}
// populate the controls
Button_SetCheck(GetDlgItem(hwndDlg, IDCFULLSCREEN), fullscreen ? BST_CHECKED : BST_UNCHECKED);
PopulateVideoModeLists(fullscreen, GetDlgItem(hwndDlg, IDC2DVMODE), GetDlgItem(hwndDlg, IDC3DVMODE));
ShowWindow(hwndDlg, SW_SHOW);
/*
if (GetDlgCtrlID((HWND)wParam) != IDOK) {
SetFocus(GetDlgItem(hwndDlg, IDOK));
return FALSE;
}
*/
return TRUE;
}
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDCFULLSCREEN:
fullscreen = Button_GetCheck((HWND)lParam) == BST_CHECKED ? 1:0;
PopulateVideoModeLists(fullscreen, GetDlgItem(hwndDlg, IDC2DVMODE),
GetDlgItem(hwndDlg, IDC3DVMODE));
break;
case IDC2DVMODE:
if (HIWORD(wParam) == CBN_SELCHANGE) {
int i;
i = ComboBox_GetCurSel((HWND)lParam);
if (i != CB_ERR) i = ComboBox_GetItemData((HWND)lParam, i);
if (i != CB_ERR) {
xdim2d = validmode[i].xdim;
ydim2d = validmode[i].ydim;
}
}
break;
case IDC3DVMODE:
if (HIWORD(wParam) == CBN_SELCHANGE) {
int i;
i = ComboBox_GetCurSel((HWND)lParam);
if (i != CB_ERR) i = ComboBox_GetItemData((HWND)lParam, i);
if (i != CB_ERR) {
xdimgame = validmode[i].xdim;
ydimgame = validmode[i].ydim;
bppgame = validmode[i].bpp;
}
}
break;
case IDCANCEL:
quitevent = 1; // fall through
case IDOK:
DestroyWindow(hwndDlg);
return TRUE;
default: break;
}
break;
default: break;
}
return FALSE;
}
int DoLaunchWindow(int initval)
{
HWND hwndStart, hwndLaunch;
MSG msg;
long saferect[4];
int x;
// only show config window if no config is loaded, or if it is, only if left control is held
if (initval == 0 /*&& !GetAsyncKeyState(VK_CONTROL)*/) return 0;
if (win_getstartupwin((long*)&hwndStart, saferect, NULL)) return 0;
hwndLaunch = CreateDialogParam((HINSTANCE)win_gethinstance(), MAKEINTRESOURCE(2000), hwndStart, LaunchWindowProc, (LPARAM)saferect);
if (hwndLaunch) {
EnableWindow(GetDlgItem(hwndStart,WIN_STARTWIN_ITEMLIST),FALSE);
#if 0
while (GetMessage(&msg, NULL, 0, 0) > 0) {
if (!IsWindow(hwndLaunch) || quitevent) break;
if (IsDialogMessage(hwndStart, &msg) /*|| IsDialogMessage(hwndLaunch, &msg)*/) continue;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
#else
while (IsWindow(hwndLaunch) && !quitevent) {
x = win_getstartupcommand();
if (x != 0) LaunchWindowProc(hwndLaunch, WM_COMMAND, x, 0);
handleevents();
}
#endif
EnableWindow(GetDlgItem(hwndStart,WIN_STARTWIN_ITEMLIST),TRUE);
}
if (quitevent) return 1;
return 0;
}

1301
polymer/build/src/cache1d.c Normal file

File diff suppressed because it is too large Load diff

716
polymer/build/src/compat.c Normal file
View file

@ -0,0 +1,716 @@
/*
* Playing-field leveller for Build
* by Jonathon Fowler
*
* A note about this:
* 1. There is some kind of problem somewhere in the functions below because
* compiling with __compat_h_macrodef__ disabled makes stupid things happen.
* 2. The functions below, aside from the ones which aren't trivial, were never
* really intended to be used for anything except tracking anr removing ties
* to the standard C library from games. Using the Bxx versions of functions
* means we can redefine those names to link up with different runtime library
* names.
*/
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
#define _WIN32_IE 0x0400
#include <windows.h>
#include <shlobj.h>
#endif
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#if defined(__WATCOMC__)
# include <direct.h>
#elif defined(_MSC_VER)
# include <io.h>
#else
# include <dirent.h>
#endif
#include "compat.h"
#ifndef __compat_h_macrodef__
int Brand(void)
{
return rand();
}
void *Bmalloc(bsize_t size)
{
return malloc(size);
}
void Bfree(void *ptr)
{
free(ptr);
}
int Bopen(const char *pathname, int flags, unsigned mode)
{
int n=0,o=0;
if (flags&BO_BINARY) n|=O_BINARY; else n|=O_TEXT;
if ((flags&BO_RDWR)==BO_RDWR) n|=O_RDWR;
else if ((flags&BO_RDWR)==BO_WRONLY) n|=O_WRONLY;
else if ((flags&BO_RDWR)==BO_RDONLY) n|=O_RDONLY;
if (flags&BO_APPEND) n|=O_APPEND;
if (flags&BO_CREAT) n|=O_CREAT;
if (flags&BO_TRUNC) n|=O_TRUNC;
if (mode&BS_IREAD) o|=S_IREAD;
if (mode&BS_IWRITE) o|=S_IWRITE;
if (mode&BS_IEXEC) o|=S_IEXEC;
return open(pathname,n,o);
}
int Bclose(int fd)
{
return close(fd);
}
bssize_t Bwrite(int fd, const void *buf, bsize_t count)
{
return write(fd,buf,count);
}
bssize_t Bread(int fd, void *buf, bsize_t count)
{
return read(fd,buf,count);
}
int Blseek(int fildes, int offset, int whence)
{
switch (whence) {
case BSEEK_SET: whence=SEEK_SET; break;
case BSEEK_CUR: whence=SEEK_CUR; break;
case BSEEK_END: whence=SEEK_END; break;
}
return lseek(fildes,offset,whence);
}
BFILE *Bfopen(const char *path, const char *mode)
{
return (BFILE*)fopen(path,mode);
}
int Bfclose(BFILE *stream)
{
return fclose((FILE*)stream);
}
void Brewind(BFILE *stream)
{
rewind((FILE*)stream);
}
int Bfgetc(BFILE *stream)
{
return fgetc((FILE*)stream);
}
char *Bfgets(char *s, int size, BFILE *stream)
{
return fgets(s,size,(FILE*)stream);
}
int Bfputc(int c, BFILE *stream)
{
return fputc(c,(FILE*)stream);
}
int Bfputs(const char *s, BFILE *stream)
{
return fputs(s,(FILE*)stream);
}
bsize_t Bfread(void *ptr, bsize_t size, bsize_t nmemb, BFILE *stream)
{
return fread(ptr,size,nmemb,(FILE*)stream);
}
bsize_t Bfwrite(const void *ptr, bsize_t size, bsize_t nmemb, BFILE *stream)
{
return fwrite(ptr,size,nmemb,(FILE*)stream);
}
char *Bstrdup(const char *s)
{
return strdup(s);
}
char *Bstrcpy(char *dest, const char *src)
{
return strcpy(dest,src);
}
char *Bstrncpy(char *dest, const char *src, bsize_t n)
{
return strncpy(dest,src,n);
}
int Bstrcmp(const char *s1, const char *s2)
{
return strcmp(s1,s2);
}
int Bstrncmp(const char *s1, const char *s2, bsize_t n)
{
return strncmp(s1,s2,n);
}
int Bstrcasecmp(const char *s1, const char *s2)
{
#ifdef _MSC_VER
return stricmp(s1,s2);
#else
return strcasecmp(s1,s2);
#endif
}
int Bstrncasecmp(const char *s1, const char *s2, bsize_t n)
{
#ifdef _MSC_VER
return strnicmp(s1,s2,n);
#else
return strncasecmp(s1,s2,n);
#endif
}
char *Bstrcat(char *dest, const char *src)
{
return strcat(dest,src);
}
char *Bstrncat(char *dest, const char *src, bsize_t n)
{
return strncat(dest,src,n);
}
bsize_t Bstrlen(const char *s)
{
return strlen(s);
}
char *Bstrchr(const char *s, int c)
{
return strchr(s,c);
}
char *Bstrrchr(const char *s, int c)
{
return strrchr(s,c);
}
int Batoi(const char *nptr)
{
return atoi(nptr);
}
long Batol(const char *nptr)
{
return atol(nptr);
}
long int Bstrtol(const char *nptr, char **endptr, int base)
{
return strtol(nptr,endptr,base);
}
unsigned long int Bstrtoul(const char *nptr, char **endptr, int base)
{
return strtoul(nptr,endptr,base);
}
void *Bmemcpy(void *dest, const void *src, bsize_t n)
{
return memcpy(dest,src,n);
}
void *Bmemmove(void *dest, const void *src, bsize_t n)
{
return memmove(dest,src,n);
}
void *Bmemchr(const void *s, int c, bsize_t n)
{
return memchr(s,c,n);
}
void *Bmemset(void *s, int c, bsize_t n)
{
return memset(s,c,n);
}
int Bprintf(const char *format, ...)
{
va_list ap;
int r;
va_start(ap,format);
#ifdef _MSC_VER
r = _vprintf(format,ap);
#else
r = vprintf(format,ap);
#endif
va_end(ap);
return r;
}
int Bsprintf(char *str, const char *format, ...)
{
va_list ap;
int r;
va_start(ap,format);
#ifdef _MSC_VER
r = _vsprintf(str,format,ap);
#else
r = vsprintf(str,format,ap);
#endif
va_end(ap);
return r;
}
int Bsnprintf(char *str, bsize_t size, const char *format, ...)
{
va_list ap;
int r;
va_start(ap,format);
#ifdef _MSC_VER
r = _vsnprintf(str,size,format,ap);
#else
r = vsnprintf(str,size,format,ap);
#endif
va_end(ap);
return r;
}
int Bvsnprintf(char *str, bsize_t size, const char *format, va_list ap)
{
#ifdef _MSC_VER
return _vsnprintf(str,size,format,ap);
#else
return vsnprintf(str,size,format,ap);
#endif
}
char *Bgetenv(const char *name)
{
return getenv(name);
}
char *Bgetcwd(char *buf, bsize_t size)
{
return getcwd(buf,size);
}
#endif // __compat_h_macrodef__
//
// Stuff which must be a function
//
char *Bgethomedir(void)
{
#ifdef _WIN32
TCHAR appdata[MAX_PATH];
//# if defined SHGetFolderPath
// if (SUCCEEDED(SHGetFolderPathA(NULL, CSIDL_APPDATA, NULL, 0, appdata)))
//# if defined SHGetSpecialFolderPath
if (SUCCEEDED(SHGetSpecialFolderPathA(NULL, appdata, CSIDL_APPDATA, FALSE)))
//# else
//# error Cannot find SHGetFolderPath or SHGetSpecialFolderPath. Perhaps your shlobj.h is ancient?
//# endif
return strdup(appdata);
return NULL;
#else
char *e = getenv("HOME");
if (!e) return NULL;
return strdup(e);
#endif
}
int Bcorrectfilename(char *filename, int removefn)
{
char *fn;
char *tokarr[64], *first, *next, *token;
int i, ntok = 0, leadslash = 0, trailslash = 0;
fn = strdup(filename);
if (!fn) return -1;
for (first=fn; *first; first++) {
#ifdef _WIN32
if (*first == '\\') *first = '/';
#endif
}
leadslash = (*fn == '/');
trailslash = (first>fn && first[-1] == '/');
first = fn;
do {
token = Bstrtoken(first, "/", &next, 1);
first = NULL;
if (!token) break;
else if (token[0] == 0) continue;
else if (token[0] == '.' && token[1] == 0) continue;
else if (token[0] == '.' && token[1] == '.' && token[2] == 0) ntok = max(0,ntok-1);
else tokarr[ntok++] = token;
} while (1);
if (!trailslash && removefn) { ntok = max(0,ntok-1); trailslash = 1; }
if (ntok == 0 && trailslash && leadslash) trailslash = 0;
first = filename;
if (leadslash) *(first++) = '/';
for (i=0; i<ntok; i++) {
if (i>0) *(first++) = '/';
for (token=tokarr[i]; *token; token++)
*(first++) = *token;
}
if (trailslash) *(first++) = '/';
*(first++) = 0;
return 0;
}
int Bcanonicalisefilename(char *filename, int removefn)
{
char cwd[BMAX_PATH], fn[BMAX_PATH], *p;
char *fnp = filename;
#ifdef _WIN32
int drv = 0;
#endif
#ifdef _WIN32
{
if (filename[0] && filename[1] == ':') {
// filename is prefixed with a drive
drv = toupper(filename[0])-'A' + 1;
fnp += 2;
}
if (!_getdcwd(drv, cwd, sizeof(cwd))) return -1;
for (p=cwd; *p; p++) if (*p == '\\') *p = '/';
}
#else
if (!getcwd(cwd,sizeof(cwd))) return -1;
#endif
p = strrchr(cwd,'/'); if (!p || p[1]) strcat(cwd, "/");
strcpy(fn, fnp);
#ifdef _WIN32
for (p=fn; *p; p++) if (*p == '\\') *p = '/';
#endif
if (fn[0] != '/') {
// we are dealing with a path relative to the current directory
strcpy(filename, cwd);
strcat(filename, fn);
} else {
#ifdef _WIN32
filename[0] = cwd[0];
filename[1] = ':';
filename[2] = 0;
#else
filename[0] = 0;
#endif
strcat(filename, fn);
}
fnp = filename;
#ifdef _WIN32
fnp += 2; // skip the drive
#endif
return Bcorrectfilename(fnp,1);
}
char *Bgetsystemdrives(void)
{
#ifdef _WIN32
char *str, *p;
DWORD drv, mask;
int number=0;
drv = GetLogicalDrives();
if (drv == 0) return NULL;
for (mask=1; mask<0x8000000l; mask<<=1) {
if ((drv&mask) == 0) continue;
number++;
}
str = p = (char *)malloc(1 + (3*number));
if (!str) return NULL;
number = 0;
for (mask=1; mask<0x8000000l; mask<<=1, number++) {
if ((drv&mask) == 0) continue;
*(p++) = 'A' + number;
*(p++) = ':';
*(p++) = 0;
}
*(p++) = 0;
return str;
#else
// Perhaps have Unix OS's put /, /home/user, and /mnt/* in the "drives" list?
return NULL;
#endif
}
long Bfilelength(int fd)
{
struct stat st;
if (fstat(fd, &st) < 0) return -1;
return(long)(st.st_size);
}
typedef struct {
#ifdef _MSC_VER
long dir;
struct _finddata_t fid;
#else
DIR *dir;
#endif
struct Bdirent info;
int status;
char name[1];
} BDIR_real;
BDIR* Bopendir(const char *name)
{
BDIR_real *dirr;
#ifdef _MSC_VER
char *t,*tt;
t = (char*)malloc(strlen(name)+1+4);
if (!t) return NULL;
#endif
dirr = (BDIR_real*)malloc(sizeof(BDIR_real) + strlen(name));
if (!dirr) {
#ifdef _MSC_VER
free(t);
#endif
return NULL;
}
#ifdef _MSC_VER
strcpy(t,name);
tt = t+strlen(name)-1;
while (*tt == ' ' && tt>t) tt--;
if (*tt != '/' && *tt != '\\') *(++tt) = '/';
*(++tt) = '*';
*(++tt) = '.';
*(++tt) = '*';
*(++tt) = 0;
dirr->dir = _findfirst(t,&dirr->fid);
free(t);
if (dirr->dir == -1) {
free(dirr);
return NULL;
}
#else
dirr->dir = opendir(name);
if (dirr->dir == NULL) {
free(dirr);
return NULL;
}
#endif
dirr->status = 0;
strcpy(dirr->name, name);
return (BDIR*)dirr;
}
struct Bdirent* Breaddir(BDIR *dir)
{
BDIR_real *dirr = (BDIR_real*)dir;
struct dirent *de;
struct stat st;
char *fn;
#ifdef _MSC_VER
if (dirr->status > 0) {
if (_findnext(dirr->dir,&dirr->fid) != 0) {
dirr->status = -1;
return NULL;
}
}
dirr->info.namlen = strlen(dirr->fid.name);
dirr->info.name = dirr->fid.name;
dirr->status++;
#else
de = readdir(dirr->dir);
if (de == NULL) {
dirr->status = -1;
return NULL;
} else {
dirr->status++;
}
//# if defined(__WATCOMC__) || defined(__linux) || defined(__BEOS__) || defined(__QNX__) || defined(SKYOS)
dirr->info.namlen = strlen(de->d_name);
//# else
// dirr->info.namlen = de->d_namlen;
//# endif
dirr->info.name = de->d_name;
#endif
dirr->info.mode = 0;
dirr->info.size = 0;
dirr->info.mtime = 0;
fn = (char *)malloc(strlen(dirr->name) + 1 + dirr->info.namlen + 1);
if (fn) {
sprintf(fn,"%s/%s",dirr->name,dirr->info.name);
if (!stat(fn, &st)) {
dirr->info.mode = st.st_mode;
dirr->info.size = st.st_size;
dirr->info.mtime = st.st_mtime;
}
free(fn);
}
return &dirr->info;
}
int Bclosedir(BDIR *dir)
{
BDIR_real *dirr = (BDIR_real*)dir;
#ifdef _MSC_VER
_findclose(dirr->dir);
#else
closedir(dirr->dir);
#endif
free(dirr);
return 0;
}
char *Bstrtoken(char *s, char *delim, char **ptrptr, int chop)
{
char *p, *start;
if (!ptrptr) return NULL;
if (s) p = s;
else p = *ptrptr;
if (!p) return NULL;
while (*p != 0 && strchr(delim, *p)) p++;
if (*p == 0) {
*ptrptr = NULL;
return NULL;
}
start = p;
while (*p != 0 && !strchr(delim, *p)) p++;
if (*p == 0) *ptrptr = NULL;
else {
if (chop) *(p++) = 0;
*ptrptr = p;
}
return start;
}
//Brute-force case-insensitive, slash-insensitive, * and ? wildcard matcher
//Given: string i and string j. string j can have wildcards
//Returns: 1:matches, 0:doesn't match
long Bwildmatch (const char *i, const char *j)
{
const char *k;
char c0, c1;
if (!*j) return(1);
do
{
if (*j == '*')
{
for(k=i,j++;*k;k++) if (Bwildmatch(k,j)) return(1);
continue;
}
if (!*i) return(0);
if (*j == '?') { i++; j++; continue; }
c0 = *i; if ((c0 >= 'a') && (c0 <= 'z')) c0 -= 32;
c1 = *j; if ((c1 >= 'a') && (c1 <= 'z')) c1 -= 32;
#ifdef _WIN32
if (c0 == '/') c0 = '\\';
if (c1 == '/') c1 = '\\';
#endif
if (c0 != c1) return(0);
i++; j++;
} while (*j);
return(!*i);
}
#if !defined(_WIN32)
char *Bstrlwr(char *s)
{
char *t = s;
if (!s) return s;
while (*t) { *t = Btolower(*t); t++; }
return s;
}
char *Bstrupr(char *s)
{
char *t = s;
if (!s) return s;
while (*t) { *t = Btoupper(*t); t++; }
return s;
}
#endif
//
// getsysmemsize() -- gets the amount of system memory in the machine
//
unsigned int Bgetsysmemsize(void)
{
#ifdef _WIN32
MEMORYSTATUS memst;
GlobalMemoryStatus(&memst);
return (unsigned int)memst.dwTotalPhys;
#elif (defined(_SC_PAGE_SIZE) || defined(_SC_PAGESIZE)) && defined(_SC_PHYS_PAGES)
unsigned int siz = 0x7fffffff;
long scpagesiz, scphyspages;
#ifdef _SC_PAGE_SIZE
scpagesiz = sysconf(_SC_PAGE_SIZE);
#else
scpagesiz = sysconf(_SC_PAGESIZE);
#endif
scphyspages = sysconf(_SC_PHYS_PAGES);
if (scpagesiz >= 0 && scphyspages >= 0)
siz = (unsigned int)min(longlong(0x7fffffff), (int64)scpagesiz * (int64)scphyspages);
//initprintf("Bgetsysmemsize(): %d pages of %d bytes, %d bytes of system memory\n",
// scphyspages, scpagesiz, siz);
return siz;
#else
return 0x7fffffff;
#endif
}

307
polymer/build/src/config.c Normal file
View file

@ -0,0 +1,307 @@
// Evil and Nasty Configuration File Reader for KenBuild
// by Jonathon Fowler
#include "compat.h"
#include "build.h"
#include "editor.h"
#include "osd.h"
#ifdef RENDERTYPEWIN
#include "winlayer.h"
#endif
#include "baselayer.h"
static long vesares[13][2] = {{320,200},{360,200},{320,240},{360,240},{320,400},
{360,400},{640,350},{640,400},{640,480},{800,600},
{1024,768},{1280,1024},{1600,1200}};
static int readconfig(BFILE *fp, const char *key, char *value, unsigned len)
{
char buf[1000], *k, *v, *eq;
int x=0;
if (len < 1) return 0;
Brewind(fp);
while (1) {
if (!Bfgets(buf, 1000, fp)) return 0;
if (buf[0] == ';') continue;
eq = Bstrchr(buf, '=');
if (!eq) continue;
k = buf;
v = eq+1;
while (*k == ' ' || *k == '\t') k++;
*(eq--) = 0;
while ((*eq == ' ' || *eq == '\t') && eq>=k) *(eq--) = 0;
if (Bstrcasecmp(k, key)) continue;
while (*v == ' ' || *k == '\t') v++;
eq = v + Bstrlen(v)-1;
while ((*eq == ' ' || *eq == '\t' || *eq == '\r' || *eq == '\n') && eq>=v) *(eq--) = 0;
value[--len] = 0;
do value[x] = v[x]; while (v[x++] != 0 && len-- > 0);
return x-1;
}
}
extern short brightness;
extern long fullscreen;
extern char option[8];
extern char keys[NUMBUILDKEYS];
extern double msens;
/*
* SETUP.DAT
* 0 = video mode (0:chained 1:vesa 2:screen buffered 3/4/5:tseng/paradise/s3 6:red-blue)
* 1 = sound (0:none)
* 2 = music (0:none)
* 3 = input (0:keyboard 1:+mouse)
* 4 = multiplayer (0:single 1-4:com 5-11:ipx)
* 5&0xf0 = com speed
* 5&0x0f = com irq
* 6&0xf0 = chained y-res
* 6&0x0f = chained x-res or vesa mode
* 7&0xf0 = sound samplerate
* 7&0x01 = sound quality
* 7&0x02 = 8/16 bit
* 7&0x04 = mono/stereo
*
* bytes 8 to 26 are key settings:
* 0 = Forward (0xc8)
* 1 = Backward (0xd0)
* 2 = Turn left (0xcb)
* 3 = Turn right (0xcd)
* 4 = Run (0x2a)
* 5 = Strafe (0x9d)
* 6 = Fire (0x1d)
* 7 = Use (0x39)
* 8 = Stand high (0x1e)
* 9 = Stand low (0x2c)
* 10 = Look up (0xd1)
* 11 = Look down (0xc9)
* 12 = Strafe left (0x33)
* 13 = Strafe right (0x34)
* 14 = 2D/3D switch (0x9c)
* 15 = View cycle (0x1c)
* 16 = 2D Zoom in (0xd)
* 17 = 2D Zoom out (0xc)
* 18 = Chat (0xf)
*/
int loadsetup(const char *fn)
{
BFILE *fp;
#define VL 32
char val[VL];
int i;
if ((fp = Bfopen(fn, "rt")) == NULL) return -1;
if (readconfig(fp, "fullscreen", val, VL) > 0) { if (Batoi(val) != 0) fullscreen = 1; else fullscreen = 0; }
if (readconfig(fp, "resolution", val, VL) > 0) {
i = Batoi(val) & 0x0f;
if ((unsigned)i<13) { xdimgame = xdim2d = vesares[i][0]; ydimgame = ydim2d = vesares[i][1]; }
}
if (readconfig(fp, "2dresolution", val, VL) > 0) {
i = Batoi(val) & 0x0f;
if ((unsigned)i<13) { xdim2d = vesares[i][0]; ydim2d = vesares[i][1]; }
}
if (readconfig(fp, "xdim2d", val, VL) > 0) xdim2d = Batoi(val);
if (readconfig(fp, "ydim2d", val, VL) > 0) ydim2d = Batoi(val);
if (readconfig(fp, "xdim3d", val, VL) > 0) xdimgame = Batoi(val);
if (readconfig(fp, "ydim3d", val, VL) > 0) ydimgame = Batoi(val);
if (readconfig(fp, "samplerate", val, VL) > 0) option[7] = (Batoi(val) & 0x0f) << 4;
if (readconfig(fp, "music", val, VL) > 0) { if (Batoi(val) != 0) option[2] = 1; else option[2] = 0; }
if (readconfig(fp, "mouse", val, VL) > 0) { if (Batoi(val) != 0) option[3] = 1; else option[3] = 0; }
if (readconfig(fp, "bpp", val, VL) > 0) bppgame = Batoi(val);
if (readconfig(fp, "renderer", val, VL) > 0) { i = Batoi(val); setrendermode(i); }
if (readconfig(fp, "brightness", val, VL) > 0) brightness = min(max(Batoi(val),0),15);
#ifdef RENDERTYPEWIN
if (readconfig(fp, "maxrefreshfreq", val, VL) > 0) maxrefreshfreq = Batoi(val);
#endif
glusetexcache = glusetexcachecompression = -1;
if (readconfig(fp, "glusetexcache", val, VL) > 0) {
if (Batoi(val) != 0) glusetexcache = 1;
else glusetexcache = 0;
}
if (readconfig(fp, "glusetexcachecompression", val, VL) > 0) {
if (Batoi(val) != 0) glusetexcachecompression = 1;
else glusetexcachecompression = 0;
}
if(glusetexcache == -1 && glusetexcachecompression == -1)
{
i=wm_ynbox("Texture caching",
"Would you like to enable the on-disk texture cache? "
"This feature may use up to 200 megabytes of disk "
"space if you have a great deal of high resolution "
"textures and skins, but textures will load exponentially "
"faster after the first time they are loaded.");
if (i) i = 'y';
if(i == 'y' || i == 'Y' )
glusetexcompr = glusetexcache = glusetexcachecompression = 1;
else glusetexcache = glusetexcachecompression = 0;
}
option[0] = 1; // vesa all the way...
option[1] = 1; // sound all the way...
option[4] = 0; // no multiplayer
option[5] = 0;
if (readconfig(fp, "keyforward", val, VL) > 0) keys[0] = Bstrtol(val, NULL, 16);
if (readconfig(fp, "keybackward", val, VL) > 0) keys[1] = Bstrtol(val, NULL, 16);
if (readconfig(fp, "keyturnleft", val, VL) > 0) keys[2] = Bstrtol(val, NULL, 16);
if (readconfig(fp, "keyturnright", val, VL) > 0) keys[3] = Bstrtol(val, NULL, 16);
if (readconfig(fp, "keyrun", val, VL) > 0) keys[4] = Bstrtol(val, NULL, 16);
if (readconfig(fp, "keystrafe", val, VL) > 0) keys[5] = Bstrtol(val, NULL, 16);
if (readconfig(fp, "keyfire", val, VL) > 0) keys[6] = Bstrtol(val, NULL, 16);
if (readconfig(fp, "keyuse", val, VL) > 0) keys[7] = Bstrtol(val, NULL, 16);
if (readconfig(fp, "keystandhigh", val, VL) > 0) keys[8] = Bstrtol(val, NULL, 16);
if (readconfig(fp, "keystandlow", val, VL) > 0) keys[9] = Bstrtol(val, NULL, 16);
if (readconfig(fp, "keylookup", val, VL) > 0) keys[10] = Bstrtol(val, NULL, 16);
if (readconfig(fp, "keylookdown", val, VL) > 0) keys[11] = Bstrtol(val, NULL, 16);
if (readconfig(fp, "keystrafeleft", val, VL) > 0) keys[12] = Bstrtol(val, NULL, 16);
if (readconfig(fp, "keystraferight", val, VL) > 0) keys[13] = Bstrtol(val, NULL, 16);
if (readconfig(fp, "key2dmode", val, VL) > 0) keys[14] = Bstrtol(val, NULL, 16);
if (readconfig(fp, "keyviewcycle", val, VL) > 0) keys[15] = Bstrtol(val, NULL, 16);
if (readconfig(fp, "key2dzoomin", val, VL) > 0) keys[16] = Bstrtol(val, NULL, 16);
if (readconfig(fp, "key2dzoomout", val, VL) > 0) keys[17] = Bstrtol(val, NULL, 16);
if (readconfig(fp, "keychat", val, VL) > 0) keys[18] = Bstrtol(val, NULL, 16);
if (readconfig(fp, "keyconsole", val, VL) > 0) { keys[19] = Bstrtol(val, NULL, 16); OSD_CaptureKey(keys[19]); }
if (readconfig(fp, "mousesensitivity", val, VL) > 0) msens = Bstrtod(val, NULL);
Bfclose(fp);
return 0;
}
int writesetup(const char *fn)
{
BFILE *fp;
fp = Bfopen(fn,"wt");
if (!fp) return -1;
Bfprintf(fp,
"; Video mode selection\n"
"; 0 - Windowed\n"
"; 1 - Fullscreen\n"
"fullscreen = %ld\n"
"\n"
"; Video resolution\n"
"xdim2d = %ld\n"
"ydim2d = %ld\n"
"xdim3d = %ld\n"
"ydim3d = %ld\n"
"\n"
"; 3D-mode colour depth\n"
"bpp = %ld\n"
"\n"
"; OpenGL mode options\n"
"glusetexcache = %ld\n"
"glusetexcachecompression = %ld\n"
"\n"
#ifdef RENDERTYPEWIN
"; Maximum OpenGL mode refresh rate (Windows only, in Hertz)\n"
"maxrefreshfreq = %d\n"
"\n"
#endif
"; 3D mode brightness setting\n"
"; 0 - lowest\n"
"; 15 - highest\n"
"brightness = %d\n"
"\n"
"; Sound sample frequency\n"
"; 0 - 6 KHz\n"
"; 1 - 8 KHz\n"
"; 2 - 11.025 KHz\n"
"; 3 - 16 KHz\n"
"; 4 - 22.05 KHz\n"
"; 5 - 32 KHz\n"
"; 6 - 44.1 KHz\n"
"samplerate = %d\n"
"\n"
"; Music playback\n"
"; 0 - Off\n"
"; 1 - On\n"
"music = %d\n"
"\n"
"; Enable mouse\n"
"; 0 - No\n"
"; 1 - Yes\n"
"mouse = %d\n"
"\n"
"; Mouse sensitivity\n"
"mousesensitivity = %g\n"
"\n"
"; Key Settings\n"
"; Here's a map of all the keyboard scan codes: NOTE: values are listed in hex!\n"
"; +---------------------------------------------------------------------------------------------+\n"
"; | 01 3B 3C 3D 3E 3F 40 41 42 43 44 57 58 46 |\n"
"; |ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 SCROLL |\n"
"; | |\n"
"; |29 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E D2 C7 C9 45 B5 37 4A |\n"
"; | ` '1' '2' '3' '4' '5' '6' '7' '8' '9' '0' - = BACK INS HOME PGUP NUMLK KP/ KP* KP- |\n"
"; | |\n"
"; | 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 2B D3 CF D1 47 48 49 4E |\n"
"; |TAB Q W E R T Y U I O P [ ] \\ DEL END PGDN KP7 KP8 KP9 KP+ |\n"
"; | |\n"
"; | 3A 1E 1F 20 21 22 23 24 25 26 27 28 1C 4B 4C 4D |\n"
"; |CAPS A S D F G H J K L ; ' ENTER KP4 KP5 KP6 9C |\n"
"; | KPENTER|\n"
"; | 2A 2C 2D 2E 2F 30 31 32 33 34 35 36 C8 4F 50 51 |\n"
"; |LSHIFT Z X C V B N M , . / RSHIFT UP KP1 KP2 KP3 |\n"
"; | |\n"
"; | 1D 38 39 B8 9D CB D0 CD 52 53 |\n"
"; |LCTRL LALT SPACE RALT RCTRL LEFT DOWN RIGHT KP0 KP. |\n"
"; +---------------------------------------------------------------------------------------------+\n"
"\n"
"keyforward = %X\n"
"keybackward = %X\n"
"keyturnleft = %X\n"
"keyturnright = %X\n"
"keyrun = %X\n"
"keystrafe = %X\n"
"keyfire = %X\n"
"keyuse = %X\n"
"keystandhigh = %X\n"
"keystandlow = %X\n"
"keylookup = %X\n"
"keylookdown = %X\n"
"keystrafeleft = %X\n"
"keystraferight = %X\n"
"key2dmode = %X\n"
"keyviewcycle = %X\n"
"key2dzoomin = %X\n"
"key2dzoomout = %X\n"
"keychat = %X\n"
"keyconsole = %X\n"
"\n",
fullscreen, xdim2d, ydim2d, xdimgame, ydimgame, bppgame,
glusetexcache, glusetexcachecompression,
#ifdef RENDERTYPEWIN
maxrefreshfreq,
#endif
brightness, option[7]>>4, option[2],
option[3], msens,
keys[0], keys[1], keys[2], keys[3], keys[4], keys[5],
keys[6], keys[7], keys[8], keys[9], keys[10], keys[11],
keys[12], keys[13], keys[14], keys[15], keys[16], keys[17],
keys[18], keys[19]
);
Bfclose(fp);
return 0;
}

104
polymer/build/src/crc32.c Normal file
View file

@ -0,0 +1,104 @@
#include "crc32.h"
/*
// this table of numbers is borrowed from the InfoZip source.
static unsigned long crc32table[256] = {
0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
0x2d02ef8dL
};
*/
static unsigned long crc32table[256];
void initcrc32table(void)
{
unsigned long i,j,k;
// algorithm and polynomial same as that used by infozip's zip
for (i=0; i<256; i++) {
j = i;
for (k=8; k; k--)
j = (j&1) ? (0xedb88320L ^ (j>>1)) : (j>>1);
crc32table[i] = j;
}
}
unsigned long crc32once(unsigned char *blk, unsigned long len)
{
unsigned long crc;
crc32init(&crc);
crc32block(&crc, blk, len);
return crc32finish(&crc);
}
void crc32init(unsigned long *crcvar)
{
if (!crcvar) return;
*crcvar = 0xffffffffl;
}
void crc32block(unsigned long *crcvar, unsigned char *blk, unsigned long len)
{
unsigned long crc = *crcvar;
while (len--) crc = crc32table[(crc ^ *(blk++)) & 0xffl] ^ (crc >> 8);
*crcvar = crc;
}
unsigned long crc32finish(unsigned long *crcvar)
{
*crcvar = *crcvar ^ 0xffffffffl;
return *crcvar;
}

1072
polymer/build/src/defs.c Normal file

File diff suppressed because it is too large Load diff

11240
polymer/build/src/engine.c Normal file

File diff suppressed because it is too large Load diff

6297
polymer/build/src/game.c Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,144 @@
#ifndef RENDERTYPEWIN
#error Only for Windows
#endif
#include "build.h"
#include "editor.h"
#include "winlayer.h"
#include "compat.h"
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
#define IDCFULLSCREEN 100
#define IDCVMODE 101
static void PopulateVideoModeLists(int fs, HWND list3d)
{
int i,j;
char buf[64];
ComboBox_ResetContent(list3d);
for (i=0; i<validmodecnt; i++) {
if (validmode[i].fs != fs) continue;
Bsprintf(buf, "%ldx%ld %dbpp", validmode[i].xdim, validmode[i].ydim, validmode[i].bpp);
j = ComboBox_AddString(list3d, buf);
ComboBox_SetItemData(list3d, j, i);
if (xdimgame == validmode[i].xdim && ydimgame == validmode[i].ydim && bppgame == validmode[i].bpp)
ComboBox_SetCurSel(list3d, j);
}
}
static INT_PTR CALLBACK LaunchWindowProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg) {
case WM_INITDIALOG: {
char buf[64];
if (lParam) {
long *saferect = (long*)lParam;
RECT unresized, playbutton, exitbutton;
int dx, dy;
GetWindowRect(hwndDlg, &unresized);
GetWindowRect(GetDlgItem(hwndDlg, IDOK), &playbutton);
GetWindowRect(GetDlgItem(hwndDlg, IDCANCEL), &exitbutton);
playbutton.right = 1 + playbutton.right - playbutton.left;
playbutton.bottom = 1 + playbutton.bottom - playbutton.top;
exitbutton.right = 1 + exitbutton.right - exitbutton.left;
exitbutton.bottom = 1 + exitbutton.bottom - exitbutton.top;
playbutton.left = playbutton.left - unresized.left;
playbutton.top = playbutton.top - unresized.top;
exitbutton.left = exitbutton.left - unresized.left;
exitbutton.top = exitbutton.top - unresized.top;
dx = saferect[2] - (unresized.right - unresized.left);
dy = saferect[3] - (unresized.bottom - unresized.top);
playbutton.left += dx; exitbutton.left += dx;
playbutton.top += dy; exitbutton.top += dy;
// reposition the dialog, play and exit buttons
MoveWindow(hwndDlg, saferect[0], saferect[1], saferect[2], saferect[3], FALSE);
MoveWindow(GetDlgItem(hwndDlg, IDOK),
playbutton.left, playbutton.top, playbutton.right, playbutton.bottom, FALSE);
MoveWindow(GetDlgItem(hwndDlg, IDCANCEL),
exitbutton.left, exitbutton.top, exitbutton.right, exitbutton.bottom, FALSE);
}
// populate the controls
Button_SetCheck(GetDlgItem(hwndDlg, IDCFULLSCREEN), fullscreen ? BST_CHECKED : BST_UNCHECKED);
PopulateVideoModeLists(fullscreen, GetDlgItem(hwndDlg, IDCVMODE));
ShowWindow(hwndDlg, SW_SHOW);
if (GetDlgCtrlID((HWND)wParam) != IDOK) {
SetFocus(GetDlgItem(hwndDlg, IDOK));
return FALSE;
}
return TRUE;
}
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDCFULLSCREEN:
fullscreen = Button_GetCheck((HWND)lParam) == BST_CHECKED ? 1:0;
PopulateVideoModeLists(fullscreen, GetDlgItem(hwndDlg, IDCVMODE));
break;
case IDCVMODE:
if (HIWORD(wParam) == CBN_SELCHANGE) {
int i;
i = ComboBox_GetCurSel((HWND)lParam);
if (i != CB_ERR) i = ComboBox_GetItemData((HWND)lParam, i);
if (i != CB_ERR) {
xdimgame = validmode[i].xdim;
ydimgame = validmode[i].ydim;
bppgame = validmode[i].bpp;
}
}
break;
case IDCANCEL:
quitevent = 1; // fall through
case IDOK:
DestroyWindow(hwndDlg);
return TRUE;
default: break;
}
break;
default: break;
}
return FALSE;
}
int DoLaunchWindow(int initval)
{
HWND hwndStart, hwndLaunch;
MSG msg;
long saferect[4];
// only show config window if no config is loaded, or if it is, only if left control is held
if (initval == 0 && !GetAsyncKeyState(VK_CONTROL)) return 0;
if (win_getstartupwin((long*)&hwndStart, saferect, NULL)) return 0;
hwndLaunch = CreateDialogParam((HINSTANCE)win_gethinstance(), MAKEINTRESOURCE(2000), hwndStart, LaunchWindowProc, (LPARAM)saferect);
if (hwndLaunch) {
EnableWindow(GetDlgItem(hwndStart,WIN_STARTWIN_ITEMLIST),FALSE);
while (GetMessage(&msg, NULL, 0, 0) > 0) {
if (!IsWindow(hwndLaunch) || quitevent) break;
if (IsDialogMessage(hwndStart, &msg) /*|| IsDialogMessage(hwndLaunch, &msg)*/) continue;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
EnableWindow(GetDlgItem(hwndStart,WIN_STARTWIN_ITEMLIST),TRUE);
}
if (quitevent) return 1;
return 0;
}

359
polymer/build/src/glbuild.c Normal file
View file

@ -0,0 +1,359 @@
#include "glbuild.h"
#include "baselayer.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#if defined DYNAMIC_OPENGL && defined USE_OPENGL
#ifdef RENDERTYPESDL
#include "SDL.h"
#endif
void (APIENTRY * bglClearColor)( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha );
void (APIENTRY * bglClear)( GLbitfield mask );
void (APIENTRY * bglColorMask)( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha );
void (APIENTRY * bglAlphaFunc)( GLenum func, GLclampf ref );
void (APIENTRY * bglBlendFunc)( GLenum sfactor, GLenum dfactor );
void (APIENTRY * bglCullFace)( GLenum mode );
void (APIENTRY * bglFrontFace)( GLenum mode );
void (APIENTRY * bglPolygonOffset)( GLfloat factor, GLfloat units );
void (APIENTRY * bglPolygonMode)( GLenum face, GLenum mode );
void (APIENTRY * bglEnable)( GLenum cap );
void (APIENTRY * bglDisable)( GLenum cap );
void (APIENTRY * bglGetFloatv)( GLenum pname, GLfloat *params );
void (APIENTRY * bglGetIntegerv)( GLenum pname, GLint *params );
void (APIENTRY * bglPushAttrib)( GLbitfield mask );
void (APIENTRY * bglPopAttrib)( void );
GLenum (APIENTRY * bglGetError)( void );
const GLubyte* (APIENTRY * bglGetString)( GLenum name );
void (APIENTRY * bglHint)( GLenum target, GLenum mode );
// Depth
void (APIENTRY * bglDepthFunc)( GLenum func );
void (APIENTRY * bglDepthMask)( GLboolean flag );
void (APIENTRY * bglDepthRange)( GLclampd near_val, GLclampd far_val );
// Matrix
void (APIENTRY * bglMatrixMode)( GLenum mode );
void (APIENTRY * bglOrtho)( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val );
void (APIENTRY * bglFrustum)( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val );
void (APIENTRY * bglViewport)( GLint x, GLint y, GLsizei width, GLsizei height );
void (APIENTRY * bglPushMatrix)( void );
void (APIENTRY * bglPopMatrix)( void );
void (APIENTRY * bglLoadIdentity)( void );
void (APIENTRY * bglLoadMatrixf)( const GLfloat *m );
// Drawing
void (APIENTRY * bglBegin)( GLenum mode );
void (APIENTRY * bglEnd)( void );
void (APIENTRY * bglVertex2f)( GLfloat x, GLfloat y );
void (APIENTRY * bglVertex2i)( GLint x, GLint y );
void (APIENTRY * bglVertex3d)( GLdouble x, GLdouble y, GLdouble z );
void (APIENTRY * bglVertex3fv)( const GLfloat *v );
void (APIENTRY * bglColor4f)( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha );
void (APIENTRY * bglColor4ub)( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha );
void (APIENTRY * bglTexCoord2d)( GLdouble s, GLdouble t );
void (APIENTRY * bglTexCoord2f)( GLfloat s, GLfloat t );
// Lighting
void (APIENTRY * bglShadeModel)( GLenum mode );
// Raster funcs
void (APIENTRY * bglReadPixels)( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels );
// Texture mapping
void (APIENTRY * bglTexEnvf)( GLenum target, GLenum pname, GLfloat param );
void (APIENTRY * bglGenTextures)( GLsizei n, GLuint *textures ); // 1.1
void (APIENTRY * bglDeleteTextures)( GLsizei n, const GLuint *textures); // 1.1
void (APIENTRY * bglBindTexture)( GLenum target, GLuint texture ); // 1.1
void (APIENTRY * bglTexImage2D)( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels );
void (APIENTRY * bglTexSubImage2D)( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ); // 1.1
void (APIENTRY * bglTexParameterf)( GLenum target, GLenum pname, GLfloat param );
void (APIENTRY * bglTexParameteri)( GLenum target, GLenum pname, GLint param );
void (APIENTRY * bglGetTexLevelParameteriv)( GLenum target, GLint level, GLenum pname, GLint *params );
void (APIENTRY * bglCompressedTexImage2DARB)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
void (APIENTRY * bglGetCompressedTexImageARB)(GLenum, GLint, GLvoid *);
// Fog
void (APIENTRY * bglFogf)( GLenum pname, GLfloat param );
void (APIENTRY * bglFogi)( GLenum pname, GLint param );
void (APIENTRY * bglFogfv)( GLenum pname, const GLfloat *params );
#ifdef RENDERTYPEWIN
// Windows
HGLRC (WINAPI * bwglCreateContext)(HDC);
BOOL (WINAPI * bwglDeleteContext)(HGLRC);
PROC (WINAPI * bwglGetProcAddress)(LPCSTR);
BOOL (WINAPI * bwglMakeCurrent)(HDC,HGLRC);
BOOL (WINAPI * bwglSwapBuffers)(HDC);
int (WINAPI * bwglChoosePixelFormat)(HDC,CONST PIXELFORMATDESCRIPTOR*);
int (WINAPI * bwglDescribePixelFormat)(HDC,int,UINT,LPPIXELFORMATDESCRIPTOR);
int (WINAPI * bwglGetPixelFormat)(HDC);
BOOL (WINAPI * bwglSetPixelFormat)(HDC,int,const PIXELFORMATDESCRIPTOR*);
static HANDLE hGLDLL;
#endif
char *gldriver = NULL;
static void * getproc_(const char *s, int *err, int fatal, int extension)
{
void *t;
#if defined RENDERTYPESDL
t = (void*)SDL_GL_GetProcAddress(s);
#elif defined _WIN32
if (extension) t = (void*)bwglGetProcAddress(s);
else t = (void*)GetProcAddress(hGLDLL,s);
#else
#error Need a dynamic loader for this platform...
#endif
if (!t && fatal) {
initprintf("Failed to find %s in %s\n", s, gldriver);
*err = 1;
}
return t;
}
#define GETPROC(s) getproc_(s,&err,1,0)
#define GETPROCSOFT(s) getproc_(s,&err,0,0)
#define GETPROCEXT(s) getproc_(s,&err,1,1)
#define GETPROCEXTSOFT(s) getproc_(s,&err,0,1)
int loadgldriver(const char *driver)
{
void *t;
int err=0;
#ifdef RENDERTYPEWIN
if (hGLDLL) return 0;
#endif
if (!driver) {
#ifdef _WIN32
driver = "OPENGL32.DLL";
#else
driver = "libGL.so";
#endif
}
initprintf("Loading %s\n",driver);
#if defined RENDERTYPESDL
if (SDL_GL_LoadLibrary(driver)) return -1;
#elif defined _WIN32
hGLDLL = LoadLibrary(driver);
if (!hGLDLL) return -1;
#endif
gldriver = strdup(driver);
#ifdef RENDERTYPEWIN
bwglCreateContext = GETPROC("wglCreateContext");
bwglDeleteContext = GETPROC("wglDeleteContext");
bwglGetProcAddress = GETPROC("wglGetProcAddress");
bwglMakeCurrent = GETPROC("wglMakeCurrent");
bwglSwapBuffers = GETPROC("wglSwapBuffers");
bwglChoosePixelFormat = GETPROC("wglChoosePixelFormat");
bwglDescribePixelFormat = GETPROC("wglDescribePixelFormat");
bwglGetPixelFormat = GETPROC("wglGetPixelFormat");
bwglSetPixelFormat = GETPROC("wglSetPixelFormat");
#endif
bglClearColor = GETPROC("glClearColor");
bglClear = GETPROC("glClear");
bglColorMask = GETPROC("glColorMask");
bglAlphaFunc = GETPROC("glAlphaFunc");
bglBlendFunc = GETPROC("glBlendFunc");
bglCullFace = GETPROC("glCullFace");
bglFrontFace = GETPROC("glFrontFace");
bglPolygonOffset = GETPROC("glPolygonOffset");
bglPolygonMode = GETPROC("glPolygonMode");
bglEnable = GETPROC("glEnable");
bglDisable = GETPROC("glDisable");
bglGetFloatv = GETPROC("glGetFloatv");
bglGetIntegerv = GETPROC("glGetIntegerv");
bglPushAttrib = GETPROC("glPushAttrib");
bglPopAttrib = GETPROC("glPopAttrib");
bglGetError = GETPROC("glGetError");
bglGetString = GETPROC("glGetString");
bglHint = GETPROC("glHint");
// Depth
bglDepthFunc = GETPROC("glDepthFunc");
bglDepthMask = GETPROC("glDepthMask");
bglDepthRange = GETPROC("glDepthRange");
// Matrix
bglMatrixMode = GETPROC("glMatrixMode");
bglOrtho = GETPROC("glOrtho");
bglFrustum = GETPROC("glFrustum");
bglViewport = GETPROC("glViewport");
bglPushMatrix = GETPROC("glPushMatrix");
bglPopMatrix = GETPROC("glPopMatrix");
bglLoadIdentity = GETPROC("glLoadIdentity");
bglLoadMatrixf = GETPROC("glLoadMatrixf");
// Drawing
bglBegin = GETPROC("glBegin");
bglEnd = GETPROC("glEnd");
bglVertex2f = GETPROC("glVertex2f");
bglVertex2i = GETPROC("glVertex2i");
bglVertex3d = GETPROC("glVertex3d");
bglVertex3fv = GETPROC("glVertex3fv");
bglColor4f = GETPROC("glColor4f");
bglColor4ub = GETPROC("glColor4ub");
bglTexCoord2d = GETPROC("glTexCoord2d");
bglTexCoord2f = GETPROC("glTexCoord2f");
// Lighting
bglShadeModel = GETPROC("glShadeModel");
// Raster funcs
bglReadPixels = GETPROC("glReadPixels");
// Texture mapping
bglTexEnvf = GETPROC("glTexEnvf");
bglGenTextures = GETPROC("glGenTextures");
bglDeleteTextures = GETPROC("glDeleteTextures");
bglBindTexture = GETPROC("glBindTexture");
bglTexImage2D = GETPROC("glTexImage2D");
bglTexSubImage2D = GETPROC("glTexSubImage2D");
bglTexParameterf = GETPROC("glTexParameterf");
bglTexParameteri = GETPROC("glTexParameteri");
bglGetTexLevelParameteriv = GETPROC("glGetTexLevelParameteriv");
// Fog
bglFogf = GETPROC("glFogf");
bglFogi = GETPROC("glFogi");
bglFogfv = GETPROC("glFogfv");
loadglextensions();
if (err) unloadgldriver();
return err;
}
int loadglextensions(void)
{
int err = 0;
#ifdef RENDERTYPEWIN
if (!hGLDLL) return 0;
#endif
bglCompressedTexImage2DARB = GETPROCEXTSOFT("glCompressedTexImage2DARB");
bglGetCompressedTexImageARB = GETPROCEXTSOFT("glGetCompressedTexImageARB");
return err;
}
int unloadgldriver(void)
{
#ifdef RENDERTYPEWIN
if (!hGLDLL) return 0;
#endif
free(gldriver);
gldriver = NULL;
#ifdef RENDERTYPEWIN
FreeLibrary(hGLDLL);
hGLDLL = NULL;
#endif
bglClearColor = NULL;
bglClear = NULL;
bglColorMask = NULL;
bglAlphaFunc = NULL;
bglBlendFunc = NULL;
bglCullFace = NULL;
bglFrontFace = NULL;
bglPolygonOffset = NULL;
bglPolygonMode = NULL;
bglEnable = NULL;
bglDisable = NULL;
bglGetFloatv = NULL;
bglGetIntegerv = NULL;
bglPushAttrib = NULL;
bglPopAttrib = NULL;
bglGetError = NULL;
bglGetString = NULL;
bglHint = NULL;
// Depth
bglDepthFunc = NULL;
bglDepthMask = NULL;
bglDepthRange = NULL;
// Matrix
bglMatrixMode = NULL;
bglOrtho = NULL;
bglFrustum = NULL;
bglViewport = NULL;
bglPushMatrix = NULL;
bglPopMatrix = NULL;
bglLoadIdentity = NULL;
bglLoadMatrixf = NULL;
// Drawing
bglBegin = NULL;
bglEnd = NULL;
bglVertex2f = NULL;
bglVertex2i = NULL;
bglVertex3d = NULL;
bglVertex3fv = NULL;
bglColor4f = NULL;
bglColor4ub = NULL;
bglTexCoord2d = NULL;
bglTexCoord2f = NULL;
// Lighting
bglShadeModel = NULL;
// Raster funcs
bglReadPixels = NULL;
// Texture mapping
bglTexEnvf = NULL;
bglGenTextures = NULL;
bglDeleteTextures = NULL;
bglBindTexture = NULL;
bglTexImage2D = NULL;
bglTexSubImage2D = NULL;
bglTexParameterf = NULL;
bglTexParameteri = NULL;
bglGetTexLevelParameteriv = NULL;
bglCompressedTexImage2DARB = NULL;
bglGetCompressedTexImageARB = NULL;
// Fog
bglFogf = NULL;
bglFogi = NULL;
bglFogfv = NULL;
#ifdef RENDERTYPEWIN
bwglCreateContext = NULL;
bwglDeleteContext = NULL;
bwglGetProcAddress = NULL;
bwglMakeCurrent = NULL;
bwglSwapBuffers = NULL;
bwglChoosePixelFormat = NULL;
bwglDescribePixelFormat = NULL;
bwglGetPixelFormat = NULL;
bwglSetPixelFormat = NULL;
#endif
return 0;
}
#else
char *gldriver = "<statically linked>";
int loadgldriver(const char *a) { return 0; }
int unloadgldriver(void) { return 0; }
#endif

238
polymer/build/src/gtkbits.c Normal file
View file

@ -0,0 +1,238 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <gdk-pixbuf/gdk-pixdata.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>
#include "baselayer.h"
#include "build.h"
static int gtkenabled = 0;
extern const GdkPixdata startbanner_pixdata;
static GtkWidget *startwin = NULL;
static GdkPixbuf *appicon = NULL;
#define GLADE_HOOKUP_OBJECT(component,widget,name) \
g_object_set_data_full (G_OBJECT (component), name, \
gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref)
#define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \
g_object_set_data (G_OBJECT (component), name, widget)
#define lookup_widget(x,w) \
(GtkWidget*) g_object_get_data(G_OBJECT(x), w)
static gboolean on_startwin_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data)
{
quitevent++;
return TRUE; // FALSE would let the event go through. we want the game to decide when to close
}
void gtkbuild_create_startwin(void)
{
GtkWidget *banner, *label, *content, *scroll;
GtkWidget *hbox1, *fixed1;
GdkPixbuf *startbanner_pixbuf;
if (!gtkenabled) return;
startwin = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (startwin), apptitle);
gtk_window_set_position (GTK_WINDOW (startwin), GTK_WIN_POS_CENTER);
gtk_window_set_resizable (GTK_WINDOW (startwin), FALSE);
gtk_window_set_type_hint (GTK_WINDOW (startwin), GDK_WINDOW_TYPE_HINT_DIALOG);
hbox1 = gtk_hbox_new (FALSE, 0);
gtk_widget_show (hbox1);
gtk_container_add (GTK_CONTAINER (startwin), hbox1);
startbanner_pixbuf = gdk_pixbuf_from_pixdata(&startbanner_pixdata, FALSE, NULL);
banner = gtk_image_new_from_pixbuf(startbanner_pixbuf);
g_object_unref((gpointer)startbanner_pixbuf);
gtk_widget_show (banner);
gtk_box_pack_start (GTK_BOX (hbox1), banner, FALSE, FALSE, 0);
fixed1 = gtk_fixed_new ();
gtk_widget_show (fixed1);
gtk_box_pack_start (GTK_BOX (hbox1), fixed1, TRUE, TRUE, 0);
gtk_widget_set_size_request (fixed1, 390, -1);
label = gtk_label_new (startwin_labeltext);
gtk_widget_show (label);
gtk_fixed_put (GTK_FIXED (fixed1), label, 6, 6);
gtk_widget_set_size_request (label, 378, 16);
gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER);
scroll = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_show (scroll);
gtk_fixed_put (GTK_FIXED (fixed1), scroll, 6, 28);
gtk_widget_set_size_request (scroll, 378, 248);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
content = gtk_text_view_new ();
gtk_widget_show (content);
gtk_container_add (GTK_CONTAINER(scroll), content);
//gtk_fixed_put (GTK_FIXED (fixed1), content, 6, 28);
gtk_widget_set_size_request (content, 378, 248);
gtk_text_view_set_editable (GTK_TEXT_VIEW (content), FALSE);
gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (content), GTK_WRAP_WORD);
gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (content), FALSE);
g_signal_connect ((gpointer) startwin, "delete_event",
G_CALLBACK (on_startwin_delete_event),
NULL);
/* Store pointers to all widgets, for use by lookup_widget(). */
GLADE_HOOKUP_OBJECT_NO_REF (startwin, startwin, "startwin");
GLADE_HOOKUP_OBJECT (startwin, banner, "banner");
GLADE_HOOKUP_OBJECT (startwin, label, "label");
GLADE_HOOKUP_OBJECT (startwin, scroll, "scroll");
GLADE_HOOKUP_OBJECT (startwin, content, "content");
g_signal_connect((gpointer)startwin, "destroy", G_CALLBACK(gtk_widget_destroyed), (gpointer)&startwin);
gtk_widget_show (startwin);
gtk_main_iteration_do (FALSE);
}
void gtkbuild_settitle_startwin(const char *title)
{
if (!gtkenabled || !startwin) return;
gtk_window_set_title (GTK_WINDOW (startwin), title);
}
void gtkbuild_puts_startwin(const char *str)
{
GtkWidget *textview;
GtkTextBuffer *textbuffer;
GtkTextIter enditer;
GtkTextMark *mark;
const char *aptr, *bptr;
if (!gtkenabled || !startwin || !str) return;
if (!(textview = lookup_widget(startwin, "content"))) return;
textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
gtk_text_buffer_get_end_iter(textbuffer, &enditer);
for (aptr = bptr = str; *aptr != 0; ) {
switch (*bptr) {
case '\b':
if (bptr > aptr)
gtk_text_buffer_insert(textbuffer, &enditer, (const gchar *)aptr, (gint)(bptr-aptr)-1);
#if GTK_CHECK_VERSION(2,6,0)
gtk_text_buffer_backspace(textbuffer, &enditer, FALSE, TRUE);
#else
{
GtkTextIter iter2 = enditer;
gtk_text_iter_backward_cursor_position(&iter2);
//FIXME: this seems be deleting one too many chars somewhere!
if (!gtk_text_iter_equal(&iter2, &enditer))
gtk_text_buffer_delete_interactive(textbuffer, &iter2, &enditer, TRUE);
}
#endif
aptr = ++bptr;
break;
case 0:
if (bptr > aptr)
gtk_text_buffer_insert(textbuffer, &enditer, (const gchar *)aptr, (gint)(bptr-aptr));
aptr = bptr;
break;
case '\r': // FIXME
default:
bptr++;
break;
}
}
mark = gtk_text_buffer_create_mark(textbuffer, NULL, &enditer, 1);
gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(textview), mark, 0.0, FALSE, 0.0, 1.0);
gtk_text_buffer_delete_mark(textbuffer, mark);
}
void gtkbuild_close_startwin(void)
{
if (!gtkenabled) return;
if (startwin) {
gtk_widget_destroy (startwin);
startwin = NULL;
}
}
void gtkbuild_update_startwin(void)
{
if (!gtkenabled) return;
gtk_main_iteration_do (FALSE);
}
int gtkbuild_msgbox(char *name, char *msg)
{
GtkWidget *dialog;
if (!gtkenabled) return -1;
dialog = gtk_message_dialog_new(NULL,
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_INFO,
GTK_BUTTONS_OK,
msg);
gtk_window_set_title(GTK_WINDOW(dialog), name);
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
return 1;
}
int gtkbuild_ynbox(char *name, char *msg)
{
int r;
GtkWidget *dialog;
if (!gtkenabled) return -1;
dialog = gtk_message_dialog_new(NULL,
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_INFO,
GTK_BUTTONS_YES_NO,
msg);
gtk_window_set_title(GTK_WINDOW(dialog), name);
r = gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
if (r == GTK_RESPONSE_YES) return 1;
return 0;
}
#ifdef RENDERTYPESDL
#include "sdlayer.h"
extern struct sdlappicon sdlappicon;
#endif
void gtkbuild_init(int argc, char **argv)
{
gtkenabled = gtk_init_check(argc, argv);
if (!gtkenabled) return;
#ifdef RENDERTYPESDL
appicon = gdk_pixbuf_new_from_data((const guchar *)sdlappicon.pixels,
GDK_COLORSPACE_RGB, TRUE, 8, sdlappicon.width, sdlappicon.height,
sdlappicon.width*4, NULL, NULL);
#endif
if (appicon) gtk_window_set_default_icon(appicon);
}
void gtkbuild_exit(int r)
{
if (!gtkenabled) return;
if (appicon) g_object_unref((gpointer)appicon);
//gtk_exit(r);
}
void *gtkbuild_get_app_icon(void)
{
return appicon;
}

View file

@ -0,0 +1,254 @@
/*
* High-colour textures support for Polymost
* by Jonathon Fowler
* See the included license file "BUILDLIC.TXT" for license info.
*/
#include "kplib.h"
#define HICEFFECTMASK (1|2)
static palette_t hictinting[MAXPALOOKUPS];
struct hicskybox_t {
long ignore;
char *face[6];
};
typedef struct hicreplc_t {
struct hicreplc_t *next;
char palnum, ignore, flags, filler;
char *filename;
float alphacut;
struct hicskybox_t *skybox;
} hicreplctyp;
static hicreplctyp *hicreplc[MAXTILES];
static char hicfirstinit = 0;
//
// find the index into hicreplc[] which contains the replacement tile particulars
//
static hicreplctyp * hicfindsubst(long picnum, long palnum, long skybox)
{
hicreplctyp *hr;
if (!hicfirstinit) return NULL;
if ((unsigned long)picnum >= (unsigned long)MAXTILES) return NULL;
do {
for (hr = hicreplc[picnum]; hr; hr = hr->next) {
if (hr->palnum == palnum) {
if (skybox) {
if (hr->skybox && !hr->skybox->ignore) return hr;
} else {
if (!hr->ignore) return hr;
}
}
}
if (!palnum) break;
palnum = 0;
} while (1);
return NULL; // no replacement found
}
//
// hicinit()
// Initialise the high-colour stuff to default.
//
void hicinit(void)
{
long i,j;
hicreplctyp *hr, *next;
for (i=0;i<MAXPALOOKUPS;i++) { // all tints should be 100%
hictinting[i].r = hictinting[i].g = hictinting[i].b = 0xff;
hictinting[i].f = 0;
}
if (hicfirstinit)
for (i=MAXTILES-1;i>=0;i--) {
for (hr=hicreplc[i]; hr; ) {
next = hr->next;
if (hr->skybox) {
for (j=5;j>=0;j--) {
if (hr->skybox->face[j]) {
free(hr->skybox->face[j]);
}
}
free(hr->skybox);
}
if (hr->filename) free(hr->filename);
free(hr);
hr = next;
}
}
memset(hicreplc,0,sizeof(hicreplc));
hicfirstinit = 1;
}
//
// hicsetpalettetint(pal,r,g,b,effect)
// The tinting values represent a mechanism for emulating the effect of global sector
// palette shifts on true-colour textures and only true-colour textures.
// effect bitset: 1 = greyscale, 2 = invert
//
void hicsetpalettetint(long palnum, unsigned char r, unsigned char g, unsigned char b, unsigned char effect)
{
if ((unsigned long)palnum >= (unsigned long)MAXPALOOKUPS) return;
if (!hicfirstinit) hicinit();
hictinting[palnum].r = r;
hictinting[palnum].g = g;
hictinting[palnum].b = b;
hictinting[palnum].f = effect & HICEFFECTMASK;
}
//
// hicsetsubsttex(picnum,pal,filen,alphacut)
// Specifies a replacement graphic file for an ART tile.
//
int hicsetsubsttex(long picnum, long palnum, char *filen, float alphacut, char flags)
{
hicreplctyp *hr, *hrn;
if ((unsigned long)picnum >= (unsigned long)MAXTILES) return -1;
if ((unsigned long)palnum >= (unsigned long)MAXPALOOKUPS) return -1;
if (!hicfirstinit) hicinit();
for (hr = hicreplc[picnum]; hr; hr = hr->next) {
if (hr->palnum == palnum)
break;
}
if (!hr) {
// no replacement yet defined
hrn = (hicreplctyp *)calloc(1,sizeof(hicreplctyp));
if (!hrn) return -1;
hrn->palnum = palnum;
} else hrn = hr;
// store into hicreplc the details for this replacement
if (hrn->filename) free(hrn->filename);
hrn->filename = strdup(filen);
if (!hrn->filename) {
if (hrn->skybox) return -1; // don't free the base structure if there's a skybox defined
if (hr == NULL) free(hrn); // not yet a link in the chain
return -1;
}
hrn->ignore = 0;
hrn->alphacut = min(alphacut,1.0);
hrn->flags = flags;
if (hr == NULL) {
hrn->next = hicreplc[picnum];
hicreplc[picnum] = hrn;
}
//printf("Replacement [%d,%d]: %s\n", picnum, palnum, hicreplc[i]->filename);
return 0;
}
//
// hicsetskybox(picnum,pal,faces[6])
// Specifies a graphic files making up a skybox.
//
int hicsetskybox(long picnum, long palnum, char *faces[6])
{
hicreplctyp *hr, *hrn;
long j;
if ((unsigned long)picnum >= (unsigned long)MAXTILES) return -1;
if ((unsigned long)palnum >= (unsigned long)MAXPALOOKUPS) return -1;
for (j=5;j>=0;j--) if (!faces[j]) return -1;
if (!hicfirstinit) hicinit();
for (hr = hicreplc[picnum]; hr; hr = hr->next) {
if (hr->palnum == palnum)
break;
}
if (!hr) {
// no replacement yet defined
hrn = (hicreplctyp *)calloc(1,sizeof(hicreplctyp));
if (!hrn) return -1;
hrn->palnum = palnum;
} else hrn = hr;
if (!hrn->skybox) {
hrn->skybox = (struct hicskybox_t *)calloc(1,sizeof(struct hicskybox_t));
if (!hrn->skybox) {
if (hr == NULL) free(hrn); // not yet a link in the chain
return -1;
}
} else {
for (j=5;j>=0;j--) {
if (hrn->skybox->face[j])
free(hrn->skybox->face[j]);
}
}
// store each face's filename
for (j=0;j<6;j++) {
hrn->skybox->face[j] = strdup(faces[j]);
if (!hrn->skybox->face[j]) {
for (--j; j>=0; --j) // free any previous faces
free(hrn->skybox->face[j]);
free(hrn->skybox);
hrn->skybox = NULL;
if (hr == NULL) free(hrn);
return -1;
}
}
hrn->skybox->ignore = 0;
if (hr == NULL) {
hrn->next = hicreplc[picnum];
hicreplc[picnum] = hrn;
}
return 0;
}
//
// hicclearsubst(picnum,pal)
// Clears a replacement for an ART tile, including skybox faces.
//
int hicclearsubst(long picnum, long palnum)
{
hicreplctyp *hr, *hrn = NULL;
if ((unsigned long)picnum >= (unsigned long)MAXTILES) return -1;
if ((unsigned long)palnum >= (unsigned long)MAXPALOOKUPS) return -1;
if (!hicfirstinit) return 0;
for (hr = hicreplc[picnum]; hr; hrn = hr, hr = hr->next) {
if (hr->palnum == palnum)
break;
}
if (!hr) return 0;
if (hr->filename) free(hr->filename);
if (hr->skybox) {
int i;
for (i=5;i>=0;i--)
if (hr->skybox->face[i])
free(hr->skybox->face[i]);
free(hr->skybox);
}
if (hrn) hrn->next = hr->next;
else hicreplc[picnum] = hr->next;
free(hr);
return 0;
}

View file

@ -0,0 +1,378 @@
#ifdef __APPLE__
# include <jfaud/jfaud.hpp>
#else
# include "jfaud.hpp"
#endif
#include <ctype.h>
#include "compat.h"
#include "baselayer.h"
#include "cache1d.h"
extern "C" {
void initsb(char,char,long,char,char,char,char);
void uninitsb(void);
void setears(long,long,long,long);
void wsayfollow(char *,long,long,long *,long *,char);
void wsay(char *,long,long,long);
void loadwaves(void);
void loadsong(char *);
void musicon(void);
void musicoff(void);
void refreshaudio(void);
}
#define NUMCHANNELS 16
#define UNITSPERMTR 640.0
#define WAVESFILE "WAVES.KWV"
static char musistat = 0;
static char songname[BMAX_PATH] = "";
static JFAud *jfaud = NULL;
static int kwvnumwaves = 0;
static struct _kwvitem {
char instname[16];
long wavleng;
long repstart;
long repleng;
long finetune;
long datastart;
} *kwvitems = NULL;
static struct {
long *posx, *posy;
JFAudMixerChannel *handle;
} sfxchans[NUMCHANNELS];
class KenFile : public JFAudFile {
private:
int fh;
public:
KenFile(const char *filename, const char *subfilename)
: JFAudFile(filename, subfilename)
{
fh = kopen4load(const_cast<char*>(filename), 0);
}
virtual ~KenFile()
{
if (fh >= 0) kclose(fh);
}
virtual bool IsOpen(void) const { return fh >= 0; }
virtual long Read(long nbytes, void *buf)
{
if (fh < 0) return -1;
return kread(fh, buf, nbytes);
}
virtual long Seek(long pos, SeekFrom where)
{
int when;
if (fh < 0) return -1;
switch (where) {
case JFAudFile::Set: when = SEEK_SET; break;
case JFAudFile::Cur: when = SEEK_CUR; break;
case JFAudFile::End: when = SEEK_END; break;
default: return -1;
}
return klseek(fh, pos, when);
}
virtual long Tell(void) const
{
if (fh < 0) return -1;
return klseek(fh, 0, SEEK_CUR);
}
virtual long Length(void) const
{
if (fh < 0) return -1;
return kfilelength(fh);
}
};
class KWVFile : public JFAudFile {
private:
int fh;
long datastart, datalen, datapos;
public:
KWVFile(const char *filename, const char *subfilename = NULL)
: JFAudFile(filename, NULL),
datastart(-1), datalen(-1), datapos(-1)
{
long i,j;
bool found = false;
if (!subfilename) return;
for (i=0;i<kwvnumwaves;i++) {
for (j=0;j<16 && subfilename[j];j++) {
if (tolower(subfilename[j]) != tolower(kwvitems[i].instname[j])) {
found = false;
break;
} else found = true;
}
if (found) {
fh = kopen4load(const_cast<char *>(filename), 0);
if (fh < 0) return;
datastart = kwvitems[i].datastart;
datalen = kwvitems[i].wavleng;
datapos = 0;
klseek(fh, datastart, SEEK_SET);
return;
}
}
}
virtual ~KWVFile()
{
if (fh >= 0) kclose(fh);
}
virtual bool IsOpen(void) const
{
return datalen > 0 && fh >= 0;
}
virtual long Read(long nbytes, void *buf)
{
if (!IsOpen()) return -1;
if (datalen - datapos < nbytes) nbytes = datalen - datapos;
if (nbytes <= 0) return 0;
nbytes = kread(fh, buf, nbytes);
if (nbytes > 0) datapos += nbytes;
return nbytes;
}
virtual long Seek(long pos, SeekFrom where)
{
long newpos;
if (!IsOpen()) return -1;
switch (where) {
case JFAudFile::Set: newpos = pos; break;
case JFAudFile::Cur: newpos = datapos + pos; break;
case JFAudFile::End: newpos = datalen + pos; break;
default: return -1;
}
if (newpos < 0) newpos = 0;
else if (newpos > datalen) newpos = datalen;
return klseek(fh, datastart + newpos, SEEK_SET);
}
virtual long Tell(void) const
{
if (!IsOpen()) return -1;
return datapos;
}
virtual long Length(void) const
{
if (!IsOpen()) return -1;
return datalen;
}
};
static JFAudFile *openfile(const char *fn, const char *subfn)
{
char *ext;
bool loadkwv = false;
ext = Bstrrchr(fn,'.');
if (!ext || Bstrcasecmp(ext, ".kwv"))
return static_cast<JFAudFile*>(new KenFile(fn,subfn));
if (!subfn) return NULL; // KWV files need a sub name
return static_cast<JFAudFile*>(new KWVFile(fn, subfn));
}
static void logfunc(const char *s) { initprintf("%s", s); }
void loadwaves(void)
{
long fh, i, datastart;
fh = kopen4load(WAVESFILE, 0);
if (fh < 0) return;
if (kread(fh, &i, 4) != 4 || i != 0) return;
if (kread(fh, &kwvnumwaves, 4) != 4) return; kwvnumwaves = B_LITTLE32(kwvnumwaves);
kwvitems = new struct _kwvitem [kwvnumwaves];
if (!kwvitems) {
kclose(fh);
return;
}
datastart = (4+4) + kwvnumwaves * (16+4*4);
for (i=0;i<kwvnumwaves;i++) {
if (kread(fh, kwvitems[i].instname, 16) != 16) return;
if (kread(fh, &kwvitems[i].wavleng, 4) != 4) return; kwvitems[i].wavleng = B_LITTLE32(kwvitems[i].wavleng);
if (kread(fh, &kwvitems[i].repstart, 4) != 4) return; kwvitems[i].repstart = B_LITTLE32(kwvitems[i].repstart);
if (kread(fh, &kwvitems[i].repleng, 4) != 4) return; kwvitems[i].repleng = B_LITTLE32(kwvitems[i].repleng);
if (kread(fh, &kwvitems[i].finetune, 4) != 4) return; kwvitems[i].finetune = B_LITTLE32(kwvitems[i].finetune);
kwvitems[i].datastart = datastart;
datastart += kwvitems[i].wavleng;
}
kclose(fh);
}
void initsb(char dadigistat, char damusistat, long dasamplerate, char danumspeakers,
char dabytespersample, char daintspersec, char daquality)
{
int i;
if (jfaud) return;
JFAud_SetLogFunc(logfunc);
jfaud = new JFAud();
if (!jfaud) return;
jfaud->SetUserOpenFunc(openfile);
musistat = 0;
if (!jfaud->InitWave(NULL, NUMCHANNELS, dasamplerate)) {
delete jfaud;
jfaud = NULL;
return;
}
musistat = damusistat;
for (i=NUMCHANNELS-1;i>=0;i--) sfxchans[i].handle = NULL;
loadwaves();
}
void uninitsb(void)
{
if (!jfaud) return;
delete jfaud;
jfaud = NULL;
if (kwvitems) delete [] kwvitems;
}
void setears(long daposx, long daposy, long daxvect, long dayvect)
{
JFAudMixer *mixer;
if (!jfaud) return;
mixer = jfaud->GetWave();
if (!mixer) return;
mixer->SetListenerPosition((float)daposx/UNITSPERMTR, 0.0, (float)-daposy/UNITSPERMTR);
mixer->SetListenerOrientation((float)daxvect/UNITSPERMTR, 0.0, (float)-dayvect/UNITSPERMTR,
0.0, 1.0, 0.0);
}
static int storehandle(JFAudMixerChannel *handle, long *daxplc, long *dayplc)
{
int i,empty = -1;
for (i=NUMCHANNELS-1;i>=0;i--) {
if (!sfxchans[i].handle && empty<0) empty = i;
if (sfxchans[i].handle == handle) {
empty = i;
break;
}
}
if (empty < 0) return -1;
sfxchans[empty].handle = handle;
sfxchans[empty].posx = daxplc;
sfxchans[empty].posy = dayplc;
return empty;
}
static void stopcb(int r)
{
jfaud->FreeSound(sfxchans[r].handle);
sfxchans[r].handle = NULL;
}
void wsayfollow(char *dafilename, long dafreq, long davol, long *daxplc, long *dayplc, char followstat)
{
JFAudMixerChannel *handl;
int r;
if (!jfaud) return;
handl = jfaud->PlayRawSound(WAVESFILE, dafilename, 1, 11025, 1, 1, false);
if (!handl) return;
if (followstat) r = storehandle(handl, daxplc, dayplc);
else r = storehandle(handl, NULL, NULL);
if (r >= 0) handl->SetStopCallback(stopcb, r);
handl->SetPitch((float)dafreq / 4096.0);
handl->SetGain((float)davol / 256.0);
handl->SetPosition((float)(*daxplc) / UNITSPERMTR, 0.0, (float)(-*dayplc) / UNITSPERMTR);
handl->SetFollowListener(false);
handl->SetRolloff(1.0);
handl->Play();
}
void wsay(char *dafilename, long dafreq, long volume1, long volume2)
{
JFAudMixerChannel *handl;
int r;
if (!jfaud) return;
handl = jfaud->PlayRawSound(WAVESFILE, dafilename, 1, 11025, 1, 1, false);
if (!handl) return;
r = storehandle(handl, NULL, NULL);
if (r >= 0) handl->SetStopCallback(stopcb, r);
handl->SetPitch((float)dafreq / 4096.0);
handl->SetGain((float)volume1 / 256.0);
handl->SetPosition(0.0, 0.0, 0.0);
handl->SetFollowListener(true);
handl->SetRolloff(0.0);
handl->Play();
}
void loadsong(char *filename)
{
if (!jfaud) return;
strcpy(songname,filename);
}
void musicon(void)
{
if (!jfaud || !musistat || !songname[0]) return;
jfaud->PlayMusic(songname);
}
void musicoff(void)
{
if (!jfaud || !musistat) return;
jfaud->StopMusic();
}
void refreshaudio(void)
{
int i;
if (!jfaud) return;
for (i=NUMCHANNELS-1;i>=0;i--) {
if (!sfxchans[i].handle || !jfaud->IsValidSound(sfxchans[i].handle)) continue;
if (!sfxchans[i].posx || !sfxchans[i].posy) continue;
sfxchans[i].handle->SetPosition(
(float)(*sfxchans[i].posx)/UNITSPERMTR,
0.0,
(float)(-*sfxchans[i].posy)/UNITSPERMTR);
}
jfaud->Update();
}

3117
polymer/build/src/kplib.c Normal file

File diff suppressed because it is too large Load diff

Some files were not shown because too many files have changed in this diff Show more