From bb892c1efe4c3bf72ab80f3e2e236fd31826ff8c Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 9 Mar 2016 23:18:40 +0000 Subject: [PATCH 01/17] Added new HUD icons. --- gfx/hud/clock.png | Bin 0 -> 359 bytes gfx/hud/objectives.png | Bin 0 -> 417 bytes src/battle/hud.c | 7 +++++++ 3 files changed, 7 insertions(+) create mode 100644 gfx/hud/clock.png create mode 100644 gfx/hud/objectives.png diff --git a/gfx/hud/clock.png b/gfx/hud/clock.png new file mode 100644 index 0000000000000000000000000000000000000000..978612df48a49436f96ef414f0b16449941ee098 GIT binary patch literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xawj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&pIsnM2fC{4d9gN}!NriEBiObAE1aYF-J0b5UwyNotBh zd1gt5g1e`0KzJjcI8f1fPZ!4!jq^(<9n5txC?C&=2Eq7rF z5q8XU-S~Z(<#WcZ*Z715&st`_ x_tl?X{QPuL+}y|KrWfy#ZK!vBH+MokrHUquJ;OXk;vd$@?2>{RvgxvrD literal 0 HcmV?d00001 diff --git a/gfx/hud/objectives.png b/gfx/hud/objectives.png new file mode 100644 index 0000000000000000000000000000000000000000..d106699bce98b63a28878ea4650d877b44075cf8 GIT binary patch literal 417 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xawj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&pIsnL|uUNj0hc0Z>S?#5JPCIX^cyHLrxhxhOTUBsE2$ zJhLQ2!QIn0AiR-JoPmLn)6>NpnD3bTd}AeXv*kxleZQRcOnf%zILXdGvkijv9moIw^rvx$79l2NiY|fOR8{2rF%WMtXw_@v~ zIftXXHCrv8FMm77cyD=+p~Z8FWT1v)9z7p_Z@-q*v+%p$ImxZpJTw(MqqLKGzSaKU zw)4GpGEdf852d9p*}QAFawsZrHb^K>vN%8av&}@89zh1r7J-QD!i&52challengeData.isChallenge) { + blit(objectives, (SCREEN_WIDTH / 2) - 50, 14, 0); drawText(SCREEN_WIDTH / 2, 10, 16, TA_CENTER, colors.white, "%d / %d", battle.numObjectivesComplete, battle.numObjectivesTotal); } else { if (game.currentMission->challengeData.timeLimit) { + blit(clock, (SCREEN_WIDTH / 2) - 50, 14, 0); drawText(SCREEN_WIDTH / 2, 10, 16, TA_CENTER, colors.white, timeToString(game.currentMission->challengeData.timeLimit - battle.stats[STAT_TIME], 0)); if (game.currentMission->challengeData.itemLimit) @@ -420,6 +426,7 @@ static void drawObjectives(void) else { drawText(SCREEN_WIDTH / 2, 10, 16, TA_CENTER, colors.white, timeToString(battle.stats[STAT_TIME], 0)); + blit(clock, (SCREEN_WIDTH / 2) - 50, 14, 0); } } } From 16c8f813898b461cf5fb9ba759a6b817bb493180 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 9 Mar 2016 23:19:10 +0000 Subject: [PATCH 02/17] Play sound effects for control config widgets. --- src/system/widgets.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/system/widgets.c b/src/system/widgets.c index d3942b4..c5fa49a 100644 --- a/src/system/widgets.c +++ b/src/system/widgets.c @@ -109,7 +109,7 @@ void drawWidgets(const char *group) if (mouseOver && selectedWidget != w) { - if (w->type == WT_BUTTON) + if (w->type == WT_BUTTON || w->type == WT_CONTROL_CONFIG) { playSound(SND_GUI_CLICK); } @@ -262,6 +262,7 @@ static void handleMouse(void) { app.awaitingWidgetInput = 1; app.lastKeyPressed = app.lastButtonPressed = -1; + playSound(SND_GUI_SELECT); } app.mouse.button[SDL_BUTTON_LEFT] = 0; break; @@ -305,6 +306,7 @@ static void handleControlWidgets(void) } else if (app.lastKeyPressed == SDL_SCANCODE_ESCAPE) { + playSound(SND_GUI_CLOSE); app.awaitingWidgetInput = 0; } else From 46503f4fe7d92165e629938cd7419f632b9c32f6 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 9 Mar 2016 23:20:50 +0000 Subject: [PATCH 03/17] Mark craft as stolen if they are moved to jumpgate by a vessel not on your side. --- src/battle/fighters.c | 17 +++++++++++++---- src/defs.h | 4 +++- src/system/lookup.c | 1 + 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/battle/fighters.c b/src/battle/fighters.c index c57241e..4cf275a 100644 --- a/src/battle/fighters.c +++ b/src/battle/fighters.c @@ -254,14 +254,23 @@ void doFighter(void) addHudMessage(colors.red, _("Mission target has escaped.")); battle.stats[STAT_ENEMIES_ESCAPED]++; } - else if (strcmp(self->defName, "Civilian") == 0) + + if (strcmp(self->defName, "Civilian") == 0) { battle.stats[STAT_CIVILIANS_RESCUED]++; } - updateObjective(self->name, TT_ESCAPED); - - updateCondition(self->name, TT_ESCAPED); + /* if you did not escape under your own volition, or with the aid of a friend, you've been stolen */ + if (!self->owner || self->side == self->owner->side) + { + updateObjective(self->name, TT_ESCAPED); + updateCondition(self->name, TT_ESCAPED); + } + else + { + updateObjective(self->name, TT_STOLEN); + updateCondition(self->name, TT_STOLEN); + } } if (self->alive == ALIVE_DEAD) diff --git a/src/defs.h b/src/defs.h index fdc7800..c92d365 100644 --- a/src/defs.h +++ b/src/defs.h @@ -95,6 +95,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define EF_SECONDARY_TARGET (2 << 12) #define EF_AI_TARGET (2 << 13) #define EF_AI_LEADER (2 << 14) +#define EF_ROPED_ATTACHED (2 << 15) #define AIF_NONE 0 #define AIF_FOLLOWS_PLAYER (2 << 0) @@ -255,7 +256,8 @@ enum TT_WAYPOINT, TT_ESCAPED, TT_PLAYER_ESCAPED, - TT_ITEM + TT_ITEM, + TT_STOLEN }; enum diff --git a/src/system/lookup.c b/src/system/lookup.c index 0f146ca..3edf355 100644 --- a/src/system/lookup.c +++ b/src/system/lookup.c @@ -88,6 +88,7 @@ void initLookups(void) addLookup("TT_ESCAPED", TT_ESCAPED); addLookup("TT_PLAYER_ESCAPED", TT_PLAYER_ESCAPED); addLookup("TT_ITEM", TT_ITEM); + addLookup("TT_STOLEN", TT_STOLEN); addLookup("WT_BUTTON", WT_BUTTON); addLookup("WT_SELECT", WT_SELECT); From 8017719239432c7ee9b1df0990123bcca52c166c Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 9 Mar 2016 23:21:28 +0000 Subject: [PATCH 04/17] Allow fighters to be added to mission in disabled state. --- src/galaxy/mission.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/galaxy/mission.c b/src/galaxy/mission.c index 8c3ea1c..9ada9e3 100644 --- a/src/galaxy/mission.c +++ b/src/galaxy/mission.c @@ -376,7 +376,7 @@ static void loadFighters(cJSON *node) Entity *e; char **types, *name, *groupName, *type; int side, scatter, number, active; - int i, numTypes, addFlags, addAIFlags; + int i, numTypes, addFlags, addAIFlags, systemPower; long flags, aiFlags; float x, y; @@ -400,6 +400,7 @@ static void loadFighters(cJSON *node) number = getJSONValue(node, "number", 1); scatter = getJSONValue(node, "scatter", 1); active = getJSONValue(node, "active", 1); + systemPower = getJSONValue(node, "systemPower", MAX_SYSTEM_POWER); if (cJSON_GetObjectItem(node, "flags")) { @@ -462,6 +463,12 @@ static void loadFighters(cJSON *node) { STRNCPY(e->groupName, groupName, MAX_NAME_LENGTH); } + + e->systemPower = systemPower; + if (!e->systemPower) + { + e->flags |= EF_DISABLED; + } } node = node->next; From c9bde77bcad3a8832e9640aeeba7d5d41430c8dc Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 9 Mar 2016 23:21:51 +0000 Subject: [PATCH 05/17] Spin jumpgate portal a little faster. --- src/battle/jumpgate.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle/jumpgate.c b/src/battle/jumpgate.c index f3dc96f..5dec983 100644 --- a/src/battle/jumpgate.c +++ b/src/battle/jumpgate.c @@ -67,7 +67,7 @@ static void think(void) if (battle.jumpgate == self) { - portalAngle++; + portalAngle += 2; if (portalAngle >= 360) { portalAngle -= 360; From 7789d3ab64291108c4e42fae9b78e9e91818cef3 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 9 Mar 2016 23:22:32 +0000 Subject: [PATCH 06/17] Remove rope flags when rope is detached. --- src/battle/rope.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/battle/rope.c b/src/battle/rope.c index d43dc47..8bb5c65 100644 --- a/src/battle/rope.c +++ b/src/battle/rope.c @@ -31,7 +31,7 @@ void attachRope(void) for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i]) { - if ((e->flags & EF_DISABLED) && e->alive == ALIVE_ALIVE) + if ((e->flags & EF_DISABLED) && (e->flags & EF_ROPED_ATTACHED) == 0 && e->alive == ALIVE_ALIVE) { distance = getDistance(e->x, e->y, self->x, self->y); @@ -43,6 +43,7 @@ void attachRope(void) self->aiFlags |= AIF_GOAL_JUMPGATE; e->flags |= EF_RETREATING; + e->flags |= EF_ROPED_ATTACHED; runScriptFunction("TOWING %s", e->name); @@ -97,6 +98,9 @@ void cutRope(Entity *e) { if (e->owner && e->owner->towing == e) { + e->flags &= ~EF_RETREATING; + e->flags &= ~EF_ROPED_ATTACHED; + e->owner->towing = NULL; e->owner->aiFlags &= ~AIF_GOAL_JUMPGATE; e->owner = NULL; From 1a4b5c679ca89e9bebc8364d6dfc3d4a88b5e566 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 9 Mar 2016 23:25:12 +0000 Subject: [PATCH 07/17] Don't attach rope to vessel with rope already attached. --- src/battle/ai.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle/ai.c b/src/battle/ai.c index dbd07f9..f6c7359 100644 --- a/src/battle/ai.c +++ b/src/battle/ai.c @@ -719,7 +719,7 @@ static int nearTowableCraft(void) for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i]) { - if ((e->flags & (EF_DISABLED|EF_MISSION_TARGET)) == (EF_DISABLED|EF_MISSION_TARGET)) + if ((e->flags & (EF_DISABLED|EF_MISSION_TARGET)) == (EF_DISABLED|EF_MISSION_TARGET) && (e->flags & EF_ROPED_ATTACHED) == 0) { distance = getDistance(self->x, self->y, e->x, e->y); From 0bcc69ee696b68297cc0c4f3c8065ab65fcee8d7 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 9 Mar 2016 23:25:27 +0000 Subject: [PATCH 08/17] Move planet a little faster. --- src/battle/battle.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle/battle.c b/src/battle/battle.c index e2028fa..762b815 100644 --- a/src/battle/battle.c +++ b/src/battle/battle.c @@ -130,8 +130,8 @@ static void doBattle(void) scrollBackground(-ssx * 0.1, -ssy * 0.1); - battle.planet.x -= ssx * 0.05; - battle.planet.y -= ssy * 0.05; + battle.planet.x -= ssx * 0.1; + battle.planet.y -= ssy * 0.1; doObjectives(); From ebfea2b5c4394bfa822274ff13b8c14309c930ce Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 9 Mar 2016 23:25:54 +0000 Subject: [PATCH 09/17] Unlock next challenge mission is previous has been passed. --- src/challenges/challengeHome.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/challenges/challengeHome.c b/src/challenges/challengeHome.c index e340508..127a020 100644 --- a/src/challenges/challengeHome.c +++ b/src/challenges/challengeHome.c @@ -104,16 +104,19 @@ void initChallengeHome(void) static void unlockChallenges(void) { Mission *m; - int i; + int i, prevCompleted; i = completedChallenges = totalChallenges = 0; + prevCompleted = 1; + for (m = game.challengeMissionHead.next ; m != NULL ; m = m->next) { - m->available = (i <= completedChallenges || dev.debug); + m->available = (prevCompleted > 0 || dev.debug); completedChallenges += m->completedChallenges; totalChallenges += m->totalChallenges; + prevCompleted = m->completedChallenges; i++; } From e363cca06489b710600429703e54894ed314871b Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 9 Mar 2016 23:26:08 +0000 Subject: [PATCH 10/17] Start of first Rothan mission. --- .../rothan/01 - rothan defence #1.json | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 data/missions/rothan/01 - rothan defence #1.json diff --git a/data/missions/rothan/01 - rothan defence #1.json b/data/missions/rothan/01 - rothan defence #1.json new file mode 100644 index 0000000..778a0cd --- /dev/null +++ b/data/missions/rothan/01 - rothan defence #1.json @@ -0,0 +1,117 @@ +{ + "name" : "Rothan Defence #1", + "description" : "", + "requires" : 28, + "background" : "gfx/backgrounds/background05.jpg", + "planet" : "gfx/planets/bluePlanet.png", + "music" : "music/battle/track-1.mp3", + "objectives" : [ + { + "description" : "Rescue all CSN pilots", + "targetName" : "CSN Pilot", + "targetValue" : 12, + "targetType" : "TT_ESCAPED" + }, + { + "description" : "Do not allow any pilots to be killed", + "targetName" : "CSN Pilot", + "targetValue" : 1, + "targetType" : "TT_DESTROY", + "isCondition" : 1 + }, + { + "description" : "Do not allow any pilots to be kidnapped", + "targetName" : "CSN Pilot", + "targetValue" : 1, + "targetType" : "TT_STOLEN", + "isCondition" : 1 + } + ], + "player" : { + "type" : "ATAF", + "side" : "SIDE_ALLIES", + "pilot" : "Estelle de Winter", + "squadron" : "White Knights", + "x" : 25, + "y" : 48 + }, + "fighters" : [ + { + "name" : "ALLIES", + "types" : "ATAF", + "side" : "SIDE_ALLIES", + "x" : 25, + "y" : 48, + "scatter" : 500 + }, + { + "name" : "ALLIES", + "types" : "TAF;Rook;Ray", + "side" : "SIDE_ALLIES", + "x" : 25, + "y" : 48, + "number" : 5, + "scatter" : 500, + "aiFlags" : "+AIF_UNLIMITED_RANGE" + }, + { + "name" : "CSN Pilot", + "types" : "TAF;Ray;Kingfisher;Hammerhead;Rook", + "side" : "SIDE_ALLIES", + "x" : 25, + "y" : 25, + "number" : 12, + "scatter" : 5000, + "systemPower" : 0, + "flags" : "+EF_NO_KILL+EF_MISSION_TARGET" + }, + { + "types" : "Tug", + "side" : "SIDE_PANDORAN", + "x" : 25, + "y" : 25, + "number" : 12, + "scatter" : 0, + "aiFlags" : "+AIF_UNLIMITED_RANGE", + "flags" : "+EF_AI_LEADER" + }, + { + "types" : "Sphinx;Thunderhead", + "side" : "SIDE_PANDORAN", + "x" : 25, + "y" : 25, + "number" : 12, + "scatter" : 0, + "aiFlags" : "+AIF_MOVES_TO_LEADER", + "flags" : "+EF_AI_LEADER" + } + ], + "entities" : [ + { + "name" : "Jumpgate", + "type" : "ET_JUMPGATE", + "x" : 45, + "y" : 45 + } + ], + "script" : [ + { + "function" : "TIME 2", + "lines" : [ + "MSG_BOX Griffin;White Knights, the enemy tugs are already in position and are attaching tow ropes. They must not be allowed to get those fighters and pilots to the jumpgate.", + "MSG_BOX de Winter;Can you disable the gate remotely?", + "MSG_BOX Griffin;Negative, the Pandorans have control. We're working take back command function. Stand by.", + "MSG_BOX Taylor;Estelle, maybe you should mark the gate. It's the tug's ultimate destination, after all.", + "MSG_BOX de Winter;Good point, Kelly." + ] + }, + { + "function" : "OBJECTIVES_COMPLETE 1", + "lines" : [ + "WAIT 2", + "MSG_BOX de Winter;Griffin, all enemy tugs have been dispatched" + ] + } + ] +} + From 80658d653794d97bbaea80ac85644726ead09567 Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 10 Mar 2016 11:56:14 +0000 Subject: [PATCH 11/17] Added initial INF tug graphics. --- data/craft/infTug.json | 11 +++++++++++ gfx/craft/infTug.png | Bin 0 -> 2190 bytes 2 files changed, 11 insertions(+) create mode 100644 data/craft/infTug.json create mode 100644 gfx/craft/infTug.png diff --git a/data/craft/infTug.json b/data/craft/infTug.json new file mode 100644 index 0000000..473ad61 --- /dev/null +++ b/data/craft/infTug.json @@ -0,0 +1,11 @@ +{ + "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" +} diff --git a/gfx/craft/infTug.png b/gfx/craft/infTug.png new file mode 100644 index 0000000000000000000000000000000000000000..c1c27c831b44323f543c350787f7712ae5fb592b GIT binary patch literal 2190 zcmV;92yyp`P)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00;I-L_t(o!{wK2Y?J2|$A5l( z$!q70?KpAnw+0C00$m8s7A=i{1*D)2l|r|*LlxRUO2wdr7PK)+LEGpAY7sEBY82EB zX|!BcS|(sLrL?0eiJKxd+)}7>Ay<<)zQuOz*M9fGA(TQ=rcT<2J)a&u=bZmJ&;LBn zIXdwFzEt1BR{3vW2@eT=pWJS@v$DFHmDSbQ?e>SVdFY$1D@2*VKmn90n@!m?cdjBE z42oZJ2uLHg86j@lsA@wQG`u1?u%Nn+wD}@Y`p4p;*@3TXV0d7_H3N8 z%&Sf(RW{p$*ibgjh-1F7^nNBZUsc>VJ-+$*avc|1!*KnstjcBsz^YbrAUBuR{kwV0 z=LXhpLHpXT5FksNbg2$&IhXsn3 z-*sMGT#Q)|IJ{v42`Uw@@7YdIROVV@64w%w=!wd_zGpiLDiwz}Y``oC6c-nd-?nHu z$YFs6k59p%pCkpM8iqdWq5EP8%SVRs^GGB@npVT3J|9Q-z6?Nrc$78;+LZVn;OO3$ zdDQ14O{*aiiHzG@J~GgKF~rbkJ&5W_0?3v|eU=(&M2zH5GuQbQ951ANrhh z3QC9J!v_}+<%fB&`zKm3fFdODh0{+*%l7~{7K_n1I0$|}t~qm1wAy>CP$Yuo(@#N? zs7*~}nGh$ppyDD$X%ec~C#py67-;T?vj=3_Jqq(@M)2lCzQ;q|@GvRq z=@bb9U&LbcEviEmj-d7U;}n}D6rC1Jb2CMP!0$&#d2(QY)5*zryW!@?e$KVRBPJEi z{z+1>aW*VkY(_~8A|x2O*yto!b`94*jXXIpK!q$*YPE7GE1Q_vhzPUc;i%@Wg2e!SAQ1R*&D| zM5R}eF%6g~0LNu037{qyI8pke3nqvUBcOch0Ttyx3c*jJmb)iPBS z`AbU+U9!xE7dApnCga>WICTnN-w<6*V9W{P_;TV7ro8zJC{%&L0E(!`nxW-af1iaX z8buNWYC|Dr?%z+&)~&pE>lW`PCIaw-kr5W;=F+`&E3KHGg>Gb8h!X zP=$g70^m^Krw8u(z9)cFo1r90LJs-S8&k+`7@~dkYP@A-L~Y;Y?dKaP2n0AL2qdUf zs8wkx8A9?DBEQL*JP05|Ijh$JTipdB7&>gf(n11%e$qHM)8X!^VG zekWdtTK_i8pc6!upLdl>Qm`-!)=JPn03iVanUIwaA9%k{M1fb5%~%}?On>$`hpR7< znVAVdUtb?jT_~sRPfNL7ILh@BomKl7hit7~kJnp|mv80|5-N7*97@I9TSQc9j{| z=WeVv6YB>(oZT`316Mx);j95U9Kc+VO3s==KFQA~q|s15Fo3F}0+TcDta;xrvE=2& ze@a&um8<^S>FJ2FOjTzm-Fs7UcMPJ@8Hg`<1{`M~%OAk+04XIF z@AbL4)ZMtjhxz&ZsI!xs{wwS%E#>@{E!-X}$JR)M)oE%Pu3RB0C~-1BpTfaGPEVT# zot?&Zs=GTgXtkXeXAF?cCu~^~^ zxLjy78s4*5&}cN|N)mG|7TzC?w`oIBDj6d#0)e=X3EOeOLNI5V(Pt&0l}z!R0wF=* zN>2~raF`|8*)-PF@J>Smy}iBk_V)5lLj#R9H7v=_CL9iPrKg9GAP^eE)k-GxSxJ~P z%@i!0Bmi$a__~7lyFx^r@k;0k2I+}L@%enr%gkh3QxjpMkzjc_CX)%1$waWcoUqZz zwx%ZLWoF{@`RIv8@dShMI^i6`-xb2w6~x; z9A?ye$n1?09tn|vMtX8%C&yl`G#8^MAMg4fZWnm+A)W QyZ`_I07*qoM6N<$f}h*)kN^Mx literal 0 HcmV?d00001 From 812f69b02e6af74092fd098f63cc5b078353bd84 Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 10 Mar 2016 11:56:27 +0000 Subject: [PATCH 12/17] Drawn effects bug fix. --- src/battle/effects.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle/effects.c b/src/battle/effects.c index 29f1152..8c67054 100644 --- a/src/battle/effects.c +++ b/src/battle/effects.c @@ -95,7 +95,7 @@ void doEffects(void) break; } - if (onScreen); + if (onScreen) { effectsToDraw[i++] = e; From 3a0618b1501bcba21cc1b248624abe6c1b2d35dc Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 10 Mar 2016 11:56:38 +0000 Subject: [PATCH 13/17] Rope cutting bug fix. --- src/battle/rope.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/battle/rope.c b/src/battle/rope.c index 8bb5c65..e4a236f 100644 --- a/src/battle/rope.c +++ b/src/battle/rope.c @@ -96,13 +96,18 @@ void drawRope(Entity *e) void cutRope(Entity *e) { + /* thing being towed is dead */ if (e->owner && e->owner->towing == e) { - e->flags &= ~EF_RETREATING; - e->flags &= ~EF_ROPED_ATTACHED; - e->owner->towing = NULL; e->owner->aiFlags &= ~AIF_GOAL_JUMPGATE; - e->owner = NULL; + } + + /* tug is dead - reset thing being tugged */ + if (e->towing) + { + e->towing->flags &= ~EF_RETREATING; + e->towing->flags &= ~EF_ROPED_ATTACHED; + e->towing = NULL; } } From 108dfa44d77f2c9392e88e075d4c892ee46d44e8 Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 10 Mar 2016 11:57:05 +0000 Subject: [PATCH 14/17] Allow tugs with AIF_UNLIMITED_RANGE to find targets anywhere. --- src/battle/ai.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/battle/ai.c b/src/battle/ai.c index f6c7359..1d3c0a0 100644 --- a/src/battle/ai.c +++ b/src/battle/ai.c @@ -708,12 +708,12 @@ static void moveToItem(void) static int nearTowableCraft(void) { int i; - long closest, distance; + long closest, dist; Entity *e, **candidates; - candidates = getAllEntsWithin(self->x - (self->w / 2) - (SCREEN_WIDTH / 4), self->y - (self->h / 2) - (SCREEN_HEIGHT / 4), SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, self); + dist = closest = (battle.isEpic || (self->aiFlags & AIF_UNLIMITED_RANGE)) ? MAX_TARGET_RANGE : 2000; - closest = MAX_TARGET_RANGE; + candidates = getAllEntsWithin(self->x - (self->w / 2) - (dist / 2), self->y - (self->h / 2) - (dist / 2), self->w + dist, self->h + dist, self); self->target = NULL; @@ -721,12 +721,12 @@ static int nearTowableCraft(void) { if ((e->flags & (EF_DISABLED|EF_MISSION_TARGET)) == (EF_DISABLED|EF_MISSION_TARGET) && (e->flags & EF_ROPED_ATTACHED) == 0) { - distance = getDistance(self->x, self->y, e->x, e->y); + dist = getDistance(self->x, self->y, e->x, e->y); - if (distance < closest) + if (dist < closest) { self->target = e; - closest = distance; + closest = dist; } } } From 772dc44ea49bcac1b7fb86c86153f02fe347f948 Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 10 Mar 2016 11:57:18 +0000 Subject: [PATCH 15/17] Added -Wempty-body. --- makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makefile b/makefile index af627c9..afd1d2e 100644 --- a/makefile +++ b/makefile @@ -10,7 +10,7 @@ OBJS += unixInit.o include common.mk CXXFLAGS += `sdl2-config --cflags` -DVERSION=$(VERSION) -DREVISION=$(REVISION) -DDATA_DIR=\"$(DATA_DIR)\" -DLOCALE_DIR=\"$(LOCALE_DIR)\" -CXXFLAGS += -Wall -ansi -pedantic -Werror -Wstrict-prototypes +CXXFLAGS += -Wall -Wempty-body -ansi -pedantic -Werror -Wstrict-prototypes CXXFLAGS += -g -lefence LFLAGS := `sdl2-config --libs` -lSDL2_mixer -lSDL2_image -lSDL2_ttf -lm From d2803bf961b44a696dd77b5896460e214753064d Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 10 Mar 2016 11:57:46 +0000 Subject: [PATCH 16/17] Various mission tweaks. --- .../rothan/01 - rothan defence #1.json | 109 +++++++++++++++--- 1 file changed, 93 insertions(+), 16 deletions(-) diff --git a/data/missions/rothan/01 - rothan defence #1.json b/data/missions/rothan/01 - rothan defence #1.json index 778a0cd..b44c90c 100644 --- a/data/missions/rothan/01 - rothan defence #1.json +++ b/data/missions/rothan/01 - rothan defence #1.json @@ -5,13 +5,36 @@ "background" : "gfx/backgrounds/background05.jpg", "planet" : "gfx/planets/bluePlanet.png", "music" : "music/battle/track-1.mp3", + "manualComplete" : 1, "objectives" : [ + { + "description" : "Destroy all Pandoran Tugs", + "targetName" : "Pandoran Tug", + "targetValue" : 12, + "targetType" : "TT_DESTROY" + }, { "description" : "Rescue all CSN pilots", "targetName" : "CSN Pilot", "targetValue" : 12, "targetType" : "TT_ESCAPED" }, + { + "description" : "Protect Tugs", + "targetName" : "CSN Tug", + "targetValue" : 8, + "targetType" : "TT_DESTROY", + "isCondition" : 1, + "active" : 0 + }, + { + "description" : "Eliminate all Pandoran fighters", + "targetName" : "ENEMY", + "targetValue" : 1, + "targetType" : "TT_DESTROY", + "isEliminateAll" : 1, + "active" : 0 + }, { "description" : "Do not allow any pilots to be killed", "targetName" : "CSN Pilot", @@ -44,16 +67,6 @@ "y" : 48, "scatter" : 500 }, - { - "name" : "ALLIES", - "types" : "TAF;Rook;Ray", - "side" : "SIDE_ALLIES", - "x" : 25, - "y" : 48, - "number" : 5, - "scatter" : 500, - "aiFlags" : "+AIF_UNLIMITED_RANGE" - }, { "name" : "CSN Pilot", "types" : "TAF;Ray;Kingfisher;Hammerhead;Rook", @@ -66,12 +79,26 @@ "flags" : "+EF_NO_KILL+EF_MISSION_TARGET" }, { + "name" : "CSN Tug", + "groupName" : "CSNTugs", "types" : "Tug", + "side" : "SIDE_ALLIES", + "x" : 45, + "y" : 45, + "number" : 6, + "scatter" : 750, + "flags" : "+EF_AI_TARGET", + "aiFlags" : "+AIF_UNLIMITED_RANGE", + "active" : 0 + }, + { + "name" : "Pandoran Tug", + "types" : "INF Tug", "side" : "SIDE_PANDORAN", "x" : 25, "y" : 25, "number" : 12, - "scatter" : 0, + "scatter" : 5000, "aiFlags" : "+AIF_UNLIMITED_RANGE", "flags" : "+EF_AI_LEADER" }, @@ -84,6 +111,39 @@ "scatter" : 0, "aiFlags" : "+AIF_MOVES_TO_LEADER", "flags" : "+EF_AI_LEADER" + }, + { + "types" : "Jackal;Sphinx;Thunderhead;Mantis", + "groupName" : "Reinforcements", + "side" : "SIDE_PANDORAN", + "x" : 51, + "y" : 35, + "number" : 8, + "scatter" : 0, + "aiFlags" : "+AIF_UNLIMITED_RANGE", + "active" : 0 + }, + { + "types" : "Jackal;Sphinx;Thunderhead;Mantis", + "groupName" : "Reinforcements", + "side" : "SIDE_PANDORAN", + "x" : 35, + "y" : 51, + "number" : 8, + "scatter" : 0, + "aiFlags" : "+AIF_UNLIMITED_RANGE", + "active" : 0 + }, + { + "types" : "Jackal;Sphinx;Thunderhead;Mantis", + "groupName" : "Reinforcements", + "side" : "SIDE_PANDORAN", + "x" : -1, + "y" : -1, + "number" : 8, + "scatter" : 0, + "aiFlags" : "+AIF_UNLIMITED_RANGE", + "active" : 0 } ], "entities" : [ @@ -98,18 +158,35 @@ { "function" : "TIME 2", "lines" : [ - "MSG_BOX Griffin;White Knights, the enemy tugs are already in position and are attaching tow ropes. They must not be allowed to get those fighters and pilots to the jumpgate.", + "MSG_BOX CSN Griffin;White Knights, the enemy tugs are already in position and are attaching tow ropes. They must not be allowed to get those fighters and pilots to the jumpgate.", "MSG_BOX de Winter;Can you disable the gate remotely?", - "MSG_BOX Griffin;Negative, the Pandorans have control. We're working take back command function. Stand by.", - "MSG_BOX Taylor;Estelle, maybe you should mark the gate. It's the tug's ultimate destination, after all.", - "MSG_BOX de Winter;Good point, Kelly." + "MSG_BOX CSN Griffin;Negative, the Pandorans have control. We're working take back command function. Stand by." ] }, { "function" : "OBJECTIVES_COMPLETE 1", "lines" : [ "WAIT 2", - "MSG_BOX de Winter;Griffin, all enemy tugs have been dispatched" + "MSG_BOX de Winter;Griffin, all enemy tugs have been dispatched.", + "MSG_BOX CSN Griffin;Good work, Commander. We've regained control of the gate. We're sending our own tugs through now.", + "WAIT_MSG_BOX", + "ACTIVATE_ENTITY_GROUPS CSNTugs", + "WAIT 10", + "ACTIVATE_ENTITY_GROUPS Reinforcements", + "ACTIVATE_OBJECTIVES Protect Tugs", + "MSG_BOX Taylor;Estelle, I'm picking up incoming INF fighters.", + "MSG_BOX de Winter;Hell! Protect the tugs. Make sure they get everyone home.", + "ACTIVATE_OBJECTIVES Eliminate all Pandoran fighters" + ] + }, + { + "function" : "ALL_OBJECTIVES_COMPLETE", + "lines" : [ + "WAIT 2", + "MSG_BOX de Winter;Griffin, this is de Winter. Operation successful.", + "MSG_BOX Parks;I knew I could count on you, de Winter. Head back to Griffin.", + "WAIT_MSG_BOX", + "COMPLETE_MISSION" ] } ] From 25b641c8d4f6476baaa27bc709907719544f33c1 Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 10 Mar 2016 11:58:10 +0000 Subject: [PATCH 17/17] MIsc. clean up. --- CHANGELOG | 2 +- src/battle/ai.h | 1 - src/battle/entities.h | 2 -- 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 76cb17c..82b2b75 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,7 +4,7 @@ Changelog * Added control remapping * New game mode: Challenges - * Add i18n support + * Added i18n support 0.51 diff --git a/src/battle/ai.h b/src/battle/ai.h index 921282b..9038b97 100644 --- a/src/battle/ai.h +++ b/src/battle/ai.h @@ -44,4 +44,3 @@ extern Colors colors; extern Dev dev; extern Entity *self; extern Entity *player; -extern Game game; diff --git a/src/battle/entities.h b/src/battle/entities.h index 4656bdc..0d9f070 100644 --- a/src/battle/entities.h +++ b/src/battle/entities.h @@ -35,8 +35,6 @@ extern void drawShieldHitEffect(Entity *e); extern void removeFromQuadtree(Entity *e, Quadtree *root); extern void addToQuadtree(Entity *e, Quadtree *root); extern void updateCapitalShipComponentProperties(Entity *parent); -extern void drawJumpPortal(Entity *e); -extern SDL_Texture *getTexture(char *filename); extern App app; extern Battle battle;