-#define COMPILE_DATE_STRING "2010-03-15 19:50"
+#define COMPILE_DATE_STRING "2010-03-16 01:16"
#ifndef ASM_H
#define ASM_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
#ifndef BUGSTERMINALS_H
#define BUGSTERMINALS_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
long mWidth, mHeight;
-long mhWnd;
long mScrollX, mScrollY;
long mScrollX_last, mScrollY_last;
long mDestXOff, mDestYOff;
printf("::: REDRAW (%d, %d): %d, %d\n", x, y, graphic, sync_frame);
#endif
- StretchedSprites.BltImg(sx, sy, graphic, sync_frame);
+ DDSpriteBuffer_BltImg(sx, sy, graphic, sync_frame);
#if 1
num_redrawn++;
int xsize = SXSIZE;
int ysize = SYSIZE;
- int full_xsize = (FieldWidth - (menBorder.Checked ? 0 : 1)) * TILEX;
- int full_ysize = (FieldHeight - (menBorder.Checked ? 0 : 1)) * TILEY;
+ int full_xsize = (FieldWidth - (menBorder ? 0 : 1)) * TILEX;
+ int full_ysize = (FieldHeight - (menBorder ? 0 : 1)) * TILEY;
sxsize = (full_xsize < xsize ? full_xsize : xsize);
sysize = (full_ysize < ysize ? full_ysize : ysize);
sx = SX + (full_xsize < xsize ? (xsize - full_xsize) / 2 : 0);
sy = SY + (full_ysize < ysize ? (ysize - full_ysize) / 2 : 0);
- if (!menBorder.Checked)
+ if (!menBorder)
{
px += TILEX / 2;
py += TILEY / 2;
for (T = (double)tStep; T <= (double)1; T += tStep)
{
- if (UserDragFlag)
- goto SoftScrollEH;
-
mScrollX = oldX + T * dx;
mScrollY = oldY + T * dY;
ScrollX = mScrollX;
ScrollY = mScrollY;
}
- if (UserDragFlag)
- goto SoftScrollEH;
-
mScrollX = X;
mScrollY = Y;
ScrollX = mScrollX;
ScrollY = mScrollY;
-SoftScrollEH:
AlreadyRunning = False;
ScrollPlayfieldIfNeeded();
#ifndef DDSCROLLBUFFER_H
#define DDSCROLLBUFFER_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
#ifndef DDSPRITEBUFFER_H
#define DDSPRITEBUFFER_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
#include "Demo.h"
-int RecDemoRandomSeed;
-byte FirstDemoByte;
-char *MySignature;
-
-void subGetNextDemoKey()
-{
- int ax;
-
- if (0 < DemoKeyRepeatCounter)
- {
- DemoKeyRepeatCounter = DemoKeyRepeatCounter - 1;
- }
- else
- {
- DemoOffset = DemoOffset + 1;
- if (DemoOffset <= FileMax)
- {
- ax = PlayField8[DemoOffset];
- if (ax == 0xFF)
- {
- demo_stopped = 1;
- ExitToMenuFlag = 1;
- }
- else
- {
- DemoKeyCode = ax & 0xF;
- DemoKeyRepeatCounter = (ax & 0xF0) / 0x10;
- }
-
- }
- else
- {
- ExitToMenuFlag = 1;
- }
- }
-
-#if 0
- printf("::: %04d [%03ld, %02d] ----------> %s [%d] [%d, %d] [%d, %d]\n",
- TimerVar,
- DemoOffset - DemoPointer, DemoKeyRepeatCounter,
- (DemoKeyCode == keyNone ? "(none)" :
- DemoKeyCode == keyLeft ? "left" :
- DemoKeyCode == keyRight ? "right" :
- DemoKeyCode == keyUp ? "up" :
- DemoKeyCode == keyDown ? "down" :
- DemoKeyCode == keySpace ? "space" :
- DemoKeyCode == keySpaceLeft ? "space + left" :
- DemoKeyCode == keySpaceRight ? "space + right" :
- DemoKeyCode == keySpaceUp ? "space + up" :
- DemoKeyCode == keySpaceDown ? "space + down" : "(unknown)"),
- DemoKeyCode,
- MurphyScreenXPos, MurphyScreenYPos,
- MurphyPosIndex % 60, MurphyPosIndex / 60);
-#endif
-
-}
-
-currency GetTotalFramesOfDemo()
-{
- currency GetTotalFramesOfDemo;
-
- long i;
- currency nFrames;
- byte db;
-
- GetTotalFramesOfDemo = 0;
- if (! DemoAvailable)
- return GetTotalFramesOfDemo;
-
- nFrames = 1;
- i = DemoPointer + 1;
-
- // --- On Error GoTo GetTotalFramesOfDemoEH
- db = PlayField8[i];
- while (db != 0xFF)
- {
- nFrames = nFrames + (db & 0xF0) / 0x10 + 1;
- i = i + 1;
- db = PlayField8[i];
- }
-
- GetTotalFramesOfDemo = nFrames;
- return GetTotalFramesOfDemo;
-
- GetTotalFramesOfDemo = 0;
- DemoAvailable = False;
-
- return GetTotalFramesOfDemo;
-}
#ifndef DEMO_H
#define DEMO_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
-extern currency GetTotalFramesOfDemo();
-extern void subGetNextDemoKey();
-extern byte FirstDemoByte;
-extern char *MySignature;
-extern int RecDemoRandomSeed;
#endif /* DEMO_H */
void ScrollTo(int X, int Y)
{
- long oldX, oldY;
-
-#if 0
- printf("::: Display.c: ScrollTo(): %d, %d\n", X, Y);
-#endif
-
if (NoDisplayFlag)
return;
- oldX = ScrollX;
- oldY = ScrollY;
X = ScrollDelta * (X / ScrollDelta);
X = Max(X, ScrollMinX);
X = Min(X, ScrollMaxX);
Y = ScrollDelta * (Y / ScrollDelta);
Y = Max(Y, ScrollMinY);
Y = Min(Y, ScrollMaxY);
- // ScrollX = X
- // ScrollY = Y
- Stage.ScrollTo(X, Y);
+ DDScrollBuffer_ScrollTo(X, Y);
}
void ScrollTowards(int X, int Y)
{
- long oldX, oldY;
-
if (NoDisplayFlag)
return;
- oldX = ScrollX;
- oldY = ScrollY;
X = ScrollDelta * (X / ScrollDelta);
X = Max(X, ScrollMinX);
X = Min(X, ScrollMaxX);
Y = ScrollDelta * (Y / ScrollDelta);
Y = Max(Y, ScrollMinY);
Y = Min(Y, ScrollMaxY);
- // ScrollX = X
- // ScrollY = Y
- Stage.ScrollTowards(X, Y, 2 * Stretch * ZoomFactor);
+ DDScrollBuffer_ScrollTowards(X, Y, 2 * Stretch * ZoomFactor);
}
void SoftScrollTo(int X, int Y, long TimeMS, int FPS)
{
- long oldX, oldY;
-
if (NoDisplayFlag)
return;
- oldX = ScrollX;
- oldY = ScrollY;
X = ScrollDelta * (X / ScrollDelta);
X = Max(X, ScrollMinX);
X = Min(X, ScrollMaxX);
Y = ScrollDelta * (Y / ScrollDelta);
Y = Max(Y, ScrollMinY);
Y = Min(Y, ScrollMaxY);
- // ScrollX = X
- // ScrollY = Y
- Stage.SoftScrollTo(X, Y, TimeMS, FPS);
+ DDScrollBuffer_SoftScrollTo(X, Y, TimeMS, FPS);
}
#ifndef DISPLAY_H
#define DISPLAY_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
#ifndef DOGAMESTUFF_H
#define DOGAMESTUFF_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
X = GetStretchX(si);
Y = GetStretchY(si);
- StretchedSprites.BltImg(X, Y, aniElectron, bx);
+ DDSpriteBuffer_BltImg(X, Y, aniElectron, bx);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
X = GetStretchX(si);
Y = GetStretchY(si);
- StretchedSprites.BltImg(X, Y, aniElectron, 0x10 - bx);
+ DDSpriteBuffer_BltImg(X, Y, aniElectron, 0x10 - bx);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
X = GetStretchX(si);
Y = GetStretchY(si + FieldWidth);
- StretchedSprites.BltImg(X, Y, aniSpace, 0);
- StretchedSprites.BltImg(X, Y - bx * TwoPixels, aniElectron, bx);
+ DDSpriteBuffer_BltImg(X, Y, aniSpace, 0);
+ DDSpriteBuffer_BltImg(X, Y - bx * TwoPixels, aniElectron, bx);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
X = GetStretchX(si + 1);
Y = GetStretchY(si);
- StretchedSprites.BltImg(X, Y, aniSpace, 0);
- StretchedSprites.BltImg(X - bx * TwoPixels, Y, aniElectron, bx);
+ DDSpriteBuffer_BltImg(X, Y, aniSpace, 0);
+ DDSpriteBuffer_BltImg(X - bx * TwoPixels, Y, aniElectron, bx);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
X = GetStretchX(si);
Y = GetStretchY(si - FieldWidth);
- StretchedSprites.BltImg(X, Y, aniSpace, 0);
- StretchedSprites.BltImg(X, Y + bx * TwoPixels, aniElectron, bx);
+ DDSpriteBuffer_BltImg(X, Y, aniSpace, 0);
+ DDSpriteBuffer_BltImg(X, Y + bx * TwoPixels, aniElectron, bx);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
X = GetStretchX(si - 1);
Y = GetStretchY(si);
- StretchedSprites.BltImg(X, Y, aniSpace, 0);
- StretchedSprites.BltImg(X + bx * TwoPixels, Y, aniElectron, bx);
+ DDSpriteBuffer_BltImg(X, Y, aniSpace, 0);
+ DDSpriteBuffer_BltImg(X + bx * TwoPixels, Y, aniElectron, bx);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
}
#ifndef ELECTRONS_H
#define ELECTRONS_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
// !!! causes flicker -- fix in Murphy.c !!!
GfxGraphic[GetX(si)][GetY(si)] = aniRedDisk;
#else
- StretchedSprites.BltImg(X, Y, aniRedDisk, 0);
+ DDSpriteBuffer_BltImg(X, Y, aniRedDisk, 0);
#endif
// +++++++++++++++++++++++++++++++++++++++++
#ifndef EXPLOSIONS_H
#define EXPLOSIONS_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
int MurphyVarFaceLeft;
int ScratchGravity, GravityFlag;
int RedDiskReleaseFlag, MovingPictureSequencePhase;
-int data_h_DemoDone, LevelStatus;
-int data_h_165A;
int YellowDisksExploded;
int AllowRedDiskCheat, AllowEatRightRedDiskBug;
int RedDiskCount;
int SnikSnaksElectronsFrozen;
-boolean EditFlag;
-int EditMode;
-int edSelect = 2;
-int edMove = 3;
-
-int DemoFlag, data_scr_demo, demo_stopped;
-int WasDemoFlag;
-int EP_GameDemoVar0DAA;
-int RecordDemoFlag; // , DemoRecordingFlag%
-int DemoKeyCode, DemoPointer;
-long DemoOffset;
-int DemoKeyRepeatCounter;
+int DemoKeyCode;
int RedDiskReleasePhase;
-int UpdatedFlag;
-
-int DebugVersionFlag, D_ModeFlag;
-int keyEnter;
-
-int UpdateTimeFlag;
-
-boolean ModifiedFlag;
-
-
-void Let_ModifiedFlag(boolean NewVal)
-{
-}
#ifndef FAKEDECLARES_H
#define FAKEDECLARES_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
-#define edDraw (1)
-
-extern boolean ModifiedFlag;
-extern void Let_ModifiedFlag(boolean NewVal);
-
-extern boolean EditFlag;
extern int AllowRedDiskCheat, AllowEatRightRedDiskBug;
extern int Data_SubRest, Data_SubRstFlg;
-extern int DebugVersionFlag, D_ModeFlag;
-extern int DemoFlag, data_scr_demo, demo_stopped;
-extern int DemoKeyCode, DemoPointer;
-extern int DemoKeyRepeatCounter;
-extern int EP_GameDemoVar0DAA;
-extern int EditMode;
+extern int DemoKeyCode;
extern int GameBusyFlag;
extern int InfotronsNeeded, TotalInfotronsNeeded;
extern int KillMurphyFlag, MurphyMoveCounter;
extern int MurphyPosIndex, MurphyXPos, MurphyYPos;
extern int MurphyScreenXPos, MurphyScreenYPos;
extern int MurphyVarFaceLeft;
-extern int RecordDemoFlag;
extern int RedDiskCount;
extern int RedDiskReleaseFlag, MovingPictureSequencePhase;
extern int RedDiskReleasePhase;
extern int ScratchGravity, GravityFlag;
extern int SnikSnaksElectronsFrozen;
-extern int UpdateTimeFlag;
-extern int UpdatedFlag;
-extern int WasDemoFlag;
extern int YellowDisksExploded;
-extern int data_h_DemoDone, LevelStatus;
-extern int edMove;
-extern int edSelect;
-extern int keyEnter;
-extern long DemoOffset;
extern long YawnSleepCounter;
#endif /* FAKEDECLARES_H */
#include "Globals.h"
-static void ReadDemo();
-void ReadLevel();
-// static char *VB_Name = "modGlobals";
-
-// --- Option Explicit
-// --- Option Compare Text
-// --- Option Base 0
-
-// --- const long StretchWidth = 16;
-// --- const long StretchWidth2 = StretchWidth / 2;
-// --- const long BaseWidth = 16;
-// --- const int TwoPixels = 2;
-
-boolean Original;
-boolean Cracked;
-boolean Level_Arg;
-boolean EGA_Arg;
-boolean Record_Fix;
-boolean SpeedKeys;
-boolean Level_Fix;
-boolean Dead_Code;
-boolean Redundant;
-boolean Alignments;
-boolean Ctrl_Alt_Fix;
-boolean Protection;
-boolean EP_ENHANCE;
-boolean EP_DEMO;
-boolean EP_DEBUG;
-boolean EXTRASPEED;
-boolean TIMINGFIX;
-boolean SafeRecord;
-boolean Norm_Time;
-boolean EP_OLD8;
-boolean SAVEGAME;
-boolean HP_DEMO;
-boolean ScreenFix;
-boolean DemoRecordFix;
-boolean DebugSwitch;
-boolean Ver62;
-boolean Ver62test;
-boolean Ver63;
-boolean Ver64;
+void ReadLevel();
int LevelNumber;
-char *CurPath, *OrigPath, *TmpPath;
boolean LevelLoaded;
-long SignatureDelay;
-boolean bSignatureAvailable;
-boolean bCapturePane;
+boolean DemoAvailable;
+boolean menBorder;
int FieldWidth; // = 60
int FieldHeight; // = 24
#else
int RandomSeed;
#endif
-currency DeltaT; // Interval between two frames (in ms)
-long DeltaTPlay, DeltaTDemo;
-boolean BlockingSpeed;
-
-// --- const int posFrameCorner = 55;
-// --- const int posFrameVertical = 110;
-// --- const int posFrameHorizontal = 111;
int FreezeZonks;
+LevelInfoType LInfo;
+
+float Stretch = 1; // , StretchWidth%, TwoPixels!
+
+int ScrollMinX, ScrollMaxX, ScrollMinY, ScrollMaxY;
+int ScrollX, ScrollY;
+
// constants for Fixed Fields:
// --- const int fiSpace = 0; // &H00 space(28 = wall space ...)
// --- const int fiZonk = 1; // &H01 zonk
// --- const int keySpace = 9;
#if 0
-int *aniBug, *aniZonkRollRight, *aniZonkRollLeft;
-int *aniInfotronRollRight, *aniInfotronRollLeft;
-int *aniSnikSnak, *aniElectron, *aniExplosion;
-int *aniTouchBase, *aniTouchInfotron, *aniTouchRedDisk;
-// --- const int aniExplosionInfo = 111;
-// --- const int aniSnikSnakUp = 159;
-// --- const int aniSnikSnakDown = 167;
-// --- const int aniSnikSnakLeft = 239;
-// --- const int aniSnikSnakRight = 247;
-// --- const int aniMurphyYawn = 56;
-// --- const int aniMurphySleepLeft = 71;
-// --- const int aniMurphySleepRight = 68;
-int *aniMurphyExit; // , aniMurphyFaceLeft%, aniMurphyFaceRight%
-int *aniMurphyEatLeft, *aniMurphyEatRight; // , aniMurphyEatRightRedDisk
-int *aniMurphyEatUpLeft, *aniMurphyEatUpRight, *aniSplitUpDown;
-int *aniYellowDisk, *aniOrangeDisk, *aniRedDisk;
-// --- const int aniMurphyTouchUp = 46;
-// --- const int aniMurphyTouchLeft = 95;
-// --- const int aniMurphyTouchDown = 47;
-// --- const int aniMurphyTouchRight = 94;
-int *aniEatInfotronLeft, *aniEatInfotronRight;
-// --- const int aniPushLeft = 45;
-// --- const int aniPushRight = 44;
-// --- const int aniPushUpDown = 79;
-#endif
-
-#if 1
int aniFramesBug[] = { 74, 75, 76, 77, 78, 77, 76, 77, 78, 77, 76, 75, 74, 25 };
int aniFramesZonkRollRight[] = { 198, 197, 196, 195, 194, 193, 192, 1, -1 };
int aniFramesZonkRollLeft[] = { 192, 193, 194, 195, 196, 197, 198, 1, -1 };
int aniFramesRedDisk[] = { 20, -1 };
#endif
-#if 1
-
int fiGraphic[] =
{
aniSpace,
}
}
-#endif
-
void InitGlobals()
{
-#if 0
- aniBug = Array(74, 75, 76, 77, 78, 77, 76, 77, 78, 77, 76, 75, 74, 25);
- aniZonkRollRight = Array(198, 197, 196, 195, 194, 193, 192, 1, -1);
- aniZonkRollLeft = Array(192, 193, 194, 195, 196, 197, 198, 1, -1);
- aniInfotronRollRight = Array(206, 205, 204, 203, 202, 201, 200, 4);
- aniInfotronRollLeft = Array(200, 201, 202, 203, 204, 205, 206, 4);
- aniSnikSnak = Array(121, 122, 123, 124, 125, 126, 127, 120, 121);
- aniElectron = Array(144, 145, 146, 147, 148, 149, 150, 151, 144);
- aniExplosion = Array(3, 103, 104, 105, 106, 107, 108, 109, 0);
- aniTouchBase = Array(80, 81, 82, 83, 84, 85, 86, 0, -1);
- aniTouchInfotron = Array(87, 88, 89, 91, 92, 93, 0, -1); // Only seven frames!!!!
- aniTouchRedDisk = Array(96, 97, 98, 99, 100, 101, 102, 0, -1);
- aniMurphyExit = Array(46, 46, 46, 46, 47, 47, 47, 47, 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51, 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 0, 0, 0, 0, -1);
- aniMurphyEatLeft = Array(176, 177, 178, 179, 180, 181, 182, 183, -1);
- aniMurphyEatRight = Array(184, 185, 186, 187, 188, 189, 190, 191, -1);
- aniMurphyEatUpLeft = Array(183, 182, 181, 180, 179, 178, 177, 176, -1);
- aniMurphyEatUpRight = Array(191, 190, 189, 188, 187, 186, 185, 184, -1);
- // aniMurphyEatRightRedDisk = Array(184, 184, 185, 186, 187, 188, 189, 190, 191, -1) '9 frames!
- aniEatInfotronLeft = Array(209, 211, 213, 215, 217, 219, 221, 223, -1);
- aniEatInfotronRight = Array(224, 226, 228, 230, 232, 234, 236, 238, -1);
- aniSplitUpDown = Array(3, 3, 3, 3, 3, 3, 3, 3, -1);
- aniYellowDisk = Array(18, 18, 18, 18, 18, 18, 18, 18, -1);
- aniOrangeDisk = Array(8, 8, 8, 8, 8, 8, 8, 8, -1);
- aniRedDisk = Array(20, -1);
-#endif
-
- InitPseudoCompileFlags();
- UserDragFlag = False;
AutoScrollFlag = True;
FreezeZonks = 0;
- BlockingSpeed = False;
LevelLoaded = False;
FieldWidth = 60;
FieldHeight = 24;
HeaderSize = 96;
FieldMax = (FieldWidth * FieldHeight) + HeaderSize - 1;
LevelMax = (FieldWidth * FieldHeight) - 1;
- Let_ModifiedFlag(False);
bPlaying = False;
- gSignature = "";
- bSignatureAvailable = False;
- FirstDemoByte = 0x81;
- MySignature = "";
-}
-
-void InitPseudoCompileFlags()
-{
- Cracked = 1; // If protection Then crack it
- Level_Arg = 1; // :number is cmd line option
- // Level_Arg = 0 ' Remove Level cmd line option
- EGA_Arg = 1; // EGA is command line option
- Record_Fix = 1; // Assemble with fixed Demo rec
- SpeedKeys = 0; // Remove Speed Keys fix
- Level_Fix = 1; // Assemble with Level Fix
- Dead_Code = 0; // Remove dead code
- Redundant = 0; // Remove redundant code
- Alignments = 1; // Assemble with alignments
- Ctrl_Alt_Fix = 1; // Assemble with Ctrl/Alt fix
- Protection = 0; // Remove protection code,do HP
- // EP added by EP for version 5.
- EP_ENHANCE = 1; // Some more nice things (EP)
- EP_DEMO = 1; // Use .SP files for demos (EP)
- // Including record demo!
- EP_DEBUG = 0; // little cmdline debugging
- EXTRASPEED = 1; // '@' option, superfast!
- TIMINGFIX = 1; // "Fixed" the timing problem..
- // Inactive If DemoRecordFix Then1
- SafeRecord = 1; // skip debug keys in recording
- Norm_Time = 1; // force automatic speed test,
- // save result and then do as
- // requested from cmd line.
- EP_OLD8 = 1; // call old int8 from current.
- SAVEGAME = 1; // Allow saving to SUPAPLEX.SAV
- HP_DEMO = 1; // Use fixed demo routines 5.5
- ScreenFix = 1; // No menu-write to gamy field
- DemoRecordFix = 1; // Demo record timing fix on
- DebugSwitch = 1; // Allow Ctrl/Alt-ScrollLock
- Ver62 = 1; // Version 6.2 stuff
- Ver62test = 0; // Version 6.2 test stuff
- Ver63 = 1; // Version 6.3 stuff
- Ver64 = 1; // Version 6.4 stuff
-
}
int GetSI(int X, int Y)
{
- int GetSI;
-
- GetSI = Y * FieldWidth + X;
-
- return GetSI;
+ return Y * FieldWidth + X;
}
int GetX(int si)
{
- int GetX;
-
- GetX = si % FieldWidth;
-
- return GetX;
+ return si % FieldWidth;
}
int GetY(int si)
{
- int GetY;
-
- GetY = si / FieldWidth;
-
- return GetY;
+ return si / FieldWidth;
}
int GetStretchX(int si)
{
- int GetStretchX;
-
- GetStretchX = StretchWidth * (si % FieldWidth);
-
- return GetStretchX;
+ return StretchWidth * (si % FieldWidth);
}
int GetStretchY(int si)
{
- int GetStretchY;
-
- GetStretchY = StretchWidth * (si / FieldWidth);
-
- return GetStretchY;
-}
-
-void OLD_ReadLevel()
-{
-#if 1
- static char CurPathTEST[1024];
-#endif
-
- // int FNum;
- FILE *FNum;
- long i;
- // byte T;
-
-#if 1
- // CurPath = "/home/aeglos/projects/rocksndiamonds/levels/TEST_supaplex/supaplex/levels.dat";
-
-#if 0
- CurPath = "/home/aeglos/projects/rocksndiamonds/supaplex_demo_JENS0001.sp";
- LevelNumber = 1;
-#else
-
-#if 0
- // sprintf(CurPathTEST, "/home/aeglos/projects/rocksndiamonds/levels/TEST_supaplex/test_solutions/%03d.sp", level_nr);
-
- sprintf(CurPathTEST, "/home/aeglos/projects/Level_Stuff/SUPAPLEX/SUPAPLEX_LEVELS/Set77/77S%03d.SP", level_nr);
-#else
- sprintf(CurPathTEST, "/home/aeglos/projects/Level_Stuff/SUPAPLEX/SUPAPLEX_LEVELS/solve00/JENS%04d.SP", level_nr);
-#endif
-
- CurPath = CurPathTEST;
- LevelNumber = level_nr;
-#endif
-
-#endif
-
- DemoAvailable = False;
-
- if (STRING_IS_LIKE(CurPath, "*.mpx") ||
- STRING_IS_LIKE(CurPath, "*.MPX"))
- {
- printf("::: reading MPX file ...\n");
-
- ReadMPX();
- return;
- }
-
- if (STRING_IS_LIKE(CurPath, "*.sp") ||
- STRING_IS_LIKE(CurPath, "*.SP"))
- {
- printf("::: reading SP file ...\n");
-
- ReadDemo();
- return;
- }
-
- if (DemoFlag != 0)
- {
- printf("::: reading demo file ...\n");
-
- ReadDemo();
- return;
- }
-
- printf("::: reading level file ...\n");
-
- FileMax = 0;
- FieldWidth = 60;
- FieldHeight = 24;
- HeaderSize = 96;
-
- FieldMax = (FieldWidth * FieldHeight) + HeaderSize - 1;
- LevelMax = (FieldWidth * FieldHeight) - 1;
-
- PlayField8 = REDIM_1D(sizeof(byte), 0, FieldMax + 1 - 1);
- DisPlayField = REDIM_1D(sizeof(byte), 0, FieldMax + 1 - 1);
-
- // FNum = FreeFile();
-
- // --- On Error GoTo ReadLevelEH
-
- printf("::: '%s', %d\n", CurPath, LevelNumber);
-
- FNum = fopen(CurPath, "rb");
-
- i = (LevelNumber - 1) * ((long)(FieldMax) + 1) + 1;
-#if 1
- FILE_GET(FNum, i, PlayField8, FieldMax + 1);
-#else
- FILE_GET(FNum, i, &PlayField8, sizeof(PlayField8));
-#endif
-
- i = (LevelNumber) * ((long)(FieldMax) + 1) + 1 - HeaderSize;
- FILE_GET(FNum, i, &LInfo, sizeof(LInfo)); // store level info in an extra structure
-
- fclose(FNum);
-
- // --- On Error GoTo 0
-
- if (FieldMax < FileMax)
- DemoAvailable = True;
-
- ReadSignature();
-
- PlayField16 = REDIM_1D(sizeof(int), -FieldWidth, FieldMax);
-
- for (i = 0; i <= FieldMax; i++)
- {
- PlayField16[i] = PlayField8[i];
- DisPlayField[i] = PlayField8[i];
- PlayField8[i] = 0;
- }
-
-#if 0
- {
- int x, y;
-
- for (x = 0; x < 60; x++)
- printf("%02d.", x);
- printf("\n");
-
- for (x = 0; x < 60; x++)
- printf("...");
- printf("\n");
-
- for (y = 0; y < 24; y++)
- {
- for (x = 0; x < 60; x++)
- {
- printf("%02d.", PlayField16[y * 60 + x]);
- }
-
- printf("\n");
- }
- }
-#endif
-
- AnimationPosTable = REDIM_1D(sizeof(int), 0, LevelMax - 2 * FieldWidth);
- AnimationSubTable = REDIM_1D(sizeof(byte), 0, LevelMax - 2 * FieldWidth);
- TerminalState = REDIM_1D(sizeof(byte), FieldWidth, LevelMax - FieldWidth);
-
- GravityFlag = LInfo.InitialGravity;
- FreezeZonks = LInfo.InitialFreezeZonks;
-
- subRandomize();
-
- LevelLoaded = True;
-
- return;
-
-#if 0
-ReadLevelEH:
- Close();
-#endif
-}
-
-static void ReadDemo()
-{
- // int FNum, i;
- FILE *FNum;
- int i;
- // byte T;
-
- int RecordNumber = LevelNumber;
-
-#if 1
- RecordNumber = 1; // always "1" for "*.sp" style one level/demo files
-#endif
-
- FieldWidth = 60;
- FieldHeight = 24;
- HeaderSize = 96;
-
- FieldMax = (FieldWidth * FieldHeight) + HeaderSize - 1;
- LevelMax = (FieldWidth * FieldHeight) - 1;
-
- // --- On Error GoTo ReadDemoEH
-
- FileMax = FileLen(CurPath) - 1;
-
- PlayField8 = REDIM_1D(sizeof(byte), 0, FileMax + 1 - 1);
- DisPlayField = REDIM_1D(sizeof(byte), 0, FieldMax + 1 - 1);
-
- // FNum = FreeFile();
-
- FNum = fopen(CurPath, "rb");
-
- i = (RecordNumber - 1) * ((long)(FieldMax) + 1) + 1;
-#if 1
- FILE_GET(FNum, i, PlayField8, FileMax + 1);
-#else
- FILE_GET(FNum, i, &PlayField8, sizeof(PlayField8));
-#endif
-
- i = (RecordNumber) * ((long)(FieldMax) + 1) + 1 - HeaderSize;
- FILE_GET(FNum, i, &LInfo, sizeof(LInfo)); // store level info in an extra structure
-
- fclose(FNum);
-
- // --- On Error GoTo 0
-
- if (FieldMax < FileMax)
- DemoAvailable = True;
-
- ReadSignature();
-
- PlayField16 = REDIM_1D(sizeof(int), -FieldWidth, FieldMax);
-
- for (i = 0; i <= FieldMax; i++)
- {
- PlayField16[i] = PlayField8[i];
- DisPlayField[i] = PlayField8[i];
- PlayField8[i] = 0;
- }
-
- AnimationPosTable = REDIM_1D(sizeof(int), 0, LevelMax - 2 * FieldWidth);
- AnimationSubTable = REDIM_1D(sizeof(byte), 0, LevelMax - 2 * FieldWidth);
- TerminalState = REDIM_1D(sizeof(byte), 0, FieldMax + 1 - 1);
-
- DemoPointer = FieldMax + 1;
- DemoOffset = DemoPointer;
- DemoKeyRepeatCounter = 0;
-
- // DemoFlag = 1
- // DemoAvailable = True
-
- GravityFlag = LInfo.InitialGravity;
- FreezeZonks = LInfo.InitialFreezeZonks;
-
-#if 0
- printf("::: Globals.c: ReadDemo(): %d / %d\n", GravityFlag, FreezeZonks);
-#endif
-
-
-
-#if 0
- /* !!! TESTING BIG / LITTLE ENDIAN STUFF !!! */
- LInfo.DemoRandomSeed =
- LowByte(LInfo.DemoRandomSeed) << 8 |
- HighByte(LInfo.DemoRandomSeed);
- for (i = 0; i < 10; i++)
- LInfo.SpecialPort[i].PortLocation =
- LowByte(LInfo.SpecialPort[i].PortLocation) << 8 |
- HighByte(LInfo.SpecialPort[i].PortLocation);
-
- printf("::: swapping file bytes for DemoRandomSeed etc.\n");
-#else
- printf("::: keeping file bytes in (maybe wrong) 'native' order.\n");
-#endif
-
-#if 1
- printf("::: LInfo.DemoRandomSeed == %d\n", LInfo.DemoRandomSeed);
-#endif
-
-#if 0
- printf("::: LInfo.SpecialPortCount == %d\n", LInfo.SpecialPortCount);
- for (i = 0; i < LInfo.SpecialPortCount; i++)
- {
- int port_x = (LInfo.SpecialPort[i].PortLocation / 2) % FieldWidth;
- int port_y = (LInfo.SpecialPort[i].PortLocation / 2) / FieldWidth;
-
- printf("::: %d: port_location == %d => (%d, %d)\n",
- i, LInfo.SpecialPort[i].PortLocation, port_x, port_y);
- }
-#endif
-
- RandomSeed = LInfo.DemoRandomSeed;
-
-#if 0
- printf("::: SpeedByte == %d\n", LInfo.SpeedByte);
- printf("::: CheckSumByte == %d\n", LInfo.CheckSumByte);
- printf("::: RandomSeed == %d\n", RandomSeed);
-
-#if 0
- {
- int i;
-
- for (i = 0; i < 10; i++)
- printf("::: TEST random number: %d\n", subGetRandomNumber());
- }
-#endif
-
-#endif
-
- LevelLoaded = True;
-
- return;
-
-#if 0
-ReadDemoEH:
- Close();
-#endif
+ return StretchWidth * (si / FieldWidth);
}
void ReadLevel()
{
-#if 0
- OLD_ReadLevel();
-
- // return;
-#endif
-
copyInternalEngineVars_SP();
#if 1
LevelNumber = level_nr;
-#if 0
- if (!DemoFlag || !DemoAvailable)
- subRandomize();
-#endif
-
LevelLoaded = True;
}
int Min(int A, int B)
{
- int Min;
-
- if (A < B)
- Min = A;
- else
- Min = B;
-
- return Min;
+ return (A < B ? A : B);
}
int Max(int A, int B)
{
- int Max;
-
- if (A < B)
- Max = B;
- else
- Max = A;
-
- return Max;
+ return (A < B ? B : A);
}
#ifndef GLOBALS_H
#define GLOBALS_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
-#if 1
-#define ZoomFactor (2)
+#ifndef False
+#define False 0
+#define True (!False)
+#endif
+#define ScrollDelta ((long)1)
+
+#define ZoomFactor (2)
#define BaseWidth (ZoomFactor * 16)
#define StretchWidth (ZoomFactor * 16)
-#define StretchWidth2 (StretchWidth / 2)
#define TwoPixels (ZoomFactor * 2)
-#else
-
-#define BaseWidth (16)
-#define StretchWidth (16)
-#define StretchWidth2 (StretchWidth / 2)
-#define TwoPixels (2)
-
-#endif
-
// ----------------------------------------------------------------------------
// elements (stored in file and playfield)
// ----------------------------------------------------------------------------
-#if 1
-
#define fiSpace (0)
#define fiZonk (1)
#define fiBase (2)
#define fiExplosion (0x1F)
-#else
-
-#define fiBase (2)
-#define fiBug (25)
-#define fiElectron (24)
-#define fiExit (7)
-#define fiExplosion (0x1F)
-#define fiHWFirst (28)
-#define fiHWLast (37)
-#define fiHWMurphy (43)
-#define fiHWTrash1 (41)
-#define fiHWTrash2 (42)
-#define fiHardWare (6)
-#define fiInfotron (4)
-#define fiMurphy (3)
-#define fiOrangeDisk (8)
-#define fiPortAllDirections (23)
-#define fiPortDown (10)
-#define fiPortLeft (11)
-#define fiPortLeftAndRight (22)
-#define fiPortRight (9)
-#define fiPortUp (12)
-#define fiPortUpAndDown (21)
-#define fiRAM (5)
-#define fiRAMBottom (39)
-#define fiRAMLeft (26)
-#define fiRAMRight (27)
-#define fiRAMTop (38)
-#define fiRedDisk (20)
-#define fiSnikSnak (17)
-#define fiSpPortDown (14)
-#define fiSpPortLeft (15)
-#define fiSpPortRight (13)
-#define fiSpPortUp (16)
-#define fiSpace (0)
-#define fiTerminal (19)
-#define fiWallSpace (40)
-#define fiYellowDisk (18)
-#define fiZonk (1)
-
-#endif
-
// ----------------------------------------------------------------------------
// graphics and animations (used at runtime to display the elements)
// ----------------------------------------------------------------------------
-#if 1
-
// graphics and animations directly related to file elements
#define aniSpace IMG_EMPTY_SPACE
#define imgFrameHorizontal IMG_SP_FRAME_HORIZONTAL
#define imgFrameVertical IMG_SP_FRAME_VERTICAL
-#else
-
-#define aniMurphySleepLeft (71)
-#define aniMurphySleepRight (68)
-#define aniMurphyTouchDown (47)
-#define aniMurphyTouchLeft (95)
-#define aniMurphyTouchRight (94)
-#define aniMurphyTouchUp (46)
-#define aniMurphyYawn (56)
-#define aniPushLeft (45)
-#define aniPushRight (44)
-#define aniPushUpDown (79)
-
-#define aniSnikSnakDown (167)
-#define aniSnikSnakLeft (239)
-#define aniSnikSnakRight (247)
-#define aniSnikSnakUp (159)
-
-#define aniTerminal (0x80)
-#define aniTerminalActive (0x88)
-
-#define aniExplosionInfo (111)
-
-#define posFrameCorner (55)
-#define posFrameHorizontal (111)
-#define posFrameVertical (110)
-
-#endif
-
-
-#if 1
extern int aniFramesBug[], aniFramesZonkRollRight[], aniFramesZonkRollLeft[];
extern int aniFramesEatInfotronLeft[], aniFramesEatInfotronRight[];
extern int aniFramesTouchBase[], aniFramesTouchInfotron[], aniFramesTouchRedDisk[];
extern int aniFramesYellowDisk[], aniFramesOrangeDisk[], aniFramesRedDisk[];
-#else
-
-extern int *aniBug, *aniZonkRollRight, *aniZonkRollLeft;
-extern int *aniEatInfotronLeft, *aniEatInfotronRight;
-extern int *aniInfotronRollRight, *aniInfotronRollLeft;
-extern int *aniMurphyEatLeft, *aniMurphyEatRight;
-extern int *aniMurphyEatUpLeft, *aniMurphyEatUpRight, *aniSplitUpDown;
-extern int *aniMurphyExit;
-extern int *aniSnikSnak, *aniElectron, *aniExplosion;
-extern int *aniTouchBase, *aniTouchInfotron, *aniTouchRedDisk;
-extern int *aniYellowDisk, *aniOrangeDisk, *aniRedDisk;
-
-#endif
-
// ----------------------------------------------------------------------------
// input keys
// ----------------------------------------------------------------------------
-#if 1
-
#define keyNone (0)
#define keyUp (1)
#define keyLeft (2)
#define keySpaceRight (8)
#define keySpace (9)
-#else
-#define keyDown (3)
-#define keyLeft (2)
-#define keyNone (0)
-#define keyRight (4)
-#define keySpace (9)
-#define keySpaceDown (7)
-#define keySpaceLeft (6)
-#define keySpaceRight (8)
-#define keySpaceUp (5)
-#define keyUp (1)
+// ----------------------------------------------------------------------------
+// data structures
+// ----------------------------------------------------------------------------
+
+#ifndef HAS_LevelDescriptor
+typedef struct
+{
+ int Width;
+ int Height;
+ long OffSet;
+ long Size;
+} LevelDescriptor;
+#define HAS_LevelDescriptor
+#endif
+
+#ifndef HAS_SpecialPortType
+typedef struct
+{
+ short PortLocation; // = 2*(x+(y*60))
+ byte Gravity; // 1 = turn on, anything else (0) = turn off
+ byte FreezeZonks; // 2 = turn on, anything else (0) = turn off (1=off!)
+ byte FreezeEnemies; // 1 = turn on, anything else (0) = turn off
+ byte UnUsed;
+} SpecialPortType;
+#define HAS_SpecialPortType
+#endif
+#ifndef HAS_LevelInfoType
+typedef struct
+{
+ byte UnUsed[4];
+ byte InitialGravity; // 1=on, anything else (0) = off
+ byte Version; // SpeedFixVersion XOR &H20
+ char LevelTitle[23];
+ byte InitialFreezeZonks; // 2=on, anything else (0) = off. (1=off too!)
+ byte InfotronsNeeded;
+
+ // Number of Infotrons needed. 0 means that Supaplex will count the total
+ // amount of Infotrons in the level, and use the low byte of that number.
+ // (A multiple of 256 Infotrons will then result in 0-to-eat, etc.!)
+ byte SpecialPortCount; // Maximum 10 allowed!
+ SpecialPortType SpecialPort[10];
+ byte SpeedByte; // = Speed XOR Highbyte(RandomSeed)
+ byte CheckSumByte; // = CheckSum XOR SpeedByte
+ short DemoRandomSeed;
+} LevelInfoType;
+#define HAS_LevelInfoType
#endif
extern int GetX(int si);
extern int GetY(int si);
extern void InitGlobals();
-extern void InitPseudoCompileFlags();
extern void ReadLevel();
extern int aniSnikSnakTurningLeft[];
extern int aniSnikSnakTurningRight[];
-extern boolean Alignments;
-extern boolean BlockingSpeed;
-extern boolean Cracked;
-extern boolean Ctrl_Alt_Fix;
-extern boolean Dead_Code;
-extern boolean DebugSwitch;
-extern boolean DemoRecordFix;
-extern boolean EGA_Arg;
-extern boolean EP_DEBUG;
-extern boolean EP_DEMO;
-extern boolean EP_ENHANCE;
-extern boolean EP_OLD8;
-extern boolean EXTRASPEED;
-extern boolean HP_DEMO;
extern boolean LevelLoaded;
-extern boolean Level_Arg;
-extern boolean Level_Fix;
-extern boolean Norm_Time;
-extern boolean Original;
-extern boolean Protection;
-extern boolean Record_Fix;
-extern boolean Redundant;
-extern boolean SAVEGAME;
-extern boolean SafeRecord;
-extern boolean ScreenFix;
-extern boolean SpeedKeys;
-extern boolean TIMINGFIX;
-extern boolean Ver62;
-extern boolean Ver62test;
-extern boolean Ver63;
-extern boolean Ver64;
-extern boolean bCapturePane;
-extern byte *DisPlayField;
-extern byte *PlayField8;
-extern char *CurPath, *OrigPath, *TmpPath;
-extern currency DeltaT;
+
+extern boolean DemoAvailable;
+extern boolean menBorder;
+
extern int *PlayField16;
+extern byte *PlayField8;
+extern byte *DisPlayField;
extern int FieldHeight;
extern int FieldMax, LevelMax;
extern int LevelNumber;
extern int TimerVar;
extern short RandomSeed;
-extern long DeltaTPlay, DeltaTDemo;
+
extern long FileMax;
-extern long SignatureDelay;
+
+extern LevelInfoType LInfo;
+extern float Stretch;
+extern int ScrollMinX, ScrollMaxX, ScrollMinY, ScrollMaxY;
+extern int ScrollX, ScrollY;
#endif /* GLOBALS_H */
X = GetStretchX(si);
Y = GetStretchY(si - FieldWidth);
dx = bl & 0x7;
- StretchedSprites.BltImg(X, Y, aniSpace, 0);
- StretchedSprites.BltImg(X, Y + TwoPixels * (dx + 1), aniInfotron, dx);
+ DDSpriteBuffer_BltImg(X, Y, aniSpace, 0);
+ DDSpriteBuffer_BltImg(X, Y + TwoPixels * (dx + 1), aniInfotron, dx);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
bl = HighByte(PlayField16[si]) + 1;
X = GetStretchX(si + 1);
Y = GetStretchY(si);
dx = (bl & 0x7) + 1;
- StretchedSprites.BltImg(X, Y, aniSpace, 0);
- StretchedSprites.BltImg(X - (TwoPixels * dx), Y, aniInfotronRollLeft, dx - 1);
+ DDSpriteBuffer_BltImg(X, Y, aniSpace, 0);
+ DDSpriteBuffer_BltImg(X - (TwoPixels * dx), Y, aniInfotronRollLeft, dx - 1);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
bl = HighByte(PlayField16[si]) + 1; // get and increment sequence#
X = GetStretchX(si - 1);
Y = GetStretchY(si);
dx = (bl & 0x7) + 1;
- StretchedSprites.BltImg(X, Y, aniSpace, 0);
- StretchedSprites.BltImg(X + (TwoPixels * dx), Y, aniInfotronRollRight, dx - 1);
+ DDSpriteBuffer_BltImg(X, Y, aniSpace, 0);
+ DDSpriteBuffer_BltImg(X + (TwoPixels * dx), Y, aniInfotronRollRight, dx - 1);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
bl = HighByte(PlayField16[si]) + 1;
X = GetStretchX(si);
Y = GetStretchY(si);
dx = (bl & 0xF) + 1;
- StretchedSprites.BltImg(X, Y, aniSpace, 0);
- StretchedSprites.BltImg(X - (TwoPixels * dx), Y, aniInfotronRollLeft, dx - 1);
+ DDSpriteBuffer_BltImg(X, Y, aniSpace, 0);
+ DDSpriteBuffer_BltImg(X - (TwoPixels * dx), Y, aniInfotronRollLeft, dx - 1);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
bl = HighByte(PlayField16[si]) + 1; // retrieve and increment sequence#
X = GetStretchX(si);
Y = GetStretchY(si);
dx = (bl & 0x7) + 1;
- StretchedSprites.BltImg(X, Y, aniSpace, 0);
- StretchedSprites.BltImg(X + (TwoPixels * dx), Y, aniInfotronRollRight, dx - 1);
+ DDSpriteBuffer_BltImg(X, Y, aniSpace, 0);
+ DDSpriteBuffer_BltImg(X + (TwoPixels * dx), Y, aniInfotronRollRight, dx - 1);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
bl = HighByte(PlayField16[si]) + 1;
#ifndef INFOTRONS_H
#define INFOTRONS_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
void subInitGameConditions()
{
- bCapturePane = False;
-
MurphyVarFaceLeft = 0;
KillMurphyFlag = 0; // no "kill Murphy"
ExitToMenuFlag = 0;
MurphyScreenYPos = GetStretchY(si); // Murphy's screen y-position
// To Do: draw Murphy in location ax
- StretchedSprites.BltImg(MurphyScreenXPos, MurphyScreenYPos, aniMurphy, 0);
+ DDSpriteBuffer_BltImg(MurphyScreenXPos, MurphyScreenYPos, aniMurphy, 0);
MurphyScreenXPos = MurphyScreenXPos / Stretch;
MurphyScreenYPos = MurphyScreenYPos / Stretch;
void subFetchAndInitLevelB()
{
- boolean UpdatePlayTime;
-
- data_scr_demo = 0;
- UpdatePlayTime = (0 == demo_stopped ? True : False);
- demo_stopped = 0;
-
- subFetchAndInitLevelA(UpdatePlayTime);
+ subFetchAndInitLevelA();
}
-void subFetchAndInitLevelA(boolean UpdatePlayTime)
+void subFetchAndInitLevelA()
{
- D_ModeFlag = 0; // 1=debug D pressed (CPU use)
- if (0 != demo_stopped) // 1=demo, 0=game
- DemoFlag = 1;
-
GameBusyFlag = 0; // restore scissors too
subFetchAndInitLevel(); // Fetch and initialize a level
GameBusyFlag = 1; // no free screen write
- if (1 <= demo_stopped)
- {
- if (1 == demo_stopped)
- {
- DemoFlag = 0; // 1=demo, 0=game
- demo_stopped = demo_stopped + 1;
- }
- else
- {
- DemoFlag = 0; // 1=demo, 0=game
- }
- }
-
DemoKeyCode = 0; // delete last demo key!
- if (DemoFlag != 0) // don't allow during game! only in Demo
- {
- DemoOffset = DemoPointer; // init demo pointer
- DemoKeyRepeatCounter = 1;
- subGetNextDemoKey(); // get next demo byte
- }
}
void subFetchAndInitLevel()
ReadLevel(); // Read LEVELS.DAT
- if (RecordDemoFlag == 1)
- RecDemoRandomSeed = RandomSeed;
-
GameBusyFlag = -GameBusyFlag; // make <>1
InfoCountInLevel = subConvertToEasySymbols(); // Convert to easy symbols
+
GameBusyFlag = -GameBusyFlag; // restore
subDisplayLevel(); // Paint (Init) game field
#ifndef INITGAMECONDITIONS_H
#define INITGAMECONDITIONS_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
extern void InitMurphyPosB(int);
extern void ResetInfotronsNeeded(int);
extern void subFetchAndInitLevel();
-extern void subFetchAndInitLevelA(boolean);
+extern void subFetchAndInitLevelA();
extern void subFetchAndInitLevelB();
extern void subInitGameConditions();
#include "Input.h"
-DemoBufferObject DemoBuffer;
-boolean KeyState[255 + 1];
-
int map_key_RND_to_SP(int key)
{
if (key & KEY_BUTTON)
#ifndef INPUT_H
#define INPUT_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
-extern DemoBufferObject DemoBuffer;
-extern boolean KeyState[255 + 1];
-
extern void subProcessKeyboardInput(byte);
#endif /* INPUT_H */
#include "MainForm.h"
-#if 1
-
-static void DrawFrame(int Delta);
-static void ReStretch(float NewStretch);
-static void picPane_Paint();
-static void picViewPort_Resize();
-static void menBorder_Click();
-
-#else
-static void CleanTempDir(char *TmpDir);
-static void CountDown(long HalfSeconds, int bDisplayBar);
static void DrawFrame(int Delta);
-static void DrawPauseLayer(long Layer);
-static void FillFileList(char *Path);
-static void FillLevelList(char *Path, int LevelIndex);
-static void FocusTim_Timer();
-static void Form_KeyDown(int KeyCode, int Shift);
-static void Form_KeyUp(int KeyCode, int Shift);
-static void Form_Paint();
-static int GetFileNameToSave();
-static long GetHwndFromTempFileName(char *TmpFile);
-static char * GetMyTempFileName();
-static void GetSettings();
-static char * GetSpeedDescriptionFPS(currency FrameDelayUS);
-static int GetSpeedIndex(long DelayUS);
-static char * GetValidTempPath();
-static long Get_LastOpenFilter();
-static long Get_LastSaveFilter();
-static int InitSpeeds();
-static boolean InstanceStillRunning(char *TmpFile);
-static void Let_LastOpenFilter(long NewVal);
-static void Let_LastSaveFilter(long NewVal);
-static void LoadKeyIndicators();
-static void LoadMenus();
-static void PanelTim_Timer();
static void ReStretch(float NewStretch);
-static void RestoreFrame();
-static boolean SaveAs();
-static void SaveSettings();
-static void SetScrollEdges();
-static void UpdateDeltaT();
-static void cmbFile_Click();
-static void cmbFile_KeyDown(int KeyCode, int Shift);
-static void cmbFile_KeyUp(int KeyCode, int Shift);
-static void cmbLevel_Click();
-static void cmbLevel_KeyUp(int KeyCode, int Shift);
-static void cmblevel_KeyDown(int KeyCode, int Shift);
-static void cmdPause_Click();
-static void cmdPause_MouseUp(int Button, int Shift, float X, float Y);
-static void cmdPlayAll_Click();
-static void cmdPlayAll_MouseUp(int Button, int Shift, float X, float Y);
-static void cmdPlayDemo_Click();
-static void cmdPlayDemo_MouseUp(int Button, int Shift, float X, float Y);
-static void cmdPlay_Click();
-static void cmdPlay_MouseUp(int Button, int Shift, float X, float Y);
-static void cmdRecordDemo_Click();
-static void cmdRecordDemo_MouseUp(int Button, int Shift, float X, float Y);
-static void cmdStop_Click();
-static void cmdStop_MouseUp(int Button, int Shift, float X, float Y);
-static void fpsTim_Timer();
-static void menAbout_Click();
-static void menAutoScroll_Click();
-static void menBorder_Click();
-static void menCopy_Click();
-static void menEnOff_Click();
-static void menEnOn_Click();
-static void menExit_Click();
-static void menFaster_Click();
-static void menGravOff_Click();
-static void menGravOn_Click();
-static void menNewStd_Click();
-static void menNew_Click();
-static void menOpen_Click();
-static void menOptions_Click();
-static void menPanel_Click();
-static void menPaste_Click();
-static void menPause_Click();
-static void menPlayAll_Click();
-static void menPlayDemo_Click();
-static void menPlay_Click();
-static void menReRecordDemo_Click();
-static void menRec_Click();
-static void menRemSP_Click();
-static void menRestoreBorder_Click();
-static void menSaveAs_Click();
-static void menSave_Click();
-static void menSelectAll_Click();
-static void menShowLInfo_Click();
-static void menSlower_Click();
-static void menSoundFX_Click();
-static void menStretch_Click(int Index);
-static void menToolTips_Click();
-static void menTrim_Click();
-static void menZonkOff_Click();
-static void menZonkOn_Click();
-static void picKeys_MouseUp(int Button, int Shift, float X, float Y);
-static void picMenu_Click();
-static void picPane_KeyDown(int KeyCode, int Shift);
-static void picPane_KeyUp(int KeyCode, int Shift);
-static void picPane_MouseDown(int Button, int Shift, float X, float Y);
-static void picPane_MouseMove(int Button, int Shift, float X, float Y);
-static void picPane_MouseUp(int Button, int Shift, float X, float Y);
-static void picPane_Paint();
-static void picViewPort_MouseUp(int Button, int Shift, float X, float Y);
-static void picViewPort_Paint();
static void picViewPort_Resize();
-#endif
-
void DrawField(int X, int Y);
void DrawFieldAnimated(int X, int Y);
void DrawFieldNoAnimated(int X, int Y);
-// --- VERSION 5.00
-// --- Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX"
-// --- Begin VB.Form MainForm
-// --- AutoRedraw = -1 'True // True
-// --- Caption = "MegaPlex"
-// --- ClientHeight = 5850
-// --- ClientLeft = 2580
-// --- ClientTop = 2205
-// --- ClientWidth = 9285
-// --- Icon = "MainForm.frx":0000
-// --- LinkTopic = "Form1"
-// --- ScaleHeight = 390
-// --- ScaleMode = 3 'Pixel // Pixel
-// --- ScaleWidth = 619
-// --- Begin VB.Timer fpsTim
-// --- Enabled = 0 'False // False
-// --- Interval = 200
-// --- Left = 1380
-// --- Top = 2940
-// --- End
-// --- Begin VB.Timer FocusTim
-// --- Interval = 50
-// --- Left = 1920
-// --- Top = 2940
-// --- End
-// --- Begin MSComDlg.CommonDialog cmDlg
-// --- Left = 240
-// --- Top = 2880
-// --- _ExtentX = 847
-// --- _ExtentY = 847
-// --- _Version = 393216
-// --- CancelError = -1 'True // True
-// --- End
-// --- Begin VB.Timer PanelTim
-// --- Enabled = 0 'False // False
-// --- Interval = 5
-// --- Left = 840
-// --- Top = 2940
-// --- End
-// --- Begin VB.Frame Panel
-// --- Height = 1140
-// --- Left = 180
-// --- TabIndex = 2
-// --- Top = 3540
-// --- Width = 9015
-// --- Begin VB.CommandButton cmdPlay
-// --- DisabledPicture = "MainForm.frx":0442
-// --- DownPicture = "MainForm.frx":058C
-// --- Height = 345
-// --- Left = 5820
-// --- Picture = "MainForm.frx":06D6
-// --- Style = 1 'Graphical // Graphical
-// --- TabIndex = 16
-// --- TabStop = 0 'False // False
-// --- Top = 240
-// --- Width = 495
-// --- End
-// --- Begin VB.CommandButton cmdStop
-// --- DisabledPicture = "MainForm.frx":0820
-// --- DownPicture = "MainForm.frx":096A
-// --- Enabled = 0 'False // False
-// --- Height = 345
-// --- Left = 7020
-// --- Picture = "MainForm.frx":0AB4
-// --- Style = 1 'Graphical // Graphical
-// --- TabIndex = 15
-// --- TabStop = 0 'False // False
-// --- Top = 240
-// --- Width = 495
-// --- End
-// --- Begin VB.CommandButton cmdPlayDemo
-// --- DisabledPicture = "MainForm.frx":0BFE
-// --- DownPicture = "MainForm.frx":0D48
-// --- Enabled = 0 'False // False
-// --- Height = 345
-// --- Left = 7740
-// --- Picture = "MainForm.frx":0E92
-// --- Style = 1 'Graphical // Graphical
-// --- TabIndex = 14
-// --- TabStop = 0 'False // False
-// --- Top = 240
-// --- Width = 495
-// --- End
-// --- Begin VB.CommandButton cmdPause
-// --- DisabledPicture = "MainForm.frx":0FDC
-// --- DownPicture = "MainForm.frx":1126
-// --- Enabled = 0 'False // False
-// --- Height = 345
-// --- Left = 6420
-// --- Picture = "MainForm.frx":1270
-// --- Style = 1 'Graphical // Graphical
-// --- TabIndex = 13
-// --- TabStop = 0 'False // False
-// --- Top = 240
-// --- Width = 495
-// --- End
-// --- Begin VB.CommandButton cmdRecordDemo
-// --- DisabledPicture = "MainForm.frx":13BA
-// --- DownPicture = "MainForm.frx":1504
-// --- Height = 345
-// --- Left = 8340
-// --- Picture = "MainForm.frx":164E
-// --- Style = 1 'Graphical // Graphical
-// --- TabIndex = 12
-// --- TabStop = 0 'False // False
-// --- Top = 240
-// --- Width = 495
-// --- End
-// --- Begin VB.ComboBox cmbFile
-// --- BackColor = &H00000000&
-// --- BeginProperty Font
-// --- Name = "Fixedsys"
-// --- Size = 9
-// --- Charset = 0
-// --- Weight = 400
-// --- Underline = 0 'False // False
-// --- Italic = 0 'False // False
-// --- Strikethrough = 0 'False // False
-// --- EndProperty
-// --- ForeColor = &H00FF8080&
-// --- Height = 345
-// --- Left = 120
-// --- Sorted = -1 'True // True
-// --- Style = 2 'Dropdown List // Dropdown List
-// --- TabIndex = 9
-// --- Top = 240
-// --- Width = 3015
-// --- End
-// --- Begin VB.ComboBox cmbLevel
-// --- BackColor = &H00000000&
-// --- BeginProperty Font
-// --- Name = "Fixedsys"
-// --- Size = 9
-// --- Charset = 0
-// --- Weight = 400
-// --- Underline = 0 'False // False
-// --- Italic = 0 'False // False
-// --- Strikethrough = 0 'False // False
-// --- EndProperty
-// --- ForeColor = &H00FF8080&
-// --- Height = 345
-// --- Left = 840
-// --- Sorted = -1 'True // True
-// --- Style = 2 'Dropdown List // Dropdown List
-// --- TabIndex = 5
-// --- Top = 660
-// --- Width = 4035
-// --- End
-// --- Begin VB.PictureBox picKeys
-// --- BackColor = &H00008080&
-// --- BorderStyle = 0 'None // None
-// --- Height = 330
-// --- Left = 5400
-// --- ScaleHeight = 22
-// --- ScaleMode = 3 'Pixel // Pixel
-// --- ScaleWidth = 22
-// --- TabIndex = 4
-// --- TabStop = 0 'False // False
-// --- Top = 240
-// --- Width = 330
-// --- Begin VB.Shape shpKey
-// --- FillColor = &H00008000&
-// --- FillStyle = 0 'Solid // Solid
-// --- Height = 120
-// --- Index = 1
-// --- Left = 0
-// --- Shape = 5 'Rounded Square // Rounded Square
-// --- Top = 0
-// --- Width = 120
-// --- End
-// --- End
-// --- Begin VB.CommandButton cmdPlayAll
-// --- Caption = "Play All Demos"
-// --- Enabled = 0 'False // False
-// --- Height = 345
-// --- Left = 7380
-// --- TabIndex = 3
-// --- TabStop = 0 'False // False
-// --- Top = 960
-// --- Visible = 0 'False // False
-// --- Width = 1395
-// --- End
-// --- Begin VB.Shape shpProgress
-// --- BackColor = &H00800000&
-// --- BackStyle = 1 'Opaque // Opaque
-// --- Height = 75
-// --- Left = 120
-// --- Top = 1020
-// --- Visible = 0 'False // False
-// --- Width = 7515
-// --- End
-// --- Begin VB.Label lblStatus
-// --- Alignment = 2 'Center // Center
-// --- BorderStyle = 1 'Fixed Single // Fixed Single
-// --- Caption = "MegaPlex"
-// --- BeginProperty Font
-// --- Name = "Fixedsys"
-// --- Size = 9
-// --- Charset = 0
-// --- Weight = 400
-// --- Underline = 0 'False // False
-// --- Italic = 0 'False // False
-// --- Strikethrough = 0 'False // False
-// --- EndProperty
-// --- Height = 345
-// --- Left = 3240
-// --- TabIndex = 11
-// --- Top = 240
-// --- Width = 2055
-// --- End
-// --- Begin VB.Image Image2
-// --- Height = 240
-// --- Left = 6780
-// --- Picture = "MainForm.frx":1BD8
-// --- Top = 720
-// --- Width = 240
-// --- End
-// --- Begin VB.Image Image1
-// --- Height = 240
-// --- Left = 5880
-// --- Picture = "MainForm.frx":1D22
-// --- Top = 720
-// --- Width = 240
-// --- End
-// --- Begin VB.Label lblFps
-// --- Alignment = 2 'Center // Center
-// --- BackColor = &H00000000&
-// --- BorderStyle = 1 'Fixed Single // Fixed Single
-// --- BeginProperty Font
-// --- Name = "Fixedsys"
-// --- Size = 9
-// --- Charset = 0
-// --- Weight = 400
-// --- Underline = 0 'False // False
-// --- Italic = 0 'False // False
-// --- Strikethrough = 0 'False // False
-// --- EndProperty
-// --- ForeColor = &H0000C0C0&
-// --- Height = 345
-// --- Left = 120
-// --- TabIndex = 10
-// --- Top = 660
-// --- Width = 615
-// --- End
-// --- Begin VB.Label lblInfoCount
-// --- Alignment = 2 'Center // Center
-// --- BackColor = &H00000000&
-// --- BorderStyle = 1 'Fixed Single // Fixed Single
-// --- BeginProperty Font
-// --- Name = "Fixedsys"
-// --- Size = 9
-// --- Charset = 0
-// --- Weight = 400
-// --- Underline = 0 'False // False
-// --- Italic = 0 'False // False
-// --- Strikethrough = 0 'False // False
-// --- EndProperty
-// --- ForeColor = &H00FF8080&
-// --- Height = 345
-// --- Left = 5040
-// --- TabIndex = 8
-// --- Top = 660
-// --- Width = 795
-// --- End
-// --- Begin VB.Label lblRedDiskCount
-// --- Alignment = 2 'Center // Center
-// --- BackColor = &H00000000&
-// --- BorderStyle = 1 'Fixed Single // Fixed Single
-// --- BeginProperty Font
-// --- Name = "Fixedsys"
-// --- Size = 9
-// --- Charset = 0
-// --- Weight = 400
-// --- Underline = 0 'False // False
-// --- Italic = 0 'False // False
-// --- Strikethrough = 0 'False // False
-// --- EndProperty
-// --- ForeColor = &H000000FF&
-// --- Height = 345
-// --- Left = 6240
-// --- TabIndex = 7
-// --- Top = 660
-// --- Width = 495
-// --- End
-// --- Begin VB.Label lblFrameCount
-// --- Alignment = 2 'Center // Center
-// --- BorderStyle = 1 'Fixed Single // Fixed Single
-// --- Caption = "0"
-// --- BeginProperty Font
-// --- Name = "Fixedsys"
-// --- Size = 9
-// --- Charset = 0
-// --- Weight = 400
-// --- Underline = 0 'False // False
-// --- Italic = 0 'False // False
-// --- Strikethrough = 0 'False // False
-// --- EndProperty
-// --- Height = 345
-// --- Left = 7200
-// --- TabIndex = 6
-// --- Top = 660
-// --- Width = 1635
-// --- End
-// --- End
-// --- Begin VB.PictureBox picViewPort
-// --- BorderStyle = 0 'None // None
-// --- Height = 2535
-// --- Left = 180
-// --- ScaleHeight = 169
-// --- ScaleMode = 3 'Pixel // Pixel
-// --- ScaleWidth = 265
-// --- TabIndex = 0
-// --- TabStop = 0 'False // False
-// --- Top = 180
-// --- Width = 3975
-// --- Begin VB.PictureBox picPane
-// --- AutoSize = -1 'True // True
-// --- BackColor = &H00000000&
-// --- BorderStyle = 0 'None // None
-// --- DrawWidth = 3
-// --- Height = 1635
-// --- Left = 240
-// --- ScaleHeight = 109
-// --- ScaleMode = 3 'Pixel // Pixel
-// --- ScaleWidth = 129
-// --- TabIndex = 1
-// --- Top = 180
-// --- Width = 1935
-// --- End
-// --- Begin VB.PictureBox picFrame
-// --- Height = 915
-// --- Left = 1320
-// --- ScaleHeight = 57
-// --- ScaleMode = 3 'Pixel // Pixel
-// --- ScaleWidth = 81
-// --- TabIndex = 17
-// --- TabStop = 0 'False // False
-// --- Top = 1200
-// --- Width = 1275
-// --- End
-// --- End
-// --- Begin VB.Menu menFile
-// --- Caption = "&File"
-// --- Begin VB.Menu menNewStd
-// --- Caption = "New S&tandard Level"
-// --- End
-// --- Begin VB.Menu menNew
-// --- Caption = "&New Level"
-// --- End
-// --- Begin VB.Menu menDash5
-// --- Caption = "-"
-// --- End
-// --- Begin VB.Menu menOpen
-// --- Caption = "&Open"
-// --- End
-// --- Begin VB.Menu menSave
-// --- Caption = "&Save"
-// --- Shortcut = ^S
-// --- End
-// --- Begin VB.Menu menSaveAs
-// --- Caption = "Save &As ..."
-// --- End
-// --- Begin VB.Menu menDash4
-// --- Caption = "-"
-// --- End
-// --- Begin VB.Menu menExit
-// --- Caption = "E&xit"
-// --- Shortcut = ^Q
-// --- End
-// --- End
-// --- Begin VB.Menu menEditMain
-// --- Caption = "&Edit"
-// --- Begin VB.Menu menEdit
-// --- Caption = "&Edit Level"
-// --- End
-// --- Begin VB.Menu menDash3
-// --- Caption = "-"
-// --- End
-// --- Begin VB.Menu menCopy
-// --- Caption = "&Copy"
-// --- Shortcut = ^C
-// --- End
-// --- Begin VB.Menu menPaste
-// --- Caption = "&Paste"
-// --- Shortcut = ^V
-// --- End
-// --- Begin VB.Menu menTrim
-// --- Caption = "&Trim"
-// --- Shortcut = ^T
-// --- End
-// --- Begin VB.Menu menDash8
-// --- Caption = "-"
-// --- Index = 1
-// --- End
-// --- Begin VB.Menu menSelectAll
-// --- Caption = "Select &All"
-// --- Shortcut = ^A
-// --- End
-// --- Begin VB.Menu menDash6
-// --- Caption = "-"
-// --- End
-// --- Begin VB.Menu menRestoreBorder
-// --- Caption = "Restore &border"
-// --- Shortcut = ^B
-// --- End
-// --- Begin VB.Menu menSp
-// --- Caption = "Special Port"
-// --- Begin VB.Menu menGravOn
-// --- Caption = "&Gravity On"
-// --- End
-// --- Begin VB.Menu menZonkOn
-// --- Caption = "Freeze &Zonks On"
-// --- End
-// --- Begin VB.Menu menEnOn
-// --- Caption = "Freeze &Enemies On"
-// --- End
-// --- Begin VB.Menu menDash7
-// --- Caption = "-"
-// --- End
-// --- Begin VB.Menu menGravOff
-// --- Caption = "Gravity &Off"
-// --- End
-// --- Begin VB.Menu menZonkOff
-// --- Caption = "Freeze Zon&ks Off"
-// --- End
-// --- Begin VB.Menu menEnOff
-// --- Caption = "Freeze E&nemies Off"
-// --- End
-// --- Begin VB.Menu menDash10
-// --- Caption = "-"
-// --- End
-// --- Begin VB.Menu menRemSP
-// --- Caption = "&Remove (Make Normal Port)"
-// --- End
-// --- End
-// --- End
-// --- Begin VB.Menu menView
-// --- Caption = "&View"
-// --- Begin VB.Menu menZoom
-// --- Caption = "&Zoom"
-// --- Begin VB.Menu menStretch
-// --- Caption = "0.25 : 1"
-// --- Index = 1
-// --- End
-// --- End
-// --- Begin VB.Menu menBorder
-// --- Caption = "Show &Border"
-// --- Checked = -1 'True // True
-// --- End
-// --- Begin VB.Menu menPanel
-// --- Caption = "Show &Panel"
-// --- Checked = -1 'True // True
-// --- End
-// --- Begin VB.Menu menAutoScroll
-// --- Caption = "&Autoscroll"
-// --- Checked = -1 'True // True
-// --- End
-// --- Begin VB.Menu menDash9
-// --- Caption = "-"
-// --- End
-// --- Begin VB.Menu menShowLInfo
-// --- Caption = "Show Level &Info"
-// --- End
-// --- End
-// --- Begin VB.Menu menSound
-// --- Caption = "&Sound"
-// --- Begin VB.Menu menSoundFX
-// --- Caption = "&FX"
-// --- End
-// --- Begin VB.Menu menMusic
-// --- Caption = "&Music"
-// --- Enabled = 0 'False // False
-// --- End
-// --- End
-// --- Begin VB.Menu menSpeed
-// --- Caption = "Speed"
-// --- Begin VB.Menu menSpeedPlay
-// --- Caption = "Game play"
-// --- Index = 11
-// --- Begin VB.Menu menPlaySpeed
-// --- Caption = "1"
-// --- Index = 1
-// --- End
-// --- End
-// --- Begin VB.Menu menSpeedDemo
-// --- Caption = "Demo playback"
-// --- Begin VB.Menu menDemoSpeed
-// --- Caption = "1"
-// --- Index = 1
-// --- End
-// --- End
-// --- Begin VB.Menu menSpeedDash
-// --- Caption = "-"
-// --- End
-// --- Begin VB.Menu menFaster
-// --- Caption = "Faster (Pg Up)"
-// --- End
-// --- Begin VB.Menu menSlower
-// --- Caption = "Slower (Pg Down)"
-// --- End
-// --- End
-// --- Begin VB.Menu menRun
-// --- Caption = "&Play"
-// --- Begin VB.Menu menPlay
-// --- Caption = "P&lay Game (Space)"
-// --- End
-// --- Begin VB.Menu menPause
-// --- Caption = "&Pause (P)"
-// --- Enabled = 0 'False // False
-// --- End
-// --- Begin VB.Menu menStop
-// --- Caption = "&Stop (Q)"
-// --- Enabled = 0 'False // False
-// --- End
-// --- Begin VB.Menu menDash0
-// --- Caption = "-"
-// --- End
-// --- Begin VB.Menu menRec
-// --- Caption = "&Record Demo (Ctrl+R)"
-// --- End
-// --- Begin VB.Menu menPlayDemo
-// --- Caption = "Play &Demo (Ctrl+Space)"
-// --- End
-// --- Begin VB.Menu menPlayAll
-// --- Caption = "Play &All Demos"
-// --- End
-// --- End
-// --- Begin VB.Menu menOptionsMain
-// --- Caption = "&Options"
-// --- Begin VB.Menu menOptions
-// --- Caption = "&Options ..."
-// --- End
-// --- End
-// --- Begin VB.Menu menHelp
-// --- Caption = "Help"
-// --- Begin VB.Menu menToolTips
-// --- Caption = "Show &ToolTips"
-// --- End
-// --- Begin VB.Menu menDash1
-// --- Caption = "-"
-// --- End
-// --- Begin VB.Menu menAbout
-// --- Caption = "&About MegaPlex"
-// --- End
-// --- End
-// --- End
-
-// static char *VB_Name = "MainForm";
-// static boolean VB_GlobalNameSpace = False;
-// static boolean VB_Creatable = False;
-// static boolean VB_PredeclaredId = True;
-// static boolean VB_Exposed = False;
-
-// --- Option Explicit
-// --- Option Compare Text
-
-#if 0
-
-long SetParent(long hWndChild, long hWndNewParent);
-long SetWindowLong(long hWnd, long nIndex, long dwNewLong);
-long GetWindowLong(long hWnd, long nIndex);
-#if 0
-long GetTempPath(long nBufferLength, char *lpBuffer);
-#endif
-long GetWindowText(long hWnd, char *lpString, long cch);
-
-#endif
-
-#if 0
-
-#define GWL_STYLE ((-16))
-#define WS_CHILD (0x40000000)
-#define WS_POPUP (0x80000000)
-
-#endif
-
-// [UNCOMMENTED] Dim StretchWidth2&
-
-char *MpxBmp;
-int OldPointer;
-long OSX, OSY, MDX, MDY;
-int MouseButton;
-
-int PanelSeq;
-
-boolean Loaded, DemosAvailable;
-
-#define nSpeedCount (17)
-int SpeedsByDelayUS[nSpeedCount + 1];
-#define DefaultSpeedIndex (12)
-
-currency LastTick, LastFrame;
-TickCountObject T;
-
-const char *AppTitle = "MegaPlex";
-
-#if 0
-
-static char *GetSpeedDescriptionFPS(currency FrameDelayUS)
-{
- static char *GetSpeedDescriptionFPS;
-
- long FPS;
-
- if (FrameDelayUS == 0)
- {
- GetSpeedDescriptionFPS = "Fastest possible";
- return GetSpeedDescriptionFPS;
- }
-
- if (FrameDelayUS < 0)
- {
- GetSpeedDescriptionFPS = "! display (even faster)";
- return GetSpeedDescriptionFPS;
- }
-
- FPS = 1000000 / FrameDelayUS;
- GetSpeedDescriptionFPS = CAT(INT_TO_STR(FPS), " fps");
- if (35 == FPS)
- GetSpeedDescriptionFPS = CAT(GetSpeedDescriptionFPS, "(Default)");
-
- return GetSpeedDescriptionFPS;
-}
-
-static int InitSpeeds()
-{
- static int InitSpeeds;
-
- SpeedsByDelayUS[1] = -1; // no display
- SpeedsByDelayUS[2] = 0; // fastest possible
- SpeedsByDelayUS[3] = 1000000 / 700; // 700 fps
- SpeedsByDelayUS[4] = 1000000 / 500; // 500 fps
- SpeedsByDelayUS[5] = 1000000 / 350; // 350 fps
- SpeedsByDelayUS[6] = 1000000 / 250; // 250 fps
- SpeedsByDelayUS[7] = 1000000 / 200; // etc.
- SpeedsByDelayUS[8] = 1000000 / 150;
- SpeedsByDelayUS[9] = 1000000 / 100;
- SpeedsByDelayUS[10] = 1000000 / 70;
- SpeedsByDelayUS[11] = 1000000 / 50;
- SpeedsByDelayUS[12] = 1000000 / 35; // default
- SpeedsByDelayUS[13] = 1000000 / 25;
- SpeedsByDelayUS[14] = 1000000 / 20;
- SpeedsByDelayUS[15] = 1000000 / 10;
- SpeedsByDelayUS[16] = 1000000 / 5;
- SpeedsByDelayUS[17] = 1000000 / 1;
-
- return InitSpeeds;
-}
-
-static int GetSpeedIndex(long DelayUS)
-{
- static int GetSpeedIndex;
-
- int i;
- long Diff, MinDiff;
- int MinIdx;
-
- MinIdx = DefaultSpeedIndex;
- MinDiff = 1000000;
- for (i = 1; i <= nSpeedCount; i++)
- {
- Diff = Abs(DelayUS - SpeedsByDelayUS[i]);
- if (Diff < MinDiff)
- {
- MinDiff = Diff;
- MinIdx = i;
- }
- }
-
- GetSpeedIndex = MinIdx;
-
- return GetSpeedIndex;
-}
-
-static long Get_LastOpenFilter()
-{
- static long LastOpenFilter;
-
- SettingsObject s;
-
- LastOpenFilter = s.Read("LastOpenFilter", 1);
-
- return LastOpenFilter;
-}
-
-static void Let_LastOpenFilter(long NewVal)
-{
- SettingsObject s;
-
- SettingsObject_Save("LastOpenFilter", NewVal);
-}
-
-static long Get_LastSaveFilter()
-{
- static long LastSaveFilter;
-
- SettingsObject s;
-
- LastSaveFilter = s.Read("LastSaveFilter", 1);
-
- return LastSaveFilter;
-}
-
-static void Let_LastSaveFilter(long NewVal)
-{
- SettingsObject s;
-
- SettingsObject_Save("LastSaveFilter", NewVal);
-}
-
-#endif
-
-static void CountDown(long HalfSeconds, int bDisplayBar)
-{
-
-#if 0
-
- long i;
- int k;
- long dT, Delta;
- long LeftPos, TopPos, RightPos, MaxWidth; // , MaxHeight&
-
- dT = HalfSeconds * 500;
- Delta = dT / 200;
- LeftPos = cmbFile.left;
- TopPos = cmbFile.top - shpProgress.Height - cmbFile.top / 8;
- RightPos = lblFrameCount.left + lblFrameCount.Width;
- MaxWidth = RightPos - LeftPos;
- // MaxHeight = lblFrameCount.Top - TopPos + lblFrameCount.Height + 4
- if (bDisplayBar)
- {
- shpProgress.Move(LeftPos, TopPos, 0); // , MaxHeight
- shpProgress.Visible = True;
- }
-
- for (i = 1; i <= 200; i++)
- {
- // lblFrameCount = i
- if (bDisplayBar)
- {
- if (i < 101)
- {
- shpProgress.Width = MaxWidth * i / 100;
- }
- else
- {
- k = MaxWidth * (i - 100) / 100;
- shpProgress.Move(k, TopPos, RightPos - k);
- }
- }
-
- T.DelayMS(Delta, False);
- }
-
- shpProgress.Visible = False;
- // lblFrameCount = 0
-
-#endif
-
-}
-
-#if 0
-
-static char *GetValidTempPath()
-{
- static char *GetValidTempPath;
-
- char *TP;
- long nSize, L;
-
- GetValidTempPath = "";
- nSize = 255;
- TP = String(nSize, Chr(32));
- L = GetTempPath(nSize, TP);
- if (nSize < L)
- {
- // buffer was too small, retry with a properly sized buffer:
- nSize = L;
- TP = String(nSize, Chr(32));
- L = GetTempPath(nSize, TP);
- }
-
- TP = SlashLess(left(TP, L));
- if ((0 == L) || (! IsDir(TP)))
- {
- // no valid temp path can be retrieved from the system --> create our own
- TP = CAT(WithSlash(App.Path), "Temp");
- if (! IsDir(TP))
- {
-
- // --- On Error Resume Next
- MkDir(TP);
- if (! IS_NOTHING(&Err, sizeof(Err)))
- {
- MESSAGE_BOX("an error occured"); // MsgBox "cannot create directory for temporary files " & TP, vbCritical, "MegaPlex - Error";
- return GetValidTempPath;
- }
-
- // --- On Error GoTo 0
-
- }
- }
-
- if (IsDir(TP))
- GetValidTempPath = TP;
-
- return GetValidTempPath;
-}
-
-static char *GetMyTempFileName()
-{
- static char *GetMyTempFileName;
-
- char *T;
-
- (char *)T = Hex(hWnd);
- while (Len(T) < 8)
- {
- T = CAT("0", T);
- }
-
- GetMyTempFileName = CAT("tmp0x", CAT((char *)T, ".mpx"));
-
- return GetMyTempFileName;
-}
-
-static long GetHwndFromTempFileName(char *TmpFile)
-{
- static long GetHwndFromTempFileName;
-
- char *FN;
- long LP;
- int L;
- char *NumString;
-
- GetHwndFromTempFileName = 0;
- FN = StripFileName(TmpFile);
- LP = Len("tmp0x");
- L = Len(TmpFile);
- if (LP < L)
- return GetHwndFromTempFileName;
-
- L = L - LP;
- NumString = right(FN, L - LP);
- if (8 < L)
- NumString = left(NumString, 8);
-
- NumString = CAT("&H", NumString);
- GetHwndFromTempFileName = Val(NumString);
-
- return GetHwndFromTempFileName;
-}
-
-static void CleanTempDir(char *TmpDir)
-{
- char *FN, *MFN;
-
- MFN = GetMyTempFileName();
- MayKill(CAT(WithSlash(TmpDir), MFN));
- FN = Dir(CAT(WithSlash(TmpDir), "tmp0x*.mpx"));
- while (FN != "")
- {
- if (STRING_IS_LIKE(FN, "tmp0x*.mpx"))
- {
- if (! InstanceStillRunning(FN))
- MayKill(CAT(WithSlash(TmpDir), FN));
- }
-
- FN = Dir_Without_Args();
- }
-}
-
-static boolean InstanceStillRunning(char *TmpFile)
-{
- static boolean InstanceStillRunning;
-
- long OtherHwnd, nSize, L;
- char *Cap;
-
- InstanceStillRunning = False;
- OtherHwnd = GetHwndFromTempFileName(TmpFile);
- nSize = 255;
- Cap = String(nSize, Chr(32));
- L = GetWindowText(OtherHwnd, Cap, nSize);
- if ((L == 0) || (nSize < L))
- return InstanceStillRunning;
-
- if (STRING_IS_LIKE(Cap, CAT(AppTitle, "*")))
- InstanceStillRunning = True;
-
- return InstanceStillRunning;
-}
-
-#endif
+boolean Loaded;
void DrawFrameIfNeeded()
{
/* !!! CHECK THIS !!! */
#if 1
- if (! menBorder.Checked)
+ if (! menBorder)
DrawFrame(1);
#endif
}
{
int X, Y;
-#if 0
- printf("::: MainForm.c: DisplayLevel(): %d, %d, %d\n",
- Loaded, LevelLoaded, bPlaying);
-#endif
-
if (! Loaded)
return;
/* !!! CHECK THIS !!! */
#if 1
- if (! menBorder.Checked)
+ if (! menBorder)
DrawFrame(1);
#endif
{
for (X = DisplayMinX; X <= DisplayMaxX; X++)
{
- DrawField(X, Y);
- }
- }
- }
-}
-
-#if 0
-
-static void cmbFile_Click()
-{
- CurPath = CAT(StripDir(OrigPath), CAT("/", cmbFile.List(cmbFile.ListIndex)));
- OrigPath = CurPath;
- FillLevelList(CurPath, LevelNumber);
- if (STRING_IS_LIKE(OrigPath, "*.mpx") || STRING_IS_LIKE(OrigPath, "*.sp"))
- {
- menSave.Enabled = True;
- }
- else
- {
- menSave.Enabled = False;
- }
-}
-
-static void cmbFile_KeyDown(int KeyCode, int Shift)
-{
- picPane_KeyDown(KeyCode, Shift);
-}
-
-static void cmbFile_KeyUp(int KeyCode, int Shift)
-{
- picPane_KeyUp(KeyCode, Shift);
-}
-
-static int GetFileNameToSave()
-{
- static int GetFileNameToSave;
-
- char *T;
-
- (char *)T = StripFileName(OrigPath);
- if (STRING_IS_LIKE(T, "*.dat") || STRING_IS_LIKE(T, "*.d##"))
- {
- T = "Level" & Format(LevelNumber, "#000");
- }
-
- GetFileNameToSave = T;
-
- return GetFileNameToSave;
-}
-
-static void cmbLevel_Click()
-{
- long InfoCount;
- boolean Oldflag;
- int Msg;
- static long LastIndex = 0;
- static boolean bBlock = False;
-
- if (bBlock)
- return;
-
- // //////////////////////////////////////////////////////////////////
- if (ModifiedFlag)
- {
- VbMsgBoxResult Res;
-
- Msg = "Save changes to " & GetFileNameToSave() & " ?";
- Res = MsgBox(Msg, vbYesNoCancel, AppTitle & " - close level");
- if (Res == vbCancel) // fallback
- {
- bBlock = True;
-
- // --- On Error Resume Next
- cmbLevel.ListIndex = LastIndex;
- // --- On Error GoTo 0
-
- bBlock = False;
- Debug.Assert cmbLevel.ListIndex = LastIndex;
- return;
- }
-
- if (Res == vbYes)
- {
- // Dim oldCurPath$
- // oldCurPath = CurPath
- if (FileExists(OrigPath) && menSave.Enabled)
- {
- menSave_Click();
- }
- else
- {
- if (! SaveAs()) // fallback
- {
- bBlock = True;
-
- // --- On Error Resume Next
- cmbLevel.ListIndex = LastIndex;
- // --- On Error GoTo 0
-
- bBlock = False;
- Debug.Assert cmbLevel.ListIndex = LastIndex;
- return;
- }
- }
-
- // CurPath = oldCurPath
- }
-
- Let_ModifiedFlag(False);
- CurPath = OrigPath;
- }
-
- // //////////////////////////////////////////////////////////////////
- {
- LevelNumber = cmbLevel.ListIndex + 1;
- DemoFlag = False;
- if (Loaded)
- {
- Oldflag = NoDisplayFlag;
- NoDisplayFlag = False;
- subFetchAndInitLevel();
- if ((0 < SignatureDelay) && ! (WindowState == vbMinimized))
- {
- Msg = LInfo.LevelTitle & vbNewLine & "(" & FieldWidth & " x " & FieldHeight & ")";
- if (DemoAvailable && bSignatureAvailable)
- Msg = Msg & vbNewLine & vbNewLine & gSignature;
-
- SignatureForm.Signature = Msg;
- SignatureForm.DelayMS = SignatureDelay;
- int X, Y;
-
- X = left + (Width - SignatureForm.Width) / 2;
- Y = top + (Height - SignatureForm.Height) / 2;
- SignatureForm.Move X, Y;
- SignatureForm.Show vbModeless, Me;
- Me.SetFocus;
- }
-
- lblStatus = "MegaPlex";
- lblFrameCount = GetTotalFramesOfDemo();
- if (EditFlag)
- EdAll();
-
- ReStretch(Stretch);
- // picPane_Paint
- Stage.Blt();
- NoDisplayFlag = Oldflag;
- LastIndex = cmbLevel.ListIndex;
- }
-
- }
- menPlayDemo.Enabled = DemoAvailable;
- cmdPlayDemo.Enabled = DemoAvailable;
-}
-
-static void cmblevel_KeyDown(int KeyCode, int Shift)
-{
- if (GameLoopRunning != 0)
- return;
-
- switch (KeyCode)
- {
- case vbKeySpace:
- if (menPlay.Enabled == True)
- menPlay_Click();
-
- break;
-
- default:
- picPane_KeyDown(KeyCode, Shift);
- break;
- }
-}
-
-static void cmbLevel_KeyUp(int KeyCode, int Shift)
-{
- picPane_KeyUp(KeyCode, Shift);
-}
-
-static void cmdPause_Click()
-{
- menPause_Click();
-}
-
-static void cmdPause_MouseUp(int Button, int Shift, float X, float Y)
-{
- FocusTim.Enabled = True;
-}
-
-static void cmdPlay_Click()
-{
- if (menPlay.Enabled)
- menPlay_Click();
-}
-
-static void cmdPlay_MouseUp(int Button, int Shift, float X, float Y)
-{
- FocusTim.Enabled = True;
-}
-
-static void cmdPlayAll_Click()
-{
- menPlayAll_Click();
-}
-
-static void cmdPlayAll_MouseUp(int Button, int Shift, float X, float Y)
-{
- FocusTim.Enabled = True;
-}
-
-static void cmdPlayDemo_Click()
-{
- menPlayDemo_Click();
-}
-
-static void cmdPlayDemo_MouseUp(int Button, int Shift, float X, float Y)
-{
- FocusTim.Enabled = True;
-}
-
-static void cmdRecordDemo_Click()
-{
- if (menRec.Enabled)
- menRec_Click();
-}
-
-static void cmdRecordDemo_MouseUp(int Button, int Shift, float X, float Y)
-{
- FocusTim.Enabled = True;
-}
-
-static void cmdStop_Click()
-{
- if (menStop.Enabled)
- menStop_Click();
-}
-
-static void cmdStop_MouseUp(int Button, int Shift, float X, float Y)
-{
- FocusTim.Enabled = True;
-}
-
-static void FocusTim_Timer()
-{
- FocusTim.Enabled = False;
-
- // --- On Error Resume Next
- picPane.SetFocus;
-}
-
-static void Form_KeyDown(int KeyCode, int Shift)
-{
- picPane_KeyDown(KeyCode, Shift);
-}
-
-static void Form_KeyUp(int KeyCode, int Shift)
-{
- picPane_KeyUp(KeyCode, Shift);
-}
-
-#endif
-
-void Form_Load()
-{
-#if 0
-
- long i;
- SettingsObject s;
-
-#endif
-
- Loaded = False;
- DemoFlag = 0;
- PanelSeq = 0;
- EditFlag = False;
- EditMode = edMove;
- // FMark = New MarkerObject; // (handle this later, if needed)
-
- InitGlobals();
-
-#if 0
-
- LoadMenus();
-
- TmpPath = GetValidTempPath();
- if (TmpPath == "")
- exit(-1);
-
- CleanTempDir(TmpPath);
- TmpPath = CAT(WithSlash(TmpPath), GetMyTempFileName());
- GetSettings();
- ShowPanel = 1;
-
- InitDirectX(hWnd, picPane.hWnd);
-
- // AllowRedDiskCheat = 1
- MpxBmp = CAT(App.Path, "/mpx.bmp");
- // // Set NormalSprites = New DDSpriteBuffer // (handle this later, if needed)
- // NormalSprites.CreateFromFile MPXBMP, 16, 16
-
- Field = REDIM_2D(sizeof(int), 0, 2 + 1 - 1, 0, 2 + 1 - 1);
-
- picViewPort.ScaleMode = vbPixels;
-
-#endif
-
- PauseMode = 0;
- // BaseWidth = 16
-
-#if 1
- if (0)
- menBorder_Click();
-#endif
-
- Loaded = True;
-
- ReStretch(Stretch);
-
-#if 0
-
- LoadKeyIndicators();
-
- Show();
-
- FillFileList(CurPath);
- if (s.Read("ShowSplash", True))
- {
- // frmSplash.EnableTimer
- frmSplash.Show vbModal, Me;
- }
-
-#endif
-}
-
-#if 0
-
-static void FillLevelList(char *Path, int LevelIndex)
-{
- long FNum, LevLen, i, iMax;
- char *TFile;
-
- cmbLevel.Clear;
- if (! FileExists(Path))
- return;
-
- if ((STRING_IS_LIKE(Path, "*.D??")) || (STRING_IS_LIKE(Path, "*.sp")))
- {
- FNum = FreeFile();
- LevLen = 1536;
- FNum = fopen(Path, "rb");
- {
- i = 0;
- FILE_GET(FNum, (long)1441 + i * LevLen, &LInfo, sizeof(LInfo));
- cmbLevel.AddItem Format(i + 1, "#000") & " " & LInfo.LevelTitle, i;
- if (STRING_IS_LIKE(Path, "*.D??"))
- {
- while (!(EOF(FNum)))
- {
- i = i + 1;
- FILE_GET(FNum, (long)1441 + i * LevLen, &LInfo, sizeof(LInfo));
- if (EOF(FNum))
- break;
-
- cmbLevel.AddItem Format(i + 1, "#000") & " " & LInfo.LevelTitle, i;
- }
- }
-
- if (LevelIndex <= i && 0 < LevelIndex)
- i = LevelIndex - 1;
- else
- i = 0;
-
- cmbLevel.ListIndex = i;
- }
- fclose(FNum);
- }
- else if (STRING_IS_LIKE(Path, "*.mpx"))
- {
- FNum = FreeFile();
- LevLen = 1536;
- FNum = fopen(Path, "rb");
- {
- i = 0;
- if (MpxOpen(Path))
- {
- for (i = 1; i <= LevelCount; i++)
- {
- if (! MpxLoadLInfo(CInt(i)))
- break;
-
- cmbLevel.AddItem Format(i, "#000") & " " & LInfo.LevelTitle, i - 1;
- }
-
- MpxClose();
- }
-
- if (LevelIndex < i && 0 < LevelIndex)
- i = LevelIndex - 1;
- else
- i = 0;
-
- if (i < cmbLevel.ListCount)
- cmbLevel.ListIndex = i;
-
- }
- fclose(FNum);
- }
-}
-
-static void FillFileList(char *Path)
-{
- long FNum, LevLen, i;
- int nDemoCount;
- char *TFile, *TPath, *OFile;
-
- cmbFile.Clear;
- i = 0;
- nDemoCount = 0;
- TPath = WithSlash(StripDir(Path));
- OFile = StripFileName(Path);
- TFile = Dir(TPath & "*.D??");
- while (TFile != "")
- {
- if (FileLen(TPath & TFile) == 170496)
- {
- cmbFile.AddItem TFile;
- }
-
- TFile = Dir;
- }
-
- TFile = Dir(TPath & "*.SP");
- while (TFile != "")
- {
- nDemoCount = nDemoCount + 1;
- cmbFile.AddItem TFile;
- TFile = Dir;
- }
-
- TFile = Dir(TPath & "*.mpx");
- while (TFile != "")
- {
- nDemoCount = nDemoCount + 1;
- cmbFile.AddItem TFile;
- TFile = Dir;
- }
-
- i = cmbFile.ListCount - 1;
- if (0 < cmbFile.ListCount)
- {
- do
- {
- if ((cmbFile.List(i) Like OFile) || i == 0)
- break;
-
- i = i - 1;
- }
- while (!(i < 1));
-
- cmbFile.ListIndex = i;
- }
-
- DemosAvailable = (1 < nDemoCount);
- menPlayAll.Enabled = DemosAvailable;
- cmdPlayAll.Enabled = DemosAvailable;
-}
-
-static void LoadMenus()
-{
- long i;
-
- // speeds
- menFaster.Enabled = False;
- menSlower.Enabled = False;
- InitSpeeds();
- for (i = 1; i <= nSpeedCount; i++)
- {
- if (1 < i)
- {
- Load menPlaySpeed(i);
- Load menDemoSpeed(i);
- }
-
- menPlaySpeed(i).Caption = GetSpeedDescriptionFPS(SpeedsByDelayUS[i]);
- menDemoSpeed(i).Caption = GetSpeedDescriptionFPS(SpeedsByDelayUS[i]);
- }
-
- // zoom
- menStretch(1).Caption = Format(0.25, "#0.00") & ";
- 1";
- if (Stretch == 0.25)
- menStretch(1).Checked = True;
-
- for (i = 2; i <= 20; i++)
- {
- Load menStretch(i);
- menStretch(i).Caption = Format(0.25 * i, "#0.00") & ";
- 1";
- menStretch(i).Checked = ((i * 0.25) == Stretch);
- }
-
- menSp.Enabled = False;
-}
-
-//
-// Function DisplayShift&()
-// Dim X&, Y&, A&, B&, iX&, iiX&, LD&
-// Dim Sprite&
-// DisplayShift = 0
-// For A = 0 To picPane.ScaleWidth
-// For Y = DisplayMinY To DisplayMaxY
-// For X = DisplayMinX To DisplayMaxX
-// iX = StretchWidth * X + A
-// Sprite = Field(X, Y).SpritePos
-// If picPane.ScaleWidth < (iX + 1) Then
-// iX = iX - picPane.ScaleWidth
-// Else
-// If picPane.ScaleWidth < (iX + 1 + BaseWidth) Then
-// iiX = iX - picPane.ScaleWidth
-// Sprites.BitBltSprite picPane.hdc, iiX, StretchWidth * Y, Sprite
-// End If
-// End If
-// Sprites.BitBltSprite picPane.hdc, iX, StretchWidth * Y, Sprite
-// Next X
-// Next Y
-// DisplayShift = DisplayShift + 1
-// 'DoEvents
-// Next A
-// End Function
-
-static void Form_Paint()
-{
- // Debug.Print "Form_Paint()"
-}
-
-static void Form_Resize()
-{
- long Space, NW, NH;
- int Tmp;
-
- if (WindowState == vbMinimized || ! Loaded)
- return;
-
- Space = Panel.left;
- // NW = ScaleWidth - 2 * Space: If NW < 0 Then NW = 0
- // NH = ScaleHeight - 3 * Space - cmbLevel.Height: If NH < 0 Then NH = 0
- // picViewPort.Move Space, Space, NW, NH
- Tmp = (ShowPanel != 0 ? ScaleHeight - Panel.Height : ScaleHeight);
- if (Tmp < 0)
- Tmp = 0;
-
- picViewPort.Move 0, 0, ScaleWidth, Tmp;
- // Tmp = 2 * Space + picViewPort.Height
- Panel.top = Tmp;
- Panel.left = (ScaleWidth - Panel.Width) / 2;
- // 'cmdNormal.Top = 2 * Space + picViewPort.Height
- // cmbLevel.Top = Tmp
- // lblRedDiskCount.Top = Tmp
- // lblInfoCount.Top = Tmp
- // picKeys.Top = Tmp
- // lblFrameCount.Top = Tmp
- // cmdPlayAll.Top = Tmp
-}
-
-#endif
-
-#if 1
-
-static void DrawFrame(int Delta)
-{
- int i, LX, tY, RX, BY;
-
- LX = -1 + Delta;
- tY = -1 + Delta;
- RX = FieldWidth - Delta;
- BY = FieldHeight - Delta;
- DrawImage(LX, tY, imgFrameCorner);
- DrawImage(LX, BY, imgFrameCorner);
- DrawImage(RX, tY, imgFrameCorner);
- DrawImage(RX, BY, imgFrameCorner);
- for (i = LX + 1; i <= RX - 1; i++)
- {
- DrawImage(i, tY, imgFrameHorizontal);
- DrawImage(i, BY, imgFrameHorizontal);
- }
-
- for (i = tY + 1; i <= BY - 1; i++)
- {
- DrawImage(LX, i, imgFrameVertical);
- DrawImage(RX, i, imgFrameVertical);
- }
-}
-
-#else
-
-static void DrawFrame(int Delta)
-{
- int i, LX, tY, RX, BY;
-
- LX = -1 + Delta;
- tY = -1 + Delta;
- RX = FieldWidth - Delta;
- BY = FieldHeight - Delta;
- DrawSprite(LX, tY, posFrameCorner);
- DrawSprite(LX, BY, posFrameCorner);
- DrawSprite(RX, tY, posFrameCorner);
- DrawSprite(RX, BY, posFrameCorner);
- for (i = LX + 1; i <= RX - 1; i++)
- {
- DrawSprite(i, tY, posFrameHorizontal);
- DrawSprite(i, BY, posFrameHorizontal);
- }
-
- for (i = tY + 1; i <= BY - 1; i++)
- {
- DrawSprite(LX, i, posFrameVertical);
- DrawSprite(RX, i, posFrameVertical);
- }
-}
-
-#endif
-
-static void RestoreFrame()
-{
- int i, LX, tY, RX, BY;
-
- LX = 0;
- tY = 0;
- RX = FieldWidth - 1;
- BY = FieldHeight - 1;
- for (i = LX; i <= RX; i++)
- {
- DrawField(i, tY);
- DrawField(i, BY);
- }
-
- for (i = tY + 1; i <= BY - 1; i++)
- {
- DrawField(LX, i);
- DrawField(RX, i);
- }
-}
-
-#if 0
-
-static void Form_Unload(int Cancel)
-{
- EndFlag = True;
- ExitToMenuFlag = 1;
- if (cmdPlayAll.STRING_IS_LIKE(Caption, "Quit*"))
- {
- cmdPlayAll_Click();
- }
-
- if (menEdit.Checked)
- menEdit_Click();
-
- if (ModifiedFlag)
- {
- char *Msg;
- VbMsgBoxResult Res;
-
- Msg = "Save changes to " & GetFileNameToSave() & " ?";
- Res = MsgBox(Msg, vbYesNoCancel, AppTitle & " - closing");
- if (Res == vbCancel)
- {
- Cancel = -1;
- return;
- }
-
- if (Res == vbYes)
- {
- if (FileExists(OrigPath) && menSave.Enabled)
- {
- menSave_Click();
- }
- else
- {
- menSaveAs_Click();
- }
- }
- }
-
- if (FileExists(TmpPath) || ModifiedFlag)
- {
- MayKill(TmpPath);
- CurPath = OrigPath;
- }
-
- ReleaseDirectDraw();
- SaveSettings();
- End;
-}
-
-static void fpsTim_Timer()
-{
- currency TickDiff;
- static int count5 = 0;
-
- count5 = count5 + 1;
- if (4 < count5)
- {
- TickDiff = T.TickDiffUS(LastTick);
- lblFps.Caption = CLng(Round((1000000 * (TimerVar - LastFrame)) / (TickDiff), 0));
- LastFrame = TimerVar;
- LastTick = T.TickNow();
- count5 = 0;
- }
-
- // If NoDisplayFlag Then lblFrameCount = TimerVar
- lblFrameCount = TimerVar;
-}
-
-static void menAbout_Click()
-{
- frmSplash.Show vbModal, Me;
-}
-
-static void menAutoScroll_Click()
-{
- {
- menAutoScroll.Checked = ! menAutoScroll.Checked;
- AutoScrollFlag = menAutoScroll.Checked;
- }
-}
-
-#endif
-
-static void menBorder_Click()
-{
- if (menBorder.Checked)
- {
- menBorder.Checked = False;
- DisplayMinX = 1;
- DisplayMaxX = FieldWidth - 2;
- DisplayWidth = FieldWidth;
- DisplayMinY = 1;
- DisplayMaxY = FieldHeight - 2;
- DisplayHeight = FieldHeight;
-
- if (Loaded && LevelLoaded)
- DrawFrame(1);
-
- }
- else
- {
- menBorder.Checked = True;
- DisplayMinX = 0;
- DisplayMaxX = FieldWidth - 1;
- DisplayWidth = FieldWidth + 2;
- DisplayMinY = 0;
- DisplayMaxY = FieldHeight - 1;
- DisplayHeight = FieldHeight + 2;
-
- if (Loaded && LevelLoaded)
- RestoreFrame();
- }
-
- ReStretch(Stretch);
- // DisplayLevel True
-}
-
-void SetDisplayRegion()
-{
- if (! menBorder.Checked)
- {
- DisplayMinX = 1;
- DisplayMaxX = FieldWidth - 2;
- DisplayWidth = FieldWidth;
- DisplayMinY = 1;
- DisplayMaxY = FieldHeight - 2;
- DisplayHeight = FieldHeight;
-
- if (LevelLoaded)
- DrawFrame(1);
-
- }
- else
- {
- DisplayMinX = 0;
- DisplayMaxX = FieldWidth - 1;
- DisplayWidth = FieldWidth + 2;
- DisplayMinY = 0;
- DisplayMaxY = FieldHeight - 1;
- DisplayHeight = FieldHeight + 2;
-
- if (LevelLoaded)
- RestoreFrame();
- }
-}
-
-#if 0
-
-static void menCopy_Click()
-{
- FMark.Copy;
-}
-
-void menEdit_Click()
-{
- long L;
-
- if (menEdit.Checked)
- {
- menEdit.Checked = False;
- // leave edit mode
- if (EditFlag)
- Unload ToolBox;
-
- EditFlag = False;
- UnEdAll();
- FMark.ShowMarker False;
- picViewPort.MousePointer = 0;
- if (ModifiedFlag)
- {
- if (! STRING_IS_LIKE(CurPath, TmpPath))
- {
- OrigPath = CurPath;
- CurPath = TmpPath;
- }
-
- SaveMPX(TmpPath);
- }
-
- DisplayLevel();
- Stage.Blt();
- }
- else
- {
- if (! LevelLoaded)
- {
- Beep();
- return;
- }
-
- if (ModifiedFlag)
- {
- if (! STRING_IS_LIKE(CurPath, TmpPath))
- {
- OrigPath = CurPath;
- CurPath = TmpPath;
- }
-
- SaveMPX(TmpPath);
- }
-
- subFetchAndInitLevel();
- menEdit.Checked = True;
- // enter edit mode
- EditFlag = True;
- // ScaleMode = vbTwips
- ToolBox.Move (Width - ToolBox.Width) / 2, Height - ToolBox.Height;
- // ScaleMode = vbPixels
- // L = GetWindowLong(ToolBox.hWnd, GWL_STYLE)
- // L = L And (Not WS_POPUP)
- // L = L Or WS_CHILD
- // SetWindowLong ToolBox.hWnd, GWL_STYLE, L
- // SetParent ToolBox.hWnd, hWnd
- ToolBox.Show vbModeless, Me;
- EdAll();
- DisplayLevel();
- Stage.Blt();
- FMark.ShowMarker True;
- }
-}
-
-static void menEnOff_Click()
-{
- menEnOn.Checked = False;
- menEnOff.Checked = True;
- SpSaveMenu();
- SpLoadMenu();
-}
-
-static void menEnOn_Click()
-{
- menEnOn.Checked = True;
- menEnOff.Checked = False;
- SpSaveMenu();
- SpLoadMenu();
-}
-
-static void menExit_Click()
-{
- Unload Me;
-}
-
-static void menFaster_Click()
-{
- int i;
-
- if (! bPlaying)
- {
- Debug.Assert(False);
- return;
- }
-
- if (DemoFlag != 0) // demoplayback
- {
- i = GetSpeedIndex(DeltaTDemo);
- i = i - 1;
- If i < 2 Then i = 2;
- menDemoSpeed_Click (i);
- }
- else
- {
- i = GetSpeedIndex(DeltaTPlay);
- i = i - 1;
- If i < 2 Then i = 2;
- menPlaySpeed_Click (i);
- }
-}
-
-static void menSlower_Click()
-{
- int i;
-
- if (! bPlaying)
- {
- Debug.Assert(False);
- return;
- }
-
- if (DemoFlag != 0) // demoplayback
- {
- i = GetSpeedIndex(DeltaTDemo);
- i = i + 1;
- If nSpeedCount < i Then i = nSpeedCount;
- menDemoSpeed_Click (i);
- }
- else
- {
- i = GetSpeedIndex(DeltaTPlay);
- i = i + 1;
- If nSpeedCount < i Then i = nSpeedCount;
- menPlaySpeed_Click (i);
- }
-}
-
-void menPlaySpeed_Click(int Index)
-{
- int i;
-
- // If NoDisplayFlag And (GameLoopRunning <> 0) Then
- // NoDisplayFlag = False
- // DisplayLevel
- // End If
- // NoDisplayFlag = False
- for (i = menPlaySpeed.LBound; i <= menPlaySpeed.UBound; i++)
- {
- {
- menPlaySpeed(i).Checked = (Index == i);
- }
- }
-
- BlockingSpeed = False;
- DeltaTPlay = SpeedsByDelayUS[Index];
- UpdateDeltaT();
- // If DeltaTPlay < 0 Then
- // Stage.Blt
- // DeltaT = 0
- // NoDisplayFlag = True
- // End If
-}
-
-void menDemoSpeed_Click(int Index)
-{
- int i;
-
- // If NoDisplayFlag And (GameLoopRunning <> 0) Then
- // NoDisplayFlag = False
- // DisplayLevel
- // End If
- NoDisplayFlag = False;
- for (i = menDemoSpeed.LBound; i <= menDemoSpeed.UBound; i++)
- {
- {
- menDemoSpeed(i).Checked = (Index == i);
- }
- }
-
- BlockingSpeed = False;
- DeltaTDemo = SpeedsByDelayUS[Index];
- UpdateDeltaT();
- // If DeltaTPlay < 0 Then
- // Stage.Blt
- // DeltaT = 0
- // NoDisplayFlag = True
- // End If
-}
-
-static void UpdateDeltaT()
-{
- if (! bPlaying)
- return;
-
- DeltaT = (DemoFlag != 0 ? DeltaTDemo : DeltaTPlay);
- if (DeltaT < 0)
- {
- Stage.Blt();
- DeltaT = 0;
- NoDisplayFlag = True;
- }
- else
- {
- if (NoDisplayFlag && GameLoopRunning != 0)
- {
- NoDisplayFlag = False;
- DisplayLevel();
- }
- else
- {
- NoDisplayFlag = False;
- }
- }
-}
-
-static void menGravOff_Click()
-{
- menGravOn.Checked = False;
- menGravOff.Checked = True;
- SpSaveMenu();
- SpLoadMenu();
-}
-
-static void menGravOn_Click()
-{
- menGravOn.Checked = True;
- menGravOff.Checked = False;
- SpSaveMenu();
- SpLoadMenu();
-}
-
-static void menNew_Click()
-{
- NewForm.Show vbModal, Me;
- CreateLevel(FieldWidth, FieldHeight);
- ReStretch(Stretch);
-}
-
-static void menNewStd_Click()
-{
- CreateLevel(60, 24);
- ReStretch(Stretch);
-}
-
-static void menOpen_Click()
-{
- long LFilt;
-
- {
- // cmDlg.DefaultExt = "sp"
-
- /*
-
- (prevent compiler warning here due to suspected use of trigraph)
-
- cmDlg.Filter = "All Levels (*.DAT;*.D??;*.sp;*.mpx)|*.DAT;*.D??;*.sp;*.mpx|MegaPlex Levels (*.mpx)|*.mpx" & "|Supaplex Level Sets (*.DAT;*.D??)|*.DAT;*.D??|SpeedFix Demos (*.sp)|*.sp";
- */
-
- LFilt = LastOpenFilter;
- cmDlg.FilterIndex = (0 < LFilt & LFilt < 5 ? LFilt : 1);
- if (FileExists(CurPath))
- cmDlg.InitDir = WithSlash(StripDir(CurPath));
-
- cmDlg.flags = cdlOFNHideReadOnly | cdlOFNLongNames;
- }
-
- // --- On Error GoTo menOpenEH
- cmDlg.ShowOpen;
- // --- On Error GoTo 0
-
- LFilt = cmDlg.FilterIndex;
- LastOpenFilter = LFilt;
- CurPath = cmDlg.FileName;
- OrigPath = CurPath;
- FillFileList (CurPath);
-
-menOpenEH:
-}
-
-static void menOptions_Click()
-{
- OptionsForm oFrm;
-
- oFrm.Show vbModal, Me;
- SaveSettings();
- picViewPort_Resize();
-}
-
-static void menPanel_Click()
-{
- {
- PanelVisible = ! menPanel.Checked;
- }
-}
-
-void Let_PanelVisible(boolean NewVal)
-{
- static boolean HidePanel = False;
-
- if (HidePanel != NewVal)
- return;
-
- HidePanel = ! NewVal;
- PanelTim.Enabled = True;
-}
-
-static void DrawPauseLayer(long Layer)
-{
- DirectDrawPalette Pal;
- PALETTEENTRY *Val;
- long i;
-
- // Dim X&, Y&
- // For Y = 0 To bmpStage.Height Step BaseWidth
- // For X = 0 To bmpStage.Width Step BaseWidth
- // Pause.TransparentDraw bmpStageHDC, X, Y, Layer
- // Next X
- // Next Y
- // With Stage.Surface
- // Set Pal = .GetPalette
- // for i=1 to pal.GetEntries(
- // Stage.Surface.SetPalette
-}
-
-static void menPaste_Click()
-{
- FMark.Paste;
- DisplayLevel();
- Stage.Blt();
-}
-
-static void menPause_Click()
-{
- static StdPicture OldPic;
- static char *OldText = 0;
-
- PauseMode = (PauseMode != 0 ? 0 : 1);
- if (PauseMode != 0)
- {
- if (IS_NOTHING(&OldPic, sizeof(OldPic)))
- OldPic = cmdPause.Picture;
-
- cmdPause.Picture = cmdPause.DownPicture;
- OldText = lblStatus.Caption;
- lblStatus = "Paused ...";
- }
- else
- {
- cmdPause.Picture = OldPic;
- lblStatus.Caption = OldText;
- }
-}
-
-static void menPlayAll_Click()
-{
- long iMin, iMax, i;
- int FNum;
- char *LogPath, *OutStr, *ReRecPath, *SPPath;
- boolean bEqual;
- static boolean QuitFlag = False;
-
- if (cmdPlayAll.STRING_IS_LIKE(Caption, "Play) All Demos")
- {
- cmdPlayAll.Caption = "Quit All";
- menPlayAll.Caption = "Quit All";
- FocusTim.Enabled = True;
- QuitFlag = False;
- iMin = 0;
- iMax = cmbFile.ListCount - 1;
- LogPath = StripDir(CurPath) & "/Error.Log";
- if (Dir(LogPath) != "")
- Kill(LogPath);
-
- for (i = iMin; i <= iMax; i++)
- {
- cmbFile.ListIndex = i;
- // If CurPath Like "*.sp" Or CurPath Like "*.mpx" Then
- if (DemoAvailable)
- {
- SPPath = CurPath;
- ReRecPath = SPPath & ".ReRec";
- menPlayDemo_Click();
- // SaveSP ReRecPath
- // bEqual = FilesEqual(ReRecPath, SPPath)
- // If bEqual Then MayKill ReRecPath
- bEqual = True;
- OutStr = cmbFile.List(i) & " -> ";
- //
- if (Val(lblFrameCount) != GetTotalFramesOfDemo())
- {
- OutStr = OutStr & "Error in GetTotalFramesOfDemo()! ";
- Debug.Assert(False);
- }
-
- //
- if ((LevelStatus == 1) && bEqual)
- {
- OutStr = OutStr & "Success";
- }
- else if (QuitFlag)
- {
- OutStr = OutStr & "All Demos (float)Canceled";
- }
- else
- {
- if (LevelStatus != 1)
- {
- OutStr = OutStr & "### Level Failed ### (TimerVar == " & TimerVar & ")";
- }
-
- if (! bEqual)
- {
- OutStr = OutStr & "### ReRecording is binary different ###";
- }
- }
-
- FNum = FreeFile();
- FNum = fopen(LogPath, "ab");
- Print #FNum, OutStr;
- fclose(FNum);
- if (QuitFlag)
- break;
- }
- }
-
- cmdPlayAll.Caption = "Play All Demos";
- menPlayAll.Caption = "Play All Demos";
- SettingsObject Settings;
-
- MySignature = Settings.Read("MySignature", "");
- FirstDemoByte = 0x81;
- }
- else
- {
- QuitFlag = True;
- if (menStop.Enabled)
- menStop_Click();
- }
-}
-
-static void menRemSP_Click()
-{
- RemoveSP();
- SpLoadMenu();
-}
-
-static void menRestoreBorder_Click()
-{
- RestoreBorder();
-}
-
-static void menSave_Click()
-{
- if (! ModifiedFlag)
- return;
-
- if (STRING_IS_LIKE(CurPath, TmpPath))
- CurPath = OrigPath;
-
- if (STRING_IS_LIKE(CurPath, "") || STRING_IS_LIKE(CurPath, "*.dat"))
- {
- menSaveAs_Click();
- return;
- }
-
- if (STRING_IS_LIKE(CurPath, "*.sp"))
- {
- menSaveAs_Click();
- return;
- }
-
- if (! FileExists(CurPath) || STRING_IS_LIKE(CurPath, "Untitled"))
- {
- menSaveAs_Click();
- return;
- }
-
- SaveMPX(CurPath);
- Let_ModifiedFlag(False);
-}
-
-static void menSaveAs_Click()
-{
- if (SaveAs())
- FillFileList (CurPath);
-}
-
-static boolean SaveAs()
-{
- static boolean SaveAs;
-
- char *FN;
- SettingsObject s;
-
- SaveAs = False;
- {
- // cmDlg.DefaultExt = "sp"
- cmDlg.Filter = "MegaPlex Level (*.mpx)|*.mpx|SpeedFix Demo (*.sp)|*.sp";
- cmDlg.FilterIndex = LastSaveFilter;
- // If OrigPath Like "*.sp" Then cmDlg.FilterIndex = 1 Else cmDlg.FilterIndex = 0
- if (FileExists(OrigPath))
- {
- cmDlg.InitDir = WithSlash(StripDir(OrigPath));
- cmDlg.InitDir = s.Read("LastSaveDir", cmDlg.InitDir);
- cmDlg.FileName = StripExtensionlessFileName(GetFileNameToSave());
- }
-
- cmDlg.flags = cdlOFNHideReadOnly | cdlOFNLongNames;
- }
-
- // --- On Error GoTo SaveAsEH
- cmDlg.ShowSave;
- // --- On Error GoTo 0
-
- LastSaveFilter = cmDlg.FilterIndex;
- FN = cmDlg.FileName;
- SettingsObject_Save("LastSaveDir", WithSlash(StripDir(FN)));
- if (STRING_IS_LIKE(FN, "*.sp"))
- {
- SaveSP(FN);
- }
- else if (STRING_IS_LIKE(FN, "*.mpx"))
- {
- SaveMPX(FN);
- }
-
- Let_ModifiedFlag(False);
- SaveAs = True;
-
-SaveAsEH:
-
- return SaveAs;
-}
-
-static void menSelectAll_Click()
-{
- FMark.SetPoint1 0, 0;
- FMark.SetPoint2 FieldWidth - 1, FieldHeight - 1;
-}
-
-static void menShowLInfo_Click()
-{
- char *Msg;
-
- Msg = LInfo.LevelTitle & vbNewLine & "(" & FieldWidth & " x " & FieldHeight & ")";
- if (DemoAvailable && bSignatureAvailable)
- Msg = Msg & vbNewLine & vbNewLine & gSignature;
-
- SignatureForm.Signature = Msg;
- SignatureForm.DelayMS = 5000;
- int X, Y;
-
- X = left + (Width - SignatureForm.Width) / 2;
- Y = top + (Height - SignatureForm.Height) / 2;
- SignatureForm.Move X, Y;
- SignatureForm.Show vbModeless, Me;
- Me.SetFocus;
-}
-
-static void menSoundFX_Click()
-{
- {
- menSoundFX.Checked = ! menSoundFX.Checked;
- FXOnFlag = (menSoundFX.Checked ? -1 : 0);
- }
-}
-
-#endif
-
-// static void menPlay_Click()
-void menPlay_Click()
-{
-#if 0
-
- boolean OldEditFlag;
-
- // Trace "MainForm", "--> menPlay_Click()"
- if (! LevelLoaded)
- {
- Beep();
- return;
- }
-
- SignatureForm.DelayMS = 1;
- menPlay.Enabled = False;
- menPause.Enabled = True;
- menStop.Enabled = True;
- cmdPlay.Enabled = False;
- cmdPause.Enabled = True;
- cmdStop.Enabled = True;
- cmdPlayDemo.Enabled = False;
- menPlayDemo.Enabled = False;
- cmdRecordDemo.Enabled = False;
- menRec.Enabled = False;
- menFaster.Enabled = True;
- menSlower.Enabled = True;
- if (cmdPlayAll.STRING_IS_LIKE(Caption, "Play*"))
- {
- cmdPlayAll.Enabled = False;
- menPlayAll.Enabled = False;
- }
-
- cmbFile.Enabled = False;
- cmbLevel.Enabled = False;
- OldEditFlag = EditFlag;
- if (EditFlag)
- menEdit_Click();
-
- menEditMain.Enabled = False;
- if (DemoFlag == 0 && RecordDemoFlag == 0)
- lblStatus = "Playing";
-
- lblFrameCount = 0;
-
-#endif
-
- LastFrame = 0;
-
-#if 0
- LastTick = T.TickNow();
-#endif
-
-#if 0
- fpsTim.Enabled = True;
-#endif
-
- // DimPrimary 100
- bPlaying = True;
-
-#if 0
- UpdateDeltaT();
-#endif
-
-#if 1
-#endif
-
-#if 0
- printf("::: MainForm.c: menPlay_Click(): subFetchAndInitLevelB(): ...\n");
-#endif
-
- subFetchAndInitLevelB();
-
-#if 0
- printf("::: MainForm.c: menPlay_Click(): subFetchAndInitLevelB(): done\n");
-#endif
-
- ReStretch(Stretch);
-
- // Trace "MainForm", "CountDown 1"
- CountDown(2, (0 == DemoFlag));
- // Trace "MainForm", "Call GoPlay"
-
- GoPlay();
-
- // Trace "MainForm", "GoPlay returned"
-
-#if 0
-
- if (LevelStatus == 1)
- {
- lblStatus = "(float)Success";
- }
- else
- {
- lblStatus = "Try (float)again";
- }
-
-#endif
-
- // Trace "MainForm", "CountDown 1"
- CountDown(1, False);
- RecordDemoFlag = 0;
-
-#if 0
- ShowKey(0);
-#endif
-
- bPlaying = False;
- // Trace "MainForm", "Call subFetchAndInitLevel"
-
- subFetchAndInitLevel();
-
- // Trace "MainForm", "subFetchAndInitLevel returned"
-
-#if 0
- Stage.Blt();
-#endif
-
-#if 0
-
- menEditMain.Enabled = True;
- if (OldEditFlag)
- menEdit_Click();
-
- // Trace "MainForm", "<-- menPlay_Click()"
-
-#endif
-}
-
-#if 1
-
-// static void menPlayDemo_Click()
-void menPlayDemo_Click()
-{
- DemoFlag = 1;
- RecordDemoFlag = 0;
-
-#if 0
- lblStatus = "Demo Playback";
-#endif
-
- menPlay_Click();
-
-#if 1
- return; /* return after initialization phase */
-#endif
-
-#if 0
- if (LevelStatus != 1)
- lblStatus = "Demo Failed";
-#endif
-
- DemoFlag = 0;
-}
-
-#else
-
-// static void menPlayDemo_Click()
-void menPlayDemo_Click()
-{
- DemoFlag = 1;
- RecordDemoFlag = 0;
-
-#if 0
- lblStatus = "Demo Playback";
-#endif
-
- menPlay_Click();
-
-#if 0
- if (LevelStatus != 1)
- lblStatus = "Demo Failed";
-#endif
-
- DemoFlag = 0;
-}
-
-#endif
-
-#if 0
-
-static void menRec_Click()
-{
- Trace("MainForm", "--> menRec_Click()");
- if (! LevelLoaded)
- {
- Beep();
- return;
- }
-
- RecordDemoFlag = 1;
- DemoFlag = 0;
- lblStatus.ForeColor = vbRed;
- lblStatus = "Recording Demo";
- // DemoBuffer = New DemoBufferObject; // (handle this later, if needed)
- Debug.Assert(! IS_NOTHING(&DemoBuffer, sizeof(DemoBuffer)));
- Trace("MainForm", "Call menPlayClick");
- menPlay_Click();
- Trace("MainForm", "menPlayClick returned");
-
- lblStatus.ForeColor = vbButtonText;
- RecordDemoFlag = 0;
- Let_ModifiedFlag(True);
- if (! STRING_IS_LIKE(CurPath, TmpPath))
- {
- OrigPath = CurPath;
- CurPath = TmpPath;
- }
-
- LInfo.DemoRandomSeed = RecDemoRandomSeed;
- Trace("MainForm", "Call SaveMPX(TmpPath)");
- SaveMPX(TmpPath);
- Trace("MainForm", "Set DemoBuffer == Nothing");
- SET_TO_NOTHING(&DemoBuffer, sizeof(DemoBuffer));
- Trace("MainForm", "Call subFetchAndInitLevel");
- subFetchAndInitLevel();
- cmdPlayDemo.Enabled = DemoAvailable;
- Trace("MainForm", "<-- menRec_Click()");
-}
-
-static void menReRecordDemo_Click()
-{
- if (! LevelLoaded)
- {
- Beep();
- return;
- }
-
- RecordDemoFlag = 1;
- DemoFlag = 1;
- lblStatus.ForeColor = vbRed;
- lblStatus = "ReRecording Demo";
- // DemoBuffer = New DemoBufferObject; // (handle this later, if needed)
- Debug.Assert(! IS_NOTHING(&DemoBuffer, sizeof(DemoBuffer)));
- menPlay_Click();
- lblStatus.ForeColor = vbButtonText;
- RecordDemoFlag = 0;
- Let_ModifiedFlag(True);
- if (! STRING_IS_LIKE(CurPath, TmpPath))
- {
- OrigPath = CurPath;
- CurPath = TmpPath;
- }
-
- LInfo.DemoRandomSeed = RecDemoRandomSeed;
- SaveMPX(TmpPath);
- SET_TO_NOTHING(&DemoBuffer, sizeof(DemoBuffer));
- subFetchAndInitLevel();
-}
-
-void menStop_Click()
-{
- EndFlag = True;
- LeadOutCounter = 1;
- if (PauseMode != 0)
- menPause_Click();
-
- fpsTim.Enabled = False;
- fpsTim_Timer();
- lblFps.Caption = "";
- menRec.Enabled = True;
- menPlay.Enabled = True;
- menPause.Enabled = False;
- menStop.Enabled = False;
- cmdPlay.Enabled = True;
- cmdPause.Enabled = False;
- cmdStop.Enabled = False;
- cmdRecordDemo.Enabled = True;
- cmdPlayDemo.Enabled = DemoAvailable;
- cmdPlayAll.Enabled = DemosAvailable;
- menPlayDemo.Enabled = DemoAvailable;
- menPlayAll.Enabled = DemosAvailable;
- menFaster.Enabled = False;
- menSlower.Enabled = False;
- cmbFile.Enabled = True;
- cmbLevel.Enabled = True;
-}
-
-static void menStretch_Click(int Index)
-{
- ReStretch(0.25 * Index);
- // DisplayLevel True
-}
-
-static void menToolTips_Click()
-{
- {
- menToolTips.Checked = ! menToolTips.Checked;
- if (menToolTips.Checked)
- {
- cmdPlay.ToolTipText = "Play Game (Space)";
- cmdPause.ToolTipText = "Pause (P)";
- cmdStop.ToolTipText = "Stop (Q)";
- cmdPlayDemo.ToolTipText = "Play demo (Ctrl+Space)";
- cmdRecordDemo.ToolTipText = "Record demo (Ctrl+R)";
- lblInfoCount.ToolTipText = "Number of infotrons needed";
- lblRedDiskCount.ToolTipText = "Number of red disks";
- cmbLevel.ToolTipText = "List of all levels in the file";
- cmbFile.ToolTipText = "List of files in current directory";
- lblFps.ToolTipText = "Animation speed in fps";
- lblFrameCount.ToolTipText = "Game time in frames";
- }
- else
- {
- cmdPlay.ToolTipText = "";
- cmdPause.ToolTipText = "";
- cmdStop.ToolTipText = "";
- cmdPlayDemo.ToolTipText = "";
- cmdRecordDemo.ToolTipText = "";
- lblInfoCount.ToolTipText = "";
- lblRedDiskCount.ToolTipText = "";
- cmbLevel.ToolTipText = "";
- cmbFile.ToolTipText = "";
- lblFps.ToolTipText = "";
- lblFrameCount.ToolTipText = "";
- }
-
- }
-}
-
-static void menTrim_Click()
-{
- LevelInfoType Tmp;
- char *OldOPath;
-
- OldOPath = OrigPath;
- Tmp = LInfo;
- Tmp.SpecialPortCount = 0; // hack: all special ports are deleted
- menCopy_Click();
- CreateLevel(FMark.Width, FMark.Height);
- LInfo = Tmp;
- OrigPath = OldOPath;
- CurPath = OldOPath;
- menSelectAll_Click();
- menPaste_Click();
- picViewPort_Resize();
-}
-
-static void menZonkOff_Click()
-{
- menZonkOn.Checked = False;
- menZonkOff.Checked = True;
- SpSaveMenu();
- SpLoadMenu();
-}
-
-static void menZonkOn_Click()
-{
- menZonkOn.Checked = True;
- menZonkOff.Checked = False;
- SpSaveMenu();
- SpLoadMenu();
-}
-
-static void PanelTim_Timer()
-{
- int Tmp;
-
- Tmp = Panel.Height;
- if (PanelSeq < Panel.Height && -1 < PanelSeq)
- {
- PanelSeq = (ShowPanel != 0 ? PanelSeq + 2 : PanelSeq - 2);
- Tmp = ScaleHeight - Tmp + PanelSeq;
- Panel.top = Tmp;
- picViewPort.Height = Tmp;
- }
- else
- {
- PanelTim.Enabled = False;
- PanelSeq = (PanelSeq < 0 ? 0 : PanelSeq - );
- ShowPanel = (ShowPanel == 0 ? 1 : 0);
- menPanel.Checked = (ShowPanel != 0);
- }
-}
-
-static void picKeys_MouseUp(int Button, int Shift, float X, float Y)
-{
- FocusTim.Enabled = True;
-}
-
-static void picMenu_Click()
-{
-}
-
-static void picPane_KeyDown(int KeyCode, int Shift)
-{
- if (KeyCode < 0 || 255 < KeyCode)
- return;
-
- KeyState[KeyCode] = True;
- switch (KeyCode)
- {
- case vbKeyControl:
- if (MouseButton == 0 && EditFlag)
- picPane.MousePointer = 15;
-
- break;
-
- case vbKeyUp:
- case vbKeyLeft:
- case vbKeyDown:
- case vbKeyRight:
- case vbKeySpace:
- if (DemoFlag != 0)
- {
- DemoFlag = 0;
- UpdateDeltaT();
- }
-
- break;
-
- case vbKeyF12:
- if (DemoFlag != 0 && 2 == Shift)
- {
- DemoFlag = 0;
- UpdateDeltaT();
- }
-
- break;
-
- case vbKeyF11:
- bCapturePane = ! bCapturePane;
- break;
- }
-}
-
-static void picPane_KeyUp(int KeyCode, int Shift)
-{
- if (KeyCode < 0 || 255 < KeyCode)
- return;
-
- KeyState[KeyCode] = False;
- switch (KeyCode)
- {
- case vbKeyPageUp:
- if (menFaster.Enabled)
- menFaster_Click();
-
- break;
-
- case vbKeyPageDown:
- if (menSlower.Enabled)
- menSlower_Click();
-
- break;
-
- case vbKeySpace:
- if (2 == Shift) // ctrl+space
- {
- if (menPlayDemo.Enabled)
- menPlayDemo_Click();
-
- }
- else
- {
- if (menPlay.Enabled)
- menPlay_Click();
- }
-
- break;
-
- case vbKeyQ:
- if (menStop.Enabled)
- menStop_Click();
-
- break;
-
- case vbKeyR:
- if (menRec.Enabled)
- menRec_Click();
+ DrawField(X, Y);
+ }
+ }
+ }
+}
- break;
+void Form_Load()
+{
+ Loaded = False;
- case vbKeyP:
- case vbKeyPause:
- if (menPause.Enabled && (Shift == 0))
- menPause_Click();
+ InitGlobals();
- break;
+ Loaded = True;
- case vbKeyControl:
- if (MouseButton == 0 && EditFlag)
- picPane.MousePointer = 0;
- break;
- }
+ ReStretch(Stretch);
}
-static void picPane_MouseDown(int Button, int Shift, float X, float Y)
+static void DrawFrame(int Delta)
{
- int OldEdMode;
+ int i, LX, tY, RX, BY;
- MouseButton = Button;
- OldEdMode = EditMode;
- if (Button != 1)
+ LX = -1 + Delta;
+ tY = -1 + Delta;
+ RX = FieldWidth - Delta;
+ BY = FieldHeight - Delta;
+ DrawImage(LX, tY, imgFrameCorner);
+ DrawImage(LX, BY, imgFrameCorner);
+ DrawImage(RX, tY, imgFrameCorner);
+ DrawImage(RX, BY, imgFrameCorner);
+ for (i = LX + 1; i <= RX - 1; i++)
{
- if (Button == 2 && Shift != 2)
- {
- EditMode = edSelect;
- }
- else
- {
- return;
- }
+ DrawImage(i, tY, imgFrameHorizontal);
+ DrawImage(i, BY, imgFrameHorizontal);
}
- if (Shift == 2)
- EditMode = edMove;
-
- OSX = ScrollX;
- OSY = ScrollY;
- MDX = X;
- MDY = Y;
- switch (EditMode)
+ for (i = tY + 1; i <= BY - 1; i++)
{
- case edMove:
- picPane.MousePointer = 5; // size
- UserDragFlag = True;
- break;
-
- case edDraw:
- SetField(X, Y, ToolBox.ASpriteIndex);
- break;
-
- case edSelect:
- FMark.SetPoint1 EdGetX(X), EdGetY(Y);
- FMark.MoveMarker;
- break;
+ DrawImage(LX, i, imgFrameVertical);
+ DrawImage(RX, i, imgFrameVertical);
}
-
- EditMode = OldEdMode;
}
-static void picPane_MouseMove(int Button, int Shift, float X, float Y)
+static void RestoreFrame()
{
- boolean Oldflag;
- int OldEdMode;
+ int i, LX, tY, RX, BY;
+
+ LX = 0;
+ tY = 0;
+ RX = FieldWidth - 1;
+ BY = FieldHeight - 1;
- OldEdMode = EditMode;
- if (Button != 1)
+ for (i = LX; i <= RX; i++)
{
- if (EditFlag && Button == 2 && Shift != 2)
- {
- EditMode = edSelect;
- }
- else
- {
- return;
- }
+ DrawField(i, tY);
+ DrawField(i, BY);
}
- if (Shift == 2)
- EditMode = edMove;
-
- switch (EditMode)
+ for (i = tY + 1; i <= BY - 1; i++)
{
- case edMove:
- Oldflag = NoDisplayFlag;
- NoDisplayFlag = False;
- ScrollTo(OSX - X + MDX, OSY - Y + MDY);
- Stage.Blt();
- NoDisplayFlag = Oldflag;
- break;
-
- case edDraw:
- SetField(X, Y, ToolBox.ASpriteIndex);
- break;
-
- case edSelect:
- FMark.SetPoint2 EdGetX(X), EdGetY(Y);
- FMark.MoveMarker;
- break;
+ DrawField(LX, i);
+ DrawField(RX, i);
}
-
- EditMode = OldEdMode;
}
-static void picPane_MouseUp(int Button, int Shift, float X, float Y)
+void SetDisplayRegion()
{
- MouseButton = MouseButton ^ Button;
- picPane.MousePointer = 0;
- UserDragFlag = False;
- if (menEditMain.Enabled && Button == 2)
+ if (! menBorder)
{
- if (MDX == X && MDY == Y)
- PopupMenu menEditMain;
+ DisplayMinX = 1;
+ DisplayMaxX = FieldWidth - 2;
+ DisplayWidth = FieldWidth;
+ DisplayMinY = 1;
+ DisplayMaxY = FieldHeight - 2;
+ DisplayHeight = FieldHeight;
+
+ if (LevelLoaded)
+ DrawFrame(1);
}
-}
+ else
+ {
+ DisplayMinX = 0;
+ DisplayMaxX = FieldWidth - 1;
+ DisplayWidth = FieldWidth + 2;
+ DisplayMinY = 0;
+ DisplayMaxY = FieldHeight - 1;
+ DisplayHeight = FieldHeight + 2;
-#endif
+ if (LevelLoaded)
+ RestoreFrame();
+ }
+}
-static void picPane_Paint()
+void menPlay_Click()
{
- boolean Oldflag;
+ bPlaying = True;
- Oldflag = NoDisplayFlag;
- NoDisplayFlag = False;
+ subFetchAndInitLevelB();
-#if 0
- Stage.Blt();
+ ReStretch(Stretch);
+
+ subMainGameLoop_Init();
+
+#if 1
+ return;
#endif
- NoDisplayFlag = Oldflag;
+ bPlaying = False;
+
+ subFetchAndInitLevel();
}
static void ReStretch(float NewStretch)
{
-#if 1
long BW2, LW, LH;
-#else
- long BW2, LW, LH, i;
-#endif
-
-#if 0
- printf("::: MainForm.c: ReStretch(): %d, %d\n", Loaded, LevelLoaded);
-#endif
if (! Loaded)
{
-#if 0
- printf("::: NewStretch == %f\n", NewStretch);
-#endif
-
Stretch = NewStretch;
+
return;
}
-#if 0
- MousePointer = 11;
- SET_TO_NOTHING(&Stage, sizeof(Stage));
- SET_TO_NOTHING(&StretchedSprites, sizeof(StretchedSprites));
- menStretch(Stretch / 0.25).Checked = False;
-#endif
-
Stretch = NewStretch;
-#if 0
- menStretch(Stretch / 0.25).Checked = True;
- // StretchWidth = BaseWidth ' * NewStretch
- // StretchWidth2 = StretchWidth \ 2
- // TwoPixels = 2 '* Stretch
- // StretchLoad Sprites, imgMpx.Picture, 16, 16
-#endif
-
BW2 = StretchWidth / 2;
LW = (FieldWidth + 2) * BaseWidth; // StretchWidth
LH = (FieldHeight + 2) * BaseWidth; // StretchWidth
-#if 0
- // i = bmpStage.CreateAtSize(LW, LH)
- // Stage = New DDScrollBuffer; // (handle this later, if needed)
- i = Stage.CreateAtSize(LW, LH, picPane.hWnd);
- // Set StretchedSprites = NormalSprites.GetStretchCopy(Stretch)
- ReLoadStretchSprites();
- if (i == 0 || IS_NOTHING(&StretchedSprites, sizeof(StretchedSprites)))
+ if (Loaded && LevelLoaded)
{
- // menStretch(Stretch / 0.5).Enabled = False
- if (0.5 <= Stretch)
- ReStretch(Stretch - 0.25);
-
+ SetDisplayRegion();
+ picViewPort_Resize();
+ DisplayLevel();
}
- else
-#endif
- {
- StretchedSprites.DestXOff = 1 * BaseWidth; // StretchWidth
- StretchedSprites.DestYOff = 1 * BaseWidth; // StretchWidth
- Stage.DestXOff = 1 * StretchWidth;
- Stage.DestYOff = 1 * StretchWidth;
- StretchedSprites.DestinationSurface = Stage.Surface;
-
-#if 0
- Stage.Cls();
-#endif
-
- if (Loaded && LevelLoaded)
- {
-#if 0
- printf("::: MainForm.c: ReStretch(): ...\n");
-#endif
-
- SetDisplayRegion();
- picViewPort_Resize();
- DisplayLevel();
- }
-
- subCalculateScreenScrollPos();
-
-#if 0
- printf("::: MainForm.c: ReStretch(): %d, %d\n", ScreenScrollXPos, ScreenScrollYPos);
-#endif
- ScrollTo(ScreenScrollXPos, ScreenScrollYPos);
+ subCalculateScreenScrollPos();
-#if 0
- Stage.Blt();
-#endif
-
- picPane_Paint();
- }
-
-#if 0
- MousePointer = 0;
-#endif
+ ScrollTo(ScreenScrollXPos, ScreenScrollYPos);
}
-#if 0
-static void SetScrollEdges()
-#else
void SetScrollEdges()
-#endif
{
-#if 0
- printf("::: MainForm.c: SetScrollEdges() ... [%ld, %ld, %ld, %ld] [%f, %d] [%d, %d, %d, %d]\n",
- DisplayMinX, DisplayMinY, DisplayMaxX, DisplayMaxY,
- Stretch, BaseWidth,
- ScrollMinX, ScrollMinY, ScrollMaxX, ScrollMaxY);
-#endif
-
ScrollMinX = (int)(DisplayMinX - 0.5) * Stretch * BaseWidth;
ScrollMinY = (int)(DisplayMinY - 0.5) * Stretch * BaseWidth;
- ScrollMaxX = (int)(DisplayMaxX + 1.5) * Stretch * BaseWidth - picPane.Width;
- ScrollMaxY = (int)(DisplayMaxY + 1.5) * Stretch * BaseWidth - picPane.Height;
-
-#if 0
- printf("::: MainForm.c: SetScrollEdges() done [%d, %d, %d, %d]\n",
- ScrollMinX, ScrollMinY, ScrollMaxX, ScrollMaxY);
-#endif
+ ScrollMaxX = (int)(DisplayMaxX + 1.5) * Stretch * BaseWidth - SXSIZE;
+ ScrollMaxY = (int)(DisplayMaxY + 1.5) * Stretch * BaseWidth - SYSIZE;
}
void DrawField(int X, int Y)
if (Tmp == fiBug || Tmp == 40)
Tmp = DisPlayField[tsi];
- if (EditFlag)
- {
- if (Tmp > fiOrangeDisk && Tmp < fiSnikSnak)
- Tmp = DisPlayField[tsi];
- }
-
#if 1
if (Tmp >= 0 && Tmp <= 40)
{
#endif
}
#else
- StretchedSprites.BltEx(StretchWidth * X, StretchWidth * Y, Tmp);
+ DDSpriteBuffer_BltEx(StretchWidth * X, StretchWidth * Y, Tmp);
#endif
}
// If EditFlag Then
// If fiOrangeDisk < Tmp And Tmp < fiSnikSnak Then Tmp = DisPlayField(tsi)
// End If
- // StretchedSprites.BltEx StretchWidth * X, StretchWidth * Y, Tmp
+ // DDSpriteBuffer_BltEx StretchWidth * X, StretchWidth * Y, Tmp
break;
}
}
switch (Tmp)
{
case fiSnikSnak:
-#if 1
subCopyImageToScreen(tsi, aniSpace);
-#else
- StretchedSprites.BltEx(StretchWidth * X, StretchWidth * Y, fiSpace);
-#endif
break;
case fiElectron:
-#if 1
subCopyImageToScreen(tsi, aniSpace);
-#else
- StretchedSprites.BltEx(StretchWidth * X, StretchWidth * Y, fiSpace);
-#endif
break;
default:
if (Tmp == fiBug || Tmp == 40)
Tmp = DisPlayField[tsi];
- if (EditFlag)
- {
- if (Tmp > fiOrangeDisk && Tmp < fiSnikSnak)
- Tmp = DisPlayField[tsi];
- }
-
#if 1
if (Tmp >= 0 && Tmp <= 40)
{
#endif
}
#else
- StretchedSprites.BltEx(StretchWidth * X, StretchWidth * Y, Tmp);
+ DDSpriteBuffer_BltEx(StretchWidth * X, StretchWidth * Y, Tmp);
#endif
break;
}
}
-#if 1
-
void DrawImage(int X, int Y, int graphic)
{
- StretchedSprites.BltImg(StretchWidth * X, StretchWidth * Y, graphic, 0);
-}
-
-#else
-
-void DrawSprite(int X, int Y, int SpritePos)
-{
- StretchedSprites.BltEx(StretchWidth * X, StretchWidth * Y, SpritePos);
-}
-
-#endif
-
-#if 0
-
-void InvalidateRect(long XMin, long YMin, long XMax, long YMax)
-{
- long X, Y;
-
- // For Y = YMin To YMax
- // For X = XMin To XMax
- // Field(X, Y).GraphicsValid = 0
- // Next X
- // Next Y
-}
-
-static void picViewPort_MouseUp(int Button, int Shift, float X, float Y)
-{
- FocusTim.Enabled = True;
-}
-
-static void picViewPort_Paint()
-{
- // Debug.Print "picViewPort_Paint()"
+ DDSpriteBuffer_BltImg(StretchWidth * X, StretchWidth * Y, graphic, 0);
}
-#endif
-
static void picViewPort_Resize()
{
-#if 0
- long bdX, bdY, PanelVisibility;
- long X, Y, dx, dY;
- SettingsObject s;
- boolean B;
-
- bdX = picFrame.Width - picFrame.ScaleWidth;
- bdY = picFrame.Height - picFrame.ScaleHeight;
- dx = Min(picViewPort.ScaleWidth - bdX, (DisplayWidth - 1) * Stretch * BaseWidth);
- dx = Max(dx, 0);
- dY = Min(picViewPort.ScaleHeight - bdX, (DisplayHeight - 1) * Stretch * BaseWidth);
- dY = Max(dY, 0);
- B = s.Read("LimitToOriginalFieldSize", False);
- PanelVisibility = 24 * (Panel.Height - PanelSeq - (float)1) / Panel.Height;
- if (B)
- {
- dx = Min(320 * Stretch, dx);
- dY = Min((200 - PanelVisibility) * Stretch, dY);
- }
-
- X = Max((picViewPort.ScaleWidth - dx) / 2, 0);
- Y = Max((picViewPort.ScaleHeight - dY) / 2, 0);
- picPane.Move X, Y, dx, dY;
- picFrame.Move X - bdX / 2, Y - bdY / 2, dx + bdX, dY + bdY;
-#endif
-
SetScrollEdges();
-#if 0
- printf("::: MainForm.c: picViewPort_Resize(): %d, %d\n", ScrollX, ScrollY);
-#endif
-
ScrollTo(ScrollX, ScrollY);
-
- // SizeTim.Interval = 1
-}
-
-#if 0
-
-//
-// Private Sub SizeTim_Timer()
-// Dim wdX&, wdY&
-// SizeTim.Interval = 0
-// wdX = Max(0, picViewPort.ScaleWidth - picPane.Width) * Screen.TwipsPerPixelX
-// wdY = Max(0, picViewPort.ScaleHeight - picPane.Height) * Screen.TwipsPerPixelY
-// If (0 < wdX) Or (0 < wdY) Then
-// Move Left, Top, Width - wdX, Height - wdY
-// End If
-// End Sub
-
-static void LoadKeyIndicators()
-{
- int i;
-
- picKeys.BackColor = vbButtonFace;
- for (i = 2; i <= 5; i++)
- {
- Load shpKey(i);
- }
-
- for (i = 1; i <= 5; i++)
- {
- shpKey(i).FillColor = vbButtonFace;
- shpKey(i).Visible = True;
- }
-
- shpKey(1).Move 7, 0;
- shpKey(2).Move 0, 7;
- shpKey(3).Move 7, 14;
- shpKey(4).Move 14, 7;
- shpKey(5).Move 7, 7;
-}
-
-void ShowKey(int KeyVar)
-{
- boolean State[5 + 1];
- int i;
- boolean Tmp;
- long Col;
- static boolean LastState[5 + 1];
-
- // For i = 1 To 5
- // State(i) = False
- // Next i
- switch (KeyVar)
- {
- case 0:
- // do nothing
- break;
-
- case Is < 5:
- State[KeyVar] = True;
- break;
-
- default:
- State[5] = True;
- if (KeyVar < 9)
- State[KeyVar - 4] = True;
- break;
- }
-
- for (i = 1; i <= 5; i++)
- {
- Tmp = State[i];
- if (Tmp ^ LastState[i])
- {
- Col = (i == 5 ? vbRed : vbGreen);
- shpKey(i).FillColor = (Tmp ? Col : vbButtonFace);
- shpKey(i).Refresh;
- LastState[i] = Tmp;
- }
- }
-}
-
-static void GetSettings()
-{
- SettingsObject s;
- char *APath;
- long X, Y;
- int i;
- boolean Flag;
-
- {
- // last file info
- APath = WithSlash(App.Path);
- CurPath = s.Read("LastPath", APath);
- OrigPath = CurPath;
- // window width and height
- X = s.Read("Width", Width);
- Y = s.Read("Height", Height);
- if (X < 0 Then X == 0: If Y < 0)
- Y = 0;
-
- if (Screen.Width < X)
- X = Screen.Width;
-
- if (Screen.Height < Y)
- Y = Screen.Height;
-
- Width = X;
- Height = Y;
- // window position and state
- X = s.Read("Left", left);
- Y = s.Read("Top", top);
- if (X < 0 Then X == 0: If Y < 0)
- Y = 0;
-
- if (Screen.Width < (X + Width))
- X = Screen.Width - Width;
-
- if (Screen.Height < (Y + Height))
- Y = Screen.Height - Height;
-
- left = X;
- top = Y;
- WindowState = s.Read("WinState", vbNormal);
- // flags/options
- Flag = s.Read("ShowToolTips", True);
- if (Flag)
- menToolTips_Click();
-
- menBorder.Checked = ! CBool(s.Read("ShowBorder", False));
- Flag = CBool(s.Read("AutoScroll", True));
- if (! Flag)
- {
- AutoScrollFlag = False;
- menAutoScroll.Checked = False;
- }
-
- Flag = CBool(s.Read("SoundFX", True));
- FXOnFlag = (Flag ? -1 : 0);
- menSoundFX.Checked = Flag;
- SignatureDelay = CLng(s.Read("SignatureDelay", 3000));
- AllowRedDiskCheat = CInt(s.Read("AllowRedDiskCheat", 1));
- AllowEatRightRedDiskBug = CInt(s.Read("AllowEatRightRedDiskBug", 1));
- MySignature = s.Read("MySignature", "");
- // speed
- X = s.Read("FrameDelayPlay", 1000000 / 35);
- i = GetSpeedIndex(X);
- menPlaySpeed_Click(i);
- X = s.Read("FrameDelayDemo", 1000000 / 35);
- i = GetSpeedIndex(X);
- menDemoSpeed_Click(i);
- // Zoom
- i = s.Read("Stretch", 4);
- if (i < menStretch.LBound || menStretch.UBound < i)
- i = 4;
-
- menStretch_Click (i);
- }
-}
-
-static void SaveSettings()
-{
- SettingsObject s;
- int i;
-
- {
- s.Save "LastPath", (ModifiedFlag ? OrigPath : CurPath);
- if (WindowState != vbMinimized)
- {
- s.Save "Width", Width;
- s.Save "Height", Height;
- s.Save "Left", left;
- s.Save "Top", top;
- s.Save "WinState", WindowState;
- }
-
- s.Save "ShowToolTips", menToolTips.Checked;
- s.Save "ShowBorder", menBorder.Checked;
- s.Save "AutoScroll", menAutoScroll.Checked;
- s.Save "SoundFX", menSoundFX.Checked;
- s.Save "SignatureDelay", SignatureDelay;
- s.Save "AllowRedDiskCheat", AllowRedDiskCheat;
- s.Save "AllowEatRightRedDiskBug", AllowEatRightRedDiskBug;
- s.Save "MySignature", MySignature;
- // speeds
- s.Save "FrameDelayPlay", DeltaTPlay;
- s.Save "FrameDelayDemo", DeltaTDemo;
- // zoom
- for (i = menStretch.LBound; i <= menStretch.UBound; i++)
- {
- if (menStretch(i).Checked)
- break;
- }
-
- s.Save "Stretch", i;
- // s.Save "",
- }
-}
-
-void ReLoadStretchSprites()
-{
- long Tmp;
- BitMapObject NBMP, SBMP;
- char *tmpMpxBmp;
-
- // If Stretch = 1 Then
- MpxBmp = App.Path & "/Mpx.bmp";
- // Else
- // MpxBmp = App.Path & "\Mpx" & Stretch & ".bmp"
- // tmpMpxBmp = App.Path & "\Mpx.bmp"
- // If FileExists(MpxBmp) And FileExists(tmpMpxBmp) Then
- // If FileDateTime(MpxBmp) < FileDateTime(tmpMpxBmp) Then
- // MayKill MpxBmp
- // End If
- // End If
- // If Not FileExists(MpxBmp) Then
- // MousePointer = 11
- // // Set NBMP = New BitMapObject // (handle this later, if needed)
- // tmpMpxBmp = App.Path & "\Mpx.bmp"
- // If Not FileExists(tmpMpxBmp) Then
- // ReportError "ReLoadStretchSprites", "File not found: " & tmpMpxBmp
- // MESSAGE_BOX("an error occured"); // MsgBox "File not found: " & tmpMpxBmp, vbCritical, "MegaPlex - Error"
- // End
- // End If
- // NBMP.CreateFromFile tmpMpxBmp
- // Set SBMP = NBMP.GetStretchCopy(Stretch)
- // SBMP.SaveToFile MpxBmp
- // Set NBMP = Nothing
- // Set SBMP = Nothing
- // MousePointer = 0
- // End If
- // End If
- // StretchedSprites = New DDSpriteBuffer; // (handle this later, if needed)
- if (! StretchedSprites.CreateFromFile(MpxBmp, 16, 16))
- SET_TO_NOTHING(&StretchedSprites, sizeof(StretchedSprites));
-}
-
-void SaveSnapshot(currency Number)
-{
- char *Path;
-
- Path = CAT(WithSlash(App.Path), "Capture");
- if (! IsDir(Path))
- MkDir(Path);
-
- Path = Path & "\" & Format(Number, "00000000") & ".bmp";
- SavePicture CaptureWindow(picPane.hWnd, True, 0, 0, picPane.ScaleWidth, picPane.ScaleHeight), Path;
}
-
-#endif
#ifndef MAINFORM_H
#define MAINFORM_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
+
extern void DrawFrameIfNeeded();
extern void DisplayLevel();
extern void DrawFieldNoAnimated(int X, int Y);
extern void DrawSprite(int X, int Y, int SpritePos);
extern void DrawImage(int X, int Y, int graphic);
-#if 0
-extern void InvalidateRect(long XMin, long YMin, long XMax, long YMax);
-#endif
-extern void Let_PanelVisible(boolean NewVal);
-extern void ReLoadStretchSprites();
-extern void SaveSnapshot(currency Number);
+
extern void SetDisplayRegion();
extern void SetScrollEdges();
-extern void ShowKey(int KeyVar);
-extern void menDemoSpeed_Click(int Index);
-extern void menEdit_Click();
-extern void menPlaySpeed_Click(int Index);
-extern void menStop_Click();
+
extern void menPlay_Click();
-extern void menPlayDemo_Click();
+
extern void Form_Load();
#endif /* MAINFORM_H */
#include "MainGameLoop.h"
-int GameLoopRunning;
boolean bPlaying;
int LeadOutCounter, EnterRepeatCounter;
-int ForcedExitFlag;
int ExitToMenuFlag;
-int SavedGameFlag;
-boolean UserDragFlag;
boolean AutoScrollFlag;
void subMainGameLoop_Init()
{
- if (DemoFlag != 0)
- {
- // EP set level success byte: demo, not game
- WasDemoFlag = 1;
- EP_GameDemoVar0DAA = 0; // demo
- }
- else // loc_g_1836:
- {
- // EP set level success byte: game, not demo
- WasDemoFlag = 0;
- EP_GameDemoVar0DAA = 1; // game
- }
-
// This was a bug in the original Supaplex: sometimes red disks could not
// be released. This happened if Murphy was killed DURING a red disk release
// and the next try started.
RedDiskReleasePhase = 0; // (re-)enable red disk release
- UpdatedFlag = 0;
- GameLoopRunning = 1;
- LevelStatus = 0;
}
void subMainGameLoop_Main(byte action, boolean warp_mode)
// --------------------- START OF GAME-BUSY LOOP -----------------------------
// ---------------------------------------------------------------------------
- if (EndFlag)
- {
- // (should never happen)
-
- // printf("::: EndFlag == True\n");
-
- goto locExitMainGameLoop;
- }
-
subProcessKeyboardInput(action); // check keyboard, act on keys
// ---------------------------------------------------------------------------
subCalculateScreenScrollPos(); // calculate screen start addrs
- if ((! UserDragFlag) && AutoScrollFlag)
+ if (AutoScrollFlag)
ScrollTowards(ScreenScrollXPos, ScreenScrollYPos);
- if (ForcedExitFlag != 0) // Forced Exit?' yes--exit!
- {
- // (should never happen)
-
- // printf("::: ForcedExitFlag == True\n");
-
- goto locExitMainGameLoop;
- }
-
TimerVar = TimerVar + 1;
#if 1
// lead-out done: exit now
// ---------------------- END OF GAME-BUSY LOOP (including lead-out) ---------
+#if 0
locExitMainGameLoop:
+#endif
#if 1
printf("::: locExitMainGameLoop reached [%d]\n", LeadOutCounter);
}
{
- ax = MainForm.picPane.Width / 2;
- Ay = MainForm.picPane.Height / 2;
+ ax = SXSIZE / 2;
+ Ay = SYSIZE / 2;
}
ScreenScrollXPos = Stretch * (MurphyScreenXPos + TILEX / 2) - ax;
#ifndef MAINGAMELOOP_H
#define MAINGAMELOOP_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
extern boolean AutoScrollFlag;
-extern boolean UserDragFlag;
extern boolean bPlaying;
extern int ExitToMenuFlag;
-extern int ForcedExitFlag;
-extern int GameLoopRunning;
extern int LeadOutCounter, EnterRepeatCounter;
-extern int SavedGameFlag;
extern void subMainGameLoop_Init();
extern void subMainGameLoop_Main(byte, boolean);
file.c \
main.c \
vb_lib.c \
- vb_vars.c \
\
ASM.c \
BugsTerminals.c \
DDScrollBuffer.c \
DDSpriteBuffer.c \
- Demo.c \
Display.c \
DoGameStuff.c \
Electrons.c \
MainGameLoop.c \
Murphy.c \
OrangeDisk.c \
- PathTools.c \
- SettingsObject.c \
SnikSnaks.c \
Sound.c \
- TickCountObject.c \
- TopMost.c \
- Zonk.c \
- modAnimations.c \
- modMPX.c
+ Zonk.c
OBJS = init.o \
file.o \
main.o \
vb_lib.o \
- vb_vars.o \
\
ASM.o \
BugsTerminals.o \
DDScrollBuffer.o \
DDSpriteBuffer.o \
- Demo.o \
Display.o \
DoGameStuff.o \
Electrons.o \
MainGameLoop.o \
Murphy.o \
OrangeDisk.o \
- PathTools.o \
- SettingsObject.o \
SnikSnaks.o \
Sound.o \
- TickCountObject.o \
- TopMost.o \
- Zonk.o \
- modAnimations.o \
- modMPX.o
+ Zonk.o
GAME_SP = game_sp.a
int tDeltaX, tDeltaY, tPos, Tmp;
// Variables that hold information about the animation sequence
+#if 0
static int *dx = 0; // an array of image positions in moving.mpx, finalized with -1
+#endif
static int dx1 = 0; // same as "*dx" above, but as image/animation token
static int dx2 = 0; // an additional image position of a second sprite, for instance: yellow disk if pushed
static int MurphyDX = 0, MurphyDY = 0; // murphys move steps
MovHighByte(&PlayField16[*si], 0x2A);
MovingPictureSequencePhase = 0x40; // init picture move sequence
+#if 0
dx = aniFramesRedDisk;
+#else
dx1 = aniRedDisk;
+#endif
MovLowByte(&RedDiskReleasePhase, 1);
RedDiskReleaseMurphyPos = *si; // remember Murphy's location
goto loc_Split;
// ==========================================================================
loc_g_6312:
+#if 0
dx = (MurphyVarFaceLeft == 0 ? aniFramesMurphyEatUpRight : aniFramesMurphyEatUpLeft);
+#else
dx1 = (MurphyVarFaceLeft == 0 ? aniMurphyMoveUpRight : aniMurphyMoveUpLeft);
+#endif
PlayField16[*si - FieldWidth] = 0x103;
PlayField16[*si] = 0x300;
*si = *si - FieldWidth;
// ==========================================================================
loc_g_6341:
+#if 0
dx = aniFramesMurphyEatLeft;
+#else
dx1 = aniMurphyMoveLeft;
+#endif
PlayField16[*si - 1] = 0x203;
PlayField16[*si] = 0x300;
*si = *si - 1;
// ==========================================================================
loc_g_6364:
+#if 0
dx = (MurphyVarFaceLeft == 0 ? aniFramesMurphyEatUpRight : aniFramesMurphyEatUpLeft);
+#else
dx1 = (MurphyVarFaceLeft == 0 ? aniMurphyMoveUpRight : aniMurphyMoveUpLeft);
+#endif
PlayField16[*si + FieldWidth] = 0x303;
PlayField16[*si] = 0x300;
*si = *si + FieldWidth;
// ==========================================================================
loc_g_6399:
+#if 0
dx = aniFramesMurphyEatRight;
+#else
dx1 = aniMurphyMoveRight;
+#endif
PlayField16[*si + 1] = 0x403;
PlayField16[*si] = 0x300;
*si = *si + 1;
subSoundFXBase();
#endif
+#if 0
dx = (MurphyVarFaceLeft == 0 ? aniFramesMurphyEatUpRight : aniFramesMurphyEatUpLeft);
+#else
dx1 = (MurphyVarFaceLeft == 0 ? aniMurphyDigUpRight : aniMurphyDigUpLeft);
+#endif
PlayField16[*si - FieldWidth] = 0x503;
PlayField16[*si] = 0x300;
*si = *si - FieldWidth;
subSoundFXBase();
#endif
+#if 0
dx = aniFramesMurphyEatLeft;
+#else
dx1 = aniMurphyDigLeft;
+#endif
PlayField16[*si - 1] = 0x203;
PlayField16[*si] = 0x300;
*si = *si - 1;
subSoundFXBase();
#endif
+#if 0
dx = (MurphyVarFaceLeft == 0 ? aniFramesMurphyEatUpRight : aniFramesMurphyEatUpLeft);
+#else
dx1 = (MurphyVarFaceLeft == 0 ? aniMurphyDigUpRight : aniMurphyDigUpLeft);
+#endif
PlayField16[*si + FieldWidth] = 0x703;
PlayField16[*si] = 0x300;
*si = *si + FieldWidth;
subSoundFXBase();
#endif
+#if 0
dx = aniFramesMurphyEatRight;
+#else
dx1 = aniMurphyDigRight;
+#endif
PlayField16[*si + 1] = 0x803;
PlayField16[*si] = 0x300;
*si = *si + 1;
subSoundFXBase();
#endif
+#if 0
dx = aniFramesTouchBase;
+#else
dx1 = aniTouchBase;
+#endif
dxPos = *si - FieldWidth;
MovHighByte(&PlayField16[*si], 0x10);
goto loc_StopNoSplit;
subSoundFXBase();
#endif
+#if 0
dx = aniFramesTouchBase;
+#else
dx1 = aniTouchBase;
+#endif
dxPos = *si - 1;
MovHighByte(&PlayField16[*si], 0x11);
goto loc_StopNoSplit;
subSoundFXBase();
#endif
+#if 0
dx = aniFramesTouchBase;
+#else
dx1 = aniTouchBase;
+#endif
dxPos = *si + FieldWidth;
MovHighByte(&PlayField16[*si], 0x12);
goto loc_StopNoSplit;
subSoundFXBase();
#endif
+#if 0
dx = aniFramesTouchBase;
+#else
dx1 = aniTouchBase;
+#endif
dxPos = *si + 1;
MovHighByte(&PlayField16[*si], 0x13);
goto loc_StopNoSplit;
subSoundFXInfotron();
#endif
+#if 0
dx = (MurphyVarFaceLeft == 0 ? aniFramesMurphyEatUpRight : aniFramesMurphyEatUpLeft);
+#else
dx1 = (MurphyVarFaceLeft == 0 ? aniMurphyEatUpRight : aniMurphyEatUpLeft);
+#endif
PlayField16[*si - FieldWidth] = 0x903;
PlayField16[*si] = 0x300;
*si = *si - FieldWidth;
subSoundFXInfotron();
#endif
+#if 0
dx = aniFramesEatInfotronLeft;
+#else
dx1 = aniEatInfotronLeft;
+#endif
#if 0
dx2 = fiInfotron;
dx2Step = -1;
subSoundFXInfotron();
#endif
+#if 0
dx = (MurphyVarFaceLeft == 0 ? aniFramesMurphyEatUpRight : aniFramesMurphyEatUpLeft);
+#else
dx1 = (MurphyVarFaceLeft == 0 ? aniMurphyEatUpRight : aniMurphyEatUpLeft);
+#endif
PlayField16[*si + FieldWidth] = 0xB03;
PlayField16[*si] = 0x300;
*si = *si + FieldWidth;
subSoundFXInfotron();
#endif
+#if 0
dx = aniFramesEatInfotronRight;
+#else
dx1 = aniEatInfotronRight;
+#endif
#if 0
dx2 = fiInfotron;
dx2Step = 1;
subSoundFXInfotron();
#endif
+#if 0
dx = aniFramesTouchInfotron;
+#else
dx1 = aniTouchInfotron;
+#endif
MovHighByte(&PlayField16[*si], 0x14);
MovHighByte(&PlayField16[*si - FieldWidth], 0xFF);
goto loc_StopNoSplit;
subSoundFXInfotron();
#endif
+#if 0
dx = aniFramesTouchInfotron;
+#else
dx1 = aniTouchInfotron;
+#endif
MovHighByte(&PlayField16[*si], 0x15);
MovHighByte(&PlayField16[*si - 1], 0xFF);
goto loc_StopNoSplit;
subSoundFXInfotron();
#endif
+#if 0
dx = aniFramesTouchInfotron;
+#else
dx1 = aniTouchInfotron;
+#endif
MovHighByte(&PlayField16[*si], 0x16);
MovHighByte(&PlayField16[*si + FieldWidth], 0xFF);
goto loc_StopNoSplit;
subSoundFXInfotron();
#endif
+#if 0
dx = aniFramesTouchInfotron;
+#else
dx1 = aniTouchInfotron;
+#endif
MovHighByte(&PlayField16[*si], 0x17);
MovHighByte(&PlayField16[*si + 1], 0xFF);
goto loc_StopNoSplit;
subSoundFXExit();
#endif
- data_h_DemoDone = 1; // EP set level success bytes
- LevelStatus = 1; // set Level Status DONE
- EP_GameDemoVar0DAA = 0; // force demo for lead-out
- if (SavedGameFlag == 0) // saved game running?
- {
- if (UpdateTimeFlag != 0) // update time?
- {
- UpdatedFlag = 1; // prevent double update
- }
- }
-
-#if 0
- subUpdateHallOfFame(); // update time + Hall-Of-Fame
-#endif
-
LeadOutCounter = 0x40; // quit: start lead-out
+#if 0
dx = aniFramesMurphyExit;
+#else
dx1 = aniMurphyExit;
+#endif
MovHighByte(&PlayField16[*si], 0xD);
goto loc_StopNoSplit;
MovHighByte(&PlayField16[*si - 2], 1);
subCopyImageToScreen(*si, aniPushLeft); // draw pushing murphy
+#if 0
dx = aniFramesZonkRollLeft;
+#else
dx1 = aniZonkRollLeft;
+#endif
dxPos = *si - 1;
dx2 = aniPushLeft;
dx2Step = 1;
MovHighByte(&PlayField16[*si + 2], 1);
subCopyImageToScreen(*si, aniPushRight); // draw pushing murphy
+#if 0
dx = aniFramesZonkRollRight;
+#else
dx1 = aniZonkRollRight;
+#endif
dxPos = *si + 1;
dx2 = aniPushRight;
dx2Step = -1;
if (PlayField16[*si - 2 * FieldWidth] != 0)
return;
+#if 0
dx = aniFramesSplitUpDown;
+#else
dx1 = aniSplitUpDown;
+#endif
dx2Step = -FieldWidth;
PlayField16[*si] = 0x1803;
PlayField16[*si - 2 * FieldWidth] = 0x300;
if (PlayField16[*si - 2] != 0)
return;
+#if 0
dx = aniFramesMurphyEatLeft;
+#else
dx1 = aniMurphyMoveLeft;
+#endif
dx2Step = -1;
PlayField16[*si] = 0x1903;
PlayField16[*si - 2] = 0x300;
if (PlayField16[*si + 2 * FieldWidth] != 0)
return;
+#if 0
dx = aniFramesSplitUpDown;
+#else
dx1 = aniSplitUpDown;
+#endif
dx2Step = FieldWidth;
PlayField16[*si] = 0x1A03;
PlayField16[*si + 2 * FieldWidth] = 0x300;
if (PlayField16[*si + 2] != 0)
return;
+#if 0
dx = aniFramesMurphyEatRight;
+#else
dx1 = aniMurphyMoveRight;
+#endif
dx2Step = 1;
PlayField16[*si] = 0x1B03;
PlayField16[*si + 2] = 0x300;
// ==========================================================================
loc_g_69A6:
+#if 0
dx = (MurphyVarFaceLeft == 0 ? aniFramesMurphyEatUpRight : aniFramesMurphyEatUpLeft);
+#else
dx1 = (MurphyVarFaceLeft == 0 ? aniMurphyEatUpRight : aniMurphyEatUpLeft);
+#endif
PlayField16[*si] = 0x1C03;
PlayField16[*si - FieldWidth] = 0x300;
goto loc_StopNoSplit;
// ==========================================================================
loc_g_69CE:
+#if 0
dx = aniFramesMurphyEatLeft;
+#else
dx1 = aniMurphyEatLeft;
+#endif
PlayField16[*si] = 0x300; // !!!!!! this time we move murphy at sequence-start!
PlayField16[*si - 1] = 0x1D03;
*si = *si - 1;
// ==========================================================================
loc_g_69F7:
+#if 0
dx = (MurphyVarFaceLeft == 0 ? aniFramesMurphyEatUpRight : aniFramesMurphyEatUpLeft);
+#else
dx1 = (MurphyVarFaceLeft == 0 ? aniMurphyEatUpRight : aniMurphyEatUpLeft);
+#endif
PlayField16[*si] = 0x1E03;
PlayField16[*si + FieldWidth] = 0x300;
goto loc_StopNoSplit;
// ==========================================================================
loc_g_6A1F:
+#if 0
// dx = aniFramesMurphyEatRightRedDisk 'this sequence is 9 steps long!
dx = aniFramesMurphyEatRight;
+#else
dx1 = aniMurphyEatRight;
+#endif
// --------------------------------------------------------------------------
// BugFix
// Table data_h_145A, pointed to by table data_h_105E, has a severe bug:
// Remember that this is not the real bug-fix, but we must live with
// this existing bug and correct for the consequences of it.
-#if 1
- if (0 == AllowEatRightRedDiskBug) // Murphy's screen x-position
+ if (AllowEatRightRedDiskBug == 0) // Murphy's screen x-position
MurphyScreenXPos = MurphyScreenXPos - 2 * MurphyZoomFactor;
-#else
- if (0 == AllowEatRightRedDiskBug) // Murphy's screen x-position
- MurphyScreenXPos = MurphyScreenXPos - 2;
-#endif
SeqPos = -1;
// FS: for me this means to blit the first animation frame twice
// ==========================================================================
loc_g_6A48:
+#if 0
dx = aniFramesTouchRedDisk;
+#else
dx1 = aniTouchRedDisk;
+#endif
MovHighByte(&PlayField16[*si], 0x20);
MovHighByte(&PlayField16[*si - FieldWidth], 3);
goto loc_StopNoSplit;
// ==========================================================================
loc_g_6A64:
+#if 0
dx = aniFramesTouchRedDisk;
+#else
dx1 = aniTouchRedDisk;
+#endif
MovHighByte(&PlayField16[*si], 0x21);
MovHighByte(&PlayField16[*si - 1], 3);
goto loc_StopNoSplit;
// ==========================================================================
loc_g_6A80:
+#if 0
dx = aniFramesTouchRedDisk;
+#else
dx1 = aniTouchRedDisk;
+#endif
MovHighByte(&PlayField16[*si], 0x22);
MovHighByte(&PlayField16[*si + FieldWidth], 3);
goto loc_StopNoSplit;
// ==========================================================================
loc_g_6A9C:
+#if 0
dx = aniFramesTouchRedDisk;
+#else
dx1 = aniTouchRedDisk;
+#endif
MovHighByte(&PlayField16[*si], 0x23);
MovHighByte(&PlayField16[*si + 1], 3);
#if 0
subCopyImageToScreen(*si, aniPushRight);
#endif
+#if 0
dx = aniFramesYellowDisk;
+#else
dx1 = aniYellowDisk;
+#endif
dxPos = *si - FieldWidth;
#if 1
dx2 = (MurphyVarFaceLeft == 0 ? aniPushRight : aniPushLeft);
PlayField16[*si - 2] = 0x1200;
subCopyImageToScreen(*si, aniPushLeft);
+#if 0
dx = aniFramesYellowDisk;
+#else
dx1 = aniYellowDisk;
+#endif
dxPos = *si - 1;
dx2 = aniPushLeft;
dx2Step = 1;
#if 0
subCopyImageToScreen(*si, aniPushRight);
#endif
+#if 0
dx = aniFramesYellowDisk;
+#else
dx1 = aniYellowDisk;
+#endif
dxPos = *si + FieldWidth;
#if 1
dx2 = (MurphyVarFaceLeft == 0 ? aniPushRight : aniPushLeft);
PlayField16[*si + 2] = 0x1200;
subCopyImageToScreen(*si, aniPushRight);
+#if 0
dx = aniFramesYellowDisk;
+#else
dx1 = aniYellowDisk;
+#endif
dxPos = *si + 1;
dx2 = aniPushRight;
dx2Step = -1;
PlayField16[*si - 2] = 0x800;
subCopyImageToScreen(*si, aniPushLeft);
+#if 0
dx = aniFramesOrangeDisk;
+#else
dx1 = aniOrangeDisk;
+#endif
dxPos = *si - 1;
dx2 = aniPushLeft;
dx2Step = 1;
PlayField16[*si + 2] = 0x100;
subCopyImageToScreen(*si, aniPushRight);
+#if 0
dx = aniFramesOrangeDisk;
+#else
dx1 = aniOrangeDisk;
+#endif
dxPos = *si + 1;
dx2 = aniPushRight;
dx2Step = -1;
{
// ++++++++++++++++++++++++++
// Begin of normal movement
-#if 1
MurphyScreenXPos = MurphyScreenXPos + MurphyDX * MurphyZoomFactor;
MurphyScreenYPos = MurphyScreenYPos + MurphyDY * MurphyZoomFactor;
-#else
- MurphyScreenXPos = MurphyScreenXPos + MurphyDX;
- MurphyScreenYPos = MurphyScreenYPos + MurphyDY;
-#endif
-
-
-#if 0
- printf("::: %04d [%03ld, %02d] ----------> %s [%d] [%d, %d] [%d, %d] [%d]\n",
- TimerVar,
- DemoOffset - DemoPointer, DemoKeyRepeatCounter,
- (DemoKeyCode == keyNone ? "(none)" :
- DemoKeyCode == keyLeft ? "left" :
- DemoKeyCode == keyRight ? "right" :
- DemoKeyCode == keyUp ? "up" :
- DemoKeyCode == keyDown ? "down" :
- DemoKeyCode == keySpace ? "space" :
- DemoKeyCode == keySpaceLeft ? "space + left" :
- DemoKeyCode == keySpaceRight ? "space + right" :
- DemoKeyCode == keySpaceUp ? "space + up" :
- DemoKeyCode == keySpaceDown ? "space + down" : "(unknown)"),
- DemoKeyCode,
- MurphyScreenXPos, MurphyScreenYPos,
- MurphyPosIndex % 60, MurphyPosIndex / 60,
- ClearPos);
-#endif
-
-#if 0
- Delay(500);
-#endif
-#if 1
if (!(ClearPos < 0)) // clear field that murphy is leaving
subCopyImageToScreen(ClearPos, aniSpace);
-#else
- if (! ClearPos < 0) // clear field that murphy is leaving
- subCopyFieldToScreen(ClearPos, 0);
-#endif
-
-#if 0
- printf("::: ---------------> %d, %d [%d, %d]\n",
- MurphyScreenXPos, MurphyScreenYPos, MurphyDX, MurphyDY);
-#endif
#if 0
// !!! special two-tile animation currently not used !!!
#endif
#if 1
- StretchedSprites.BltImg(X, Y, dx1, Tmp);
+ DDSpriteBuffer_BltImg(X, Y, dx1, Tmp);
GfxGraphic[GetX(*si)][GetY(*si)] = -1; // (Murphy's position)
GfxGraphic[GetX(dxPos)][GetY(dxPos)] = -1; // (snapping position)
// printf("::: Tmp: %d\n", Tmp);
else // pushing something
#endif
{
-#if 1
// (SeqPos iterates from 0 to 7 while pushing)
- StretchedSprites.BltImg(X + tDeltaX, Y + tDeltaY, dx2, SeqPos);
- // printf("::: SeqPos: %d\n", SeqPos);
-#else
- StretchedSprites.BltEx(X + tDeltaX, Y + tDeltaY, dx2);
-#endif
+ DDSpriteBuffer_BltImg(X + tDeltaX, Y + tDeltaY, dx2, SeqPos);
}
}
{
// ++++++++++++++++++++++++++++++++
// Begin of split movement (port)
-#if 1
MurphyScreenXPos = MurphyScreenXPos + 2 * MurphyDX * MurphyZoomFactor;
MurphyScreenYPos = MurphyScreenYPos + 2 * MurphyDY * MurphyZoomFactor;
-#else
- MurphyScreenXPos = MurphyScreenXPos + 2 * MurphyDX;
- MurphyScreenYPos = MurphyScreenYPos + 2 * MurphyDY;
-#endif
subCopyImageToScreen(ClearPos, aniSpace); // clear the field that murphy leaves
tDeltaX = MurphyDX * LocalStretch * (SeqPos + 1);
tDeltaY = MurphyDY * LocalStretch * (SeqPos + 1);
X = GetStretchX(dxPos) + tDeltaX;
Y = GetStretchY(dxPos) + tDeltaY;
-#if 1
- StretchedSprites.BltImg(X, Y, dx1, SeqPos); // plot first murphy
-#else
- StretchedSprites.BltEx(X, Y, dx[SeqPos]); // plot first murphy
-#endif
+ DDSpriteBuffer_BltImg(X, Y, dx1, SeqPos); // plot first murphy
+
tPos = dxPos + dx2Step;
X = GetStretchX(tPos);
Y = GetStretchY(tPos);
-#if 1
- StretchedSprites.BltImg(X + tDeltaX, Y + tDeltaY, dx1, SeqPos); // plot second murphy
- StretchedSprites.BltImg(X, Y, fiGraphic[LowByte(PlayField16[tPos])], 0); // replot the port on top
-#else
- StretchedSprites.BltEx(X + tDeltaX, Y + tDeltaY, dx[SeqPos]); // plot second murphy
- StretchedSprites.BltEx(X, Y, LowByte(PlayField16[tPos])); // replot the port on top
-#endif
+ DDSpriteBuffer_BltImg(X + tDeltaX, Y + tDeltaY, dx1, SeqPos); // plot second murphy
+ DDSpriteBuffer_BltImg(X, Y, fiGraphic[LowByte(PlayField16[tPos])], 0); // replot the port on top
// End of split movement (port)
// ------------------------------
} // loc_g_6D1E:'loc_g_6D28:
// +++++++++++++++++++++++++++++++++++++++++
X = GetStretchX(si);
Y = GetStretchY(si);
- StretchedSprites.BltImg(X, Y, graphic, sync_frame);
+ DDSpriteBuffer_BltImg(X, Y, graphic, sync_frame);
// +++++++++++++++++++++++++++++++++++++++++
}
#ifndef MURPHY_H
#define MURPHY_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
extern void subAdjustZonksInfotronsAboveMurphy(int si);
dx = HighByte(PlayField16[si]) & 0x7;
X = GetStretchX(si);
Y = GetStretchY(si);
- StretchedSprites.BltImg(X, Y, aniSpace, 0);
- StretchedSprites.BltImg(X, Y + TwoPixels * (dx + 1), aniOrangeDisk, dx);
+ DDSpriteBuffer_BltImg(X, Y, aniSpace, 0);
+ DDSpriteBuffer_BltImg(X, Y + TwoPixels * (dx + 1), aniOrangeDisk, dx);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
bl = HighByte(PlayField16[si]) + 1;
#ifndef ORANGEDISK_H
#define ORANGEDISK_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
+++ /dev/null
-// ----------------------------------------------------------------------------
-// PathTools.c
-// ----------------------------------------------------------------------------
-
-#include "PathTools.h"
-
-// static char *VB_Name = "PathTools_Module";
-
-// --- Option Explicit
-// --- Option Compare Text
-
-// ########### Quote & UnQuote ##################################################
-
-void UnQuote(char *ST)
-{
- long L;
-
- L = strlen(ST);
- while (STRING_IS_LIKE(ST, "\"*"))
- {
- ST = Right(ST, L - 1);
- L = L - 1;
- }
-
- while (STRING_IS_LIKE(ST, "*\""))
- {
- ST = Left(ST, L - 1);
- }
-}
-
-void Quote(char *ST)
-{
- if (! STRING_IS_LIKE(ST, "\"*"))
- ST = CAT("\"", ST);
-
- if (! STRING_IS_LIKE(ST, "*\""))
- ST = CAT(ST, "\"");
-}
-
-char *UnQuoted(char *STRG)
-{
- char *UnQuoted;
-
- long L;
- char *ST;
-
- ST = STRG;
- L = strlen(ST);
- while (STRING_IS_LIKE(ST, "\"*"))
- {
- ST = Right(ST, L - 1);
- L = L - 1;
- }
-
- while (STRING_IS_LIKE(ST, "*\""))
- {
- ST = Left(ST, L - 1);
- }
-
- UnQuoted = ST;
-
- return UnQuoted;
-}
-
-char *Quoted(char *STRG)
-{
- char *Quoted;
-
- char *ST;
-
- ST = STRG;
- if (! STRING_IS_LIKE(ST, "\"*"))
- ST = CAT("\"", ST);
-
- if (! STRING_IS_LIKE(ST, "*\""))
- ST = CAT(ST, "\"");
-
- Quoted = ST;
-
- return Quoted;
-}
-
-// ############ Path-/FileName-Extraction and concatanation ######################
-
-char *StripDir(char *Path)
-{
- char *StripDir;
-
- char *T;
- long i;
-
- T = StrReverse(Path);
- i = InStr(1, T, "/");
- if (i == 0)
- StripDir = "";
- else
- StripDir = StrReverse(Right(T, strlen(T) - i));
-
- return StripDir;
-}
-
-char *StripFileName(char *Path)
-{
- char *StripFileName;
-
- char *T;
- long i;
-
- T = StrReverse(Path);
- if (STRING_IS_LIKE(T, "/*"))
- T = Right(T, strlen(T) - 1);
-
- i = InStr(1, T, "/");
- if (i == 0)
- i = strlen(T) + 1;
-
- if (i < 2)
- StripFileName = "";
- else
- StripFileName = StrReverse(Left(T, i - 1));
-
- return StripFileName;
-}
-
-char *StripExtension(char *Path)
-{
- char *StripExtension;
-
- char *T;
- long i, iSlash;
-
- T = StrReverse(Path);
- iSlash = InStr(1, T, "/");
- i = InStr(1, T, ".");
- if ((i < 2) || (iSlash < i))
- StripExtension = "";
- else
- StripExtension = StrReverse(Left(T, i - 1));
-
- return StripExtension;
-}
-
-char *NewExtension(char *Path, char *NewExt)
-{
- char *NewExtension;
-
- // NewExtension("C:\MyPath\MyFile.Old","New") returns "C:\MyPath\MyFile.New"
- // NewExtension("C:\MyPath.dir\MyFile","New") returns "C:\MyPath\MyFile.New"
- char *T;
- long i, iSlash, ELen;
-
- T = StrReverse(Path);
- iSlash = InStr(1, T, "/");
- i = InStr(1, T, ".");
- if ((i < 1) || (iSlash < i))
- ELen = 0;
- else
- ELen = i;
-
- NewExtension = CAT(Left(StrReverse(T), strlen(T) - i), ".", NewExt);
-
- return NewExtension;
-}
-
-char *StripExtensionlessFileName(char *Path)
-{
- char *StripExtensionlessFileName;
-
- char *T, *T2;
- // long i, iSlash;
-
- T = StripFileName(Path);
- T2 = StripExtension(Path);
- StripExtensionlessFileName = Left(T, strlen(T) - strlen(T2) - (0 < strlen(T2) ? 1 : 0));
-
- return StripExtensionlessFileName;
-}
-
-char *WithSlash(char *Path)
-{
- char *WithSlash;
-
- if (STRING_IS_LIKE(Path, "*/"))
- {
- WithSlash = Path;
- }
- else
- {
- WithSlash = CAT(Path, "/");
- }
-
- return WithSlash;
-}
-
-char *SlashLess(char *Path)
-{
- char *SlashLess;
-
- SlashLess = Path;
- while (STRING_IS_LIKE(SlashLess, "*/"))
- {
- SlashLess = Left(Path, strlen(Path) - 1);
- }
-
- return SlashLess;
-}
-
-// ############ File-/Diresctory-Operations ######################################
-
-boolean FileExists(char *Path)
-{
- boolean FileExists;
-
- if ((STRING_IS_LIKE(Dir(Path), "")) || (STRING_IS_LIKE(Path, "")))
- FileExists = False;
- else
- FileExists = True;
-
- return FileExists;
-}
-
-void MayKill(char *Path)
-{
-
- // --- On Error GoTo MayKillEH
- Kill(Path);
- // MayKillEH:
-}
-
-boolean IsDir(char *Path)
-{
- boolean IsDir;
-
-
- // --- On Error Resume Next
- IsDir = (vbDirectory == (GetAttr(Path) & vbDirectory));
- if (Err.Number != 0)
- IsDir = False;
-
- return IsDir;
-}
-
-// ######### binary comparison of files ##########################################
-
-boolean FilesEqual(char *Path1, char *Path2)
-{
- boolean FilesEqual;
-
- FILE *FNum1, *FNum2;
- long nSize, i;
- boolean b1Open, b2Open;
- byte *bin1, *bin2;
-
- FilesEqual = False;
- // Debug.Assert(FileExists(Path1));
- // Debug.Assert(FileExists(Path2));
- if (! (FileExists(Path1) && FileExists(Path2)))
- return FilesEqual;
-
- nSize = FileLen(Path1);
- if (nSize != FileLen(Path2))
- return FilesEqual;
-
- bin1 = REDIM_1D(sizeof(byte), 0, nSize + 1 - 1);
- bin2 = REDIM_1D(sizeof(byte), 0, nSize + 1 - 1);
- b1Open = False;
- b2Open = False;
-
- // --- On Error GoTo FilesEqualEH
- // FNum1 = FreeFile();
- FNum1 = fopen(Path1, "rb");
- b1Open = True;
- FILE_GET(FNum1, -1, &bin1, sizeof(bin1));
- fclose(FNum1);
- b1Open = False;
- // FNum2 = FreeFile();
- FNum2 = fopen(Path2, "rb");
- b2Open = True;
- FILE_GET(FNum2, -1, &bin2, sizeof(bin2));
- fclose(FNum2);
- b2Open = False;
- // --- On Error GoTo 0
-
- for (i = 1; i <= nSize; i++)
- {
- if (bin1[i] != bin2[i]) // return false
- return FilesEqual;
- }
-
- FilesEqual = True;
- return FilesEqual;
-
-#if 0
-FilesEqualEH:
- if (b1Open)
- fclose(FNum1);
-
- if (b2Open)
- fclose(FNum2);
-
- return FilesEqual;
-#endif
-
-}
+++ /dev/null
-// ----------------------------------------------------------------------------
-// PathTools.h
-// ----------------------------------------------------------------------------
-
-#ifndef PATHTOOLS_H
-#define PATHTOOLS_H
-
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
-#include "global.h"
-
-extern boolean FileExists(char *Path);
-extern boolean FilesEqual(char *Path1, char *Path2);
-extern boolean IsDir(char *Path);
-extern void MayKill(char *Path);
-extern char *NewExtension(char *Path, char *NewExt);
-extern void Quote(char *ST);
-extern char *Quoted(char *STRG);
-extern char *SlashLess(char *Path);
-extern char *StripDir(char *Path);
-extern char *StripExtension(char *Path);
-extern char *StripExtensionlessFileName(char *Path);
-extern char *StripFileName(char *Path);
-extern void UnQuote(char *ST);
-extern char *UnQuoted(char *STRG);
-extern char *WithSlash(char *Path);
-
-#endif /* PATHTOOLS_H */
+++ /dev/null
-// ----------------------------------------------------------------------------
-// SettingsObject.c
-// ----------------------------------------------------------------------------
-
-#include "SettingsObject.h"
-
-// --- VERSION 1.0 CLASS
-// --- BEGIN
-// --- MultiUse = -1 'True // True
-// --- Persistable = 0 'NotPersistable // NotPersistable
-// --- DataBindingBehavior = 0 'vbNone // vbNone
-// --- DataSourceBehavior = 0 'vbNone // vbNone
-// --- MTSTransactionMode = 0 'NotAnMTSObject // NotAnMTSObject
-// --- END
-
-// static char *VB_Name = "SettingsObject";
-// static boolean VB_GlobalNameSpace = False;
-// static boolean VB_Creatable = True;
-// static boolean VB_PredeclaredId = False;
-// static boolean VB_Exposed = False;
-
-// --- Option Explicit
-// --- Option Compare Text
-
-#if 0
-
-const char *AppName = "MegaPlex";
-const char *Config = "Config";
-
-void SettingsObject_Save(char *ValName, int Val)
-{
- SaveSetting(AppName, Config, ValName, Val);
-}
-
-int SettingsObject_Read(char *ValName, int Default)
-{
- int Read;
-
- Read = GetSetting(AppName, Config, ValName, Default);
-
- return Read;
-}
-
-#endif
+++ /dev/null
-// ----------------------------------------------------------------------------
-// SettingsObject.h
-// ----------------------------------------------------------------------------
-
-#ifndef SETTINGSOBJECT_H
-#define SETTINGSOBJECT_H
-
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
-#include "global.h"
-
-extern int SettingsObject_Read(char *ValName, int Default);
-extern void SettingsObject_Save(char *ValName, int Val);
-
-#endif /* SETTINGSOBJECT_H */
#include "SnikSnaks.h"
-static int subDrawSnikSnakFromAbove(int si, int bx);
-static int subDrawSnikSnakFromBelow(int si, int bx);
-static int subDrawSnikSnakFromLeft(int si, int bx);
-static int subDrawSnikSnakFromRight(int si, int bx);
-static int subDrawSnikSnakTurnLeft(int si, int bx);
-static int subDrawSnikSnakTurnRight(int si, int bx);
-static int subSnikSnakFromAbove(int si, int bx);
-static int subSnikSnakFromBelow(int si, int bx);
-static int subSnikSnakFromLeft(int si, int bx);
-static int subSnikSnakFromRight(int si, int bx);
-static int subSnikSnakTurnLeft(int si, int bx);
-static int subSnikSnakTurnRight(int si, int bx);
+
+static void subDrawSnikSnakFromAbove(int, int);
+static void subDrawSnikSnakFromBelow(int, int);
+static void subDrawSnikSnakFromLeft(int, int);
+static void subDrawSnikSnakFromRight(int, int);
+static void subDrawSnikSnakTurnLeft(int, int);
+static void subDrawSnikSnakTurnRight(int, int);
+static void subSnikSnakFromAbove(int, int);
+static void subSnikSnakFromBelow(int, int);
+static void subSnikSnakFromLeft(int, int);
+static void subSnikSnakFromRight(int, int);
+static void subSnikSnakTurnLeft(int, int);
+static void subSnikSnakTurnRight(int, int);
// static char *VB_Name = "modSnikSnak";
// Animate/move Snik-Snaks
// ==========================================================================
-int subAnimateSnikSnaks(int si)
+void subAnimateSnikSnaks(int si)
{
- int subAnimateSnikSnaks;
-
int bx, Tmp;
if (SnikSnaksElectronsFrozen == 1)
- return subAnimateSnikSnaks;
+ return;
#if 1
/* (not sure why this was removed -- this broke several level solutions) */
if (LowByte(PlayField16[si]) != fiSnikSnak)
- return subAnimateSnikSnaks;
+ return;
#endif
- // If LowByte(PlayField16(si)) <> fiSnikSnak Then Exit Function
+ // If LowByte(PlayField16(si)) <> fiSnikSnak Then Exit Function
// Debug.Assert (LowByte(PlayField16[si]) == fiSnikSnak);
+
bx = HighByte(PlayField16[si]);
Tmp = bx / 8;
switch (Tmp)
// Debug.Assert(False);
break;
}
+}
- return subAnimateSnikSnaks;
-} // subAnimateSnikSnaks
-
-int subDrawAnimatedSnikSnaks(int si)
+void subDrawAnimatedSnikSnaks(int si)
{
- int subDrawAnimatedSnikSnaks;
-
int bx, Tmp;
// If SnikSnaksElectronsFrozen = 1 Then Exit Function
+
if (LowByte(PlayField16[si]) != fiSnikSnak)
- return subDrawAnimatedSnikSnaks;
+ return;
bx = HighByte(PlayField16[si]);
Tmp = bx / 8;
subDrawSnikSnakFromLeft(si, bx); // access si from left
break;
}
+}
- return subDrawAnimatedSnikSnaks;
-} // subAnimateSnikSnaks
-
-static int subSnikSnakTurnLeft(int si, int bx)
+static void subSnikSnakTurnLeft(int si, int bx)
{
- static int subSnikSnakTurnLeft;
-
- // int ax, ah, bl, dx, X, Y;
int ax, ah, bl;
ax = (TimerVar & 3);
if (ax == 3)
goto loc_g_7622;
- return subSnikSnakTurnLeft;
+ return;
} // loc_g_75E0:
-#if 1
- subDrawSnikSnakTurnLeft(si, bx);
-#else
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
- X = GetStretchX(si);
- Y = GetStretchY(si);
- StretchedSprites.BltEx(X, Y, aniFramesSnikSnak[bx]);
+ subDrawSnikSnakTurnLeft(si, bx);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
-#endif
bx = (bx + 1) & 0x7;
MovHighByte(&PlayField16[si], bx);
- return subSnikSnakTurnLeft;
+
+ return;
locMayExplode760A:
ah = HighByte(ax);
if (ah == 0x1B)
- return subSnikSnakTurnLeft;
+ return;
if (ah == 0x19)
- return subSnikSnakTurnLeft;
+ return;
if (ah == 0x18)
- return subSnikSnakTurnLeft;
+ return;
if (ah == 0x1A)
- return subSnikSnakTurnLeft;
+ return;
ExplodeFieldSP(si); // Explode
- return subSnikSnakTurnLeft;
+
+ return;
loc_g_7622:
bl = HighByte(PlayField16[si]);
if (bl == 6)
goto loc_g_76A7;
- return subSnikSnakTurnLeft;
+ return;
loc_g_763B: // pointing up
ax = PlayField16[si - FieldWidth];
if (LowByte(ax) == fiMurphy) // above is murphy -> explode
goto locMayExplode760A;
- return subSnikSnakTurnLeft;
+ return;
loc_g_764E: // above is empty -> go up
PlayField16[si] = 0x1BB;
si = si - FieldWidth;
PlayField16[si] = 0x1011;
- return subSnikSnakTurnLeft;
+
+ return;
loc_g_765E: // pointing left
ax = PlayField16[si - 1];
if (LowByte(ax) == fiMurphy) // left is murphy -> explode
goto locMayExplode760A;
- return subSnikSnakTurnLeft;
+ return;
loc_g_7671: // left is empty -> go there
PlayField16[si] = 0x2BB;
si = si - 1;
PlayField16[si] = 0x1811;
- return subSnikSnakTurnLeft;
+
+ return;
loc_g_7681: // pointing down
ax = PlayField16[si + FieldWidth];
if (LowByte(ax) == fiMurphy) // below is murphy -> explode
goto locMayExplode760A;
- return subSnikSnakTurnLeft;
+ return;
loc_g_7697: // below is empty -> go down
PlayField16[si] = 0x3BB;
si = si + FieldWidth;
PlayField16[si] = 0x2011;
- return subSnikSnakTurnLeft;
+
+ return;
loc_g_76A7: // pointing Right
ax = PlayField16[si + 1];
if (LowByte(ax) == fiMurphy) // right is murphy -> explode
goto locMayExplode760A;
- return subSnikSnakTurnLeft;
+ return;
loc_g_76BD: // right is empty -> go there
PlayField16[si] = 0x4BB;
si = si + 1;
PlayField16[si] = 0x2811;
+}
- return subSnikSnakTurnLeft;
-} // subSnikSnakTurnLeft
-
-static int subSnikSnakTurnRight(int si, int bx)
+static void subSnikSnakTurnRight(int si, int bx)
{
- static int subSnikSnakTurnRight;
-
- // int ax, ah, bl, dx, X, Y;
int ax, ah, bl;
ax = (TimerVar & 3);
if (ax == 3)
goto loc_g_771F;
- return subSnikSnakTurnRight;
+ return;
} // loc_g_76DB:
-#if 1
- subDrawSnikSnakTurnRight(si, bx);
-#else
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
- X = GetStretchX(si);
- Y = GetStretchY(si);
- StretchedSprites.BltEx(X, Y, aniFramesSnikSnak[0x10 - bx]);
+ subDrawSnikSnakTurnRight(si, bx);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
-#endif
bx = ((bx + 1) & 0x7) | 8;
MovHighByte(&PlayField16[si], bx);
- return subSnikSnakTurnRight;
+
+ return;
locMayExplode7707:
ah = HighByte(ax);
if (ah == 0x1B)
- return subSnikSnakTurnRight;
+ return;
if (ah == 0x19)
- return subSnikSnakTurnRight;
+ return;
if (ah == 0x18)
- return subSnikSnakTurnRight;
+ return;
if (ah == 0x1A)
- return subSnikSnakTurnRight;
+ return;
ExplodeFieldSP(si); // Explode
- return subSnikSnakTurnRight;
+
+ return;
loc_g_771F:
bl = HighByte(PlayField16[si]);
if (bl == 0xE)
goto loc_g_775B;
- return subSnikSnakTurnRight;
+ return;
loc_g_7738: // pointing up
ax = PlayField16[si - FieldWidth];
if (LowByte(ax) == fiMurphy) // above is murphy -> explode
goto locMayExplode7707;
- return subSnikSnakTurnRight;
+ return;
loc_g_774B: // above is empty -> go up
PlayField16[si] = 0x1BB;
si = si - FieldWidth;
PlayField16[si] = 0x1011;
- return subSnikSnakTurnRight;
+
+ return;
loc_g_775B: // pointing left
ax = PlayField16[si - 1];
if (LowByte(ax) == fiMurphy) // left is murphy -> explode
goto locMayExplode7707;
- return subSnikSnakTurnRight;
+ return;
loc_g_776E: // left is empty -> go there
PlayField16[si] = 0x2BB;
si = si - 1;
PlayField16[si] = 0x1811;
- return subSnikSnakTurnRight;
+
+ return;
loc_g_777E: // pointing down
ax = PlayField16[si + FieldWidth];
if (LowByte(ax) == fiMurphy) // below is murphy -> explode
goto locMayExplode7707;
- return subSnikSnakTurnRight;
+ return;
loc_g_7794: // below is empty -> go down
PlayField16[si] = 0x3BB;
si = si + FieldWidth;
PlayField16[si] = 0x2011;
- return subSnikSnakTurnRight;
+
+ return;
loc_g_77A4: // pointing Right
ax = PlayField16[si + 1];
if (LowByte(ax) == fiMurphy) // right is murphy -> explode
goto locMayExplode7707;
- return subSnikSnakTurnRight;
+ return;
loc_g_77BA: // right is empty -> go there
PlayField16[si] = 0x4BB;
si = si + 1;
PlayField16[si] = 0x2811;
+}
- return subSnikSnakTurnRight;
-} // subSnikSnakTurnRight
-
-static int subSnikSnakFromBelow(int si, int bx)
+static void subSnikSnakFromBelow(int si, int bx)
{
- static int subSnikSnakFromBelow;
-
- // int ax, ah, bl, dx, X, Y;
int ax, bl;
-#if 1
- subDrawSnikSnakFromBelow(si, bx);
- bx = bx - 0xF; // get and increment sequence#
-#else
- bx = bx - 0xF; // get and increment sequence#
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
- X = GetStretchX(si);
- Y = GetStretchY(si + FieldWidth);
- StretchedSprites.BltEx(X, Y, 0);
- StretchedSprites.BltEx(X, Y - bx * TwoPixels, aniSnikSnakUp + bx);
+ subDrawSnikSnakFromBelow(si, bx);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
-#endif
+ bx = bx - 0xF; // get and increment sequence#
bl = LowByte(bx);
if (bl == 7 && LowByte(PlayField16[si + FieldWidth]) != fiExplosion)
{
bl = bl + 0x10;
MovHighByte(&PlayField16[si], bl);
- return subSnikSnakFromBelow;
+
+ return;
} // loc_g_7813
PlayField16[si] = 0x11; // sequence#=8 -> arrived at the new field
if (ax == 0 || LowByte(ax) == fiMurphy) // check for empty or murphy
{
MovHighByte(&PlayField16[si], 1); // start to turn left
- return subSnikSnakFromBelow;
+
+ return;
} // loc_g_7826: and 'loc_g_7833:
ax = PlayField16[si - FieldWidth]; // cannot turn left -> check above
PlayField16[si] = 0x1BB; // mark as "sniksnak leaving"
si = si - FieldWidth; // go up!
PlayField16[si] = 0x1011;
- return subSnikSnakFromBelow;
+
+ return;
} // loc_g_784A:
if (LowByte(ax) == fiMurphy) // check for murphy above
{
ExplodeFieldSP(si); // Explode
- return subSnikSnakFromBelow;
+
+ return;
} // loc_g_7855:
ax = PlayField16[si + 1]; // check right field
if (ax == 0 || LowByte(ax) == fiMurphy) // check for empty or murphy
{
MovHighByte(&PlayField16[si], 9); // start to turn right
- return subSnikSnakFromBelow;
+
+ return;
} // loc_g_7862: and 'loc_g_786F:
// else: no way to go, start turning around
MovHighByte(&PlayField16[si], 1);
+}
- return subSnikSnakFromBelow;
-} // subSnikSnakFromBelow
-
-static int subSnikSnakFromRight(int si, int bx)
+static void subSnikSnakFromRight(int si, int bx)
{
- static int subSnikSnakFromRight;
-
- // int ax, ah, bl, dx, X, Y;
int ax, bl;
-#if 1
- subDrawSnikSnakFromRight(si, bx);
- bx = bx - 0x17; // get and increment sequence#
-#else
- bx = bx - 0x17; // get and increment sequence#
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
- X = GetStretchX(si + 1);
- Y = GetStretchY(si);
- StretchedSprites.BltEx(X, Y, 0);
- StretchedSprites.BltEx(X - bx * TwoPixels, Y, aniSnikSnakLeft + bx);
+ subDrawSnikSnakFromRight(si, bx);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
-#endif
+ bx = bx - 0x17; // get and increment sequence#
bl = LowByte(bx);
if (bl == 7 && LowByte(PlayField16[si + 1]) != fiExplosion)
{
bl = bl + 0x18;
MovHighByte(&PlayField16[si], bl);
- return subSnikSnakFromRight;
+
+ return;
} // loc_g_78B9:
PlayField16[si] = 0x11; // sequence#=8 -> arrived at the new field
if (ax == 0 || LowByte(ax) == fiMurphy) // empty or murphy?
{
MovHighByte(&PlayField16[si], 3); // yes -> turn left down
- return subSnikSnakFromRight;
+
+ return;
} // loc_g_78CC: and 'loc_g_78D9:
ax = PlayField16[si - 1]; // check left, etc ... see the comments on subSnikSnakFromBelow()
PlayField16[si] = 0x2BB;
si = si - 1; // 1 field left
PlayField16[si] = 0x1811;
- return subSnikSnakFromRight;
+
+ return;
} // loc_g_78F0:
if (LowByte(ax) == fiMurphy)
{
ExplodeFieldSP(si); // Explode
- return subSnikSnakFromRight;
+
+ return;
} // loc_g_78FB:
ax = PlayField16[si - FieldWidth]; // check above
if (ax == 0 || LowByte(ax) == fiMurphy)
{
MovHighByte(&PlayField16[si], 0xF);
- return subSnikSnakFromRight;
+
+ return;
} // loc_g_7908:loc_g_7915:
MovHighByte(&PlayField16[si], 3);
+}
- return subSnikSnakFromRight;
-} // subSnikSnakFromRight
-
-static int subSnikSnakFromAbove(int si, int bx)
+static void subSnikSnakFromAbove(int si, int bx)
{
- static int subSnikSnakFromAbove;
-
- // int ax, ah, bl, dx, X, Y;
int ax, bl;
-#if 1
- subDrawSnikSnakFromAbove(si, bx);
- bx = bx - 0x1F; // get and increment sequence#
-#else
- bx = bx - 0x1F; // get and increment sequence#
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
- X = GetStretchX(si);
- Y = GetStretchY(si - FieldWidth);
- StretchedSprites.BltEx(X, Y, 0);
- StretchedSprites.BltEx(X, Y + bx * TwoPixels, aniSnikSnakDown + bx);
+ subDrawSnikSnakFromAbove(si, bx);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
-#endif
+ bx = bx - 0x1F; // get and increment sequence#
bl = LowByte(bx);
if (bl == 7 && LowByte(PlayField16[si - FieldWidth]) != fiExplosion)
{
bl = bl + 0x20;
MovHighByte(&PlayField16[si], bl);
- return subSnikSnakFromAbove;
+
+ return;
} // loc_g_7813
PlayField16[si] = 0x11; // sequence#=8 -> arrived at the new field
if (ax == 0 || LowByte(ax) == fiMurphy)
{
MovHighByte(&PlayField16[si], 5);
- return subSnikSnakFromAbove;
+
+ return;
} // loc_g_7986:
ax = PlayField16[si + FieldWidth]; // check below
PlayField16[si] = 0x3BB;
si = si + FieldWidth; // 1 field down
PlayField16[si] = 0x2011;
- return subSnikSnakFromAbove;
+
+ return;
} // loc_g_799D:
if (LowByte(ax) == fiMurphy)
{
ExplodeFieldSP(si); // Explode
- return subSnikSnakFromAbove;
+
+ return;
} // loc_g_79A8:
ax = PlayField16[si - 1]; // check left
if (ax == 0 || LowByte(ax) == fiMurphy)
{
MovHighByte(&PlayField16[si], 0xD);
- return subSnikSnakFromAbove;
+
+ return;
} // loc_g_79C2:
MovHighByte(&PlayField16[si], 5);
+}
- return subSnikSnakFromAbove;
-} // subSnikSnakFromAbove
-
-static int subSnikSnakFromLeft(int si, int bx)
+static void subSnikSnakFromLeft(int si, int bx)
{
- static int subSnikSnakFromLeft;
-
- // int ax, ah, bl, dx, X, Y;
int ax, bl;
-#if 1
- subDrawSnikSnakFromLeft(si, bx);
- bx = bx - 0x27; // get and increment sequence#
-#else
- bx = bx - 0x27; // get and increment sequence#
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
- X = GetStretchX(si - 1);
- Y = GetStretchY(si);
- StretchedSprites.BltEx(X, Y, 0);
- StretchedSprites.BltEx(X + bx * TwoPixels, Y, aniSnikSnakRight + bx);
+ subDrawSnikSnakFromLeft(si, bx);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
-#endif
+ bx = bx - 0x27; // get and increment sequence#
bl = LowByte(bx);
if (bl == 7 && LowByte(PlayField16[si - 1]) != fiExplosion)
{
bl = bl + 0x28;
MovHighByte(&PlayField16[si], bl);
- return subSnikSnakFromLeft;
+
+ return;
} // loc_g_78B9:
PlayField16[si] = 0x11; // sequence#=8 -> arrived at the new field
if (ax == 0 || LowByte(ax) == fiMurphy)
{
MovHighByte(&PlayField16[si], 7);
- return subSnikSnakFromLeft;
+
+ return;
} // loc_g_7A2D:
ax = PlayField16[si + 1]; // check right(straight on)
PlayField16[si] = 0x4BB;
si = si + 1; // 1 field right
PlayField16[si] = 0x2811;
- return subSnikSnakFromLeft;
+
+ return;
} // loc_g_7A44:
if (LowByte(ax) == fiMurphy)
{
ExplodeFieldSP(si); // Explode
- return subSnikSnakFromLeft;
+
+ return;
} // loc_g_7A4F:
ax = PlayField16[si + FieldWidth]; // check below
if (ax == 0 || LowByte(ax) == fiMurphy)
{
MovHighByte(&PlayField16[si], 0xB);
- return subSnikSnakFromLeft;
+
+ return;
} // loc_g_7A69:
MovHighByte(&PlayField16[si], 7);
+}
- return subSnikSnakFromLeft;
-} // subSnikSnakFromLeft
-
-static int subDrawSnikSnakTurnLeft(int si, int bx)
+static void subDrawSnikSnakTurnLeft(int si, int bx)
{
- static int subDrawSnikSnakTurnLeft;
-
-#if 1
- // int pos = bx / 2;
int pos = ((bx + 7) % 8) / 2;
- GfxGraphic[GetX(si)][GetY(si)] = aniSnikSnakTurningLeft[pos];
-#else
- int X, Y;
-
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
- X = GetStretchX(si);
- Y = GetStretchY(si);
- StretchedSprites.BltEx(X, Y, aniFramesSnikSnak[bx]);
+ GfxGraphic[GetX(si)][GetY(si)] = aniSnikSnakTurningLeft[pos];
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
-#endif
-
- return subDrawSnikSnakTurnLeft;
}
-static int subDrawSnikSnakTurnRight(int si, int bx)
+static void subDrawSnikSnakTurnRight(int si, int bx)
{
- static int subDrawSnikSnakTurnRight;
-
-#if 1
- // int pos = (bx - 8) / 2;
int pos = ((bx - 1) % 8) / 2;
- GfxGraphic[GetX(si)][GetY(si)] = aniSnikSnakTurningRight[pos];
-#else
- int X, Y;
-
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
- X = GetStretchX(si);
- Y = GetStretchY(si);
- StretchedSprites.BltEx(X, Y, aniFramesSnikSnak[0x10 - bx]);
+ GfxGraphic[GetX(si)][GetY(si)] = aniSnikSnakTurningRight[pos];
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
-#endif
-
- return subDrawSnikSnakTurnRight;
}
-static int subDrawSnikSnakFromBelow(int si, int bx)
+static void subDrawSnikSnakFromBelow(int si, int bx)
{
- static int subDrawSnikSnakFromBelow;
-
int X, Y;
bx = bx - 0xF; // get and anti-increment sequence#
+
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
X = GetStretchX(si);
Y = GetStretchY(si + FieldWidth);
-#if 1
- StretchedSprites.BltImg(X, Y, aniSpace, 0);
- StretchedSprites.BltImg(X, Y - bx * TwoPixels, aniSnikSnakUp, bx);
-#else
- StretchedSprites.BltEx(X, Y, 0);
- StretchedSprites.BltEx(X, Y - bx * TwoPixels, aniSnikSnakUp + bx);
-#endif
+ DDSpriteBuffer_BltImg(X, Y, aniSpace, 0);
+ DDSpriteBuffer_BltImg(X, Y - bx * TwoPixels, aniSnikSnakUp, bx);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
-
- return subDrawSnikSnakFromBelow;
}
-static int subDrawSnikSnakFromRight(int si, int bx)
+static void subDrawSnikSnakFromRight(int si, int bx)
{
- static int subDrawSnikSnakFromRight;
-
int X, Y;
bx = bx - 0x17; // get and increment sequence#
+
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
X = GetStretchX(si + 1);
Y = GetStretchY(si);
-#if 1
- StretchedSprites.BltImg(X, Y, aniSpace, 0);
- StretchedSprites.BltImg(X - bx * TwoPixels, Y, aniSnikSnakLeft, bx);
-#else
- StretchedSprites.BltEx(X, Y, 0);
- StretchedSprites.BltEx(X - bx * TwoPixels, Y, aniSnikSnakLeft + bx);
-#endif
+ DDSpriteBuffer_BltImg(X, Y, aniSpace, 0);
+ DDSpriteBuffer_BltImg(X - bx * TwoPixels, Y, aniSnikSnakLeft, bx);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
-
- return subDrawSnikSnakFromRight;
}
-static int subDrawSnikSnakFromAbove(int si, int bx)
+static void subDrawSnikSnakFromAbove(int si, int bx)
{
- static int subDrawSnikSnakFromAbove;
-
int X, Y;
bx = bx - 0x1F; // get and increment sequence#
+
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
X = GetStretchX(si);
Y = GetStretchY(si - FieldWidth);
-#if 1
- StretchedSprites.BltImg(X, Y, aniSpace, 0);
- StretchedSprites.BltImg(X, Y + bx * TwoPixels, aniSnikSnakDown, bx);
-#else
- StretchedSprites.BltEx(X, Y, 0);
- StretchedSprites.BltEx(X, Y + bx * TwoPixels, aniSnikSnakDown + bx);
-#endif
+ DDSpriteBuffer_BltImg(X, Y, aniSpace, 0);
+ DDSpriteBuffer_BltImg(X, Y + bx * TwoPixels, aniSnikSnakDown, bx);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
-
- return subDrawSnikSnakFromAbove;
}
-static int subDrawSnikSnakFromLeft(int si, int bx)
+static void subDrawSnikSnakFromLeft(int si, int bx)
{
- static int subDrawSnikSnakFromLeft;
-
int X, Y;
bx = bx - 0x27; // get and increment sequence#
+
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
X = GetStretchX(si - 1);
Y = GetStretchY(si);
-#if 1
- StretchedSprites.BltImg(X, Y, aniSpace, 0);
- StretchedSprites.BltImg(X + bx * TwoPixels, Y, aniSnikSnakRight, bx);
-#else
- StretchedSprites.BltEx(X, Y, 0);
- StretchedSprites.BltEx(X + bx * TwoPixels, Y, aniSnikSnakRight + bx);
-#endif
+ DDSpriteBuffer_BltImg(X, Y, aniSpace, 0);
+ DDSpriteBuffer_BltImg(X + bx * TwoPixels, Y, aniSnikSnakRight, bx);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
-
- return subDrawSnikSnakFromLeft;
}
#ifndef SNIKSNAKS_H
#define SNIKSNAKS_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
-extern int subAnimateSnikSnaks(int si);
-extern int subDrawAnimatedSnikSnaks(int si);
+
+extern void subAnimateSnikSnaks(int);
+extern void subDrawAnimatedSnikSnaks(int);
#endif /* SNIKSNAKS_H */
#include "Sound.h"
-// static char *VB_Name = "modSound";
-
-// --- Option Explicit
-
-int MusicOnFlag;
-int FXOnFlag;
-
-#if 0
-
-DirectSoundBuffer ZonkFX[1 + 1];
-DirectSoundBuffer InfotronFX[1 + 1];
-DirectSoundBuffer BugFX[1 + 1];
-DirectSoundBuffer ExplosionFX[1 + 1];
-DirectSoundBuffer PushFX;
-DirectSoundBuffer ExitFX;
-DirectSoundBuffer BaseFX;
-
-#endif
-
-void LoadSoundFX()
-{
-
-#if 0
-
- DSBUFFERDESC bufferDesc;
- WAVEFORMATEX waveFormat;
- char *FName;
- int i;
-
- bufferDesc.lFlags = DSBCAPS_CTRLFREQUENCY | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_STATIC;
- waveFormat.nFormatTag = WAVE_FORMAT_PCM;
- waveFormat.nChannels = 1;
- waveFormat.lSamplesPerSec = 8000;
- waveFormat.nBitsPerSample = 8;
- waveFormat.nBlockAlign = waveFormat.nBitsPerSample / 8 * waveFormat.nChannels;
- waveFormat.lAvgBytesPerSec = waveFormat.lSamplesPerSec * waveFormat.nBlockAlign;
- FName = CAT(App.Path, "/Sound/");
- for (i = 0; i <= 1; i++)
- {
- ZonkFX[i] = DSound.CreateSoundBufferFromFile(CAT(FName, "Zonk.wav"), bufferDesc, waveFormat);
- InfotronFX[i] = DSound.CreateSoundBufferFromFile(CAT(FName, "Infotron.wav"), bufferDesc, waveFormat);
- BugFX[i] = DSound.CreateSoundBufferFromFile(CAT(FName, "Bug.wav"), bufferDesc, waveFormat);
- ExplosionFX[i] = DSound.CreateSoundBufferFromFile(CAT(FName, "Explosion.wav"), bufferDesc, waveFormat);
- }
-
- BaseFX = DSound.CreateSoundBufferFromFile(CAT(FName, "Base.wav"), bufferDesc, waveFormat);
- ExitFX = DSound.CreateSoundBufferFromFile(CAT(FName, "Exit.wav"), bufferDesc, waveFormat);
- PushFX = DSound.CreateSoundBufferFromFile(CAT(FName, "Push.wav"), bufferDesc, waveFormat);
- // FXOnFlag = 0
-
-#endif
-
-}
-
-void subSoundFXZonk()
-{
-#if 0
-
- int i;
-
- if (FXOnFlag == 0)
- return;
-
- for (i = 0; i <= 1; i++)
- {
- if (! IS_NOTHING(&ZonkFX[i], sizeof(ZonkFX[i])))
- {
- if (ZonkFX[i].GetStatus() != DSBSTATUS_PLAYING)
- {
- ZonkFX[i].Play DSBPLAY_DEFAULT;
- break;
- }
- }
- }
-
-#endif
-}
-
-void subSoundFXBug()
-{
-#if 0
-
- int i;
-
- if (FXOnFlag == 0)
- return;
-
- for (i = 0; i <= 1; i++)
- {
- if (! IS_NOTHING(&BugFX[i], sizeof(BugFX[i])))
- {
- if (BugFX[i].GetStatus() != DSBSTATUS_PLAYING)
- {
- BugFX[i].Play DSBPLAY_DEFAULT;
- break;
- }
- }
- }
-
-#endif
-}
-
-void subSoundFXInfotron()
-{
-#if 0
-
- int i;
-
- if (FXOnFlag == 0)
- return;
-
- for (i = 0; i <= 1; i++)
- {
- if (! IS_NOTHING(&InfotronFX[i], sizeof(InfotronFX[i])))
- {
- if (InfotronFX[i].GetStatus() != DSBSTATUS_PLAYING)
- {
- InfotronFX[i].Play DSBPLAY_DEFAULT;
- break;
- }
- }
- }
-
-#endif
-}
-
-void subSoundFXExplosion()
-{
-#if 0
-
- int i;
-
- if (FXOnFlag == 0)
- return;
-
- for (i = 0; i <= 1; i++)
- {
- if (! IS_NOTHING(&ExplosionFX[i], sizeof(ExplosionFX[i])))
- {
- if (ExplosionFX[i].GetStatus() != DSBSTATUS_PLAYING)
- {
- ExplosionFX[i].Play DSBPLAY_DEFAULT;
- break;
- }
- }
- }
-
-#endif
-}
-
-void subSoundFXBase()
-{
-#if 0
-
- if (FXOnFlag == 0)
- return;
-
- if (IS_NOTHING(&BaseFX, sizeof(BaseFX)))
- return;
-
- if (BaseFX.GetStatus() != DSBSTATUS_PLAYING)
- {
- BaseFX.Play DSBPLAY_DEFAULT;
- }
-
-#endif
-}
-
-void subSoundFXPush()
-{
-#if 0
-
- if (FXOnFlag == 0)
- return;
-
- if (IS_NOTHING(&PushFX, sizeof(PushFX)))
- return;
-
- if (PushFX.GetStatus() != DSBSTATUS_PLAYING)
- {
- PushFX.Play DSBPLAY_DEFAULT;
- }
-
-#endif
-}
-
-void subSoundFXExit()
-{
-#if 0
-
- if (FXOnFlag == 0)
- return;
-
- if (IS_NOTHING(&ExitFX, sizeof(ExitFX)))
- return;
-
- if (ExitFX.GetStatus() != DSBSTATUS_PLAYING)
- {
- ExitFX.Play DSBPLAY_DEFAULT;
- }
-
-#endif
-}
void subSoundFX(int si, int element, int action)
{
PlayLevelSound_SP(x, y, element, action);
}
-
-void subMusicInit()
-{
-}
#ifndef GAME_SP_SOUND_H
#define GAME_SP_SOUND_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
-extern void LoadSoundFX();
-extern void subMusicInit();
-extern void subSoundFXBase();
-extern void subSoundFXBug();
-extern void subSoundFXExit();
-extern void subSoundFXExplosion();
-extern void subSoundFXInfotron();
-extern void subSoundFXPush();
-extern void subSoundFXZonk();
extern void subSoundFX(int, int, int);
-extern int FXOnFlag;
-extern int MusicOnFlag;
-
#endif /* GAME_SP_SOUND_H */
+++ /dev/null
-// ----------------------------------------------------------------------------
-// TickCountObject.c
-// ----------------------------------------------------------------------------
-
-#include "TickCountObject.h"
-
-// --- VERSION 1.0 CLASS
-// --- BEGIN
-// --- MultiUse = -1 'True // True
-// --- Persistable = 0 'NotPersistable // NotPersistable
-// --- DataBindingBehavior = 0 'vbNone // vbNone
-// --- DataSourceBehavior = 0 'vbNone // vbNone
-// --- MTSTransactionMode = 0 'NotAnMTSObject // NotAnMTSObject
-// --- END
-
-// static char *VB_Name = "TickCountObject";
-// static boolean VB_GlobalNameSpace = False;
-// static boolean VB_Creatable = True;
-// static boolean VB_PredeclaredId = False;
-// static boolean VB_Exposed = False;
-// --- Option Explicit
-
-#define LongMin (-(double)2147483648UL) // the "#" sign is a bug of the VB environment AutoFormat function but causes no real problems; don't worry 'bout it!
-#define LongMax (2147483647UL)
-
-#if 0
-
-long MyGetTickCount();
-long QueryPerformanceCounter(currency lpPerformanceCount);
-long QueryPerformanceFrequency(currency lpFrequency);
-
-#endif
-
-boolean DelayLoopActive;
-
-boolean MPause, bHighPerf;
-currency PFreq; // LARGE_INTEGER
-double sFactor, msFactor, usFactor;
-
-#if 0
-
-boolean TickCountObject_Get_Active()
-{
- boolean Active;
-
- Active = DelayLoopActive;
-
- return Active;
-}
-
-boolean TickCountObject_Get_Pause()
-{
- boolean Pause;
-
- Pause = MPause;
-
- return Pause;
-}
-
-void TickCountObject_Let_Pause(boolean NewVal)
-{
- MPause = NewVal;
-}
-
-currency TickCountObject_Get_TickNow()
-{
- currency TickNow;
-
- if (bHighPerf)
- {
- QueryPerformanceCounter(TickNow);
- }
- else
- {
- TickNow = MyGetTickCount();
- }
-
- return TickNow;
-}
-
-long TickCountObject_TickDiffS(currency TickStart)
-{
- long TickDiffS;
-
- currency NewTick, TD;
-
- if (bHighPerf)
- {
- QueryPerformanceCounter(NewTick);
- TD = (NewTick - TickStart);
- TickDiffS = sFactor * TD;
- }
- else
- {
- NewTick = MyGetTickCount();
- if (NewTick < TickStart)
- {
- // Overflow occured and needs to be handled
- TickDiffS = (LongMax - TickStart) + (NewTick - LongMin) + 1;
- }
- else
- {
- TickDiffS = NewTick - TickStart;
- }
-
- TickDiffS = (int)(TickDiffS / 1000);
- }
-
- return TickDiffS;
-}
-
-long TickCountObject_TickDiffMS(currency TickStart)
-{
- long TickDiffMS;
-
- currency NewTick, TD;
-
- if (bHighPerf)
- {
- QueryPerformanceCounter(NewTick);
- TD = (NewTick - TickStart);
- TickDiffMS = msFactor * TD;
- }
- else
- {
- NewTick = MyGetTickCount();
- if (NewTick < TickStart)
- {
- // Overflow occured and needs to be handled
- TickDiffMS = (LongMax - TickStart) + (NewTick - LongMin) + 1;
- }
- else
- {
- TickDiffMS = NewTick - TickStart;
- }
- }
-
- return TickDiffMS;
-}
-
-currency TickCountObject_TickDiffUS(currency TickStart)
-{
- currency TickDiffUS;
-
- currency NewTick, TD;
-
- if (bHighPerf)
- {
- QueryPerformanceCounter(NewTick);
- TD = (NewTick - TickStart);
- TickDiffUS = usFactor * TD;
- }
- else
- {
- NewTick = MyGetTickCount();
- if (NewTick < TickStart)
- {
- // Overflow occured and needs to be handled
- TickDiffUS = ((LongMax - TickStart) + (NewTick - LongMin) + 1) * (currency)1000;
- }
- else
- {
- TickDiffUS = (NewTick - TickStart) * (currency)1000;
- }
- }
-
- return TickDiffUS;
-}
-
-#endif
-
-#if 0
-
-static void Class_Initialize()
-{
- long L;
-
- bHighPerf = (0 != QueryPerformanceFrequency(PFreq));
- if (bHighPerf)
- {
- sFactor = (double)1 / PFreq;
- msFactor = (double)1000 / PFreq;
- usFactor = (double)1000000 / PFreq;
- }
-
- DelayLoopActive = False;
- TickCountObject_Let_Pause(False);
-}
-
-#endif
+++ /dev/null
-// ----------------------------------------------------------------------------
-// TickCountObject.h
-// ----------------------------------------------------------------------------
-
-#ifndef TICKCOUNTOBJECT_H
-#define TICKCOUNTOBJECT_H
-
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
-#include "global.h"
-
-extern boolean TickCountObject_Get_Active();
-extern boolean TickCountObject_Get_Pause();
-extern currency TickCountObject_Get_TickNow();
-extern void TickCountObject_Let_Pause(boolean NewVal);
-extern long TickCountObject_TickDiffMS(currency TickStart);
-extern long TickCountObject_TickDiffS(currency TickStart);
-extern currency TickCountObject_TickDiffUS(currency TickStart);
-
-#endif /* TICKCOUNTOBJECT_H */
+++ /dev/null
-// ----------------------------------------------------------------------------
-// TopMost.c
-// ----------------------------------------------------------------------------
-
-#include "TopMost.h"
-
-#if 0
-
-// static char *VB_Name = "TopMost_Module";
-// --- Option Explicit
-// --- const int SWP_FRAMECHANGED = 0x20;
-// --- const int SWP_HIDEWINDOW = 0x80;
-// --- const int SWP_NOACTIVATE = 0x10;
-// --- const int SWP_NOCOPYBITS = 0x100;
-// --- const int SWP_NOMOVE = 0x2;
-// --- const int SWP_NOOWNERZORDER = 0x200;
-// --- const int SWP_NOREDRAW = 0x8;
-// --- const int SWP_NOSIZE = 0x1;
-// --- const int SWP_NOZORDER = 0x4;
-// --- const int SWP_SHOWWINDOW = 0x40;
-// --- const int SWP_DRAWFRAME = SWP_FRAMECHANGED;
-// --- const int SWP_NOREPOSITION = SWP_NOOWNERZORDER;
-
-// --- const int HWND_BOTTOM = 1;
-// --- const int HWND_BROADCAST = 0xFFFF;
-// --- const int HWND_DESKTOP = 0;
-// --- const int HWND_NOTOPMOST = - 2;
-// --- const int HWND_TOP = 0;
-// --- const int HWND_TOPMOST = - 1;
-
-int SetWindowPos(long h, long hb, int X, int Y, int cx, int cy, int f);
-
-void TopMost(Object obj)
-{
- int i;
-
- i = SetWindowPos(obj.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE);
-}
-
-void UnTopMost(Object obj)
-{
- int i;
-
- i = SetWindowPos(obj.hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE);
-}
-
-void HideWindow(long hWnd)
-{
- int i;
-
- i = SetWindowPos(hWnd, HWND_BOTTOM, 100, 100, 200, 200, SWP_HIDEWINDOW);
-}
-
-#endif
+++ /dev/null
-// ----------------------------------------------------------------------------
-// TopMost.h
-// ----------------------------------------------------------------------------
-
-#ifndef TOPMOST_H
-#define TOPMOST_H
-
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
-#include "global.h"
-
-#if 0
-
-#define HWND_BOTTOM (1)
-#define HWND_BROADCAST (0xFFFF)
-#define HWND_DESKTOP (0)
-#define HWND_NOTOPMOST (- 2)
-#define HWND_TOP (0)
-#define HWND_TOPMOST (- 1)
-#define SWP_DRAWFRAME (SWP_FRAMECHANGED)
-#define SWP_FRAMECHANGED (0x20)
-#define SWP_HIDEWINDOW (0x80)
-#define SWP_NOACTIVATE (0x10)
-#define SWP_NOCOPYBITS (0x100)
-#define SWP_NOMOVE (0x2)
-#define SWP_NOOWNERZORDER (0x200)
-#define SWP_NOREDRAW (0x8)
-#define SWP_NOREPOSITION (SWP_NOOWNERZORDER)
-#define SWP_NOSIZE (0x1)
-#define SWP_NOZORDER (0x4)
-#define SWP_SHOWWINDOW (0x40)
-
-extern void HideWindow(long hWnd);
-extern void TopMost(Object obj);
-extern void UnTopMost(Object obj);
-
-#endif
-
-#endif /* TOPMOST_H */
X = GetStretchX(si);
Y = GetStretchY(si - FieldWidth);
dx = bl & 0x7;
-#if 1
- StretchedSprites.BltImg(X, Y, aniSpace, 0);
- StretchedSprites.BltImg(X, Y + TwoPixels * (dx + 1), aniZonk, dx);
-#else
- StretchedSprites.BltEx(X, Y, 0);
- StretchedSprites.BltEx(X, Y + TwoPixels * (dx + 1), fiZonk);
-#endif
+ DDSpriteBuffer_BltImg(X, Y, aniSpace, 0);
+ DDSpriteBuffer_BltImg(X, Y + TwoPixels * (dx + 1), aniZonk, dx);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
+
bl = HighByte(PlayField16[si]) + 1;
if (bl == 0x16)
{
X = GetStretchX(si + 1);
Y = GetStretchY(si);
dx = (bl & 0x7) + 1;
-#if 1
- StretchedSprites.BltImg(X, Y, aniSpace, 0);
- StretchedSprites.BltImg(X - (TwoPixels * dx), Y, aniZonkRollLeft, dx - 1);
-#else
- StretchedSprites.BltEx(X, Y, 0);
- StretchedSprites.BltEx(X - (TwoPixels * dx), Y, aniFramesZonkRollLeft[dx - 1]);
-#endif
+ DDSpriteBuffer_BltImg(X, Y, aniSpace, 0);
+ DDSpriteBuffer_BltImg(X - (TwoPixels * dx), Y, aniZonkRollLeft, dx - 1);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
+
bl = HighByte(PlayField16[si]) + 1; // get and increment sequence#
if (bl == 0x24)
PlayField16[si + 1] = 0xAAAA;
X = GetStretchX(si - 1);
Y = GetStretchY(si);
dx = (bl & 0x7) + 1;
-#if 1
- StretchedSprites.BltImg(X, Y, aniSpace, 0);
- StretchedSprites.BltImg(X + (TwoPixels * dx), Y, aniZonkRollRight, dx - 1);
-#else
- StretchedSprites.BltEx(X, Y, 0);
- StretchedSprites.BltEx(X + (TwoPixels * dx), Y, aniFramesZonkRollRight[dx - 1]);
-#endif
+ DDSpriteBuffer_BltImg(X, Y, aniSpace, 0);
+ DDSpriteBuffer_BltImg(X + (TwoPixels * dx), Y, aniZonkRollRight, dx - 1);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
+
bl = HighByte(PlayField16[si]) + 1;
if (bl == 0x34)
PlayField16[si - 1] = 0xAAAA;
X = GetStretchX(si);
Y = GetStretchY(si);
dx = (bl & 0xF) + 1;
-#if 1
- StretchedSprites.BltImg(X, Y, aniSpace, 0);
- StretchedSprites.BltImg(X - (TwoPixels * dx), Y, aniZonkRollLeft, dx - 1);
-#else
- StretchedSprites.BltEx(X, Y, 0);
- StretchedSprites.BltEx(X - (TwoPixels * dx), Y, aniFramesZonkRollLeft[dx - 1]);
-#endif
+ DDSpriteBuffer_BltImg(X, Y, aniSpace, 0);
+ DDSpriteBuffer_BltImg(X - (TwoPixels * dx), Y, aniZonkRollLeft, dx - 1);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
+
bl = HighByte(PlayField16[si]) + 1; // retrieve and increment sequence#
if (bl < 0x52)
{
X = GetStretchX(si);
Y = GetStretchY(si);
dx = (bl & 0x7) + 1;
-#if 1
- StretchedSprites.BltImg(X, Y, aniSpace, 0);
- StretchedSprites.BltImg(X + (TwoPixels * dx), Y, aniZonkRollRight, dx - 1);
-#else
- StretchedSprites.BltEx(X, Y, 0);
- StretchedSprites.BltEx(X + (TwoPixels * dx), Y, aniFramesZonkRollRight[dx - 1]);
-#endif
+ DDSpriteBuffer_BltImg(X, Y, aniSpace, 0);
+ DDSpriteBuffer_BltImg(X + (TwoPixels * dx), Y, aniZonkRollRight, dx - 1);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
+
bl = HighByte(PlayField16[si]) + 1;
if (bl < 0x62)
{
#ifndef ZONK_H
#define ZONK_H
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "global.h"
extern int subAnimateZonks(int si);
AnimationSubTable = REDIM_1D(sizeof(byte), 0, LevelMax - 2 * FieldWidth);
TerminalState = REDIM_1D(sizeof(byte), 0, FieldMax + 1 - 1);
- DemoPointer = FieldMax + 1;
- DemoOffset = DemoPointer;
- DemoKeyRepeatCounter = 0;
-
GravityFlag = LInfo.InitialGravity;
FreezeZonks = LInfo.InitialFreezeZonks;
#include "main_sp.h"
+#include "vb_lib.h"
+
#include "ASM.h"
#include "BugsTerminals.h"
#include "DDScrollBuffer.h"
#include "DDSpriteBuffer.h"
-#include "Demo.h"
#include "Display.h"
#include "DoGameStuff.h"
#include "Electrons.h"
#include "MainGameLoop.h"
#include "Murphy.h"
#include "OrangeDisk.h"
-#include "PathTools.h"
-#include "SettingsObject.h"
#include "SnikSnaks.h"
#include "Sound.h"
-#include "TickCountObject.h"
-#include "TopMost.h"
#include "Zonk.h"
-#include "modAnimations.h"
-#include "modMPX.h"
#endif /* GAME_SP_GLOBAL_H */
struct EngineSnapshotInfo_SP engine_snapshot_sp;
-static void init_struct_functions()
-{
- Stage.Blt = &DDScrollBuffer_Blt;
- Stage.ScrollTo = &DDScrollBuffer_ScrollTo;
- Stage.ScrollTowards = &DDScrollBuffer_ScrollTowards;
- Stage.SoftScrollTo = &DDScrollBuffer_SoftScrollTo;
-
- // StretchedSprites.BltEx = &DDSpriteBuffer_BltEx;
- StretchedSprites.BltImg = &DDSpriteBuffer_BltImg;
-}
-
static void init_global_values()
{
- menBorder.Checked = False;
- menPanel.Checked = True;
- menAutoScroll.Checked = True;
-
- MainForm.picPane.Width = picPane.Width = SCR_FIELDX * TILEX;
- MainForm.picPane.Height = picPane.Height = SCR_FIELDY * TILEY;
+ menBorder = False;
}
void sp_open_all()
{
- init_struct_functions();
init_global_values();
Form_Load();
{
if (seed == NEW_RANDOMIZE)
{
-#if 0
- printf("::: init.c: InitEngineRandom_SP(): subRandomize()\n");
-#endif
-
subRandomize();
seed = (long)RandomSeed;
RandomSeed = (short)seed;
-#if 0
- printf("::: init.c: InitEngineRandom_SP(): RandomSeed == %d\n", RandomSeed);
-#endif
-
return (unsigned int) seed;
}
SaveEngineSnapshotBuffer(ARGS_ADDRESS_AND_SIZEOF(ScratchGravity));
SaveEngineSnapshotBuffer(ARGS_ADDRESS_AND_SIZEOF(GravityFlag));
SaveEngineSnapshotBuffer(ARGS_ADDRESS_AND_SIZEOF(SnikSnaksElectronsFrozen));
- SaveEngineSnapshotBuffer(ARGS_ADDRESS_AND_SIZEOF(UpdateTimeFlag));
- SaveEngineSnapshotBuffer(ARGS_ADDRESS_AND_SIZEOF(UpdatedFlag));
SaveEngineSnapshotBuffer(ARGS_ADDRESS_AND_SIZEOF(YellowDisksExploded));
SaveEngineSnapshotBuffer(ARGS_ADDRESS_AND_SIZEOF(YawnSleepCounter));
game_sp.red_disk_count = 0;
game_sp.score = 0;
- menBorder.Checked = setup.sp_show_border_elements;
+ menBorder = setup.sp_show_border_elements;
for (x = 0; x < SP_MAX_PLAYFIELD_WIDTH; x++)
{
+++ /dev/null
-// ----------------------------------------------------------------------------
-// modAnimations.c
-// ----------------------------------------------------------------------------
-
-#include "modAnimations.h"
-
-// static char *VB_Name = "modAnimations";
-// --- Option Explicit
-
-// ::: #ifndef HAS_SpecialPortType
-// ::: typedef struct
-// ::: {
-// ::: int PortLocation; // = 2*(x+(y*60))
-// ::: byte Gravity; // 1 = turn on, anything else (0) = turn off
-// ::: byte FreezeZonks; // 2 = turn on, anything else (0) = turn off (1=off!)
-// ::: byte FreezeEnemies; // 1 = turn on, anything else (0) = turn off
-// ::: byte UnUsed;
-// ::: } SpecialPortType;
-// ::: #define HAS_SpecialPortType
-// ::: #endif
-
-// ::: #ifndef HAS_LevelInfoType
-// ::: typedef struct
-// ::: {
-// ::: byte UnUsed[4 + 1];
-// ::: byte InitialGravity; // 1=on, anything else (0) = off
-// ::: byte Version; // SpeedFixVersion XOR &H20
-// ::: char LevelTitle[23];
-// ::: byte InitialFreezeZonks; // 2=on, anything else (0) = off. (1=off too!)
-// ::: byte InfotronsNeeded;
-
-// ::: // Number of Infotrons needed. 0 means that Supaplex will count the total
-// ::: // amount of Infotrons in the level, and use the low byte of that number.
-// ::: // (A multiple of 256 Infotrons will then result in 0-to-eat, etc.!)
-// ::: byte SpecialPortCount; // Maximum 10 allowed!
-// ::: SpecialPortType SpecialPort[10 + 1];
-// ::: byte SpeedByte; // = Speed XOR Highbyte(RandomSeed)
-// ::: byte CheckSumByte; // = CheckSum XOR SpeedByte
-// ::: int DemoRandomSeed;
-// ::: } LevelInfoType;
-// ::: #define HAS_LevelInfoType
-// ::: #endif
-
-DDSpriteBuffer NormalSprites;
-DDSpriteBuffer StretchedSprites;
-DDScrollBuffer Stage;
-
-byte LData[59 + 1][23 + 1];
-LevelInfoType LInfo;
-
-#if 1
-float Stretch = 1; // , StretchWidth%, TwoPixels!
-#else
-float Stretch; // , StretchWidth%, TwoPixels!
-#endif
-
-int ScrollMinX, ScrollMaxX, ScrollMinY, ScrollMaxY;
-int ScrollX, ScrollY;
-// --- const long ScrollDelta = 1&;
-
-// Public FieldWidth&, FieldHeight&
-boolean EndFlag;
-long PauseMode;
-
-TickCountObject Clock;
-long MurphyX, MurphyY;
-
-void GoPlay()
-{
- // Call subFetchAndInitLevelB
- EndFlag = False;
-
-#if 1
- subMainGameLoop_Init();
-#else
- subMainGameLoop();
-#endif
-}
+++ /dev/null
-// ----------------------------------------------------------------------------
-// modAnimations.h
-// ----------------------------------------------------------------------------
-
-#ifndef MODANIMATIONS_H
-#define MODANIMATIONS_H
-
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
-#include "global.h"
-
-#ifndef HAS_SpecialPortType
-typedef struct
-{
-#if 1
- short PortLocation; // = 2*(x+(y*60))
-#else
- int PortLocation; // = 2*(x+(y*60))
-#endif
- byte Gravity; // 1 = turn on, anything else (0) = turn off
- byte FreezeZonks; // 2 = turn on, anything else (0) = turn off (1=off!)
- byte FreezeEnemies; // 1 = turn on, anything else (0) = turn off
- byte UnUsed;
-} SpecialPortType;
-#define HAS_SpecialPortType
-#endif
-
-#ifndef HAS_LevelInfoType
-typedef struct
-{
- byte UnUsed[4];
- byte InitialGravity; // 1=on, anything else (0) = off
- byte Version; // SpeedFixVersion XOR &H20
- char LevelTitle[23];
- byte InitialFreezeZonks; // 2=on, anything else (0) = off. (1=off too!)
- byte InfotronsNeeded;
-
- // Number of Infotrons needed. 0 means that Supaplex will count the total
- // amount of Infotrons in the level, and use the low byte of that number.
- // (A multiple of 256 Infotrons will then result in 0-to-eat, etc.!)
- byte SpecialPortCount; // Maximum 10 allowed!
- SpecialPortType SpecialPort[10];
- byte SpeedByte; // = Speed XOR Highbyte(RandomSeed)
- byte CheckSumByte; // = CheckSum XOR SpeedByte
-#if 1
- short DemoRandomSeed;
-#else
- int DemoRandomSeed;
-#endif
-} LevelInfoType;
-#define HAS_LevelInfoType
-#endif
-
-#define ScrollDelta ((long)1)
-
-extern void GoPlay();
-
-extern DDScrollBuffer Stage;
-extern DDSpriteBuffer NormalSprites;
-extern DDSpriteBuffer StretchedSprites;
-extern LevelInfoType LInfo;
-extern boolean EndFlag;
-extern byte LData[59 + 1][23 + 1];
-extern float Stretch;
-extern int ScrollMinX, ScrollMaxX, ScrollMinY, ScrollMaxY;
-extern int ScrollX, ScrollY;
-extern long PauseMode;
-
-#endif /* MODANIMATIONS_H */
+++ /dev/null
-// ----------------------------------------------------------------------------
-// modMPX.c
-// ----------------------------------------------------------------------------
-
-#include "modMPX.h"
-
-void ReadMPX();
-#if 0
-static void SaveMPX(char *Path);
-static void SaveSP(char *Path);
-#endif
-
-// static char *VB_Name = "modMPX";
-// --- Option Explicit
-
-char *gSignature;
-boolean bSignatureAvailable;
-
-const char MPX_ID[4] = "MPX ";
-
-// ::: #ifndef HAS_LevelDescriptor
-// ::: typedef struct
-// ::: {
-// ::: int Width;
-// ::: int Height;
-// ::: long OffSet;
-// ::: long Size;
-// ::: } LevelDescriptor;
-// ::: #define HAS_LevelDescriptor
-// ::: #endif
-
-int MPXVersion;
-int LevelCount;
-boolean DemoAvailable;
-LevelDescriptor *LDesc;
-// int OFile;
-FILE *OFile;
-
-boolean MpxOpen(char *Path)
-{
- boolean MpxOpen;
-
- // int i;
- // byte T;
- char readID[4];
-
- MpxOpen = False;
-
- // --- On Error GoTo OpenMPXEH
- // OFile = FreeFile();
- OFile = fopen(CurPath, "rb");
- FILE_GET(OFile, -1, &readID, sizeof(readID));
- if (readID != MPX_ID)
- goto OpenMPXEH;
-
- FILE_GET(OFile, -1, &MPXVersion, sizeof(MPXVersion));
- FILE_GET(OFile, -1, &LevelCount, sizeof(LevelCount));
- LDesc = REDIM_1D(sizeof(LevelDescriptor), 0, LevelCount + 1 - 1);
- FILE_GET(OFile, -1, &LDesc, sizeof(LDesc));
- MpxOpen = True;
- return MpxOpen;
-
-OpenMPXEH:
- fclose(OFile);
- OFile = 0;
-
- return MpxOpen;
-}
-
-boolean MpxLoadLInfo(int i)
-{
- boolean MpxLoadLInfo;
-
- long Off;
-
- MpxLoadLInfo = False;
- // if (OFile < 1)
- if (OFile == 0)
- return MpxLoadLInfo;
-
- Off = LDesc[i].OffSet;
- Off = Off + LDesc[i].Width * LDesc[i].Height;
-
- // --- On Error GoTo MpxLoadLInfoEH
- FILE_GET(OFile, Off, &LInfo, sizeof(LInfo));
- MpxLoadLInfo = True;
- return MpxLoadLInfo;
-
- // MpxLoadLInfoEH:
- fclose(OFile);
- OFile = 0;
-
- return MpxLoadLInfo;
-}
-
-void MpxClose()
-{
- if (0 < OFile)
- {
- fclose(OFile);
- OFile = 0;
- }
-}
-
-void ReadMPX()
-{
- // int FNum, i;
- FILE *FNum;
- int i;
- // byte T;
- char readID[4];
-
- Trace("modMPX", "--> ReadMPX");
-
- // --- On Error GoTo ReadMPXEH
- // FNum = FreeFile();
- Trace("modMPX", "open file");
- FNum = fopen(CurPath, "rb");
- FILE_GET(FNum, -1, &readID, sizeof(readID));
- if (readID != MPX_ID)
- goto ReadMPXEH;
-
- FILE_GET(FNum, -1, &MPXVersion, sizeof(MPXVersion));
- if (MPXVersion != 1)
- goto ReadMPXEH;
-
- FILE_GET(FNum, -1, &LevelCount, sizeof(LevelCount));
- if (LevelCount < 1)
- goto ReadMPXEH;
-
- LDesc = REDIM_1D(sizeof(LevelDescriptor), 0, LevelCount + 1 - 1);
- Trace("modMPX", "--> read LevelDescriptor");
- FILE_GET(FNum, -1, &LDesc, sizeof(LDesc));
- FieldWidth = LDesc[LevelNumber].Width;
- FieldHeight = LDesc[LevelNumber].Height;
- HeaderSize = 96;
- FieldMax = (FieldWidth * FieldHeight) + HeaderSize - 1;
- LevelMax = (FieldWidth * FieldHeight) - 1;
- FileMax = LDesc[LevelNumber].Size - 1;
- if (FileMax < FieldMax)
- FileMax = FieldMax;
-
- Trace("modMPX", "ReDim PlayField8");
- PlayField8 = REDIM_1D(sizeof(byte), 0, FileMax + 1 - 1);
- DisPlayField = REDIM_1D(sizeof(byte), 0, FieldMax + 1 - 1);
- i = LDesc[LevelNumber].OffSet;
-#if 1
- FILE_GET(FNum, i, PlayField8, FileMax + 1);
-#else
- FILE_GET(FNum, i, &PlayField8, sizeof(PlayField8));
-#endif
- i = i + LevelMax + 1;
- FILE_GET(FNum, i, &LInfo, sizeof(LInfo)); // store level info in an extra structure
- fclose(FNum);
- // --- On Error GoTo 0
-
- Trace("modMPX", "file closed");
- if (FieldMax < FileMax)
- DemoAvailable = True;
-
- Trace("modMPX", "read signature");
- ReadSignature();
- Trace("modMPX", "ReDim PlayField16");
- PlayField16 = REDIM_1D(sizeof(int), -FieldWidth, FieldMax);
- for (i = 0; i <= FieldMax; i++)
- {
- PlayField16[i] = PlayField8[i];
- DisPlayField[i] = PlayField8[i];
- PlayField8[i] = 0;
- }
-
- AnimationPosTable = REDIM_1D(sizeof(int), 0, LevelMax - 2 *FieldWidth);
- AnimationSubTable = REDIM_1D(sizeof(byte), 0, LevelMax - 2 *FieldWidth);
- TerminalState = REDIM_1D(sizeof(byte), 0, FieldMax + 1 - 1);
- GravityFlag = LInfo.InitialGravity;
- FreezeZonks = LInfo.InitialFreezeZonks;
- DemoPointer = FieldMax + 1;
- DemoOffset = DemoPointer;
- DemoKeyRepeatCounter = 0;
- if (DemoFlag != 0)
- {
- // Debug.Print "ReadMPX: " & Hex(LInfo.DemoRandomSeed)
- RandomSeed = LInfo.DemoRandomSeed;
- DemoFlag = 1;
- }
- else
- {
- subRandomize();
- }
-
- MainForm.SetDisplayRegion();
- LevelLoaded = True;
- if (CurPath != TmpPath)
- Let_ModifiedFlag(False);
-
- Trace("modMPX", "--> ReadMPX");
- return;
-
-ReadMPXEH:
- // Close();
- fclose(FNum);
- ReportError("modMPX", CAT("Error reading MPX file ", CurPath));
- Trace("modMPX", "Error reading MPX file");
- Trace("modMPX", "--> ReadMPX");
-}
-
-#if 0
-
-static void SaveMPX(char *Path)
-{
- // int FNum, i;
- FILE *FNum;
- int i;
- // byte T;
- byte FF;
-
- FF = 0xFF;
- LevelNumber = 1;
- LevelCount = 1;
- MPXVersion = 1;
- if ((FileMax < FieldMax) || ! IS_NOTHING(&DemoBuffer, sizeof(DemoBuffer)))
- FileMax = FieldMax;
-
- LDesc = REDIM_1D(sizeof(LevelDescriptor), 0, LevelCount + 1 - 1);
- {
- LDesc[LevelNumber].Width = FieldWidth;
- LDesc[LevelNumber].Height = FieldHeight;
- LDesc[LevelNumber].OffSet = 4 + 2 * strlen(INT_TO_STR(LevelCount)) +
- LevelCount * sizeof(LDesc[1]) + 1;
- LDesc[LevelNumber].Size = FileMax + 1;
- if (! IS_NOTHING(&DemoBuffer, sizeof(DemoBuffer)))
- {
- LDesc[LevelNumber].Size = LDesc[LevelNumber].Size + DemoBuffer.Size + 2;
- if (0 < strlen(MySignature))
- LDesc[LevelNumber].Size = LDesc[LevelNumber].Size + strlen(MySignature) + 1;
- }
-
- }
-
- // UnEdAll();
-
- // --- On Error GoTo SaveMPXEH
- // FNum = FreeFile();
- if (FileExists(Path))
- MayKill(Path);
-
- FNum = fopen(Path, "wb");
- FILE_PUT(FNum, -1, &MPX_ID, sizeof(MPX_ID));
- FILE_PUT(FNum, -1, &MPXVersion, sizeof(MPXVersion));
- FILE_PUT(FNum, -1, &LevelCount, sizeof(LevelCount));
- FILE_PUT(FNum, -1, &LDesc, sizeof(LDesc));
- i = LDesc[LevelNumber].OffSet;
- FILE_PUT(FNum, i, &PlayField8, sizeof(PlayField8));
- FILE_PUT(FNum, i, &DisPlayField, sizeof(DisPlayField));
- i = i + LevelMax + 1;
- FILE_PUT(FNum, i, &LInfo, sizeof(LInfo)); // store level info
- if (! IS_NOTHING(&DemoBuffer, sizeof(DemoBuffer))) // demo was recorded
- {
- // Debug.Print "SaveMPX: " & Hex(LInfo.DemoRandomSeed)
- FILE_PUT(FNum, -1, &FirstDemoByte, sizeof(FirstDemoByte));
- if (! DemoBuffer.Serialize(FNum))
- goto SaveMPXEH;
-
- FILE_PUT(FNum, -1, &FF, sizeof(FF));
- if (0 < strlen(MySignature))
- {
- FILE_PUT(FNum, -1, &MySignature, sizeof(MySignature));
- FILE_PUT(FNum, -1, &FF, sizeof(FF));
- }
- }
-
- fclose(FNum);
- // --- On Error GoTo 0
-
- CurPath = Path;
-
- // EdAll();
-
- if (Path != TmpPath)
- Let_ModifiedFlag(False);
-
- return;
-
-SaveMPXEH:
- // Close();
- fclose(FNum);
-}
-
-#endif
-
-#if 0
-
-static void SaveSP(char *Path)
-{
- // int FNum, i;
- FILE *FNum;
- int i;
- // byte T;
-
- LevelNumber = 1;
- LevelCount = 1;
- if (! IS_NOTHING(&DemoBuffer, sizeof(DemoBuffer)))
- LInfo.CheckSumByte = DemoBuffer.CheckSumByte;
-
- if ((FileMax < FieldMax) || ! IS_NOTHING(&DemoBuffer, sizeof(DemoBuffer)))
- FileMax = FieldMax;
-
- // UnEdAll();
-
- // --- On Error GoTo SaveSPEH
- // FNum = FreeFile();
- FNum = fopen(Path, "wb");
- FILE_PUT(FNum, 1, &PlayField8, sizeof(PlayField8));
- FILE_PUT(FNum, 1, &DisPlayField, sizeof(DisPlayField));
- i = LevelMax + 2;
- FILE_PUT(FNum, i, &LInfo, sizeof(LInfo)); // store level info
- if (! IS_NOTHING(&DemoBuffer, sizeof(DemoBuffer))) // demo was recorded
- {
- // Debug.Print "SaveMPX: " & Hex(LInfo.DemoRandomSeed)
- // If Not DemoBuffer.Serialize(FNum) Then GoTo SaveSPEH
-
- // Debug.Assert(False);
- }
-
- fclose(FNum);
- // --- On Error GoTo 0
-
- CurPath = Path;
-
- // EdAll();
-
- if (Path != TmpPath)
- Let_ModifiedFlag(False);
-
- return;
-
- // SaveSPEH:
- // Close();
-}
-
-#endif
-
-void CreateLevel(int LWidth, int LHeight)
-{
- long Tmp, i;
- // byte T;
-
- CurPath = "Untitled";
- OrigPath = CurPath;
- LevelNumber = 1;
- FieldWidth = LWidth;
- FieldHeight = LHeight;
- HeaderSize = 96;
- FieldMax = (FieldWidth * FieldHeight) + HeaderSize - 1;
- LevelMax = (FieldWidth * FieldHeight) - 1;
- FileMax = FieldMax;
- PlayField8 = REDIM_1D(sizeof(byte), 0, FileMax + 1 - 1);
- DisPlayField = REDIM_1D(sizeof(byte), 0, FieldMax + 1 - 1);
- Tmp = FieldWidth * (FieldHeight - 1);
- for (i = 0; i <= FieldWidth - 1; i++)
- {
- PlayField8[i] = fiHardWare;
- PlayField8[Tmp + i] = fiHardWare;
- }
-
- Tmp = Tmp;
- for (i = FieldWidth; i <= Tmp; i += FieldWidth)
- {
- PlayField8[i] = fiHardWare;
- PlayField8[i - 1] = fiHardWare;
- }
-
- {
- LInfo.DemoRandomSeed = 0;
- LInfo.InfotronsNeeded = 0;
- LInfo.InitialFreezeZonks = 0;
- LInfo.InitialGravity = 0;
- strcpy(LInfo.LevelTitle, "------ New Level ------");;
- LInfo.SpecialPortCount = 0;
- LInfo.Version = 0x74; // immitate speedfix version 5.4
- }
- PlayField16 = REDIM_1D(sizeof(int), -FieldWidth, FieldMax);
- for (i = 0; i <= FieldMax; i++)
- {
- PlayField16[i] = PlayField8[i];
- DisPlayField[i] = PlayField8[i];
- PlayField8[i] = 0;
- }
-
- AnimationPosTable = REDIM_1D(sizeof(int), 0, LevelMax - 2 *FieldWidth);
- AnimationSubTable = REDIM_1D(sizeof(byte), 0, LevelMax - 2 *FieldWidth);
- TerminalState = REDIM_1D(sizeof(byte), 0, FieldMax + 1 - 1);
- GravityFlag = LInfo.InitialGravity;
- FreezeZonks = LInfo.InitialFreezeZonks;
- RandomSeed = LInfo.DemoRandomSeed;
- DemoAvailable = False;
- SET_TO_NOTHING(&DemoBuffer, sizeof(DemoBuffer));
- LevelLoaded = True;
- Let_ModifiedFlag(True);
-}
-
-void ReadSignature()
-{
- long i, iMin, iMax;
-
- Trace("modMPX", "--> ReadSignature");
- bSignatureAvailable = False;
- gSignature = "";
-
- // ##################################################### ReRecording-Test
- if ((DemoFlag == 1) && (RecordDemoFlag == 1))
- {
- FirstDemoByte = PlayField8[DemoPointer];
- MySignature = gSignature;
- }
-
- // ##################################################### ReRecording-Test
-
- // gSignature = String(511, "A"): bSignatureAvailable = False: Exit Sub 'test
- if (! (FieldMax < FileMax))
- return;
-
- // !!! Debug.Assert PlayField8(FileMax) = &HFF
- Trace("modMPX", "settin iMin/Max");
- iMin = FileMax - 512;
- if (iMin < (FieldMax + 2))
- iMin = FieldMax + 2;
-
- iMax = FileMax - 1;
- Trace("modMPX", " For i == iMax To iMin Step -1");
- for (i = iMax; i <= iMin; i += -1)
- {
- if (PlayField8[i] == 0xFF)
- break;
- }
-
- if (i < iMin)
- return;
-
- for (i = i + 1; i <= iMax; i++)
- {
- gSignature = CAT(gSignature, (char)(PlayField8[i]));
- }
-
- // ##################################################### ReRecording-Test
- if ((DemoFlag == 1) && (RecordDemoFlag == 1))
- MySignature = gSignature;
-
- // ##################################################### ReRecording-Test
-
- if (iMin <= iMax)
- bSignatureAvailable = True;
-
- Trace("modMPX", "<-- ReadSignature");
-}
+++ /dev/null
-// ----------------------------------------------------------------------------
-// modMPX.h
-// ----------------------------------------------------------------------------
-
-#ifndef MODMPX_H
-#define MODMPX_H
-
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
-#include "global.h"
-
-#ifndef HAS_LevelDescriptor
-typedef struct
-{
- int Width;
- int Height;
- long OffSet;
- long Size;
-} LevelDescriptor;
-#define HAS_LevelDescriptor
-#endif
-
-extern void CreateLevel(int LWidth, int LHeight);
-extern void MpxClose();
-extern boolean MpxLoadLInfo(int i);
-extern boolean MpxOpen(char *Path);
-extern void ReadSignature();
-
-extern void ReadMPX();
-
-extern LevelDescriptor *LDesc;
-extern boolean DemoAvailable;
-extern boolean bSignatureAvailable;
-extern char *gSignature;
-extern int LevelCount;
-
-#endif /* MODMPX_H */
+++ /dev/null
-// ----------------------------------------------------------------------------
-// vb_defs.h
-// ----------------------------------------------------------------------------
-
-#ifndef VB_DEFS_H
-#define VB_DEFS_H
-
-#define Win16 1
-
-#ifndef False
-#define False 0
-#define True (!False)
-#endif
-
-#ifndef NULL
-#define NULL ((void *)0)
-#endif
-
-/* these are just dummy values to prevent the compiler from complaining */
-#define VALUE_START_VB 100
-#define VALUE_START_VB_KEY 200
-#define VALUE_START_DD 300
-#define VALUE_START_DD_ERR 400
-#define VALUE_START_DS 500
-
-#define vbPicTypeBitmap (VALUE_START_VB + 1)
-#define vbSrcCopy (VALUE_START_VB + 2)
-#define vbTwips (VALUE_START_VB + 3)
-#define vbPixels (VALUE_START_VB + 4)
-#define vbPRORPortrait (VALUE_START_VB + 5)
-#define vbPRORLandscape (VALUE_START_VB + 6)
-#define vbDirectory (VALUE_START_VB + 7)
-
-#define vbKeySpace (VALUE_START_VB_KEY + 1)
-#define vbKeyLeft (VALUE_START_VB_KEY + 2)
-#define vbKeyRight (VALUE_START_VB_KEY + 3)
-#define vbKeyUp (VALUE_START_VB_KEY + 4)
-#define vbKeyDown (VALUE_START_VB_KEY + 5)
-#define vbKeyEscape (VALUE_START_VB_KEY + 6)
-#define vbKeyR (VALUE_START_VB_KEY + 7)
-#define vbKeyReturn (VALUE_START_VB_KEY + 8)
-#define vbKeyShift (VALUE_START_VB_KEY + 9)
-
-#define DD_OK (VALUE_START_DD + 0)
-
-#define DDSD_CAPS (VALUE_START_DD + 1)
-#define DDSD_WIDTH (VALUE_START_DD + 2)
-#define DDSD_HEIGHT (VALUE_START_DD + 3)
-#define DDSCL_NORMAL (VALUE_START_DD + 4)
-#define DDBLT_WAIT (VALUE_START_DD + 5)
-#define DDSCAPS_VIDEOMEMORY (VALUE_START_DD + 6)
-#define DDSCAPS_OFFSCREENPLAIN (VALUE_START_DD + 7)
-#define DDSCAPS_PRIMARYSURFACE (VALUE_START_DD + 8)
-
-#define DDERR_GENERIC (VALUE_START_DD_ERR + 1)
-#define DDERR_INVALIDCLIPLIST (VALUE_START_DD_ERR + 2)
-#define DDERR_INVALIDOBJECT (VALUE_START_DD_ERR + 3)
-#define DDERR_INVALIDPARAMS (VALUE_START_DD_ERR + 4)
-#define DDERR_INVALIDRECT (VALUE_START_DD_ERR + 5)
-#define DDERR_NOALPHAHW (VALUE_START_DD_ERR + 6)
-#define DDERR_NOBLTHW (VALUE_START_DD_ERR + 7)
-#define DDERR_NOCLIPLIST (VALUE_START_DD_ERR + 8)
-#define DDERR_NODDROPSHW (VALUE_START_DD_ERR + 9)
-#define DDERR_NOMIRRORHW (VALUE_START_DD_ERR + 10)
-#define DDERR_NORASTEROPHW (VALUE_START_DD_ERR + 11)
-#define DDERR_NOROTATIONHW (VALUE_START_DD_ERR + 12)
-#define DDERR_NOSTRETCHHW (VALUE_START_DD_ERR + 13)
-#define DDERR_NOZBUFFERHW (VALUE_START_DD_ERR + 14)
-#define DDERR_SURFACEBUSY (VALUE_START_DD_ERR + 15)
-#define DDERR_SURFACELOST (VALUE_START_DD_ERR + 16)
-#define DDERR_UNSUPPORTED (VALUE_START_DD_ERR + 17)
-#define DDERR_WASSTILLDRAWING (VALUE_START_DD_ERR + 18)
-
-#if 0
-
-#define DSSCL_PRIORITY (VALUE_START_DS + 1)
-#define DSBCAPS_CTRLFREQUENCY (VALUE_START_DS + 2)
-#define DSBCAPS_CTRLPAN (VALUE_START_DS + 3)
-#define DSBCAPS_CTRLVOLUME (VALUE_START_DS + 4)
-#define DSBCAPS_STATIC (VALUE_START_DS + 5)
-#define WAVE_FORMAT_PCM (VALUE_START_DS + 6)
-#define DSBSTATUS_PLAYING (VALUE_START_DS + 7)
-#define DSBPLAY_DEFAULT (VALUE_START_DS + 8)
-
-#endif
-
-#endif /* VB_DEFS_H */
// vb_lib.c
// ----------------------------------------------------------------------------
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
#include "main_sp.h"
-#include <sys/stat.h>
+#include "vb_lib.h"
/* helper functions for constructs not supported by C */
-#if 1
-
void *REDIM_1D(int data_size, int first_data_pos, int last_data_pos)
{
/* for a buffer of n elements, first_data_pos is 0 and last_data_pos is n-1 */
return (checked_calloc(buffer_size) - buffer_start);
}
-#else
-
-void *REDIM_1D(int a, int b, int c)
-{
- return checked_calloc(a * (c - b + 1));
-}
-
-#endif
-
-void *REDIM_2D(int a, int b, int c, int d, int e)
-{
- return 0;
-}
-
-boolean IS_NOTHING(void *a, int b)
-{
- return 0;
-}
-
-void SET_TO_NOTHING(void *a, int b)
-{
- return;
-}
-
-void MESSAGE_BOX(char *a)
-{
- return;
-}
-
-
-char *CAT(const char *a, ...)
-{
- return 0;
-}
-
-char *GET_PATH(char *a, ...)
-{
- return 0;
-}
-
-char *INT_TO_STR(int a)
-{
- return 0;
-}
-
-
-boolean STRING_IS_LIKE(char *a, char *b)
-{
- if (*b == '*') // something like "*.sp"
- {
- return (strSuffix(a, &b[1]));
- }
- else
- {
- // more sophisticated patterns currently not supported
-
- return 0;
- }
-}
-
-
-void FILE_GET(FILE *file, int offset, void *buffer, int num_bytes)
-{
- if (offset != -1)
- fseek(file, offset - 1, SEEK_SET);
-
- while (num_bytes--)
- *(byte *)buffer++ = fgetc(file);
-}
-
-int FILE_PUT(FILE *a, int b, void *c, int d)
-{
- return 0;
-}
-
-
-/* this is just a workaround -- handle array definitions later */
-void *Array(int a, ...)
-{
- return 0;
-}
-
-
-/* VB functions that do not return "int" (and would cause compiler errors) */
-double Val(char *a)
-{
- return 0;
-}
-
-char *Left(char *a, int b)
-{
- return 0;
-}
-
-char *left(char *a, int b)
-{
- return 0;
-}
-
-char *Right(char *a, int b)
-{
- return 0;
-}
-
-char *right(char *a, int b)
-{
- return 0;
-}
-
-char *StrReverse(char *a)
-{
- return 0;
-}
-
-int InStr(int a, char *b, char *c)
-{
- return 0;
-}
-
-char *Dir(char *a)
-{
- return 0;
-}
-
-char *Dir_Without_Args()
-{
- return 0;
-}
-
-void Kill(char *a)
-{
- return;
-}
-
-char *Chr(int a)
-{
- return 0;
-}
-
-char *String(int a, char *b)
-{
- return 0;
-}
-
-void MkDir(char *a)
-{
- return;
-}
-
-char *Hex(int a)
-{
- return 0;
-}
-
-
-int FileLen(char *a)
-{
- struct stat buffer;
-
- if (stat(a, &buffer) == 0)
- {
- return buffer.st_size;
- }
- else
- {
- return 0;
- }
-}
-
long MyGetTickCount()
{
return random_linux_libc(RANDOM_SIMPLE);
}
-
-int GetAttr(char *a)
-{
- return 0;
-}
-
-void SaveSetting(const char * a, const char *b, char *c, int d)
-{
- return;
-}
-
-#if 0
-
-long GetTempPath(long a, char *b)
-{
- return 0;
-}
-
-#endif
/* helper functions for constructs not supported by C */
extern void *REDIM_1D(int, int, int);
-extern void *REDIM_2D(int, int, int, int, int);
-
-extern boolean IS_NOTHING(void *, int);
-
-extern void SET_TO_NOTHING(void *, int);
-
-extern void MESSAGE_BOX(char *);
-
-extern char *CAT(const char *, ...);
-extern char *GET_PATH(char *, ...);
-extern char *INT_TO_STR(int);
-
-extern boolean STRING_IS_LIKE(char *, char *);
-
-extern void FILE_GET(FILE *, int, void *, int);
-extern int FILE_PUT(FILE *, int, void *, int);
-
-/* this is just a workaround -- handle array definitions later */
-extern void *Array(int, ...);
-
-/* VB functions that do not return "int" (and would cause compiler errors) */
-extern double Val(char *);
-extern char *Left(char *, int);
-extern char *left(char *, int);
-extern char *Right(char *, int);
-extern char *right(char *, int);
-extern char *StrReverse(char *);
-extern int InStr(int, char *, char *);
-extern char *Dir(char *);
-extern char *Dir_Without_Args();
-extern void Kill(char *);
-extern char *Chr(int);
-extern char *String(int, char *);
-extern void MkDir(char *);
-extern char *SlashLess(char *);
-extern char *Hex(int);
-
-extern int FileLen(char *);
extern long MyGetTickCount();
-extern int GetAttr(char *);
-
-extern void SaveSetting(const char *, const char *, char *, int);
-
-#if 0
-extern long GetTempPath(long, char *);
-#endif
-
#endif /* VB_LIB_H */
+++ /dev/null
-// ----------------------------------------------------------------------------
-// vb_types.h
-// ----------------------------------------------------------------------------
-
-#ifndef VB_TYPES_H
-#define VB_TYPES_H
-
-#include "../libgame/types.h"
-
-
-#if 0
-typedef unsigned char boolean;
-#endif
-
-typedef double currency;
-
-#if 0
-#if !defined(PLATFORM_WIN32)
-typedef unsigned char byte;
-#endif
-#endif
-
-typedef int Variant;
-
-typedef struct
-{
- int hWnd;
-} Object;
-
-#ifndef HAS_RECT
-typedef struct
-{
- int left;
- int top;
- int right;
- int bottom;
-} MyRECT;
-#define HAS_RECT
-#endif
-
-typedef struct
-{
- char *Path;
-} vb_App;
-
-typedef struct
-{
- void (*Assert)(boolean);
- void (*Print)(char *);
-} vb_Debug;
-
-typedef struct
-{
- int Number;
- void (*Raise)(int, char *, char *);
-} vb_Err;
-
-typedef struct
-{
- int Width;
- int Height;
-
- int ScaleWidth;
- int ScaleHeight;
- int ScaleMode;
-
- int Orientation;
-
- int TwipsPerPixelX;
- int TwipsPerPixelY;
-
- int hWnd;
-
- int (*ScaleX)(int, int, int);
- int (*ScaleY)(int, int, int);
-} vb_Generic_Device;
-
-typedef vb_Generic_Device vb_Screen;
-
-typedef vb_Generic_Device Form;
-typedef vb_Generic_Device Picture;
-typedef vb_Generic_Device IPicture;
-typedef vb_Generic_Device Printer;
-
-typedef struct
-{
- int lCaps;
-} vb_Caps;
-
-typedef struct
-{
- int LWidth;
- int LHeight;
- int lFlags;
- vb_Caps ddsCaps;
-} DDSURFACEDESC2;
-
-typedef struct
-{
- void (*SetHWnd)(long);
-} DirectDrawClipper;
-
-typedef struct
-{
- boolean (*isLost)(void);
- void (*GetSurfaceDesc)(DDSURFACEDESC2);
- void (*SetClipper)(DirectDrawClipper);
- // long (*Blt)(MyRECT, DirectDrawSurface7, MyRECT, int);
- long (*Blt)(MyRECT, void *, MyRECT, int);
- void (*BltColorFill)(MyRECT, int);
-} DirectDrawSurface7;
-
-typedef struct
-{
- DirectDrawSurface7 (*CreateSurface)(DDSURFACEDESC2);
- DirectDrawSurface7 (*CreateSurfaceFromFile)(char *, DDSURFACEDESC2);
- void (*SetCooperativeLevel)(int, int);
- DirectDrawClipper (*CreateClipper)(int);
- void (*RestoreAllSurfaces)(void);
-} DirectDraw7;
-
-typedef struct
-{
- int lFlags;
-} DSBUFFERDESC;
-
-#if 0
-
-typedef struct
-{
- int nFormatTag;
- int nChannels;
- int lSamplesPerSec;
- int nBitsPerSample;
- int nBlockAlign;
- int lAvgBytesPerSec;
-} WAVEFORMATEX;
-
-typedef struct
-{
- int (*GetStatus)(void);
- void (*Play)(int);
-} DirectSoundBuffer;
-
-typedef struct
-{
- void (*SetCooperativeLevel)(long, int);
- DirectSoundBuffer (*CreateSoundBufferFromFile)(char *, DSBUFFERDESC, WAVEFORMATEX);
-} DirectSound;
-
-typedef struct
-{
- DirectDraw7 (*DirectDrawCreate)(char *);
- DirectSound (*DirectSoundCreate)(char *);
- void (*GetWindowRect)(long, MyRECT);
-} DirectX7;
-
-#endif
-
-typedef struct
-{
- int Left;
- int Top;
- void (*RefreshMarker)(void);
-} MarkerObject;
-
-typedef struct
-{
- void (*DelayMS)(long, boolean);
- double (*TickDiffUS)(double);
- double (*TickNow)();
-} TickCountObject;
-
-typedef struct
-{
- int Caption;
- void (*Refresh)(void);
-} MainForm_lblCount;
-
-typedef struct
-{
- boolean Checked;
- boolean Enabled;
-} MainForm_men;
-
-typedef struct
-{
- int Width;
- int Height;
- void (*Line)(int, int, int, int, int, int);
-} MainForm_picPane;
-
-typedef struct
-{
- MainForm_lblCount lblInfoCount;
- MainForm_lblCount lblRedDiskCount;
- void (*DisplayLevel)(void);
- void (*DrawField)(int, int);
- MainForm_men menGravOn;
- MainForm_men menZonkOn;
- MainForm_men menEnOn;
- MainForm_men menGravOff;
- MainForm_men menZonkOff;
- MainForm_men menEnOff;
- MainForm_men menRemSP;
- MainForm_men menSP;
- char *Caption;
- boolean PanelVisible;
- void (*ShowKey)(int);
- void (*SaveSnapshot)(int);
- void (*menStop_Click)(void);
- MainForm_picPane picPane;
- char *lblFrameCount;
- void (*SetDisplayRegion)(void);
-} MainFormObject;
-
-typedef struct
-{
- int DestXOff;
- int DestYOff;
- void *Surface;
-
- void (*Cls)();
- void (*Blt)();
- void (*ScrollTo)(int, int);
- void (*ScrollTowards)(int, int, double);
- void (*SoftScrollTo)(int, int, long, int);
-
-} DDScrollBuffer;
-
-typedef struct
-{
- int DestXOff;
- int DestYOff;
- void *DestinationSurface;
- void *Surface;
-
- void (*Cls)();
- // void (*BltEx)(int, int, int);
- void (*BltImg)(int, int, int, int);
-} DDSpriteBuffer;
-
-typedef struct
-{
- void (*CreateAtSize)(long, long, long);
- void (*Let_Palette)(long, long);
- void (*Let_ColorIndex)(long, long, long);
-} BitMapObject;
-
-struct DemoBufferObject
-{
- int Size;
- byte CheckSumByte;
- void (*SetSubBuffer)(struct DemoBufferObject *);
- void (*AddDemoKey)(int);
- boolean (*Serialize)(FILE *);
-};
-typedef struct DemoBufferObject DemoBufferObject;
-
-typedef struct
-{
- int (*Read)(char *ValName, int Default);
- void (*Save)(char *ValName, int Val);
-} SettingsObject;
-
-typedef struct
-{
- int left;
- int top;
- int ListIndex;
- char (*List)(int);
-} cmbFileObject;
-
-typedef struct
-{
- int Width;
- int Height;
- boolean Visible;
- void (*Move)(int, int, int);
-} shpProgressObject;
-
-typedef struct
-{
- int left;
- int Top;
- int Width;
- int Height;
-} lblFrameCountObject;
-
-typedef struct
-{
- boolean Checked;
-} menBorderObject;
-
-typedef struct
-{
- boolean Checked;
-} menPanelObject;
-
-typedef struct
-{
- boolean Checked;
-} menAutoScrollObject;
-
-#endif /* VB_TYPES_H */
+++ /dev/null
-// ----------------------------------------------------------------------------
-// vb_vars.c
-// ----------------------------------------------------------------------------
-
-#include "vb_types.h"
-#include "vb_defs.h"
-#include "vb_vars.h"
-#include "vb_lib.h"
-
-vb_App App;
-vb_Err Err;
-MainFormObject MainForm;
-lblFrameCountObject lblFrameCount;
-cmbFileObject cmbFile;
-shpProgressObject shpProgress;
-menBorderObject menBorder;
-menPanelObject menPanel;
-menAutoScrollObject menAutoScroll;
-
-MainForm_picPane picPane;
+++ /dev/null
-// ----------------------------------------------------------------------------
-// vb_vars.h
-// ----------------------------------------------------------------------------
-
-#ifndef VB_VARS_H
-#define VB_VARS_H
-
-extern vb_Screen Screen;
-extern vb_Debug Debug;
-extern vb_Err Err;
-extern vb_App App;
-
-extern DemoBufferObject VB_OBJECT_SELF;
-
-extern MainFormObject MainForm;
-extern cmbFileObject cmbFile;
-extern shpProgressObject shpProgress;
-extern lblFrameCountObject lblFrameCount;
-extern menBorderObject menBorder;
-extern menPanelObject menPanel;
-extern menAutoScrollObject menAutoScroll;
-
-extern MainForm_picPane picPane;
-
-extern int hWnd;
-
-#endif /* VB_VARS_H */