Skip to content

Commit

Permalink
SCI Interpreter 2.100.002 (1994-12-29)
Browse files Browse the repository at this point in the history
  • Loading branch information
OmerMor committed Jan 11, 2019
1 parent 3d3701b commit bcc6d5b
Show file tree
Hide file tree
Showing 30 changed files with 543 additions and 356 deletions.
9 changes: 5 additions & 4 deletions INTERP/ARRAY.HPP
Expand Up @@ -19,17 +19,18 @@ _Packed struct Array {
SCIUWord size;
};

struct ArrayID : ID<Array, MemArray> {
FakeTemplateID(FakeArrayID, Array, MemArray)
struct ArrayID : FakeArrayID {
ArrayID() {}
ArrayID(MemID& id) : ID<Array, MemArray>(id) {}
ArrayID(SOL_Handle h) : ID<Array, MemArray>(h) {}
ArrayID(MemID& id) : FakeArrayID(id) {}
ArrayID(SOL_Handle h) : FakeArrayID(h) {}

void
Get(size_t size)
{
// initialize arrays to 0

ID<Array, MemArray>::Get(size, MOVEABLE | INITMEMORY);
FakeArrayID::Get(size, MOVEABLE | INITMEMORY);
}

void* Data() { return (int) *this ? **this + 1 : 0; }
Expand Down
58 changes: 35 additions & 23 deletions INTERP/AUDIO.CPP
Expand Up @@ -1362,8 +1362,6 @@ Bool
InitAudioDriver()
{
unsigned n;
char pathName[MaxPath + 1];
char* cp;

n = (configMgr->GetNum("DACSize", 0, GetDACDefaultSize()) + 1023) / 1024 * 1024;
if (!n)
Expand All @@ -1380,25 +1378,7 @@ InitAudioDriver()
if (intHbufferSize > INT_MAXHBSIZE)
intHbufferSize = INT_MAXHBSIZE;

/* Open optional Audio sound effects Volume */
strcpy(pathName, configMgr->Get("ressfx",0));
if (strlen(pathName)) {
cp = &pathName[strlen(pathName)-1];
if (*cp != ':' && *cp != '\\')
strcat(pathName,"\\");
}
strcat(pathName,SFXVOLNAME);
sfxVolFD = Open(pathName, O_RDONLY);

/* Open optional Base-36 Speech/Sync/Rave Volume */
strcpy(pathName, configMgr->Get("resaud",0));
if (strlen(pathName)) {
cp = &pathName[strlen(pathName)-1];
if (*cp != ':' && *cp != '\\')
strcat(pathName,"\\");
}
strcat(pathName,AUDVOLNAME);
audVolFD = Open(pathName, O_RDONLY);
// InitAudioVols();

/* If audio is not requested -- vamboose
*/
Expand Down Expand Up @@ -1442,13 +1422,44 @@ InitAudioDriver()
audioInstalled = True;

#ifdef DEBUG
if (configMgr->Get(configMgr->PlayAudio))
DACPlay();
// if (configMgr->Get(configMgr->PlayAudio))
// DACPlay();
#endif

return True;
}

void
InitAudioVols()
{
char pathName[MaxPath + 1];
char* cp;

/* Open optional Audio sound effects Volume */
if (sfxVolFD != -1)
Close(sfxVolFD);
strcpy(pathName, configMgr->Get("ressfx",0));
if (strlen(pathName)) {
cp = &pathName[strlen(pathName)-1];
if (*cp != ':' && *cp != '\\')
strcat(pathName,"\\");
}
strcat(pathName,SFXVOLNAME);
sfxVolFD = Open(pathName, O_RDONLY);

/* Open optional Base-36 Speech/Sync/Rave Volume */
if (audVolFD != -1)
Close(audVolFD);
strcpy(pathName, configMgr->Get("resaud",0));
if (strlen(pathName)) {
cp = &pathName[strlen(pathName)-1];
if (*cp != ':' && *cp != '\\')
strcat(pathName,"\\");
}
strcat(pathName,AUDVOLNAME);
audVolFD = Open(pathName, O_RDONLY);
}

#ifdef DEBUG
void
DACPlay()
Expand Down Expand Up @@ -1585,3 +1596,4 @@ AudioCheck()
if (!CallDAC(DAC_LOC,0))
AudioStop(n);
}

1 change: 1 addition & 0 deletions INTERP/AUDIO.HPP
Expand Up @@ -40,6 +40,7 @@ void DupeChannel(void *, int, int, char);
void AudioServer();
int CallDAC(int,int);
Bool InitAudioDriver();
void InitAudioVols();
void EndAudio();
void MakeName36(MemType,char*,ResNum,uchar,uchar,uchar,uchar);
int FindAud36Entry(ResNum,uchar,uchar,uchar,uchar);
Expand Down
3 changes: 1 addition & 2 deletions INTERP/CELOBJ.HPP
Expand Up @@ -61,7 +61,7 @@ _Packed struct ViewHeader
uchar version;
uchar futureExpansion;
};
typedef ID<ViewHeader, MemViewHeader> ViewHeaderID;
FakeTemplateID(ViewHeaderID, ViewHeader, MemViewHeader)

