From 32b730c0090c75b75ed849b0e41be7cbe8cb62f7 Mon Sep 17 00:00:00 2001 From: Munawar Bijani Date: Sun, 18 Nov 2018 12:59:41 -0500 Subject: [PATCH] Resolved #11; Fixed #10; Resolved #5 --- README.md | 33 +- bin/Debug/Updater.exe | Bin 6144 -> 6144 bytes bin/Debug/th.exe | Bin 130048 -> 121344 bytes th.vbproj | 1 - th/Addendums.vb | 6 +- th/DXSound.vb | 70 +- th/EllReg.vb | 40 +- th/THConstVars.vb | 54 +- th/THReg.vb | 108 +- th/chall.vb | 263 ++-- th/mainFRM.resx | 3 + th/mainFRM.vb | 2884 +++++++++++++++++++---------------------- th/modDirectShow.vb | 246 +--- 13 files changed, 1635 insertions(+), 2073 deletions(-) diff --git a/README.md b/README.md index 59bd9ce..ea8f7aa 100644 --- a/README.md +++ b/README.md @@ -37,18 +37,21 @@ I had originally tried DotPeek to get a Visual Studio project, but the tool wasn #### Downloading Treasure Hunt You can either [download the zip file of the master branch](https://github.com/munawarb/Treasure-Hunt/archive/master.zip), or if you're normal like the rest of us and prefer to use Git, just execute: `git clone https://github.com/munawarb/Treasure-Hunt.git` - - Run the file Treasure-Hunt/Bin/Debug/th.exe to start the game. If you find any issues or have suggestions, simply post them on the issues page. And most of all, have fun! It's been quite a challenge for me to get this game working from nothing but a Reactor-protected executable, so I really hope you enjoy this classic. Oh yeah, I removed the demo restrictions. You're welcome. - - #### Changes - - ##### 4.44 - - Treasure Hunt no longer uses `KeyDown` and takes advantage of `DirectInput` through the use of `BPCSharedComponent.dll`, a library I wrote for Three-D Velocity. Keys are now processed in the game loop, making key processing smoother ([#9](../../issues/9)) - - The single footstep sound has been replaced with better footstep sounds ([#7](../../issues/7)) - - Key presses are handled better now and weapons can be rapid-fired. A lot of the key-handling code was cleaned up ([#6](../../issues/6)) - - The game loop is now much cleaner and no longer runs every tenth of a second. The slow frame rate would force the player to slow down so the game could update the state ([#4](../../issues/4)) - - When the player holds down an arrow key, the character will move steadily in that direction as opposed to taking only one step ([#3](../../issues/3)) - - ##### 4.42 11/13/2018 - - Treasure Hunt now has an auto updater, and the window layout has been fixed ([#2](../../issues/2)) - - Exceptions should be logged properly now ([#1](../../issues/1)) \ No newline at end of file + +Run the file Treasure-Hunt/Bin/Debug/th.exe to start the game. If you find any issues or have suggestions, simply post them on the issues page. And most of all, have fun! It's been quite a challenge for me to get this game working from nothing but a Reactor-protected executable, so I really hope you enjoy this classic. Oh yeah, I removed the demo restrictions. You're welcome. + +#### Changes + +##### 4.44 +- The game no longer relies on hard-coded frame ticks and now operates on a time elapsed basis with respect to frames. In other words, the game time might look something like `fw = t` where `f` represents the number of frames in the current session and `w` represents the width of each frame in milliseconds. Previously, Treasure Hunt was only accounting for `f` and assumed `w=100`, so the time elapsed formula would look like `100f = t`. This change allows for future adjustments to the frame rate if needed ([#5](../../issues/5)) +- The game no longer uses the `Short` type and all `Short` integers have been promoted to `Integer`. This was necessary to prevent arithmetic overflow exceptions especially on account of trackers now using the frame width ([#10](../../issues/10)) +- The game loop that was started in the load event handler has been replaced with a timer to control the game loop. This is less resource-intensive ([#11](../../issues/11)) +- Treasure Hunt no longer uses `KeyDown` and takes advantage of `DirectInput` through the use of `BPCSharedComponent.dll`, a library I wrote for Three-D Velocity. Keys are now processed in the game loop, making key processing smoother ([#9](../../issues/9)) +- The single footstep sound has been replaced with better footstep sounds ([#7](../../issues/7)) +- Key presses are handled better now and weapons can be rapid-fired. A lot of the key-handling code was cleaned up ([#6](../../issues/6)) +- The game loop is now much cleaner and no longer runs every tenth of a second. The slow frame rate would force the player to slow down so the game could update the state ([#4](../../issues/4)) +- When the player holds down an arrow key, the character will move steadily in that direction as opposed to taking only one step ([#3](../../issues/3)) + +##### 4.42 11/13/2018 +- Treasure Hunt now has an auto updater, and the window layout has been fixed ([#2](../../issues/2)) +- Exceptions should be logged properly now ([#1](../../issues/1)) \ No newline at end of file diff --git a/bin/Debug/Updater.exe b/bin/Debug/Updater.exe index 1386951a60dd867567a1b5e6d3e2c1e47f7243a8..b65e2bf836cd2ec63faf56eee31fbb4256721d16 100644 GIT binary patch delta 63 zcmZoLXfT-2!Swat#x64+0gJ1<-YaMIyKm+yy_2VX@$%*iJROWc$;nZC(){hOTi@++ T^x8c!md}0X6!Fb1d^MZ^vTYpa delta 63 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

