first source submit into svn
0
Build/Builder.cfg
Normal file
1890
Build/Configurations/Boom.cfg
Normal file
1116
Build/Configurations/Doom.cfg
Normal file
1271
Build/Configurations/Doom2.cfg
Normal file
1575
Build/Configurations/Edge.cfg
Normal file
2008
Build/Configurations/Eternity.cfg
Normal file
1047
Build/Configurations/Heretic.cfg
Normal file
2472
Build/Configurations/Hexen.cfg
Normal file
1964
Build/Configurations/Legacy.cfg
Normal file
2678
Build/Configurations/Risen3D.cfg
Normal file
2559
Build/Configurations/Skulltag_Doom.cfg
Normal file
3735
Build/Configurations/Skulltag_DoomHexen.cfg
Normal file
1321
Build/Configurations/Strife.cfg
Normal file
1172
Build/Configurations/UltDoom.cfg
Normal file
2083
Build/Configurations/ZDoom_Doom.cfg
Normal file
3616
Build/Configurations/ZDoom_DoomHexen.cfg
Normal file
2619
Build/Configurations/ZDoom_HereticHexen.cfg
Normal file
3457
Build/Configurations/ZDoom_Hexen.cfg
Normal file
3134
Build/Configurations/ZDoom_StrifeHexen.cfg
Normal file
1384
Build/Configurations/jDoom.cfg
Normal file
152
Build/Scripting/Dehacked.cfg
Normal file
|
@ -0,0 +1,152 @@
|
|||
/*******************************************************************\
|
||||
Doom Builder Script highlighting definitions for DED
|
||||
\*******************************************************************/
|
||||
|
||||
casesensitive = 0;
|
||||
insertcase = 0; // 0=Normal, 1=Lowercase, 2=Uppercase
|
||||
linecomment = "#";
|
||||
commentopen = "";
|
||||
commentclose = "";
|
||||
string = "\"";
|
||||
escape = "\\";
|
||||
terminator = "";
|
||||
scopeopen = "{";
|
||||
scopeclose = "}";
|
||||
delimiters = " \n\r\t(){}[]:;!%^&*-+=.,<>/\?|\"";
|
||||
functionopen = "";
|
||||
functionclose = "";
|
||||
argumentdelimiter = "";
|
||||
keywordhelp = "";
|
||||
|
||||
keywords
|
||||
{
|
||||
[CODEPTR] = "[CODEPTR]";
|
||||
[PARS] = "[PARS]";
|
||||
[STRINGS] = "[STRINGS]";
|
||||
Action.sound = "Action sound";
|
||||
Alert.sound = "Alert sound";
|
||||
Ammo = "Ammo";
|
||||
Ammo.&.Keys = "Ammo & Keys";
|
||||
Ammo.type = "Ammo type";
|
||||
Attack.sound = "Attack sound";
|
||||
Auto-map = "Auto-map";
|
||||
BEHOLD.menu = "BEHOLD menu";
|
||||
Berserk = "Berserk";
|
||||
BFG.Cells/Shot = "BFG Cells/Shot";
|
||||
Bits = "Bits";
|
||||
Blue.Armor.Class = "Blue Armor Class";
|
||||
Bobbing.frame = "Bobbing frame";
|
||||
Chainsaw = "Chainsaw";
|
||||
Change.music = "Change music";
|
||||
Cheat = "Cheat";
|
||||
Close.attack.frame = "Close attack frame";
|
||||
Codep.Frame = "Codep Frame";
|
||||
Death.frame = "Death frame";
|
||||
Death.sound = "Death sound";
|
||||
Deselect.frame = "Deselect frame";
|
||||
Doom.version = "Doom version";
|
||||
Duration = "Duration";
|
||||
Exploding.frame = "Exploding frame";
|
||||
Far.attack.frame = "Far attack frame";
|
||||
Firing.frame = "Firing frame";
|
||||
First.moving.frame = "First moving frame";
|
||||
Frame = "Frame";
|
||||
God.mode = "God mode";
|
||||
God.Mode.Health = "God Mode Health";
|
||||
Green.Armor.Class = "Green Armor Class";
|
||||
Height = "Height";
|
||||
Hit.points = "Hit points";
|
||||
ID.# = "ID #";
|
||||
IDFA.Armor = "IDFA Armor";
|
||||
IDFA.Armor.Class = "IDFA Armor Class";
|
||||
IDKFA.Armor = "IDKFA Armor";
|
||||
IDKFA.Armor.Class = "IDKFA Armor Class";
|
||||
INCLUDE = "INCLUDE";
|
||||
INCLUDE.NOTEXT = "INCLUDE NOTEXT";
|
||||
Initial.Bullets = "Initial Bullets";
|
||||
Initial.frame = "Initial frame";
|
||||
Initial.Health = "Initial Health";
|
||||
Injury.frame = "Injury frame";
|
||||
Invincibility = "Invincibility";
|
||||
Invisibility = "Invisibility";
|
||||
Level.Warp = "Level Warp";
|
||||
Lite-amp.Goggles = "Lite-amp Goggles";
|
||||
Mass = "Mass";
|
||||
Max.ammo = "Max ammo";
|
||||
Max.Armor = "Max Armor";
|
||||
Max.Health = "Max Health";
|
||||
Max.Soulsphere = "Max Soulsphere";
|
||||
Megasphere.Health = "Megasphere Health";
|
||||
Misc = "Misc";
|
||||
Missile.damage = "Missile damage";
|
||||
Monsters.Infight = "Monsters Infight";
|
||||
Next.frame = "Next frame";
|
||||
No.Clipping.1 = "No Clipping 1";
|
||||
No.Clipping.2 = "No Clipping 2";
|
||||
Offset = "Offset";
|
||||
Pain.chance = "Pain chance";
|
||||
Pain.sound = "Pain sound";
|
||||
par = "par";
|
||||
Patch.format = "Patch format";
|
||||
Per.ammo = "Per ammo";
|
||||
Player.Position = "Player Position";
|
||||
Pointer = "Pointer";
|
||||
Radiation.Suit = "Radiation Suit";
|
||||
Reaction.time = "Reaction time";
|
||||
Respawn.frame = "Respawn frame";
|
||||
Select.frame = "Select frame";
|
||||
Shooting.frame = "Shooting frame";
|
||||
Soulsphere.Health = "Soulsphere Health";
|
||||
Sound = "Sound";
|
||||
Speed = "Speed";
|
||||
Sprite = "Sprite";
|
||||
Sprite.number = "Sprite number";
|
||||
Sprite.subnumber = "Sprite subnumber";
|
||||
Text = "Text";
|
||||
Thing = "Thing";
|
||||
Unknown.1 = "Unknown 1";
|
||||
Unknown.2 = "Unknown 2";
|
||||
Weapon = "Weapon";
|
||||
Width = "Width";
|
||||
Zero.1 = "Zero 1";
|
||||
Zero.2 = "Zero 2";
|
||||
Zero.3 = "Zero 3";
|
||||
Zero.4 = "Zero 4";
|
||||
Zero/One = "Zero/One";
|
||||
}
|
||||
|
||||
constants
|
||||
{
|
||||
AMBUSH;
|
||||
BOUNCES;
|
||||
CORPSE;
|
||||
COUNTITEM;
|
||||
COUNTKILL;
|
||||
DROPOFF;
|
||||
DROPPED;
|
||||
FLOAT;
|
||||
FRIEND;
|
||||
INFLOAT;
|
||||
JUSTATTACKED;
|
||||
JUSTHIT;
|
||||
MISSILE;
|
||||
NOBLOCKMAP;
|
||||
NOBLOOD;
|
||||
NOCLIP;
|
||||
NOGRAVITY;
|
||||
NOSECTOR;
|
||||
NOTDMATCH;
|
||||
PICKUP;
|
||||
SHADOW;
|
||||
SHOOTABLE;
|
||||
SKULLFLY;
|
||||
SLIDE;
|
||||
SOLID;
|
||||
SPAWNCEILING;
|
||||
SPECIAL;
|
||||
TELEPORT;
|
||||
TOUCHY;
|
||||
TRANSLATION1;
|
||||
TRANSLATION2;
|
||||
TRANSLUCENT;
|
||||
}
|
105
Build/Scripting/Doomsday_DED.cfg
Normal file
|
@ -0,0 +1,105 @@
|
|||
/*******************************************************************\
|
||||
Doom Builder Script highlighting definitions for DED
|
||||
\*******************************************************************/
|
||||
|
||||
casesensitive = 0;
|
||||
insertcase = 0; // 0=Normal, 1=Lowercase, 2=Uppercase
|
||||
linecomment = "#";
|
||||
commentopen = "#>";
|
||||
commentclose = "<#";
|
||||
string = "\"";
|
||||
escape = "\\";
|
||||
terminator = "";
|
||||
scopeopen = "{";
|
||||
scopeclose = "}";
|
||||
delimiters = " \n\r\t(){}[]:;!%^&*-+=.,<>/\?|\"";
|
||||
functionopen = "";
|
||||
functionclose = "";
|
||||
argumentdelimiter = "";
|
||||
keywordhelp = "http://deng.sourceforge.net/dew/Editing/%K";
|
||||
|
||||
keywords
|
||||
{
|
||||
Blending.Mode = "Blending Mode";
|
||||
Copy.Model = "Copy Model";
|
||||
File = "File";
|
||||
Flags = "Flags";
|
||||
Frame = "Frame";
|
||||
Frame.Range = "Frame Range";
|
||||
Group = "Group";
|
||||
ID = "ID";
|
||||
Include = "Include";
|
||||
IncludeIf = "IncludeIf";
|
||||
IncludeIf.Not = "IncludeIf Not";
|
||||
Inter = "Inter";
|
||||
Interpolate = "Interpolate";
|
||||
MD2 = "MD2";
|
||||
Model = "Model";
|
||||
ModelPath = "ModelPath";
|
||||
Off = "Off";
|
||||
Offset = "Offset";
|
||||
Offset.XYZ = "Offset XYZ";
|
||||
Parm = "Parm";
|
||||
Resize = "Resize";
|
||||
Scale = "Scale";
|
||||
Scale.XYZ = "Scale XYZ";
|
||||
Selector = "Selector";
|
||||
Selskin = "Selskin";
|
||||
Selskin.Mask = "Selskin Mask";
|
||||
Selskin.Shift = "Selskin Shift";
|
||||
Selskins = "Selskins";
|
||||
Shadow.Radius = "Shadow Radius";
|
||||
Shiny = "Shiny";
|
||||
Shiny.Color = "Shiny Color";
|
||||
Shiny.Reaction = "Shiny Reaction";
|
||||
Shiny.Skin = "Shiny Skin";
|
||||
Skin = "Skin";
|
||||
Skin.File = "Skin File";
|
||||
Skin.Range = "Skin Range";
|
||||
Skin.Ticks = "Skin Ticks";
|
||||
SkipIf = "SkipIf";
|
||||
SkipIf.Not = "SkipIf Not";
|
||||
Sprite = "Sprite";
|
||||
Sprite.Frame = "Sprite Frame";
|
||||
State = "State";
|
||||
Sub = "Sub";
|
||||
Transparent = "Transparent";
|
||||
}
|
||||
|
||||
constants
|
||||
{
|
||||
add;
|
||||
alignpitch;
|
||||
alignyaw;
|
||||
autoscale;
|
||||
brightshadow;
|
||||
brightshadow2;
|
||||
dark;
|
||||
darkshadow;
|
||||
fullbright;
|
||||
idangle;
|
||||
idframe;
|
||||
idskin;
|
||||
invmul;
|
||||
litshiny;
|
||||
movpitch;
|
||||
movyaw;
|
||||
mul;
|
||||
nointerpol;
|
||||
nomaxz;
|
||||
noptc;
|
||||
normal;
|
||||
notexcomp;
|
||||
noz;
|
||||
ptoffsub1;
|
||||
revsub;
|
||||
selskin;
|
||||
shadow1;
|
||||
shadow2;
|
||||
skintrans;
|
||||
specular;
|
||||
spin;
|
||||
sub;
|
||||
sub2;
|
||||
worldtime;
|
||||
}
|
87
Build/Scripting/Hellbent_LUA.cfg
Normal file
|
@ -0,0 +1,87 @@
|
|||
/*******************************************************************\
|
||||
Doom Builder Script highlighting definitions for LUA
|
||||
\*******************************************************************/
|
||||
|
||||
casesensitive = 1;
|
||||
insertcase = 0; // 0=Normal, 1=Lowercase, 2=Uppercase
|
||||
linecomment = "--";
|
||||
commentopen = "--[";
|
||||
commentclose = "]--";
|
||||
string = "\"";
|
||||
escape = "\\";
|
||||
terminator = ";";
|
||||
scopeopen = "";
|
||||
scopeclose = "";
|
||||
delimiters = " \n\r\t(){}[]:;!%^&*-+=.,<>/\?|\"'";
|
||||
functionopen = "(";
|
||||
functionclose = ")";
|
||||
argumentdelimiter = ",";
|
||||
keywordhelp = "";
|
||||
|
||||
keywords
|
||||
{
|
||||
// Reserved keywords
|
||||
and = "and";
|
||||
break = "break";
|
||||
do = "do";
|
||||
else = "else";
|
||||
elseif = "elseif";
|
||||
end = "end";
|
||||
false = "false";
|
||||
for = "for";
|
||||
function = "function";
|
||||
if = "if";
|
||||
in = "in";
|
||||
local = "local";
|
||||
nil = "nil";
|
||||
not = "not";
|
||||
or = "or";
|
||||
repeat = "repeat";
|
||||
return = "return";
|
||||
then = "then";
|
||||
true = "true";
|
||||
until = "until";
|
||||
while = "while";
|
||||
type = "type(v);";
|
||||
|
||||
// Debug methods
|
||||
ConsoleLine = "ConsoleLine(text)";
|
||||
|
||||
// Scripting methods
|
||||
DelayedCall = "DelayedCall(delay, method, [arguments])";
|
||||
CancelCall = "CancelCall(callid)";
|
||||
|
||||
// Object methods
|
||||
IsValidObjectID = "IsValidObjectID(id)";
|
||||
GetObjectType = "GetObjectType(id)";
|
||||
GetObjectAngle = "GetObjectAngle(id)";
|
||||
GetObjectPosition = "GetObjectPosition(id)";
|
||||
GetObjectsByTag = "GetObjectsByTag(tag)";
|
||||
|
||||
// Player methods
|
||||
GetCurrentPlayers = "GetCurrentPlayers()";
|
||||
GetPlayerName = "GetPlayerName(id)";
|
||||
GetPlayerPlainTextName = "GetPlayerPlainTextName(id)";
|
||||
LookAtPlayer = "LookAtPlayer(id)";
|
||||
LookAtObject = "LookAtObject(playerid, targetid, speed)";
|
||||
LookAtPosition = "LookAtPosition(playerid, x, y, z, angle, speed)";
|
||||
|
||||
// Map methods
|
||||
GetCeilingTexture = "GetCeilingTexture(tag)";
|
||||
GetFloorTexture = "GetFloorTexture(tag)";
|
||||
ChangeCeilingTexture = "ChangeCeilingTexture(tag, texture)";
|
||||
ChangeFloorTexture = "ChangeFloorTexture(tag, texture)";
|
||||
GetCeilingHeight = "GetCeilingHeight(tag)";
|
||||
GetFloorHeight = "GetFloorHeight(tag)";
|
||||
MoveCeiling = "MoveCeiling(tag, targetheight, speed)";
|
||||
MoveFloor = "MoveFloor(tag, targetheight, speed)";
|
||||
}
|
||||
|
||||
constants
|
||||
{
|
||||
ACTIVATOR; // Object that activated the script
|
||||
GAMETYPE; // Game type of the game currently running
|
||||
SKILL; // Skill of the game currently running
|
||||
MAPPACK; // Current map pack name
|
||||
MAPNAME; // Current map name
|
||||
}
|
172
Build/Scripting/Legacy_FS.cfg
Normal file
|
@ -0,0 +1,172 @@
|
|||
/*******************************************************************\
|
||||
Doom Builder Script highlighting definitions for FS
|
||||
\*******************************************************************/
|
||||
|
||||
casesensitive = 1;
|
||||
insertcase = 0; // 0=Normal, 1=Lowercase, 2=Uppercase
|
||||
linecomment = "//";
|
||||
commentopen = "/*";
|
||||
commentclose = "*/";
|
||||
string = "\"";
|
||||
escape = "\\";
|
||||
terminator = ";";
|
||||
scopeopen = "{";
|
||||
scopeclose = "}";
|
||||
delimiters = " \n\r\t(){}[]:;!%^&*-+=.,<>/\?|\"";
|
||||
functionopen = "(";
|
||||
functionclose = ")";
|
||||
argumentdelimiter = ",";
|
||||
keywordhelp = "";
|
||||
|
||||
keywords
|
||||
{
|
||||
Abs = "Abs(x)";
|
||||
ACos = "ACos(x)";
|
||||
AmbientSound = "AmbientSound(soundname)";
|
||||
ASin = "ASin(x)";
|
||||
ATan = "ATan(x)";
|
||||
Beep = "Beep()";
|
||||
Break = "Break()";
|
||||
CeilingHeight = "CeilingHeight(tag, height)";
|
||||
CeilingText = "CeilingText(tag, flat)";
|
||||
ChangemMusic = "ChangemMusic(musicname)";
|
||||
CheckCVar = "CheckCVar(cvar)";
|
||||
CheckLife = "CheckLife(obj)";
|
||||
ClearCamera = "ClearCamera()";
|
||||
Clock = "Clock()";
|
||||
CloseDoor = "CloseDoor(tag, speed)";
|
||||
ColorMap = "ColorMap(tag, colormap)";
|
||||
Const = "Const identifier = value";
|
||||
Continue = "Continue()";
|
||||
CopyInto = "CopyInto(source, target)";
|
||||
Cos = "Cos(x)";
|
||||
CreatePic = "CreatePic(lumpname, x, y, draw, trans, priority)";
|
||||
DamageObj = "DamageObj(obj, damage)";
|
||||
ElementAt = "ElementAt(array, index)";
|
||||
Else = "Else";
|
||||
ElseIf = "ElseIf(expression)";
|
||||
ExitLevel = "ExitLevel()";
|
||||
ExitSecret = "ExitSecret()";
|
||||
Exp = "Exp(x)";
|
||||
FadeLight = "FadeLight(tag, level, speed)";
|
||||
Fixed = "Fixed expression";
|
||||
Floor = "Floor(x)";
|
||||
FloorHeight = "FloorHeight(tag, height)";
|
||||
FloorText = "FloorText(tag, flat)";
|
||||
For = "For(initialization, condition, iteration)";
|
||||
GameMode = "GameMode()";
|
||||
GameSkill = "GameSkill()";
|
||||
GetFriction = "GetFriction(tag)";
|
||||
GetPicAttr = "GetPicAttr(handle, selector)";
|
||||
GetPicHandle = "GetPicHandle(lumpname, x, y)";
|
||||
GetPicHP = "GetPicHP()";
|
||||
GetPicLP = "GetPicLP()";
|
||||
GetPicPriority = "GetPicPriority(handle)";
|
||||
Goto = "Goto(label)";
|
||||
HealObj = "HealObj(obj, heal)";
|
||||
Hub = "Hub";
|
||||
If = "If(expression)";
|
||||
Include = "Include(lumpname)";
|
||||
Int = "Int expression";
|
||||
IsPlayerObj = "IsPlayerObj(obj)";
|
||||
Kill = "Kill(obj)";
|
||||
Length = "Length(array)";
|
||||
LightLevel = "LightLevel(tag, level)";
|
||||
LineAttack = "LineAttack(obj, angle, damage)";
|
||||
LineTrigger = "LineTrigger(special, tag)";
|
||||
Log = "Log(x)";
|
||||
MapThingNumExist = "MapThingNumExist(mapthing)";
|
||||
MapThings = "MapThings()";
|
||||
Max = "Max(x, y)";
|
||||
MaxPlayerAmmo = "MaxPlayerAmmo(plnum, ammonum, amount)";
|
||||
Message = "Message(message)";
|
||||
Min = "Min(x, y)";
|
||||
MObj = "MObj expression";
|
||||
ModifyPic = "ModifyPic(handle, lumpname, x, y)";
|
||||
MoveCamera = "MoveCamera(target, targetheight, movespeed, targetangle, anglespeed)";
|
||||
MoveCeil = "MoveCeil(tag, destheight, speed)";
|
||||
MoveFloor = "MoveFloor(tag, destheight, speed)";
|
||||
NewArray = "NewArray(array)";
|
||||
ObjAngle = "ObjAngle(obj)";
|
||||
ObjAwaken = "ObjAwaken(obj)";
|
||||
ObjFlag = "ObjFlag()";
|
||||
ObjFlag2 = "ObjFlag2()";
|
||||
ObjHealth = "ObjHealth(obj)";
|
||||
ObjMomX = "ObjMomX(obj, momx)";
|
||||
ObjMomY = "ObjMomY(obj, momy)";
|
||||
ObjMomZ = "ObjMomZ(obj, momz)";
|
||||
ObjSector = "ObjSector(obj)";
|
||||
ObjState = "ObjState(obj, state)";
|
||||
ObjTarget = "ObjTarget(source, target)";
|
||||
ObjType = "ObjType(obj)";
|
||||
ObjX = "ObjX(obj)";
|
||||
ObjY = "ObjY(obj)";
|
||||
ObjZ = "ObjZ(obj)";
|
||||
OpenDoor = "OpenDoor(tag, waittime, speed)";
|
||||
PlayDemo = "PlayDemo(demolump)";
|
||||
Player = "Player(playerobj)";
|
||||
PlayerAddFrag = "PlayerAddFrag(playerid, modifier)";
|
||||
PlayerAmmo = "PlayerAmmo(plnum, ammonum, amount)";
|
||||
PlayerInGame = "PlayerInGame(playerid)";
|
||||
PlayerKeys = "PlayerKeys(plnum, keynum, givetake)";
|
||||
PlayerMsg = "PlayerMsg(player, message)";
|
||||
PlayerName = "PlayerName(playerid)";
|
||||
PlayerObj = "PlayerObj(playerid)";
|
||||
PlayerSelWep = "PlayerSelWep(playerid, weapon)";
|
||||
PlayerSkin = "PlayerSkin(playerid)";
|
||||
PlayerTimedTip = "PlayerTimedTip(message)";
|
||||
PlayerTip = "PlayerTip(message)";
|
||||
PlayerWeapon = "PlayerWeapon(playerid, weapon, givetake)";
|
||||
PointToAngle = "PointToAngle(x1, y1, x2, y2)";
|
||||
PointToDist = "PointToDist(x1, y1, x2, y2)";
|
||||
Pow = "Pow(x, y)";
|
||||
Print = "Print(message)";
|
||||
PRnd = "PRnd()";
|
||||
PushThing = "PushThing(obj, angle, force)";
|
||||
RadiusAttack = "RadiusAttack(spot, source, damage)";
|
||||
ReactionTime = "ReactionTime(obj, val)";
|
||||
RemoveObj = "RemoveObj(obj)";
|
||||
Ressurect = "Ressurect(obj)";
|
||||
Return = "Return()";
|
||||
Rnd = "Rnd()";
|
||||
RunCommand = "RunCommand(command)";
|
||||
Script = "Script expression";
|
||||
ScriptRunning = "ScriptRunning(scriptid)";
|
||||
ScriptWait = "ScriptWait(scriptid)";
|
||||
ScriptWaitPre = "ScriptWaitPre(scriptid)";
|
||||
SetCamera = "SetCamera(obj, angle, height, pitch)";
|
||||
SetCoronas = "SetCoronas()";
|
||||
SetElementAt = "SetElementAt(array, index, element)";
|
||||
SetFriction = "SetFriction(tag, friction)";
|
||||
SetLineBlocking = "SetLineBlocking(tag, block)";
|
||||
SetLineMnBlock = "SetLineMnBlock(tag, block)";
|
||||
SetLineTexture = "SetLineTexture(tag, side, position, texture)";
|
||||
SetPicPriority = "SetPicPriority(handle, priority)";
|
||||
SetPicTrans = "SetPicTrans(handle, trans)";
|
||||
SetPicVisible = "SetPicVisible(handle, visible)";
|
||||
SilentTeleport = "SilentTeleport(obj, sectortag)";
|
||||
Sin = "Sin(x)";
|
||||
SkinColor = "SkinColor(playerid)";
|
||||
Spawn = "Spawn(type, x, y, angle, z)";
|
||||
SpawnExplosion = "SpawnExplosion(damage, spot, source)";
|
||||
SpawnMissile = "SpawnMissile(obj, target, missile)";
|
||||
SpawnShot = "SpawnShot(type, source, target, face)";
|
||||
Sqrt = "Sqrt(x)";
|
||||
StartScript = "StartScript(scriptid)";
|
||||
StartSectorSound = "StartSectorSound(tag, soundname)";
|
||||
StartSkill = "StartSkill(skill)";
|
||||
StartSound = "StartSound(obj, soundname)";
|
||||
String = "String expression";
|
||||
TagWait = "TagWait(tag)";
|
||||
Tan = "Tan(x)";
|
||||
Teleport = "Teleport(obj, sectortag)";
|
||||
TestLocation = "TestLocation(obj)";
|
||||
TimedTip = "TimedTip(message)";
|
||||
Tip = "Tip(message)";
|
||||
Wait = "Wait(time)";
|
||||
While = "While(expression)";
|
||||
}
|
||||
|
||||
constants
|
||||
{
|
||||
}
|
676
Build/Scripting/ZDoom_ACS.cfg
Normal file
|
@ -0,0 +1,676 @@
|
|||
/*******************************************************************\
|
||||
Doom Builder Script highlighting definitions for ACS
|
||||
\*******************************************************************/
|
||||
|
||||
casesensitive = 0;
|
||||
insertcase = 0; // 0=Normal, 1=Lowercase, 2=Uppercase
|
||||
linecomment = "//";
|
||||
commentopen = "/*";
|
||||
commentclose = "*/";
|
||||
string = "\"";
|
||||
escape = "\\";
|
||||
terminator = ";";
|
||||
scopeopen = "{";
|
||||
scopeclose = "}";
|
||||
delimiters = " \n\r\t(){}[]:;!%^&*-+=.,<>/\?|\"";
|
||||
functionopen = "(";
|
||||
functionclose = ")";
|
||||
argumentdelimiter = ",";
|
||||
keywordhelp = "http://www.zdoom.org/wiki/index.php?title=%K";
|
||||
|
||||
keywords
|
||||
{
|
||||
#Define = "#Define identifier expression";
|
||||
#Include = "#Include \"\"";
|
||||
#Library = "#Library \"\"";
|
||||
ACS_Execute = "ACS_Execute(script, map, arg1, arg2, arg3)";
|
||||
ACS_ExecuteAlways = "ACS_ExecuteAlways(script, map, arg1, arg2, arg3)";
|
||||
ACS_ExecuteWait = "ACS_ExecuteWait(script, map, arg1, arg2, arg3)";
|
||||
ACS_ExecuteWithResult = "ACS_ExecuteWithResult(script, arg1, arg2, arg3)";
|
||||
ACS_LockedExecute = "ACS_LockedExecute(script, map, arg1, arg2, lock)";
|
||||
ACS_Suspend = "ACS_Suspend(script, map)";
|
||||
ACS_Terminate = "ACS_Terminate(script, map)";
|
||||
ActivatorSound = "ActivatorSound(name, volume)";
|
||||
ActivatorTID = "ActivatorTID()";
|
||||
AmbientSound = "AmbientSound(name, volume)";
|
||||
Autosave = "Autosave()";
|
||||
bool = "bool expression";
|
||||
Break = "Break";
|
||||
CancelFade = "CancelFade()";
|
||||
Case = "Case expression:";
|
||||
Ceiling_CrushAndRaise = "Ceiling_CrushAndRaise(tag, speed, crush)";
|
||||
Ceiling_CrushAndRaiseA = "Ceiling_CrushAndRaiseA(tag, dspeed, uspeed, crush)";
|
||||
Ceiling_CrushAndRaiseSilentA = "Ceiling_CrushAndRaiseSilentA(tag, dspeed, uspeed, crush)";
|
||||
Ceiling_CrushRaiseAndStay = "Ceiling_CrushRaiseAndStay(tag, speed, crush)";
|
||||
Ceiling_CrushRaiseAndStayA = "Ceiling_CrushRaiseAndStayA(tag, dspeed, uspeed, crush)";
|
||||
Ceiling_CrushRaiseAndStaySilA = "Ceiling_CrushRaiseAndStaySilA(tag, dspeed, uspeed, crush)";
|
||||
Ceiling_CrushStop = "Ceiling_CrushStop(tag)";
|
||||
Ceiling_LowerAndCrush = "Ceiling_LowerAndCrush(tag, speed, crush)";
|
||||
Ceiling_LowerByValue = "Ceiling_LowerByValue(tag, speed, height)";
|
||||
Ceiling_LowerByValueTimes8 = "Ceiling_LowerByValueTimes8(tag, speed, height)";
|
||||
Ceiling_LowerInstant = "Ceiling_LowerInstant(tag, arg1, height)";
|
||||
Ceiling_LowerToFloor = "Ceiling_LowerToFloor(tag, speed)";
|
||||
Ceiling_LowerToHighestFloor = "Ceiling_LowerToHighestFloor(tag, speed)";
|
||||
Ceiling_LowerToLowest = "Ceiling_LowerToLowest(tag, speed)";
|
||||
Ceiling_MoveToValueTimes8 = "Ceiling_MoveToValueTimes8(tag, speed, height, neg)";
|
||||
Ceiling_RaiseByValue = "Ceiling_RaiseByValue(tag, speed, height)";
|
||||
Ceiling_RaiseByValueTimes8 = "Ceiling_RaiseByValueTimes8(tag, speed, height)";
|
||||
Ceiling_RaiseInstant = "Ceiling_RaiseInstant(tag, arg1, height)";
|
||||
Ceiling_RaiseToNearest = "Ceiling_RaiseToNearest(tag, speed)";
|
||||
Ceiling_Waggle = "Ceiling_Waggle(tag, amp, freq, offset, time)";
|
||||
ChangeCamera = "ChangeCamera(tid, who, revert)";
|
||||
ChangeCeiling = "ChangeCeiling(tag, flat)";
|
||||
ChangeFloor = "ChangeFloor(tag, flat)";
|
||||
ChangeSkill = "ChangeSkill(skill)";
|
||||
ChangeSky = "ChangeSky(sky1, sky2)";
|
||||
CheckInventory = "CheckInventory(type)";
|
||||
CheckWeapon = "CheckWeapon(weapon)";
|
||||
ClearInventory = "ClearInventory()";
|
||||
ClearLineSpecial = "ClearLineSpecial()";
|
||||
ClearForceField = "ClearForceField(tag)";
|
||||
Const = "Const";
|
||||
Continue = "Continue";
|
||||
cos = "cos(angle)";
|
||||
CreateTranslation = "CreateTranslation(transnumber, translation, translation, translation, ...)";
|
||||
DamageThing = "DamageThing(amount)";
|
||||
Default = "Default:";
|
||||
Delay = "Delay(tics)";
|
||||
Do = "Do";
|
||||
Door_Close = "Door_Close(tag, speed)";
|
||||
Door_CloseWaitOpen = "Door_CloseWaitOpen(tag, speed, delay)";
|
||||
Door_LockedRaise = "Door_LockedRaise(tag, speed, delay, lock)";
|
||||
Door_Open = "Door_Open(tag, speed)";
|
||||
Door_Raise = "Door_Raise(tag, speed, delay)";
|
||||
Elevator_LowerToNearest = "Elevator_LowerToNearest(tag, speed)";
|
||||
Elevator_MoveToFloor = "Elevator_MoveToFloor(tag, speed)";
|
||||
Elevator_RaiseToNearest = "Elevator_RaiseToNearest(tag, speed)";
|
||||
Else = "Else";
|
||||
Exit_Normal = "Exit_Normal(pos)";
|
||||
Exit_Secret = "Exit_Secret(pos)";
|
||||
FadeRange = "FadeRange(red1, green1, blue1, red2, green2, blue2, amount, seconds)";
|
||||
FadeTo = "FadeTo(red, green, blue, amount, seconds)";
|
||||
FixedDiv = "FixedDiv(fa, fb)";
|
||||
FixedMul = "FixedMul(fa, fb)";
|
||||
Floor_CrushStop = "Floor_CrushStop(tag)";
|
||||
Floor_Donut = "Floor_Donut(ptag, pspeed, sspeed)";
|
||||
Floor_LowerByValue = "Floor_LowerByValue(tag, speed, height)";
|
||||
Floor_LowerByValueTimes8 = "Floor_LowerByValueTimes8(tag, speed, height)";
|
||||
Floor_LowerInstant = "Floor_LowerInstant(tag, arg1, height)";
|
||||
Floor_LowerToHighest = "Floor_LowerToHighest(tag, speed, adjust)";
|
||||
Floor_LowerToLowest = "Floor_LowerToLowest(tag, speed)";
|
||||
Floor_LowerToLowestTxTy = "Floor_LowerToLowestTxTy(tag, speed)";
|
||||
Floor_LowerToNearest = "Floor_LowerToNearest(tag, speed)";
|
||||
Floor_MoveToValueTimes8 = "Floor_MoveToValueTimes8(tag, speed, height, neg)";
|
||||
Floor_RaiseAndCrush = "Floor_RaiseAndCrush(tag, speed, crush)";
|
||||
Floor_RaiseByTexture = "Floor_RaiseByTexture(tag, speed)";
|
||||
Floor_RaiseByValue = "Floor_RaiseByValue(tag, speed, height)";
|
||||
Floor_RaiseByValueTimes8 = "Floor_RaiseByValueTimes8(tag, speed, height)";
|
||||
Floor_RaiseByValueTxTy = "Floor_RaiseByValueTxTy(tag, speed, height)";
|
||||
Floor_RaiseInstant = "Floor_RaiseInstant(tag, arg1, height)";
|
||||
Floor_RaiseToHighest = "Floor_RaiseToHighest(tag, speed)";
|
||||
Floor_RaiseToLowestCeiling = "Floor_RaiseToLowestCeiling(tag, speed)";
|
||||
Floor_RaiseToNearest = "Floor_RaiseToNearest(tag, speed)";
|
||||
Floor_TransferNumeric = "Floor_TransferNumeric(tag)";
|
||||
Floor_TransferTrigger = "Floor_TransferTrigger(tag)";
|
||||
Floor_Waggle = "Floor_Waggle(tag, amp, freq, offset, time)";
|
||||
FloorAndCeiling_LowerByValue = "FloorAndCeiling_LowerByValue(tag, speed, height)";
|
||||
FloorAndCeiling_LowerRaise = "FloorAndCeiling_LowerRaise(tag, fspeed, cspeed)";
|
||||
FloorAndCeiling_RaiseByValue = "FloorAndCeiling_RaiseByValue(tag, speed, height)";
|
||||
For = "For(initialization, condition, iteration)";
|
||||
Function = "Function Void expression (Void)";
|
||||
GameSkill = "GameSkill()";
|
||||
GameType = "GameType()";
|
||||
Generic_Ceiling = "Generic_Ceiling(tag, speed, height, target, flag)";
|
||||
Generic_Crusher = "Generic_Crusher(tag, dspeed, uspeed, silent, crush)";
|
||||
Generic_Door = "Generic_Door(tag, speed, kind, delay, lock)";
|
||||
Generic_Floor = "Generic_Floor(tag, speed, height, target, flags)";
|
||||
Generic_Lift = "Generic_Lift(tag, speed, delay, type, height)";
|
||||
Generic_Stairs = "Generic_Stairs(tag, speed, height, flags, reset)";
|
||||
GetActorAngle = "GetActorAngle(tid)";
|
||||
GetActorProperty = "GetActorProperty(tid, property)";
|
||||
GetAmmoCapacity = "GetAmmoCapacity(typename)";
|
||||
GetActorFloorZ = "GetActorFloorZ(tid)";
|
||||
GetActorX = "GetActorX(tid)";
|
||||
GetActorY = "GetActorY(tid)";
|
||||
GetActorZ = "GetActorZ(tid)";
|
||||
GetCVar = "GetCVar(name)";
|
||||
GetLevelInfo = "GetLevelInfo(levelinfo)";
|
||||
GetLineRowOffset = "GetLineRowOffset()";
|
||||
GetScreenHeight = "GetScreenHeight()";
|
||||
GetScreenWidth = "GetScreenWidth()";
|
||||
GetSectorCeilingZ = "GetSectorCeilingZ(tag, x, y)";
|
||||
GetSectorFloorZ = "GetSectorFloorZ(tag, x, y)";
|
||||
GiveInventory = "GiveInventory(type, amount)";
|
||||
HealThing = "HealThing(amount)";
|
||||
HudMessage = "HudMessage(text; type, id, color, x, y, holdtime)";
|
||||
HudMessageBold = "HudMessageBold(text; type, id, color, x, y, holdtime)";
|
||||
If = "If(expression)";
|
||||
int = "int expression";
|
||||
Light_ChangeToValue = "Light_ChangeToValue(tag, value)";
|
||||
Light_Fade = "Light_Fade(tag, value, tics)";
|
||||
Light_Flicker = "Light_Flicker(tag, upper, lower)";
|
||||
Light_ForceLightning = "Light_ForceLightning()";
|
||||
Light_Glow = "Light_Glow(tag, upper, lower, tics)";
|
||||
Light_LowerByValue = "Light_LowerByValue(tag, value)";
|
||||
Light_MaxNeighbor = "Light_MaxNeighbor(tag)";
|
||||
Light_MinNeighbor = "Light_MinNeighbor(tag)";
|
||||
Light_RaiseByValue = "Light_RaiseByValue(tag, value)";
|
||||
Light_Stop = "Light_Stop(tag)";
|
||||
Light_Strobe = "Light_Strobe(tag, upper, lower, u-tics, l-tics)";
|
||||
Light_StrobeDoom = "Light_StrobeDoom(tag, u-tics, l-tics)";
|
||||
Line_AlignCeiling = "Line_AlignCeiling(lineid, side)";
|
||||
Line_AlignFloor = "Line_AlignFloor(lineid, side)";
|
||||
LineSide = "LineSide()";
|
||||
LocalAmbientSound = "LocalAmbientSound(name, volume)";
|
||||
LocalSetMusic = "LocalSetMusic(song, pattern, transition)";
|
||||
NoiseAlert = "NoiseAlert(target, emitter)";
|
||||
Open = "Script expression Open";
|
||||
Pillar_Build = "Pillar_Build(tag, speed, height)";
|
||||
Pillar_BuildAndCrush = "Pillar_BuildAndCrush(tag, speed, height, crush)";
|
||||
Pillar_Open = "Pillar_Open(tag, speed, fdist, cdist)";
|
||||
Plat_DownByValue = "Plat_DownByValue(tag, speed, delay, height)";
|
||||
Plat_DownWaitUpStay = "Plat_DownWaitUpStay(tag, speed, delay)";
|
||||
Plat_DownWaitUpStayLip = "Plat_DownWaitUpStayLip(tag, speed, delay, lip)";
|
||||
Plat_PerpetualRaise = "Plat_PerpetualRaise(tag, speed, delay)";
|
||||
Plat_PerpetualRaiseLip = "Plat_PerpetualRaiseLip(tag, speed, delay, lip)";
|
||||
Plat_RaiseAndStayTx0 = "Plat_RaiseAndStayTx0(tag, speed)";
|
||||
Plat_Stop = "Plat_Stop(tag)";
|
||||
Plat_ToggleCeiling = "Plat_ToggleCeiling(tag)";
|
||||
Plat_UpByValue = "Plat_UpByValue(tag, speed, delay, height)";
|
||||
Plat_UpByValueStayTx = "Plat_UpByValueStayTx(tag, speed, height)";
|
||||
Plat_UpNearestWaitDownStay = "Plat_UpNearestWaitDownStay(tag, speed, delay)";
|
||||
Plat_UpWaitDownStay = "Plat_UpWaitDownStay(tag, speed, delay)";
|
||||
Player_GiveItem = "Player_GiveItem(item, message)";
|
||||
Player_RemoveItem = "Player_RemoveItem(item, message)";
|
||||
Player_SetTeam = "Player_SetTeam(team)";
|
||||
PlayerCount = "PlayerCount()";
|
||||
PlayerInGame = "PlayerInGame(playernum)";
|
||||
PlayerIsBot = "PlayerIsBot(playernum)";
|
||||
PlayerNumber = "PlayerNumber()";
|
||||
PlayMovie = "PlayMovie(moviename)";
|
||||
Polyobj_DoorSlide = "Polyobj_DoorSlide(po, speed, angle, dist, delay)";
|
||||
Polyobj_DoorSwing = "Polyobj_DoorSwing(po, speed, angle, delay)";
|
||||
Polyobj_Move = "Polyobj_Move(po, speed, angle, dist)";
|
||||
Polyobj_MoveTimes8 = "Polyobj_MoveTimes8(po, speed, angle, dist)";
|
||||
Polyobj_OR_Move = "Polyobj_OR_Move(po, speed, angle, distance)";
|
||||
Polyobj_OR_MoveTimes8 = "Polyobj_OR_MoveTimes8(po, speed, angle, distance)";
|
||||
Polyobj_OR_RotateLeft = "Polyobj_OR_RotateLeft(po, speed)";
|
||||
Polyobj_OR_RotateRight = "Polyobj_OR_RotateRight(po, speed, angle)";
|
||||
Polyobj_RotateLeft = "Polyobj_RotateLeft(po, speed, angle)";
|
||||
Polyobj_RotateRight = "Polyobj_RotateRight(po, speed, angle)";
|
||||
PolyWait = "PolyWait(po)";
|
||||
Print = "Print(type:expression)";
|
||||
PrintBold = "PrintBold(type:expression)";
|
||||
Radius_Quake = "Radius_Quake(intensity, duration, damrad, tremrad, tid)";
|
||||
Random = "Random(low, high)";
|
||||
Restart = "Restart";
|
||||
Script = "Script expression (Void)";
|
||||
ScriptWait = "ScriptWait(scriptid)";
|
||||
Scroll_Ceiling = "Scroll_Ceiling(tag, scrollbits, 0, xmove, ymove)";
|
||||
Scroll_Floor = "Scroll_Floor(tag, scrollbits, method xmove, ymove)";
|
||||
Scroll_Texture_Both = "Scroll_Texture_Both(lineid, left, right, down, up)";
|
||||
Sector_ChangeSound = "Sector_ChangeSound(tag, newsequence)";
|
||||
Sector_SetCeilingPanning = "Sector_SetCeilingPanning(tag, u-int, u-frac, v-int, v-frac)";
|
||||
Sector_SetCeilingScale = "Sector_SetCeilingScale(tag, u-int, u-frac, v-int, v-frac)";
|
||||
Sector_SetColor = "Sector_SetColor(tag, r, g, b)";
|
||||
Sector_SetDamage = "Sector_SetDamage(tag, amount, mod)";
|
||||
Sector_SetFade = "Sector_SetFade(tag, r, g, b)";
|
||||
Sector_SetFloorPanning = "Sector_SetFloorPanning(tag, u-int, u-frac, v-int, v-frac)";
|
||||
Sector_SetFloorScale = "Sector_SetFloorScale(tag, u-int, u-frac, v-int, v-frac)";
|
||||
Sector_SetFriction = "Sector_SetFriction(tag, amount)";
|
||||
Sector_SetGravity = "Sector_SetGravity(tag, ipart, fpart)";
|
||||
Sector_SetRotation = "Sector_SetRotation(tag, floor-angle, ceiling-angle)";
|
||||
SectorSound = "SectorSound(name, volume)";
|
||||
SetActorProperty = "SetActorProperty(tid, property, value)";
|
||||
SetAirControl = "SetAirControl(amount)";
|
||||
SetAmmoCapacity = "SetAmmoCapacity(typename, maxamount)";
|
||||
SetCameraToTexture = "SetCameraToTexture(tid, texture, fov)";
|
||||
SetCeilingTrigger = "SetCeilingTrigger(tag, height, special, arg1, arg2, arg3, arg4, arg5)";
|
||||
SetFloorTrigger = "SetFloorTrigger(tag, height, special, arg1, arg2, arg3, arg4, arg5)";
|
||||
SetFont = "SetFont(fontname)";
|
||||
SetGravity = "SetGravity(amount)";
|
||||
SetHudSize = "SetHudSize(width, height, statusbar)";
|
||||
SetLineBlocking = "SetLineBlocking(line, blocking)";
|
||||
SetLineMonsterBlocking = "SetLineMonsterBlocking(line, blocking)";
|
||||
SetLineSpecial = "SetLineSpecial(line, special, arg1, arg2, arg3, arg4, arg5)";
|
||||
SetLineTexture = "SetLineTexture(line, side, position, texture)";
|
||||
SetMarineSprite = "SetMarineSprite(tid, actorclass)";
|
||||
SetMarineWeapon = "SetMarineWeapon(tid, weapon)";
|
||||
SetMusic = "SetMusic(song, pattern, transition)";
|
||||
SetPlayerProperty = "SetPlayerProperty(who, set, which)";
|
||||
SetResultValue = "SetResultValue(value)";
|
||||
SetThingSpecial = "SetThingSpecial(tid, special, arg1, arg2, arg3, arg4, arg5)";
|
||||
SetWeapon = "SetWeapon(weaponname)";
|
||||
sin = "sin(angle)";
|
||||
SoundSequence = "SoundSequence(name)";
|
||||
Spawn = "Spawn(type, x, y, z, thingid, angle)";
|
||||
SpawnSpot = "SpawnSpot(type, spotid, thingid, angle)";
|
||||
Special = "Special";
|
||||
Stairs_BuildDown = "Stairs_BuildDown(tag, speed, height, delay, reset)";
|
||||
Stairs_BuildDownSync = "Stairs_BuildDownSync(tag, speed, height, reset)";
|
||||
Stairs_BuildUp = "Stairs_BuildUp(tag, speed, height, delay, reset)";
|
||||
Stairs_BuildUpDoom = "Stairs_BuildUpDoom(tag, speed, height, delay, reset)";
|
||||
Stairs_BuildUpSync = "Stairs_BuildUpSync(tag, speed, height, reset)";
|
||||
str = "str expression";
|
||||
strlen = "strlen(string)";
|
||||
Suspend = "Suspend";
|
||||
Switch = "Switch(expression)";
|
||||
TagWait = "TagWait(tag)";
|
||||
TakeInventory = "TakeInventory(type, amount)";
|
||||
Team_Score = "Team_Score(amount, nogrin)";
|
||||
Teleport = "Teleport(tid)";
|
||||
Teleport_EndGame = "Teleport_EndGame()";
|
||||
Teleport_Line = "Teleport_Line(thisid, destid, flip)";
|
||||
Teleport_NewMap = "Teleport_NewMap(map, pos)";
|
||||
Teleport_NoFog = "Teleport_NoFog(tid)";
|
||||
TeleportGroup = "TeleportGroup(groupid, sourceid, destinationid, movesource, fog)";
|
||||
TeleportInSector = "TeleportInSector(tag, sourceid, destinationid, fog, groupid)";
|
||||
TeleportOther = "TeleportOther(tid, destinationid, fog)";
|
||||
Teleport_ZombieChanger = "Teleport_ZombieChanger(tid, tag)";
|
||||
Terminate = "Terminate";
|
||||
Thing_Activate = "Thing_Activate(tid)";
|
||||
Thing_ChangeTID = "Thing_ChangeTID(oldtid, newtid)";
|
||||
Thing_Damage = "Thing_Damage(tid, amount, mod)";
|
||||
Thing_Deactivate = "Thing_Deactivate(tid)";
|
||||
Thing_Destroy = "Thing_Destroy(tid, extreme)";
|
||||
Thing_Hate = "Thing_Hate(hater, hatee, type)";
|
||||
Thing_Move = "Thing_Move(tid, destid)";
|
||||
Thing_Projectile = "Thing_Projectile(tid, type, angle, speed, vspeed)";
|
||||
Thing_Projectile2 = "Thing_Projectile2(tid, type, angle, speed, vspeed, gravity, newtid)";
|
||||
Thing_ProjectileAimed = "Thing_ProjectileAimed(tid, type, speed, target, newtid)";
|
||||
Thing_ProjectileGravity = "Thing_ProjectileGravity(tid, type, angle, speed, vspeed)";
|
||||
Thing_ProjectileIntercept = "Thing_ProjectileIntercept(tid, type, speed, target, newtid)";
|
||||
Thing_Remove = "Thing_Remove(tid)";
|
||||
Thing_SetFrame = "Thing_SetFrame(tid, frame)";
|
||||
Thing_SetGoal = "Thing_SetGoal(tid, goal, delay)";
|
||||
Thing_SetSpecial = "Thing_SetSpecial(tid, special, arg1, arg2, arg3)";
|
||||
Thing_SetTranslation = "Thing_SetTranslation(tid, translation)";
|
||||
Thing_Spawn = "Thing_Spawn(tid, type, angle, newtid)";
|
||||
Thing_SpawnFacing = "Thing_SpawnFacing(tid, type, nofog, newtid)";
|
||||
Thing_SpawnNoFog = "Thing_SpawnNoFog(tid, type, angle, newtid)";
|
||||
ThingCount = "ThingCount(type, id)";
|
||||
ThingSound = "ThingSound(thingid, name, volume)";
|
||||
ThrustThing = "ThrustThing(angle, force)";
|
||||
ThrustThingZ = "ThrustThingZ(tid, speed, upordown, addorset)";
|
||||
Timer = "Timer()";
|
||||
TranslucentLine = "TranslucentLine(lineid, amount, additive)";
|
||||
Until = "Until(expression)";
|
||||
UsePuzzleItem = "UsePuzzleItem(item, script)";
|
||||
VectorAngle = "VectorAngle(x, y)";
|
||||
Void = "Void";
|
||||
While = "While(expression)";
|
||||
World = "World Int expression:identifier";
|
||||
}
|
||||
|
||||
constants
|
||||
{
|
||||
TRUE;
|
||||
FALSE;
|
||||
ON;
|
||||
OFF;
|
||||
YES;
|
||||
NO;
|
||||
LINE_FRONT;
|
||||
LINE_BACK;
|
||||
SIDE_FRONT;
|
||||
SIDE_BACK;
|
||||
TEXTURE_TOP;
|
||||
TEXTURE_MIDDLE;
|
||||
TEXTURE_BOTTOM;
|
||||
GAME_SINGLE_PLAYER;
|
||||
GAME_NET_COOPERATIVE;
|
||||
GAME_NET_DEATHMATCH;
|
||||
GAME_NET_TEAMGAME;
|
||||
TEAM_BLUE;
|
||||
TEAM_RED;
|
||||
CLASS_FIGHTER;
|
||||
CLASS_CLERIC;
|
||||
CLASS_MAGE;
|
||||
SKILL_VERY_EASY;
|
||||
SKILL_EASY;
|
||||
SKILL_NORMAL;
|
||||
SKILL_HARD;
|
||||
SKILL_VERY_HARD;
|
||||
BLOCK_NOTHING;
|
||||
BLOCK_CREATURES;
|
||||
BLOCK_EVERYTHING;
|
||||
SCROLL;
|
||||
CARRY;
|
||||
SCROLL_AND_CARRY;
|
||||
MOD_UNKNOWN;
|
||||
MOD_FIST;
|
||||
MOD_PISTOL;
|
||||
MOD_SHOTGUN;
|
||||
MOD_CHAINGUN;
|
||||
MOD_ROCKET;
|
||||
MOD_R_SPLASH;
|
||||
MOD_PLASMARIFLE;
|
||||
MOD_BFG_BOOM;
|
||||
MOD_BFG_SPLASH;
|
||||
MOD_CHAINSAW;
|
||||
MOD_SSHOTGUN;
|
||||
MOD_WATER;
|
||||
MOD_SLIME;
|
||||
MOD_LAVA;
|
||||
MOD_CRUSH;
|
||||
MOD_TELEFRAG;
|
||||
MOD_FALLING;
|
||||
MOD_SUICIDE;
|
||||
MOD_BARREL;
|
||||
MOD_EXIT;
|
||||
MOD_SPLASH;
|
||||
MOD_HIT;
|
||||
MOVIE_Played;
|
||||
MOVIE_Played_NoVideo;
|
||||
MOVIE_Played_Aborted;
|
||||
MOVIE_Failed;
|
||||
PROP_FROZEN;
|
||||
PROP_NOTARGET;
|
||||
PROP_INSTANTWEAPONSWITCH;
|
||||
PROP_FLY;
|
||||
PROP_TOTALLYFROZEN;
|
||||
CR_UNTRANSLATED;
|
||||
CR_BRICK;
|
||||
CR_TAN;
|
||||
CR_GRAY;
|
||||
CR_GREY;
|
||||
CR_GREEN;
|
||||
CR_BROWN;
|
||||
CR_GOLD;
|
||||
CR_RED;
|
||||
CR_BLUE;
|
||||
CR_ORANGE;
|
||||
CR_WHITE;
|
||||
CR_YELLOW;
|
||||
HUDMSG_PLAIN;
|
||||
HUDMSG_FADEOUT;
|
||||
HUDMSG_TYPEON;
|
||||
HUDMSG_LOG0x80000;
|
||||
MARINEWEAPON_Dummy;
|
||||
MARINEWEAPON_Fist;
|
||||
MARINEWEAPON_BerserkFis;
|
||||
MARINEWEAPON_Chainsaw;
|
||||
MARINEWEAPON_Pistol;
|
||||
MARINEWEAPON_Shotgun;
|
||||
MARINEWEAPON_SuperShotgu;
|
||||
MARINEWEAPON_Chaingun;
|
||||
MARINEWEAPON_RocketLaunche;
|
||||
MARINEWEAPON_PlasmaRifl;
|
||||
MARINEWEAPON_Railgun;
|
||||
MARINEWEAPON_BFG;
|
||||
APROP_Health;
|
||||
APROP_Speed;
|
||||
APROP_Damage;
|
||||
APROP_Alpha;
|
||||
APROP_RenderStyl;
|
||||
APROP_Ambush;
|
||||
APROP_Invulnerable;
|
||||
APROP_SeeSound;
|
||||
APROP_AttackSoun;
|
||||
APROP_PainSound;
|
||||
APROP_DeathSoun;
|
||||
APROP_ActiveSoun;
|
||||
STYLE_None;
|
||||
STYLE_Normal;
|
||||
STYLE_Fuzzy;
|
||||
STYLE_SoulTrans;
|
||||
STYLE_OptFuzzy;
|
||||
STYLE_Translucen;
|
||||
STYLE_Add;
|
||||
T_ROCK1;
|
||||
T_ROCK2;
|
||||
T_ROCK3;
|
||||
T_DIRT1;
|
||||
T_DIRT2;
|
||||
T_DIRT3;
|
||||
T_DIRT4;
|
||||
T_DIRT5;
|
||||
T_DIRT6;
|
||||
T_STAINEDGLASS1;
|
||||
T_STAINEDGLASS2;
|
||||
T_STAINEDGLASS3;
|
||||
T_STAINEDGLASS4;
|
||||
T_STAINEDGLASS5;
|
||||
T_STAINEDGLASS6;
|
||||
T_STAINEDGLASS7;
|
||||
T_STAINEDGLASS8;
|
||||
T_STAINEDGLASS9;
|
||||
T_STAINEDGLASS0;
|
||||
T_NONE;
|
||||
T_SHOTGUY;
|
||||
T_CHAINGUY;
|
||||
T_BARON;
|
||||
T_ZOMBIE;
|
||||
T_IMP;
|
||||
T_ARACHNOTRON;
|
||||
T_SPIDERMASTERMIND;
|
||||
T_DEMON;
|
||||
T_SPECTRE;
|
||||
T_IMPFIREBALL;
|
||||
T_CLIP;
|
||||
T_SHELLS;
|
||||
T_CACODEMON;
|
||||
T_REVENANT;
|
||||
T_BRIDGE;
|
||||
T_ARMORBONUS;
|
||||
T_STIMPACK;
|
||||
T_MEDKIT;
|
||||
T_SOULSPHERE;
|
||||
T_SHOTGUN;
|
||||
T_CHAINGUN;
|
||||
T_ROCKETLAUNCHER;
|
||||
T_PLASMAGUN;
|
||||
T_BFG;
|
||||
T_CHAINSAW;
|
||||
T_SUPERSHOTGUN;
|
||||
T_PLASMABOLT;
|
||||
T_TRACER;
|
||||
T_GREENARMOR;
|
||||
T_BLUEARMOR;
|
||||
T_CELL;
|
||||
T_BLUEKEYCARD;
|
||||
T_REDKEYCARD;
|
||||
T_YELLOWKEYCARD;
|
||||
T_YELLOWSKULLKEY;
|
||||
T_REDSKULLKEY;
|
||||
T_BLUESKULLKEY;
|
||||
T_TEMPLARGEFLAME;
|
||||
T_STEALTHBARON;
|
||||
T_STEALTHKNIGHT;
|
||||
T_STEALTHZOMBIE;
|
||||
T_STEALTHSHOTGUY;
|
||||
T_LOSTSOUL;
|
||||
T_VILE;
|
||||
T_MANCUBUS;
|
||||
T_HELLKNIGHT;
|
||||
T_CYBERDEMON;
|
||||
T_PAINELEMENTAL;
|
||||
T_WOLFSS;
|
||||
T_STEALTHARACHNOTRON;
|
||||
T_STEALTHVILE;
|
||||
T_STEALTHCACODEMON;
|
||||
T_STEALTHCHAINGUY;
|
||||
T_STEALTHSERGEANT;
|
||||
T_STEALTHIMP;
|
||||
T_STEALTHMANCUBUS;
|
||||
T_STEALTHREVENANT;
|
||||
T_BARREL;
|
||||
T_CACODEMONSHOT;
|
||||
T_ROCKET;
|
||||
T_BFGSHOT;
|
||||
T_ARACHNOTRONPLASMA;
|
||||
T_BLOOD;
|
||||
T_PUFF;
|
||||
T_MEGASPHERE;
|
||||
T_INVULNERABILITY;
|
||||
T_BERSERK;
|
||||
T_INVISIBILITY;
|
||||
T_IRONFEET;
|
||||
T_COMPUTERMAP;
|
||||
T_LIGHTAMP;
|
||||
T_AMMOBOX;
|
||||
T_ROCKETAMMO;
|
||||
T_ROCKETBOX;
|
||||
T_BATTERY;
|
||||
T_SHELLBOX;
|
||||
T_BACKPACK;
|
||||
T_GUTS;
|
||||
T_BLOODPOOL;
|
||||
T_BLOODPOOL1;
|
||||
T_BLOODPOOL2;
|
||||
T_FLAMINGBARREL;
|
||||
T_BRAINS;
|
||||
T_SCRIPTEDMARINE;
|
||||
T_HEALTHBONUS;
|
||||
T_MANCUBUSSHOT;
|
||||
T_BARONBALL;
|
||||
T_GRENADE;
|
||||
T_DARKIMP;
|
||||
T_BLOODDEMON;
|
||||
T_SSGGUY;
|
||||
T_HECTEBUS;
|
||||
T_CACOLANTERN;
|
||||
T_BELPHEGOR;
|
||||
T_SAUSAGEHEAD;
|
||||
T_SAUSAGESPITTER;
|
||||
T_PISTOL;
|
||||
T_GRENADELAUNCHER;
|
||||
T_RAILGUN;
|
||||
T_BFG10000;
|
||||
T_MINIGUN;
|
||||
T_MAXHEALTHBONUS;
|
||||
T_MASARMORBONUS;
|
||||
T_REDARMOR;
|
||||
T_TURBOSPHERE;
|
||||
T_ANTIGRAVBELT;
|
||||
T_TIMEFREEZER;
|
||||
T_INFRAGOGGLES;
|
||||
T_INFRATRACKER;
|
||||
T_TRANSLUCENCY;
|
||||
T_DOOMSPHERE;
|
||||
T_RANDOMPOWERUP;
|
||||
T_BLUEFLAG;
|
||||
T_REDFLAG;
|
||||
T_WHITEFLAG;
|
||||
T_STRENGTH;
|
||||
T_RAGE;
|
||||
T_DRAIN;
|
||||
T_SPREAD;
|
||||
T_RESISTANCE;
|
||||
T_REGENERATION;
|
||||
T_PROSPERITY;
|
||||
T_REFLECTION;
|
||||
T_HIGHJUMP;
|
||||
T_HASTE;
|
||||
T_DEADCYBERDEMON;
|
||||
T_BOBBINGSKULLINFLAMES;
|
||||
T_IMPALINGSPIKE;
|
||||
T_IMPALINGSPIKECGUN;
|
||||
T_IMPALINGSPIKEZOMB;
|
||||
T_IMPSTATUE;
|
||||
T_DEMONSTATUE;
|
||||
T_ARCHSTATUE;
|
||||
T_BARONSTATUE;
|
||||
T_CYBERDEMONSTATUE;
|
||||
T_MASSMOUTHSTATUE;
|
||||
T_GREYSTALAGMITE;
|
||||
T_SHORTGREYPILLAR;
|
||||
T_TALLGREYPILLAR;
|
||||
T_GREYPILLARHEART;
|
||||
T_TALLGOTHICPILLAR;
|
||||
T_REVENANTHAND;
|
||||
T_IMPHEAD;
|
||||
T_HISSY;
|
||||
T_HELLPILLAR;
|
||||
T_GOTHICPILLAR;
|
||||
T_STARBASEPILLAR;
|
||||
T_MILITARYPILLAR;
|
||||
T_LABORTORYPILLAR;
|
||||
T_CLINK;
|
||||
T_MUMMYLEADER;
|
||||
T_BEAST;
|
||||
T_MUMMY;
|
||||
T_KNIGHT;
|
||||
T_IMPLEADER;
|
||||
T_MUMMYGHOST;
|
||||
T_MUMMYLEADERGHOST;
|
||||
T_WIMPYWANDAMMO;
|
||||
T_HEFTYWANDAMMO;
|
||||
T_ITEMEGG;
|
||||
T_ITEMFLIGHT;
|
||||
T_ITEMTELEPORT;
|
||||
T_WIZARD;
|
||||
T_IRONLICH;
|
||||
T_ITEMHEALTHPOTION;
|
||||
T_ITEMHEALTHFLASH;
|
||||
T_ITEMHEALTHFULL;
|
||||
T_CROSSBOW;
|
||||
T_BLASTER;
|
||||
T_PHOENIXROD;
|
||||
T_SKULLROD;
|
||||
T_MACE;
|
||||
T_GAUNTLETS;
|
||||
T_WIMPYCROSSBOWAMMO;
|
||||
T_HEFTYCROSSBOWAMMO;
|
||||
T_WIMPYMACEAMMO;
|
||||
T_HEFTYMACEAMMO;
|
||||
T_WIMPYBLASTERAMMO;
|
||||
T_HEFTYBLASTERAMMO;
|
||||
T_MORPHBLAST;
|
||||
T_SHIELD1;
|
||||
T_SHIELD2;
|
||||
T_ITEMTIMEBOMB;
|
||||
T_ITEMTORCH;
|
||||
T_BLUEKEY;
|
||||
T_GREENKEY;
|
||||
T_YELLOWKEY;
|
||||
T_SOUND_WIND;
|
||||
T_SOUND_WATERFALL;
|
||||
T_BEASTBALL;
|
||||
T_FEATHER;
|
||||
T_CHICKEN;
|
||||
T_VOLCANOBALL;
|
||||
T_TINYVOLCANOBALL;
|
||||
T_POD;
|
||||
T_PODGENERATOR;
|
||||
T_KNIGHTAXE;
|
||||
T_KNIGHTBLOODAXE;
|
||||
T_KNIGHTGHOST;
|
||||
T_MUMMYHEAD;
|
||||
T_SNAKE;
|
||||
T_ITEMINVULNERABILITY;
|
||||
T_ITEMTOME;
|
||||
T_ITEMINVISIBILITY;
|
||||
T_ITEMBAGOFHOLDING;
|
||||
T_ITEMALLMAP;
|
||||
T_SNAKEPROJECTILE;
|
||||
T_SNAKEPROJECTILEBIG;
|
||||
T_WIZARDSHOT;
|
||||
T_DSPARILTELEPORTDEST;
|
||||
T_DSPARILONSERPENT;
|
||||
T_DSPARILALONE;
|
||||
T_SERPENTFIREBALL;
|
||||
T_DSPARILBLUESHOT;
|
||||
T_DSPARILWIZARDSPAWNER;
|
||||
T_CROSSBOWMAINBLAST;
|
||||
T_CROSSBOWMINIBLAST;
|
||||
T_CROSSBOWPOWERBLAST;
|
||||
T_VOLCANO;
|
||||
T_POWERWANDMINIBLAST;
|
||||
T_POWERWANDBIGGERBLAST;
|
||||
T_DEATHBALL;
|
||||
T_NOGRAVITYMACEBALL;
|
||||
T_BOUNCYMACEBALL;
|
||||
T_HEAVYMACEBALL;
|
||||
T_RIPPER;
|
||||
T_WIMPYSKULLRODAMMO;
|
||||
T_HEFTYSKULLRODAMMO;
|
||||
T_SKULLRODBLAST;
|
||||
T_WIMPYPHOENIXRODAMMO;
|
||||
T_HEFTYPHOENIXRODAMMO;
|
||||
T_PHOENIXSHOT;
|
||||
T_IRONLICHBLUESHOT;
|
||||
T_WHIRLWIND;
|
||||
T_REDTELEGLITTER;
|
||||
T_BLUETELEGLITTER;
|
||||
}
|
20
Builder.sln
Normal file
|
@ -0,0 +1,20 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Builder", "Source\Builder.csproj", "{818B3D10-F791-4C3F-9AF5-BB2D0079B63C}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{818B3D10-F791-4C3F-9AF5-BB2D0079B63C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{818B3D10-F791-4C3F-9AF5-BB2D0079B63C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{818B3D10-F791-4C3F-9AF5-BB2D0079B63C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{818B3D10-F791-4C3F-9AF5-BB2D0079B63C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
BIN
Resources/Builder.ico
Normal file
After Width: | Height: | Size: 7.2 KiB |
BIN
Resources/Builder_16.ico
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
Resources/Builder_32.ico
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
Resources/Builder_48.ico
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
Resources/Splash.cpt
Normal file
BIN
Resources/Splash2.png
Normal file
After Width: | Height: | Size: 227 KiB |
94
Source/Builder.csproj
Normal file
|
@ -0,0 +1,94 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>8.0.50727</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{818B3D10-F791-4C3F-9AF5-BB2D0079B63C}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>CodeImp.DoomBuilder</RootNamespace>
|
||||
<AssemblyName>Builder</AssemblyName>
|
||||
<StartupObject>CodeImp.DoomBuilder.General</StartupObject>
|
||||
<ApplicationIcon>Builder.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\Build\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>..\Build\</OutputPath>
|
||||
<DefineConstants>
|
||||
</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
<ItemGroup>
|
||||
<Compile Include="Geometry\Angle2D.cs" />
|
||||
<Compile Include="Geometry\Line2D.cs" />
|
||||
<Compile Include="Geometry\Vector2D.cs" />
|
||||
<Compile Include="Geometry\Vector3D.cs" />
|
||||
<Compile Include="IO\Configuration.cs" />
|
||||
<Compile Include="General\General.cs" />
|
||||
<Compile Include="IO\ClippedStream.cs" />
|
||||
<Compile Include="IO\Lump.cs" />
|
||||
<Compile Include="IO\WAD.cs" />
|
||||
<Compile Include="Interface\MainForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Interface\MainForm.Designer.cs">
|
||||
<DependentUpon>MainForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Map\Linedef.cs" />
|
||||
<Compile Include="Map\MapManager.cs" />
|
||||
<Compile Include="Map\Sidedef.cs" />
|
||||
<Compile Include="Map\Vertex.cs" />
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Interface\MainForm.resx">
|
||||
<SubType>Designer</SubType>
|
||||
<DependentUpon>MainForm.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Builder.ico" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\Splash2.png" />
|
||||
</ItemGroup>
|
||||
</Project>
|
BIN
Source/Builder.ico
Normal file
After Width: | Height: | Size: 7.2 KiB |
85
Source/General/General.cs
Normal file
|
@ -0,0 +1,85 @@
|
|||
|
||||
/*
|
||||
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
|
||||
* This program is released under GNU General Public License
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using CodeImp.DoomBuilder.Interface;
|
||||
using CodeImp.DoomBuilder.IO;
|
||||
|
||||
namespace CodeImp.DoomBuilder
|
||||
{
|
||||
internal static class General
|
||||
{
|
||||
#region ================== Constants
|
||||
|
||||
// Files and Folders
|
||||
private const string SETTINGS_CONFIG_FILE = "Builder.cfg";
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Variables
|
||||
|
||||
// Files and Folders
|
||||
private static string apppath;
|
||||
private static string temppath;
|
||||
|
||||
// Main objects
|
||||
private static MainForm mainwindow;
|
||||
private static Configuration settings;
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Properties
|
||||
|
||||
public static string AppPath { get { return apppath; } }
|
||||
public static string TempPath { get { return temppath; } }
|
||||
public static MainForm MainWindow { get { return mainwindow; } }
|
||||
public static Configuration Settings { get { return settings; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Methods
|
||||
|
||||
// Main program entry
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
// Find application path
|
||||
string dirpath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
|
||||
Uri localpath = new Uri(dirpath);
|
||||
apppath = Uri.UnescapeDataString(localpath.AbsolutePath);
|
||||
|
||||
// Temporary directory
|
||||
temppath = Path.GetTempPath();
|
||||
|
||||
// Load configuration
|
||||
if(!File.Exists(Path.Combine(apppath, SETTINGS_CONFIG_FILE))) throw (new FileNotFoundException("Unable to find the program configuration \"" + SETTINGS_CONFIG_FILE + "\"."));
|
||||
settings = new Configuration(Path.Combine(apppath, SETTINGS_CONFIG_FILE), false);
|
||||
|
||||
// Create main window
|
||||
mainwindow = new MainForm();
|
||||
|
||||
// Show main window
|
||||
mainwindow.Show();
|
||||
|
||||
// Run application from the main window
|
||||
Application.Run(mainwindow);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
58
Source/Geometry/Angle2D.cs
Normal file
|
@ -0,0 +1,58 @@
|
|||
|
||||
/*
|
||||
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
|
||||
* This program is released under GNU General Public License
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
|
||||
namespace CodeImp.DoomBuilder.Geometry
|
||||
{
|
||||
internal struct Angle2D
|
||||
{
|
||||
#region ================== Constants
|
||||
|
||||
public const float PI = (float)Math.PI;
|
||||
public const float PI2 = (float)Math.PI * 2f;
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Methods
|
||||
|
||||
// This normalizes an angle
|
||||
public static float Normalized(float a)
|
||||
{
|
||||
while(a < 0f) a += PI2;
|
||||
while(a > PI2) a -= PI2;
|
||||
return a;
|
||||
}
|
||||
|
||||
// This returns the difference between two angles
|
||||
public static float Difference(float a, float b)
|
||||
{
|
||||
float d;
|
||||
|
||||
// Calculate delta angle
|
||||
d = Normalized(a) - Normalized(b);
|
||||
|
||||
// Make corrections for zero barrier
|
||||
if(d < 0f) d += PI2;
|
||||
if(d > PI) d -= PI2;
|
||||
|
||||
// Return result
|
||||
return d;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
260
Source/Geometry/Line2D.cs
Normal file
|
@ -0,0 +1,260 @@
|
|||
|
||||
/*
|
||||
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
|
||||
* This program is released under GNU General Public License
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
|
||||
namespace CodeImp.DoomBuilder.Geometry
|
||||
{
|
||||
internal struct Line2D
|
||||
{
|
||||
#region ================== Constants
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Variables
|
||||
|
||||
// Coordinates
|
||||
public Vector2D v1;
|
||||
public Vector2D v2;
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Constructors
|
||||
|
||||
// Constructor
|
||||
public Line2D(Vector2D v1, Vector2D v2)
|
||||
{
|
||||
this.v1 = v1;
|
||||
this.v2 = v2;
|
||||
}
|
||||
|
||||
// Constructor
|
||||
public Line2D(Vector2D v1, float x2, float y2)
|
||||
{
|
||||
this.v1 = v1;
|
||||
this.v2 = new Vector2D(x2, y2);
|
||||
}
|
||||
|
||||
// Constructor
|
||||
public Line2D(float x1, float y1, Vector2D v2)
|
||||
{
|
||||
this.v1 = new Vector2D(x1, y1);
|
||||
this.v2 = v2;
|
||||
}
|
||||
|
||||
// Constructor
|
||||
public Line2D(float x1, float y1, float x2, float y2)
|
||||
{
|
||||
this.v1 = new Vector2D(x1, y1);
|
||||
this.v2 = new Vector2D(x2, y2);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Statics
|
||||
|
||||
// This calculates the length
|
||||
public static float GetLength(float dx, float dy)
|
||||
{
|
||||
// Calculate and return the length
|
||||
return (float)Math.Sqrt(GetLengthSq(dx, dy));
|
||||
}
|
||||
|
||||
// This calculates the square of the length
|
||||
public static float GetLengthSq(float dx, float dy)
|
||||
{
|
||||
// Calculate and return the length
|
||||
return dx * dx + dy * dy;
|
||||
}
|
||||
|
||||
// This calculates the normal of a line
|
||||
public static Vector2D GetNormal(float dx, float dy)
|
||||
{
|
||||
return new Vector2D(dx, dy).GetNormal();
|
||||
}
|
||||
|
||||
// This tests if the line intersects with the given line coordinates
|
||||
public static bool GetIntersection(Vector2D v1, Vector2D v2, float x3, float y3, float x4, float y4)
|
||||
{
|
||||
float u_ray, u_line;
|
||||
return GetIntersection(v1, v2, x3, y3, x4, y4, out u_ray, out u_line);
|
||||
}
|
||||
|
||||
// This tests if the line intersects with the given line coordinates
|
||||
public static bool GetIntersection(Vector2D v1, Vector2D v2, float x3, float y3, float x4, float y4, out float u_ray)
|
||||
{
|
||||
float u_line;
|
||||
return GetIntersection(v1, v2, x3, y3, x4, y4, out u_ray, out u_line);
|
||||
}
|
||||
|
||||
// This tests if the line intersects with the given line coordinates
|
||||
public static bool GetIntersection(Vector2D v1, Vector2D v2, float x3, float y3, float x4, float y4, out float u_ray, out float u_line)
|
||||
{
|
||||
// Calculate divider
|
||||
float div = (y4 - y3) * (v2.x - v1.x) - (x4 - x3) * (v2.y - v1.y);
|
||||
|
||||
// Can this be tested?
|
||||
if((div > 0.000001f) || (div < -0.000001f))
|
||||
{
|
||||
// Calculate the intersection distance from the line
|
||||
u_line = ((x4 - x3) * (v1.y - y3) - (y4 - y3) * (v1.x - x3)) / div;
|
||||
|
||||
// Calculate the intersection distance from the ray
|
||||
u_ray = ((v2.x - v1.x) * (v1.y - y3) - (v2.y - v1.y) * (v1.x - x3)) / div;
|
||||
|
||||
// Return if intersecting
|
||||
return (u_ray >= 0.0f) && (u_ray <= 1.0f) && (u_line >= 0.0f) && (u_line <= 1.0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Unable to detect intersection
|
||||
u_line = float.NaN;
|
||||
u_ray = float.NaN;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// This tests on which side of the line the given coordinates are
|
||||
// returns < 0 for front (right) side, > 0 for back (left) side and 0 if on the line
|
||||
public static float GetSideOfLine(Vector2D v1, Vector2D v2, Vector2D p)
|
||||
{
|
||||
// Calculate and return side information
|
||||
return (p.y - v1.y) * (v2.x - v1.x) - (p.x - v1.x) * (v2.y - v1.y);
|
||||
}
|
||||
|
||||
// This returns the shortest distance from given coordinates to line
|
||||
public static float GetDistanceToLine(Vector2D v1, Vector2D v2, Vector2D p, bool bounded)
|
||||
{
|
||||
return (float)Math.Sqrt(GetDistanceToLineSq(v1, v2, p, bounded));
|
||||
}
|
||||
|
||||
// This returns the shortest distance from given coordinates to line
|
||||
public static float GetDistanceToLineSq(Vector2D v1, Vector2D v2, Vector2D p, bool bounded)
|
||||
{
|
||||
// Calculate intersection offset
|
||||
float u = ((p.x - v1.x) * (v2.x - v1.x) + (p.y - v1.y) * (v2.y - v1.y)) / GetLengthSq(v2.x - v1.x, v2.y - v1.y);
|
||||
|
||||
if(bounded)
|
||||
{
|
||||
/*
|
||||
// Limit intersection offset to the line
|
||||
float lbound = 1f / GetLength(v2.x - v1.x, v2.y - v1.y);
|
||||
float ubound = 1f - lbound;
|
||||
if(u < lbound) u = lbound;
|
||||
if(u > ubound) u = ubound;
|
||||
*/
|
||||
if(u < 0f) u = 0f; else if(u > 1f) u = 1f;
|
||||
}
|
||||
|
||||
// Calculate intersection point
|
||||
Vector2D i = v1 + u * (v2 - v1);
|
||||
|
||||
// Return distance between intersection and point
|
||||
// which is the shortest distance to the line
|
||||
float ldx = p.x - i.x;
|
||||
float ldy = p.y - i.y;
|
||||
return ldx * ldx + ldy * ldy;
|
||||
}
|
||||
|
||||
// This returns the offset coordinates on the line nearest to the given coordinates
|
||||
public static float GetNearestOnLine(Vector2D v1, Vector2D v2, Vector2D p)
|
||||
{
|
||||
// Calculate and return intersection offset
|
||||
return ((p.x - v1.x) * (v2.x - v1.x) + (p.y - v1.y) * (v2.y - v1.y)) / GetLengthSq(v2.x - v1.x, v2.y - v1.y);
|
||||
}
|
||||
|
||||
// This returns the coordinates at a specific position on the line
|
||||
public static Vector2D GetCoordinatesAt(Vector2D v1, Vector2D v2, float u)
|
||||
{
|
||||
// Calculate and return intersection offset
|
||||
return new Vector2D(v1.x + u * (v2.x - v1.x), v1.y + u * (v2.y - v1.y));
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Methods
|
||||
|
||||
// This calculates the angle
|
||||
public float GetAngle()
|
||||
{
|
||||
// Calculate and return the angle
|
||||
Vector2D d = GetDelta();
|
||||
return -(float)Math.Atan2(-d.y, d.x) + (float)Math.PI * 0.5f;
|
||||
}
|
||||
|
||||
public Vector2D GetDelta() { return v2 - v1; }
|
||||
|
||||
public float GetLength() { return Line2D.GetLength(v2.x - v1.x, v2.y - v1.y); }
|
||||
public float GetLengthSq() { return Line2D.GetLengthSq(v2.x - v1.x, v2.y - v1.y); }
|
||||
|
||||
public bool GetIntersection(float x3, float y3, float x4, float y4)
|
||||
{
|
||||
return Line2D.GetIntersection(v1, v2, x3, y3, x4, y4);
|
||||
}
|
||||
|
||||
public bool GetIntersection(float x3, float y3, float x4, float y4, out float u_ray)
|
||||
{
|
||||
return Line2D.GetIntersection(v1, v2, x3, y3, x4, y4, out u_ray);
|
||||
}
|
||||
|
||||
public bool GetIntersection(float x3, float y3, float x4, float y4, out float u_ray, out float u_line)
|
||||
{
|
||||
return Line2D.GetIntersection(v1, v2, x3, y3, x4, y4, out u_ray, out u_line);
|
||||
}
|
||||
|
||||
public bool GetIntersection(Line2D ray)
|
||||
{
|
||||
return Line2D.GetIntersection(v1, v2, ray.v1.x, ray.v1.y, ray.v2.x, ray.v2.y);
|
||||
}
|
||||
|
||||
public bool GetIntersection(Line2D ray, out float u_ray)
|
||||
{
|
||||
return Line2D.GetIntersection(v1, v2, ray.v1.x, ray.v1.y, ray.v2.x, ray.v2.y, out u_ray);
|
||||
}
|
||||
|
||||
public bool GetIntersection(Line2D ray, out float u_ray, out float u_line)
|
||||
{
|
||||
return Line2D.GetIntersection(v1, v2, ray.v1.x, ray.v1.y, ray.v2.x, ray.v2.y, out u_ray, out u_line);
|
||||
}
|
||||
|
||||
public float GetSideOfLine(Vector2D p)
|
||||
{
|
||||
return Line2D.GetSideOfLine(v1, v2, p);
|
||||
}
|
||||
|
||||
public float GetDistanceToLine(Vector2D p, bool bounded)
|
||||
{
|
||||
return Line2D.GetDistanceToLine(v1, v2, p, bounded);
|
||||
}
|
||||
|
||||
public float GetDistanceToLineSq(Vector2D p, bool bounded)
|
||||
{
|
||||
return Line2D.GetDistanceToLineSq(v1, v2, p, bounded);
|
||||
}
|
||||
|
||||
public float GetNearestOnLine(Vector2D p)
|
||||
{
|
||||
return Line2D.GetNearestOnLine(v1, v2, p);
|
||||
}
|
||||
|
||||
public Vector2D GetCoordinatesAt(float u)
|
||||
{
|
||||
return Line2D.GetCoordinatesAt(v1, v2, u);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
257
Source/Geometry/Vector2D.cs
Normal file
|
@ -0,0 +1,257 @@
|
|||
|
||||
/*
|
||||
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
|
||||
* This program is released under GNU General Public License
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
|
||||
namespace CodeImp.DoomBuilder.Geometry
|
||||
{
|
||||
internal struct Vector2D
|
||||
{
|
||||
#region ================== Constants
|
||||
|
||||
private const float TINY_VALUE = 0.0000000001f;
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Variables
|
||||
|
||||
// Coordinates
|
||||
public float x;
|
||||
public float y;
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Constructors
|
||||
|
||||
// Constructor
|
||||
public Vector2D(float x, float y)
|
||||
{
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
// Constructor
|
||||
public Vector2D(Vector3D v)
|
||||
{
|
||||
this.x = v.x;
|
||||
this.y = v.y;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Statics
|
||||
|
||||
// Conversion to Vector3D
|
||||
public static implicit operator Vector3D(Vector2D a)
|
||||
{
|
||||
return new Vector3D(a);
|
||||
}
|
||||
|
||||
// This adds two vectors
|
||||
public static Vector2D operator +(Vector2D a, Vector2D b)
|
||||
{
|
||||
return new Vector2D(a.x + b.x, a.y + b.y);
|
||||
}
|
||||
|
||||
// This adds to a vector
|
||||
public static Vector2D operator +(float a, Vector2D b)
|
||||
{
|
||||
return new Vector2D(a + b.x, a + b.y);
|
||||
}
|
||||
|
||||
// This adds to a vector
|
||||
public static Vector2D operator +(Vector2D a, float b)
|
||||
{
|
||||
return new Vector2D(a.x + b, a.y + b);
|
||||
}
|
||||
|
||||
// This subtracts two vectors
|
||||
public static Vector2D operator -(Vector2D a, Vector2D b)
|
||||
{
|
||||
return new Vector2D(a.x - b.x, a.y - b.y);
|
||||
}
|
||||
|
||||
// This subtracts from a vector
|
||||
public static Vector2D operator -(Vector2D a, float b)
|
||||
{
|
||||
return new Vector2D(a.x - b, a.y - b);
|
||||
}
|
||||
|
||||
// This subtracts from a vector
|
||||
public static Vector2D operator -(float a, Vector2D b)
|
||||
{
|
||||
return new Vector2D(a - b.x, a - b.y);
|
||||
}
|
||||
|
||||
// This reverses a vector
|
||||
public static Vector2D operator -(Vector2D a)
|
||||
{
|
||||
return new Vector2D(-a.x, -a.y);
|
||||
}
|
||||
|
||||
// This scales a vector
|
||||
public static Vector2D operator *(float s, Vector2D a)
|
||||
{
|
||||
return new Vector2D(a.x * s, a.y * s);
|
||||
}
|
||||
|
||||
// This scales a vector
|
||||
public static Vector2D operator *(Vector2D a, float s)
|
||||
{
|
||||
return new Vector2D(a.x * s, a.y * s);
|
||||
}
|
||||
|
||||
// This scales a vector
|
||||
public static Vector2D operator *(Vector2D a, Vector2D b)
|
||||
{
|
||||
return new Vector2D(a.x * b.x, a.y * b.y);
|
||||
}
|
||||
|
||||
// This scales a vector
|
||||
public static Vector2D operator /(float s, Vector2D a)
|
||||
{
|
||||
return new Vector2D(a.x / s, a.y / s);
|
||||
}
|
||||
|
||||
// This scales a vector
|
||||
public static Vector2D operator /(Vector2D a, float s)
|
||||
{
|
||||
return new Vector2D(a.x / s, a.y / s);
|
||||
}
|
||||
|
||||
// This scales a vector
|
||||
public static Vector2D operator /(Vector2D a, Vector2D b)
|
||||
{
|
||||
return new Vector2D(a.x / b.x, a.y / b.y);
|
||||
}
|
||||
|
||||
// This calculates the dot product
|
||||
public static float DotProduct(Vector2D a, Vector2D b)
|
||||
{
|
||||
// Calculate and return the dot product
|
||||
return a.x * b.x + a.y * b.y;
|
||||
}
|
||||
|
||||
// This reflects the vector v over mirror m
|
||||
// Note that mirror m must be normalized!
|
||||
// R = V - 2 * M * (M dot V)
|
||||
public static Vector2D Reflect(Vector2D v, Vector2D m)
|
||||
{
|
||||
// Get the dot product of v and m
|
||||
float dp = Vector2D.DotProduct(m, v);
|
||||
|
||||
// Make the reflected vector
|
||||
Vector2D mv = new Vector2D();
|
||||
mv.x = v.x - (2f * m.x * dp);
|
||||
mv.y = v.y - (2f * m.y * dp);
|
||||
|
||||
// Return the reflected vector
|
||||
return mv;
|
||||
}
|
||||
|
||||
// This returns the reversed vector
|
||||
public static Vector2D Reversed(Vector2D v)
|
||||
{
|
||||
// Return reversed vector
|
||||
return new Vector2D(-v.x, -v.y);
|
||||
}
|
||||
|
||||
// This returns a vector from an angle
|
||||
public static Vector2D FromAngle(float angle)
|
||||
{
|
||||
// Return vector from angle
|
||||
return new Vector2D((float)Math.Sin(angle), -(float)Math.Cos(angle));
|
||||
}
|
||||
|
||||
// This returns a vector from an angle with a given legnth
|
||||
public static Vector2D FromAngle(float angle, float length)
|
||||
{
|
||||
// Return vector from angle
|
||||
return FromAngle(angle) * length;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Methods
|
||||
|
||||
// This calculates the angle
|
||||
public float GetAngle()
|
||||
{
|
||||
// Calculate and return the angle
|
||||
return -(float)Math.Atan2(-y, x) + (float)Math.PI * 0.5f;
|
||||
}
|
||||
|
||||
// This calculates the length
|
||||
public float GetLength()
|
||||
{
|
||||
// Calculate and return the length
|
||||
return (float)Math.Sqrt(x * x + y * y);
|
||||
}
|
||||
|
||||
// This calculates the square length
|
||||
public float GetLengthSq()
|
||||
{
|
||||
// Calculate and return the square length
|
||||
return x * x + y * y;
|
||||
}
|
||||
|
||||
// This calculates the length
|
||||
public float GetManhattanLength()
|
||||
{
|
||||
// Calculate and return the length
|
||||
return Math.Abs(x) + Math.Abs(y);
|
||||
}
|
||||
|
||||
// This returns a normalized vector
|
||||
public Vector2D GetNormal()
|
||||
{
|
||||
float lensq = this.GetLengthSq();
|
||||
if(lensq > TINY_VALUE)
|
||||
{
|
||||
// Divide each element by the length
|
||||
float mul = 1f / (float)Math.Sqrt(lensq);
|
||||
return new Vector2D(x * mul, y * mul);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Cannot make normal
|
||||
return new Vector2D(0f, 0f);
|
||||
}
|
||||
}
|
||||
|
||||
// This scales the vector
|
||||
public Vector2D GetScaled(float s)
|
||||
{
|
||||
// Scale the vector
|
||||
return new Vector2D(x * s, y * s);
|
||||
}
|
||||
|
||||
// This changes the vector length
|
||||
public Vector2D GetFixedLength(float l)
|
||||
{
|
||||
// Normalize, then scale
|
||||
return this.GetNormal().GetScaled(l);
|
||||
}
|
||||
|
||||
// Output
|
||||
public override string ToString()
|
||||
{
|
||||
return x + ", " + y;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
276
Source/Geometry/Vector3D.cs
Normal file
|
@ -0,0 +1,276 @@
|
|||
|
||||
/*
|
||||
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
|
||||
* This program is released under GNU General Public License
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
|
||||
namespace CodeImp.DoomBuilder.Geometry
|
||||
{
|
||||
internal struct Vector3D
|
||||
{
|
||||
#region ================== Constants
|
||||
|
||||
private const float TINY_VALUE = 0.0000000001f;
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Variables
|
||||
|
||||
// Coordinates
|
||||
public float x;
|
||||
public float y;
|
||||
public float z;
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Constructors
|
||||
|
||||
// Constructor
|
||||
public Vector3D(float x, float y, float z)
|
||||
{
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
}
|
||||
|
||||
// Constructor
|
||||
public Vector3D(Vector2D v)
|
||||
{
|
||||
this.x = v.x;
|
||||
this.y = v.y;
|
||||
this.z = 0f;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Statics
|
||||
|
||||
// Conversion to Vector2D
|
||||
public static implicit operator Vector2D(Vector3D a)
|
||||
{
|
||||
return new Vector2D(a);
|
||||
}
|
||||
|
||||
// This adds two vectors
|
||||
public static Vector3D operator +(Vector3D a, Vector3D b)
|
||||
{
|
||||
return new Vector3D(a.x + b.x, a.y + b.y, a.z + b.z);
|
||||
}
|
||||
|
||||
// This subtracts two vectors
|
||||
public static Vector3D operator -(Vector3D a, Vector3D b)
|
||||
{
|
||||
return new Vector3D(a.x - b.x, a.y - b.y, a.z - b.z);
|
||||
}
|
||||
|
||||
// This reverses a vector
|
||||
public static Vector3D operator -(Vector3D a)
|
||||
{
|
||||
return new Vector3D(-a.x, -a.y, -a.z);
|
||||
}
|
||||
|
||||
// This scales a vector
|
||||
public static Vector3D operator *(float s, Vector3D a)
|
||||
{
|
||||
return new Vector3D(a.x * s, a.y * s, a.z * s);
|
||||
}
|
||||
|
||||
// This scales a vector
|
||||
public static Vector3D operator *(Vector3D a, float s)
|
||||
{
|
||||
return new Vector3D(a.x * s, a.y * s, a.z * s);
|
||||
}
|
||||
|
||||
// This scales a vector
|
||||
public static Vector3D operator *(Vector3D a, Vector3D b)
|
||||
{
|
||||
return new Vector3D(a.x * b.x, a.y * b.y, a.z * b.z);
|
||||
}
|
||||
|
||||
// This scales a vector
|
||||
public static Vector3D operator /(float s, Vector3D a)
|
||||
{
|
||||
return new Vector3D(a.x / s, a.y / s, a.z / s);
|
||||
}
|
||||
|
||||
// This scales a vector
|
||||
public static Vector3D operator /(Vector3D a, float s)
|
||||
{
|
||||
return new Vector3D(a.x / s, a.y / s, a.z / s);
|
||||
}
|
||||
|
||||
// This compares a vector
|
||||
public static bool operator ==(Vector3D a, Vector3D b)
|
||||
{
|
||||
return (a.x == b.x) && (a.y == b.y) && (a.z == b.z);
|
||||
}
|
||||
|
||||
// This compares a vector
|
||||
public static bool operator !=(Vector3D a, Vector3D b)
|
||||
{
|
||||
return (a.x != b.x) || (a.y != b.y) || (a.z != b.z);
|
||||
}
|
||||
|
||||
// This calculates the cross product
|
||||
public static Vector3D CrossProduct(Vector3D a, Vector3D b)
|
||||
{
|
||||
Vector3D result = new Vector3D();
|
||||
|
||||
// Calculate and return the dot product
|
||||
result.x = a.y * b.z - a.z * b.y;
|
||||
result.y = a.z * b.x - a.x * b.z;
|
||||
result.z = a.x * b.y - a.y * b.x;
|
||||
return result;
|
||||
}
|
||||
|
||||
// This calculates the dot product
|
||||
public static float DotProduct(Vector3D a, Vector3D b)
|
||||
{
|
||||
// Calculate and return the dot product
|
||||
return a.x * b.x + a.y * b.y + a.z * b.z;
|
||||
}
|
||||
|
||||
// This reflects the vector v over mirror m
|
||||
// Note that mirror m must be normalized!
|
||||
public static Vector3D Reflect(Vector3D v, Vector3D m)
|
||||
{
|
||||
// Get the dot product of v and m
|
||||
float dp = Vector3D.DotProduct(v, m);
|
||||
|
||||
// Make the reflected vector
|
||||
Vector3D mv = new Vector3D();
|
||||
mv.x = -v.x + 2f * m.x * dp;
|
||||
mv.y = -v.y + 2f * m.y * dp;
|
||||
mv.z = -v.z + 2f * m.z * dp;
|
||||
|
||||
// Return the reflected vector
|
||||
return mv;
|
||||
}
|
||||
|
||||
// This returns the reversed vector
|
||||
public static Vector3D Reversed(Vector3D v)
|
||||
{
|
||||
// Return reversed vector
|
||||
return new Vector3D(-v.x, -v.y, -v.z);
|
||||
}
|
||||
|
||||
// This returns a vector from an angle
|
||||
public static Vector3D FromAngleXY(float angle)
|
||||
{
|
||||
// Return vector from angle
|
||||
return new Vector3D((float)Math.Sin(angle), -(float)Math.Cos(angle), 0f);
|
||||
}
|
||||
|
||||
// This returns a vector from an angle with a given legnth
|
||||
public static Vector3D FromAngleXY(float angle, float length)
|
||||
{
|
||||
// Return vector from angle
|
||||
return FromAngleXY(angle) * length;
|
||||
}
|
||||
|
||||
// This returns a vector from an angle with a given legnth
|
||||
public static Vector3D FromAngleXYZ(float anglexy, float anglez)
|
||||
{
|
||||
// Calculate x y and z
|
||||
float ax = (float)Math.Sin(anglexy) * (float)Math.Cos(anglez);
|
||||
float ay = -(float)Math.Cos(anglexy) * (float)Math.Cos(anglez);
|
||||
float az = (float)Math.Sin(anglez);
|
||||
|
||||
// Return vector
|
||||
return new Vector3D(ax, ay, az);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Methods
|
||||
|
||||
// This calculates the angle
|
||||
public float GetAngleXY()
|
||||
{
|
||||
// Calculate and return the angle
|
||||
return -(float)Math.Atan2(-y, x) + (float)Math.PI * 0.5f;
|
||||
}
|
||||
|
||||
// This calculates the angle
|
||||
public float GetAngleZ()
|
||||
{
|
||||
Vector2D xy = new Vector2D(x, y);
|
||||
|
||||
// Calculate and return the angle
|
||||
return -(float)Math.Atan2(xy.GetLength(), z) + (float)Math.PI * 0.5f;
|
||||
//return -(float)Math.Atan2(xy.GetLength(), z) - (float)Math.PI * 0.5f;
|
||||
}
|
||||
|
||||
// This calculates the length
|
||||
public float GetLength()
|
||||
{
|
||||
// Calculate and return the length
|
||||
return (float)Math.Sqrt(x * x + y * y + z * z);
|
||||
}
|
||||
|
||||
// This calculates the squared length
|
||||
public float GetLengthSq()
|
||||
{
|
||||
// Calculate and return the length
|
||||
return x * x + y * y + z * z;
|
||||
}
|
||||
|
||||
// This calculates the length
|
||||
public float GetManhattanLength()
|
||||
{
|
||||
// Calculate and return the length
|
||||
return Math.Abs(x) + Math.Abs(y) + Math.Abs(z);
|
||||
}
|
||||
|
||||
// This normalizes the vector
|
||||
public Vector3D GetNormal()
|
||||
{
|
||||
float lensq = this.GetLengthSq();
|
||||
if(lensq > TINY_VALUE)
|
||||
{
|
||||
// Divide each element by the length
|
||||
float mul = 1f / (float)Math.Sqrt(lensq);
|
||||
return new Vector3D(x * mul, y * mul, z * mul);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Cannot normalize
|
||||
return new Vector3D(0f, 0f, 0f);
|
||||
}
|
||||
}
|
||||
|
||||
// This scales the vector
|
||||
public Vector3D GetScaled(float s)
|
||||
{
|
||||
// Scale the vector
|
||||
return new Vector3D(x * s, y * s, z * s);
|
||||
}
|
||||
|
||||
// This changes the vector length
|
||||
public Vector3D GetFixedLength(float l)
|
||||
{
|
||||
// Normalize, then scale
|
||||
return this.GetNormal().GetScaled(l);
|
||||
}
|
||||
|
||||
// Output
|
||||
public override string ToString()
|
||||
{
|
||||
return x + ", " + y + ", " + z;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
238
Source/IO/ClippedStream.cs
Normal file
|
@ -0,0 +1,238 @@
|
|||
|
||||
/*
|
||||
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
|
||||
* This program is released under GNU General Public License
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace CodeImp.DoomBuilder.IO
|
||||
{
|
||||
internal class ClippedStream : Stream
|
||||
{
|
||||
#region ================== Variables
|
||||
|
||||
// Base stream
|
||||
private Stream basestream;
|
||||
|
||||
// Data limit
|
||||
private int offset;
|
||||
private int length;
|
||||
private long position;
|
||||
|
||||
// Disposing
|
||||
private bool isdisposed = false;
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Properties
|
||||
|
||||
public override long Length { get { return length; } }
|
||||
public override long Position { get { return position; } set { this.Seek(value, SeekOrigin.Begin); } }
|
||||
public override bool CanRead { get { return basestream.CanRead; } }
|
||||
public override bool CanSeek { get { return basestream.CanSeek; } }
|
||||
public override bool CanWrite { get { return basestream.CanWrite; } }
|
||||
public bool IsDisposed { get { return isdisposed; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Constructor / Disposer
|
||||
|
||||
// Constructor
|
||||
public ClippedStream(Stream basestream, int offset, int length)
|
||||
{
|
||||
// Can only create from a stream that can seek
|
||||
if(!basestream.CanSeek) throw new ArgumentException("ClippedStream can only be created with a Stream that allows Seeking.");
|
||||
|
||||
// Initialize
|
||||
this.basestream = basestream;
|
||||
this.position = 0;
|
||||
this.offset = offset;
|
||||
this.length = length;
|
||||
|
||||
// We have no destructor
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
// Diposer
|
||||
public new void Dispose()
|
||||
{
|
||||
// Not already disposed?
|
||||
if(!isdisposed)
|
||||
{
|
||||
// Clean up
|
||||
basestream = null;
|
||||
|
||||
// Dispose base
|
||||
base.Dispose();
|
||||
|
||||
// Done
|
||||
isdisposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Methods
|
||||
|
||||
// This flushes the written changes
|
||||
public override void Flush()
|
||||
{
|
||||
// Flush base stream
|
||||
basestream.Flush();
|
||||
}
|
||||
|
||||
// This reads from the stream
|
||||
public override int Read(byte[] buffer, int offset, int count)
|
||||
{
|
||||
// Check if this exceeds limits
|
||||
if((basestream.Position + count) > (this.offset + this.length))
|
||||
throw new ArgumentException("Attempted to read outside the range of the stream.");
|
||||
|
||||
// Seek if needed
|
||||
if(basestream.Position != (this.offset + this.position))
|
||||
basestream.Seek(this.offset + this.position, SeekOrigin.Begin);
|
||||
|
||||
// Read from base stream
|
||||
return basestream.Read(buffer, offset, count);
|
||||
}
|
||||
|
||||
// This writes to the stream
|
||||
public override void Write(byte[] buffer, int offset, int count)
|
||||
{
|
||||
// Check if this exceeds limits
|
||||
if((basestream.Position + count) > (this.offset + this.length))
|
||||
throw new ArgumentException("Attempted to write outside the range of the stream.");
|
||||
|
||||
// Seek if needed
|
||||
if(basestream.Position != (this.offset + this.position))
|
||||
basestream.Seek(this.offset + this.position, SeekOrigin.Begin);
|
||||
|
||||
// Read from base stream
|
||||
basestream.Write(buffer, offset, count);
|
||||
}
|
||||
|
||||
// Seek within clipped buffer
|
||||
public override long Seek(long offset, SeekOrigin origin)
|
||||
{
|
||||
// Seeking from beginning
|
||||
if(origin == SeekOrigin.Begin)
|
||||
{
|
||||
// Check if this exceeds limits
|
||||
if((offset >= this.length) || (offset < 0))
|
||||
throw new ArgumentException("Attempted to seek outside the range of the stream.");
|
||||
|
||||
// Seek
|
||||
return basestream.Seek(this.offset + offset, SeekOrigin.Begin) - this.offset;
|
||||
}
|
||||
// Seeking from current position
|
||||
else if(origin == SeekOrigin.Current)
|
||||
{
|
||||
// Check if this exceeds limits
|
||||
if((this.position + offset >= this.length) || (this.position + offset < 0))
|
||||
throw new ArgumentException("Attempted to seek outside the range of the stream.");
|
||||
|
||||
// Seek
|
||||
return basestream.Seek(this.offset + this.position + offset, SeekOrigin.Begin) - this.offset;
|
||||
}
|
||||
// Seeking from end
|
||||
else
|
||||
{
|
||||
// Check if this exceeds limits
|
||||
if((offset > 0) || (this.length + offset < 0))
|
||||
throw new ArgumentException("Attempted to seek outside the range of the stream.");
|
||||
|
||||
// Seek
|
||||
return basestream.Seek(this.offset + this.length + offset, SeekOrigin.Begin) - this.offset;
|
||||
}
|
||||
}
|
||||
|
||||
// Change the length of the steam
|
||||
public override void SetLength(long value)
|
||||
{
|
||||
// Not supported
|
||||
throw new NotSupportedException("This operation is not supported.");
|
||||
}
|
||||
|
||||
// Asynchronous read from stream
|
||||
public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state)
|
||||
{
|
||||
// Check if this exceeds limits
|
||||
if((basestream.Position + count) > (this.offset + this.length))
|
||||
throw new ArgumentException("Attempted to read outside the range of the stream.");
|
||||
|
||||
// Seek if needed
|
||||
if(basestream.Position != (this.offset + this.position))
|
||||
basestream.Seek(this.offset + this.position, SeekOrigin.Begin);
|
||||
|
||||
// Read
|
||||
return base.BeginRead(buffer, offset, count, callback, state);
|
||||
}
|
||||
|
||||
// Asynchronous write to stream
|
||||
public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state)
|
||||
{
|
||||
// Check if this exceeds limits
|
||||
if((basestream.Position + count) > (this.offset + this.length))
|
||||
throw new ArgumentException("Attempted to write outside the range of the stream.");
|
||||
|
||||
// Seek if needed
|
||||
if(basestream.Position != (this.offset + this.position))
|
||||
basestream.Seek(this.offset + this.position, SeekOrigin.Begin);
|
||||
|
||||
// Write
|
||||
return base.BeginWrite(buffer, offset, count, callback, state);
|
||||
}
|
||||
|
||||
// This closes the stream
|
||||
public override void Close()
|
||||
{
|
||||
basestream.Close();
|
||||
base.Close();
|
||||
this.Dispose();
|
||||
}
|
||||
|
||||
// This reads a single byte from the stream
|
||||
public override int ReadByte()
|
||||
{
|
||||
// Check if this exceeds limits
|
||||
if((basestream.Position + 1) > (this.offset + this.length))
|
||||
throw new ArgumentException("Attempted to read outside the range of the stream.");
|
||||
|
||||
// Seek if needed
|
||||
if(basestream.Position != (this.offset + this.position))
|
||||
basestream.Seek(this.offset + this.position, SeekOrigin.Begin);
|
||||
|
||||
// Read from base stream
|
||||
return basestream.ReadByte();
|
||||
}
|
||||
|
||||
// This writes a single byte to the stream
|
||||
public override void WriteByte(byte value)
|
||||
{
|
||||
// Check if this exceeds limits
|
||||
if((basestream.Position + 1) > (this.offset + this.length))
|
||||
throw new ArgumentException("Attempted to write outside the range of the stream.");
|
||||
|
||||
// Seek if needed
|
||||
if(basestream.Position != (this.offset + this.position))
|
||||
basestream.Seek(this.offset + this.position, SeekOrigin.Begin);
|
||||
|
||||
// Read from base stream
|
||||
basestream.WriteByte(value);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
1277
Source/IO/Configuration.cs
Normal file
122
Source/IO/Lump.cs
Normal file
|
@ -0,0 +1,122 @@
|
|||
|
||||
/*
|
||||
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
|
||||
* This program is released under GNU General Public License
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace CodeImp.DoomBuilder.IO
|
||||
{
|
||||
internal class Lump : IDisposable
|
||||
{
|
||||
#region ================== Variables
|
||||
|
||||
// Owner
|
||||
private WAD owner;
|
||||
|
||||
// Data stream
|
||||
private ClippedStream stream;
|
||||
|
||||
// Data info
|
||||
private string name;
|
||||
private byte[] fixedname;
|
||||
private int offset;
|
||||
private int length;
|
||||
|
||||
// Disposing
|
||||
private bool isdisposed = false;
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Properties
|
||||
|
||||
public WAD Owner { get { return owner; } }
|
||||
public string Name { get { return name; } }
|
||||
public byte[] FixedName { get { return fixedname; } }
|
||||
public int Offset { get { return offset; } }
|
||||
public int Length { get { return length; } }
|
||||
public ClippedStream Stream { get { return stream; } }
|
||||
public bool IsDisposed { get { return isdisposed; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Constructor / Disposer
|
||||
|
||||
// Constructor
|
||||
public Lump(Stream data, WAD owner, byte[] fixedname, int offset, int length)
|
||||
{
|
||||
// Initialize
|
||||
this.stream = new ClippedStream(data, offset, length);
|
||||
this.owner = owner;
|
||||
this.fixedname = fixedname;
|
||||
this.offset = offset;
|
||||
this.length = length;
|
||||
|
||||
// Make uppercase name
|
||||
this.name = MakeNormalName(fixedname, owner.Encoding).ToUpperInvariant();
|
||||
this.fixedname = MakeFixedName(name, owner.Encoding);
|
||||
|
||||
// We have no destructor
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
// Diposer
|
||||
public void Dispose()
|
||||
{
|
||||
// Not already disposed?
|
||||
if(!isdisposed)
|
||||
{
|
||||
// Clean up
|
||||
stream.Dispose();
|
||||
owner = null;
|
||||
|
||||
// Done
|
||||
isdisposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Methods
|
||||
|
||||
// This makes the normal name from fixed name
|
||||
private static string MakeNormalName(byte[] fixedname, Encoding encoding)
|
||||
{
|
||||
// Return the name as a string
|
||||
return encoding.GetString(fixedname);
|
||||
}
|
||||
|
||||
// This makes the fixed name from normal name
|
||||
public static byte[] MakeFixedName(string name, Encoding encoding)
|
||||
{
|
||||
// Make 8 bytes, all zeros
|
||||
byte[] fixedname = new byte[8];
|
||||
|
||||
// Write the name in bytes
|
||||
encoding.GetBytes(name, 0, name.Length, fixedname, 0);
|
||||
|
||||
// Return result
|
||||
return fixedname;
|
||||
}
|
||||
|
||||
// String representation
|
||||
public override string ToString()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
313
Source/IO/WAD.cs
Normal file
|
@ -0,0 +1,313 @@
|
|||
|
||||
/*
|
||||
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
|
||||
* This program is released under GNU General Public License
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace CodeImp.DoomBuilder.IO
|
||||
{
|
||||
internal class WAD : IDisposable
|
||||
{
|
||||
#region ================== Constants
|
||||
|
||||
// WAD types
|
||||
public const string TYPE_IWAD = "IWAD";
|
||||
public const string TYPE_PWAD = "PWAD";
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Variables
|
||||
|
||||
// File objects
|
||||
private FileStream file;
|
||||
private BinaryReader reader;
|
||||
private BinaryWriter writer;
|
||||
|
||||
// Encoder
|
||||
private readonly Encoding encoding = Encoding.ASCII;
|
||||
|
||||
// Header
|
||||
private string type;
|
||||
private int numlumps;
|
||||
private int lumpsoffset;
|
||||
|
||||
// Lumps
|
||||
private List<Lump> lumps;
|
||||
|
||||
// Status
|
||||
private bool isreadonly = false;
|
||||
private bool isdisposed = false;
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Properties
|
||||
|
||||
public string Type { get { return type; } }
|
||||
public Encoding Encoding { get { return encoding; } }
|
||||
public bool IsReadOnly { get { return isreadonly; } }
|
||||
public bool IsDisposed { get { return isdisposed; } }
|
||||
public List<Lump> Lumps { get { return lumps; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Constructor / Disposer
|
||||
|
||||
// Constructor to open or create a WAD file
|
||||
public WAD(string pathfilename)
|
||||
{
|
||||
// Initialize
|
||||
this.isreadonly = false;
|
||||
this.Open(pathfilename);
|
||||
}
|
||||
|
||||
// Constructor to open or create a WAD file
|
||||
public WAD(string pathfilename, bool openreadonly)
|
||||
{
|
||||
// Initialize
|
||||
this.isreadonly = openreadonly;
|
||||
this.Open(pathfilename);
|
||||
}
|
||||
|
||||
// Destructor
|
||||
~WAD()
|
||||
{
|
||||
// Make sure everything is disposed
|
||||
this.Dispose();
|
||||
}
|
||||
|
||||
// Diposer
|
||||
public void Dispose()
|
||||
{
|
||||
// Not already disposed?
|
||||
if(!isdisposed)
|
||||
{
|
||||
// Clean up
|
||||
foreach(Lump l in lumps) l.Dispose();
|
||||
if(writer != null) writer.Close();
|
||||
if(reader != null) reader.Close();
|
||||
if(file != null) file.Dispose();
|
||||
|
||||
// Done
|
||||
isdisposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== IO
|
||||
|
||||
// Open a WAD file
|
||||
private void Open(string pathfilename)
|
||||
{
|
||||
FileAccess access;
|
||||
FileShare share;
|
||||
|
||||
// Determine if opening for read only
|
||||
if(isreadonly)
|
||||
{
|
||||
// Read only
|
||||
access = FileAccess.Read;
|
||||
share = FileShare.ReadWrite;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Private access
|
||||
access = FileAccess.ReadWrite;
|
||||
share = FileShare.Read;
|
||||
}
|
||||
|
||||
// Open the file stream
|
||||
file = File.Open(pathfilename, FileMode.OpenOrCreate, access, share);
|
||||
|
||||
// Create file handling tools
|
||||
reader = new BinaryReader(file, encoding);
|
||||
if(!isreadonly) writer = new BinaryWriter(file, encoding);
|
||||
|
||||
// Read information from file
|
||||
ReadHeaders();
|
||||
}
|
||||
|
||||
// This reads the WAD header and lumps table
|
||||
private void ReadHeaders()
|
||||
{
|
||||
int offset, length;
|
||||
byte[] fixedname;
|
||||
|
||||
// Make sure the write is finished writing
|
||||
if(!isreadonly) writer.Flush();
|
||||
|
||||
// Seek to beginning
|
||||
file.Seek(0, SeekOrigin.Begin);
|
||||
|
||||
// Read WAD type
|
||||
type = encoding.GetString(reader.ReadBytes(4));
|
||||
|
||||
// Number of lumps
|
||||
numlumps = reader.ReadInt32();
|
||||
|
||||
// Lumps table offset
|
||||
lumpsoffset = reader.ReadInt32();
|
||||
|
||||
// Seek to the lumps table
|
||||
file.Seek(lumpsoffset, SeekOrigin.Begin);
|
||||
|
||||
// Dispose old lumps and create new list
|
||||
if(lumps != null) foreach(Lump l in lumps) l.Dispose();
|
||||
lumps = new List<Lump>(numlumps);
|
||||
|
||||
// Go for all lumps
|
||||
for(int i = 0; i < numlumps; i++)
|
||||
{
|
||||
// Read lump information
|
||||
offset = reader.ReadInt32();
|
||||
length = reader.ReadInt32();
|
||||
fixedname = reader.ReadBytes(8);
|
||||
|
||||
// Create the lump
|
||||
lumps.Add(new Lump(file, this, fixedname, offset, length));
|
||||
}
|
||||
}
|
||||
|
||||
// This reads the WAD header and lumps table
|
||||
private void WriteHeaders()
|
||||
{
|
||||
// Seek to beginning
|
||||
file.Seek(0, SeekOrigin.Begin);
|
||||
|
||||
// Write WAD type
|
||||
writer.Write(encoding.GetBytes(type));
|
||||
|
||||
// Number of lumps
|
||||
writer.Write(numlumps);
|
||||
|
||||
// Lumps table offset
|
||||
writer.Write(lumpsoffset);
|
||||
|
||||
// Seek to the lumps table
|
||||
file.Seek(lumpsoffset, SeekOrigin.Begin);
|
||||
|
||||
// Go for all lumps
|
||||
for(int i = 0; i < lumps.Count; i++)
|
||||
{
|
||||
// Write lump information
|
||||
writer.Write(lumps[i].Offset);
|
||||
writer.Write(lumps[i].Length);
|
||||
writer.Write(lumps[i].FixedName);
|
||||
}
|
||||
}
|
||||
|
||||
// This flushes writing changes
|
||||
public void Flush()
|
||||
{
|
||||
// Only possible when not read-only
|
||||
if(!isreadonly)
|
||||
{
|
||||
// Flush writing changes
|
||||
writer.Flush();
|
||||
file.Flush();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Lumps
|
||||
|
||||
// This creates a new lump in the WAD file
|
||||
public Lump Insert(string name, int position, int datalength)
|
||||
{
|
||||
Lump lump;
|
||||
|
||||
// We will be adding a lump
|
||||
numlumps++;
|
||||
|
||||
// Extend the file
|
||||
file.SetLength(file.Length + datalength + 16);
|
||||
|
||||
// Create the lump
|
||||
lump = new Lump(file, this, Lump.MakeFixedName(name, encoding), lumpsoffset, datalength);
|
||||
lumps.Insert(position, lump);
|
||||
|
||||
// Advance lumps table offset
|
||||
lumpsoffset += datalength;
|
||||
|
||||
// Write the new headers
|
||||
WriteHeaders();
|
||||
|
||||
// Return the new lump
|
||||
return lump;
|
||||
}
|
||||
|
||||
// This removes a lump from the WAD file
|
||||
public void Remove(Lump lump)
|
||||
{
|
||||
// Remove from list
|
||||
lumps.Remove(lump);
|
||||
lump.Dispose();
|
||||
|
||||
// Write the new headers
|
||||
WriteHeaders();
|
||||
}
|
||||
|
||||
// This finds a lump by name, returns null when not found
|
||||
public Lump FindLump(string name)
|
||||
{
|
||||
// Do search
|
||||
return FindLump(name, 0, lumps.Count - 1);
|
||||
}
|
||||
|
||||
// This finds a lump by name, returns null when not found
|
||||
public Lump FindLump(string name, int start)
|
||||
{
|
||||
// Do search
|
||||
return FindLump(name, start, lumps.Count - 1);
|
||||
}
|
||||
|
||||
// This finds a lump by name, returns null when not found
|
||||
public Lump FindLump(string name, int start, int end)
|
||||
{
|
||||
byte[] fixedname;
|
||||
|
||||
// Fix end when it exceeds length
|
||||
if(end > (lumps.Count - 1)) end = lumps.Count - 1;
|
||||
|
||||
// Make sure name is in uppercase
|
||||
name = name.ToUpperInvariant();
|
||||
|
||||
// Make fixed name
|
||||
fixedname = Lump.MakeFixedName(name, encoding);
|
||||
|
||||
// Loop through the lumps
|
||||
for(int i = start; i <= end; i++)
|
||||
{
|
||||
// Check if first byte matches
|
||||
if(lumps[i].FixedName[0] == fixedname[0])
|
||||
{
|
||||
// Check if the lump name matches
|
||||
if(lumps[i].Name.StartsWith(name, false, CultureInfo.InvariantCulture))
|
||||
{
|
||||
// Found the lump!
|
||||
return lumps[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Nothing found
|
||||
return null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
201
Source/Interface/MainForm.Designer.cs
generated
Normal file
|
@ -0,0 +1,201 @@
|
|||
namespace CodeImp.DoomBuilder.Interface
|
||||
{
|
||||
partial class MainForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if(disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
|
||||
this.menumain = new System.Windows.Forms.MenuStrip();
|
||||
this.menufile = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.itemnewmap = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.itemopenmap = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.itemsavemap = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.itemsavemapas = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.itemsavemapinto = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.itemexit = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolbar = new System.Windows.Forms.ToolStrip();
|
||||
this.statusbar = new System.Windows.Forms.StatusStrip();
|
||||
this.panelinfo = new System.Windows.Forms.Panel();
|
||||
this.display = new System.Windows.Forms.PictureBox();
|
||||
this.menumain.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.display)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// menumain
|
||||
//
|
||||
this.menumain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.menufile});
|
||||
this.menumain.Location = new System.Drawing.Point(0, 0);
|
||||
this.menumain.Name = "menumain";
|
||||
this.menumain.Size = new System.Drawing.Size(619, 24);
|
||||
this.menumain.TabIndex = 0;
|
||||
this.menumain.Text = "menuStrip1";
|
||||
//
|
||||
// menufile
|
||||
//
|
||||
this.menufile.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.itemnewmap,
|
||||
this.itemopenmap,
|
||||
this.toolStripMenuItem1,
|
||||
this.itemsavemap,
|
||||
this.itemsavemapas,
|
||||
this.itemsavemapinto,
|
||||
this.toolStripMenuItem2,
|
||||
this.itemexit});
|
||||
this.menufile.Name = "menufile";
|
||||
this.menufile.Size = new System.Drawing.Size(35, 20);
|
||||
this.menufile.Text = "File";
|
||||
//
|
||||
// itemnewmap
|
||||
//
|
||||
this.itemnewmap.Name = "itemnewmap";
|
||||
this.itemnewmap.Size = new System.Drawing.Size(167, 22);
|
||||
this.itemnewmap.Text = "New Map...";
|
||||
//
|
||||
// itemopenmap
|
||||
//
|
||||
this.itemopenmap.Name = "itemopenmap";
|
||||
this.itemopenmap.Size = new System.Drawing.Size(167, 22);
|
||||
this.itemopenmap.Text = "Open Map...";
|
||||
//
|
||||
// toolStripMenuItem1
|
||||
//
|
||||
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
|
||||
this.toolStripMenuItem1.Size = new System.Drawing.Size(164, 6);
|
||||
//
|
||||
// itemsavemap
|
||||
//
|
||||
this.itemsavemap.Name = "itemsavemap";
|
||||
this.itemsavemap.Size = new System.Drawing.Size(167, 22);
|
||||
this.itemsavemap.Text = "Save Map";
|
||||
//
|
||||
// itemsavemapas
|
||||
//
|
||||
this.itemsavemapas.Name = "itemsavemapas";
|
||||
this.itemsavemapas.Size = new System.Drawing.Size(167, 22);
|
||||
this.itemsavemapas.Text = "Save Map As...";
|
||||
//
|
||||
// itemsavemapinto
|
||||
//
|
||||
this.itemsavemapinto.Name = "itemsavemapinto";
|
||||
this.itemsavemapinto.Size = new System.Drawing.Size(167, 22);
|
||||
this.itemsavemapinto.Text = "Save Map Into...";
|
||||
//
|
||||
// toolStripMenuItem2
|
||||
//
|
||||
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
|
||||
this.toolStripMenuItem2.Size = new System.Drawing.Size(164, 6);
|
||||
//
|
||||
// itemexit
|
||||
//
|
||||
this.itemexit.Name = "itemexit";
|
||||
this.itemexit.Size = new System.Drawing.Size(167, 22);
|
||||
this.itemexit.Text = "Exit";
|
||||
//
|
||||
// toolbar
|
||||
//
|
||||
this.toolbar.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
|
||||
this.toolbar.Location = new System.Drawing.Point(0, 24);
|
||||
this.toolbar.Name = "toolbar";
|
||||
this.toolbar.Size = new System.Drawing.Size(619, 25);
|
||||
this.toolbar.TabIndex = 1;
|
||||
this.toolbar.Text = "toolStrip1";
|
||||
//
|
||||
// statusbar
|
||||
//
|
||||
this.statusbar.Location = new System.Drawing.Point(0, 471);
|
||||
this.statusbar.Name = "statusbar";
|
||||
this.statusbar.Size = new System.Drawing.Size(619, 22);
|
||||
this.statusbar.TabIndex = 2;
|
||||
//
|
||||
// panelinfo
|
||||
//
|
||||
this.panelinfo.Dock = System.Windows.Forms.DockStyle.Bottom;
|
||||
this.panelinfo.Location = new System.Drawing.Point(0, 370);
|
||||
this.panelinfo.Name = "panelinfo";
|
||||
this.panelinfo.Size = new System.Drawing.Size(619, 101);
|
||||
this.panelinfo.TabIndex = 4;
|
||||
//
|
||||
// display
|
||||
//
|
||||
this.display.BackColor = System.Drawing.SystemColors.AppWorkspace;
|
||||
this.display.BackgroundImage = global::CodeImp.DoomBuilder.Properties.Resources.Splash2;
|
||||
this.display.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
|
||||
this.display.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
|
||||
this.display.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.display.ErrorImage = null;
|
||||
this.display.InitialImage = null;
|
||||
this.display.Location = new System.Drawing.Point(0, 49);
|
||||
this.display.Name = "display";
|
||||
this.display.Size = new System.Drawing.Size(619, 321);
|
||||
this.display.TabIndex = 5;
|
||||
this.display.TabStop = false;
|
||||
//
|
||||
// MainForm
|
||||
//
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
|
||||
this.ClientSize = new System.Drawing.Size(619, 493);
|
||||
this.Controls.Add(this.display);
|
||||
this.Controls.Add(this.panelinfo);
|
||||
this.Controls.Add(this.statusbar);
|
||||
this.Controls.Add(this.toolbar);
|
||||
this.Controls.Add(this.menumain);
|
||||
this.DoubleBuffered = true;
|
||||
this.Font = new System.Drawing.Font("Verdana", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.KeyPreview = true;
|
||||
this.MainMenuStrip = this.menumain;
|
||||
this.Name = "MainForm";
|
||||
this.Text = "Doom Builder";
|
||||
this.menumain.ResumeLayout(false);
|
||||
this.menumain.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.display)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.MenuStrip menumain;
|
||||
private System.Windows.Forms.ToolStrip toolbar;
|
||||
private System.Windows.Forms.StatusStrip statusbar;
|
||||
private System.Windows.Forms.Panel panelinfo;
|
||||
private System.Windows.Forms.PictureBox display;
|
||||
private System.Windows.Forms.ToolStripMenuItem menufile;
|
||||
private System.Windows.Forms.ToolStripMenuItem itemnewmap;
|
||||
private System.Windows.Forms.ToolStripMenuItem itemopenmap;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
|
||||
private System.Windows.Forms.ToolStripMenuItem itemsavemap;
|
||||
private System.Windows.Forms.ToolStripMenuItem itemsavemapas;
|
||||
private System.Windows.Forms.ToolStripMenuItem itemsavemapinto;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;
|
||||
private System.Windows.Forms.ToolStripMenuItem itemexit;
|
||||
}
|
||||
}
|
19
Source/Interface/MainForm.cs
Normal file
|
@ -0,0 +1,19 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace CodeImp.DoomBuilder.Interface
|
||||
{
|
||||
public partial class MainForm : Form
|
||||
{
|
||||
// Constructor
|
||||
public MainForm()
|
||||
{
|
||||
// Setup controls
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
258
Source/Interface/MainForm.resx
Normal file
|
@ -0,0 +1,258 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="menumain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="toolbar.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>121, 17</value>
|
||||
</metadata>
|
||||
<metadata name="statusbar.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>207, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAMAEBAAAAEACABoBQAANgAAACAgAAABAAgAqAgAAJ4FAAAwMAAAAQAIAKgOAABGDgAAKAAAABAA
|
||||
AAAgAAAAAQAIAAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDAgAYntiAHeMdwBqgWoAYnNiAAAE
|
||||
AABpgGkAIDMgAEVZRQAqPyoAip6KAGR4ZABIXkgAfpR+AH6TfgBRZ1EAYndiAJOmkwApPikADikOACQ5
|
||||
JAA7UDsAUGRQAIWYhQBleWUAY3djAE9jTwAjOCMADyoPABMfEwAWKRYAGykbABIoEgBZbVkANUo1AF9z
|
||||
XwBabloAEScRACM6IwALFQsAFCIUAAMJAwAVLxUABx4HAF5zXgBVa04AO1IvADtSNgBVa0oAVWpVAAgg
|
||||
CAAPIw8AAwgDAAYNBgAfOh8APlU+ACYuHgAAAE8AAADwAAwVAAAMFQcAAAAnAAAA9AAnLxoAP1c/ABQg
|
||||
FAAMGwwABAwEACs8KwBtg20ASF9AACoyHQB5j3kAKzImAD1VMgByh3IAKjwqAAQLBAASKhIAGycbAC9G
|
||||
LwB5jHkAPlQ+AH+SfwAzSjMAGTcZAAYSBgAdNB0AU2dTABkvGQAGEQYABwwHABs1GwADGwMAFiwWABwy
|
||||
HAACGgIAMjwyAD1TPQBvhW8AMTsxACAsIAA4QzgAHysfAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAGZnZ2gAAAAAAAAAAAAAAGIEU2NkZQAAAAAAAAAAAFxdXl9gYV1cAAAAAABE
|
||||
AABXWFlaWllYWwAATgAATyMAUVJTVFRTUlUAI1YAAEQARUZHSElJSktMTQBOADYANzg5Ojs8PT4/QEFC
|
||||
AEMqACssLS4vDQ0wMTIzNAA1Hh8gISIjJAwMJCMlJicoKQAUFRYXGBkaGhkYGxYcHQAACAkKCwwNDg8Q
|
||||
ERITCQgAAAACAwQFAAAAAAUHAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//
|
||||
AAD8PwAA+B8AAPAPAACQCQAAkAkAAIABAAAAAAAAAAAAAAAAAACAAQAAgAEAAMPDAAD//wAA//8AACgA
|
||||
AAAgAAAAQAAAAAEACAAAAAAAgAQAAAAAAAAAAAAAAAEAAAAAAAAAAAAAgACAAIAAAACAgAAAAIAAAACA
|
||||
gAAAAIAAwMDAAMDcwADwyqYAgICAAP8A/wD/AAAA//8AAAD/AAAA//8AAAD/AP///wDw+/8ApKCgANTw
|
||||
/wCx4v8AjtT/AGvG/wBIuP8AJar/AACq/wAAktwAAHq5AABilgAASnMAADJQANTj/wCxx/8Ajqv/AGuP
|
||||
/wBIc/8AJVf/AABV/wAASdwAAD25AAAxlgAAJXMAABlQANTU/wCxsf8Ajo7/AGtr/wBISP8AJSX/AAAA
|
||||
/wAAANwAAAC5AAAAlgAAAHMAAABQAOPU/wDHsf8Aq47/AI9r/wBzSP8AVyX/AFUA/wBJANwAPQC5ADEA
|
||||
lgAlAHMAGQBQAPDU/wDisf8A1I7/AMZr/wC4SP8AqiX/AKoA/wCSANwAegC5AGIAlgBKAHMAMgBQAP/U
|
||||
/wD/sf8A/47/AP9r/wD/SP8A/yX/AP8A/wDcANwAuQC5AJYAlgBzAHMAUABQAP/U8AD/seIA/47UAP9r
|
||||
xgD/SLgA/yWqAP8AqgDcAJIAuQB6AJYAYgBzAEoAUAAyAP/U4wD/sccA/46rAP9rjwD/SHMA/yVXAP8A
|
||||
VQDcAEkAuQA9AJYAMQBzACUAUAAZAP/U1AD/sbEA/46OAP9rawD/SEgA/yUlAP8AAADcAAAAuQAAAJYA
|
||||
AABzAAAAUAAAAP/j1AD/x7EA/6uOAP+PawD/c0gA/1clAP9VAADcSQAAuT0AAJYxAABzJQAAUBkAAP/w
|
||||
1AD/4rEA/9SOAP/GawD/uEgA/6olAP+qAADckgAAuXoAAJZiAABzSgAAUDIAAP//1AD//7EA//+OAP//
|
||||
awD//0gA//8lAP//AADc3AAAubkAAJaWAABzcwAAUFAAAPD/1ADi/7EA1P+OAMb/awC4/0gAqv8lAKr/
|
||||
AACS3AAAerkAAGKWAABKcwAAMlAAAOP/1ADH/7EAq/+OAI//awBz/0gAV/8lAFX/AABJ3AAAPbkAADGW
|
||||
AAAlcwAAGVAAANT/1ACx/7EAjv+OAGv/awBI/0gAJf8lAAD/AAAA3AAAALkAAACWAAAAcwAAAFAAANT/
|
||||
4wCx/8cAjv+rAGv/jwBI/3MAJf9XAAD/VQAA3EkAALk9AACWMQAAcyUAAFAZANT/8ACx/+IAjv/UAGv/
|
||||
xgBI/7gAJf+qAAD/qgAA3JIAALl6AACWYgAAc0oAAFAyANT//wCx//8Ajv//AGv//wBI//8AJf//AAD/
|
||||
/wAA3NwAALm5AACWlgAAc3MAAFBQAPLy8gDm5uYA2traAM7OzgDCwsIAtra2AKqqqgCenp4AkpKSAIaa
|
||||
hgB6jnoAboJuAGJ2YgBWalYASl5KAD5SPgAyRjIAJjomABouGgAOIg4AAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz7+fn5+fv8AAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAD6+vn5+fn5+fn6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr5+/7///77+foAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAP7+/v/+/v7+/v7//v7+AAAAAAAAAAAAAAAAAAAAAAAAAP7//////v7+/////gAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAA/v75/Pz+/vz8+f7+AAAAAAAAAAAAAAAAAP8AAAAA//78/v75/v7+/vn+/vz+/wAA
|
||||
AAD/AAAAAAD//wAAAP7++/n8/v749vb4/v78+fv//gAAAP//AAAAAAD/AAAA+/779/b3+fn39/n59/b3
|
||||
+/z7AAAA//8AAAAA/wAAAAD6+vv5+fn59/f39/n5+fv6+voAAAD/AAAAAAAAAAAA//v3+fz+AAD79/f7
|
||||
AAD+/Pn3+/8AAAAAAAAA/wAA////9wAANjUQNQD7+wAANRA1AAD3//8AAAD/AAAAAAD8///8+fr8AAD/
|
||||
AP7+AP8AAPz6+fz/APwAAP8AAP8AAP/////8/P7+/vz8/v78/P7+/vz8/////wAAAAAAAAAA//7//vn3
|
||||
9/f5/Pn5+fn8+ff3+fn+//4AAAD/AAD/AP4A/f/+/Pj5/Pf79/r69/v3/Pn4/P7//f/+AP8AAP3//v7+
|
||||
/f/7+fz8+fr5+fn5+vn8/Pn7//3+/gD//QAAAP///v7++vn5+Pb3+fn5+fn59/b4+fn6/v7+//8AAAAA
|
||||
///+/Pz8/Pn39/n5+Pj4+Pn59/f5/Pz8/P7//wAAAAD8/vz7//z2+ff3+fv39vb3+fn39/f2/P/7/P78
|
||||
AAAAAAD+/vn5/Pb2+/n7+/n5+fn7+/n79vb8+fn+/gAAAAAAAPz++vn3+vr2+vwAAAAAAAD8+vb6+vf5
|
||||
+v78AAAAAAAAAPj4+fn49/cAAAAAAAAAAAAA9/f4+fn4+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////
|
||||
////+B///+AH///AA///wAP//4AB//8AAP/HAADjxwAA44YAAGGGAABhhAAAIYAAAAEAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAACAAAABgAAAAcAAAAPAAAAD4AfgB/Af+A//////////////////////KAAAADAA
|
||||
AABgAAAAAQAIAAAAAACACgAAAAAAAAAAAAAAAQAAAAAAAAAAAAAIDAgAYntiAHeMdwBqgWoAYnNiAAAE
|
||||
AABpgGkAIDMgAEVZRQAqPyoAip6KAGR4ZABIXkgAfpR+AH6TfgBRZ1EAYndiAJOmkwApPikADikOACQ5
|
||||
JAA7UDsAUGRQAIWYhQBleWUAY3djAE9jTwAjOCMADyoPABMfEwAWKRYAGykbABIoEgBZbVkANUo1AF9z
|
||||
XwBabloAEScRACM6IwALFQsAFCIUAAMJAwAVLxUABx4HAF5zXgBVa04AO1IvADtSNgBVa0oAVWpVAAgg
|
||||
CAAPIw8AAwgDAAYNBgAfOh8APlU+ACYuHgAAAE8AAACuAAwVAAAMFQcAAAAnAAAA9AAnLxoAP1c/ABQg
|
||||
FAAMGwwABAwEACs8KwBtg20ASF9AACoyHQB5j3kAKzImAD1VMgByh3IAKjwqAAQLBAASKhIAGycbAC9G
|
||||
LwB5jHkAPlQ+AH+SfwAzSjMAGTcZAAYSBgAdNB0AU2dTABkvGQAGEQYABwwHABs1GwADGwMAFiwWABwy
|
||||
HAACGgIAMjwyAD1TPQBvhW8AMTsxACAsIAA4QzgAHysfAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////1xc
|
||||
XFxcXFxc//////////////////////////////////////////////////9cXAoKCgoKCgoKXFz/////
|
||||
/////////////////////////////////////////1wKUVEWGxsbGxZRCgpc////////////////////
|
||||
////////////////////////XAoKQRsbBQUFBRsbQRYKXP//////////////////////////////////
|
||||
//////9cKBYWGxsbQUFBQUEbGxsWKFz//////////////////////////////////////1xQKEpRUQoK
|
||||
CjQ0CgoKUVFKKFBc/////////////////////////////////////1woKFA0Kys0KCgoKDQrKzRQKChc
|
||||
/////////////////////////////////////1woUFAoAVxcXFxcXFxcAShQUChc////////////////
|
||||
////////////////////XFAoUFxcXFxcXFxcXFxcXFxcUChQXP//////////////////////////////
|
||||
////XEpQUFxcCAoWFlBQFhYKCFxcUFBKXP//////////////////////XFxc//////9cXEooXFwICgoK
|
||||
ClxcCgoKCghcXChKXFz//////1xcXP////////9cXFxcXP////9QAVFKKFxQUUEKKFxcKApBUVBcKEpR
|
||||
AVD/////XFxcXFz///////9cXFxcXP///0pcUBZRSihQUFEoKCsrKChRUFAoSlEWUFxK////XFxcXFz/
|
||||
/////1xcXFxcXP///yhQUBsbQUpQUCgFMgcHMgUoUFBKQRsbNFAo////XFxcXFxc////UFxcXFxcXP//
|
||||
SlFKK0EFBwcFGxsbGwUFGxsbGwUHBwVBClFRSv//XFxcXFxcUP//XFxcXFxcXP9cShYbFlFBQUFBQRsb
|
||||
BQUFBRsbQUFBQVFRFhsWSlz/XFxcXFxcXP//XFxcXFxcXP9QKBsWGxsKKFBcUApRGwUFG1EKUFxQKAob
|
||||
GxYbNFD/XFxcXFxcXP//XFxcXFxcXFxcKFEbBRZKAVBcXFxcUQUFUVxcXFxQAUoWBRtRK1xcXFxcXFxc
|
||||
XP//XFxcXFxcXFxcUQoKNCgoOjs7O1xcXEFBXFxcOjo7OzsoNAoKUVxcXFxcXFxcXFxcXFxcXFxcXFxc
|
||||
CgUKXFw6OwA6PztcXFFRXFxcOjsAOj87XAoFClxcXFxcXFxcXFxcXFxcXCgoKFxcXBsWSkpBUUpcXFxc
|
||||
XBYWXFxcXFxKUQVKShYbXFxcKCgoXFxcXFxQKAEBXEpKKFxcAQpRG0pKUFxcXDQ0XCsrXDQ0XFxcUEpK
|
||||
G1EKAVxcKEpKXAEBKFBQXFxcKCgBXFxcXFwoCkpQUFAoNEpRSlBQSlFKNChQUFBKCihcXFxcXAEoKFxc
|
||||
XFBcXFxcKFxcUFBcXChQGwUFBQUbFgorQUFBQSsKFhsFBQUFG1AoXFxQUFxcKFxcXFxcXFxcXAFcXChc
|
||||
XChQFgcHBQcyFgpRFgoKFlEKFjIHBQcHFlAoXFwoXFwBXFxcXFxcXFxcUCgBXEpcXFBKSgVBUQoFMlEb
|
||||
BRYWBRtRMgUKUUEFSkpQXFxKXAEoUFxcXFwoXEooXFBQUFBKUFwKUUFKSgobBRYFGxsbGwUWBRsKSkpB
|
||||
UQpcUEpQUFBQXChKXCj/XFxcXFxcKChKSgoKFhYbGwUFG0EFGzIyGwVBGwUFGxsWFgoKSkooKFxcXFxc
|
||||
XP//KFxcXFxQKCgoURZBGwcyBQcFFhsFG0FBGwUbFgUHBTIHG0EWUSgoKFBcXFxcKP//UVxcXFwoUEpK
|
||||
UAoWQQUHBwUyURsFBVFRBQUbFjIFBwcFQRYKUEpKUChcXFxcUf///1BcXEooKEpKSkpQSjIFBwUbURsH
|
||||
MjIyMgcbURsFBwUySlBKSkpKKChKXFxQ/////yhcKEooSlAWBxtKFgcHBxtRURsFBxsbBwUbUVEbBwcH
|
||||
FkobBxZQSihKKFwo//////9KUCgoKEEbCkobBxtRGxtRUVFBGxsbG0FRUVEbG1EbBxtKChtBKCgoUEr/
|
||||
////////KChKUEpRFhsFBxYbBzJBCv//////////CkEyBxsWBwUbFlFKUEooKP///////////1FQMhYb
|
||||
FgUHFhsHGxYK/////////////woWGwcbFgcFFhsWMlBR/////////////wpKURYWBQcWGwcbFkH/////
|
||||
//////////9BFhsHGxYHBRYWUUoK//////////////8yQTIbQUEbMgUF/////////////////////wUF
|
||||
MjJBQRsyQTL/////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////wD////////8AD////////
|
||||
gAH///////8AAP///////gAAf//////8AAA///////wAAD///////AAAP//////4AAAf//////gAAB//
|
||||
///x8AAAD4///+DwAAAPB///4OAAAAcH///A4AAABwP//4DAAAADAf//gIAAAAEB//+AgAAAAQH//4AA
|
||||
AAAAAf//gAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA
|
||||
//8AAAAAAAD//wAAAAAAAP//gAAAAAAB//+AAAAAAAH//4AAAAAAAf//wAAAAAAD///AAAAAAAP//+AA
|
||||
AAAAB///8AAP8AAP///4AB/4AB////gAP/wAH////AD//wA/////////////////////////////////
|
||||
//////////////////////////////////8=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
99
Source/Map/Linedef.cs
Normal file
|
@ -0,0 +1,99 @@
|
|||
|
||||
/*
|
||||
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
|
||||
* This program is released under GNU General Public License
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
|
||||
namespace CodeImp.DoomBuilder.Map
|
||||
{
|
||||
internal class Linedef : IDisposable
|
||||
{
|
||||
#region ================== Constants
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Variables
|
||||
|
||||
// Vertices
|
||||
private Vertex start;
|
||||
private Vertex end;
|
||||
|
||||
// Sidedefs
|
||||
private Sidedef front;
|
||||
private Sidedef back;
|
||||
|
||||
// Properties
|
||||
private int flags;
|
||||
private int action;
|
||||
private int tag;
|
||||
private byte[] args;
|
||||
|
||||
// Disposing
|
||||
private bool isdisposed = false;
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Properties
|
||||
|
||||
// Disposing
|
||||
public bool IsDisposed { get { return isdisposed; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Constructor / Disposer
|
||||
|
||||
// Constructor
|
||||
public Linedef(Vertex start, Vertex end)
|
||||
{
|
||||
// Initialize
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
|
||||
// We have no destructor
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
// Diposer
|
||||
public void Dispose()
|
||||
{
|
||||
// Not already disposed?
|
||||
if(!isdisposed)
|
||||
{
|
||||
// Detach from vertices
|
||||
start.Detach(this);
|
||||
end.Detach(this);
|
||||
|
||||
// Dispose sidedefs
|
||||
front.Dispose();
|
||||
back.Dispose();
|
||||
|
||||
// Clean up
|
||||
start = null;
|
||||
end = null;
|
||||
front = null;
|
||||
back = null;
|
||||
|
||||
// Done
|
||||
isdisposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Methods
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
71
Source/Map/MapManager.cs
Normal file
|
@ -0,0 +1,71 @@
|
|||
|
||||
/*
|
||||
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
|
||||
* This program is released under GNU General Public License
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
|
||||
namespace CodeImp.DoomBuilder.Map
|
||||
{
|
||||
internal class MapManager : IDisposable
|
||||
{
|
||||
#region ================== Constants
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Variables
|
||||
|
||||
// Disposing
|
||||
private bool isdisposed = false;
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Properties
|
||||
|
||||
// Disposing
|
||||
public bool IsDisposed { get { return isdisposed; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Constructor / Disposer
|
||||
|
||||
// Constructor
|
||||
public MapManager()
|
||||
{
|
||||
// Initialize
|
||||
|
||||
// We have no destructor
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
// Diposer
|
||||
public void Dispose()
|
||||
{
|
||||
// Not already disposed?
|
||||
if(!isdisposed)
|
||||
{
|
||||
// Clean up
|
||||
|
||||
// Done
|
||||
isdisposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Methods
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
59
Source/Map/Sidedef.cs
Normal file
|
@ -0,0 +1,59 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
|
||||
namespace CodeImp.DoomBuilder.Map
|
||||
{
|
||||
internal class Sidedef : IDisposable
|
||||
{
|
||||
#region ================== Constants
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Variables
|
||||
|
||||
// Disposing
|
||||
private bool isdisposed = false;
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Properties
|
||||
|
||||
// Disposing
|
||||
public bool IsDisposed { get { return isdisposed; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Constructor / Disposer
|
||||
|
||||
// Constructor
|
||||
public Sidedef()
|
||||
{
|
||||
// Initialize
|
||||
|
||||
// We have no destructor
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
// Diposer
|
||||
public void Dispose()
|
||||
{
|
||||
// Not already disposed?
|
||||
if(!isdisposed)
|
||||
{
|
||||
// Clean up
|
||||
|
||||
// Done
|
||||
isdisposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Methods
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
99
Source/Map/Vertex.cs
Normal file
|
@ -0,0 +1,99 @@
|
|||
|
||||
/*
|
||||
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
|
||||
* This program is released under GNU General Public License
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
using CodeImp.DoomBuilder.Geometry;
|
||||
|
||||
namespace CodeImp.DoomBuilder.Map
|
||||
{
|
||||
internal class Vertex : IDisposable
|
||||
{
|
||||
#region ================== Constants
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Variables
|
||||
|
||||
// Position
|
||||
private Vector2D pos;
|
||||
|
||||
// References
|
||||
private List<Linedef> linedefs;
|
||||
|
||||
// Disposing
|
||||
private bool isdisposed = false;
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Properties
|
||||
|
||||
public List<Linedef> Linedefs { get { return linedefs; } }
|
||||
public Vector2D Position { get { return pos; } }
|
||||
public bool IsDisposed { get { return isdisposed; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Constructor / Disposer
|
||||
|
||||
// Constructor
|
||||
public Vertex(Vector2D pos)
|
||||
{
|
||||
// Initialize
|
||||
this.pos = pos;
|
||||
|
||||
// We have no destructor
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
// Diposer
|
||||
public void Dispose()
|
||||
{
|
||||
// Not already disposed?
|
||||
if(!isdisposed)
|
||||
{
|
||||
// Dispose the lines that are attached to this vertex
|
||||
// because a linedef cannot exist without 2 vertices.
|
||||
foreach(Linedef l in linedefs) l.Dispose();
|
||||
|
||||
// Clean up
|
||||
linedefs = null;
|
||||
|
||||
// Done
|
||||
isdisposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Methods
|
||||
|
||||
// This attaches a linedef
|
||||
public void Attach(Linedef l) { linedefs.Add(l); }
|
||||
|
||||
// This detaches a linedef
|
||||
public void Detach(Linedef l) { linedefs.Remove(l); }
|
||||
|
||||
// This rounds the coordinates to integrals
|
||||
public void Round()
|
||||
{
|
||||
// Round to integrals
|
||||
pos.x = (float)Math.Round(pos.x);
|
||||
pos.y = (float)Math.Round(pos.y);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
70
Source/Properties/Resources.Designer.cs
generated
Normal file
|
@ -0,0 +1,70 @@
|
|||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:2.0.50727.42
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace CodeImp.DoomBuilder.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CodeImp.DoomBuilder.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap Splash2 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("Splash2", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
124
Source/Properties/Resources.resx
Normal file
|
@ -0,0 +1,124 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="Splash2" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Splash2.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
BIN
Source/Resources/Splash2.png
Normal file
After Width: | Height: | Size: 227 KiB |
8
Source/obj/Builder.csproj.FileList.txt
Normal file
|
@ -0,0 +1,8 @@
|
|||
..\Build\Builder.exe
|
||||
..\Build\Builder.pdb
|
||||
obj\Debug\ResolveAssemblyReference.cache
|
||||
obj\Debug\Builder.csproj.GenerateResource.Cache
|
||||
obj\Debug\Builder.exe
|
||||
obj\Debug\Builder.pdb
|
||||
obj\Debug\CodeImp.DoomBuilder.Interface.MainForm.resources
|
||||
obj\Debug\CodeImp.DoomBuilder.Properties.Resources.resources
|