#include "InitGameConditions.h"
-// static char *VB_Name = "modInitGameConditions";
-
-// --- Option Explicit
// ==========================================================================
// SUBROUTINE
// Init game conditions (variables)
// ==========================================================================
-int subInitGameConditions()
+void subInitGameConditions()
{
- int subInitGameConditions;
-
- bCapturePane = False;
-
- MurphyVar0DAC = MurphyYPos;
- MurphyVar0DAE = MurphyXPos;
MurphyVarFaceLeft = 0;
- KillMurphyFlag = 0; // no "kill Murphy"
+ KillMurphyFlag = 0; // no "kill Murphy"
ExitToMenuFlag = 0;
- LeadOutCounter = 0; // quit flag: lead-out counter
- RedDiskCount = 0; // Red disk counter
- ShowRedDiskCounter = 0; // show-red-disk time-out
-
- YawnSleepCounter = 0; // Wake up sleeping Murphy
-
- data_h_0DA7 = 0xFF;
- data_h_0DA8 = 0xFF;
- data_h_0DA9 = 0xFF;
- data_h_0D9E = 1;
- data_h_0D9F = 0;
- data_h_0DA0 = 0;
- data_h_0DA1 = 0;
- data_h_0DA2 = 0;
- data_h_0DA4 = 0;
- data_h_0DA5 = 0;
- data_h_0DA6 = 0;
-
- ExplosionShake = 0; // Force explosion flag off
+ LeadOutCounter = 0; // quit flag: lead-out counter
+ RedDiskCount = 0; // Red disk counter
+
+ YawnSleepCounter = 0; // Wake up sleeping Murphy
+
+ ExplosionShake = 0; // Force explosion flag off
+ ExplosionShakeMurphy = 0; // Force explosion flag off
TerminalMaxCycles = 0x7F;
YellowDisksExploded = 0;
TimerVar = 0;
- // ShowPanel = 1 ' Force Panel on
- // MainForm.PanelVisible = True;
- EnterRepeatCounter = 0; // restart Enter repeat counter
- SnikSnaksElectronsFrozen = 0; // Snik-Snaks and Electr. move!
-
- SplitMoveFlag = 0; // Reset Split-through-ports
- RedDiskReleasePhase = 0; // (re-)enable red disk release
- RedDiskReleaseMurphyPos = 0; // Red disk was released here
+ SnikSnaksElectronsFrozen = 0; // Snik-Snaks and Electrons move!
- return subInitGameConditions;
-} // subInitGameConditions
+ SplitMoveFlag = 0; // Reset Split-through-ports
+ RedDiskReleasePhase = 0; // (re-)enable red disk release
+ RedDiskReleaseMurphyPos = 0; // Red disk was released here
+}
// ==========================================================================
// Locate Murphy and init location.
// ==========================================================================
-int InitMurphyPos()
+void InitMurphyPos()
{
- int InitMurphyPos;
-
int si;
- for (si = 0; si <= LevelMax - 1; si++)
- {
+ for (si = 0; si < LevelMax; si++)
if (PlayField16[si] == fiMurphy)
break;
- }
InitMurphyPosB(si);
- MurphyPosIndex = si;
- return InitMurphyPos;
-} // InitMurphyPos
+ MurphyPosIndex = si;
+}
-int InitMurphyPosB(int si)
+void InitMurphyPosB(int si)
{
- int InitMurphyPosB;
-
- MurphyYPos = GetStretchY(si) / Stretch;
- MurphyXPos = GetStretchX(si) / Stretch;
-
- MurphyScreenXPos = GetStretchX(si); // Murphy's screen x-position
- MurphyScreenYPos = GetStretchY(si); // Murphy's screen y-position
+ MurphyScreenXPos = MurphyXPos = GetStretchX(si); // Murphy's screen x-position
+ MurphyScreenYPos = MurphyYPos = GetStretchY(si); // Murphy's screen y-position
// To Do: draw Murphy in location ax
- StretchedSprites.BltEx(MurphyScreenXPos, MurphyScreenYPos, fiMurphy);
-
- MurphyScreenXPos = MurphyScreenXPos / Stretch;
- MurphyScreenYPos = MurphyScreenYPos / Stretch;
+ DDSpriteBuffer_BltImg(MurphyScreenXPos, MurphyScreenYPos, aniMurphy, 0);
subCalculateScreenScrollPos(); // calculate screen start addrs
- printf("::: InitGameConditions.c: ScreenScroll{X,Y}Pos %d, %d\n",
- ScreenScrollXPos, ScreenScrollYPos);
-
if (AutoScrollFlag)
{
if (bPlaying)
- {
SoftScrollTo(ScreenScrollXPos, ScreenScrollYPos, 1000, 25);
- }
else
- {
ScrollTo(ScreenScrollXPos, ScreenScrollYPos);
- }
}
+}
- return InitMurphyPosB;
-} // InitMurphyPosB
// ==========================================================================
// SUBROUTINE
int subConvertToEasySymbols()
{
- int subConvertToEasySymbols;
-
- // int ax, bx, cx, dx, di, X, Y, i;
- // int ah, bh, ch, dh, al, bl, cl, dl, ZF;
int ax, bx, cx, dx, i;
int al;
if (0 < cx) // Until all done 'loc_g_2782:
goto loc_g_26C9;
- subConvertToEasySymbols = dx; // return InfotronCount
+ return dx; // return InfotronCount
+}
- return subConvertToEasySymbols;
-} // subConvertToEasySymbols
// ==========================================================================
// SUBROUTINE
// Reset Infotron count. Call immediately after subConvertToEasySymbols
// ==========================================================================
-int ResetInfotronsNeeded(int dx)
+void ResetInfotronsNeeded(int dx)
{
- int ResetInfotronsNeeded;
-
- if (LInfo.InfotronsNeeded != 0) // Jump If equal (autodetect)
- {
+ if (LInfo.InfotronsNeeded != 0) // Jump If equal (autodetect)
dx = LInfo.InfotronsNeeded;
- } // loc_g_278D:
-
- InfotronsNeeded = LowByte(dx); // Remaining Infotrons needed
- TotalInfotronsNeeded = InfotronsNeeded; // Number of Infotrons needed
- subDisplayInfotronsNeeded();
- return ResetInfotronsNeeded;
-} // ResetInfotronsNeeded
+ InfotronsNeeded = LowByte(dx); // Remaining Infotrons needed
+ TotalInfotronsNeeded = InfotronsNeeded; // Number of Infotrons needed
+}
// ==========================================================================
// Fetch and initialize a level
// ==========================================================================
-int subFetchAndInitLevelB()
+void subFetchAndInitLevelB()
{
- int subFetchAndInitLevelB;
+ subFetchAndInitLevelA();
+}
- boolean UpdatePlayTime;
-
- MovLowByte(&data_SPtorunavail, 0); // no SP file
- data_scr_demo = 0;
- UpdatePlayTime = (0 == demo_stopped ? True : True);
- demo_stopped = 0;
- subFetchAndInitLevelA(UpdatePlayTime);
-
- return subFetchAndInitLevelB;
-} // subFetchAndInitLevelb
-
-int subFetchAndInitLevelA(boolean UpdatePlayTime)
+void subFetchAndInitLevelA()
{
- int subFetchAndInitLevelA;
-
- if (UpdatePlayTime && (0 == demo_stopped))
- {
- subUpdatePlayingTime(); // update playing time
- }
+ GameBusyFlag = 0; // restore scissors too
+ subFetchAndInitLevel(); // fetch and initialize a level
+ GameBusyFlag = 1; // no free screen write
- D_ModeFlag = 0; // 1=debug D pressed (CPU use)
- if (0 != demo_stopped) // 1=demo, 0=game
- DemoFlag = 1;
+ DemoKeyCode = 0; // delete last demo key!
+}
- 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
- }
-
- return subFetchAndInitLevelA;
-} // subFetchAndInitLevela
-
-int subFetchAndInitLevel()
+void subFetchAndInitLevel()
{
- int subFetchAndInitLevel;
-
int InfoCountInLevel;
- Trace("modInitGameConditions", "--> subFetchAndInitLevel");
- Trace("modInitGameConditions", "Call ReadLevel");
-
- ReadLevel(); // Read LEVELS.DAT
-
- Trace("modInitGameConditions", "ReadLevel return subFetchAndInitLeveled");
-
- if (RecordDemoFlag == 1)
- {
- RecDemoRandomSeed = RandomSeed;
- // Debug.Print "FetchRec: " & Hex(RandomSeed)
- }
-
- // If DemoFlag = 1 Then
- // Debug.Print "FetchPlay: " & Hex(RandomSeed)
- // End If
- GameBusyFlag = -GameBusyFlag; // make <>1
-
- Trace("modInitGameConditions", "subConvertToEasySymbols");
-
- InfoCountInLevel = subConvertToEasySymbols(); // Convert to easy symbols
- GameBusyFlag = -GameBusyFlag; // restore
-
- Trace("modInitGameConditions", "subDisplayLevel");
-
- subDisplayLevel(); // Paint (Init) game field
- subDisplayPanel(); // Paint (Init) Panel
-
- ResetInfotronsNeeded(InfoCountInLevel); // and reset Infotron count
-
- Data_SubRstFlg = 1;
+ PrepareLevel(); // initialize level data
- Trace("modInitGameConditions", "subInitGameConditions");
+ GameBusyFlag = -GameBusyFlag; // make != 1
+ InfoCountInLevel = subConvertToEasySymbols(); // convert to easy symbols
+ GameBusyFlag = -GameBusyFlag; // restore
- subInitGameConditions(); // Init game conditions (vars)
+ subDisplayLevel(); // paint (init) game field
- InitMurphyPos(); // Locate Murphy + screen pos
+ ResetInfotronsNeeded(InfoCountInLevel); // and reset Infotron count
- Trace("modInitGameConditions", "<-- subFetchAndInitLevel");
+ subInitGameConditions(); // init game conditions (vars)
- return subFetchAndInitLevel;
-} // subFetchAndInitLevel
+ InitMurphyPos(); // locate Murphy + screen pos
+}