Rz1o3=-lC)_DO%jA*l=So$hG<)9)I)!M; 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 Li|52YV+;HX69Fpp literal 130048 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 ANB{r; diff --git a/th.vbproj b/th.vbproj index 71b4e98..a6648d4 100644 --- a/th.vbproj +++ b/th.vbproj @@ -66,7 +66,6 @@ - diff --git a/th/Addendums.vb b/th/Addendums.vb index e862306..f001a18 100644 --- a/th/Addendums.vb +++ b/th/Addendums.vb @@ -19,15 +19,15 @@ Namespace th Get Dim str3 As String = "" Dim array As String() = Strings.Split(FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly.Location).FileName, "\", -1, CompareMethod.Binary) - Dim num2 As Short = CShort((Information.UBound(array, 1) - 1)) - Dim i As Short = 0 + Dim num2 As Integer = ((Information.UBound(array, 1) - 1)) + Dim i As Integer = 0 Do While (i <= num2) If (i = 0) Then str3 = array(i) Else str3 = (str3 & "\" & array(i)) End If - i = CShort((i + 1)) + i = ((i + 1)) Loop Return str3 End Get diff --git a/th/DXSound.vb b/th/DXSound.vb index f0b2692..0ff1143 100644 --- a/th/DXSound.vb +++ b/th/DXSound.vb @@ -8,12 +8,12 @@ Namespace th _ Friend NotInheritable Class DXSound ' Methods - Private Shared Sub GetWhere(ByRef TheX As Short, ByRef TheY As Short, ByRef x As Short, ByRef y As Short) - Dim px As Short - Dim py As Short + Private Shared Sub GetWhere(ByRef TheX As Integer, ByRef TheY As Integer, ByRef x As Integer, ByRef y As Integer) + Dim px As Integer + Dim py As Integer If THF.F.IsControling Then - px = Conversions.ToShort(NewLateBinding.LateGet(THF.F.GetChall(THF.F.WControl), Nothing, "x", New Object(0 - 1) {}, Nothing, Nothing, Nothing)) - py = Conversions.ToShort(NewLateBinding.LateGet(THF.F.GetChall(THF.F.WControl), Nothing, "y", New Object(0 - 1) {}, Nothing, Nothing, Nothing)) + px = Conversions.ToInteger(NewLateBinding.LateGet(THF.F.GetChall(THF.F.WControl), Nothing, "x", New Object(0 - 1) {}, Nothing, Nothing, Nothing)) + py = Conversions.ToInteger(NewLateBinding.LateGet(THF.F.GetChall(THF.F.WControl), Nothing, "y", New Object(0 - 1) {}, Nothing, Nothing, Nothing)) Else px = THF.F.px py = THF.F.py @@ -55,16 +55,16 @@ Namespace th Return DXSound.objDS.CreateSoundBufferFromFile(FileName, dsbufferdesc) End Function - Public Shared Sub LocaleNotify(ByRef x As Short, ByRef y As Short, ByRef Optional DVolume As String = "") - Dim num As Short - Dim num2 As Short + Public Shared Sub LocaleNotify(ByRef x As Integer, ByRef y As Integer, ByRef Optional DVolume As String = "") + Dim num As Integer + Dim num2 As Integer DXSound.GetWhere(num, num2, x, y) If (DVolume <> "dont") Then Dim flag As Boolean Dim flag2 As Boolean Dim flag3 As Boolean - Dim num3 As Short - Dim num4 As Short + Dim num3 As Integer + Dim num4 As Integer Dim str As String Dim flag4 As Boolean Select Case num2 @@ -92,27 +92,27 @@ Namespace th End If End Sub - Private Shared Sub PlayAroundCenter(ByRef Sound As DirectSoundSecondaryBuffer8, ByVal x As Short, ByVal y As Short, ByRef position As Single, ByVal Optional Distance As Long = 1) - Dim num2 As Short - Dim num3 As Short + Private Shared Sub PlayAroundCenter(ByRef Sound As DirectSoundSecondaryBuffer8, ByVal x As Integer, ByVal y As Integer, ByRef position As Single, ByVal Optional Distance As Long = 1) + Dim num2 As Integer + Dim num3 As Integer Select Case position Case 0! - num2 = CShort((x - Distance)) + num2 = ((x - Distance)) num3 = 0 DXSound.smethod_1(Sound, True, False, num2, y, num3) Exit Select Case 1! - num3 = CShort((x + Distance)) + num3 = ((x + Distance)) num2 = 0 DXSound.smethod_1(Sound, True, False, num3, y, num2) Exit Select Case 2! - num3 = CShort((y + Distance)) + num3 = ((y + Distance)) num2 = 0 DXSound.smethod_1(Sound, True, False, x, num3, num2) Exit Select Case 3! - num3 = CShort((y - Distance)) + num3 = ((y - Distance)) num2 = 0 DXSound.smethod_1(Sound, True, False, x, num3, num2) Exit Select @@ -123,7 +123,7 @@ Namespace th End Select End Sub - Public Shared Sub PlaySound(ByRef Sound As DirectSoundSecondaryBuffer8, ByRef bCloseFirst As Boolean, ByRef bLoopSound As Boolean, ByRef Optional PerformEffects As Boolean = False, ByRef Optional x As Short = 0, ByRef Optional y As Short = 0, ByRef Optional DVolume As String = "", ByRef Optional WaitTillDone As Boolean = False) + Public Shared Sub PlaySound(ByRef Sound As DirectSoundSecondaryBuffer8, ByRef bCloseFirst As Boolean, ByRef bLoopSound As Boolean, ByRef Optional PerformEffects As Boolean = False, ByRef Optional x As Integer = 0, ByRef Optional y As Integer = 0, ByRef Optional DVolume As String = "", ByRef Optional WaitTillDone As Boolean = False) If bCloseFirst Then Sound.Stop Sound.SetCurrentPosition(0) @@ -146,8 +146,8 @@ Namespace th Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = False Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 + Dim x As Integer = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(THF.F.RadioSound, bCloseFirst, bLoopSound, performEffects, x, y, dVolume, waitTillDone) @@ -169,19 +169,19 @@ Namespace th THConstVars.CannotDoKeydown = False End Sub - Public Shared Sub SetCoordinates(ByRef x As Short, ByRef y As Short, ByRef Optional z As Short = 0) + Public Shared Sub SetCoordinates(ByRef x As Integer, ByRef y As Integer, ByRef Optional z As Integer = 0) DXSound.directSound3DListener8_0.SetPosition(CSng(x), CSng(y), CSng(z), CONST_DS3DAPPLYFLAGS.DS3D_IMMEDIATE) End Sub - Private Shared Sub SetSoundPosition1(ByRef TheSound As DirectSoundSecondaryBuffer8, ByRef x As Short, ByRef y As Short, ByRef DVolume As String) + Private Shared Sub SetSoundPosition1(ByRef TheSound As DirectSoundSecondaryBuffer8, ByRef x As Integer, ByRef y As Integer, ByRef DVolume As String) Dim num As Integer - Dim num2 As Short - Dim num3 As Short + Dim num2 As Integer + Dim num3 As Integer DXSound.GetWhere(num2, num3, x, y) - If (Math.Abs(CShort((THF.F.px - x))) > 10) Then + If (Math.Abs(((THF.F.px - x))) > 10) Then num = &H2710 Else - num = (Math.Abs(CShort((THF.F.px - x))) * &H3E8) + num = (Math.Abs(((THF.F.px - x))) * &H3E8) End If Select Case num2 Case -1 @@ -194,18 +194,18 @@ Namespace th TheSound.SetPan(num) Exit Select End Select - If (Math.Abs(CShort((THF.F.py - y))) > Math.Abs(CShort((THF.F.px - x)))) Then - If (Math.Abs(CShort((THF.F.py - y))) > 20) Then + If (Math.Abs(((THF.F.py - y))) > Math.Abs(((THF.F.px - x)))) Then + If (Math.Abs(((THF.F.py - y))) > 20) Then num = &H2710 Else - num = (Math.Abs(CShort((THF.F.py - y))) * 100) + num = (Math.Abs(((THF.F.py - y))) * 100) End If End If - If ((Math.Abs(CShort((THF.F.px - x))) > Math.Abs(CShort((THF.F.py - y)))) Or (Math.Abs(CShort((THF.F.px - x))) = Math.Abs(CShort((THF.F.py - y))))) Then - If (Math.Abs(CShort((THF.F.px - x))) > 20) Then + If ((Math.Abs(((THF.F.px - x))) > Math.Abs(((THF.F.py - y)))) Or (Math.Abs(((THF.F.px - x))) = Math.Abs(((THF.F.py - y))))) Then + If (Math.Abs(((THF.F.px - x))) > 20) Then num = &H2710 Else - num = (Math.Abs(CShort((THF.F.px - x))) * 100) + num = (Math.Abs(((THF.F.px - x))) * 100) End If End If TheSound.SetVolume((0 - num)) @@ -213,8 +213,8 @@ Namespace th Dim flag As Boolean Dim flag2 As Boolean Dim flag3 As Boolean - Dim num4 As Short - Dim num5 As Short + Dim num4 As Integer + Dim num5 As Integer Dim str As String Dim flag4 As Boolean Select Case num3 @@ -272,7 +272,7 @@ Namespace th Return buffer End Function - Public Shared Sub smethod_1(ByRef Sound As DirectSoundSecondaryBuffer8, ByVal bCloseFirst As Boolean, ByVal bLoopSound As Boolean, ByRef x As Short, ByRef y As Short, ByRef Optional z As Short = 0) + Public Shared Sub smethod_1(ByRef Sound As DirectSoundSecondaryBuffer8, ByVal bCloseFirst As Boolean, ByVal bLoopSound As Boolean, ByRef x As Integer, ByRef y As Integer, ByRef Optional z As Integer = 0) Dim buffer As DirectSound3DBuffer8 = Sound.GetDirectSound3DBuffer If bCloseFirst Then Sound.Stop diff --git a/th/EllReg.vb b/th/EllReg.vb index 86733c3..6640daf 100644 --- a/th/EllReg.vb +++ b/th/EllReg.vb @@ -168,8 +168,8 @@ Label_00DD: Dim str4 As String = "" Label_00E8: num10 = 13 - Dim num7 As Short = CShort(lpcbData) - Dim start As Short = 1 + Dim num7 As Integer = (lpcbData) + Dim start As Integer = 1 Label_00F3: If (start > num7) Then GoTo Label_014F @@ -188,7 +188,7 @@ Label_011F: GoTo Label_013E Label_0133: num10 = &H13 - start = CShort((start + 1)) + start = ((start + 1)) GoTo Label_00F3 Label_013E: num10 = &H12 @@ -678,12 +678,12 @@ Label_00EF: Public Const STANDARD_RIGHTS_ALL As Integer = &H1F0000 Public Const STANDARD_RIGHTS_READ As Integer = &H20000 Public Const STANDARD_RIGHTS_WRITE As Integer = &H20000 - Public Const KEY_QUERY_VALUE As Short = 1 - Public Const KEY_SET_VALUE As Short = 2 - Public Const KEY_CREATE_SUB_KEY As Short = 4 - Public Const KEY_ENUMERATE_SUB_KEYS As Short = 8 - Public Const KEY_NOTIFY As Short = &H10 - Public Const KEY_CREATE_LINK As Short = &H20 + Public Const KEY_QUERY_VALUE As Integer = 1 + Public Const KEY_SET_VALUE As Integer = 2 + Public Const KEY_CREATE_SUB_KEY As Integer = 4 + Public Const KEY_ENUMERATE_SUB_KEYS As Integer = 8 + Public Const KEY_NOTIFY As Integer = &H10 + Public Const KEY_CREATE_LINK As Integer = &H20 Public Const KEY_ALL_ACCESS As Boolean = True Public Const KEY_READ As Boolean = True Public Const KEY_EXECUTE As Boolean = True @@ -703,17 +703,17 @@ Label_00EF: Public Const HKEY_PERFORMANCE_DATA As Integer = -2147483644 Public Const HKEY_CURRENT_CONFIG As Integer = -2147483643 Public Const HKEY_DYN_DATA As Integer = -2147483642 - Private Const ERROR_NONE As Short = 0 - Private Const ERROR_BADDB As Short = 1 - Private Const ERROR_BADKEY As Short = 2 - Private Const ERROR_CANTOPEN As Short = 3 - Private Const ERROR_CANTREAD As Short = 4 - Private Const ERROR_CANTWRITE As Short = 5 - Private Const ERROR_OUTOFMEMORY As Short = 6 - Private Const ERROR_INVALID_PARAMETER As Short = 7 - Private Const ERROR_ACCESS_DENIED As Short = 8 - Private Const ERROR_INVALID_PARAMETERS As Short = &H57 - Private Const ERROR_NO_MORE_ITEMS As Short = &H103 + Private Const ERROR_NONE As Integer = 0 + Private Const ERROR_BADDB As Integer = 1 + Private Const ERROR_BADKEY As Integer = 2 + Private Const ERROR_CANTOPEN As Integer = 3 + Private Const ERROR_CANTREAD As Integer = 4 + Private Const ERROR_CANTWRITE As Integer = 5 + Private Const ERROR_OUTOFMEMORY As Integer = 6 + Private Const ERROR_INVALID_PARAMETER As Integer = 7 + Private Const ERROR_ACCESS_DENIED As Integer = 8 + Private Const ERROR_INVALID_PARAMETERS As Integer = &H57 + Private Const ERROR_NO_MORE_ITEMS As Integer = &H103 ' Nested Types Public Enum InTypes diff --git a/th/THConstVars.vb b/th/THConstVars.vb index 7b63f4d..b9d5bb6 100644 --- a/th/THConstVars.vb +++ b/th/THConstVars.vb @@ -12,58 +12,10 @@ Namespace th Private Shared Function GetTickCount() As Long End Function - Public Shared Sub HandleError() - Dim number As Long = Information.Err.Number - Dim description As String = Information.Err.Description - Dim erl As Long = Information.Err.Erl - Dim source As String = Information.Err.Source - If THConstVars.IsShuttingDown Then - ProjectData.EndApp + Public Shared Sub handleException(e As Exception, timer As System.Windows.Forms.Timer) + If Not (timer Is Nothing) Then + timer.Enabled = False End If - If (number <> &H5B) Then - If ((number = 9) And ((((THF.F.px > THF.F.x) Or (THF.F.px < 1)) Or (THF.F.py > THF.F.y)) Or (THF.F.py < 1))) Then - If (THF.F.px < 1) Then - THF.F.px = 1 - End If - If (THF.F.px > THF.F.x) Then - THF.F.px = THF.F.x - End If - If (THF.F.py < 1) Then - THF.F.py = 1 - End If - If (THF.F.py > THF.F.y) Then - THF.F.py = THF.F.y - End If - Else - THConstVars.CannotDoKeydown = True - Dim str3 As String = THConstVars.string_0 - FileSystem.Reset - FileSystem.FileOpen(1, (Addendums.FilePath & "\error.log"), OpenMode.Output, OpenAccess.Default, OpenShare.Default, -1) - Select Case number - Case &H35 - THConstVars.smethod_0(("The file " & str3 & " could not be found.")) - FileSystem.WriteLine(1, New Object() { ("Could not find " & str3) }) - Exit Select - Case &H1B0 - THConstVars.smethod_0(("The file " & str3 & " could not be found.")) - FileSystem.WriteLine(1, New Object() { ("Could not find " & str3) }) - Exit Select - Case 5 - THConstVars.smethod_0(("The file " & str3 & " is not of a valid format to be loaded into a 3d positional buffer.")) - Exit Select - Case Else - THConstVars.smethod_0(String.Concat(New String() { "An error esception code ", Conversions.ToString(number), " has been raised. Please contact BPCPrograms SD for assistance. ERROR INFORMATION: ", description, "; ", source, " (", Conversions.ToString(erl), ")" })) - FileSystem.WriteLine(1, New Object() { String.Concat(New String() { "An error esception code ", Conversions.ToString(number), " has been raised. ERROR INFORMATION: Desc=", description, "; Source=", source, "; Erl=", Conversions.ToString(erl), "; Ver=", THF.F.AppVersion }) }) - Exit Select - End Select - FileSystem.WriteLine(1, New Object() { ("error code: " & Conversions.ToString(number)) }) - FileSystem.Reset - THF.F.ShutDown - End If - End If - End Sub - - Public Shared Sub handleException(e As Exception) FileSystem.Reset() FileSystem.FileOpen(1, (Addendums.FilePath & "\error.log"), OpenMode.Output, OpenAccess.Default, OpenShare.Default, -1) FileSystem.WriteLine(1, New Object() {e.Message}) diff --git a/th/THReg.vb b/th/THReg.vb index 5671ba9..4f3b051 100644 --- a/th/THReg.vb +++ b/th/THReg.vb @@ -15,7 +15,7 @@ Namespace th Else str = "SOFTWARE\\MICROSOFT\\WINDOWS\\CurrentVersion" End If - Dim number As Short = &H7B + Dim number As Integer = &H7B Dim reverse As Boolean = False Dim str3 As String = (THReg.ValRegString(Interaction.GetSetting(Addendums.AppTitle, "Config", "Username", ""), number, reverse) & "-") Dim str4 As String = EllReg.ReadRegistry(-2147483646, str, "ProductId") @@ -35,14 +35,14 @@ Namespace th If (expression = "") Then expression = THReg.GetProductID End If - Dim length As Short = CShort(Math.Round(Conversion.Int(CDbl((CDbl(Strings.Len(expression)) / 3))))) + Dim length As Integer = (Math.Round(Conversion.Int(CDbl((CDbl(Strings.Len(expression)) / 3))))) Dim str As String = Strings.Left(expression, length) Dim str2 As String = Strings.Mid(expression, length, length) Dim str3 As String = Strings.Right(expression, length) - Dim number As Short = &H18F + Dim number As Integer = &H18F Dim reverse As Boolean = True expression = THReg.ValRegString(String.Concat(New String() { str, "-", str2, "-", str3 }), number, reverse) - length = CShort(Math.Round(Conversion.Int(CDbl((CDbl(Strings.Len(expression)) / 3))))) + length = (Math.Round(Conversion.Int(CDbl((CDbl(Strings.Len(expression)) / 3))))) str = Strings.Left(expression, length) str2 = Strings.Mid(expression, length, length) str3 = Strings.Right(expression, length) @@ -58,154 +58,154 @@ Namespace th Return expression End Function - Private Shared Function GetRegChar(ByRef position As Short) As String + Private Shared Function GetRegChar(ByRef position As Integer) As String Dim divisor As Long = CLng(position) Dim dividen As Long = &H1A - position = CShort(divisor) + position = (divisor) If THReg.IsDiv(divisor, dividen) Then Return "a" End If dividen = CLng(position) divisor = &H19 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "b" End If dividen = CLng(position) divisor = &H18 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "c" End If dividen = CLng(position) divisor = &H17 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "d" End If dividen = CLng(position) divisor = &H16 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "e" End If dividen = CLng(position) divisor = &H15 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "f" End If dividen = CLng(position) divisor = 20 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "g" End If dividen = CLng(position) divisor = &H13 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "h" End If dividen = CLng(position) divisor = &H12 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "i" End If dividen = CLng(position) divisor = &H11 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "j" End If dividen = CLng(position) divisor = &H10 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "k" End If dividen = CLng(position) divisor = 15 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "l" End If dividen = CLng(position) divisor = 14 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "m" End If dividen = CLng(position) divisor = 13 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "n" End If dividen = CLng(position) divisor = 12 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "o" End If dividen = CLng(position) divisor = 11 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "p" End If dividen = CLng(position) divisor = 10 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "q" End If dividen = CLng(position) divisor = 9 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "r" End If dividen = CLng(position) divisor = 8 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "s" End If dividen = CLng(position) divisor = 7 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "t" End If dividen = CLng(position) divisor = 6 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "u" End If dividen = CLng(position) divisor = 5 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "v" End If dividen = CLng(position) divisor = 4 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "w" End If dividen = CLng(position) divisor = 3 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "x" End If dividen = CLng(position) divisor = 2 - position = CShort(dividen) + position = (dividen) If THReg.IsDiv(dividen, divisor) Then Return "y" End If @@ -220,25 +220,25 @@ Namespace th Return flag End Function - Private Shared Function RegGetAlpha(ByRef position As Short) As String + Private Shared Function RegGetAlpha(ByRef position As Integer) As String Dim regChar As String = THReg.GetRegChar(position) If (regChar = "null") Then - Dim num2 As Short - Dim num4 As Short - Dim str As String = Conversion.Str(CShort(position)) + Dim num2 As Integer + Dim num4 As Integer + Dim str As String = Conversion.Str((position)) str = Strings.Mid(str, 2, (Strings.Len(str) - 1)) Dim strArray As String() = New String((Strings.Len(str) + 1) - 1) {} - Dim num As Short = CShort(Strings.Len(str)) + Dim num As Integer = (Strings.Len(str)) num2 = 1 Do While (num2 <= num) strArray(num2) = Strings.Mid(str, num2, 1) - num2 = CShort((num2 + 1)) + num2 = ((num2 + 1)) Loop - Dim num3 As Short = CShort(Strings.Len(str)) + Dim num3 As Integer = (Strings.Len(str)) num2 = 1 Do While (num2 <= num3) - num4 = CShort(Math.Round(CDbl((num4 + Conversion.Val(strArray(num2)))))) - num2 = CShort((num2 + 1)) + num4 = (Math.Round(CDbl((num4 + Conversion.Val(strArray(num2)))))) + num2 = ((num2 + 1)) Loop regChar = THReg.GetRegChar(num4) If (regChar = "null") Then @@ -248,48 +248,48 @@ Namespace th Return regChar End Function - Private Shared Function ValRegString(ByRef RString As String, ByRef number As Short, ByRef Optional reverse As Boolean = False) As String - Dim num As Short + Private Shared Function ValRegString(ByRef RString As String, ByRef number As Integer, ByRef Optional reverse As Boolean = False) As String + Dim num As Integer Dim str As String - Dim num2 As Short + Dim num2 As Integer Dim str2 As String - Dim num3 As Short + Dim num3 As Integer Dim str3 As String If Not reverse Then - Dim num4 As Short = CShort(Strings.Len(CStr(RString))) + Dim num4 As Integer = (Strings.Len(CStr(RString))) num2 = 1 Do While (num2 <= num4) str = Strings.Mid(RString, num2, 1) If (num3 = 0) Then - num3 = CShort(Strings.Len(CStr(RString))) + num3 = (Strings.Len(CStr(RString))) Else - num3 = CShort((num3 - 1)) + num3 = ((num3 - 1)) End If If (num3 < num2) Then - num3 = CShort((num3 + 1)) + num3 = ((num3 + 1)) End If str2 = Strings.Mid(RString, num3, 1) - num = CShort(((Strings.Asc(str) + Strings.Asc(str2)) + CShort((number + number)))) + num = (((Strings.Asc(str) + Strings.Asc(str2)) + ((number + number)))) str3 = (str3 & THReg.RegGetAlpha(num)) Application.DoEvents - num2 = CShort((num2 + 1)) + num2 = ((num2 + 1)) Loop Return str3 End If - num2 = CShort((Strings.Len(CStr(RString)) + 1)) + num2 = ((Strings.Len(CStr(RString)) + 1)) Do While (num2 > 1) - num2 = CShort((num2 - 1)) + num2 = ((num2 - 1)) str = Strings.Mid(RString, num2, 1) If (num3 = 0) Then num3 = 1 Else - num3 = CShort((num3 + 1)) + num3 = ((num3 + 1)) End If If (num3 > num2) Then - num3 = CShort((num3 - 1)) + num3 = ((num3 - 1)) End If str2 = Strings.Mid(RString, num3, 1) - num = CShort(((Strings.Asc(str) + Strings.Asc(str2)) + CShort((number + number)))) + num = (((Strings.Asc(str) + Strings.Asc(str2)) + ((number + number)))) str3 = (str3 & THReg.RegGetAlpha(num)) Application.DoEvents Loop diff --git a/th/chall.vb b/th/chall.vb index a858073..756b6d0 100644 --- a/th/chall.vb +++ b/th/chall.vb @@ -16,8 +16,8 @@ Namespace th Dim bCloseFirst As Boolean = False Dim bLoopSound As Boolean = True Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 + Dim x As Integer = 0 + Dim y As Integer = 0 Dim dVolume As String = "" flag4 = False DXSound.PlaySound(THF.F.BackgroundSound, bCloseFirst, bLoopSound, performEffects, x, y, dVolume, flag4) @@ -44,7 +44,7 @@ Namespace th Me.TCount = 0 Me.hit Else - Me.TCount = CShort((Me.TCount + 1)) + Me.TCount = ((Me.TCount + 1)) End If ElseIf (Me.SCount >= Me.CSeconds) Then Me.SCount = 0 @@ -54,10 +54,8 @@ Namespace th Me.Move End If Else - Me.SCount = CShort((Me.SCount + 1)) + Me.SCount = ((Me.SCount + 1)) End If - flag4 = False - THF.F.CharDied(flag4) End If Else Me.ChallDied @@ -73,8 +71,8 @@ Namespace th Dim flag As Boolean Dim flag2 As Boolean Dim flag3 As Boolean - Dim num As Short - Dim num2 As Short + Dim num As Integer + Dim num2 As Integer Dim str As String Dim flag4 As Boolean Me.IsBeingControled = False @@ -203,17 +201,17 @@ Namespace th End If End Sub - Public Sub ChallHit(ByRef subtract As Short) + Public Sub ChallHit(ByRef subtract As Integer) If (Me.A > 0) Then Me.LoadSounds - Me.A = CShort((Me.A - subtract)) + Me.A = ((Me.A - subtract)) If (Me.A <= 0) Then Me.ChallDied Else If (Me.challHitSound Is Nothing) Then Me.challHitSound = DXSound.smethod_0((DXSound.SoundPath & "\challgrunt.wav"), 2.0!, 30) End If - Dim z As Short = 0 + Dim z As Integer = 0 DXSound.smethod_1(Me.challHitSound, True, False, Me.x, Me.y, z) End If End If @@ -228,33 +226,33 @@ Namespace th Else If (shift <> &H10000) Then Dim flag As Boolean - Dim num As Short + Dim num As Integer THF.F.ThingReplace(Me.x, Me.y, THF.F.GetBGrid(Me.x, Me.y)) If (keyCode = &H25) Then - num = CShort((Me.x - 1)) + num = ((Me.x - 1)) If Not Me.GetBlock(num, Me.y) Then - Me.x = CShort((Me.x - 1)) + Me.x = ((Me.x - 1)) flag = True End If End If If (keyCode = &H27) Then - num = CShort((Me.x + 1)) + num = ((Me.x + 1)) If Not Me.GetBlock(num, Me.y) Then - Me.x = CShort((Me.x + 1)) + Me.x = ((Me.x + 1)) flag = True End If End If If (keyCode = &H26) Then - num = CShort((Me.y + 1)) + num = ((Me.y + 1)) If Not Me.GetBlock(Me.x, num) Then - Me.y = CShort((Me.y + 1)) + Me.y = ((Me.y + 1)) flag = True End If End If If (keyCode = 40) Then - num = CShort((Me.y - 1)) + num = ((Me.y - 1)) If Not Me.GetBlock(Me.x, num) Then - Me.y = CShort((Me.y - 1)) + Me.y = ((Me.y - 1)) flag = True End If End If @@ -283,23 +281,23 @@ Namespace th End If End Sub - Private Sub DoDoor(ByRef x As Short, ByRef y As Short) - Dim num2 As Short - Dim num3 As Short - Select Case Me.GetDoor(CShort((x - 1)), y) + Private Sub DoDoor(ByRef x As Integer, ByRef y As Integer) + Dim num2 As Integer + Dim num3 As Integer + Select Case Me.GetDoor(((x - 1)), y) Case 1! If Not Me.LDoor Then Me.OpenDoorSound = DXSound.smethod_0((DXSound.SoundPath & "\opendoor.wav"), 2!, 7) End If Me.LDoor = True - num2 = CShort((x - 1)) + num2 = ((x - 1)) num3 = 0 DXSound.smethod_1(Me.OpenDoorSound, True, False, num2, y, num3) Me.XDir = 0 - num3 = CShort((x - 1)) + num3 = ((x - 1)) THF.F.AllThingReplace(num3, y, THF.F.OpenDoor) If Not Me.IsBeingControled Then - x = CShort((x - 1)) + x = ((x - 1)) End If Exit Select Case 2! @@ -311,20 +309,20 @@ Namespace th DXSound.smethod_1(Me.LockedDoorSound, True, False, x, y, num3) Exit Select End Select - Select Case Me.GetDoor(CShort((x + 1)), y) + Select Case Me.GetDoor(((x + 1)), y) Case 1! If Not Me.LDoor Then Me.OpenDoorSound = DXSound.smethod_0((DXSound.SoundPath & "\opendoor.wav"), 2!, 7) End If Me.LDoor = True - num3 = CShort((x + 1)) + num3 = ((x + 1)) num2 = 0 DXSound.smethod_1(Me.OpenDoorSound, True, False, num3, y, num2) Me.XDir = 1 - num3 = CShort((x + 1)) + num3 = ((x + 1)) THF.F.AllThingReplace(num3, y, THF.F.OpenDoor) If Not Me.IsBeingControled Then - x = CShort((x + 1)) + x = ((x + 1)) End If Exit Select Case 2! @@ -336,20 +334,20 @@ Namespace th DXSound.smethod_1(Me.LockedDoorSound, True, False, x, y, num3) Exit Select End Select - Select Case Me.GetDoor(x, CShort((y + 1))) + Select Case Me.GetDoor(x, ((y + 1))) Case 1! If Not Me.LDoor Then Me.OpenDoorSound = DXSound.smethod_0((DXSound.SoundPath & "\opendoor.wav"), 2!, 7) End If Me.LDoor = True - num3 = CShort((y + 1)) + num3 = ((y + 1)) num2 = 0 DXSound.smethod_1(Me.OpenDoorSound, True, False, x, num3, num2) Me.MDir = 0 - num3 = CShort((y + 1)) + num3 = ((y + 1)) THF.F.AllThingReplace(x, num3, THF.F.OpenDoor) If Not Me.IsBeingControled Then - y = CShort((y + 1)) + y = ((y + 1)) End If Exit Select Case 2! @@ -361,20 +359,20 @@ Namespace th DXSound.smethod_1(Me.LockedDoorSound, True, False, x, y, num3) Exit Select End Select - Select Case Me.GetDoor(x, CShort((y - 1))) + Select Case Me.GetDoor(x, ((y - 1))) Case 1! If Not Me.LDoor Then Me.OpenDoorSound = DXSound.smethod_0((DXSound.SoundPath & "\opendoor.wav"), 2!, 7) End If Me.LDoor = True - num3 = CShort((y - 1)) + num3 = ((y - 1)) num2 = 0 DXSound.smethod_1(Me.OpenDoorSound, True, False, x, num3, num2) Me.MDir = 1 - num3 = CShort((y - 1)) + num3 = ((y - 1)) THF.F.AllThingReplace(x, num3, THF.F.OpenDoor) If Not Me.IsBeingControled Then - y = CShort((y - 1)) + y = ((y - 1)) End If Exit Select Case 2! @@ -391,7 +389,7 @@ Namespace th Private Sub DoIfBomb() If (THF.F.GetGrid(Me.x, Me.y) = THF.F.RBomb) Then Me.LoadSounds - Me.A = CShort(Math.Round(CDbl((Me.A - (1! + Conversion.Int(CSng((50! * VBMath.Rnd)))))))) + Me.A = (Math.Round(CDbl((Me.A - (1! + Conversion.Int(CSng((50! * VBMath.Rnd)))))))) If (Me.A <= 0) Then Me.ChallDied Return @@ -399,7 +397,7 @@ Namespace th If (Me.challHitSound Is Nothing) Then Me.challHitSound = DXSound.smethod_0((DXSound.SoundPath & "\challgrunt.wav"), 2.0!, 30) End If - Dim z As Short = 0 + Dim z As Integer = 0 DXSound.smethod_1(Me.challHitSound, True, False, Me.x, Me.y, z) Me.ShowChall End If @@ -417,12 +415,15 @@ Namespace th Private Sub DoIfGLMissile() If ((Not THF.F.HasKilledBrutus2 AndAlso ((Me.x = THF.F.GX) And (Me.y = THF.F.GY))) AndAlso ((1! + Conversion.Int(CSng((2! * VBMath.Rnd)))) = 2!)) Then - Me.LoadSounds + Me.LoadSounds() + If (Me.challGunSound Is Nothing) Then + Me.challGunSound = DXSound.smethod_0((DXSound.SoundPath & "\challgun.wav"), 2.0!, 30) + End If Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = False Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 + Dim x As Integer = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(Me.challGunSound, bCloseFirst, bLoopSound, performEffects, x, y, dVolume, waitTillDone) @@ -435,7 +436,7 @@ Namespace th Private Sub DoIfGRMissile() If (THF.F.GetGrid(Me.x, Me.y) = THF.F.RMissile) Then Me.LoadSounds - Dim subtract As Short = CShort(Math.Round(CDbl((1! + Conversion.Int(CSng((80! * VBMath.Rnd))))))) + Dim subtract As Integer = (Math.Round(CDbl((1! + Conversion.Int(CSng((80! * VBMath.Rnd))))))) Me.ChallHit(subtract) THF.F.ThingReplace(Me.x, Me.y, THF.F.GetBGrid(Me.x, Me.y)) End If @@ -444,26 +445,26 @@ Namespace th Private Sub DoIfPoisoned() If Me.IsPoisoned Then If Me.IsMaster Then - Me.A = CShort((Me.A - 5)) + Me.A = ((Me.A - 5)) Else - Me.A = CShort(Math.Round(CDbl((Me.A - ((1! + Conversion.Int(CSng((10! * VBMath.Rnd)))) * (1! + Conversion.Int(CSng((Me.NumOfNeedles * VBMath.Rnd))))))))) + Me.A = (Math.Round(CDbl((Me.A - ((1! + Conversion.Int(CSng((10! * VBMath.Rnd)))) * (1! + Conversion.Int(CSng((Me.NumOfNeedles * VBMath.Rnd))))))))) End If End If End Sub - Private Function GetBlock(ByRef x As Short, ByRef y As Short) As Boolean + Private Function GetBlock(ByRef x As Integer, ByRef y As Integer) As Boolean Dim flag As Boolean If ((((x < 1) Or (x > THF.F.x)) Or (y < 1)) Or (y > THF.F.y)) Then Return True End If - Dim bGrid As Short = THF.F.GetBGrid(x, y) + Dim bGrid As Integer = THF.F.GetBGrid(x, y) If Not (((((bGrid <> THF.F.Mine) And (bGrid <> THF.F.Water)) And (bGrid <> THF.F.ClosedDoor)) And (bGrid <> THF.F.LockedDoor)) And (bGrid <> THF.F.Wall)) Then flag = True End If Return flag End Function - Private Function GetDoor(ByVal x As Short, ByVal y As Short) As Single + Private Function GetDoor(ByVal x As Integer, ByVal y As Integer) As Single Dim num As Single If (THF.F.GetBGrid(x, y) = THF.F.OpenDoor) Then Return 0! @@ -489,7 +490,7 @@ Namespace th Me.IsBeingControled = True End Sub - Private Sub GetWhere(ByRef TheX As Short, ByRef TheY As Short) + Private Sub GetWhere(ByRef TheX As Integer, ByRef TheY As Integer) If (THF.F.px > Me.x) Then TheX = -1 End If @@ -511,7 +512,7 @@ Namespace th End Sub Private Sub hit() - Dim num4 As Short + Dim num4 As Integer Dim str As String Me.LoadSounds If Not Me.IsBeingControled Then @@ -520,7 +521,7 @@ Namespace th Me.LCount = 1 Me.MoveWhileFight Else - Me.LCount = CShort((Me.LCount + 1)) + Me.LCount = ((Me.LCount + 1)) End If End If If Not ((Me.method_0 = 0) Or (Me.method_0 = 1)) Then @@ -539,9 +540,9 @@ Namespace th Me.IsFighting = True End If ElseIf Not Me.IsFighting Then - Dim num3 As Short + Dim num3 As Integer If ((THConstVars.Difficulty <> 4!) And Not Me.HasFoundOnce) Then - num3 = CShort(Math.Round(CDbl((1! + Conversion.Int(CSng((2! * VBMath.Rnd))))))) + num3 = (Math.Round(CDbl((1! + Conversion.Int(CSng((2! * VBMath.Rnd))))))) Else num3 = 2 End If @@ -569,7 +570,7 @@ Namespace th Dim rWait As Boolean = False DXSound.Radio(str, rWait) End If - THF.F.HowMany = CShort(Math.Round(CDbl((2! * THConstVars.Difficulty)))) + THF.F.HowMany = (Math.Round(CDbl((2! * THConstVars.Difficulty)))) If Not Me.HasFoundOnce Then Select Case (1! + Conversion.Int(CSng((4! * VBMath.Rnd)))) Case 1! @@ -599,12 +600,12 @@ Namespace th DXSound.smethod_1(Me.Caught5Sound, True, False, Me.x, Me.y, num4) End If THF.F.HasCalledMore = True - Dim challAmount As Short = THF.F.ChallAmount - Dim i As Short = 1 + Dim challAmount As Integer = THF.F.ChallAmount + Dim i As Integer = 1 Do While (i <= challAmount) THF.F.GoFight(i) Application.DoEvents - i = CShort((i + 1)) + i = ((i + 1)) Loop THF.F.HowManyNum = 0 End If @@ -612,7 +613,7 @@ Namespace th End If End If If (Me.IsFighting Or Me.IsBeingControled) Then - Dim num As Short + Dim num As Integer THF.F.ChallNum = Me.PosNum If (Not Me.IsBeingControled AndAlso Not Me.IsDoingBomb) Then If (((1! + Conversion.Int(CSng((2! * VBMath.Rnd)))) = 1!) Or (Me.BCount > 1)) Then @@ -622,7 +623,7 @@ Namespace th Me.ThrowBomb Return End If - Me.BCount = CShort((Me.BCount + 1)) + Me.BCount = ((Me.BCount + 1)) End If str = "" DXSound.LocaleNotify(Me.x, Me.y, str) @@ -633,12 +634,12 @@ Namespace th DXSound.smethod_1(Me.challGunSound, True, False, Me.x, Me.y, num4) If (Me.method_0 = 2) Then If (THF.F.HasKilledBrutus And THF.F.HasKilledBrutus2) Then - num = CShort(Math.Round(CDbl((Conversion.Int(CSng((VBMath.Rnd(1!) * 20!))) + 1!)))) + num = (Math.Round(CDbl((Conversion.Int(CSng((VBMath.Rnd(1!) * 20!))) + 1!)))) Else - num = CShort(Math.Round(CDbl((Conversion.Int(CSng((VBMath.Rnd(1!) * 150!))) + 1!)))) + num = (Math.Round(CDbl((Conversion.Int(CSng((VBMath.Rnd(1!) * 150!))) + 1!)))) End If Else - num = CShort(Math.Round(CDbl((Conversion.Int(CSng((VBMath.Rnd(1!) * 50!))) + 1!)))) + num = (Math.Round(CDbl((Conversion.Int(CSng((VBMath.Rnd(1!) * 50!))) + 1!)))) End If If Not Me.IsBeingControled Then THF.F.ReflectHit(num, Me.PosNum) @@ -648,7 +649,7 @@ Namespace th End If End Sub - Public Sub init(ByRef px As Short, ByRef py As Short, ByRef p As Short, ByRef CHealth As Short, ByRef s As Short, ByRef t As Short, ByRef Optional dead As Boolean = False) + Public Sub init(ByRef px As Integer, ByRef py As Integer, ByRef p As Integer, ByRef CHealth As Integer, ByRef s As Integer, ByRef t As Integer, ByRef Optional dead As Boolean = False) Me.CSeconds = s Me.HSeconds = t Me.IsDeadValid = dead @@ -674,8 +675,8 @@ Namespace th End If End Sub - Private Function method_0() As Short - Dim num As Short + Private Function method_0() As Integer + Dim num As Integer If Not THF.F.IsFightingLast Then Return 0 End If @@ -689,8 +690,8 @@ Namespace th End Function Private Sub Move() - Dim num As Short - Dim num2 As Short + Dim num As Integer + Dim num2 As Integer If Me.IsFighting Then If (Me.run >= (3! * THConstVars.Difficulty)) Then Dim f As mainFRM = THF.F @@ -720,14 +721,14 @@ Namespace th Me.IsFighting = False Me.run = 0 Else - Me.run = CShort((Me.run + 1)) + Me.run = ((Me.run + 1)) End If End If THF.F.ThingReplace(Me.x, Me.y, THF.F.GetBGrid(Me.x, Me.y)) Me.DoDoor(Me.x, Me.y) If ((Me.PosNum <> 5) And ((((THConstVars.Difficulty = 4!) Or ((THF.F.NumAlert > 0) And ((1! + Conversion.Int(CSng((2! * VBMath.Rnd)))) = 2!))) Or Me.HasFoundOnce) Or ((1! + Conversion.Int(CSng((2! * VBMath.Rnd)))) = 2!))) Then If (Me.x < (THF.F.x - 1)) Then - num2 = CShort((Me.x + 1)) + num2 = ((Me.x + 1)) If Me.GetBlock(num2, Me.y) Then Me.XDir = 0 End If @@ -735,26 +736,26 @@ Namespace th Me.XDir = 0 End If If (Me.x > 2) Then - num2 = CShort((Me.x - 1)) + num2 = ((Me.x - 1)) If Me.GetBlock(num2, Me.y) Then Me.XDir = 1 End If Else Me.XDir = 1 End If - num2 = CShort((Me.x + 1)) - num = CShort((Me.x - 1)) + num2 = ((Me.x + 1)) + num = ((Me.x - 1)) If (Not Me.GetBlock(num2, Me.y) And Not Me.GetBlock(num, Me.y)) Then If (Me.XDir = 0!) Then - Me.x = CShort((Me.x - 1)) + Me.x = ((Me.x - 1)) End If If (Me.XDir = 1!) Then - Me.x = CShort((Me.x + 1)) + Me.x = ((Me.x + 1)) End If End If End If If (Me.y < (THF.F.y - 1)) Then - num2 = CShort((Me.y + 1)) + num2 = ((Me.y + 1)) If Me.GetBlock(Me.x, num2) Then Me.MDir = 1 End If @@ -762,58 +763,58 @@ Namespace th Me.MDir = 1 End If If (Me.y > 2) Then - num2 = CShort((Me.y - 1)) + num2 = ((Me.y - 1)) If Me.GetBlock(Me.x, num2) Then Me.MDir = 0 End If Else Me.MDir = 0 End If - num2 = CShort((Me.y + 1)) - num = CShort((Me.y - 1)) + num2 = ((Me.y + 1)) + num = ((Me.y - 1)) If Not (Me.GetBlock(Me.x, num2) And Me.GetBlock(Me.x, num)) Then If (Me.MDir = 1!) Then - Me.y = CShort((Me.y - 1)) + Me.y = ((Me.y - 1)) Else - Me.y = CShort((Me.y + 1)) + Me.y = ((Me.y + 1)) End If End If Me.ShowChall End Sub Private Sub MoveWhileFight() - Dim num As Short + Dim num As Integer THF.F.ThingReplace(Me.x, Me.y, THF.F.GetBGrid(Me.x, Me.y)) - Select Case CShort(Math.Round(CDbl((1! + Conversion.Int(CSng((4! * VBMath.Rnd))))))) + Select Case (Math.Round(CDbl((1! + Conversion.Int(CSng((4! * VBMath.Rnd))))))) Case 1 If ((THF.F.px + 1) <= THF.F.x) Then - num = CShort((THF.F.px + 1)) + num = ((THF.F.px + 1)) If Not Me.GetBlock(num, Me.y) Then - Me.x = CShort((THF.F.px + 1)) + Me.x = ((THF.F.px + 1)) End If End If Exit Select Case 2 If ((THF.F.px - 1) >= 1) Then - num = CShort((THF.F.px - 1)) + num = ((THF.F.px - 1)) If Not Me.GetBlock(num, Me.y) Then - Me.x = CShort((THF.F.px - 1)) + Me.x = ((THF.F.px - 1)) End If End If Exit Select Case 3 If ((THF.F.py + 1) <= THF.F.y) Then - num = CShort((THF.F.py + 1)) + num = ((THF.F.py + 1)) If Not Me.GetBlock(Me.x, num) Then - Me.y = CShort((THF.F.py + 1)) + Me.y = ((THF.F.py + 1)) End If End If Exit Select Case 4 If ((THF.F.py - 1) >= 1) Then - num = CShort((THF.F.py - 1)) + num = ((THF.F.py - 1)) If Not Me.GetBlock(Me.x, num) Then - Me.y = CShort((THF.F.py - 1)) + Me.y = ((THF.F.py - 1)) End If End If Exit Select @@ -829,8 +830,8 @@ Namespace th Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = False Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 + Dim x As Integer = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(THF.F.TeleportSound, bCloseFirst, bLoopSound, performEffects, x, y, dVolume, waitTillDone) @@ -844,9 +845,9 @@ Namespace th Me.IsMaster = False End Sub - Private Function ScanForChar(ByRef Range As Short) As Boolean + Private Function ScanForChar(ByRef Range As Integer) As Boolean Dim flag As Boolean - If ((THF.F.WDepth < 10) AndAlso ((Math.Abs(CShort((THF.F.px - Me.x))) <= Range) And (Math.Abs(CShort((THF.F.py - Me.y))) <= Range))) Then + If ((THF.F.WDepth < 10) AndAlso ((Math.Abs(((THF.F.px - Me.x))) <= Range) And (Math.Abs(((THF.F.py - Me.y))) <= Range))) Then flag = True End If Return flag @@ -854,20 +855,20 @@ Namespace th Private Sub SetSoundPosition(ByRef TheSound As DirectSoundSecondaryBuffer8, ByRef DVolume As Boolean) Dim num As Integer - Dim num2 As Short - Dim num3 As Short + Dim num2 As Integer + Dim num3 As Integer Dim flag As Boolean Dim flag2 As Boolean Dim flag3 As Boolean - Dim num4 As Short - Dim num5 As Short + Dim num4 As Integer + Dim num5 As Integer Dim str As String Dim flag4 As Boolean Me.GetWhere(num2, num3) - If (Math.Abs(CShort((THF.F.px - Me.x))) > 10) Then + If (Math.Abs(((THF.F.px - Me.x))) > 10) Then num = &H2710 Else - num = (Math.Abs(CShort((THF.F.px - Me.x))) * &H3E8) + num = (Math.Abs(((THF.F.px - Me.x))) * &H3E8) End If Select Case num2 Case -1 @@ -880,18 +881,18 @@ Namespace th TheSound.SetPan(num) Exit Select End Select - If (Math.Abs(CShort((THF.F.py - Me.y))) > Math.Abs(CShort((THF.F.px - Me.x)))) Then - If (Math.Abs(CShort((THF.F.py - Me.y))) > 20) Then + If (Math.Abs(((THF.F.py - Me.y))) > Math.Abs(((THF.F.px - Me.x)))) Then + If (Math.Abs(((THF.F.py - Me.y))) > 20) Then num = &H2710 Else - num = (Math.Abs(CShort((THF.F.py - Me.y))) * 100) + num = (Math.Abs(((THF.F.py - Me.y))) * 100) End If End If - If ((Math.Abs(CShort((THF.F.px - Me.x))) > Math.Abs(CShort((THF.F.py - Me.y)))) Or (Math.Abs(CShort((THF.F.px - Me.x))) = Math.Abs(CShort((THF.F.py - Me.y))))) Then - If (Math.Abs(CShort((THF.F.px - Me.x))) > 20) Then + If ((Math.Abs(((THF.F.px - Me.x))) > Math.Abs(((THF.F.py - Me.y)))) Or (Math.Abs(((THF.F.px - Me.x))) = Math.Abs(((THF.F.py - Me.y))))) Then + If (Math.Abs(((THF.F.px - Me.x))) > 20) Then num = &H2710 Else - num = (Math.Abs(CShort((THF.F.px - Me.x))) * 100) + num = (Math.Abs(((THF.F.px - Me.x))) * 100) End If End If TheSound.SetVolume((0 - num)) @@ -947,7 +948,7 @@ Namespace th Private Sub ThrowBomb() If Not (((Me.IsMaster And THF.F.HasKilledBrutus) And THF.F.HasKilledBrutus2) And Not THF.F.HasKilledMouse) Then - Dim num3 As Short + Dim num3 As Integer If Not Me.IsDoingBomb Then If (Me.BombLaunchSound Is Nothing) Then Me.BombLaunchSound = DXSound.smethod_0((DXSound.SoundPath & "\launch.wav"), 2.0!, 30) @@ -957,8 +958,8 @@ Namespace th Me.IsDoingBomb = True End If If (Me.BombLaunchSound.GetStatus <> CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING) Then - Dim num As Short - Dim num2 As Short + Dim num As Integer + Dim num2 As Integer If (Me.BombDetSound Is Nothing) Then Me.BombDetSound = DXSound.smethod_0((DXSound.SoundPath & "\explode.wav"), 2.0!, 30) End If @@ -967,10 +968,10 @@ Namespace th Me.IsDoingBomb = False If (Me.method_0 = 2) Then num2 = 1 - num = CShort(Math.Round(CDbl((1! + Conversion.Int(CSng((200! * VBMath.Rnd))))))) + num = (Math.Round(CDbl((1! + Conversion.Int(CSng((200! * VBMath.Rnd))))))) Else num2 = 3 - num = CShort(Math.Round(CDbl((1! + Conversion.Int(CSng((30! * VBMath.Rnd))))))) + num = (Math.Round(CDbl((1! + Conversion.Int(CSng((30! * VBMath.Rnd))))))) End If If Me.ScanForChar(num2) Then THF.F.ReflectHit(num, Me.PosNum) @@ -1064,7 +1065,7 @@ Namespace th Private Const South As Single = 1! Private Const West As Single = 0! Private Const east As Single = 1! - Public NumOfNeedles As Short + Public NumOfNeedles As Integer Public IsPoisoned As Boolean Public IsBeingControled As Boolean Private LDoor As Boolean @@ -1075,23 +1076,23 @@ Namespace th Private LockedDoorSound As DirectSoundSecondaryBuffer8 Public challHitSound As DirectSoundSecondaryBuffer8 Public IsFighting As Boolean - Public A As Short - Public x As Short = 400 - Public y As Short = 400 - Private up As Short - Private down As Short - Private MDir As Short - Private XDir As Short - Private countdown As Short - Private LCount As Short - Private BCount As Short - Private PosNum As Short + Public A As Integer + Public x As Integer = 400 + Public y As Integer = 400 + Private up As Integer + Private down As Integer + Private MDir As Integer + Private XDir As Integer + Private countdown As Integer + Private LCount As Integer + Private BCount As Integer + Private PosNum As Integer Public IsDeadValid As Boolean - Private run As Short - Public CSeconds As Short - Private SCount As Short - Public HSeconds As Short - Private TCount As Short + Private run As Integer + Public CSeconds As Integer + Private SCount As Integer + Public HSeconds As Integer + Private TCount As Integer Public IsMaster As Boolean Private RedAlertSound As DirectSoundSecondaryBuffer8 Private BombLaunchSound As DirectSoundSecondaryBuffer8 @@ -1109,7 +1110,7 @@ Namespace th Private Caught5Sound As DirectSoundSecondaryBuffer8 Private HasUnloadedSounds As Boolean Private IsDoingBomb As Boolean - Private LRange As Short + Private LRange As Integer Public HasKey As Boolean Public HasFoundOnce As Boolean End Class diff --git a/th/mainFRM.resx b/th/mainFRM.resx index 1af7de1..d0d99f4 100644 --- a/th/mainFRM.resx +++ b/th/mainFRM.resx @@ -117,4 +117,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + \ No newline at end of file diff --git a/th/mainFRM.vb b/th/mainFRM.vb index ceeb0d3..d163571 100644 --- a/th/mainFRM.vb +++ b/th/mainFRM.vb @@ -33,7 +33,22 @@ Namespace th Me.Weapons = New String(8 - 1) {} Me.C = New Single(6 - 1) {} Me.InitializeComponent() - Me.isFirstPress = True + End Sub + + ' Used to hard-disable or re-enable the game loop. + ' This is necessary when requesting input because the acquired keyboard object will throw when the input box pops up, causing the game to hang. + ' It will also prevent the game from treating keys in this box as game actions. + Private Sub disableGameLoop() + Timer1.Enabled = False + End Sub + + Private Sub enableGameLoop() + Timer1.Enabled = True + End Sub + + Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick + System.Diagnostics.Debug.WriteLine("timer: tick") + updateFrame() End Sub Private Sub waitForSpaceOrEnter() @@ -126,11 +141,11 @@ Namespace th Me.FinalDuelSound.SetVolume(Me.BackgroundSound.GetVolume) End If Interaction.SaveSetting(Addendums.AppTitle, "Config", "Vol", Conversions.ToString(Me.BackgroundSound.GetVolume)) - Me.V = CShort(Me.BackgroundSound.GetVolume) + Me.V = (Me.BackgroundSound.GetVolume) End Sub Private Function canTakeStep() As Boolean - If DXInput.isFirstPress(SharpDX.DirectInput.Key.Up) Or DXInput.isFirstPress(SharpDX.DirectInput.Key.Down) Or DXInput.isFirstPress(SharpDX.DirectInput.Key.Left) Or DXInput.isFirstPress(SharpDX.DirectInput.Key.Right) Then + If Not movedInLastTick Then Return True End If If Not (Footstep1Sound.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING Or Footstep2Sound.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING Or WallCrashSound.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING) Then @@ -139,7 +154,18 @@ Namespace th Return False End Function - Public Sub AllThingReplace(ByRef X As Short, ByRef Y As Short, ByRef Thing As Short) + Private Function canSwim(flagToCheck As Boolean) As Boolean + ' If flagToCheck is false, this command has been issued for the first time and we can go ahead and execute it. + If Not flagToCheck Then + Return True + End If + If Not SwimSound.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING And Not WallCrashSound.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING Then + Return True + End If + Return False + End Function + + Public Sub AllThingReplace(ByRef X As Integer, ByRef Y As Integer, ByRef Thing As Integer) Me.ThingReplace(X, Y, Thing) Me.BThingReplace(X, Y, Thing) End Sub @@ -147,14 +173,15 @@ Namespace th Private Sub Bomb() If (Me.bombs > 0) Then If Not Me.UnlimitedBullets Then - Me.bombs = CShort((Me.bombs - 1)) + Me.bombs = ((Me.bombs - 1)) End If Me.DisNeedle = 1 + needleTracker = 0 Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = False Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 + Dim x As Integer = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(Me.NeedleLaunchSound, bCloseFirst, bLoopSound, performEffects, x, y, dVolume, waitTillDone) @@ -163,14 +190,14 @@ Namespace th End If End Sub - Public Sub BThingReplace(ByRef X As Short, ByRef Y As Short, ByRef Thing As Short) + Public Sub BThingReplace(ByRef X As Integer, ByRef Y As Integer, ByRef Thing As Integer) Me.BGrid(X, Y) = Thing End Sub Private Sub BuildWalls() - Dim num As Short - Dim num2 As Short - Dim x As Short = Me.x + Dim num As Integer + Dim num2 As Integer + Dim x As Integer = Me.x num = 1 Dim iTemp As Integer For iTemp = 131 To 399 @@ -180,33 +207,33 @@ Namespace th System.Diagnostics.Debug.WriteLine("in buildwalls") Do While (num <= x) - Me.grid(num, 1) = Me.Wall - Me.grid(num, CInt(Math.Round(Conversion.Int(CDbl((CDbl(Me.y) / 4)))))) = 0 - Me.grid(num, CInt(Math.Round(CDbl((Conversion.Int(CDbl((CDbl(Me.y) / 4))) + 1))))) = Me.Wall - Application.DoEvents - num = CShort((num + 1)) + Me.Grid(num, 1) = Me.Wall + Me.Grid(num, CInt(Math.Round(Conversion.Int(CDbl((CDbl(Me.y) / 4)))))) = 0 + Me.Grid(num, CInt(Math.Round(CDbl((Conversion.Int(CDbl((CDbl(Me.y) / 4))) + 1))))) = Me.Wall + Application.DoEvents() + num = ((num + 1)) Loop - Dim num4 As Short = Me.x + Dim num4 As Integer = Me.x num = 1 Do While (num <= num4) System.Diagnostics.Debug.WriteLine("Integer second loop") Me.Grid(num, Me.y) = Me.Wall Application.DoEvents() - num = CShort((num + 1)) + num = ((num + 1)) Loop num = 1 Do - Me.grid(num, &H69) = Me.Wall - Application.DoEvents - num = CShort((num + 1)) + Me.Grid(num, &H69) = Me.Wall + Application.DoEvents() + num = ((num + 1)) Loop While (num <= 50) System.Diagnostics.Debug.WriteLine("after third loop") - Me.grid(30, &H65) = Me.ClosedDoor - Me.grid(2, &H69) = Me.ClosedDoor - Me.grid(50, &H66) = Me.Wall - Me.grid(50, &H67) = Me.Wall - Me.grid(50, &H68) = Me.Wall - Me.grid(&H2F, &H69) = Me.ClosedDoor + Me.Grid(30, &H65) = Me.ClosedDoor + Me.Grid(2, &H69) = Me.ClosedDoor + Me.Grid(50, &H66) = Me.Wall + Me.Grid(50, &H67) = Me.Wall + Me.Grid(50, &H68) = Me.Wall + Me.Grid(&H2F, &H69) = Me.ClosedDoor num = &H69 Do While True System.Diagnostics.Debug.WriteLine("Planting wall at 5," & num) @@ -215,11 +242,11 @@ Namespace th num2 = 1 Do Me.Grid(num2, num) = Me.Wall - num2 = CShort((num2 + 1)) + num2 = ((num2 + 1)) Loop While (num2 <= 5) End If Application.DoEvents() - num = CShort((num + 1)) + num = ((num + 1)) If (num > 180) Then Me.Grid(5, &H86) = Me.ClosedDoor Me.Grid(5, &HB2) = Me.ClosedDoor @@ -228,7 +255,7 @@ Namespace th Me.Grid(num, &HB0) = Me.Wall Me.Grid(num, 180) = Me.Wall Application.DoEvents() - num = CShort((num + 1)) + num = ((num + 1)) Loop While (num <= &H2D) System.Diagnostics.Debug.WriteLine("After 180 loop") num = &H69 @@ -237,14 +264,14 @@ Namespace th Loop Label_0269: System.Diagnostics.Debug.WriteLine("label Label_0269") - Me.grid(&H2D, num) = Me.Wall - Me.grid(&H30, num) = Me.Wall + Me.Grid(&H2D, num) = Me.Wall + Me.Grid(&H30, num) = Me.Wall If (num = 180) Then - Me.grid(&H2E, num) = Me.Wall - Me.grid(&H2F, num) = Me.Wall + Me.Grid(&H2E, num) = Me.Wall + Me.Grid(&H2F, num) = Me.Wall End If - Application.DoEvents - num = CShort((num + 1)) + Application.DoEvents() + num = ((num + 1)) If (num > 180) Then System.Diagnostics.Debug.WriteLine("num > 180") Me.Grid(&H2D, &H86) = Me.ClosedDoor @@ -255,20 +282,20 @@ Label_0269: Me.Grid(num, &H83) = Me.Wall Me.Grid(num, &H87) = Me.Wall Application.DoEvents() - num = CShort((num + 1)) + num = ((num + 1)) Loop While (num <= &H2D) num = &H87 Do Me.Grid(20, num) = Me.Wall Me.Grid(&H18, num) = Me.Wall Application.DoEvents() - num = CShort((num + 1)) + num = ((num + 1)) Loop While (num <= &HB0) num = &H15 Do Me.Grid(num, &HB0) = Me.PassageMarker Me.Grid(num, &H87) = Me.PassageMarker - num = CShort((num + 1)) + num = ((num + 1)) Loop While (num <= &H17) num = &H31 System.Diagnostics.Debug.WriteLine("Done num > 180 at label Label_0269") @@ -278,17 +305,17 @@ Label_0269: End If Label_03DE: System.Diagnostics.Debug.WriteLine("Label_03DE") - Me.grid(num, &H80) = Me.Wall - Me.grid(num, &H84) = Me.Wall + Me.Grid(num, &H80) = Me.Wall + Me.Grid(num, &H84) = Me.Wall If (num = 130) Then num2 = &H80 Do - Me.grid(num, num2) = Me.Wall - num2 = CShort((num2 + 1)) + Me.Grid(num, num2) = Me.Wall + num2 = ((num2 + 1)) Loop While (num2 <= &H84) End If - Application.DoEvents - num = CShort((num + 1)) + Application.DoEvents() + num = ((num + 1)) If (num > 130) Then System.Diagnostics.Debug.WriteLine("num > 130") num = &H84 @@ -300,238 +327,238 @@ Label_03DE: If (num = &H84) Then num2 = &H7F Do - Me.grid(num2, num) = Me.PassageMarker - num2 = CShort((num2 + 1)) + Me.Grid(num2, num) = Me.PassageMarker + num2 = ((num2 + 1)) Loop While (num2 <= &H81) End If - Me.grid(&H7E, num) = Me.Wall - Me.grid(130, num) = Me.Wall + Me.Grid(&H7E, num) = Me.Wall + Me.Grid(130, num) = Me.Wall If (num = &HAC) Then num2 = &H7E Do - Me.grid(num2, num) = Me.Wall - num2 = CShort((num2 + 1)) + Me.Grid(num2, num) = Me.Wall + num2 = ((num2 + 1)) Loop While (num2 <= 130) End If - Application.DoEvents - num = CShort((num + 1)) + Application.DoEvents() + num = ((num + 1)) System.Diagnostics.Debug.WriteLine("Made it to If (num > &HAC) Then, with num = " & num) If (num > &HAC) Then Me.Grid(130, 170) = Me.ClosedDoor num = 130 Me.Grid(130, (num - 1)) = Me.Wall - Me.grid(&H83, (num - 1)) = Me.Wall - Me.grid(&H84, (num - 1)) = Me.Wall - Me.grid(130, num) = Me.ClosedDoor + Me.Grid(&H83, (num - 1)) = Me.Wall + Me.Grid(&H84, (num - 1)) = Me.Wall + Me.Grid(130, num) = Me.ClosedDoor Exit Do End If Loop System.Diagnostics.Debug.WriteLine("After outer loop") Label_05FF: - Me.grid(num, &HA8) = Me.Wall - Me.grid(num, &HAC) = Me.Wall + Me.Grid(num, &HA8) = Me.Wall + Me.Grid(num, &HAC) = Me.Wall If (num = 190) Then num2 = &HA9 Do - Me.grid(num, num2) = Me.Wall - num2 = CShort((num2 + 1)) + Me.Grid(num, num2) = Me.Wall + num2 = ((num2 + 1)) Loop While (num2 <= &HAB) End If - Application.DoEvents - num = CShort((num + 1)) + Application.DoEvents() + num = ((num + 1)) If (num > 190) Then - Me.grid(&H84, &HA9) = Me.PassageMarker - Me.grid(&H84, 170) = Me.PassageMarker - Me.grid(&H84, &HAB) = Me.PassageMarker - Me.grid(&H83, &HAC) = Me.PassageMarker - Me.grid(&H83, &HA8) = Me.PassageMarker + Me.Grid(&H84, &HA9) = Me.PassageMarker + Me.Grid(&H84, 170) = Me.PassageMarker + Me.Grid(&H84, &HAB) = Me.PassageMarker + Me.Grid(&H83, &HAC) = Me.PassageMarker + Me.Grid(&H83, &HA8) = Me.PassageMarker num = 130 Else - goto Label_05FF + GoTo Label_05FF End If - Label_074E: +Label_074E: If (num <> &H83) Then - Me.grid(num, 180) = Me.Wall + Me.Grid(num, 180) = Me.Wall End If - Me.grid(num, &HB6) = Me.Wall + Me.Grid(num, &HB6) = Me.Wall Select Case num Case 130 - Me.grid(num, &HB5) = Me.Wall + Me.Grid(num, &HB5) = Me.Wall Exit Select Case 200 - Me.grid(num, &HB5) = Me.Wall + Me.Grid(num, &HB5) = Me.Wall Exit Select End Select - Application.DoEvents - num = CShort((num + 1)) + Application.DoEvents() + num = ((num + 1)) If (num > 200) Then - Me.grid(170, &HB6) = Me.ClosedDoor + Me.Grid(170, &HB6) = Me.ClosedDoor num = &HB6 Else - goto Label_074E + GoTo Label_074E End If - Label_07AB: - Me.grid(&HA9, num) = Me.Wall - Me.grid(&HAB, num) = Me.Wall +Label_07AB: + Me.Grid(&HA9, num) = Me.Wall + Me.Grid(&HAB, num) = Me.Wall If (num = 230) Then - Me.grid(170, num) = Me.Wall + Me.Grid(170, num) = Me.Wall End If - Application.DoEvents - num = CShort((num + 1)) + Application.DoEvents() + num = ((num + 1)) If (num > 230) Then - Me.grid(&HAB, 200) = Me.ClosedDoor + Me.Grid(&HAB, 200) = Me.ClosedDoor num = &HAB Else - goto Label_07AB + GoTo Label_07AB End If - Label_0833: - Me.grid(num, &HC7) = Me.Wall - Me.grid(num, &HC9) = Me.Wall +Label_0833: + Me.Grid(num, &HC7) = Me.Wall + Me.Grid(num, &HC9) = Me.Wall If (num = 220) Then - Me.grid(num, 200) = Me.Wall + Me.Grid(num, 200) = Me.Wall End If - Application.DoEvents - num = CShort((num + 1)) + Application.DoEvents() + num = ((num + 1)) If (num > 220) Then - Me.grid(&HD7, &HC7) = Me.ClosedDoor + Me.Grid(&HD7, &HC7) = Me.ClosedDoor num = &HA8 Else - goto Label_0833 + GoTo Label_0833 End If - Label_08D2: - Me.grid(&HD6, num) = Me.Wall - Me.grid(&HD9, num) = Me.Wall +Label_08D2: + Me.Grid(&HD6, num) = Me.Wall + Me.Grid(&HD9, num) = Me.Wall If (num = &HA8) Then - Me.grid(&HD7, num) = Me.Wall - Me.grid(&HD8, num) = Me.Wall + Me.Grid(&HD7, num) = Me.Wall + Me.Grid(&HD8, num) = Me.Wall End If - Application.DoEvents - num = CShort((num + 1)) + Application.DoEvents() + num = ((num + 1)) If (num > &HC7) Then - Me.grid(&HD6, 170) = Me.ClosedDoor + Me.Grid(&HD6, 170) = Me.ClosedDoor num = 190 Do - Me.grid(num, &HA8) = Me.Wall - Me.grid(num, &HAC) = Me.Wall - Application.DoEvents - num = CShort((num + 1)) + Me.Grid(num, &HA8) = Me.Wall + Me.Grid(num, &HAC) = Me.Wall + Application.DoEvents() + num = ((num + 1)) Loop While (num <= &HD6) - Me.grid(190, 170) = Me.ClosedDoor - Me.grid(&HD9, 170) = Me.ClosedDoor + Me.Grid(190, 170) = Me.ClosedDoor + Me.Grid(&HD9, 170) = Me.ClosedDoor num = &HD9 Else - goto Label_08D2 + GoTo Label_08D2 End If - Label_0A07: - Me.grid(num, &HA8) = Me.Wall - Me.grid(num, &HAC) = Me.Wall +Label_0A07: + Me.Grid(num, &HA8) = Me.Wall + Me.Grid(num, &HAC) = Me.Wall If (num = 300) Then - Me.grid(num, &HA9) = Me.Wall - Me.grid(num, 170) = Me.Wall - Me.grid(num, &HAB) = Me.Wall + Me.Grid(num, &HA9) = Me.Wall + Me.Grid(num, 170) = Me.Wall + Me.Grid(num, &HAB) = Me.Wall End If - Application.DoEvents - num = CShort((num + 1)) + Application.DoEvents() + num = ((num + 1)) If (num > 300) Then - Me.grid(&H83, 180) = Me.ClosedDoor - Me.grid(230, &HAC) = Me.LockedDoor + Me.Grid(&H83, 180) = Me.ClosedDoor + Me.Grid(230, &HAC) = Me.LockedDoor num = &HAC Else - goto Label_0A07 + GoTo Label_0A07 End If - Label_0ABF: - Me.grid(220, num) = Me.Wall - Me.grid(270, num) = Me.Wall +Label_0ABF: + Me.Grid(220, num) = Me.Wall + Me.Grid(270, num) = Me.Wall If (num = 230) Then num2 = 220 Do - Me.grid(num2, num) = Me.Wall - num2 = CShort((num2 + 1)) + Me.Grid(num2, num) = Me.Wall + num2 = ((num2 + 1)) Loop While (num2 <= 270) End If - Application.DoEvents - num = CShort((num + 1)) + Application.DoEvents() + num = ((num + 1)) If (num > 230) Then - Me.grid(&HDD, &HAD) = Me.Reflector - Me.grid(&H10D, &HAD) = Me.Missile - Me.grid(&HDD, &HE5) = Me.Laser - Me.grid(&H10D, &HE5) = Me.controler - Me.grid(170, 230) = Me.ClosedDoor + Me.Grid(&HDD, &HAD) = Me.Reflector + Me.Grid(&H10D, &HAD) = Me.Missile + Me.Grid(&HDD, &HE5) = Me.Laser + Me.Grid(&H10D, &HE5) = Me.controler + Me.Grid(170, 230) = Me.ClosedDoor num = 230 Else - goto Label_0ABF + GoTo Label_0ABF End If - Label_0BB3: - Me.grid(&HA9, num) = Me.Wall - Me.grid(&HAB, num) = Me.Wall +Label_0BB3: + Me.Grid(&HA9, num) = Me.Wall + Me.Grid(&HAB, num) = Me.Wall If (num = 330) Then - Me.grid(170, num) = Me.Wall + Me.Grid(170, num) = Me.Wall End If - Application.DoEvents - num = CShort((num + 1)) + Application.DoEvents() + num = ((num + 1)) If (num > 330) Then - Me.grid(&HAB, 300) = Me.ClosedDoor + Me.Grid(&HAB, 300) = Me.ClosedDoor num = &HAB Else - goto Label_0BB3 + GoTo Label_0BB3 End If - Label_0C6C: - Me.grid(num, &H12A) = Me.Wall - Me.grid(num, &H12E) = Me.Wall +Label_0C6C: + Me.Grid(num, &H12A) = Me.Wall + Me.Grid(num, &H12E) = Me.Wall If (num = 400) Then - Me.grid(num, &H12B) = Me.Wall - Me.grid(num, 300) = Me.Wall - Me.grid(num, &H12D) = Me.Wall + Me.Grid(num, &H12B) = Me.Wall + Me.Grid(num, 300) = Me.Wall + Me.Grid(num, &H12D) = Me.Wall End If - Application.DoEvents - num = CShort((num + 1)) + Application.DoEvents() + num = ((num + 1)) If (num > 400) Then - Me.grid(&HAB, 320) = Me.ClosedDoor + Me.Grid(&HAB, 320) = Me.ClosedDoor num = &HAB Else - goto Label_0C6C + GoTo Label_0C6C End If - Label_0CFA: - Me.grid(num, &H13F) = Me.Wall - Me.grid(num, &H141) = Me.Wall +Label_0CFA: + Me.Grid(num, &H13F) = Me.Wall + Me.Grid(num, &H141) = Me.Wall If (num = 400) Then - Me.grid(num, 320) = Me.Wall + Me.Grid(num, 320) = Me.Wall End If - Application.DoEvents - num = CShort((num + 1)) + Application.DoEvents() + num = ((num + 1)) If (num > 400) Then - Me.grid(330, &H141) = Me.LockedDoor + Me.Grid(330, &H141) = Me.LockedDoor num = &H141 Do - Me.grid(310, num) = Me.Wall - Application.DoEvents - num = CShort((num + 1)) + Me.Grid(310, num) = Me.Wall + Application.DoEvents() + num = ((num + 1)) Loop While (num <= 400) num = 180 Do - Me.grid(&H2A, num) = Me.Wall - Me.grid(&H30, num) = Me.Wall - Application.DoEvents - num = CShort((num + 1)) + Me.Grid(&H2A, num) = Me.Wall + Me.Grid(&H30, num) = Me.Wall + Application.DoEvents() + num = ((num + 1)) Loop While (num <= 190) num = &H2A Do - Me.grid(num, 180) = Me.Wall - Me.grid(num, 190) = Me.Wall - Application.DoEvents - num = CShort((num + 1)) + Me.Grid(num, 180) = Me.Wall + Me.Grid(num, 190) = Me.Wall + Application.DoEvents() + num = ((num + 1)) Loop While (num <= &H30) - Me.grid(&H2E, 180) = Me.LockedDoor - Dim y As Short = Me.y + Me.Grid(&H2E, 180) = Me.LockedDoor + Dim y As Integer = Me.y num = 1 Do While (num <= y) - Me.grid(1, num) = Me.Wall - Me.grid(Me.x, num) = Me.Wall - Application.DoEvents - num = CShort((num + 1)) + Me.Grid(1, num) = Me.Wall + Me.Grid(Me.x, num) = Me.Wall + Application.DoEvents() + num = ((num + 1)) Loop Else - goto Label_0CFA + GoTo Label_0CFA End If End Sub @@ -539,73 +566,78 @@ Label_05FF: If keyDownDisabled() Then Exit Sub End If - If (Me.Weapons(Me.WPos) <> "control") Then - Me.NStop = False - Dim nWait As Boolean = False - Me.NLS((DXSound.string_0 & "\nbuyamunition1.wav"), nWait) - Dim inputStr As String = Interaction.InputBox("Amount:", "Buy Amunition", "", -1, -1) - If (inputStr = "") Then - Me.NStop = True - Else - Dim num2 As Long - Dim num As Short = CShort(Math.Round(Conversion.Val(inputStr))) - If ((num * 5) > Me.Points) Then - nWait = True - Me.NLS((DXSound.string_0 & "\nbuyamunition2.wav"), nWait) - If Me.NStop Then - Return - End If - num2 = num - Me.VoiceNumber(num2) - num = CShort(num2) - Me.NumWait() - - If Me.NStop Then - Return - End If - nWait = False - Me.NLS((DXSound.string_0 & "\nbuyamunition3.wav"), nWait) + Try + If (Me.Weapons(Me.WPos) <> "control") Then + disableGameLoop() + Me.NStop = False + Dim nWait As Boolean = False + Me.NLS((DXSound.string_0 & "\nbuyamunition1.wav"), nWait) + Dim inputStr As String = Interaction.InputBox("Amount:", "Buy Amunition", "", -1, -1) + If (inputStr = "") Then + Me.NStop = True Else - Me.Points = (Me.Points - (num * 5)) - Select Case Strings.LCase(Me.Weapons(Me.WPos)) - Case "gun" - Me.Bullets = CShort((Me.Bullets + (num * 10))) - Exit Select - Case "sword" - Me.Swrd = CShort((Me.Swrd + num)) - Exit Select - Case "bombs" - Me.bombs = CShort((Me.bombs + num)) - Exit Select - Case "laser" - Me.ALaser = CShort((Me.ALaser + num)) - Exit Select - Case "gmissile" - Me.short_2 = CShort((Me.short_2 + num)) - Exit Select - Case "reflector" - Me.short_3 = CShort((Me.short_3 + num)) - Exit Select - End Select - nWait = True - Me.NLS((DXSound.string_0 & "\nbuyamunition4.wav"), nWait) - If Me.NStop Then - Return - End If - num2 = num - Me.VoiceNumber(num2) - num = CShort(num2) - Me.NumWait() + Dim num2 As Long + Dim num As Integer = (Math.Round(Conversion.Val(inputStr))) + If ((num * 5) > Me.Points) Then + nWait = True + Me.NLS((DXSound.string_0 & "\nbuyamunition2.wav"), nWait) + If Me.NStop Then + Return + End If + num2 = num + Me.VoiceNumber(num2) + num = (num2) + Me.NumWait() - If Me.NStop Then - Return + If Me.NStop Then + Return + End If + nWait = False + Me.NLS((DXSound.string_0 & "\nbuyamunition3.wav"), nWait) + Else + Me.Points = (Me.Points - (num * 5)) + Select Case Strings.LCase(Me.Weapons(Me.WPos)) + Case "gun" + Me.Bullets = ((Me.Bullets + (num * 10))) + Exit Select + Case "sword" + Me.Swrd = ((Me.Swrd + num)) + Exit Select + Case "bombs" + Me.bombs = ((Me.bombs + num)) + Exit Select + Case "laser" + Me.ALaser = ((Me.ALaser + num)) + Exit Select + Case "gmissile" + Me.short_2 = ((Me.short_2 + num)) + Exit Select + Case "reflector" + Me.short_3 = ((Me.short_3 + num)) + Exit Select + End Select + nWait = True + Me.NLS((DXSound.string_0 & "\nbuyamunition4.wav"), nWait) + If Me.NStop Then + Return + End If + num2 = num + Me.VoiceNumber(num2) + num = (num2) + Me.NumWait() + + If Me.NStop Then + Return + End If + nWait = False + Me.NLS((DXSound.string_0 & "\nbuyamunition5.wav"), nWait) End If - nWait = False - Me.NLS((DXSound.string_0 & "\nbuyamunition5.wav"), nWait) + Me.NStop = True End If - Me.NStop = True End If - End If + Finally + enableGameLoop() + End Try End Sub Private Sub ChangeSpeechRate(a As SpeechRate) @@ -646,23 +678,25 @@ Label_05FF: Dim str As String Dim flag4 As Boolean If (Me.h < 1) Then + disableGameLoop() THConstVars.CannotDoKeydown = True - Me.MuteSounds + Me.MuteSounds() + If Not dPlayDie Then Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = False Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 + Dim x As Integer = 0 + Dim y As Integer = 0 str = "" flag4 = False DXSound.PlaySound(Me.CharDieSound, bCloseFirst, bLoopSound, performEffects, x, y, str, flag4) Do While (Me.CharDieSound.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING) - Application.DoEvents + Application.DoEvents() Loop If Me.IsFightingLast Then If ((Me.HasKilledBrutus And Me.HasKilledBrutus2) And Me.IsFightingLast) Then - Me.BombAlarmSound.Stop + Me.BombAlarmSound.Stop() flag4 = True performEffects = False bLoopSound = False @@ -672,7 +706,7 @@ Label_05FF: bCloseFirst = False DXSound.PlaySound(Me.directSoundSecondaryBuffer8_6, flag4, performEffects, bLoopSound, y, x, str, bCloseFirst) Do While (Me.directSoundSecondaryBuffer8_6.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING) - Application.DoEvents + Application.DoEvents() Loop ElseIf Me.IsFightingLast Then flag4 = True @@ -684,7 +718,7 @@ Label_05FF: bCloseFirst = False DXSound.PlaySound(Me.directSoundSecondaryBuffer8_7, flag4, performEffects, bLoopSound, y, x, str, bCloseFirst) Do While (Me.directSoundSecondaryBuffer8_7.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING) - Application.DoEvents + Application.DoEvents() Loop End If End If @@ -692,15 +726,16 @@ Label_05FF: flag4 = True DXSound.Radio(str, flag4) If Me.IsFightingLast Then - Me.FinalDuelSound.Stop + Me.FinalDuelSound.Stop() End If - Me.DuelSound.Stop + Me.DuelSound.Stop() End If If ((Me.HasKilledBrutus And Me.HasKilledBrutus2) And Me.IsFightingLast) Then - Me.BombAlarmSound.Stop - Me.TargetSound.Stop + Me.BombAlarmSound.Stop() + Me.TargetSound.Stop() + Do While (Me.BigBlastSound.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING) - Application.DoEvents + Application.DoEvents() Loop End If THConstVars.CannotDoKeydown = False @@ -721,8 +756,8 @@ Label_05FF: Dim flag3 As Boolean Dim flag4 As Boolean Dim flag5 As Boolean - Dim num2 As Short - Dim num3 As Short + Dim num2 As Integer + Dim num3 As Integer Dim str3 As String Dim flag6 As Boolean If Me.HasShutDownCard Then @@ -753,7 +788,7 @@ Label_05FF: Me.directSoundSecondaryBuffer8_7 = DXSound.LoadSound((DXSound.SoundPath & "\brutus4.wav")) Me.BigBlastSound = DXSound.LoadSound((DXSound.SoundPath & "\bigblast.wav")) Do While (Me.TeleportSound.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING) - Application.DoEvents + Application.DoEvents() Loop Me.px = 10 Me.py = 110 @@ -766,10 +801,10 @@ Label_05FF: flag3 = False DXSound.PlaySound(Me.BLastFightBeginSound, flag6, flag5, flag4, num3, num2, str3, flag3) Do While (Me.BLastFightBeginSound.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING) - Application.DoEvents + Application.DoEvents() Loop - Me.challs(1).TurnIntoMaster - Me.StartMusic + Me.challs(1).TurnIntoMaster() + Me.StartMusic() str3 = "r6.wav" flag6 = True DXSound.Radio(str3, flag6) @@ -792,7 +827,7 @@ Label_05FF: Me.NLS((DXSound.string_0 & "\npanel2.wav"), flag6) Dim str2 As String = Interaction.InputBox("You may begin typing into the panel. Press Escape if you wish not to enter any sequences into the panel.", "Control Panel Keypad", "", -1, -1) If (str2 = "") Then - Me.NNumber.Stop + Me.NNumber.Stop() Else flag = True If (Strings.LCase(str2) = Strings.LCase("kill all! die!")) Then @@ -810,7 +845,7 @@ Label_05FF: flag6 = True DXSound.Radio(str3, flag6) THConstVars.CannotDoKeydown = False - goto Label_02E2 + GoTo Label_02E2 End If flag6 = True flag5 = False @@ -823,7 +858,7 @@ Label_05FF: End If Return End If - Label_02E2: +Label_02E2: If DoCheats Then If (Me.IsFull And Me.WorkedPanel) Then Dim flag2 As Boolean @@ -831,7 +866,7 @@ Label_05FF: Me.NLS((DXSound.string_0 & "\npanel3.wav"), flag6) Dim str As String = Interaction.InputBox("Cheat:", "Enter Cheat", "", -1, -1) If (str = "") Then - Me.NNumber.Stop + Me.NNumber.Stop() Return End If flag = True @@ -857,7 +892,7 @@ Label_05FF: Exit Select Case "unlimit my health now!" Me.UnlimitedHealth = True - Me.h = CShort((Me.h + 200)) + Me.h = ((Me.h + 200)) flag2 = True Exit Select Case "unlimit my bullets now!" @@ -897,7 +932,7 @@ Label_05FF: DXSound.PlaySound(Me.AccessDeniedSound, flag6, flag5, flag4, num3, num2, str3, flag3) Return End If - Me.NNumber.Stop + Me.NNumber.Stop() flag6 = True flag5 = False flag4 = False @@ -918,7 +953,7 @@ Label_05FF: Return End If End If - If (flag AndAlso ((1! + Conversion.Int(CSng((2! * VBMath.Rnd)))) = 2!)) Then + If (flag AndAlso ((1.0! + Conversion.Int(CSng((2.0! * VBMath.Rnd)))) = 2.0!)) Then Me.TeleportsAreClosed = True flag6 = True flag5 = False @@ -930,25 +965,25 @@ Label_05FF: DXSound.PlaySound(Me.AlarmSound, flag6, flag5, flag4, num3, num2, str3, flag3) Me.DetectRange = 3 Me.HowMany = 15 - Dim num4 As Short = CShort(Information.UBound(Me.challs, 1)) - Dim i As Short = 1 + Dim num4 As Integer = (Information.UBound(Me.challs, 1)) + Dim i As Integer = 1 Do While (i <= num4) Me.GoFight(i) - i = CShort((i + 1)) + i = ((i + 1)) Loop Me.HowManyNum = 0 End If End Sub Private Sub CountdownMachine() - If (Me.ASubs(4) >= 10) Then - Me.ASubs(4) = 0 + If (machineTracker * frameTime >= 1000) Then + machineTracker = 0 If Me.IsWaitingForMachine Then Dim flag As Boolean Dim flag2 As Boolean Dim flag3 As Boolean - Dim num As Short - Dim num2 As Short + Dim num As Integer + Dim num2 As Integer Dim str As String Dim flag4 As Boolean If (Me.CMachine <= 0) Then @@ -961,13 +996,13 @@ Label_05FF: str = "" flag4 = False DXSound.PlaySound(Me.MachineTurnOffSound, flag, flag2, flag3, num, num2, str, flag4) - Me.MachineSound.Stop + Me.MachineSound.Stop() str = "r9.wav" flag4 = False DXSound.Radio(str, flag4) Me.IsWaitingForMachine = False Else - Me.CMachine = CShort((Me.CMachine - 1)) + Me.CMachine = ((Me.CMachine - 1)) flag4 = True flag3 = False flag2 = False @@ -979,24 +1014,24 @@ Label_05FF: End If End If Else - Me.ASubs(4) = CShort((Me.ASubs(4) + 1)) + machineTracker += 1 End If End Sub Private Sub DepthDecrease() If (Me.WDepth > 0) Then - Me.WDepth = CShort((Me.WDepth - 1)) + Me.WDepth = ((Me.WDepth - 1)) End If - If (Me.WDepth = 0) Then + If (Not IsResting And Me.WDepth = 0) Then Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = False Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 + Dim x As Integer = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(Me.BreathSound, bCloseFirst, bLoopSound, performEffects, x, y, dVolume, waitTillDone) - Me.WaterSound.Stop + Me.WaterSound.Stop() Me.IsResting = True Me.DidNotSwim = 0 End If @@ -1004,18 +1039,18 @@ Label_05FF: Private Sub DepthIncrease() Me.IsResting = False - If (Me.WDepth < 30) Then - Me.WDepth = CShort((Me.WDepth + 1)) + If (Me.WDepth < maxDepth) Then + Me.WDepth = ((Me.WDepth + 1)) End If If (Me.WDepth = 1) Then - Me.BreathSound.Stop - Dim z As Short = 0 + Me.BreathSound.Stop() + Dim z As Integer = 0 DXSound.smethod_1(Me.JumpInWaterSound, True, False, Me.px, Me.py, z) Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = True Dim performEffects As Boolean = False z = 0 - Dim y As Short = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(Me.WaterSound, bCloseFirst, bLoopSound, performEffects, z, y, dVolume, waitTillDone) @@ -1027,11 +1062,11 @@ Label_05FF: Dim flag As Boolean Dim flag2 As Boolean Dim flag3 As Boolean - Dim num As Short - Dim num2 As Short + Dim num As Integer + Dim num2 As Integer Dim str As String Dim flag4 As Boolean - If ((Me.grid(Me.px, Me.py) <> Me.Water) AndAlso Me.IsInWater) Then + If ((Me.Grid(Me.px, Me.py) <> Me.Water) AndAlso Me.IsInWater) Then Me.IsInWater = False Me.SubPX = 0 Me.SubPY = 0 @@ -1043,14 +1078,14 @@ Label_05FF: str = "" flag4 = False DXSound.PlaySound(Me.BreathSound, flag, flag2, flag3, num, num2, str, flag4) - Me.WaterSound.Stop + Me.WaterSound.Stop() Me.WDepth = 0 Me.DidNotSwim = 0 Me.IsResting = False Me.h = Me.WH Me.JustCameFromWater = True End If - Dim num4 As Short = CShort(Math.Round(Conversion.Val(Conversions.ToString(CInt(Me.grid(Me.px, Me.py)))))) + Dim num4 As Integer = (Math.Round(Conversion.Val(Conversions.ToString(CInt(Me.Grid(Me.px, Me.py)))))) If (num4 = Me.Treasure) Then If Me.HasKilledBrutus Then THConstVars.CannotDoKeydown = True @@ -1063,7 +1098,7 @@ Label_05FF: flag = False DXSound.PlaySound(Me.VaultUpSound, flag4, flag3, flag2, num2, num, str, flag) Do While (Me.VaultUpSound.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING) - Application.DoEvents + Application.DoEvents() Loop flag4 = True flag3 = False @@ -1094,7 +1129,7 @@ Label_05FF: Me.KillBrutusSound = DXSound.LoadSound((DXSound.SoundPath & "\brutusdietalk.wav")) Me.directSoundSecondaryBuffer8_7 = DXSound.LoadSound((DXSound.SoundPath & "\brutus4.wav")) Do While (Me.TeleportSound.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING) - Application.DoEvents + Application.DoEvents() Loop Me.px = 10 Me.py = 110 @@ -1107,7 +1142,7 @@ Label_05FF: flag = False DXSound.PlaySound(Me.LastFightBeginSound, flag4, flag3, flag2, num2, num, str, flag) Do While (Me.LastFightBeginSound.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING) - Application.DoEvents + Application.DoEvents() Loop flag4 = True flag3 = False @@ -1118,10 +1153,10 @@ Label_05FF: flag = False DXSound.PlaySound(Me.TalkToBrutusSound, flag4, flag3, flag2, num2, num, str, flag) Do While (Me.TalkToBrutusSound.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING) - Application.DoEvents + Application.DoEvents() Loop - Me.challs(1).TurnIntoMaster - Me.StartMusic + Me.challs(1).TurnIntoMaster() + Me.StartMusic() str = "r7.wav" flag4 = True DXSound.Radio(str, flag4) @@ -1162,18 +1197,18 @@ Label_05FF: Else Select Case num4 Case 1 - Me.snake - goto Label_0B5F + Me.snake() + Exit Sub Case 2 - Me.Sword - goto Label_0B5F + Me.Sword() + Exit Sub Case 3 - Me.Bullets = CShort((Me.Bullets + 10)) - Me.grid(Me.px, Me.py) = 0 - goto Label_0B5F + Me.Bullets = ((Me.Bullets + 10)) + Me.Grid(Me.px, Me.py) = 0 + Exit Sub Case 4 - Me.h = CShort((Me.h + 5)) - Me.grid(Me.px, Me.py) = 0 + Me.h = ((Me.h + 5)) + Me.Grid(Me.px, Me.py) = 0 flag4 = True flag3 = False flag2 = False @@ -1182,7 +1217,7 @@ Label_05FF: str = "" flag = False DXSound.PlaySound(Me.PickUpHealthSound, flag4, flag3, flag2, num2, num, str, flag) - goto Label_0B5F + Exit Sub Case 5 If Not Me.DisableTeleports Then If Not Me.TeleportsAreClosed Then @@ -1197,28 +1232,28 @@ Label_05FF: flag = False DXSound.PlaySound(Me.TeleportSound, flag4, flag3, flag2, num2, num, str, flag) Do While (Me.TeleportSound.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING) - Application.DoEvents + Application.DoEvents() Loop - Me.px = CShort(Math.Round(CDbl((1! + Conversion.Int(CSng((Me.x * VBMath.Rnd))))))) - Me.py = CShort(Math.Round(CDbl((1! + Conversion.Int(CSng((Me.y * VBMath.Rnd))))))) + Me.px = (Math.Round(CDbl((1.0! + Conversion.Int(CSng((Me.x * VBMath.Rnd))))))) + Me.py = (Math.Round(CDbl((1.0! + Conversion.Int(CSng((Me.y * VBMath.Rnd))))))) Do While Not flag5 If (((((Me.px > 1) And (Me.py > 1)) And (Me.px < (Me.x - 1))) And (Me.py < (Me.y - 1))) And (Me.py > Conversion.Int(CDbl((CDbl(Me.y) / 10))))) Then - If ((((Me.grid(Me.px, Me.py) <> Me.Wall) And (Me.grid(Me.px, Me.py) <> Me.Water)) And (Me.grid(Me.px, Me.py) <> Me.Mine)) And (Me.grid(Me.px, Me.py) <> Me.MineGuard)) Then + If ((((Me.Grid(Me.px, Me.py) <> Me.Wall) And (Me.Grid(Me.px, Me.py) <> Me.Water)) And (Me.Grid(Me.px, Me.py) <> Me.Mine)) And (Me.Grid(Me.px, Me.py) <> Me.MineGuard)) Then flag5 = True Else - Me.px = CShort(Math.Round(CDbl((1! + Conversion.Int(CSng((Me.x * VBMath.Rnd))))))) - Me.py = CShort(Math.Round(CDbl((1! + Conversion.Int(CSng((Me.y * VBMath.Rnd))))))) + Me.px = (Math.Round(CDbl((1.0! + Conversion.Int(CSng((Me.x * VBMath.Rnd))))))) + Me.py = (Math.Round(CDbl((1.0! + Conversion.Int(CSng((Me.y * VBMath.Rnd))))))) End If Else - Me.px = CShort(Math.Round(CDbl((1! + Conversion.Int(CSng((Me.x * VBMath.Rnd))))))) - Me.py = CShort(Math.Round(CDbl((1! + Conversion.Int(CSng((Me.y * VBMath.Rnd))))))) + Me.px = (Math.Round(CDbl((1.0! + Conversion.Int(CSng((Me.x * VBMath.Rnd))))))) + Me.py = (Math.Round(CDbl((1.0! + Conversion.Int(CSng((Me.y * VBMath.Rnd))))))) End If Loop THConstVars.CannotDoKeydown = False - Me.Determine + Me.Determine() ElseIf (Me.NumAlert = 0) Then Me.TeleportsAreClosed = False - Me.Determine + Me.Determine() Else flag4 = True flag3 = False @@ -1230,12 +1265,12 @@ Label_05FF: DXSound.PlaySound(Me.AccessDeniedSound, flag4, flag3, flag2, num2, num, str, flag) End If End If - goto Label_0B5F + Exit Sub End Select If (num4 = Me.Key) Then If Me.WorkedPanel Then Me.HasKey = True - Me.grid(Me.px, Me.py) = 0 + Me.Grid(Me.px, Me.py) = 0 flag4 = True flag3 = False flag2 = False @@ -1257,12 +1292,12 @@ Label_05FF: flag = False DXSound.PlaySound(Me.DisChestSound, flag4, flag3, flag2, num2, num, str, flag) Me.HowMany = 15 - Dim num5 As Short = CShort(Information.UBound(Me.challs, 1)) - Dim i As Short = 1 + Dim num5 As Integer = (Information.UBound(Me.challs, 1)) + Dim i As Integer = 1 Do While (i <= num5) Me.GoFight(i) - Application.DoEvents - i = CShort((i + 1)) + Application.DoEvents() + i = ((i + 1)) Loop Me.HowManyNum = 0 End If @@ -1273,12 +1308,12 @@ Label_05FF: num2 = 10 num = 0 Me.ReflectHit(num2, num) - Me.grid(Me.px, Me.py) = Me.BGrid(Me.px, Me.py) + Me.Grid(Me.px, Me.py) = Me.BGrid(Me.px, Me.py) ElseIf (num4 = Me.Water) Then If Not Me.IsFightingLast Then If Not Me.IsInWater Then Me.IsInWater = True - Me.BreathSound.Stop + Me.BreathSound.Stop() num2 = 0 DXSound.smethod_1(Me.JumpInWaterSound, True, False, Me.px, Me.py, num2) flag4 = True @@ -1376,11 +1411,8 @@ Label_05FF: DXSound.smethod_1(Me.GExplodeSound, True, False, Me.px, Me.py, num2) End If End If - Label_0B5F: - flag4 = False - Me.CharDied(flag4) If Not Me.IsChall(Me.px, Me.py) Then - Me.BGrid(Me.px, Me.py) = Me.grid(Me.px, Me.py) + Me.BGrid(Me.px, Me.py) = Me.Grid(Me.px, Me.py) End If End Sub @@ -1408,15 +1440,15 @@ Label_05FF: End Sub Private Sub DoIfEscapingFromBomb() - If (Me.ASubs(5) >= 10) Then - Me.ASubs(5) = 0 + If (bombTracker * frameTime >= 1000) Then + bombTracker = 0 If Me.IsEscapingFromBomb Then - Me.EBomb = CShort((Me.EBomb - 1)) + Me.EBomb = ((Me.EBomb - 1)) Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = False Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 + Dim x As Integer = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(Me.BombBeepSound, bCloseFirst, bLoopSound, performEffects, x, y, dVolume, waitTillDone) @@ -1441,169 +1473,43 @@ Label_05FF: DXSound.PlaySound(Me.BigBlastSound, waitTillDone, performEffects, bLoopSound, y, x, dVolume, bCloseFirst) Me.MuteSounds() Me.h = 0 - waitTillDone = True - Me.CharDied(waitTillDone) End If End If Else - Me.ASubs(5) = CShort((Me.ASubs(5) + 1)) + bombTracker += 1 End If End Sub Private Sub DoIfInWater() - If (Me.ASubs(1) >= 10) Then - Me.ASubs(1) = 0 - If Me.IsInWater Then + If IsInWater Then + If waterTracker * frameTime >= 1000 Then + waterTracker = 0 If Not Me.IsResting Then - Me.DidNotSwim = CShort((Me.DidNotSwim + 1)) + Me.DidNotSwim = ((Me.DidNotSwim + 1)) If (Me.DidNotSwim >= 2) Then Me.DepthIncrease() End If - End If - If Not Me.IsResting Then - Dim num As Short - If (Me.WDepth <= &H19) Then - num = 10 - Me.SubHealth(num) + If (Me.WDepth < 10) Then + Me.SubHealth(10) Else - num = 20 - Me.SubHealth(num) + Me.SubHealth(20) End If - ElseIf (Me.h < Me.WH) Then - Me.h = CShort((Me.h + 3)) - Else - Me.h = Me.WH + ElseIf (Me.h < Me.WH) Then ' If resting + Me.h = ((Me.h + 3)) End If - Dim dPlayDie As Boolean = False - Me.CharDied(dPlayDie) + Else ' if waterTracker < tick + waterTracker += 1 End If - Else - Me.ASubs(1) = CShort((Me.ASubs(1) + 1)) End If End Sub Private Sub EMove_Tick() - Dim num5 As Integer - Try - Dim num6 As Integer -Label_0001: - ProjectData.ClearProjectError() - Dim num4 As Integer = 2 -Label_0009: - num6 = 2 - If (Me.CA <> 1) Then - GoTo Label_0047 - End If -Label_0015: - num6 = 3 - Dim bCloseFirst As Boolean = True - Dim bLoopSound As Boolean = False - Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 - Dim dVolume As String = "" - Dim waitTillDone As Boolean = False - DXSound.PlaySound(Me.directSoundSecondaryBuffer8_2, bCloseFirst, bLoopSound, performEffects, x, y, dVolume, waitTillDone) -Label_0047: - num6 = 5 - If Me.IsInPauseState Then - GoTo Label_01A9 - End If -Label_0057: - num6 = 8 - If Not Me.NStop Then - GoTo Label_01A9 - End If -Label_0067: - num6 = 11 - If ((THConstVars.CannotDoKeydown And Not Me.IsLaunchingControl) And Not Me.IsLaunchingNeedle) Then - GoTo Label_01A9 - End If -Label_008B: - num6 = 14 - Dim index As Short = 1 - GoTo Label_00B6 -Label_0093: - num6 = &H11 - Me.challs(index).Activate() -Label_00A4: - num6 = &H12 - index = CShort((index + 1)) -Label_00AD: - num6 = &H13 - Application.DoEvents() -Label_00B6: - num6 = &H10 - If (index <= Me.ChallAmount) Then - GoTo Label_0093 - End If - GoTo Label_01A9 -Label_00C8: - num5 = 0 - Select Case (num5 + 1) - Case 1 - GoTo Label_0001 - Case 2 - GoTo Label_0009 - Case 3 - GoTo Label_0015 - Case 4, 5 - GoTo Label_0047 - Case 6, 9, 12, &H15, &H18 - GoTo Label_01A9 - Case 7, 8 - GoTo Label_0057 - Case 10, 11 - GoTo Label_0067 - Case 13, 14 - GoTo Label_008B - Case 15, &H10, 20 - GoTo Label_00B6 - Case &H11 - GoTo Label_0093 - Case &H12 - GoTo Label_00A4 - Case &H13 - GoTo Label_00AD - Case &H16 - GoTo Label_0149 - Case &H17 - Exit Select - Case Else - GoTo Label_019E - End Select -Label_013A: - num6 = &H17 - ProjectData.ClearProjectError() - - If (num5 <> 0) Then - GoTo Label_00C8 - End If - Throw ProjectData.CreateProjectError(-2146828268) -Label_0149: - num6 = &H16 - THConstVars.HandleError() - GoTo Label_013A -Label_0163: - num5 = num6 - Select Case num4 - Case 0 - GoTo Label_019E - Case 1 - GoTo Label_00C8 - Case 2 - GoTo Label_0149 - End Select - Catch obj1 As Exception - ProjectData.SetProjectError(DirectCast(obj1, Exception)) - GoTo Label_0163 - End Try -Label_019E: - Throw ProjectData.CreateProjectError(-2146828237) -Label_01A9: - If (num5 <> 0) Then - ProjectData.ClearProjectError() + If Not HasDoneInit Then + Exit Sub End If + For i As Integer = 1 To Me.ChallAmount + Me.challs(i).Activate() + Next i End Sub Private Sub EnableInFull() @@ -1614,8 +1520,8 @@ Label_01A9: Private Sub EndControl() If Me.IsControling Then Dim wControl As Integer - If (Me.ASubs(7) >= 10) Then - Me.ASubs(7) = 0 + If (controlTracker * frameTime >= 1000) Then + controlTracker = 0 If ((Me.SControl >= 60) Or (Me.challs(CInt(Me.WControl)).A <= 0)) Then Me.IsControling = False Me.SControl = 0 @@ -1624,22 +1530,22 @@ Label_01A9: Me.challs(CInt(Me.WControl)).A = 0 Else wControl = CInt(Me.WControl) - Me.challs(wControl).A = CShort((Me.challs(wControl).A - 5)) + Me.challs(wControl).A = ((Me.challs(wControl).A - 5)) End If Me.WControl = 0 Else - Me.SControl = CShort((Me.SControl + 1)) + Me.SControl = ((Me.SControl + 1)) End If Else wControl = 7 - Me.ASubs(7) = CShort((Me.ASubs(7) + 1)) + controlTracker += 1 End If End If End Sub Private Sub EndReflector() If Me.DoingReflector Then - If (Me.reflectorTime * Me.frameTime >= 30000) Then + If (Me.reflectorTime * frameTime >= 30000) Then Me.DoingReflector = False Me.ReflectorSound.Stop() Else @@ -1653,23 +1559,24 @@ Label_01A9: Me.NNumber.Stop() Dim nWait As Boolean = False Me.NLS((DXSound.string_0 & "\exiting1.wav"), nWait) - Dim num As Short = CShort(Interaction.MsgBox("Are you sure you want to exit Treasure Hunt?", (MsgBoxStyle.Question Or MsgBoxStyle.YesNo), "Question")) + Dim num As Integer = (Interaction.MsgBox("Are you sure you want to exit Treasure Hunt?", (MsgBoxStyle.Question Or MsgBoxStyle.YesNo), "Question")) If (num = 6) Then Me.ShutDown() End If End Sub Private Sub file_load_click() - Dim num20 As Integer Try + disableGameLoop() + System.Diagnostics.Debug.WriteLine("Entered load") + Dim num20 As Integer Dim flag As Boolean Dim flag2 As Boolean Dim flag3 As Boolean - Dim num2 As Short - Dim num3 As Short + Dim num2 As Integer + Dim num3 As Integer Dim str As String Dim flag4 As Boolean - ProjectData.ClearProjectError() Dim num As Integer = 2 Me.FileName = "" If (Not Me.IsFull Or Me.IsFightingLast) Then @@ -1684,12 +1591,15 @@ Label_01A9: Else Me.NNumber.Stop() flag4 = False + ' NStop = False Me.NLS((DXSound.string_0 & "\nloadgame1.wav"), flag4) - Me.FileName = Interaction.InputBox("Slot (1-3):", "Load Game", "", -1, -1) + System.Diagnostics.Debug.WriteLine("in load Passed nls") + Me.FileName = InputBox("Slot (1-3):", "Load Game", "", -1, -1) + System.Diagnostics.Debug.WriteLine("load: inputbox returned") If (Me.FileName <> "") Then If ((Conversion.Val(Me.FileName) > 0) And (Conversion.Val(Me.FileName) < 4)) Then - Dim num5 As Short - Dim num7 As Short + Dim num5 As Integer + Dim num7 As Integer FileSystem.FileOpen(1, (Addendums.FilePath & "\thsave" & Me.FileName & ".ths"), OpenMode.Input, OpenAccess.Default, OpenShare.Default, -1) Me.NNumber.Stop() flag4 = True @@ -1712,17 +1622,17 @@ Label_01A9: Do While (Me.directSoundSecondaryBuffer8_0.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING) Loop FileSystem.Input(1, Me.IsFirstTimeLoading) - Dim x As Short = Me.x + Dim x As Integer = Me.x num5 = 1 Do While (num5 <= x) - Dim y As Short = Me.y + Dim y As Integer = Me.y num7 = 1 Do While (num7 <= y) FileSystem.Input(1, Me.CGrid(num5, num7)) Application.DoEvents() - num7 = CShort((num7 + 1)) + num7 = ((num7 + 1)) Loop - num5 = CShort((num5 + 1)) + num5 = ((num5 + 1)) Loop FileSystem.Input(1, Me.IsControling) FileSystem.Input(1, Me.SControl) @@ -1790,22 +1700,22 @@ Label_01A9: FileSystem.Input(1, Me.HasKilledBrutus2) FileSystem.Input(1, Me.SGen) FileSystem.Input(1, THConstVars.Difficulty) - Dim num8 As Short = CShort(Information.UBound(Me.Weapons, 1)) + Dim num8 As Integer = (Information.UBound(Me.Weapons, 1)) num5 = 0 Do While (num5 <= num8) FileSystem.Input(1, Me.Weapons(num5)) - num5 = CShort((num5 + 1)) + num5 = ((num5 + 1)) Loop Me.challs = New chall((Me.ChallAmount + 1) - 1) {} - Dim challAmount As Short = Me.ChallAmount + Dim challAmount As Integer = Me.ChallAmount num5 = 1 Do While (num5 <= challAmount) - Dim num10 As Short + Dim num10 As Integer Dim flag5 As Boolean - Dim num11 As Short - Dim num12 As Short - Dim num13 As Short - Dim num14 As Short + Dim num11 As Integer + Dim num12 As Integer + Dim num13 As Integer + Dim num14 As Integer Dim flag6 As Boolean Dim flag7 As Boolean Dim flag8 As Boolean @@ -1833,36 +1743,36 @@ Label_01A9: Me.challs(num5).HasFoundOnce = flag9 Me.challs(num5).IsBeingControled = flag10 Me.challs(num5).IsPoisoned = flag11 - Me.challs(num5).NumOfNeedles = CShort(-(flag12 > False)) + Me.challs(num5).NumOfNeedles = (-(flag12 > False)) If flag7 Then Me.challs(num5).TurnIntoMaster() Me.challs(num5).A = num10 End If Application.DoEvents() - num5 = CShort((num5 + 1)) + num5 = ((num5 + 1)) Loop - Dim num15 As Short = Me.x + Dim num15 As Integer = Me.x num5 = 1 Do While (num5 <= num15) - Dim y As Short = Me.y + Dim y As Integer = Me.y num7 = 1 Do While (num7 <= y) FileSystem.Input(1, Me.Grid(num5, num7)) Application.DoEvents() - num7 = CShort((num7 + 1)) + num7 = ((num7 + 1)) Loop - num5 = CShort((num5 + 1)) + num5 = ((num5 + 1)) Loop - Dim num17 As Short = Me.x + Dim num17 As Integer = Me.x num5 = 1 Do While (num5 <= num17) - Dim y As Short = Me.y + Dim y As Integer = Me.y num7 = 1 Do While (num7 <= y) Me.BGrid(num5, num7) = Me.Grid(num5, num7) - num7 = CShort((num7 + 1)) + num7 = ((num7 + 1)) Loop - num5 = CShort((num5 + 1)) + num5 = ((num5 + 1)) Loop FileSystem.Reset() @@ -1901,160 +1811,131 @@ Label_01A9: Me.NNumber.Stop() End If End If - GoTo Label_0912 -Label_081E: Me.NStop = False Me.FileName = "" Me.NNumber.Stop() Me.ClickSound.Stop() + Finally FileSystem.Reset() - - Select Case Information.Err.Number - Case &H35 - flag4 = True - Me.NLS((DXSound.string_0 & "\nnottothatslot.wav"), flag4) - GoTo Label_0912 - Case 13 - flag4 = True - Me.NLS((DXSound.string_0 & "\ncompat.wav"), flag4) - GoTo Label_0912 - Case 6 - flag4 = True - Me.NLS((DXSound.string_0 & "\ncompat.wav"), flag4) - GoTo Label_0912 - Case Else - THConstVars.HandleError() - GoTo Label_0912 - End Select -Label_08CF: - num20 = -1 - Select Case num - Case 0, 1 - GoTo Label_0907 - Case 2 - GoTo Label_081E - End Select - Catch obj1 As Exception - ProjectData.SetProjectError(DirectCast(obj1, Exception)) - GoTo Label_08CF + enableGameLoop() End Try -Label_0907: - Throw ProjectData.CreateProjectError(-2146828237) -Label_0912: - If (num20 <> 0) Then - ProjectData.ClearProjectError() - End If End Sub Private Sub file_save_click() - Dim flag As Boolean - Dim flag2 As Boolean - Dim flag3 As Boolean - Dim num3 As Short - Dim num4 As Short - Dim str As String - Dim flag4 As Boolean - Me.FileName = "" - If (Not Me.IsFull Or Me.IsFightingLast) Then - flag = True - flag2 = False - flag3 = False - num3 = 0 - num4 = 0 - str = "" - flag4 = False - DXSound.PlaySound(Me.AccessDeniedSound, flag, flag2, flag3, num3, num4, str, flag4) - Else - Me.NNumber.Stop() - Me.NStop = False - flag4 = False - Me.NLS((DXSound.string_0 & "\nsavegame1.wav"), flag4) - Me.FileName = Interaction.InputBox("slot (1-3):", "Save Game", "", -1, -1) - If (Me.FileName <> "") Then - If ((Conversion.Val(Me.FileName) > 0) And (Conversion.Val(Me.FileName) < 4)) Then - Dim num As Short - Dim num2 As Short - FileSystem.FileOpen(1, (Addendums.FilePath & "\thsave" & Me.FileName & ".ths"), OpenMode.Output, OpenAccess.Default, OpenShare.Default, -1) - Me.NNumber.Stop() - flag4 = False - Me.NLS((DXSound.string_0 & "\nsavegame2.wav"), flag4) - flag4 = True - flag3 = True - flag2 = False - num4 = 0 - num3 = 0 - str = "" - flag = False - DXSound.PlaySound(Me.ClickSound, flag4, flag3, flag2, num4, num3, str, flag) - THConstVars.CannotDoKeydown = True - FileSystem.WriteLine(1, New Object() {Me.IsFirstTimeLoading}) - Dim x As Short = Me.x - num = 1 - Do While (num <= x) - Dim y As Short = Me.y - num2 = 1 - Do While (num2 <= y) - FileSystem.WriteLine(1, New Object() {Me.CGrid(num, num2)}) - Application.DoEvents() - num2 = CShort((num2 + 1)) + Try + disableGameLoop() + Dim flag As Boolean + Dim flag2 As Boolean + Dim flag3 As Boolean + Dim num3 As Integer + Dim num4 As Integer + Dim str As String + Dim flag4 As Boolean + Me.FileName = "" + If (Not Me.IsFull Or Me.IsFightingLast) Then + flag = True + flag2 = False + flag3 = False + num3 = 0 + num4 = 0 + str = "" + flag4 = False + DXSound.PlaySound(Me.AccessDeniedSound, flag, flag2, flag3, num3, num4, str, flag4) + Else + Me.NNumber.Stop() + Me.NStop = False + flag4 = False + Me.NLS((DXSound.string_0 & "\nsavegame1.wav"), flag4) + Me.FileName = Interaction.InputBox("slot (1-3):", "Save Game", "", -1, -1) + If (Me.FileName <> "") Then + If ((Conversion.Val(Me.FileName) > 0) And (Conversion.Val(Me.FileName) < 4)) Then + Dim num As Integer + Dim num2 As Integer + FileSystem.FileOpen(1, (Addendums.FilePath & "\thsave" & Me.FileName & ".ths"), OpenMode.Output, OpenAccess.Default, OpenShare.Default, -1) + Me.NNumber.Stop() + flag4 = False + Me.NLS((DXSound.string_0 & "\nsavegame2.wav"), flag4) + flag4 = True + flag3 = True + flag2 = False + num4 = 0 + num3 = 0 + str = "" + flag = False + DXSound.PlaySound(Me.ClickSound, flag4, flag3, flag2, num4, num3, str, flag) + THConstVars.CannotDoKeydown = True + FileSystem.WriteLine(1, New Object() {Me.IsFirstTimeLoading}) + Dim x As Integer = Me.x + num = 1 + Do While (num <= x) + Dim y As Integer = Me.y + num2 = 1 + Do While (num2 <= y) + FileSystem.WriteLine(1, New Object() {Me.CGrid(num, num2)}) + Application.DoEvents() + num2 = ((num2 + 1)) + Loop + num = ((num + 1)) Loop - num = CShort((num + 1)) - Loop - FileSystem.WriteLine(1, New Object() {Me.IsControling, Me.SControl, Me.WControl, Me.AControl}) - FileSystem.WriteLine(1, New Object() {Me.UnlimitedHealth, Me.UnlimitedBullets, Me.h, Me.x, Me.y, Me.Swrd, Me.Bullets, Me.Accuracy, Me.WinX, Me.WinY, Me.px, Me.py, Me.ch, Me.HasKey, Me.WorkedPanel, Me.Points, Me.bombs, Me.KeyX, Me.KeyY, Me.PanelX, Me.PanelY, Me.IsFightingLast, Me.HasKilledBrutus}) - FileSystem.WriteLine(1, New Object() {Me.WH, Me.MineX, Me.MineY, Me.BlewUpMineControl, Me.ALaser, Me.short_2, Me.short_3, Me.IsDoingGMissile, Me.GSpeed, Me.GFront, Me.IsInWater, Me.WDepth, Me.SubPX, Me.SubPY, Me.DoingReflector, Me.GX, Me.GY, Me.RCount}) - FileSystem.WriteLine(1, New Object() {Me.IsWaitingForMachine, Me.CMachine, Me.HasShutDownCard, Me.DisableTeleports, Me.NumAlert, Me.ChallNum, Me.ChallAmount, Me.WPos, Me.HasTurnedOffMachine, Me.HasBlownUpMachine, Me.MachineX, Me.MachineY, Me.ExitX, Me.ExitY, Me.EBomb, Me.IsEscapingFromBomb}) - FileSystem.WriteLine(1, New Object() {Me.HasMainKey, Me.HasKilledMouse, Me.HasKilledBrutus2, Me.SGen, THConstVars.Difficulty}) - Dim num7 As Short = CShort(Information.UBound(Me.Weapons, 1)) - num = 0 - Do While (num <= num7) - FileSystem.WriteLine(1, New Object() {Me.Weapons(num)}) - num = CShort((num + 1)) - Loop - Dim num8 As Short = CShort(Information.UBound(Me.challs, 1)) - num = 1 - Do While (num <= num8) - FileSystem.WriteLine(1, New Object() {Me.challs(num).A, Me.challs(num).IsFighting, Me.challs(num).x, Me.challs(num).y, Me.challs(num).CSeconds, Me.challs(num).HSeconds, Me.challs(num).IsDeadValid, Me.challs(num).IsMaster, Me.challs(num).HasKey, Me.challs(num).HasFoundOnce, Me.challs(num).IsBeingControled, Me.challs(num).IsPoisoned, Me.challs(num).NumOfNeedles}) - Application.DoEvents() - num = CShort((num + 1)) - Loop - Dim num9 As Short = Me.x - num = 1 - Do While (num <= num9) - Dim y As Short = Me.y - num2 = 1 - Do While (num2 <= y) - FileSystem.WriteLine(1, New Object() {Me.BGrid(num, num2)}) + FileSystem.WriteLine(1, New Object() {Me.IsControling, Me.SControl, Me.WControl, Me.AControl}) + FileSystem.WriteLine(1, New Object() {Me.UnlimitedHealth, Me.UnlimitedBullets, Me.h, Me.x, Me.y, Me.Swrd, Me.Bullets, Me.Accuracy, Me.WinX, Me.WinY, Me.px, Me.py, Me.ch, Me.HasKey, Me.WorkedPanel, Me.Points, Me.bombs, Me.KeyX, Me.KeyY, Me.PanelX, Me.PanelY, Me.IsFightingLast, Me.HasKilledBrutus}) + FileSystem.WriteLine(1, New Object() {Me.WH, Me.MineX, Me.MineY, Me.BlewUpMineControl, Me.ALaser, Me.short_2, Me.short_3, Me.IsDoingGMissile, Me.GSpeed, Me.GFront, Me.IsInWater, Me.WDepth, Me.SubPX, Me.SubPY, Me.DoingReflector, Me.GX, Me.GY, Me.RCount}) + FileSystem.WriteLine(1, New Object() {Me.IsWaitingForMachine, Me.CMachine, Me.HasShutDownCard, Me.DisableTeleports, Me.NumAlert, Me.ChallNum, Me.ChallAmount, Me.WPos, Me.HasTurnedOffMachine, Me.HasBlownUpMachine, Me.MachineX, Me.MachineY, Me.ExitX, Me.ExitY, Me.EBomb, Me.IsEscapingFromBomb}) + FileSystem.WriteLine(1, New Object() {Me.HasMainKey, Me.HasKilledMouse, Me.HasKilledBrutus2, Me.SGen, THConstVars.Difficulty}) + Dim num7 As Integer = (Information.UBound(Me.Weapons, 1)) + num = 0 + Do While (num <= num7) + FileSystem.WriteLine(1, New Object() {Me.Weapons(num)}) + num = ((num + 1)) + Loop + Dim num8 As Integer = (Information.UBound(Me.challs, 1)) + num = 1 + Do While (num <= num8) + FileSystem.WriteLine(1, New Object() {Me.challs(num).A, Me.challs(num).IsFighting, Me.challs(num).x, Me.challs(num).y, Me.challs(num).CSeconds, Me.challs(num).HSeconds, Me.challs(num).IsDeadValid, Me.challs(num).IsMaster, Me.challs(num).HasKey, Me.challs(num).HasFoundOnce, Me.challs(num).IsBeingControled, Me.challs(num).IsPoisoned, Me.challs(num).NumOfNeedles}) Application.DoEvents() - num2 = CShort((num2 + 1)) + num = ((num + 1)) Loop - num = CShort((num + 1)) - Loop - FileSystem.FileClose(New Integer() {1}) - Me.NNumber.Stop() - flag4 = False - Me.NLS((DXSound.string_0 & "\nsavegame3.wav"), flag4) - THConstVars.CannotDoKeydown = False - Me.ClickSound.Stop() - Me.NStop = True + Dim num9 As Integer = Me.x + num = 1 + Do While (num <= num9) + Dim y As Integer = Me.y + num2 = 1 + Do While (num2 <= y) + FileSystem.WriteLine(1, New Object() {Me.BGrid(num, num2)}) + Application.DoEvents() + num2 = ((num2 + 1)) + Loop + num = ((num + 1)) + Loop + FileSystem.FileClose(New Integer() {1}) + Me.NNumber.Stop() + flag4 = False + Me.NLS((DXSound.string_0 & "\nsavegame3.wav"), flag4) + THConstVars.CannotDoKeydown = False + Me.ClickSound.Stop() + Me.NStop = True + Else + Me.NNumber.Stop() + flag4 = False + Me.NLS((DXSound.string_0 & "\nnotslot.wav"), flag4) + Me.NStop = True + End If Else Me.NNumber.Stop() - flag4 = False - Me.NLS((DXSound.string_0 & "\nnotslot.wav"), flag4) Me.NStop = True End If - Else - Me.NNumber.Stop() - Me.NStop = True End If - End If + Finally + FileSystem.Reset() + enableGameLoop() + End Try End Sub Private Sub FindPassage(ByRef Optional OnlyDoPassage As Boolean = False) - Dim x As Short - Dim y As Short - Dim num5 As Short - Dim num6 As Short + Dim x As Integer + Dim y As Integer + Dim num5 As Integer + Dim num6 As Integer If Me.IsControling Then x = Me.challs(CInt(Me.WControl)).x y = Me.challs(CInt(Me.WControl)).y @@ -2072,52 +1953,52 @@ Label_0912: Dim doorSouth As Boolean = Me.GetDoorSouth Dim doorNorth As Boolean = Me.GetDoorNorth If passageCurrent Then - Dim cX As Short = CShort((x - 1)) - Dim num4 As Short = CShort((x + 1)) + Dim cX As Integer = ((x - 1)) + Dim num4 As Integer = ((x + 1)) If (Not Me.GetBlock(cX, y) And Not Me.GetBlock(num4, y)) Then - num5 = CShort((x - 1)) + num5 = ((x - 1)) num6 = 0 DXSound.smethod_1(Me.PassageSound(1), False, True, num5, y, num6) - num6 = CShort((x + 1)) + num6 = ((x + 1)) num5 = 0 DXSound.smethod_1(Me.PassageSound(2), False, True, num6, y, num5) Return End If - num6 = CShort((y - 1)) - num5 = CShort((y + 1)) + num6 = ((y - 1)) + num5 = ((y + 1)) If (Not Me.GetBlock(x, num6) And Not Me.GetBlock(x, num5)) Then - num4 = CShort((y + 1)) + num4 = ((y + 1)) cX = 0 DXSound.smethod_1(Me.PassageSound(1), False, True, x, num4, cX) - num6 = CShort((y - 1)) + num6 = ((y - 1)) num5 = 0 DXSound.smethod_1(Me.PassageSound(2), False, True, x, num6, num5) Return End If End If If passageWest Then - num6 = CShort((x - 1)) + num6 = ((x - 1)) num5 = 0 DXSound.smethod_1(Me.PassageSound(1), False, True, num6, y, num5) Else Me.PassageSound(1).Stop() End If If passageEast Then - num6 = CShort((x + 1)) + num6 = ((x + 1)) num5 = 0 DXSound.smethod_1(Me.PassageSound(2), False, True, num6, y, num5) Else Me.PassageSound(2).Stop() End If If passageSouth Then - num6 = CShort((y + 1)) + num6 = ((y + 1)) num5 = 0 DXSound.smethod_1(Me.PassageSound(3), False, True, x, num6, num5) Else Me.PassageSound(3).Stop() End If If passageNorth Then - num6 = CShort((y - 1)) + num6 = ((y - 1)) num5 = 0 DXSound.smethod_1(Me.PassageSound(4), False, True, x, num6, num5) Else @@ -2125,28 +2006,28 @@ Label_0912: End If If Not OnlyDoPassage Then If doorWest Then - num6 = CShort((x - 1)) + num6 = ((x - 1)) num5 = 0 DXSound.smethod_1(Me.DoorSound(1), False, True, num6, y, num5) Else Me.DoorSound(1).Stop() End If If doorEast Then - num6 = CShort((x + 1)) + num6 = ((x + 1)) num5 = 0 DXSound.smethod_1(Me.DoorSound(2), False, True, num6, y, num5) Else Me.DoorSound(2).Stop() End If If doorSouth Then - num6 = CShort((y + 1)) + num6 = ((y + 1)) num5 = 0 DXSound.smethod_1(Me.DoorSound(3), False, True, x, num6, num5) Else Me.DoorSound(3).Stop() End If If doorNorth Then - num6 = CShort((y - 1)) + num6 = ((y - 1)) num5 = 0 DXSound.smethod_1(Me.DoorSound(4), False, True, x, num6, num5) Else @@ -2159,13 +2040,13 @@ Label_0912: If Not Me.IsDoingGMissile Then If (Me.short_2 > 0) Then If Not Me.UnlimitedBullets Then - Me.short_2 = CShort((Me.short_2 - 1)) + Me.short_2 = ((Me.short_2 - 1)) End If Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = False Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 + Dim x As Integer = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(Me.GLaunchSound, bCloseFirst, bLoopSound, performEffects, x, y, dVolume, waitTillDone) @@ -2186,27 +2067,27 @@ Label_0912: If ((Me.GSpeed - 1) < 0) Then Me.GSpeed = 0 Else - Me.GSpeed = CShort((Me.GSpeed - 1)) + Me.GSpeed = ((Me.GSpeed - 1)) End If End If If (dir_Renamed = "d") Then If ((Me.GSpeed + 1) > 10) Then Me.GSpeed = 10 Else - Me.GSpeed = CShort((Me.GSpeed + 1)) + Me.GSpeed = ((Me.GSpeed + 1)) End If End If Me.GCount = 0 Dim gSpeed As Long = Me.GSpeed Me.VoiceNumber(gSpeed) - Me.GSpeed = CShort(gSpeed) + Me.GSpeed = (gSpeed) End Sub - Private Function GenerateMenu(ByRef intro As String, ByRef menu_Renamed As String, ByRef Optional StartPos As Short = 0) As Short + Private Function GenerateMenu(ByRef intro As String, ByRef menu_Renamed As String, ByRef Optional StartPos As Integer = 0) As Integer Dim hasSaid As Boolean = False Me.IsInMenu = True Dim array As String() = Strings.Split(menu_Renamed, "|", -1, CompareMethod.Binary) - Dim num2 As Short = CShort(Information.UBound(array, 1)) + Dim num2 As Integer = (Information.UBound(array, 1)) Me.NStop = False If (intro <> "") Then Me.NLS((DXSound.string_0 & "\" & intro), True) @@ -2217,10 +2098,10 @@ Label_0912: End If Do While (Not DXInput.isFirstPress(SharpDX.DirectInput.Key.Return)) If DXInput.isFirstPress(SharpDX.DirectInput.Key.Up) Or DXInput.isFirstPress(SharpDX.DirectInput.Key.Left) Then - Me.MenuPos = CShort((Me.MenuPos - 1)) + Me.MenuPos = ((Me.MenuPos - 1)) hasSaid = False ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.Down) Or DXInput.isFirstPress(SharpDX.DirectInput.Key.Right) Then - Me.MenuPos = CShort((Me.MenuPos + 1)) + Me.MenuPos = ((Me.MenuPos + 1)) hasSaid = False ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.Home) Then Me.MenuPos = 0 @@ -2230,11 +2111,11 @@ Label_0912: hasSaid = False End If If (Me.MenuPos < 0) Then - Me.MenuPos = num2 - End If - If (Me.MenuPos > num2) Then - Me.MenuPos = 0 - End If + Me.MenuPos = num2 + End If + If (Me.MenuPos > num2) Then + Me.MenuPos = 0 + End If If Not hasSaid Then Me.NLS((DXSound.string_0 & "\" & array(Me.MenuPos)), False) hasSaid = True @@ -2243,48 +2124,43 @@ Label_0912: Loop Me.IsInMenu = False Me.NStop = True - Return CShort((Me.MenuPos + 1)) + Return ((Me.MenuPos + 1)) End Function Private Sub GenHealth() - If (Me.ASubs(2) < 10) Then - Me.ASubs(2) = CShort((Me.ASubs(2) + 1)) + If (Me.SGen * frameTime < 60 * 10 * 1000) Then + Me.SGen = ((Me.SGen + 1)) Else - Me.ASubs(2) = 0 - If (Me.SGen < 600) Then - Me.SGen = CShort((Me.SGen + 1)) - Else - Me.SGen = 0 - Dim num As Short = &H2B - Do While True - Dim num2 As Short = &HB5 - Do - Me.Grid(num, num2) = 4 - Me.BGrid(num, num2) = 4 - num2 = CShort((num2 + 1)) - Loop While (num2 <= &HBD) - num = CShort((num + 1)) - If (num > &H2F) Then - Dim file As String = "r1.wav" - Dim rWait As Boolean = False - DXSound.Radio(file, rWait) - Return - End If - Loop - End If + Me.SGen = 0 + Dim num As Integer = &H2B + Do While True + Dim num2 As Integer = &HB5 + Do + Me.Grid(num, num2) = 4 + Me.BGrid(num, num2) = 4 + num2 = ((num2 + 1)) + Loop While (num2 <= &HBD) + num = ((num + 1)) + If (num > &H2F) Then + Dim file As String = "r1.wav" + Dim rWait As Boolean = False + DXSound.Radio(file, rWait) + Return + End If + Loop End If End Sub - Public Function GetBGrid(ByRef x As Short, ByRef y As Short) As Short - Return CShort(Math.Round(Conversion.Val(Conversions.ToString(CInt(Me.BGrid(x, y)))))) + Public Function GetBGrid(ByRef x As Integer, ByRef y As Integer) As Integer + Return (Math.Round(Conversion.Val(Conversions.ToString(CInt(Me.BGrid(x, y)))))) End Function - Private Function GetBlock(ByRef CX As Short, ByRef CY As Short) As Boolean + Private Function GetBlock(ByRef CX As Integer, ByRef CY As Integer) As Boolean Dim flag As Boolean If ((((CX < 1) Or (CX > Me.x)) Or (CY < 1)) Or (CY > Me.y)) Then Return True End If - Dim num As Short = Me.BGrid(CX, CY) + Dim num As Integer = Me.BGrid(CX, CY) If Not (((num <> Me.Wall) And (num <> Me.ClosedDoor)) And (num <> Me.LockedDoor)) Then flag = True End If @@ -2295,32 +2171,32 @@ Label_0912: Return Me.challs(CInt(ID)) End Function - Private Function GetChallBlock(ByRef CX As Short, ByRef CY As Short) As Boolean + Private Function GetChallBlock(ByRef CX As Integer, ByRef CY As Integer) As Boolean Dim flag As Boolean If ((((CX < 1) Or (CX > Me.x)) Or (CY < 1)) Or (CY > Me.y)) Then Return True End If - Dim num As Short = Me.BGrid(CX, CY) + Dim num As Integer = Me.BGrid(CX, CY) If Not (((((num <> Me.Water) And (num <> Me.Wall)) And (num <> Me.ClosedDoor)) And (num <> Me.LockedDoor)) And (num <> Me.Mine)) Then flag = True End If Return flag End Function - Private Function GetChallID(ByRef x As Short, ByRef y As Short) As Short - Dim num As Short - Dim challAmount As Short = Me.ChallAmount - Dim i As Short = 1 + Private Function GetChallID(ByRef x As Integer, ByRef y As Integer) As Integer + Dim num As Integer + Dim challAmount As Integer = Me.ChallAmount + Dim i As Integer = 1 Do While (i <= challAmount) If ((Me.challs(i).x = x) And (Me.challs(i).y = y)) Then Return i End If - i = CShort((i + 1)) + i = ((i + 1)) Loop Return num End Function - Private Function GetDoor(ByRef x As Short, ByRef y As Short) As Boolean + Private Function GetDoor(ByRef x As Integer, ByRef y As Integer) As Boolean Dim flag As Boolean If ((Me.BGrid(x, y) = Me.ClosedDoor) Or (Me.BGrid(x, y) = Me.LockedDoor)) Then flag = True @@ -2328,7 +2204,7 @@ Label_0912: Return flag End Function - Private Function GetDoorBlock(ByRef x As Short, ByRef y As Short) As Boolean + Private Function GetDoorBlock(ByRef x As Integer, ByRef y As Integer) As Boolean Dim flag As Boolean If (Me.BGrid(x, y) = Me.Wall) Then flag = True @@ -2337,8 +2213,8 @@ Label_0912: End Function Private Function GetDoorEast() As Boolean - Dim x As Short - Dim y As Short + Dim x As Integer + Dim y As Integer Dim flag As Boolean If Me.IsControling Then x = Me.challs(CInt(Me.WControl)).x @@ -2347,17 +2223,17 @@ Label_0912: x = Me.px y = Me.py End If - Dim num3 As Short = 1 - Do While (CShort((x + num3)) <= Me.x) + Dim num3 As Integer = 1 + Do While (((x + num3)) <= Me.x) If Me.GetDoorBlock(x, y) Then Return flag End If - x = CShort((x + num3)) + x = ((x + num3)) If Me.GetDoor(x, y) Then Return True End If Application.DoEvents() - num3 = CShort((num3 + 1)) + num3 = ((num3 + 1)) If (num3 > 5) Then Return flag End If @@ -2366,8 +2242,8 @@ Label_0912: End Function Private Function GetDoorNorth() As Boolean - Dim x As Short - Dim y As Short + Dim x As Integer + Dim y As Integer Dim flag As Boolean If Me.IsControling Then x = Me.challs(CInt(Me.WControl)).x @@ -2376,17 +2252,17 @@ Label_0912: x = Me.px y = Me.py End If - Dim num3 As Short = 1 - Do While (CShort((y - num3)) >= 1) + Dim num3 As Integer = 1 + Do While (((y - num3)) >= 1) If Me.GetDoorBlock(x, y) Then Return flag End If - y = CShort((y - num3)) + y = ((y - num3)) If Me.GetDoor(x, y) Then Return True End If Application.DoEvents() - num3 = CShort((num3 + 1)) + num3 = ((num3 + 1)) If (num3 > 5) Then Return flag End If @@ -2395,8 +2271,8 @@ Label_0912: End Function Private Function GetDoorSouth() As Boolean - Dim x As Short - Dim y As Short + Dim x As Integer + Dim y As Integer Dim flag As Boolean If Me.IsControling Then x = Me.challs(CInt(Me.WControl)).x @@ -2405,17 +2281,17 @@ Label_0912: x = Me.px y = Me.py End If - Dim num3 As Short = 1 - Do While (CShort((y + num3)) <= Me.y) + Dim num3 As Integer = 1 + Do While (((y + num3)) <= Me.y) If Me.GetDoorBlock(x, y) Then Return flag End If - y = CShort((y + num3)) + y = ((y + num3)) If Me.GetDoor(x, y) Then Return True End If Application.DoEvents() - num3 = CShort((num3 + 1)) + num3 = ((num3 + 1)) If (num3 > 5) Then Return flag End If @@ -2424,8 +2300,8 @@ Label_0912: End Function Private Function GetDoorWest() As Boolean - Dim x As Short - Dim y As Short + Dim x As Integer + Dim y As Integer Dim flag As Boolean If Me.IsControling Then x = Me.challs(CInt(Me.WControl)).x @@ -2434,17 +2310,17 @@ Label_0912: x = Me.px y = Me.py End If - Dim num3 As Short = 1 - Do While (CShort((x - num3)) >= 1) + Dim num3 As Integer = 1 + Do While (((x - num3)) >= 1) If Me.GetDoorBlock(x, y) Then Return flag End If - x = CShort((x - num3)) + x = ((x - num3)) If Me.GetDoor(x, y) Then Return True End If Application.DoEvents() - num3 = CShort((num3 + 1)) + num3 = ((num3 + 1)) If (num3 > 5) Then Return flag End If @@ -2452,11 +2328,11 @@ Label_0912: Return flag End Function - Public Function GetGrid(ByRef x As Short, ByRef y As Short) As Short - Return CShort(Math.Round(Conversion.Val(Conversions.ToString(CInt(Me.Grid(x, y)))))) + Public Function GetGrid(ByRef x As Integer, ByRef y As Integer) As Integer + Return (Math.Round(Conversion.Val(Conversions.ToString(CInt(Me.Grid(x, y)))))) End Function - Private Function GetPassage(ByRef x As Short, ByRef y As Short) As Boolean + Private Function GetPassage(ByRef x As Integer, ByRef y As Integer) As Boolean Dim flag As Boolean If ((Me.BGrid(x, y) = Me.PassageMarker) Or (Me.BGrid(x, y) = Me.OpenDoor)) Then flag = True @@ -2472,8 +2348,8 @@ Label_0912: End Function Private Function GetPassageEast() As Boolean - Dim x As Short - Dim y As Short + Dim x As Integer + Dim y As Integer Dim flag As Boolean If Me.IsControling Then x = Me.challs(CInt(Me.WControl)).x @@ -2482,18 +2358,18 @@ Label_0912: x = Me.px y = Me.py End If - Dim num3 As Short = 1 - Do While (CShort((x + num3)) <= Me.x) - Dim cX As Short = CShort((x + num3)) + Dim num3 As Integer = 1 + Do While (((x + num3)) <= Me.x) + Dim cX As Integer = ((x + num3)) If Me.GetBlock(cX, y) Then Return flag End If - cX = CShort((x + num3)) + cX = ((x + num3)) If Me.GetPassage(cX, y) Then Return True End If Application.DoEvents() - num3 = CShort((num3 + 1)) + num3 = ((num3 + 1)) If (num3 > 5) Then Return flag End If @@ -2502,8 +2378,8 @@ Label_0912: End Function Private Function GetPassageNorth() As Boolean - Dim x As Short - Dim y As Short + Dim x As Integer + Dim y As Integer Dim flag As Boolean If Me.IsControling Then x = Me.challs(CInt(Me.WControl)).x @@ -2512,18 +2388,18 @@ Label_0912: x = Me.px y = Me.py End If - Dim num3 As Short = 1 - Do While (CShort((y - num3)) >= 1) - Dim cY As Short = CShort((y - num3)) + Dim num3 As Integer = 1 + Do While (((y - num3)) >= 1) + Dim cY As Integer = ((y - num3)) If Me.GetBlock(x, cY) Then Return flag End If - cY = CShort((y - num3)) + cY = ((y - num3)) If Me.GetPassage(x, cY) Then Return True End If Application.DoEvents() - num3 = CShort((num3 + 1)) + num3 = ((num3 + 1)) If (num3 > 5) Then Return flag End If @@ -2532,8 +2408,8 @@ Label_0912: End Function Private Function GetPassageSouth() As Boolean - Dim x As Short - Dim y As Short + Dim x As Integer + Dim y As Integer Dim flag As Boolean If Me.IsControling Then x = Me.challs(CInt(Me.WControl)).x @@ -2542,18 +2418,18 @@ Label_0912: x = Me.px y = Me.py End If - Dim num3 As Short = 1 - Do While (CShort((y + num3)) <= Me.y) - Dim cY As Short = CShort((y + num3)) + Dim num3 As Integer = 1 + Do While (((y + num3)) <= Me.y) + Dim cY As Integer = ((y + num3)) If Me.GetBlock(x, cY) Then Return flag End If - cY = CShort((y + num3)) + cY = ((y + num3)) If Me.GetPassage(x, cY) Then Return True End If Application.DoEvents() - num3 = CShort((num3 + 1)) + num3 = ((num3 + 1)) If (num3 > 5) Then Return flag End If @@ -2562,8 +2438,8 @@ Label_0912: End Function Private Function GetPassageWest() As Boolean - Dim x As Short - Dim y As Short + Dim x As Integer + Dim y As Integer Dim flag As Boolean If Me.IsControling Then x = Me.challs(CInt(Me.WControl)).x @@ -2572,18 +2448,18 @@ Label_0912: x = Me.px y = Me.py End If - Dim num3 As Short = 1 - Do While (CShort((x - num3)) >= 1) - Dim cX As Short = CShort((x - num3)) + Dim num3 As Integer = 1 + Do While (((x - num3)) >= 1) + Dim cX As Integer = ((x - num3)) If Me.GetBlock(cX, y) Then Return flag End If - cX = CShort((x - num3)) + cX = ((x - num3)) If Me.GetPassage(cX, y) Then Return True End If Application.DoEvents() - num3 = CShort((num3 + 1)) + num3 = ((num3 + 1)) If (num3 > 5) Then Return flag End If @@ -2592,14 +2468,14 @@ Label_0912: End Function Public Sub GExplodeMissile() - Dim num2 As Short + Dim num2 As Integer Me.IsDoingGMissile = False If (Me.BGrid(Me.GX, Me.GY) = Me.Water) Then num2 = 0 DXSound.smethod_1(Me.JumpInWaterSound, True, False, Me.GX, Me.GY, num2) Me.Grid(Me.GX, Me.GY) = Me.Water Else - Dim num3 As Short + Dim num3 As Integer num2 = 0 DXSound.smethod_1(Me.GExplodeSound, True, False, Me.GX, Me.GY, num2) If (((Me.Grid(Me.GX, Me.GY) = Me.Wall) Or (Me.Grid(Me.GX, Me.GY) = Me.ClosedDoor)) Or (Me.Grid(Me.GX, Me.GY) = Me.LockedDoor)) Then @@ -2609,70 +2485,70 @@ Label_0912: Me.BGrid(Me.GX, Me.GY) = Me.PassageMarker End If If (Me.BGrid(Me.GX, Me.GY) <> Me.Machine) Then - Dim num As Short = 0 + Dim num As Integer = 0 Do - If (CShort((Me.GY + num)) <= Me.y) Then - num2 = CShort((Me.GY + num)) + If (((Me.GY + num)) <= Me.y) Then + num2 = ((Me.GY + num)) If Me.IsChall(Me.GX, num2) Then num3 = 50 - Me.HarmChall(num3, Me.GX, CShort((Me.GY + num))) + Me.HarmChall(num3, Me.GX, ((Me.GY + num))) End If - num3 = CShort((Me.GY + num)) + num3 = ((Me.GY + num)) If Me.GetBlock(Me.GX, num3) Then - num2 = CShort((Me.GY + num)) + num2 = ((Me.GY + num)) Me.AllThingReplace(Me.GX, num2, Me.PassageMarker) - num3 = CShort((Me.GY + num)) + num3 = ((Me.GY + num)) num2 = 0 DXSound.smethod_1(Me.DestroyWallSound, False, False, Me.GX, num3, num2) End If End If - If (CShort((Me.GY - num)) >= 1) Then - num3 = CShort((Me.GY - num)) + If (((Me.GY - num)) >= 1) Then + num3 = ((Me.GY - num)) If Me.IsChall(Me.GX, num3) Then num2 = 50 - Me.HarmChall(num2, Me.GX, CShort((Me.GY - num))) + Me.HarmChall(num2, Me.GX, ((Me.GY - num))) End If - num3 = CShort((Me.GY - num)) + num3 = ((Me.GY - num)) If Me.GetBlock(Me.GX, num3) Then - num2 = CShort((Me.GY - num)) + num2 = ((Me.GY - num)) Me.AllThingReplace(Me.GX, num2, Me.PassageMarker) - num3 = CShort((Me.GY - num)) + num3 = ((Me.GY - num)) num2 = 0 DXSound.smethod_1(Me.DestroyWallSound, False, False, Me.GX, num3, num2) End If End If - If (CShort((Me.GX + num)) <= Me.x) Then - num3 = CShort((Me.GX + num)) + If (((Me.GX + num)) <= Me.x) Then + num3 = ((Me.GX + num)) If Me.IsChall(num3, Me.GY) Then num2 = 50 - Me.HarmChall(num2, CShort((Me.GX + num)), Me.GY) + Me.HarmChall(num2, ((Me.GX + num)), Me.GY) End If - num3 = CShort((Me.GX + num)) + num3 = ((Me.GX + num)) If Me.GetBlock(num3, Me.GY) Then - num2 = CShort((Me.GX + num)) + num2 = ((Me.GX + num)) Me.AllThingReplace(num2, Me.GY, Me.PassageMarker) - num3 = CShort((Me.GX + num)) + num3 = ((Me.GX + num)) num2 = 0 DXSound.smethod_1(Me.DestroyWallSound, False, False, num3, Me.GY, num2) End If End If - If (CShort((Me.GX - num)) >= 1) Then - num3 = CShort((Me.GX - num)) + If (((Me.GX - num)) >= 1) Then + num3 = ((Me.GX - num)) If Me.IsChall(num3, Me.GY) Then num2 = 50 - Me.HarmChall(num2, CShort((Me.GX - num)), Me.GY) + Me.HarmChall(num2, ((Me.GX - num)), Me.GY) End If - num3 = CShort((Me.GX - num)) + num3 = ((Me.GX - num)) If Me.GetBlock(num3, Me.GY) Then - num2 = CShort((Me.GX - num)) + num2 = ((Me.GX - num)) Me.AllThingReplace(num2, Me.GY, Me.PassageMarker) - num3 = CShort((Me.GX - num)) + num3 = ((Me.GX - num)) num2 = 0 DXSound.smethod_1(Me.DestroyWallSound, False, False, num3, Me.GY, num2) End If End If Application.DoEvents() - num = CShort((num + 1)) + num = ((num + 1)) Loop While (num <= 10) End If If ((Me.Grid(Me.GX, Me.GY) = Me.Machine) Or (Me.BGrid(Me.GX, Me.GY) = Me.Machine)) Then @@ -2749,42 +2625,42 @@ Label_0912: End If End Sub - Public Sub GoFight(ByRef Optional i As Short = 0) + Public Sub GoFight(ByRef Optional i As Integer = 0) If ((Not i = 5) AndAlso ((Me.HowManyNum < Me.HowMany) AndAlso (Me.challs(i).A > 0))) Then Dim flag As Boolean - Me.HowManyNum = CShort((Me.HowManyNum + 1)) - Dim thing As Short = CShort(Math.Round(Conversion.Val(Conversions.ToString(CInt(Me.BGrid(Me.challs(i).x, Me.challs(i).y)))))) + Me.HowManyNum = ((Me.HowManyNum + 1)) + Dim thing As Integer = (Math.Round(Conversion.Val(Conversions.ToString(CInt(Me.BGrid(Me.challs(i).x, Me.challs(i).y)))))) Me.ThingReplace(Me.challs(i).x, Me.challs(i).y, thing) Select Case (1.0! + Conversion.Int(CSng((4.0! * VBMath.Rnd)))) Case 1.0! - thing = CShort((Me.px - 1)) + thing = ((Me.px - 1)) If Not Me.GetChallBlock(thing, Me.py) Then - Me.challs(i).x = CShort((Me.px - 1)) + Me.challs(i).x = ((Me.px - 1)) Me.challs(i).y = Me.py flag = True End If Exit Select Case 2.0! - thing = CShort((Me.px + 1)) + thing = ((Me.px + 1)) If Not Me.GetChallBlock(thing, Me.py) Then - Me.challs(i).x = CShort((Me.px + 1)) + Me.challs(i).x = ((Me.px + 1)) Me.challs(i).y = Me.py flag = True End If Exit Select Case 3.0! - thing = CShort((Me.py - 1)) + thing = ((Me.py - 1)) If Not Me.GetChallBlock(Me.px, thing) Then Me.challs(i).x = Me.px - Me.challs(i).y = CShort((Me.py - 1)) + Me.challs(i).y = ((Me.py - 1)) flag = True End If Exit Select Case 4.0! - thing = CShort((Me.py + 1)) + thing = ((Me.py + 1)) If Not Me.GetChallBlock(Me.px, thing) Then Me.challs(i).x = Me.px - Me.challs(i).y = CShort((Me.py + 1)) + Me.challs(i).y = ((Me.py + 1)) flag = True End If Exit Select @@ -2797,13 +2673,13 @@ Label_0912: End If End Sub - Public Sub HarmChall(ByRef amount As Short, ByVal Optional x As Short = 0, ByVal Optional y As Short = 0) + Public Sub HarmChall(ByRef amount As Integer, ByVal Optional x As Integer = 0, ByVal Optional y As Integer = 0) If ((x = 0) And (y = 0)) Then x = Me.px y = Me.py End If - Dim challAmount As Short = Me.ChallAmount - Dim i As Short = 1 + Dim challAmount As Integer = Me.ChallAmount + Dim i As Integer = 1 Do While (i <= challAmount) If (((Me.challs(i).x = x) And (Me.challs(i).y = y)) And (i <> Me.WControl)) Then Me.challs(i).ChallHit(amount) @@ -2811,18 +2687,18 @@ Label_0912: Exit Do End If End If - i = CShort((i + 1)) + i = ((i + 1)) Loop End Sub Private Sub InitGame() - Dim num As Short - Dim num2 As Short + Dim num As Integer + Dim num2 As Integer Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = False Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 + Dim x As Integer = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(Me.directSoundSecondaryBuffer8_0, bCloseFirst, bLoopSound, performEffects, x, y, dVolume, waitTillDone) @@ -2836,31 +2712,31 @@ Label_0912: 'Me.Grid = New Short((Me.x + 1) - 1, (Me.y + 1) - 1) {} 'Me.BGrid = New Short((Me.x + 1) - 1, (Me.y + 1) - 1) {} 'Me.CGrid = New Single((Me.x + 1) - 1, (Me.y + 1) - 1) {} - Dim num5 As Short = Me.x + Dim num5 As Integer = Me.x num = 1 Do While (num <= num5) - Dim num6 As Short = CShort(Math.Round(Conversion.Int(CDbl((CDbl(Me.y) / 4))))) + Dim num6 As Integer = (Math.Round(Conversion.Int(CDbl((CDbl(Me.y) / 4))))) num2 = 1 Do While (num2 <= num6) System.Diagnostics.Debug.WriteLine("inputting " & num & " " & num2) Me.Grid(num, num2) = Me.Mine Application.DoEvents() - num2 = CShort((num2 + 1)) + num2 = ((num2 + 1)) Loop - num = CShort((num + 1)) + num = ((num + 1)) Loop - Dim num7 As Short = Me.x + Dim num7 As Integer = Me.x num = 1 Do While (num <= num7) - Dim num8 As Short = CShort(Math.Round(Conversion.Int(CDbl((CDbl(Me.y) / 10))))) + Dim num8 As Integer = (Math.Round(Conversion.Int(CDbl((CDbl(Me.y) / 10))))) num2 = 1 Do While (num2 <= num8) System.Diagnostics.Debug.WriteLine(num & "," & num2) Me.Grid(num, num2) = 0 Application.DoEvents() - num2 = CShort((num2 + 1)) + num2 = ((num2 + 1)) Loop - num = CShort((num + 1)) + num = ((num + 1)) Loop Me.Grid(5, 70) = Me.MineGuard Me.Grid(5, &H47) = Me.MineGuard @@ -2877,23 +2753,23 @@ Label_0912: Me.WinX = 200 Me.WinY = 70 Me.Grid(Me.WinX, Me.WinY) = Me.Treasure - Me.KeyX = CShort(Math.Round(Conversion.Int(CDbl((CDbl(Me.x) / 3))))) - Me.KeyY = CShort(Math.Round(Conversion.Int(CDbl(((CDbl(Me.y) / 10) / 2))))) + Me.KeyX = (Math.Round(Conversion.Int(CDbl((CDbl(Me.x) / 3))))) + Me.KeyY = (Math.Round(Conversion.Int(CDbl(((CDbl(Me.y) / 10) / 2))))) Me.Grid(Me.KeyX, Me.KeyY) = Me.Key - Me.PanelX = CShort((Me.x - 1)) - Me.PanelY = CShort((Me.y - 1)) + Me.PanelX = ((Me.x - 1)) + Me.PanelY = ((Me.y - 1)) Me.Grid(Me.PanelX, Me.PanelY) = Me.ControlPanel - Dim num9 As Short = Me.x + Dim num9 As Integer = Me.x num = 1 Do While (num <= num9) - Dim num10 As Short = Me.y + Dim num10 As Integer = Me.y num2 = 1 Do While (num2 <= num10) - Me.BGrid(num, num2) = CShort(Math.Round(Conversion.Val(Conversions.ToString(CInt(Me.Grid(num, num2)))))) + Me.BGrid(num, num2) = (Math.Round(Conversion.Val(Conversions.ToString(CInt(Me.Grid(num, num2)))))) Application.DoEvents() - num2 = CShort((num2 + 1)) + num2 = ((num2 + 1)) Loop - num = CShort((num + 1)) + num = ((num + 1)) Loop Me.px = 3 Me.py = &H67 @@ -2908,7 +2784,9 @@ Label_0912: Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.Timer1 = New System.Windows.Forms.Timer(Me.components) Me.SuspendLayout() ' 'ProgressBar1 @@ -2919,6 +2797,11 @@ Label_0912: Me.ProgressBar1.TabIndex = 0 Me.ProgressBar1.Visible = False ' + 'Timer1 + ' + Me.Timer1.Enabled = False + Me.Timer1.Interval = frameTime + ' 'mainFRM ' Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) @@ -2936,13 +2819,13 @@ Label_0912: End Sub Private Sub InitVars() - Dim index As Short = 0 + Dim index As Integer = 0 Do Me.Weapons(index) = "" - index = CShort((index + 1)) + index = ((index + 1)) Loop While (index <= 6) Dim wName As String = "gun" - Dim pos As Short = 0 + Dim pos As Integer = 0 Me.SetWeapon(wName, pos) wName = "sword" pos = 0 @@ -2986,9 +2869,9 @@ Label_0912: Me.WControl = 0 End Sub - Public Function IsChall(ByRef x As Short, ByRef y As Short) As Boolean + Public Function IsChall(ByRef x As Integer, ByRef y As Integer) As Boolean Dim flag As Boolean - Dim num As Short = Me.Grid(x, y) + Dim num As Integer = Me.Grid(x, y) If ((((num = Me.challenger) Or (num = Me.Mouse)) Or (num = Me.JamesBrutus)) Or (num = Me.ChallWithKey)) Then flag = True End If @@ -3007,12 +2890,12 @@ Label_0912: Me.EmptySound = DXSound.LoadSound((DXSound.SoundPath & "\empty.wav")) Me.TargetSound = DXSound.LoadSound((DXSound.SoundPath & "\target.wav")) Me.RadioSound = DXSound.LoadSound((DXSound.SoundPath & "\r2.wav")) - Dim index As Short = 1 + Dim index As Integer = 1 Do Me.PassageSound(index) = DXSound.smethod_0((DXSound.SoundPath & "\passageopening.wav"), 2.0!, 30) Me.DoorSound(index) = DXSound.smethod_0((DXSound.SoundPath & "\door.wav"), 2.0!, 30) Application.DoEvents() - index = CShort((index + 1)) + index = ((index + 1)) Loop While (index <= 4) Me.ControlLaunchSound = DXSound.LoadSound((DXSound.SoundPath & "\wcontrol.wav")) Me.ControlHitSound = DXSound.LoadSound((DXSound.SoundPath & "\wcontrolhit.wav")) @@ -3064,21 +2947,21 @@ Label_0912: If keyDownDisabled() Then Exit Sub End If - Dim num As Short + Dim num As Integer If ((Me.px - 1) > 0) Then - num = CShort((Me.px - 1)) + num = ((Me.px - 1)) Me.LOUD(num, Me.py) End If If ((Me.px + 1) < Me.x) Then - num = CShort((Me.px + 1)) + num = ((Me.px + 1)) Me.LOUD(num, Me.py) End If If ((Me.py - 1) > 0) Then - num = CShort((Me.py - 1)) + num = ((Me.py - 1)) Me.LOUD(Me.px, num) End If If ((Me.py + 1) < Me.y) Then - num = CShort((Me.py + 1)) + num = ((Me.py + 1)) Me.LOUD(Me.px, num) End If End Sub @@ -3087,12 +2970,12 @@ Label_0912: If keyDownDisabled() Then Exit Sub End If - Dim num As Short - Dim num2 As Short + Dim num As Integer + Dim num2 As Integer Dim flag As Boolean - Dim gX As Short - Dim gY As Short - Dim num5 As Short + Dim gX As Integer + Dim gY As Integer + Dim num5 As Integer Dim flag2 As Boolean Dim num6 As Long If Me.IsDoingGMissile Then @@ -3108,13 +2991,13 @@ Label_0912: Me.NStop = False If a = WalkDirection.north Then Do While (num5 < 20) - num5 = CShort((num5 + 1)) - If (CShort((gY + num5)) > Me.y) Then + num5 = ((num5 + 1)) + If (((gY + num5)) > Me.y) Then Me.NStop = True Return End If - num = Me.Grid(gX, CShort((gY + num5))) - num2 = Me.BGrid(gX, CShort((gY + num5))) + num = Me.Grid(gX, ((gY + num5))) + num2 = Me.BGrid(gX, ((gY + num5))) If ((num > 0) And (num <> Me.PassageMarker)) Then flag2 = True Me.NLS(Conversions.ToString(Operators.ConcatenateObject((DXSound.string_0 & "\"), NewLateBinding.LateIndexGet(Me.stuff, New Object() {num}, Nothing))), flag2) @@ -3133,7 +3016,7 @@ Label_0912: End If num6 = num5 Me.VoiceNumber(num6) - num5 = CShort(num6) + num5 = (num6) If Not Me.NStop Then Me.NumWait() @@ -3154,13 +3037,13 @@ Label_0912: End If If a = WalkDirection.south Then Do While (num5 < 20) - num5 = CShort((num5 + 1)) - If (CShort((gY - num5)) < 1) Then + num5 = ((num5 + 1)) + If (((gY - num5)) < 1) Then Me.NStop = True Return End If - num = Me.Grid(gX, CShort((gY - num5))) - num2 = Me.BGrid(gX, CShort((gY - num5))) + num = Me.Grid(gX, ((gY - num5))) + num2 = Me.BGrid(gX, ((gY - num5))) If ((num > 0) And (num <> Me.PassageMarker)) Then flag2 = True Me.NLS(Conversions.ToString(Operators.ConcatenateObject((DXSound.string_0 & "\"), NewLateBinding.LateIndexGet(Me.stuff, New Object() {num}, Nothing))), flag2) @@ -3179,7 +3062,7 @@ Label_0912: End If num6 = num5 Me.VoiceNumber(num6) - num5 = CShort(num6) + num5 = (num6) If Not Me.NStop Then Me.NumWait() @@ -3200,13 +3083,13 @@ Label_0912: End If If a = WalkDirection.west Then Do While (num5 < 20) - num5 = CShort((num5 + 1)) - If (CShort((gX - num5)) < 1) Then + num5 = ((num5 + 1)) + If (((gX - num5)) < 1) Then Me.NStop = True Return End If - num = Me.Grid(CShort((gX - num5)), gY) - num2 = Me.BGrid(CShort((gX - num5)), gY) + num = Me.Grid(((gX - num5)), gY) + num2 = Me.BGrid(((gX - num5)), gY) If ((num > 0) And (num <> Me.PassageMarker)) Then flag2 = True Me.NLS(Conversions.ToString(Operators.ConcatenateObject((DXSound.string_0 & "\"), NewLateBinding.LateIndexGet(Me.stuff, New Object() {num}, Nothing))), flag2) @@ -3225,7 +3108,7 @@ Label_0912: End If num6 = num5 Me.VoiceNumber(num6) - num5 = CShort(num6) + num5 = (num6) If Not Me.NStop Then Me.NumWait() @@ -3246,13 +3129,13 @@ Label_0912: End If If a = WalkDirection.east Then Do While (num5 < 20) - num5 = CShort((num5 + 1)) - If (CShort((gX + num5)) > Me.x) Then + num5 = ((num5 + 1)) + If (((gX + num5)) > Me.x) Then Me.NStop = True Return End If - num = Me.Grid(CShort((gX + num5)), gY) - num2 = Me.BGrid(CShort((gX + num5)), gY) + num = Me.Grid(((gX + num5)), gY) + num2 = Me.BGrid(((gX + num5)), gY) If ((num > 0) And (num <> Me.PassageMarker)) Then flag2 = True Me.NLS(Conversions.ToString(Operators.ConcatenateObject((DXSound.string_0 & "\"), NewLateBinding.LateIndexGet(Me.stuff, New Object() {num}, Nothing))), flag2) @@ -3271,7 +3154,7 @@ Label_0912: End If num6 = num5 Me.VoiceNumber(num6) - num5 = CShort(num6) + num5 = (num6) If Not Me.NStop Then Me.NumWait() @@ -3295,9 +3178,9 @@ Label_0912: End If End Sub - Private Sub LOUD(ByRef x As Short, ByRef y As Short) + Private Sub LOUD(ByRef x As Integer, ByRef y As Integer) If Me.HasMainKey Then - Dim num As Short + Dim num As Integer If (Me.BGrid(x, y) = Me.ClosedDoor) Then num = 0 DXSound.smethod_1(Me.LockDoorSound, True, False, x, y, num) @@ -3320,197 +3203,196 @@ Label_0912: End Sub Private Sub performActions() - Try - Me.inKeyDown = True - Dim Points As Long - Dim num7 As Integer = 2 - If (Me.HasDoneInit) Then - If (DXInput.IsShift()) Then - If DXInput.isFirstPress(SharpDX.DirectInput.Key.Up) Then - LookInDir(WalkDirection.north) - Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.Down) Then - LookInDir(WalkDirection.south) - Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.Right) Then - LookInDir(WalkDirection.east) - Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.Left) Then - LookInDir(WalkDirection.west) - Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.Return) Then - LockUnlockDoor() - Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.PageUp) Then - changeMusicVolume(VolumeAction.mute) - Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.PageDown) Then - changeMusicVolume(VolumeAction.unmute) - Exit Sub - End If - If DXInput.isKeyHeldDown(SharpDX.DirectInput.Key.Space) Then - swim(SwimDirection.south) - Exit Sub - End If - Else ' If not shift. These keys can be pressed with either the shift key held or released. - If DXInput.isKeyHeldDown(SharpDX.DirectInput.Key.Space) Then - swim(SwimDirection.north) - Me.UseWeapon() - Exit Sub - End If - If DXInput.isFirstPress(SharpDX.DirectInput.Key.Return) Then - OpenOrCloseDoor() - Exit Sub - End If - If DXInput.isKeyHeldDown(SharpDX.DirectInput.Key.PageUp) Then - changeMusicVolume(VolumeAction.down) - Exit Sub - ElseIf DXInput.isKeyHeldDown(SharpDX.DirectInput.Key.PageDown) Then - changeMusicVolume(VolumeAction.up) - Exit Sub - End If - End If - If DXInput.IsControl() Then - If DXInput.isFirstPress(SharpDX.DirectInput.Key.S) Then - Me.file_save_click() - Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.L) Then - Me.file_load_click() - Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.Left) Then - Me.ChangeSpeechRate(SpeechRate.slower) - Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.Right) Then - Me.ChangeSpeechRate(SpeechRate.quicker) - Exit Sub - End If - If Not Me.NStop Then - Me.NStop = True - Me.NNumber.Stop() - Exit Sub - End If - Else ' if not ctrl, for keys that can be pressed with both ctrl and without - If DXInput.isFirstPress(SharpDX.DirectInput.Key.S) Then - Me.Stats() - Exit Sub - End If - End If ' if ctrl - ' Here, the keys will register no matter which modifiers are held because there is no modifier conflict - If DXInput.isFirstPress(SharpDX.DirectInput.Key.Escape) Then - Me.MainMenu(True) + Dim Points As Long + Dim num7 As Integer = 2 + If (Me.HasDoneInit) Then + If (DXInput.IsShift()) Then + If DXInput.isFirstPress(SharpDX.DirectInput.Key.Up) Then + LookInDir(WalkDirection.north) Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.F) Then - pauseOrUnpauseGame() + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.Down) Then + LookInDir(WalkDirection.south) Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.D1) Then - Me.SwitchToWeapon(0) + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.Right) Then + LookInDir(WalkDirection.east) Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.D2) Then - Me.SwitchToWeapon(1) + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.Left) Then + LookInDir(WalkDirection.west) Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.D3) Then - Me.SwitchToWeapon(2) + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.Return) Then + LockUnlockDoor() Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.D4) Then - Me.SwitchToWeapon(3) + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.PageUp) Then + changeMusicVolume(VolumeAction.mute) Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.D5) Then - Me.SwitchToWeapon(4) + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.PageDown) Then + changeMusicVolume(VolumeAction.unmute) Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.D6) Then - Me.SwitchToWeapon(5) - Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.D7) Then - Me.SwitchToWeapon(6) - Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.Z) Then - If keyDownDisabled() Then - Exit Sub - End If - Me.VoiceNumber(CLng(Math.Round(CDbl(THConstVars.Difficulty)))) - Me.NumWait() + End If + If DXInput.isKeyHeldDown(SharpDX.DirectInput.Key.Space) Then + swim(SwimDirection.south) + pressedActionButtonInLastTick = True Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.L) Then - SayLocation() + Else + pressedActionButtonInLastTick = False + End If + Exit Sub + Else ' If not shift. These keys can be pressed with either the shift key held or released, but the shift action will take priority. + If DXInput.isKeyHeldDown(SharpDX.DirectInput.Key.Space) Then + swim(SwimDirection.north) + Me.UseWeapon() + pressedActionButtonInLastTick = True Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.I) Then - Me.SayInventory() + Else + pressedActionButtonInLastTick = False + End If + If DXInput.isFirstPress(SharpDX.DirectInput.Key.Return) Then + OpenOrCloseDoor() Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.V) Then - Me.SayHasVisited() + End If + If DXInput.isKeyHeldDown(SharpDX.DirectInput.Key.PageUp) Then + changeMusicVolume(VolumeAction.down) Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.A) Then - Me.ReportAmunition(False) + ElseIf DXInput.isKeyHeldDown(SharpDX.DirectInput.Key.PageDown) Then + changeMusicVolume(VolumeAction.up) Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.B) Then - Me.BuyAmunition() + End If + End If + If DXInput.IsControl() Then + If DXInput.isFirstPress(SharpDX.DirectInput.Key.S) Then + Me.file_save_click() Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.T) Then - Me.position() + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.L) Then + System.Diagnostics.Debug.WriteLine("load: Before loadclick") + Me.file_load_click() + System.Diagnostics.Debug.WriteLine("load: after loadclick") Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.P) Then - If keyDownDisabled() Then - Exit Sub - End If - If (Me.BGrid(Me.px, Me.py) = Me.ControlPanel) Then - Me.ControlPanelWork(True) - Else - Me.NStop = False - Me.NNumber.Stop() - Me.VoiceNumber(Me.Points) - Me.NStop = True - End If + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.Left) Then + Me.ChangeSpeechRate(SpeechRate.slower) Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.H) Then - sayHealth() + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.Right) Then + Me.ChangeSpeechRate(SpeechRate.quicker) Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.C) Then - sayNumAlert() + End If + If Not Me.NStop Then + Me.NStop = True + Me.NNumber.Stop() + End If + Exit Sub + Else ' if not ctrl, for keys that can be pressed with both ctrl and without + If DXInput.isFirstPress(SharpDX.DirectInput.Key.S) Then + Me.Stats() Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.D) Then - sayDepth() + End If + End If ' if ctrl + ' Here, the keys will register no matter which modifiers are held because there is no modifier conflict + If DXInput.isFirstPress(SharpDX.DirectInput.Key.Escape) Then + Me.MainMenu(True) + Exit Sub + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.F) Then + pauseOrUnpauseGame() + Exit Sub + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.D1) Then + Me.SwitchToWeapon(0) + Exit Sub + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.D2) Then + Me.SwitchToWeapon(1) + Exit Sub + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.D3) Then + Me.SwitchToWeapon(2) + Exit Sub + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.D4) Then + Me.SwitchToWeapon(3) + Exit Sub + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.D5) Then + Me.SwitchToWeapon(4) + Exit Sub + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.D6) Then + Me.SwitchToWeapon(5) + Exit Sub + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.D7) Then + Me.SwitchToWeapon(6) + Exit Sub + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.Z) Then + If keyDownDisabled() Then Exit Sub - ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.R) Then - Me.ReturnToStartingPoint() + End If + Me.VoiceNumber(CLng(Math.Round(CDbl(THConstVars.Difficulty)))) + Me.NumWait() + Exit Sub + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.L) Then + SayLocation() + Exit Sub + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.I) Then + Me.SayInventory() + Exit Sub + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.V) Then + Me.SayHasVisited() + Exit Sub + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.A) Then + Me.ReportAmunition(False) + Exit Sub + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.B) Then + Me.BuyAmunition() + Exit Sub + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.T) Then + Me.position() + Exit Sub + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.P) Then + If keyDownDisabled() Then Exit Sub End If - If DXInput.isKeyHeldDown(SharpDX.DirectInput.Key.Left) Then - swim(SwimDirection.west) - missileCommand(MissileAction.turnLeft) - MovePlayer(WalkDirection.west) - ElseIf DXInput.isKeyHeldDown(SharpDX.DirectInput.Key.Right) Then - swim(SwimDirection.east) - missileCommand(MissileAction.turnRight) - MovePlayer(WalkDirection.east) - ElseIf DXInput.isKeyHeldDown(SharpDX.DirectInput.Key.Up) Then - swim(SwimDirection.up) - missileCommand(MissileAction.speedUp) - MovePlayer(WalkDirection.north) - ElseIf DXInput.isKeyHeldDown(SharpDX.DirectInput.Key.Down) Then - swim(SwimDirection.down) - missileCommand(MissileAction.slowDown) - MovePlayer(WalkDirection.south) + If (Me.BGrid(Me.px, Me.py) = Me.ControlPanel) Then + Me.ControlPanelWork(True) + Else + Me.NStop = False + Me.NNumber.Stop() + Me.VoiceNumber(Me.Points) + Me.NStop = True End If - End If ' if has done init - Catch obj1 As Exception - THConstVars.handleException(obj1) - Finally ' So that we can prematurely terminate this subroutine but inKeyDown will still go to off. - Me.inKeyDown = False - End Try - End Sub - - Private Sub mainFRM_KeyUp(ByVal sender As Object, ByVal e As KeyEventArgs) - If (Me.inKeyDown) Then - Me.pendingKeyUp = True - Else - Me.isFirstPress = True - End If + Exit Sub + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.H) Then + sayHealth() + Exit Sub + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.C) Then + sayNumAlert() + Exit Sub + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.D) Then + sayDepth() + Exit Sub + ElseIf DXInput.isFirstPress(SharpDX.DirectInput.Key.R) Then + Me.ReturnToStartingPoint() + Exit Sub + End If + If DXInput.isKeyHeldDown(SharpDX.DirectInput.Key.Left) Then + swim(SwimDirection.west) + missileCommand(MissileAction.turnLeft) + MovePlayer(WalkDirection.west) + movedInLastTick = True + ElseIf DXInput.isKeyHeldDown(SharpDX.DirectInput.Key.Right) Then + swim(SwimDirection.east) + missileCommand(MissileAction.turnRight) + MovePlayer(WalkDirection.east) + movedInLastTick = True + ElseIf DXInput.isKeyHeldDown(SharpDX.DirectInput.Key.Up) Then + swim(SwimDirection.up) + missileCommand(MissileAction.speedUp) + MovePlayer(WalkDirection.north) + movedInLastTick = True + ElseIf DXInput.isKeyHeldDown(SharpDX.DirectInput.Key.Down) Then + swim(SwimDirection.down) + missileCommand(MissileAction.slowDown) + MovePlayer(WalkDirection.south) + movedInLastTick = True + Else + movedInLastTick = False + End If + End If ' if has done init End Sub Private Sub mainFRM_Load(ByVal sender As Object, ByVal e As EventArgs) Dim num5 As Integer Try - ProjectData.ClearProjectError() Dim num4 As Integer = 2 Me.Show() Me.BringToFront() @@ -3521,8 +3403,7 @@ Label_0912: FileSystem.Input(1, Me.AppVersion) FileSystem.Reset() Interaction.SaveSetting(Addendums.AppTitle, "Data", "Version", Me.AppVersion) - Me.V = Conversions.ToShort(Interaction.GetSetting(Addendums.AppTitle, "Config", "Vol", Conversions.ToString(-1600))) - Me.ASubs = New Short(10 - 1) {} + Me.V = Conversions.ToInteger(Interaction.GetSetting(Addendums.AppTitle, "Config", "Vol", Conversions.ToString(-1600))) THF.F.Text = (Addendums.AppTitle & " version " & Me.AppVersion) Me.DefCaption = Me.Text Me.NStop = True @@ -3541,8 +3422,8 @@ Label_0912: Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = False Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 + Dim x As Integer = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXInput.DInputInit(Me.Handle) @@ -3578,30 +3459,30 @@ Label_0912: Me.LoadAllSounds() Dim prompt As String = String.Concat(New String() {"WELCOME! ", Addendums.AppTitle, " is written by Munawar Bijani; it has been ported to Windows by the work of Munawar Bijani and Ameer Armaly. Treasure Hunt version ", Me.AppVersion, ". ", Addendums.LegalCopyrights}) Me.IStuff = 5 - Me.Treasure = CShort((Me.IStuff + 1)) - Me.Wall = CShort((Me.IStuff + 2)) - Me.Key = CShort((Me.IStuff + 3)) - Me.ControlPanel = CShort((Me.IStuff + 4)) - Me.challenger = CShort((Me.IStuff + 5)) - Me.RBomb = CShort((Me.IStuff + 6)) - Me.Water = CShort((Me.IStuff + 7)) - Me.Laser = CShort((Me.IStuff + 8)) - Me.Missile = CShort((Me.IStuff + 9)) - Me.RMissile = CShort((Me.IStuff + 10)) - Me.short_1 = CShort((Me.IStuff + 11)) - Me.Mine = CShort((Me.IStuff + 12)) - Me.MineControl = CShort((Me.IStuff + 13)) - Me.MineGuard = CShort((Me.IStuff + 14)) - Me.Reflector = CShort((Me.IStuff + 15)) - Me.Machine = CShort((Me.IStuff + &H10)) - Me.Mouse = CShort((Me.IStuff + &H11)) - Me.PassageMarker = CShort((Me.IStuff + &H12)) - Me.ClosedDoor = CShort((Me.IStuff + &H13)) - Me.OpenDoor = CShort((Me.IStuff + 20)) - Me.LockedDoor = CShort((Me.IStuff + &H15)) - Me.ChallWithKey = CShort((Me.IStuff + &H16)) - Me.JamesBrutus = CShort((Me.IStuff + &H17)) - Me.controler = CShort((Me.IStuff + &H18)) + Me.Treasure = ((Me.IStuff + 1)) + Me.Wall = ((Me.IStuff + 2)) + Me.Key = ((Me.IStuff + 3)) + Me.ControlPanel = ((Me.IStuff + 4)) + Me.challenger = ((Me.IStuff + 5)) + Me.RBomb = ((Me.IStuff + 6)) + Me.Water = ((Me.IStuff + 7)) + Me.Laser = ((Me.IStuff + 8)) + Me.Missile = ((Me.IStuff + 9)) + Me.RMissile = ((Me.IStuff + 10)) + Me.short_1 = ((Me.IStuff + 11)) + Me.Mine = ((Me.IStuff + 12)) + Me.MineControl = ((Me.IStuff + 13)) + Me.MineGuard = ((Me.IStuff + 14)) + Me.Reflector = ((Me.IStuff + 15)) + Me.Machine = ((Me.IStuff + &H10)) + Me.Mouse = ((Me.IStuff + &H11)) + Me.PassageMarker = ((Me.IStuff + &H12)) + Me.ClosedDoor = ((Me.IStuff + &H13)) + Me.OpenDoor = ((Me.IStuff + 20)) + Me.LockedDoor = ((Me.IStuff + &H15)) + Me.ChallWithKey = ((Me.IStuff + &H16)) + Me.JamesBrutus = ((Me.IStuff + &H17)) + Me.controler = ((Me.IStuff + &H18)) Me.stuff = Strings.Split("nnothing.wav|nsnake.wav|nsword.wav|ncartrige.wav|nhealth.wav|nportal.wav|nvault.wav|nwall.wav|nchest.wav|npanel1.wav|nguard.wav|nbomb.wav|nwater.wav|nlaser.wav|nmissile.wav|nrmissile.wav|nglmissile.wav|nmine.wav|ncmine.wav|ngmine.wav|nreflector.wav|nmachine.wav|nmouse.wav|nnothing.wav|ncdoor.wav|nodoor.wav|ncldoor.wav|ngkey.wav|nbrutus.wav|ncontrol.wav", "|", -1, CompareMethod.Binary) 'Me.Grid = New Short((Me.x + 1) - 1, (Me.y + 1) - 1) {} 'Me.BGrid = New Short((Me.x + 1) - 1, (Me.y + 1) - 1) {} @@ -3636,34 +3517,16 @@ Label_0912: Me.StartMusic() Me.UnmuteSounds() Me.HasDoneInit = True - Me.StartTimer() - GoTo Label_06BF -Label_0673: - THConstVars.HandleError() - GoTo Label_06BF -Label_067A: - num5 = -1 - Select Case num4 - Case 0, 1 - GoTo Label_06B4 - Case 2 - GoTo Label_0673 - End Select - Catch obj1 As Exception - Throw obj1 - 'GoTo Label_067A + Catch err As Exception + THConstVars.handleException(err, Timer1) End Try -Label_06B4: - Throw ProjectData.CreateProjectError(-2146828237) -Label_06BF: - If (num5 <> 0) Then - ProjectData.ClearProjectError() - End If End Sub Private Sub MainMenu(ByRef Optional ResumeGame As Boolean = False) + System.Diagnostics.Debug.WriteLine("In mainmenu") + disableGameLoop() Dim str2 As String - Dim num4 As Short + Dim num4 As Integer Dim str3 As String Me.MuteSounds() THConstVars.CannotDoKeydown = True @@ -3677,8 +3540,8 @@ Label_06BF: Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = True Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 + Dim x As Integer = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(Me.MenuSound, bCloseFirst, bLoopSound, performEffects, x, y, dVolume, waitTillDone) @@ -3689,16 +3552,15 @@ Label_06BF: End If str2 = (str2 & "|menu_a2.wav|menu_a6.wav|menu_a3.wav|menu_a5.wav|menu_a4.wav") Do While (num4 <> 1) - Dim num5 As Short - Dim num6 As Short - Dim num7 As Short - Dim num8 As Short + Dim num5 As Integer + Dim num6 As Integer + Dim num7 As Integer + Dim num8 As Integer dVolume = "menu.wav" y = 0 Select Case Me.GenerateMenu(dVolume, str2, y) Case 1 - num4 = 1 - GoTo Label_060A + Exit Do Case 2 If Not Me.IsFull Then Exit Select @@ -3706,16 +3568,15 @@ Label_06BF: Me.file_load_click() If (Me.FileName <> "") Then - num4 = 1 ResumeGame = True Me.MenuSound.Stop() Me.MenuSound = Nothing THConstVars.CannotDoKeydown = False Me.IsInMenu = False Me.HasDoneInit = True - Me.StartTimer() + Exit Do End If - GoTo Label_060A + Exit Select Case 3 If Not Me.IsFull Then GoTo Label_01A7 @@ -3756,7 +3617,7 @@ Label_01A7: Label_01E2: dVolume = "" str3 = "menu_b1.wav|menu_b2.wav|menu_b3.wav|menu_b4.wav|menu_b5.wav|menu_b6.wav|menu_b7.wav|menu_b8.wav|menu_b9.wav|menu_b10.wav|menu_b11.wav|menu_b12.wav|menu_b13.wav|menu_return.wav " - y = CShort((num6 - 1)) + y = ((num6 - 1)) Select Case Me.GenerateMenu(dVolume, str3, y) Case 1 waitTillDone = True @@ -3883,31 +3744,18 @@ Label_0505: Label_051A: str3 = "menu.wav" dVolume = "menu_c1.wav|menu_c2.wav|menu_c3.wav|menu_c4.wav|menu_return.wav" - y = CShort((num8 - 1)) + y = ((num8 - 1)) Select Case Me.GenerateMenu(str3, dVolume, y) Case 1 - Me.RegProg_help_click() - GoTo Label_05F5 + Exit Select Case 2 - If Me.IsFull Then - Exit Select - End If - Me.RegProg_getid_click() - GoTo Label_05F5 + Exit Select Case 3 - If Me.IsFull Then - GoTo Label_05BA - End If - Me.RegProg_reg_click() - GoTo Label_05F5 + Exit Select Case 4 - Me.RegProg_removereg_click() - GoTo Label_05F5 - Case 5 - num7 = 1 - GoTo Label_05F5 + Exit Select Case Else - GoTo Label_05F5 + Exit Select End Select waitTillDone = True performEffects = False @@ -3974,14 +3822,15 @@ Label_060A: If Me.IsFightingLast Then Me.FinalDuelSound.SetVolume(Me.V) End If + enableGameLoop() End Sub Private Sub method_0() Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = False Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 + Dim x As Integer = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(Me.NNumber, bCloseFirst, bLoopSound, performEffects, x, y, dVolume, waitTillDone) @@ -4007,6 +3856,9 @@ Label_060A: If Not IsDoingGMissile Then Exit Sub End If + If movedInLastTick Then + Exit Sub + End If Dim g As Integer = GFront Dim s As Integer = GSpeed Select Case m @@ -4028,11 +3880,11 @@ Label_060A: If g <> GFront Then Dim dir As String = "" If GFront = 0 Then dir = "north" - If GFront = 0 Then dir = "east" - If GFront = 180 Then GFront = "south" - If GFront = 270 Then GFront = "west" + If GFront = 90 Then dir = "east" + If GFront = 180 Then dir = "south" + If GFront = 270 Then dir = "west" NStop = False - Me.NLS((DXSound.string_0 & "\n" & dir & ".wav"), False) + Me.NLS((DXSound.string_0 & "\\n" & dir & ".wav"), False) NStop = True End If If s <> GSpeed Then @@ -4050,29 +3902,36 @@ Label_060A: Dim tx As Integer = Me.px Dim ty As Integer = Me.py Select Case d + ' For up and down, we don't want rapid-fire. If we use canSwim here, we will get rapid-fire since + ' the swimSound doesn't play Case SwimDirection.up - WDepth -= 1 - If WDepth > 0 Then WDepth = 0 + If movedInLastTick Then Exit Sub + DepthDecrease() Exit Select Case SwimDirection.down - WDepth += 1 - If WDepth > 15 Then WDepth = 15 + If movedInLastTick Then Exit Sub + DepthIncrease() Exit Select Case SwimDirection.north If WDepth = 0 Then Exit Sub - Me.py = CShort((Me.py + 1)) + If Not canSwim(pressedActionButtonInLastTick) Then Exit Sub + Me.py = ((Me.py + 1)) Exit Select Case SwimDirection.south If WDepth = 0 Then Exit Sub - Me.py = CShort((Me.py - 1)) + If Not canSwim(pressedActionButtonInLastTick) Then Exit Sub + Me.py = ((Me.py - 1)) Exit Select Case SwimDirection.east + ' For east and west, since these are done using arrow keys we change movedInLastTick instead of pressedActionButtonInLastTick If WDepth = 0 Then Exit Sub - Me.px = CShort((Me.px + 1)) + If Not canSwim(movedInLastTick) Then Exit Sub + Me.px = ((Me.px + 1)) Exit Select Case SwimDirection.west If WDepth = 0 Then Exit Sub - Me.px = CShort((Me.px - 1)) + If Not canSwim(movedInLastTick) Then Exit Sub + Me.px = ((Me.px - 1)) Exit Select End Select If isBlocked(Me.px, Me.py) Then @@ -4096,6 +3955,7 @@ Label_060A: End If Dim tx As Integer = px Dim ty As Integer = py + movedInLastTick = True Select Case w Case WalkDirection.north py += 1 @@ -4174,7 +4034,7 @@ Label_060A: Me.DoIfInWater() Me.RemoteControlMissile() Me.EndReflector() - Me.ToCloseToMachine() + Me.TooCloseToMachine() Me.DoIfEscapingFromBomb() Me.CountdownMachine() Me.GenHealth() @@ -4187,8 +4047,8 @@ Label_060A: Me.StartMusic() End Sub - Private Sub OOCD(ByRef x As Short, ByRef y As Short) - Dim num As Short + Private Sub OOCD(ByRef x As Integer, ByRef y As Integer) + Dim num As Integer If (Me.BGrid(x, y) = Me.ClosedDoor) Then num = 0 DXSound.smethod_1(Me.OpenDoorSound, True, False, x, y, num) @@ -4199,7 +4059,7 @@ Label_060A: Me.AllThingReplace(x, y, Me.ClosedDoor) If ((x = Me.px) And (y = Me.py)) Then num = 100 - Dim challID As Short = 0 + Dim challID As Integer = 0 Me.ReflectHit(num, challID) End If End If @@ -4209,22 +4069,22 @@ Label_060A: If keyDownDisabled() Then Exit Sub End If - Dim num As Short + Dim num As Integer Me.OOCD(Me.px, Me.py) If ((Me.px - 1) > 0) Then - num = CShort((Me.px - 1)) + num = ((Me.px - 1)) Me.OOCD(num, Me.py) End If If ((Me.px + 1) < Me.x) Then - num = CShort((Me.px + 1)) + num = ((Me.px + 1)) Me.OOCD(num, Me.py) End If If ((Me.py - 1) > 0) Then - num = CShort((Me.py - 1)) + num = ((Me.py - 1)) Me.OOCD(Me.px, num) End If If ((Me.py + 1) < Me.y) Then - num = CShort((Me.py + 1)) + num = ((Me.py + 1)) Me.OOCD(Me.px, num) End If End Sub @@ -4234,8 +4094,8 @@ Label_060A: Exit Sub End If Dim str As String - Dim gX As Short - Dim gY As Short + Dim gX As Integer + Dim gY As Integer Dim flag As Boolean Me.NNumber.Stop() Me.NStop = False @@ -4406,13 +4266,13 @@ Label_060A: Private Sub ProjectControl() If Me.IsLaunchingControl Then - If (Me.ASubs(8) >= 2) Then - Me.ASubs(8) = 0 - If (CShort((Me.py + Me.DisControl)) > Me.y) Then + If (controlLaunchTracker * frameTime >= 200) Then + controlLaunchTracker = 0 + If (((Me.py + Me.DisControl)) > Me.y) Then THConstVars.CannotDoKeydown = False Me.IsLaunchingControl = False Else - Dim cY As Short = CShort((Me.py + Me.DisControl)) + Dim cY As Integer = ((Me.py + Me.DisControl)) If Me.GetBlock(Me.px, cY) Then THConstVars.CannotDoKeydown = False Me.IsLaunchingControl = False @@ -4420,11 +4280,11 @@ Label_060A: THConstVars.CannotDoKeydown = False Me.IsLaunchingControl = False Else - cY = CShort((Me.py + Me.DisControl)) + cY = ((Me.py + Me.DisControl)) If Me.IsChall(Me.px, cY) Then Me.IsLaunchingControl = False Me.IsControling = True - cY = CShort((Me.py + Me.DisControl)) + cY = ((Me.py + Me.DisControl)) Me.WControl = Me.GetChallID(Me.px, cY) Me.challs(CInt(Me.WControl)).GetReadyForControl() Me.ControlLaunchSound.Stop() @@ -4432,18 +4292,18 @@ Label_060A: Dim bLoopSound As Boolean = False Dim performEffects As Boolean = False cY = 0 - Dim y As Short = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(Me.ControlHitSound, bCloseFirst, bLoopSound, performEffects, cY, y, dVolume, waitTillDone) THConstVars.CannotDoKeydown = False Else - Me.DisControl = CShort((Me.DisControl + 1)) + Me.DisControl = ((Me.DisControl + 1)) End If End If End If Else - Me.ASubs(8) = CShort((Me.ASubs(8) + 1)) + controlLaunchTracker += 1 End If End If End Sub @@ -4451,72 +4311,68 @@ Label_060A: Private Sub ProjectNeedle() If Me.IsLaunchingNeedle Then Dim num4 As Integer - If (Me.ASubs(9) >= 1) Then - Me.ASubs(9) = 0 + If (needleTracker * frameTime >= 100) Then + needleTracker = 0 If (Me.DisNeedle > 10) Then Me.IsLaunchingNeedle = False THConstVars.CannotDoKeydown = False Else - Dim cY As Short = CShort((Me.py + Me.DisNeedle)) + Dim cY As Integer = ((Me.py + Me.DisNeedle)) If Me.GetBlock(Me.px, cY) Then THConstVars.CannotDoKeydown = False Me.IsLaunchingNeedle = False Me.NeedleLaunchSound.Stop() Else - cY = CShort((Me.py + Me.DisNeedle)) + cY = ((Me.py + Me.DisNeedle)) If Me.IsChall(Me.px, cY) Then - cY = CShort((Me.py + Me.DisNeedle)) - Dim challID As Short = Me.GetChallID(Me.px, cY) + cY = ((Me.py + Me.DisNeedle)) + Dim challID As Integer = Me.GetChallID(Me.px, cY) Me.IsLaunchingNeedle = False Me.NeedleLaunchSound.Stop() Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = False Dim performEffects As Boolean = False cY = 0 - Dim y As Short = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(Me.NeedleHitSound, bCloseFirst, bLoopSound, performEffects, cY, y, dVolume, waitTillDone) Me.challs(challID).IsPoisoned = True If Not Me.challs(challID).IsMaster Then num4 = challID - Me.challs(num4).NumOfNeedles = CShort((Me.challs(num4).NumOfNeedles + 1)) + Me.challs(num4).NumOfNeedles = ((Me.challs(num4).NumOfNeedles + 1)) Else Me.challs(challID).NumOfNeedles = 1 End If y = 5 - Me.HarmChall(y, Me.px, CShort((Me.py + Me.DisNeedle))) + Me.HarmChall(y, Me.px, ((Me.py + Me.DisNeedle))) THConstVars.CannotDoKeydown = False Else - Me.DisNeedle = CShort((Me.DisNeedle + 1)) + Me.DisNeedle = ((Me.DisNeedle + 1)) End If End If End If Else - num4 = 9 - Me.ASubs(9) = CShort((Me.ASubs(9) + 1)) + needleTracker += 1 End If End If End Sub - Public Sub ReflectHit(ByRef amount As Short, ByRef Optional ChallID As Short = 0) - Dim num2 As Short + Public Sub ReflectHit(ByRef amount As Integer, ByRef Optional ChallID As Integer = 0) + Dim num2 As Integer Dim flag4 As Boolean If Me.DoingReflector Then Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = False Dim performEffects As Boolean = False - Dim x As Short = 0 + Dim x As Integer = 0 num2 = 0 Dim dVolume As String = "" flag4 = False DXSound.PlaySound(Me.ShieldSound, bCloseFirst, bLoopSound, performEffects, x, num2, dVolume, flag4) Else Me.SubHealth(amount) - If (Me.h <= 0) Then - flag4 = False - Me.CharDied(flag4) - Else + If Me.h > 0 Then num2 = 0 DXSound.smethod_1(Me.CharHitSound, True, False, Me.px, Me.py, num2) End If @@ -4525,118 +4381,24 @@ Label_060A: Private Sub reg() Me.EnableInFull() - If 1 = 1 Then - Return - End If - Dim flag As Boolean - Me.NNumber.Stop() - Dim iD As String = "" - Dim productReg As String = THReg.GetProductReg(iD) - Dim str As String = Interaction.GetSetting(Addendums.AppTitle, "Config", "Reg", "") - If (str = "") Then - flag = False - Me.NLS((DXSound.string_0 & "\reg1.wav"), flag) - Interaction.MsgBox(("Welcome to " & Addendums.AppTitle & "! On the next screen you will be asked to enter your registration information. If you do not have a registration, you may leave the field blank to run a demo of the game."), MsgBoxStyle.Information, "Registration") - Me.NNumber.Stop() - flag = False - Me.NLS((DXSound.string_0 & "\reg3.wav"), flag) - str = Interaction.InputBox("Enter your registration code exactly as it was given to you.", "Registration", "", -1, -1) - If (str = "") Then - Me.DisableInDemo() - Me.NNumber.Stop() - Return - End If - str = Strings.LCase(str) - End If - If (productReg = str) Then - Me.EnableInFull() - - If (Interaction.GetSetting(Addendums.AppTitle, "Config", "Reg", "") = "") Then - Me.NNumber.Stop() - Interaction.SaveSetting(Addendums.AppTitle, "Config", "Reg", str) - flag = False - Me.NLS((DXSound.string_0 & "\reg5.wav"), flag) - Interaction.MsgBox("Registration successful.", MsgBoxStyle.Information, "Registration") - End If - Else - Me.NNumber.Stop() - flag = False - Me.NLS((DXSound.string_0 & "\reg4.wav"), flag) - Me.DisableInDemo() - Interaction.MsgBox("Invalid registration; the game will continue to run in demo mode.", MsgBoxStyle.Information, "Registration") - End If - End Sub - - Private Sub RegProg_getid_click() - Dim productID As String - Dim flag As Boolean - Me.NNumber.Stop() - - If (Interaction.GetSetting(Addendums.AppTitle, "Config", "Username", "") = "") Then - flag = False - Me.NLS((DXSound.string_0 & "\mnureg2a.wav"), flag) - productID = Interaction.InputBox("Enter your name (first and last.) Do not worry about upper or lower-case.", "Registration", "", -1, -1) - If (productID = "") Then - Me.RegSound.Stop() - Return - End If - Interaction.SaveSetting(Addendums.AppTitle, "Config", "Username", Strings.LCase(productID)) - End If - productID = THReg.GetProductID - Addendums.WriteToClipboard(productID) - Me.NNumber.Stop() - flag = False - Me.NLS((DXSound.string_0 & "\mnureg2b.wav"), flag) - Interaction.MsgBox(("Your product ID has been copied to the clipboard. The ID is " & productID & "."), MsgBoxStyle.Exclamation, "Registration") - Me.NNumber.Stop() - End Sub - - Private Sub RegProg_help_click() - Me.NNumber.Stop() - Dim nWait As Boolean = False - Me.NLS((DXSound.string_0 & "\mnureg1.wav"), nWait) - Interaction.MsgBox(("To register " & Addendums.AppTitle & ", click Registration\get product ID... Here, enter your name, first and last. You will receive your product ID; this is the information you shall send to BPCPrograms SD whereupon you will receive your registration code."), MsgBoxStyle.Information, "Registration Help") - Me.NNumber.Stop() - End Sub - - Private Sub RegProg_reg_click() - Me.reg() - End Sub - - Private Sub RegProg_removereg_click() - Me.NNumber.Stop() - Dim nWait As Boolean = False - Me.NLS((DXSound.string_0 & "\mnureg4.wav"), nWait) - Dim num As Short = CShort(Interaction.MsgBox("Removing your registration will cause all features available only in the full version to be disabled. It is recommended you do not perform this step unless you have purchased a wrong key or problems with the registry and/or human tampering have caused an invalid registration to be checked on every execution of this game. If an upgrade of this game contains a change in the registration algorithm causing your current registration to be checked false, removing the registration data is the only way to repair this problem. Are you sure you want to remove your registration information?", (MsgBoxStyle.Question Or MsgBoxStyle.YesNo), "Remove Registration")) - If (num = 6) Then - If (Interaction.GetSetting(Addendums.AppTitle, "Config", "Username", "") <> "") Then - Interaction.DeleteSetting(Addendums.AppTitle, "Config", "Username") - End If - If (Interaction.GetSetting(Addendums.AppTitle, "Config", "Reg", "") <> "") Then - Interaction.DeleteSetting(Addendums.AppTitle, "Config", "Reg") - End If - Me.IsFull = False - Me.DisableInDemo() - End If - Me.NNumber.Stop() End Sub Private Sub RemoteControlMissile() If Me.IsDoingGMissile Then - If (Me.GCount >= (Me.GSpeed * 5)) Then + If (Me.GCount * frameTime >= (Me.GSpeed * 1000)) Then Me.GCount = 0 Me.Grid(Me.GX, Me.GY) = Me.BGrid(Me.GX, Me.GY) If (Me.GFront = 0) Then - Me.GY = CShort((Me.GY + 1)) + Me.GY = ((Me.GY + 1)) End If If (Me.GFront = 90) Then - Me.GX = CShort((Me.GX + 1)) + Me.GX = ((Me.GX + 1)) End If If (Me.GFront = 180) Then - Me.GY = CShort((Me.GY - 1)) + Me.GY = ((Me.GY - 1)) End If If (Me.GFront = 270) Then - Me.GX = CShort((Me.GX - 1)) + Me.GX = ((Me.GX - 1)) End If If ((((Me.GX < 1) Or (Me.GX > Me.x)) Or (Me.GY < 1)) Or (Me.GY > Me.y)) Then Me.IsDoingGMissile = False @@ -4644,7 +4406,7 @@ Label_060A: Me.IsDoingGMissile = False Me.GExplodeMissile() Else - Dim z As Short = 0 + Dim z As Integer = 0 DXSound.smethod_1(Me.directSoundSecondaryBuffer8_3, True, False, Me.GX, Me.GY, z) If (Me.Grid(Me.GX, Me.GY) = Me.MineGuard) Then Me.GExplodeMissile() @@ -4656,20 +4418,20 @@ Label_060A: Me.BlewUpMineControl = True Me.Grid(Me.GX, Me.GY) = Me.Water Me.BGrid(Me.GX, Me.GY) = Me.Water - Dim x As Short = Me.x - Dim i As Short = 1 + Dim x As Integer = Me.x + Dim i As Integer = 1 Do While (i <= x) - Dim num4 As Short = CShort(Math.Round(Conversion.Int(CDbl((CDbl(Me.y) / 2))))) - Dim j As Short = 1 + Dim num4 As Integer = (Math.Round(Conversion.Int(CDbl((CDbl(Me.y) / 2))))) + Dim j As Integer = 1 Do While (j <= num4) If (((Me.BGrid(i, j) = Me.Mine) Or (Me.BGrid(i, j) = Me.MineGuard)) Or (Me.BGrid(i, j) = Me.MineControl)) Then Me.Grid(i, j) = Me.Water Me.BGrid(i, j) = Me.Water End If Application.DoEvents() - j = CShort((j + 1)) + j = ((j + 1)) Loop - i = CShort((i + 1)) + i = ((i + 1)) Loop str = "r4.wav" flag = False @@ -4682,7 +4444,7 @@ Label_060A: Dim bLoopSound As Boolean = False Dim performEffects As Boolean = False z = 0 - Dim y As Short = 0 + Dim y As Integer = 0 str = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(Me.directSoundSecondaryBuffer8_4, flag, bLoopSound, performEffects, z, y, str, waitTillDone) @@ -4690,7 +4452,7 @@ Label_060A: End If End If Else - Me.GCount = CShort((Me.GCount + 1)) + Me.GCount = ((Me.GCount + 1)) End If End If End Sub @@ -4711,37 +4473,37 @@ Label_060A: Case "gun" bullets = Me.Bullets Me.VoiceNumber(bullets) - Me.Bullets = CShort(bullets) + Me.Bullets = (bullets) Exit Select Case "sword" bullets = Me.Swrd Me.VoiceNumber(bullets) - Me.Swrd = CShort(bullets) + Me.Swrd = (bullets) Exit Select Case "bombs" bullets = Me.bombs Me.VoiceNumber(bullets) - Me.bombs = CShort(bullets) + Me.bombs = (bullets) Exit Select Case "laser" bullets = Me.ALaser Me.VoiceNumber(bullets) - Me.ALaser = CShort(bullets) + Me.ALaser = (bullets) Exit Select Case "gmissile" bullets = Me.short_2 Me.VoiceNumber(bullets) - Me.short_2 = CShort(bullets) + Me.short_2 = (bullets) Exit Select Case "reflector" bullets = Me.short_3 Me.VoiceNumber(bullets) - Me.short_3 = CShort(bullets) + Me.short_3 = (bullets) Exit Select Case "control" bullets = Me.AControl Me.VoiceNumber(bullets) - Me.AControl = CShort(bullets) + Me.AControl = (bullets) Exit Select End Select End If @@ -4759,8 +4521,8 @@ Label_060A: Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = False Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 + Dim x As Integer = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(Me.TeleportSound, bCloseFirst, bLoopSound, performEffects, x, y, dVolume, waitTillDone) @@ -4833,53 +4595,53 @@ Label_060A: Me.NStop = False Dim px As Long = Me.px Me.VoiceNumber(px) - Me.px = CShort(px) + Me.px = (px) If Not Me.NStop Then Me.NumWait() If Not Me.NStop Then px = Me.py Me.VoiceNumber(px) - Me.py = CShort(px) + Me.py = (px) Me.NStop = True End If End If End Sub - Private Function ScanForItem(ByRef Range As Short, ByRef thing As Short, ByRef Optional replaceIt As Short = 0) As Boolean + Private Function ScanForItem(ByRef Range As Integer, ByRef thing As Integer, ByRef Optional replaceIt As Integer = 0) As Boolean Dim flag As Boolean Dim flag2 As Boolean Dim flag3 As Boolean - Dim num2 As Short = Range - Dim i As Short = 0 + Dim num2 As Integer = Range + Dim i As Integer = 0 Do While (i <= num2) - If ((((CShort((Me.px - i)) >= 1) And (CShort((Me.px + i)) <= Me.x)) And (CShort((Me.py + i)) <= Me.y)) And (CShort((Me.py - i)) >= 1)) Then - If (Me.Grid(CShort((Me.px + i)), Me.py) = thing) Then + If ((((((Me.px - i)) >= 1) And (((Me.px + i)) <= Me.x)) And (((Me.py + i)) <= Me.y)) And (((Me.py - i)) >= 1)) Then + If (Me.Grid(((Me.px + i)), Me.py) = thing) Then flag = True If (Not replaceIt = 0) Then - Me.Grid(CShort((Me.px + i)), Me.py) = replaceIt + Me.Grid(((Me.px + i)), Me.py) = replaceIt End If End If - If (Me.Grid(Me.px, CShort((Me.py + i))) = thing) Then + If (Me.Grid(Me.px, ((Me.py + i))) = thing) Then flag2 = True If (Not replaceIt = 0) Then - Me.Grid(Me.px, CShort((Me.py + i))) = replaceIt + Me.Grid(Me.px, ((Me.py + i))) = replaceIt End If End If - If (Me.Grid(CShort((Me.px - i)), Me.py) = thing) Then + If (Me.Grid(((Me.px - i)), Me.py) = thing) Then flag = True If (Not replaceIt = 0) Then - Me.Grid(CShort((Me.px - i)), Me.py) = replaceIt + Me.Grid(((Me.px - i)), Me.py) = replaceIt End If End If - If (Me.Grid(Me.px, CShort((Me.py - i))) = thing) Then + If (Me.Grid(Me.px, ((Me.py - i))) = thing) Then flag2 = True If (Not replaceIt = 0) Then - Me.Grid(Me.px, CShort((Me.py - i))) = replaceIt + Me.Grid(Me.px, ((Me.py - i))) = replaceIt End If End If End If - i = CShort((i + 1)) + i = ((i + 1)) Loop If (flag And flag2) Then flag3 = True @@ -4888,7 +4650,7 @@ Label_060A: End Function Private Sub SetC() - Dim num As Short + Dim num As Integer If Me.IsControling Then num = 0 DXSound.SetCoordinates(Me.challs(CInt(Me.WControl)).x, Me.challs(CInt(Me.WControl)).y, num) @@ -4901,23 +4663,23 @@ Label_060A: Private Sub SetChalls() Me.challs = New chall((Me.ChallAmount + 1) - 1) {} - Dim challAmount As Short = Me.ChallAmount - Dim i As Short = 1 + Dim challAmount As Integer = Me.ChallAmount + Dim i As Integer = 1 Do While (i <= challAmount) Dim flag As Boolean Me.challs(i) = New chall Do While Not flag - Dim px As Short = CShort(Math.Round(CDbl((1.0! + Conversion.Int(CSng((Me.x * VBMath.Rnd))))))) - Dim py As Short = CShort(Math.Round(CDbl((1.0! + Conversion.Int(CSng((Me.y * VBMath.Rnd))))))) + Dim px As Integer = (Math.Round(CDbl((1.0! + Conversion.Int(CSng((Me.x * VBMath.Rnd))))))) + Dim py As Integer = (Math.Round(CDbl((1.0! + Conversion.Int(CSng((Me.y * VBMath.Rnd))))))) If ((((px < 3) Or (px > (Me.x - 2))) Or (py < 3)) Or (py > (Me.y - 2))) Then flag = False Else - Dim num4 As Short = Me.BGrid(px, py) + Dim num4 As Integer = Me.BGrid(px, py) If (((((((num4 <> Me.ClosedDoor) And (num4 <> Me.OpenDoor)) And (num4 <> Me.LockedDoor)) And (num4 <> Me.Water)) And (num4 <> Me.Wall)) And (num4 <> Me.Mine)) And (num4 <> Me.MineGuard)) Then flag = True - Dim cHealth As Short = 50 - Dim s As Short = CShort(Math.Round(CDbl((1.0! + Conversion.Int(CSng((2.0! * VBMath.Rnd))))))) - Dim t As Short = CShort(Math.Round(CDbl((1.0! + Conversion.Int(CSng((3.0! * VBMath.Rnd))))))) + Dim cHealth As Integer = 50 + Dim s As Integer = (Math.Round(CDbl((1.0! + Conversion.Int(CSng((2.0! * VBMath.Rnd))))))) + Dim t As Integer = (Math.Round(CDbl((1.0! + Conversion.Int(CSng((3.0! * VBMath.Rnd))))))) Dim dead As Boolean = False Me.challs(i).init(px, py, i, cHealth, s, t, dead) End If @@ -4925,15 +4687,15 @@ Label_060A: Loop flag = False Application.DoEvents() - i = CShort((i + 1)) + i = ((i + 1)) Loop End Sub - Private Sub SetWeapon(ByRef WName As String, ByRef Optional pos As Short = 0) + Private Sub SetWeapon(ByRef WName As String, ByRef Optional pos As Integer = 0) If (pos = 0) Then - Dim num As Short + Dim num As Integer Do While (Me.Weapons(num) <> "") - num = CShort((num + 1)) + num = ((num + 1)) If (Me.Weapons(num) = WName) Then Return End If @@ -4948,8 +4710,8 @@ Label_060A: Dim flag As Boolean Dim flag2 As Boolean Dim flag3 As Boolean - Dim num2 As Short - Dim num3 As Short + Dim num2 As Integer + Dim num3 As Integer Dim str As String Dim flag4 As Boolean If (Me.Bullets <= 0) Then @@ -4971,10 +4733,10 @@ Label_060A: flag = False DXSound.PlaySound(Me.GunSound, flag4, flag3, flag2, num3, num2, str, flag) If Not Me.UnlimitedBullets Then - Me.Bullets = CShort((Me.Bullets - 1)) + Me.Bullets = ((Me.Bullets - 1)) End If If Me.IsChall(Me.px, Me.py) Then - Dim amount As Short = CShort(Math.Round(CDbl((11.0! + Conversion.Int(CSng((5.0! * VBMath.Rnd))))))) + Dim amount As Integer = (Math.Round(CDbl((11.0! + Conversion.Int(CSng((5.0! * VBMath.Rnd))))))) Me.HarmChall(amount, 0, 0) End If End If @@ -4984,8 +4746,8 @@ Label_060A: Dim flag As Boolean Dim flag2 As Boolean Dim flag3 As Boolean - Dim num2 As Short - Dim num3 As Short + Dim num2 As Integer + Dim num3 As Integer Dim str As String Dim flag4 As Boolean If (Me.ALaser <= 0) Then @@ -5007,10 +4769,10 @@ Label_060A: flag = False DXSound.PlaySound(Me.LaserGunSound, flag4, flag3, flag2, num3, num2, str, flag) If Not Me.UnlimitedBullets Then - Me.ALaser = CShort((Me.ALaser - 1)) + Me.ALaser = ((Me.ALaser - 1)) End If If Me.IsChall(Me.px, Me.py) Then - Dim amount As Short = CShort(Math.Round(CDbl((11.0! + Conversion.Int(CSng((100.0! * VBMath.Rnd))))))) + Dim amount As Integer = (Math.Round(CDbl((11.0! + Conversion.Int(CSng((100.0! * VBMath.Rnd))))))) Me.HarmChall(amount, 0, 0) End If End If @@ -5019,11 +4781,11 @@ Label_060A: Public Sub ShutDown() THConstVars.IsShuttingDown = True If Me.HasDoneInit Then - Dim challAmount As Short = Me.ChallAmount - Dim i As Short = 1 + Dim challAmount As Integer = Me.ChallAmount + Dim i As Integer = 1 Do While (i <= challAmount) Me.challs(i) = Nothing - i = CShort((i + 1)) + i = ((i + 1)) Loop DXSound.directSound3DListener8_0 = Nothing DXSound.objDS = Nothing @@ -5036,14 +4798,14 @@ Label_060A: Private Sub snake() If (Me.Swrd > 0) Then If Not Me.UnlimitedBullets Then - Me.Swrd = CShort((Me.Swrd - 1)) + Me.Swrd = ((Me.Swrd - 1)) End If Me.Grid(Me.px, Me.py) = 1 Else - Dim num As Short = CShort(Math.Round(CDbl((1.0! + Conversion.Int(CSng((2.0! * VBMath.Rnd))))))) + Dim num As Integer = (Math.Round(CDbl((1.0! + Conversion.Int(CSng((2.0! * VBMath.Rnd))))))) If (num = 2) Then - Dim amount As Short = 5 - Dim challID As Short = 0 + Dim amount As Integer = 5 + Dim challID As Integer = 0 Me.ReflectHit(amount, challID) End If End If @@ -5053,8 +4815,8 @@ Label_060A: Dim flag As Boolean Dim flag2 As Boolean Dim flag3 As Boolean - Dim num As Short - Dim num2 As Short + Dim num As Integer + Dim num2 As Integer Dim str As String Dim flag4 As Boolean If ((Me.NumAlert > 0) And Not Me.IsFightingLast) Then @@ -5115,50 +4877,50 @@ Label_060A: DXSound.PlaySound(Me.FinalDuelSound, flag4, flag3, flag2, num2, num, str, flag) End If ElseIf (Not Me.FinalDuelSound Is Nothing) Then - Me.FinalDuelSound.Stop + Me.FinalDuelSound.Stop() Me.FinalDuelSound = Nothing End If End Sub - Private Sub StartTimer() + Private Sub updateFrame() Try - Dim num As Short - While (True) - performActions() - If ((Not ((THConstVars.CannotDoKeydown And Not Me.IsLaunchingControl) And Not Me.IsLaunchingNeedle) AndAlso Not Me.IsInPauseState) AndAlso Me.NStop) Then - Me.OMove_Tick() - End If - THConstVars.MWait(10) - num = CShort((num + 1)) - Select Case THConstVars.Difficulty - Case 1.0! - If (num >= 100) Then - num = 0 - Me.EMove_Tick() - End If - Exit Select - Case 2.0! - If (num >= 60) Then - num = 0 - Me.EMove_Tick() - End If - Exit Select - Case 3.0! - If (num >= 40) Then - num = 0 - Me.EMove_Tick() - End If - Exit Select - Case 4.0! - If (num >= 10) Then - num = 0 - EMove_Tick() - End If - Exit Select - End Select - End While + System.Diagnostics.Debug.WriteLine("timer: before performaction") + performActions() + System.Diagnostics.Debug.WriteLine("timer: after performaction") + If ((Not ((THConstVars.CannotDoKeydown And Not Me.IsLaunchingControl) And Not Me.IsLaunchingNeedle) AndAlso Not Me.IsInPauseState)) Then + System.Diagnostics.Debug.WriteLine("timer: ok to execute oMove_tick") + Me.OMove_Tick() + End If + frameTracker += 1 + Select Case THConstVars.Difficulty + Case 1.0! + If (frameTracker >= 100) Then + frameTracker = 0 + Me.EMove_Tick() + End If + Exit Select + Case 2.0! + If (frameTracker >= 60) Then + frameTracker = 0 + Me.EMove_Tick() + End If + Exit Select + Case 3.0! + If (frameTracker >= 40) Then + frameTracker = 0 + Me.EMove_Tick() + End If + Exit Select + Case 4.0! + If (frameTracker >= 10) Then + frameTracker = 0 + EMove_Tick() + End If + Exit Select + End Select + Me.CharDied(False) ' If char is dead, will play lose sound. Also responsible for low health notification Catch e As Exception - THConstVars.handleException(e) + THConstVars.handleException(e, Timer1) End Try End Sub @@ -5181,7 +4943,7 @@ Label_060A: Else h = Me.h Me.VoiceNumber(h) - Me.h = CShort(h) + Me.h = (h) If Me.NStop Then Return End If @@ -5192,15 +4954,18 @@ Label_060A: h = Me.Points Me.VoiceNumber(h) Me.Points = CInt(h) - Me.NumWait + Me.NumWait() + If Not Me.NStop Then nWait = True Me.NLS((DXSound.string_0 & "\nstatus3.wav"), nWait) - Me.NumWait + Me.NumWait() + If Not Me.NStop Then nWait = True Me.ReportAmunition(nWait) - Me.NumWait + Me.NumWait() + If Not Me.NStop Then nWait = True Me.NLS((DXSound.string_0 & "\nstatus4.wav"), nWait) @@ -5211,7 +4976,8 @@ Label_060A: h = Me.ch Me.VoiceNumber(h) Me.ch = CInt(h) - Me.NumWait + Me.NumWait() + If Not Me.NStop Then If (Me.ch = 1) Then nWait = True @@ -5221,7 +4987,7 @@ Label_060A: Me.NLS((DXSound.string_0 & "\nstatus6s.wav"), nWait) End If If Not Me.NStop Then - Me.position + Me.position() End If End If End If @@ -5234,19 +5000,20 @@ Label_060A: End Sub Private Sub StopMusic() - Me.DuelSound.Stop - Me.BackgroundSound.Stop + Me.DuelSound.Stop() + Me.BackgroundSound.Stop() + If Me.IsFightingLast Then - Me.FinalDuelSound.Stop + Me.FinalDuelSound.Stop() End If End Sub Private Sub StopTimer() End Sub - Public Sub SubHealth(ByRef ASub As Short) + Public Sub SubHealth(ByRef ASub As Integer) If Not Me.UnlimitedHealth Then - Me.h = CShort((Me.h - ASub)) + Me.h = ((Me.h - ASub)) End If End Sub @@ -5255,19 +5022,19 @@ Label_060A: Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = False Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 + Dim x As Integer = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(Me.SwingSwordSound, bCloseFirst, bLoopSound, performEffects, x, y, dVolume, waitTillDone) If Me.IsChall(Me.px, Me.py) Then - Dim num2 As Short = CShort(Math.Round(CDbl(VBMath.Rnd))) + Dim num2 As Integer = (Math.Round(CDbl(VBMath.Rnd))) If (num2 <= Me.Accuracy) Then - Me.Accuracy = CShort(Math.Round(CDbl((Me.Accuracy + ((11.0! + Conversion.Int(CSng((10.0! * VBMath.Rnd)))) / 1000.0!))))) - Dim amount As Short = CShort(Math.Round(CDbl(((11.0! + Conversion.Int(CSng((10.0! * VBMath.Rnd)))) * Me.Swrd)))) + Me.Accuracy = (Math.Round(CDbl((Me.Accuracy + ((11.0! + Conversion.Int(CSng((10.0! * VBMath.Rnd)))) / 1000.0!))))) + Dim amount As Integer = (Math.Round(CDbl(((11.0! + Conversion.Int(CSng((10.0! * VBMath.Rnd)))) * Me.Swrd)))) THConstVars.CannotDoKeydown = True Do While (Me.SwingSwordSound.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING) - Application.DoEvents + Application.DoEvents() Loop THConstVars.CannotDoKeydown = False Me.HarmChall(amount, 0, 0) @@ -5280,7 +5047,7 @@ Label_060A: Return THConstVars.CannotDoKeydown Or Me.IsInMenu End Function - Private Sub SwitchToWeapon(ByRef pos As Short) + Private Sub SwitchToWeapon(ByRef pos As Integer) If keyDownDisabled() Then Exit Sub End If @@ -5331,20 +5098,20 @@ Label_060A: End Sub Private Sub Sword() - Me.grid(Me.px, Me.py) = 1 - Dim num As Short = CShort(Math.Round(CDbl((1! + Conversion.Int(CSng((2! * VBMath.Rnd))))))) + Me.Grid(Me.px, Me.py) = 1 + Dim num As Integer = (Math.Round(CDbl((1.0! + Conversion.Int(CSng((2.0! * VBMath.Rnd))))))) If (num = 1) Then - Me.h = CShort((Me.h + 5)) + Me.h = ((Me.h + 5)) Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = False Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 + Dim x As Integer = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(Me.PickUpHealthSound, bCloseFirst, bLoopSound, performEffects, x, y, dVolume, waitTillDone) Else - Me.Swrd = CShort((Me.Swrd + 1)) + Me.Swrd = ((Me.Swrd + 1)) End If End Sub @@ -5359,30 +5126,30 @@ Label_060A: Dim bCloseFirst As Boolean = False Dim bLoopSound As Boolean = True Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 + Dim x As Integer = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(Me.TargetSound, bCloseFirst, bLoopSound, performEffects, x, y, dVolume, waitTillDone) Else - Me.TargetSound.Stop + Me.TargetSound.Stop() End If End Sub - Public Sub ThingReplace(ByRef x As Short, ByRef y As Short, ByRef thing As Short) - Me.grid(x, y) = thing + Public Sub ThingReplace(ByRef x As Integer, ByRef y As Integer, ByRef thing As Integer) + Me.Grid(x, y) = thing End Sub - Private Sub ToCloseToMachine() - If (Me.ASubs(6) >= 10) Then - Me.ASubs(6) = 0 + Private Sub TooCloseToMachine() + If (tooCloseToMachineTracker * frameTime >= 1000) Then + tooCloseToMachineTracker = 0 If (Me.HasTurnedOffMachine AndAlso (((Me.MachineX + &H61) >= Me.px) And ((Me.MachineY + &H61) >= Me.py))) Then THConstVars.CannotDoKeydown = True Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = False Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 + Dim x As Integer = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(Me.AlarmSound, bCloseFirst, bLoopSound, performEffects, x, y, dVolume, waitTillDone) @@ -5396,13 +5163,11 @@ Label_060A: DXSound.PlaySound(Me.BigBlastSound, waitTillDone, performEffects, bLoopSound, y, x, dVolume, bCloseFirst) Me.h = 0 Do While (Me.BigBlastSound.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING) - Application.DoEvents + Application.DoEvents() Loop - waitTillDone = True - Me.CharDied(waitTillDone) End If Else - Me.ASubs(6) = CShort((Me.ASubs(6) + 1)) + tooCloseToMachineTracker += 1 End If End Sub @@ -5443,19 +5208,20 @@ Label_060A: Private Sub TurnGMissile(ByRef dir_Renamed As String) Dim flag As Boolean - Me.NNumber.Stop + Me.NNumber.Stop() + If (dir_Renamed = "l") Then If ((Me.GFront - 90) < 0) Then Me.GFront = 270 Else - Me.GFront = CShort((Me.GFront - 90)) + Me.GFront = ((Me.GFront - 90)) End If End If If (dir_Renamed = "r") Then If ((Me.GFront + 90) > 270) Then Me.GFront = 0 Else - Me.GFront = CShort((Me.GFront + 90)) + Me.GFront = ((Me.GFront + 90)) End If End If If (Me.GFront = 0) Then @@ -5481,8 +5247,8 @@ Label_060A: Dim flag As Boolean Dim flag2 As Boolean Dim flag3 As Boolean - Dim num As Short - Dim num2 As Short + Dim num As Integer + Dim num2 As Integer Dim str As String Dim flag4 As Boolean Me.WaterSound.SetVolume(0) @@ -5496,7 +5262,7 @@ Label_060A: flag4 = False DXSound.PlaySound(Me.WaterSound, flag, flag2, flag3, num, num2, str, flag4) Else - Me.WaterSound.Stop + Me.WaterSound.Stop() End If Me.TargetSound.SetVolume(0) Me.MachineSound.SetVolume(0) @@ -5510,7 +5276,7 @@ Label_060A: flag = False DXSound.PlaySound(Me.MachineSound, flag4, flag3, flag2, num2, num, str, flag) Else - Me.MachineSound.Stop + Me.MachineSound.Stop() End If Me.ReflectorSound.SetVolume(0) If Me.DoingReflector Then @@ -5523,7 +5289,7 @@ Label_060A: flag = False DXSound.PlaySound(Me.ReflectorSound, flag4, flag3, flag2, num2, num, str, flag) Else - Me.ReflectorSound.Stop + Me.ReflectorSound.Stop() End If End Sub @@ -5531,8 +5297,8 @@ Label_060A: Dim flag As Boolean Dim flag2 As Boolean Dim flag3 As Boolean - Dim num As Short - Dim num2 As Short + Dim num As Integer + Dim num2 As Integer Dim str As String Dim flag4 As Boolean If Not Me.IsFull Then @@ -5546,7 +5312,7 @@ Label_060A: DXSound.PlaySound(Me.AccessDeniedSound, flag, flag2, flag3, num, num2, str, flag4) ElseIf ((Me.AControl > 0) AndAlso Not Me.IsLaunchingControl) Then If Not Me.UnlimitedBullets Then - Me.AControl = CShort((Me.AControl - 1)) + Me.AControl = ((Me.AControl - 1)) End If Me.DisControl = 1 THConstVars.CannotDoKeydown = True @@ -5565,15 +5331,15 @@ Label_060A: Private Sub UseReflector() If (Me.short_3 > 0) Then If Not Me.UnlimitedBullets Then - Me.short_3 = CShort((Me.short_3 - 1)) + Me.short_3 = ((Me.short_3 - 1)) End If Me.reflectorTime = 0 Me.DoingReflector = True Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = True Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 + Dim x As Integer = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(Me.ReflectorSound, bCloseFirst, bLoopSound, performEffects, x, y, dVolume, waitTillDone) @@ -5588,7 +5354,10 @@ Label_060A: Exit Sub End If Dim w As String = Strings.LCase(Me.Weapons(Me.WPos)) - If (fireRates(w) = 0 And Me.isFirstPress) Or ((DateTime.Now - fireDate).TotalMilliseconds() >= fireRates(w)) Then + ' If this is a fire-once weapon, and right now the player is not holding down the action button, + ' or this is a rapid-fire weapon. + If fireRates(w) = 0 And Not pressedActionButtonInLastTick Or fireRates(w) > 0 And (DateTime.Now - fireDate).TotalMilliseconds() >= fireRates(w) Then + pressedActionButtonInLastTick = True Select Case w Case "gun" Me.shoot() @@ -5620,7 +5389,8 @@ Label_060A: Dim nWait As Boolean = False Me.NLS((DXSound.NumPath & "\" & string_2 & ".wav"), nWait) If Not Me.NStop Then - Me.NumWait + Me.NumWait() + If Me.NStop Then End If End If @@ -5632,7 +5402,8 @@ Label_060A: flag = False Me.NLS((DXSound.NumPath & "\" & Conversions.ToString(Conversion.Val(CStr(string_2))) & ".wav"), flag) If Not Me.NStop Then - Me.NumWait + Me.NumWait() + If Not Me.NStop Then End If End If @@ -5643,7 +5414,8 @@ Label_060A: If Me.NStop Then Return End If - Me.NumWait + Me.NumWait() + If Me.NStop Then Return End If @@ -5652,7 +5424,8 @@ Label_060A: flag = False Me.NLS((DXSound.NumPath & "\" & Strings.Mid(string_2, 2, 1) & ".wav"), flag) If Not Me.NStop Then - Me.NumWait + Me.NumWait() + If Me.NStop Then End If End If @@ -5665,12 +5438,14 @@ Label_060A: Dim nWait As Boolean = False Me.NLS((DXSound.NumPath & "\" & Strings.Mid(string_2, 1, 1) & ".wav"), nWait) If Not Me.NStop Then - Me.NumWait + Me.NumWait() + If Not Me.NStop Then nWait = False Me.NLS((DXSound.NumPath & "\100.wav"), nWait) If Not Me.NStop Then - Me.NumWait + Me.NumWait() + If Not Me.NStop Then Me.v2(Strings.Mid(string_2, 2, 2)) End If @@ -5687,12 +5462,14 @@ Label_060A: Dim nWait As Boolean = False Me.NLS((DXSound.NumPath & "\" & Strings.Mid(string_2, 1, 1) & ".wav"), nWait) If Not Me.NStop Then - Me.NumWait + Me.NumWait() + If Not Me.NStop Then nWait = False Me.NLS((DXSound.NumPath & "\1000.wav"), nWait) If Not Me.NStop Then - Me.NumWait + Me.NumWait() + If Not Me.NStop Then Me.v3(Strings.Mid(string_2, 2, 3)) End If @@ -5710,7 +5487,8 @@ Label_060A: Dim nWait As Boolean = False Me.NLS((DXSound.NumPath & "\1000.wav"), nWait) If Not Me.NStop Then - Me.NumWait + Me.NumWait() + If Not Me.NStop Then Me.v3(Strings.Mid(string_2, 3, 3)) End If @@ -5721,7 +5499,8 @@ Label_060A: Private Sub v6(ByRef string_2 As String) Me.v3(Strings.Mid(string_2, 1, 3)) If Not Me.NStop Then - Me.NumWait + Me.NumWait() + If Not Me.NStop Then If (Strings.Mid(string_2, 1, 3) <> "000") Then Dim nWait As Boolean = False @@ -5730,7 +5509,8 @@ Label_060A: Return End If End If - Me.NumWait + Me.NumWait() + If Not Me.NStop Then Me.v3(Strings.Mid(string_2, 4, 3)) End If @@ -5745,7 +5525,8 @@ Label_060A: If Me.NStop Then Return End If - Me.NumWait + Me.NumWait() + If Me.NStop Then Return End If @@ -5754,7 +5535,8 @@ Label_060A: If Me.NStop Then Return End If - Me.NumWait + Me.NumWait() + If Me.NStop Then Return End If @@ -5767,12 +5549,14 @@ Label_060A: Private Sub v8(ByRef string_2 As String) Me.v2(Strings.Mid(string_2, 1, 2)) If Not Me.NStop Then - Me.NumWait + Me.NumWait() + If Not Me.NStop Then Dim nWait As Boolean = False Me.NLS((DXSound.NumPath & "\1000000.wav"), nWait) If Not Me.NStop Then - Me.NumWait + Me.NumWait() + If Not Me.NStop Then Me.v6(Strings.Mid(string_2, 3, 6)) End If @@ -5784,12 +5568,14 @@ Label_060A: Private Sub v9(ByRef string_2 As String) Me.v3(Strings.Mid(string_2, 1, 3)) If Not Me.NStop Then - Me.NumWait + Me.NumWait() + If Not Me.NStop Then Dim nWait As Boolean = False Me.NLS((DXSound.NumPath & "\1000000.wav"), nWait) If Not Me.NStop Then - Me.NumWait + Me.NumWait() + If Not Me.NStop Then Me.v6(Strings.Mid(string_2, 4, 6)) End If @@ -5799,10 +5585,10 @@ Label_060A: End Sub Private Sub VoiceNumber(ByRef number As Long) - Me.NNumber.Stop + Me.NNumber.Stop() Dim str As String = Conversion.Str(CLng(number)) str = Strings.Mid(str, 2, (Strings.Len(str) - 1)) - Select Case CShort(Strings.Len(str)) + Select Case (Strings.Len(str)) Case 1 Me.v1(str) Exit Select @@ -5838,26 +5624,26 @@ Label_060A: Me.HasKilledMouse = True Else THConstVars.CannotDoKeydown = True - Me.MuteSounds + Me.MuteSounds() Dim bCloseFirst As Boolean = True Dim bLoopSound As Boolean = False Dim performEffects As Boolean = False - Dim x As Short = 0 - Dim y As Short = 0 + Dim x As Integer = 0 + Dim y As Integer = 0 Dim dVolume As String = "" Dim waitTillDone As Boolean = False DXSound.PlaySound(Me.TeleportSound, bCloseFirst, bLoopSound, performEffects, x, y, dVolume, waitTillDone) Me.WonSound = modDirectShow.LoadMP3((DXSound.SoundPath & "\won.mp3")) Do While (Me.TeleportSound.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING) - Application.DoEvents + Application.DoEvents() Loop - Me.FinalDuelSound.Stop + Me.FinalDuelSound.Stop() dVolume = "r11.wav" waitTillDone = True DXSound.Radio(dVolume, waitTillDone) - Me.WonSound.Run + Me.WonSound.Run() Interaction.MsgBox("Congratulations, you win!", MsgBoxStyle.Exclamation, "End") - Me.ShutDown + Me.ShutDown() End If End Sub @@ -5947,11 +5733,11 @@ Label_060A: ' Fields Private components As IContainer - Private Const SupplyRoomX As Short = &H2E - Private Const SupplyRoomY As Short = 180 - Private Const LookRange As Short = 20 - Private Const Subs As Short = 9 - Private Const KeyTime As Single = 1! + Private Const SupplyRoomX As Integer = &H2E + Private Const SupplyRoomY As Integer = 180 + Private Const LookRange As Integer = 20 + Private Const Subs As Integer = 9 + Private Const KeyTime As Single = 1.0! Private Const MGun As String = "gun" Private Const MSword As String = "sword" Private Const MBomb As String = "bombs" @@ -5959,14 +5745,14 @@ Label_060A: Private Const string_0 As String = "gmissile" Private Const string_1 As String = "reflector" Private Const MControl As String = "control" - Private Const PRange As Short = 5 - Private Const SubLength As Single = 5! + Private Const PRange As Integer = 5 + Private Const SubLength As Single = 5.0! Private ClickSound As DirectSoundSecondaryBuffer8 Private directSoundSecondaryBuffer8_0 As DirectSoundSecondaryBuffer8 Private NLoadSuccessfulSound As DirectSoundSecondaryBuffer8 Private NNumber As DirectSoundSecondaryBuffer8 Private Const Def_Freq As Integer = &HAC44 - Private Const Min_Freq As Short = &H5A3C + Private Const Min_Freq As Integer = &H5A3C Private Const Max_Freq As Integer = &H1831C Private Const Background_Def_Vol As Integer = -1600 Private CurrentFreq As Integer @@ -6041,93 +5827,93 @@ Label_060A: Private Footstep2Sound As DirectSoundSecondaryBuffer8 Public CharDieSound As DirectSoundSecondaryBuffer8 Private SwingSwordSound As DirectSoundSecondaryBuffer8 - Public Treasure As Short - Public Wall As Short - Public Key As Short - Public ControlPanel As Short - Public h As Short - Public x As Short = 400 - Public y As Short = 400 - Private Grid(0 To Me.x, 0 To Me.y) As Short - Private BGrid(0 To Me.x + 1, 0 To Me.y + 1) As Short + Public Treasure As Integer + Public Wall As Integer + Public Key As Integer + Public ControlPanel As Integer + Public h As Integer + Public x As Integer = 400 + Public y As Integer = 400 + Private Grid(0 To Me.x, 0 To Me.y) As Integer + Private BGrid(0 To Me.x + 1, 0 To Me.y + 1) As Integer Private CGrid(0 To Me.x + 1, 0 To Me.y + 1) As Single - Private Swrd As Short - Private Bullets As Short - Private Accuracy As Short - Private IStuff As Short + Private Swrd As Integer + Private Bullets As Integer + Private Accuracy As Integer + Private IStuff As Integer Private stuff As String() - Private KeyX As Short - Private KeyY As Short - Private PanelX As Short - Private PanelY As Short - Private WinX As Short - Private WinY As Short - Public px As Short - Public py As Short + Private KeyX As Integer + Private KeyY As Integer + Private PanelX As Integer + Private PanelY As Integer + Private WinX As Integer + Private WinY As Integer + Public px As Integer + Public py As Integer Public ch As Integer - Private lvl As Short + Private lvl As Integer Private HasKey As Boolean Private WorkedPanel As Boolean - Private bombs As Short + Private bombs As Integer Public Points As Integer Private challs As chall() Public NumAlert As Integer Public ChallNum As Integer - Public challenger As Short + Public challenger As Integer Public isdone As Boolean - Public AllCurrentFights As Short + Public AllCurrentFights As Integer Public HasCalledMore As Boolean Private TeleportsAreClosed As Boolean - Public DetectRange As Short + Public DetectRange As Integer Public IsOnAlarm As Boolean Public UnlimitedHealth As Boolean Public UnlimitedBullets As Boolean Public AppVersion As String - Public HowMany As Short - Public HowManyNum As Short + Public HowMany As Integer + Public HowManyNum As Integer Public IsFightingLast As Boolean - Public RBomb As Short + Public RBomb As Integer Public IsFull As Boolean Private temp As Object Public IsInWater As Boolean - Public WH As Short - Public WDepth As Short + Public WH As Integer + Public WDepth As Integer Public IsResting As Boolean - Public DidNotSwim As Short - Public Water As Short + Public DidNotSwim As Integer + Public Water As Integer Private WarnedOfHealth As Boolean Private WTime As String - Private short_0 As Short - Private SubPX As Short - Private SubPY As Short - Private TX As Short - Private TY As Short + Private short_0 As Integer + Private SubPX As Integer + Private SubPY As Integer + Private TX As Integer + Private TY As Integer Public HasKilledBrutus As Boolean Private Weapons As String() - Private WPos As Short - Private Laser As Short - Private GFront As Short - Public GX As Short - Public GY As Short + Private WPos As Integer + Private Laser As Integer + Private GFront As Integer + Public GX As Integer + Public GY As Integer Private IsDoingGMissile As Boolean - Private Missile As Short - Public short_1 As Short - Public RMissile As Short - Private GSpeed As Short - Private GCount As Short - Public Mine As Short - Private MineControl As Short - Private MineGuard As Short - Private MineX As Short - Private MineY As Short + Private Missile As Integer + Public short_1 As Integer + Public RMissile As Integer + Private GSpeed As Integer + Private GCount As Integer + Public Mine As Integer + Private MineControl As Integer + Private MineGuard As Integer + Private MineX As Integer + Private MineY As Integer Private BlewUpMineControl As Boolean Private NStop As Boolean - Private ALaser As Short - Private short_2 As Short - Private Reflector As Short - Private short_3 As Short + Private ALaser As Integer + Private short_2 As Integer + Private Reflector As Integer + Private short_3 As Integer Public DoingReflector As Boolean - Private RCount As Short + Private RCount As Integer Private TheString As String Private IsInPauseState As Boolean Private HasDoneInit As Boolean @@ -6135,57 +5921,58 @@ Label_060A: Private HasShutDownCard As Boolean Private HasBlownUpMachine As Boolean Private HasTurnedOffMachine As Boolean - Private Machine As Short - Private MachineX As Short - Private MachineY As Short - Public Mouse As Short - Private ExitX As Short - Private ExitY As Short + Private Machine As Integer + Private MachineX As Integer + Private MachineY As Integer + Public Mouse As Integer + Private ExitX As Integer + Private ExitY As Integer Private JustCameFromWater As Boolean - Private test As Short + Private test As Integer Private DisableTeleports As Boolean - Private PassageMarker As Short - Public ClosedDoor As Short - Public OpenDoor As Short + Private PassageMarker As Integer + Public ClosedDoor As Integer + Public OpenDoor As Integer Private IsWaitingForMachine As Boolean Public HasKilledMouse As Boolean Public HasKilledBrutus2 As Boolean Public HasMainKey As Boolean - Public LockedDoor As Short - Private SGen As Short - Private EBomb As Short - Private CMachine As Short - Public ChallAmount As Short - Private MenuPos As Short + Public LockedDoor As Integer + Private SGen As Integer + Private EBomb As Integer + Private CMachine As Integer + Public ChallAmount As Integer + Private MenuPos As Integer Private IsInMenu As Boolean - Private ASubs As Short() Public DefCaption As String Private FileName As String Private HasBeenA As Boolean Private HasBeenB As Boolean Private HasBeenC As Boolean - Private CA As Short + Private CA As Integer Private C As Single() - Public ChallWithKey As Short - Public JamesBrutus As Short + Public ChallWithKey As Integer + Public JamesBrutus As Integer Public IsControling As Boolean - Public SControl As Short - Private AControl As Short + Public SControl As Integer + Private AControl As Integer Public WControl As Long - Private controler As Short + Private controler As Integer Private IsLaunchingControl As Boolean - Private DisControl As Short - Private DisNeedle As Short + Private DisControl As Integer + Private DisNeedle As Integer Private IsLaunchingNeedle As Boolean - Private WNeedle As Short + Private WNeedle As Integer Private IsFirstTimeLoading As Boolean - Private V As Short + Private V As Integer ' How many milliseconds between each fire of this weapon if the fire button is being held down. - Private fireRates As Dictionary(Of String, Integer) = New Dictionary(Of String, Integer) From {{"gun", 100}, {"sword", 50}, {"bombs", 50}, {"laser", 50}, {"missile", 0}, {"reflector", 0}, {"control", 0}} + Private fireRates As Dictionary(Of String, Integer) = New Dictionary(Of String, Integer) From {{"gun", 100}, {"sword", 50}, {"bombs", 0}, {"laser", 500}, {"gmissile", 0}, {"reflector", 0}, {"control", 0}} Private fireDate As DateTime = DateTime.Now Private whichFootstep As Integer Private maxFootsteps As Integer = 2 Private frameTime As Integer = 10 ' Number of ms per frame + Dim movedInLastTick As Boolean = False ' Controls how fast the player can move, and also prevents the rapid-fire of remote missile commands + Dim pressedActionButtonInLastTick As Boolean = False Private pendingKeyUp As Boolean ' In case keyUp fires before keyDown completes Private inKeyDown As Boolean Friend WithEvents ProgressBar1 As ProgressBar @@ -6194,7 +5981,17 @@ Label_060A: Private completedDownload As Boolean Private lastProgress As Integer Private totalSize As Integer = 99047691 + Friend WithEvents Timer1 As Timer Private reflectorTime As Integer + Private frameTracker As Integer = 0 + Private maxDepth As Integer = 30 + Private waterTracker As Integer + Private needleTracker As Integer + Private bombTracker As Integer + Private machineTracker As Integer + Private controlTracker As Integer + Private tooCloseToMachineTracker As Integer + Private controlLaunchTracker As Integer ' The directions the player can swim in Enum SwimDirection north @@ -6231,6 +6028,7 @@ Label_060A: slower normal End Enum + End Class End Namespace diff --git a/th/modDirectShow.vb b/th/modDirectShow.vb index 21d7f6c..4ccd53f 100644 --- a/th/modDirectShow.vb +++ b/th/modDirectShow.vb @@ -9,8 +9,7 @@ Namespace th Public Shared Function LoadMP3(ByRef FileName As String) As IMediaControl Dim control As IMediaControl Dim num2 As Integer - Try - ProjectData.ClearProjectError + Try Dim num As Integer = 2 modDirectShow.imediaControl_0 = New FilgraphManagerClass modDirectShow.imediaControl_0.RenderFile(FileName) @@ -21,271 +20,78 @@ Namespace th modDirectShow.imediaPosition_0 = DirectCast(modDirectShow.imediaControl_0, IMediaPosition) modDirectShow.imediaPosition_0.Rate = 1 modDirectShow.imediaPosition_0.CurrentPosition = 0 - goto Label_00CC - Label_0084: - THConstVars.HandleError - goto Label_00CC - Label_008B: - num2 = -1 - Select Case num - Case 0, 1 - goto Label_00C1 - Case 2 - goto Label_0084 - End Select Catch obj1 As Exception - ProjectData.SetProjectError(DirectCast(obj1, Exception)) - goto Label_008B + THConstVars.handleException(obj1, Nothing) End Try - Label_00C1: - Throw ProjectData.CreateProjectError(-2146828237) - Label_00CC: - If (num2 <> 0) Then - ProjectData.ClearProjectError - End If Return control End Function Public Shared Function PauseMP3() As Boolean - Dim flag As Boolean - Dim num2 As Integer - Try - ProjectData.ClearProjectError - Dim num As Integer = 2 - modDirectShow.imediaControl_0.Stop - flag = True - goto Label_0060 - Label_0016: - flag = False - THConstVars.HandleError - goto Label_0060 - Label_001F: - num2 = -1 - Select Case num - Case 0, 1 - goto Label_0055 - Case 2 - goto Label_0016 - End Select + Try + modDirectShow.imediaControl_0.Stop() Catch obj1 As Exception - ProjectData.SetProjectError(DirectCast(obj1, Exception)) - goto Label_001F + THConstVars.handleException(obj1, Nothing) End Try - Label_0055: - Throw ProjectData.CreateProjectError(-2146828237) - Label_0060: - If (num2 <> 0) Then - ProjectData.ClearProjectError - End If - Return flag + Return True End Function Public Shared Function PlayMP3() As Boolean - Dim flag As Boolean - Dim num2 As Integer - Try - ProjectData.ClearProjectError - Dim num As Integer = 2 - modDirectShow.imediaControl_0.Run - flag = True - goto Label_0060 - Label_0016: - flag = False - THConstVars.HandleError - goto Label_0060 - Label_001F: - num2 = -1 - Select Case num - Case 0, 1 - goto Label_0055 - Case 2 - goto Label_0016 - End Select + Try + modDirectShow.imediaControl_0.Run() Catch obj1 As Exception - ProjectData.SetProjectError(DirectCast(obj1, Exception)) - goto Label_001F + THConstVars.handleException(obj1, Nothing) End Try - Label_0055: - Throw ProjectData.CreateProjectError(-2146828237) - Label_0060: - If (num2 <> 0) Then - ProjectData.ClearProjectError - End If - Return flag + Return True End Function Public Shared Function SetPlayBackBalance(ByRef Balance As Integer) As Boolean - Dim flag As Boolean - Dim num2 As Integer - Try - ProjectData.ClearProjectError - Dim num As Integer = 2 + Try modDirectShow.DSAudio.Balance = Balance - flag = True - goto Label_0062 - Label_0018: - flag = False - THConstVars.HandleError - goto Label_0062 - Label_0021: - num2 = -1 - Select Case num - Case 0, 1 - goto Label_0057 - Case 2 - goto Label_0018 - End Select Catch obj1 As Exception - ProjectData.SetProjectError(DirectCast(obj1, Exception)) - goto Label_0021 + THConstVars.handleException(obj1, Nothing) End Try - Label_0057: - Throw ProjectData.CreateProjectError(-2146828237) - Label_0062: - If (num2 <> 0) Then - ProjectData.ClearProjectError - End If - Return flag + Return True End Function Public Shared Function SetPlayBackSpeed(ByRef Speed As Single) As Boolean - Dim flag As Boolean - Dim num2 As Integer - Try - ProjectData.ClearProjectError - Dim num As Integer = 2 + Try modDirectShow.imediaPosition_0.Rate = CDbl(Speed) - flag = True - goto Label_0063 - Label_0019: - flag = False - THConstVars.HandleError - goto Label_0063 - Label_0022: - num2 = -1 - Select Case num - Case 0, 1 - goto Label_0058 - Case 2 - goto Label_0019 - End Select Catch obj1 As Exception - ProjectData.SetProjectError(DirectCast(obj1, Exception)) - goto Label_0022 + THConstVars.handleException(obj1, Nothing) End Try - Label_0058: - Throw ProjectData.CreateProjectError(-2146828237) - Label_0063: - If (num2 <> 0) Then - ProjectData.ClearProjectError - End If - Return flag + Return True End Function Public Shared Function SetPlayBackVolume(ByRef Volume As Integer) As Boolean - Dim flag As Boolean - Dim num2 As Integer - Try - ProjectData.ClearProjectError - Dim num As Integer = 2 + Try modDirectShow.DSAudio.Volume = (Volume * 40) - flag = True - goto Label_0065 - Label_001B: - flag = False - THConstVars.HandleError - goto Label_0065 - Label_0024: - num2 = -1 - Select Case num - Case 0, 1 - goto Label_005A - Case 2 - goto Label_001B - End Select Catch obj1 As Exception - ProjectData.SetProjectError(DirectCast(obj1, Exception)) - goto Label_0024 + THConstVars.handleException(obj1, Nothing) End Try - Label_005A: - Throw ProjectData.CreateProjectError(-2146828237) - Label_0065: - If (num2 <> 0) Then - ProjectData.ClearProjectError - End If - Return flag + Return True End Function Public Shared Function StopMP3() As Boolean - Dim flag As Boolean - Dim num2 As Integer - Try - ProjectData.ClearProjectError - Dim num As Integer = 2 - modDirectShow.imediaControl_0.Stop + Try + modDirectShow.imediaControl_0.Stop() modDirectShow.imediaPosition_0.CurrentPosition = 0 - flag = True - goto Label_0073 - Label_0029: - flag = False - THConstVars.HandleError - goto Label_0073 - Label_0032: - num2 = -1 - Select Case num - Case 0, 1 - goto Label_0068 - Case 2 - goto Label_0029 - End Select Catch obj1 As Exception - ProjectData.SetProjectError(DirectCast(obj1, Exception)) - goto Label_0032 + THConstVars.handleException(obj1, Nothing) End Try - Label_0068: - Throw ProjectData.CreateProjectError(-2146828237) - Label_0073: - If (num2 <> 0) Then - ProjectData.ClearProjectError - End If - Return flag + Return True End Function Public Shared Function TerminateEngine() As Boolean - Dim flag As Boolean - Dim num2 As Integer - Try - ProjectData.ClearProjectError + Try Dim num As Integer = 2 modDirectShow.DSAudio = Nothing modDirectShow.DSEvent = Nothing modDirectShow.imediaControl_0 = Nothing modDirectShow.imediaPosition_0 = Nothing - flag = True - goto Label_006E - Label_0024: - flag = False - THConstVars.HandleError - goto Label_006E - Label_002D: - num2 = -1 - Select Case num - Case 0, 1 - goto Label_0063 - Case 2 - goto Label_0024 - End Select Catch obj1 As Exception - ProjectData.SetProjectError(DirectCast(obj1, Exception)) - goto Label_002D + THConstVars.handleException(obj1, Nothing) End Try - Label_0063: - Throw ProjectData.CreateProjectError(-2146828237) - Label_006E: - If (num2 <> 0) Then - ProjectData.ClearProjectError - End If - Return flag + Return True End Function