//------------------------------------------------------------------- // main loop of the world to handle drawing, hiding, and showing of the // resources. When mario runs out of lives the thread is killed and cleaned // up. read: GAME OVER! //------------------------------------------------------------------- static bool Restart() { bool PlayWorld = false; TextStatus = false; //InitStatus(); Blocks.InitBlocks(); TmpObj.InitTempObj(); Glitter.ClearGlitter(); Enemies.ClearEnemies(); // ShowPage Buffers.GameDone = false; Buffers.Passed = false; for (int i = Enemies.StartEnemiesAt * -1; i < Buffers.NH + Enemies.StartEnemiesAt; i++) { int j = (Buffers.XView / Buffers.W) + i; Enemies.StartEnemies(j, (short)(1 - 2 * System.Convert.ToByte(j > Players.MapX))); } // SetYOffset (YBase); /*for (int i = 0; i < FormMarioPort.MAX_PAGE; i++) * { * // DrawSky (XView, 0, NH * W, NV * H); * * // StartClouds(); * * for (int x = Buffers.XView / Buffers.W; x < Buffers.XView / Buffers.W + Buffers.NH; x++) * for (int y = 0; y < Buffers.NV - 1; y++) * Figures.Redraw(x, y); * * BackGr.DrawBackGr(true); * //ReadColorMap(); * * if (Buffers.Options.Stars != 0) * Stars.ShowStars(); * * Enemies.ShowEnemies(); * if (!OnlyDraw) * Players.DrawPlayer(); * * FormMarioPort.formRef.ShowPage(); * } */ Buffers.Demo = Buffers.dmNoDemo; Waiting = false; //Palettes.NewPalette (P256*); //for (int i = 1; i < 100; i++) //{ //Waterfalls()? //Palettes.BlinkPalette(); //} Figures.SetSkyPalette(); BackGr.DrawPalBackGr(); //Palettes.InitGrass(); if (OnlyDraw) { return(false); } // Palettes.UnLockPal(); // FadeUp (64); // Palettes.ReadPalette (Palette); TextStatus = Stat;// && !KeyBoard.PlayingMacro()); //uint counter = 0; do //until gamedone { try { //Console.WriteLine("Restart Loop"); //if (!Keyboard.PlayingMacro) //{ // if (Key = 31) //'S' // { // Stat = !Stat; // TextStatus = Stat; // Keyboard.Key = 255; // } // if (Keyboard.Key = 16) //'Q' // { // if (Buffers.BeeperSound) // Buffers.BeeperOff(); // else // { // Buffers.BeeperOn(); // Buffers.Beep (80); // } // Key = 255; // } // if (Key == 197 || Key == 198) //Pause/Break // { // Music.PauseMusic(); // //do // //{ // // while (Keyboard.Key = 197) {} //busy wait of some sort? // //} while //(Keyboard.kbHit); // } // else // { // if (Keyboard.Key != 0) // { // Buffers.GameDone = true; // Buffers.Passed = true; // } // } // if (Buffers.TextCounter) //in 40..40+MAX_PAGE // ShowObjects = false; // HideGlitter(); // if (Options.Stars != 0) // HideStars(); // if (ShowObjects) // HideTempObj(); // if (ShowScore) // HideTotalBack(); // ErasePlayer(); // if (ShowObjects) // { // HideEnemies(); // EraseBlocks(); // } //} // { Fade }; Buffers.LavaCounter++; if (!Waiting) { if (Buffers.Demo == Buffers.dmNoDemo) { Enemies.MoveEnemies(); Players.MovePlayer(); } else { Players.DoDemo(); } } if (!Waiting) { if (Buffers.Passed) { if (Buffers.Demo == Buffers.dmNoDemo || Players.InPipe) { Waiting = true; Buffers.TextCounter = 0; } Buffers.TextCounter++; if (!ShowScore && (Buffers.TextCounter >= 50 && Buffers.TextCounter < 50 + FormMarioPort.MAX_PAGE)) //in 50..50 + MAX_PAGE { //SetFont (0, Bold + Shadow); //TXT.CenterText (20, Buffers.PlayerName [Buffers.Player], 30.ToString("X")); //SetFont(1, Bold + Shadow); //TXT.CenterText (40, "STAGE CLEAR!", 31); if (Buffers.TextCounter == (50 + FormMarioPort.MAX_PAGE)) { ShowScore = true; } } } else if (Buffers.GameDone) { Buffers.data.lives[Buffers.Player]--; Buffers.data.mode[Buffers.Player] = Buffers.mdSmall; Buffers.TextCounter = 0; Buffers.data.score[Buffers.Player] += Buffers.LevelScore; Waiting = true; Buffers.GameDone = false; } } //if (Keyboard.Key = 25) //P // Pause(); if (ShowScore && (Buffers.TextCounter == 120) && (Buffers.LevelScore > 0)) { int i = (int)(Buffers.LevelScore - 50); if (i < 0) { i = 0; } Buffers.data.score[Buffers.Player] += Buffers.LevelScore - 1; Buffers.LevelScore = i; Buffers.TextCounter = 119; CountingScore = true; } else { CountingScore = false; } if (Waiting) { Buffers.TextCounter++; if (Buffers.data.lives[Buffers.Player] == 0) { if (Buffers.TextCounter >= 100 && Buffers.TextCounter < 100 + FormMarioPort.MAX_PAGE) //in 100..100 + MAX_PAGE { //SetFont (0, Bold + Shadow); //CenterText (20, Buffers.PlayerName[Buffers.Player], 30.ToString("X")); //SetFont (1, Bold + Shadow); //CenterText (40, "GAME OVER", 31); ShowScore = true; } if (Buffers.TextCounter > 350) { Buffers.GameDone = true; } } else if (Buffers.Passed) { if (Buffers.TextCounter > 250) { Waiting = false; } } else if (Buffers.TextCounter > 100) { Buffers.GameDone = true; } } TmpObj.MoveTempObj(); Blocks.MoveBlocks(); if (Keyboard.kbEsc) { Buffers.QuitGame = true; } MoveScreen(); TmpObj.RunRemove(); if (Buffers.Options.Horizon < Buffers.NV) { int j = Buffers.Options.Horizon; for (int i = 0 / Buffers.W; i < Buffers.NH; i++) { int k = Buffers.XView / Buffers.W + (i + Buffers.LavaCounter / 8) % (Buffers.NH + 1); if (Buffers.WorldMap[k, j] == '%') { Figures.Redraw(k, j); } } } //FormMarioPort.formRef.ResetStack(); if (ShowObjects) { Blocks.DrawBlocks(); Enemies.ShowEnemies(); } Players.DrawPlayer(); if (ShowScore) { ShowTotalBack(); } //if (TextStatus) // Status.ShowStatus(); if (ShowObjects) { TmpObj.ShowTempObj(); } if (Buffers.Options.Stars != 0) { Stars.ShowStars(); } Glitter.ShowGlitter(); Buffers.LastXView[FormMarioPort.formRef.CurrentPage()] = Buffers.XView; //if (ShowRetrace) // SetPalette(0, 0, 0, 0); // ShowPage //if (ShowRetrace) // SetPalette( 0, 63, 63, 63); BackGr.DrawPalBackGr(); //Palette.BlinkPalette(); Music.PlayMusic(); if (Players.InPipe && Keyboard.PlayingMacro) { Buffers.GameDone = true; } if (Players.InPipe && !Buffers.GameDone && !Waiting) { Enemies.StopEnemies(); Glitter.ClearGlitter(); //FadeDown(64); //FormMarioPort.formRef.LockPal(); //FormMarioPort.formRef.ClearVGAMem(); switch (Players.PipeCode[1]) { case 'à': FindPipeExit(); //Delay(100); break; case 'á': //Swap(); FindPipeExit(); break; case 'ç': Buffers.GameDone = true; PlayWorld = true; break; } Players.InitPlayer(Players.MapX * Buffers.W + Buffers.W / 2, (Players.MapY - 1) * Buffers.H, Buffers.Player); FormMarioPort.formRef.SetView(Buffers.XView, Buffers.YView); for (int i = 0; i < FormMarioPort.MAX_PAGE; i++) { Buffers.LastXView[i] = Buffers.XView; } if (Players.PipeCode[1] == 'à') { Restart(); } else if (Players.PipeCode[1] == 'á') { BuildLevel(); } } } catch (Exception e) { Console.WriteLine("error" + e); } FormMarioPort.formRef.PaintForm(); System.Threading.Thread.Sleep(1 / 60 * 1000); } while (!Buffers.GameDone && !Buffers.QuitGame); return(PlayWorld); }
//------------------------------------------------------------------- // Sets up and reads in a new world to the buffer. After the world // has been read, it will build and then finally start running the // world. // N1: char, the first part (before the hyphen) of the world name. // N2: char, the second part (before the hyphen) of the world name. // Map1: char[,], the map to play // Opt1: WorldOptions, options for the aboveground world of Map1 // Opt1b, WorldOptions, options for the underground world of Map1 // Map2, char[,] the underground of the map to play // Opt2, WorldOptions, options for the abovegound world of Map2 // Opt2b, WorldOptions, options for the underground world of Map2 // Player, byte, the player to put in the world. //------------------------------------------------------------------- public static bool PlayWorld(char N1, char N2, char[,] Map1, Buffers.WorldOptions Opt1, Buffers.WorldOptions Opt1b, char[,] Map2, Buffers.WorldOptions Opt2, Buffers.WorldOptions Opt2b, byte Player) { int j, k, x, y; int[] TotalBackGrAddr = new int[FormMarioPort.MAX_PAGE]; //PlayWorld = false; //Keyboard.Key = 0; //Palettes.ClearPalette(); //Palettes.LockPal(); Buffers.TextCounter = 0; Buffers.WorldNumber = new string[] { N1.ToString(), "-", N2.ToString() }; OnlyDraw = ((N1 == '0') && (N2 == '0')); ShowObjects = true; Players.InPipe = false; Players.PipeCode = new char[] { ' ', ' ' }; Buffers.Demo = Buffers.dmNoDemo; Buffers.InitLevelScore(); //FillChar (TotalBackGrAddr, TotalBackGrAddr.Size(), 0); for (int i = 0; i < TotalBackGrAddr.Length; i++) { TotalBackGrAddr[i] = 0; } ShowScore = false; if (!Enemies.Turbo) { Buffers.ReadWorld(Map2, ref Buffers.WorldMap, Opt2); Buffers.Swap(); Buffers.ReadWorld(Map1, ref Buffers.WorldMap, Opt1); } else { Buffers.ReadWorld(Map2, ref Buffers.WorldMap, Opt2b); Buffers.Swap(); Buffers.ReadWorld(Map1, ref Buffers.WorldMap, Opt1b); } //Console.WriteLine("Done Reading World"); Players.InitPlayer(Buffers.Options.InitX, Buffers.Options.InitY, Buffers.Player); Players.MapX = Buffers.Options.InitX; Players.MapY = Buffers.Options.InitY; Buffers.XView = 0; Buffers.YView = 0; //FillChar (LastXView, LastXView.Size(), 0); for (int i = 0; i < Buffers.LastXView.Length; i++) { Buffers.LastXView[i] = 0; } FormMarioPort.formRef.SetView(Buffers.XView, Buffers.YView); BuildLevel(); try { if (Restart()) { return(true); } } catch (Exception e) { Console.WriteLine("Exception: ", e); } Enemies.ClearEnemies(); //ClearGlitter(); //Palettes.FadeDown(64); //Palettes.ClearPalette(); //Music.StopMusic(); return(false); //http://en.wikipedia.org/wiki/Return_statement#Syntax //"In Pascal there is no return statement." ...wat!? }