Merge remote-tracking branch 'origin/develop' into trophies

# Conflicts:
#	data/challenges/10.json
#	locale/tbftss.pot
#	src/battle/battle.c
#	src/battle/battle.h
#	src/battle/script.h
#	src/galaxy/mission.c
This commit is contained in:
Sweeney 2016-03-15 12:19:32 +00:00
commit 1938c6714c
43 changed files with 471 additions and 167 deletions

View File

@ -24,7 +24,7 @@ OBJS += objectives.o options.o
OBJS += player.o
OBJS += quadtree.o
OBJS += radar.o resources.o rope.o
OBJS += save.o script.o sound.o starfield.o starSystems.o stats.o
OBJS += save.o script.o sound.o spawners.o starfield.o starSystems.o stats.o
OBJS += testMission.o textures.o text.o title.o transition.o trophies.o
OBJS += util.o
OBJS += waypoints.o widgets.o

View File

@ -10,56 +10,56 @@
"texture" : "gfx/capitalShips/csnCorvette01/core.png",
"x" : 0,
"y" : -140,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 100,
"texture" : "gfx/capitalShips/csnCorvette01/component1.png",
"x" : 0,
"y" : -200,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 100,
"texture" : "gfx/capitalShips/csnCorvette01/component2.png",
"x" : -34,
"y" : 25,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 100,
"texture" : "gfx/capitalShips/csnCorvette01/component2.png",
"x" : 34,
"y" : 25,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 100,
"texture" : "gfx/capitalShips/csnCorvette01/component2.png",
"x" : -16,
"y" : 25,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 100,
"texture" : "gfx/capitalShips/csnCorvette01/component2.png",
"x" : 16,
"y" : 25,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 100,
"texture" : "gfx/capitalShips/csnCorvette01/component3.png",
"x" : -23,
"y" : 242,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 100,
"texture" : "gfx/capitalShips/csnCorvette01/component3.png",
"x" : 23,
"y" : 242,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}
],
"engines" : [
@ -68,35 +68,35 @@
"texture" : "gfx/capitalShips/csnCorvette01/engine1.png",
"x" : -150,
"y" : 293,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/csnCorvette01/engine1.png",
"x" : 150,
"y" : 293,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/csnCorvette01/engine1.png",
"x" : -90,
"y" : 293,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/csnCorvette01/engine1.png",
"x" : 90,
"y" : 293,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/csnCorvette01/engine1.png",
"x" : 0,
"y" : 296,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}
],
"guns" : [
@ -107,7 +107,7 @@
"y" : 200,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -118,7 +118,7 @@
"y" : 200,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -129,7 +129,7 @@
"y" : 100,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -140,7 +140,7 @@
"y" : 100,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -151,7 +151,7 @@
"y" : -50,
"reloadTime" : 40,
"type" : "BT_ROCKET",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -162,7 +162,7 @@
"y" : 175,
"reloadTime" : 40,
"type" : "BT_ROCKET",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
}

View File

@ -10,49 +10,49 @@
"texture" : "gfx/capitalShips/csnCorvette02/core.png",
"x" : 0,
"y" : -140,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 100,
"texture" : "gfx/capitalShips/csnCorvette02/component1.png",
"x" : -105,
"y" : 195,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 100,
"texture" : "gfx/capitalShips/csnCorvette02/component1.png",
"x" : 105,
"y" : 195,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 100,
"texture" : "gfx/capitalShips/csnCorvette02/component2.png",
"x" : -25,
"y" : 18,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 100,
"texture" : "gfx/capitalShips/csnCorvette02/component3.png",
"x" : 25,
"y" : 18,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 100,
"texture" : "gfx/capitalShips/csnCorvette02/component4.png",
"x" : -67,
"y" : -117,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 100,
"texture" : "gfx/capitalShips/csnCorvette02/component5.png",
"x" : 67,
"y" : -117,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}
],
"engines" : [
@ -61,28 +61,28 @@
"texture" : "gfx/capitalShips/csnCorvette02/engine1.png",
"x" : -70,
"y" : 253,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/csnCorvette02/engine2.png",
"x" : -25,
"y" : 247,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/csnCorvette02/engine2.png",
"x" : 25,
"y" : 247,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/csnCorvette02/engine1.png",
"x" : 70,
"y" : 253,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}
],
"guns" : [
@ -93,7 +93,7 @@
"y" : -225,
"reloadTime" : 40,
"type" : "BT_ROCKET",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -104,7 +104,7 @@
"y" : -60,
"reloadTime" : 40,
"type" : "BT_ROCKET",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -115,7 +115,7 @@
"y" : -60,
"reloadTime" : 40,
"type" : "BT_ROCKET",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -126,7 +126,7 @@
"y" : 70,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -137,7 +137,7 @@
"y" : 110,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -148,7 +148,7 @@
"y" : 110,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -159,7 +159,7 @@
"y" : 240,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -170,7 +170,7 @@
"y" : 240,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
}

