public string ToBriefing(int index)
            {
                if (Screens.Count < 1)
                {
                    return("");
                }
                bool           cursor         = false;
                bool           first          = true;
                string         res            = "";
                int            message        = 1;
                BriefingScreen previousScreen = null;

                foreach (BriefingScreen screen in Screens)
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        res += "$P\n";
                    }
                    res           += screen.ToBriefing(index, previousScreen == null || screen.HasNewAttributes(previousScreen), ref message, ref cursor);
                    previousScreen = screen;
                }

                return("$S" + index + "\n" + res);
            }
            internal static BriefingScreen Copy(BriefingScreen copiedScreen)
            {
                BriefingScreen result = new BriefingScreen(copiedScreen);

                result.Text = copiedScreen.Text;
                return(result);
            }
 public BriefingScreen(BriefingScreen template)
 {
     Text        = "";
     Background  = template.Background;
     TabStop     = template.TabStop;
     TextRegion  = template.TextRegion;
     FlashCursor = template.FlashCursor;
 }
Exemple #4
0
        private int DefineBriefingBox()
        {
            int n;

            textIndex = ReadNumberSpace(text, textIndex, out n);
            if (n >= 60)
            {
                ShowText("Invalid screen #" + n + " > 59");
                playing = false;
                return(0);
            }

            // padding
            while (screens.Count < n)
            {
                screens.Add(null);
            }

            string name;
            int    levelNum, messageNum, ulx, uly, w, h;

            textIndex = ReadStringSpace(text, textIndex, out name);
            textIndex = ReadNumberSpace(text, textIndex, out levelNum);
            textIndex = ReadNumberSpace(text, textIndex, out messageNum);
            textIndex = ReadNumberSpace(text, textIndex, out ulx);
            textIndex = ReadNumberSpace(text, textIndex, out uly);
            textIndex = ReadNumberSpace(text, textIndex, out w);
            textIndex = ReadNumberSpace(text, textIndex, out h);
            if (highRes)
            {
                ulx *= 2;
                uly  = (int)(uly * 2.4);
                w   *= 2;
                h    = (int)(h * 2.4);
            }

            BriefingScreen bs = new BriefingScreen(name, (byte)levelNum, (byte)messageNum, ulx, uly, w, h);

            if (screens.Count > n)
            {
                screens[n] = bs;
            }
            else
            {
                screens.Insert(n, bs);
            }

            return(n);
        }
Exemple #5
0
    public UiSystem()
    {
        mBriefingScreen         = new BriefingScreen();
        mIntroScreen            = new IntroScreen();
        mShopScreen             = new ShopScreen();
        mSettingsScreen         = new SettingsScreen();
        mAdsScreen              = new AdsScreen();
        mGameScreen             = new GameScreen();
        mDebriefingWinScreen    = new DebriefingWinScreen();
        mDebriefingDefeatScreen = new DebriefingDefeatScreen();

        HideAllScreens();
        mScreenMode = eMode.NO_SCREEN;

        mProgressBar = GameObject.Find("FilledZone").GetComponent <RectTransform>();
    }
