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
|