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; }
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); }
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>(); }
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; } }
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); }