_Packed struct LoopHeader
{
Expand Down Expand Up @@ -379,5 +379,4 @@ Bitmap::operator!=(const Bitmap& src) const
}

#endif


82 changes: 43 additions & 39 deletions INTERP/DEBUG.CPP
Expand Up @@ -37,7 +37,7 @@ Bool debuggerWasOn;
int kernelCallHistory[MaxKernelCallHistory];
int kernelCallOldest;
int kernelCallNewest;
int kernelCallIntegChecks = 0;
int kernelCallIntegChecks;
Bool singleStep;

static void CallKernel();
Expand Down Expand Up @@ -119,41 +119,46 @@ static DebugMenu debugMenu("DEBUG", debugItems);

///////////////////////////////////////////////////////////////////////////////

template <class T>
static void
EditVariable(char* name, T vars, int nVars)
{
static char buf[20];

char prompt[20];

if (!nVars) {
msgMgr->Alert("There are no %ss", name);
return;
}

sprintf(prompt, "Edit %s#", name);

while (1) {
int num;
if (!InputValue(IV_Number, prompt, buf, num))
return;

if (nVars != -1 && num > nVars) {
sprintf(prompt, "Max %s: %d", name, nVars);
continue;
}

char valBuf[20];
strcpy(valBuf, FormatNumber(vars[num], False));
int val;
strcpy(prompt, "Value");
if (InputValue(IV_Value, prompt, valBuf, val))
vars[num] = val;
break;
}
#define MakeEditVariable(n, T)\
static void \
n##EditVariable(char* name, T vars, int nVars)\
{\
static char buf[20];\
\
char prompt[20];\
\
if (!nVars) {\
msgMgr->Alert("There are no %ss", name);\
return;\
}\
\
sprintf(prompt, "Edit %s#", name);\
\
while (1) {\
int num;\
if (!InputValue(IV_Number, prompt, buf, num))\
return;\
\
if (nVars != -1 && num > nVars) {\
sprintf(prompt, "Max %s: %d", name, nVars);\
continue;\
}\
\
char valBuf[20];\
strcpy(valBuf, FormatNumber(vars[num], False));\
int val;\
strcpy(prompt, "Value");\
if (InputValue(IV_Value, prompt, valBuf, val))\
vars[num] = val;\
break;\
}\
}

MakeEditVariable(Global, VariableID);
MakeEditVariable(Local, VariableID);
MakeEditVariable(Parm, PMStack::Ptr);
MakeEditVariable(Temp, PMStack::Ptr);

///////////////////////////////////////////////////////////////////////////////

void
Expand Down Expand Up @@ -314,19 +319,19 @@ if (event.type == SOL_Event::KeyDown && event.message == CtrlKey('D')) {
break;

case cmEditGlobal:
EditVariable("global", pm.globals, -1);
GlobalEditVariable("global", pm.globals, -1);
break;

case cmEditLocal:
EditVariable("local", pm.locals, -1);
LocalEditVariable("local", pm.locals, -1);
break;

case cmEditParameter:
EditVariable("parameter", pm.stack.parms, (int) pm.stack.parms[0]);
ParmEditVariable("parameter", pm.stack.parms, (int) pm.stack.parms[0]);
break;

case cmEditTemp:
EditVariable("temp", pm.stack.temps, -1);
TempEditVariable("temp", pm.stack.temps, -1);
break;

case cmEditMemory:
Expand Down Expand Up @@ -1037,4 +1042,3 @@ Debugger::SaveRestoreAfter(SaveGame*, Bool save)
}
#endif


2 changes: 1 addition & 1 deletion INTERP/DIALOG.HPP
Expand Up @@ -31,7 +31,7 @@ class EditStruct
ushort maxLength; // maximum string allowed
};

