1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-09-27 21:56:19 -04:00

Replaced all system exceptions with OpenDiablo2Exception

This commit is contained in:
Tim Sarbin 2018-12-08 12:08:01 -05:00
parent 0259408601
commit 86547875fd
21 changed files with 106 additions and 57 deletions

View File

@ -46,7 +46,7 @@ namespace OpenDiablo2.Common.Enums
Act5_BaalEntrance = 120, Act5_BaalEntrance = 120,
} }
public class ELevelIdHelper public static class ELevelIdHelper
{ {
public static string GenerateEnum(List<LevelPreset> levelPresets) public static string GenerateEnum(List<LevelPreset> levelPresets)
{ {

View File

@ -0,0 +1,32 @@
/* OpenDiablo 2 - An open source re-implementation of Diablo 2 in C#
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
using System;
namespace OpenDiablo2.Common.Exceptions
{
[Serializable]
public class OpenDiablo2Exception : Exception
{
public OpenDiablo2Exception() { }
public OpenDiablo2Exception(string message) : base(message) { }
public OpenDiablo2Exception(string message, Exception inner) : base(message, inner) { }
protected OpenDiablo2Exception(
System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context) : base(info, context) { }
}
}

View File

@ -4,6 +4,7 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using OpenDiablo2.Common.Enums; using OpenDiablo2.Common.Enums;
using OpenDiablo2.Common.Exceptions;
namespace OpenDiablo2.Common.Models namespace OpenDiablo2.Common.Models
{ {
@ -115,7 +116,7 @@ namespace OpenDiablo2.Common.Models
{ {
var header = Encoding.ASCII.GetString(br.ReadBytes(4)); var header = Encoding.ASCII.GetString(br.ReadBytes(4));
if (header != HEADER_SIGNATURE) if (header != HEADER_SIGNATURE)
throw new ApplicationException($"Unknown header signature '{header}' detected while processing '{Path}'!"); throw new OpenDiablo2Exception($"Unknown header signature '{header}' detected while processing '{Path}'!");
ParseMPQHeader(br); ParseMPQHeader(br);
} }
@ -198,10 +199,10 @@ namespace OpenDiablo2.Common.Models
}; };
if (FormatVersion != eMPQFormatVersion.Format1) if (FormatVersion != eMPQFormatVersion.Format1)
throw new ApplicationException($"Unsupported MPQ format version of {Header.FormatVersion} detected for '{Path}'!"); throw new OpenDiablo2Exception($"Unsupported MPQ format version of {Header.FormatVersion} detected for '{Path}'!");
if (br.BaseStream.Position != Header.HeaderSize) if (br.BaseStream.Position != Header.HeaderSize)
throw new ApplicationException($"Invalid header size detected for '{Path}'. Expected to be at offset {Header.HeaderSize} but we are at offset {br.BaseStream.Position} instead!"); throw new OpenDiablo2Exception($"Invalid header size detected for '{Path}'. Expected to be at offset {Header.HeaderSize} but we are at offset {br.BaseStream.Position} instead!");
br.BaseStream.Seek(Header.BlockTablePos, SeekOrigin.Begin); br.BaseStream.Seek(Header.BlockTablePos, SeekOrigin.Begin);
@ -254,7 +255,7 @@ namespace OpenDiablo2.Common.Models
private static UInt32 HashString(string inputString, UInt32 hashType) private static UInt32 HashString(string inputString, UInt32 hashType)
{ {
if (hashType > MPQ_HASH_FILE_KEY) if (hashType > MPQ_HASH_FILE_KEY)
throw new ApplicationException($"Unknown hash type {hashType} for input string {inputString}"); throw new OpenDiablo2Exception($"Unknown hash type {hashType} for input string {inputString}");
UInt32 seed1 = 0x7FED7FED; UInt32 seed1 = 0x7FED7FED;
UInt32 seed2 = 0xEEEEEEEE; UInt32 seed2 = 0xEEEEEEEE;

View File

@ -3,6 +3,7 @@ using System.Linq;
using System.IO; using System.IO;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using OpenDiablo2.Common.Exceptions;
namespace OpenDiablo2.Common.Models namespace OpenDiablo2.Common.Models
{ {
@ -198,7 +199,7 @@ namespace OpenDiablo2.Common.Models
}; };
if (OptionalDataBits > 0) if (OptionalDataBits > 0)
throw new ApplicationException("Optional bits in DCC data is not currently supported."); throw new OpenDiablo2Exception("Optional bits in DCC data is not currently supported.");
if ((CompressionFlags & 0x2) > 0) if ((CompressionFlags & 0x2) > 0)
EqualCellsBitstreamSize = (int)bm.GetBits(20); EqualCellsBitstreamSize = (int)bm.GetBits(20);
@ -259,25 +260,25 @@ namespace OpenDiablo2.Common.Models
FillPixelBuffer(pixelCodeandDisplacement, equalCellsBitstream, pixelMaskBitstream, encodingTypeBitsream, rawPixelCodesBitstream); FillPixelBuffer(pixelCodeandDisplacement, equalCellsBitstream, pixelMaskBitstream, encodingTypeBitsream, rawPixelCodesBitstream);
// Generate the actual frame pixel data // Generate the actual frame pixel data
GenerateFrames(file, pixelCodeandDisplacement); GenerateFrames(pixelCodeandDisplacement);
// Verify that everything we expected to read was actually read (sanity check)... // Verify that everything we expected to read was actually read (sanity check)...
if (equalCellsBitstream.BitsRead != EqualCellsBitstreamSize) if (equalCellsBitstream.BitsRead != EqualCellsBitstreamSize)
throw new ApplicationException("Did not read the correct number of bits!"); throw new OpenDiablo2Exception("Did not read the correct number of bits!");
if (pixelMaskBitstream.BitsRead != PixelMaskBitstreamSize) if (pixelMaskBitstream.BitsRead != PixelMaskBitstreamSize)
throw new ApplicationException("Did not read the correct number of bits!"); throw new OpenDiablo2Exception("Did not read the correct number of bits!");
if (encodingTypeBitsream.BitsRead != EncodingTypeBitsreamSize) if (encodingTypeBitsream.BitsRead != EncodingTypeBitsreamSize)
throw new ApplicationException("Did not read the correct number of bits!"); throw new OpenDiablo2Exception("Did not read the correct number of bits!");
if (rawPixelCodesBitstream.BitsRead != RawPixelCodesBitstreamSize) if (rawPixelCodesBitstream.BitsRead != RawPixelCodesBitstreamSize)
throw new ApplicationException("Did not read the correct number of bits!"); throw new OpenDiablo2Exception("Did not read the correct number of bits!");
bm.SkipBits(pixelCodeandDisplacement.BitsRead); bm.SkipBits(pixelCodeandDisplacement.BitsRead);
} }
private void GenerateFrames(MPQDCC file, BitMuncher pcd) private void GenerateFrames(BitMuncher pcd)
{ {
var pbIdx = 0; var pbIdx = 0;
@ -552,14 +553,14 @@ namespace OpenDiablo2.Common.Models
var bm = new BitMuncher(data); var bm = new BitMuncher(data);
Signature = bm.GetByte(); Signature = bm.GetByte();
if (Signature != 0x74) if (Signature != 0x74)
throw new ApplicationException("Signature expected to be 0x74 but it is not."); throw new OpenDiablo2Exception("Signature expected to be 0x74 but it is not.");
Version = bm.GetByte(); Version = bm.GetByte();
NumberOfDirections = bm.GetByte(); NumberOfDirections = bm.GetByte();
FramesPerDirection = bm.GetInt32(); FramesPerDirection = bm.GetInt32();
if (bm.GetInt32() != 1) if (bm.GetInt32() != 1)
throw new ApplicationException("This value isn't 1. It has to be 1."); throw new OpenDiablo2Exception("This value isn't 1. It has to be 1.");
var totalSizeCoded = bm.GetInt32(); var totalSizeCoded = bm.GetInt32();
var directionOffsets = new int[NumberOfDirections]; var directionOffsets = new int[NumberOfDirections];

View File

@ -4,6 +4,7 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using OpenDiablo2.Common.Exceptions;
namespace OpenDiablo2.Common.Models namespace OpenDiablo2.Common.Models
{ {
@ -136,7 +137,7 @@ namespace OpenDiablo2.Common.Models
{ {
// 3D isometric block // 3D isometric block
if (block.Length != 256) if (block.Length != 256)
throw new ApplicationException($"Expected exactly 256 bytes of data, but got {block.Length} instead!"); throw new OpenDiablo2Exception($"Expected exactly 256 bytes of data, but got {block.Length} instead!");
int x = 0; int x = 0;
int y = 0; int y = 0;

View File

@ -19,6 +19,7 @@ using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
using System.Text; using System.Text;
using OpenDiablo2.Common.Exceptions;
namespace OpenDiablo2.Common.Models namespace OpenDiablo2.Common.Models
{ {
@ -37,7 +38,7 @@ namespace OpenDiablo2.Common.Models
var br = new BinaryReader(tableStream); var br = new BinaryReader(tableStream);
var wooCheck = Encoding.UTF8.GetString(br.ReadBytes(4)); var wooCheck = Encoding.UTF8.GetString(br.ReadBytes(4));
if (wooCheck != "Woo!") if (wooCheck != "Woo!")
throw new ApplicationException("Error loading font. Missing the Woo!"); throw new OpenDiablo2Exception("Error loading font. Missing the Woo!");
br.ReadBytes(8); br.ReadBytes(8);
while (tableStream.Position < tableStream.Length) while (tableStream.Position < tableStream.Length)

View File

@ -29,6 +29,7 @@
using System; using System;
using System.IO; using System.IO;
using System.Collections; using System.Collections;
using OpenDiablo2.Common.Exceptions;
namespace OpenDiablo2.Common.Models namespace OpenDiablo2.Common.Models
{ {
@ -265,7 +266,7 @@ namespace OpenDiablo2.Common.Models
{ {
int bit = input.ReadBits(1); int bit = input.ReadBits(1);
if (bit == -1) if (bit == -1)
throw new Exception("Unexpected end of file"); throw new OpenDiablo2Exception("Unexpected end of file");
node = bit == 0 ? node.Child0 : node.Child1; node = bit == 0 ? node.Child0 : node.Child1;
} }
@ -384,6 +385,9 @@ namespace OpenDiablo2.Common.Models
current.Next.Prev = current.Prev; current.Next.Prev = current.Prev;
// insert current after prev // insert current after prev
if (prev == null)
throw new OpenDiablo2Exception("Previous frame not defined!");
LinkedNode temp = prev.Next; LinkedNode temp = prev.Next;
current.Next = temp; current.Next = temp;
current.Prev = prev; current.Prev = prev;

View File

@ -1,4 +1,5 @@
using ICSharpCode.SharpZipLib.Zip.Compression.Streams; using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
using OpenDiablo2.Common.Exceptions;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
@ -53,9 +54,9 @@ namespace OpenDiablo2.Common.Models
MPQ.DecryptBlock(blockPositions, blockRecord.EncryptionSeed - 1); MPQ.DecryptBlock(blockPositions, blockRecord.EncryptionSeed - 1);
if (blockPositions[0] != blockpossize) if (blockPositions[0] != blockpossize)
throw new ApplicationException("Decryption failed"); throw new OpenDiablo2Exception("Decryption failed");
if (blockPositions[1] > blockSize + blockpossize) if (blockPositions[1] > blockSize + blockpossize)
throw new ApplicationException("Decryption failed"); throw new OpenDiablo2Exception("Decryption failed");
} }
} }
@ -120,7 +121,7 @@ namespace OpenDiablo2.Common.Models
mpq.fileStream.Seek(mpq.Header.HeaderSize + blockRecord.BlockOffset, SeekOrigin.Begin); mpq.fileStream.Seek(mpq.Header.HeaderSize + blockRecord.BlockOffset, SeekOrigin.Begin);
int read = mpq.fileStream.Read(filedata, 0, filedata.Length); int read = mpq.fileStream.Read(filedata, 0, filedata.Length);
if (read != filedata.Length) if (read != filedata.Length)
throw new ApplicationException("Insufficient data or invalid data length"); throw new OpenDiablo2Exception("Insufficient data or invalid data length");
} }
if (blockSize == blockRecord.FileSize) if (blockSize == blockRecord.FileSize)
@ -204,13 +205,13 @@ namespace OpenDiablo2.Common.Models
mpq.fileStream.Seek(offset, SeekOrigin.Begin); mpq.fileStream.Seek(offset, SeekOrigin.Begin);
int read = mpq.fileStream.Read(data, 0, toread); int read = mpq.fileStream.Read(data, 0, toread);
if (read != toread) if (read != toread)
throw new ApplicationException("Insufficient data or invalid data length"); throw new OpenDiablo2Exception("Insufficient data or invalid data length");
} }
if (blockRecord.IsEncrypted && blockRecord.FileSize > 3) if (blockRecord.IsEncrypted && blockRecord.FileSize > 3)
{ {
if (blockRecord.EncryptionSeed == 0) if (blockRecord.EncryptionSeed == 0)
throw new ApplicationException("Unable to determine encryption key"); throw new OpenDiablo2Exception("Unable to determine encryption key");
encryptionseed = (uint)(blockIndex + blockRecord.EncryptionSeed); encryptionseed = (uint)(blockIndex + blockRecord.EncryptionSeed);
MPQ.DecryptBlock(data, encryptionseed); MPQ.DecryptBlock(data, encryptionseed);
@ -250,14 +251,14 @@ namespace OpenDiablo2.Common.Models
return MpqWavCompression.Decompress(sinput, 1); return MpqWavCompression.Decompress(sinput, 1);
case 0x12: case 0x12:
throw new ApplicationException("LZMA compression is not yet supported"); throw new OpenDiablo2Exception("LZMA compression is not yet supported");
// Combos // Combos
case 0x22: case 0x22:
// TODO: sparse then zlib // TODO: sparse then zlib
throw new ApplicationException("Sparse compression + Deflate compression is not yet supported"); throw new OpenDiablo2Exception("Sparse compression + Deflate compression is not yet supported");
case 0x30: case 0x30:
// TODO: sparse then bzip2 // TODO: sparse then bzip2
throw new ApplicationException("Sparse compression + BZip2 compression is not yet supported"); throw new OpenDiablo2Exception("Sparse compression + BZip2 compression is not yet supported");
case 0x41: case 0x41:
sinput = MpqHuffman.Decompress(sinput); sinput = MpqHuffman.Decompress(sinput);
return MpqWavCompression.Decompress(sinput, 1); return MpqWavCompression.Decompress(sinput, 1);
@ -275,7 +276,7 @@ namespace OpenDiablo2.Common.Models
return MpqWavCompression.Decompress(new MemoryStream(result), 2); return MpqWavCompression.Decompress(new MemoryStream(result), 2);
} }
default: default:
throw new ApplicationException("Compression is not yet supported: 0x" + comptype.ToString("X")); throw new OpenDiablo2Exception("Compression is not yet supported: 0x" + comptype.ToString("X"));
} }
} }

View File

@ -1,4 +1,5 @@
using OpenDiablo2.Common.Enums; using OpenDiablo2.Common.Enums;
using OpenDiablo2.Common.Exceptions;
using OpenDiablo2.Common.Interfaces.Mobs; using OpenDiablo2.Common.Interfaces.Mobs;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -57,7 +58,7 @@ namespace OpenDiablo2.Common.Models.Mobs
{ {
if (!long.TryParse(data[o][i], out long exp)) if (!long.TryParse(data[o][i], out long exp))
{ {
throw new Exception("Could not parse experience number '" + data[o][i] + "'."); throw new OpenDiablo2Exception("Could not parse experience number '" + data[o][i] + "'.");
} }
expperlevel.Add(exp); expperlevel.Add(exp);
} }

View File

@ -80,6 +80,7 @@
<Compile Include="Enums\Mobs\eDamageTypes.cs" /> <Compile Include="Enums\Mobs\eDamageTypes.cs" />
<Compile Include="Enums\Mobs\eMobFlags.cs" /> <Compile Include="Enums\Mobs\eMobFlags.cs" />
<Compile Include="Enums\Mobs\eStatModifierType.cs" /> <Compile Include="Enums\Mobs\eStatModifierType.cs" />
<Compile Include="Exceptions\OpenDiablo2Exception.cs" />
<Compile Include="Interfaces\Drawing\ICharacterRenderer.cs" /> <Compile Include="Interfaces\Drawing\ICharacterRenderer.cs" />
<Compile Include="Interfaces\ICache.cs" /> <Compile Include="Interfaces\ICache.cs" />
<Compile Include="Interfaces\IItemManager.cs" /> <Compile Include="Interfaces\IItemManager.cs" />

View File

@ -3,7 +3,7 @@ using System.Text;
namespace OpenDiablo2.Common namespace OpenDiablo2.Common
{ {
public class StringUtils public static class StringUtils
{ {
public static List<string> SplitIntoLinesWithMaxWidth(string fullSentence, int maxChars) public static List<string> SplitIntoLinesWithMaxWidth(string fullSentence, int maxChars)
{ {

View File

@ -4,6 +4,7 @@ using System.Drawing;
using System.Linq; using System.Linq;
using OpenDiablo2.Common; using OpenDiablo2.Common;
using OpenDiablo2.Common.Enums; using OpenDiablo2.Common.Enums;
using OpenDiablo2.Common.Exceptions;
using OpenDiablo2.Common.Interfaces; using OpenDiablo2.Common.Interfaces;
using OpenDiablo2.Common.Models; using OpenDiablo2.Common.Models;
using OpenDiablo2.Core.Map_Engine; using OpenDiablo2.Core.Map_Engine;
@ -210,7 +211,7 @@ namespace OpenDiablo2.Core.GameState_
.Where(x => x != null); .Where(x => x != null);
default: default:
throw new ApplicationException("Unknown render cell type!"); throw new OpenDiablo2Exception("Unknown render cell type!");
} }
} }
@ -353,7 +354,7 @@ namespace OpenDiablo2.Core.GameState_
{ {
#if DEBUG #if DEBUG
if (!tiles.All(x => x.Animated)) if (!tiles.All(x => x.Animated))
throw new ApplicationException("Some tiles are animated and some aren't..."); throw new OpenDiablo2Exception("Some tiles are animated and some aren't...");
#endif #endif
var frameIndex = (int)Math.Floor(tiles.Count() * animationTime); var frameIndex = (int)Math.Floor(tiles.Count() * animationTime);
tile = tiles.ElementAt(frameIndex); tile = tiles.ElementAt(frameIndex);
@ -377,7 +378,7 @@ namespace OpenDiablo2.Core.GameState_
} }
if (tile.Animated) if (tile.Animated)
throw new ApplicationException("Why are we randomly finding an animated tile? Something's wrong here."); throw new OpenDiablo2Exception("Why are we randomly finding an animated tile? Something's wrong here.");
} }
else tile = tiles.First(); else tile = tiles.First();
} }

View File

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using OpenDiablo2.Common.Exceptions;
using OpenDiablo2.Common.Interfaces.Mobs; using OpenDiablo2.Common.Interfaces.Mobs;
using OpenDiablo2.Common.Models.Mobs; using OpenDiablo2.Common.Models.Mobs;
@ -35,7 +36,7 @@ namespace OpenDiablo2.Core.GameState_
{ {
Mobs.Add(mob); Mobs.Add(mob);
if (IdsUsed.Contains(mob.Id)) if (IdsUsed.Contains(mob.Id))
throw new ApplicationException("Tried to insert an existing mob id!"); throw new OpenDiablo2Exception("Tried to insert an existing mob id!");
IdsUsed.Add(mob.Id); IdsUsed.Add(mob.Id);
} }
public void RemoveMob(MobState mob) public void RemoveMob(MobState mob)
@ -49,7 +50,7 @@ namespace OpenDiablo2.Core.GameState_
if (!IdsUsed.Contains(i)) if (!IdsUsed.Contains(i))
return i; return i;
throw new ApplicationException("Ran out of IDs. How did this even happen?!"); throw new OpenDiablo2Exception("Ran out of IDs. How did this even happen?!");
} }
#endregion Mob Controls #endregion Mob Controls

View File

@ -19,6 +19,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using OpenDiablo2.Common; using OpenDiablo2.Common;
using OpenDiablo2.Common.Enums; using OpenDiablo2.Common.Enums;
using OpenDiablo2.Common.Exceptions;
using OpenDiablo2.Common.Interfaces; using OpenDiablo2.Common.Interfaces;
using OpenDiablo2.Common.Interfaces.Drawing; using OpenDiablo2.Common.Interfaces.Drawing;
using OpenDiablo2.Common.Models; using OpenDiablo2.Common.Models;
@ -134,7 +135,7 @@ namespace OpenDiablo2.SDL2_
animationData = resourceManager.GetPlayerAnimation(Hero, WeaponClass, MobMode); animationData = resourceManager.GetPlayerAnimation(Hero, WeaponClass, MobMode);
if (animationData == null) if (animationData == null)
throw new ApplicationException("Could not locate animation for the character!"); throw new OpenDiablo2Exception("Could not locate animation for the character!");
var palette = paletteProvider.PaletteTable["Units"]; var palette = paletteProvider.PaletteTable["Units"];
CacheFrames(animationData.Layers.Select(layer => resourceManager.GetPlayerDCC(layer, ArmorType, palette))); CacheFrames(animationData.Layers.Select(layer => resourceManager.GetPlayerDCC(layer, ArmorType, palette)));
@ -221,7 +222,7 @@ namespace OpenDiablo2.SDL2_
var offsetX = x + cell.XOffset + (frame.Box.X - minX); var offsetX = x + cell.XOffset + (frame.Box.X - minX);
var offsetY = y + cell.YOffset + (frame.Box.Y - minY); var offsetY = y + cell.YOffset + (frame.Box.Y - minY);
if (offsetX < 0 || offsetX > frameW || offsetY < 0 || offsetY > frameH) if (offsetX < 0 || offsetX > frameW || offsetY < 0 || offsetY > frameH)
throw new ApplicationException("There is nothing we can do now."); throw new OpenDiablo2Exception("There is nothing we can do now.");
data[offsetX + (offsetY * (pitch / 4))] = color; data[offsetX + (offsetY * (pitch / 4))] = color;
} }

View File

@ -19,6 +19,7 @@ using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.Linq; using System.Linq;
using OpenDiablo2.Common.Enums; using OpenDiablo2.Common.Enums;
using OpenDiablo2.Common.Exceptions;
using OpenDiablo2.Common.Interfaces; using OpenDiablo2.Common.Interfaces;
using SDL2; using SDL2;
@ -85,7 +86,7 @@ namespace OpenDiablo2.SDL2_
} }
if (MaxWidth < (font.sprite.FrameSize.Width)) if (MaxWidth < (font.sprite.FrameSize.Width))
throw new ApplicationException("Max label width cannot be smaller than a single character."); throw new OpenDiablo2Exception("Max label width cannot be smaller than a single character.");
var lastWordIndex = 0; var lastWordIndex = 0;
var width = 0; var width = 0;
@ -130,7 +131,7 @@ namespace OpenDiablo2.SDL2_
texture = SDL.SDL_CreateTexture(renderer, SDL.SDL_PIXELFORMAT_ARGB8888, (int)SDL.SDL_TextureAccess.SDL_TEXTUREACCESS_TARGET, textureSize.Width, textureSize.Height); texture = SDL.SDL_CreateTexture(renderer, SDL.SDL_PIXELFORMAT_ARGB8888, (int)SDL.SDL_TextureAccess.SDL_TEXTUREACCESS_TARGET, textureSize.Width, textureSize.Height);
if (texture == IntPtr.Zero) if (texture == IntPtr.Zero)
throw new ApplicationException("Unaple to initialize texture."); throw new OpenDiablo2Exception("Unaple to initialize texture.");
SDL.SDL_SetTextureBlendMode(texture, SDL.SDL_BlendMode.SDL_BLENDMODE_BLEND); SDL.SDL_SetTextureBlendMode(texture, SDL.SDL_BlendMode.SDL_BLENDMODE_BLEND);
SDL.SDL_SetRenderTarget(renderer, texture); SDL.SDL_SetRenderTarget(renderer, texture);

View File

@ -18,6 +18,7 @@ using System;
using System.Drawing; using System.Drawing;
using System.Linq; using System.Linq;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using OpenDiablo2.Common.Exceptions;
using OpenDiablo2.Common.Interfaces; using OpenDiablo2.Common.Interfaces;
using OpenDiablo2.Common.Interfaces.Drawing; using OpenDiablo2.Common.Interfaces.Drawing;
using OpenDiablo2.Common.Models; using OpenDiablo2.Common.Models;
@ -82,16 +83,16 @@ namespace OpenDiablo2.SDL2_
SDL.SDL_Init(SDL.SDL_INIT_EVERYTHING); SDL.SDL_Init(SDL.SDL_INIT_EVERYTHING);
if (SDL.SDL_SetHint(SDL.SDL_HINT_RENDER_SCALE_QUALITY, "0") == SDL.SDL_bool.SDL_FALSE) if (SDL.SDL_SetHint(SDL.SDL_HINT_RENDER_SCALE_QUALITY, "0") == SDL.SDL_bool.SDL_FALSE)
throw new ApplicationException($"Unable to Init hinting: {SDL.SDL_GetError()}"); throw new OpenDiablo2Exception($"Unable to Init hinting: {SDL.SDL_GetError()}");
window = SDL.SDL_CreateWindow("OpenDiablo2", SDL.SDL_WINDOWPOS_UNDEFINED, SDL.SDL_WINDOWPOS_UNDEFINED, 800, 600, window = SDL.SDL_CreateWindow("OpenDiablo2", SDL.SDL_WINDOWPOS_UNDEFINED, SDL.SDL_WINDOWPOS_UNDEFINED, 800, 600,
SDL.SDL_WindowFlags.SDL_WINDOW_SHOWN | (fullscreen ? SDL.SDL_WindowFlags.SDL_WINDOW_FULLSCREEN : 0)); SDL.SDL_WindowFlags.SDL_WINDOW_SHOWN | (fullscreen ? SDL.SDL_WindowFlags.SDL_WINDOW_FULLSCREEN : 0));
if (window == IntPtr.Zero) if (window == IntPtr.Zero)
throw new ApplicationException($"Unable to create SDL Window: {SDL.SDL_GetError()}"); throw new OpenDiablo2Exception($"Unable to create SDL Window: {SDL.SDL_GetError()}");
renderer = SDL.SDL_CreateRenderer(window, -1, SDL.SDL_RendererFlags.SDL_RENDERER_ACCELERATED | SDL.SDL_RendererFlags.SDL_RENDERER_PRESENTVSYNC); renderer = SDL.SDL_CreateRenderer(window, -1, SDL.SDL_RendererFlags.SDL_RENDERER_ACCELERATED | SDL.SDL_RendererFlags.SDL_RENDERER_PRESENTVSYNC);
if (renderer == IntPtr.Zero) if (renderer == IntPtr.Zero)
throw new ApplicationException($"Unable to create SDL Window: {SDL.SDL_GetError()}"); throw new OpenDiablo2Exception($"Unable to create SDL Window: {SDL.SDL_GetError()}");
SDL.SDL_SetRenderDrawBlendMode(renderer, SDL.SDL_BlendMode.SDL_BLENDMODE_BLEND); SDL.SDL_SetRenderDrawBlendMode(renderer, SDL.SDL_BlendMode.SDL_BLENDMODE_BLEND);
@ -366,7 +367,7 @@ namespace OpenDiablo2.SDL2_
SDL.SDL_SetTextureBlendMode(texId, SDL.SDL_BlendMode.SDL_BLENDMODE_BLEND); SDL.SDL_SetTextureBlendMode(texId, SDL.SDL_BlendMode.SDL_BLENDMODE_BLEND);
if (SDL.SDL_LockTexture(texId, IntPtr.Zero, out IntPtr pixels, out int pitch) != 0) if (SDL.SDL_LockTexture(texId, IntPtr.Zero, out IntPtr pixels, out int pitch) != 0)
throw new ApplicationException("Could not lock texture for map rendering"); throw new OpenDiablo2Exception("Could not lock texture for map rendering");
try try
{ {
@ -470,7 +471,7 @@ namespace OpenDiablo2.SDL2_
var cursor = SDL.SDL_CreateColorCursor(surface, hotspot.X * multiple, hotspot.Y * multiple); var cursor = SDL.SDL_CreateColorCursor(surface, hotspot.X * multiple, hotspot.Y * multiple);
if (cursor == IntPtr.Zero) if (cursor == IntPtr.Zero)
throw new ApplicationException($"Unable to set the cursor cursor: {SDL.SDL_GetError()}"); // TODO: Is this supported everywhere? May need to still support software cursors. throw new OpenDiablo2Exception($"Unable to set the cursor cursor: {SDL.SDL_GetError()}"); // TODO: Is this supported everywhere? May need to still support software cursors.
return new SDL2MouseCursor { HWSurface = cursor }; return new SDL2MouseCursor { HWSurface = cursor };
} }

View File

@ -17,6 +17,7 @@
using System; using System;
using System.Drawing; using System.Drawing;
using System.Linq; using System.Linq;
using OpenDiablo2.Common.Exceptions;
using OpenDiablo2.Common.Interfaces; using OpenDiablo2.Common.Interfaces;
using OpenDiablo2.Common.Models; using OpenDiablo2.Common.Models;
using SDL2; using SDL2;
@ -113,7 +114,7 @@ namespace OpenDiablo2.SDL2_
texture = SDL.SDL_CreateTexture(renderer, SDL.SDL_PIXELFORMAT_ARGB8888, (int)SDL.SDL_TextureAccess.SDL_TEXTUREACCESS_STREAMING, Pow2(FrameSize.Width), Pow2(FrameSize.Height)); texture = SDL.SDL_CreateTexture(renderer, SDL.SDL_PIXELFORMAT_ARGB8888, (int)SDL.SDL_TextureAccess.SDL_TEXTUREACCESS_STREAMING, Pow2(FrameSize.Width), Pow2(FrameSize.Height));
if (texture == IntPtr.Zero) if (texture == IntPtr.Zero)
throw new ApplicationException("Unaple to initialize texture."); throw new OpenDiablo2Exception("Unaple to initialize texture.");
Frame = 0; Frame = 0;
} }

View File

@ -3,6 +3,7 @@ using System.Linq;
using System.Text; using System.Text;
using OpenDiablo2.Common.Attributes; using OpenDiablo2.Common.Attributes;
using OpenDiablo2.Common.Enums; using OpenDiablo2.Common.Enums;
using OpenDiablo2.Common.Exceptions;
using OpenDiablo2.Common.Interfaces; using OpenDiablo2.Common.Interfaces;
namespace OpenDiablo2.ServiceBus.Message_Frames.Client namespace OpenDiablo2.ServiceBus.Message_Frames.Client
@ -30,7 +31,7 @@ namespace OpenDiablo2.ServiceBus.Message_Frames.Client
PlayerName = Encoding.UTF8.GetString(value, 3, value.Length - 3); PlayerName = Encoding.UTF8.GetString(value, 3, value.Length - 3);
if (PlayerName.Length != playerNameLen) if (PlayerName.Length != playerNameLen)
throw new ApplicationException("Invalid player length!"); throw new OpenDiablo2Exception("Invalid player length!");
} }
} }

View File

@ -22,6 +22,7 @@ using NetMQ;
using NetMQ.Sockets; using NetMQ.Sockets;
using OpenDiablo2.Common.Attributes; using OpenDiablo2.Common.Attributes;
using OpenDiablo2.Common.Enums; using OpenDiablo2.Common.Enums;
using OpenDiablo2.Common.Exceptions;
using OpenDiablo2.Common.Interfaces; using OpenDiablo2.Common.Interfaces;
using OpenDiablo2.ServiceBus.Message_Frames.Client; using OpenDiablo2.ServiceBus.Message_Frames.Client;
using OpenDiablo2.ServiceBus.Message_Frames.Server; using OpenDiablo2.ServiceBus.Message_Frames.Server;
@ -89,7 +90,7 @@ namespace OpenDiablo2.ServiceBus
case eSessionType.Server: case eSessionType.Server:
case eSessionType.Remote: case eSessionType.Remote:
default: default:
throw new ApplicationException("This session type is currently unsupported."); throw new OpenDiablo2Exception("This session type is currently unsupported.");
} }
running = true; running = true;
@ -125,7 +126,7 @@ namespace OpenDiablo2.ServiceBus
private void ProcessMessageFrame<T>() where T : IMessageFrame, new() private void ProcessMessageFrame<T>() where T : IMessageFrame, new()
{ {
if (!running) if (!running)
throw new ApplicationException("You have made a terrible mistake. Cannot get a message frame if you are not connected."); throw new OpenDiablo2Exception("You have made a terrible mistake. Cannot get a message frame if you are not connected.");
var bytes = requestSocket.ReceiveFrameBytes(); var bytes = requestSocket.ReceiveFrameBytes();
var frameType = (eMessageFrameType)bytes[0]; var frameType = (eMessageFrameType)bytes[0];
@ -133,7 +134,7 @@ namespace OpenDiablo2.ServiceBus
var frameData = bytes.Skip(1).ToArray(); // TODO: Can we maybe use pointers? This seems wasteful var frameData = bytes.Skip(1).ToArray(); // TODO: Can we maybe use pointers? This seems wasteful
var messageFrame = getMessageFrame(frameType); var messageFrame = getMessageFrame(frameType);
if (messageFrame.GetType() != typeof(T)) if (messageFrame.GetType() != typeof(T))
throw new ApplicationException("Recieved unexpected message frame!"); throw new OpenDiablo2Exception("Recieved unexpected message frame!");
messageFrame.Data = frameData; messageFrame.Data = frameData;
lock (getGameState().ThreadLocker) lock (getGameState().ThreadLocker)
{ {
@ -145,7 +146,7 @@ namespace OpenDiablo2.ServiceBus
{ {
var bytes = requestSocket.ReceiveFrameBytes(); var bytes = requestSocket.ReceiveFrameBytes();
if ((eMessageFrameType)bytes[0] != eMessageFrameType.None) if ((eMessageFrameType)bytes[0] != eMessageFrameType.None)
throw new ApplicationException("Excepted a NoOp but got a command instead!"); throw new OpenDiablo2Exception("Excepted a NoOp but got a command instead!");
} }
public void JoinGame(string playerName, eHero heroType) public void JoinGame(string playerName, eHero heroType)

View File

@ -22,6 +22,7 @@ using NetMQ;
using NetMQ.Sockets; using NetMQ.Sockets;
using OpenDiablo2.Common.Attributes; using OpenDiablo2.Common.Attributes;
using OpenDiablo2.Common.Enums; using OpenDiablo2.Common.Enums;
using OpenDiablo2.Common.Exceptions;
using OpenDiablo2.Common.Interfaces; using OpenDiablo2.Common.Interfaces;
using OpenDiablo2.Common.Models; using OpenDiablo2.Common.Models;
using OpenDiablo2.ServiceBus.Message_Frames.Server; using OpenDiablo2.ServiceBus.Message_Frames.Server;
@ -84,7 +85,7 @@ namespace OpenDiablo2.ServiceBus
case eSessionType.Server: case eSessionType.Server:
case eSessionType.Remote: case eSessionType.Remote:
default: default:
throw new ApplicationException("This session type is currently unsupported."); throw new OpenDiablo2Exception("This session type is currently unsupported.");
} }
OnJoinGame += OnJoinGameHandler; OnJoinGame += OnJoinGameHandler;

View File

@ -1,16 +1,13 @@
using OpenDiablo2.Common.Enums; using System;
using OpenDiablo2.Common.Models;
using OpenDiablo2.Core;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using OpenDiablo2.Common.Enums;
using System.Text; using OpenDiablo2.Common.Models;
using System.Threading.Tasks; using OpenDiablo2.Core;
namespace OpenDiablo2.TestConsole namespace OpenDiablo2.TestConsole
{ {
class Program static class Program
{ {
private static GlobalConfiguration GlobalConfig = null; private static GlobalConfiguration GlobalConfig = null;
private static MPQProvider MPQProv = null; private static MPQProvider MPQProv = null;