View File

@ -10,56 +10,56 @@
"texture" : "gfx/capitalShips/infCorvette01/component1.png",
"x" : -27,
"y" : 100,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/infCorvette01/component2.png",
"x" : 27,
"y" : 100,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/infCorvette01/component3.png",
"x" : 20,
"y" : -17,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/infCorvette01/component3.png",
"x" : -20,
"y" : -17,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/infCorvette01/component4.png",
"x" : -21,
"y" : -64,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/infCorvette01/component5.png",
"x" : 21,
"y" : -64,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/infCorvette01/component6.png",
"x" : -22,
"y" : -243,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/infCorvette01/component6.png",
"x" : 22,
"y" : -243,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}
],
"engines" : [
@ -68,21 +68,21 @@
"texture" : "gfx/capitalShips/infCorvette01/engine1.png",
"x" : -50,
"y" : 285,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/infCorvette01/engine1.png",
"x" : 50,
"y" : 285,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/infCorvette01/engine2.png",
"x" : 0,
"y" : 280,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}
],
"guns" : [
@ -93,7 +93,7 @@
"y" : 170,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -104,7 +104,7 @@
"y" : -150,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -115,7 +115,7 @@
"y" : 50,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE"
},
{
@ -125,7 +125,7 @@
"y" : 50,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE"
},
{
@ -135,7 +135,7 @@
"y" : -60,
"reloadTime" : 40,
"type" : "BT_ROCKET",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE"
},
{
@ -145,7 +145,7 @@
"y" : -60,
"reloadTime" : 40,
"type" : "BT_ROCKET",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE"
}
]

View File

@ -10,63 +10,63 @@
"texture" : "gfx/capitalShips/infCorvette02/core.png",
"x" : 0,
"y" : -80,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/component1.png",
"x" : -32,
"y" : -75,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/component1.png",
"x" : 32,
"y" : -75,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/component2.png",
"x" : -95,
"y" : 195,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/component2.png",
"x" : 95,
"y" : 195,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/component3.png",
"x" : -30,
"y" : 210,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/component3.png",
"x" : 30,
"y" : 210,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/component4.png",
"x" : -24,
"y" : -20,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/component4.png",
"x" : 24,
"y" : -20,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}
],
"guns" : [
@ -77,7 +77,7 @@
"y" : 200,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -88,7 +88,7 @@
"y" : 200,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -99,7 +99,7 @@
"y" : 200,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -110,7 +110,7 @@
"y" : 0,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -121,7 +121,7 @@
"y" : 100,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -132,7 +132,7 @@
"y" : -125,
"reloadTime" : 40,
"type" : "BT_ROCKET",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -143,7 +143,7 @@
"y" : -125,
"reloadTime" : 40,
"type" : "BT_ROCKET",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
}
@ -154,28 +154,28 @@
"texture" : "gfx/capitalShips/infCorvette02/engine1.png",
"x" : -75,
"y" : 275,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/engine2.png",
"x" : -20,
"y" : 275,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/engine3.png",
"x" : 20,
"y" : 275,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/engine4.png",
"x" : 75,
"y" : 275,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}
]
}

View File