typedef ID<EditStruct, MemEditStruct> EditStructID;
FakeTemplateID(EditStructID, EditStruct, MemEditStruct)

void CenterWindow(SOL_Rect&);
void DrawCursor(MemID editStructID);
Expand Down
40 changes: 38 additions & 2 deletions INTERP/GRAPHMGR.CPP
Expand Up @@ -220,7 +220,7 @@ GraphicsMgr::PalMorphFrameOut(char* palArray)


GPalette().Submit(myPal);
GPalette().UpdateForFrame();
GPalette().UpdateFFrame();
GPalette().UpdateHardware();

// Fourth decimate new image in VMAP and output to screen
Expand All @@ -231,11 +231,47 @@ GraphicsMgr::PalMorphFrameOut(char* palArray)
ShowBits();
vmapValid = True;

// Finally let the graphics engine know everything should be redrawn
// For palette cycling

for (i = 0;i < nplanes;i++)
next.Planes()[i].UpdateRedrawAllCount();

if (Remap::remapCount && lastRemapFlag)
RemapMarkRedraw();

CalcLists(drawLists,eraseLists);

// The number of planes may have been reduced by CalcLists
nplanes = next.Planes().Length();

// Sort the draw lists
for (i = 0; i < nplanes; i++)
drawLists[i]->Sort();

for (i = 0; i < nplanes; i++) {
int count = drawLists[i]->Length();
DrawList& drawlist = *drawLists[i];
for (int j = 0; j < count; j++) {
drawlist[j].SI().SubmitPalette();
}
}

lastRemapFlag = GPalette().UpdateForFrame();

// draw to vmap
for (i = 0; i < nplanes; i++) {
vmapValid = False;
DrawEraseList(*eraseLists[i],next.Planes()[i]);
DrawScreenItemList(*drawLists[i]);
}

GPalette().Submit(thisPal);
GPalette().UpdateFFrame();
GPalette().UpdateHardware();

ShowBits();
vmapValid = True;

// Clean up and return
for (i = 0;i < nplanes;i++) {
delete eraseLists[i];
Expand Down
6 changes: 3 additions & 3 deletions INTERP/LIST.HPP
Expand Up @@ -27,13 +27,13 @@ protected:
SOL_NodeKey key;
};

typedef ID<SOL_Node, MemListNode> SOL_NodeID;
FakeTemplateID(SOL_NodeID, SOL_Node, MemListNode);

struct KNode : SOL_Node {
SCIWord val;
};

typedef ID<KNode, MemListKNode> KNodeID;
FakeTemplateID(KNodeID, KNode, MemListKNode);

///////////////////////////////////////////////////////////////////////////////

Expand Down Expand Up @@ -68,7 +68,7 @@ protected:
int nextPtr;
};

typedef ID<SOL_List, MemList> SOL_ListID;
FakeTemplateID(SOL_ListID, SOL_List, MemList)

#endif

13 changes: 2 additions & 11 deletions INTERP/MATH.HPP
Expand Up @@ -11,17 +11,8 @@ struct MathMgr : Saveable {
void SaveRestore(SaveGame*, Bool save);
} extern mathMgr;

template<class T>
inline T Sign(T t)
{
return t > 0 ? 1 : t < 0 ? -1 : 0;
}

template<class T>
inline T Abs(T t)
{
return t < 0 ? (T) -t : t;
}
#define Sign(t) ((t) > 0 ? 1 : (t) < 0 ? -1 : 0)
#define Abs(t) ((t) < 0 ? -(t) : (t))

/* n will be under 1000
n*TrigScale must be less than largest long int (2,000,000,000)
Expand Down

0 comments on commit bcc6d5b

Please sign in to comment.