Export built-in campaigns (#336)

Fix mkdir_deep
Fix editor not making new folders and
unable to save
Fix bug loading large JSON files
This commit is contained in:
Cong
2015-08-16 23:47:48 +10:00
parent 811567bc6e
commit fcbd977c30
30 changed files with 4146 additions and 1421 deletions

View File

@@ -0,0 +1,7 @@
{
"Version": 5,
"Title": "Cubicle wars",
"Author": "",
"Description": "",
"Missions": 1
}

View File

@@ -0,0 +1,3 @@
{
"Characters": []
}

View File

@@ -0,0 +1,91 @@
{
"Missions": [{
"Title": "",
"Description": "",
"Type": "Classic",
"Width": 64,
"Height": 64,
"WallStyle": 0,
"FloorStyle": 3,
"RoomStyle": 8,
"ExitStyle": 0,
"KeyStyle": 0,
"DoorStyle": 0,
"Objectives": [],
"Enemies": [],
"SpecialChars": [],
"MapObjectDensities": [{
"MapObject": "barrel_blue",
"Density": 10
},
{
"MapObject": "box",
"Density": 10
},
{
"MapObject": "box2",
"Density": 10
},
{
"MapObject": "cabinet",
"Density": 10
},
{
"MapObject": "plant",
"Density": 10
},
{
"MapObject": "table",
"Density": 10
},
{
"MapObject": "chair",
"Density": 10
},
{
"MapObject": "rod",
"Density": 10
}],
"EnemyDensity": 0,
"Weapons": ["Knife",
"Machine gun",
"Grenades",
"Flamer",
"Shotgun",
"Powergun",
"Shrapnel bombs",
"Molotovs",
"Sniper rifle",
"Prox. mine",
"Dynamite"],
"Song": "",
"WallMask": "004800",
"FloorMask": "480000",
"RoomMask": "840084",
"AltMask": "007000",
"Walls": 50,
"WallLength": 50,
"CorridorWidth": 1,
"Rooms": {
"Count": 10,
"Min": 6,
"Max": 10,
"Edge": false,
"Overlap": false,
"Walls": 0,
"WallLength": 0,
"WallPad": 0
},
"Squares": 3,
"Doors": {
"Enabled": true,
"Min": 1,
"Max": 1
},
"Pillars": {
"Count": 0,
"Min": 0,
"Max": 0
}
}]
}

View File

@@ -0,0 +1,7 @@
{
"Version": 5,
"Title": "Dogfight in the dungeon",
"Author": "",
"Description": "",
"Missions": 1
}

View File

@@ -0,0 +1,3 @@
{
"Characters": []
}

View File

@@ -0,0 +1,91 @@
{
"Missions": [{
"Title": "",
"Description": "",
"Type": "Classic",
"Width": 32,
"Height": 32,
"WallStyle": 4,
"FloorStyle": 6,
"RoomStyle": 7,
"ExitStyle": 0,
"KeyStyle": 1,
"DoorStyle": 1,
"Objectives": [],
"Enemies": [],
"SpecialChars": [],
"MapObjectDensities": [{
"MapObject": "barrel_skull",
"Density": 10
},
{
"MapObject": "barrel_wood",
"Density": 10
},
{
"MapObject": "box_gray",
"Density": 10
},
{
"MapObject": "box_green",
"Density": 10
},
{
"MapObject": "statue_ogre",
"Density": 10
},
{
"MapObject": "table_wood_candle",
"Density": 10
},
{
"MapObject": "table_wood",
"Density": 10
},
{
"MapObject": "tree_dead",
"Density": 10
}],
"EnemyDensity": 0,
"Weapons": ["Knife",
"Machine gun",
"Grenades",
"Flamer",
"Shotgun",
"Powergun",
"Shrapnel bombs",
"Molotovs",
"Sniper rifle",
"Prox. mine",
"Dynamite"],
"Song": "",
"WallMask": "484848",
"FloorMask": "707070",
"RoomMask": "703800",
"AltMask": "700000",
"Walls": 50,
"WallLength": 25,
"CorridorWidth": 1,
"Rooms": {
"Count": 4,
"Min": 6,
"Max": 10,
"Edge": false,
"Overlap": false,
"Walls": 0,
"WallLength": 0,
"WallPad": 0
},
"Squares": 2,
"Doors": {
"Enabled": true,
"Min": 1,
"Max": 1
},
"Pillars": {
"Count": 0,
"Min": 0,
"Max": 0
}
}]
}

View File

@@ -0,0 +1,7 @@
{
"Version": 5,
"Title": "Bug-Eyed Monsters",
"Author": "Ronny Wester",
"Description": "These irrational foes pop up now and again. Unpredictable and vicious, their primary goal seems to be to make a nuisance of themselves rather than actually attaining any specific goals.",
"Missions": 9
}

View File

@@ -0,0 +1,466 @@
{
"Characters": [{
"face": 4,
"skin": 1,
"arm": 3,
"body": 3,
"leg": 3,
"hair": 13,
"speed": 256,
"Gun": "Powergun",
"maxHealth": 40,
"flags": 33685504,
"probabilityToMove": 50,
"probabilityToTrack": 0,
"probabilityToShoot": 15,
"actionDelay": 15
},
{
"face": 4,
"skin": 11,
"arm": 3,
"body": 3,
"leg": 3,
"hair": 13,
"speed": 256,
"Gun": "Machine gun",
"maxHealth": 40,
"flags": 33685504,
"probabilityToMove": 50,
"probabilityToTrack": 0,
"probabilityToShoot": 15,
"actionDelay": 15
},
{
"face": 4,
"skin": 10,
"arm": 3,
"body": 3,
"leg": 3,
"hair": 13,
"speed": 256,
"Gun": "Flamer",
"maxHealth": 40,
"flags": 33685504,
"probabilityToMove": 50,
"probabilityToTrack": 0,
"probabilityToShoot": 15,
"actionDelay": 15
},
{
"face": 6,
"skin": 1,
"arm": 7,
"body": 7,
"leg": 9,
"hair": 13,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6356992,
"probabilityToMove": 100,
"probabilityToTrack": 50,
"probabilityToShoot": 0,
"actionDelay": 15
},
{
"face": 6,
"skin": 11,
"arm": 7,
"body": 7,
"leg": 9,
"hair": 12,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6356992,
"probabilityToMove": 100,
"probabilityToTrack": 50,
"probabilityToShoot": 0,
"actionDelay": 15
},
{
"face": 3,
"skin": 10,
"arm": 7,
"body": 8,
"leg": 9,
"hair": 8,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6356992,
"probabilityToMove": 100,
"probabilityToTrack": 50,
"probabilityToShoot": 0,
"actionDelay": 15
},
{
"face": 12,
"skin": 1,
"arm": 7,
"body": 10,
"leg": 9,
"hair": 9,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6356992,
"probabilityToMove": 100,
"probabilityToTrack": 50,
"probabilityToShoot": 0,
"actionDelay": 15
},
{
"face": 16,
"skin": 1,
"arm": 9,
"body": 6,
"leg": 4,
"hair": 6,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6356992,
"probabilityToMove": 100,
"probabilityToTrack": 50,
"probabilityToShoot": 0,
"actionDelay": 15
},
{
"face": 6,
"skin": 1,
"arm": 7,
"body": 10,
"leg": 9,
"hair": 6,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6356992,
"probabilityToMove": 100,
"probabilityToTrack": 50,
"probabilityToShoot": 0,
"actionDelay": 15
},
{
"face": 6,
"skin": 1,
"arm": 7,
"body": 0,
"leg": 9,
"hair": 10,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6356992,
"probabilityToMove": 100,
"probabilityToTrack": 50,
"probabilityToShoot": 0,
"actionDelay": 15
},
{
"face": 5,
"skin": 5,
"arm": 5,
"body": 0,
"leg": 5,
"hair": 12,
"speed": 256,
"Gun": "Browny gun",
"maxHealth": 40,
"flags": 1024,
"probabilityToMove": 35,
"probabilityToTrack": 25,
"probabilityToShoot": 12,
"actionDelay": 15
},
{
"face": 5,
"skin": 6,
"arm": 6,
"body": 0,
"leg": 6,
"hair": 12,
"speed": 256,
"Gun": "Browny gun",
"maxHealth": 40,
"flags": 0,
"probabilityToMove": 50,
"probabilityToTrack": 40,
"probabilityToShoot": 27,
"actionDelay": 15
},
{
"face": 5,
"skin": 3,
"arm": 3,
"body": 0,
"leg": 3,
"hair": 12,
"speed": 256,
"Gun": "Browny gun",
"maxHealth": 40,
"flags": 0,
"probabilityToMove": 85,
"probabilityToTrack": 70,
"probabilityToShoot": 27,
"actionDelay": 15
},
{
"face": 5,
"skin": 5,
"arm": 5,
"body": 0,
"leg": 5,
"hair": 12,
"speed": 256,
"Gun": "Petrify gun",
"maxHealth": 40,
"flags": 1024,
"probabilityToMove": 20,
"probabilityToTrack": 55,
"probabilityToShoot": 32,
"actionDelay": 15
},
{
"face": 5,
"skin": 4,
"arm": 4,
"body": 0,
"leg": 4,
"hair": 12,
"speed": 256,
"Gun": "Chemo gun",
"maxHealth": 40,
"flags": 1024,
"probabilityToMove": 35,
"probabilityToTrack": 25,
"probabilityToShoot": 12,
"actionDelay": 15
},
{
"face": 13,
"skin": 8,
"arm": 8,
"body": 6,
"leg": 8,
"hair": 12,
"speed": 256,
"Gun": "Powergun",
"maxHealth": 80,
"flags": 8389632,
"probabilityToMove": 50,
"probabilityToTrack": 50,
"probabilityToShoot": 12,
"actionDelay": 10
},
{
"face": 13,
"skin": 10,
"arm": 10,
"body": 2,
"leg": 10,
"hair": 12,
"speed": 384,
"Gun": "Knife",
"maxHealth": 40,
"flags": 1024,
"probabilityToMove": 100,
"probabilityToTrack": 80,
"probabilityToShoot": 0,
"actionDelay": 10
},
{
"face": 5,
"skin": 5,
"arm": 5,
"body": 0,
"leg": 5,
"hair": 12,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 40,
"flags": 1024,
"probabilityToMove": 35,
"probabilityToTrack": 25,
"probabilityToShoot": 5,
"actionDelay": 15
},
{
"face": 5,
"skin": 4,
"arm": 4,
"body": 0,
"leg": 4,
"hair": 12,
"speed": 256,
"Gun": "Chemo bombs",
"maxHealth": 40,
"flags": 1024,
"probabilityToMove": 35,
"probabilityToTrack": 25,
"probabilityToShoot": 10,
"actionDelay": 15
},
{
"face": 5,
"skin": 7,
"arm": 7,
"body": 0,
"leg": 7,
"hair": 12,
"speed": 256,
"Gun": "Knife",
"maxHealth": 40,
"flags": 0,
"probabilityToMove": 55,
"probabilityToTrack": 25,
"probabilityToShoot": 0,
"actionDelay": 15
},
{
"face": 5,
"skin": 6,
"arm": 6,
"body": 0,
"leg": 6,
"hair": 12,
"speed": 256,
"Gun": "Flamer",
"maxHealth": 40,
"flags": 0,
"probabilityToMove": 50,
"probabilityToTrack": 40,
"probabilityToShoot": 27,
"actionDelay": 15
},
{
"face": 5,
"skin": 8,
"arm": 8,
"body": 8,
"leg": 8,
"hair": 12,
"speed": 256,
"Gun": "Browny gun",
"maxHealth": 40,
"flags": 2048,
"probabilityToMove": 35,
"probabilityToTrack": 25,
"probabilityToShoot": 12,
"actionDelay": 15
},
{
"face": 5,
"skin": 8,
"arm": 8,
"body": 8,
"leg": 8,
"hair": 12,
"speed": 256,
"Gun": "Knife",
"maxHealth": 40,
"flags": 2048,
"probabilityToMove": 60,
"probabilityToTrack": 25,
"probabilityToShoot": 0,
"actionDelay": 15
},
{
"face": 9,
"skin": 11,
"arm": 7,
"body": 7,
"leg": 9,
"hair": 12,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6356992,
"probabilityToMove": 100,
"probabilityToTrack": 5,
"probabilityToShoot": 0,
"actionDelay": 20
},
{
"face": 9,
"skin": 10,
"arm": 7,
"body": 7,
"leg": 9,
"hair": 8,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6356992,
"probabilityToMove": 100,
"probabilityToTrack": 5,
"probabilityToShoot": 0,
"actionDelay": 20
},
{
"face": 11,
"skin": 1,
"arm": 7,
"body": 7,
"leg": 9,
"hair": 7,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6356992,
"probabilityToMove": 100,
"probabilityToTrack": 5,
"probabilityToShoot": 0,
"actionDelay": 20
},
{
"face": 12,
"skin": 1,
"arm": 7,
"body": 7,
"leg": 9,
"hair": 6,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6356992,
"probabilityToMove": 100,
"probabilityToTrack": 5,
"probabilityToShoot": 0,
"actionDelay": 20
},
{
"face": 16,
"skin": 10,
"arm": 7,
"body": 7,
"leg": 9,
"hair": 9,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6356992,
"probabilityToMove": 100,
"probabilityToTrack": 5,
"probabilityToShoot": 0,
"actionDelay": 20
},
{
"face": 13,
"skin": 13,
"arm": 13,
"body": 13,
"leg": 13,
"hair": 12,
"speed": 384,
"Gun": "Molotovs",
"maxHealth": 500,
"flags": 41944576,
"probabilityToMove": 80,
"probabilityToTrack": 80,
"probabilityToShoot": 10,
"actionDelay": 10
}]
}

View File

@@ -0,0 +1,961 @@
{
"Missions": [{
"Title": "They are destroying our base!",
"Description": "All of a sudden aliens started popping out of nowhere all over the place. Fortunately they seem quite disorganized or we would surely have lost the base by now. We must eliminate this attacking force, though...",
"Type": "Classic",
"Width": 48,
"Height": 48,
"WallStyle": 5,
"FloorStyle": 1,
"RoomStyle": 3,
"ExitStyle": 0,
"KeyStyle": 0,
"DoorStyle": 0,
"Objectives": [{
"Description": "Defeat the attack",
"Type": "Kill",
"Index": 0,
"Count": 20,
"Required": 15,
"Flags": 0
}],
"Enemies": [0,
1,
2],
"SpecialChars": [10,
13,
17],
"MapObjectDensities": [{
"MapObject": "cabinet",
"Density": 40
},
{
"MapObject": "chair",
"Density": 10
},
{
"MapObject": "rod",
"Density": 5
},
{
"MapObject": "bookshelf",
"Density": 20
},
{
"MapObject": "table_wood",
"Density": 30
},
{
"MapObject": "safe",
"Density": 5
},
{
"MapObject": "terminal",
"Density": 20
},
{
"MapObject": "barrel",
"Density": 10
},
{
"MapObject": "rocket",
"Density": 5
}],
"EnemyDensity": 10,
"Weapons": ["Knife",
"Machine gun",
"Flamer",
"Shotgun",
"Powergun",
"Sniper rifle"],
"Song": "",
"WallMask": "5c5c84",
"FloorMask": "848484",
"RoomMask": "700070",
"AltMask": "840000",
"Walls": 20,
"WallLength": 20,
"CorridorWidth": 1,
"Rooms": {
"Count": 10,
"Min": 6,
"Max": 10,
"Edge": false,
"Overlap": false,
"Walls": 0,
"WallLength": 0,
"WallPad": 0
},
"Squares": 3,
"Doors": {
"Enabled": true,
"Min": 1,
"Max": 1
},
"Pillars": {
"Count": 0,
"Min": 0,
"Max": 0
}
},
{
"Title": "What are they up to now?",
"Description": "Now the goggle-eyes are rampaging through a suburb! They are killing innocent civilians for no reason...we have got to stop them!",
"Type": "Classic",
"Width": 48,
"Height": 48,
"WallStyle": 0,
"FloorStyle": 2,
"RoomStyle": 10,
"ExitStyle": 0,
"KeyStyle": 0,
"DoorStyle": 0,
"Objectives": [{
"Description": "Eliminate the monsters",
"Type": "Kill",
"Index": 0,
"Count": 20,
"Required": 20,
"Flags": 0
}],
"Enemies": [3,
4,
5,
6,
7,
8,
9],
"SpecialChars": [10,
11,
12,
13,
17,
19],
"MapObjectDensities": [{
"MapObject": "tree",
"Density": 50
},
{
"MapObject": "table_clothed",
"Density": 30
},
{
"MapObject": "bookshelf",
"Density": 40
},
{
"MapObject": "box_wood",
"Density": 5
},
{
"MapObject": "table_wood",
"Density": 20
},
{
"MapObject": "table_wood_candle",
"Density": 20
},
{
"MapObject": "barrel_wood",
"Density": 10
},
{
"MapObject": "plant",
"Density": 50
},
{
"MapObject": "chair",
"Density": 10
}],
"EnemyDensity": 30,
"Weapons": ["Knife",
"Machine gun",
"Flamer",
"Shotgun",
"Powergun",
"Sniper rifle"],
"Song": "",
"WallMask": "008484",
"FloorMask": "007000",
"RoomMask": "94802c",
"AltMask": "840000",
"Walls": 0,
"WallLength": 0,
"CorridorWidth": 1,
"Rooms": {
"Count": 25,
"Min": 6,
"Max": 10,
"Edge": false,
"Overlap": false,
"Walls": 0,
"WallLength": 0,
"WallPad": 0
},
"Squares": 2,
"Doors": {
"Enabled": true,
"Min": 1,
"Max": 1
},
"Pillars": {
"Count": 0,
"Min": 0,
"Max": 0
}
},
{
"Title": "Rescue threatened scientists",
"Description": "There may be some fiendish plot behind this madness after all. Our foes are attacking a little known laboratory doing research on our big-eyed opponents. The other attacks may have been diversions. Still, you never know with these critters. Enough already, we must save the staff...",
"Type": "Classic",
"Width": 64,
"Height": 32,
"WallStyle": 5,
"FloorStyle": 5,
"RoomStyle": 9,
"ExitStyle": 0,
"KeyStyle": 0,
"DoorStyle": 0,
"Objectives": [{
"Description": "Eradicate the attacking force",
"Type": "Kill",
"Index": 0,
"Count": 25,
"Required": 25,
"Flags": 0
}],
"Enemies": [27,
26,
25,
24,
23],
"SpecialChars": [20,
12,
18,
17,
14,
13],
"MapObjectDensities": [{
"MapObject": "barrel_blue",
"Density": 10
},
{
"MapObject": "box",
"Density": 10
},
{
"MapObject": "box2",
"Density": 10
},
{
"MapObject": "cabinet",
"Density": 50
},
{
"MapObject": "chair",
"Density": 10
},
{
"MapObject": "bookshelf",
"Density": 50
},
{
"MapObject": "table_steel",
"Density": 25
},
{
"MapObject": "safe",
"Density": 5
},
{
"MapObject": "table_lab",
"Density": 20
}],
"EnemyDensity": 20,
"Weapons": ["Knife",
"Machine gun",
"Flamer",
"Shotgun",
"Powergun",
"Sniper rifle"],
"Song": "",
"WallMask": "008484",
"FloorMask": "707070",
"RoomMask": "848484",
"AltMask": "840000",
"Walls": 0,
"WallLength": 0,
"CorridorWidth": 1,
"Rooms": {
"Count": 25,
"Min": 6,
"Max": 10,
"Edge": false,
"Overlap": false,
"Walls": 0,
"WallLength": 0,
"WallPad": 0
},
"Squares": 0,
"Doors": {
"Enabled": true,
"Min": 1,
"Max": 1
},
"Pillars": {
"Count": 0,
"Min": 0,
"Max": 0
}
},
{
"Title": "Enough is enough!",
"Description": "We are now in a position where we may repay the B.E.M.s for their actions. We have uncovered a B.E.M. ship carrying an arsenal of rockets which they are probably planning to unleash on us at the earliest moment possible. Now, wouldn't it be nice if they were to detonate onboard instead?",
"Type": "Classic",
"Width": 30,
"Height": 64,
"WallStyle": 3,
"FloorStyle": 4,
"RoomStyle": 4,
"ExitStyle": 0,
"KeyStyle": 3,
"DoorStyle": 3,
"Objectives": [{
"Description": "Blow up the rockets",
"Type": "Destroy",
"Index": 28,
"Count": 20,
"Required": 15,
"Flags": 0
}],
"Enemies": [21,
20,
19,
18,
17,
15,
16,
14,
13,
10,
11,
12],
"SpecialChars": [],
"MapObjectDensities": [{
"MapObject": "rod",
"Density": 20
},
{
"MapObject": "box_green",
"Density": 5
},
{
"MapObject": "box3",
"Density": 5
},
{
"MapObject": "table",
"Density": 10
},
{
"MapObject": "box_gray",
"Density": 5
},
{
"MapObject": "box_red",
"Density": 5
},
{
"MapObject": "wall_goo",
"Density": 5
},
{
"MapObject": "goo",
"Density": 5
}],
"EnemyDensity": 25,
"Weapons": ["Knife",
"Machine gun",
"Grenades",
"Flamer",
"Shotgun",
"Powergun",
"Shrapnel bombs",
"Molotovs",
"Sniper rifle",
"Prox. mine",
"Dynamite"],
"Song": "",
"WallMask": "840084",
"FloorMask": "847024",
"RoomMask": "007070",
"AltMask": "008400",
"Walls": 50,
"WallLength": 10,
"CorridorWidth": 1,
"Rooms": {
"Count": 15,
"Min": 6,
"Max": 10,
"Edge": false,
"Overlap": false,
"Walls": 0,
"WallLength": 0,
"WallPad": 0
},
"Squares": 0,
"Doors": {
"Enabled": true,
"Min": 1,
"Max": 1
},
"Pillars": {
"Count": 0,
"Min": 0,
"Max": 0
}
},
{
"Title": "They are robbing a BANK???",
"Description": "They never cease to amaze me. Now they are robbing banks too...the shrink department guys think it may be something they have picked up from television broadcasts...you know, the archetypical bad guy so to speak. Anyway, we can't have bubble-eyes stealing citizens' savings, can we?",
"Type": "Classic",
"Width": 48,
"Height": 32,
"WallStyle": 0,
"FloorStyle": 7,
"RoomStyle": 10,
"ExitStyle": 0,
"KeyStyle": 0,
"DoorStyle": 0,
"Objectives": [{
"Description": "Fend off the \"bank-robbers from space\"",
"Type": "Kill",
"Index": 0,
"Count": 25,
"Required": 25,
"Flags": 0
},
{
"Description": "Safeguard any loot you come across",
"Type": "Collect",
"Index": 6,
"Count": 6,
"Required": 0,
"Flags": 1
}],
"Enemies": [3,
4,
5,
6,
7,
8,
9],
"SpecialChars": [16,
15,
21,
22,
13,
17],
"MapObjectDensities": [{
"MapObject": "cabinet",
"Density": 50
},
{
"MapObject": "plant",
"Density": 50
},
{
"MapObject": "chair",
"Density": 10
},
{
"MapObject": "table_wood",
"Density": 20
},
{
"MapObject": "bookshelf",
"Density": 10
},
{
"MapObject": "safe",
"Density": 30
},
{
"MapObject": "terminal",
"Density": 20
}],
"EnemyDensity": 20,
"Weapons": ["Knife",
"Machine gun",
"Flamer",
"Shotgun",
"Powergun",
"Sniper rifle"],
"Song": "",
"WallMask": "484870",
"FloorMask": "847024",
"RoomMask": "000084",
"AltMask": "707070",
"Walls": 0,
"WallLength": 0,
"CorridorWidth": 1,
"Rooms": {
"Count": 20,
"Min": 6,
"Max": 10,
"Edge": false,
"Overlap": false,
"Walls": 0,
"WallLength": 0,
"WallPad": 0
},
"Squares": 0,
"Doors": {
"Enabled": true,
"Min": 1,
"Max": 1
},
"Pillars": {
"Count": 0,
"Min": 0,
"Max": 0
}
},
{
"Title": "Retrieve the stolen money",
"Description": "Despite your valiant, and ultimately successful, efforts, the buggers took off with a considerable amount of dough. Now, the city can do without that kind of strain on the treasury...soooo...we will just have to retrieve the funds won't we?",
"Type": "Classic",
"Width": 32,
"Height": 64,
"WallStyle": 3,
"FloorStyle": 4,
"RoomStyle": 4,
"ExitStyle": 0,
"KeyStyle": 3,
"DoorStyle": 3,
"Objectives": [{
"Description": "Find as much money as possible",
"Type": "Collect",
"Index": 6,
"Count": 32,
"Required": 25,
"Flags": 0
}],
"Enemies": [10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21],
"SpecialChars": [],
"MapObjectDensities": [{
"MapObject": "goo",
"Density": 5
},
{
"MapObject": "wall_goo",
"Density": 5
},
{
"MapObject": "box_red",
"Density": 5
},
{
"MapObject": "box3",
"Density": 5
},
{
"MapObject": "box_green",
"Density": 5
},
{
"MapObject": "box_gray",
"Density": 5
},
{
"MapObject": "rod",
"Density": 20
},
{
"MapObject": "table",
"Density": 10
}],
"EnemyDensity": 25,
"Weapons": ["Knife",
"Machine gun",
"Grenades",
"Flamer",
"Shotgun",
"Powergun",
"Shrapnel bombs",
"Molotovs",
"Sniper rifle",
"Prox. mine",
"Dynamite"],
"Song": "",
"WallMask": "484870",
"FloorMask": "008484",
"RoomMask": "008400",
"AltMask": "94802c",
"Walls": 50,
"WallLength": 10,
"CorridorWidth": 1,
"Rooms": {
"Count": 12,
"Min": 6,
"Max": 10,
"Edge": false,
"Overlap": false,
"Walls": 0,
"WallLength": 0,
"WallPad": 0
},
"Squares": 0,
"Doors": {
"Enabled": true,
"Min": 1,
"Max": 1
},
"Pillars": {
"Count": 0,
"Min": 0,
"Max": 0
}
},
{
"Title": "On the offensive...",
"Description": "Okeeey...our top minds have come up with a plan to put an end to this nonsens. These B.E.M. fellows, they're highly hierarchical you see...so we take out the head and the body crumbles, see? You don't? Well, shut up and follow orders then, will'ya?",
"Type": "Classic",
"Width": 32,
"Height": 64,
"WallStyle": 3,
"FloorStyle": 4,
"RoomStyle": 4,
"ExitStyle": 0,
"KeyStyle": 3,
"DoorStyle": 3,
"Objectives": [{
"Description": "Steal B.E.M. technology",
"Type": "Collect",
"Index": 10,
"Count": 5,
"Required": 3,
"Flags": 4
},
{
"Description": "Any gadget may prove helpful...",
"Type": "Collect",
"Index": 7,
"Count": 2,
"Required": 0,
"Flags": 5
},
{
"Description": "Data files are good, too",
"Type": "Collect",
"Index": 2,
"Count": 5,
"Required": 0,
"Flags": 5
},
{
"Description": "Blueprints are a great help!",
"Type": "Collect",
"Index": 4,
"Count": 2,
"Required": 0,
"Flags": 5
}],
"Enemies": [22,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21],
"SpecialChars": [],
"MapObjectDensities": [{
"MapObject": "goo",
"Density": 5
},
{
"MapObject": "wall_goo",
"Density": 5
},
{
"MapObject": "box_red",
"Density": 5
},
{
"MapObject": "box3",
"Density": 5
},
{
"MapObject": "box_green",
"Density": 5
},
{
"MapObject": "box_gray",
"Density": 5
},
{
"MapObject": "rod",
"Density": 20
},
{
"MapObject": "table",
"Density": 10
}],
"EnemyDensity": 30,
"Weapons": ["Knife",
"Machine gun",
"Grenades",
"Flamer",
"Shotgun",
"Powergun",
"Shrapnel bombs",
"Molotovs",
"Sniper rifle",
"Prox. mine",
"Dynamite"],
"Song": "",
"WallMask": "94802c",
"FloorMask": "008400",
"RoomMask": "840000",
"AltMask": "008484",
"Walls": 50,
"WallLength": 10,
"CorridorWidth": 1,
"Rooms": {
"Count": 12,
"Min": 6,
"Max": 10,
"Edge": false,
"Overlap": false,
"Walls": 0,
"WallLength": 0,
"WallPad": 0
},
"Squares": 0,
"Doors": {
"Enabled": true,
"Min": 1,
"Max": 1
},
"Pillars": {
"Count": 0,
"Min": 0,
"Max": 0
}
},
{
"Title": "Board and seize an enemy vessel",
"Description": "The B.E.M. scout vessel 'Har-Har-Har' - they must be doing this just to taunt us I'm sure - is vulnerable to a quick assault by a small elite force...hey, come back here...no, you may go to the bathroom afterwards!",
"Type": "Classic",
"Width": 32,
"Height": 64,
"WallStyle": 3,
"FloorStyle": 4,
"RoomStyle": 4,
"ExitStyle": 0,
"KeyStyle": 3,
"DoorStyle": 3,
"Objectives": [{
"Description": "Eliminate the crew members",
"Type": "Kill",
"Index": 0,
"Count": 30,
"Required": 30,
"Flags": 0
},
{
"Description": "Seize the remote to the bridge controls",
"Type": "Collect",
"Index": 9,
"Count": 1,
"Required": 1,
"Flags": 4
}],
"Enemies": [],
"SpecialChars": [22,
21,
18,
17,
16,
15],
"MapObjectDensities": [{
"MapObject": "goo",
"Density": 5
},
{
"MapObject": "wall_goo",
"Density": 5
},
{
"MapObject": "box_red",
"Density": 5
},
{
"MapObject": "box3",
"Density": 5
},
{
"MapObject": "box_green",
"Density": 5
},
{
"MapObject": "box_gray",
"Density": 5
},
{
"MapObject": "rod",
"Density": 20
},
{
"MapObject": "table",
"Density": 10
}],
"EnemyDensity": 0,
"Weapons": ["Knife",
"Machine gun",
"Grenades",
"Flamer",
"Shotgun",
"Powergun",
"Shrapnel bombs",
"Molotovs",
"Sniper rifle",
"Prox. mine",
"Dynamite"],
"Song": "",
"WallMask": "008484",
"FloorMask": "484870",
"RoomMask": "000084",
"AltMask": "000070",
"Walls": 50,
"WallLength": 10,
"CorridorWidth": 1,
"Rooms": {
"Count": 12,
"Min": 6,
"Max": 10,
"Edge": false,
"Overlap": false,
"Walls": 0,
"WallLength": 0,
"WallPad": 0
},
"Squares": 0,
"Doors": {
"Enabled": true,
"Min": 1,
"Max": 1
},
"Pillars": {
"Count": 0,
"Min": 0,
"Max": 0
}
},
{
"Title": "Mister Congeniality he\/she\/it ain't...",
"Description": "Actually, that remote was for the self-destruction mechanism, but you'd only have been nervous had you known. What's with the sour faces? It ended well, didn't it? Anyway, I've got a treat for you. You have been chosen to put an end to this conflict by nailing the head S.O.B. itself!",
"Type": "Classic",
"Width": 24,
"Height": 24,
"WallStyle": 3,
"FloorStyle": 4,
"RoomStyle": 4,
"ExitStyle": 0,
"KeyStyle": 3,
"DoorStyle": 3,
"Objectives": [{
"Description": "Kill the Big Bug-Eye!",
"Type": "Kill",
"Index": 0,
"Count": 1,
"Required": 1,
"Flags": 0
}],
"Enemies": [],
"SpecialChars": [28],
"MapObjectDensities": [{
"MapObject": "goo",
"Density": 5
},
{
"MapObject": "wall_goo",
"Density": 5
},
{
"MapObject": "box_red",
"Density": 5
},
{
"MapObject": "box3",
"Density": 5
},
{
"MapObject": "box_green",
"Density": 5
},
{
"MapObject": "box_gray",
"Density": 5
},
{
"MapObject": "rod",
"Density": 20
}],
"EnemyDensity": 0,
"Weapons": ["Knife",
"Machine gun",
"Grenades",
"Shotgun",
"Powergun",
"Shrapnel bombs",
"Sniper rifle",
"Prox. mine",
"Dynamite"],
"Song": "",
"WallMask": "94802c",
"FloorMask": "008400",
"RoomMask": "840000",
"AltMask": "008484",
"Walls": 10,
"WallLength": 4,
"CorridorWidth": 1,
"Rooms": {
"Count": 0,
"Min": 6,
"Max": 10,
"Edge": false,
"Overlap": false,
"Walls": 0,
"WallLength": 0,
"WallPad": 0
},
"Squares": 0,
"Doors": {
"Enabled": true,
"Min": 1,
"Max": 1
},
"Pillars": {
"Count": 0,
"Min": 0,
"Max": 0
}
}]
}

View File

@@ -0,0 +1,7 @@
{
"Version": 5,
"Title": "Ogre Rampage",
"Author": "Ronny Wester",
"Description": "Suddenly, Confederate installations come under sudden, and most unexpected, attack from Ogre troops. There has been no animosity between the Ogre Empire and the Confederation for ages. What's up?",
"Missions": 16
}

View File

@@ -0,0 +1,674 @@
{
"Characters": [{
"face": 2,
"skin": 3,
"arm": 9,
"body": 9,
"leg": 9,
"hair": 0,
"speed": 256,
"Gun": "Machine gun",
"maxHealth": 40,
"flags": 1024,
"probabilityToMove": 50,
"probabilityToTrack": 25,
"probabilityToShoot": 2,
"actionDelay": 15
},
{
"face": 2,
"skin": 6,
"arm": 9,
"body": 9,
"leg": 9,
"hair": 1,
"speed": 256,
"Gun": "Knife",
"maxHealth": 40,
"flags": 1024,
"probabilityToMove": 70,
"probabilityToTrack": 35,
"probabilityToShoot": 0,
"actionDelay": 10
},
{
"face": 2,
"skin": 0,
"arm": 9,
"body": 9,
"leg": 9,
"hair": 2,
"speed": 256,
"Gun": "Machine gun",
"maxHealth": 40,
"flags": 1024,
"probabilityToMove": 55,
"probabilityToTrack": 30,
"probabilityToShoot": 20,
"actionDelay": 15
},
{
"face": 2,
"skin": 6,
"arm": 9,
"body": 9,
"leg": 9,
"hair": 3,
"speed": 256,
"Gun": "Flamer",
"maxHealth": 40,
"flags": 1024,
"probabilityToMove": 65,
"probabilityToTrack": 40,
"probabilityToShoot": 40,
"actionDelay": 10
},
{
"face": 2,
"skin": 4,
"arm": 9,
"body": 9,
"leg": 9,
"hair": 4,
"speed": 256,
"Gun": "Shotgun",
"maxHealth": 40,
"flags": 1024,
"probabilityToMove": 70,
"probabilityToTrack": 45,
"probabilityToShoot": 50,
"actionDelay": 10
},
{
"face": 2,
"skin": 3,
"arm": 9,
"body": 9,
"leg": 9,
"hair": 5,
"speed": 256,
"Gun": "Chemo gun",
"maxHealth": 40,
"flags": 1024,
"probabilityToMove": 50,
"probabilityToTrack": 25,
"probabilityToShoot": 20,
"actionDelay": 10
},
{
"face": 2,
"skin": 5,
"arm": 9,
"body": 9,
"leg": 9,
"hair": 6,
"speed": 256,
"Gun": "Chemo bombs",
"maxHealth": 40,
"flags": 1024,
"probabilityToMove": 70,
"probabilityToTrack": 50,
"probabilityToShoot": 15,
"actionDelay": 10
},
{
"face": 2,
"skin": 8,
"arm": 9,
"body": 9,
"leg": 9,
"hair": 7,
"speed": 256,
"Gun": "Grenades",
"maxHealth": 40,
"flags": 1024,
"probabilityToMove": 70,
"probabilityToTrack": 50,
"probabilityToShoot": 10,
"actionDelay": 10
},
{
"face": 2,
"skin": 2,
"arm": 9,
"body": 9,
"leg": 9,
"hair": 8,
"speed": 128,
"Gun": "Shotgun",
"maxHealth": 80,
"flags": 1024,
"probabilityToMove": 95,
"probabilityToTrack": 75,
"probabilityToShoot": 30,
"actionDelay": 10
},
{
"face": 2,
"skin": 9,
"arm": 9,
"body": 9,
"leg": 9,
"hair": 9,
"speed": 384,
"Gun": "Knife",
"maxHealth": 40,
"flags": 1024,
"probabilityToMove": 95,
"probabilityToTrack": 75,
"probabilityToShoot": 0,
"actionDelay": 10
},
{
"face": 2,
"skin": 2,
"arm": 9,
"body": 9,
"leg": 9,
"hair": 10,
"speed": 128,
"Gun": "Machine gun",
"maxHealth": 80,
"flags": 1024,
"probabilityToMove": 95,
"probabilityToTrack": 75,
"probabilityToShoot": 50,
"actionDelay": 10
},
{
"face": 7,
"skin": 3,
"arm": 9,
"body": 5,
"leg": 9,
"hair": 11,
"speed": 256,
"Gun": "Machine gun",
"maxHealth": 120,
"flags": 1024,
"probabilityToMove": 95,
"probabilityToTrack": 50,
"probabilityToShoot": 10,
"actionDelay": 5
},
{
"face": 7,
"skin": 0,
"arm": 9,
"body": 0,
"leg": 9,
"hair": 12,
"speed": 256,
"Gun": "Chemo gun",
"maxHealth": 120,
"flags": 1024,
"probabilityToMove": 95,
"probabilityToTrack": 50,
"probabilityToShoot": 20,
"actionDelay": 5
},
{
"face": 7,
"skin": 8,
"arm": 9,
"body": 2,
"leg": 9,
"hair": 13,
"speed": 256,
"Gun": "Shotgun",
"maxHealth": 120,
"flags": 1024,
"probabilityToMove": 95,
"probabilityToTrack": 75,
"probabilityToShoot": 20,
"actionDelay": 5
},
{
"face": 7,
"skin": 4,
"arm": 9,
"body": 5,
"leg": 9,
"hair": 6,
"speed": 256,
"Gun": "Sniper rifle",
"maxHealth": 120,
"flags": 1024,
"probabilityToMove": 50,
"probabilityToTrack": 25,
"probabilityToShoot": 30,
"actionDelay": 10
},
{
"face": 6,
"skin": 10,
"arm": 7,
"body": 7,
"leg": 9,
"hair": 12,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6291456,
"probabilityToMove": 100,
"probabilityToTrack": 0,
"probabilityToShoot": 0,
"actionDelay": 10
},
{
"face": 6,
"skin": 1,
"arm": 7,
"body": 8,
"leg": 11,
"hair": 10,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6291456,
"probabilityToMove": 100,
"probabilityToTrack": 0,
"probabilityToShoot": 0,
"actionDelay": 10
},
{
"face": 6,
"skin": 11,
"arm": 3,
"body": 3,
"leg": 0,
"hair": 12,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6291456,
"probabilityToMove": 100,
"probabilityToTrack": 0,
"probabilityToShoot": 0,
"actionDelay": 10
},
{
"face": 12,
"skin": 1,
"arm": 8,
"body": 10,
"leg": 2,
"hair": 8,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6291456,
"probabilityToMove": 100,
"probabilityToTrack": 0,
"probabilityToShoot": 0,
"actionDelay": 10
},
{
"face": 4,
"skin": 11,
"arm": 0,
"body": 0,
"leg": 0,
"hair": 8,
"speed": 256,
"Gun": "Powergun",
"maxHealth": 40,
"flags": 131072,
"probabilityToMove": 50,
"probabilityToTrack": 0,
"probabilityToShoot": 5,
"actionDelay": 10
},
{
"face": 4,
"skin": 1,
"arm": 0,
"body": 0,
"leg": 0,
"hair": 8,
"speed": 256,
"Gun": "Flamer",
"maxHealth": 40,
"flags": 131072,
"probabilityToMove": 50,
"probabilityToTrack": 0,
"probabilityToShoot": 15,
"actionDelay": 10
},
{
"face": 4,
"skin": 10,
"arm": 0,
"body": 0,
"leg": 0,
"hair": 8,
"speed": 256,
"Gun": "Machine gun",
"maxHealth": 40,
"flags": 131072,
"probabilityToMove": 50,
"probabilityToTrack": 0,
"probabilityToShoot": 5,
"actionDelay": 10
},
{
"face": 2,
"skin": 10,
"arm": 1,
"body": 5,
"leg": 2,
"hair": 12,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6291456,
"probabilityToMove": 100,
"probabilityToTrack": 0,
"probabilityToShoot": 0,
"actionDelay": 10
},
{
"face": 2,
"skin": 3,
"arm": 1,
"body": 0,
"leg": 4,
"hair": 12,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6291456,
"probabilityToMove": 75,
"probabilityToTrack": 0,
"probabilityToShoot": 0,
"actionDelay": 15
},
{
"face": 2,
"skin": 6,
"arm": 4,
"body": 3,
"leg": 8,
"hair": 12,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6291456,
"probabilityToMove": 75,
"probabilityToTrack": 0,
"probabilityToShoot": 0,
"actionDelay": 15
},
{
"face": 2,
"skin": 9,
"arm": 8,
"body": 7,
"leg": 11,
"hair": 12,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6291456,
"probabilityToMove": 75,
"probabilityToTrack": 0,
"probabilityToShoot": 0,
"actionDelay": 15
},
{
"face": 2,
"skin": 11,
"arm": 6,
"body": 8,
"leg": 3,
"hair": 11,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6291456,
"probabilityToMove": 75,
"probabilityToTrack": 0,
"probabilityToShoot": 0,
"actionDelay": 15
},
{
"face": 7,
"skin": 5,
"arm": 9,
"body": 1,
"leg": 9,
"hair": 1,
"speed": 256,
"Gun": "Shotgun",
"maxHealth": 120,
"flags": 1024,
"probabilityToMove": 50,
"probabilityToTrack": 25,
"probabilityToShoot": 30,
"actionDelay": 5
},
{
"face": 16,
"skin": 1,
"arm": 1,
"body": 6,
"leg": 4,
"hair": 13,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 20,
"flags": 6291456,
"probabilityToMove": 100,
"probabilityToTrack": 0,
"probabilityToShoot": 0,
"actionDelay": 15
},
{
"face": 7,
"skin": 6,
"arm": 9,
"body": 4,
"leg": 9,
"hair": 3,
"speed": 256,
"Gun": "Confusion bombs",
"maxHealth": 400,
"flags": 1967104,
"probabilityToMove": 100,
"probabilityToTrack": 50,
"probabilityToShoot": 0,
"actionDelay": 5
},
{
"face": 2,
"skin": 8,
"arm": 12,
"body": 8,
"leg": 9,
"hair": 12,
"speed": 256,
"Gun": "Shotgun",
"maxHealth": 80,
"flags": 8389632,
"probabilityToMove": 75,
"probabilityToTrack": 25,
"probabilityToShoot": 52,
"actionDelay": 5
},
{
"face": 2,
"skin": 8,
"arm": 12,
"body": 8,
"leg": 9,
"hair": 12,
"speed": 256,
"Gun": "Chemo gun",
"maxHealth": 80,
"flags": 8389632,
"probabilityToMove": 75,
"probabilityToTrack": 25,
"probabilityToShoot": 52,
"actionDelay": 5
},
{
"face": 2,
"skin": 8,
"arm": 12,
"body": 8,
"leg": 9,
"hair": 12,
"speed": 256,
"Gun": "Flamer",
"maxHealth": 80,
"flags": 8389632,
"probabilityToMove": 75,
"probabilityToTrack": 25,
"probabilityToShoot": 52,
"actionDelay": 5
},
{
"face": 2,
"skin": 5,
"arm": 6,
"body": 6,
"leg": 6,
"hair": 12,
"speed": 256,
"Gun": "Shotgun",
"maxHealth": 80,
"flags": 197632,
"probabilityToMove": 70,
"probabilityToTrack": 5,
"probabilityToShoot": 10,
"actionDelay": 15
},
{
"face": 2,
"skin": 0,
"arm": 6,
"body": 6,
"leg": 6,
"hair": 12,
"speed": 256,
"Gun": "Powergun",
"maxHealth": 80,
"flags": 197632,
"probabilityToMove": 50,
"probabilityToTrack": 5,
"probabilityToShoot": 15,
"actionDelay": 15
},
{
"face": 2,
"skin": 8,
"arm": 6,
"body": 6,
"leg": 6,
"hair": 12,
"speed": 256,
"Gun": "Sniper rifle",
"maxHealth": 80,
"flags": 197632,
"probabilityToMove": 50,
"probabilityToTrack": 5,
"probabilityToShoot": 32,
"actionDelay": 15
},
{
"face": 7,
"skin": 9,
"arm": 6,
"body": 6,
"leg": 6,
"hair": 6,
"speed": 256,
"Gun": "Knife",
"maxHealth": 120,
"flags": 197632,
"probabilityToMove": 80,
"probabilityToTrack": 5,
"probabilityToShoot": 0,
"actionDelay": 10
},
{
"face": 7,
"skin": 9,
"arm": 9,
"body": 3,
"leg": 9,
"hair": 0,
"speed": 256,
"Gun": "Machine gun",
"maxHealth": 200,
"flags": 8390144,
"probabilityToMove": 75,
"probabilityToTrack": 50,
"probabilityToShoot": 10,
"actionDelay": 5
},
{
"face": 7,
"skin": 9,
"arm": 9,
"body": 3,
"leg": 9,
"hair": 5,
"speed": 256,
"Gun": "Powergun",
"maxHealth": 200,
"flags": 8390144,
"probabilityToMove": 75,
"probabilityToTrack": 50,
"probabilityToShoot": 10,
"actionDelay": 5
},
{
"face": 7,
"skin": 9,
"arm": 9,
"body": 3,
"leg": 9,
"hair": 7,
"speed": 256,
"Gun": "Sniper rifle",
"maxHealth": 200,
"flags": 8390144,
"probabilityToMove": 75,
"probabilityToTrack": 50,
"probabilityToShoot": 10,
"actionDelay": 5
},
{
"face": 7,
"skin": 9,
"arm": 9,
"body": 3,
"leg": 9,
"hair": 6,
"speed": 256,
"Gun": "Flamer",
"maxHealth": 200,
"flags": 8390144,
"probabilityToMove": 75,
"probabilityToTrack": 50,
"probabilityToShoot": 10,
"actionDelay": 5
},
{
"face": 7,
"skin": 9,
"arm": 9,
"body": 3,
"leg": 9,
"hair": 13,
"speed": 256,
"Gun": "Shotgun",
"maxHealth": 200,
"flags": 8390144,
"probabilityToMove": 75,
"probabilityToTrack": 50,
"probabilityToShoot": 10,
"actionDelay": 5
}]
}

File diff suppressed because it is too large Load Diff

View File

@@ -35,9 +35,7 @@ set(CDOGS_SDL_HEADERS
prep.h
screens.h
weapon_menu.h
XGetopt.h
missions/bem.h
missions/ogre.h)
XGetopt.h)
set(CDOGS_SDL_EXTRA)
if(WIN32)
set(CDOGS_SDL_EXTRA ../build/windows/cdogs.rc)