@ -10,63 +10,63 @@
"texture" : "gfx/capitalShips/unfCorvette01/core.png",
"x" : 0,
"y" : -100,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 50,
"texture" : "gfx/capitalShips/unfCorvette01/component1.png",
"x" : -42,
"y" : -36,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 50,
"texture" : "gfx/capitalShips/unfCorvette01/component1.png",
"x" : 42,
"y" : -36,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 50,
"texture" : "gfx/capitalShips/unfCorvette01/component2.png",
"x" : -40,
"y" : -8,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 50,
"texture" : "gfx/capitalShips/unfCorvette01/component2.png",
"x" : 40,
"y" : -8,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 50,
"texture" : "gfx/capitalShips/unfCorvette01/component3.png",
"x" : -40,
"y" : 68,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 50,
"texture" : "gfx/capitalShips/unfCorvette01/component4.png",
"x" : 40,
"y" : 68,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 50,
"texture" : "gfx/capitalShips/unfCorvette01/component5.png",
"x" : -40,
"y" : 128,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 50,
"texture" : "gfx/capitalShips/unfCorvette01/component5.png",
"x" : 40,
"y" : 128,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}
],
"engines" : [
@ -75,28 +75,28 @@
"texture" : "gfx/capitalShips/unfCorvette01/engine1.png",
"x" : -112,
"y" : 281,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/unfCorvette01/engine1.png",
"x" : 112,
"y" : 281,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/unfCorvette01/engine2.png",
"x" : -34,
"y" : 268,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/unfCorvette01/engine2.png",
"x" : 34,
"y" : 268,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}
],
"guns" : [
@ -107,7 +107,7 @@
"y" : -250,
"reloadTime" : 40,
"type" : "BT_ROCKET",
"flags" : "EF_TAKES_DAMAGE+EF_STATIC+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -118,7 +118,7 @@
"y" : -250,
"reloadTime" : 40,
"type" : "BT_ROCKET",
"flags" : "EF_TAKES_DAMAGE+EF_STATIC+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -129,7 +129,7 @@
"y" : 20,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE"
},
{
@ -139,7 +139,7 @@
"y" : 20,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE"
},
{
@ -149,7 +149,7 @@
"y" : 100,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -160,7 +160,7 @@
"y" : 100,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -171,7 +171,7 @@
"y" : 180,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE"
},
{
@ -181,7 +181,7 @@
"y" : 180,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE"
}
]

View File

@ -10,49 +10,49 @@
"texture" : "gfx/capitalShips/unfCorvette01/core.png",
"x" : 0,
"y" : -100,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 50,
"texture" : "gfx/capitalShips/unfCorvette02/component1.png",
"x" : -22,
"y" : -24,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 50,
"texture" : "gfx/capitalShips/unfCorvette02/component1.png",
"x" : 22,
"y" : -24,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 50,
"texture" : "gfx/capitalShips/unfCorvette02/component2.png",
"x" : -86,
"y" : 188,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 50,
"texture" : "gfx/capitalShips/unfCorvette02/component2.png",
"x" : 86,
"y" : 188,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 50,
"texture" : "gfx/capitalShips/unfCorvette02/component3.png",
"x" : -43,
"y" : 151,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 50,
"texture" : "gfx/capitalShips/unfCorvette02/component3.png",
"x" : 43,
"y" : 151,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}
],
"engines" : [
@ -61,28 +61,28 @@
"texture" : "gfx/capitalShips/unfCorvette02/engine1.png",
"x" : -100,
"y" : 286,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/unfCorvette02/engine1.png",
"x" : 100,
"y" : 286,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/unfCorvette02/engine2.png",
"x" : -35,
"y" : 289,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
},
{
"health" : 150,
"texture" : "gfx/capitalShips/unfCorvette02/engine2.png",
"x" : 35,
"y" : 289,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC"
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}
],
"guns" : [
@ -93,7 +93,7 @@
"y" : -250,
"reloadTime" : 40,
"type" : "BT_ROCKET",
"flags" : "EF_TAKES_DAMAGE+EF_STATIC+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -104,7 +104,7 @@
"y" : 30,
"reloadTime" : 40,
"type" : "BT_ROCKET",
"flags" : "EF_TAKES_DAMAGE+EF_STATIC+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -115,7 +115,7 @@
"y" : 30,
"reloadTime" : 40,
"type" : "BT_ROCKET",
"flags" : "EF_TAKES_DAMAGE+EF_STATIC+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999
},
@ -126,7 +126,7 @@
"y" : 30,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE"
},
{
@ -136,7 +136,7 @@
"y" : -70,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE"
},
{
@ -146,7 +146,7 @@
"y" : -70,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE"
},
{
@ -156,7 +156,7 @@
"y" : 170,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE"
},
{
@ -166,7 +166,7 @@
"y" : 210,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE"
},
{
@ -176,7 +176,7 @@
"y" : 210,
"reloadTime" : 10,
"type" : "BT_PLASMA",
"flags" : "EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_SECONDARY_TARGET",
"aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE"
}
]

View File

