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 += player.o
OBJS += quadtree.o OBJS += quadtree.o
OBJS += radar.o resources.o rope.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 += testMission.o textures.o text.o title.o transition.o trophies.o
OBJS += util.o OBJS += util.o
OBJS += waypoints.o widgets.o OBJS += waypoints.o widgets.o

View File

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

View File

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

View File

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

View File

@ -10,63 +10,63 @@
"texture" : "gfx/capitalShips/infCorvette02/core.png", "texture" : "gfx/capitalShips/infCorvette02/core.png",
"x" : 0, "x" : 0,
"y" : -80, "y" : -80,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 150, "health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/component1.png", "texture" : "gfx/capitalShips/infCorvette02/component1.png",
"x" : -32, "x" : -32,
"y" : -75, "y" : -75,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 150, "health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/component1.png", "texture" : "gfx/capitalShips/infCorvette02/component1.png",
"x" : 32, "x" : 32,
"y" : -75, "y" : -75,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 150, "health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/component2.png", "texture" : "gfx/capitalShips/infCorvette02/component2.png",
"x" : -95, "x" : -95,
"y" : 195, "y" : 195,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 150, "health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/component2.png", "texture" : "gfx/capitalShips/infCorvette02/component2.png",
"x" : 95, "x" : 95,
"y" : 195, "y" : 195,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 150, "health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/component3.png", "texture" : "gfx/capitalShips/infCorvette02/component3.png",
"x" : -30, "x" : -30,
"y" : 210, "y" : 210,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 150, "health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/component3.png", "texture" : "gfx/capitalShips/infCorvette02/component3.png",
"x" : 30, "x" : 30,
"y" : 210, "y" : 210,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 150, "health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/component4.png", "texture" : "gfx/capitalShips/infCorvette02/component4.png",
"x" : -24, "x" : -24,
"y" : -20, "y" : -20,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 150, "health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/component4.png", "texture" : "gfx/capitalShips/infCorvette02/component4.png",
"x" : 24, "x" : 24,
"y" : -20, "y" : -20,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
} }
], ],
"guns" : [ "guns" : [
@ -77,7 +77,7 @@
"y" : 200, "y" : 200,
"reloadTime" : 10, "reloadTime" : 10,
"type" : "BT_PLASMA", "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", "aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999 "missiles" : 9999
}, },
@ -88,7 +88,7 @@
"y" : 200, "y" : 200,
"reloadTime" : 10, "reloadTime" : 10,
"type" : "BT_PLASMA", "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", "aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999 "missiles" : 9999
}, },
@ -99,7 +99,7 @@
"y" : 200, "y" : 200,
"reloadTime" : 10, "reloadTime" : 10,
"type" : "BT_PLASMA", "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", "aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999 "missiles" : 9999
}, },
@ -110,7 +110,7 @@
"y" : 0, "y" : 0,
"reloadTime" : 10, "reloadTime" : 10,
"type" : "BT_PLASMA", "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", "aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999 "missiles" : 9999
}, },
@ -121,7 +121,7 @@
"y" : 100, "y" : 100,
"reloadTime" : 10, "reloadTime" : 10,
"type" : "BT_PLASMA", "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", "aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999 "missiles" : 9999
}, },
@ -132,7 +132,7 @@
"y" : -125, "y" : -125,
"reloadTime" : 40, "reloadTime" : 40,
"type" : "BT_ROCKET", "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", "aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999 "missiles" : 9999
}, },
@ -143,7 +143,7 @@
"y" : -125, "y" : -125,
"reloadTime" : 40, "reloadTime" : 40,
"type" : "BT_ROCKET", "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", "aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999 "missiles" : 9999
} }
@ -154,28 +154,28 @@
"texture" : "gfx/capitalShips/infCorvette02/engine1.png", "texture" : "gfx/capitalShips/infCorvette02/engine1.png",
"x" : -75, "x" : -75,
"y" : 275, "y" : 275,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 150, "health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/engine2.png", "texture" : "gfx/capitalShips/infCorvette02/engine2.png",
"x" : -20, "x" : -20,
"y" : 275, "y" : 275,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 150, "health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/engine3.png", "texture" : "gfx/capitalShips/infCorvette02/engine3.png",
"x" : 20, "x" : 20,
"y" : 275, "y" : 275,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 150, "health" : 150,
"texture" : "gfx/capitalShips/infCorvette02/engine4.png", "texture" : "gfx/capitalShips/infCorvette02/engine4.png",
"x" : 75, "x" : 75,
"y" : 275, "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", "texture" : "gfx/capitalShips/unfCorvette01/core.png",
"x" : 0, "x" : 0,
"y" : -100, "y" : -100,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 50, "health" : 50,
"texture" : "gfx/capitalShips/unfCorvette01/component1.png", "texture" : "gfx/capitalShips/unfCorvette01/component1.png",
"x" : -42, "x" : -42,
"y" : -36, "y" : -36,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 50, "health" : 50,
"texture" : "gfx/capitalShips/unfCorvette01/component1.png", "texture" : "gfx/capitalShips/unfCorvette01/component1.png",
"x" : 42, "x" : 42,
"y" : -36, "y" : -36,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 50, "health" : 50,
"texture" : "gfx/capitalShips/unfCorvette01/component2.png", "texture" : "gfx/capitalShips/unfCorvette01/component2.png",
"x" : -40, "x" : -40,
"y" : -8, "y" : -8,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 50, "health" : 50,
"texture" : "gfx/capitalShips/unfCorvette01/component2.png", "texture" : "gfx/capitalShips/unfCorvette01/component2.png",
"x" : 40, "x" : 40,
"y" : -8, "y" : -8,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 50, "health" : 50,
"texture" : "gfx/capitalShips/unfCorvette01/component3.png", "texture" : "gfx/capitalShips/unfCorvette01/component3.png",
"x" : -40, "x" : -40,
"y" : 68, "y" : 68,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 50, "health" : 50,
"texture" : "gfx/capitalShips/unfCorvette01/component4.png", "texture" : "gfx/capitalShips/unfCorvette01/component4.png",
"x" : 40, "x" : 40,
"y" : 68, "y" : 68,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 50, "health" : 50,
"texture" : "gfx/capitalShips/unfCorvette01/component5.png", "texture" : "gfx/capitalShips/unfCorvette01/component5.png",
"x" : -40, "x" : -40,
"y" : 128, "y" : 128,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 50, "health" : 50,
"texture" : "gfx/capitalShips/unfCorvette01/component5.png", "texture" : "gfx/capitalShips/unfCorvette01/component5.png",
"x" : 40, "x" : 40,
"y" : 128, "y" : 128,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
} }
], ],
"engines" : [ "engines" : [
@ -75,28 +75,28 @@
"texture" : "gfx/capitalShips/unfCorvette01/engine1.png", "texture" : "gfx/capitalShips/unfCorvette01/engine1.png",
"x" : -112, "x" : -112,
"y" : 281, "y" : 281,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 150, "health" : 150,
"texture" : "gfx/capitalShips/unfCorvette01/engine1.png", "texture" : "gfx/capitalShips/unfCorvette01/engine1.png",
"x" : 112, "x" : 112,
"y" : 281, "y" : 281,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 150, "health" : 150,
"texture" : "gfx/capitalShips/unfCorvette01/engine2.png", "texture" : "gfx/capitalShips/unfCorvette01/engine2.png",
"x" : -34, "x" : -34,
"y" : 268, "y" : 268,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
}, },
{ {
"health" : 150, "health" : 150,
"texture" : "gfx/capitalShips/unfCorvette01/engine2.png", "texture" : "gfx/capitalShips/unfCorvette01/engine2.png",
"x" : 34, "x" : 34,
"y" : 268, "y" : 268,
"flags" : "EF_TAKES_DAMAGE+EF_STATIC" "flags" : "EF_NO_KILL_INC+EF_TAKES_DAMAGE+EF_STATIC"
} }
], ],
"guns" : [ "guns" : [
@ -107,7 +107,7 @@
"y" : -250, "y" : -250,
"reloadTime" : 40, "reloadTime" : 40,
"type" : "BT_ROCKET", "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", "aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999 "missiles" : 9999
}, },
@ -118,7 +118,7 @@
"y" : -250, "y" : -250,
"reloadTime" : 40, "reloadTime" : 40,
"type" : "BT_ROCKET", "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", "aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999 "missiles" : 9999
}, },
@ -129,7 +129,7 @@
"y" : 20, "y" : 20,
"reloadTime" : 10, "reloadTime" : 10,
"type" : "BT_PLASMA", "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" "aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE"
}, },
{ {
@ -139,7 +139,7 @@
"y" : 20, "y" : 20,
"reloadTime" : 10, "reloadTime" : 10,
"type" : "BT_PLASMA", "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" "aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE"
}, },
{ {
@ -149,7 +149,7 @@
"y" : 100, "y" : 100,
"reloadTime" : 10, "reloadTime" : 10,
"type" : "BT_PLASMA", "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", "aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999 "missiles" : 9999
}, },
@ -160,7 +160,7 @@
"y" : 100, "y" : 100,
"reloadTime" : 10, "reloadTime" : 10,
"type" : "BT_PLASMA", "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", "aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE",
"missiles" : 9999 "missiles" : 9999
}, },
@ -171,7 +171,7 @@
"y" : 180, "y" : 180,
"reloadTime" : 10, "reloadTime" : 10,
"type" : "BT_PLASMA", "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" "aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE"
}, },
{ {
@ -181,7 +181,7 @@
"y" : 180, "y" : 180,
"reloadTime" : 10, "reloadTime" : 10,
"type" : "BT_PLASMA", "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" "aiFlags" : "AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE"
} }
] ]