View File

@@ -70,9 +70,7 @@ void AutosaveTerminate(Autosave *autosave)
static void LoadCampaignNode(CampaignEntry *c, json_t *node)
{
CSTRDUP(c->Path, json_find_first_label(node, "Path")->child->text);
LoadBool(&c->IsBuiltin, node, "IsBuiltin");
c->Mode = GAME_MODE_NORMAL;
c->BuiltinIndex = atoi(json_find_first_label(node, "BuiltinIndex")->child->text);
}
static void AddCampaignNode(CampaignEntry *c, json_t *root)
{
@@ -82,9 +80,6 @@ static void AddCampaignNode(CampaignEntry *c, json_t *root)
RelPathFromCWD(path, c->Path);
json_insert_pair_into_object(
subConfig, "Path", json_new_string(path));
json_insert_pair_into_object(
subConfig, "IsBuiltin", json_new_bool(c->IsBuiltin));
AddIntPair(subConfig, "BuiltinIndex", c->BuiltinIndex);
json_insert_pair_into_object(root, "Campaign", subConfig);
}
@@ -94,12 +89,8 @@ static void LoadMissionNode(MissionSave *m, json_t *node)
LoadCampaignNode(&m->Campaign, json_find_first_label(node, "Campaign")->child);
strcpy(m->Password, json_find_first_label(node, "Password")->child->text);
LoadInt(&m->MissionsCompleted, node, "MissionsCompleted");
m->IsValid = 1;
// If the campaign is from a file, check that file exists
if (!m->Campaign.IsBuiltin)
{
m->IsValid = access(m->Campaign.Path, F_OK | R_OK) != -1;
}
// Check that file exists
m->IsValid = access(m->Campaign.Path, F_OK | R_OK) != -1;
}
static json_t *CreateMissionNode(MissionSave *m)
{
@@ -122,7 +113,7 @@ static void LoadMissionNodes(Autosave *a, json_t *root, const char *nodeName)
{
MissionSave m;
LoadMissionNode(&m, child);
AutosaveAddMission(a, &m, m.Campaign.BuiltinIndex);
AutosaveAddMission(a, &m);
child = child->next;
}
}
@@ -204,9 +195,13 @@ void AutosaveSave(Autosave *autosave, const char *filename)
fclose(f);
}
MissionSave *AutosaveFindMission(
Autosave *autosave, const char *path, int builtinIndex)
MissionSave *AutosaveFindMission(Autosave *autosave, const char *path)
{
if (strlen(path) == 0)
{
return NULL;
}
// Turn the path into a relative one, since autosave paths are all stored
// in this form
char relPath[CDOGS_PATH_MAX] = "";
@@ -215,31 +210,18 @@ MissionSave *AutosaveFindMission(
{
MissionSave *m = CArrayGet(&autosave->Missions, i);
const char *campaignPath = m->Campaign.Path;
if (strlen(relPath) == 0)
if (campaignPath != NULL && strcmp(campaignPath, relPath) == 0)
{
// builtin campaign
if (m->Campaign.IsBuiltin &&
m->Campaign.BuiltinIndex == builtinIndex)
{
return m;
}
}
else if (campaignPath != NULL && strcmp(campaignPath, relPath) == 0)
{
if (!m->Campaign.IsBuiltin)
{
return m;
}
return m;
}
}
return NULL;
}
void AutosaveAddMission(
Autosave *autosave, MissionSave *mission, int builtinIndex)
void AutosaveAddMission(Autosave *autosave, MissionSave *mission)
{
MissionSave *existingMission = AutosaveFindMission(
autosave, mission->Campaign.Path, builtinIndex);
autosave, mission->Campaign.Path);
if (existingMission != NULL)
{
CampaignEntryTerminate(&existingMission->Campaign);
@@ -260,10 +242,9 @@ void AutosaveAddMission(
}
void AutosaveLoadMission(
Autosave *autosave, MissionSave *mission, const char *path, int builtinIndex)
Autosave *autosave, MissionSave *mission, const char *path)
{
MissionSave *existingMission = AutosaveFindMission(
autosave, path, builtinIndex);
MissionSave *existingMission = AutosaveFindMission(autosave, path);
MissionSaveInit(mission);
if (existingMission != NULL)
{

View File

@@ -58,7 +58,6 @@ void AutosaveInit(Autosave *autosave);
void AutosaveTerminate(Autosave *autosave);
void AutosaveLoad(Autosave *autosave, const char *filename);
void AutosaveSave(Autosave *autosave, const char *filename);
void AutosaveAddMission(
Autosave *autosave, MissionSave *mission, int builtinIndex);
void AutosaveAddMission(Autosave *autosave, MissionSave *mission);
void AutosaveLoadMission(
Autosave *autosave, MissionSave *mission, const char *path, int builtinIndex);
Autosave *autosave, MissionSave *mission, const char *path);

View File

@@ -258,7 +258,7 @@ void ScreenMissionSummary(CampaignOptions *c, struct MissionOptions *m)
}
strcpy(ms.Password, MakePassword(passwordIndex, 0));
ms.MissionsCompleted = m->index + 1;
AutosaveAddMission(&gAutosave, &ms, ms.Campaign.BuiltinIndex);
AutosaveAddMission(&gAutosave, &ms);
AutosaveSave(&gAutosave, GetConfigFilePath(AUTOSAVE_FILE));
// Calculate bonus scores

View File

@@ -74,7 +74,6 @@ bool CampaignEntryTryLoad(
CampaignEntryInit(entry, title, mode);
CSTRDUP(entry->Filename, PathGetBasename(path));
CSTRDUP(entry->Path, path);
entry->IsBuiltin = false;
entry->NumMissions = numMissions;
CFREE(buf);
return true;

View File

@@ -2,7 +2,7 @@
C-Dogs SDL
A port of the legendary (and fun) action/arcade cdogs.
Copyright (c) 2013-2014, Cong Xu
Copyright (c) 2013-2015, Cong Xu
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -26,8 +26,7 @@
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __CAMPAIGN_ENTRY
#define __CAMPAIGN_ENTRY
#pragma once
#include "game_mode.h"
@@ -36,9 +35,7 @@ typedef struct
char *Filename;
char *Path;
char *Info;
bool IsBuiltin;
GameMode Mode;
int BuiltinIndex;
int NumMissions;
} CampaignEntry;
@@ -47,5 +44,3 @@ void CampaignEntryCopy(CampaignEntry *dst, CampaignEntry *src);
bool CampaignEntryTryLoad(
CampaignEntry *entry, const char *path, GameMode mode);
void CampaignEntryTerminate(CampaignEntry *entry);
#endif

View File

@@ -33,6 +33,7 @@
#include <tinydir/tinydir.h>
#include <cdogs/files.h>
#include <cdogs/log.h>
#include <cdogs/map_new.h>
#include <cdogs/mission.h>
#include <cdogs/utils.h>
@@ -71,8 +72,6 @@ void CampaignSettingTerminate(CampaignSetting *setting)
static void CampaignListInit(campaign_list_t *list);
static void CampaignListTerminate(campaign_list_t *list);
void LoadBuiltinCampaigns(campaign_list_t *list);
void LoadBuiltinDogfights(campaign_list_t *list);
static void LoadCampaignsFromFolder(
campaign_list_t *list, const char *name, const char *path,
const GameMode mode);
@@ -85,8 +84,7 @@ void LoadAllCampaigns(custom_campaigns_t *campaigns)
CampaignListInit(&campaigns->campaignList);
CampaignListInit(&campaigns->dogfightList);
debug(D_NORMAL, "Load campaigns\n");
LoadBuiltinCampaigns(&campaigns->campaignList);
LOG(LM_MAIN, LL_INFO, "Load campaigns");
GetDataFilePath(buf, CDOGS_CAMPAIGN_DIR);
LoadCampaignsFromFolder(
&campaigns->campaignList,
@@ -94,8 +92,7 @@ void LoadAllCampaigns(custom_campaigns_t *campaigns)
buf,
GAME_MODE_NORMAL);
debug(D_NORMAL, "Load dogfights\n");
LoadBuiltinDogfights(&campaigns->dogfightList);
LOG(LM_MAIN, LL_INFO, "Load dogfights");
GetDataFilePath(buf, CDOGS_DOGFIGHT_DIR);
LoadCampaignsFromFolder(
&campaigns->dogfightList,
@@ -138,44 +135,12 @@ static void CampaignListTerminate(campaign_list_t *list)
CArrayTerminate(&list->list);
}
static void AddBuiltinCampaignEntry(
campaign_list_t *list,
const char *title,
const GameMode mode,
int numMissions,
int builtinIndex);
void LoadBuiltinCampaigns(campaign_list_t *list)
{
int i = 0;
for (i = 0; SetupBuiltinCampaign(i); i++)
{
AddBuiltinCampaignEntry(
list,
gCampaign.Setting.Title,
GAME_MODE_NORMAL,
gCampaign.Setting.Missions.size,
i);
}
}
void LoadBuiltinDogfights(campaign_list_t *list)
{
int i = 0;
for (i = 0; SetupBuiltinDogfight(i); i++)
{
AddBuiltinCampaignEntry(
list, gCampaign.Setting.Title, GAME_MODE_DOGFIGHT, 1, i);
}
}
static void LoadQuickPlayEntry(CampaignEntry *entry)
{
entry->Filename = NULL;
entry->Path = NULL;
entry->Info = NULL;
entry->IsBuiltin = 1;
entry->Mode = GAME_MODE_QUICK_PLAY;
entry->BuiltinIndex = 0;
}
static void LoadCampaignsFromFolder(
@@ -224,23 +189,6 @@ static void LoadCampaignsFromFolder(
tinydir_close(&dir);
}
static void AddBuiltinCampaignEntry(
campaign_list_t *list,
const char *title,
const GameMode mode,
int numMissions,
int builtinIndex)
{
CampaignEntry entry;
CampaignEntryInit(&entry, title, mode);
CArrayPushBack(&list->list, &entry);
CampaignEntry *pEntry =
CArrayGet(&list->list, (int)list->list.size - 1);
pEntry->IsBuiltin = true;
pEntry->BuiltinIndex = builtinIndex;
pEntry->NumMissions = numMissions;
}
Mission *CampaignGetCurrentMission(CampaignOptions *campaign)
{
if (campaign->MissionIndex >= (int)campaign->Setting.Missions.size)

View File

@@ -568,31 +568,42 @@ const char *GetConfigFilePath(const char *name)
return cfpath;
}
int mkdir_deep(const char *path)
static bool doMkdir(const char *path)
{
int i;
char part[255];
debug(D_NORMAL, "mkdir_deep path: %s\n", path);
for (i = 0; i < (int)strlen(path); i++)
if (mkdir(path, MKDIR_MODE) != -1)
{
return true;
}
int e = errno;
(void)e;
// Mac OS X 10.4 returns EISDIR instead of EEXIST
// if a dir already exists...
return
errno == EEXIST ||
errno == EISDIR ||
errno == EACCES;
}
bool mkdir_deep(const char *path)
{
for (int i = 0; i < (int)strlen(path); i++)
{
if (path[i] == '\0') break;
if (path[i] == '/') {
strncpy(part, path, i + 1);
part[i+1] = '\0';
if (mkdir(part, MKDIR_MODE) == -1)
if (path[i] == '/')
{
char buf[CDOGS_PATH_MAX];
strncpy(buf, path, i + 1);
buf[i + 1] = '\0';
if (!doMkdir(buf))
{
/* Mac OS X 10.4 returns EISDIR instead of EEXIST
* if a dir already exists... */
if (errno == EEXIST || errno == EISDIR) continue;
else return 1;
return false;
}
}
}
return 0;
if (path[strlen(path) - 1] != '/' && !doMkdir(path))
{
return false;
}
return true;
}
void SetupConfigDir(void)
@@ -601,7 +612,7 @@ void SetupConfigDir(void)
LOG(LM_MAIN, LL_INFO, "Creating Config dir... ");
if (mkdir_deep(cfg_p) == 0)
if (mkdir_deep(cfg_p))
{
if (errno != EEXIST) LOG(LM_MAIN, LL_INFO, "Config dir created.");
else LOG(LM_MAIN, LL_INFO, "Config dir already exists.");

View File

@@ -220,3 +220,5 @@ void swap16 (void *d);
// Convert classic colour range indices to color_t
color_t RangeToColor(const int range);
#define COLORRANGE_COUNT 27
bool mkdir_deep(const char *path);

View File

@@ -84,27 +84,10 @@ bool CampaignLoad(CampaignOptions *co, CampaignEntry *entry)
co->Entry = *entry;
co->Entry.Mode = mode;
CampaignSettingInit(&co->Setting);
if (entry->IsBuiltin)
if (entry->Mode == GAME_MODE_QUICK_PLAY)
{
if (entry->Mode == GAME_MODE_NORMAL)
{
SetupBuiltinCampaign(entry->BuiltinIndex);
co->IsLoaded = true;
}
else if (entry->Mode == GAME_MODE_DOGFIGHT)
{
SetupBuiltinDogfight(entry->BuiltinIndex);
co->IsLoaded = true;
}
else if (entry->Mode == GAME_MODE_QUICK_PLAY)
{
SetupQuickPlayCampaign(&co->Setting);
co->IsLoaded = true;
}
else
{
CASSERT(false, "Unknown game mode");
}
SetupQuickPlayCampaign(&co->Setting);
co->IsLoaded = true;
}
else
{

View File

@@ -33,6 +33,7 @@
#include <tinydir/tinydir.h>
#include "ammo.h"
#include "files.h"
#include "json_utils.h"
#include "log.h"
#include "map_new.h"
@@ -180,11 +181,13 @@ static json_t *ReadArchiveJSON(const char *archive, const char *filename)
char path[CDOGS_PATH_MAX];
sprintf(path, "%s/%s", archive, filename);
long len;
char *buf = ReadFileIntoBuf(path, "r", &len);
char *buf = ReadFileIntoBuf(path, "rb", &len);
if (buf == NULL) goto bail;
if (json_parse_document(&root, buf) != JSON_OK)
const enum json_error e = json_parse_document(&root, buf);
if (e != JSON_OK)
{
printf("Invalid syntax in JSON file %s.\n", filename);
LOG(LM_MAIN, LL_ERROR, "Invalid syntax in JSON file (%s) error(%d)",
filename, (int)e);
root = NULL;
goto bail;
}
@@ -367,6 +370,7 @@ int MapArchiveSave(const char *filename, CampaignSetting *c)
char buf[CDOGS_PATH_MAX];
RealPath(relbuf, buf);
// Make dir but ignore error, as we may be saving over an existing dir
mkdir_deep(buf);
setlocale(LC_ALL, "");
// Campaign

View File

@@ -282,86 +282,6 @@ static const char *exitPicNames[] = {
int GetExitCount(void) { return EXIT_COUNT; }
// +----------------+
// | Mission info |
// +----------------+
struct MissionOld dogFight1 = {
"",
"",
WALL_STYLE_STONE, FLOOR_STYLE_STONE, FLOOR_STYLE_WOOD, 0, 1, 1,
32, 32,
50, 25,
4, 2,
0, 0, 0, 0,
0,
{
{"", 0, 0, 0, 0, 0}
},
0, {0},
0, {0},
8,
{8, 9, 10, 11, 12, 13, 14, 15},
{10, 10, 10, 10, 10, 10, 10, 10},
0, 0,
"", "",
14, 13, 22, 1
};
struct MissionOld dogFight2 = {
"",
"",
WALL_STYLE_STEEL, FLOOR_STYLE_BLUE, FLOOR_STYLE_WHITE, 0, 0, 0,
64, 64,
50, 50,
10, 3,
0, 0, 0, 0,
0,
{
{"", 0, 0, 0, 0, 0}
},
0, {0},
0, {0},
8,
{0, 1, 2, 3, 4, 5, 6, 7},
{10, 10, 10, 10, 10, 10, 10, 10},
0, 0,
"", "",
5, 2, 9, 4
};
// +-----------------+
// | Campaign info |
// +-----------------+
#include "files.h"
#include <missions/bem.h>
#include <missions/ogre.h>
static CampaignSettingOld df1 =
{
"Dogfight in the dungeon",
"", "",
1, &dogFight1,
0, NULL
};
static CampaignSettingOld df2 =
{
"Cubicle wars",
"", "",
1, &dogFight2,
0, NULL
};
// +-----------------------+
// | And now the code... |
// +-----------------------+
@@ -394,40 +314,6 @@ static void SetupBadguysForMission(Mission *mission)
CA_FOREACH_END()
}
int SetupBuiltinCampaign(int idx)
{
switch (idx)
{
case 0:
ConvertCampaignSetting(&gCampaign.Setting, &BEM_campaign);
break;
case 1:
ConvertCampaignSetting(&gCampaign.Setting, &OGRE_campaign);
break;
default:
ConvertCampaignSetting(&gCampaign.Setting, &OGRE_campaign);
return 0;
}
return 1;
}
int SetupBuiltinDogfight(int idx)
{
switch (idx)
{
case 0:
ConvertCampaignSetting(&gCampaign.Setting, &df1);
break;
case 1:
ConvertCampaignSetting(&gCampaign.Setting, &df2);
break;
default:
ConvertCampaignSetting(&gCampaign.Setting, &df1);
return 0;
}
return 1;
}
static void SetupObjectives(struct MissionOptions *mo, Mission *mission)
{
CA_FOREACH(const MissionObjective, mobj, mission->Objectives)

View File

@@ -232,8 +232,6 @@ void MissionInit(Mission *m);
void MissionCopy(Mission *dst, const Mission *src);
void MissionTerminate(Mission *m);
int SetupBuiltinCampaign(int index);
int SetupBuiltinDogfight(int index);
void SetupMission(
int buildTables, Mission *m, struct MissionOptions *mo, int missionIndex);
void MissionEnd(void);

View File

@@ -236,10 +236,8 @@ static void CampaignsDisplayFilename(
return;
}
const StartGameModeData *mData = subMenu->customPostInputData;
char s[255];
const char *filename = mData->Entry->Filename;
int isBuiltin = mData->Entry->IsBuiltin;
sprintf(s, "( %s )", isBuiltin ? "Internal" : filename);
char s[CDOGS_FILENAME_MAX];
sprintf(s, "( %s )", mData->Entry->Filename);
FontOpts opts = FontOptsNew();
opts.HAlign = ALIGN_CENTER;
@@ -281,7 +279,7 @@ static menu_t *MenuCreateCampaignItem(
// - White (normal) for in-progress campaigns
// - Grey for complete campaigns
MissionSave m;
AutosaveLoadMission(&gAutosave, &m, entry->Path, entry->BuiltinIndex);
AutosaveLoadMission(&gAutosave, &m, entry->Path);
if (m.MissionsCompleted == entry->NumMissions)
{
// Completed campaign

View File

@@ -1,413 +0,0 @@
/*
bem.inc - B.E.M mission.
(C)opyright Ronny Wester.
NOT covered by the GPL... ie: this is freeware
Author: $Author$
Rev: $Revision$
URL: $HeadURL$
ID: $Id$
*/
TBadGuy BEM_badguys[29] = {
{1, 0, 4, 256, 50, 0, 15, 15, 5, 1, 3, 3, 3, 13, 40, 0x2020000}
,
{1, 0, 4, 256, 50, 0, 15, 15, 1, 11, 3, 3, 3, 13, 40, 0x2020000}
,
{1, 0, 4, 256, 50, 0, 15, 15, 3, 10, 3, 3, 3, 13, 40, 0x2020000}
,
{1, 0, 6, 256, 100, 50, 0, 15, 14, 1, 7, 7, 9, 13, 20, 0x610000}
,
{1, 0, 6, 256, 100, 50, 0, 15, 14, 11, 7, 7, 9, 12, 20, 0x610000}
,
{1, 0, 3, 256, 100, 50, 0, 15, 14, 10, 7, 8, 9, 8, 20, 0x610000}
,
{1, 0, 12, 256, 100, 50, 0, 15, 14, 1, 7, 10, 9, 9, 20, 0x610000}
,
{1, 0, 16, 256, 100, 50, 0, 15, 14, 1, 9, 6, 4, 6, 20, 0x610000}
,
{1, 0, 6, 256, 100, 50, 0, 15, 14, 1, 7, 10, 9, 6, 20, 0x610000}
,
{1, 0, 6, 256, 100, 50, 0, 15, 14, 1, 7, 0, 9, 10, 20, 0x610000}
,
{1, 0, 5, 256, 35, 25, 12, 15, 13, 5, 5, 0, 5, 12, 40, 0x400}
,
{1, 0, 5, 256, 50, 40, 27, 15, 13, 6, 6, 0, 6, 12, 40, 0x0}
,
{1, 0, 5, 256, 85, 70, 27, 15, 13, 3, 3, 0, 3, 12, 40, 0x0}
,
{1, 0, 5, 256, 20, 55, 32, 15, 12, 5, 5, 0, 5, 12, 40, 0x400}
,
{1, 0, 5, 256, 35, 25, 12, 15, 15, 4, 4, 0, 4, 12, 40, 0x400}
,
{1, 0, 13, 256, 50, 50, 12, 10, 5, 8, 8, 6, 8, 12, 80, 0x800400}
,
{1, 0, 13, 384, 100, 80, 0, 10, 0, 10, 10, 2, 10, 12, 40, 0x400}
,
{1, 0, 5, 256, 35, 25, 5, 15, 14, 5, 5, 0, 5, 12, 40, 0x400}
,
{1, 0, 5, 256, 35, 25, 10, 15, 11, 4, 4, 0, 4, 12, 40, 0x400}
,
{1, 0, 5, 256, 55, 25, 0, 15, 0, 7, 7, 0, 7, 12, 40, 0x0}
,
{1, 0, 5, 256, 50, 40, 27, 15, 3, 6, 6, 0, 6, 12, 40, 0x0}
,
{1, 0, 5, 256, 35, 25, 12, 15, 13, 8, 8, 8, 8, 12, 40, 0x800}
,
{1, 0, 5, 256, 60, 25, 0, 15, 0, 8, 8, 8, 8, 12, 40, 0x800}
,
{1, 0, 9, 256, 100, 5, 0, 20, 14, 11, 7, 7, 9, 12, 20, 0x610000}
,
{1, 0, 9, 256, 100, 5, 0, 20, 14, 10, 7, 7, 9, 8, 20, 0x610000}
,
{1, 0, 11, 256, 100, 5, 0, 20, 14, 1, 7, 7, 9, 7, 20, 0x610000}
,
{1, 0, 12, 256, 100, 5, 0, 20, 14, 1, 7, 7, 9, 6, 20, 0x610000}
,
{1, 0, 16, 256, 100, 5, 0, 20, 14, 10, 7, 7, 9, 9, 20, 0x610000}
,
{1, 0, 13, 384, 80, 80, 10, 10, 7, 13, 13, 13, 13, 12, 500,
0x2800600}
};
struct MissionOld BEM_missions[9] = {
{
"They are destroying our base!",
"All of a sudden aliens started popping out of nowhere all over the place"
". Fortunately they seem quite disorganized or we would surely have lost "
"the base by now. We must eliminate this attacking force, though...",
5, 1, 3, 0, 0, 0, 48, 48, 20, 20, 10, 3,
0, 0, 0, 0,
1,
{
{
"Defeat the attack",
0, 0, 20, 15, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
3,
{0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0},
3,
{10, 13, 17, 17, 17, 0},
9,
{3, 6, 7, 16, 14, 23, 26, 27, 28, 0, 0, 0, 0, 0, 0, 0},
{40, 10, 5, 20, 30, 5, 20, 10, 5, 0, 0, 0, 0, 0, 0, 0},
10, 0x13b,
"",
"",
15, 12, 10, 0},
{
"What are they up to now?",
"Now the goggle-eyes are rampaging through a suburb! They are killing inn"
"ocent civilians for no reason...we have got to stop them!",
0, 2, 10, 0, 0, 0, 48, 48, 0, 0, 25, 2,
0, 0, 0, 0,
1,
{
{
"Eliminate the monsters",
0, 0, 20, 20, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
7,
{3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0},
6,
{10, 11, 12, 13, 17, 19},
9,
{21, 18, 16, 17, 14, 13, 9, 4, 6, 10, 0, 0, 0, 0, 0, 0},
{50, 30, 40, 5, 20, 20, 10, 50, 10, 0, 0, 0, 0, 0, 0, 0},
30, 0x13b,
"",
"",
24, 4, 18, 0},
{
"Rescue threatened scientists",
"There may be some fiendish plot behind this madness after all. Our foes "
"are attacking a little known laboratory doing research on our big-eyed o"
"pponents. The other attacks may have been diversions. Still, you never k"
"now with these critters. Enough already, we must save the staff...",
5, 5, 9, 0, 0, 0, 64, 32, 0, 0, 25, 0,
0, 0, 0, 0,
1,
{
{
"Eradicate the attacking force",
0, 0, 25, 25, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
5,
{27, 26, 25, 24, 23, 0, 0, 0, 0, 0, 0, 0},
6,
{20, 12, 18, 17, 14, 13},
9,
{0, 1, 2, 3, 6, 16, 19, 23, 25, 0, 0, 0, 0, 0, 0, 0},
{10, 10, 10, 50, 10, 50, 25, 5, 20, 0, 0, 0, 0, 0, 0, 0},
20, 0x13b,
"",
"",
24, 13, 12, 0},
{
"Enough is enough!",
"We are now in a position where we may repay the B.E.M.s for their action"
"s. We have uncovered a B.E.M. ship carrying an arsenal of rockets which "
"they are probably planning to unleash on us at the earliest moment possi"
"ble. Now, wouldn't it be nice if they were to detonate onboard instead?",
3, 4, 4, 0, 3, 3, 30, 64, 50, 10, 15, 0,
0, 0, 0, 0,
1,
{
{
"Blow up the rockets",
2, 28, 20, 15, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
12,
{21, 20, 19, 18, 17, 15, 16, 14, 13, 10, 11, 12},
0,
{0, 0, 0, 0, 0, 0},
8,
{7, 11, 22, 5, 10, 24, 38, 39, 31, 0, 0, 0, 0, 0, 0, 0},
{20, 5, 5, 10, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0},
25, 0x0,
"",
"",
9, 19, 25, 3},
{
"They are robbing a BANK???",
"They never cease to amaze me. Now they are robbing banks too...the shrin"
"k department guys think it may be something they have picked up from tel"
"evision broadcasts...you know, the archetypical bad guy so to speak. Any"
"way, we can't have bubble-eyes stealing citizens' savings, can we?",
0, 7, 10, 0, 0, 0, 48, 32, 0, 0, 20, 0,
0, 0, 0, 0,
2,
{
{
"Fend off the \"bank-robbers from space\"",
0, 0, 25, 25, 0x0},
{
"Safeguard any loot you come across",
1, 6, 6, 0, 0x1},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
7,
{3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0},
6,
{16, 15, 21, 22, 13, 17},
7,
{3, 4, 6, 14, 16, 23, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{50, 50, 10, 20, 10, 30, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0},
20, 0x13b,
"",
"",
16, 19, 6, 13},
{
"Retrieve the stolen money",
"Despite your valiant, and ultimately successful, efforts, the buggers to"
"ok off with a considerable amount of dough. Now, the city can do without"
" that kind of strain on the treasury...soooo...we will just have to retr"
"ieve the funds won't we?",
3, 4, 4, 0, 3, 3, 32, 64, 50, 10, 12, 0,
0, 0, 0, 0,
1,
{
{
"Find as much money as possible",
1, 6, 32, 25, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
12,
{10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21},
0,
{0, 0, 0, 0, 0, 0},
8,
{39, 38, 24, 22, 11, 10, 7, 5, 0, 0, 0, 0, 0, 0, 0, 0},
{5, 5, 5, 5, 5, 5, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0},
25, 0x0,
"",
"",
16, 24, 3, 18},
{
"On the offensive...",
"Okeeey...our top minds have come up with a plan to put an end to this no"
"nsens. These B.E.M. fellows, they're highly hierarchical you see...so we"
" take out the head and the body crumbles, see? You don't? Well, shut up "
"and follow orders then, will'ya?",
3, 4, 4, 0, 3, 3, 32, 64, 50, 10, 12, 0,
0, 0, 0, 0,
4,
{
{
"Steal B.E.M. technology",
1, 10, 5, 3, 0x4},
{
"Any gadget may prove helpful...",
1, 7, 2, 0, 0x5},
{
"Data files are good, too",
1, 2, 5, 0, 0x5},
{
"Blueprints are a great help!",
1, 4, 2, 0, 0x5},
{
"",
0, 0, 0, 0, 0x0}
},
12,
{22, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21},
0,
{0, 0, 0, 0, 0, 0},
8,
{39, 38, 24, 22, 11, 10, 7, 5, 0, 0, 0, 0, 0, 0, 0, 0},
{5, 5, 5, 5, 5, 5, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0},
30, 0x0,
"",
"",
18, 3, 0, 24},
{
"Board and seize an enemy vessel",
"The B.E.M. scout vessel 'Har-Har-Har' - they must be doing this just to "
"taunt us I'm sure - is vulnerable to a quick assault by a small elite fo"
"rce...hey, come back here...no, you may go to the bathroom afterwards!",
3, 4, 4, 0, 3, 3, 32, 64, 50, 10, 12, 0,
0, 0, 0, 0,
2,
{
{
"Eliminate the crew members",
0, 0, 30, 30, 0x0},
{
"Seize the remote to the bridge controls",
1, 9, 1, 1, 0x4},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
0,
{21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21},
6,
{22, 21, 18, 17, 16, 15},
8,
{39, 38, 24, 22, 11, 10, 7, 5, 0, 0, 0, 0, 0, 0, 0, 0},
{5, 5, 5, 5, 5, 5, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0},
0, 0x0,
"",
"",
24, 16, 6, 7},
{
"Mister Congeniality he/she/it ain't...",
"Actually, that remote was for the self-destruction mechanism, but you'd "
"only have been nervous had you known. What's with the sour faces? It end"
"ed well, didn't it? Anyway, I've got a treat for you. You have been chos"
"en to put an end to this conflict by nailing the head S.O.B. itself!",
3, 4, 4, 0, 3, 3, 24, 24, 10, 4, 0, 0,
0, 0, 0, 0,
1,
{
{
"Kill the Big Bug-Eye!",
0, 0, 1, 1, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
0,
{21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21},
1,
{28, 0, 0, 0, 0, 0},
7,
{39, 38, 24, 22, 11, 10, 7, 6, 0, 0, 0, 0, 0, 0, 0, 0},
{5, 5, 5, 5, 5, 5, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0},
0, 0x777,
"",
"",
18, 3, 0, 24},
};
CampaignSettingOld BEM_campaign = {
"Bug-Eyed Monsters",
"Ronny Wester",
"These irrational foes pop up now and again. Unpredictable and vicious, the"
"ir primary goal seems to be to make a nuisance of themselves rather than a"
"ctually attaining any specific goals.",
9, BEM_missions, 29, BEM_badguys
};

View File

@@ -1,707 +0,0 @@
/*
ogre.inc - Ogre Missions
(C)opyright Ronny Wester.
NOT covered by the GPL... ie: this is freeware
Author: $Author$
Rev: $Revision$
URL: $HeadURL$
ID: $Id$
*/
TBadGuy OGRE_badguys[42] = {
{1, 0, 2, 256, 50, 25, 2, 15, 1, 3, 9, 9, 9, 0, 40, 0x400}
,
{1, 0, 2, 256, 70, 35, 0, 10, 0, 6, 9, 9, 9, 1, 40, 0x400}
,
{1, 0, 2, 256, 55, 30, 20, 15, 1, 0, 9, 9, 9, 2, 40, 0x400}
,
{1, 0, 2, 256, 65, 40, 40, 10, 3, 6, 9, 9, 9, 3, 40, 0x400}
,
{1, 0, 2, 256, 70, 45, 50, 10, 4, 4, 9, 9, 9, 4, 40, 0x400}
,
{1, 0, 2, 256, 50, 25, 20, 10, 15, 3, 9, 9, 9, 5, 40, 0x400}
,
{1, 0, 2, 256, 70, 50, 15, 10, 11, 5, 9, 9, 9, 6, 40, 0x400}
,
{1, 0, 2, 256, 70, 50, 10, 10, 2, 8, 9, 9, 9, 7, 40, 0x400}
,
{1, 0, 2, 128, 95, 75, 30, 10, 4, 2, 9, 9, 9, 8, 80, 0x400}
,
{1, 0, 2, 384, 95, 75, 0, 10, 0, 9, 9, 9, 9, 9, 40, 0x400}
,
{1, 0, 2, 128, 95, 75, 50, 10, 1, 2, 9, 9, 9, 10, 80, 0x400}
,
{1, 0, 7, 256, 95, 50, 10, 5, 1, 3, 9, 5, 9, 11, 120, 0x400}
,
{1, 0, 7, 256, 95, 50, 20, 5, 15, 0, 9, 0, 9, 12, 120, 0x400}
,
{1, 0, 7, 256, 95, 75, 20, 5, 4, 8, 9, 2, 9, 13, 120, 0x400}
,
{1, 0, 7, 256, 50, 25, 30, 10, 8, 4, 9, 5, 9, 6, 120, 0x400}
,
{1, 0, 6, 256, 100, 0, 0, 10, 14, 10, 7, 7, 9, 12, 20, 0x600000}
,
{1, 0, 6, 256, 100, 0, 0, 10, 14, 1, 7, 8, 11, 10, 20, 0x600000}
,
{1, 0, 6, 256, 100, 0, 0, 10, 14, 11, 3, 3, 0, 12, 20, 0x600000}
,
{1, 0, 12, 256, 100, 0, 0, 10, 14, 1, 8, 10, 2, 8, 20, 0x600000}
,
{1, 0, 4, 256, 50, 0, 5, 10, 5, 11, 0, 0, 0, 8, 40, 0x20000}
,
{1, 0, 4, 256, 50, 0, 15, 10, 3, 1, 0, 0, 0, 8, 40, 0x20000}
,
{1, 0, 4, 256, 50, 0, 5, 10, 1, 10, 0, 0, 0, 8, 40, 0x20000}
,
{1, 0, 2, 256, 100, 0, 0, 10, 14, 10, 1, 5, 2, 12, 20, 0x600000}
,
{1, 0, 2, 256, 75, 0, 0, 15, 14, 3, 1, 0, 4, 12, 20, 0x600000}
,
{1, 0, 2, 256, 75, 0, 0, 15, 14, 6, 4, 3, 8, 12, 20, 0x600000}
,
{1, 0, 2, 256, 75, 0, 0, 15, 14, 9, 8, 7, 11, 12, 20, 0x600000}
,
{1, 0, 2, 256, 75, 0, 0, 15, 14, 11, 6, 8, 3, 11, 20, 0x600000}
,
{1, 0, 7, 256, 50, 25, 30, 5, 4, 5, 9, 1, 9, 1, 120, 0x400}
,
{1, 0, 16, 256, 100, 0, 0, 15, 14, 1, 1, 6, 4, 13, 20, 0x600000}
,
{1, 0, 7, 256, 100, 50, 0, 5, 14, 6, 9, 4, 9, 3, 400, 0x1E0400}
,
{1, 0, 2, 256, 75, 25, 52, 5, 4, 8, 12, 8, 9, 12, 80, 0x800400}
,
{1, 0, 2, 256, 75, 25, 52, 5, 15, 8, 12, 8, 9, 12, 80, 0x800400}
,
{1, 0, 2, 256, 75, 25, 52, 5, 3, 8, 12, 8, 9, 12, 80, 0x800400}
,
{1, 0, 2, 256, 70, 5, 10, 15, 4, 5, 6, 6, 6, 12, 80, 0x30400}
,
{1, 0, 2, 256, 50, 5, 15, 15, 5, 0, 6, 6, 6, 12, 80, 0x30400}
,
{1, 0, 2, 256, 50, 5, 32, 15, 8, 8, 6, 6, 6, 12, 80, 0x30400}
,
{1, 0, 7, 256, 80, 5, 0, 10, 0, 9, 6, 6, 6, 6, 120, 0x30400}
,
{1, 0, 7, 256, 75, 50, 10, 5, 1, 9, 9, 3, 9, 0, 200, 0x800600}
,
{1, 0, 7, 256, 75, 50, 10, 5, 5, 9, 9, 3, 9, 5, 200, 0x800600}
,
{1, 0, 7, 256, 75, 50, 10, 5, 8, 9, 9, 3, 9, 7, 200, 0x800600}
,
{1, 0, 7, 256, 75, 50, 10, 5, 3, 9, 9, 3, 9, 6, 200, 0x800600}
,
{1, 0, 7, 256, 75, 50, 10, 5, 4, 9, 9, 3, 9, 13, 200, 0x800600}
};
struct MissionOld OGRE_missions[16] = {
{
"Maintain integrity",
"We were taken completely by surprise and Ogre troops have overrun severa"
"l installations. We are falling back from this one right now. We will ne"
"ed to destroy several computer terminals lest they, and the information "
"they contain, fall into enemy hands.",
0, 1, 10, 0, 0, 0, 64, 32, 50, 20, 10, 2,
0, 0, 0, 0,
1,
{
{
"Destroy all terminals",
2, 26, 5, 5, 0x6},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
9,
{0, 1, 2, 21, 20, 19, 0, 1, 2, 0, 0, 0},
0,
{0, 0, 0, 0, 0, 0},
8,
{0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0},
{30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 0},
20, 0x53b,
"",
"",
13, 16, 24, 25},
{
"Retrieve the stolen data",
"Intelligence reports that the Ogres managed to backup some of the data b"
"efore you could get to the terminals. However, troops have intercepted a"
"nd are now containing the Ogre forces in possession of the data. It's a "
"stalemate at the moment. You will have to resolve the situation...",
0, 1, 8, 0, 0, 0, 64, 32, 50, 20, 10, 0,
0, 0, 0, 0,
1,
{
{
"Get the disks back",
1, 1, 5, 5, 0x4},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
5,
{0, 1, 2, 3, 21, 0, 0, 0, 0, 0, 0, 0},
0,
{0, 0, 0, 0, 0, 0},
8,
{0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0},
{30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 0},
20, 0x13b,
"",
"",
13, 4, 7, 0},
{
"Intelligence gathering",
"This whole situation is decidedly odd. The Ogres have never been hostile"
" towards the Confed before. Besides, these forces are far from the best "
"of what the Ogre Empire can bring forth. We really need to find out what"
"'s going on. See what you can dig up.",
0, 8, 3, 0, 0, 0, 64, 32, 30, 25, 15, 0,
0, 0, 0, 0,
1,
{
{
"Find some documents",
1, 11, 2, 2, 0x4},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
6,
{0, 1, 2, 3, 4, 19, 0, 0, 0, 0, 0, 0},
0,
{0, 0, 0, 0, 0, 0},
8,
{0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0},
{30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 0},
20, 0x13b,
"",
"",
6, 14, 4, 0},
{
"Search'n'destroy",
"Intelligence are going through the data you brought back. Now I need you"
" for something different. A particulary aggressive Ogre commander are gi"
"ving us a lot of trouble in this area. We have established his current w"
"hereabouts, a nearby Ogre outpost. We need you to take him out.",
4, 6, 7, 1, 1, 1, 48, 48, 50, 20, 5, 3,
0, 0, 0, 0,
1,
{
{
"Kill Miihn-Bha'Stadh",
0, 0, 1, 1, 0x1},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
7,
{0, 1, 2, 3, 4, 5, 6, 0, 0, 0, 0, 0},
1,
{12, 0, 0, 0, 0, 0},
8,
{8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0},
{30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 0},
23, 0x0,
"",
"",
7, 14, 22, 0},
{
"Gather more information",
"Intelligence has been all over the data you brought back. Something's no"
"t right here and we want to know what's up. Unfortunately, your data - w"
"hile most valuable - leaves a lot of blanks to be filled. We need more d"
"ata and you will have to get it for us.",
0, 8, 1, 0, 0, 0, 64, 64, 50, 50, 15, 2,
0, 0, 0, 0,
2,
{
{
"Steal Ogre documents",
1, 0, 2, 2, 0x4},
{
"...and any other data you can find",
1, 1, 7, 3, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
7,
{1, 2, 3, 4, 5, 21, 20, 20, 0, 0, 0, 0},
0,
{0, 0, 0, 0, 0, 0},
8,
{0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0},
{30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 0},
21, 0x13b,
"",
"",
4, 13, 6, 0},
{
"Locate the Ogre chemical weapons facility",
"The bio-weapons they are using are causing severe causalties amongst our"
" troops. Our scientists are unable to come up with an antidote. They do "
"tell us the stuff is rather unstable and cannot be stored for long. They"
" must be manufacturing it in the vicinity. Try and find out where it is."
"",
1, 2, 10, 1, 1, 1, 64, 64, 40, 10, 15, 2,
0, 0, 0, 0,
1,
{
{
"Find the starmaps",
1, 4, 3, 3, 0x4},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
6,
{0, 1, 2, 3, 5, 6, 6, 0, 0, 0, 0, 0},
0,
{0, 0, 0, 0, 0, 0},
8,
{8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0},
{30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 0},
25, 0x0,
"",
"",
2, 4, 6, 7},
{
"Wreck the Ogre laboratories",
"The data you brought back has provided us with the location of the Ogres"
" bio-chemical weapons manufacturing plant. If you can disable this facil"
"ity you will be saving many lives and help our efforts to restore piece "
"to this region again.",
4, 2, 7, 1, 1, 1, 64, 64, 25, 25, 20, 2,
0, 0, 0, 0,
1,
{
{
"Destroy all laboratory equipment",
2, 25, 7, 7, 0x4},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
7,
{0, 1, 2, 3, 5, 6, 7, 7, 0, 0, 0, 0},
0,
{0, 0, 0, 0, 0, 0},
8,
{8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0},
{30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 0},
20, 0x0,
"",
"",
14, 20, 23, 0},
{
"Destroy their ammunition",
"The destruction of the bio-weapons lab was a substantial setback for the"
" Ogre forces. Now, as they are forced to retreat, a major ammunitions de"
"pot has had most of its garrison transferred elsewhere. It is still heav"
"ily guarded, but it is too good a target to pass up.",
1, 6, 10, 1, 1, 1, 64, 64, 50, 25, 10, 3,
0, 0, 0, 0,
2,
{
{
"Destroy ammo containers",
2, 22, 12, 7, 0x0},
{
"Destroy fuel barrels",
2, 27, 15, 10, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
5,
{0, 2, 3, 4, 1, 10, 0, 0, 0, 0, 0, 0},
0,
{0, 0, 0, 0, 0, 0},
8,
{8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0},
{30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 0},
25, 0x0,
"",
"",
7, 13, 12, 0},
{
"Retake installation",
"Your efforts have helped weaken the Ogre forces in the region and we are"
" now recapturing our lost installations. At this very moment our troops "
"are launching an assault. You are assigned the task of seeking out and e"
"liminating the Ogre commanders. With them out of the picture, the rest s"
"hould be an easy task.",
0, 5, 3, 0, 0, 0, 64, 64, 50, 50, 10, 0,
0, 0, 0, 0,
1,
{
{
"Take out as many squad leaders as possible",
0, 0, 5, 3, 0x1},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
10,
{7, 9, 10, 0, 2, 3, 4, 21, 19, 20, 0, 0},
2,
{11, 13, 0, 0, 0, 0},
8,
{0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0},
{30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 0},
30, 0x0,
"",
"",
16, 26, 19, 0},
{
"Counter strike",
"We have successfully recaptured all installations previously held by Ogr"
"e invaders. We are now on the offensive and our goal is now primarily to"
" cripple the Ogre war machinery in this area. We have data on an Ogre de"
"pot that has been stripped of most of its defences...",
1, 2, 7, 1, 1, 1, 48, 48, 25, 10, 15, 2,
0, 0, 0, 0,
4,
{
{
"Eliminate enemy officers",
0, 0, 5, 1, 0x1},
{
"Blow up their gunpowder",
2, 8, 10, 5, 0x0},
{
"Burn their fuel",
2, 27, 8, 4, 0x0},
{
"Destroy their ammunition",
2, 22, 12, 6, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
5,
{0, 1, 2, 3, 9, 0, 0, 0, 0, 0, 0, 0},
3,
{13, 12, 11, 0, 0, 0},
8,
{9, 10, 11, 12, 13, 14, 15, 17, 31, 0, 0, 0, 0, 0, 0, 0},
{15, 15, 15, 5, 20, 30, 10, 20, 0, 0, 0, 0, 0, 0, 0, 0},
25, 0x0,
"",
"",
2, 22, 21, 0},
{
"Wet work",
"We now have the opportunity to strike a devastating blow to the Ogre war"
" machinery! Intelligence has uncovered the current location of Ogre high"
" command of this sector. The area has a high civilian presence, I will r"
"emind you that we do not wage war on civilians!",
4, 6, 10, 1, 1, 1, 54, 54, 25, 25, 20, 1,
0, 0, 0, 0,
1,
{
{
"Assassinate Ogre high command",
0, 0, 4, 4, 0x1},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
9,
{1, 2, 3, 26, 25, 24, 23, 22, 0, 9, 0, 0},
2,
{27, 14, 0, 0, 0, 0},
9,
{9, 10, 12, 13, 14, 15, 17, 18, 20, 0, 0, 0, 0, 0, 0, 0},
{20, 15, 10, 10, 20, 10, 10, 15, 10, 0, 0, 0, 0, 0, 0, 0},
30, 0x0,
"",
"",
16, 12, 5, 4},
{
"Terror attack!",
"In retaliation for our attack against Ogre high command, Ogre forces are"
" attacking a housing complex for the civilian workers who are repairing "
"damages caused by this conflict. This is a breach of all protocols and t"
"horoughly dishonorable and detestful act! Repel the attack!",
5, 5, 1, 0, 0, 0, 64, 32, 0, 0, 20, 0,
0, 0, 0, 0,
1,
{
{
"Eliminate all attackers",
0, 0, 40, 40, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
5,
{18, 17, 16, 15, 28, 28, 19, 0, 0, 0, 0, 0},
5,
{4, 3, 2, 7, 9, 9},
11,
{0, 1, 2, 4, 3, 5, 6, 16, 19, 23, 26, 0, 0, 0, 0, 0},
{15, 15, 15, 15, 15, 15, 10, 10, 10, 5, 20, 0, 0, 0, 0, 0},
20, 0x13b,
"",
"",
13, 25, 10, 0},
{
"The defector",
"We have learned that a senior Ogre officer wishes to defect. Faced with "
"the same questions we have been contemplating all along he did some rese"
"arch and believes this campaign to be an unauthorized action by a renega"
"de faction within the Ogre fleet! This is a matter of crucial importance"
"!",
4, 2, 7, 1, 1, 1, 48, 48, 15, 15, 15, 1,
0, 0, 0, 0,
1,
{
{
"Get the officer here safely",
3, 29, 1, 1, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
5,
{2, 3, 4, 10, 0, 0, 0, 0, 0, 0, 0, 0},
0,
{0, 0, 0, 0, 0, 0},
11,
{2, 1, 8, 9, 11, 15, 12, 10, 14, 13, 24, 0, 0, 0, 0, 0},
{15, 15, 5, 15, 10, 20, 5, 15, 15, 5, 5, 0, 0, 0, 0, 0},
15, 0x0,
"",
"",
14, 12, 20, 0},
{
"Kidnapping attempt!",
"A party of Ogre Elite Warriors from the renegade faction is attempting t"
"o recapture the defecting officer. Apparently the information he holds c"
"an give them very big problems with their masters back home. You must fo"
"il their plans!",
0, 1, 3, 0, 0, 0, 48, 32, 15, 14, 10, 1,
0, 0, 0, 0,
1,
{
{
"Defeat the Ogre assault team",
0, 0, 12, 12, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
3,
{21, 20, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0},
3,
{32, 31, 30, 13, 11, 0},
12,
{0, 3, 4, 5, 6, 16, 17, 19, 26, 23, 1, 2, 0, 0, 0, 0},
{20, 20, 10, 10, 5, 10, 25, 10, 25, 5, 10, 10, 0, 0, 0, 0},
10, 0x0,
"",
"",
16, 10, 19, 0},
{
"The Enemy Stronghold",
"Officer Naijz-Gaij has been in contact with his masters, who were more t"
"han slightly upset. As you've noticed Ogre Imperial forces have been arr"
"iving all day and are engaging the hostiles as we speak. We are now moun"
"ting a joint attack against the enemy headquarters. Ogre Imperials, wear"
"ing red body armor, are your allies in this venture.",
4, 6, 10, 1, 2, 2, 48, 48, 15, 30, 12, 0,
0, 0, 0, 0,
2,
{
{
"Eliminate all resistance",
0, 0, 30, 30, 0x0},
{
"Find the controls to the inner defenses",
1, 9, 1, 1, 0x4},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
11,
{36, 35, 34, 33, 21, 20, 19, 23, 25, 26, 24, 0},
6,
{4, 32, 31, 9, 10, 6},
14,
{8, 9, 10, 12, 13, 11, 14, 17, 22, 24, 25, 31, 23, 27, 0, 0},
{10, 20, 10, 5, 15, 10, 15, 10, 5, 5, 5, 5, 5, 10, 0, 0},
10, 0x0,
"",
"",
14, 2, 0, 1},
{
"The last stand of the renegades",
"Good work, you are truly an honor to this outfit! Now ready yourselves f"
"or action once more as we face the remains of the renegade forces. The r"
"enegade commanders are cornered and will not yield. Our Ogre liasons tel"
"l us these are some mighty heavy dudes. They must be crushed like the ve"
"rmin they are, or they will surely rise again...",
5, 7, 6, 1, 2, 2, 48, 48, 40, 15, 14, 0,
0, 0, 0, 0,
1,
{
{
"Annihilate the renegade commanders",
0, 0, 15, 15, 0x1},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0},
{
"",
0, 0, 0, 0, 0x0}
},
7,
{36, 35, 34, 33, 21, 19, 20, 0, 0, 0, 0, 0},
5,
{41, 37, 38, 39, 40, 14},
12,
{8, 9, 10, 11, 17, 22, 27, 25, 24, 32, 30, 31, 0, 0, 0, 0},
{15, 10, 10, 15, 10, 5, 15, 15, 10, 5, 5, 5, 0, 0, 0, 0},
25, 0x777,
"",
"",
14, 13, 5, 0},
};
CampaignSettingOld OGRE_campaign = {
"Ogre Rampage",
"Ronny Wester",
"Suddenly, Confederate installations come under sudden, and most unexpected"
", attack from Ogre troops. There has been no animosity between the Ogre Em"
"pire and the Confederation for ages. What's up?",
16, OGRE_missions, 42, OGRE_badguys
};

View File

@@ -134,8 +134,7 @@ static void Campaign(GraphicsDevice *graphics, CampaignOptions *co)
else if (IsPasswordAllowed(co->Entry.Mode))
{
MissionSave m;
AutosaveLoadMission(
&gAutosave, &m, co->Entry.Path, co->Entry.BuiltinIndex);
AutosaveLoadMission(&gAutosave, &m, co->Entry.Path);
co->MissionIndex = EnterPassword(graphics, &m);
}
else

View File

@@ -80,7 +80,7 @@ FEATURE(2, "Save and load")
memset(&mission1, 0, sizeof mission1);
CSTRDUP(mission1.Campaign.Path, "mission.cdogscpn");
strcpy(mission1.Password, "password");
AutosaveAddMission(&autosave1, &mission1, 0);
AutosaveAddMission(&autosave1, &mission1);
AutosaveSave(&autosave1, "tmp");
GIVEN_END
@@ -138,7 +138,7 @@ FEATURE(3, "Mission autosaves")
GIVEN_END
WHEN("I add a new mission autosave to it")
AutosaveAddMission(&autosave, &mission1, 0);
AutosaveAddMission(&autosave, &mission1);
WHEN_END
THEN("I should be able to find the mission in the autosave");
@@ -150,33 +150,6 @@ FEATURE(3, "Mission autosaves")
}
SCENARIO_END
SCENARIO("Add builtin mission autosave")
{
Autosave autosave;
MissionSave mission1, mission2;
int builtinIndex = 3;
GIVEN("an autosave and a builtin mission")
AutosaveInit(&autosave);
memset(&mission1, 0, sizeof mission1);
mission1.Campaign.IsBuiltin = true;
mission1.Campaign.BuiltinIndex = builtinIndex;
strcpy(mission1.Password, "password");
GIVEN_END
WHEN("I add a new mission autosave to it")
AutosaveAddMission(&autosave, &mission1, 0);
WHEN_END
THEN("I should be able to find the mission in the autosave");
AutosaveLoadMission(
&autosave, &mission2, mission1.Campaign.Path, builtinIndex);
SHOULD_STR_EQUAL(mission2.Campaign.Path, mission1.Campaign.Path);
SHOULD_INT_EQUAL(mission2.Campaign.BuiltinIndex, builtinIndex);
SHOULD_STR_EQUAL(mission2.Password, mission1.Password);
THEN_END
}
SCENARIO_END
SCENARIO("Add existing mission autosave")
{
Autosave autosave;
@@ -187,13 +160,13 @@ FEATURE(3, "Mission autosaves")
CSTRDUP(mission1.Campaign.Path, "mission.cdogscpn");
strcpy(mission1.Password, "password");
mission1.MissionsCompleted = 3;
AutosaveAddMission(&autosave, &mission1, 0);
AutosaveAddMission(&autosave, &mission1);
GIVEN_END
WHEN("I add the same mission but with new details, and less missions completed")
strcpy(mission1.Password, "new password");
mission1.MissionsCompleted = 2;
AutosaveAddMission(&autosave, &mission1, 0);
AutosaveAddMission(&autosave, &mission1);
WHEN_END
THEN("I should be able to find the mission in the autosave, with the new details, but the greatest missions completed");
@@ -218,7 +191,7 @@ FEATURE(3, "Mission autosaves")
GIVEN_END
WHEN("I add a new mission autosave to it")
AutosaveAddMission(&autosave, &mission, 0);
AutosaveAddMission(&autosave, &mission);
WHEN_END
THEN("the last mission will be the same as the new mission");