Exemple #6
0
        private void MainLoop()
        {
            int  pc          = -1;
            bool gotZ        = descentGame == 1;
            bool cursorFlash = false;

            while (playing)
            {
                int  c     = NextChar();
                bool print = true;
                if (c < 0)
                {
                    // end of screen...
                    if (gotZ)
                    {
                        WaitKey(cursorFlash);
                    }
                    FadeOut();
                    if (!interrupted)
                    {
                        EndOfBriefing();
                        Stop();
                    }
                    return;
                }

                BriefingScreen scr = screens[screenNum];

                if (c == '$') // special stuff
                {
                    print = false;
                    c     = NextChar();
                    if (descentGame == 2 && c == '$')
                    {
                        print = true;
                    }
                    else if (descentGame == 2 && c == 'D')
                    {
                        int newNumber = DefineBriefingBox();
                        screenNum  = newNumber;
                        lineAdjust = 0;
                        MoveText(screens[screenNum].ulx, screens[screenNum].uly);
                    }
                    else if (descentGame == 2 && c == 'U')
                    {
                        int newNumber = ReadMessageNumber();
                        if (newNumber >= screens.Count || screens[newNumber] == null)
                        {
                            ShowText("Invalid screen #" + newNumber);
                            playing = false;
                            return;
                        }
                        screenNum = newNumber;
                        MoveText(screens[screenNum].ulx, screens[screenNum].uly);
                        SkipRestOfLine();
                    }
                    else if (c == 'C')
                    {
                        if (!gotZ)
                        {
                            backgroundName = "END01.PCX";
                            DrawBackground();
                            UpdateBriefingColors();
                            gotZ = true;
                        }
                        int n = ReadMessageNumber() - 1;
                        if (n >= briefingFGcols.Length)
                        {
                            ShowText("Invalid color #" + n);
                            playing = false;
                            return;
                        }
                        briefingColor = n;
                        SkipRestOfLine();
                    }
                    else if (c == 'F')
                    {
                        cursorFlash = !cursorFlash;
                        SkipRestOfLine();
                    }
                    else if (c == 'T')
                    {
                        int n = ReadMessageNumber() * (highRes ? 2 : 1);
                        tabStop = n;
                        SkipRestOfLine();
                    }
                    else if (c == 'A')
                    {
                        lineAdjust = 1 - lineAdjust;
                    }
                    else if (descentGame == 2 && c == 'Z')
                    {
                        gotZ       = true;
                        dumbAdjust = lineAdjust > 0 ? 1 : 2;
                        textIndex  = ReadRestOfLine(text, textIndex, out string res);
                        --dumbAdjust;
                        backgroundName = res;
                        FadeOut();
                        DrawBackground();
                        FadeIn();
                        UpdateBriefingColors();
                    }
                    else if (descentGame == 2 && c == 'A')
                    {
                        // this controls dumbAdjust somehow on D2
                        // but that is not needed here
                        SkipRestOfLine();
                    }
                    else if (c == 'P')
                    {
                        // page change
                        WaitKey(cursorFlash);
                        if (interrupted)
                        {
                            return;
                        }
                        NewPage(true);
                        SkipRestOfLine();
                    }
                    else if (c == 'R')
                    {
                        if (descentGame == 1)
                        {
                            robotSpinning = ReadMessageNumber();
                            bitmapDisplay = null;
                            SkipRestOfLine();
                        }
                        else if (descentGame == 2)
                        {
                            robotSpinning     = -1;
                            bitmapDisplay     = null;
                            robotMoviePlaying = "" + (char)NextChar();
                            SkipRestOfLine();
                        }
                    }
                    else if (c == 'N')
                    {
                        robotSpinning     = -1;
                        textIndex         = ReadRestOfLine(text, textIndex, out string res);
                        bitmapDisplay     = null;
                        bitmapDisplayText = res + "#0";
                    }
                    else if (c == 'O')
                    {
                        robotSpinning     = -1;
                        textIndex         = ReadRestOfLine(text, textIndex, out string res);
                        bitmapDisplay     = null;
                        bitmapDisplayText = res + "#0";
                    }
                    else if (c == 'B')
                    {
                        robotSpinning     = -1;
                        textIndex         = ReadRestOfLine(text, textIndex, out string res);
                        bitmapDisplay     = null;
                        bitmapDisplayText = res + ".BBM";
                        byte[] bbmImage = findFile(bitmapDisplayText);
                        if (bbmImage != null)
                        {
                            TryLoadBBM(bbmImage);
                        }
                    }
                    else if (c == 'S')
                    {
                        if (descentGame == 1)
                        {
                            int newNumber = Math.Max(0, ReadMessageNumber() - 1);
                            if (newNumber != screenNum)
                            {
                                WaitKey(cursorFlash, 60);
                                if (interrupted)
                                {
                                    return;
                                }
                            }
                            if (newNumber >= screens.Count || screens[newNumber] == null)
                            {
                                ShowText("Invalid screen #" + newNumber);
                                playing = false;
                                return;
                            }
                            screenNum = newNumber;
                            FadeOut();
                            NewPage(true);
                            FadeIn();
                            SkipRestOfLine();
                        }
                        else if (descentGame == 2)
                        {
                            robotSpinning = -1;
                            bitmapDisplay = null;
                            // beginning of another section
                            // we can only reach this at the very beginning, so do nothing
                            // the beginning of the next section is never reached, instead it goes to if (c < 0) above
                            SkipRestOfLine();
                        }
                    }
                    DrawRegions();
                }
                else if (c == '\t')
                {
                    print = false;
                    if (tx - scr.ulx < tabStop)
                    {
                        tx = scr.ulx + tabStop;
                    }
                }
                else if (c == '\\')
                {
                    // do not write backslash
                    print = false;
                }
                else if (c == '\n')
                {
                    print = false;
                    if (pc != '\\')
                    {
                        // newline
                        tx = scr.ulx;
                        if (dumbAdjust > 0)
                        {
                            --dumbAdjust;
                        }
                        else
                        {
                            ty += highRes ? 16 : 8;
                        }

                        if (ty > scr.uly + scr.height)
                        {
                            DrawBackground();
                            MoveText(scr.ulx, scr.uly);
                        }
                    }
                }

                if (print)
                {
                    if (!gotZ)
                    {
                        backgroundName = "END01.PCX";
                        FadeOut();
                        DrawBackground();
                        FadeIn();
                        UpdateBriefingColors();
                        gotZ = true;
                    }

                    if (useDelay)
                    {
                        if (cursorFlash)
                        {
                            // draw cursor
                            int dummy = tx + 1;
                            lock (graphicsLock)
                                font.DrawCharacter(screen, '_', briefingFGcols[briefingColor], briefingBGcols[briefingColor], ref dummy, ty, false);
                        }
                        if (descentGame == 1)
                        {
                            Thread.Sleep(charDelay);
                        }
                        else if (descentGame == 2)
                        {
                            Thread.Sleep(1000 / 15);
                        }
                        if (cursorFlash)
                        {
                            // remove cursor
                            int dummy = tx + 1;
                            lock (graphicsLock)
                                font.DrawCharacter(screen, '_', clearColor, clearColor, ref dummy, ty, false);
                        }
                    }

                    tx += DrawCharacter(c);

                    if (keyPress)
                    {
                        useDelay = false;
                        keyPress = false;
                    }
                    DrawRegions();

                    if (tx > scr.ulx + scr.width)
                    {
                        tx  = scr.ulx;
                        ty += scr.uly;
                    }

                    if (ty > scr.uly + scr.height)
                    {
                        WaitKey(cursorFlash);
                        if (interrupted)
                        {
                            return;
                        }
                        NewPage(true);
                    }
                }
                pc = c;
            }
        }
