Missions can have no exits (fixes #501)

Update campaigns to have some missions with no exits
This commit is contained in:
Cong
2020-10-08 20:51:44 +11:00
parent c128121137
commit f9f491d131
38 changed files with 13112 additions and 10940 deletions

View File

@@ -6,5 +6,6 @@
"Ammo": false,
"WeaponPersist": false,
"SkipWeaponMenu": false,
"RandomPickups": true,
"Missions": 10
}

View File

@@ -112,6 +112,7 @@
"WallPad": 0
},
"Squares": 3,
"ExitEnabled": false,
"DoorsEnabled": true
},
{
@@ -258,6 +259,7 @@
"WallPad": 2
},
"Squares": 0,
"ExitEnabled": true,
"Doors": {
"Enabled": true,
"Min": 2,
@@ -396,6 +398,7 @@
"WallPad": 2
},
"Squares": 3,
"ExitEnabled": false,
"Doors": {
"Enabled": true,
"Min": 2,
@@ -491,7 +494,7 @@
"Door": {
"Name": "door",
"Type": "Door",
"Style": "office",
"Style": "dungeon",
"Mask": "ffffffff",
"MaskAlt": "ffffffff",
"CanWalk": false,
@@ -515,6 +518,7 @@
"WallPad": 1
},
"Squares": 1,
"ExitEnabled": false,
"DoorsEnabled": true
},
{
@@ -624,6 +628,7 @@
"WallPad": 0
},
"Squares": 1,
"ExitEnabled": false,
"Doors": {
"Enabled": false,
"Min": 0,
@@ -724,6 +729,7 @@
"WallPad": 0
},
"Squares": 0,
"ExitEnabled": false,
"DoorsEnabled": true
},
{
@@ -830,6 +836,7 @@
"WallPad": 0
},
"Squares": 3,
"ExitEnabled": true,
"DoorsEnabled": true
},
{
@@ -954,6 +961,7 @@
"WallPad": 0
},
"Squares": 0,
"ExitEnabled": false,
"Doors": {
"Enabled": true,
"Min": 1,
@@ -1084,6 +1092,7 @@
"WallPad": 2
},
"Squares": 0,
"ExitEnabled": true,
"Doors": {
"Enabled": true,
"Min": 1,
@@ -1223,6 +1232,7 @@
"WallPad": 2
},
"Squares": 0,
"ExitEnabled": false,
"Doors": {
"Enabled": false,
"Min": 2,

View File

@@ -1,7 +1,11 @@
{
"Version": 14,
"Version": 16,
"Title": "AI Insurgency II",
"Author": "Sauer2",
"Description": "You work in the industrial crime department. A big vendor of robotic parts has complained about strangely behaving parts, suspecting sabotage. You were assigned to look into it.",
"Ammo": false,
"WeaponPersist": false,
"SkipWeaponMenu": false,
"RandomPickups": true,
"Missions": 10
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,11 @@
{
"Version": 11,
"Version": 16,
"Title": "Antares III Conspiracy",
"Author": "Sauer2",
"Description": "You are an MP officer on Antares III, a small colony on the planet Jugular 5. This seems like a routine mission: A helpful citizen claims that he has recovered a smuggler spot in a cave on a walk. Check that out.",
"Ammo": false,
"WeaponPersist": false,
"SkipWeaponMenu": false,
"RandomPickups": true,
"Missions": 6
}

View File

@@ -1,11 +1,14 @@
{
"Version": 13,
"Characters": [{
"Class": "Dragon",
"Skin": "ff8136",
"Arms": "882800",
"Body": "ff8136",
"Legs": "58589c",
"Hair": "9c0000",
"Class": "Jones",
"HairType": "hogan",
"Skin": "ff8136ff",
"Arms": "882800ff",
"Body": "ff8136ff",
"Legs": "58589cff",
"Hair": "9c0000ff",
"Feet": "58589cff",
"speed": 256,
"Gun": "Shotgun",
"maxHealth": 40,
@@ -16,12 +19,14 @@
"actionDelay": 15
},
{
"Class": "Ogre Boss",
"Skin": "9c0000",
"Arms": "ff8136",
"Body": "9c5858",
"Legs": "b79536",
"Hair": "363636",
"Class": "Ogre",
"HairType": "mohawk",
"Skin": "9c0000ff",
"Arms": "ff8136ff",
"Body": "9c5858ff",
"Legs": "b79536ff",
"Hair": "c00000ff",
"Feet": "b79536ff",
"speed": 128,
"Gun": "Grenades",
"maxHealth": 40,
@@ -33,11 +38,12 @@
},
{
"Class": "Jones",
"Skin": "ff8136",
"Arms": "b79536",
"Body": "ff8136",
"Legs": "58589c",
"Hair": "000000",
"Skin": "ff8136ff",
"Arms": "b79536ff",
"Body": "ff8136ff",
"Legs": "58589cff",
"Hair": "000000ff",
"Feet": "58589cff",
"speed": 256,
"Gun": "Machine gun",
"maxHealth": 40,
@@ -49,11 +55,12 @@
},
{
"Class": "Jones",
"Skin": "882800",
"Arms": "9c5858",
"Body": "882800",
"Legs": "149c14",
"Hair": "58589c",
"Skin": "882800ff",
"Arms": "9c5858ff",
"Body": "882800ff",
"Legs": "149c14ff",
"Hair": "58589cff",
"Feet": "149c14ff",
"speed": 320,
"Gun": "Machine gun",
"maxHealth": 40,
@@ -65,11 +72,12 @@
},
{
"Class": "Ogre",
"Skin": "149c14",
"Arms": "363636",
"Body": "363636",
"Legs": "363636",
"Hair": "d25106",
"Skin": "149c14ff",
"Arms": "363636ff",
"Body": "363636ff",
"Legs": "363636ff",
"Hair": "c00000ff",
"Feet": "363636ff",
"speed": 384,
"Gun": "Machine gun",
"maxHealth": 50,
@@ -80,12 +88,14 @@
"actionDelay": 15
},
{
"Class": "WarBaby",
"Skin": "ff8136",
"Arms": "363636",
"Body": "363636",
"Legs": "363636",
"Hair": "000000",
"Class": "Jones",
"HairType": "beret",
"Skin": "ff8136ff",
"Arms": "363636ff",
"Body": "363636ff",
"Legs": "363636ff",
"Hair": "000000ff",
"Feet": "363636ff",
"speed": 384,
"Gun": "Powergun",
"maxHealth": 50,
@@ -96,12 +106,14 @@
"actionDelay": 15
},
{
"Class": "Smith",
"Skin": "b79536",
"Arms": "363636",
"Body": "363636",
"Legs": "363636",
"Hair": "000000",
"Class": "Jones",
"HairType": "flattop",
"Skin": "b79536ff",
"Arms": "363636ff",
"Body": "363636ff",
"Legs": "363636ff",
"Hair": "000000ff",
"Feet": "363636ff",
"speed": 384,
"Gun": "Sniper rifle",
"maxHealth": 50,
@@ -113,11 +125,13 @@
},
{
"Class": "Lady",
"Skin": "58589c",
"Arms": "363636",
"Body": "363636",
"Legs": "363636",
"Hair": "58589c",
"HairType": "ponytail",
"Skin": "58589cff",
"Arms": "363636ff",
"Body": "363636ff",
"Legs": "363636ff",
"Hair": "58589cff",
"Feet": "363636ff",
"speed": 256,
"Gun": "Flamer",
"maxHealth": 50,
@@ -128,12 +142,14 @@
"actionDelay": 15
},
{
"Class": "Professor",
"Skin": "000000",
"Arms": "363636",
"Body": "363636",
"Legs": "363636",
"Hair": "000000",
"Class": "Jones",
"HairType": "professor",
"Skin": "000000ff",
"Arms": "363636ff",
"Body": "363636ff",
"Legs": "363636ff",
"Hair": "000000ff",
"Feet": "363636ff",
"speed": 512,
"Gun": "Sniper rifle",
"maxHealth": 40,
@@ -144,12 +160,14 @@
"actionDelay": 15
},
{
"Class": "Professor",
"Skin": "ff8136",
"Arms": "ffffff",
"Body": "363636",
"Legs": "58589c",
"Hair": "363636",
"Class": "Jones",
"HairType": "professor",
"Skin": "ff8136ff",
"Arms": "ffffffff",
"Body": "363636ff",
"Legs": "58589cff",
"Hair": "363636ff",
"Feet": "58589cff",
"speed": 192,
"Gun": "Chemo bombs",
"maxHealth": 40,
@@ -161,11 +179,12 @@
},
{
"Class": "Robot",
"Skin": "58589c",
"Arms": "58589c",
"Body": "58589c",
"Legs": "9c9c9c",
"Hair": "149c14",
"Skin": "58589cff",
"Arms": "58589cff",
"Body": "58589cff",
"Legs": "9c9c9cff",
"Hair": "149c14ff",
"Feet": "9c9c9cff",
"speed": 192,
"Gun": "Chemo bombs",
"maxHealth": 40,
@@ -177,11 +196,13 @@
},
{
"Class": "Lady",
"Skin": "882800",
"Arms": "149c14",
"Body": "149c14",
"Legs": "363636",
"Hair": "ff8136",
"HairType": "ponytail",
"Skin": "882800ff",
"Arms": "149c14ff",
"Body": "149c14ff",
"Legs": "363636ff",
"Hair": "ff8136ff",
"Feet": "363636ff",
"speed": 192,
"Gun": "Chemo bombs",
"maxHealth": 40,
@@ -193,11 +214,12 @@
},
{
"Class": "Ogre",
"Skin": "363636",
"Arms": "ffffff",
"Body": "d25106",
"Legs": "ff8136",
"Hair": "149c14",
"Skin": "363636ff",
"Arms": "ffffffff",
"Body": "d25106ff",
"Legs": "ff8136ff",
"Hair": "c00000ff",
"Feet": "ff8136ff",
"speed": 192,
"Gun": "Chemo bombs",
"maxHealth": 40,
@@ -208,12 +230,14 @@
"actionDelay": 18
},
{
"Class": "Wolf",
"Skin": "d25106",
"Arms": "ffffff",
"Body": "58589c",
"Legs": "9c9c9c",
"Hair": "363636",
"Class": "Jones",
"HairType": "dutch",
"Skin": "d25106ff",
"Arms": "ffffffff",
"Body": "58589cff",
"Legs": "9c9c9cff",
"Hair": "363636ff",
"Feet": "9c9c9cff",
"speed": 192,
"Gun": "Chemo bombs",
"maxHealth": 40,
@@ -224,12 +248,14 @@
"actionDelay": 42
},
{
"Class": "Bob",
"Skin": "ff8136",
"Arms": "ffffff",
"Body": "9c5858",
"Legs": "ff8136",
"Hair": "882800",
"Class": "Jones",
"HairType": "beard",
"Skin": "ff8136ff",
"Arms": "ffffffff",
"Body": "9c5858ff",
"Legs": "ff8136ff",
"Hair": "882800ff",
"Feet": "ff8136ff",
"speed": 192,
"Gun": "Chemo bombs",
"maxHealth": 40,
@@ -240,12 +266,14 @@
"actionDelay": 27
},
{
"Class": "Professor",
"Skin": "000000",
"Arms": "363636",
"Body": "363636",
"Legs": "363636",
"Hair": "000000",
"Class": "Jones",
"HairType": "professor",
"Skin": "000000ff",
"Arms": "363636ff",
"Body": "363636ff",
"Legs": "363636ff",
"Hair": "000000ff",
"Feet": "363636ff",
"speed": 256,
"Gun": "Flamer",
"maxHealth": 60,
@@ -257,11 +285,13 @@
},
{
"Class": "Lady",
"Skin": "b79536",
"Arms": "ffffff",
"Body": "9c9c9c",
"Legs": "58589c",
"Hair": "000000",
"HairType": "ponytail",
"Skin": "b79536ff",
"Arms": "ffffffff",
"Body": "9c9c9cff",
"Legs": "58589cff",
"Hair": "000000ff",
"Feet": "58589cff",
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 40,
@@ -273,11 +303,13 @@
},
{
"Class": "Lady",
"Skin": "b79536",
"Arms": "149c14",
"Body": "b79536",
"Legs": "149c14",
"Hair": "000000",
"HairType": "ponytail",
"Skin": "b79536ff",
"Arms": "149c14ff",
"Body": "b79536ff",
"Legs": "149c14ff",
"Hair": "000000ff",
"Feet": "149c14ff",
"speed": 256,
"Gun": "Molotovs",
"maxHealth": 40,
@@ -289,11 +321,12 @@
},
{
"Class": "Mad bug-eye",
"Skin": "000000",
"Arms": "363636",
"Body": "149c14",
"Legs": "363636",
"Hair": "000000",
"Skin": "000000ff",
"Arms": "363636ff",
"Body": "149c14ff",
"Legs": "363636ff",
"Hair": "000000ff",
"Feet": "363636ff",
"speed": 384,
"Gun": "Machine gun",
"maxHealth": 40,
@@ -305,11 +338,12 @@
},
{
"Class": "Ogre",
"Skin": "ff8136",
"Arms": "363636",
"Body": "b79536",
"Legs": "363636",
"Hair": "58589c",
"Skin": "ff8136ff",
"Arms": "363636ff",
"Body": "b79536ff",
"Legs": "363636ff",
"Hair": "c00000ff",
"Feet": "363636ff",
"speed": 384,
"Gun": "Launcher",
"maxHealth": 200,

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,11 @@
{
"Version": 11,
"Version": 16,
"Title": "Development Hell",
"Author": "Sauer2",
"Description": "You work for a military data center in a desert nearby Texas. Suddenly all security bots run amok and start to kill all researchers.",
"Ammo": false,
"WeaponPersist": false,
"SkipWeaponMenu": false,
"RandomPickups": true,
"Missions": 6
}

View File

@@ -1,11 +1,14 @@
{
"Version": 13,
"Characters": [{
"Class": "Smith",
"Skin": "ff8136",
"Arms": "ffffff",
"Body": "ffffff",
"Legs": "363636",
"Hair": "ff6c00",
"Class": "Jones",
"HairType": "flattop",
"Skin": "ff8136ff",
"Arms": "ffffffff",
"Body": "ffffffff",
"Legs": "363636ff",
"Hair": "ff6c00ff",
"Feet": "363636ff",
"speed": 256,
"Gun": "Chemo bombs",
"maxHealth": 40,
@@ -16,44 +19,14 @@
"actionDelay": 5
},
{
"Class": "Bob",
"Skin": "d25106",
"Arms": "004870",
"Body": "004464",
"Legs": "00282c",
"Hair": "c00000",
"speed": 256,
"Gun": "Chemo bombs",
"maxHealth": 40,
"flags": 39977984,
"probabilityToMove": 100,
"probabilityToTrack": 0,
"probabilityToShoot": 0,
"actionDelay": 23
},
{
"Class": "Bob",
"Skin": "d25106",
"Arms": "ffffff",
"Body": "ffffff",
"Legs": "363636",
"Hair": "363636",
"speed": 256,
"Gun": "Chemo bombs",
"maxHealth": 40,
"flags": 39977984,
"probabilityToMove": 100,
"probabilityToTrack": 0,
"probabilityToShoot": 0,
"actionDelay": 23
},
{
"Class": "Lady",
"Skin": "f4944c",
"Arms": "ffffff",
"Body": "ffffff",
"Legs": "ac5400",
"Hair": "8c4400",
"Class": "Jones",
"HairType": "beard",
"Skin": "d25106ff",
"Arms": "004870ff",
"Body": "004464ff",
"Legs": "00282cff",
"Hair": "c00000ff",
"Feet": "00282cff",
"speed": 256,
"Gun": "Chemo bombs",
"maxHealth": 40,
@@ -65,27 +38,13 @@
},
{
"Class": "Jones",
"Skin": "d25106",
"Arms": "ffffff",
"Body": "5c5c5c",
"Legs": "004870",
"Hair": "363636",
"speed": 256,
"Gun": "Chemo bombs",
"maxHealth": 40,
"flags": 39977984,
"probabilityToMove": 100,
"probabilityToTrack": 0,
"probabilityToShoot": 0,
"actionDelay": 23
},
{
"Class": "Ice",
"Skin": "603000",
"Arms": "ffffff",
"Body": "ffffff",
"Legs": "003038",
"Hair": "004800",
"HairType": "beard",
"Skin": "d25106ff",
"Arms": "ffffffff",
"Body": "ffffffff",
"Legs": "363636ff",
"Hair": "363636ff",
"Feet": "363636ff",
"speed": 256,
"Gun": "Chemo bombs",
"maxHealth": 40,
@@ -97,11 +56,66 @@
},
{
"Class": "Lady",
"Skin": "c0ac3c",
"Arms": "ffffff",
"Body": "ffffff",
"Legs": "00ac00",
"Hair": "402000",
"HairType": "ponytail",
"Skin": "f4944cff",
"Arms": "ffffffff",
"Body": "ffffffff",
"Legs": "ac5400ff",
"Hair": "8c4400ff",
"Feet": "ac5400ff",
"speed": 256,
"Gun": "Chemo bombs",
"maxHealth": 40,
"flags": 39977984,
"probabilityToMove": 100,
"probabilityToTrack": 0,
"probabilityToShoot": 0,
"actionDelay": 23
},
{
"Class": "Jones",
"Skin": "d25106ff",
"Arms": "ffffffff",
"Body": "5c5c5cff",
"Legs": "004870ff",
"Hair": "363636ff",
"Feet": "004870ff",
"speed": 256,
"Gun": "Chemo bombs",
"maxHealth": 40,
"flags": 39977984,
"probabilityToMove": 100,
"probabilityToTrack": 0,
"probabilityToShoot": 0,
"actionDelay": 23
},
{
"Class": "Jones",
"HairType": "shades",
"Skin": "603000ff",
"Arms": "ffffffff",
"Body": "ffffffff",
"Legs": "003038ff",
"Hair": "004800ff",
"Feet": "003038ff",
"speed": 256,
"Gun": "Chemo bombs",
"maxHealth": 40,
"flags": 39977984,
"probabilityToMove": 100,
"probabilityToTrack": 0,
"probabilityToShoot": 0,
"actionDelay": 23
},
{
"Class": "Lady",
"HairType": "ponytail",
"Skin": "c0ac3cff",
"Arms": "ffffffff",
"Body": "ffffffff",
"Legs": "00ac00ff",
"Hair": "402000ff",
"Feet": "00ac00ff",
"speed": 256,
"Gun": "Machine gun",
"maxHealth": 40,
@@ -113,11 +127,13 @@
},
{
"Class": "Lady",
"Skin": "502800",
"Arms": "ffffff",
"Body": "00c0c0",
"Legs": "363636",
"Hair": "5c345c",
"HairType": "ponytail",
"Skin": "502800ff",
"Arms": "ffffffff",
"Body": "00c0c0ff",
"Legs": "363636ff",
"Hair": "5c345cff",
"Feet": "363636ff",
"speed": 256,
"Gun": "Chemo bombs",
"maxHealth": 40,
@@ -129,11 +145,13 @@
},
{
"Class": "Lady",
"Skin": "f4944c",
"Arms": "ffffff",
"Body": "ffffff",
"Legs": "fcfcfc",
"Hair": "fce000",
"HairType": "ponytail",
"Skin": "f4944cff",
"Arms": "ffffffff",
"Body": "ffffffff",
"Legs": "fcfcfcff",
"Hair": "fce000ff",
"Feet": "fcfcfcff",
"speed": 256,
"Gun": "Chemo bombs",
"maxHealth": 40,
@@ -144,12 +162,14 @@
"actionDelay": 23
},
{
"Class": "Ice",
"Skin": "d25106",
"Arms": "fc9000",
"Body": "fc9000",
"Legs": "004870",
"Hair": "363636",
"Class": "Jones",
"HairType": "shades",
"Skin": "d25106ff",
"Arms": "fc9000ff",
"Body": "fc9000ff",
"Legs": "004870ff",
"Hair": "363636ff",
"Feet": "004870ff",
"speed": 320,
"Gun": "Chemo bombs",
"maxHealth": 40,
@@ -160,12 +180,14 @@
"actionDelay": 23
},
{
"Class": "Dragon",
"Skin": "d25106",
"Arms": "ffffff",
"Body": "fc1800",
"Legs": "363636",
"Hair": "fc6800",
"Class": "Jones",
"HairType": "hogan",
"Skin": "d25106ff",
"Arms": "ffffffff",
"Body": "fc1800ff",
"Legs": "363636ff",
"Hair": "fc6800ff",
"Feet": "363636ff",
"speed": 256,
"Gun": "Pistol",
"maxHealth": 40,
@@ -176,12 +198,14 @@
"actionDelay": 23
},
{
"Class": "Wolf",
"Skin": "804000",
"Arms": "ffffff",
"Body": "ffffff",
"Legs": "363636",
"Hair": "00fc00",
"Class": "Jones",
"HairType": "dutch",
"Skin": "804000ff",
"Arms": "ffffffff",
"Body": "ffffffff",
"Legs": "363636ff",
"Hair": "00fc00ff",
"Feet": "363636ff",
"speed": 256,
"Gun": "Chemo bombs",
"maxHealth": 40,
@@ -192,12 +216,14 @@
"actionDelay": 23
},
{
"Class": "Wolf",
"Skin": "c0ac3c",
"Arms": "ffffff",
"Body": "484848",
"Legs": "363636",
"Hair": "341c00",
"Class": "Jones",
"HairType": "dutch",
"Skin": "c0ac3cff",
"Arms": "ffffffff",
"Body": "484848ff",
"Legs": "363636ff",
"Hair": "341c00ff",
"Feet": "363636ff",
"speed": 256,
"Gun": "Chemo bombs",
"maxHealth": 40,
@@ -209,11 +235,13 @@
},
{
"Class": "Lady",
"Skin": "d25106",
"Arms": "ffffff",
"Body": "00fcfc",
"Legs": "348434",
"Hair": "882800",
"HairType": "ponytail",
"Skin": "d25106ff",
"Arms": "ffffffff",
"Body": "00fcfcff",
"Legs": "348434ff",
"Hair": "882800ff",
"Feet": "348434ff",
"speed": 256,
"Gun": "Chemo bombs",
"maxHealth": 40,
@@ -224,12 +252,14 @@
"actionDelay": 15
},
{
"Class": "Dragon",
"Skin": "882800",
"Arms": "ffffff",
"Body": "5c5c5c",
"Legs": "004870",
"Hair": "58589c",
"Class": "Jones",
"HairType": "hogan",
"Skin": "882800ff",
"Arms": "ffffffff",
"Body": "5c5c5cff",
"Legs": "004870ff",
"Hair": "58589cff",
"Feet": "004870ff",
"speed": 256,
"Gun": "Pistol",
"maxHealth": 40,
@@ -241,11 +271,13 @@
},
{
"Class": "Cyborg",
"Skin": "ffffff",
"Arms": "000000",
"Body": "000000",
"Legs": "000000",
"Hair": "b79536",
"HairType": "cyborg",
"Skin": "ffffffff",
"Arms": "000000ff",
"Body": "000000ff",
"Legs": "000000ff",
"Hair": "ff0000ff",
"Feet": "000000ff",
"speed": 128,
"Gun": "Chemo gun",
"maxHealth": 100,
@@ -257,11 +289,12 @@
},
{
"Class": "Mad bug-eye",
"Skin": "fcb800",
"Arms": "a00000",
"Body": "fce000",
"Legs": "840000",
"Hair": "840000",
"Skin": "fcb800ff",
"Arms": "a00000ff",
"Body": "fce000ff",
"Legs": "840000ff",
"Hair": "840000ff",
"Feet": "840000ff",
"speed": 256,
"Gun": "Chemo bombs",
"maxHealth": 50,
@@ -273,11 +306,12 @@
},
{
"Class": "Mad bug-eye",
"Skin": "fcb800",
"Arms": "ac0000",
"Body": "fc6800",
"Legs": "e00000",
"Hair": "ff8136",
"Skin": "fcb800ff",
"Arms": "ac0000ff",
"Body": "fc6800ff",
"Legs": "e00000ff",
"Hair": "ff8136ff",
"Feet": "e00000ff",
"speed": 256,
"Gun": "Chemo bombs",
"maxHealth": 50,
@@ -289,11 +323,12 @@
},
{
"Class": "Mad bug-eye",
"Skin": "9c0000",
"Arms": "9c0000",
"Body": "9c0000",
"Legs": "9c0000",
"Hair": "b79536",
"Skin": "9c0000ff",
"Arms": "9c0000ff",
"Body": "9c0000ff",
"Legs": "9c0000ff",
"Hair": "b79536ff",
"Feet": "9c0000ff",
"speed": 256,
"Gun": "Molotovs",
"maxHealth": 50,
@@ -304,12 +339,14 @@
"actionDelay": 15
},
{
"Class": "Ogre Boss",
"Skin": "9c0000",
"Arms": "9c0000",
"Body": "363636",
"Legs": "fc4000",
"Hair": "fc6800",
"Class": "Ogre",
"HairType": "mohawk",
"Skin": "9c0000ff",
"Arms": "9c0000ff",
"Body": "363636ff",
"Legs": "fc4000ff",
"Hair": "c00000ff",
"Feet": "fc4000ff",
"speed": 512,
"Gun": "Grenades",
"maxHealth": 50,
@@ -320,12 +357,14 @@
"actionDelay": 22
},
{
"Class": "Ogre Boss",
"Skin": "9c0000",
"Arms": "9c0000",
"Body": "363636",
"Legs": "9c0000",
"Hair": "9c0000",
"Class": "Ogre",
"HairType": "mohawk",
"Skin": "9c0000ff",
"Arms": "9c0000ff",
"Body": "363636ff",
"Legs": "9c0000ff",
"Hair": "c00000ff",
"Feet": "9c0000ff",
"speed": 512,
"Gun": "Knife",
"maxHealth": 50,
@@ -337,11 +376,12 @@
},
{
"Class": "Robot",
"Skin": "000000",
"Arms": "363636",
"Body": "000000",
"Legs": "363636",
"Hair": "9c0000",
"Skin": "000000ff",
"Arms": "363636ff",
"Body": "000000ff",
"Legs": "363636ff",
"Hair": "9c0000ff",
"Feet": "363636ff",
"speed": 512,
"Gun": "Molotovs",
"maxHealth": 500,
@@ -353,11 +393,12 @@
},
{
"Class": "Robot",
"Skin": "ffffff",
"Arms": "9c9c9c",
"Body": "ffffff",
"Legs": "9c9c9c",
"Hair": "58589c",
"Skin": "ffffffff",
"Arms": "9c9c9cff",
"Body": "ffffffff",
"Legs": "9c9c9cff",
"Hair": "58589cff",
"Feet": "9c9c9cff",
"speed": 512,
"Gun": "Knife",
"maxHealth": 200,

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,11 @@
{
"Version": 14,
"Version": 16,
"Title": "Grave Intent",
"Author": "clovehoof",
"Description": "\"Millions are screaming, the dead are still living. This Earth has died, yet no one has seen.\"\n --Electric Wizard",
"Ammo": false,
"WeaponPersist": false,
"SkipWeaponMenu": false,
"RandomPickups": true,
"Missions": 7
}

View File

@@ -1,12 +1,13 @@
{
"Version": 12,
"Version": 13,
"Characters": [{
"Class": "Bones",
"Skin": "eff377",
"Arms": "bd5151",
"Body": "645c5c",
"Legs": "3c5f56",
"Hair": "ff0202",
"Skin": "eff377ff",
"Arms": "bd5151ff",
"Body": "645c5cff",
"Legs": "3c5f56ff",
"Hair": "ff0202ff",
"Feet": "3c5f56ff",
"speed": 240,
"Gun": "Knife",
"maxHealth": 20,
@@ -17,12 +18,14 @@
"actionDelay": 30
},
{
"Class": "Bob",
"Skin": "b8725c",
"Arms": "ec1212",
"Body": "4665a8",
"Legs": "514938",
"Hair": "c94311",
"Class": "Jones",
"HairType": "beard",
"Skin": "b8725cff",
"Arms": "ec1212ff",
"Body": "4665a8ff",
"Legs": "514938ff",
"Hair": "c94311ff",
"Feet": "514938ff",
"speed": 320,
"Gun": "Grenades",
"maxHealth": 40,
@@ -34,11 +37,12 @@
},
{
"Class": "Bones",
"Skin": "ff7e00",
"Arms": "f78313",
"Body": "464040",
"Legs": "430303",
"Hair": "ff0202",
"Skin": "ff7e00ff",
"Arms": "f78313ff",
"Body": "464040ff",
"Legs": "430303ff",
"Hair": "ff0202ff",
"Feet": "430303ff",
"speed": 208,
"Gun": "Flamer",
"maxHealth": 45,
@@ -49,12 +53,14 @@
"actionDelay": 40
},
{
"Class": "Grunt",
"Skin": "5b2d1b",
"Arms": "c2d0ba",
"Body": "202520",
"Legs": "404040",
"Hair": "2f458e",
"Class": "Jones",
"HairType": "riot_helmet",
"Skin": "5b2d1bff",
"Arms": "c2d0baff",
"Body": "202520ff",
"Legs": "404040ff",
"Hair": "2f458eff",
"Feet": "404040ff",
"speed": 192,
"Gun": "Machine gun",
"maxHealth": 30,
@@ -66,11 +72,12 @@
},
{
"Class": "Bones",
"Skin": "86dfff",
"Arms": "3f3c7e",
"Body": "5f2893",
"Legs": "508036",
"Hair": "ff0000",
"Skin": "86dfffff",
"Arms": "3f3c7eff",
"Body": "5f2893ff",
"Legs": "508036ff",
"Hair": "ff0000ff",
"Feet": "508036ff",
"speed": 258,
"Gun": "Shotgun",
"maxHealth": 10,
@@ -82,11 +89,12 @@
},
{
"Class": "Bones",
"Skin": "f0f0f0",
"Arms": "fffcfc",
"Body": "fffcfc",
"Legs": "fffafa",
"Hair": "ff0000",
"Skin": "f0f0f0ff",
"Arms": "fffcfcff",
"Body": "fffcfcff",
"Legs": "fffafaff",
"Hair": "ff0000ff",
"Feet": "fffafaff",
"speed": 510,
"Gun": "Grenades",
"maxHealth": 20,
@@ -98,11 +106,12 @@
},
{
"Class": "Big Bones",
"Skin": "a06bf5",
"Arms": "a475d4",
"Body": "312b2b",
"Legs": "40433f",
"Hair": "000000",
"Skin": "a06bf5ff",
"Arms": "a475d4ff",
"Body": "312b2bff",
"Legs": "40433fff",
"Hair": "000000ff",
"Feet": "40433fff",
"speed": 225,
"Gun": "Launcher",
"maxHealth": 500,
@@ -114,11 +123,12 @@
},
{
"Class": "Big Bones",
"Skin": "be9bf3",
"Arms": "bc97e0",
"Body": "ca8dd7",
"Legs": "705faa",
"Hair": "000000",
"Skin": "be9bf3ff",
"Arms": "bc97e0ff",
"Body": "ca8dd7ff",
"Legs": "705faaff",
"Hair": "000000ff",
"Feet": "705faaff",
"speed": 360,
"Gun": "Launcher",
"maxHealth": 200,

View File

@@ -5,12 +5,8 @@
"Type": "Cave",
"Width": 24,
"Height": 48,
"WallStyle": "granite",
"FloorStyle": "cobble",
"RoomStyle": "recessed",
"ExitStyle": "plate2",
"KeyStyle": "plain2",
"DoorStyle": "office",
"Objectives": [{
"Description": "Find out where you are",
"Type": "Explore",
@@ -48,13 +44,54 @@
"Density": 40
}],
"EnemyDensity": 2,
"Weapons": ["Knife",
"Pistol"],
"Weapons": ["Knife", "Pistol"],
"Song": "graveintent1.xm",
"WallMask": "5c5c84",
"FloorMask": "282848",
"RoomMask": "707070",
"AltMask": "008400",
"TileClasses": {
"Wall": {
"Name": "wall",
"Type": "Wall",
"Style": "granite",
"Mask": "5c5c84ff",
"MaskAlt": "008400ff",
"CanWalk": false,
"IsOpaque": true,
"Shootable": true,
"IsRoom": false
},
"Floor": {
"Name": "tile",
"Type": "Floor",
"Style": "cobble",
"Mask": "282848ff",
"MaskAlt": "008400ff",
"CanWalk": true,
"IsOpaque": false,
"Shootable": false,
"IsRoom": false
},
"Room": {
"Name": "tile",
"Type": "Floor",
"Style": "recessed",
"Mask": "707070ff",
"MaskAlt": "008400ff",
"CanWalk": true,
"IsOpaque": false,
"Shootable": false,
"IsRoom": true
},
"Door": {
"Name": "door",
"Type": "Door",
"Style": "office",
"Mask": "ffffffff",
"MaskAlt": "ffffffff",
"CanWalk": false,
"IsOpaque": true,
"Shootable": true,
"IsRoom": true
}
},
"FillPercent": 40,
"Repeat": 4,
"R1": 5,
@@ -70,6 +107,7 @@
"WallPad": 0
},
"Squares": 0,
"ExitEnabled": false,
"DoorsEnabled": false
},
{
@@ -78,12 +116,8 @@
"Type": "Cave",
"Width": 48,
"Height": 48,
"WallStyle": "granite",
"FloorStyle": "cobble",
"RoomStyle": "recessed",
"ExitStyle": "plate2",
"KeyStyle": "plain2",
"DoorStyle": "office",
"Objectives": [{
"Description": "Find your personal jumpgate",
"Type": "Collect",
@@ -127,13 +161,54 @@
"Density": 70
}],
"EnemyDensity": 10,
"Weapons": ["Knife",
"Pistol"],
"Weapons": ["Knife", "Pistol"],
"Song": "",
"WallMask": "484870",
"FloorMask": "20203c",
"RoomMask": "707070",
"AltMask": "008400",
"TileClasses": {
"Wall": {
"Name": "wall",
"Type": "Wall",
"Style": "granite",
"Mask": "484870ff",
"MaskAlt": "008400ff",
"CanWalk": false,
"IsOpaque": true,
"Shootable": true,
"IsRoom": false
},
"Floor": {
"Name": "tile",
"Type": "Floor",
"Style": "cobble",
"Mask": "20203cff",
"MaskAlt": "008400ff",
"CanWalk": true,
"IsOpaque": false,
"Shootable": false,
"IsRoom": false
},
"Room": {
"Name": "tile",
"Type": "Floor",
"Style": "recessed",
"Mask": "707070ff",
"MaskAlt": "008400ff",
"CanWalk": true,
"IsOpaque": false,
"Shootable": false,
"IsRoom": true
},
"Door": {
"Name": "door",
"Type": "Door",
"Style": "office",
"Mask": "ffffffff",
"MaskAlt": "ffffffff",
"CanWalk": false,
"IsOpaque": true,
"Shootable": true,
"IsRoom": true
}
},
"FillPercent": 40,
"Repeat": 4,
"R1": 5,
@@ -149,6 +224,7 @@
"WallPad": 0
},
"Squares": 0,
"ExitEnabled": false,
"DoorsEnabled": true
},
{
@@ -157,12 +233,8 @@
"Type": "Classic",
"Width": 48,
"Height": 36,
"WallStyle": "rock",
"FloorStyle": "dirt",
"RoomStyle": "checker",
"ExitStyle": "plate2",
"KeyStyle": "plain2",
"DoorStyle": "dungeon2",
"Objectives": [{
"Description": "Cut a path to the surface",
"Type": "Kill",
@@ -229,13 +301,54 @@
"Density": 5
}],
"EnemyDensity": 10,
"Weapons": ["Knife",
"Pistol"],
"Weapons": ["Knife", "Pistol"],
"Song": "",
"WallMask": "34345c",
"FloorMask": "20203c",
"RoomMask": "707070",
"AltMask": "3c3c3c",
"TileClasses": {
"Wall": {
"Name": "wall",
"Type": "Wall",
"Style": "rock",
"Mask": "34345cff",
"MaskAlt": "3c3c3cff",
"CanWalk": false,
"IsOpaque": true,
"Shootable": true,
"IsRoom": false
},
"Floor": {
"Name": "tile",
"Type": "Floor",
"Style": "dirt",
"Mask": "20203cff",
"MaskAlt": "3c3c3cff",
"CanWalk": true,
"IsOpaque": false,
"Shootable": false,
"IsRoom": false
},
"Room": {
"Name": "tile",
"Type": "Floor",
"Style": "checker",
"Mask": "707070ff",
"MaskAlt": "3c3c3cff",
"CanWalk": true,
"IsOpaque": false,
"Shootable": false,
"IsRoom": true
},
"Door": {
"Name": "door",
"Type": "Door",
"Style": "dungeon2",
"Mask": "ffffffff",
"MaskAlt": "ffffffff",
"CanWalk": false,
"IsOpaque": true,
"Shootable": true,
"IsRoom": true
}
},
"Walls": 0,
"WallLength": 48,
"CorridorWidth": 3,
@@ -250,6 +363,7 @@
"WallPad": 2
},
"Squares": 0,
"ExitEnabled": true,
"Doors": {
"Enabled": true,
"Min": 2,
@@ -267,12 +381,8 @@
"Type": "Cave",
"Width": 37,
"Height": 35,
"WallStyle": "rock",
"FloorStyle": "cobble",
"RoomStyle": "checker",
"ExitStyle": "hazard",
"KeyStyle": "office",
"DoorStyle": "blast",
"Objectives": [{
"Description": "Kill the guardian",
"Type": "Kill",
@@ -289,8 +399,7 @@
"Required": 0,
"Flags": 4
}],
"Enemies": [0,
2],
"Enemies": [0, 2],
"SpecialChars": [7],
"MapObjectDensities": [{
"MapObject": "skull2",
@@ -329,10 +438,52 @@
"Pistol",
"Shotgun"],
"Song": "",
"WallMask": "484870",
"FloorMask": "301c1c",
"RoomMask": "20203c",
"AltMask": "8484ac",
"TileClasses": {
"Wall": {
"Name": "wall",
"Type": "Wall",
"Style": "rock",
"Mask": "484870ff",
"MaskAlt": "8484acff",
"CanWalk": false,
"IsOpaque": true,
"Shootable": true,
"IsRoom": false
},
"Floor": {
"Name": "tile",
"Type": "Floor",
"Style": "cobble",
"Mask": "301c1cff",
"MaskAlt": "8484acff",
"CanWalk": true,
"IsOpaque": false,
"Shootable": false,
"IsRoom": false
},
"Room": {
"Name": "tile",
"Type": "Floor",
"Style": "checker",
"Mask": "20203cff",
"MaskAlt": "8484acff",
"CanWalk": true,
"IsOpaque": false,
"Shootable": false,
"IsRoom": true
},
"Door": {
"Name": "door",
"Type": "Door",
"Style": "blast",
"Mask": "ffffffff",
"MaskAlt": "ffffffff",
"CanWalk": false,
"IsOpaque": true,
"Shootable": true,
"IsRoom": true
}
},
"FillPercent": 60,
"Repeat": 2,
"R1": 6,
@@ -348,6 +499,7 @@
"WallPad": 1
},
"Squares": 2,
"ExitEnabled": false,
"DoorsEnabled": true
},
{
@@ -356,12 +508,8 @@
"Type": "Static",
"Width": 20,
"Height": 100,
"WallStyle": "rock",
"FloorStyle": "cobble",
"RoomStyle": "dirt",
"ExitStyle": "plate2",
"KeyStyle": "plain2",
"DoorStyle": "blast",
"Objectives": [],
"Enemies": [0,
0,
@@ -393,191 +541,371 @@
"Shotgun",
"Pistol"],
"Song": "graveintent1.xm",
"WallMask": "484870",
"FloorMask": "c0c0c0",
"RoomMask": "202020",
"AltMask": "008400",
"Tiles": "1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,0,0,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,0,0,0,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,1,2,2,1,3,3,3,3,3,3,3,3,3,3,3,3,1,2,2,1,1,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,1,1,3,3,1,514,514,514,514,514,514,514,514,514,514,514,514,1,3,3,1,1,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,1,1,3,3,3,3,3,3,0,0,0,1,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,1,1,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,1,1,1,0,1,1,0,3,3,3,3,3,1,1,1,3,3,3,3,0,0,0,0,0,1,1,0,3,3,3,1,1,1,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,1,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,1,1,3,3,3,3,3,3,3,3,3,3,3,0,1,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,1,0,0,0,0,0,0,3,3,3,3,3,3,1,1,3,3,3,1,1,1,1,1,0,0,0,0,3,3,3,3,3,3,1,1,3,3,3,3,1,1,1,1,0,0,0,0,3,3,3,3,3,3,3,3,3,1,1,1,1,3,1,3,0,0,0,0,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,3,0,0,0,0,3,3,3,3,3,3,3,3,1,1,3,3,3,3,3,3,0,0,0,0,3,3,3,3,3,3,3,3,1,1,3,3,3,3,3,3,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,3,3,3,3,3,3,1,1,3,3,3,3,3,3,3,3,0,0,0,0,3,3,3,3,3,1,1,3,3,3,3,1,3,3,1,1,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,0,0,0,0,3,3,3,3,3,3,3,3,3,3,1,1,0,3,3,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,1,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,3,3,3,1,1,3,3,3,3,3,3,3,3,3,3,0,1,1,0,0,3,3,3,1,1,3,3,3,3,3,3,3,3,3,3,1,1,1,1,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,1,1,1,3,3,3,3,3,3,3,3,3,3,1,1,1,1,0,1,3,0,1,1,3,3,3,3,3,3,3,3,3,3,1,3,3,1,1,1,0,0,0,0,3,3,3,3,3,3,3,3,1,1,1,3,3,3,0,0,0,0,0,0,3,3,3,3,3,3,1,1,1,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,1,1,3,3,3,3,3,0,3,0,0,0,0,0,0,3,3,3,3,3,1,1,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,1,1,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,1,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,1,1,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,1,1,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"TileClasses": {
"2": {
"Name": "door",
"Type": "Door",
"Style": "blast",
"Mask": "ffffffff",
"MaskAlt": "ffffffff",
"CanWalk": false,
"IsOpaque": true,
"Shootable": true,
"IsRoom": true
},
"1": {
"Name": "wall",
"Type": "Wall",
"Style": "rock",
"Mask": "484870ff",
"MaskAlt": "008400ff",
"CanWalk": false,
"IsOpaque": true,
"Shootable": true,
"IsRoom": false
},
"3": {
"Name": "tile",
"Type": "Floor",
"Style": "dirt",
"Mask": "202020ff",
"MaskAlt": "008400ff",
"CanWalk": true,
"IsOpaque": false,
"Shootable": false,
"IsRoom": true
},
"0": {
"Name": "tile",
"Type": "Floor",
"Style": "cobble",
"Mask": "c0c0c0ff",
"MaskAlt": "008400ff",
"CanWalk": true,
"IsOpaque": false,
"Shootable": false,
"IsRoom": false
}
},
"Tiles": ["1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1",
"1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1",
"1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1",
"1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1",
"1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1",
"1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1",
"0,0,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,0",
"0,0,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"1,2,2,1,3,3,3,3,3,3,3,3,3,3,3,3,1,2,2,1",
"1,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,1",
"1,3,3,1,2,2,2,2,2,2,2,2,2,2,2,2,1,3,3,1",
"1,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,1",
"1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,1,1,3,3,3,3,3,3,0,0,0,1",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,1,1",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,1,1,1",
"0,1,1,0,3,3,3,3,3,1,1,1,3,3,3,3,0,0,0,0",
"0,1,1,0,3,3,3,1,1,1,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,1,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,1,1,3,3,3,3,3,3,3,3,3,3,3,0,1,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,1,0,0",
"0,0,0,0,3,3,3,3,3,3,1,1,3,3,3,1,1,1,1,1",
"0,0,0,0,3,3,3,3,3,3,1,1,3,3,3,3,1,1,1,1",
"0,0,0,0,3,3,3,3,3,3,3,3,3,1,1,1,1,3,1,3",
"0,0,0,0,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,3",
"0,0,0,0,3,3,3,3,3,3,3,3,1,1,3,3,3,3,3,3",
"0,0,0,0,3,3,3,3,3,3,3,3,1,1,3,3,3,3,3,3",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3",
"0,0,0,0,3,3,3,3,3,3,1,1,3,3,3,3,3,3,3,3",
"0,0,0,0,3,3,3,3,3,1,1,3,3,3,3,1,3,3,1,1",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,1,1,0,3,3,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,1",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0",
"0,0,0,0,3,3,3,1,1,3,3,3,3,3,3,3,3,3,3,0",
"1,1,0,0,3,3,3,1,1,3,3,3,3,3,3,3,3,3,3,1",
"1,1,1,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1",
"3,1,1,1,3,3,3,3,3,3,3,3,3,3,1,1,1,1,0,1",
"3,0,1,1,3,3,3,3,3,3,3,3,3,3,1,3,3,1,1,1",
"0,0,0,0,3,3,3,3,3,3,3,3,1,1,1,3,3,3,0,0",
"0,0,0,0,3,3,3,3,3,3,1,1,1,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,1,1,3,3,3,3,3,0,3,0,0",
"0,0,0,0,3,3,3,3,3,1,1,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,1,1,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,1,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,1,1,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,1,1,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0",
"0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0"],
"Access": ["0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,512,512,512,512,512,512,512,512,512,512,512,512,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"],
"StaticItems": [{
"MapObject": "statue_behemoth",
"Positions": [[14,
8],
[5,
8]]
"Positions": [[14, 8],
[5, 8]]
},
{
"MapObject": "wall_skull2",
"Positions": [[16,
8],
[3,
8]]
"Positions": [[16, 8],
[3, 8]]
},
{
"MapObject": "tree_dead",
"Positions": [[19,
7],
[0,
7]]
"Positions": [[19, 7],
[0, 7]]
},
{
"MapObject": "Machine gun spawner",
"Positions": [[17,
35]]
"Positions": [[17, 35]]
},
{
"MapObject": "Bullets ammo spawner",
"Positions": [[17,
34],
[18,
34],
[18,
35]]
"Positions": [[17, 34],
[18, 34],
[18, 35]]
},
{
"MapObject": "terminal",
"Positions": [[17,
63],
[14,
5]]
"Positions": [[17, 63],
[14, 5]]
},
{
"MapObject": "table_wood_candle",
"Positions": [[1,
36],
[18,
67],
[4,
2]]
"Positions": [[1, 36],
[18, 67],
[4, 2]]
},
{
"MapObject": "wall_goo",
"Positions": [[18,
64],
[19,
63],
[14,
65],
[15,
62],
[18,
72]]
"Positions": [[18, 64],
[19, 63],
[14, 65],
[15, 62],
[18, 72]]
},
{
"MapObject": "gibs",
"Positions": [[19,
65]]
"Positions": [[19, 65]]
},
{
"MapObject": "bone_blood",
"Positions": [[16,
67],
[17,
69]]
"Positions": [[16, 67],
[17, 69]]
},
{
"MapObject": "skull2",
"Positions": [[14,
75]]
"Positions": [[14, 75]]
}],
"StaticCharacters": [{
"Index": 0,
"Positions": [[14,
16],
[17,
12],
[18,
18],
[5,
14],
[1,
18],
[7,
37],
[10,
40],
[7,
42],
[13,
44],
[13,
62],
[7,
56],
[9,
58],
[3,
69],
[5,
71],
[14,
87],
[16,
82],
[17,
86],
[13,
84],
[3,
88],
[7,
91],
[2,
93],
[6,
96],
[17,
75],
[16,
76]]
"Positions": [[14, 16],
[17, 12],
[18, 18],
[5, 14],
[1, 18],
[7, 37],
[10, 40],
[7, 42],
[13, 44],
[13, 62],
[7, 56],
[9, 58],
[3, 69],
[5, 71],
[14, 87],
[16, 82],
[17, 86],
[13, 84],
[3, 88],
[7, 91],
[2, 93],
[6, 96],
[17, 75],
[16, 76]]
},
{
"Index": 2,
"Positions": [[1,
35],
[7,
45],
[10,
44],
[2,
64],
[10,
71],
[12,
88],
[3,
97],
[8,
97]]
"Positions": [[1, 35],
[7, 45],
[10, 44],
[2, 64],
[10, 71],
[12, 88],
[3, 97],
[8, 97]]
},
{
"Index": 4,
"Positions": [[18,
38],
[16,
65],
[14,
67],
[1,
79],
[2,
81],
[17,
73]]
"Positions": [[18, 38],
[16, 65],
[14, 67],
[1, 79],
[2, 81],
[17, 73]]
}],
"StaticObjectives": [],
"StaticKeys": [{
"Index": 1,
"Positions": [[2,
35]]
"Positions": [[2, 35]]
}],
"Start": [9,
1],
"Exit": {
"Start": [4,
93],
"End": [15,
99]
}
"StaticPickups": [],
"Start": [9, 1],
"Exits": [{
"Rect": [4,
93,
11,
6],
"Mission": 5,
"Hidden": false
}]
},
{
"Title": "Pandemonium",
@@ -585,12 +913,8 @@
"Type": "Classic",
"Width": 60,
"Height": 80,
"WallStyle": "rock",
"FloorStyle": "dirt",
"RoomStyle": "cobble",
"ExitStyle": "plate2",
"KeyStyle": "plain2",
"DoorStyle": "dungeon2",
"Objectives": [{
"Description": "Destroy all 6 demonic altars",
"Type": "Destroy",
@@ -668,10 +992,52 @@
"Flamer",
"Pistol"],
"Song": "",
"WallMask": "3c3c3c",
"FloorMask": "c0c0c0",
"RoomMask": "303030",
"AltMask": "002800",
"TileClasses": {
"Wall": {
"Name": "wall",
"Type": "Wall",
"Style": "rock",
"Mask": "3c3c3cff",
"MaskAlt": "002800ff",
"CanWalk": false,
"IsOpaque": true,
"Shootable": true,
"IsRoom": false
},
"Floor": {
"Name": "tile",
"Type": "Floor",
"Style": "dirt",
"Mask": "c0c0c0ff",
"MaskAlt": "002800ff",
"CanWalk": true,
"IsOpaque": false,
"Shootable": false,
"IsRoom": false
},
"Room": {
"Name": "tile",
"Type": "Floor",
"Style": "cobble",
"Mask": "303030ff",
"MaskAlt": "002800ff",
"CanWalk": true,
"IsOpaque": false,
"Shootable": false,
"IsRoom": true
},
"Door": {
"Name": "door",
"Type": "Door",
"Style": "dungeon2",
"Mask": "ffffffff",
"MaskAlt": "ffffffff",
"CanWalk": false,
"IsOpaque": true,
"Shootable": true,
"IsRoom": true
}
},
"Walls": 16,
"WallLength": 60,
"CorridorWidth": 3,
@@ -686,6 +1052,7 @@
"WallPad": 2
},
"Squares": 4,
"ExitEnabled": false,
"Doors": {
"Enabled": true,
"Min": 2,
@@ -703,12 +1070,8 @@
"Type": "Classic",
"Width": 60,
"Height": 60,
"WallStyle": "granite",
"FloorStyle": "cobble",
"RoomStyle": "checker",
"ExitStyle": "plate2",
"KeyStyle": "plain2",
"DoorStyle": "blast",
"Objectives": [{
"Description": "Kill the Ur-Devil",
"Type": "Kill",
@@ -794,10 +1157,52 @@
"Shotgun",
"Pistol"],
"Song": "",
"WallMask": "202020",
"FloorMask": "3c3c3c",
"RoomMask": "5c5c5c",
"AltMask": "202020",
"TileClasses": {
"Wall": {
"Name": "wall",
"Type": "Wall",
"Style": "granite",
"Mask": "202020ff",
"MaskAlt": "202020ff",
"CanWalk": false,
"IsOpaque": true,
"Shootable": true,
"IsRoom": false
},
"Floor": {
"Name": "tile",
"Type": "Floor",
"Style": "cobble",
"Mask": "3c3c3cff",
"MaskAlt": "202020ff",
"CanWalk": true,
"IsOpaque": false,
"Shootable": false,
"IsRoom": false
},
"Room": {
"Name": "tile",
"Type": "Floor",
"Style": "checker",
"Mask": "5c5c5cff",
"MaskAlt": "202020ff",
"CanWalk": true,
"IsOpaque": false,
"Shootable": false,
"IsRoom": true
},
"Door": {
"Name": "door",
"Type": "Door",
"Style": "blast",
"Mask": "ffffffff",
"MaskAlt": "ffffffff",
"CanWalk": false,
"IsOpaque": true,
"Shootable": true,
"IsRoom": true
}
},
"Walls": 4,
"WallLength": 60,
"CorridorWidth": 2,
@@ -812,6 +1217,7 @@
"WallPad": 2
},
"Squares": 1,
"ExitEnabled": false,
"Doors": {
"Enabled": true,
"Min": 3,

View File

@@ -1,7 +1,11 @@
{
"Version": 13,
"Version": 16,
"Title": "Harmful Crysalis",
"Author": "Sauer2",
"Description": "You are a miner, looking to mine the rare mineral phleboltinum on Xurion.",
"Ammo": false,
"WeaponPersist": false,
"SkipWeaponMenu": false,
"RandomPickups": true,
"Missions": 9
}

View File

@@ -1,12 +1,14 @@
{
"Version": 12,
"Version": 13,
"Characters": [{
"Class": "Dragon",
"Skin": "d78e20",
"Arms": "ec2525",
"Body": "6d5555",
"Legs": "73874d",
"Hair": "e20000",
"Class": "Jones",
"HairType": "hogan",
"Skin": "d78e20ff",
"Arms": "ec2525ff",
"Body": "6d5555ff",
"Legs": "73874dff",
"Hair": "e20000ff",
"Feet": "73874dff",
"speed": 100,
"Gun": "Laser Pistol",
"maxHealth": 60,
@@ -18,11 +20,12 @@
},
{
"Class": "Ogre",
"Skin": "51a36f",
"Arms": "7e4e4e",
"Body": "698e2d",
"Legs": "716293",
"Hair": "fcf5f3",
"Skin": "51a36fff",
"Arms": "7e4e4eff",
"Body": "698e2dff",
"Legs": "716293ff",
"Hair": "fcf5f3ff",
"Feet": "716293ff",
"speed": 142,
"Gun": "Pulse rifle",
"maxHealth": 60,
@@ -33,12 +36,14 @@
"actionDelay": 15
},
{
"Class": "Wolf",
"Skin": "af7948",
"Arms": "4a984a",
"Body": "61527e",
"Legs": "86b14c",
"Hair": "646363",
"Class": "Jones",
"HairType": "dutch",
"Skin": "af7948ff",
"Arms": "4a984aff",
"Body": "61527eff",
"Legs": "86b14cff",
"Hair": "646363ff",
"Feet": "86b14cff",
"speed": 274,
"Gun": "Knife",
"maxHealth": 60,
@@ -50,11 +55,13 @@
},
{
"Class": "Lady",
"Skin": "77dae2",
"Arms": "38545d",
"Body": "909a6d",
"Legs": "565353",
"Hair": "27f700",
"HairType": "ponytail",
"Skin": "77dae2ff",
"Arms": "38545dff",
"Body": "909a6dff",
"Legs": "565353ff",
"Hair": "27f700ff",
"Feet": "565353ff",
"speed": 157,
"Gun": "Laser Pistol",
"maxHealth": 60,
@@ -65,12 +72,14 @@
"actionDelay": 15
},
{
"Class": "Cyber Jones",
"Skin": "7e4c1c",
"Arms": "b2b3b4",
"Body": "9a9a99",
"Legs": "565353",
"Hair": "000000",
"Class": "Cyborg",
"HairType": "cyber_shades",
"Skin": "7e4c1cff",
"Arms": "b2b3b4ff",
"Body": "9a9a99ff",
"Legs": "565353ff",
"Hair": "000000ff",
"Feet": "565353ff",
"speed": 135,
"Gun": "Laser Pistol",
"maxHealth": 60,
@@ -82,11 +91,12 @@
},
{
"Class": "Bug-eye",
"Skin": "bf2d26",
"Arms": "87dffc",
"Body": "653bfa",
"Legs": "8fb845",
"Hair": "317226",
"Skin": "bf2d26ff",
"Arms": "87dffcff",
"Body": "653bfaff",
"Legs": "8fb845ff",
"Hair": "317226ff",
"Feet": "8fb845ff",
"speed": 219,
"Gun": "Pistol",
"maxHealth": 60,
@@ -98,11 +108,13 @@
},
{
"Class": "Lady",
"Skin": "2aaa00",
"Arms": "9ae6ff",
"Body": "368a56",
"Legs": "855b5b",
"Hair": "003fcb",
"HairType": "ponytail",
"Skin": "2aaa00ff",
"Arms": "9ae6ffff",
"Body": "368a56ff",
"Legs": "855b5bff",
"Hair": "003fcbff",
"Feet": "855b5bff",
"speed": 157,
"Gun": "Pistol",
"maxHealth": 60,
@@ -113,12 +125,14 @@
"actionDelay": 15
},
{
"Class": "Professor",
"Skin": "eecf6c",
"Arms": "ececec",
"Body": "ffffff",
"Legs": "565353",
"Hair": "fc9c0b",
"Class": "Jones",
"HairType": "professor",
"Skin": "eecf6cff",
"Arms": "ecececff",
"Body": "ffffffff",
"Legs": "565353ff",
"Hair": "fc9c0bff",
"Feet": "565353ff",
"speed": 157,
"Gun": "Pistol",
"maxHealth": 60,
@@ -130,11 +144,13 @@
},
{
"Class": "Lady",
"Skin": "fce242",
"Arms": "1afa77",
"Body": "489f00",
"Legs": "917373",
"Hair": "3c3423",
"HairType": "ponytail",
"Skin": "fce242ff",
"Arms": "1afa77ff",
"Body": "489f00ff",
"Legs": "917373ff",
"Hair": "3c3423ff",
"Feet": "917373ff",
"speed": 157,
"Gun": "Shotgun",
"maxHealth": 60,
@@ -145,12 +161,14 @@
"actionDelay": 15
},
{
"Class": "Ogre Boss",
"Skin": "62af9b",
"Arms": "806e6e",
"Body": "77add4",
"Legs": "565353",
"Hair": "fc320b",
"Class": "Ogre",
"HairType": "mohawk",
"Skin": "62af9bff",
"Arms": "806e6eff",
"Body": "77add4ff",
"Legs": "565353ff",
"Hair": "fc320bff",
"Feet": "565353ff",
"speed": 157,
"Gun": "Pistol",
"maxHealth": 60,
@@ -162,11 +180,13 @@
},
{
"Class": "Lady",
"Skin": "e5903e",
"Arms": "4d6fd4",
"Body": "69c2b0",
"Legs": "d2cdcd",
"Hair": "f7d50d",
"HairType": "ponytail",
"Skin": "e5903eff",
"Arms": "4d6fd4ff",
"Body": "69c2b0ff",
"Legs": "d2cdcdff",
"Hair": "f7d50dff",
"Feet": "d2cdcdff",
"speed": 256,
"Gun": "Prox. mine",
"maxHealth": 40,
@@ -178,11 +198,12 @@
},
{
"Class": "Jones",
"Skin": "b86825",
"Arms": "9d5fd9",
"Body": "647271",
"Legs": "4a4a4a",
"Hair": "ad9933",
"Skin": "b86825ff",
"Arms": "9d5fd9ff",
"Body": "647271ff",
"Legs": "4a4a4aff",
"Hair": "ad9933ff",
"Feet": "4a4a4aff",
"speed": 256,
"Gun": "Prox. mine",
"maxHealth": 40,
@@ -193,12 +214,14 @@
"actionDelay": 18
},
{
"Class": "Bob",
"Skin": "eca15d",
"Arms": "465821",
"Body": "7ec269",
"Legs": "d2cdcd",
"Hair": "e70c0c",
"Class": "Jones",
"HairType": "beard",
"Skin": "eca15dff",
"Arms": "465821ff",
"Body": "7ec269ff",
"Legs": "d2cdcdff",
"Hair": "e70c0cff",
"Feet": "d2cdcdff",
"speed": 256,
"Gun": "Prox. mine",
"maxHealth": 40,
@@ -210,11 +233,12 @@
},
{
"Class": "Ogre",
"Skin": "876666",
"Arms": "74d44d",
"Body": "69c2b0",
"Legs": "d2cdcd",
"Hair": "aaa09a",
"Skin": "876666ff",
"Arms": "74d44dff",
"Body": "69c2b0ff",
"Legs": "d2cdcdff",
"Hair": "aaa09aff",
"Feet": "d2cdcdff",
"speed": 256,
"Gun": "Prox. mine",
"maxHealth": 40,
@@ -226,11 +250,12 @@
},
{
"Class": "Robot",
"Skin": "b2c6a9",
"Arms": "99b699",
"Body": "cbe2bd",
"Legs": "e3f7ce",
"Hair": "62a33c",
"Skin": "b2c6a9ff",
"Arms": "99b699ff",
"Body": "cbe2bdff",
"Legs": "e3f7ceff",
"Hair": "62a33cff",
"Feet": "e3f7ceff",
"speed": 464,
"Gun": "Monster Bite",
"maxHealth": 10,
@@ -242,11 +267,12 @@
},
{
"Class": "Robot",
"Skin": "759869",
"Arms": "7ea67e",
"Body": "9eb88e",
"Legs": "e3f7ce",
"Hair": "ff881a",
"Skin": "759869ff",
"Arms": "7ea67eff",
"Body": "9eb88eff",
"Legs": "e3f7ceff",
"Hair": "ff881aff",
"Feet": "e3f7ceff",
"speed": 517,
"Gun": "Monster Bite",
"maxHealth": 20,
@@ -258,11 +284,12 @@
},
{
"Class": "Robot",
"Skin": "759869",
"Arms": "7ea67e",
"Body": "9eb88e",
"Legs": "e3f7ce",
"Hair": "fc16b0",
"Skin": "759869ff",
"Arms": "7ea67eff",
"Body": "9eb88eff",
"Legs": "e3f7ceff",
"Hair": "fc16b0ff",
"Feet": "e3f7ceff",
"speed": 517,
"Gun": "Monster Bite",
"maxHealth": 10,
@@ -274,11 +301,12 @@
},
{
"Class": "Robot",
"Skin": "445f3a",
"Arms": "639f63",
"Body": "8ebd72",
"Legs": "52584b",
"Hair": "e71818",
"Skin": "445f3aff",
"Arms": "639f63ff",
"Body": "8ebd72ff",
"Legs": "52584bff",
"Hair": "e71818ff",
"Feet": "52584bff",
"speed": 464,
"Gun": "Monster gas",
"maxHealth": 30,
@@ -289,12 +317,14 @@
"actionDelay": 16
},
{
"Class": "Smith",
"Skin": "de864d",
"Arms": "5b5555",
"Body": "fafff8",
"Legs": "ddffd2",
"Hair": "7e6415",
"Class": "Jones",
"HairType": "flattop",
"Skin": "de864dff",
"Arms": "5b5555ff",
"Body": "fafff8ff",
"Legs": "ddffd2ff",
"Hair": "7e6415ff",
"Feet": "ddffd2ff",
"speed": 305,
"Gun": "Flamer",
"maxHealth": 400,
@@ -306,11 +336,12 @@
},
{
"Class": "Ogre",
"Skin": "69cb00",
"Arms": "404040",
"Body": "404040",
"Legs": "404040",
"Hair": "ff0000",
"Skin": "69cb00ff",
"Arms": "404040ff",
"Body": "404040ff",
"Legs": "404040ff",
"Hair": "ff0000ff",
"Feet": "404040ff",
"speed": 357,
"Gun": "Pulse rifle",
"maxHealth": 40,
@@ -321,12 +352,14 @@
"actionDelay": 15
},
{
"Class": "WarBaby",
"Skin": "d77753",
"Arms": "404040",
"Body": "404040",
"Legs": "404040",
"Hair": "4db42d",
"Class": "Jones",
"HairType": "beret",
"Skin": "d77753ff",
"Arms": "404040ff",
"Body": "404040ff",
"Legs": "404040ff",
"Hair": "4db42dff",
"Feet": "404040ff",
"speed": 357,
"Gun": "Shotgun",
"maxHealth": 40,
@@ -338,11 +371,13 @@
},
{
"Class": "Lady",
"Skin": "1cc3fc",
"Arms": "404040",
"Body": "404040",
"Legs": "404040",
"Hair": "23ff23",
"HairType": "ponytail",
"Skin": "1cc3fcff",
"Arms": "404040ff",
"Body": "404040ff",
"Legs": "404040ff",
"Hair": "23ff23ff",
"Feet": "404040ff",
"speed": 256,
"Gun": "Launcher",
"maxHealth": 40,
@@ -353,12 +388,14 @@
"actionDelay": 15
},
{
"Class": "Wolf",
"Skin": "804e12",
"Arms": "404040",
"Body": "404040",
"Legs": "404040",
"Hair": "b2b4b2",
"Class": "Jones",
"HairType": "dutch",
"Skin": "804e12ff",
"Arms": "404040ff",
"Body": "404040ff",
"Legs": "404040ff",
"Hair": "b2b4b2ff",
"Feet": "404040ff",
"speed": 256,
"Gun": "Shotgun",
"maxHealth": 40,
@@ -369,12 +406,14 @@
"actionDelay": 15
},
{
"Class": "Goggles",
"Skin": "cd9754",
"Arms": "404040",
"Body": "404040",
"Legs": "404040",
"Hair": "97ec08",
"Class": "Jones",
"HairType": "goggles",
"Skin": "cd9754ff",
"Arms": "404040ff",
"Body": "404040ff",
"Legs": "404040ff",
"Hair": "97ec08ff",
"Feet": "404040ff",
"speed": 256,
"Gun": "Launcher",
"maxHealth": 40,
@@ -386,11 +425,12 @@
},
{
"Class": "Jones",
"Skin": "c98838",
"Arms": "404040",
"Body": "404040",
"Legs": "404040",
"Hair": "97ec08",
"Skin": "c98838ff",
"Arms": "404040ff",
"Body": "404040ff",
"Legs": "404040ff",
"Hair": "97ec08ff",
"Feet": "404040ff",
"speed": 256,
"Gun": "Powergun",
"maxHealth": 40,
@@ -402,11 +442,12 @@
},
{
"Class": "Mad bug-eye",
"Skin": "fc6100",
"Arms": "404040",
"Body": "404040",
"Legs": "404040",
"Hair": "97ec08",
"Skin": "fc6100ff",
"Arms": "404040ff",
"Body": "404040ff",
"Legs": "404040ff",
"Hair": "97ec08ff",
"Feet": "404040ff",
"speed": 256,
"Gun": "Pulse rifle",
"maxHealth": 40,
@@ -417,12 +458,14 @@
"actionDelay": 15
},
{
"Class": "Smith",
"Skin": "af9934",
"Arms": "404040",
"Body": "404040",
"Legs": "404040",
"Hair": "020202",
"Class": "Jones",
"HairType": "flattop",
"Skin": "af9934ff",
"Arms": "404040ff",
"Body": "404040ff",
"Legs": "404040ff",
"Hair": "020202ff",
"Feet": "404040ff",
"speed": 256,
"Gun": "Machine pistol",
"maxHealth": 40,
@@ -433,12 +476,14 @@
"actionDelay": 15
},
{
"Class": "Grunt",
"Skin": "ad7d4b",
"Arms": "404040",
"Body": "404040",
"Legs": "404040",
"Hair": "2e5f08",
"Class": "Jones",
"HairType": "riot_helmet",
"Skin": "ad7d4bff",
"Arms": "404040ff",
"Body": "404040ff",
"Legs": "404040ff",
"Hair": "2e5f08ff",
"Feet": "404040ff",
"speed": 256,
"Gun": "AArms Needler",
"maxHealth": 40,
@@ -450,11 +495,13 @@
},
{
"Class": "Lady",
"Skin": "e9c095",
"Arms": "404040",
"Body": "404040",
"Legs": "404040",
"Hair": "ff5e08",
"HairType": "ponytail",
"Skin": "e9c095ff",
"Arms": "404040ff",
"Body": "404040ff",
"Legs": "404040ff",
"Hair": "ff5e08ff",
"Feet": "404040ff",
"speed": 256,
"Gun": "Machine pistol",
"maxHealth": 40,
@@ -466,11 +513,12 @@
},
{
"Class": "Jones",
"Skin": "aa88fc",
"Arms": "404040",
"Body": "404040",
"Legs": "404040",
"Hair": "97ec08",
"Skin": "aa88fcff",
"Arms": "404040ff",
"Body": "404040ff",
"Legs": "404040ff",
"Hair": "97ec08ff",
"Feet": "404040ff",
"speed": 256,
"Gun": "Sniper rifle",
"maxHealth": 40,
@@ -481,12 +529,14 @@
"actionDelay": 15
},
{
"Class": "Goggles",
"Skin": "916634",
"Arms": "404040",
"Body": "404040",
"Legs": "404040",
"Hair": "0bfc30",
"Class": "Jones",
"HairType": "goggles",
"Skin": "916634ff",
"Arms": "404040ff",
"Body": "404040ff",
"Legs": "404040ff",
"Hair": "0bfc30ff",
"Feet": "404040ff",
"speed": 256,
"Gun": "Sniper rifle",
"maxHealth": 40,
@@ -498,11 +548,12 @@
},
{
"Class": "Ogre",
"Skin": "62b1e5",
"Arms": "404040",
"Body": "404040",
"Legs": "404040",
"Hair": "669f09",
"Skin": "62b1e5ff",
"Arms": "404040ff",
"Body": "404040ff",
"Legs": "404040ff",
"Hair": "669f09ff",
"Feet": "404040ff",
"speed": 256,
"Gun": "Sniper rifle",
"maxHealth": 40,
@@ -513,12 +564,14 @@
"actionDelay": 15
},
{
"Class": "Ice",
"Skin": "dbb190",
"Arms": "404040",
"Body": "404040",
"Legs": "404040",
"Hair": "151515",
"Class": "Jones",
"HairType": "shades",
"Skin": "dbb190ff",
"Arms": "404040ff",
"Body": "404040ff",
"Legs": "404040ff",
"Hair": "151515ff",
"Feet": "404040ff",
"speed": 256,
"Gun": "Sniper rifle",
"maxHealth": 40,
@@ -529,12 +582,14 @@
"actionDelay": 15
},
{
"Class": "WarBaby",
"Skin": "db8847",
"Arms": "404040",
"Body": "404040",
"Legs": "404040",
"Hair": "72955b",
"Class": "Jones",
"HairType": "beret",
"Skin": "db8847ff",
"Arms": "404040ff",
"Body": "404040ff",
"Legs": "404040ff",
"Hair": "72955bff",
"Feet": "404040ff",
"speed": 256,
"Gun": "Sniper rifle",
"maxHealth": 40,
@@ -546,11 +601,12 @@
},
{
"Class": "Bug-eye",
"Skin": "fcc200",
"Arms": "404040",
"Body": "404040",
"Legs": "404040",
"Hair": "72955b",
"Skin": "fcc200ff",
"Arms": "404040ff",
"Body": "404040ff",
"Legs": "404040ff",
"Hair": "72955bff",
"Feet": "404040ff",
"speed": 256,
"Gun": "Sniper rifle",
"maxHealth": 40,
@@ -562,11 +618,12 @@
},
{
"Class": "Robot",
"Skin": "445f3a",
"Arms": "eeeeec",
"Body": "8ebd72",
"Legs": "cbd0c5",
"Hair": "56ff00",
"Skin": "445f3aff",
"Arms": "eeeeecff",
"Body": "8ebd72ff",
"Legs": "cbd0c5ff",
"Hair": "56ff00ff",
"Feet": "cbd0c5ff",
"speed": 264,
"Gun": "Monster psybeam",
"maxHealth": 302,

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,11 @@
{
"Version": 11,
"Version": 16,
"Title": "Most classified enemy",
"Author": "Sauer2",
"Description": "The government created you in a military lab. You are a mutant with powers that can be weaponized. But now they got afraid of that powers and aim to \"cut the funds\". You better escape before that happens.",
"Ammo": false,
"WeaponPersist": false,
"SkipWeaponMenu": false,
"RandomPickups": true,
"Missions": 12
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -1,10 +1,11 @@
{
"Version": 15,
"Version": 16,
"Title": "Pirates from outer space!",
"Author": "Sauer2",
"Description": "You are a space security officer on the ship Prodigy IV. The ship is three hours away from Antares III and everyone is happy to leave the ship, when suddenly an unknown ship attacks...",
"Ammo": false,
"WeaponPersist": false,
"SkipWeaponMenu": false,
"RandomPickups": true,
"Missions": 10
}

View File

@@ -8,6 +8,7 @@
"Body": "149c14ff",
"Legs": "363636ff",
"Hair": "363636ff",
"Feet": "363636ff",
"speed": 256,
"Gun": "Laser Pistol",
"maxHealth": 40,
@@ -25,6 +26,7 @@
"Body": "149c14ff",
"Legs": "363636ff",
"Hair": "363636ff",
"Feet": "363636ff",
"speed": 256,
"Gun": "Shotgun",
"maxHealth": 40,
@@ -42,6 +44,7 @@
"Body": "149c14ff",
"Legs": "363636ff",
"Hair": "363636ff",
"Feet": "363636ff",
"speed": 256,
"Gun": "Pulse rifle",
"maxHealth": 40,
@@ -60,6 +63,7 @@
"Body": "58589cff",
"Legs": "363636ff",
"Hair": "58589cff",
"Feet": "363636ff",
"speed": 128,
"Gun": "AArms Pulse MG",
"maxHealth": 40,
@@ -78,6 +82,7 @@
"Body": "58589cff",
"Legs": "363636ff",
"Hair": "363636ff",
"Feet": "363636ff",
"speed": 256,
"Gun": "Grenades",
"maxHealth": 40,
@@ -95,6 +100,7 @@
"Body": "58589cff",
"Legs": "363636ff",
"Hair": "58589cff",
"Feet": "363636ff",
"speed": 512,
"Gun": "Grenades",
"maxHealth": 40,
@@ -113,6 +119,7 @@
"Body": "58589cff",
"Legs": "363636ff",
"Hair": "000000ff",
"Feet": "363636ff",
"speed": 128,
"Gun": "XTech BounceRifle",
"maxHealth": 40,
@@ -130,6 +137,7 @@
"Body": "58589cff",
"Legs": "363636ff",
"Hair": "363636ff",
"Feet": "363636ff",
"speed": 256,
"Gun": "Grenades",
"maxHealth": 40,
@@ -146,6 +154,7 @@
"Body": "58589cff",
"Legs": "363636ff",
"Hair": "363636ff",
"Feet": "363636ff",
"speed": 256,
"Gun": "Grenades",
"maxHealth": 40,
@@ -163,6 +172,7 @@
"Body": "58589cff",
"Legs": "363636ff",
"Hair": "58589cff",
"Feet": "363636ff",
"speed": 128,
"Gun": "Grenades",
"maxHealth": 40,
@@ -179,6 +189,7 @@
"Body": "58589cff",
"Legs": "363636ff",
"Hair": "363636ff",
"Feet": "363636ff",
"speed": 256,
"Gun": "Grenades",
"maxHealth": 40,
@@ -196,6 +207,7 @@
"Body": "58589cff",
"Legs": "363636ff",
"Hair": "149c14ff",
"Feet": "363636ff",
"speed": 512,
"Gun": "Grenades",
"maxHealth": 40,
@@ -212,6 +224,7 @@
"Body": "58589cff",
"Legs": "363636ff",
"Hair": "c00000ff",
"Feet": "363636ff",
"speed": 256,
"Gun": "Grenades",
"maxHealth": 40,
@@ -229,6 +242,7 @@
"Body": "58589cff",
"Legs": "363636ff",
"Hair": "882800ff",
"Feet": "363636ff",
"speed": 256,
"Gun": "Grenades",
"maxHealth": 40,
@@ -246,6 +260,7 @@
"Body": "58589cff",
"Legs": "363636ff",
"Hair": "9c5858ff",
"Feet": "363636ff",
"speed": 256,
"Gun": "AArms Pulse MG",
"maxHealth": 40,
@@ -263,6 +278,7 @@
"Body": "58589cff",
"Legs": "363636ff",
"Hair": "9c0000ff",
"Feet": "363636ff",
"speed": 256,
"Gun": "Zeild Particle Shotgun V5",
"maxHealth": 40,
@@ -279,6 +295,7 @@
"Body": "58589cff",
"Legs": "363636ff",
"Hair": "ff6c00ff",
"Feet": "363636ff",
"speed": 256,
"Gun": "AArms Pulse MG",
"maxHealth": 40,
@@ -296,6 +313,7 @@
"Body": "58589cff",
"Legs": "363636ff",
"Hair": "ff6c00ff",
"Feet": "363636ff",
"speed": 256,
"Gun": "Grenades",
"maxHealth": 40,
@@ -313,6 +331,7 @@
"Body": "363636ff",
"Legs": "9c9c9cff",
"Hair": "363636ff",
"Feet": "9c9c9cff",
"speed": 256,
"Gun": "Machine gun",
"maxHealth": 30,
@@ -330,6 +349,7 @@
"Body": "363636ff",
"Legs": "ff8136ff",
"Hair": "ff0000ff",
"Feet": "ff8136ff",
"speed": 256,
"Gun": "Shotgun",
"maxHealth": 20,
@@ -346,6 +366,7 @@
"Body": "363636ff",
"Legs": "9c9c9cff",
"Hair": "363636ff",
"Feet": "9c9c9cff",
"speed": 384,
"Gun": "Pistol",
"maxHealth": 50,
@@ -363,6 +384,7 @@
"Body": "363636ff",
"Legs": "9c589cff",
"Hair": "000000ff",
"Feet": "9c589cff",
"speed": 128,
"Gun": "Confusion bombs",
"maxHealth": 80,
@@ -380,6 +402,7 @@
"Body": "363636ff",
"Legs": "9c5858ff",
"Hair": "363636ff",
"Feet": "9c5858ff",
"speed": 256,
"Gun": "Knife",
"maxHealth": 50,
@@ -396,6 +419,7 @@
"Body": "363636ff",
"Legs": "9c0000ff",
"Hair": "363636ff",
"Feet": "9c0000ff",
"speed": 256,
"Gun": "Browny gun",
"maxHealth": 50,
@@ -413,6 +437,7 @@
"Body": "363636ff",
"Legs": "b79536ff",
"Hair": "363636ff",
"Feet": "b79536ff",
"speed": 320,
"Gun": "Sniper rifle",
"maxHealth": 50,
@@ -430,6 +455,7 @@
"Body": "363636ff",
"Legs": "9c9c9cff",
"Hair": "58589cff",
"Feet": "9c9c9cff",
"speed": 448,
"Gun": "Laser Pistol",
"maxHealth": 50,
@@ -447,6 +473,7 @@
"Body": "363636ff",
"Legs": "363636ff",
"Hair": "ff6c00ff",
"Feet": "363636ff",
"speed": 128,
"Gun": "Sniper rifle",
"maxHealth": 150,
@@ -464,6 +491,7 @@
"Body": "363636ff",
"Legs": "363636ff",
"Hair": "000000ff",
"Feet": "363636ff",
"speed": 192,
"Gun": "Flamer",
"maxHealth": 120,
@@ -481,6 +509,7 @@
"Body": "363636ff",
"Legs": "ff8136ff",
"Hair": "363636ff",
"Feet": "ff8136ff",
"speed": 256,
"Gun": "Flamer",
"maxHealth": 40,
@@ -498,6 +527,7 @@
"Body": "363636ff",
"Legs": "9c9c9cff",
"Hair": "000000ff",
"Feet": "9c9c9cff",
"speed": 512,
"Gun": "Knife",
"maxHealth": 10,
@@ -515,6 +545,7 @@
"Body": "363636ff",
"Legs": "9c9c9cff",
"Hair": "ff0000ff",
"Feet": "9c9c9cff",
"speed": 192,
"Gun": "Powergun",
"maxHealth": 100,
@@ -532,6 +563,7 @@
"Body": "363636ff",
"Legs": "363636ff",
"Hair": "ff6c00ff",
"Feet": "363636ff",
"speed": 128,
"Gun": "Dynamite",
"maxHealth": 10,
@@ -549,6 +581,7 @@
"Body": "363636ff",
"Legs": "9c9c9cff",
"Hair": "000000ff",
"Feet": "9c9c9cff",
"speed": 128,
"Gun": "Dynamite",
"maxHealth": 10,
@@ -566,6 +599,7 @@
"Body": "363636ff",
"Legs": "9c9c9cff",
"Hair": "000000ff",
"Feet": "9c9c9cff",
"speed": 128,
"Gun": "Dynamite",
"maxHealth": 10,
@@ -583,6 +617,7 @@
"Body": "363636ff",
"Legs": "9c9c9cff",
"Hair": "d25106ff",
"Feet": "9c9c9cff",
"speed": 128,
"Gun": "Dynamite",
"maxHealth": 10,
@@ -599,6 +634,7 @@
"Body": "363636ff",
"Legs": "9c9c9cff",
"Hair": "000000ff",
"Feet": "9c9c9cff",
"speed": 128,
"Gun": "Dynamite",
"maxHealth": 10,
@@ -616,6 +652,7 @@
"Body": "363636ff",
"Legs": "9c9c9cff",
"Hair": "000000ff",
"Feet": "9c9c9cff",
"speed": 128,
"Gun": "Dynamite",
"maxHealth": 10,
@@ -632,6 +669,7 @@
"Body": "363636ff",
"Legs": "363636ff",
"Hair": "9c0000ff",
"Feet": "363636ff",
"speed": 128,
"Gun": "Chemo gun",
"maxHealth": 120,
@@ -649,6 +687,7 @@
"Body": "ffffffff",
"Legs": "9c9c9cff",
"Hair": "363636ff",
"Feet": "9c9c9cff",
"speed": 256,
"Gun": "The Mutilator!!!",
"maxHealth": 250,

View File

@@ -542,11 +542,16 @@
"Index": 0,
"Positions": [[30, 38]]
}],
"StaticPickups": [],
"Start": [10, 5],
"Exit": {
"Start": [24, 4],
"End": [28, 8]
}
"Exits": [{
"Rect": [24,
4,
4,
4],
"Mission": 1,
"Hidden": false
}]
},
{
"Title": "Pirate ship beaming deck",
@@ -666,6 +671,7 @@
"WallPad": 0
},
"Squares": 2,
"ExitEnabled": true,
"Doors": {
"Enabled": true,
"Min": 1,
@@ -801,6 +807,7 @@
"WallPad": 0
},
"Squares": 1,
"ExitEnabled": true,
"Doors": {
"Enabled": true,
"Min": 1,
@@ -1038,11 +1045,16 @@
"Indices": [0]
}],
"StaticKeys": [],
"StaticPickups": [],
"Start": [16, 24],
"Exit": {
"Start": [14, 2],
"End": [18, 5]
}
"Exits": [{
"Rect": [14,
2,
4,
3],
"Mission": 4,
"Hidden": false
}]
},
{
"Title": "To the rescue",
@@ -1447,11 +1459,16 @@
"Index": 0,
"Positions": [[10, 27]]
}],
"StaticPickups": [],
"Start": [24, 26],
"Exit": {
"Start": [33, 2],
"End": [39, 9]
}
"Exits": [{
"Rect": [33,
2,
6,
7],
"Mission": 5,
"Hidden": false
}]
},
{
"Title": "The escape",
@@ -1548,6 +1565,7 @@
"WallPad": 0
},
"Squares": 1,
"ExitEnabled": true,
"Doors": {
"Enabled": true,
"Min": 1,
@@ -1689,6 +1707,7 @@
"WallPad": 1
},
"Squares": 0,
"ExitEnabled": false,
"Doors": {
"Enabled": false,
"Min": 4,
@@ -1844,6 +1863,7 @@
"WallPad": 0
},
"Squares": 0,
"ExitEnabled": true,
"Doors": {
"Enabled": true,
"Min": 2,
@@ -2137,11 +2157,16 @@
"Index": 1,
"Positions": [[3, 18]]
}],
"StaticPickups": [],
"Start": [39, 3],
"Exit": {
"Start": [37, 2],
"End": [42, 5]
}
"Exits": [{
"Rect": [37,
2,
5,
3],
"Mission": 9,
"Hidden": false
}]
},
{
"Title": "Till you drop",
@@ -2594,10 +2619,15 @@
"Index": 0,
"Positions": [[30, 38]]
}],
"StaticPickups": [],
"Start": [10, 5],
"Exit": {
"Start": [24, 4],
"End": [28, 8]
}
"Exits": [{
"Rect": [24,
4,
4,
4],
"Mission": 10,
"Hidden": false
}]
}]
}

View File

@@ -34,37 +34,36 @@
#include "gamedata.h"
#include "handle_game_events.h"
static NVec2 PlacePlayerSimple(Map *map)
static NVec2 PlacePlayerSimple(const Map *map)
{
const int halfMap =
MAX(map->Size.x * TILE_WIDTH, map->Size.y * TILE_HEIGHT) / 2;
int attemptsAwayFromExits = 0;
struct vec2 pos;
if (HasExit(gCampaign.Entry.Mode))
{
// First, try to place at least half the map away from the exit
const int halfMap =
MAX(map->Size.x * TILE_WIDTH, map->Size.y * TILE_HEIGHT) / 2;
// Don't try forever trying to place
for (int i = 0; i < 100; i++)
{
for (int j = 0; j < (int)map->exits.size; j++)
{
const struct vec2 exitPos = MapGetExitPos(map, j);
pos = MapGetRandomPos(map);
if (fabsf(pos.x - exitPos.x) > halfMap &&
fabsf(pos.y - exitPos.y) > halfMap &&
MapIsPosOKForPlayer(map, pos, false))
{
return Vec2ToNet(pos);
}
}
}
}
// Try to place randomly
bool ok = false;
do
{
pos = MapGetRandomPos(map);
} while (!MapIsPosOKForPlayer(map, pos, false));
ok = MapIsPosOKForPlayer(map, pos, false);
if (!ok)
continue;
if (attemptsAwayFromExits < 100)
{
attemptsAwayFromExits++;
// Try to place at least half the map away from any exits
for (int i = 0; i < (int)map->exits.size; i++)
{
const struct vec2 exitPos = MapGetExitPos(map, i);
if (fabsf(pos.x - exitPos.x) > halfMap &&
fabsf(pos.y - exitPos.y) > halfMap)
{
ok = false;
break;
}
}
}
} while (!ok);
return Vec2ToNet(pos);
}
@@ -81,7 +80,7 @@ static NVec2 PlaceActorNear(
// 7
#define TRY_LOCATION() \
pos = svec2_add(nearPos, svec2(dx, dy)); \
if (MapIsPosOKForPlayer(map, pos, allowAllTiles)) \
if (MapIsPosOKForPlayer(map, pos, allowAllTiles)) \
{ \
return Vec2ToNet(pos); \
}

View File

@@ -395,15 +395,18 @@ static int GetCmd(TActor *actor, const int delayModifier, const int rollLimit)
else if (actor->flags & FLAGS_RESCUED)
{
// If we haven't completed all objectives, act as follower
if (!CanCompleteMission(&gMission) || gMap.exits.size <= 1)
if (!CanCompleteMission(&gMission) || gMap.exits.size > 1)
{
cmd = Follow(actor);
}
else
{
// Run towards the only exit
const struct vec2 exitPos = MapGetExitPos(&gMap, 0);
cmd = AIGoto(actor, exitPos, false);
// Run towards the exit if there is one
if (gMap.exits.size == 1)
{
const struct vec2 exitPos = MapGetExitPos(&gMap, 0);
cmd = AIGoto(actor, exitPos, false);
}
}
}
else if (actor->aiContext->Delay > 0)

View File

@@ -110,14 +110,10 @@ static void DisplayObjective(
}
}
static void DisplayExit(struct vec2i pos, int scale, int flags)
static void DisplayExits(
const Map *m, const struct vec2i pos, const int scale, const int flags)
{
if (!HasExit(gCampaign.Entry.Mode))
{
return;
}
CA_FOREACH(const Exit, e, gMap.exits)
CA_FOREACH(const Exit, e, m->exits)
if (e->Hidden)
continue;
const struct vec2i exitPos =
@@ -319,7 +315,7 @@ void AutomapDraw(SDL_Renderer *renderer, const int flags, const bool showExit)
if (showExit)
{
DisplayExit(pos, MAP_FACTOR, flags);
DisplayExits(&gMap, pos, MAP_FACTOR, flags);
}
DisplaySummary();
}
@@ -348,7 +344,7 @@ void AutomapDrawRegion(
DrawObjectivesAndKeys(&gMap, centerOn, scale, flags);
if (showExit)
{
DisplayExit(centerOn, scale, flags);
DisplayExits(map, centerOn, scale, flags);
}
GraphicsSetClip(renderer, oldClip);
}

