Compare commits

..

17 Commits

Author SHA1 Message Date
Steve 118b99ccf6 Format with clang. 2022-07-31 10:43:20 +01:00
Steve 5e82c957cd Moved #includes, #defines, enums into c files, from h files. 2022-07-30 16:10:02 +01:00
Steve fc09a7d598 Set trophyId array size to MAX_NAME_LENGTH * 2. 2021-12-06 21:44:12 +00:00
Stephen J Sweeney 7023a48723
Merge pull request #55 from oglinuk/develop-trophyId-fix
`tophyId` fix
2021-12-06 21:41:23 +00:00
oglinuk 793b1b95a8 `trophyId` fix
When compiling, it would throw `src/game/trophies.c:455:32: error: ‘%s’
directive writing up to 31 bytes into a region of size 23`. Fixed by
adding 9 to `MAX_NAME_LENGTH` to account for "CAMPAIGN_".
2021-12-06 12:25:54 -08:00
Stephen J Sweeney 40cb97049c
Merge pull request #54 from smcameron/develop
Prevent readFile from returning uninitialized pointer on fopen() failure.
2021-10-01 07:36:26 +01:00
Stephen M. Cameron 2d3856d3ad Prevent readFile from returning uninitialized pointer on fopen() failure.
Signed-off-by: Stephen M. Cameron <stephenmcameron@gmail.com>
2021-10-01 02:24:07 -04:00
Steve ef46a97a67 Minor text rendering code tweaks. 2021-05-01 16:00:35 +01:00
Steve 786df47e09 Misc. tidying. 2021-05-01 13:35:52 +01:00
Steve 732a86aefd Use indexed array for text glyphs, instead of hashmap. 2021-05-01 13:35:33 +01:00
Steve 69c2fdf680 Source tidying. 2021-05-01 13:32:57 +01:00
Steve b145541ed4 Only use mags against Pandoran tugs. 2021-03-06 07:59:57 +00:00
Steve 6b89d7e8e7 Tidy #defines 2020-03-28 13:56:49 +00:00
Steve 7e14550cc1 Revert to while loop for nextCharacter() 2020-03-28 13:52:17 +00:00
Steve f3bb77ca81 Use Arial as default font. 2020-03-28 13:51:53 +00:00
Steve 10eca1eb60 Releases are now stable. 2020-01-22 07:27:46 +00:00
Steve a7a3cdb567 Small unicode optimization. 2020-01-22 07:27:35 +00:00
141 changed files with 3788 additions and 4423 deletions

230
.clang-format Normal file
View File

@ -0,0 +1,230 @@
---
Language: Cpp
# BasedOnStyle: Google
AccessModifierOffset: -1
AlignAfterOpenBracket: Align
AlignArrayOfStructures: None
AlignConsecutiveMacros: Consecutive
AlignConsecutiveAssignments: None
AlignConsecutiveBitFields: None
AlignConsecutiveDeclarations: Consecutive
AlignEscapedNewlines: Left
AlignOperands: Align
AlignTrailingComments: true
AllowAllArgumentsOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortEnumsOnASingleLine: true
AllowShortBlocksOnASingleLine: Never
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortLambdasOnASingleLine: All
AllowShortIfStatementsOnASingleLine: WithoutElse
AllowShortLoopsOnASingleLine: true
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: Yes
AttributeMacros:
- __capability
BinPackArguments: true
BinPackParameters: true
BraceWrapping:
AfterCaseLabel: false
AfterClass: false
AfterControlStatement: Never
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
BeforeLambdaBody: false
BeforeWhile: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeConceptDeclarations: true
BreakBeforeBraces: Allman
BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 1024
CommentPragmas: '^ IWYU pragma:'
QualifierAlignment: Leave
CompactNamespaces: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DeriveLineEnding: true
DerivePointerAlignment: true
DisableFormat: false
EmptyLineAfterAccessModifier: Never
EmptyLineBeforeAccessModifier: LogicalBlock
ExperimentalAutoDetectBinPacking: false
PackConstructorInitializers: NextLine
BasedOnStyle: ''
ConstructorInitializerAllOnOneLineOrOnePerLine: false
AllowAllConstructorInitializersOnNextLine: true
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IfMacros:
- KJ_IF_MAYBE
IncludeBlocks: Regroup
IncludeCategories:
- Regex: '^<ext/.*\.h>'
Priority: 2
SortPriority: 0
CaseSensitive: false
- Regex: '^<.*\.h>'
Priority: 1
SortPriority: 0
CaseSensitive: false
- Regex: '^<.*'
Priority: 2
SortPriority: 0
CaseSensitive: false
- Regex: '.*common.h'
Priority: 2
SortPriority: 0
CaseSensitive: false
- Regex: '.*'
Priority: 3
SortPriority: 0
CaseSensitive: false
IncludeIsMainRegex: 'common.h'
IncludeIsMainSourceRegex: 'common.h'
IndentAccessModifiers: false
IndentCaseLabels: true
IndentCaseBlocks: false
IndentGotoLabels: true
IndentPPDirectives: None
IndentExternBlock: AfterExternBlock
IndentRequires: false
IndentWidth: 4
IndentWrappedFunctionNames: false
InsertTrailingCommas: None
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: false
LambdaBodyIndentation: Signature
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Never
ObjCBlockIndentWidth: 2
ObjCBreakBeforeNestedBlockParam: true
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 1
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakOpenParenthesis: 0
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 200
PenaltyIndentedWhitespace: 0
PointerAlignment: Left
PPIndentWidth: -1
RawStringFormats:
- Language: Cpp
Delimiters:
- cc
- CC
- cpp
- Cpp
- CPP
- 'c++'
- 'C++'
CanonicalDelimiter: ''
BasedOnStyle: google
- Language: TextProto
Delimiters:
- pb
- PB
- proto
- PROTO
EnclosingFunctions:
- EqualsProto
- EquivToProto
- PARSE_PARTIAL_TEXT_PROTO
- PARSE_TEST_PROTO
- PARSE_TEXT_PROTO
- ParseTextOrDie
- ParseTextProtoOrDie
- ParseTestProto
- ParsePartialTestProto
CanonicalDelimiter: pb
BasedOnStyle: google
ReferenceAlignment: Pointer
ReflowComments: true
RemoveBracesLLVM: false
SeparateDefinitionBlocks: Leave
ShortNamespaceLines: 1
SortIncludes: CaseInsensitive
SortJavaStaticImport: Before
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCaseColon: false
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeParensOptions:
AfterControlStatements: true
AfterForeachMacros: true
AfterFunctionDefinitionName: false
AfterFunctionDeclarationName: false
AfterIfMacros: true
AfterOverloadedOperator: false
BeforeNonEmptyParentheses: false
SpaceAroundPointerQualifiers: Default
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyBlock: false
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 2
SpacesInAngles: Never
SpacesInConditionalStatement: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInLineCommentPrefix:
Minimum: 1
Maximum: -1
SpacesInParentheses: false
SpacesInSquareBrackets: false
SpaceBeforeSquareBrackets: false
BitFieldColonSpacing: Both
Standard: Auto
StatementAttributeLikeMacros:
- Q_EMIT
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TabWidth: 4
UseCRLF: false
UseTab: Always
WhitespaceSensitiveMacros:
- STRINGIZE
- PP_STRINGIZE
- BOOST_PP_STRINGIZE
- NS_SWIFT_NAME
- CF_SWIFT_NAME
...

2
.gitignore vendored
View File