Exemple #7
0
        private void DrawRegions()
        {
            lock (graphicsLock)
            {
                if (robotMoviePlaying != null)
                {
                    int bx = highRes ? 280 : 140;
                    int by = highRes ? 200 : 80;
                    int bw = highRes ? 320 : 160;
                    int bh = highRes ? 200 : 100;
                    graphics.FillRectangle(placeholderBrush, bx, by, bw, bh);
                    graphics.DrawRectangle(placeholderBorderPen, bx, by, bw, bh);
                    graphics.DrawString("RB" + robotMoviePlaying + ".MVE", specialFont, placeholderFontBrush, bx + 5, by + 5);
                }

                if (bitmapDisplay != null)
                {
                    int bx = 0, by = 0, bw = 0, bh = 0;
                    if (descentGame == 1)
                    {
                        bx = highRes ? 276 : 138;
                        by = highRes ? 132 : 55;
                        bw = highRes ? 332 : 166;
                        bh = highRes ? 331 : 138;
                    }
                    else if (descentGame == 2)
                    {
                        bx = highRes ? 440 : 220;
                        by = highRes ? 132 : 55;
                        bw = highRes ? 128 : 64;
                        bh = highRes ? 128 : 64;
                    }
                    graphics.DrawImageUnscaledAndClipped(bitmapDisplay, new Rectangle(bx, by, bw, bh));
                }

                if (robotSpinning >= 0)
                {
                    int bx = highRes ? 276 : 138;
                    int by = highRes ? 132 : 55;
                    int bw = highRes ? 332 : 166;
                    int bh = highRes ? 331 : 138;
                    graphics.FillRectangle(placeholderBrush, bx, by, bw, bh);
                    graphics.DrawRectangle(placeholderBorderPen, bx, by, bw, bh);
                    graphics.DrawString("Robot#" + robotSpinning, specialFont, placeholderFontBrush, bx + 5, by + 5);
                }

                if (bitmapDisplayText != null)
                {
                    int bx = 0, by = 0, bw = 0, bh = 0;
                    if (descentGame == 1)
                    {
                        bx = highRes ? 276 : 138;
                        by = highRes ? 132 : 55;
                        bw = highRes ? 332 : 166;
                        bh = highRes ? 331 : 138;
                    }
                    else if (descentGame == 2)
                    {
                        bx = highRes ? 440 : 220;
                        by = highRes ? 132 : 55;
                        bw = highRes ? 128 : 64;
                        bh = highRes ? 128 : 64;
                    }
                    graphics.FillRectangle(placeholderBrush, bx, by, bw, bh);
                    graphics.DrawRectangle(placeholderBorderPen, bx, by, bw, bh);
                    graphics.DrawString(bitmapDisplayText, specialFont, placeholderFontBrush, bx + 5, by + 5);
                }

                if (Properties.Settings.Default.showBriefingBox)
                {
                    BriefingScreen scr = screens[screenNum];
                    int            bx = 0, by = 0, bw = 0, bh = 0;
                    bx = scr.ulx;
                    by = scr.uly;
                    bw = scr.width;
                    bh = scr.height;
                    graphics.DrawRectangle(helperBorderPen, bx, by, bw, bh);
                }
            }
        }
 public bool HasNewAttributes(BriefingScreen previous)
 {
     return(this.TextRegion != previous.TextRegion || this.Background != previous.Background);
 }