@ -1,6 +1,6 @@
{
"name" : "Defend Jumpgate Point",
"description" : "Defend Jumpgate Point",
"name" : "Defend Jumpgate",
"description" : "Defend Jumpgate",
"background" : "AUTO",
"planet" : "AUTO",
"music" : "AUTO",

View File

@ -49,12 +49,16 @@
"y" : 25
}
],
"script" : [
"spawners" : [
{
"function" : "INTERVAL 30",
"lines" : [
"SPAWN_FIGHTERS Dart SIDE_PIRATE 1 OFFSCREEN"
]
"name" : "spawner",
"types" : "Dart",
"side" : "SIDE_PIRATE",
"interval" : 30,
"limit" : 0,
"total" : 0,
"step" : 1,
"offscreen" : 1
}
]
}

49
data/challenges/11.json Normal file
View File

@ -0,0 +1,49 @@
{
"name" : "Destroy INF Klondike and INF Canfield",
"description" : "Destroy INF Klondike and INF Canfield",
"background" : "AUTO",
"planet" : "AUTO",
"music" : "AUTO",
"player" : {
"type" : "ATAF",
"side" : "SIDE_ALLIES",
"pilot" : "-",
"squadron" : "-",
"x" : 25,
"y" : 25
},
"challenge" : {
"killLimit" : 2,
"timeLimit" : 90,
"challenges" : [
{
"type" : "CHALLENGE_TIME",
"value" : 50
},
{
"type" : "CHALLENGE_TIME",
"value" : 90
},
{
"type" : "CHALLENGE_SHOT_ACCURACY",
"value" : 90
}
]
},
"capitalShips" : [
{
"name" : "INF Klondike",
"types" : "INF Corvette 01",
"side" : "SIDE_PANDORAN",
"x" : 23,
"y" : 23
},
{
"name" : "INF Canfield",
"types" : "INF Corvette 01",
"side" : "SIDE_PANDORAN",
"x" : 27,
"y" : 27
}
]
}

View File