View File

@@ -257,6 +257,11 @@ static void MapChangeFloor(
}
}
bool MapHasExits(const Map *m)
{
return m->exits.size > 0;
}
// Change the perimeter of tiles around the exit area
void MapShowExitArea(Map *map, const int i)
{

View File

@@ -140,6 +140,7 @@ bool MapIsPosOKForPlayer(
const Map *map, const struct vec2 pos, const bool allowAllTiles);
bool MapIsTileAreaClear(
const Map *map, const struct vec2 pos, const struct vec2i size);
bool MapHasExits(const Map *m);
void MapShowExitArea(Map *map, const int i);
// Returns the center of the tile that's the middle of the exit area
struct vec2 MapGetExitPos(const Map *m, const int i);

View File

@@ -368,6 +368,7 @@ static json_t *SaveMissions(CArray *a)
json_insert_pair_into_object(
node, "Rooms", SaveRooms(mission->u.Classic.Rooms));
AddIntPair(node, "Squares", mission->u.Classic.Squares);
AddBoolPair(node, "ExitEnabled", mission->u.Classic.ExitEnabled);
json_insert_pair_into_object(
node, "Doors", SaveClassicDoors(mission));
json_insert_pair_into_object(
@@ -387,6 +388,7 @@ static json_t *SaveMissions(CArray *a)
json_insert_pair_into_object(
node, "Rooms", SaveRooms(mission->u.Cave.Rooms));
AddIntPair(node, "Squares", mission->u.Cave.Squares);
AddBoolPair(node, "ExitEnabled", mission->u.Cave.ExitEnabled);
AddBoolPair(node, "DoorsEnabled", mission->u.Cave.DoorsEnabled);
break;
default:

View File

@@ -94,15 +94,27 @@ void MapBuild(
MapSetupDoors(&mb);
MapPrintDebug(mb.Map);
if (mb.mission->Type == MAPTYPE_CLASSIC)
{
MapAddDrains(&mb);
}
// Set exit now since we have set up all the tiles
if (mb.Map->exits.size == 0)
switch (mb.mission->Type)
{
MapGenerateRandomExitArea(mb.Map, missionIndex);
case MAPTYPE_CLASSIC:
MapAddDrains(&mb);
if (HasExit(gCampaign.Entry.Mode) && mb.mission->u.Classic.ExitEnabled)
{
MapGenerateRandomExitArea(mb.Map, missionIndex);
}
break;
case MAPTYPE_STATIC:
break;
case MAPTYPE_CAVE:
if (HasExit(gCampaign.Entry.Mode) && mb.mission->u.Cave.ExitEnabled)
{
MapGenerateRandomExitArea(mb.Map, missionIndex);
}
break;
default:
CASSERT(false, "unknown map type");
break;
}
// Count total number of reachable tiles, for explored %

View File

@@ -284,6 +284,8 @@ void LoadMissions(CArray *missions, json_t *missionsNode, int version)
&m.u.Classic.Rooms,
json_find_first_label(child, "Rooms")->child);
LoadInt(&m.u.Classic.Squares, child, "Squares");
m.u.Classic.ExitEnabled = true;
LoadBool(&m.u.Classic.ExitEnabled, child, "ExitEnabled");
LoadClassicDoors(&m, child, "Doors");
LoadClassicPillars(&m, child, "Pillars");
break;
@@ -306,6 +308,8 @@ void LoadMissions(CArray *missions, json_t *missionsNode, int version)
LoadRooms(&m.u.Cave.Rooms, roomsNode->child);
}
LoadInt(&m.u.Cave.Squares, child, "Squares");
m.u.Cave.ExitEnabled = true;
LoadBool(&m.u.Cave.ExitEnabled, child, "ExitEnabled");
if (version < 14)
{
m.u.Cave.DoorsEnabled = true;

View File

@@ -498,14 +498,13 @@ bool MissionAllObjectivesComplete(const struct MissionOptions *mo)
return true;
}
static int AllSurvivingPlayersInSameExit(void);
static bool MoreRescuesNeeded(const struct MissionOptions *mo, const int exit);
int IsMissionComplete(const struct MissionOptions *mo)
bool IsMissionComplete(const struct MissionOptions *mo)
{
if (!CanCompleteMission(mo))
{
return -1;
return false;
}
// Check if dogfight is complete
@@ -520,22 +519,17 @@ int IsMissionComplete(const struct MissionOptions *mo)
CA_FOREACH_END()
if (numPlayersWithLives <= 1)
{
return 0;
return true;
}
}
const int exit = AllSurvivingPlayersInSameExit();
if (exit == -1)
{
return -1;
}
if (MoreRescuesNeeded(mo, exit))
{
return -1;
return false;
}
return exit;
return true;
}
bool MissionNeedsMoreRescuesInExit(const struct MissionOptions *mo)
@@ -544,7 +538,7 @@ bool MissionNeedsMoreRescuesInExit(const struct MissionOptions *mo)
return CanCompleteMission(mo) && exit != -1 && MoreRescuesNeeded(mo, exit);
}
static int AllSurvivingPlayersInSameExit(void)
int AllSurvivingPlayersInSameExit(void)
{
// Check that all surviving players are in same exit, and return that exit
// Return -1 otherwise

View File

@@ -136,6 +136,7 @@ typedef struct
int CorridorWidth;
RoomParams Rooms;
int Squares;
bool ExitEnabled;
struct
{
bool Enabled;
@@ -162,6 +163,7 @@ typedef struct
int CorridorWidth;
RoomParams Rooms;
int Squares;
bool ExitEnabled;
bool DoorsEnabled;
} Cave;
} u;
@@ -218,8 +220,9 @@ bool MissionCanBegin(void);
void MissionBegin(struct MissionOptions *m, const NGameBegin gb);
bool CanCompleteMission(const struct MissionOptions *options);
bool MissionAllObjectivesComplete(const struct MissionOptions *mo);
// Returns exit index or -1 if incomplete
int IsMissionComplete(const struct MissionOptions *options);
bool IsMissionComplete(const struct MissionOptions *mo);
// Returns exit index or -1 if not all players in same exit
int AllSurvivingPlayersInSameExit(void);
bool MissionNeedsMoreRescuesInExit(const struct MissionOptions *mo);
bool MissionHasRequiredObjectives(const struct MissionOptions *mo);
void MissionDone(struct MissionOptions *mo, const NMissionEnd end);

