mirror of
https://github.com/islehorse/HISP.git
synced 2025-04-06 05:05:40 +12:00
133 lines
No EOL
3.7 KiB
C#
Executable file
133 lines
No EOL
3.7 KiB
C#
Executable file
using System;
|
|
using System.IO;
|
|
using HISP.Server;
|
|
|
|
namespace HISP.Game
|
|
{
|
|
public class Map
|
|
{
|
|
public struct TerrainTile
|
|
{
|
|
public bool Passable;
|
|
public string Type;
|
|
}
|
|
|
|
public struct TileDepth
|
|
{
|
|
public bool ShowPlayer;
|
|
public bool Passable;
|
|
}
|
|
|
|
public static TileDepth[] OverlayTileDepth;
|
|
public static TerrainTile[] TerrainTiles;
|
|
|
|
public static int Width;
|
|
public static int Height;
|
|
|
|
public static byte[] MapData;
|
|
public static byte[] oMapData;
|
|
|
|
|
|
public static int NewUserStartX;
|
|
public static int NewUserStartY;
|
|
|
|
public static int ModIsleX;
|
|
public static int ModIsleY;
|
|
|
|
public static int RulesIsleX;
|
|
public static int RulesIsleY;
|
|
|
|
public static int PrisonIsleX;
|
|
public static int PrisonIsleY;
|
|
|
|
public static int GetTileId(int x, int y, bool overlay)
|
|
{
|
|
int pos = ((x * Height) + y);
|
|
|
|
if ((pos <= 0 || pos >= oMapData.Length) && overlay)
|
|
return 1;
|
|
else if ((pos <= 0 || pos >= MapData.Length) && !overlay)
|
|
return 1;
|
|
else if (overlay && Treasure.IsTileBuiredTreasure(x, y))
|
|
return 193; // Burried Treasure tile.
|
|
else if (overlay && Treasure.IsTilePotOfGold(x, y))
|
|
return 186; // Pot of Gold tile.
|
|
else if (overlay && Ranch.IsRanchHere(x, y))
|
|
{
|
|
int upgradeLevel = Ranch.GetRanchAt(x, y).UpgradedLevel;
|
|
if (upgradeLevel > 7)
|
|
upgradeLevel = 7;
|
|
return 170 + upgradeLevel;
|
|
}
|
|
else if (overlay)
|
|
return oMapData[pos];
|
|
else if (!overlay)
|
|
return MapData[pos];
|
|
else // Not sure how you could even get here.
|
|
return 1;
|
|
}
|
|
public static bool CheckPassable(int x, int y)
|
|
{
|
|
int tileId = GetTileId(x, y, false) - 1;
|
|
int otileId = GetTileId(x, y, true) - 1;
|
|
|
|
bool terrainPassable = TerrainTiles[tileId].Passable;
|
|
int tileset = 0;
|
|
|
|
|
|
if (otileId > 192)
|
|
{
|
|
if (World.InIsle(x, y))
|
|
tileset = World.GetIsle(x, y).Tileset;
|
|
otileId = otileId + 64 * tileset;
|
|
}
|
|
|
|
bool overlayPassable = OverlayTileDepth[otileId].Passable;
|
|
|
|
if ((!terrainPassable && overlayPassable) && otileId == 0)
|
|
return false;
|
|
|
|
bool passable = false;
|
|
if (!overlayPassable)
|
|
passable = false;
|
|
if (!terrainPassable)
|
|
passable = false;
|
|
|
|
if (!passable && overlayPassable)
|
|
passable = true;
|
|
|
|
return passable;
|
|
}
|
|
|
|
public static void OpenMap()
|
|
{
|
|
if(!File.Exists(ConfigReader.MapFile))
|
|
{
|
|
Logger.ErrorPrint("Map file not found.");
|
|
return;
|
|
}
|
|
Logger.InfoPrint("Loading Map Data (" + ConfigReader.MapFile + ")");
|
|
|
|
byte[] worldMap = File.ReadAllBytes(ConfigReader.MapFile);
|
|
|
|
Width = BitConverter.ToInt32(worldMap, 0);
|
|
Height = BitConverter.ToInt32(worldMap, 4);
|
|
|
|
MapData = new byte[Width * Height];
|
|
oMapData = new byte[Width * Height];
|
|
int ii = 8;
|
|
|
|
for (int i = 0; i < MapData.Length; i++)
|
|
{
|
|
oMapData[i] = worldMap[ii];
|
|
MapData[i] = worldMap[ii+ 1];
|
|
ii += 2;
|
|
}
|
|
|
|
worldMap = null;
|
|
Logger.InfoPrint("Map Data Loaded!");
|
|
|
|
}
|
|
}
|
|
}
|
|
|