@ -1,10 +1,7 @@
{
"name" : "Civilian",
"health" : 15,
"shield" : 0,
"speed" : 2,
"reloadTime" : 0,
"shieldRechargeRate" : 0,
"texture" : "gfx/craft/civilian01.png",
"flags" : "EF_MISSION_TARGET+EF_RETREATING+EF_TAKES_DAMAGE",
"aiFlags" : "AIF_GOAL_JUMPGATE+AIF_AVOIDS_COMBAT+AIF_FOLLOWS_PLAYER"

View File

@ -1,10 +1,8 @@
{
"name" : "INF Tug",
"health" : 50,
"shield" : 0,
"speed" : 1.85,
"reloadTime" : 10,
"shieldRechargeRate" : 0,
"texture" : "gfx/craft/infTug.png",
"flags" : "EF_HAS_ROPE+EF_TAKES_DAMAGE",
"aiFlags" : "AIF_AVOIDS_COMBAT+AIF_TOWS"

View File

@ -4,7 +4,6 @@
"shield" : 50,
"speed" : 1.5,
"reloadTime" : 10,
"shieldRechargeRate" : 0,
"texture" : "gfx/craft/munitionsTransport.png",
"flags" : "EF_TAKES_DAMAGE",
"aiFlags" : "AIF_AVOIDS_COMBAT"

View File

@ -3,7 +3,6 @@
"health" : 15,
"shield" : 15,
"speed" : 2,
"reloadTime" : 0,
"shieldRechargeRate" : 60,
"texture" : "gfx/craft/shuttle.png",
"flags" : "EF_COLLECTS_ITEMS+EF_TAKES_DAMAGE+EF_NO_EPIC",

View File

@ -1,10 +1,8 @@
{
"name" : "Tug",
"health" : 50,
"shield" : 0,
"speed" : 1.85,
"reloadTime" : 10,
"shieldRechargeRate" : 0,
"texture" : "gfx/craft/tug.png",
"guns" : [
{

View File

@ -1,10 +1,8 @@
{
"name" : "CannonDart",
"health" : 15,
"shield" : 0,
"speed" : 2.1,
"reloadTime" : 24,
"shieldRechargeRate" : 0,
"texture" : "gfx/fighters/dart01.png",
"guns" : [
{

View File

@ -1,10 +1,8 @@
{
"name" : "Dart",
"health" : 15,
"shield" : 0,
"speed" : 2.1,
"reloadTime" : 24,
"shieldRechargeRate" : 0,
"texture" : "gfx/fighters/dart01.png",
"guns" : [
{

View File

@ -1,10 +1,8 @@
{
"name" : "MissileDart",
"health" : 15,
"shield" : 0,
"speed" : 2.1,
"reloadTime" : 24,
"shieldRechargeRate" : 0,
"texture" : "gfx/fighters/dart01.png",
"missiles" : 999,
"flags" : "EF_TAKES_DAMAGE"

View File

@ -1,10 +1,8 @@
{
"name" : "SimpleDart",
"health" : 15,
"shield" : 0,
"speed" : 2.1,
"reloadTime" : 24,
"shieldRechargeRate" : 0,
"texture" : "gfx/fighters/dart01.png",
"guns" : [
{

View File

@ -1,10 +1,8 @@
{
"name" : "StaticDart",
"health" : 15,
"shield" : 0,
"speed" : 0,
"reloadTime" : 24,
"shieldRechargeRate" : 0,
"texture" : "gfx/fighters/dart01.png",
"flags" : "EF_TAKES_DAMAGE"
}

View File

@ -0,0 +1,15 @@
{
"name" : "Swarmer",
"health" : 5,
"speed" : 2,
"reloadTime" : 8,
"texture" : "gfx/fighters/swarmer.png",
"guns" : [
{
"type" : "BT_PARTICLE",
"x" : 0,
"y" : 0
}
],
"flags" : "EF_TAKES_DAMAGE"
}

View File

@ -1,10 +1,8 @@
{
"name" : "UnarmedDart",
"health" : 15,
"shield" : 0,
"speed" : 2.1,
"reloadTime" : 24,
"shieldRechargeRate" : 0,
"texture" : "gfx/fighters/dart01.png",
"flags" : "EF_TAKES_DAMAGE"
}

View File

@ -0,0 +1,26 @@
{
"name" : "Clarke Defence #5",
"description" : "",
"requires" : 28,
"background" : "gfx/backgrounds/background06.jpg",
"planet" : "gfx/planets/bluePlanet.png",
"music" : "music/battle/heroism.ogg",
"unwinnable" : 1,
"objectives" : [
{
"description" : "Eliminate all enemy forces",
"targetName" : "Enemy",
"targetValue" : 1,
"targetType" : "TT_DESTROY",
"isEliminateAll" : 1
}
],
"player" : {
"type" : "Lynx",
"side" : "SIDE_ALLIES",
"pilot" : "-",
"squadron" : "-",
"x" : 25,
"y" : 45
}
}

View File

@ -1,7 +1,7 @@
{
"name" : "Rebel Assault #1",
"description" : "",
"requires" : 28,
"requires" : 99,
"background" : "gfx/backgrounds/background03.jpg",
"planet" : "gfx/planets/spirit.png",
"music" : "music/battle/InnerCore_Low.ogg",

BIN
gfx/fighters/swarmer.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: TBFTSS: The Pandoran War\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-03-12 15:00:11+0000\n"
"POT-Creation-Date: 2016-03-13 10:54:24+0000\n"
"PO-Revision-Date: ???\n"
"Last-Translator: ???\n"
"Language-Team: ???\n"
@ -1216,3 +1216,30 @@ msgstr ""
msgid "Likewise. Maybe we'll get it do it again some day, though a part of me really hopes we won't need to ...."
msgstr ""
msgid "Destroy all Darts"
msgstr ""
msgid "Destroy all Lynxes"
msgstr ""
msgid "Disable all targets"
msgstr ""
msgid "60 second battle"
msgstr ""
msgid "Pass all Waypoints"
msgstr ""
msgid "Defend Jumpgate"
msgstr ""
msgid "Collect Packages"
msgstr ""
msgid "Rescue Civilians"
msgstr ""
msgid "Destroy INF Klondike and INF Canfield"
msgstr ""

View File

@ -65,7 +65,7 @@ void doAI(void)
if ((self->aiFlags & AIF_GOAL_JUMPGATE) && nearJumpgate())
{
/* near jumpgate point, but you might decide to continue to fight, anyway */
/* near jumpgate, but you might decide to continue to fight, anyway */
if ((self->aiFlags & AIF_COVERS_RETREAT) && rand() % 3)
{
return;

View File

@ -47,6 +47,7 @@ void initBattle(void)
battle.effectTail = &battle.effectHead;
battle.objectiveTail = &battle.objectiveHead;
battle.locationTail = &battle.locationHead;
battle.spawnerTail = &battle.spawnerHead;
app.delegate.logic = &logic;
app.delegate.draw = &draw;
@ -151,6 +152,8 @@ static void doBattle(void)
if (player != NULL)
{
doSpawners();
doLocations();
doMessageBox();
@ -158,10 +161,10 @@ static void doBattle(void)
if (battle.status == MS_IN_PROGRESS)
{
doScript();
if (battle.stats[STAT_TIME]++ % FPS == 0)
{
runScriptTimeFunctions();
runScriptFunction("TIME %d", battle.stats[STAT_TIME]);
}
}
}
@ -388,6 +391,7 @@ void destroyBattle(void)
Effect *e;
Objective *o;
Location *l;
Spawner *s;
while (battle.entityHead.next)
{
@ -437,6 +441,14 @@ void destroyBattle(void)
}
battle.locationTail = &battle.locationHead;
while (battle.spawnerHead.next)
{
s = battle.spawnerHead.next;
battle.spawnerHead.next = s->next;
free(s);
}
battle.spawnerTail = &battle.spawnerHead;
cJSON_Delete(battle.missionJSON);
resetHud();

View File

@ -85,6 +85,8 @@ extern void updateAccuracyStats(unsigned int *stats);
extern void clearInput(void);
extern void runScriptTimeFunctions(void);
extern void awardPostMissionTrophies(void);
extern void runScriptFunction(const char *format, ...);
extern void doSpawners(void);
extern App app;
extern Battle battle;

View File

@ -203,7 +203,7 @@ static void checkCollisions(Bullet *b)
}
/* assuming that health <= 0 will always mean killed */
if (e->health <= 0 && b->owner == player)
if (e->health <= 0 && b->owner == player && (!(e->flags & EF_NO_KILL_INC)))
{
battle.stats[STAT_ENEMIES_KILLED_PLAYER]++;
battle.stats[STAT_EPIC_KILL_STREAK]++;

View File

@ -297,13 +297,15 @@ static void die(void)
self->alive = ALIVE_DEAD;
addDebris(self->x, self->y, 50);
addLargeExplosion();
addDebris(self->x, self->y, 12);
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
{
if (e->owner == self)
{
e->health = 0;
e->alive = ALIVE_DEAD;
}
}

View File

@ -48,6 +48,7 @@ extern void updateObjective(char *name, int type);
extern char **getFileList(char *dir, int *count);
extern int getJSONValue(cJSON *node, char *name, int defValue);
extern char *getTranslatedString(char *string);
extern void addLargeExplosion(void);
extern Battle battle;
extern Entity *self;

View File

@ -284,6 +284,40 @@ void addSmallExplosion(void)
}
}
void addLargeExplosion(void)
{
int i;
Effect *e;
for (i = 0 ; i < 64 ; i++)
{
e = malloc(sizeof(Effect));
memset(e, 0, sizeof(Effect));
battle.effectTail->next = e;
battle.effectTail = e;
e->type = EFFECT_TEXTURE;
e->x = self->x + rand() % 255 - rand() % 255;
e->y = self->y + rand() % 255 - rand() % 255;
e->dx = (rand() % 25) - (rand() % 25);
e->dx *= 0.01;
e->dy = (rand() % 25) - (rand() % 25);
e->dy *= 0.01;
e->texture = explosionTexture;
e->size = 128 + (rand() % 512);
e->r = 255;
setRandomFlameHue(e);
e->a = 128 + (rand() % 128);
e->health = e->a;
e->x -= e->size / 2;
e->y -= e->size / 2;
}
}
void addMissileExplosion(Bullet *b)
{
int i;

View File

@ -327,9 +327,12 @@ void doFighter(void)
{
if (self->side != SIDE_ALLIES)
{
battle.stats[STAT_ENEMIES_KILLED]++;
if (!(self->flags & EF_NO_KILL_INC))
{
battle.stats[STAT_ENEMIES_KILLED]++;
runScriptFunction("ENEMIES_KILLED %d", battle.stats[STAT_ENEMIES_KILLED]);
runScriptFunction("ENEMIES_KILLED %d", battle.stats[STAT_ENEMIES_KILLED]);
}
}
else
{
@ -715,10 +718,10 @@ static void loadFighterDef(char *filename)
STRNCPY(e->name, cJSON_GetObjectItem(root, "name")->valuestring, MAX_NAME_LENGTH);
STRNCPY(e->defName, e->name, MAX_NAME_LENGTH);
e->health = e->maxHealth = cJSON_GetObjectItem(root, "health")->valueint;
e->shield = e->maxShield = cJSON_GetObjectItem(root, "shield")->valueint;
e->shield = e->maxShield = getJSONValue(root, "shield", 0);
e->speed = cJSON_GetObjectItem(root, "speed")->valuedouble;
e->reloadTime = cJSON_GetObjectItem(root, "reloadTime")->valueint;
e->shieldRechargeRate = cJSON_GetObjectItem(root, "shieldRechargeRate")->valueint;
e->reloadTime = getJSONValue(root, "reloadTime", 0);
e->shieldRechargeRate = getJSONValue(root, "shieldRechargeRate", 0);
e->texture = getTexture(cJSON_GetObjectItem(root, "texture")->valuestring);
SDL_QueryTexture(e->texture, NULL, NULL, &e->w, &e->h);

View File

@ -34,7 +34,6 @@ extern void activateLocations(char *locations);
void activateObjectives(char *objectives);
extern int showingMessageBoxes(void);
extern char *getTranslatedString(char *string);
extern void spawnScriptFighter(char *fighters, char *side, int num, char *location);
extern void activateNextWaypoint(int id);
extern void activateJumpgate(int activate);

69
src/battle/spawners.c Normal file
View File

@ -0,0 +1,69 @@
/*
Copyright (C) 2015-2016 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "spawners.h"
void doSpawners(void)
{
Entity *e;
Spawner *s;
char *type;
int i, num;
for (s = battle.spawnerHead.next ; s != NULL ; s = s->next)
{
if (s->active && --s->time <= 0)
{
num = s->step;
if (s->limit)
{
num = MIN(s->step, s->total);
s->total -= num;
}
for (i = 0 ; i < num ; i++)
{
type = s->types[rand() % s->numTypes];
e = spawnFighter(type, 0, 0, s->side);
if (s->offscreen)
{
e->x = player->x;
e->y = player->y;
}
else
{
e->x = rand() % 2 ? 0 : BATTLE_AREA_WIDTH;
e->y = rand() % 2 ? 0 : BATTLE_AREA_HEIGHT;
}
e->x += (rand() % 2) ? -SCREEN_WIDTH : SCREEN_WIDTH;
e->y += (rand() % 2) ? -SCREEN_HEIGHT : SCREEN_HEIGHT;
e->aiFlags |= AIF_UNLIMITED_RANGE;
}
s->time = s->interval;
}
}
}

26
src/battle/spawners.h Normal file
View File

@ -0,0 +1,26 @@
/*
Copyright (C) 2015-2016 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
extern Entity *spawnFighter(char *name, int x, int y, int side);
extern Battle battle;
extern Entity *player;

View File

@ -109,7 +109,7 @@ static int challengeFinished(void)
}
/* disabled enemies count as killed during challenges - not player exclusive, but no need to worry about AI contributions here */
if (game.currentMission->challengeData.killLimit > 0 && (battle.stats[STAT_ENEMIES_KILLED_PLAYER] + battle.stats[STAT_ENEMIES_DISABLED]) >= game.currentMission->challengeData.killLimit)
if (game.currentMission->challengeData.killLimit > 0 && (battle.stats[STAT_ENEMIES_KILLED_PLAYER] + battle.stats[STAT_CAPITAL_SHIPS_DESTROYED] + battle.stats[STAT_ENEMIES_DISABLED]) >= game.currentMission->challengeData.killLimit)
{
return 1;
}

View File

@ -96,6 +96,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define EF_AI_TARGET (2 << 13)
#define EF_AI_LEADER (2 << 14)
#define EF_ROPED_ATTACHED (2 << 15)
#define EF_NO_KILL_INC (2 << 16)
#define AIF_NONE 0
#define AIF_FOLLOWS_PLAYER (2 << 0)

View File

@ -27,6 +27,7 @@ static void loadCapitalShips(cJSON *node);
static void loadEntities(cJSON *node);
static void loadItems(cJSON *node);
static void loadLocations(cJSON *node);
static void loadSpawners(cJSON *node);
static unsigned long hashcode(const char *str);
static void loadEpicData(cJSON *node);
static char *getAutoBackground(char *filename);
@ -161,6 +162,8 @@ void loadMission(char *filename)
loadLocations(cJSON_GetObjectItem(root, "locations"));
loadSpawners(cJSON_GetObjectItem(root, "spawners"));
if (cJSON_GetObjectItem(root, "epic"))
{
loadEpicData(cJSON_GetObjectItem(root, "epic"));
@ -585,13 +588,14 @@ static void loadEntities(cJSON *node)
y = (cJSON_GetObjectItem(node, "y")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_HEIGHT;
name = NULL;
groupName = NULL;
flags = -1;
name = getJSONValueStr(node, "name", NULL);
groupName = getJSONValueStr(node, "groupName", NULL);
number = getJSONValue(node, "number", 1);
active = getJSONValue(node, "active", 1);
scatter = getJSONValue(node, "scatter", 1);
if (cJSON_GetObjectItem(node, "flags"))
{
flags = flagsToLong(cJSON_GetObjectItem(node, "flags")->valuestring, &addFlags);
@ -624,7 +628,7 @@ static void loadEntities(cJSON *node)
{
STRNCPY(e->groupName, groupName, MAX_NAME_LENGTH);
}
if (flags != -1)
{
if (addFlags)
@ -757,14 +761,43 @@ static void loadLocations(cJSON *node)
STRNCPY(l->name, cJSON_GetObjectItem(node, "name")->valuestring, MAX_NAME_LENGTH);
l->x = (cJSON_GetObjectItem(node, "x")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_WIDTH;
l->y = (cJSON_GetObjectItem(node, "y")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_HEIGHT;
l->size = cJSON_GetObjectItem(node, "size")->valueint;
active = getJSONValue(node, "active", 1);
l->active = active = getJSONValue(node, "active", 1);
l->x += (SCREEN_WIDTH / 2);
l->y += (SCREEN_HEIGHT / 2);
l->active = active;
node = node->next;
}
}
}
static void loadSpawners(cJSON *node)
{
int active;
Spawner *s;
if (node)
{
node = node->child;
while (node)
{
s = malloc(sizeof(Spawner));
memset(s, 0, sizeof(Spawner));
battle.spawnerTail->next = s;
battle.spawnerTail = s;
STRNCPY(s->name, cJSON_GetObjectItem(node, "name")->valuestring, MAX_NAME_LENGTH);
s->types = toTypeArray(cJSON_GetObjectItem(node, "types")->valuestring, &s->numTypes);
s->side = lookup(cJSON_GetObjectItem(node, "side")->valuestring);
s->interval = cJSON_GetObjectItem(node, "interval")->valueint * FPS;
s->limit = cJSON_GetObjectItem(node, "limit")->valueint;
s->total = cJSON_GetObjectItem(node, "total")->valueint;
s->step = cJSON_GetObjectItem(node, "step")->valueint;
s->offscreen = getJSONValue(node, "offscreen", 0);
s->active = active = getJSONValue(node, "active", 1);
node = node->next;
}

View File

@ -26,6 +26,7 @@ typedef struct Entity Entity;
typedef struct Bullet Bullet;
typedef struct Debris Debris;
typedef struct Effect Effect;
typedef struct Spawner Spawner;
typedef struct Objective Objective;
typedef struct StarSystem StarSystem;
typedef struct Challenge Challenge;
@ -302,6 +303,21 @@ struct Quadtree {
Quadtree *node[4];
};
struct Spawner {
char name[MAX_NAME_LENGTH];
char **types;
int numTypes;
int side;
int time;
int interval;
int limit;
int total;
int step;
int offscreen;
int active;
Spawner *next;
};
typedef struct {
int entId;
SDL_Point camera;
@ -331,6 +347,7 @@ typedef struct {
Effect effectHead, *effectTail;
Objective objectiveHead, *objectiveTail;
Location locationHead, *locationTail;
Spawner spawnerHead, *spawnerTail;
struct cJSON *missionJSON;
unsigned int stats[STAT_MAX];
Quadtree quadtree;

View File

@ -23,7 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
static Lookup head;
static Lookup *tail;
static void addLookup(char *name, long value);
static void addLookup(char *name, long value);
void initLookups(void)
{
@ -60,6 +60,7 @@ void initLookups(void)
addLookup("EF_SECONDARY_TARGET", EF_SECONDARY_TARGET);
addLookup("EF_AI_TARGET", EF_AI_TARGET);
addLookup("EF_AI_LEADER", EF_AI_LEADER);
addLookup("EF_NO_KILL_INC", EF_NO_KILL_INC);
addLookup("AIF_NONE", AIF_NONE);
addLookup("AIF_MOVES_TO_PLAYER", AIF_MOVES_TO_PLAYER);

View File

@ -109,6 +109,10 @@ function extractJSON($filename)
}
}
}
else if (strpos($filename, "challenges") !== false)
{
addString($json->{"description"});
}
}
function recurseDir($dir)