View File

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

View File

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

View File

@ -49,12 +49,16 @@
"y" : 25 "y" : 25
} }
], ],
"script" : [ "spawners" : [
{ {
"function" : "INTERVAL 30", "name" : "spawner",
"lines" : [ "types" : "Dart",
"SPAWN_FIGHTERS Dart SIDE_PIRATE 1 OFFSCREEN" "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", "name" : "Civilian",
"health" : 15, "health" : 15,
"shield" : 0,
"speed" : 2, "speed" : 2,
"reloadTime" : 0,
"shieldRechargeRate" : 0,
"texture" : "gfx/craft/civilian01.png", "texture" : "gfx/craft/civilian01.png",
"flags" : "EF_MISSION_TARGET+EF_RETREATING+EF_TAKES_DAMAGE", "flags" : "EF_MISSION_TARGET+EF_RETREATING+EF_TAKES_DAMAGE",
"aiFlags" : "AIF_GOAL_JUMPGATE+AIF_AVOIDS_COMBAT+AIF_FOLLOWS_PLAYER" "aiFlags" : "AIF_GOAL_JUMPGATE+AIF_AVOIDS_COMBAT+AIF_FOLLOWS_PLAYER"

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,10 +1,8 @@
{ {
"name" : "StaticDart", "name" : "StaticDart",
"health" : 15, "health" : 15,
"shield" : 0,
"speed" : 0, "speed" : 0,
"reloadTime" : 24, "reloadTime" : 24,
"shieldRechargeRate" : 0,
"texture" : "gfx/fighters/dart01.png", "texture" : "gfx/fighters/dart01.png",
"flags" : "EF_TAKES_DAMAGE" "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", "name" : "UnarmedDart",
"health" : 15, "health" : 15,
"shield" : 0,
"speed" : 2.1, "speed" : 2.1,
"reloadTime" : 24, "reloadTime" : 24,
"shieldRechargeRate" : 0,
"texture" : "gfx/fighters/dart01.png", "texture" : "gfx/fighters/dart01.png",
"flags" : "EF_TAKES_DAMAGE" "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", "name" : "Rebel Assault #1",
"description" : "", "description" : "",
"requires" : 28, "requires" : 99,
"background" : "gfx/backgrounds/background03.jpg", "background" : "gfx/backgrounds/background03.jpg",
"planet" : "gfx/planets/spirit.png", "planet" : "gfx/planets/spirit.png",
"music" : "music/battle/InnerCore_Low.ogg", "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 "" msgstr ""
"Project-Id-Version: TBFTSS: The Pandoran War\n" "Project-Id-Version: TBFTSS: The Pandoran War\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: ???\n"
"Last-Translator: ???\n" "Last-Translator: ???\n"
"Language-Team: ???\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 ...." 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 "" 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()) 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) if ((self->aiFlags & AIF_COVERS_RETREAT) && rand() % 3)
{ {
return; return;

View File

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

View File

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

View File

@ -203,7 +203,7 @@ static void checkCollisions(Bullet *b)
} }
/* assuming that health <= 0 will always mean killed */ /* 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_ENEMIES_KILLED_PLAYER]++;
battle.stats[STAT_EPIC_KILL_STREAK]++; battle.stats[STAT_EPIC_KILL_STREAK]++;

View File

@ -297,13 +297,15 @@ static void die(void)
self->alive = ALIVE_DEAD; 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) for (e = battle.entityHead.next ; e != NULL ; e = e->next)
{ {
if (e->owner == self) 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 char **getFileList(char *dir, int *count);
extern int getJSONValue(cJSON *node, char *name, int defValue); extern int getJSONValue(cJSON *node, char *name, int defValue);
extern char *getTranslatedString(char *string); extern char *getTranslatedString(char *string);
extern void addLargeExplosion(void);
extern Battle battle; extern Battle battle;
extern Entity *self; 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) void addMissileExplosion(Bullet *b)
{ {
int i; int i;

View File

@ -327,9 +327,12 @@ void doFighter(void)
{ {
if (self->side != SIDE_ALLIES) 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 else
{ {
@ -715,10 +718,10 @@ static void loadFighterDef(char *filename)
STRNCPY(e->name, cJSON_GetObjectItem(root, "name")->valuestring, MAX_NAME_LENGTH); STRNCPY(e->name, cJSON_GetObjectItem(root, "name")->valuestring, MAX_NAME_LENGTH);
STRNCPY(e->defName, e->name, MAX_NAME_LENGTH); STRNCPY(e->defName, e->name, MAX_NAME_LENGTH);
e->health = e->maxHealth = cJSON_GetObjectItem(root, "health")->valueint; 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->speed = cJSON_GetObjectItem(root, "speed")->valuedouble;
e->reloadTime = cJSON_GetObjectItem(root, "reloadTime")->valueint; e->reloadTime = getJSONValue(root, "reloadTime", 0);
e->shieldRechargeRate = cJSON_GetObjectItem(root, "shieldRechargeRate")->valueint; e->shieldRechargeRate = getJSONValue(root, "shieldRechargeRate", 0);
e->texture = getTexture(cJSON_GetObjectItem(root, "texture")->valuestring); e->texture = getTexture(cJSON_GetObjectItem(root, "texture")->valuestring);
SDL_QueryTexture(e->texture, NULL, NULL, &e->w, &e->h); 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); void activateObjectives(char *objectives);
extern int showingMessageBoxes(void); extern int showingMessageBoxes(void);
extern char *getTranslatedString(char *string); extern char *getTranslatedString(char *string);
extern void spawnScriptFighter(char *fighters, char *side, int num, char *location);
extern void activateNextWaypoint(int id); extern void activateNextWaypoint(int id);
extern void activateJumpgate(int activate); 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 */ /* 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; 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_TARGET (2 << 13)
#define EF_AI_LEADER (2 << 14) #define EF_AI_LEADER (2 << 14)
#define EF_ROPED_ATTACHED (2 << 15) #define EF_ROPED_ATTACHED (2 << 15)
#define EF_NO_KILL_INC (2 << 16)
#define AIF_NONE 0 #define AIF_NONE 0
#define AIF_FOLLOWS_PLAYER (2 << 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 loadEntities(cJSON *node);
static void loadItems(cJSON *node); static void loadItems(cJSON *node);
static void loadLocations(cJSON *node); static void loadLocations(cJSON *node);
static void loadSpawners(cJSON *node);
static unsigned long hashcode(const char *str); static unsigned long hashcode(const char *str);
static void loadEpicData(cJSON *node); static void loadEpicData(cJSON *node);
static char *getAutoBackground(char *filename); static char *getAutoBackground(char *filename);
@ -161,6 +162,8 @@ void loadMission(char *filename)
loadLocations(cJSON_GetObjectItem(root, "locations")); loadLocations(cJSON_GetObjectItem(root, "locations"));
loadSpawners(cJSON_GetObjectItem(root, "spawners"));
if (cJSON_GetObjectItem(root, "epic")) if (cJSON_GetObjectItem(root, "epic"))
{ {
loadEpicData(cJSON_GetObjectItem(root, "epic")); loadEpicData(cJSON_GetObjectItem(root, "epic"));
@ -585,6 +588,7 @@ static void loadEntities(cJSON *node)
y = (cJSON_GetObjectItem(node, "y")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_HEIGHT; y = (cJSON_GetObjectItem(node, "y")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_HEIGHT;
name = NULL; name = NULL;
groupName = NULL; groupName = NULL;
flags = -1;
name = getJSONValueStr(node, "name", NULL); name = getJSONValueStr(node, "name", NULL);
groupName = getJSONValueStr(node, "groupName", NULL); groupName = getJSONValueStr(node, "groupName", NULL);
@ -757,14 +761,43 @@ static void loadLocations(cJSON *node)
STRNCPY(l->name, cJSON_GetObjectItem(node, "name")->valuestring, MAX_NAME_LENGTH); 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->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->y = (cJSON_GetObjectItem(node, "y")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_HEIGHT;
l->size = cJSON_GetObjectItem(node, "size")->valueint; l->size = cJSON_GetObjectItem(node, "size")->valueint;
l->active = active = getJSONValue(node, "active", 1);
active = getJSONValue(node, "active", 1);
l->x += (SCREEN_WIDTH / 2); l->x += (SCREEN_WIDTH / 2);
l->y += (SCREEN_HEIGHT / 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; node = node->next;
} }

View File

@ -26,6 +26,7 @@ typedef struct Entity Entity;
typedef struct Bullet Bullet; typedef struct Bullet Bullet;
typedef struct Debris Debris; typedef struct Debris Debris;
typedef struct Effect Effect; typedef struct Effect Effect;
typedef struct Spawner Spawner;
typedef struct Objective Objective; typedef struct Objective Objective;
typedef struct StarSystem StarSystem; typedef struct StarSystem StarSystem;
typedef struct Challenge Challenge; typedef struct Challenge Challenge;
@ -302,6 +303,21 @@ struct Quadtree {
Quadtree *node[4]; 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 { typedef struct {
int entId; int entId;
SDL_Point camera; SDL_Point camera;
@ -331,6 +347,7 @@ typedef struct {
Effect effectHead, *effectTail; Effect effectHead, *effectTail;
Objective objectiveHead, *objectiveTail; Objective objectiveHead, *objectiveTail;
Location locationHead, *locationTail; Location locationHead, *locationTail;
Spawner spawnerHead, *spawnerTail;
struct cJSON *missionJSON; struct cJSON *missionJSON;
unsigned int stats[STAT_MAX]; unsigned int stats[STAT_MAX];
Quadtree quadtree; Quadtree quadtree;

View File

@ -60,6 +60,7 @@ void initLookups(void)
addLookup("EF_SECONDARY_TARGET", EF_SECONDARY_TARGET); addLookup("EF_SECONDARY_TARGET", EF_SECONDARY_TARGET);
addLookup("EF_AI_TARGET", EF_AI_TARGET); addLookup("EF_AI_TARGET", EF_AI_TARGET);
addLookup("EF_AI_LEADER", EF_AI_LEADER); addLookup("EF_AI_LEADER", EF_AI_LEADER);
addLookup("EF_NO_KILL_INC", EF_NO_KILL_INC);
addLookup("AIF_NONE", AIF_NONE); addLookup("AIF_NONE", AIF_NONE);
addLookup("AIF_MOVES_TO_PLAYER", AIF_MOVES_TO_PLAYER); 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) function recurseDir($dir)