mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-29 07:12:36 +00:00
- Changed MIDI playback to not bother playing super short songs that don't
contain enough music to fill the initial output buffers. - Removed the read barrier around ADehackedPickup::RealPickup. If the real pickup is picked up, it may very well destroy itself before the dehacked wrapper's stubs that use it are called. - Reverted revision 840. For a file we don't want end users to be touching, making DEHSUPP plain text sends out mixed messages: "Don't mess with this. Oh, by the way, it's plain text now to make it easier for you to edit." Is there some reason other than a desire to do away with binary lumps to make the distributed lump text? - Added a new speakermode for Stereo + HRTF: "Headphones". This is the only way to get the HRTF low pass filter effect now. - Fixed: No more than one sector could make noise at once. - Trying out sound without varying priorities again. - Fixed: Need to use setSpeakerMix to let 2D sounds (aka streamed music) use their full volume range. SVN r842 (trunk)
This commit is contained in:
parent
a665663c15
commit
3237c6b4e8
26 changed files with 4772 additions and 579 deletions
|
@ -94,7 +94,7 @@ src/xlat/xlat_parser.c: tools/lemon/lemon src/xlat/xlat_parser.y
|
||||||
$(OBJDIR):
|
$(OBJDIR):
|
||||||
mkdir $(OBJDIR)
|
mkdir $(OBJDIR)
|
||||||
|
|
||||||
toolsandpk3: ccdv tools/makewad/makewad tools/lemon/lemon
|
toolsandpk3: ccdv tools/makewad/makewad tools/dehsupp/dehsupp tools/lemon/lemon
|
||||||
$(MAKE) -C wadsrc/
|
$(MAKE) -C wadsrc/
|
||||||
|
|
||||||
zdoom.pk3: toolsandpk3
|
zdoom.pk3: toolsandpk3
|
||||||
|
@ -106,6 +106,9 @@ snes_spc/libsnes_spc.a:
|
||||||
tools/makewad/makewad:
|
tools/makewad/makewad:
|
||||||
$(MAKE) -C tools/makewad/
|
$(MAKE) -C tools/makewad/
|
||||||
|
|
||||||
|
tools/dehsupp/dehsupp:
|
||||||
|
$(MAKE) -C tools/dehsupp/
|
||||||
|
|
||||||
tools/lemon/lemon:
|
tools/lemon/lemon:
|
||||||
$(MAKE) -C tools/lemon/
|
$(MAKE) -C tools/lemon/
|
||||||
|
|
||||||
|
@ -123,6 +126,8 @@ clean: cleanobjs
|
||||||
|
|
||||||
cleantools:
|
cleantools:
|
||||||
@$(MAKE) -C tools/makewad clean
|
@$(MAKE) -C tools/makewad clean
|
||||||
|
@$(MAKE) -C tools/dehsupp clean
|
||||||
|
@$(MAKE) -C tools/xlatcc clean
|
||||||
|
|
||||||
cleandebug:
|
cleandebug:
|
||||||
rm -f $(ZDOOMDEBUG) $(DEBUGOBJ)/*.o $(DEBUGOBJ)/*.d
|
rm -f $(ZDOOMDEBUG) $(DEBUGOBJ)/*.o $(DEBUGOBJ)/*.d
|
||||||
|
|
|
@ -23,6 +23,7 @@ basetools: ccdv.exe
|
||||||
$(MAKE) -C tools/re2c
|
$(MAKE) -C tools/re2c
|
||||||
$(MAKE) -C zlib -f Makefile.mgw
|
$(MAKE) -C zlib -f Makefile.mgw
|
||||||
$(MAKE) -C tools/makewad
|
$(MAKE) -C tools/makewad
|
||||||
|
$(MAKE) -C tools/dehsupp
|
||||||
$(MAKE) -C tools/fixrtext
|
$(MAKE) -C tools/fixrtext
|
||||||
$(MAKE) -C wadsrc -f Makefile.mgw
|
$(MAKE) -C wadsrc -f Makefile.mgw
|
||||||
$(MAKE) -C jpeg-6b -f Makefile.mgw
|
$(MAKE) -C jpeg-6b -f Makefile.mgw
|
||||||
|
@ -34,6 +35,7 @@ cleanexe:
|
||||||
clean:
|
clean:
|
||||||
@$(MAKE) -C tools/lemon clean
|
@$(MAKE) -C tools/lemon clean
|
||||||
@$(MAKE) -C tools/re2c clean
|
@$(MAKE) -C tools/re2c clean
|
||||||
|
@$(MAKE) -C tools/dehsupp clean
|
||||||
@$(MAKE) -C tools/makewad clean
|
@$(MAKE) -C tools/makewad clean
|
||||||
@$(MAKE) -C tools/fixrtext clean
|
@$(MAKE) -C tools/fixrtext clean
|
||||||
@$(MAKE) -C wadsrc -f Makefile.mgw clean
|
@$(MAKE) -C wadsrc -f Makefile.mgw clean
|
||||||
|
|
|
@ -1,9 +1,24 @@
|
||||||
|
March 22, 2008
|
||||||
|
- Changed MIDI playback to not bother playing super short songs that don't
|
||||||
|
contain enough music to fill the initial output buffers.
|
||||||
|
- Removed the read barrier around ADehackedPickup::RealPickup. If the real
|
||||||
|
pickup is picked up, it may very well destroy itself before the dehacked
|
||||||
|
wrapper's stubs that use it are called.
|
||||||
|
- Reverted revision 840. For a file we don't want end users to be touching,
|
||||||
|
making DEHSUPP plain text sends out mixed messages: "Don't mess with this.
|
||||||
|
Oh, by the way, it's plain text now to make it easier for you to edit."
|
||||||
|
Is there some reason other than a desire to do away with binary lumps to
|
||||||
|
make the distributed lump text?
|
||||||
|
- Added a new speakermode for Stereo + HRTF: "Headphones". This is the only
|
||||||
|
way to get the HRTF low pass filter effect now.
|
||||||
|
- Fixed: No more than one sector could make noise at once.
|
||||||
|
- Trying out sound without varying priorities again.
|
||||||
|
- Fixed: Need to use setSpeakerMix to let 2D sounds (aka streamed music) use
|
||||||
|
their full volume range.
|
||||||
|
|
||||||
March 22, 2008 (Changes by Graf Zahl)
|
March 22, 2008 (Changes by Graf Zahl)
|
||||||
- Added sector type translation to xlat_parser and removed the old sectorx
|
- Added sector type translation to xlat_parser and removed the old sectorx
|
||||||
lump.
|
lump.
|
||||||
- Changed DEHSUPP loader so that it reads the text file directly. As a result
|
|
||||||
the DEHSUPP compiler is gone now. Unlike XLATCC I'm using FScanner though.
|
|
||||||
A fully featured parser seems like overkill for this simple text file.
|
|
||||||
- Added Line_SetTextureOffset special.
|
- Added Line_SetTextureOffset special.
|
||||||
- Added 'allowprotection' keyword to terrain definitions to allow damaging
|
- Added 'allowprotection' keyword to terrain definitions to allow damaging
|
||||||
flats that don't damage players with a radiation suit.
|
flats that don't damage players with a radiation suit.
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -163,7 +163,7 @@ static fixed_t P_AproxDistance2 (AActor *listener, fixed_t x, fixed_t y)
|
||||||
void S_NoiseDebug (void)
|
void S_NoiseDebug (void)
|
||||||
{
|
{
|
||||||
FSoundChan *chan;
|
FSoundChan *chan;
|
||||||
fixed_t ox, oy;
|
fixed_t ox, oy, oz;
|
||||||
int y, color;
|
int y, color;
|
||||||
|
|
||||||
y = 32 * CleanYfac;
|
y = 32 * CleanYfac;
|
||||||
|
@ -173,9 +173,10 @@ void S_NoiseDebug (void)
|
||||||
screen->DrawText (CR_GOLD, 0, y, "name", TAG_DONE);
|
screen->DrawText (CR_GOLD, 0, y, "name", TAG_DONE);
|
||||||
screen->DrawText (CR_GOLD, 70, y, "x", TAG_DONE);
|
screen->DrawText (CR_GOLD, 70, y, "x", TAG_DONE);
|
||||||
screen->DrawText (CR_GOLD, 120, y, "y", TAG_DONE);
|
screen->DrawText (CR_GOLD, 120, y, "y", TAG_DONE);
|
||||||
screen->DrawText (CR_GOLD, 170, y, "vol", TAG_DONE);
|
screen->DrawText (CR_GOLD, 170, y, "z", TAG_DONE);
|
||||||
screen->DrawText (CR_GOLD, 200, y, "dist", TAG_DONE);
|
screen->DrawText (CR_GOLD, 220, y, "vol", TAG_DONE);
|
||||||
screen->DrawText (CR_GOLD, 240, y, "chan", TAG_DONE);
|
screen->DrawText (CR_GOLD, 250, y, "dist", TAG_DONE);
|
||||||
|
screen->DrawText (CR_GOLD, 290, y, "chan", TAG_DONE);
|
||||||
y += 8;
|
y += 8;
|
||||||
|
|
||||||
if (Channels == NULL)
|
if (Channels == NULL)
|
||||||
|
@ -195,16 +196,19 @@ void S_NoiseDebug (void)
|
||||||
{
|
{
|
||||||
ox = players[consoleplayer].camera->x;
|
ox = players[consoleplayer].camera->x;
|
||||||
oy = players[consoleplayer].camera->y;
|
oy = players[consoleplayer].camera->y;
|
||||||
|
oz = players[consoleplayer].camera->z;
|
||||||
}
|
}
|
||||||
else if (origin)
|
else if (origin)
|
||||||
{
|
{
|
||||||
ox = origin[0];
|
ox = origin[0];
|
||||||
oy = origin[1];
|
oy = origin[1];
|
||||||
|
oz = origin[2];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ox = chan->X;
|
ox = chan->X;
|
||||||
oy = chan->Y;
|
oy = chan->Y;
|
||||||
|
oz = chan->Z;
|
||||||
}
|
}
|
||||||
color = chan->Loop ? CR_BROWN : CR_GREY;
|
color = chan->Loop ? CR_BROWN : CR_GREY;
|
||||||
Wads.GetLumpName (temp, chan->SfxInfo->lumpnum);
|
Wads.GetLumpName (temp, chan->SfxInfo->lumpnum);
|
||||||
|
@ -214,12 +218,14 @@ void S_NoiseDebug (void)
|
||||||
screen->DrawText (color, 70, y, temp, TAG_DONE);
|
screen->DrawText (color, 70, y, temp, TAG_DONE);
|
||||||
sprintf (temp, "%d", oy >> FRACBITS);
|
sprintf (temp, "%d", oy >> FRACBITS);
|
||||||
screen->DrawText (color, 120, y, temp, TAG_DONE);
|
screen->DrawText (color, 120, y, temp, TAG_DONE);
|
||||||
sprintf (temp, "%g", chan->Volume);
|
sprintf (temp, "%d", oz >> FRACBITS);
|
||||||
screen->DrawText (color, 170, y, temp, TAG_DONE);
|
screen->DrawText (color, 170, y, temp, TAG_DONE);
|
||||||
|
sprintf (temp, "%g", chan->Volume);
|
||||||
|
screen->DrawText (color, 220, y, temp, TAG_DONE);
|
||||||
sprintf (temp, "%d", P_AproxDistance2 (players[consoleplayer].camera, ox, oy) / FRACUNIT);
|
sprintf (temp, "%d", P_AproxDistance2 (players[consoleplayer].camera, ox, oy) / FRACUNIT);
|
||||||
screen->DrawText (color, 200, y, temp, TAG_DONE);
|
screen->DrawText (color, 250, y, temp, TAG_DONE);
|
||||||
sprintf (temp, "%d", chan->EntChannel);
|
sprintf (temp, "%d", chan->EntChannel);
|
||||||
screen->DrawText (color, 240, y, temp, TAG_DONE);
|
screen->DrawText (color, 290, y, temp, TAG_DONE);
|
||||||
y += 8;
|
y += 8;
|
||||||
if (chan->PrevChan == &Channels)
|
if (chan->PrevChan == &Channels)
|
||||||
{
|
{
|
||||||
|
@ -671,7 +677,7 @@ static void S_StartSound (fixed_t *pt, AActor *mover, int channel,
|
||||||
sfx = &S_sfx[sound_id];
|
sfx = &S_sfx[sound_id];
|
||||||
|
|
||||||
// If this is a singular sound, don't play it if it's already playing.
|
// If this is a singular sound, don't play it if it's already playing.
|
||||||
if (pt != NULL && sfx->bSingular && S_CheckSingular(sound_id))
|
if (sfx->bSingular && S_CheckSingular(sound_id))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Resolve player sounds, random sounds, and aliases
|
// Resolve player sounds, random sounds, and aliases
|
||||||
|
@ -715,6 +721,8 @@ static void S_StartSound (fixed_t *pt, AActor *mover, int channel,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
basepriority = 0;
|
||||||
|
#if 0
|
||||||
switch (channel)
|
switch (channel)
|
||||||
{
|
{
|
||||||
case CHAN_WEAPON:
|
case CHAN_WEAPON:
|
||||||
|
@ -731,7 +739,8 @@ static void S_StartSound (fixed_t *pt, AActor *mover, int channel,
|
||||||
basepriority = -10;
|
basepriority = -10;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
basepriority = int(basepriority * attenuation);
|
basepriority = int(basepriority / attenuation);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mover != NULL && channel == CHAN_AUTO)
|
if (mover != NULL && channel == CHAN_AUTO)
|
||||||
|
@ -764,7 +773,7 @@ static void S_StartSound (fixed_t *pt, AActor *mover, int channel,
|
||||||
{
|
{
|
||||||
for (chan = Channels; chan != NULL; chan = chan->NextChan)
|
for (chan = Channels; chan != NULL; chan = chan->NextChan)
|
||||||
{
|
{
|
||||||
if (chan->Mover == mover && chan->EntChannel == channel)
|
if (((mover != NULL && chan->Mover == mover) || (chan->Pt == pt)) && chan->EntChannel == channel)
|
||||||
{
|
{
|
||||||
GSnd->StopSound(chan);
|
GSnd->StopSound(chan);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -982,32 +982,6 @@ void STACK_ARGS FScanner::ScriptError (const char *message, ...)
|
||||||
AlreadyGot? AlreadyGotLine : Line, composed.GetChars());
|
AlreadyGot? AlreadyGotLine : Line, composed.GetChars());
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
// FScanner::ScriptError
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
|
|
||||||
void STACK_ARGS FScanner::ScriptMessage (const char *message, ...)
|
|
||||||
{
|
|
||||||
FString composed;
|
|
||||||
|
|
||||||
if (message == NULL)
|
|
||||||
{
|
|
||||||
composed = "Bad syntax.";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
va_list arglist;
|
|
||||||
va_start (arglist, message);
|
|
||||||
composed.VFormat (message, arglist);
|
|
||||||
va_end (arglist);
|
|
||||||
}
|
|
||||||
|
|
||||||
Printf ("Script error, \"%s\" line %d:\n%s\n", ScriptName.GetChars(),
|
|
||||||
AlreadyGot? AlreadyGotLine : Line, composed.GetChars());
|
|
||||||
}
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// FScanner :: CheckOpen
|
// FScanner :: CheckOpen
|
||||||
|
|
|
@ -58,7 +58,6 @@ public:
|
||||||
int MustMatchString(const char **strings);
|
int MustMatchString(const char **strings);
|
||||||
|
|
||||||
void ScriptError(const char *message, ...);
|
void ScriptError(const char *message, ...);
|
||||||
void ScriptMessage(const char *message, ...);
|
|
||||||
|
|
||||||
// Members ------------------------------------------------------
|
// Members ------------------------------------------------------
|
||||||
char *String;
|
char *String;
|
||||||
|
|
|
@ -164,6 +164,8 @@ static const FEnumList SpeakerModeNames[] =
|
||||||
{ "1", FMOD_SPEAKERMODE_MONO },
|
{ "1", FMOD_SPEAKERMODE_MONO },
|
||||||
{ "2", FMOD_SPEAKERMODE_STEREO },
|
{ "2", FMOD_SPEAKERMODE_STEREO },
|
||||||
{ "4", FMOD_SPEAKERMODE_QUAD },
|
{ "4", FMOD_SPEAKERMODE_QUAD },
|
||||||
|
{ "Headphones", 9001 },
|
||||||
|
{ "HRTF", 9001 },
|
||||||
{ NULL, 0 }
|
{ NULL, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -292,6 +294,7 @@ public:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Channel->setChannelGroup(Owner->MusicGroup);
|
Channel->setChannelGroup(Owner->MusicGroup);
|
||||||
|
Channel->setSpeakerMix(1, 1, 1, 1, 1, 1, 1, 1);
|
||||||
Channel->setVolume(volume);
|
Channel->setVolume(volume);
|
||||||
// Ensure reverb is disabled.
|
// Ensure reverb is disabled.
|
||||||
FMOD_REVERB_CHANNELPROPERTIES reverb;
|
FMOD_REVERB_CHANNELPROPERTIES reverb;
|
||||||
|
@ -478,7 +481,7 @@ bool FMODSoundRenderer::Init()
|
||||||
{
|
{
|
||||||
speakermode = FMOD_SPEAKERMODE(eval);
|
speakermode = FMOD_SPEAKERMODE(eval);
|
||||||
}
|
}
|
||||||
result = Sys->setSpeakerMode(speakermode);
|
result = Sys->setSpeakerMode(speakermode < 9000 ? speakermode : FMOD_SPEAKERMODE_STEREO);
|
||||||
ERRCHECK(result);
|
ERRCHECK(result);
|
||||||
|
|
||||||
// Set software format
|
// Set software format
|
||||||
|
@ -548,7 +551,11 @@ bool FMODSoundRenderer::Init()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try to init
|
// Try to init
|
||||||
initflags = FMOD_INIT_NORMAL | FMOD_INIT_SOFTWARE_HRTF;
|
initflags = FMOD_INIT_NORMAL;
|
||||||
|
if (speakermode > 9000)
|
||||||
|
{
|
||||||
|
initflags |= FMOD_INIT_SOFTWARE_HRTF;
|
||||||
|
}
|
||||||
if (snd_dspnet)
|
if (snd_dspnet)
|
||||||
{
|
{
|
||||||
initflags |= FMOD_INIT_ENABLE_DSPNET;
|
initflags |= FMOD_INIT_ENABLE_DSPNET;
|
||||||
|
|
|
@ -205,30 +205,10 @@ void MIDIStreamer::Play (bool looping)
|
||||||
}
|
}
|
||||||
else if (res == SONG_DONE)
|
else if (res == SONG_DONE)
|
||||||
{
|
{
|
||||||
if (looping)
|
// Do not play super short songs that can't fill the initial two buffers.
|
||||||
{
|
|
||||||
Restarting = true;
|
|
||||||
if (SONG_MORE == FillBuffer(BufferNum, MAX_EVENTS, MAX_TIME))
|
|
||||||
{
|
|
||||||
if (0 != MIDI->StreamOut(&Buffer[BufferNum]))
|
|
||||||
{
|
|
||||||
Printf ("Initial midiStreamOut failed\n");
|
|
||||||
Stop();
|
Stop();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BufferNum ^= 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Stop();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
EndQueued = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Stop();
|
Stop();
|
||||||
|
|
55
tools/dehsupp/Makefile
Normal file
55
tools/dehsupp/Makefile
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
ifeq (Windows_NT,$(OS))
|
||||||
|
WIN=1
|
||||||
|
WINCMD=1
|
||||||
|
endif
|
||||||
|
ifeq ($(findstring msys,$(shell sh --version 2>nul)),msys)
|
||||||
|
WIN=1
|
||||||
|
WINCMD=0
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq (1,$(WIN))
|
||||||
|
EXE = dehsupp.exe
|
||||||
|
CFLAGS = $(LOC) -Os -Wall -fomit-frame-pointer
|
||||||
|
else
|
||||||
|
EXE = dehsupp
|
||||||
|
CFLAGS = -Dstricmp=strcasecmp -Dstrnicmp=strncasecmp -Os -Wall -fomit-frame-pointer
|
||||||
|
endif
|
||||||
|
|
||||||
|
CCDV = @../../ccdv
|
||||||
|
CC = gcc
|
||||||
|
LDFLAGS = -s
|
||||||
|
|
||||||
|
RE2C = ../re2c/re2c
|
||||||
|
LEMON = ../lemon/lemon
|
||||||
|
LEMONFLAGS =
|
||||||
|
RE2CFLAGS = -s
|
||||||
|
|
||||||
|
OBJS = dehsupp.o parse.o scanner.o
|
||||||
|
|
||||||
|
all: $(EXE)
|
||||||
|
|
||||||
|
$(EXE): $(OBJS)
|
||||||
|
$(CCDV) $(CC) $(LDFLAGS) -o $(EXE) $(OBJS)
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
|
||||||
|
clean:
|
||||||
|
ifeq (1,$(WINCMD))
|
||||||
|
-del /q /f $(EXE) 2>nul
|
||||||
|
-del /q /f *.o 2>nul
|
||||||
|
else
|
||||||
|
rm -f $(EXE)
|
||||||
|
rm -f *.o
|
||||||
|
endif
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
$(CCDV) $(CC) $(CFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
parse.h parse.c: parse.y
|
||||||
|
$(CCDV) $(LEMON) $(LEMONFLAGS) $<
|
||||||
|
|
||||||
|
scanner.c: scanner.re
|
||||||
|
$(CCDV) $(RE2C) $(RE2CFLAGS) -o $@ $<
|
||||||
|
|
||||||
|
parse.tab.c: parse.y
|
||||||
|
$(CCDV) $(BISON) $(BISONFLAGS) -o $@ $<
|
571
tools/dehsupp/dehsupp.c
Normal file
571
tools/dehsupp/dehsupp.c
Normal file
|
@ -0,0 +1,571 @@
|
||||||
|
#include <malloc.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <search.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include "dehsupp.h"
|
||||||
|
|
||||||
|
FILE *Source, *Dest;
|
||||||
|
int SourceLine;
|
||||||
|
int ErrorCount;
|
||||||
|
|
||||||
|
struct StringList *NameList, **NameListLast = &NameList;
|
||||||
|
int NameCount;
|
||||||
|
|
||||||
|
name *ActionsList;
|
||||||
|
unsigned char *HeightsArray;
|
||||||
|
unsigned char *ActionMap;
|
||||||
|
unsigned short *CodePMap;
|
||||||
|
char *SpriteNames;
|
||||||
|
struct StateMapE *StateMaps;
|
||||||
|
name *SoundMaps;
|
||||||
|
name *InfoNamesArray;
|
||||||
|
struct ThingBitsE *ThingBitsMap;
|
||||||
|
struct RenderStylesE *RenderStylesMap;
|
||||||
|
|
||||||
|
int ActionsListSize, MaxActionsListSize;
|
||||||
|
int HeightsSize, MaxHeightsSize;
|
||||||
|
int ActionMapSize, MaxActionMapSize;
|
||||||
|
int CodePMapSize, MaxCodePMapSize;
|
||||||
|
int SpriteNamesSize, MaxSpriteNamesSize;
|
||||||
|
int StateMapsSize, MaxStateMapsSize;
|
||||||
|
int SoundMapsSize, MaxSoundMapsSize;
|
||||||
|
int InfoNamesSize, MaxInfoNamesSize;
|
||||||
|
int ThingBitsMapSize, MaxThingBitsMapSize;
|
||||||
|
int RenderStylesSize, MaxRenderStylesSize;
|
||||||
|
|
||||||
|
int main (int argc, char **argv)
|
||||||
|
{
|
||||||
|
if (argc != 3)
|
||||||
|
{
|
||||||
|
printf ("Usage: dehsupp <infile> <outfile>\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
Source = fopen (argv[1], "r");
|
||||||
|
if (Source == NULL)
|
||||||
|
{
|
||||||
|
printf ("Could not open %s\n", argv[1]);
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
#if !defined(NDEBUG) && 0
|
||||||
|
ParseTrace(fopen("trace.txt", "w"), "");
|
||||||
|
#endif
|
||||||
|
SourceLine = 1;
|
||||||
|
yyparse ();
|
||||||
|
fclose (Source);
|
||||||
|
if (ErrorCount)
|
||||||
|
{
|
||||||
|
printf ("There were %d errors\n", ErrorCount);
|
||||||
|
return -3;
|
||||||
|
}
|
||||||
|
SortNames ();
|
||||||
|
Dest = fopen (argv[2], "wb");
|
||||||
|
if (Dest == NULL)
|
||||||
|
{
|
||||||
|
printf ("Could not open %s\n", argv[2]);
|
||||||
|
return -4;
|
||||||
|
}
|
||||||
|
WriteNameTable ();
|
||||||
|
WriteActions ();
|
||||||
|
WriteCodePConv ();
|
||||||
|
WriteSprites ();
|
||||||
|
WriteSounds ();
|
||||||
|
WriteInfoNames ();
|
||||||
|
WriteStates ();
|
||||||
|
WriteActionMap ();
|
||||||
|
WriteThingBits ();
|
||||||
|
WriteRenderStyles ();
|
||||||
|
WriteHeights ();
|
||||||
|
WriteLabel ("END ");
|
||||||
|
fclose (Dest);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void fail (int code, char *err)
|
||||||
|
{
|
||||||
|
fclose (Dest);
|
||||||
|
printf ("%s\n", err);
|
||||||
|
exit (code);
|
||||||
|
}
|
||||||
|
|
||||||
|
void *ParseAlloc(void *(*mallocProc)(size_t));
|
||||||
|
void Parse(void *yyp, int yymajor, struct Token yyminor);
|
||||||
|
void ParseFree(void *p, void (*freeProc)(void*));
|
||||||
|
|
||||||
|
void yyparse (void)
|
||||||
|
{
|
||||||
|
Scanner scanner = { Source };
|
||||||
|
void *pParser = ParseAlloc (malloc);
|
||||||
|
struct Token token;
|
||||||
|
int tokentype;
|
||||||
|
|
||||||
|
while ((tokentype = lex(&scanner, &token)) != EOI)
|
||||||
|
{
|
||||||
|
SourceLine = scanner.line;
|
||||||
|
Parse (pParser, tokentype, token);
|
||||||
|
}
|
||||||
|
memset (&token, 0, sizeof(token));
|
||||||
|
Parse (pParser, 0, token);
|
||||||
|
ParseFree (pParser, free);
|
||||||
|
}
|
||||||
|
|
||||||
|
name FindName (char *name)
|
||||||
|
{
|
||||||
|
struct StringList *probe = NameList;
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
while (probe != NULL)
|
||||||
|
{
|
||||||
|
if (stricmp (probe->String, name) == 0)
|
||||||
|
{
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
count++;
|
||||||
|
probe = probe->Next;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
name AddName (char *name)
|
||||||
|
{
|
||||||
|
struct StringList *newone;
|
||||||
|
int index = FindName (name);
|
||||||
|
|
||||||
|
if (index != -1)
|
||||||
|
return index;
|
||||||
|
|
||||||
|
newone = malloc (sizeof(*newone) + strlen(name));
|
||||||
|
strcpy (newone->String, name);
|
||||||
|
newone->Next = NULL;
|
||||||
|
*NameListLast = newone;
|
||||||
|
NameListLast = &newone->Next;
|
||||||
|
return NameCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
int FindAction (char *namei)
|
||||||
|
{
|
||||||
|
int name = FindName (namei);
|
||||||
|
|
||||||
|
if (name != -1)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < ActionsListSize; i++)
|
||||||
|
{
|
||||||
|
if (ActionsList[i] == name)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf ("Line %d: Unknown action %s\n", SourceLine, namei);
|
||||||
|
ErrorCount++;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddAction (char *name)
|
||||||
|
{
|
||||||
|
int newname = AddName (name);
|
||||||
|
if (ActionsListSize == MaxActionsListSize)
|
||||||
|
{
|
||||||
|
MaxActionsListSize = MaxActionsListSize ? MaxActionsListSize * 2 : 256;
|
||||||
|
ActionsList = realloc (ActionsList, MaxActionsListSize*sizeof(*ActionsList));
|
||||||
|
}
|
||||||
|
ActionsList[ActionsListSize++] = newname;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddHeight (int h)
|
||||||
|
{
|
||||||
|
if (MaxHeightsSize == HeightsSize)
|
||||||
|
{
|
||||||
|
MaxHeightsSize = MaxHeightsSize ? MaxHeightsSize * 2 : 256;
|
||||||
|
HeightsArray = realloc (HeightsArray, MaxHeightsSize);
|
||||||
|
}
|
||||||
|
HeightsArray[HeightsSize++] = h;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddActionMap (char *name)
|
||||||
|
{
|
||||||
|
int index = FindAction (name);
|
||||||
|
|
||||||
|
if (index != -1)
|
||||||
|
{
|
||||||
|
if (ActionMapSize == MaxActionMapSize)
|
||||||
|
{
|
||||||
|
MaxActionMapSize = MaxActionMapSize ? MaxActionMapSize * 2 : 256;
|
||||||
|
ActionMap = realloc (ActionMap, MaxActionMapSize*sizeof(*ActionMap));
|
||||||
|
}
|
||||||
|
ActionMap[ActionMapSize++] = index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddCodeP (int codep)
|
||||||
|
{
|
||||||
|
if (CodePMapSize == MaxCodePMapSize)
|
||||||
|
{
|
||||||
|
MaxCodePMapSize = MaxCodePMapSize ? MaxCodePMapSize * 2 : 256;
|
||||||
|
CodePMap = realloc (CodePMap, MaxCodePMapSize*sizeof(*CodePMap));
|
||||||
|
}
|
||||||
|
CodePMap[CodePMapSize++] = codep;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddSpriteName (char *name)
|
||||||
|
{
|
||||||
|
if (strlen (name) != 4)
|
||||||
|
{
|
||||||
|
printf ("Line %d: Sprite name %s must be 4 characters\n", SourceLine, name);
|
||||||
|
ErrorCount++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (SpriteNamesSize == MaxSpriteNamesSize)
|
||||||
|
{
|
||||||
|
MaxSpriteNamesSize = MaxSpriteNamesSize ? MaxSpriteNamesSize * 2 : 256*4;
|
||||||
|
SpriteNames = realloc (SpriteNames, MaxSpriteNamesSize*sizeof(*SpriteNames));
|
||||||
|
}
|
||||||
|
SpriteNames[SpriteNamesSize+0] = toupper (name[0]);
|
||||||
|
SpriteNames[SpriteNamesSize+1] = toupper (name[1]);
|
||||||
|
SpriteNames[SpriteNamesSize+2] = toupper (name[2]);
|
||||||
|
SpriteNames[SpriteNamesSize+3] = toupper (name[3]);
|
||||||
|
SpriteNamesSize += 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddSoundMap (char *name)
|
||||||
|
{
|
||||||
|
if (SoundMapsSize == MaxSoundMapsSize)
|
||||||
|
{
|
||||||
|
MaxSoundMapsSize = MaxSoundMapsSize ? MaxSoundMapsSize * 2 : 256;
|
||||||
|
SoundMaps = realloc (SoundMaps, MaxSoundMapsSize*sizeof(*SoundMaps));
|
||||||
|
}
|
||||||
|
SoundMaps[SoundMapsSize++] = AddName (name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddInfoName (char *name)
|
||||||
|
{
|
||||||
|
if (InfoNamesSize == MaxInfoNamesSize)
|
||||||
|
{
|
||||||
|
MaxInfoNamesSize = MaxInfoNamesSize ? MaxInfoNamesSize * 2 : 256;
|
||||||
|
InfoNamesArray = realloc (InfoNamesArray, MaxInfoNamesSize*sizeof(*InfoNamesArray));
|
||||||
|
}
|
||||||
|
InfoNamesArray[InfoNamesSize++] = AddName (name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddStateMap (char *name, int state, int count)
|
||||||
|
{
|
||||||
|
if (count == 0)
|
||||||
|
{
|
||||||
|
printf ("Line %d: Count is 0. Is this right?\n", SourceLine);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ((unsigned)count > 255)
|
||||||
|
{
|
||||||
|
printf ("Line %d: Count must be in the range 1-255\n", SourceLine);
|
||||||
|
ErrorCount++;
|
||||||
|
}
|
||||||
|
if (StateMapsSize == MaxStateMapsSize)
|
||||||
|
{
|
||||||
|
MaxStateMapsSize = MaxStateMapsSize ? MaxStateMapsSize*2 : 256;
|
||||||
|
StateMaps = realloc (StateMaps, MaxStateMapsSize*sizeof(*StateMaps));
|
||||||
|
}
|
||||||
|
StateMaps[StateMapsSize].Name = AddName (name);
|
||||||
|
StateMaps[StateMapsSize].State = state;
|
||||||
|
StateMaps[StateMapsSize].Count = count;
|
||||||
|
StateMapsSize++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddThingBits (char *name, int bitnum, int flagnum)
|
||||||
|
{
|
||||||
|
if ((unsigned)bitnum > 31)
|
||||||
|
{
|
||||||
|
printf ("Line %d: Bit %d must be in the range 0-31\n", SourceLine, bitnum);
|
||||||
|
ErrorCount++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (MaxThingBitsMapSize == ThingBitsMapSize)
|
||||||
|
{
|
||||||
|
MaxThingBitsMapSize = MaxThingBitsMapSize ? MaxThingBitsMapSize*2 : 128;
|
||||||
|
ThingBitsMap = realloc (ThingBitsMap, MaxThingBitsMapSize*sizeof(*ThingBitsMap));
|
||||||
|
}
|
||||||
|
ThingBitsMap[ThingBitsMapSize].Name = AddName (name);
|
||||||
|
ThingBitsMap[ThingBitsMapSize].BitNum = bitnum;
|
||||||
|
ThingBitsMap[ThingBitsMapSize].FlagNum = flagnum;
|
||||||
|
ThingBitsMapSize++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddRenderStyle (char *name, int stylenum)
|
||||||
|
{
|
||||||
|
if ((unsigned)stylenum > 255)
|
||||||
|
{
|
||||||
|
printf ("Line %d: %s must be in the range 0-255\n", SourceLine, name);
|
||||||
|
ErrorCount++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (MaxRenderStylesSize == RenderStylesSize)
|
||||||
|
{
|
||||||
|
MaxRenderStylesSize = MaxRenderStylesSize ? MaxRenderStylesSize*2 : 16;
|
||||||
|
RenderStylesMap = realloc (RenderStylesMap, MaxRenderStylesSize*sizeof(*RenderStylesMap));
|
||||||
|
}
|
||||||
|
RenderStylesMap[RenderStylesSize].Name = AddName (name);
|
||||||
|
RenderStylesMap[RenderStylesSize].StyleNum = stylenum;
|
||||||
|
RenderStylesSize++;
|
||||||
|
}
|
||||||
|
|
||||||
|
int sortfunc (const void *a, const void *b)
|
||||||
|
{
|
||||||
|
return stricmp (((struct StringSorter *)a)->Entry->String,
|
||||||
|
((struct StringSorter *)b)->Entry->String);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SortNames ()
|
||||||
|
{
|
||||||
|
name *remap = malloc (NameCount * sizeof(*remap));
|
||||||
|
struct StringSorter *sorter = malloc (NameCount * sizeof(*sorter));
|
||||||
|
struct StringList *probe, **prev;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0, probe = NameList; probe != NULL; probe = probe->Next, i++)
|
||||||
|
{
|
||||||
|
sorter[i].OldName = i;
|
||||||
|
sorter[i].Entry = probe;
|
||||||
|
}
|
||||||
|
|
||||||
|
// There are some warnings here, though I have no idea why.
|
||||||
|
qsort (sorter, NameCount, sizeof(*sorter), sortfunc);
|
||||||
|
|
||||||
|
for (i = 0, prev = &NameList; i < NameCount; i++)
|
||||||
|
{
|
||||||
|
*prev = sorter[i].Entry;
|
||||||
|
prev = &sorter[i].Entry->Next;
|
||||||
|
}
|
||||||
|
*prev = NULL;
|
||||||
|
|
||||||
|
for (i = 0; i < NameCount; i++)
|
||||||
|
{
|
||||||
|
remap[sorter[i].OldName] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < ActionsListSize; i++)
|
||||||
|
{
|
||||||
|
ActionsList[i] = remap[ActionsList[i]];
|
||||||
|
}
|
||||||
|
for (i = 0; i < SoundMapsSize; i++)
|
||||||
|
{
|
||||||
|
SoundMaps[i] = remap[SoundMaps[i]];
|
||||||
|
}
|
||||||
|
for (i = 0; i < InfoNamesSize; i++)
|
||||||
|
{
|
||||||
|
InfoNamesArray[i] = remap[InfoNamesArray[i]];
|
||||||
|
}
|
||||||
|
for (i = 0; i < StateMapsSize; i++)
|
||||||
|
{
|
||||||
|
StateMaps[i].Name = remap[StateMaps[i].Name];
|
||||||
|
}
|
||||||
|
for (i = 0; i < ThingBitsMapSize; i++)
|
||||||
|
{
|
||||||
|
ThingBitsMap[i].Name = remap[ThingBitsMap[i].Name];
|
||||||
|
}
|
||||||
|
for (i = 0; i < RenderStylesSize; i++)
|
||||||
|
{
|
||||||
|
RenderStylesMap[i].Name = remap[RenderStylesMap[i].Name];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int yyerror (char *s)
|
||||||
|
{
|
||||||
|
printf ("Line %d: %s\n", SourceLine, s);
|
||||||
|
ErrorCount++;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void WriteWord (int word)
|
||||||
|
{
|
||||||
|
putc (word >> 8, Dest);
|
||||||
|
putc (word & 255, Dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WriteLabel (char *label)
|
||||||
|
{
|
||||||
|
fwrite (label, 1, 4, Dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WriteWords (int count, short *array)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
WriteWord (count);
|
||||||
|
for (i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
WriteWord (array[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void WriteBytes (int count, unsigned char *array)
|
||||||
|
{
|
||||||
|
WriteWord (count);
|
||||||
|
fwrite (array, 1, count, Dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WriteNameTable ()
|
||||||
|
{
|
||||||
|
struct StringList *probe;
|
||||||
|
int i, size;
|
||||||
|
|
||||||
|
WriteLabel ("NAME");
|
||||||
|
// Count the length of each string, including nulls
|
||||||
|
for (probe = NameList, size = 0; probe != NULL; probe = probe->Next)
|
||||||
|
{
|
||||||
|
size += (int)strlen (probe->String) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (size == 0)
|
||||||
|
{
|
||||||
|
WriteWord (2); // Size of this lump
|
||||||
|
WriteWord (0); // Number of names
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
size += NameCount*2 + 2;
|
||||||
|
if (size >= 65536)
|
||||||
|
{
|
||||||
|
fail (-5, "Name table is larger than 64K");
|
||||||
|
}
|
||||||
|
WriteWord (size); // Size of this lump
|
||||||
|
WriteWord (NameCount); // Number of names
|
||||||
|
|
||||||
|
// Write each name's offset from the first name, which is stored
|
||||||
|
// immediately after this list
|
||||||
|
for (i = size = 0, probe = NameList; i < NameCount; i++, probe = probe->Next)
|
||||||
|
{
|
||||||
|
WriteWord (size);
|
||||||
|
size += (int)strlen (probe->String) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write each name's string in order now
|
||||||
|
for (probe = NameList; probe != NULL; probe = probe->Next)
|
||||||
|
{
|
||||||
|
fputs (probe->String, Dest);
|
||||||
|
putc (0, Dest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
name Name;
|
||||||
|
short Num;
|
||||||
|
} NameNum;
|
||||||
|
|
||||||
|
int sortfunc2 (const void *a, const void *b)
|
||||||
|
{
|
||||||
|
return ((NameNum *)a)->Name - ((NameNum *)b)->Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
void WriteActions ()
|
||||||
|
{
|
||||||
|
NameNum *sorter = malloc (ActionsListSize * sizeof(*sorter));
|
||||||
|
int i;
|
||||||
|
|
||||||
|
WriteLabel ("ACTF");
|
||||||
|
WriteWord (ActionsListSize);
|
||||||
|
|
||||||
|
for (i = 0; i < ActionsListSize; i++)
|
||||||
|
{
|
||||||
|
sorter[i].Name = ActionsList[i];
|
||||||
|
sorter[i].Num = i;
|
||||||
|
}
|
||||||
|
// warnings here. ignore.
|
||||||
|
qsort (sorter, ActionsListSize, sizeof(*sorter), sortfunc2);
|
||||||
|
for (i = 0; i < ActionsListSize; i++)
|
||||||
|
{
|
||||||
|
WriteWord (sorter[i].Name);
|
||||||
|
WriteWord (sorter[i].Num);
|
||||||
|
}
|
||||||
|
free (sorter);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WriteActionMap ()
|
||||||
|
{
|
||||||
|
WriteLabel ("ACTM");
|
||||||
|
WriteBytes (ActionMapSize, ActionMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WriteHeights ()
|
||||||
|
{
|
||||||
|
WriteLabel ("HIGH");
|
||||||
|
WriteBytes (HeightsSize, HeightsArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WriteCodePConv ()
|
||||||
|
{
|
||||||
|
WriteLabel ("CODP");
|
||||||
|
WriteWords (CodePMapSize, (short *)CodePMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WriteSprites ()
|
||||||
|
{
|
||||||
|
WriteLabel ("SPRN");
|
||||||
|
WriteWord (SpriteNamesSize / 4);
|
||||||
|
fwrite (SpriteNames, SpriteNamesSize, 1, Dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WriteStates ()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
WriteLabel ("STAT");
|
||||||
|
WriteWord (StateMapsSize);
|
||||||
|
for (i = 0; i < StateMapsSize; i++)
|
||||||
|
{
|
||||||
|
WriteWord (StateMaps[i].Name);
|
||||||
|
putc (StateMaps[i].State, Dest);
|
||||||
|
putc (StateMaps[i].Count, Dest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void WriteSounds ()
|
||||||
|
{
|
||||||
|
WriteLabel ("SND ");
|
||||||
|
WriteWords (SoundMapsSize, SoundMaps);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WriteInfoNames ()
|
||||||
|
{
|
||||||
|
WriteLabel ("INFN");
|
||||||
|
WriteWords (InfoNamesSize, InfoNamesArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
int sortfunc3 (const void *a, const void *b)
|
||||||
|
{
|
||||||
|
return ((struct ThingBitsE *)a)->Name - ((struct ThingBitsE *)b)->Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
void WriteThingBits ()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
WriteLabel ("TBIT");
|
||||||
|
WriteWord (ThingBitsMapSize);
|
||||||
|
// warnings here; ignore them
|
||||||
|
qsort (ThingBitsMap, ThingBitsMapSize, sizeof(*ThingBitsMap), sortfunc3);
|
||||||
|
for (i = 0; i < ThingBitsMapSize; i++)
|
||||||
|
{
|
||||||
|
WriteWord (ThingBitsMap[i].Name);
|
||||||
|
putc (ThingBitsMap[i].BitNum | (ThingBitsMap[i].FlagNum<<5), Dest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int sortfunc4 (const void *a, const void *b)
|
||||||
|
{
|
||||||
|
return ((struct RenderStylesE *)a)->Name - ((struct RenderStylesE *)b)->Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
void WriteRenderStyles ()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
WriteLabel ("REND");
|
||||||
|
WriteWord (RenderStylesSize);
|
||||||
|
// More warnings; ignore
|
||||||
|
qsort (RenderStylesMap, RenderStylesSize, sizeof(*RenderStylesMap), sortfunc4);
|
||||||
|
for (i = 0; i < RenderStylesSize; i++)
|
||||||
|
{
|
||||||
|
WriteWord (RenderStylesMap[i].Name);
|
||||||
|
putc (RenderStylesMap[i].StyleNum, Dest);
|
||||||
|
}
|
||||||
|
}
|
124
tools/dehsupp/dehsupp.h
Normal file
124
tools/dehsupp/dehsupp.h
Normal file
|
@ -0,0 +1,124 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "parse.h"
|
||||||
|
|
||||||
|
typedef enum { false, true } bool;
|
||||||
|
typedef short name;
|
||||||
|
typedef unsigned char uchar;
|
||||||
|
typedef unsigned int uint;
|
||||||
|
|
||||||
|
typedef struct Scanner {
|
||||||
|
FILE *fd;
|
||||||
|
uchar *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof;
|
||||||
|
uint line;
|
||||||
|
} Scanner;
|
||||||
|
|
||||||
|
struct Token
|
||||||
|
{
|
||||||
|
int val;
|
||||||
|
char *string;
|
||||||
|
};
|
||||||
|
|
||||||
|
int lex(Scanner *s, struct Token *tok);
|
||||||
|
|
||||||
|
int yyerror (char *s);
|
||||||
|
void yyparse (void);
|
||||||
|
|
||||||
|
extern FILE *Source, *Dest;
|
||||||
|
extern int SourceLine;
|
||||||
|
extern int ErrorCount;
|
||||||
|
|
||||||
|
|
||||||
|
void WriteWord (int word);
|
||||||
|
void WriteLabel (char *label);
|
||||||
|
void WriteWords (int count, short *array);
|
||||||
|
void WriteBytes (int count, unsigned char *array);
|
||||||
|
|
||||||
|
void WriteNameTable ();
|
||||||
|
|
||||||
|
void WriteActions ();
|
||||||
|
void WriteActionMap ();
|
||||||
|
void WriteHeights ();
|
||||||
|
void WriteCodePConv ();
|
||||||
|
void WriteSprites ();
|
||||||
|
void WriteStates ();
|
||||||
|
void WriteSounds ();
|
||||||
|
void WriteInfoNames ();
|
||||||
|
void WriteThingBits ();
|
||||||
|
void WriteRenderStyles ();
|
||||||
|
|
||||||
|
|
||||||
|
struct StringList
|
||||||
|
{
|
||||||
|
struct StringList *Next;
|
||||||
|
char String[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct StringSorter
|
||||||
|
{
|
||||||
|
name OldName;
|
||||||
|
struct StringList *Entry;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern struct StringList *NameList, **NameListLast;
|
||||||
|
extern int NameCount;
|
||||||
|
|
||||||
|
name AddName (char *name);
|
||||||
|
name FindName (char *name);
|
||||||
|
|
||||||
|
void SortNames ();
|
||||||
|
|
||||||
|
struct StateMapE
|
||||||
|
{
|
||||||
|
name Name;
|
||||||
|
unsigned char State;
|
||||||
|
unsigned char Count;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ThingBitsE
|
||||||
|
{
|
||||||
|
name Name;
|
||||||
|
unsigned char BitNum;
|
||||||
|
unsigned char FlagNum;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RenderStylesE
|
||||||
|
{
|
||||||
|
name Name;
|
||||||
|
unsigned char StyleNum;
|
||||||
|
};
|
||||||
|
|
||||||
|
void AddAction (char *name);
|
||||||
|
int FindAction (char *name);
|
||||||
|
|
||||||
|
extern name *ActionsList;
|
||||||
|
extern unsigned char *HeightsArray;
|
||||||
|
extern unsigned char *ActionMap;
|
||||||
|
extern unsigned short *CodePMap;
|
||||||
|
extern char *SpriteNames;
|
||||||
|
extern struct StateMapE *StateMaps;
|
||||||
|
extern name *SoundMaps;
|
||||||
|
extern name *InfoNamesArray;
|
||||||
|
extern struct ThingBitsE *ThingBitsMap;
|
||||||
|
extern struct RenderStylesE *RenderStylesMap;
|
||||||
|
|
||||||
|
extern int ActionsListSize, MaxActionsListSize;
|
||||||
|
extern int HeightsSize, MaxHeightsSize;
|
||||||
|
extern int ActionMapSize, MaxActionMapSize;
|
||||||
|
extern int CodePMapSize, MaxCodePMapSize;
|
||||||
|
extern int SpriteNamesSize, MaxSpriteNamesSize;
|
||||||
|
extern int StateMapsSize, MaxStateMapsSize;
|
||||||
|
extern int SoundMapsSize, MaxSoundMapsSize;
|
||||||
|
extern int InfoNamesSize, MaxInfoNamesSize;
|
||||||
|
extern int ThingBitsMapSize, MaxThingBitsMapSize;
|
||||||
|
extern int RenderStylesSize, MaxRenderStylesSize;
|
||||||
|
|
||||||
|
void AddHeight (int h);
|
||||||
|
void AddActionMap (char *name);
|
||||||
|
void AddCodeP (int codep);
|
||||||
|
void AddSpriteName (char *name);
|
||||||
|
void AddStateMap (char *name, int type, int count);
|
||||||
|
void AddSoundMap (char *sound);
|
||||||
|
void AddInfoName (char *sound);
|
||||||
|
void AddThingBits (char *name, int bitnum, int flagnum);
|
||||||
|
void AddRenderStyle (char *name, int stylenum);
|
||||||
|
|
465
tools/dehsupp/dehsupp.vcproj
Normal file
465
tools/dehsupp/dehsupp.vcproj
Normal file
|
@ -0,0 +1,465 @@
|
||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="dehsupp"
|
||||||
|
ProjectGUID="{AC64EE8F-F019-4A3E-BCAF-BD1FD072B9C8}"
|
||||||
|
RootNamespace="dehsupp"
|
||||||
|
Keyword="Win32Proj"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
<Platform
|
||||||
|
Name="x64"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="Debug"
|
||||||
|
IntermediateDirectory="Debug"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;__STDC__=0"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
DisableSpecificWarnings="4996"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="$(OutDir)/dehsupp.exe"
|
||||||
|
LinkIncremental="2"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
ProgramDatabaseFile="$(OutDir)/dehsupp.pdb"
|
||||||
|
SubSystem="1"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
CommandLine="copy "$(TargetPath)" "$(ProjectDir)\$(TargetFileName)""
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|x64"
|
||||||
|
OutputDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
TargetEnvironment="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
DisableSpecificWarnings="4996"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="$(OutDir)/dehsupp.exe"
|
||||||
|
LinkIncremental="2"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
ProgramDatabaseFile="$(OutDir)/dehsupp.pdb"
|
||||||
|
SubSystem="1"
|
||||||
|
TargetMachine="17"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
CommandLine="copy "$(TargetPath)" "$(ProjectDir)\$(TargetFileName)""
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="Release"
|
||||||
|
IntermediateDirectory="Release"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="1"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
DisableSpecificWarnings="4996"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="$(OutDir)/dehsupp.exe"
|
||||||
|
LinkIncremental="1"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="1"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
CommandLine="copy "$(TargetPath)" "$(ProjectDir)\$(TargetFileName)""
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|x64"
|
||||||
|
OutputDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
TargetEnvironment="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="1"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
DisableSpecificWarnings="4996"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="$(OutDir)/dehsupp.exe"
|
||||||
|
LinkIncremental="1"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="1"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="17"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
CommandLine="copy "$(TargetPath)" "$(ProjectDir)\$(TargetFileName)""
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<File
|
||||||
|
RelativePath=".\dehsupp.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\dehsupp.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\parse.c"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|x64"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
ObjectFile="$(IntDir)\$(InputName)1.obj"
|
||||||
|
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\parse.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\parse.y"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
Description="Creating parse.c from parse.y"
|
||||||
|
CommandLine="..\lemon\lemon.exe -s "$(InputFileName)"
"
|
||||||
|
Outputs="$(InputDir)parse.c;$(InputDir)parse.h"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|x64"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
Description="Creating parse.c from parse.y"
|
||||||
|
CommandLine="..\lemon\lemon.exe -s "$(InputFileName)"
"
|
||||||
|
Outputs="$(InputDir)parse.c"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
Description="Creating parse.c from parse.y"
|
||||||
|
CommandLine="..\lemon\lemon.exe -s "$(InputFileName)"
"
|
||||||
|
Outputs="$(InputDir)parse.c;$(InputDir)parse.h"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|x64"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
Description="Creating parse.c from parse.y"
|
||||||
|
CommandLine="..\lemon\lemon.exe -s "$(InputFileName)"
"
|
||||||
|
Outputs="$(InputDir)parse.c"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\scanner.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\scanner.re"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
Description="Creating scanner.c from scanner.re"
|
||||||
|
CommandLine="..\re2c\re2c -s --no-generation-date -o "scanner.c" "$(InputFileName)"
"
|
||||||
|
Outputs="$(InputDir)scanner.c"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|x64"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
Description="Creating scanner.c from scanner.re"
|
||||||
|
CommandLine="..\re2c\re2c -s -o "scanner.c" "$(InputFileName)"
"
|
||||||
|
Outputs="$(InputDir)scanner.c"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
Description="Creating scanner.c from scanner.re"
|
||||||
|
CommandLine="..\re2c\re2c -s --no-generation-date -o "scanner.c" "$(InputFileName)"
"
|
||||||
|
Outputs="$(InputDir)scanner.c"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|x64"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
Description="Creating scanner.c from scanner.re"
|
||||||
|
CommandLine="..\re2c\re2c -s -o "scanner.c" "$(InputFileName)"
"
|
||||||
|
Outputs="$(InputDir)scanner.c"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
1471
tools/dehsupp/parse.c
Normal file
1471
tools/dehsupp/parse.c
Normal file
File diff suppressed because it is too large
Load diff
33
tools/dehsupp/parse.h
Normal file
33
tools/dehsupp/parse.h
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
#define OR 1
|
||||||
|
#define XOR 2
|
||||||
|
#define AND 3
|
||||||
|
#define MINUS 4
|
||||||
|
#define PLUS 5
|
||||||
|
#define MULTIPLY 6
|
||||||
|
#define DIVIDE 7
|
||||||
|
#define NEG 8
|
||||||
|
#define EOI 9
|
||||||
|
#define PRINT 10
|
||||||
|
#define LPAREN 11
|
||||||
|
#define RPAREN 12
|
||||||
|
#define COMMA 13
|
||||||
|
#define STRING 14
|
||||||
|
#define ENDL 15
|
||||||
|
#define NUM 16
|
||||||
|
#define Actions 17
|
||||||
|
#define LBRACE 18
|
||||||
|
#define RBRACE 19
|
||||||
|
#define SEMICOLON 20
|
||||||
|
#define SYM 21
|
||||||
|
#define OrgHeights 22
|
||||||
|
#define ActionList 23
|
||||||
|
#define CodePConv 24
|
||||||
|
#define OrgSprNames 25
|
||||||
|
#define StateMap 26
|
||||||
|
#define FirstState 27
|
||||||
|
#define SpawnState 28
|
||||||
|
#define DeathState 29
|
||||||
|
#define SoundMap 30
|
||||||
|
#define InfoNames 31
|
||||||
|
#define ThingBits 32
|
||||||
|
#define RenderStyles 33
|
152
tools/dehsupp/parse.y
Normal file
152
tools/dehsupp/parse.y
Normal file
|
@ -0,0 +1,152 @@
|
||||||
|
%include{
|
||||||
|
#include <malloc.h>
|
||||||
|
#include "dehsupp.h"
|
||||||
|
}
|
||||||
|
|
||||||
|
%token_type {struct Token}
|
||||||
|
|
||||||
|
%syntax_error { yyerror("Syntax error"); }
|
||||||
|
|
||||||
|
%token_destructor { if ($$.string) free($$.string); }
|
||||||
|
|
||||||
|
%left OR.
|
||||||
|
%left XOR.
|
||||||
|
%left AND.
|
||||||
|
%left MINUS PLUS.
|
||||||
|
%left MULTIPLY DIVIDE.
|
||||||
|
%left NEG.
|
||||||
|
|
||||||
|
%left EOI.
|
||||||
|
|
||||||
|
main ::= translation_unit.
|
||||||
|
|
||||||
|
translation_unit ::= . /* empty */
|
||||||
|
translation_unit ::= translation_unit external_declaration.
|
||||||
|
|
||||||
|
external_declaration ::= print_statement.
|
||||||
|
external_declaration ::= actions_def.
|
||||||
|
external_declaration ::= org_heights_def.
|
||||||
|
external_declaration ::= action_list_def.
|
||||||
|
external_declaration ::= codep_conv_def.
|
||||||
|
external_declaration ::= org_spr_names_def.
|
||||||
|
external_declaration ::= state_map_def.
|
||||||
|
external_declaration ::= sound_map_def.
|
||||||
|
external_declaration ::= info_names_def.
|
||||||
|
external_declaration ::= thing_bits_def.
|
||||||
|
external_declaration ::= render_styles_def.
|
||||||
|
|
||||||
|
print_statement ::= PRINT LPAREN print_list RPAREN.
|
||||||
|
{
|
||||||
|
printf ("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
print_list ::= . /* EMPTY */
|
||||||
|
print_list ::= print_item.
|
||||||
|
print_list ::= print_item COMMA print_list.
|
||||||
|
|
||||||
|
print_item ::= STRING(A). { printf ("%s", A.string); }
|
||||||
|
print_item ::= exp(A). { printf ("%d", A); }
|
||||||
|
print_item ::= ENDL. { printf ("\n"); }
|
||||||
|
|
||||||
|
%type exp {int}
|
||||||
|
exp(A) ::= NUM(B). { A = B.val; }
|
||||||
|
exp(A) ::= exp(B) PLUS exp(C). { A = B + C; }
|
||||||
|
exp(A) ::= exp(B) MINUS exp(C). { A = B - C; }
|
||||||
|
exp(A) ::= exp(B) MULTIPLY exp(C). { A = B * C; }
|
||||||
|
exp(A) ::= exp(B) DIVIDE exp(C). { A = B / C; }
|
||||||
|
exp(A) ::= exp(B) OR exp(C). { A = B | C; }
|
||||||
|
exp(A) ::= exp(B) AND exp(C). { A = B & C; }
|
||||||
|
exp(A) ::= exp(B) XOR exp(C). { A = B ^ C; }
|
||||||
|
exp(A) ::= MINUS exp(B). [NEG] { A = -B; }
|
||||||
|
exp(A) ::= LPAREN exp(B) RPAREN. { A = B; }
|
||||||
|
|
||||||
|
|
||||||
|
actions_def ::= Actions LBRACE actions_list RBRACE SEMICOLON.
|
||||||
|
actions_def ::= Actions LBRACE error RBRACE SEMICOLON.
|
||||||
|
|
||||||
|
actions_list ::= . /* empty */
|
||||||
|
actions_list ::= SYM(A). { AddAction (A.string); }
|
||||||
|
actions_list ::= actions_list COMMA SYM(A). { AddAction (A.string); }
|
||||||
|
|
||||||
|
|
||||||
|
org_heights_def ::= OrgHeights LBRACE org_heights_list RBRACE SEMICOLON.
|
||||||
|
org_heights_def ::= OrgHeights LBRACE error RBRACE SEMICOLON.
|
||||||
|
|
||||||
|
org_heights_list ::= . /* empty */
|
||||||
|
org_heights_list ::= exp(A). { AddHeight (A); }
|
||||||
|
org_heights_list ::= org_heights_list COMMA exp(A). { AddHeight (A); }
|
||||||
|
|
||||||
|
|
||||||
|
action_list_def ::= ActionList LBRACE action_list_list RBRACE SEMICOLON.
|
||||||
|
action_list_def ::= ActionList LBRACE error RBRACE SEMICOLON.
|
||||||
|
|
||||||
|
action_list_list ::= . /* empty */
|
||||||
|
action_list_list ::= SYM(A). { AddActionMap (A.string); }
|
||||||
|
action_list_list ::= action_list_list COMMA SYM(A). { AddActionMap (A.string); }
|
||||||
|
|
||||||
|
|
||||||
|
codep_conv_def ::= CodePConv LBRACE codep_conv_list RBRACE SEMICOLON.
|
||||||
|
codep_conv_def ::= CodePConv LBRACE error RBRACE SEMICOLON.
|
||||||
|
|
||||||
|
codep_conv_list ::= . /* empty */
|
||||||
|
codep_conv_list ::= exp(A). { AddCodeP (A); }
|
||||||
|
codep_conv_list ::= codep_conv_list COMMA exp(A). { AddCodeP (A); }
|
||||||
|
|
||||||
|
|
||||||
|
org_spr_names_def ::= OrgSprNames LBRACE org_spr_names_list RBRACE SEMICOLON.
|
||||||
|
org_spr_names_def ::= OrgSprNames LBRACE error RBRACE SEMICOLON.
|
||||||
|
|
||||||
|
org_spr_names_list ::= . /* empty */
|
||||||
|
org_spr_names_list ::= SYM(A). { AddSpriteName (A.string); }
|
||||||
|
org_spr_names_list ::= org_spr_names_list COMMA SYM(A). { AddSpriteName (A.string); }
|
||||||
|
|
||||||
|
|
||||||
|
state_map_def ::= StateMap LBRACE state_map_list RBRACE SEMICOLON.
|
||||||
|
state_map_def ::= StateMap LBRACE error RBRACE SEMICOLON.
|
||||||
|
|
||||||
|
state_map_list ::= . /* empty */
|
||||||
|
state_map_list ::= state_map_entry.
|
||||||
|
state_map_list ::= state_map_list COMMA state_map_entry.
|
||||||
|
|
||||||
|
state_map_entry ::= SYM(A) COMMA state_type(B) COMMA exp(C). { AddStateMap (A.string, B, C); }
|
||||||
|
|
||||||
|
%type state_type {int}
|
||||||
|
state_type(A) ::= FirstState. { A = 0; }
|
||||||
|
state_type(A) ::= SpawnState. { A = 1; }
|
||||||
|
state_type(A) ::= DeathState. { A = 2; }
|
||||||
|
|
||||||
|
|
||||||
|
sound_map_def ::= SoundMap LBRACE sound_map_list RBRACE SEMICOLON.
|
||||||
|
sound_map_def ::= SoundMap LBRACE error RBRACE SEMICOLON.
|
||||||
|
|
||||||
|
sound_map_list ::= . /* empty */
|
||||||
|
sound_map_list ::= STRING(A). { AddSoundMap (A.string); }
|
||||||
|
sound_map_list ::= sound_map_list COMMA STRING(A). { AddSoundMap (A.string); }
|
||||||
|
|
||||||
|
|
||||||
|
info_names_def ::= InfoNames LBRACE info_names_list RBRACE SEMICOLON.
|
||||||
|
info_names_def ::= InfoNames LBRACE error RBRACE SEMICOLON.
|
||||||
|
|
||||||
|
info_names_list ::= . /* empty */
|
||||||
|
info_names_list ::= SYM(A). { AddInfoName (A.string); }
|
||||||
|
info_names_list ::= info_names_list COMMA SYM(A). { AddInfoName (A.string); }
|
||||||
|
|
||||||
|
|
||||||
|
thing_bits_def ::= ThingBits LBRACE thing_bits_list RBRACE SEMICOLON.
|
||||||
|
thing_bits_def ::= ThingBits LBRACE error RBRACE SEMICOLON.
|
||||||
|
|
||||||
|
thing_bits_list ::= . /* empty */
|
||||||
|
thing_bits_list ::= thing_bits_entry.
|
||||||
|
thing_bits_list ::= thing_bits_list COMMA thing_bits_entry.
|
||||||
|
|
||||||
|
thing_bits_entry ::= exp(A) COMMA exp(B) COMMA SYM(C). { AddThingBits (C.string, A, B); }
|
||||||
|
|
||||||
|
|
||||||
|
render_styles_def ::= RenderStyles LBRACE render_styles_list RBRACE SEMICOLON.
|
||||||
|
render_styles_def ::= RenderStyles LBRACE error RBRACE SEMICOLON.
|
||||||
|
|
||||||
|
render_styles_list ::= . /* empty */
|
||||||
|
render_styles_list ::= render_styles_entry.
|
||||||
|
render_styles_list ::= render_styles_list COMMA render_styles_entry.
|
||||||
|
|
||||||
|
render_styles_entry ::= exp(A) COMMA SYM(B). { AddRenderStyle (B.string, A); }
|
1091
tools/dehsupp/scanner.c
Normal file
1091
tools/dehsupp/scanner.c
Normal file
File diff suppressed because it is too large
Load diff
176
tools/dehsupp/scanner.re
Normal file
176
tools/dehsupp/scanner.re
Normal file
|
@ -0,0 +1,176 @@
|
||||||
|
#include <string.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "dehsupp.h"
|
||||||
|
|
||||||
|
#define BSIZE 8192
|
||||||
|
|
||||||
|
#define YYCTYPE uchar
|
||||||
|
#define YYCURSOR cursor
|
||||||
|
#define YYLIMIT s->lim
|
||||||
|
#define YYMARKER s->ptr
|
||||||
|
#define YYFILL(n) {cursor = fill(s, cursor);}
|
||||||
|
|
||||||
|
#define RET(i) {s->cur = cursor; return i;}
|
||||||
|
|
||||||
|
uchar *fill(Scanner *s, uchar *cursor)
|
||||||
|
{
|
||||||
|
if(!s->eof)
|
||||||
|
{
|
||||||
|
ptrdiff_t cnt = s->tok - s->bot;
|
||||||
|
if(cnt)
|
||||||
|
{
|
||||||
|
memcpy(s->bot, s->tok, s->lim - s->tok);
|
||||||
|
s->tok = s->bot;
|
||||||
|
s->ptr -= cnt;
|
||||||
|
cursor -= cnt;
|
||||||
|
s->pos -= cnt;
|
||||||
|
s->lim -= cnt;
|
||||||
|
}
|
||||||
|
if((s->top - s->lim) < BSIZE)
|
||||||
|
{
|
||||||
|
uchar *buf = (uchar*) malloc(((s->lim - s->bot) + BSIZE)*sizeof(uchar));
|
||||||
|
memcpy(buf, s->tok, s->lim - s->tok);
|
||||||
|
s->tok = buf;
|
||||||
|
s->ptr = &buf[s->ptr - s->bot];
|
||||||
|
cursor = &buf[cursor - s->bot];
|
||||||
|
s->pos = &buf[s->pos - s->bot];
|
||||||
|
s->lim = &buf[s->lim - s->bot];
|
||||||
|
s->top = &s->lim[BSIZE];
|
||||||
|
free(s->bot);
|
||||||
|
s->bot = buf;
|
||||||
|
}
|
||||||
|
if((cnt = fread((char*) s->lim, 1, BSIZE, s->fd)) != BSIZE)
|
||||||
|
{
|
||||||
|
s->eof = &s->lim[cnt]; *(s->eof)++ = '\n';
|
||||||
|
}
|
||||||
|
s->lim += cnt;
|
||||||
|
}
|
||||||
|
return cursor;
|
||||||
|
}
|
||||||
|
|
||||||
|
int scan(Scanner *s)
|
||||||
|
{
|
||||||
|
uchar *cursor = s->cur;
|
||||||
|
std:
|
||||||
|
s->tok = cursor;
|
||||||
|
/*!re2c
|
||||||
|
any = [\000-\377];
|
||||||
|
O = [0-7];
|
||||||
|
D = [0-9];
|
||||||
|
L = [a-zA-Z_];
|
||||||
|
H = [a-fA-F0-9];
|
||||||
|
ESC = [\\] ([abfnrtv?'"\\] | "x" H+ | O+);
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!re2c
|
||||||
|
"/*" { goto comment; } /* C comment */
|
||||||
|
"//" (any\"\n")* "\n" /* C++ comment */
|
||||||
|
{
|
||||||
|
if(cursor == s->eof) RET(EOI);
|
||||||
|
s->tok = s->pos = cursor; s->line++;
|
||||||
|
goto std;
|
||||||
|
}
|
||||||
|
|
||||||
|
"endl" { RET(ENDL); }
|
||||||
|
"print" { RET(PRINT); }
|
||||||
|
"Actions" { RET(Actions); }
|
||||||
|
"OrgHeights" { RET(OrgHeights); }
|
||||||
|
"ActionList" { RET(ActionList); }
|
||||||
|
"CodePConv" { RET(CodePConv); }
|
||||||
|
"OrgSprNames" { RET(OrgSprNames); }
|
||||||
|
"StateMap" { RET(StateMap); }
|
||||||
|
"SoundMap" { RET(SoundMap); }
|
||||||
|
"InfoNames" { RET(InfoNames); }
|
||||||
|
"ThingBits" { RET(ThingBits); }
|
||||||
|
"DeathState" { RET(DeathState); }
|
||||||
|
"SpawnState" { RET(SpawnState); }
|
||||||
|
"FirstState" { RET(FirstState); }
|
||||||
|
"RenderStyles" { RET(RenderStyles); }
|
||||||
|
|
||||||
|
L (L|D)* { RET(SYM); }
|
||||||
|
|
||||||
|
("0" [xX] H+) | ("0" D+) | (D+)
|
||||||
|
{ RET(NUM); }
|
||||||
|
|
||||||
|
(["] (ESC|any\[\n\\"])* ["])
|
||||||
|
{ RET(STRING); }
|
||||||
|
|
||||||
|
[ \t\v\f]+ { goto std; }
|
||||||
|
|
||||||
|
"|" { RET(OR); }
|
||||||
|
"^" { RET(XOR); }
|
||||||
|
"&" { RET(AND); }
|
||||||
|
"-" { RET(MINUS); }
|
||||||
|
"+" { RET(PLUS); }
|
||||||
|
"*" { RET(MULTIPLY); }
|
||||||
|
"/" { RET(DIVIDE); }
|
||||||
|
"(" { RET(LPAREN); }
|
||||||
|
")" { RET(RPAREN); }
|
||||||
|
"," { RET(COMMA); }
|
||||||
|
"{" { RET(LBRACE); }
|
||||||
|
"}" { RET(RBRACE); }
|
||||||
|
";" { RET(SEMICOLON); }
|
||||||
|
|
||||||
|
|
||||||
|
"\n"
|
||||||
|
{
|
||||||
|
if(cursor == s->eof) RET(EOI);
|
||||||
|
s->pos = cursor; s->line++;
|
||||||
|
goto std;
|
||||||
|
}
|
||||||
|
|
||||||
|
any
|
||||||
|
{
|
||||||
|
printf("unexpected character: %c\n", *s->tok);
|
||||||
|
goto std;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
comment:
|
||||||
|
/*!re2c
|
||||||
|
"*/" { goto std; }
|
||||||
|
"\n"
|
||||||
|
{
|
||||||
|
if(cursor == s->eof) RET(EOI);
|
||||||
|
s->tok = s->pos = cursor; s->line++;
|
||||||
|
goto comment;
|
||||||
|
}
|
||||||
|
any { goto comment; }
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
int lex(Scanner *s, struct Token *tok)
|
||||||
|
{
|
||||||
|
int tokentype = scan(s);
|
||||||
|
char *p, *q;
|
||||||
|
|
||||||
|
tok->val = 0;
|
||||||
|
tok->string = NULL;
|
||||||
|
|
||||||
|
switch (tokentype)
|
||||||
|
{
|
||||||
|
case NUM:
|
||||||
|
tok->val = strtol((char *)s->tok, NULL, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case STRING:
|
||||||
|
tok->string = (char *)malloc(s->cur - s->tok - 1);
|
||||||
|
strncpy(tok->string, (char *)s->tok + 1, s->cur - s->tok - 2);
|
||||||
|
tok->string[s->cur - s->tok - 2] = '\0';
|
||||||
|
for (p = q = tok->string; *p; ++p, ++q)
|
||||||
|
{
|
||||||
|
if (p[0] == '\\' && p[1] == '\\')
|
||||||
|
++p;
|
||||||
|
*q = *p;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SYM:
|
||||||
|
tok->string = (char *)malloc(s->cur - s->tok + 1);
|
||||||
|
strncpy(tok->string, (char *)s->tok, s->cur - s->tok);
|
||||||
|
tok->string[s->cur - s->tok] = '\0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return tokentype;
|
||||||
|
}
|
|
@ -10,15 +10,16 @@
|
||||||
RM=rm -f
|
RM=rm -f
|
||||||
SLASH=/
|
SLASH=/
|
||||||
MAKEWAD=..$(SLASH)tools$(SLASH)makewad$(SLASH)makewad
|
MAKEWAD=..$(SLASH)tools$(SLASH)makewad$(SLASH)makewad
|
||||||
|
DEHSUPP=..$(SLASH)tools$(SLASH)dehsupp$(SLASH)dehsupp
|
||||||
|
|
||||||
makethewad: wadmake Makefile2
|
makethewad: wadmake Makefile2
|
||||||
$(MAKE) $(NOLOGO) -f Makefile2
|
$(MAKE) $(NOLOGO) DEHSUPP=$(DEHSUPP) -f Makefile2
|
||||||
|
|
||||||
wadmake: zdoom.lst
|
wadmake: zdoom.lst
|
||||||
$(MAKEWAD) -make wadmake zdoom.lst
|
$(MAKEWAD) -make wadmake zdoom.lst
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) wadmake zdoom.pk3
|
$(RM) wadmake zdoom.pk3 dehsupp.lmp
|
||||||
|
|
||||||
# This target is for Visual C++'s Rebuild All command
|
# This target is for Visual C++'s Rebuild All command
|
||||||
nrebuild: clean
|
nrebuild: clean
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
MAKEWAD=../tools/makewad/makewad
|
MAKEWAD=../tools/makewad/makewad
|
||||||
|
DEHSUPP=../tools/dehsupp/dehsupp
|
||||||
|
|
||||||
ifneq ($(MAKECMDGOALS),clean)
|
ifneq ($(MAKECMDGOALS),clean)
|
||||||
include Makefile2
|
include Makefile2
|
||||||
|
@ -7,15 +8,18 @@ ifeq ($(findstring msys,$(shell sh --version 2>nul)),msys)
|
||||||
export OSTYPE=msys
|
export OSTYPE=msys
|
||||||
endif
|
endif
|
||||||
|
|
||||||
wadmake: zdoom.lst $(MAKEWAD).exe
|
wadmake: zdoom.lst $(MAKEWAD).exe $(DEHSUPP).exe
|
||||||
$(MAKEWAD) -make wadmake zdoom.lst
|
$(MAKEWAD) -make wadmake zdoom.lst
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
ifeq ($(OSTYPE),msys)
|
ifeq ($(OSTYPE),msys)
|
||||||
rm -f wadmake zdoom.pk3
|
rm -f wadmake zdoom.pk3 dehsupp.lmp
|
||||||
else
|
else
|
||||||
del /q /f wadmake zdoom.pk3 2>nul
|
del /q /f wadmake zdoom.pk3 dehsupp.lmp 2>nul
|
||||||
endif
|
endif
|
||||||
|
|
||||||
../tools/makewad/makewad.exe:
|
../tools/makewad/makewad.exe:
|
||||||
$(MAKE) -C ../tools/makewad -f Makefile
|
$(MAKE) -C ../tools/makewad -f Makefile
|
||||||
|
|
||||||
|
../tools/dehsupp/dehsupp.exe:
|
||||||
|
$(MAKE) -C ../tools/dehsupp -f Makefile
|
||||||
|
|
|
@ -1,2 +1,5 @@
|
||||||
include wadmake
|
include wadmake
|
||||||
|
|
||||||
|
dehsupp.lmp: dehsupp.txt
|
||||||
|
$(DEHSUPP) dehsupp.txt dehsupp.lmp
|
||||||
|
|
BIN
wadsrc/dehsupp.lmp
Normal file
BIN
wadsrc/dehsupp.lmp
Normal file
Binary file not shown.
|
@ -1,3 +1,107 @@
|
||||||
|
Actions
|
||||||
|
{
|
||||||
|
NULL,
|
||||||
|
MonsterRail,
|
||||||
|
FireRailgun,
|
||||||
|
FireRailgunLeft,
|
||||||
|
FireRailgunRight,
|
||||||
|
RailWait,
|
||||||
|
Light0,
|
||||||
|
WeaponReady,
|
||||||
|
Lower,
|
||||||
|
Raise,
|
||||||
|
Punch,
|
||||||
|
ReFire,
|
||||||
|
FirePistol,
|
||||||
|
Light1,
|
||||||
|
FireShotgun,
|
||||||
|
Light2,
|
||||||
|
FireShotgun2,
|
||||||
|
CheckReload,
|
||||||
|
OpenShotgun2,
|
||||||
|
LoadShotgun2,
|
||||||
|
CloseShotgun2,
|
||||||
|
FireCGun,
|
||||||
|
GunFlash,
|
||||||
|
FireMissile,
|
||||||
|
Saw,
|
||||||
|
FirePlasma,
|
||||||
|
BFGsound,
|
||||||
|
FireBFG,
|
||||||
|
BFGSpray,
|
||||||
|
Explode,
|
||||||
|
Pain,
|
||||||
|
PlayerScream,
|
||||||
|
Fall,
|
||||||
|
XScream,
|
||||||
|
Look,
|
||||||
|
Chase,
|
||||||
|
FaceTarget,
|
||||||
|
PosAttack,
|
||||||
|
Scream,
|
||||||
|
SPosAttack,
|
||||||
|
VileChase,
|
||||||
|
VileStart,
|
||||||
|
VileTarget,
|
||||||
|
VileAttack,
|
||||||
|
StartFire,
|
||||||
|
Fire,
|
||||||
|
FireCrackle,
|
||||||
|
Tracer,
|
||||||
|
SkelWhoosh,
|
||||||
|
SkelFist,
|
||||||
|
SkelMissile,
|
||||||
|
FatRaise,
|
||||||
|
FatAttack1,
|
||||||
|
FatAttack2,
|
||||||
|
FatAttack3,
|
||||||
|
BossDeath,
|
||||||
|
CPosAttack,
|
||||||
|
CPosRefire,
|
||||||
|
TroopAttack,
|
||||||
|
SargAttack,
|
||||||
|
HeadAttack,
|
||||||
|
BruisAttack,
|
||||||
|
SkullAttack,
|
||||||
|
Metal,
|
||||||
|
SpidRefire,
|
||||||
|
BabyMetal,
|
||||||
|
BspiAttack,
|
||||||
|
Hoof,
|
||||||
|
CyberAttack,
|
||||||
|
PainAttack,
|
||||||
|
PainDie,
|
||||||
|
KeenDie,
|
||||||
|
BrainPain,
|
||||||
|
BrainScream,
|
||||||
|
BrainDie,
|
||||||
|
BrainAwake,
|
||||||
|
BrainSpit,
|
||||||
|
SpawnSound,
|
||||||
|
SpawnFly,
|
||||||
|
BrainExplode,
|
||||||
|
Die,
|
||||||
|
Detonate,
|
||||||
|
Mushroom,
|
||||||
|
|
||||||
|
// Additional stuff
|
||||||
|
SetFloorClip,
|
||||||
|
UnSetFloorClip,
|
||||||
|
HideThing,
|
||||||
|
UnHideThing,
|
||||||
|
SetInvulnerable,
|
||||||
|
UnSetInvulnerable,
|
||||||
|
SetReflective,
|
||||||
|
UnSetReflective,
|
||||||
|
SetReflectiveInvulnerable,
|
||||||
|
UnSetReflectiveInvulnerable,
|
||||||
|
SetShootable,
|
||||||
|
UnSetShootable,
|
||||||
|
NoGravity,
|
||||||
|
Gravity,
|
||||||
|
LowGravity
|
||||||
|
};
|
||||||
|
|
||||||
OrgHeights
|
OrgHeights
|
||||||
{
|
{
|
||||||
56, 56, 56, 56, 16, 56, 8, 16, 64, 8, 56, 56,
|
56, 56, 56, 56, 16, 56, 8, 16, 64, 8, 56, 56,
|
||||||
|
@ -703,32 +807,3 @@ RenderStyles
|
||||||
6, STYLE_Translucent,
|
6, STYLE_Translucent,
|
||||||
7, STYLE_Add
|
7, STYLE_Add
|
||||||
};
|
};
|
||||||
|
|
||||||
AmmoNames
|
|
||||||
{
|
|
||||||
Clip,
|
|
||||||
Shell,
|
|
||||||
Cell,
|
|
||||||
RocketAmmo,
|
|
||||||
GoldWandAmmo,
|
|
||||||
NULL,
|
|
||||||
BlasterAmmo,
|
|
||||||
SkullRodAmmo,
|
|
||||||
PhoenixRodAmmo,
|
|
||||||
MaceAmmo,
|
|
||||||
Mana1,
|
|
||||||
Mana2
|
|
||||||
};
|
|
||||||
|
|
||||||
WeaponNames
|
|
||||||
{
|
|
||||||
Fist,
|
|
||||||
Pistol,
|
|
||||||
Shotgun,
|
|
||||||
Chaingun,
|
|
||||||
RocketLauncher,
|
|
||||||
PlasmaRifle,
|
|
||||||
BFG9000,
|
|
||||||
Chainsaw,
|
|
||||||
SuperShotgun
|
|
||||||
};
|
|
||||||
|
|
|
@ -48,8 +48,8 @@
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCNMakeTool"
|
Name="VCNMakeTool"
|
||||||
BuildCommandLine="nmake /nologo MAKEWAD=..\tools\makewad\makewad NOLOGO=/nologo andcopy"
|
BuildCommandLine="nmake /nologo MAKEWAD=..\tools\makewad\makewad DEHSUPP=..\tools\dehsupp\dehsupp NOLOGO=/nologo andcopy"
|
||||||
ReBuildCommandLine="nmake /nologo MAKEWAD=..\tools\makewad\makewad NOLOGO=/nologo nrebuild"
|
ReBuildCommandLine="nmake /nologo MAKEWAD=..\tools\makewad\makewad NOLOGO=/nologo DEHSUPP=..\tools\dehsupp\dehsupp nrebuild"
|
||||||
CleanCommandLine="del wadmake zdoom.pk3"
|
CleanCommandLine="del wadmake zdoom.pk3"
|
||||||
Output="zdoom.pk3"
|
Output="zdoom.pk3"
|
||||||
PreprocessorDefinitions=""
|
PreprocessorDefinitions=""
|
||||||
|
@ -90,8 +90,8 @@
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCNMakeTool"
|
Name="VCNMakeTool"
|
||||||
BuildCommandLine="nmake /nologo MAKEWAD=..\tools\makewad\makewad NOLOGO=/nologo"
|
BuildCommandLine="nmake /nologo MAKEWAD=..\tools\makewad\makewad DEHSUPP=..\tools\dehsupp\dehsupp NOLOGO=/nologo"
|
||||||
ReBuildCommandLine="nmake /nologo MAKEWAD=..\tools\makewad\makewad NOLOGO=/nologo nrebuild"
|
ReBuildCommandLine="nmake /nologo MAKEWAD=..\tools\makewad\makewad NOLOGO=/nologo DEHSUPP=..\tools\dehsupp\dehsupp nrebuild"
|
||||||
CleanCommandLine="del wadmake zdoom.pk3"
|
CleanCommandLine="del wadmake zdoom.pk3"
|
||||||
Output="zdoom.pk3"
|
Output="zdoom.pk3"
|
||||||
PreprocessorDefinitions=""
|
PreprocessorDefinitions=""
|
||||||
|
|
|
@ -76,7 +76,7 @@ xlat/defines.i xlat/defines.i
|
||||||
========
|
========
|
||||||
# Support lumps
|
# Support lumps
|
||||||
|
|
||||||
dehsupp.txt dehsupp.txt
|
dehsupp.lmp dehsupp.lmp
|
||||||
|
|
||||||
animated.lmp animated.lmp
|
animated.lmp animated.lmp
|
||||||
spaldoom.lmp spaldoom.lmp
|
spaldoom.lmp spaldoom.lmp
|
||||||
|
|
21
zdoom.sln
21
zdoom.sln
|
@ -5,11 +5,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zdoom", "zdoom.vcproj", "{8
|
||||||
{AC3F5340-40CB-4C3A-8AA7-CB7158DB4466} = {AC3F5340-40CB-4C3A-8AA7-CB7158DB4466}
|
{AC3F5340-40CB-4C3A-8AA7-CB7158DB4466} = {AC3F5340-40CB-4C3A-8AA7-CB7158DB4466}
|
||||||
{1D179D4B-F008-431B-8C72-111F8372584F} = {1D179D4B-F008-431B-8C72-111F8372584F}
|
{1D179D4B-F008-431B-8C72-111F8372584F} = {1D179D4B-F008-431B-8C72-111F8372584F}
|
||||||
{DA47396F-60C1-4BDE-A977-7F7DE461CF77} = {DA47396F-60C1-4BDE-A977-7F7DE461CF77}
|
{DA47396F-60C1-4BDE-A977-7F7DE461CF77} = {DA47396F-60C1-4BDE-A977-7F7DE461CF77}
|
||||||
{E83FD370-2E72-4D4C-9427-FF9D9DED1E88} = {E83FD370-2E72-4D4C-9427-FF9D9DED1E88}
|
|
||||||
{0F80ACBF-460E-44F0-B28E-B3272D1774A7} = {0F80ACBF-460E-44F0-B28E-B3272D1774A7}
|
{0F80ACBF-460E-44F0-B28E-B3272D1774A7} = {0F80ACBF-460E-44F0-B28E-B3272D1774A7}
|
||||||
{F9D9E7D4-E1A2-4866-9E85-B1B14137EE63} = {F9D9E7D4-E1A2-4866-9E85-B1B14137EE63}
|
|
||||||
{6077B7D6-349F-4077-B552-3BC302EF5859} = {6077B7D6-349F-4077-B552-3BC302EF5859}
|
|
||||||
{667D2EE7-C357-49E2-9BAB-0A4A45F0F76E} = {667D2EE7-C357-49E2-9BAB-0A4A45F0F76E}
|
{667D2EE7-C357-49E2-9BAB-0A4A45F0F76E} = {667D2EE7-C357-49E2-9BAB-0A4A45F0F76E}
|
||||||
|
{6077B7D6-349F-4077-B552-3BC302EF5859} = {6077B7D6-349F-4077-B552-3BC302EF5859}
|
||||||
|
{F9D9E7D4-E1A2-4866-9E85-B1B14137EE63} = {F9D9E7D4-E1A2-4866-9E85-B1B14137EE63}
|
||||||
|
{E83FD370-2E72-4D4C-9427-FF9D9DED1E88} = {E83FD370-2E72-4D4C-9427-FF9D9DED1E88}
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "zlib\zlib.vcproj", "{F9D9E7D4-E1A2-4866-9E85-B1B14137EE63}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "zlib\zlib.vcproj", "{F9D9E7D4-E1A2-4866-9E85-B1B14137EE63}"
|
||||||
|
@ -20,6 +20,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "re2c", "tools\re2c\re2c.vcp
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wadsrc", "wadsrc\wadsrc.vcproj", "{1D179D4B-F008-431B-8C72-111F8372584F}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wadsrc", "wadsrc\wadsrc.vcproj", "{1D179D4B-F008-431B-8C72-111F8372584F}"
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{AC64EE8F-F019-4A3E-BCAF-BD1FD072B9C8} = {AC64EE8F-F019-4A3E-BCAF-BD1FD072B9C8}
|
||||||
{24A19C02-F041-4AB0-A1A1-02E1E88EDBD3} = {24A19C02-F041-4AB0-A1A1-02E1E88EDBD3}
|
{24A19C02-F041-4AB0-A1A1-02E1E88EDBD3} = {24A19C02-F041-4AB0-A1A1-02E1E88EDBD3}
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
|
@ -28,6 +29,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makewad", "tools\makewad\ma
|
||||||
{F9D9E7D4-E1A2-4866-9E85-B1B14137EE63} = {F9D9E7D4-E1A2-4866-9E85-B1B14137EE63}
|
{F9D9E7D4-E1A2-4866-9E85-B1B14137EE63} = {F9D9E7D4-E1A2-4866-9E85-B1B14137EE63}
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dehsupp", "tools\dehsupp\dehsupp.vcproj", "{AC64EE8F-F019-4A3E-BCAF-BD1FD072B9C8}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{667D2EE7-C357-49E2-9BAB-0A4A45F0F76E} = {667D2EE7-C357-49E2-9BAB-0A4A45F0F76E}
|
||||||
|
{0F80ACBF-460E-44F0-B28E-B3272D1774A7} = {0F80ACBF-460E-44F0-B28E-B3272D1774A7}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "updaterevision", "tools\updaterevision\updaterevision.vcproj", "{6077B7D6-349F-4077-B552-3BC302EF5859}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "updaterevision", "tools\updaterevision\updaterevision.vcproj", "{6077B7D6-349F-4077-B552-3BC302EF5859}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jpeg-6b", "jpeg-6b\jpeg-6b.vcproj", "{AC3F5340-40CB-4C3A-8AA7-CB7158DB4466}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jpeg-6b", "jpeg-6b\jpeg-6b.vcproj", "{AC3F5340-40CB-4C3A-8AA7-CB7158DB4466}"
|
||||||
|
@ -92,6 +99,14 @@ Global
|
||||||
{24A19C02-F041-4AB0-A1A1-02E1E88EDBD3}.Release|Win32.Build.0 = Release|Win32
|
{24A19C02-F041-4AB0-A1A1-02E1E88EDBD3}.Release|Win32.Build.0 = Release|Win32
|
||||||
{24A19C02-F041-4AB0-A1A1-02E1E88EDBD3}.Release|x64.ActiveCfg = Debug|x64
|
{24A19C02-F041-4AB0-A1A1-02E1E88EDBD3}.Release|x64.ActiveCfg = Debug|x64
|
||||||
{24A19C02-F041-4AB0-A1A1-02E1E88EDBD3}.Release|x64.Build.0 = Debug|x64
|
{24A19C02-F041-4AB0-A1A1-02E1E88EDBD3}.Release|x64.Build.0 = Debug|x64
|
||||||
|
{AC64EE8F-F019-4A3E-BCAF-BD1FD072B9C8}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{AC64EE8F-F019-4A3E-BCAF-BD1FD072B9C8}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{AC64EE8F-F019-4A3E-BCAF-BD1FD072B9C8}.Debug|x64.ActiveCfg = Release|Win32
|
||||||
|
{AC64EE8F-F019-4A3E-BCAF-BD1FD072B9C8}.Debug|x64.Build.0 = Release|Win32
|
||||||
|
{AC64EE8F-F019-4A3E-BCAF-BD1FD072B9C8}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{AC64EE8F-F019-4A3E-BCAF-BD1FD072B9C8}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{AC64EE8F-F019-4A3E-BCAF-BD1FD072B9C8}.Release|x64.ActiveCfg = Release|Win32
|
||||||
|
{AC64EE8F-F019-4A3E-BCAF-BD1FD072B9C8}.Release|x64.Build.0 = Release|Win32
|
||||||
{6077B7D6-349F-4077-B552-3BC302EF5859}.Debug|Win32.ActiveCfg = Debug|Win32
|
{6077B7D6-349F-4077-B552-3BC302EF5859}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{6077B7D6-349F-4077-B552-3BC302EF5859}.Debug|Win32.Build.0 = Debug|Win32
|
{6077B7D6-349F-4077-B552-3BC302EF5859}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{6077B7D6-349F-4077-B552-3BC302EF5859}.Debug|x64.ActiveCfg = Debug|x64
|
{6077B7D6-349F-4077-B552-3BC302EF5859}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
|
Loading…
Reference in a new issue