@ -43,5 +43,5 @@ build/*
# Misc
.DS_Store
/.errors
tools

View File

@ -1,50 +0,0 @@
# The Battle for the Solar System : The Pandoran War
This is the port of the "The Battle for the Solar System : The Pandoran War"
v1.50.1 for the AmigaOS 4.
The Pandoran War is a 2D mission-based space shooter based on the BATTLE FOR
THE SOLAR SYSTEM space opera and set between books two and three: THE THIRD
SIDE and THE ATTTRIBUTE OF THE STRONG. The game features many missions,
with many different objectives and craft.
It requires a fast system to play the game as fast as possible, and a
graphics card that supports either opengl/opengles2 with SDL2.
It is tested and runs well on X5000/40 with a RadeonRX 550.
This archive does not contain any data files. In order to play the game, you
need to download the data separately. From the following website download
the "tbftss-1.5.1.linux-x86_64.tar.gz" file.
https://www.battleforthesolarsystem.com/games/pw/#downloads
To install it, extract the data file anywhere at you hard disk
and copy over all the files from this archive. A requester will show up
to replace some files, which you need to confirm for all of them.
If you like the game and would like to support its developer, you can go and
buy it at:
https://parallelrealities.itch.io/tbftss-the-pandoran-war
### How to make it faster
The game should run in 60fps but on my test system I get around 30fps with all
the effects enabled. That's why I introduced an option at the Options screen,
named "Effects Reduction" with values from 0 to 3. With 0 you have full effects
everywhere, and with 3 you have less effects shown. That increases a lot the
speed, but you might still see slowdowns in situations where there is a lot of
action on the screen.
It is recommended to open the SDL2 prefs and set the Driver to opengl/opengl2
depending your gfx card and the drivers you have installed.
On my system "Batching Mode: enabled" leads to some crashes. I recommend you
to set this to default. But feel free to experiment with it, in case it
works better for you.
I'd love to hear how it works on your system.
### Changelog
1.50.1r1 (2022-08-22)
* First release

View File

@ -4,7 +4,7 @@
![Alt text](dev/screenshots/v0.6-06.png?raw=true "Screenshot")
The develop branch on GitHub (https://github.com/stephenjsweeney/tbftss/tree/develop) is where all the dev work happens. Stable(ish) releases will go in to master (https://github.com/stephenjsweeney/tbftss/tree/master).
The develop branch on GitHub (https://github.com/stephenjsweeney/tbftss/tree/develop) is where all the dev work happens. Stable releases will go in to master (https://github.com/stephenjsweeney/tbftss/tree/master).
Website: www.battleforthesolarsystem.com
Email: stephenjsweeney@battleforthesolarsystem.com

View File

@ -50,11 +50,8 @@ $(OUT)/%.o: %.c %.h $(DEPS)
$(CC) $(CFLAGS) $(CXXFLAGS) -c -o $@ $<
%.mo: %.po
ifneq ($(shell uname), AmigaOS)
msgfmt -c -o $@ $<
endif
# cleaning everything that can be automatically recreated with "make".
clean:
$(RM) $(OBJS) $(PROG) $(LOCALE_MO)

View File

@ -1,7 +1,6 @@
{
"winWidth" : 1280,
"winHeight" : 720,
"effects" : 0,
"fullscreen" : 0,
"musicVolume" : 8,
"soundVolume" : 10,
@ -42,4 +41,3 @@
"healthBars" : 1
}
}

View File

@ -99,7 +99,7 @@
"number" : 12,
"scatter" : 5000,
"aiFlags" : "+AIF_UNLIMITED_RANGE",
"flags" : "+EF_AI_LEADER"
"flags" : "+EF_AI_LEADER+EF_MUST_DISABLE"
},
{
"types" : "Sphinx;Thunderhead",
@ -158,7 +158,9 @@
"lines" : [
"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 CSN Griffin;Negative, the Pandorans have control. We're working take back command functions. Stand by."
"MSG_BOX CSN Griffin;Negative, the Pandorans have control. We're working take back command functions. Stand by.",
"MSG_BOX de Winter;Understood. Kelly, we should mag the tugs first and destroy them when its safe. Stray plasma fire could hit our pilots.",
"MSG_BOX Taylor;Agreed."
]
},
{
@ -189,4 +191,4 @@
}
]
}

View File

@ -10,17 +10,6 @@
"w" : 400,
"h": 34
},
{
"name" : "effects",
"group" : "options",
"type" : "WT_SELECT",
"text" : "Effects Reduction",
"options" : "0;1;2;3",
"x" : -1,
"y" : 225,
"w" : 400,
"h": 34
},
{
"name" : "soundVolume",
"group" : "options",
@ -28,7 +17,7 @@
"text" : "Sound Volume",
"options" : "0;1;2;3;4;5;6;7;8;9;10",
"x" : -1,
"y" : 275,
"y" : 250,
"w" : 400,
"h": 34
},
@ -75,4 +64,3 @@
"h": 34
}
]

Binary file not shown.

View File

@ -25,9 +25,7 @@ MAKEFLAGS += -j$(NPROCS)
CXXFLAGS += `sdl2-config --cflags` -DVERSION=$(VERSION) -DREVISION=$(REVISION) -DDATA_DIR=\"$(DATA_DIR)\" -DLOCALE_DIR=\"$(LOCALE_DIR)\"
CXXFLAGS += -ansi -pedantic
CXXFLAGS += -g -lefence
ifneq ("$(wildcard .errors)","")
CXXFLAGS += -Wall -Wempty-body -Werror -Wstrict-prototypes -Werror=maybe-uninitialized -Warray-bounds
endif
LDFLAGS += `sdl2-config --libs` -lSDL2_mixer -lSDL2_image -lSDL2_ttf -lm
@ -54,13 +52,13 @@ install:
cp -p icons/$(PROG)-128x128.png $(INST_ICON_DIR)/128x128/apps/$(PROG).png
mkdir -p $(INST_DESKTOP_DIR)
cp -p icons/$(PROG).desktop $(INST_DESKTOP_DIR)
@for f in $(LOCALE_MO); do \
lang=`echo $$f | sed -e 's/^locale\///;s/\.mo$$//'`; \
mkdir -p $(INST_LOCALE_DIR)/$$lang/LC_MESSAGES; \
cp -v $$f $(INST_LOCALE_DIR)/$$lang/LC_MESSAGES/$(PROG).mo; \
done
uninstall:
$(RM) $(BIN_DIR)/$(PROG)
$(RM) -rf $(DATA_DIR)
@ -69,10 +67,10 @@ uninstall:
$(RM) $(ICON_DIR)/64x64/apps/$(PROG).png
$(RM) $(ICON_DIR)/128x128/apps/$(PROG).png
$(RM) $(DESKTOP_DIR)/$(PROG).desktop
@for f in $(LOCALE_MO); do \
lang=`echo $$f | sed -e 's/^locale\///;s/\.mo$$//'`; \
$(RM) -v $(LOCALE_DIR)/$$lang/LC_MESSAGES/$(PROG).mo; \
done
.PHONY: dist

View File

@ -1,53 +0,0 @@
PROG = tbftss
CC = gcc-11
PREFIX ?= /usr
BIN_DIR ?= $(PREFIX)/bin
DATA_DIR ?= data
LOCALE_DIR = locale
ICON_DIR = $(PREFIX)/share/icons/hicolor
DESKTOP_DIR = $(PREFIX)/share/applications
DESTDIR ?=
INST_BIN_DIR = $(DESTDIR)$(BIN_DIR)
INST_DATA_DIR = $(DESTDIR)$(DATA_DIR)
INST_LOCALE_DIR = $(DESTDIR)$(LOCALE_DIR)
INST_ICON_DIR = $(DESTDIR)$(ICON_DIR)
INST_DESKTOP_DIR = $(DESTDIR)$(DESKTOP_DIR)
SEARCHPATH += src/plat/os4
_OBJS += os4Init.o
include common.mk
CXXFLAGS += -DVERSION=$(VERSION) -DREVISION=$(REVISION) -DDATA_DIR=\"$(DATA_DIR)\" -DLOCALE_DIR=\"$(LOCALE_DIR)\" -D__USE_INLINE__
CXXFLAGS += -pedantic
CXXFLAGS += -g -lefence
CXXFLAGS += -Wall -Wempty-body -Werror -Wstrict-prototypes -Werror=maybe-uninitialized -Warray-bounds
# CXXFLAGS += -gstabs
LDFLAGS += -lauto -lSDL2_image -lSDL2_ttf -lft2 -ltiff -lwebp -lpng -ljpeg -lz -lm
LDFLAGS += -lSDL2_mixer -lmikmod -lmodplug -lFLAC -lsmpeg2 -lvorbisfile -lvorbis -logg
LDFLAGS += -lSDL2 -lpthread -athread=native -lstdc++
# LDFLAGS += -gstabs
# linking the program.
$(PROG): $(OBJS)
$(CC) -o $@ $(OBJS) $(LDFLAGS)
# prepare an archive for the program
dist:
mkdir -p release/$(PROG)-$(VERSION).$(REVISION)/data/app
mkdir -p release/$(PROG)-$(VERSION).$(REVISION)/data/widgets
cp $(PROG) release/$(PROG)-$(VERSION).$(REVISION)/
strip release/$(PROG)-$(VERSION).$(REVISION)/$(PROG)
cp icons/tbftss.info release/$(PROG)-$(VERSION).$(REVISION)/$(PROG).info
cp data/app/config.json release/$(PROG)-$(VERSION).$(REVISION)/data/app/
cp data/widgets/options.json release/$(PROG)-$(VERSION).$(REVISION)/data/widgets/
cp LICENSE release/$(PROG)-$(VERSION).$(REVISION)/
cp README.md release/$(PROG)-$(VERSION).$(REVISION)/
cp README-OS4.md release/$(PROG)-$(VERSION).$(REVISION)/
lha -aeqr3 a $(PROG)-$(VERSION).$(REVISION).lha release/
.PHONY: dist

View File

@ -2,7 +2,7 @@
<html>
<head>
<style>
body {background-color:#000; color: #fff; font-family: "sans"; background-image: url("background02.jpg");}
body {background-color:#000; color: #fff; font-family: Arial; font-size: 18px; background-image: url("background02.jpg");}
h3 {background-color:#47c; padding:0.25em; color:#fff; margin-top:3em; border: 1px solid #fff;}
h4 {background-color:#000; padding:0.25em; color:#fff; margin-top:3em; border: 1px solid #5ad;}
h5 {border-bottom: 1px solid #5ad; width: 50%;}
@ -513,7 +513,7 @@ $('h3,h4').each(function(i, e) {
{
toc.append("&blacksquare; <a href='#" + link + "'>" + e.innerText + "</a><br>");
}
if (e.tagName == 'H4')
{
toc.append("<span style='text-indent: 2em; display: inline-block'>&#9643 <a href='#" + link + "'>" + e.innerText + "</a></span><br>");

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,45 +18,66 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/bullets.h"
#include "../battle/fighters.h"
#include "../battle/hud.h"
#include "../battle/mine.h"
#include "../battle/quadtree.h"
#include "../battle/script.h"
#include "../system/util.h"
#include "ai.h"
#define AI_EVADE 0
#define AI_FALLBACK 1
#define AI_HUNT 2
#define TURN_SPEED 4
#define TURN_THRESHOLD 2
extern Battle battle;
extern Colors colors;
extern Dev dev;
extern Entity *player;
extern Entity *self;
static void faceTarget(Entity *e);
static int isInFOV(Entity *e, int fov);
static int isInFOV(Entity *e, int fov);
static void preAttack(void);
static void huntTarget(void);
static void huntAndAttackTarget(void);
static void moveToTargetLocation(void);
static void nextAction(void);
static void findTarget(void);
static int hasClearShot(void);
static int hasClearShot(void);
static void fallback(void);
static void moveToPlayer(void);
static int canAttack(Entity *e);
static int selectWeapon(int type);
static int nearJumpgate(void);
static int canAttack(Entity *e);
static int selectWeapon(int type);
static int nearJumpgate(void);
static void moveToJumpgate(void);
static int nearEnemies(void);
static int nearItems(void);
static int nearMines(void);
static int nearEnemies(void);
static int nearItems(void);
static int nearMines(void);
static void moveToItem(void);
static int nearTowableCraft(void);
static int nearTowableCraft(void);
static void moveToTowableCraft(void);
static int lookForPlayer(void);
static int lookForLeader(void);
static int lookForPlayer(void);
static int lookForLeader(void);
static void fleeEnemies(void);
static int isRetreating(void);
static int getActionChance(int type);
static int isRetreating(void);
static int getActionChance(int type);
static void doFighterAI(void);
static void doGunAI(void);
static void moveToLeader(void);
static void wander(void);
static void doWander(void);
static int selectWeaponForTarget(Entity *e);
static int selectWeaponForTarget(Entity *e);
static void deployMine(void);
static int isSurrendering(void);
static int isSurrendering(void);
static void doSurrender(void);
static void fleeWithinBattleArea(int x, int y, int numEnemies);
static int evadeNonKillTargets(void);
static int evadeNonKillTargets(void);
void doAI(void)
{
@ -131,7 +152,7 @@ void doAI(void)
return;
}
if ((self->aiFlags & (AIF_FOLLOWS_PLAYER|AIF_MOVES_TO_PLAYER)) && lookForPlayer())
if ((self->aiFlags & (AIF_FOLLOWS_PLAYER | AIF_MOVES_TO_PLAYER)) && lookForPlayer())
{
return;
}
@ -320,8 +341,8 @@ static void huntAndAttackTarget(void)
static void findTarget(void)
{
int i;
Entity *e, **candidates;
int i;
Entity *e, **candidates;
unsigned int dist, closest;
dist = closest = (battle.isEpic || (self->aiFlags & AIF_UNLIMITED_RANGE)) ? MAX_TARGET_RANGE : SCREEN_WIDTH;
@ -330,7 +351,7 @@ static void findTarget(void)
self->target = NULL;
for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i])
for (i = 0, e = candidates[i]; e != NULL; e = candidates[++i])
{
if (canAttack(e) && selectWeaponForTarget(e))
{
@ -417,7 +438,7 @@ static int selectWeapon(int type)
{
int i;
for (i = 0 ; i < MAX_FIGHTER_GUNS ; i++)
for (i = 0; i < MAX_FIGHTER_GUNS; i++)
{
if (self->guns[i].type == type)
{
@ -461,14 +482,14 @@ static int isInFOV(Entity *e, int fov)
static int hasClearShot(void)
{
int dist;
int dist;
Entity *e;
if (isInFOV(self->target, 4))
{
dist = getDistance(self->x, self->y, self->target->x, self->target->y);
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (self->owner != NULL && self->owner == e->owner)
{
@ -503,7 +524,7 @@ static void preAttack(void)
{
fireGuns(self);
}
else if (self->missiles && (!(self->target->flags & (EF_NO_KILL|EF_MUST_DISABLE|EF_FRIENDLY_HEALTH_BAR))) && getDistance(self->x, self->y, self->target->x, self->target->y) >= 350)
else if (self->missiles && (!(self->target->flags & (EF_NO_KILL | EF_MUST_DISABLE | EF_FRIENDLY_HEALTH_BAR))) && getDistance(self->x, self->y, self->target->x, self->target->y) >= 350)
{
fireMissile(self);
@ -655,7 +676,7 @@ static void doSurrender(void)
static int nearEnemies(void)
{
int i, numEnemies, x, y;
int i, numEnemies, x, y;
Entity *e, **candidates;
candidates = getAllEntsInRadius(self->x, self->y, SCREEN_WIDTH, self);
@ -665,7 +686,7 @@ static int nearEnemies(void)
numEnemies = 0;
for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i])
for (i = 0, e = candidates[i]; e != NULL; e = candidates[++i])
{
if ((e->flags & EF_TAKES_DAMAGE) && e->side != SIDE_NONE && e->side != self->side && !(e->flags & EF_DISABLED))
{
@ -695,7 +716,7 @@ static int nearEnemies(void)
static int evadeNonKillTargets(void)
{
int i, numEnemies, x, y;
int i, numEnemies, x, y;
Entity *e, **candidates;
candidates = getAllEntsInRadius(self->x, self->y, SCREEN_WIDTH, self);
@ -705,7 +726,7 @@ static int evadeNonKillTargets(void)
numEnemies = 0;
for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i])
for (i = 0, e = candidates[i]; e != NULL; e = candidates[++i])
{
if ((e->flags & EF_TAKES_DAMAGE) && e->side != SIDE_NONE && e->side != self->side && (!(e->flags & EF_DISABLED)))
{
@ -786,7 +807,7 @@ static void deployMine(void)
static int nearMines(void)
{
int i, numMines, x, y;
int i, numMines, x, y;
Entity *e, **candidates;
candidates = getAllEntsInRadius(self->x, self->y, SCREEN_HEIGHT, self);
@ -795,7 +816,7 @@ static int nearMines(void)
numMines = 0;
for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i])
for (i = 0, e = candidates[i]; e != NULL; e = candidates[++i])
{
if (e->side != self->side && e->type == ET_MINE && getDistance(e->x, e->y, self->x, self->y) <= SCREEN_HEIGHT)
{
@ -893,8 +914,8 @@ static void moveToJumpgate(void)
static int nearItems(void)
{
int i;
long closest, distance;
int i;
long closest, distance;
Entity *e, **candidates;
closest = MAX_TARGET_RANGE;
@ -903,7 +924,7 @@ static int nearItems(void)
self->target = NULL;
for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i])
for (i = 0, e = candidates[i]; e != NULL; e = candidates[++i])
{
if (e->type == ET_ITEM)
{
@ -941,8 +962,8 @@ static void moveToItem(void)
static int nearTowableCraft(void)
{
int i;
long closest, dist;
int i;
long closest, dist;
Entity *e, **candidates;
dist = closest = (battle.isEpic || (self->aiFlags & AIF_UNLIMITED_RANGE)) ? MAX_TARGET_RANGE : 2000;
@ -951,9 +972,9 @@ static int nearTowableCraft(void)
self->target = NULL;
for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i])
for (i = 0, e = candidates[i]; e != NULL; e = candidates[++i])
{
if (!e->owner && (e->flags & (EF_DISABLED|EF_MISSION_TARGET)) == (EF_DISABLED|EF_MISSION_TARGET) && (e->flags & EF_ROPED_ATTACHED) == 0)
if (!e->owner && (e->flags & (EF_DISABLED | EF_MISSION_TARGET)) == (EF_DISABLED | EF_MISSION_TARGET) && (e->flags & EF_ROPED_ATTACHED) == 0)
{
dist = getDistance(self->x, self->y, e->x, e->y);
@ -998,13 +1019,13 @@ static int lookForPlayer(void)
static int lookForLeader(void)
{
long closest, distance;
long closest, distance;
Entity *e;
self->leader = NULL;
closest = 0;
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (e->active && e->flags & EF_AI_LEADER && e->side == self->side)
{

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,29 +18,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#define AI_EVADE 0
#define AI_FALLBACK 1
#define AI_HUNT 2
#define TURN_SPEED 4
#define TURN_THRESHOLD 2
extern void addHudMessage(SDL_Color c, char *format, ...);
extern void applyFighterBrakes(void);
extern void applyFighterThrust(void);
extern void fireGuns(Entity *owner);
extern void fireMissile(Entity *owner);
extern void fireRocket(Entity *owner);
extern Entity **getAllEntsInRadius(int x, int y, int radius, Entity *ignore);
extern float getAngle(int x1, int y1, int x2, int y2);
extern int getDistance(int x1, int y1, int x2, int y2);
extern float mod(float n, float x);
extern void runScriptFunction(char *format, ...);
extern Entity *spawnMine(int type);
extern Battle battle;
extern Colors colors;
extern Dev dev;
extern Entity *player;
extern Entity *self;
void checkZackariaSuspicionLevel(void);
void checkSuspicionLevel(void);
void doAI(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,13 +18,56 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/bullets.h"
#include "../battle/debris.h"
#include "../battle/effects.h"
#include "../battle/entities.h"
#include "../battle/hud.h"
#include "../battle/locations.h"
#include "../battle/messageBox.h"
#include "../battle/missionInfo.h"
#include "../battle/objectives.h"
#include "../battle/player.h"
#include "../battle/quadtree.h"
#include "../battle/radar.h"
#include "../battle/script.h"
#include "../battle/spawners.h"
#include "../battle/starfield.h"
#include "../battle/waypoints.h"
#include "../challenges/challengeHome.h"
#include "../challenges/challenges.h"
#include "../galaxy/galacticMap.h"
#include "../galaxy/mission.h"
#include "../game/credits.h"
#include "../game/options.h"
#include "../game/stats.h"
#include "../game/trophies.h"
#include "../json/cJSON.h"
#include "../system/atlas.h"
#include "../system/draw.h"
#include "../system/input.h"
#include "../system/modalDialog.h"
#include "../system/sound.h"
#include "../system/widgets.h"
#include "battle.h"
#define SHOW_BATTLE 0
#define SHOW_MENU 1
#define SHOW_OBJECTIVES 2
#define SHOW_OPTIONS 3
extern App app;
extern Battle battle;
extern Dev dev;
extern Entity *player;
extern Game game;
static void logic(void);
static void draw(void);
static void handleKeyboard(void);
static void postBattle(void);
void destroyBattle(void);
static void doBattle(void);
static void optQuitBattle(void);
static void quitBattle(void);
@ -40,7 +83,7 @@ static void checkSuspicionLevel(void);
static void doTorelliFireStorm(void);
static void endCampaign(void);
static int show;
static int show;
static float ssx, ssy;
void initBattle(void)
@ -434,7 +477,7 @@ static void postBattle(void)
{
int i;
for (i = 0 ; i < STAT_MAX ; i++)
for (i = 0; i < STAT_MAX; i++)
{
if (i != STAT_TIME && i != STAT_EPIC_KILL_STREAK)
{
@ -486,13 +529,13 @@ static void endCampaign(void)
void destroyBattle(void)
{
Entity *ent;
Bullet *b;
Debris *d;
Effect *e;
Entity *ent;
Bullet *b;
Debris *d;
Effect *e;
Objective *o;
Location *l;
Spawner *s;
Location *l;
Spawner *s;
while (battle.entityHead.next)
{

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,80 +18,5 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../json/cJSON.h"
#define SHOW_BATTLE 0
#define SHOW_MENU 1
#define SHOW_OBJECTIVES 2
#define SHOW_OPTIONS 3
extern void awardTrophy(char *id);
extern void blitScaled(AtlasImage *atlasImage, int x, int y, int w, int h, int center);
extern void cancelScript(void);
extern void clearInput(void);
extern void destroyBullets(void);
extern void destroyDebris(void);
extern void destroyEffects(void);
extern void destroyEntities(void);
extern void destroyQuadtree(void);
extern void destroyScript(void);
extern void doBullets(void);
extern void doChallenges(void);
extern void doDebris(void);
extern void doEffects(void);
extern void doEntities(void);
extern void doHud(void);
extern void doLocations(void);
extern void doMessageBox(void);
extern void doObjectives(void);
extern void doPlayer(void);
extern void doPlayerSelect(void);
extern void doScript(void);
extern void doSpawners(void);
extern void doStars(float dx, float dy);
extern void doWidgets(void);
extern void drawBackground(SDL_Texture *texture);
extern void drawBullets(void);
extern void drawDebris(void);
extern void drawEffects(void);
extern void drawEntities(void);
extern void drawHud(void);
extern void drawLocations(void);
extern void drawMessageBox(void);
extern void drawMissionInfo(void);
extern void drawOptions(void);
extern void drawStars(void);
extern void drawWidgets(char *groupName);
extern Widget *getWidget(const char *name, const char *group);
extern void initBullets(void);
extern void initChallengeHome(void);
extern void initCredits(void);
extern void initDebris(void);
extern void initEffects(void);
extern void initEntities(void);
extern void initGalacticMap(void);
extern void initHud(void);
extern void initMessageBox(void);
extern void initOptions(void (*returnFromOptions)(void));
extern void initQuadtree(Quadtree *root);
extern void initRadar(void);
extern void initStars(void);
extern void loadMission(char *filename);
extern void playSound(int id);
extern void resetHud(void);
extern void resetMessageBox(void);
extern void resetWaypoints(void);
extern void runScriptFunction(const char *format, ...);
extern void scrollBackground(float x, float y);
extern void selectWidget(const char *name, const char *group);
extern void setAtlasColor(int r, int g, int b, int a);
extern void showOKCancelDialog(void (*okCallback)(void), void (*cancelCallback)(void), const char *format, ...);
extern void updateAccuracyStats(unsigned int *stats);
extern App app;
extern Battle battle;
extern Dev dev;
extern Entity *player;
extern Game game;
void destroyBattle(void);
void initBattle(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,31 +18,53 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/effects.h"
#include "../battle/fighters.h"
#include "../battle/quadtree.h"
#include "../game/trophies.h"
#include "../json/cJSON.h"
#include "../system/atlas.h"
#include "../system/draw.h"
#include "../system/io.h"
#include "../system/lookup.h"
#include "../system/sound.h"
#include "../system/util.h"
#include "bullets.h"
#define INITIAL_BULLET_DRAW_CAPACITY 32
#define MISSILE_LIFE (FPS * 30)
#define TURN_SPEED 2
#define TURN_THRESHOLD 3
extern App app;
extern Battle battle;
extern Entity *player;
static void huntTarget(Bullet *b);
static void checkCollisions(Bullet *b);
static void resizeDrawList(void);
static void selectNewTarget(Bullet *b);
static void doBulletHitEffect(Bullet *b);
static Bullet bulletDef[BT_MAX];
static Bullet bulletDef[BT_MAX];
static Bullet **bulletsToDraw;
static int drawCapacity;
static int drawCapacity;
void initBullets(void)
{
drawCapacity = INITIAL_BULLET_DRAW_CAPACITY;
bulletsToDraw = malloc(sizeof(Bullet*) * drawCapacity);
memset(bulletsToDraw, 0, sizeof(Bullet*) * drawCapacity);
bulletsToDraw = malloc(sizeof(Bullet *) * drawCapacity);
memset(bulletsToDraw, 0, sizeof(Bullet *) * drawCapacity);
}
void initBulletDefs(void)
{
cJSON *root, *node;
char *text;
int type;
cJSON *root, *node;
char *text;
int type;
Bullet *def;
memset(&bulletDef, 0, sizeof(Bullet) * BT_MAX);
@ -51,7 +73,7 @@ void initBulletDefs(void)
root = cJSON_Parse(text);
for (node = root->child ; node != NULL ; node = node->next)
for (node = root->child; node != NULL; node = node->next)
{
type = lookup(cJSON_GetObjectItem(node, "type")->valuestring);
@ -72,15 +94,15 @@ void initBulletDefs(void)
void doBullets(void)
{
int i = 0;
int i = 0;
Bullet *b;
Bullet *prev = &battle.bulletHead;
battle.incomingMissile = 0;
memset(bulletsToDraw, 0, sizeof(Bullet*) * drawCapacity);
memset(bulletsToDraw, 0, sizeof(Bullet *) * drawCapacity);
for (b = battle.bulletHead.next ; b != NULL ; b = b->next)
for (b = battle.bulletHead.next; b != NULL; b = b->next)
{
b->x += b->dx;
b->y += b->dy;
@ -142,7 +164,7 @@ static void resizeDrawList(void)
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG, "Resizing bullet draw capacity: %d -> %d", drawCapacity, n);
bulletsToDraw = resize(bulletsToDraw, sizeof(Bullet*) * drawCapacity, sizeof(Bullet*) * n);
bulletsToDraw = resize(bulletsToDraw, sizeof(Bullet *) * drawCapacity, sizeof(Bullet *) * n);
drawCapacity = n;
}
@ -150,11 +172,11 @@ static void resizeDrawList(void)
static void checkCollisions(Bullet *b)
{
Entity *e, **candidates;
int i;
int i;
candidates = getAllEntsWithin(b->x - (b->w / 2), b->y - (b->h / 2), b->w, b->h, NULL);
for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i])
for (i = 0, e = candidates[i]; e != NULL; e = candidates[++i])
{
if (e->flags & EF_TAKES_DAMAGE)
{
@ -182,7 +204,7 @@ static void checkCollisions(Bullet *b)
if (battle.hasSuspicionLevel)
{
if (e->aiFlags & (AIF_AVOIDS_COMBAT|AIF_DEFENSIVE))
if (e->aiFlags & (AIF_AVOIDS_COMBAT | AIF_DEFENSIVE))
{
battle.suspicionLevel -= (MAX_SUSPICION_LEVEL * 0.1);
}
@ -261,7 +283,7 @@ static void checkCollisions(Bullet *b)
}
}
void doBulletHitEffect(Bullet *b)
static void doBulletHitEffect(Bullet *b)
{
switch (b->type)
{
@ -289,12 +311,12 @@ void doBulletHitEffect(Bullet *b)
void drawBullets(void)
{
int i;
int i;
Bullet *b;
setAtlasColor(255, 255, 255, 255);
for (i = 0, b = bulletsToDraw[i] ; b != NULL ; b = bulletsToDraw[++i])
for (i = 0, b = bulletsToDraw[i]; b != NULL; b = bulletsToDraw[++i])
{
blitRotated(b->texture, b->x - battle.camera.x, b->y - battle.camera.y, b->angle);
}
@ -335,7 +357,7 @@ static void faceTarget(Bullet *b)
static void applyMissileThrust(Bullet *b)
{
int maxSpeed;
int maxSpeed;
float v, thrust;
b->dx += sin(TO_RAIDANS(b->angle));
@ -376,7 +398,7 @@ static void huntTarget(Bullet *b)
static void selectNewTarget(Bullet *b)
{
int i;
int i;
Entity *e, **candidates;
if (app.gameplay.missileReTarget)
@ -385,7 +407,7 @@ static void selectNewTarget(Bullet *b)
candidates = getAllEntsInRadius(b->x, b->y, SCREEN_HEIGHT, NULL);
for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i])
for (i = 0, e = candidates[i]; e != NULL; e = candidates[++i])
{
if (e->type == ET_FIGHTER && e->side != b->owner->side && e->health > 0)
{
@ -435,13 +457,13 @@ static Bullet *createBullet(int type, int x, int y, Entity *owner)
void fireGuns(Entity *owner)
{
Bullet *b;
int i;
float x, y;
float c, s;
int i;
float x, y;
float c, s;
b = NULL;
for (i = 0 ; i < MAX_FIGHTER_GUNS ; i++)
for (i = 0; i < MAX_FIGHTER_GUNS; i++)
{
if (owner->guns[i].type != BT_NONE && (owner->guns[i].type == owner->selectedGunType || owner->combinedGuns))
{

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,37 +18,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../json/cJSON.h"
#define INITIAL_BULLET_DRAW_CAPACITY 32
#define MISSILE_LIFE (FPS * 30)
#define TURN_SPEED 2
#define TURN_THRESHOLD 3
extern void addBulletHitEffect(int x, int y, int r, int g, int b);
extern void addMissileEngineEffect(Bullet *b);
extern void addMissileExplosion(Bullet *b);
extern void awardTrophy(char *id);
extern void blitRotated(AtlasImage *atlasImage, int x, int y, float angle);
extern int collision(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2);
extern void damageFighter(Entity *e, int damage, long flags);
extern long flagsToLong(char *flags, int *add);
extern Entity **getAllEntsInRadius(int x, int y, int radius, Entity *ignore);
extern Entity **getAllEntsWithin(int x, int y, int w, int h, Entity *ignore);
extern float getAngle(int x1, int y1, int x2, int y2);
extern AtlasImage *getAtlasImage(char *filename);
extern int getDistance(int x1, int y1, int x2, int y2);
extern int isOnBattleScreen(int x, int y, int w, int h);
extern long lookup(char *name);
extern float mod(float n, float x);
extern void playBattleSound(int id, int x, int y);
extern void playSound(int id);
extern char *readFile(char *filename);
extern void *resize(void *array, int oldSize, int newSize);
extern void setAtlasColor(int r, int g, int b, int a);
extern App app;
extern Battle battle;
extern Entity *player;
void destroyBullets(void);
void destroyBulletDefs(void);
void fireMissile(Entity *owner);
void fireRocket(Entity *owner);
void fireGuns(Entity *owner);
void drawBullets(void);
void doBullets(void);
void initBulletDefs(void);
void initBullets(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,9 +18,33 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/ai.h"
#include "../battle/debris.h"
#include "../battle/effects.h"
#include "../battle/entities.h"
#include "../battle/fighters.h"
#include "../battle/messageBox.h"
#include "../battle/objectives.h"
#include "../battle/quadtree.h"
#include "../battle/script.h"
#include "../json/cJSON.h"
#include "../system/atlas.h"
#include "../system/io.h"
#include "../system/lookup.h"
#include "../system/sound.h"
#include "../system/util.h"
#include "capitalShips.h"
static int steer(void);
#define TURN_SPEED 0.1
#define TURN_THRESHOLD 2
extern Battle battle;
extern Entity *player;
extern Entity *self;
static int steer(void);
static void think(void);
static void gunThink(void);
static void gunDie(void);
@ -46,7 +70,7 @@ Entity *spawnCapitalShip(char *name, int x, int y, int side)
capitalShip = NULL;
for (def = defHead.next ; def != NULL ; def = def->next)
for (def = defHead.next; def != NULL; def = def->next)
{
if ((strcmp(def->name, name) == 0) || (def->owner != NULL && strcmp(def->owner->name, name) == 0))
{
@ -120,7 +144,7 @@ void doCapitalShip(void)
static void think(void)
{
float dir;
int wantedAngle;
int wantedAngle;
if (--self->aiActionTime <= 0)
{
@ -145,13 +169,13 @@ static void think(void)
static void findAITarget(void)
{
Entity *e;
Entity *e;
unsigned int dist, closest;
self->target = NULL;
dist = closest = MAX_TARGET_RANGE;
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (e->active && e->side != self->side && e->flags & EF_AI_TARGET)
{
@ -183,13 +207,13 @@ static void findAITarget(void)
static int steer(void)
{
int wantedAngle;
int angle;
int distance;
float dx, dy, force;
int count;
int wantedAngle;
int angle;
int distance;
float dx, dy, force;
int count;
Entity *e, **candidates;
int i;
int i;
dx = dy = 0;
count = 0;
@ -197,7 +221,7 @@ static int steer(void)
candidates = getAllEntsInRadius(self->x, self->y, 2000, self);
for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i])
for (i = 0, e = candidates[i]; e != NULL; e = candidates[++i])
{
if (e->type == ET_CAPITAL_SHIP)
{
@ -276,7 +300,7 @@ static void gunDie(void)
playBattleSound(SND_EXPLOSION_1 + rand() % 4, self->x, self->y);
addDebris(self->x, self->y, 3 + rand() % 4);
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (e != self && e->health > 0 && e->owner == self->owner && e->type == ET_COMPONENT_GUN)
{
@ -313,7 +337,7 @@ static void engineDie(void)
playBattleSound(SND_EXPLOSION_1 + rand() % 4, self->x, self->y);
addDebris(self->x, self->y, 4 + rand() % 9);
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (e != self && e->health > 0 && e->owner == self->owner && e->type == ET_COMPONENT_ENGINE)
{
@ -354,7 +378,7 @@ static void die(void)
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)
{
@ -387,7 +411,7 @@ static void disable(void)
runScriptFunction("CAP_DISABLED %s", self->owner->name);
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (e->owner == self->owner || e == self->owner)
{
@ -403,15 +427,15 @@ static void disable(void)
void loadCapitalShipDefs(void)
{
char **filenames;
char path[MAX_FILENAME_LENGTH];
int count, i;
char path[MAX_FILENAME_LENGTH];
int count, i;
memset(&defHead, 0, sizeof(Entity));
defTail = &defHead;
filenames = getFileList("data/capitalShips", &count);
for (i = 0 ; i < count ; i++)
for (i = 0; i < count; i++)
{
sprintf(path, "data/capitalShips/%s", filenames[i]);
@ -425,8 +449,8 @@ void loadCapitalShipDefs(void)
static void loadCapitalShipDef(char *filename)
{
cJSON *root;
char *text;
cJSON *root;
char *text;
Entity *e;
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Loading %s", filename);
@ -481,7 +505,7 @@ static void loadCapitalShipDef(char *filename)
static void loadComponents(Entity *parent, cJSON *components)
{
Entity *e;
cJSON *component;
cJSON *component;
parent->health = 0;
@ -535,7 +559,7 @@ static void loadComponents(Entity *parent, cJSON *components)
static void loadGuns(Entity *parent, cJSON *guns)
{
Entity *e;
cJSON *gun;
cJSON *gun;
if (guns)
{
@ -587,7 +611,7 @@ static void loadGuns(Entity *parent, cJSON *guns)
static void loadEngines(Entity *parent, cJSON *engines)
{
Entity *e;
cJSON *engine;
cJSON *engine;
if (engines)
{
@ -637,7 +661,7 @@ void updateCapitalShipComponentProperties(Entity *parent, long flags)
flags &= ~EF_AI_LEADER;
}
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (e->owner == parent)
{
@ -675,11 +699,11 @@ void updateCapitalShipComponentProperties(Entity *parent, long flags)
void loadCapitalShips(cJSON *node)
{
Entity *e;
char **types, *name, *groupName, *type;
int side, scatter, number, active;
int i, numTypes, addFlags;
long flags;
float x, y;
char **types, *name, *groupName, *type;
int side, scatter, number, active;
int i, numTypes, addFlags;
long flags;
float x, y;
if (node)
{
@ -706,7 +730,7 @@ void loadCapitalShips(cJSON *node)
flags = flagsToLong(cJSON_GetObjectItem(node, "flags")->valuestring, &addFlags);
}
for (i = 0 ; i < number ; i++)
for (i = 0; i < number; i++)
{
type = types[rand() % numTypes];
@ -751,7 +775,7 @@ void loadCapitalShips(cJSON *node)
node = node->next;
for (i = 0 ; i < numTypes ; i++)
for (i = 0; i < numTypes; i++)
{
free(types[i]);
}

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,39 +18,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../json/cJSON.h"
#define TURN_SPEED 0.1
#define TURN_THRESHOLD 2
extern void addDebris(int x, int y, int amount);
extern void addLargeEngineEffect(void);
extern void addLargeExplosion(void);
extern void addMessageBox(char *title, char *body, int type);
extern void addSmallExplosion(void);
extern void applyFighterThrust(void);
extern void doAI(void);
extern long flagsToLong(char *flags, int *add);
extern Entity **getAllEntsInRadius(int x, int y, int radius, Entity *ignore);
extern float getAngle(int x1, int y1, int x2, int y2);
extern AtlasImage *getAtlasImage(char *filename);
extern int getDistance(int x1, int y1, int x2, int y2);
extern char **getFileList(char *dir, int *count);
extern int getJSONValue(cJSON *node, char *name, int defValue);
extern char *getJSONValueStr(cJSON *node, char *name, char *defValue);
extern long lookup(char *name);
extern float mod(float n, float x);
extern void playBattleSound(int id, int x, int y);
extern char *readFile(char *filename);
extern void runScriptFunction(char *format, ...);
extern Entity *spawnEntity(void);
extern char **toTypeArray(char *types, int *numTypes);
extern void updateCondition(char *name, int type);
extern void updateObjective(char *name, int type);
extern Battle battle;
extern Entity *player;
extern Entity *self;
void destroyCapitalShipDefs(void);
void loadCapitalShips(struct cJSON *node);
void updateCapitalShipComponentProperties(Entity *parent, long flags);
void loadCapitalShipDefs(void);
void doCapitalShip(void);
Entity *spawnCapitalShip(char *name, int x, int y, int side);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,14 +18,26 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/effects.h"
#include "../json/cJSON.h"
#include "../system/atlas.h"
#include "../system/draw.h"
#include "../system/util.h"
#include "debris.h"
#define INITIAL_DEBRIS_DRAW_CAPACITY 32
#define MAX_DEBRIS_TEXTURES 6
extern Battle battle;
static void changeCourse(Debris *d);
static void resizeDrawList(void);
static Debris **debrisToDraw;
static Debris **debrisToDraw;
static AtlasImage *debrisTexture[MAX_DEBRIS_TEXTURES];
static int drawCapacity;
static int drawCapacity;
void initDebris(void)
{
@ -38,16 +50,16 @@ void initDebris(void)
drawCapacity = INITIAL_DEBRIS_DRAW_CAPACITY;
debrisToDraw = malloc(sizeof(Bullet*) * drawCapacity);
memset(debrisToDraw, 0, sizeof(Bullet*) * drawCapacity);
debrisToDraw = malloc(sizeof(Bullet *) * drawCapacity);
memset(debrisToDraw, 0, sizeof(Bullet *) * drawCapacity);
}
void addDebris(int x, int y, int amount)
{
int i;
int i;
Debris *d;
for (i = 0 ; i < amount ; i++)
for (i = 0; i < amount; i++)
{
d = malloc(sizeof(Debris));
memset(d, 0, sizeof(Debris));
@ -68,16 +80,16 @@ void addDebris(int x, int y, int amount)
void doDebris(void)
{
int i;
int i;
Debris *d, *prev;
memset(debrisToDraw, 0, sizeof(Debris*) * drawCapacity);
memset(debrisToDraw, 0, sizeof(Debris *) * drawCapacity);
prev = &battle.debrisHead;
i = 0;
for (d = battle.debrisHead.next ; d != NULL ; d = d->next)
for (d = battle.debrisHead.next; d != NULL; d = d->next)
{
d->x += d->dx;
d->y += d->dy;
@ -127,7 +139,7 @@ static void resizeDrawList(void)
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG, "Resizing debris draw capacity: %d -> %d", drawCapacity, n);
debrisToDraw = resize(debrisToDraw, sizeof(Debris*) * drawCapacity, sizeof(Debris*) * n);
debrisToDraw = resize(debrisToDraw, sizeof(Debris *) * drawCapacity, sizeof(Debris *) * n);
drawCapacity = n;
}
@ -148,10 +160,10 @@ static void changeCourse(Debris *d)
void drawDebris(void)
{
int i;
int i;
Debris *d;
for (i = 0, d = debrisToDraw[i] ; d != NULL ; d = debrisToDraw[++i])
for (i = 0, d = debrisToDraw[i]; d != NULL; d = debrisToDraw[++i])
{
blitRotated(d->texture, d->x - battle.camera.x, d->y - battle.camera.y, d->angle);
}

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,18 +18,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../json/cJSON.h"
#define INITIAL_DEBRIS_DRAW_CAPACITY 32
#define MAX_DEBRIS_TEXTURES 6
extern void addDebrisFire(int x, int y);
extern void blitRotated(AtlasImage *atlasImage, int x, int y, float angle);
extern AtlasImage *getAtlasImage(char *filename);
extern int isOnBattleScreen(int x, int y, int w, int h);
extern float mod(float n, float x);
extern void *resize(void *array, int oldSize, int newSize);
extern Battle battle;
void destroyDebris(void);
void drawDebris(void);
void doDebris(void);
void addDebris(int x, int y, int amount);
void initDebris(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,19 +18,29 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../system/atlas.h"
#include "../system/draw.h"
#include "../system/util.h"
#include "effects.h"
#define INITIAL_EFFECT_DRAW_CAPACITY 128
extern App app;
extern Battle battle;
extern Entity *self;
static void setRandomFlameHue(Effect *e);
static void setRandomShieldHue(Effect *e);
static void resizeDrawList(void);
static int pointOnScreen(float x, float y);
static float calculateEffectsValue(unsigned int);
static int pointOnScreen(float x, float y);
static AtlasImage *explosionTexture;
static AtlasImage *shieldHitTexture;
static AtlasImage *haloTexture;
static Effect **effectsToDraw;
static int drawCapacity;
static Effect **effectsToDraw;
static int drawCapacity;
void initEffects(void)
{
@ -40,21 +50,21 @@ void initEffects(void)
drawCapacity = INITIAL_EFFECT_DRAW_CAPACITY;
effectsToDraw = malloc(sizeof(Effect*) * drawCapacity);
memset(effectsToDraw, 0, sizeof(Effect*) * drawCapacity);
effectsToDraw = malloc(sizeof(Effect *) * drawCapacity);
memset(effectsToDraw, 0, sizeof(Effect *) * drawCapacity);
}
void doEffects(void)
{
int i, onScreen;
int i, onScreen;
Effect *e;
Effect *prev = &battle.effectHead;
i = 0;
memset(effectsToDraw, 0, sizeof(Effect*) * drawCapacity);
memset(effectsToDraw, 0, sizeof(Effect *) * drawCapacity);
for (e = battle.effectHead.next ; e != NULL ; e = e->next)
for (e = battle.effectHead.next; e != NULL; e = e->next)
{
e->x += e->dx;
e->y += e->dy;
@ -124,19 +134,19 @@ static void resizeDrawList(void)
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG, "Resizing effect draw capacity: %d -> %d", drawCapacity, n);
effectsToDraw = resize(effectsToDraw, sizeof(Effect*) * drawCapacity, sizeof(Effect*) * n);
effectsToDraw = resize(effectsToDraw, sizeof(Effect *) * drawCapacity, sizeof(Effect *) * n);
drawCapacity = n;
}
void drawEffects(void)
{
int i;
int i;
Effect *e;
SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_BLEND);
for (i = 0, e = effectsToDraw[i] ; e != NULL ; e = effectsToDraw[++i])
for (i = 0, e = effectsToDraw[i]; e != NULL; e = effectsToDraw[++i])
{
SDL_SetRenderDrawColor(app.renderer, e->r, e->g, e->b, e->a);
@ -192,9 +202,9 @@ void drawShieldHitEffect(Entity *e)
void addBulletHitEffect(int x, int y, int r, int g, int b)
{
Effect *e;
int i;
int i;
for (i = 0 ; i < 4 ; i++)
for (i = 0; i < 4; i++)
{
e = malloc(sizeof(Effect));
memset(e, 0, sizeof(Effect));
@ -203,7 +213,7 @@ void addBulletHitEffect(int x, int y, int r, int g, int b)
e->type = EFFECT_TEXTURE;
e->texture = explosionTexture;
e->size = calculateEffectsValue(16);
e->size = 16;
e->x = x;
e->y = y;
@ -216,7 +226,7 @@ void addBulletHitEffect(int x, int y, int r, int g, int b)
e->g = g;
e->b = b;
e->a = 64;
e->health = calculateEffectsValue(e->a);
e->health = e->a;
}
}
@ -234,12 +244,12 @@ void addSmallFighterExplosion(void)
e->x = self->x + (rand() % 16 - rand() % 16);
e->y = self->y + (rand() % 16 - rand() % 16);
e->texture = explosionTexture;
e->size = calculateEffectsValue(32);
e->size = 32;
setRandomFlameHue(e);
e->a = 128 + (rand() % 128);
e->health = calculateEffectsValue(e->a);
e->health = e->a;
e->x -= e->size / 2;
e->y -= e->size / 2;
@ -259,12 +269,12 @@ void addDebrisFire(int x, int y)
e->x = x + (rand() % 8 - rand() % 8);
e->y = y + (rand() % 8 - rand() % 8);
e->texture = explosionTexture;
e->size = calculateEffectsValue(4 + rand() % 12);
e->size = 4 + rand() % 12;
setRandomFlameHue(e);
e->a = rand() % 256;
e->health = calculateEffectsValue(e->a);
e->health = e->a;
e->x -= e->size / 2;
e->y -= e->size / 2;
@ -272,10 +282,10 @@ void addDebrisFire(int x, int y)
void addSmallExplosion(void)
{
int i;
int i;
Effect *e;
for (i = 0 ; i < 32 ; i++)
for (i = 0; i < 32; i++)
{
e = malloc(sizeof(Effect));
memset(e, 0, sizeof(Effect));
@ -291,19 +301,19 @@ void addSmallExplosion(void)
e->dy = (rand() % 25) - (rand() % 25);
e->dy *= 0.025;
e->texture = explosionTexture;
e->size = calculateEffectsValue(32 + (rand() % 64));
e->size = 32 + (rand() % 64);
e->r = 255;
setRandomFlameHue(e);
e->a = 128 + (rand() % 128);
e->health = calculateEffectsValue(e->a);
e->health = e->a;
e->x -= e->size / 2;
e->y -= e->size / 2;
}
for (i = 0 ; i < 96 ; i++)
for (i = 0; i < 96; i++)
{
e = malloc(sizeof(Effect));
memset(e, 0, sizeof(Effect));
@ -319,7 +329,7 @@ void addSmallExplosion(void)
e->dy *= 0.1;
e->a = 128;
e->health = calculateEffectsValue(e->a);
e->health = e->a;
setRandomFlameHue(e);
}
@ -327,10 +337,10 @@ void addSmallExplosion(void)
void addMineExplosion(void)
{
int i;
int i;
Effect *e;
for (i = 0 ; i < 64 ; i++)
for (i = 0; i < 64; i++)
{
e = malloc(sizeof(Effect));
memset(e, 0, sizeof(Effect));
@ -342,13 +352,13 @@ void addMineExplosion(void)
e->x = self->x + rand() % 64 - rand() % 64;
e->y = self->y + rand() % 64 - rand() % 64;
e->texture = explosionTexture;
e->size = calculateEffectsValue(64 + (rand() % 64));
e->size = 64 + (rand() % 64);
e->r = 255;
setRandomFlameHue(e);
e->a = 32 + (rand() % 192);
e->health = calculateEffectsValue(e->a);
e->health = e->a;
e->x -= e->size / 2;
e->y -= e->size / 2;
@ -363,7 +373,7 @@ void addMineExplosion(void)
e->type = EFFECT_HALO;
e->x = self->x;
e->y = self->y;
e->size = calculateEffectsValue(64);
e->size = 64;
e->scaleAmount = 6;
e->texture = haloTexture;
@ -372,15 +382,15 @@ void addMineExplosion(void)
e->b = 255;
e->a = 128;
e->health = calculateEffectsValue(128);
e->health = 128;
}
void addLargeExplosion(void)
{
int i;
int i;
Effect *e;
for (i = 0 ; i < 64 ; i++)
for (i = 0; i < 64; i++)
{
e = malloc(sizeof(Effect));
memset(e, 0, sizeof(Effect));
@ -396,13 +406,13 @@ void addLargeExplosion(void)
e->dy = (rand() % 25) - (rand() % 25);
e->dy *= 0.01;
e->texture = explosionTexture;
e->size = calculateEffectsValue(128 + (rand() % 512));
e->size = 128 + (rand() % 512);
e->r = 255;
setRandomFlameHue(e);
e->a = 128 + (rand() % 128);
e->health = calculateEffectsValue(e->a);
e->health = e->a;
e->x -= e->size / 2;
e->y -= e->size / 2;
@ -417,7 +427,7 @@ void addLargeExplosion(void)
e->type = EFFECT_HALO;
e->x = self->x;
e->y = self->y;
e->size = calculateEffectsValue(256);
e->size = 256;
e->scaleAmount = 4;
e->texture = haloTexture;
@ -426,15 +436,15 @@ void addLargeExplosion(void)
e->b = 255;
e->a = 255;
e->health = calculateEffectsValue(255);
e->health = 255;
}
void addMissileExplosion(Bullet *b)
{
int i;
int i;
Effect *e;
for (i = 0 ; i < 8 ; i++)
for (i = 0; i < 8; i++)
{
e = malloc(sizeof(Effect));
memset(e, 0, sizeof(Effect));
@ -450,19 +460,19 @@ void addMissileExplosion(Bullet *b)
e->dy = (rand() % 25) - (rand() % 25);
e->dy *= 0.025;
e->texture = explosionTexture;
e->size = calculateEffectsValue(32 + (rand() % 64));
e->size = 32 + (rand() % 64);
e->r = 255;
setRandomFlameHue(e);
e->a = 128 + (rand() % 128);
e->health = calculateEffectsValue(e->a);
e->health = e->a;
e->x -= e->size / 2;
e->y -= e->size / 2;
}
for (i = 0 ; i < 24 ; i++)
for (i = 0; i < 24; i++)
{
e = malloc(sizeof(Effect));
memset(e, 0, sizeof(Effect));
@ -478,7 +488,7 @@ void addMissileExplosion(Bullet *b)
e->dy *= 0.1;
e->a = 128;
e->health = calculateEffectsValue(e->a);
e->health = e->a;
setRandomFlameHue(e);
}
@ -487,8 +497,8 @@ void addMissileExplosion(Bullet *b)
void addEngineEffect(void)
{
Effect *e;
float c, s;
int h;
float c, s;
int h;
e = malloc(sizeof(Effect));
memset(e, 0, sizeof(Effect));
@ -508,13 +518,13 @@ void addEngineEffect(void)
e->x += rand() % 4 - rand() % 4;
e->texture = explosionTexture;
e->size = calculateEffectsValue(16);
e->size = 16;
e->r = 128;
e->g = 128;
e->b = 255;
e->a = 64;
e->health = calculateEffectsValue(e->a);
e->health = e->a;
e->x -= e->size / 2;
e->y -= e->size / 2;
@ -541,13 +551,13 @@ void addLargeEngineEffect(void)
e->x -= rand() % 4;
e->texture = explosionTexture;
e->size = calculateEffectsValue(64);
e->size = 64;
e->r = 128;
e->g = 128;
e->b = 255;
e->a = 64;
e->health = calculateEffectsValue(e->a);
e->health = e->a;
e->x -= e->size / 2;
e->y -= e->size / 2;
@ -574,11 +584,11 @@ void addMissileEngineEffect(Bullet *b)
e->x -= rand() % 4;
e->texture = explosionTexture;
e->size = calculateEffectsValue(12);
e->size = 12;
setRandomFlameHue(e);
e->a = 128;
e->health = calculateEffectsValue(e->a);
e->health = e->a;
e->x -= e->size / 2;
e->y -= e->size / 2;
@ -586,10 +596,10 @@ void addMissileEngineEffect(Bullet *b)
void addShieldSplinterEffect(Entity *ent)
{
int i;
int i;
Effect *e;
for (i = 0 ; i < 48 ; i++)
for (i = 0; i < 48; i++)
{
e = malloc(sizeof(Effect));
memset(e, 0, sizeof(Effect));
@ -613,10 +623,10 @@ void addShieldSplinterEffect(Entity *ent)
void addECMEffect(Entity *ent)
{
int i;
int i;
Effect *e;
for (i = 0 ; i < 3 ; i++)
for (i = 0; i < 3; i++)
{
e = malloc(sizeof(Effect));
@ -696,16 +706,3 @@ void destroyEffects(void)
effectsToDraw = NULL;
}
static float calculateEffectsValue(unsigned int val)
{
#if defined(__amigaos4__)
if (app.effects)
{
return val / (app.effects * 2);
}
#endif
return (float)val;
}

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,17 +18,20 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#define INITIAL_EFFECT_DRAW_CAPACITY 128
extern void blitScaled(AtlasImage *atlasImage, int x, int y, int w, int h, int center);
extern int collision(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2);
extern AtlasImage *getAtlasImage(char *name);
extern int isOnBattleScreen(int x, int y, int w, int h);
extern void *resize(void *array, int oldSize, int newSize);
extern void setAtlasColor(int r, int g, int b, int a);
extern App app;
extern Battle battle;
extern Entity *self;
void destroyEffects(void);
void addECMEffect(Entity *ent);
void addShieldSplinterEffect(Entity *ent);
void addMissileEngineEffect(Bullet *b);
void addLargeEngineEffect(void);
void addEngineEffect(void);
void addMissileExplosion(Bullet *b);
void addLargeExplosion(void);
void addMineExplosion(void);
void addSmallExplosion(void);
void addDebrisFire(int x, int y);
void addSmallFighterExplosion(void);
void addBulletHitEffect(int x, int y, int r, int g, int b);
void drawShieldHitEffect(Entity *e);
void drawEffects(void);
void doEffects(void);
void initEffects(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,8 +18,29 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/capitalShips.h"
#include "../battle/effects.h"
#include "../battle/fighters.h"
#include "../battle/quadtree.h"
#include "../battle/rope.h"
#include "../game/trophies.h"
#include "../system/atlas.h"
#include "../system/draw.h"
#include "../system/lookup.h"
#include "entities.h"
#define DISABLED_GLOW_MAX 255
#define DISABLED_GLOW_MIN 128
#define DISABLED_GLOW_SPEED 3
extern App app;
extern Battle battle;
extern Dev dev;
extern Entity *player;
extern Entity *self;
static void drawEntity(Entity *e);
static void doEntity(void);
static void alignComponents(void);
@ -27,14 +48,14 @@ static void activateEpicFighters(int side);
static void restrictToBattleArea(Entity *e);
static void drawTargetRects(Entity *e);
static void drawHealthBar(Entity *e);
static int drawComparator(const void *a, const void *b);
static int drawComparator(const void *a, const void *b);
static void notifyNewArrivals(void);
static int isComponent(Entity *e);
static int isComponent(Entity *e);
static Entity deadHead;
static Entity deadHead;
static Entity *deadTail;
static int disabledGlow;
static int disabledGlowDir;
static int disabledGlow;
static int disabledGlowDir;
void initEntities(void)
{
@ -60,9 +81,9 @@ Entity *spawnEntity(void)
void doEntities(void)
{
int numAllies, numEnemies;
int numActiveAllies, numActiveEnemies;
int numSpawnedEnemies;
int numAllies, numEnemies;
int numActiveAllies, numActiveEnemies;
int numSpawnedEnemies;
Entity *e, *prev;
prev = &battle.entityHead;
@ -75,7 +96,7 @@ void doEntities(void)
player->shield = player->maxShield;
}
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
removeFromQuadtree(e, &battle.quadtree);
@ -178,7 +199,7 @@ void doEntities(void)
if (e->killedBy == player && battle.hasSuspicionLevel)
{
if (e->aiFlags & (AIF_AVOIDS_COMBAT|AIF_DEFENSIVE))
if (e->aiFlags & (AIF_AVOIDS_COMBAT | AIF_DEFENSIVE))
{
battle.suspicionLevel -= (MAX_SUSPICION_LEVEL * 0.5);
}
@ -349,10 +370,10 @@ static void doEntity(void)
static void alignComponents(void)
{
Entity *e;
float x, y;
float c, s;
float x, y;
float c, s;
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (isComponent(e))
{
@ -387,17 +408,19 @@ static int isComponent(Entity *e)
void drawEntities(void)
{
int i;
int i;
Entity *e, **candidates;
candidates = getAllEntsWithin(battle.camera.x, battle.camera.y, app.winWidth, app.winHeight, NULL);
/* counting entities to draw */
for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i]) {};
for (i = 0, e = candidates[i]; e != NULL; e = candidates[++i])
{
};
qsort(candidates, i, sizeof(Entity*), drawComparator);
qsort(candidates, i, sizeof(Entity *), drawComparator);
for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i])
for (i = 0, e = candidates[i]; e != NULL; e = candidates[++i])
{
self = e;
@ -525,13 +548,13 @@ static void drawTargetRects(Entity *e)
void activateEntities(char *names)
{
Entity *e;
char *name;
char *name;
name = strtok(names, ";");
while (name)
{
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (strcmp(e->name, name) == 0)
{
@ -553,13 +576,13 @@ void activateEntities(char *names)
void activateEntityGroups(char *groupNames)
{
Entity *e;
char *groupName;
char *groupName;
groupName = strtok(groupNames, ";");
while (groupName)
{
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (strcmp(e->groupName, groupName) == 0)
{
@ -588,7 +611,7 @@ static void notifyNewArrivals(void)
{
Entity *e;
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (e->active && (e->type == ET_FIGHTER || e->type == ET_CAPITAL_SHIP))
{
@ -601,7 +624,7 @@ static void activateEpicFighters(int side)
{
Entity *e;
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (!e->active && e->type == ET_FIGHTER && !(e->flags & EF_NO_EPIC) && ((side == SIDE_ALLIES && e->side == SIDE_ALLIES) || (side != SIDE_ALLIES && e->side != SIDE_ALLIES)))
{
@ -626,7 +649,7 @@ void countNumEnemies(void)
{
Entity *e;
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (e->side != SIDE_ALLIES && (e->type == ET_FIGHTER || e->type == ET_CAPITAL_SHIP) && (!(e->flags & EF_NO_THREAT)))
{
@ -641,7 +664,7 @@ void addAllToQuadtree(void)
{
Entity *e;
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (e->active)
{
@ -652,8 +675,8 @@ void addAllToQuadtree(void)
static int drawComparator(const void *a, const void *b)
{
Entity *e1 = *((Entity**)a);
Entity *e2 = *((Entity**)b);
Entity *e1 = *((Entity **)a);
Entity *e2 = *((Entity **)b);
return e2->type - e1->type;
}
@ -662,7 +685,7 @@ void killEntity(char *name)
{
Entity *e;
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (strcmp(e->name, name) == 0)
{
@ -679,11 +702,11 @@ void killEntity(char *name)
void updateEntitySide(char *sideStr, char *name)
{
Entity *e;
int side;
int side;
side = lookup(sideStr);
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (strcmp(e->name, name) == 0)
{
@ -701,7 +724,7 @@ void awardPandoranCraftTrophy(void)
{
Entity *e;
for (e = deadHead.next ; e != NULL ; e = e->next)
for (e = deadHead.next; e != NULL; e = e->next)
{
if (e->killedBy == player && e->side == SIDE_PANDORAN)
{

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,31 +18,15 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#define DISABLED_GLOW_MAX 255
#define DISABLED_GLOW_MIN 128
#define DISABLED_GLOW_SPEED 3
extern void addToQuadtree(Entity *e, Quadtree *root);
extern void awardTrophy(char *id);
extern void blitRotated(AtlasImage *atlasImage, int x, int y, float angle);
extern void cutRope(Entity *e);
extern void doCapitalShip(void);
extern void doFighter(void);
extern void doRope(Entity *e);
extern void drawRope(Entity *e);
extern void drawShieldHitEffect(Entity *e);
extern Entity **getAllEntsWithin(int x, int y, int w, int h, Entity *ignore);
extern int isOnBattleScreen(int x, int y, int w, int h);
extern long lookup(char *name);
extern void removeFromQuadtree(Entity *e, Quadtree *root);
extern void resetFighter(Entity *e);
extern void setAtlasColor(int r, int g, int b, int a);
extern void updateCapitalShipComponentProperties(Entity *parent, long flags);
extern App app;
extern Battle battle;
extern Dev dev;
extern Entity *player;
extern Entity *self;
void destroyEntities(void);
void awardPandoranCraftTrophy(void);
void updateEntitySide(char *sideStr, char *name);
void killEntity(char *name);
void addAllToQuadtree(void);
void countNumEnemies(void);
void activateEntityGroups(char *groupNames);
void activateEntities(char *names);
void drawEntities(void);
void doEntities(void);
Entity *spawnEntity(void);
void initEntities(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,21 +18,46 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/ai.h"
#include "../battle/debris.h"
#include "../battle/effects.h"
#include "../battle/entities.h"
#include "../battle/hud.h"
#include "../battle/items.h"
#include "../battle/objectives.h"
#include "../battle/quadtree.h"
#include "../battle/rope.h"
#include "../battle/script.h"
#include "../galaxy/mission.h"
#include "../json/cJSON.h"
#include "../system/atlas.h"
#include "../system/io.h"
#include "../system/lookup.h"
#include "../system/sound.h"
#include "../system/util.h"
#include "fighters.h"
static void separate(void);
static void die(void);
static void immediateDie(void);
static void spinDie(void);
static void straightDie(void);
static void simpleDie(void);
static void randomizeDart(Entity *dart);
static void randomizeDartGuns(Entity *dart);
static void loadFighterDef(char *filename);
static void loadFighterDefList(char *filename);
extern Battle battle;
extern Colors colors;
extern Entity *player;
extern Entity *self;
extern Game game;
static void separate(void);
static void die(void);
static void immediateDie(void);
static void spinDie(void);
static void straightDie(void);
static void simpleDie(void);
static void randomizeDart(Entity *dart);
static void randomizeDartGuns(Entity *dart);
static void loadFighterDef(char *filename);
static void loadFighterDefList(char *filename);
static Entity *getFighterDef(char *name);
static void addFighterStat(char *name);
static void incFighterStat(char *key);
static void addFighterStat(char *name);
static void incFighterStat(char *key);
static Entity defHead, *defTail;
@ -151,7 +176,7 @@ static void randomizeDartGuns(Entity *dart)
dart->guns[0].type = BT_PLASMA;
dart->guns[0].x = dart->guns[0].y = 0;
for (i = 1 ; i < MAX_FIGHTER_GUNS ; i++)
for (i = 1; i < MAX_FIGHTER_GUNS; i++)
{
if (dart->guns[i].type)
{
@ -172,7 +197,6 @@ static void randomizeDartGuns(Entity *dart)
dart->guns[2].y = -10;
break;
/* Plasma / Laser cannons */
case 3:
dart->guns[0].type = BT_PLASMA;
@ -385,12 +409,12 @@ void doFighter(void)
static void separate(void)
{
int angle;
int distance;
float dx, dy, force;
int count;
int angle;
int distance;
float dx, dy, force;
int count;
Entity *e, **candidates;
int i;
int i;
dx = dy = 0;
count = 0;
@ -398,7 +422,7 @@ static void separate(void)
candidates = getAllEntsInRadius(self->x, self->y, self->separationRadius, self);
for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i])
for (i = 0, e = candidates[i]; e != NULL; e = candidates[++i])
{
if ((e->flags & EF_TAKES_DAMAGE) && (!(e->flags & EF_NON_SOLID)))
{
@ -683,7 +707,7 @@ void retreatEnemies(void)
{
Entity *e;
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (e->type == ET_FIGHTER && e->side != player->side)
{
@ -708,7 +732,7 @@ void retreatAllies(void)
{
Entity *e;
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (e->type == ET_FIGHTER && e->side == player->side)
{
@ -735,7 +759,7 @@ static Entity *getFighterDef(char *name)
{
Entity *e;
for (e = defHead.next ; e != NULL ; e = e->next)
for (e = defHead.next; e != NULL; e = e->next)
{
if (strcmp(e->name, name) == 0)
{
@ -750,11 +774,11 @@ static Entity *getFighterDef(char *name)
Entity **getDBFighters(int *num)
{
Entity *e, **dbFighters;
int i;
int i;
i = *num = 0;
for (e = defHead.next ; e != NULL ; e = e->next)
for (e = defHead.next; e != NULL; e = e->next)
{
if (e->description != NULL)
{
@ -762,9 +786,9 @@ Entity **getDBFighters(int *num)
}
}
dbFighters = malloc(sizeof(Entity*) * *num);
dbFighters = malloc(sizeof(Entity *) * *num);
for (e = defHead.next ; e != NULL ; e = e->next)
for (e = defHead.next; e != NULL; e = e->next)
{
if (e->description != NULL)
{
@ -790,12 +814,12 @@ void loadFighterDefs(void)
static void loadFighterDefList(char *dir)
{
char **filenames;
char path[MAX_FILENAME_LENGTH];
int count, i;
char path[MAX_FILENAME_LENGTH];
int count, i;
filenames = getFileList(dir, &count);
for (i = 0 ; i < count ; i++)
for (i = 0; i < count; i++)
{
sprintf(path, "%s/%s", dir, filenames[i]);
@ -809,10 +833,10 @@ static void loadFighterDefList(char *dir)
static void loadFighterDef(char *filename)
{
cJSON *root, *node;
char *text;
cJSON *root, *node;
char *text;
Entity *e;
int i, len;
int i, len;
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Loading %s", filename);
@ -854,7 +878,7 @@ static void loadFighterDef(char *filename)
{
i = 0;
for (node = cJSON_GetObjectItem(root, "guns")->child ; node != NULL ; node = node->next)
for (node = cJSON_GetObjectItem(root, "guns")->child; node != NULL; node = node->next)
{
e->guns[i].type = lookup(cJSON_GetObjectItem(node, "type")->valuestring);
e->guns[i].x = cJSON_GetObjectItem(node, "x")->valueint;
@ -916,7 +940,7 @@ static void addFighterStat(char *key)
tail = &game.fighterStatHead;
for (t = game.fighterStatHead.next ; t != NULL ; t = t->next)
for (t = game.fighterStatHead.next; t != NULL; t = t->next)
{
if (strcmp(t->key, key) == 0)
{
@ -940,7 +964,7 @@ static void incFighterStat(char *key)
{
Tuple *t;
for (t = game.fighterStatHead.next ; t != NULL ; t = t->next)
for (t = game.fighterStatHead.next; t != NULL; t = t->next)
{
if (strcmp(t->key, key) == 0)
{
@ -953,11 +977,11 @@ static void incFighterStat(char *key)
void loadFighters(cJSON *node)
{
Entity *e;
char **types, *name, *groupName, *type, *strpos;
int side, scatter, number, active;
int i, numTypes, addFlags, addAIFlags, id;
long flags, aiFlags;
float x, y;
char **types, *name, *groupName, *type, *strpos;
int side, scatter, number, active;
int i, numTypes, addFlags, addAIFlags, id;
long flags, aiFlags;
float x, y;
if (node)
{
@ -992,7 +1016,7 @@ void loadFighters(cJSON *node)
aiFlags = flagsToLong(cJSON_GetObjectItem(node, "aiFlags")->valuestring, &addAIFlags);
}
for (i = 0 ; i < number ; i++)
for (i = 0; i < number; i++)
{
type = types[rand() % numTypes];
@ -1060,7 +1084,7 @@ void loadFighters(cJSON *node)
node = node->next;
for (i = 0 ; i < numTypes ; i++)
for (i = 0; i < numTypes; i++)
{
free(types[i]);
}

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,42 +18,16 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../json/cJSON.h"
extern void addDebris(int x, int y, int amount);
extern void addEngineEffect(void);
extern void addHudMessage(SDL_Color c, char *format, ...);
extern void addRandomItem(int x, int y);
extern void addShieldSplinterEffect(Entity *ent);
extern void addSmallExplosion(void);
extern void addSmallFighterExplosion(void);
extern void adjustObjectiveTargetValue(char *name, int type, int amount);
extern void attachRope(void);
extern void checkSuspicionLevel(void);
extern void checkZackariaSuspicionLevel(void);
extern void completeMission(void);
extern void doAI(void);
extern long flagsToLong(char *flags, int *add);
extern Entity **getAllEntsInRadius(int x, int y, int radius, Entity *ignore);
extern float getAngle(int x1, int y1, int x2, int y2);
extern AtlasImage *getAtlasImage(char *filename);
extern int getDistance(int x1, int y1, int x2, int y2);
extern char **getFileList(char *dir, int *count);
extern int getJSONValue(cJSON *node, char *name, int defValue);
extern char *getJSONValueStr(cJSON *node, char *name, char *defValue);
extern long lookup(char *name);
extern void playBattleSound(int id, int x, int y);
extern char *readFile(char *filename);
extern void runScriptFunction(char *format, ...);
extern Entity *spawnEntity(void);
extern char **toTypeArray(char *types, int *numTypes);
extern void updateCondition(char *name, int type);
extern void updateObjective(char *name, int type);
extern Battle battle;
extern Colors colors;
extern Entity *player;
extern Entity *self;
extern Game game;
void destroyFighterStats(void);
void destroyFighterDefs(void);
void loadFighters(struct cJSON *node);
void loadFighterDefs(void);
Entity **getDBFighters(int *num);
void retreatAllies(void);
void retreatEnemies(void);
void damageFighter(Entity *e, int amount, long flags);
void applyFighterBrakes(void);
void applyFighterThrust(void);
void doFighter(void);
void resetFighter(Entity *fighter);
Entity *spawnFighter(char *name, int x, int y, int side);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,8 +18,25 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/jumpgate.h"
#include "../battle/player.h"
#include "../battle/radar.h"
#include "../system/atlas.h"
#include "../system/draw.h"
#include "../system/text.h"
#include "../system/util.h"
#include "hud.h"
#define MAX_HUD_MESSAGES 6
extern App app;
extern Battle battle;
extern Colors colors;
extern Entity *player;
extern Game game;
static void drawPlayerTargeter(void);
static void drawNumFighters(void);
static void drawHealthBars(void);
@ -34,7 +51,7 @@ static void drawHealthShieldBar(int current, int max, int x, int y, int r, int g
static void drawSuspicionLevel(void);
static void drawMissileWarning(void);
static HudMessage hudMessageHead;
static HudMessage hudMessageHead;
static HudMessage *hudMessageTail;
static AtlasImage *targetPointer;
static AtlasImage *targetCircle;
@ -48,21 +65,21 @@ static AtlasImage *boost;
static AtlasImage *nextGun;
static AtlasImage *clockIcon;
static AtlasImage *objectives;
static int numMessages;
static int numMessages;
static const char *gunName[BT_MAX];
static char *MISSILES_TEXT;
static char *TARGET_TEXT;
static char *NONE_TEXT;
static char *COMBINED_TEXT;
static char *SYSTEM_POWER_TEXT;
static char *LEADER_DIST_TEXT;
static char *TARGET_DIST_TEXT;
static char *OBJECTIVE_DIST_TEXT;
static char *JUMPGATE_DIST_TEXT;
static char *NEW_FIGHTER_TEXT;
static char *SUSPICION_TEXT;
static char *REMAINING_PILOTS_TEXT;
static char *WARNING_TEXT;
static char *MISSILES_TEXT;
static char *TARGET_TEXT;
static char *NONE_TEXT;
static char *COMBINED_TEXT;
static char *SYSTEM_POWER_TEXT;
static char *LEADER_DIST_TEXT;
static char *TARGET_DIST_TEXT;
static char *OBJECTIVE_DIST_TEXT;
static char *JUMPGATE_DIST_TEXT;
static char *NEW_FIGHTER_TEXT;
static char *SUSPICION_TEXT;
static char *REMAINING_PILOTS_TEXT;
static char *WARNING_TEXT;
void initHud(void)
{
@ -113,7 +130,7 @@ void doHud(void)
prev = &hudMessageHead;
for (hudMessage = hudMessageHead.next ; hudMessage != NULL ; hudMessage = hudMessage->next)
for (hudMessage = hudMessageHead.next; hudMessage != NULL; hudMessage = hudMessage->next)
{
hudMessage->life--;
@ -203,7 +220,7 @@ void drawHud(void)
static void drawHealthBars(void)
{
float p;
int r, g, b;
int r, g, b;
r = g = b = 0;
p = player->health;
@ -235,7 +252,7 @@ static void drawHealthBars(void)
static void drawHealthShieldBar(int current, int max, int x, int y, int r, int g, int b, int flashLow)
{
SDL_Rect rect;
float percent = 0;
float percent = 0;
if (max > 0)
{
@ -332,7 +349,7 @@ static void drawWeaponInfo(void)
{
y = 70;
for (i = 0 ; i < BT_MAX ; i++)
for (i = 0; i < BT_MAX; i++)
{
if (playerHasGun(i))
{
@ -367,7 +384,7 @@ static void drawWeaponInfo(void)
static void drawPlayerTargeter(void)
{
float angle;
int x, y;
int x, y;
if (player->target || battle.missionTarget || jumpgateEnabled() || battle.messageSpeaker)
{
@ -543,7 +560,7 @@ static float distanceToKM(int x1, int y1, int x2, int y2)
static void drawDistancesInfo(void)
{
int y;
int y;
float distance;
y = 11;
@ -599,9 +616,9 @@ static void drawDistancesInfo(void)
static void drawHudMessages(void)
{
HudMessage *hudMessage;
int y = app.winHeight - 25;
int y = app.winHeight - 25;
for (hudMessage = hudMessageHead.next ; hudMessage != NULL ; hudMessage = hudMessage->next)
for (hudMessage = hudMessageHead.next; hudMessage != NULL; hudMessage = hudMessage->next)
{
drawText(10, y, 14, TA_LEFT, hudMessage->color, hudMessage->message);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,26 +18,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#define MAX_HUD_MESSAGES 6
extern void blit(AtlasImage *atlasImage, int x, int y, int center);
extern void blitRotated(AtlasImage *atlasImage, int x, int y, float angle);
extern void drawRadar(void);
extern void drawRadarRangeWarning(void);
extern void drawText(int x, int y, int size, int align, SDL_Color c, const char *format, ...);
extern float getAngle(int x1, int y1, int x2, int y2);
extern AtlasImage *getAtlasImage(char *filename);
extern int getDistance(int x1, int y1, int x2, int y2);
extern int getPercent(float current, float total);
extern int jumpgateEnabled(void);
extern int playerHasGun(int type);
extern void setAtlasColor(int r, int g, int b, int a);
extern char *timeToString(long millis, int showHours);
extern App app;
extern Battle battle;
extern Colors colors;
extern Entity *player;
extern Game game;
void resetHud(void);
void drawHud(void);
void addHudMessage(SDL_Color c, char *format, ...);
void doHud(void);
void initHud(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,17 +18,34 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/entities.h"
#include "../battle/hud.h"
#include "../battle/objectives.h"
#include "../battle/quadtree.h"
#include "../json/cJSON.h"
#include "../system/atlas.h"
#include "../system/io.h"
#include "../system/lookup.h"
#include "../system/sound.h"
#include "../system/util.h"
#include "items.h"
static void action(void);
extern Battle battle;
extern Colors colors;
extern Entity *player;
extern Entity *self;
static void action(void);
static Entity *getItemDef(char *name);
static Entity defHead, *defTail;
void loadItemDefs(void)
{
cJSON *root, *node;
char *text;
cJSON *root, *node;
char *text;
Entity *e;
text = readFile("data/battle/items.json");
@ -38,7 +55,7 @@ void loadItemDefs(void)
memset(&defHead, 0, sizeof(Entity));
defTail = &defHead;
for (node = root->child ; node != NULL ; node = node->next)
for (node = root->child; node != NULL; node = node->next)
{
e = malloc(sizeof(Entity));
memset(e, 0, sizeof(Entity));
@ -76,7 +93,7 @@ Entity *spawnItem(char *name)
}
else
{
for (e = defHead.next ; e != NULL ; e = e->next)
for (e = defHead.next; e != NULL; e = e->next)
{
if (!def || rand() % 2)
{
@ -113,7 +130,7 @@ static Entity *getItemDef(char *defName)
{
Entity *e;
for (e = defHead.next ; e != NULL ; e = e->next)
for (e = defHead.next; e != NULL; e = e->next)
{
if (strcmp(e->defName, defName) == 0)
{
@ -128,11 +145,11 @@ static Entity *getItemDef(char *defName)
static void action(void)
{
Entity *e, **candidates;
int i;
int i;
candidates = getAllEntsInRadius(self->x, self->y, MAX(self->w, self->h), self);
for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i])
for (i = 0, e = candidates[i]; e != NULL; e = candidates[++i])
{
if (e->alive == ALIVE_ALIVE && (e->flags & EF_COLLECTS_ITEMS) && collision(self->x - (self->w / 2), self->y - (self->h / 2), self->w, self->h, e->x - (e->w / 2), e->y - (e->h / 2), e->w, e->h))
{
@ -159,10 +176,10 @@ static void action(void)
void loadItems(cJSON *node)
{
Entity *e;
char *name, *groupName, *type;
int i, scatter, number, active, addFlags;
long flags;
float x, y;
char *name, *groupName, *type;
int i, scatter, number, active, addFlags;
long flags;
float x, y;
flags = -1;
scatter = 1;
@ -190,7 +207,7 @@ void loadItems(cJSON *node)
flags = flagsToLong(cJSON_GetObjectItem(node, "flags")->valuestring, &addFlags);
}
for (i = 0 ; i < number ; i++)
for (i = 0; i < number; i++)
{
e = spawnItem(type);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,23 +18,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../json/cJSON.h"
extern void addHudMessage(SDL_Color c, char *format, ...);
extern int collision(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2);
extern long flagsToLong(char *flags, int *add);
extern Entity **getAllEntsInRadius(int x, int y, int radius, Entity *ignore);
extern AtlasImage *getAtlasImage(char *filename);
extern int getJSONValue(cJSON *node, char *name, int defValue);
extern char *getJSONValueStr(cJSON *node, char *name, char *defValue);
extern void playBattleSound(int id, int x, int y);
extern char *readFile(char *filename);
extern Entity *spawnEntity(void);
extern void updateObjective(char *name, int type);
extern Battle battle;
extern Colors colors;
extern Entity *player;
extern Entity *self;
void destroyItemDefs(void);
void loadItems(struct cJSON *node);
void addRandomItem(int x, int y);
Entity *spawnItem(char *name);
void loadItemDefs(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,8 +18,25 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/debris.h"
#include "../battle/effects.h"
#include "../battle/entities.h"
#include "../battle/objectives.h"
#include "../battle/quadtree.h"
#include "../battle/script.h"
#include "../system/atlas.h"
#include "../system/draw.h"
#include "../system/sound.h"
#include "../system/util.h"
#include "jumpgate.h"
#define ESCAPE_DISTANCE 256
extern Battle battle;
extern Entity *self;
static void think(void);
static void draw(void);
static void handleFleeingEntities(void);
@ -28,7 +45,7 @@ static void addNodes(Entity *jumpgate, long flags);
static void nodeDie(void);
static AtlasImage *portal;
static float portalAngle;
static float portalAngle;
Entity *spawnJumpgate(int side, long flags)
{
@ -47,7 +64,7 @@ Entity *spawnJumpgate(int side, long flags)
jumpgate->action = think;
jumpgate->draw = draw;
jumpgate->side = side;
jumpgate->flags = EF_NO_MT_BOX+EF_IMMORTAL+EF_AI_IGNORE+EF_NON_SOLID+EF_NO_HEALTH_BAR;
jumpgate->flags = EF_NO_MT_BOX + EF_IMMORTAL + EF_AI_IGNORE + EF_NON_SOLID + EF_NO_HEALTH_BAR;
if (flags != -1 && flags & EF_DISABLED)
{
@ -69,13 +86,13 @@ Entity *spawnJumpgate(int side, long flags)
static void addNodes(Entity *jumpgate, long flags)
{
Entity *node;
Entity *node;
AtlasImage *nodeTexture;
int i;
int i;
nodeTexture = getAtlasImage("gfx/entities/jumpgateNode.png");
for (i = 0 ; i < 360 ; i += 36)
for (i = 0; i < 360; i += 36)
{
node = spawnEntity();
STRNCPY(node->name, _("Jumpgate System Node"), MAX_NAME_LENGTH);
@ -86,7 +103,7 @@ static void addNodes(Entity *jumpgate, long flags)
node->owner = jumpgate;
node->side = jumpgate->side;
node->texture = nodeTexture;
node->flags = EF_TAKES_DAMAGE+EF_AI_IGNORE;
node->flags = EF_TAKES_DAMAGE + EF_AI_IGNORE;
node->die = nodeDie;
node->w = node->texture->rect.w;
node->h = node->texture->rect.h;
@ -136,7 +153,7 @@ void activateJumpgate(int activate)
if (battle.jumpgate && battle.jumpgate->health > 1)
{
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (e == battle.jumpgate || e->owner == battle.jumpgate)
{
@ -180,11 +197,11 @@ static void think(void)
static void handleFleeingEntities(void)
{
Entity *e, **candidates;
int i;
int i;
candidates = getAllEntsInRadius(self->x, self->y, ESCAPE_DISTANCE * 2, self);
for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i])
for (i = 0, e = candidates[i]; e != NULL; e = candidates[++i])
{
if (e->health > 0 && (e->flags & EF_RETREATING) && getDistance(self->x, self->y, e->x, e->y) <= ESCAPE_DISTANCE)
{
@ -200,11 +217,11 @@ static void handleFleeingEntities(void)
static void addEscapeEffect(Entity *ent)
{
Effect *e;
int i, n, speed;
int i, n, speed;
n = ent->w * ent->h;
for (i = 0 ; i < n ; i++)
for (i = 0; i < n; i++)
{
e = malloc(sizeof(Effect));
memset(e, 0, sizeof(Effect));

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,21 +18,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#define ESCAPE_DISTANCE 256
extern void addDebris(int x, int y, int amount);
extern void addSmallExplosion(void);
extern void blitRotated(AtlasImage *atlasImage, int x, int y, float angle);
extern Entity **getAllEntsInRadius(int x, int y, int radius, Entity *ignore);
extern AtlasImage *getAtlasImage(char *filename);
extern int getDistance(int x1, int y1, int x2, int y2);
extern void playBattleSound(int id, int x, int y);
extern void runScriptFunction(char *format, ...);
extern Entity *spawnEntity(void);
extern void updateCondition(char *name, int type);
extern void updateObjective(char *name, int type);
extern Battle battle;
extern Entity *self;
void activateJumpgate(int activate);
int jumpgateEnabled(void);
Entity *spawnJumpgate(int side, long flags);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,15 +18,24 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/script.h"
#include "../json/cJSON.h"
#include "../system/draw.h"
#include "../system/util.h"
#include "locations.h"
extern Battle battle;
extern Entity *player;
void doLocations(void)
{
Location *l, *prev;
prev = &battle.locationHead;
for (l = battle.locationHead.next ; l != NULL ; l = l->next)
for (l = battle.locationHead.next; l != NULL; l = l->next)
{
if (l->active && getDistance(player->x, player->y, l->x, l->y) <= l->size)
{
@ -45,7 +54,7 @@ void drawLocations(void)
{
Location *l;
for (l = battle.locationHead.next ; l != NULL ; l = l->next)
for (l = battle.locationHead.next; l != NULL; l = l->next)
{
if (l->active)
{
@ -56,14 +65,14 @@ void drawLocations(void)
void activateLocations(char *locations)
{
char *token;
char *token;
Location *l;
token = strtok(locations, ";");
while (token)
{
for (l = battle.locationHead.next ; l != NULL ; l = l->next)
for (l = battle.locationHead.next; l != NULL; l = l->next)
{
if (strcmp(token, l->name) == 0)
{
@ -81,9 +90,9 @@ void activateLocations(char *locations)
void createChristabelLocation(void)
{
Location *l;
Entity *e;
Entity *e;
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (strcmp(e->name, "Christabel") == 0)
{
@ -108,7 +117,7 @@ void createChristabelLocation(void)
void loadLocations(cJSON *node)
{
int active;
int active;
Location *l;
if (node)
@ -131,7 +140,6 @@ void loadLocations(cJSON *node)
l->x += (SCREEN_WIDTH / 2);
l->y += (SCREEN_HEIGHT / 2);
node = node->next;
}
}

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,14 +18,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../json/cJSON.h"
extern void drawCircle(int cx, int cy, int radius, int r, int g, int b, int a);
extern int getDistance(int x1, int y1, int x2, int y2);
extern int getJSONValue(cJSON *node, char *name, int defValue);
extern void runScriptFunction(char *format, ...);
extern Battle battle;
extern Entity *player;
void loadLocations(struct cJSON *node);
void createChristabelLocation(void);
void activateLocations(char *locations);
void drawLocations(void);
void doLocations(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,14 +18,25 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../system/sound.h"
#include "../system/text.h"
#include "messageBox.h"
#define MSG_BOX_TEXT_WIDTH 600
extern App app;
extern Battle battle;
extern Colors colors;
extern Entity *player;
static void calculateMessageBoxHeight(MessageBox *msg);
static void nextMessage(void);
static MessageBox head;
static MessageBox head;
static MessageBox *tail;
static Entity *lastWingmate;
static Entity *lastWingmate;
void initMessageBox(void)
{
@ -38,8 +49,8 @@ void initMessageBox(void)
void addMessageBox(char *title, char *body, int type)
{
MessageBox *msg;
int isFirst;
float time;
int isFirst;
float time;
isFirst = (tail == &head);
@ -119,7 +130,7 @@ int showingMessageBoxes(void)
void drawMessageBox(void)
{
MessageBox *msg = head.next;
SDL_Rect r;
SDL_Rect r;
if (msg && msg->time > 0)
{
@ -173,7 +184,7 @@ void drawMessageBox(void)
static void nextMessage(void)
{
Entity *e, *wingmate;
int isWingmate;
int isWingmate;
wingmate = NULL;
@ -181,7 +192,7 @@ static void nextMessage(void)
playSound(SND_RADIO);
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (e->active && e != player)
{
@ -191,7 +202,7 @@ static void nextMessage(void)
return;
}
if (isWingmate && e->side == player->side && e->type == ET_FIGHTER && e->speed > 0)
if (isWingmate && e->side == player->side && e->type == ET_FIGHTER && e->speed > 0)
{
wingmate = e;

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,16 +18,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#define MSG_BOX_TEXT_WIDTH 600
extern void drawText(int x, int y, int size, int align, SDL_Color c, const char *format, ...);
extern int getWrappedTextHeight(char *text, int size);
extern void playSound(int sound);
extern void useFont(char *name);
extern App app;
extern Battle battle;
extern Colors colors;
extern Entity *player;
void resetMessageBox(void);
void drawMessageBox(void);
int showingMessageBoxes(void);
void doMessageBox(void);
void addMessageBox(char *title, char *body, int type);
void initMessageBox(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,8 +18,28 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/effects.h"
#include "../battle/entities.h"
#include "../battle/fighters.h"
#include "../battle/objectives.h"
#include "../battle/quadtree.h"
#include "../battle/script.h"
#include "../game/trophies.h"
#include "../system/atlas.h"
#include "../system/sound.h"
#include "../system/util.h"
#include "mine.h"
#define DAMAGE_RANGE 250
#define SYSTEM_POWER 50
#define TRIGGER_RANGE 150
extern Battle battle;
extern Entity *player;
extern Entity *self;
static void think(void);
static void die(void);
static void lookForFighters(void);
@ -49,7 +69,7 @@ Entity *spawnMine(int type)
mine->texture = (type == ET_MINE) ? mineNormal : shadowMine;
mine->action = think;
mine->die = die;
mine->flags = EF_TAKES_DAMAGE+EF_NO_PLAYER_TARGET+EF_SHORT_RADAR_RANGE+EF_NON_SOLID+EF_NO_HEALTH_BAR;
mine->flags = EF_TAKES_DAMAGE + EF_NO_PLAYER_TARGET + EF_SHORT_RADAR_RANGE + EF_NON_SOLID + EF_NO_HEALTH_BAR;
if (type == ET_SHADOW_MINE)
{
@ -98,11 +118,11 @@ static void think(void)
static void lookForFighters(void)
{
Entity *e, **candidates;
int i;
int i;
candidates = getAllEntsInRadius(self->x, self->y, DAMAGE_RANGE, self);
for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i])
for (i = 0, e = candidates[i]; e != NULL; e = candidates[++i])
{
if (e->side != self->side && e->health > 0 && e->type == ET_FIGHTER && getDistance(self->x, self->y, e->x, e->y) <= TRIGGER_RANGE)
{
@ -123,7 +143,7 @@ static void lookForFighters(void)
static void lookForPlayer(void)
{
float dx, dy, norm;
int distance;
int distance;
if (player->alive == ALIVE_ALIVE)
{
@ -197,14 +217,14 @@ static void die(void)
static void doSplashDamage(void)
{
Entity *e, **candidates;
int i, dist, kills;
float damage, percent;
int i, dist, kills;
float damage, percent;
candidates = getAllEntsInRadius(self->x, self->y, DAMAGE_RANGE, self);
kills = 0;
for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i])
for (i = 0, e = candidates[i]; e != NULL; e = candidates[++i])
{
if (e->health > 0 && (e->type == ET_FIGHTER || e->type == ET_MINE) && !(e->flags & EF_IMMORTAL))
{

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,23 +18,4 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#define DAMAGE_RANGE 250
#define SYSTEM_POWER 50
#define TRIGGER_RANGE 150
extern void addMineExplosion(void);
extern void awardTrophy(char *id);
extern void damageFighter(Entity *e, int amount, long flags);
extern Entity **getAllEntsInRadius(int x, int y, int radius, Entity *ignore);
extern AtlasImage *getAtlasImage(char *filename);
extern int getDistance(int x1, int y1, int x2, int y2);
extern void playBattleSound(int id, int x, int y);
extern void runScriptFunction(const char *format, ...);
extern Entity *spawnEntity(void);
extern void updateObjective(char *name, int type);
extern Battle battle;
extern Entity *player;
extern Entity *self;
Entity *spawnMine(int type);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,8 +18,21 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../challenges/challenges.h"
#include "../system/atlas.h"
#include "../system/draw.h"
#include "../system/text.h"
#include "../system/util.h"
#include "../system/widgets.h"
#include "missionInfo.h"
extern App app;
extern Battle battle;
extern Colors colors;
extern Game game;
static void drawMissionSummary(AtlasImage *title);
static void drawObjectives(void);
static void drawChallenges(void);
@ -30,9 +43,9 @@ static AtlasImage *missionCompleteTexture;
static AtlasImage *missionFailedTexture;
static AtlasImage *timeUpTexture;
static const char *objectiveStatus[OS_MAX];
static char *OBJECTIVES_TEXT;
static char *NONE_TEXT;
static char *TIME_LIMIT_TEXT;
static char *OBJECTIVES_TEXT;
static char *NONE_TEXT;
static char *TIME_LIMIT_TEXT;
void initMissionInfo(void)
{
@ -126,14 +139,14 @@ static void drawMissionSummary(AtlasImage *header)
static void drawObjectives(void)
{
Objective *o;
SDL_Color color;
int y = 215;
SDL_Color color;
int y = 215;
drawText(UI_WIDTH / 2, y, 28, TA_CENTER, colors.white, OBJECTIVES_TEXT);
y += 10;
for (o = battle.objectiveHead.next ; o != NULL ; o = o->next)
for (o = battle.objectiveHead.next; o != NULL; o = o->next)
{
if (o->active)
{
@ -177,24 +190,24 @@ static void drawObjectives(void)
static void drawChallenges(void)
{
int i;
int i;
Challenge *c;
char *challengeStatus;
SDL_Color color;
int y = 215;
char *challengeStatus;
SDL_Color color;
int y = 215;
drawText(UI_WIDTH / 2, y, 24, TA_CENTER, colors.white, game.currentMission->description);
if (battle.status == MS_START && game.currentMission->challengeData.timeLimit)
{
y+= 50;
y += 50;
drawText(UI_WIDTH / 2, y, 20, TA_CENTER, colors.white, TIME_LIMIT_TEXT, timeToString(game.currentMission->challengeData.timeLimit, 0));
}
y += 25;
for (i = 0 ; i < MAX_CHALLENGES ; i++)
for (i = 0; i < MAX_CHALLENGES; i++)
{
c = game.currentMission->challengeData.challenges[i];
@ -212,7 +225,7 @@ static void drawChallenges(void)
challengeStatus = _("Complete");
}
else if (battle.status == MS_COMPLETE ||battle.status == MS_FAILED)
else if (battle.status == MS_COMPLETE || battle.status == MS_FAILED)
{
color = colors.red;
@ -224,4 +237,3 @@ static void drawChallenges(void)
}
}
}

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,17 +18,5 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
extern void blit(AtlasImage *atlasImage, int x, int y, int center);
extern void drawText(int x, int y, int size, int align, SDL_Color c, const char *format, ...);
extern void drawWidgets(char *groupName);
extern AtlasImage *getAtlasImage(char *filename);
extern char *getChallengeDescription(Challenge *c);
extern void setAtlasColor(int r, int g, int b, int a);
extern char *timeToString(long millis, int showHours);
extern App app;
extern Battle battle;
extern Colors colors;
extern Game game;
void drawMissionInfo(void);
void initMissionInfo(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,21 +18,33 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/hud.h"
#include "../battle/script.h"
#include "../galaxy/mission.h"
#include "../json/cJSON.h"
#include "../system/lookup.h"
#include "../system/sound.h"
#include "../system/util.h"
#include "objectives.h"
extern Battle battle;
extern Colors colors;
static int fireObjectivesComplete;
void doObjectives(void)
{
int objectiveFailed;
int hasHidden;
int objectiveFailed;
int hasHidden;
Objective *o;
battle.numObjectivesComplete = battle.numObjectivesTotal = battle.numConditions = 0;
objectiveFailed = 0;
hasHidden = 0;
for (o = battle.objectiveHead.next ; o != NULL ; o = o->next)
for (o = battle.objectiveHead.next; o != NULL; o = o->next)
{
if (o->active)
{
@ -105,7 +117,7 @@ void doObjectives(void)
void updateObjective(char *name, int type)
{
Objective *o;
int completed, hasHidden;
int completed, hasHidden;
if (strlen(name))
{
@ -113,7 +125,7 @@ void updateObjective(char *name, int type)
hasHidden = 0;
for (o = battle.objectiveHead.next ; o != NULL ; o = o->next)
for (o = battle.objectiveHead.next; o != NULL; o = o->next)
{
if (o->active && o->status != OS_COMPLETE)
{
@ -167,7 +179,7 @@ void adjustObjectiveTargetValue(char *name, int type, int amount)
{
Objective *o;
for (o = battle.objectiveHead.next ; o != NULL ; o = o->next)
for (o = battle.objectiveHead.next; o != NULL; o = o->next)
{
if (o->active && !o->isCondition && o->targetType == type && o->currentValue < o->targetValue && strcmp(o->targetName, name) == 0)
{
@ -192,7 +204,7 @@ void updateCondition(char *name, int type)
if (strlen(name))
{
for (o = battle.objectiveHead.next ; o != NULL ; o = o->next)
for (o = battle.objectiveHead.next; o != NULL; o = o->next)
{
if (o->active && o->isCondition && o->targetType == type && o->currentValue < o->targetValue && strcmp(o->targetName, name) == 0)
{
@ -217,7 +229,7 @@ void completeAllObjectives(void)
{
Objective *o;
for (o = battle.objectiveHead.next ; o != NULL ; o = o->next)
for (o = battle.objectiveHead.next; o != NULL; o = o->next)
{
o->status = OS_COMPLETE;
}
@ -227,7 +239,7 @@ void completeConditions(void)
{
Objective *o;
for (o = battle.objectiveHead.next ; o != NULL ; o = o->next)
for (o = battle.objectiveHead.next; o != NULL; o = o->next)
{
if (o->isCondition)
{
@ -238,12 +250,11 @@ void completeConditions(void)
}
}
void failIncompleteObjectives(void)
{
Objective *o;
for (o = battle.objectiveHead.next ; o != NULL ; o = o->next)
for (o = battle.objectiveHead.next; o != NULL; o = o->next)
{
if (o->status != OS_COMPLETE)
{
@ -254,9 +265,9 @@ void failIncompleteObjectives(void)
void activateObjectives(char *objectives)
{
char *token;
char *token;
Objective *o;
int activated;
int activated;
activated = 0;
@ -264,7 +275,7 @@ void activateObjectives(char *objectives)
while (token)
{
for (o = battle.objectiveHead.next ; o != NULL ; o = o->next)
for (o = battle.objectiveHead.next; o != NULL; o = o->next)
{
if (strcmp(token, o->id) == 0)
{
@ -333,7 +344,7 @@ void loadObjectives(cJSON *node)
void addEpicLivesObjective(void)
{
Objective *o;
char id[MAX_DESCRIPTION_LENGTH];
char id[MAX_DESCRIPTION_LENGTH];
o = malloc(sizeof(Objective));
memset(o, 0, sizeof(Objective));
@ -354,7 +365,7 @@ void addEpicLivesObjective(void)
void addEpicKillsObjective(void)
{
Objective *o;
char id[MAX_DESCRIPTION_LENGTH];
char id[MAX_DESCRIPTION_LENGTH];
o = malloc(sizeof(Objective));
memset(o, 0, sizeof(Objective));

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,16 +18,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../json/cJSON.h"
extern void addHudMessage(SDL_Color c, char *format, ...);
extern void completeMission(void);
extern void failMission(void);
extern int getJSONValue(cJSON *node, char *name, int defValue);
extern long lookup(char *name);
extern void playSound(int id);
extern void runScriptFunction(char *format, ...);
extern Battle battle;
extern Colors colors;
void addEpicKillsObjective(void);
void addEpicLivesObjective(void);
void loadObjectives(struct cJSON *node);
void activateObjectives(char *objectives);
void failIncompleteObjectives(void);
void completeConditions(void);
void completeAllObjectives(void);
void updateCondition(char *name, int type);
void adjustObjectiveTargetValue(char *name, int type, int amount);
void updateObjective(char *name, int type);
void doObjectives(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,8 +18,33 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/bullets.h"
#include "../battle/effects.h"
#include "../battle/fighters.h"
#include "../battle/hud.h"
#include "../battle/objectives.h"
#include "../galaxy/mission.h"
#include "../game/trophies.h"
#include "../json/cJSON.h"
#include "../system/controls.h"
#include "../system/lookup.h"
#include "../system/sound.h"
#include "../system/util.h"
#include "player.h"
#define MAX_SELECTABLE_PLAYERS 8
#define MAX_SELECTABLE_TARGETS 8
extern App app;
extern Battle battle;
extern Colors colors;
extern Dev dev;
extern Entity *player;
extern Entity *self;
extern Game game;
static void selectTarget(void);
static void switchGuns(void);
static void cycleRadarZoom(void);
@ -34,15 +59,15 @@ static void faceMouse(void);
static void handleMouse(void);
static void preFireMissile(void);
static void applyRestrictions(void);
static int isPriorityMissionTarget(Entity *e, int dist, int closest);
static int targetOutOfRange(void);
static int isPriorityMissionTarget(Entity *e, int dist, int closest);
static int targetOutOfRange(void);
static void rechargeBoostECM(void);
static void setPilotName(void);
static void updateDeathStats(void);
static void handleSuspicionLevel(void);
static int selectedPlayerIndex;
static int availableGuns[BT_MAX];
static int selectedPlayerIndex;
static int availableGuns[BT_MAX];
static Entity *availablePlayerUnits[MAX_SELECTABLE_PLAYERS];
void initPlayer(void)
@ -57,7 +82,7 @@ void initPlayer(void)
if (!player->combinedGuns)
{
for (i = 0 ; i < MAX_FIGHTER_GUNS ; i++)
for (i = 0; i < MAX_FIGHTER_GUNS; i++)
{
n = player->guns[i].type;
@ -105,7 +130,7 @@ static void setPilotName(void)
pos = -1;
for (i = 0 ; i < strlen(game.currentMission->pilot) ; i++)
for (i = 0; i < strlen(game.currentMission->pilot); i++)
{
if (game.currentMission->pilot[i] == ' ')
{
@ -441,13 +466,13 @@ static void initPlayerSelect(void)
{
Entity *e;
memset(&availablePlayerUnits, 0, sizeof(Entity*) * MAX_SELECTABLE_PLAYERS);
memset(&availablePlayerUnits, 0, sizeof(Entity *) * MAX_SELECTABLE_PLAYERS);
selectedPlayerIndex = 0;
if (battle.epicLives == 0 || (battle.epicLives > 0 && --battle.epicLives > 0))
{
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (e->active && e->type == ET_FIGHTER && e->health > 0 && e->side == SIDE_ALLIES && selectedPlayerIndex < MAX_SELECTABLE_PLAYERS)
{
@ -512,8 +537,7 @@ static void selectNewPlayer(int dir)
selectedPlayerIndex = mod(selectedPlayerIndex, MAX_SELECTABLE_PLAYERS);
player = availablePlayerUnits[selectedPlayerIndex];
}
while (player == NULL);
} while (player == NULL);
battle.camera.x = player->x - (app.winWidth / 2);
battle.camera.y = player->y - (app.winHeight / 2);
@ -572,8 +596,7 @@ static void switchGuns(void)
do
{
i = (i + 1) % BT_MAX;
}
while (!availableGuns[i]);
} while (!availableGuns[i]);
}
if (player->selectedGunType != i)
@ -587,20 +610,20 @@ static void selectTarget(void)
{
unsigned int closest = MAX_TARGET_RANGE;
unsigned int dist = MAX_TARGET_RANGE;
int i, total;
Entity *e, *near;
Entity *targets[MAX_SELECTABLE_TARGETS];
int i, total;
Entity *e, *near;
Entity *targets[MAX_SELECTABLE_TARGETS];
i = 0;
near = NULL;
memset(targets, 0, sizeof(Entity*) * MAX_SELECTABLE_TARGETS);
memset(targets, 0, sizeof(Entity *) * MAX_SELECTABLE_TARGETS);
if (player->target && (!player->target->health || !player->target->systemPower))
{
player->target = NULL;
}
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (e->active && e != player && (e->flags & EF_TAKES_DAMAGE) && (!(e->flags & EF_NO_PLAYER_TARGET)) && e->side != player->side && e->alive == ALIVE_ALIVE && e->systemPower > 0 && i < MAX_SELECTABLE_TARGETS)
{
@ -625,7 +648,7 @@ static void selectTarget(void)
total = i;
for (i = 0 ; i < total ; i++)
for (i = 0; i < total; i++)
{
if (targets[i] == player->target)
{
@ -651,11 +674,11 @@ static void selectMissionTarget(void)
{
unsigned int closest = MAX_TARGET_RANGE;
unsigned int dist = MAX_TARGET_RANGE;
Entity *e;
Entity *e;
battle.missionTarget = NULL;
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (e->active && e->flags & EF_MISSION_TARGET && e->alive == ALIVE_ALIVE)
{
@ -731,7 +754,7 @@ void setInitialPlayerAngle(void)
}
}
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (e->side == player->side)
{
@ -764,8 +787,8 @@ static void handleSuspicionLevel(void)
void loadPlayer(cJSON *node)
{
char *type;
int side, addFlags;
long flags;
int side, addFlags;
long flags;
type = cJSON_GetObjectItem(node, "type")->valuestring;
side = lookup(cJSON_GetObjectItem(node, "side")->valuestring);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,39 +18,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../json/cJSON.h"
#define MAX_SELECTABLE_PLAYERS 8
#define MAX_SELECTABLE_TARGETS 8
extern void addECMEffect(Entity *ent);
extern void addHudMessage(SDL_Color c, char *format, ...);
extern void applyFighterBrakes(void);
extern void applyFighterThrust(void);
extern void awardTrophy(char *id);
extern void clearControl(int type);
extern int collision(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2);
extern void failMission(void);
extern void fireGuns(Entity *owner);
extern void fireMissile(Entity *owner);
extern void fireRocket(Entity *owner);
extern long flagsToLong(char *flags, int *add);
extern float getAngle(int x1, int y1, int x2, int y2);
extern int getDistance(int x1, int y1, int x2, int y2);
extern int isAcceptControl(void);
extern int isControl(int type);
extern long lookup(char *name);
extern float mod(float n, float x);
extern void playSound(int id);
extern void resetAcceptControls(void);
extern Entity *spawnFighter(char *name, int x, int y, int side);
extern void updateCondition(char *name, int type);
extern App app;
extern Battle battle;
extern Colors colors;
extern Dev dev;
extern Entity *player;
extern Entity *self;
extern Game game;
void loadPlayer(struct cJSON *node);
int playerHasGun(int type);
void setInitialPlayerAngle(void);
void doPlayerSelect(void);
void doPlayer(void);
void initPlayer(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,15 +18,23 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../system/util.h"
#include "quadtree.h"
static Entity **candidates;
static int cIndex;
static int cCapacity;
#define QT_INITIAL_CAPACITY 8
#define QT_MAX_DEPTH 5
static int getIndex(Quadtree *root, int x, int y, int w, int h);
extern Battle battle;
static Entity **candidates;
static int cIndex;
static int cCapacity;
static int getIndex(Quadtree *root, int x, int y, int w, int h);
static void removeEntity(Entity *e, Quadtree *root);
static int candidatesComparator(const void *a, const void *b);
static int candidatesComparator(const void *a, const void *b);
static void getAllEntsWithinNode(int x, int y, int w, int h, Entity *ignore, Quadtree *root);
static void destroyQuadtreeNode(Quadtree *root);
static void resizeQTEntCapacity(Quadtree *root);
@ -35,7 +43,7 @@ static void resizeCandidates(void);
void initQuadtree(Quadtree *root)
{
Quadtree *node;
int i, w, h;
int i, w, h;
/* entire battlefield */
if (root->depth == 0)
@ -43,13 +51,13 @@ void initQuadtree(Quadtree *root)
root->w = BATTLE_AREA_WIDTH;
root->h = BATTLE_AREA_HEIGHT;
root->capacity = QT_INITIAL_CAPACITY;
root->ents = malloc(sizeof(Entity*) * root->capacity);
memset(root->ents, 0, sizeof(Entity*) * root->capacity);
root->ents = malloc(sizeof(Entity *) * root->capacity);
memset(root->ents, 0, sizeof(Entity *) * root->capacity);
cIndex = 0;
cCapacity = QT_INITIAL_CAPACITY;
candidates = malloc(sizeof(Entity*) * cCapacity);
memset(candidates, 0, sizeof(Entity*) * cCapacity);
candidates = malloc(sizeof(Entity *) * cCapacity);
memset(candidates, 0, sizeof(Entity *) * cCapacity);
}
w = root->w / 2;
@ -57,7 +65,7 @@ void initQuadtree(Quadtree *root)
if (root->depth + 1 < QT_MAX_DEPTH)
{
for (i = 0 ; i < 4 ; i++)
for (i = 0; i < 4; i++)
{
node = malloc(sizeof(Quadtree));
memset(node, 0, sizeof(Quadtree));
@ -65,8 +73,8 @@ void initQuadtree(Quadtree *root)
node->depth = root->depth + 1;
node->capacity = QT_INITIAL_CAPACITY;
node->ents = malloc(sizeof(Entity*) * node->capacity);
memset(node->ents, 0, sizeof(Entity*) * node->capacity);
node->ents = malloc(sizeof(Entity *) * node->capacity);
memset(node->ents, 0, sizeof(Entity *) * node->capacity);
if (i == 0)
{
@ -135,7 +143,7 @@ static void resizeQTEntCapacity(Quadtree *root)
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG, "Resizing QT node: %d -> %d", root->capacity, n);
root->ents = resize(root->ents, sizeof(Entity*) * root->capacity, sizeof(Entity*) * n);
root->ents = resize(root->ents, sizeof(Entity *) * root->capacity, sizeof(Entity *) * n);
root->capacity = n;
}
@ -211,7 +219,7 @@ static void removeEntity(Entity *e, Quadtree *root)
n = root->numEnts;
for (i = 0 ; i < root->capacity ; i++)
for (i = 0; i < root->capacity; i++)
{
if (root->ents[i] == e)
{
@ -220,13 +228,13 @@ static void removeEntity(Entity *e, Quadtree *root)
}
}
qsort(root->ents, n, sizeof(Entity*), candidatesComparator);
qsort(root->ents, n, sizeof(Entity *), candidatesComparator);
}
Entity **getAllEntsWithin(int x, int y, int w, int h, Entity *ignore)
{
cIndex = 0;
memset(candidates, 0, sizeof(Entity*) * cCapacity);
memset(candidates, 0, sizeof(Entity *) * cCapacity);
getAllEntsWithinNode(x, y, w, h, ignore, &battle.quadtree);
@ -254,14 +262,14 @@ static void getAllEntsWithinNode(int x, int y, int w, int h, Entity *ignore, Qua
}
else
{
for (i = 0 ; i < 4 ; i++)
for (i = 0; i < 4; i++)
{
getAllEntsWithinNode(x, y, w, h, ignore, root->node[i]);
}
}
}
for (i = 0 ; i < root->numEnts ; i++)
for (i = 0; i < root->numEnts; i++)
{
candidates[cIndex++] = root->ents[i];
@ -281,7 +289,7 @@ static void resizeCandidates(void)
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG, "Resizing candidates: %d -> %d", cCapacity, n);
candidates = resize(candidates, sizeof(Entity*) * cCapacity, sizeof(Entity*) * n);
candidates = resize(candidates, sizeof(Entity *) * cCapacity, sizeof(Entity *) * n);
cCapacity = n;
}
@ -307,7 +315,7 @@ static void destroyQuadtreeNode(Quadtree *root)
if (root->node[0])
{
for (i = 0 ; i < 4 ; i++)
for (i = 0; i < 4; i++)
{
destroyQuadtreeNode(root->node[i]);
@ -320,18 +328,18 @@ static void destroyQuadtreeNode(Quadtree *root)
static int candidatesComparator(const void *a, const void *b)
{
Entity *e1 = *((Entity**)a);
Entity *e2 = *((Entity**)b);
Entity *e1 = *((Entity **)a);
Entity *e2 = *((Entity **)b);
if (!e1)
{
return 1;
}
else if (!e2)
{
return 1;
}
else if (!e2)
{
return -1;
}
else
else
{
return 0;
}

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,11 +18,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#define QT_INITIAL_CAPACITY 8
#define QT_MAX_DEPTH 5
extern void *resize(void *array, int oldSize, int newSize);
extern Battle battle;
void destroyQuadtree(void);
Entity **getAllEntsInRadius(int x, int y, int radius, Entity *ignore);
Entity **getAllEntsWithin(int x, int y, int w, int h, Entity *ignore);
void removeFromQuadtree(Entity *e, Quadtree *root);
void addToQuadtree(Entity *e, Quadtree *root);
void initQuadtree(Quadtree *root);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,12 +18,23 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../system/atlas.h"
#include "../system/draw.h"
#include "../system/text.h"
#include "../system/util.h"
#include "radar.h"
extern App app;
extern Battle battle;
extern Colors colors;
extern Entity *player;
static AtlasImage *radarTexture;
static AtlasImage *radarWarningTexture;
static int radarRanges[] = {20, 40, 60};
static char *CAUTION_TEXT;
static int radarRanges[] = {20, 40, 60};
static char *CAUTION_TEXT;
void initRadar(void)
{
@ -39,8 +50,8 @@ void initRadar(void)
void drawRadar(void)
{
SDL_Rect r;
Entity *e;
int dist, inRange, blink;
Entity *e;
int dist, inRange, blink;
blit(radarTexture, app.winWidth - 85, app.winHeight - 85, 1);
@ -50,7 +61,7 @@ void drawRadar(void)
blink = battle.stats[STAT_TIME] % 60 < 30;
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
dist = getDistance(e->x, e->y, player->x, player->y);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,15 +18,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
extern void blit(AtlasImage *atlasImage, int x, int y, int center);
extern void blitRotated(AtlasImage *atlasImage, int x, int y, float angle);
extern void drawText(int x, int y, int size, int align, SDL_Color c, const char *format, ...);
extern AtlasImage *getAtlasImage(char *filename);
extern int getDistance(int x1, int y1, int x2, int y2);
extern App app;
extern Battle battle;
extern Colors colors;
extern Entity *player;
void drawRadarRangeWarning(void);
void drawRadar(void);
void initRadar(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,18 +18,33 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/hud.h"
#include "../battle/quadtree.h"
#include "../battle/script.h"
#include "../system/sound.h"
#include "../system/util.h"
#include "rope.h"
#define ROPE_DISTANCE 128
extern App app;
extern Battle battle;
extern Colors colors;
extern Entity *player;
extern Entity *self;
void attachRope(void)
{
int i, distance;
int i, distance;
Entity *e, **candidates;
if ((self->flags & EF_HAS_ROPE) && self->towing == NULL)
{
candidates = getAllEntsInRadius(self->x, self->y, self->separationRadius, self);
for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i])
for (i = 0, e = candidates[i]; e != NULL; e = candidates[++i])
{
if (!e->owner && e->type == ET_FIGHTER && (e->flags & EF_DISABLED) && (e->flags & EF_ROPED_ATTACHED) == 0 && e->alive == ALIVE_ALIVE)
{
@ -63,7 +78,7 @@ void attachRope(void)
void doRope(Entity *owner)
{
float dx, dy, angle, force;
int distance;
int distance;
if (owner->towing)
{

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,19 +18,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#define ROPE_DISTANCE 128
extern void addHudMessage(SDL_Color c, char *format, ...);
extern Entity **getAllEntsInRadius(int x, int y, int radius, Entity *ignore);
extern float getAngle(int x1, int y1, int x2, int y2);
extern int getDistance(int x1, int y1, int x2, int y2);
extern void playBattleSound(int id, int x, int y);
extern void runScriptFunction(char *format, ...);
extern App app;
extern Battle battle;
extern Colors colors;
extern Entity *player;
extern Entity *self;
void cutRope(Entity *e);
void drawRope(Entity *e);
void doRope(Entity *owner);
void attachRope(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,15 +18,30 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/entities.h"
#include "../battle/fighters.h"
#include "../battle/hud.h"
#include "../battle/jumpgate.h"
#include "../battle/locations.h"
#include "../battle/messageBox.h"
#include "../battle/objectives.h"
#include "../battle/spawners.h"
#include "../battle/waypoints.h"
#include "../galaxy/mission.h"
#include "../json/cJSON.h"
#include "script.h"
static void executeNextLine(ScriptRunner *runner);
void destroyScript(void);
extern Battle battle;
extern Colors colors;
static cJSON *scriptJSON, *rootJSON;
static ScriptRunner head;
static void executeNextLine(ScriptRunner *runner);
static cJSON *scriptJSON, *rootJSON;
static ScriptRunner head;
static ScriptRunner *tail;
static int runScript;
static int runScript;
void initScript(cJSON *root)
{
@ -64,7 +79,7 @@ void doScript(void)
{
prev = &head;
for (runner = head.next ; runner != NULL ; runner = runner->next)
for (runner = head.next; runner != NULL; runner = runner->next)
{
runner->delay = MAX(0, runner->delay - 1);
@ -98,10 +113,10 @@ void doScript(void)
void runScriptFunction(const char *format, ...)
{
ScriptRunner *scriptRunner;
cJSON *function;
char *functionName;
char funcNameBuffer[MAX_NAME_LENGTH];
va_list args;
cJSON *function;
char *functionName;
char funcNameBuffer[MAX_NAME_LENGTH];
va_list args;
if (scriptJSON && runScript)
{
@ -140,9 +155,9 @@ void runScriptFunction(const char *format, ...)
static void executeNextLine(ScriptRunner *runner)
{
char *line;
char command[32];
char strParam[3][256];
int intParam[2];
char command[32];
char strParam[3][256];
int intParam[2];
line = runner->line->valuestring;

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,29 +18,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../json/cJSON.h"
extern void activateEntities(char *name);
extern void activateEntityGroups(char *groupName);
extern void activateJumpgate(int activate);
extern void activateLocations(char *locations);
extern void activateNextWaypoint(void);
extern void activateObjectives(char *objectives);
extern void activateSpawner(char *name, int active);
extern void activateTrespasserSpawner(void);
extern void addHudMessage(SDL_Color c, char *format, ...);
extern void addMessageBox(char *title, char *body, int type);
extern void completeAllObjectives(void);
extern void completeMission(void);
extern void createChristabelLocation(void);
extern void failMission(void);
extern void killEntity(char *name);
extern void retreatAllies(void);
extern void retreatEnemies(void);
extern int showingMessageBoxes(void);
extern void updateEntitySide(char *side, char *entity);
extern Battle battle;
extern Colors colors;
void destroyScript(void);
void cancelScript(void);
void runScriptFunction(const char *format, ...);
void doScript(void);
void initScript(struct cJSON *root);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,17 +18,26 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/fighters.h"
#include "../json/cJSON.h"
#include "../system/lookup.h"
#include "../system/util.h"
#include "spawners.h"
extern Battle battle;
extern Entity *player;
void doSpawners(void)
{
Entity *e;
Entity *e;
Spawner *s;
char *type;
int i, num, addFlags, addAIFlags;
long flags, aiFlags;
char *type;
int i, num, addFlags, addAIFlags;
long flags, aiFlags;
for (s = battle.spawnerHead.next ; s != NULL ; s = s->next)
for (s = battle.spawnerHead.next; s != NULL; s = s->next)
{
if (s->active && --s->time <= 0)
{
@ -58,7 +67,7 @@ void doSpawners(void)
aiFlags = flagsToLong(s->aiFlags, &addAIFlags);
}
for (i = 0 ; i < num ; i++)
for (i = 0; i < num; i++)
{
type = s->types[rand() % s->numTypes];
@ -114,7 +123,7 @@ void activateSpawner(char *name, int active)
{
Spawner *s;
for (s = battle.spawnerHead.next ; s != NULL ; s = s->next)
for (s = battle.spawnerHead.next; s != NULL; s = s->next)
{
if (strcmp(s->name, name) == 0)
{
@ -126,7 +135,7 @@ void activateSpawner(char *name, int active)
void activateTrespasserSpawner(void)
{
Spawner *s;
char types[MAX_DESCRIPTION_LENGTH];
char types[MAX_DESCRIPTION_LENGTH];
s = malloc(sizeof(Spawner));
memset(s, 0, sizeof(Spawner));

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,16 +18,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../json/cJSON.h"
extern long flagsToLong(char *flags, int *add);
extern int getJSONValue(cJSON *node, char *name, int defValue);
extern char *getJSONValueStr(cJSON *node, char *name, char *defValue);
extern long lookup(char *name);
extern Entity *spawnFighter(char *name, int x, int y, int side);
extern char **toTypeArray(char *types, int *numTypes);
extern Battle battle;
extern Entity *player;
void loadSpawners(struct cJSON *node);
void activateTrespasserSpawner(void);
void activateSpawner(char *name, int active);
void doSpawners(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,8 +18,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../system/util.h"
#include "starfield.h"
extern App app;
static Star stars[MAX_STARS];
void initStars(void)
@ -28,7 +33,7 @@ void initStars(void)
memset(stars, 0, sizeof(Star) * MAX_STARS);
for (i = 0 ; i < MAX_STARS ; i++)
for (i = 0; i < MAX_STARS; i++)
{
stars[i].x = rand() % app.winWidth;
stars[i].y = rand() % app.winHeight;
@ -42,7 +47,7 @@ void doStars(float dx, float dy)
{
int i;
for (i = 0 ; i < MAX_STARS ; i++)
for (i = 0; i < MAX_STARS; i++)
{
stars[i].x -= (dx * stars[i].speed);
stars[i].y -= (dy * stars[i].speed);
@ -57,7 +62,7 @@ void drawStars(void)
int i;
int c;
for (i = 0 ; i < MAX_STARS ; i++)
for (i = 0; i < MAX_STARS; i++)
{
c = 64 * stars[i].speed;

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,8 +18,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
extern float mod(float n, float x);
extern App app;
void drawStars(void);
void doStars(float dx, float dy);
void initStars(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,12 +18,26 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/entities.h"
#include "../battle/hud.h"
#include "../battle/objectives.h"
#include "../battle/script.h"
#include "../system/atlas.h"
#include "../system/sound.h"
#include "../system/util.h"
#include "waypoints.h"
extern Battle battle;
extern Colors colors;
extern Entity *player;
extern Entity *self;
extern Game game;
static void think(void);
static int teamMatesClose(void);
static int isCurrentObjective(void);
void activateNextWaypoint(void);
static int teamMatesClose(void);
static int isCurrentObjective(void);
static int waypointId;
static int currentWaypointId;
@ -44,7 +58,7 @@ Entity *spawnWaypoint(void)
waypoint->active = 0;
waypoint->health = waypoint->maxHealth = FPS;
waypoint->texture = getAtlasImage("gfx/entities/waypoint.png");
waypoint->flags = EF_NO_MT_BOX+EF_MISSION_TARGET+EF_NO_HEALTH_BAR;
waypoint->flags = EF_NO_MT_BOX + EF_MISSION_TARGET + EF_NO_HEALTH_BAR;
waypoint->action = think;
waypoint->w = waypoint->texture->rect.w;
@ -115,7 +129,7 @@ static int teamMatesClose(void)
if (player->side != SIDE_PANDORAN)
{
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (e->active && e->type == ET_FIGHTER && e->side == SIDE_ALLIES)
{
@ -139,7 +153,7 @@ void activateNextWaypoint(void)
currentWaypointId++;
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (e->type == ET_WAYPOINT && e->id == currentWaypointId)
{

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,18 +18,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
extern void addHudMessage(SDL_Color c, char *format, ...);
extern AtlasImage *getAtlasImage(char *filename);
extern int getDistance(int x1, int y1, int x2, int y2);
extern void playSound(int id);
extern void runScriptFunction(char *format, ...);
extern Entity *spawnEntity(void);
extern void updateObjective(char *name, int type);
extern Battle battle;
extern Colors colors;
extern Entity *player;
extern Entity *self;
extern Game game;
void activateNextWaypoint(void);
Entity *spawnWaypoint(void);
void resetWaypoints(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,50 +18,85 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/battle.h"
#include "../battle/starfield.h"
#include "../challenges/challenges.h"
#include "../galaxy/mission.h"
#include "../game/fighterDatabase.h"
#include "../game/options.h"
#include "../game/stats.h"
#include "../game/title.h"
#include "../game/trophies.h"
#include "../system/atlas.h"
#include "../system/draw.h"
#include "../system/input.h"
#include "../system/resources.h"
#include "../system/sound.h"
#include "../system/text.h"
#include "../system/textures.h"
#include "../system/transition.h"
#include "../system/util.h"
#include "../system/widgets.h"
#include "challengeHome.h"
static void logic(void);
static void draw(void);
static void handleKeyboard(void);
static void drawChallenges(void);
static void doChallenges(void);
static void startChallengeMission(void);
static void drawMenu(void);
static void resume(void);
static void stats(void);
static void trophies(void);
static void options(void);
static void ok(void);
static void returnFromOptions(void);
static void unlockChallenges(void);
static void quit(void);
static void updateChallengeMissionData(void);
#define CHALLENGES_PER_PAGE 14
#define SHOW_CHALLENGES 0
#define SHOW_FIGHTER_DB 5
#define SHOW_MENU 1
#define SHOW_OPTIONS 2
#define SHOW_STATS 3
#define SHOW_TROPHIES 4
extern App app;
extern Battle battle;
extern Colors colors;
extern Dev dev;
extern Game game;
static void logic(void);
static void draw(void);
static void handleKeyboard(void);
static void drawChallenges(void);
static void doChallengeList(void);
static void startChallengeMission(void);
static void drawMenu(void);
static void resume(void);
static void stats(void);
static void trophies(void);
static void options(void);
static void ok(void);
static void returnFromOptions(void);
static void unlockChallenges(void);
static void quit(void);
static void updateChallengeMissionData(void);
static char *listRestrictions(void);
static void prevPage(void);
static void nextPage(void);
static void fighterDatabase(void);
static void prevPage(void);
static void nextPage(void);
static void fighterDatabase(void);
static SDL_Texture *background;
static AtlasImage *planetTexture;
static AtlasImage *challengeIcon;
static AtlasImage *challengeIconHighlight;
static Widget *start;
static PointF planet;
static int show;
static int page;
static float maxPages;
static char timeLimit[MAX_DESCRIPTION_LENGTH];
static char restrictions[MAX_DESCRIPTION_LENGTH];
static int hasRestrictions;
static Widget *prev;
static Widget *next;
static char *CHALLENGES_TEXT;
static char *COMPLETED_TEXT;
static char *PAGE_TEXT;
static char *LOCKED_TEXT;
static char *CRAFT_TEXT;
static char *TIME_TEXT;
static char *RESTRICTIONS_TEXT;
static AtlasImage *planetTexture;
static AtlasImage *challengeIcon;
static AtlasImage *challengeIconHighlight;
static Widget *start;
static PointF planet;
static int show;
static int page;
static float maxPages;
static char timeLimit[MAX_DESCRIPTION_LENGTH];
static char restrictions[MAX_DESCRIPTION_LENGTH];
static int hasRestrictions;
static Widget *prev;
static Widget *next;
static char *CHALLENGES_TEXT;
static char *COMPLETED_TEXT;
static char *PAGE_TEXT;
static char *LOCKED_TEXT;
static char *CRAFT_TEXT;
static char *TIME_TEXT;
static char *RESTRICTIONS_TEXT;
void initChallengeHome(void)
{
@ -98,14 +133,14 @@ void initChallengeHome(void)
challengeIcon = getAtlasImage("gfx/challenges/challengeIcon.png");
challengeIconHighlight = getAtlasImage("gfx/challenges/challengeIconHighlight.png");
battle.camera.x = battle.camera.y = 0;
battle.camera.x = battle.camera.y = 0;
planet.x = rand() % app.winWidth;
planet.y = rand() % app.winHeight;
maxPages = page = 0;
for (m = game.challengeMissionHead.next ; m != NULL ; m = m->next)
for (m = game.challengeMissionHead.next; m != NULL; m = m->next)
{
maxPages++;
}
@ -179,7 +214,7 @@ static void unlockChallenges(void)
prevCompleted = 1;
for (m = game.challengeMissionHead.next ; m != NULL ; m = m->next)
for (m = game.challengeMissionHead.next; m != NULL; m = m->next)
{
m->available = (prevCompleted > 0 || dev.debug);
@ -209,7 +244,7 @@ static void logic(void)
switch (show)
{
case SHOW_CHALLENGES:
doChallenges();
doChallengeList();
break;
case SHOW_MENU:
@ -232,16 +267,16 @@ static void logic(void)
app.doTrophyAlerts = 1;
}
static void doChallenges(void)
static void doChallengeList(void)
{
Mission *c;
int i, startIndex, end;
int i, startIndex, end;
i = 0;
startIndex = page * CHALLENGES_PER_PAGE;
end = startIndex + CHALLENGES_PER_PAGE;
for (c = game.challengeMissionHead.next ; c != NULL ; c = c->next)
for (c = game.challengeMissionHead.next; c != NULL; c = c->next)
{
if (i >= startIndex && i < end && app.mouse.button[SDL_BUTTON_LEFT] && collision(app.uiMouse.x, app.uiMouse.y, 3, 3, c->rect.x, c->rect.y, c->rect.w, c->rect.h))
{
@ -297,7 +332,7 @@ static char *listRestrictions(void)
addRestriction(textBuffer, game.currentMission->challengeData.noBoost, _("No Boost"));
addRestriction(textBuffer, game.currentMission->challengeData.noGuns, _("No Guns"));
return strlen(textBuffer) > 0 ? textBuffer : "-";
return strlen(textBuffer) > 0 ? textBuffer : "-";
}
static void draw(void)
@ -356,10 +391,10 @@ static void draw(void)
static void drawChallenges(void)
{
Mission *m;
Mission *m;
Challenge *c;
SDL_Rect r;
int i, start, end;
SDL_Rect r;
int i, start, end;
r.x = 135;
r.y = 165;
@ -370,7 +405,7 @@ static void drawChallenges(void)
i = 0;
for (m = game.challengeMissionHead.next ; m != NULL ; m = m->next)
for (m = game.challengeMissionHead.next; m != NULL; m = m->next)
{
m->rect = r;

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,58 +18,4 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#define CHALLENGES_PER_PAGE 14
#define SHOW_CHALLENGES 0
#define SHOW_FIGHTER_DB 5
#define SHOW_MENU 1
#define SHOW_OPTIONS 2
#define SHOW_STATS 3
#define SHOW_TROPHIES 4
extern void autoSizeWidgetButtons(char *group, int recenter);
extern void awardChallengeTrophies(void);
extern void awardStatsTrophies(void);
extern void blit(AtlasImage *atlasImage, int x, int y, int centered);
extern void clearInput(void);
extern int collision(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2);
extern void doFighterDatabase(void);
extern void doStars(float dx, float dy);
extern void doWidgets(void);
extern void drawBackground(SDL_Texture *texture);
extern void drawFighterDatabase(void);
extern void drawOptions(void);
extern void drawStars(void);
extern void drawStats(void);
extern void drawText(int x, int y, int size, int align, SDL_Color c, const char *format, ...);
extern void drawTrophies(void);
extern void drawWidgets(char *groupName);
extern void endSectionTransition(void);
extern AtlasImage *getAtlasImage(const char *filename);
extern char *getBackgroundTextureName(int n);
extern char *getChallengeDescription(Challenge *c);
extern char *getPlanetTextureName(int n);
extern SDL_Texture *getTexture(char *filename);
extern Widget *getWidget(const char *name, const char *group);
extern void initBattle(void);
extern void initFighterDatabaseDisplay(void);
extern void initOptions(void (*returnFromOptions)(void));
extern void initStatsDisplay(void);
extern void initTitle(void);
extern void initTrophiesDisplay(void);
extern void loadMission(char *filename);
extern void playMusic(char *filename, int loop);
extern void playSound(int sound);
extern void scrollBackground(float x, float y);
extern void selectWidget(const char *name, const char *group);
extern void startSectionTransition(void);
extern void stopMusic(void);
extern char *timeToString(long millis, int showHours);
extern void updateAllMissions(void);
extern App app;
extern Battle battle;
extern Colors colors;
extern Dev dev;
extern Game game;
void initChallengeHome(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,37 +18,52 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/fighters.h"
#include "../galaxy/mission.h"
#include "../game/stats.h"
#include "../game/trophies.h"
#include "../json/cJSON.h"
#include "../system/io.h"
#include "../system/lookup.h"
#include "../system/util.h"
#include "../system/widgets.h"
#include "challenges.h"
static void updateTimeChallenge(Challenge *c);
static void updateSurvivalChallenge(Challenge *c);
static void updateAccuracyChallenge(Challenge *c);
static void updateArmourChallenge(Challenge *c);
static void updateLossesChallenge(Challenge *c);
static void updatePlayerKillsChallenge(Challenge *c);
static void updateDisabledChallenge(Challenge *c);
static void updateItemsChallenge(Challenge *c);
static void updateSurrenderChallenge(Challenge *c);
static void updateWaypointChallenge(Challenge *c);
static void updateRescueChallenge(Challenge *c);
static void completeChallenge(void);
static void failChallenge(void);
static int updateChallenges(void);
static char *getFormattedChallengeDescription(const char *format, ...);
char *getChallengeDescription(Challenge *c);
static int challengeFinished(void);
static int alreadyPassed(void);
static void printStats(void);
extern Battle battle;
extern Dev dev;
extern Entity *player;
extern Game game;
static char descriptionBuffer[MAX_DESCRIPTION_LENGTH];
static void updateTimeChallenge(Challenge *c);
static void updateSurvivalChallenge(Challenge *c);
static void updateAccuracyChallenge(Challenge *c);
static void updateArmourChallenge(Challenge *c);
static void updateLossesChallenge(Challenge *c);
static void updatePlayerKillsChallenge(Challenge *c);
static void updateDisabledChallenge(Challenge *c);
static void updateItemsChallenge(Challenge *c);
static void updateSurrenderChallenge(Challenge *c);
static void updateWaypointChallenge(Challenge *c);
static void updateRescueChallenge(Challenge *c);
static void completeChallenge(void);
static void failChallenge(void);
static int updateChallenges(void);
static char *getFormattedChallengeDescription(const char *format, ...);
static int challengeFinished(void);
static int alreadyPassed(void);
static void printStats(void);
static char descriptionBuffer[MAX_DESCRIPTION_LENGTH];
static const char *challengeDescription[CHALLENGE_MAX];
void initChallenges(void)
{
Mission *mission, *tail;
char **filenames;
char path[MAX_FILENAME_LENGTH];
int count, i;
char **filenames;
char path[MAX_FILENAME_LENGTH];
int count, i;
challengeDescription[CHALLENGE_ARMOUR] = _("Retain at least %d%% armour");
challengeDescription[CHALLENGE_TIME] = _("Complete challenge in %d seconds or less");
@ -71,7 +86,7 @@ void initChallenges(void)
filenames = getFileList("data/challenges", &count);
for (i = 0 ; i < count ; i++)
for (i = 0; i < count; i++)
{
sprintf(path, "data/challenges/%s", filenames[i]);
@ -91,7 +106,7 @@ void initChallenges(void)
void loadChallenge(Mission *mission, cJSON *node)
{
int i;
int i;
Challenge *challenge;
mission->challengeData.isChallenge = 1;
@ -234,14 +249,14 @@ static int challengeFinished(void)
static int updateChallenges(void)
{
int i, numPassed;
int i, numPassed;
Challenge *c;
updateAccuracyStats(battle.stats);
numPassed = 0;
for (i = 0 ; i < MAX_CHALLENGES ; i++)
for (i = 0; i < MAX_CHALLENGES; i++)
{
c = game.currentMission->challengeData.challenges[i];
@ -321,7 +336,7 @@ static void printStats(void)
{
int i;
for (i = 0 ; i < STAT_MAX ; i++)
for (i = 0; i < STAT_MAX; i++)
{
if (battle.stats[i])
{
@ -478,10 +493,10 @@ char *getChallengeDescription(Challenge *c)
Challenge *getChallenge(Mission *mission, int type, int value)
{
int i;
int i;
Challenge *c;
for (i = 0 ; i < MAX_CHALLENGES ; i++)
for (i = 0; i < MAX_CHALLENGES; i++)
{
c = mission->challengeData.challenges[i];
@ -509,15 +524,15 @@ static char *getFormattedChallengeDescription(const char *format, ...)
void updateChallengeMissions(void)
{
int i;
Mission *m;
int i;
Mission *m;
Challenge *c;
for (m = game.challengeMissionHead.next ; m != NULL ; m = m->next)
for (m = game.challengeMissionHead.next; m != NULL; m = m->next)
{
m->totalChallenges = m->completedChallenges = 0;
for (i = 0 ; i < MAX_CHALLENGES ; i++)
for (i = 0; i < MAX_CHALLENGES; i++)
{
c = m->challengeData.challenges[i];
@ -581,10 +596,10 @@ static void failChallenge(void)
static int alreadyPassed(void)
{
int i;
int i;
Challenge *c;
for (i = 0 ; i < MAX_CHALLENGES ; i++)
for (i = 0; i < MAX_CHALLENGES; i++)
{
c = game.currentMission->challengeData.challenges[i];

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,23 +18,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../json/cJSON.h"
extern void awardCraftTrophy(void);
extern void awardStatsTrophies(void);
extern char **getFileList(char *dir, int *count);
extern int getJSONValue(cJSON *node, char *name, int defValue);
extern char *getLookupName(char *prefix, long num);
extern Mission *loadMissionMeta(char *filename);
extern long lookup(char *name);
extern void retreatAllies(void);
extern void retreatEnemies(void);
extern void selectWidget(const char *name, const char *group);
extern char *timeToString(long millis, int showHours);
extern void updateAccuracyStats(unsigned int *stats);
extern Battle battle;
extern Dev dev;
extern Entity *player;
extern Game game;
void updateChallengeMissions(void);
Challenge *getChallenge(Mission *mission, int type, int value);
char *getChallengeDescription(Challenge *c);
void doChallenges(void);
void loadChallenge(Mission *mission, struct cJSON *node);
void initChallenges(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,15 +18,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#include "math.h"
#include "ctype.h"
#include "SDL2/SDL.h"
#include "defs.h"
#include "math.h"
#include "SDL2/SDL.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "structs.h"
extern char *getTranslatedString(char *string);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -48,126 +48,129 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define _(string) getTranslatedString(string)
#define PI 3.14159265358979323846
#define MIN(a,b) (((a)<(b))?(a):(b))
#define MAX(a,b) (((a)>(b))?(a):(b))
#define CAROLINE(a,b) MIN(a,b)
#define STRNCPY(dest, src, n) strncpy(dest, src, n); dest[n - 1] = '\0'
#define PI 3.14159265358979323846
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#define CAROLINE(a, b) MIN(a, b)
#define STRNCPY(dest, src, n) \
strncpy(dest, src, n); \
dest[n - 1] = '\0'
#define TO_RAIDANS(angleDegrees) (angleDegrees * PI / 180.0)
#define TO_DEGREES(angleRadians) (angleRadians * 180.0 / PI)
#define SAVE_FILENAME "game.save"
#define SAVE_FILENAME "game.save"
#define CONFIG_FILENAME "config.json"
#define SCREEN_WIDTH 1280
#define SCREEN_HEIGHT 720
#define SCREEN_WIDTH 1280
#define SCREEN_HEIGHT 720
#define UI_WIDTH 1280
#define UI_HEIGHT 720
#define UI_WIDTH 1280
#define UI_HEIGHT 720
#define MAX_KEYBOARD_KEYS 350
#define MAX_MOUSE_BUTTONS 6
#define MAX_KEYBOARD_KEYS 350
#define MAX_MOUSE_BUTTONS 6
#define FPS 60
#define FPS 60
#define MAX_NAME_LENGTH 32
#define MAX_DESCRIPTION_LENGTH 512
#define MAX_LINE_LENGTH 1024
#define MAX_FILENAME_LENGTH 1024
#define MAX_PATH_LENGTH 4096
#define MAX_NAME_LENGTH 32
#define MAX_DESCRIPTION_LENGTH 512
#define MAX_LINE_LENGTH 1024
#define MAX_FILENAME_LENGTH 1024
#define MAX_PATH_LENGTH 4096
#define NUM_TEXTURE_BUCKETS 32
#define NUM_ATLAS_BUCKETS 64
#define NUM_GLYPH_BUCKETS 128
#define NUM_TEXTURE_BUCKETS 32
#define NUM_ATLAS_BUCKETS 64
#define MAX_STARS 100
#define MAX_GLYPHS 400
#define MAX_CHALLENGES 3
#define MAX_STARS 500
#define MAX_FIGHTER_GUNS 12
#define MAX_TARGET_RANGE 65536
#define MAX_SYSTEM_POWER 100
#define MAX_CHALLENGES 3
#define BATTLE_AREA_CELLS 50
#define BATTLE_AREA_WIDTH (640 * BATTLE_AREA_CELLS)
#define BATTLE_AREA_HEIGHT (360 * BATTLE_AREA_CELLS)
#define BATTLE_AREA_EDGE 250
#define MAX_FIGHTER_GUNS 12
#define MAX_TARGET_RANGE 65536
#define MAX_SYSTEM_POWER 100
#define BF_NONE 0
#define BF_ENGINE (2 << 0)
#define BF_SYSTEM_DAMAGE (2 << 1)
#define BF_SHIELD_DAMAGE (2 << 2)
#define BF_EXPLODES (2 << 3)
#define BATTLE_AREA_CELLS 50
#define BATTLE_AREA_WIDTH (640 * BATTLE_AREA_CELLS)
#define BATTLE_AREA_HEIGHT (360 * BATTLE_AREA_CELLS)
#define BATTLE_AREA_EDGE 250
#define EF_NONE 0
#define EF_NO_KILL (2 << 0)
#define EF_DISABLED (2 << 1)
#define EF_IMMORTAL (2 << 2)
#define EF_MISSION_TARGET (2 << 3)
#define EF_NO_MT_BOX (2 << 4)
#define EF_HAS_ROPE (2 << 5)
#define EF_COLLECTS_ITEMS (2 << 6)
#define EF_MUST_DISABLE (2 << 7)
#define EF_RETREATING (2 << 8)
#define EF_NO_EPIC (2 << 9)
#define EF_STATIC (2 << 10)
#define EF_TAKES_DAMAGE (2 << 11)
#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 EF_NO_KILL_INC (2 << 16)
#define EF_SHORT_RADAR_RANGE (2 << 17)
#define EF_NO_PLAYER_TARGET (2 << 18)
#define EF_AI_IGNORE (2 << 19)
#define EF_NON_SOLID (2 << 20)
#define EF_NO_HEALTH_BAR (2 << 21)
#define EF_FRIENDLY_HEALTH_BAR (2 << 22)
#define EF_NO_THREAT (2 << 23)
#define EF_DROPS_ITEMS (2 << 24)
#define EF_COMMON_FIGHTER (2 << 25)
#define BF_NONE 0
#define BF_ENGINE (2 << 0)
#define BF_SYSTEM_DAMAGE (2 << 1)
#define BF_SHIELD_DAMAGE (2 << 2)
#define BF_EXPLODES (2 << 3)
#define AIF_NONE 0
#define AIF_FOLLOWS_PLAYER (2 << 0)
#define AIF_MOVES_TO_PLAYER (2 << 1)
#define AIF_UNLIMITED_RANGE (2 << 2)
#define AIF_COLLECTS_ITEMS (2 << 3)
#define AIF_TOWS (2 << 4)
#define AIF_RETREATS (2 << 5)
#define AIF_GOAL_JUMPGATE (2 << 6)
#define AIF_AVOIDS_COMBAT (2 << 7)
#define AIF_DEFENSIVE (2 << 8)
#define AIF_MISSILE_BOAT (2 << 9)
#define AIF_AGGRESSIVE (2 << 10)
#define AIF_LONG_RANGE_FIRE (2 << 11)
#define AIF_MOVES_TO_LEADER (2 << 12)
#define AIF_EVADE (2 << 13)
#define AIF_WANDERS (2 << 14)
#define AIF_COVERS_RETREAT (2 << 15)
#define AIF_TARGET_FOCUS (2 << 16)
#define AIF_DROPS_MINES (2 << 17)
#define AIF_ASSASSIN (2 << 18)
#define AIF_SUSPICIOUS (2 << 19)
#define AIF_ZAK_SUSPICIOUS (2 << 20)
#define AIF_SURRENDERS (2 << 21)
#define AIF_SURRENDERING (2 << 22)
#define AIF_SURRENDERED (2 << 23)
#define EF_NONE 0
#define EF_NO_KILL (2 << 0)
#define EF_DISABLED (2 << 1)
#define EF_IMMORTAL (2 << 2)
#define EF_MISSION_TARGET (2 << 3)
#define EF_NO_MT_BOX (2 << 4)
#define EF_HAS_ROPE (2 << 5)
#define EF_COLLECTS_ITEMS (2 << 6)
#define EF_MUST_DISABLE (2 << 7)
#define EF_RETREATING (2 << 8)
#define EF_NO_EPIC (2 << 9)
#define EF_STATIC (2 << 10)
#define EF_TAKES_DAMAGE (2 << 11)
#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 EF_NO_KILL_INC (2 << 16)
#define EF_SHORT_RADAR_RANGE (2 << 17)
#define EF_NO_PLAYER_TARGET (2 << 18)
#define EF_AI_IGNORE (2 << 19)
#define EF_NON_SOLID (2 << 20)
#define EF_NO_HEALTH_BAR (2 << 21)
#define EF_FRIENDLY_HEALTH_BAR (2 << 22)
#define EF_NO_THREAT (2 << 23)
#define EF_DROPS_ITEMS (2 << 24)
#define EF_COMMON_FIGHTER (2 << 25)
#define AIF_NONE 0
#define AIF_FOLLOWS_PLAYER (2 << 0)
#define AIF_MOVES_TO_PLAYER (2 << 1)
#define AIF_UNLIMITED_RANGE (2 << 2)
#define AIF_COLLECTS_ITEMS (2 << 3)
#define AIF_TOWS (2 << 4)
#define AIF_RETREATS (2 << 5)
#define AIF_GOAL_JUMPGATE (2 << 6)
#define AIF_AVOIDS_COMBAT (2 << 7)
#define AIF_DEFENSIVE (2 << 8)
#define AIF_MISSILE_BOAT (2 << 9)
#define AIF_AGGRESSIVE (2 << 10)
#define AIF_LONG_RANGE_FIRE (2 << 11)
#define AIF_MOVES_TO_LEADER (2 << 12)
#define AIF_EVADE (2 << 13)
#define AIF_WANDERS (2 << 14)
#define AIF_COVERS_RETREAT (2 << 15)
#define AIF_TARGET_FOCUS (2 << 16)
#define AIF_DROPS_MINES (2 << 17)
#define AIF_ASSASSIN (2 << 18)
#define AIF_SUSPICIOUS (2 << 19)
#define AIF_ZAK_SUSPICIOUS (2 << 20)
#define AIF_SURRENDERS (2 << 21)
#define AIF_SURRENDERING (2 << 22)
#define AIF_SURRENDERED (2 << 23)
/* player abilities */
#define BOOST_RECHARGE_TIME (FPS * 7)
#define BOOST_FINISHED_TIME (FPS * 0.75)
#define ECM_RECHARGE_TIME (FPS * 7)
#define BOOST_RECHARGE_TIME (FPS * 7)
#define BOOST_FINISHED_TIME (FPS * 0.75)
#define ECM_RECHARGE_TIME (FPS * 7)
#define MB_NORMAL 0
#define MB_IMPORTANT 1
#define MB_PANDORAN 2
#define MB_NORMAL 0
#define MB_IMPORTANT 1
#define MB_PANDORAN 2
#define SS_NORMAL 0
#define SS_SOL 1
#define SS_PANDORAN 2
#define SS_NORMAL 0
#define SS_SOL 1
#define SS_PANDORAN 2
#define MAX_SUSPICION_LEVEL 1500.0
#define MAX_ZAK_SUSPICION_LEVEL (FPS * 30)
#define MAX_SUSPICION_LEVEL 1500.0
#define MAX_ZAK_SUSPICION_LEVEL (FPS * 30)
enum
{
@ -421,4 +424,3 @@ enum
TROPHY_UNEARNED,
TROPHY_MAX
};

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,63 +18,96 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/battle.h"
#include "../battle/starfield.h"
#include "../galaxy/mission.h"
#include "../galaxy/starSystems.h"
#include "../game/fighterDatabase.h"
#include "../game/options.h"
#include "../game/stats.h"
#include "../game/title.h"
#include "../game/trophies.h"
#include "../system/atlas.h"
#include "../system/draw.h"
#include "../system/input.h"
#include "../system/modalDialog.h"
#include "../system/sound.h"
#include "../system/text.h"
#include "../system/textures.h"
#include "../system/transition.h"
#include "../system/util.h"
#include "../system/widgets.h"
#include "galacticMap.h"
static void logic(void);
static void draw(void);
static void handleKeyboard(void);
static void handleMouse(void);
static void scrollGalaxy(void);
static void drawStarSystemDetail(void);
static void selectStarSystem(void);
static void drawGalaxy(void);
static void centerOnSelectedStarSystem(void);
static void doStarSystems(void);
void destroyGalacticMap(void);
static void drawPulses(void);
static void drawInfoBars(void);
static void doPulses(void);
static void addPulses(void);
static void drawMenu(void);
static void resume(void);
static void stats(void);
static void trophies(void);
static void options(void);
static void ok(void);
static void quit(void);
static void startMission(void);
static void returnFromOptions(void);
static void doStarSystemView(void);
static void updatePandoranAdvance(void);
static void fallenOK(void);
static void updateCampaignProgress(void);
static void campaignCompleteOK(void);
static Mission *nextAvailableMission(StarSystem *starSystem);
static void fighterDatabase(void);
#define MAX_LISTED_MISSIONS 9
#define SHOW_FIGHTER_DB 6
#define SHOW_GALAXY 0
#define SHOW_MENU 2
#define SHOW_OPTIONS 3
#define SHOW_STAR_SYSTEM 1
#define SHOW_STATS 4
#define SHOW_TROPHIES 5
static StarSystem *selectedStarSystem;
extern App app;
extern Colors colors;
extern Game game;
static void logic(void);
static void draw(void);
static void handleKeyboard(void);
static void handleMouse(void);
static void scrollGalaxy(void);
static void drawStarSystemDetail(void);
static void selectStarSystem(void);
static void drawGalaxy(void);
static void centerOnSelectedStarSystem(void);
static void doStarSystems(void);
static void drawPulses(void);
static void drawInfoBars(void);
static void doPulses(void);
static void addPulses(void);
static void drawMenu(void);
static void resume(void);
static void stats(void);
static void trophies(void);
static void options(void);
static void ok(void);
static void quit(void);
static void startMission(void);
static void returnFromOptions(void);
static void doStarSystemView(void);
static void updatePandoranAdvance(void);
static void fallenOK(void);
static void updateCampaignProgress(void);
static void campaignCompleteOK(void);
static Mission *nextAvailableMission(StarSystem *starSystem);
static void fighterDatabase(void);
static StarSystem *selectedStarSystem;
static SDL_Texture *background;
static AtlasImage *starSystemTexture;
static AtlasImage *arrowTexture;
static SDL_Point camera;
static Pulse pulseHead = {0};
static Pulse *pulseTail;
static int pulseTimer;
static float ssx, ssy;
static float arrowPulse;
static int show;
static int scrollingMap;
static int campaignComplete = 0;
static PointF cameraMin, cameraMax;
static Widget *startMissionButton;
static Mission *hoverMission;
static char *MISSIONS_TEXT;
static char *PILOT_TEXT;
static char *CRAFT_TEXT;
static char *SQUADRON_TEXT;
static char *COMPLETED_TEXT;
static char *EPIC_TEXT;
static char *OPTIONAL_TEXT;
static AtlasImage *starSystemTexture;
static AtlasImage *arrowTexture;
static SDL_Point camera;
static Pulse pulseHead = {0};
static Pulse *pulseTail;
static int pulseTimer;
static float ssx, ssy;
static float arrowPulse;
static int show;
static int scrollingMap;
static int campaignComplete = 0;
static PointF cameraMin, cameraMax;
static Widget *startMissionButton;
static Mission *hoverMission;
static char *MISSIONS_TEXT;
static char *PILOT_TEXT;
static char *CRAFT_TEXT;
static char *SQUADRON_TEXT;
static char *COMPLETED_TEXT;
static char *EPIC_TEXT;
static char *OPTIONAL_TEXT;
void initGalacticMap(void)
{
@ -161,7 +194,7 @@ static void updateCampaignProgress(void)
if (!campaignComplete && game.completedMissions == game.totalMissions)
{
for (starSystem = game.starSystemHead.next ; starSystem != NULL ; starSystem = starSystem->next)
for (starSystem = game.starSystemHead.next; starSystem != NULL; starSystem = starSystem->next)
{
if (starSystem->missionHead.next && starSystem->missionHead.next->available)
{
@ -181,7 +214,7 @@ static void updatePandoranAdvance(void)
fallenStarSystem = NULL;
for (starSystem = game.starSystemHead.next ; starSystem != NULL ; starSystem = starSystem->next)
for (starSystem = game.starSystemHead.next; starSystem != NULL; starSystem = starSystem->next)
{
if (starSystem->side != SIDE_PANDORAN && starSystem->fallsToPandorans && starSystem->completedMissions == starSystem->totalMissions && starSystem->totalMissions > 0)
{
@ -242,7 +275,7 @@ static void logic(void)
static void doStarSystems(void)
{
StarSystem *starSystem;
int cx, cy;
int cx, cy;
if (!scrollingMap)
{
@ -254,7 +287,7 @@ static void doStarSystems(void)
selectedStarSystem = NULL;
for (starSystem = game.starSystemHead.next ; starSystem != NULL ; starSystem = starSystem->next)
for (starSystem = game.starSystemHead.next; starSystem != NULL; starSystem = starSystem->next)
{
cameraMin.x = MIN(cameraMin.x, starSystem->x);
cameraMin.y = MIN(cameraMin.y, starSystem->y);
@ -325,7 +358,7 @@ static void doStarSystemView(void)
{
Mission *mission;
for (mission = selectedStarSystem->missionHead.next ; mission != NULL ; mission = mission->next)
for (mission = selectedStarSystem->missionHead.next; mission != NULL; mission = mission->next)
{
if (mission->available && collision(app.uiMouse.x - app.mouse.w / 2, app.uiMouse.y - app.mouse.h / 2, app.mouse.w, app.mouse.h, mission->rect.x, mission->rect.y, mission->rect.w, mission->rect.h))
{
@ -355,10 +388,10 @@ static void doStarSystemView(void)
static void addPulses(void)
{
Pulse *pulse;
Pulse *pulse;
StarSystem *starSystem;
for (starSystem = game.starSystemHead.next ; starSystem != NULL ; starSystem = starSystem->next)
for (starSystem = game.starSystemHead.next; starSystem != NULL; starSystem = starSystem->next)
{
if (starSystem->completedMissions < starSystem->availableMissions || (campaignComplete && starSystem->activeMission))
{
@ -407,7 +440,7 @@ static void doPulses(void)
prev = &pulseHead;
for (pulse = pulseHead.next ; pulse != NULL ; pulse = pulse->next)
for (pulse = pulseHead.next; pulse != NULL; pulse = pulse->next)
{
pulse->size += 0.5;
pulse->life--;
@ -472,7 +505,7 @@ static void drawPulses(void)
{
Pulse *pulse;
for (pulse = pulseHead.next ; pulse != NULL ; pulse = pulse->next)
for (pulse = pulseHead.next; pulse != NULL; pulse = pulse->next)
{
drawCircle(pulse->x - camera.x, pulse->y - camera.y, pulse->size, pulse->r, pulse->g, pulse->b, pulse->life);
}
@ -489,12 +522,12 @@ static void centerOnSelectedStarSystem(void)
static void drawGalaxy(void)
{
SDL_Rect r;
SDL_Rect r;
StarSystem *starSystem;
SDL_Color color;
float ax, ay, aa;
SDL_Color color;
float ax, ay, aa;
for (starSystem = game.starSystemHead.next ; starSystem != NULL ; starSystem = starSystem->next)
for (starSystem = game.starSystemHead.next; starSystem != NULL; starSystem = starSystem->next)
{
r.x = starSystem->x - camera.x;
r.y = starSystem->y - camera.y;
@ -619,7 +652,7 @@ static Mission *nextAvailableMission(StarSystem *starSystem)
{
Mission *m;
for (m = starSystem->missionHead.next ; m != NULL ; m = m->next)
for (m = starSystem->missionHead.next; m != NULL; m = m->next)
{
if (m->available && !m->completed)
{
@ -632,7 +665,7 @@ static Mission *nextAvailableMission(StarSystem *starSystem)
static void drawStarSystemDetail(void)
{
int y;
int y;
Mission *mission;
SDL_Rect r;
@ -662,7 +695,7 @@ static void drawStarSystemDetail(void)
y += 80;
for (mission = selectedStarSystem->missionHead.next ; mission != NULL ; mission = mission->next)
for (mission = selectedStarSystem->missionHead.next; mission != NULL; mission = mission->next)
{
mission->rect.x = 200;
mission->rect.y = y - 2;

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,59 +18,5 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#define MAX_LISTED_MISSIONS 9
#define SHOW_FIGHTER_DB 6
#define SHOW_GALAXY 0
#define SHOW_MENU 2
#define SHOW_OPTIONS 3
#define SHOW_STAR_SYSTEM 1
#define SHOW_STATS 4
#define SHOW_TROPHIES 5
extern void autoSizeWidgetButtons(char *group, int recenter);
extern void awardCampaignTrophies(void);
extern void awardStatsTrophies(void);
extern void blit(AtlasImage *atlasImage, int x, int y, int centered);
extern void blitRotated(AtlasImage *atlasImage, int x, int y, float angle);
extern void clearInput(void);
extern int collision(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2);
extern void doFighterDatabase(void);
extern void doStars(float dx, float dy);
extern void doWidgets(void);
extern void drawBackground(SDL_Texture *texture);
extern void drawCircle(int cx, int cy, int radius, int r, int g, int b, int a);
extern void drawFighterDatabase(void);
extern void drawOptions(void);
extern void drawStars(void);
extern void drawStats(void);
extern void drawText(int x, int y, int size, int align, SDL_Color c, const char *format, ...);
extern void drawTrophies(void);
extern void drawWidgets(char *groupName);
extern void endSectionTransition(void);
extern AtlasImage *getAtlasImage(char *filename);
extern StarSystem *getStarSystem(char *name);
extern SDL_Texture *getTexture(char *filename);
extern Widget *getWidget(const char *name, const char *group);
extern void initBattle(void);
extern void initFighterDatabaseDisplay(void);
extern void initOptions(void (*returnFromOptions)(void));
extern void initStatsDisplay(void);
extern void initTitle(void);
extern void initTrophiesDisplay(void);
extern void loadMission(char *filename);
extern void playMusic(char *filename, int loop);
extern void playSound(int id);
extern void scrollBackground(float x, float y);
extern void selectWidget(const char *name, const char *group);
extern void setAtlasColor(int r, int g, int b, int a);
extern void setMouseCursor(int isDrag);
extern void showOKDialog(void (*callback)(void), const char *format, ...);
extern void startSectionTransition(void);
extern void stopMusic(void);
extern void updateAllMissions(void);
extern App app;
extern Colors colors;
extern Game game;
void destroyGalacticMap(void);
void initGalacticMap(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,11 +18,46 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <time.h>
#include "../common.h"
#include "../battle/capitalShips.h"
#include "../battle/entities.h"
#include "../battle/fighters.h"
#include "../battle/items.h"
#include "../battle/jumpgate.h"
#include "../battle/locations.h"
#include "../battle/mine.h"
#include "../battle/missionInfo.h"
#include "../battle/objectives.h"
#include "../battle/player.h"
#include "../battle/script.h"
#include "../battle/spawners.h"
#include "../battle/waypoints.h"
#include "../challenges/challenges.h"
#include "../galaxy/starSystems.h"
#include "../game/trophies.h"
#include "../json/cJSON.h"
#include "../system/atlas.h"
#include "../system/io.h"
#include "../system/lookup.h"
#include "../system/resources.h"
#include "../system/sound.h"
#include "../system/textures.h"
#include "../system/transition.h"
#include "../system/util.h"
#include "../system/widgets.h"
#include "mission.h"
static void loadEntities(cJSON *node);
static unsigned long hashcode(const char *str);
static void loadEpicData(cJSON *node);
extern App app;
extern Battle battle;
extern Dev dev;
extern Entity *player;
extern Game game;
static void loadEntities(cJSON *node);
static void loadEpicData(cJSON *node);
static char *getAutoBackground(char *filename);
static char *getAutoPlanet(char *filename);
static char *getAutoMusic(char *filename);
@ -30,8 +65,8 @@ static char *getAutoMusic(char *filename);
Mission *loadMissionMeta(char *filename)
{
Mission *mission;
cJSON *root, *node;
char *text;
cJSON *root, *node;
char *text;
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Loading %s", filename);
@ -93,8 +128,8 @@ Mission *loadMissionMeta(char *filename)
void loadMission(char *filename)
{
cJSON *root;
char *text, music[MAX_DESCRIPTION_LENGTH], *background, *planet;
float planetScale;
char *text, music[MAX_DESCRIPTION_LENGTH], *background, *planet;
float planetScale;
startSectionTransition();
@ -313,10 +348,10 @@ void failMission(void)
static void loadEntities(cJSON *node)
{
Entity *e;
char *name, *groupName;
int i, type, scatter, number, active, addFlags, side;
float x, y;
long flags;
char *name, *groupName;
int i, type, scatter, number, active, addFlags, side;
float x, y;
long flags;
if (node)
{
@ -344,7 +379,7 @@ static void loadEntities(cJSON *node)
flags = flagsToLong(cJSON_GetObjectItem(node, "flags")->valuestring, &addFlags);
}
for (i = 0 ; i < number ; i++)
for (i = 0; i < number; i++)
{
switch (type)
{
@ -414,7 +449,7 @@ static void loadEntities(cJSON *node)
static void loadEpicData(cJSON *node)
{
Entity *e;
int numFighters[SIDE_MAX];
int numFighters[SIDE_MAX];
memset(numFighters, 0, sizeof(int) * SIDE_MAX);
battle.isEpic = 1;
@ -434,7 +469,7 @@ static void loadEpicData(cJSON *node)
addEpicKillsObjective();
}
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
for (e = battle.entityHead.next; e != NULL; e = e->next)
{
if (e->active && e->type == ET_FIGHTER && numFighters[e->side]++ >= battle.epicFighterLimit)
{
@ -446,12 +481,12 @@ static void loadEpicData(cJSON *node)
Mission *getMission(char *filename)
{
StarSystem *starSystem;
Mission *mission;
Mission *mission;
/* First, search the star systems */
for (starSystem = game.starSystemHead.next ; starSystem != NULL ; starSystem = starSystem->next)
for (starSystem = game.starSystemHead.next; starSystem != NULL; starSystem = starSystem->next)
{
for (mission = starSystem->missionHead.next ; mission != NULL ; mission = mission->next)
for (mission = starSystem->missionHead.next; mission != NULL; mission = mission->next)
{
if (strcmp(mission->filename, filename) == 0)
{
@ -461,7 +496,7 @@ Mission *getMission(char *filename)
}
/* now search the challenges */
for (mission = game.challengeMissionHead.next ; mission != NULL ; mission = mission->next)
for (mission = game.challengeMissionHead.next; mission != NULL; mission = mission->next)
{
if (strcmp(mission->filename, filename) == 0)
{
@ -489,27 +524,6 @@ int isMissionAvailable(Mission *mission, Mission *prev)
}
else
{
return mission->completed || (
game.completedMissions >= mission->requires &&
game.stats[STAT_OPTIONAL_COMPLETED] >= mission->requiresOptional &&
game.completedMissions < mission->expires
) || dev.debug;
return mission->completed || (game.completedMissions >= mission->requires && game.stats[STAT_OPTIONAL_COMPLETED] >= mission->requiresOptional && game.completedMissions < mission->expires) || dev.debug;
}
}
static unsigned long hashcode(const char *str)
{
unsigned long hash = 5381;
int c;
c = *str;
while (c)
{
hash = ((hash << 5) + hash) + c;
c = *str++;
}
return hash;
}

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,57 +18,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../json/cJSON.h"
#include "time.h"
extern void activateNextWaypoint(void);
extern void addAllToQuadtree(void);
extern void addEpicKillsObjective(void);
extern void addEpicLivesObjective(void);
extern void awardCraftTrophy(void);
extern void awardPostMissionTrophies(void);
extern void awardStatsTrophies(void);
extern void completeConditions(void);
extern void countNumEnemies(void);
extern void endSectionTransition(void);
extern void failIncompleteObjectives(void);
extern long flagsToLong(char *flags, int *add);
extern AtlasImage *getAtlasImage(char *filename);
extern char *getBackgroundTextureName(unsigned long n);
extern int getJSONValue(cJSON *node, char *name, int defValue);
extern char *getJSONValueStr(cJSON *node, char *name, char *defValue);
extern char *getMusicFilename(unsigned long n);
extern char *getPlanetTextureName(unsigned long n);
extern SDL_Texture *getTexture(char *filename);
extern void initMissionInfo(void);
extern void initPlayer(void);
extern void initScript(cJSON *missionJSON);
extern void loadCapitalShips(cJSON *node);
extern void loadChallenge(Mission *mission, cJSON *node);
extern void loadFighters(cJSON *node);
extern void loadItems(cJSON *node);
extern void loadLocations(cJSON *node);
extern void loadObjectives(cJSON *node);
extern void loadPlayer(cJSON *node);
extern void loadSpawners(cJSON *node);
extern long lookup(char *name);
extern void playMusic(char *filename, int loop);
extern char *readFile(char *filename);
extern void retreatEnemies(void);
extern void selectWidget(const char *name, const char *group);
extern void setInitialPlayerAngle(void);
extern Entity *spawnJumpgate(int side, long flags);
extern Entity *spawnMine(int type);
extern Entity *spawnWaypoint(void);
extern void startSectionTransition(void);
extern void stopMusic(void);
extern void updateChallengeMissions(void);
extern void updateStarSystemMissions(void);
extern App app;
extern Battle battle;
extern Dev dev;
extern Entity *player;
extern Game game;
int isMissionAvailable(Mission *mission, Mission *prev);
void updateAllMissions(void);
Mission *getMission(char *filename);
void failMission(void);
void completeMission(void);
void loadMission(char *filename);
Mission *loadMissionMeta(char *filename);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,15 +18,24 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../galaxy/mission.h"
#include "../json/cJSON.h"
#include "../system/io.h"
#include "../system/lookup.h"
#include "../system/util.h"
#include "starSystems.h"
static void loadMissions(StarSystem *starSystem);
extern Game game;
static void loadMissions(StarSystem *starSystem);
static StarSystem *loadStarSystem(cJSON *starSystemJSON);
void initStarSystems(void)
{
cJSON *root, *node;
char *text;
cJSON *root, *node;
char *text;
StarSystem *starSystem, *tail;
tail = &game.starSystemHead;
@ -34,7 +43,7 @@ void initStarSystems(void)
text = readFile("data/galaxy/starSystems.json");
root = cJSON_Parse(text);
for (node = cJSON_GetObjectItem(root, "starSystems")->child ; node != NULL ; node = node->next)
for (node = cJSON_GetObjectItem(root, "starSystems")->child; node != NULL; node = node->next)
{
starSystem = loadStarSystem(node);
tail->next = starSystem;
@ -77,17 +86,17 @@ static StarSystem *loadStarSystem(cJSON *starSystemJSON)
static void loadMissions(StarSystem *starSystem)
{
int i, count;
char name[MAX_NAME_LENGTH];
char path[MAX_FILENAME_LENGTH];
char **filenames;
int i, count;
char name[MAX_NAME_LENGTH];
char path[MAX_FILENAME_LENGTH];
char **filenames;
Mission *mission, *tail;
tail = &starSystem->missionHead;
STRNCPY(name, starSystem->name, MAX_NAME_LENGTH);
for (i = 0 ; name[i] ; i++)
for (i = 0; name[i]; i++)
{
name[i] = tolower(name[i]);
}
@ -96,7 +105,7 @@ static void loadMissions(StarSystem *starSystem)
filenames = getFileList(path, &count);
for (i = 0 ; i < count ; i++)
for (i = 0; i < count; i++)
{
sprintf(path, "data/missions/%s/%s", name, filenames[i]);
@ -118,7 +127,7 @@ StarSystem *getStarSystem(char *name)
{
StarSystem *starSystem;
for (starSystem = game.starSystemHead.next ; starSystem != NULL ; starSystem = starSystem->next)
for (starSystem = game.starSystemHead.next; starSystem != NULL; starSystem = starSystem->next)
{
if (strcmp(starSystem->name, name) == 0)
{
@ -132,15 +141,15 @@ StarSystem *getStarSystem(char *name)
void updateStarSystemMissions(void)
{
StarSystem *starSystem;
Mission *mission, *prev;
Mission *mission, *prev;
game.completedMissions = game.totalMissions = game.availableMissions = 0;
for (starSystem = game.starSystemHead.next ; starSystem != NULL ; starSystem = starSystem->next)
for (starSystem = game.starSystemHead.next; starSystem != NULL; starSystem = starSystem->next)
{
starSystem->completedMissions = starSystem->availableMissions = starSystem->totalMissions = 0;
for (mission = starSystem->missionHead.next ; mission != NULL ; mission = mission->next)
for (mission = starSystem->missionHead.next; mission != NULL; mission = mission->next)
{
starSystem->totalMissions++;
@ -161,11 +170,11 @@ void updateStarSystemMissions(void)
}
}
for (starSystem = game.starSystemHead.next ; starSystem != NULL ; starSystem = starSystem->next)
for (starSystem = game.starSystemHead.next; starSystem != NULL; starSystem = starSystem->next)
{
prev = &starSystem->missionHead;
for (mission = starSystem->missionHead.next ; mission != NULL ; mission = mission->next)
for (mission = starSystem->missionHead.next; mission != NULL; mission = mission->next)
{
mission->available = starSystem->type == SS_SOL || isMissionAvailable(mission, prev);
@ -194,7 +203,7 @@ void updateStarSystemMissions(void)
void destroyStarSystems(void)
{
StarSystem *starSystem;
Mission *mission;
Mission *mission;
while (game.starSystemHead.next)
{

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,15 +18,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../json/cJSON.h"
extern char **getFileList(char *dir, int *count);
extern int getJSONValue(cJSON *node, char *name, int defValue);
extern int isMissionAvailable(Mission *mission, Mission *prev);
extern Mission *loadMissionMeta(char *filename);
extern long lookup(char *name);
extern char *readFile(char *filename);
extern Game game;
void destroyStarSystems(void);
void updateStarSystemMissions(void);
StarSystem *getStarSystem(char *name);
void initStarSystems(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,20 +18,35 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../game/title.h"
#include "../json/cJSON.h"
#include "../system/atlas.h"
#include "../system/draw.h"
#include "../system/io.h"
#include "../system/sound.h"
#include "../system/text.h"
#include "../system/textures.h"
#include "../system/transition.h"
#include "credits.h"
#define CREDIT_LINE_LIMIT (UI_WIDTH - 300)
extern App app;
extern Colors colors;
static void loadCredits(void);
static void logic(void);
static void draw(void);
static void handleKeyboard(void);
void destroyCredits(void);
static SDL_Texture *background;
static AtlasImage *earthTexture;
static Credit head;
static Credit *tail;
static float creditSpeed;
static int timeout;
static AtlasImage *earthTexture;
static Credit head;
static Credit *tail;
static float creditSpeed;
static int timeout;
void initCredits(void)
{
@ -65,7 +80,7 @@ static void logic(void)
handleKeyboard();
for (c = head.next ; c != NULL ; c = c->next)
for (c = head.next; c != NULL; c = c->next)
{
c->y -= creditSpeed;
@ -95,7 +110,7 @@ static void draw(void)
app.textWidth = CREDIT_LINE_LIMIT;
for (c = head.next ; c != NULL ; c = c->next)
for (c = head.next; c != NULL; c = c->next)
{
if (c->y > -c->h && c->y < app.winHeight)
{
@ -108,9 +123,9 @@ static void draw(void)
static void loadCredits(void)
{
cJSON *root, *node;
int y, dist;
char *text;
cJSON *root, *node;
int y, dist;
char *text;
Credit *c;
y = app.winHeight + 100;
@ -120,7 +135,7 @@ static void loadCredits(void)
app.textWidth = CREDIT_LINE_LIMIT;
for (node = root->child ; node != NULL ; node = node->next)
for (node = root->child; node != NULL; node = node->next)
{
c = malloc(sizeof(Credit));
memset(c, 0, sizeof(Credit));

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,23 +18,5 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../json/cJSON.h"
#define CREDIT_LINE_LIMIT (UI_WIDTH - 300)
extern void blit(AtlasImage *atlasImage, int x, int y, int centered);
extern void drawBackground(SDL_Texture *texture);
extern void drawText(int x, int y, int size, int align, SDL_Color c, const char *format, ...);
extern void endSectionTransition(void);
extern AtlasImage *getAtlasImage(const char *filename);
extern SDL_Texture *getTexture(const char *filename);
extern int getWrappedTextHeight(char *text, int size);
extern void initTitle(void);
extern void playMusic(char *filename, int loop);
extern char *readFile(char *filename);
extern void startSectionTransition(void);
extern void stopMusic(void);
extern App app;
extern Colors colors;
void destroyCredits(void);
void initCredits(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,31 +18,42 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/fighters.h"
#include "../system/draw.h"
#include "../system/text.h"
#include "../system/util.h"
#include "../system/widgets.h"
#include "fighterDatabase.h"
extern App app;
extern Colors colors;
extern Game game;
static void prevFighter(void);
static void nextFighter(void);
static int countFighterGuns(Entity *fighter, int type);
static int countFighterGuns(Entity *fighter, int type);
static void setNumDestroyed(void);
static int page;
static int maxPages;
static int numDestroyed;
static Widget *prev;
static Widget *next;
static char *DB_TEXT;
static char *PAGE_TEXT;
static char *COMMON_TEXT;
static char *DESTROYED_TEXT;
static char *AFFILIATION_TEXT;
static char *ARMOUR_TEXT;
static char *SHIELD_TEXT;
static char *SPEED_TEXT;
static char *MISSILES_TEXT;
static char *MISSILE_NUM_TEXT;
static int page;
static int maxPages;
static int numDestroyed;
static Widget *prev;
static Widget *next;
static char *DB_TEXT;
static char *PAGE_TEXT;
static char *COMMON_TEXT;
static char *DESTROYED_TEXT;
static char *AFFILIATION_TEXT;
static char *ARMOUR_TEXT;
static char *SHIELD_TEXT;
static char *SPEED_TEXT;
static char *MISSILES_TEXT;
static char *MISSILE_NUM_TEXT;
static const char *gunName[BT_MAX];
static Entity **dbFighters;
static float rotation;
static Entity **dbFighters;
static float rotation;
void initFighterDatabase(void)
{
@ -97,8 +108,8 @@ void doFighterDatabase(void)
void drawFighterDatabase(void)
{
SDL_Rect r;
Entity *fighter;
int i, y, numCannons;
Entity *fighter;
int i, y, numCannons;
SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_BLEND);
SDL_SetRenderDrawColor(app.renderer, 0, 0, 0, 128);
@ -141,7 +152,7 @@ void drawFighterDatabase(void)
y = 200;
for (i = 1 ; i < BT_MAX ; i++)
for (i = 1; i < BT_MAX; i++)
{
numCannons = countFighterGuns(fighter, i);
if (numCannons > 0)
@ -176,7 +187,7 @@ static int countFighterGuns(Entity *fighter, int type)
num = 0;
for (i = 0 ; i < MAX_FIGHTER_GUNS ; i++)
for (i = 0; i < MAX_FIGHTER_GUNS; i++)
{
if (fighter->guns[i].type == type)
{
@ -203,14 +214,14 @@ static void nextFighter(void)
static void setNumDestroyed(void)
{
Tuple *t;
Tuple *t;
Entity *fighter;
fighter = dbFighters[page];
numDestroyed = 0;
for (t = game.fighterStatHead.next ; t != NULL ; t = t->next)
for (t = game.fighterStatHead.next; t != NULL; t = t->next)
{
if (strcmp(t->key, fighter->name) == 0)
{

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,15 +18,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
extern void blitRotated(AtlasImage *atlasImage, int x, int y, float angle);
extern void drawText(int x, int y, int size, int align, SDL_Color c, const char *format, ...);
extern void drawWidgets(char *groupName);
extern Entity **getDBFighters(int *num);
extern Widget *getWidget(const char *name, const char *group);
extern float mod(float n, float x);
extern App app;
extern Colors colors;
extern Game game;
void drawFighterDatabase(void);
void doFighterDatabase(void);
void initFighterDatabaseDisplay(void);
void destroyFighterDatabase(void);
void initFighterDatabase(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,8 +18,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "game.h"
extern Game game;
void initGame(void)
{
memset(&game, 0, sizeof(Game));

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,6 +18,5 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
extern Game game;
void destroyGame(void);
void initGame(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,8 +18,20 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/fighters.h"
#include "../challenges/challenges.h"
#include "../galaxy/mission.h"
#include "../galaxy/starSystems.h"
#include "../game/trophies.h"
#include "../json/cJSON.h"
#include "../system/io.h"
#include "../system/lookup.h"
#include "load.h"
extern Game game;
static void loadStats(cJSON *statsJSON);
static void loadStarSystems(cJSON *starSystemsJSON);
static void loadMissions(cJSON *missionsCJSON);
@ -30,7 +42,7 @@ static void loadFighterStats(cJSON *fighterStatsJSON);
void loadGame(void)
{
cJSON *root, *gameJSON;
char *text;
char *text;
text = readFile(getSaveFilePath(SAVE_FILENAME));
root = cJSON_Parse(text);
@ -56,9 +68,9 @@ void loadGame(void)
static void loadStarSystems(cJSON *starSystemsJSON)
{
StarSystem *starSystem;
cJSON *starSystemJSON;
cJSON *starSystemJSON;
for (starSystemJSON = starSystemsJSON->child ; starSystemJSON != NULL ; starSystemJSON = starSystemJSON->next)
for (starSystemJSON = starSystemsJSON->child; starSystemJSON != NULL; starSystemJSON = starSystemJSON->next)
{
starSystem = getStarSystem(cJSON_GetObjectItem(starSystemJSON, "name")->valuestring);
@ -71,9 +83,9 @@ static void loadStarSystems(cJSON *starSystemsJSON)
static void loadMissions(cJSON *missionsJSON)
{
Mission *mission;
cJSON *missionJSON;
cJSON *missionJSON;
for (missionJSON = missionsJSON->child ; missionJSON != NULL ; missionJSON = missionJSON->next)
for (missionJSON = missionsJSON->child; missionJSON != NULL; missionJSON = missionJSON->next)
{
mission = getMission(cJSON_GetObjectItem(missionJSON, "filename")->valuestring);
@ -86,18 +98,18 @@ static void loadMissions(cJSON *missionsJSON)
static void loadChallenges(cJSON *missionsJSON)
{
Mission *mission;
Mission *mission;
Challenge *challenge;
cJSON *missionJSON, *challengeJSON;
int type, value;
cJSON *missionJSON, *challengeJSON;
int type, value;
if (missionsJSON)
{
for (missionJSON = missionsJSON->child ; missionJSON != NULL ; missionJSON = missionJSON->next)
for (missionJSON = missionsJSON->child; missionJSON != NULL; missionJSON = missionJSON->next)
{
mission = getMission(cJSON_GetObjectItem(missionJSON, "filename")->valuestring);
for (challengeJSON = cJSON_GetObjectItem(missionJSON, "challenges")->child ; challengeJSON != NULL ; challengeJSON = challengeJSON->next)
for (challengeJSON = cJSON_GetObjectItem(missionJSON, "challenges")->child; challengeJSON != NULL; challengeJSON = challengeJSON->next)
{
type = lookup(cJSON_GetObjectItem(challengeJSON, "type")->valuestring);
value = cJSON_GetObjectItem(challengeJSON, "value")->valueint;
@ -115,10 +127,10 @@ static void loadChallenges(cJSON *missionsJSON)
static void loadStats(cJSON *statsJSON)
{
int i;
int i;
char *statName;
for (i = 0 ; i < STAT_MAX ; i++)
for (i = 0; i < STAT_MAX; i++)
{
statName = getLookupName("STAT_", i);
@ -132,11 +144,11 @@ static void loadStats(cJSON *statsJSON)
static void loadTrophies(cJSON *trophiesJSON)
{
Trophy *t;
cJSON *trophyJSON;
cJSON *trophyJSON;
if (trophiesJSON)
{
for (trophyJSON = trophiesJSON->child ; trophyJSON != NULL ; trophyJSON = trophyJSON->next)
for (trophyJSON = trophiesJSON->child; trophyJSON != NULL; trophyJSON = trophyJSON->next)
{
t = getTrophy(cJSON_GetObjectItem(trophyJSON, "id")->valuestring);
@ -160,7 +172,7 @@ static void loadFighterStats(cJSON *fighterStatsJSON)
if (fighterStatsJSON)
{
for (fighterStatJSON = fighterStatsJSON->child ; fighterStatJSON != NULL ; fighterStatJSON = fighterStatJSON->next)
for (fighterStatJSON = fighterStatsJSON->child; fighterStatJSON != NULL; fighterStatJSON = fighterStatJSON->next)
{
t = malloc(sizeof(Tuple));
memset(t, 0, sizeof(Tuple));

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,18 +18,4 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../json/cJSON.h"
extern void destroyFighterStats(void);
extern Challenge *getChallenge(Mission *mission, int type, int value);
extern char *getLookupName(char *prefix, long num);
extern Mission *getMission(char *filename);
extern char *getSaveFilePath(char *filename);
extern StarSystem *getStarSystem(char *name);
extern Trophy *getTrophy(char *id);
extern int lookup(char *lookup);
extern char *readFile(char *filename);
extern Game game;
void loadGame(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,10 +18,25 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <SDL2/SDL_mixer.h>
#include "../common.h"
#include "../battle/starfield.h"
#include "../system/controls.h"
#include "../system/draw.h"
#include "../system/init.h"
#include "../system/text.h"
#include "../system/widgets.h"
#include "options.h"
#define SHOW_CONTROLS 1
#define SHOW_MAIN 0
extern App app;
extern Colors colors;
static void changeWindowSize(char *value);
static void changeEffectsReduction(char *value);
static void changeSoundVolume(char *value);
static void changeMusicVolume(char *value);
static void changeFullscreen(char *value);
@ -31,7 +46,7 @@ static void drawMain(void);
static void controls(void);
static void (*returnFromOptions)(void);
static int show;
static int show;
static char *OPTIONS_TEXT;
static char *RESOLUTION_TEXT;
@ -42,7 +57,6 @@ void initOptions(void (*rtn)(void))
selectWidget("windowSize", "options");
getWidget("windowSize", "options")->onChange = changeWindowSize;
getWidget("effects", "options")->onChange = changeEffectsReduction;
getWidget("soundVolume", "options")->onChange = changeSoundVolume;
getWidget("musicVolume", "options")->onChange = changeMusicVolume;
getWidget("fullscreen", "options")->onChange = changeFullscreen;
@ -53,9 +67,6 @@ void initOptions(void (*rtn)(void))
sprintf(optionStr, "%d x %d", app.winWidth, app.winHeight);
setWidgetOption("windowSize", "options", optionStr);
sprintf(optionStr, "%d", app.effects);
setWidgetOption("effects", "options", optionStr);
sprintf(optionStr, "%d", app.soundVolume);
setWidgetOption("soundVolume", "options", optionStr);
@ -67,11 +78,11 @@ void initOptions(void (*rtn)(void))
OPTIONS_TEXT = _("Options");
RESOLUTION_TEXT = _("Note: you must restart the game for window size and fullscreen options to take effect.");
#if FIXED_RESOLUTION
#if FIXED_RESOLUTION
getWidget("windowSize", "options")->enabled = 0;
getWidget("fullscreen", "options")->enabled = 0;
RESOLUTION_TEXT = _("Note: this device does not support changing the screen resolution.");
#endif
#endif
returnFromOptions = rtn;
@ -121,11 +132,9 @@ static void drawMain(void)
drawWidgets("options");
app.textWidth = r.w - 100;
#if !defined(__amigaos4__)
drawText(UI_WIDTH / 2, r.y + r.h - 135, 16, TA_CENTER, colors.yellow, RESOLUTION_TEXT);
#endif
app.textWidth = 0;
SDL_SetRenderTarget(app.renderer, app.backBuffer);
@ -134,14 +143,14 @@ static void drawMain(void)
void updateCustomResolutionOption(void)
{
Widget *w;
char value[MAX_NAME_LENGTH];
int i;
char value[MAX_NAME_LENGTH];
int i;
sprintf(value, "%d x %d", app.winWidth, app.winHeight);
w = getWidget("windowSize", "options");
for (i = 0 ; i < w->numOptions - 1 ; i++)
for (i = 0; i < w->numOptions - 1; i++)
{
if (strcmp(w->options[i], value) == 0)
{
@ -179,11 +188,6 @@ static void changeWindowSize(char *value)
initStars();
}
static void changeEffectsReduction(char *value)
{
app.effects = atoi(value);
}
static void changeSoundVolume(char *value)
{
app.soundVolume = atoi(value);
@ -202,7 +206,7 @@ static void changeFullscreen(char *value)
{
app.fullscreen = strcmp(value, "On") == 0;
SDL_SetWindowFullscreen(app.window, app.fullscreen? SDL_WINDOW_FULLSCREEN : 0);
SDL_SetWindowFullscreen(app.window, app.fullscreen ? SDL_WINDOW_FULLSCREEN : 0);
}
static void ok(void)
@ -216,4 +220,3 @@ static void controlsOK(void)
{
show = SHOW_MAIN;
}

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,23 +18,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "SDL2/SDL_mixer.h"
#define SHOW_CONTROLS 1
#define SHOW_MAIN 0
extern void drawControls(void);
extern void drawText(int x, int y, int size, int align, SDL_Color c, const char *format, ...);
extern void drawWidgets(char *groupName);
extern Widget *getWidget(const char *name, const char *group);
extern void initControlsDisplay(void);
extern void initGraphics(void);
extern void initStars(void);
extern void saveConfig(void);
extern void selectWidget(const char *name, const char *group);
extern void setWidgetOption(const char *name, const char *group, const char *value);
extern App app;
extern Colors colors;
void updateCustomResolutionOption(void);
void drawOptions(void);
void initOptions(void (*rtn)(void));

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,18 +18,25 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../json/cJSON.h"
#include "../system/io.h"
#include "../system/lookup.h"
#include "save.h"
static void saveStarSystems(cJSON *gameJSON);
static void saveChallenges(cJSON *gameJSON);
extern Game game;
static void saveStarSystems(cJSON *gameJSON);
static void saveChallenges(cJSON *gameJSON);
static cJSON *getMissionsJSON(StarSystem *starSystem);
static void saveStats(cJSON *gameJSON);
static void saveTrophies(cJSON *gameJSON);
static void saveFighterStats(cJSON *gameJSON);
static void saveStats(cJSON *gameJSON);
static void saveTrophies(cJSON *gameJSON);
static void saveFighterStats(cJSON *gameJSON);
void saveGame(void)
{
char *out;
char *out;
cJSON *root, *gameJSON;
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Saving Game ...");
@ -60,12 +67,12 @@ void saveGame(void)
static void saveStarSystems(cJSON *gameJSON)
{
cJSON *starSystemJSON, *starSystemsJSON;
cJSON *starSystemJSON, *starSystemsJSON;
StarSystem *starSystem;
starSystemsJSON = cJSON_CreateArray();
for (starSystem = game.starSystemHead.next ; starSystem != NULL ; starSystem = starSystem->next)
for (starSystem = game.starSystemHead.next; starSystem != NULL; starSystem = starSystem->next)
{
if (starSystem->totalMissions > 0)
{
@ -84,12 +91,12 @@ static void saveStarSystems(cJSON *gameJSON)
static cJSON *getMissionsJSON(StarSystem *starSystem)
{
cJSON *missionJSON, *missionsJSON;
cJSON *missionJSON, *missionsJSON;
Mission *mission;
missionsJSON = cJSON_CreateArray();
for (mission = starSystem->missionHead.next ; mission != NULL ; mission = mission->next)
for (mission = starSystem->missionHead.next; mission != NULL; mission = mission->next)
{
missionJSON = cJSON_CreateObject();
@ -104,14 +111,14 @@ static cJSON *getMissionsJSON(StarSystem *starSystem)
static void saveChallenges(cJSON *gameJSON)
{
int i;
Mission *mission;
int i;
Mission *mission;
Challenge *c;
cJSON *missionsJSON, *missionJSON, *challengesJSON, *challengeJSON;
cJSON *missionsJSON, *missionJSON, *challengesJSON, *challengeJSON;
missionsJSON = cJSON_CreateArray();
for (mission = game.challengeMissionHead.next ; mission != NULL ; mission = mission->next)
for (mission = game.challengeMissionHead.next; mission != NULL; mission = mission->next)
{
missionJSON = cJSON_CreateObject();
@ -119,7 +126,7 @@ static void saveChallenges(cJSON *gameJSON)
challengesJSON = cJSON_CreateArray();
for (i = 0 ; i < MAX_CHALLENGES ; i++)
for (i = 0; i < MAX_CHALLENGES; i++)
{
c = mission->challengeData.challenges[i];
@ -148,7 +155,7 @@ static void saveStats(cJSON *gameJSON)
cJSON *stats = cJSON_CreateObject();
for (i = 0 ; i < STAT_MAX ; i++)
for (i = 0; i < STAT_MAX; i++)
{
cJSON_AddNumberToObject(stats, getLookupName("STAT_", i), game.stats[i]);
}
@ -159,11 +166,11 @@ static void saveStats(cJSON *gameJSON)
static void saveTrophies(cJSON *gameJSON)
{
Trophy *t;
cJSON *trophiesJSON, *trophyJSON;
cJSON *trophiesJSON, *trophyJSON;
trophiesJSON = cJSON_CreateArray();
for (t = game.trophyHead.next ; t != NULL ; t = t->next)
for (t = game.trophyHead.next; t != NULL; t = t->next)
{
if (t->awarded)
{
@ -186,7 +193,7 @@ static void saveFighterStats(cJSON *gameJSON)
fighterStatsJSON = cJSON_CreateArray();
for (t = game.fighterStatHead.next ; t != NULL ; t = t->next)
for (t = game.fighterStatHead.next; t != NULL; t = t->next)
{
fighterStatJSON = cJSON_CreateObject();

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,12 +18,4 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../json/cJSON.h"
extern char *getLookupName(char *prefix, long num);
extern char *getSaveFilePath(char *filename);
extern int writeFile(char *filename, char *data);
extern Game game;
void saveGame(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,20 +18,30 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../system/text.h"
#include "../system/util.h"
#include "../system/widgets.h"
#include "stats.h"
#define STATS_PER_PAGE 9
extern App app;
extern Colors colors;
extern Game game;
static void prevPage(void);
static void nextPage(void);
static void calculatePercentComplete(void);
void updateAccuracyStats(unsigned int *stats);
static char *statDescription[STAT_MAX];
static int page;
static float maxPages;
static char *statDescription[STAT_MAX];
static int page;
static float maxPages;
static Widget *prev;
static Widget *next;
static char *STATS_TEXT;
static char *PAGE_TEXT;
static char *STATS_TEXT;
static char *PAGE_TEXT;
void initStats(void)
{
@ -103,12 +113,12 @@ void initStatsDisplay(void)
static void calculatePercentComplete(void)
{
StarSystem *starSystem;
Mission *mission;
int completed, total;
Mission *mission;
int completed, total;
completed = total = 0;
for (starSystem = game.starSystemHead.next ; starSystem != NULL ; starSystem = starSystem->next)
for (starSystem = game.starSystemHead.next; starSystem != NULL; starSystem = starSystem->next)
{
if (starSystem->type == SS_NORMAL)
{
@ -117,7 +127,7 @@ static void calculatePercentComplete(void)
}
}
for (mission = game.challengeMissionHead.next ; mission != NULL ; mission = mission->next)
for (mission = game.challengeMissionHead.next; mission != NULL; mission = mission->next)
{
completed += mission->completedChallenges;
total += mission->totalChallenges;
@ -128,7 +138,7 @@ static void calculatePercentComplete(void)
void drawStats(void)
{
int i, y, startIndex;
int i, y, startIndex;
SDL_Rect r;
SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_BLEND);
@ -159,7 +169,7 @@ void drawStats(void)
startIndex = (page * STATS_PER_PAGE);
for (i = startIndex ; i < startIndex + STATS_PER_PAGE ; i++)
for (i = startIndex; i < startIndex + STATS_PER_PAGE; i++)
{
if (i < STAT_TIME)
{

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,16 +18,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#define STATS_PER_PAGE 9
extern void drawText(int x, int y, int size, int align, SDL_Color c, const char *format, ...);
extern void drawWidgets(char *groupName);
extern int getPercent(float current, float total);
extern Widget *getWidget(const char *name, const char *group);
extern char *timeToString(long millis, int showHours);
extern App app;
extern Colors colors;
extern Game game;
void updateAccuracyStats(unsigned int *stats);
void drawStats(void);
void initStatsDisplay(void);
void initStats(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,8 +18,42 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../battle/battle.h"
#include "../battle/effects.h"
#include "../battle/starfield.h"
#include "../challenges/challengeHome.h"
#include "../galaxy/galacticMap.h"
#include "../galaxy/mission.h"
#include "../game/credits.h"
#include "../game/fighterDatabase.h"
#include "../game/options.h"
#include "../game/stats.h"
#include "../game/trophies.h"
#include "../system/atlas.h"
#include "../system/draw.h"
#include "../system/input.h"
#include "../system/sound.h"
#include "../system/text.h"
#include "../system/textures.h"
#include "../system/transition.h"
#include "../system/widgets.h"
#include "title.h"
#define NUM_FIGHTERS 12
#define SHOW_FIGHTER_DB 4
#define SHOW_OPTIONS 2
#define SHOW_STATS 1
#define SHOW_TITLE 0
#define SHOW_TROPHIES 3
extern App app;
extern Battle battle;
extern Colors colors;
extern Entity *self;
extern Game game;
static void logic(void);
static void draw(void);
static void handleKeyboard(void);
@ -38,13 +72,13 @@ static void quit(void);
static void returnFromOptions(void);
static SDL_Texture *background;
static AtlasImage *logo[2];
static AtlasImage *pandoranWar;
static AtlasImage *earthTexture;
static PointF earth;
static Entity fighters[NUM_FIGHTERS];
static const char *fighterTextures[] = {"gfx/fighters/firefly.png", "gfx/fighters/hammerhead.png", "gfx/fighters/hyena.png", "gfx/fighters/lynx.png", "gfx/fighters/kingfisher.png", "gfx/fighters/leopard.png", "gfx/fighters/nymph.png", "gfx/fighters/ray.png", "gfx/fighters/rook.png", "gfx/fighters/taf.png"};
static int show;
static AtlasImage *logo[2];
static AtlasImage *pandoranWar;
static AtlasImage *earthTexture;
static PointF earth;
static Entity fighters[NUM_FIGHTERS];
static const char *fighterTextures[] = {"gfx/fighters/firefly.png", "gfx/fighters/hammerhead.png", "gfx/fighters/hyena.png", "gfx/fighters/lynx.png", "gfx/fighters/kingfisher.png", "gfx/fighters/leopard.png", "gfx/fighters/nymph.png", "gfx/fighters/ray.png", "gfx/fighters/rook.png", "gfx/fighters/taf.png"};
static int show;
void initTitle(void)
{
@ -56,7 +90,7 @@ void initTitle(void)
app.delegate.draw = &draw;
memset(&app.keyboard, 0, sizeof(int) * MAX_KEYBOARD_KEYS);
battle.camera.x = battle.camera.y = 0;
battle.camera.x = battle.camera.y = 0;
destroyBattle();
@ -104,11 +138,11 @@ static void initFighters(void)
{
int i, numTextures;
numTextures = sizeof(fighterTextures) / sizeof(char*);
numTextures = sizeof(fighterTextures) / sizeof(char *);
memset(&fighters, 0, sizeof(Entity) * NUM_FIGHTERS);
for (i = 0 ; i < NUM_FIGHTERS ; i++)
for (i = 0; i < NUM_FIGHTERS; i++)
{
fighters[i].x = rand() % (app.winWidth - 32);
fighters[i].y = app.winHeight + (rand() % app.winHeight);
@ -151,9 +185,9 @@ static void doFighters(void)
{
int i, numTextures;
numTextures = sizeof(fighterTextures) / sizeof(char*);
numTextures = sizeof(fighterTextures) / sizeof(char *);
for (i = 0 ; i < NUM_FIGHTERS ; i++)
for (i = 0; i < NUM_FIGHTERS; i++)
{
self = &fighters[i];
@ -195,7 +229,7 @@ static void draw(void)
blit(pandoranWar, app.winWidth / 2, 110, 1);
drawText(10, app.winHeight - 25, 14, TA_LEFT, colors.white, "Copyright Parallel Realities, 2015-2019");
drawText(10, app.winHeight - 25, 14, TA_LEFT, colors.white, "Copyright,2022 Parallel Realities, 2015-2019,2022");
drawText(app.winWidth - 10, app.winHeight - 25, 14, TA_RIGHT, colors.white, "Version %.2f.%d", VERSION, REVISION);
switch (show)
@ -230,7 +264,7 @@ static void drawFighters(void)
setAtlasColor(255, 255, 255, 255);
for (i = 0 ; i < NUM_FIGHTERS ; i++)
for (i = 0; i < NUM_FIGHTERS; i++)
{
blit(fighters[i].texture, fighters[i].x, fighters[i].y, 1);
}

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,56 +18,4 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#define NUM_FIGHTERS 12
#define SHOW_FIGHTER_DB 4
#define SHOW_OPTIONS 2
#define SHOW_STATS 1
#define SHOW_TITLE 0
#define SHOW_TROPHIES 3
extern void addEngineEffect(void);
extern void autoSizeWidgetButtons(char *group, int recenter);
extern void blit(AtlasImage *atlasImage, int x, int y, int centered);
extern void clearInput(void);
extern void destroyBattle(void);
extern void doEffects(void);
extern void doFighterDatabase(void);
extern void doStars(float dx, float dy);
extern void doWidgets(void);
extern void drawBackground(SDL_Texture *texture);
extern void drawEffects(void);
extern void drawFighterDatabase(void);
extern void drawOptions(void);
extern void drawStars(void);
extern void drawStats(void);
extern void drawText(int x, int y, int size, int align, SDL_Color c, const char *format, ...);
extern void drawTrophies(void);
extern void drawWidgets(char *groupName);
extern void endSectionTransition(void);
extern AtlasImage *getAtlasImage(const char *filename);
extern SDL_Texture *getTexture(const char *filename);
extern Widget *getWidget(const char *name, const char *group);
extern void initChallengeHome(void);
extern void initCredits(void);
extern void initEffects(void);
extern void initFighterDatabaseDisplay(void);
extern void initGalacticMap(void);
extern void initOptions(void (*returnFromOptions)(void));
extern void initStatsDisplay(void);
extern void initTrophiesDisplay(void);
extern void playMusic(char *filename, int loop);
extern void playSound(int id);
extern void scrollBackground(float x, float y);
extern void selectWidget(const char *name, const char *group);
extern void setAtlasColor(int r, int g, int b, int a);
extern void startSectionTransition(void);
extern void stopMusic(void);
extern void updateAllMissions(void);
extern App app;
extern Battle battle;
extern Colors colors;
extern Entity *self;
extern Game game;
void initTitle(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,8 +18,30 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <time.h>
#include "../common.h"
#include "../battle/entities.h"
#include "../json/cJSON.h"
#include "../system/atlas.h"
#include "../system/draw.h"
#include "../system/io.h"
#include "../system/lookup.h"
#include "../system/sound.h"
#include "../system/text.h"
#include "../system/util.h"
#include "../system/widgets.h"
#include "trophies.h"
#define TROPHIES_PER_PAGE 4
extern App app;
extern Battle battle;
extern Colors colors;
extern Entity *player;
extern Game game;
static void prevPage(void);
static void nextPage(void);
static void loadTrophyData(char *filename);
@ -27,24 +49,24 @@ static void resetAlert(void);
static void setSparkleColor(Trophy *t);
static void nextAlert(void);
static Trophy *alertTrophy;
static Trophy *alertTrophy;
static AtlasImage *trophyIcons[TROPHY_MAX];
static AtlasImage *sparkle;
static AtlasImage *alertSphere;
static SDL_Rect alertRect;
static int alertTimer;
static int page;
static int awarded;
static int total;
static int boxWidth;
static float sparkleAngle;
static float maxPages;
static Widget *prev;
static Widget *next;
static char *TROPHIES_TEXT;
static char *AWARDED_TEXT;
static char *PAGE_TEXT;
static char *HIDDEN_TEXT;
static SDL_Rect alertRect;
static int alertTimer;
static int page;
static int awarded;
static int total;
static int boxWidth;
static float sparkleAngle;
static float maxPages;
static Widget *prev;
static Widget *next;
static char *TROPHIES_TEXT;
static char *AWARDED_TEXT;
static char *PAGE_TEXT;
static char *HIDDEN_TEXT;
void initTrophies(void)
{
@ -73,12 +95,12 @@ void initTrophies(void)
void initTrophiesDisplay(void)
{
int w, h;
int w, h;
Trophy *t;
boxWidth = total = awarded = 0;
for (t = game.trophyHead.next ; t != NULL ; t = t->next)
for (t = game.trophyHead.next; t != NULL; t = t->next)
{
total++;
@ -129,9 +151,9 @@ static void prevPage(void)
void drawTrophies(void)
{
Trophy *t;
Trophy *t;
SDL_Rect r;
int start, end, i, x, y;
int start, end, i, x, y;
SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_BLEND);
SDL_SetRenderDrawColor(app.renderer, 0, 0, 0, 128);
@ -163,7 +185,7 @@ void drawTrophies(void)
end = start + TROPHIES_PER_PAGE;
i = 0;
for (t = game.trophyHead.next ; t != NULL ; t = t->next)
for (t = game.trophyHead.next; t != NULL; t = t->next)
{
if (i >= start && i < end)
{
@ -210,11 +232,11 @@ void drawTrophies(void)
void awardTrophy(char *id)
{
Trophy *t;
int numRemaining;
int numRemaining;
numRemaining = 0;
for (t = game.trophyHead.next ; t != NULL ; t = t->next)
for (t = game.trophyHead.next; t != NULL; t = t->next)
{
if (!t->awarded && strcmp(t->id, id) == 0)
{
@ -270,10 +292,10 @@ void doTrophyAlerts(void)
static void nextAlert(void)
{
int w, h;
int w, h;
Trophy *t;
for (t = game.trophyHead.next ; t != NULL ; t = t->next)
for (t = game.trophyHead.next; t != NULL; t = t->next)
{
if (t->notify)
{
@ -336,7 +358,7 @@ Trophy *getTrophy(char *id)
{
Trophy *t;
for (t = game.trophyHead.next ; t != NULL ; t = t->next)
for (t = game.trophyHead.next; t != NULL; t = t->next)
{
if (strcmp(t->id, id) == 0)
{
@ -349,10 +371,10 @@ Trophy *getTrophy(char *id)
static void loadTrophyData(char *filename)
{
cJSON *root, *node;
char *text;
cJSON *root, *node;
char *text;
Trophy *t, *tail;
int count[TROPHY_MAX];
int count[TROPHY_MAX];
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Loading %s", filename);
@ -363,7 +385,7 @@ static void loadTrophyData(char *filename)
memset(count, 0, sizeof(int) * TROPHY_MAX);
for (node = root->child ; node != NULL ; node = node->next)
for (node = root->child; node != NULL; node = node->next)
{
if (cJSON_GetObjectItem(node, "id")->valuestring[0] != '_')
{
@ -402,9 +424,9 @@ static void loadTrophyData(char *filename)
void awardStatsTrophies(void)
{
Trophy *t;
Tuple *tp;
Tuple *tp;
for (t = game.trophyHead.next ; t != NULL ; t = t->next)
for (t = game.trophyHead.next; t != NULL; t = t->next)
{
if (t->stat != -1 && !t->awarded && (game.stats[t->stat] + battle.stats[t->stat]) >= t->statValue)
{
@ -413,7 +435,7 @@ void awardStatsTrophies(void)
}
/* check to see if we've destroyed one of each common starfighter */
for (tp = game.fighterStatHead.next ; tp != NULL ; tp = tp->next)
for (tp = game.fighterStatHead.next; tp != NULL; tp = tp->next)
{
if (tp->value == 0)
{
@ -426,9 +448,9 @@ void awardStatsTrophies(void)
void awardCampaignTrophies(void)
{
char trophyId[MAX_NAME_LENGTH * 2];
char name[MAX_NAME_LENGTH];
int i, len;
char trophyId[MAX_NAME_LENGTH * 2];
char name[MAX_NAME_LENGTH];
int i, len;
StarSystem *starSystem;
if (game.completedMissions)
@ -437,7 +459,7 @@ void awardCampaignTrophies(void)
}
/* check if all star system missions are completed */
for (starSystem = game.starSystemHead.next ; starSystem != NULL ; starSystem = starSystem->next)
for (starSystem = game.starSystemHead.next; starSystem != NULL; starSystem = starSystem->next)
{
if (starSystem->totalMissions && starSystem->completedMissions == starSystem->totalMissions)
{
@ -445,7 +467,7 @@ void awardCampaignTrophies(void)
len = strlen(starSystem->name);
for (i = 0 ; i < len ; i++)
for (i = 0; i < len; i++)
{
name[i] = toupper(starSystem->name[i]);
}
@ -459,7 +481,7 @@ void awardCampaignTrophies(void)
void awardChallengeTrophies(void)
{
char trophyId[MAX_NAME_LENGTH];
int completed;
int completed;
/* check % of challenges completed - 25% increments*/
completed = (getPercent(game.completedChallenges, game.totalChallenges) / 25) * 25;
@ -533,4 +555,3 @@ static void setSparkleColor(Trophy *t)
break;
}
}

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,34 +18,15 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "../common.h"
#include "../json/cJSON.h"
#include "time.h"
#define TROPHIES_PER_PAGE 4
extern void awardPandoranCraftTrophy(void);
extern void blit(AtlasImage *atlasImage, int x, int y, int centered);
extern void blitRotated(AtlasImage *atlasImage, int x, int y, float angle);
extern void blitScaled(AtlasImage *atlasImage, int x, int y, int w, int h, int center);
extern void calcTextDimensions(char *text, int size, int *w, int *h);
extern void drawText(int x, int y, int size, int align, SDL_Color c, const char *format, ...);
extern void drawWidgets(char *groupName);
extern AtlasImage *getAtlasImage(char *filename);
extern int getJSONValue(cJSON *node, char *name, int defValue);
extern int getPercent(float current, float total);
extern Widget *getWidget(const char *name, const char *group);
extern long lookup(char *name);
extern float mod(float n, float x);
extern void playSound(int id);
extern char *readFile(char *filename);
extern void setAtlasColor(int r, int g, int b, int a);
extern char *timeToDate(long millis);
extern App app;
extern Battle battle;
extern Colors colors;
extern Entity *player;
extern Game game;
void awardCraftTrophy(void);
void awardPostMissionTrophies(void);
void awardChallengeTrophies(void);
void awardCampaignTrophies(void);
void awardStatsTrophies(void);
Trophy *getTrophy(char *id);
void drawTrophyAlert(void);
void doTrophyAlerts(void);
void awardTrophy(char *id);
void drawTrophies(void);
void initTrophiesDisplay(void);
void initTrophies(void);

File diff suppressed because it is too large Load Diff

View File

@ -29,118 +29,119 @@ extern "C"
#endif
/* cJSON Types: */
#define cJSON_False 0
#define cJSON_True 1
#define cJSON_NULL 2
#define cJSON_False 0
#define cJSON_True 1
#define cJSON_NULL 2
#define cJSON_Number 3
#define cJSON_String 4
#define cJSON_Array 5
#define cJSON_Array 5
#define cJSON_Object 6
#define cJSON_IsReference 256
#define cJSON_IsReference 256
#define cJSON_StringIsConst 512
/* The cJSON structure: */
typedef struct cJSON {
struct cJSON *next,*prev; /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */
struct cJSON *child; /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */
/* The cJSON structure: */
typedef struct cJSON
{
struct cJSON *next, *prev; /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */
struct cJSON *child; /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */
int type; /* The type of the item, as above. */
int type; /* The type of the item, as above. */
char *valuestring; /* The item's string, if type==cJSON_String */
int valueint; /* The item's number, if type==cJSON_Number */
double valuedouble; /* The item's number, if type==cJSON_Number */
char *valuestring; /* The item's string, if type==cJSON_String */
int valueint; /* The item's number, if type==cJSON_Number */
double valuedouble; /* The item's number, if type==cJSON_Number */
char *string; /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */
} cJSON;
char *string; /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */
} cJSON;
typedef struct cJSON_Hooks {
void *(*malloc_fn)(size_t sz);
void (*free_fn)(void *ptr);
} cJSON_Hooks;
typedef struct cJSON_Hooks
{
void *(*malloc_fn)(size_t sz);
void (*free_fn)(void *ptr);
} cJSON_Hooks;
/* Supply malloc, realloc and free functions to cJSON */
extern void cJSON_InitHooks(cJSON_Hooks* hooks);
/* Supply malloc, realloc and free functions to cJSON */
extern void cJSON_InitHooks(cJSON_Hooks *hooks);
/* Supply a block of JSON, and this returns a cJSON object you can interrogate. Call cJSON_Delete when finished. */
extern cJSON *cJSON_Parse(const char *value);
/* Render a cJSON entity to text for transfer/storage. Free the char* when finished. */
extern char *cJSON_Print(cJSON *item);
/* Render a cJSON entity to text for transfer/storage without any formatting. Free the char* when finished. */
extern char *cJSON_PrintUnformatted(cJSON *item);
/* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess at the final size. guessing well reduces reallocation. fmt=0 gives unformatted, =1 gives formatted */
extern char *cJSON_PrintBuffered(cJSON *item, int prebuffer, int fmt);
/* Delete a cJSON entity and all subentities. */
extern void cJSON_Delete(cJSON *c);
/* Supply a block of JSON, and this returns a cJSON object you can interrogate. Call cJSON_Delete when finished. */
extern cJSON *cJSON_Parse(const char *value);
/* Render a cJSON entity to text for transfer/storage. Free the char* when finished. */
extern char *cJSON_Print(cJSON *item);
/* Render a cJSON entity to text for transfer/storage without any formatting. Free the char* when finished. */
extern char *cJSON_PrintUnformatted(cJSON *item);
/* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess at the final size. guessing well reduces reallocation. fmt=0 gives unformatted, =1 gives formatted */
extern char *cJSON_PrintBuffered(cJSON *item,int prebuffer,int fmt);
/* Delete a cJSON entity and all subentities. */
extern void cJSON_Delete(cJSON *c);
/* Returns the number of items in an array (or object). */
extern int cJSON_GetArraySize(cJSON *array);
/* Retrieve item number "item" from array "array". Returns NULL if unsuccessful. */
extern cJSON *cJSON_GetArrayItem(cJSON *array, int item);
/* Get item "string" from object. Case insensitive. */
extern cJSON *cJSON_GetObjectItem(cJSON *object, const char *string);
/* Returns the number of items in an array (or object). */
extern int cJSON_GetArraySize(cJSON *array);
/* Retrieve item number "item" from array "array". Returns NULL if unsuccessful. */
extern cJSON *cJSON_GetArrayItem(cJSON *array,int item);
/* Get item "string" from object. Case insensitive. */
extern cJSON *cJSON_GetObjectItem(cJSON *object,const char *string);
/* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */
extern const char *cJSON_GetErrorPtr(void);
/* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */
extern const char *cJSON_GetErrorPtr(void);
/* These calls create a cJSON item of the appropriate type. */
extern cJSON *cJSON_CreateNull(void);
extern cJSON *cJSON_CreateTrue(void);
extern cJSON *cJSON_CreateFalse(void);
extern cJSON *cJSON_CreateBool(int b);
extern cJSON *cJSON_CreateNumber(double num);
extern cJSON *cJSON_CreateString(const char *string);
extern cJSON *cJSON_CreateArray(void);
extern cJSON *cJSON_CreateObject(void);
/* These calls create a cJSON item of the appropriate type. */
extern cJSON *cJSON_CreateNull(void);
extern cJSON *cJSON_CreateTrue(void);
extern cJSON *cJSON_CreateFalse(void);
extern cJSON *cJSON_CreateBool(int b);
extern cJSON *cJSON_CreateNumber(double num);
extern cJSON *cJSON_CreateString(const char *string);
extern cJSON *cJSON_CreateArray(void);
extern cJSON *cJSON_CreateObject(void);
/* These utilities create an Array of count items. */
extern cJSON *cJSON_CreateIntArray(const int *numbers, int count);
extern cJSON *cJSON_CreateFloatArray(const float *numbers, int count);
extern cJSON *cJSON_CreateDoubleArray(const double *numbers, int count);
extern cJSON *cJSON_CreateStringArray(const char **strings, int count);
/* These utilities create an Array of count items. */
extern cJSON *cJSON_CreateIntArray(const int *numbers,int count);
extern cJSON *cJSON_CreateFloatArray(const float *numbers,int count);
extern cJSON *cJSON_CreateDoubleArray(const double *numbers,int count);
extern cJSON *cJSON_CreateStringArray(const char **strings,int count);
/* Append item to the specified array/object. */
extern void cJSON_AddItemToArray(cJSON *array, cJSON *item);
extern void cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);
extern void cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item); /* Use this when string is definitely const (i.e. a literal, or as good as), and will definitely survive the cJSON object */
/* Append reference to item to the specified array/object. Use this when you want to add an existing cJSON to a new cJSON, but don't want to corrupt your existing cJSON. */
extern void cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item);
extern void cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item);
/* Append item to the specified array/object. */
extern void cJSON_AddItemToArray(cJSON *array, cJSON *item);
extern void cJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item);
extern void cJSON_AddItemToObjectCS(cJSON *object,const char *string,cJSON *item); /* Use this when string is definitely const (i.e. a literal, or as good as), and will definitely survive the cJSON object */
/* Append reference to item to the specified array/object. Use this when you want to add an existing cJSON to a new cJSON, but don't want to corrupt your existing cJSON. */
extern void cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item);
extern void cJSON_AddItemReferenceToObject(cJSON *object,const char *string,cJSON *item);
/* Remove/Detatch items from Arrays/Objects. */
extern cJSON *cJSON_DetachItemFromArray(cJSON *array, int which);
extern void cJSON_DeleteItemFromArray(cJSON *array, int which);
extern cJSON *cJSON_DetachItemFromObject(cJSON *object, const char *string);
extern void cJSON_DeleteItemFromObject(cJSON *object, const char *string);
/* Remove/Detatch items from Arrays/Objects. */
extern cJSON *cJSON_DetachItemFromArray(cJSON *array,int which);
extern void cJSON_DeleteItemFromArray(cJSON *array,int which);
extern cJSON *cJSON_DetachItemFromObject(cJSON *object,const char *string);
extern void cJSON_DeleteItemFromObject(cJSON *object,const char *string);
/* Update array items. */
extern void cJSON_InsertItemInArray(cJSON *array, int which, cJSON *newitem); /* Shifts pre-existing items to the right. */
extern void cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON *newitem);
extern void cJSON_ReplaceItemInObject(cJSON *object, const char *string, cJSON *newitem);
/* Update array items. */
extern void cJSON_InsertItemInArray(cJSON *array,int which,cJSON *newitem); /* Shifts pre-existing items to the right. */
extern void cJSON_ReplaceItemInArray(cJSON *array,int which,cJSON *newitem);
extern void cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem);
/* Duplicate a cJSON item */
extern cJSON *cJSON_Duplicate(cJSON *item, int recurse);
/* Duplicate will create a new, identical cJSON item to the one you pass, in new memory that will
need to be released. With recurse!=0, it will duplicate any children connected to the item.
The item->next and ->prev pointers are always zero on return from Duplicate. */
/* Duplicate a cJSON item */
extern cJSON *cJSON_Duplicate(cJSON *item,int recurse);
/* Duplicate will create a new, identical cJSON item to the one you pass, in new memory that will
need to be released. With recurse!=0, it will duplicate any children connected to the item.
The item->next and ->prev pointers are always zero on return from Duplicate. */
/* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */
extern cJSON *cJSON_ParseWithOpts(const char *value, const char **return_parse_end, int require_null_terminated);
/* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */
extern cJSON *cJSON_ParseWithOpts(const char *value,const char **return_parse_end,int require_null_terminated);
extern void cJSON_Minify(char *json);
extern void cJSON_Minify(char *json);
/* Macros for creating things quickly. */
#define cJSON_AddNullToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateNull())
#define cJSON_AddTrueToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateTrue())
#define cJSON_AddFalseToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateFalse())
#define cJSON_AddBoolToObject(object,name,b) cJSON_AddItemToObject(object, name, cJSON_CreateBool(b))
#define cJSON_AddNumberToObject(object,name,n) cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n))
#define cJSON_AddStringToObject(object,name,s) cJSON_AddItemToObject(object, name, cJSON_CreateString(s))
#define cJSON_AddNullToObject(object, name) cJSON_AddItemToObject(object, name, cJSON_CreateNull())
#define cJSON_AddTrueToObject(object, name) cJSON_AddItemToObject(object, name, cJSON_CreateTrue())
#define cJSON_AddFalseToObject(object, name) cJSON_AddItemToObject(object, name, cJSON_CreateFalse())
#define cJSON_AddBoolToObject(object, name, b) cJSON_AddItemToObject(object, name, cJSON_CreateBool(b))
#define cJSON_AddNumberToObject(object, name, n) cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n))
#define cJSON_AddStringToObject(object, name, s) cJSON_AddItemToObject(object, name, cJSON_CreateString(s))
/* When assigning an integer value, it needs to be propagated to valuedouble too. */
#define cJSON_SetIntValue(object,val) ((object)?(object)->valueint=(object)->valuedouble=(val):(val))
#define cJSON_SetNumberValue(object,val) ((object)?(object)->valueint=(object)->valuedouble=(val):(val))
#define cJSON_SetIntValue(object, val) ((object) ? (object)->valueint = (object)->valuedouble = (val) : (val))
#define cJSON_SetNumberValue(object, val) ((object) ? (object)->valueint = (object)->valuedouble = (val) : (val))
#ifdef __cplusplus
}

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,7 +18,34 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <time.h>
#include "common.h"
#include "game/credits.h"
#include "game/load.h"
#include "game/save.h"
#include "game/title.h"
#include "game/trophies.h"
#include "main.h"
#include "plat/win32/win32Init.h"
#include "system/controls.h"
#include "system/dev.h"
#include "system/draw.h"
#include "system/init.h"
#include "system/input.h"
#include "system/io.h"
#include "system/lookup.h"
#include "system/modalDialog.h"
#include "test/testMission.h"
App app;
Battle battle;
Colors colors;
Dev dev;
Entity *player;
Entity *self;
Game game;
static void handleMissionArgs(int argc, char *argv[]);
static void handleLoggingArgs(int argc, char *argv[]);
@ -26,7 +53,7 @@ static void capFrameRate(long *then, float *remainder);
int main(int argc, char *argv[])
{
long then, lastFrameTime, frames;
long then, lastFrameTime, frames;
float remainder;
memset(&app, 0, sizeof(App));
@ -166,7 +193,7 @@ static void handleLoggingArgs(int argc, char *argv[])
SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN);
for (i = 1 ; i < argc ; i++)
for (i = 1; i < argc; i++)
{
if (strcmp(argv[i], "-debug") == 0)
{
@ -188,7 +215,7 @@ static void handleMissionArgs(int argc, char *argv[])
showCredits = testingMission = 0;
for (i = 1 ; i < argc ; i++)
for (i = 1; i < argc; i++)
{
/* assume this is filename for testing */
if (strcmp(argv[i], "-mission") == 0)

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,41 +18,4 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "SDL2/SDL.h"
#include "time.h"
#include "defs.h"
#include "structs.h"
extern void cleanup(void);
extern void clearControl(int type);
extern void createScreenshotFolder(void);
extern void doDevKeys(void);
extern void doInput(void);
extern void doModalDialog(void);
extern void doTrophyAlerts(void);
extern void drawModalDialog(void);
extern void drawTrophyAlert(void);
extern int fileExists(char *filename);
extern char *getSaveFilePath(char *filename);
extern void init18N(int argc, char *argv[]);
extern void initCredits(void);
extern void initGameSystem(void);
extern void initLookups(void);
extern void initSDL(int argc, char *argv[]);
extern void initTitle(void);
extern int isControl(int type);
extern void loadGame(void);
extern void loadTestMission(char *filename);
extern void prepareScene(void);
extern void presentScene(void);
extern void saveGame(void);
extern void saveScreenshot(void);
App app;
Battle battle;
Colors colors;
Dev dev;
Entity *player;
Entity *self;
Game game;
int main(int argc, char *argv[]);

View File

@ -1,101 +0,0 @@
/*
Copyright (C) 2015-2019,2022 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 <errno.h>
#include <pwd.h>
#include <sys/stat.h>
#include <unistd.h>
#include <proto/dos.h>
#include <proto/exec.h>
#include "../../common.h"
#include "os4Init.h"
#define VSTRING "tbftss 1.50.1r1 (22.08.2022)"
#define VERSTAG "\0$VER: " VSTRING
static CONST_STRPTR stack USED = "$STACK:102400";
static CONST_STRPTR version USED = VERSTAG;
extern App app;
extern Dev dev;
void createSaveFolder(void)
{
// char *dir;
// int i;
BPTR savesPathLock = Lock("PROGDIR:saves", SHARED_LOCK);
if (!savesPathLock)
{
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Saves folder not found. I am going to create it.");
// mkpath("PROGDIR:saves");
if (mkdir("PROGDIR:saves", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0 && errno != EEXIST)
{
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN, "Failed to create save dir.");
return;
}
}
else {
UnLock(savesPathLock);
}
// for (i = 0 ; i < MAX_SAVE_SLOTS ; i++)
// {
// dir = buildFormattedString("saves/%d", i);
// mkpath(dir);
// free(dir);
// }
// app.saveDir = "saves";
STRNCPY(app.saveDir, "saves", MAX_FILENAME_LENGTH);
// char *userHome;
// char dir[MAX_FILENAME_LENGTH];
// userHome = getenv("HOME");
// if (!userHome)
// {
// SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN, "Unable to determine user save folder. Will save to current dir.");
// return;
// }
// SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "User home = %s", userHome);
// sprintf(dir, "%s/.local/share/tbftss", userHome);
// if (mkdir(dir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0 && errno != EEXIST)
// {
// SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN, "Failed to create save dir '%s'. Will save to current dir.", dir);
// return;
// }
// STRNCPY(app.saveDir, dir, MAX_FILENAME_LENGTH);
}
void createScreenshotFolder(void)
{
mkdir("PROGDIR:screenshots", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
dev.screenshotFolder = "screenshots";
}

View File

@ -1,22 +0,0 @@
/*
Copyright (C) 2015-2019,2022 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.
*/
void createScreenshotFolder(void);
void createSaveFolder(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,12 +18,22 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <errno.h>
#include <pwd.h>
#include <sys/stat.h>
#include <unistd.h>
#include "../../common.h"
#include "unixInit.h"
extern App app;
extern Dev dev;
void createSaveFolder(void)
{
char *userHome;
char dir[MAX_FILENAME_LENGTH];
char dir[MAX_FILENAME_LENGTH];
userHome = getenv("HOME");
@ -36,7 +46,7 @@ void createSaveFolder(void)
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "User home = %s", userHome);
sprintf(dir, "%s/.local/share/tbftss", userHome);
if (mkdir(dir, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH) != 0 && errno != EEXIST)
if (mkdir(dir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0 && errno != EEXIST)
{
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN, "Failed to create save dir '%s'. Will save to current dir.", dir);
return;
@ -47,7 +57,7 @@ void createSaveFolder(void)
void createScreenshotFolder(void)
{
mkdir("/tmp/tbftss", S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH);
mkdir("/tmp/tbftss", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
dev.screenshotFolder = "/tmp/tbftss";
}

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,12 +18,5 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <sys/stat.h>
#include <pwd.h>
#include <unistd.h>
#include <errno.h>
#include "../../common.h"
extern App app;
extern Dev dev;
void createScreenshotFolder(void);
void createSaveFolder(void);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,12 +18,21 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <errno.h>
#include <sys/stat.h>
#include <unistd.h>
#include "../../common.h"
#include "win32Init.h"
extern App app;
extern Dev dev;
void createSaveFolder(void)
{
char *userHome;
char dir[MAX_FILENAME_LENGTH];
char dir[MAX_FILENAME_LENGTH];
userHome = getenv("USERPROFILE");

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2015-2019 Parallel Realities
Copyright (C) 2015-2019,2022 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -18,11 +18,5 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>
#include "../../common.h"
extern App app;
extern Dev dev;
void createScreenshotFolder(void);
void createSaveFolder(void);

Some files were not shown because too many files have changed in this diff Show More