示例#1
0
        //-------------------------------------------------------------------
        // 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);
        }
示例#2
0
        //-------------------------------------------------------------------
        // 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!?
        }