View File

@@ -293,6 +293,7 @@ static void AddMission(
m.u.Classic.Rooms = RandomRoomParams();
m.u.Classic.Squares = GenerateQuickPlayParam(
ConfigGetEnum(&gConfig, "QuickPlay.SquareCount"), 0, 1, 3, 6);
m.u.Classic.ExitEnabled = rand() % 2;
m.u.Classic.Doors.Enabled = rand() % 2;
m.u.Classic.Doors.Min = 1;
m.u.Classic.Doors.Max = 6;
@@ -311,6 +312,7 @@ static void AddMission(
m.u.Cave.Rooms = RandomRoomParams();
m.u.Cave.Squares = GenerateQuickPlayParam(
ConfigGetEnum(&gConfig, "QuickPlay.SquareCount"), 0, 1, 3, 6);
m.u.Cave.ExitEnabled = rand() % 2;
m.u.Cave.DoorsEnabled = rand() % 2;
break;
default:

View File

@@ -312,6 +312,19 @@ static const char *MissionGetSquareCountStr(UIObject *o, void *data)
sprintf(s, "Sqr: %d", CampaignGetCurrentMission(co)->u.Classic.Squares);
return s;
}
static void MissionDrawExitEnabled(
UIObject *o, GraphicsDevice *g, struct vec2i pos, void *data)
{
UNUSED(o);
UNUSED(g);
Campaign *co = data;
if (!CampaignGetCurrentMission(co))
return;
DisplayFlag(
svec2i_add(pos, o->Pos), "Exit",
CampaignGetCurrentMission(co)->u.Classic.ExitEnabled,
UIObjectIsHighlighted(o));
}
static void MissionDrawDoorEnabled(
UIObject *o, GraphicsDevice *g, struct vec2i pos, void *data)
{
@@ -811,6 +824,14 @@ static EditorResult MissionChangeSquareCount(void *data, int d)
CLAMP(CampaignGetCurrentMission(co)->u.Classic.Squares + d, 0, 100);
return EDITOR_RESULT_CHANGED;
}
static EditorResult MissionChangeExitEnabled(void *data, int d)
{
UNUSED(d);
Campaign *co = data;
CampaignGetCurrentMission(co)->u.Classic.ExitEnabled =
!CampaignGetCurrentMission(co)->u.Classic.ExitEnabled;
return EDITOR_RESULT_CHANGED;
}
static EditorResult MissionChangeDoorEnabled(void *data, int d)
{
UNUSED(d);
@@ -1504,6 +1525,13 @@ static UIObject *CreateClassicMapObjs(struct vec2i pos, Campaign *co)
o2->ChangeFunc = MissionChangeSquareCount;
o2->Pos = pos;
UIObjectAddChild(c, o2);
pos.x += o2->Size.x;
o2 = UIObjectCreate(UITYPE_CUSTOM, 0, pos, o->Size);
o2->u.CustomDrawFunc = MissionDrawExitEnabled;
o2->Data = co;
o2->ChangeFunc = MissionChangeExitEnabled;
o2->Pos = pos;
UIObjectAddChild(c, o2);
pos.x = x;
pos.y += th;

View File

@@ -32,10 +32,8 @@
#include "editor_ui_common.h"
MISSION_CHECK_TYPE_FUNC(MAPTYPE_CAVE)
static const char *MissionGetFillPercentStr(UIObject *o, void *data);
static EditorResult MissionChangeFillPercent(void *data, int d);
static const char *MissionGetRepeatStr(UIObject *o, void *data);
@@ -63,21 +61,23 @@ static const char *MissionGetRoomWallPadStr(UIObject *o, void *data);
static EditorResult MissionChangeRoomWallPad(void *data, int d);
static const char *MissionGetSquareCountStr(UIObject *o, void *data);
static EditorResult MissionChangeSquareCount(void *data, int d);
static void MissionDrawExitEnabled(
UIObject *o, GraphicsDevice *g, struct vec2i pos, void *data);
static void MissionDrawDoorEnabled(
UIObject *o, GraphicsDevice *g, struct vec2i pos, void *data);
static EditorResult MissionChangeExitEnabled(void *data, int d);
static EditorResult MissionChangeDoorEnabled(void *data, int d);
UIObject *CreateCaveMapObjs(struct vec2i pos, Campaign *co)
{
const int th = FontH();
UIObject *c = UIObjectCreate(UITYPE_NONE, 0, svec2i_zero(), svec2i_zero());
UIObject *o = UIObjectCreate(
UITYPE_LABEL, 0, svec2i_zero(), svec2i(50, th));
UIObject *o =
UIObjectCreate(UITYPE_LABEL, 0, svec2i_zero(), svec2i(50, th));
const int x = pos.x;
// Check whether the map type matches, and set visibility
c->CheckVisible = MissionCheckTypeFunc;
c->Data = co;
UIObject *o2 = CreateCampaignSeedObj(pos, co);
UIObjectAddChild(c, o2);
@@ -184,6 +184,15 @@ UIObject *CreateCaveMapObjs(struct vec2i pos, Campaign *co)
UIObjectAddChild(c, o2);
pos.x += o2->Size.x;
o2 = UIObjectCreate(UITYPE_CUSTOM, 0, pos, o->Size);
o2->u.CustomDrawFunc = MissionDrawExitEnabled;
o2->Data = co;
o2->ChangeFunc = MissionChangeExitEnabled;
o2->Pos = pos;
UIObjectAddChild(c, o2);
pos.x = x;
pos.y += th;
o2 = UIObjectCreate(UITYPE_CUSTOM, 0, pos, o->Size);
o2->u.CustomDrawFunc = MissionDrawDoorEnabled;
o2->Data = co;
o2->ChangeFunc = MissionChangeDoorEnabled;
@@ -198,7 +207,8 @@ static const char *MissionGetFillPercentStr(UIObject *o, void *data)
UNUSED(o);
Campaign *co = data;
const Mission *m = CampaignGetCurrentMission(co);
if (m == NULL) return NULL;
if (m == NULL)
return NULL;
static char s[128];
sprintf(s, "Fill: %d%%", m->u.Cave.FillPercent);
return s;
@@ -219,7 +229,8 @@ static const char *MissionGetRepeatStr(UIObject *o, void *data)
UNUSED(o);
Campaign *co = data;
const Mission *m = CampaignGetCurrentMission(co);
if (m == NULL) return NULL;
if (m == NULL)
return NULL;
static char s[128];
sprintf(s, "Repeat: %d", m->u.Cave.Repeat);
return s;
@@ -236,7 +247,8 @@ static const char *MissionGetR1Str(UIObject *o, void *data)
UNUSED(o);
Campaign *co = data;
const Mission *m = CampaignGetCurrentMission(co);
if (m == NULL) return NULL;
if (m == NULL)
return NULL;
static char s[128];
sprintf(s, "R1: %d", m->u.Cave.R1);
return s;
@@ -253,7 +265,8 @@ static const char *MissionGetR2Str(UIObject *o, void *data)
UNUSED(o);
Campaign *co = data;
const Mission *m = CampaignGetCurrentMission(co);
if (m == NULL) return NULL;
if (m == NULL)
return NULL;
static char s[128];
sprintf(s, "R2: %d", m->u.Cave.R2);
return s;
@@ -270,7 +283,8 @@ static const char *MissionGetCorridorWidthStr(UIObject *o, void *data)
UNUSED(o);
Campaign *co = data;
const Mission *m = CampaignGetCurrentMission(co);
if (m == NULL) return NULL;
if (m == NULL)
return NULL;
static char s[128];
sprintf(s, "CorridorWidth: %d", m->u.Cave.CorridorWidth);
return s;
@@ -287,9 +301,9 @@ static const char *MissionGetRoomCountStr(UIObject *o, void *data)
static char s[128];
UNUSED(o);
Campaign *co = data;
if (!CampaignGetCurrentMission(co)) return NULL;
sprintf(
s, "Rooms: %d", CampaignGetCurrentMission(co)->u.Cave.Rooms.Count);
if (!CampaignGetCurrentMission(co))
return NULL;
sprintf(s, "Rooms: %d", CampaignGetCurrentMission(co)->u.Cave.Rooms.Count);
return s;
}
static const char *MissionGetRoomMinStr(UIObject *o, void *data)
@@ -297,7 +311,8 @@ static const char *MissionGetRoomMinStr(UIObject *o, void *data)
static char s[128];
UNUSED(o);
Campaign *co = data;
if (!CampaignGetCurrentMission(co)) return NULL;
if (!CampaignGetCurrentMission(co))
return NULL;
sprintf(s, "RoomMin: %d", CampaignGetCurrentMission(co)->u.Cave.Rooms.Min);
return s;
}
@@ -306,7 +321,8 @@ static const char *MissionGetRoomMaxStr(UIObject *o, void *data)
static char s[128];
UNUSED(o);
Campaign *co = data;
if (!CampaignGetCurrentMission(co)) return NULL;
if (!CampaignGetCurrentMission(co))
return NULL;
sprintf(s, "RoomMax: %d", CampaignGetCurrentMission(co)->u.Cave.Rooms.Max);
return s;
}
@@ -322,8 +338,8 @@ static EditorResult MissionChangeRoomMin(void *data, int d)
Campaign *co = data;
CampaignGetCurrentMission(co)->u.Cave.Rooms.Min =
CLAMP(CampaignGetCurrentMission(co)->u.Cave.Rooms.Min + d, 5, 50);
CampaignGetCurrentMission(co)->u.Cave.Rooms.Max = MAX(
CampaignGetCurrentMission(co)->u.Cave.Rooms.Min,
CampaignGetCurrentMission(co)->u.Cave.Rooms.Max =
MAX(CampaignGetCurrentMission(co)->u.Cave.Rooms.Min,
CampaignGetCurrentMission(co)->u.Cave.Rooms.Max);
return EDITOR_RESULT_CHANGED;
}
@@ -332,8 +348,8 @@ static EditorResult MissionChangeRoomMax(void *data, int d)
Campaign *co = data;
CampaignGetCurrentMission(co)->u.Cave.Rooms.Max =
CLAMP(CampaignGetCurrentMission(co)->u.Cave.Rooms.Max + d, 5, 50);
CampaignGetCurrentMission(co)->u.Cave.Rooms.Min = MIN(
CampaignGetCurrentMission(co)->u.Cave.Rooms.Min,
CampaignGetCurrentMission(co)->u.Cave.Rooms.Min =
MIN(CampaignGetCurrentMission(co)->u.Cave.Rooms.Min,
CampaignGetCurrentMission(co)->u.Cave.Rooms.Max);
return EDITOR_RESULT_CHANGED;
}
@@ -344,7 +360,8 @@ static void MissionDrawRoomsOverlap(
UNUSED(g);
UNUSED(pos);
Campaign *co = data;
if (!CampaignGetCurrentMission(co)) return;
if (!CampaignGetCurrentMission(co))
return;
DisplayFlag(
svec2i_add(pos, o->Pos), "Room overlap",
CampaignGetCurrentMission(co)->u.Cave.Rooms.Overlap,
@@ -363,8 +380,10 @@ static const char *MissionGetRoomWallCountStr(UIObject *o, void *data)
static char s[128];
UNUSED(o);
Campaign *co = data;
if (!CampaignGetCurrentMission(co)) return NULL;
sprintf(s, "RoomWalls: %d", CampaignGetCurrentMission(co)->u.Cave.Rooms.Walls);
if (!CampaignGetCurrentMission(co))
return NULL;
sprintf(
s, "RoomWalls: %d", CampaignGetCurrentMission(co)->u.Cave.Rooms.Walls);
return s;
}
static const char *MissionGetRoomWallLenStr(UIObject *o, void *data)
@@ -372,8 +391,11 @@ static const char *MissionGetRoomWallLenStr(UIObject *o, void *data)
static char s[128];
UNUSED(o);
Campaign *co = data;
if (!CampaignGetCurrentMission(co)) return NULL;
sprintf(s, "RoomWallLen: %d", CampaignGetCurrentMission(co)->u.Cave.Rooms.WallLength);
if (!CampaignGetCurrentMission(co))
return NULL;
sprintf(
s, "RoomWallLen: %d",
CampaignGetCurrentMission(co)->u.Cave.Rooms.WallLength);
return s;
}
static const char *MissionGetRoomWallPadStr(UIObject *o, void *data)
@@ -381,8 +403,11 @@ static const char *MissionGetRoomWallPadStr(UIObject *o, void *data)
static char s[128];
UNUSED(o);
Campaign *co = data;
if (!CampaignGetCurrentMission(co)) return NULL;
sprintf(s, "RoomWallPad: %d", CampaignGetCurrentMission(co)->u.Cave.Rooms.WallPad);
if (!CampaignGetCurrentMission(co))
return NULL;
sprintf(
s, "RoomWallPad: %d",
CampaignGetCurrentMission(co)->u.Cave.Rooms.WallPad);
return s;
}
static EditorResult MissionChangeRoomWallCount(void *data, int d)
@@ -411,7 +436,8 @@ static const char *MissionGetSquareCountStr(UIObject *o, void *data)
static char s[128];
UNUSED(o);
Campaign *co = data;
if (!CampaignGetCurrentMission(co)) return NULL;
if (!CampaignGetCurrentMission(co))
return NULL;
sprintf(s, "Sqr: %d", CampaignGetCurrentMission(co)->u.Cave.Squares);
return s;
}
@@ -422,18 +448,40 @@ static EditorResult MissionChangeSquareCount(void *data, int d)
CLAMP(CampaignGetCurrentMission(co)->u.Cave.Squares + d, 0, 100);
return EDITOR_RESULT_CHANGED;
}
static void MissionDrawExitEnabled(
UIObject *o, GraphicsDevice *g, struct vec2i pos, void *data)
{
UNUSED(o);
UNUSED(g);
Campaign *co = data;
if (!CampaignGetCurrentMission(co))
return;
DisplayFlag(
svec2i_add(pos, o->Pos), "Exit",
CampaignGetCurrentMission(co)->u.Cave.ExitEnabled,
UIObjectIsHighlighted(o));
}
static void MissionDrawDoorEnabled(
UIObject *o, GraphicsDevice *g, struct vec2i pos, void *data)
{
UNUSED(o);
UNUSED(g);
Campaign *co = data;
if (!CampaignGetCurrentMission(co)) return;
if (!CampaignGetCurrentMission(co))
return;
DisplayFlag(
svec2i_add(pos, o->Pos), "Doors",
CampaignGetCurrentMission(co)->u.Cave.DoorsEnabled,
UIObjectIsHighlighted(o));
}
static EditorResult MissionChangeExitEnabled(void *data, int d)
{
UNUSED(d);
Campaign *co = data;
Mission *m = CampaignGetCurrentMission(co);
m->u.Cave.ExitEnabled = !m->u.Cave.ExitEnabled;
return EDITOR_RESULT_CHANGED;
}
static EditorResult MissionChangeDoorEnabled(void *data, int d)
{
UNUSED(d);

View File

@@ -85,7 +85,8 @@ static bool Draw(SDL_Window *win, struct nk_context *ctx, void *data)
bool result = true;
ExitBrushData *eData = data;
Exit *selectedExit = NULL;
if (*eData->exitIdx < (int)eData->m->u.Static.Exits.size)
if (*eData->exitIdx > 0 &&
*eData->exitIdx < (int)eData->m->u.Static.Exits.size)
{
selectedExit = CArrayGet(&eData->m->u.Static.Exits, *eData->exitIdx);
}
@@ -168,8 +169,8 @@ static void DrawPropsSidebar(
int mission = selectedExit->Mission;
mission++;
nk_property_int(
ctx, "Mission", 1, &mission,
(int)eData->co->Setting.Missions.size + 1, 1, 1.f);
ctx, "Mission", 1, &mission, (int)eData->co->Setting.Missions.size + 1,
1, 1.f);
selectedExit->Mission = mission - 1;
if (nk_input_is_mouse_hovering_rect(&ctx->input, bounds))
{

View File

@@ -719,16 +719,17 @@ static void CheckMissionCompletion(const struct MissionOptions *mo)
}
CA_FOREACH_END()
const int exitIndex =
GetNumPlayers(PLAYER_ALIVE_OR_DYING, false, false) > 0
? IsMissionComplete(mo)
: -1;
if (mo->state == MISSION_STATE_PLAY && exitIndex >= 0)
const bool complete =
GetNumPlayers(PLAYER_ALIVE_OR_DYING, false, false) > 0 &&
IsMissionComplete(mo);
const int exitIndex = AllSurvivingPlayersInSameExit();
const bool canExit = complete && (!MapHasExits(&gMap) || exitIndex >= 0);
if (mo->state == MISSION_STATE_PLAY && canExit)
{
GameEvent e = GameEventNew(GAME_EVENT_MISSION_PICKUP);
GameEventsEnqueue(&gGameEvents, e);
}
if (mo->state == MISSION_STATE_PICKUP && exitIndex == -1)
if (mo->state == MISSION_STATE_PICKUP && !canExit)
{
GameEvent e = GameEventNew(GAME_EVENT_MISSION_INCOMPLETE);
GameEventsEnqueue(&gGameEvents, e);
@@ -737,8 +738,15 @@ static void CheckMissionCompletion(const struct MissionOptions *mo)
mo->pickupTime + PICKUP_LIMIT <= mo->time)
{
GameEvent e = GameEventNew(GAME_EVENT_MISSION_END);
const Exit *exit = CArrayGet(&gMap.exits, exitIndex);
e.u.MissionEnd.Mission = exit->Mission;
if (exitIndex >= 0)
{
const Exit *exit = CArrayGet(&gMap.exits, exitIndex);
e.u.MissionEnd.Mission = exit->Mission;
}
else
{
e.u.MissionEnd.Mission = mo->index + 1;
}
GameEventsEnqueue(&gGameEvents, e);
}