Compare commits

...

79 Commits
v2.4 ... main

Author SHA1 Message Date
diligentcircle d564db380d Corrected the version 2.0 version number. 2022-08-14 13:59:54 -04:00
The Diligent Circle 丸 fae576e731
Merge pull request #33 from Mailaender/appdata
More fixes and additions towards the AppStream metadata
2022-08-14 02:29:38 -04:00
Matthias Mailänder 1fd8f14499 Add more URLs. 2022-08-13 15:03:37 +02:00
Matthias Mailänder 1d949ec051 Fix metadata license 2022-08-13 15:03:06 +02:00
Matthias Mailänder 4ea587dd61 Add releases 2022-08-13 15:02:29 +02:00
The Diligent Circle 丸 7749a795e7
Merge pull request #32 from Mailaender/patch-1
Removed invalid stock icon from AppData
2022-08-08 11:52:19 -04:00
Matthias Mailänder 28c4ba82f2
Remove invalid stock icon 2022-08-08 10:32:30 +02:00
diligentcircle 186555d8c8 Following recommentations, change pr-starfighter to pr_starfighter for ID. 2022-06-28 22:39:44 -04:00
diligentcircle 8f4013e828 Fixed one of the translations having too many numbers. 2022-02-25 04:05:41 -05:00
diligentcircle eb0bdc13cf New, more accurate RDNS name. 2021-11-24 21:43:12 -05:00
diligentcircle 3c3cbae720 Missed a part of that correction. 2021-11-24 19:00:55 -05:00
diligentcircle 5ad618da90 Fixed naming of files. 2021-11-24 18:58:51 -05:00
diligentcircle 413cc0c6a8 Adjusted instrument balance of Android's Last Dance, added some percussion.
The quiet part at the end was nearly inaudible in the game, making
it sound like silence even though it wasn't. Insertion of a little
light percussion in that section should avoid this. Also adjusted
audio levels of the instruments so that they're better balanced, and
actually committing the changed mmpz file (I forgot to do so last
time).
2021-09-18 03:24:47 -04:00
diligentcircle b2053e3959 Updated all translation files.
Note: translations for "Super-Easy" have been set as a fuzzy
translation for "Assisted".
2021-09-18 00:19:52 -04:00
diligentcircle 247d2c7bfe Added a lighter version of the cargo ship buff to other difficulties.
Assisted difficulty multiplies the shield of the cargo ships in
Urusor by 4 so that stray shots are less likely to destroy them.
I've added a lesser version of this buff for these ships specifically
(rather than all friendly ships) on other difficulties: shield is
multiplied by 3. This is just enough to survive a stray missile, a
little stray laser fire, or a little stray plasma fire without being
destroyed (but sustained or direct fire will still destroy the ship).

Of course, this is not applied to Classic difficulty. It is also
excluded from Hard and Nightmare difficulties.
2021-09-17 23:01:19 -04:00
diligentcircle e6f679c4e2 Simplified a few statements by making them depend on easy > assisted.
Minor internal change.
2021-09-17 22:22:39 -04:00
diligentcircle 5842ff98d8 Renamed Super-Easy difficulty to Assisted difficulty.
"Super-Easy" isn't a particularly problematic name, but "Assisted"
is more descriptive of what the difficulty mode is for (to assist
players who have trouble playing on easy mode).
2021-09-17 22:07:37 -04:00
diligentcircle 5ee90df2f3 Added a new paradigm for how Kline works.
For difficulties above Easy difficulty which are not Classic difficulty,
Kline's run shield now changes depending on whether or not other
WEAPCO ships are still alive. If he's alone, the previous 100 shield
threshold was used. If any of the other ships are alive, though, he
only runs if he takes 500 damage (the same amount that you have to
inflict the first time you see him). The result of this is that he
doesn't run away real early in the battle (100 shield is so low that
you can easily make him run away with a quick laser shot); you have
to either fight real hard, or more realistically, defeat all the other
enemies first, making him feel like an actual threat rather than a
gimmick.

This is of course is excluded from Classic difficulty, and it's also
excluded from Easy and Super Easy difficulty.
2021-09-17 21:57:15 -04:00
diligentcircle 7b594c9fa7 Re-exported Last Cyber Dance to make it 50% quieter.
I noticed that this track sounded… distorted, and much louder than
the rest of the soundtrack. Re-exported to fix that.
2021-09-17 20:23:29 -04:00
diligentcircle 48f01e4d7f Substantially modified Android's Last Dance.
This makes Android's Last Dance much longer and more dynamic, with
an instrument added to improve the variety of sound in the track.
2021-09-17 03:30:05 -04:00
diligentcircle 87fea0b2e0 Added a feature to force slave ships and cloak fighters to appear.
This causes these mission targets to always appear the first time
the player enters an interception, and every time after they fail
to appear (so that you never have two time-wasting interceptions in
a row). In the case of the rescue slaves mission, this takes the
form of forcing the first ship to be a slave ship, and in the case
of the cloak fighter, it simply forces the cloak fighter to appear.
In each case, the variable controlling whether or not the condition
is forced gets set to 0 if the mission target spawned, ensuring that
time-waster interceptions can still occur as long as they both are
preceded and followed by worthwhile interceptions.

I decided this was important when I was playing and noticed that I
wasn't getting slaves to rescue several times in a row. This
situation would be confusing to new players and possibly make them
think they were doing something wrong. It can also be very annoying
to just not get any chances to make progress because of bad RNG.
Forcing them to appear the first time allows the player to be
immediately introduced to the targets, and forcing them to appear if
they didn't last time limits the frustration of bad RNG by ensuring
that even with the worst RNG, some amount of progress can be made.
2021-09-16 02:16:00 -04:00
diligentcircle 36e6853fe1 Merge branch 'main' of github.com:pr-starfighter/starfighter 2021-08-20 17:49:11 -04:00
diligentcircle 344c5d3c82 Improved the CHANCE implementation a bit.
This makes the implementation more uniform (avoiding skew caused
by %).
2021-08-20 17:48:18 -04:00
The Diligent Circle 丸 c4decfc8b2
Merge pull request #28 from jorgesumle/main
Add Spanish translation
2021-08-20 16:29:25 -04:00
The Diligent Circle 丸 fd71294a2b
Merge pull request #31 from jorgesumle/esperanto2
Fix error from Esperanto translation
2021-08-20 16:27:33 -04:00
Jorge Maldonado Ventura b3d8ee0717 Fix error from Esperanto translation 2021-08-20 17:12:05 +02:00
Jorge Maldonado Ventura 1bd704d136 Finish Spanish translation 2021-08-20 17:02:08 +02:00
The Diligent Circle 丸 5e65e8c7a8
Merge pull request #30 from jorgesumle/esperanto
Update intermission.c
2021-08-15 03:25:04 -04:00
Jorge Maldonado Ventura 4c5b72ba32
Update intermission.c
Comma after dependent clause
2021-08-13 10:54:17 +02:00
Jorge Maldonado Ventura 756a2ed4cb Spanish translation: Translated 425 of 514 (82%) 2021-08-12 20:22:43 +02:00
The Diligent Circle 丸 ac8f5b32e4
Merge pull request #29 from jorgesumle/esperanto
Fix error from Esperanto translation
2021-08-10 11:32:24 -04:00
Jorge Maldonado Ventura c77abd6431 Fix error from Esperanto translation 2021-08-10 11:14:13 +02:00
Jorge Maldonado Ventura bddb178ce5 Spanish translation: Translated 357 of 514 (69%) 2021-08-05 19:43:02 +02:00
Layla Marchant bc4a022db8
Added a new death theme: Sleeping With Androids.
This also removes RE.ogg and reremix.ogg as they are no longer needed.
2021-07-26 16:37:32 -04:00
Layla Marchant 0d325f0726
Re-exported Last Cyber Dance to fix the sound artifact at the start. 2021-07-26 01:45:14 -04:00
Layla Marchant ab26edddec
Removed the whole volume compensation thing since it caused bugs.
Also adjusted Android Oppression to match the volumes of the other
tracks.
2021-07-26 00:38:34 -04:00
Layla Marchant d806f05a16
Fixed noise in Android's Last Dance export.
There's a bug in LMMS with Zyn if the start of the track plays
sound (or at least Zyn sounds). Re-exported with a bit of a hack to
fix the problem.
2021-07-25 23:44:46 -04:00
Layla Marchant e480841bec
Make use of Android's Last Dance. 2021-07-25 17:24:28 -04:00
Layla Marchant 8d8f096736
Added Android's Last Dance. 2021-07-25 16:50:50 -04:00
Jorge Maldonado Ventura 0a64b46722 Spanish translation: Translated 309 of 514 (60%) 2021-07-18 15:37:18 +02:00
Jorge Maldonado Ventura 472261de07 Spanish translation: Translated 238 of 514 (46%) 2021-06-25 17:08:38 +02:00
Jorge Maldonado Ventura 89c1fac443 Add Spanish translation 2021-06-19 15:01:55 +02:00
Layla Marchant bab012e310
Merge branch 'main' of github.com:pr-starfighter/starfighter into main 2021-04-28 15:40:11 -04:00
Layla Marchant 3d0e36916d
Added a new original Project: Starfighter theme: Android Oppression
This is a new theme for Starfighter! This version represents mystery
and the ominous presence of WEAPCO. Other versions will be used for
other situations, and a sort of combination between this and Last
Cyber Dance will serve as the music for the final Kline battle. That's
the theory anyway.
2021-04-28 15:30:01 -04:00
The Diligent Circle 丸 5d654873b1
Merge pull request #27 from jorgesumle/main
Finish Esperanto translation
2021-04-16 11:54:05 -04:00
Jorge Maldonado Ventura 3642c86eaa Finish Esperanto translation 2021-04-16 17:13:01 +02:00
Jorge Maldonado Ventura 76dee3a49a Translated 493 of 514 (95%) 2021-04-11 12:26:43 +02:00
Jorge Maldonado Ventura f7e90253f5 Translated 482 of 514 (93%) 2021-04-10 11:26:10 +02:00
Layla Marchant 50355b9489
Added First Cyber Dance as a requirement 2021-04-03 23:50:41 -04:00
The Diligent Circle 丸 40033c95f2
Merge pull request #26 from jorgesumle/main
90% Update Esperanto translation
2021-04-03 20:07:23 -04:00
Layla Marchant d53764dc13
Added music sources as EXTRA_DIST. 2021-04-03 20:05:43 -04:00
Layla Marchant 5eadb91594
Fixed First Cyber Dance. 2021-04-03 20:01:27 -04:00
Layla Marchant 51cd7d9f1e
Added First Cyber Dance. 2021-04-03 18:50:46 -04:00
Layla Marchant 82ffaebbc5
Added use of special music when Kline or the cloak fighter shows up. 2021-04-03 12:13:44 -04:00
Jorge Maldonado Ventura 840c2249d5 Translated 476 of 514 (90%) 2021-04-03 17:18:52 +02:00
Layla Marchant a9e98145fa
Sorted music so that certain missions play certain music. 2021-04-03 11:17:04 -04:00
Layla Marchant 50989a83e7
Further adjusted amplification difference, fixed makefile problems. 2021-04-02 00:15:29 -04:00
Layla Marchant 8241e13d77
Replaced death music with a simple remix of RE.
This is meant to help connect RE to something. I figured that by
using a similar kind of music for both it and the game over screen,
it would create a bit of a connection there and musically communicate
that it's game over, except for Kline instead of you.
2021-04-02 00:08:55 -04:00
Jorge Maldonado Ventura 551e0c2f72 Translated 437 of 514 (85%) 2021-04-01 13:15:35 +02:00
Jorge Maldonado Ventura f6108d3957 Translated 411 of 514 (79%) 2021-04-01 11:53:50 +02:00
Layla Marchant 1116a1a4d3
Merge branch 'main' of github.com:pr-starfighter/starfighter into main 2021-03-19 16:07:54 -04:00
Layla Marchant d73fe2c22e
Removed attempts to colorize echos.
It caused errors. Not sure why, but I don't think it's worth
investigating.
2021-03-19 16:07:25 -04:00
The Diligent Circle 丸 a13ef7374e
Merge pull request #25 from jorgesumle/main
WIP: Add Esperanto translation
2021-02-27 17:27:59 -05:00
Jorge Maldonado Ventura a3243ad3a3 Translated 393 of 514 (76%) 2021-02-01 21:38:03 +01:00
Jorge Maldonado Ventura b4d70611be Translated 354 of 514 (68%) 2021-01-31 18:33:35 +01:00
Jorge Maldonado Ventura 2ad7dcbddb Translated 314 of 514 (61%) 2021-01-31 13:46:56 +01:00
Layla Marchant e993034e63
Made the buttons in the save screen left-aligned.
The center-alignment was based on absolute positions that assumed
English text and therefore could not be maintained for other languages.
2021-01-29 10:14:21 -05:00
Jorge Maldonado Ventura ae66d76d54 Translated 253 of 514 (49%) 2021-01-28 22:02:56 +01:00
Jorge Maldonado Ventura 07f13a02be translated 216 of 514 (42%) 2021-01-22 13:10:15 +01:00
Jorge Maldonado Ventura 9c71933d5f Some progress on the translation 2021-01-21 21:09:38 +01:00
Layla Marchant ebb76a1cd5
Made the warnings about missing libraries easier to see. 2021-01-21 14:26:01 -05:00
Jorge Maldonado Ventura 71461ddd5a Use the default font again 2021-01-21 19:48:25 +01:00
Jorge Maldonado Ventura 0ef537f03c Use Dosis font (https://fontlibrary.org/en/font/dosis) 2021-01-21 18:59:13 +01:00
Jorge Maldonado Ventura 6dbe3d86a9 Add Esperanto translation (not completed yet) 2021-01-21 17:01:48 +01:00
Layla Marchant e79563ecb4
Cleaned up and expanded appdata 2020-12-29 11:56:26 -05:00
Layla Marchant f6be38a5d8
Typo 2020-12-29 11:38:21 -05:00
Layla Marchant 5e6b23b46c
Changed the profanity definition to "moderate".
Characters say "damn" quite a lot.
2020-12-29 11:34:14 -05:00
The Diligent Circle 丸 cbc29c0bb8
Merge pull request #24 from Mailaender/appdata
Added AppStream metadata
2020-12-29 11:32:57 -05:00
Matthias Mailänder 59a56a1b9a Add project metadata. 2020-12-29 15:39:59 +01:00
40 changed files with 7938 additions and 1169 deletions

View File

@ -598,11 +598,21 @@ Details: Tuned down 5 half-notes.
------------------------------------------------------------------------
music/walking_among_androids.ogg
music/android_oppression.ogg
music/sleeping_with_androids.ogg
Author: Zander Noriega <https://soundcloud.com/zander-noriega>
License: CC BY 3.0 <http://creativecommons.org/licenses/by/3.0/>
Source: http://opengameart.org/content/walking-among-androids-20
Author: The Diligent Circle <https://onpon4.github.io>
License: CC0 <http://creativecommons.org/publicdomain/zero/1.0/>
------------------------------------------------------------------------
music/androids_last_dance.ogg
Author: The Diligent Circle <https://onpon4.github.io>
License: CC0 <http://creativecommons.org/publicdomain/zero/1.0/>
Notes:
Partly inspired by, and using the same instruments as, Last Cyber
Dance, which was composed by neocrey <https://twitter.com/artnocy>.
------------------------------------------------------------------------
@ -666,20 +676,14 @@ Source: http://opengameart.org/content/last-cyber-dance
------------------------------------------------------------------------
music/RE.ogg
music/first_cyber_dance.ogg
Author: WeskerHunter <http://redeclipse.net/forum/viewtopic.php?f=5&t=26>
License: CC BY-SA 3.0 <http://creativecommons.org/licenses/by-sa/3.0/>
Source: http://opengameart.org/content/fast-high-music
Changes: Amplified -1 dB and slowed down 5% with Audacity
------------------------------------------------------------------------
music/death.ogg
Author: Jan125 <http://opengameart.org/users/jan125>
License: CC BY 3.0 <http://creativecommons.org/licenses/by/3.0/>
Source: http://opengameart.org/content/stereotypical-90s-space-shooter-music
Authors:
The Diligent Circle <https://onpon4.github.io>
Sweetpea
License: CC BY 4.0 <https://creativecommons.org/licenses/by/4.0/>
Details:
Remix of Last Cyber Dance. Last Cyber Dance is by neocrey.
------------------------------------------------------------------------

View File

@ -13,3 +13,4 @@ nobase_dist_pkgdata_DATA = \
data/TakaoPGothic.ttf
EXTRA_DIST = autogen.sh win32build.sh misc

View File

@ -38,7 +38,7 @@ PKG_CHECK_EXISTS([SDL2_mixer], [
], [
PKG_CHECK_MODULES([SDL], [sdl2 SDL2_image SDL2_mixer])
STARFIGHTER_CPPFLAGS="$STARFIGHTER_CPPFLAGS -DNOFONT"
echo "Note: SDL_ttf not found; Unicode will not be supported."
echo "WARNING: SDL_ttf not found; Unicode will not be supported."
])
], [
PKG_CHECK_EXISTS([SDL2_ttf], [
@ -46,15 +46,15 @@ PKG_CHECK_EXISTS([SDL2_mixer], [
], [
PKG_CHECK_MODULES([SDL], [sdl2 SDL2_image])
STARFIGHTER_CPPFLAGS="$STARFIGHTER_CPPFLAGS -DNOFONT"
echo "Note: SDL_ttf not found; Unicode will not be supported."
echo "WARNING: SDL_ttf not found; Unicode will not be supported."
])
STARFIGHTER_CPPFLAGS="$STARFIGHTER_CPPFLAGS -DNOSOUND"
echo "Note: SDL_mixer not found; audio will not be supported."
echo "WARNING: SDL_mixer not found; audio will not be supported."
])
PKG_CHECK_MODULES([PANGO], [pango], [
], [
STARFIGHTER_CPPFLAGS="$STARFIGHTER_CPPFLAGS -DNOFONT"
echo "Note: Pango not found; Unicode will not be supported."
echo "WARNING: Pango not found; Unicode will not be supported."
])
AC_ARG_VAR([SF_WARN], [Set to 1 to enable compiler warnings])

View File

@ -45,15 +45,14 @@
020 p0ss
020 Berklee
050 +++ MUSIC +++
030 Zander Noriega
020 maxstack
020 Deceased Superior Technician
020 matthew.pablo
020 tgfcoder
020 JunglistMilitia
020 neocrey
020 WeskerHunter
020 Jan125
020 The Diligent Circle
020 Sweetpea
020 Alexandr Zhelanov
050 +++ SPECIAL THANKS +++
030 Wes Whitmore Ceri Done

File diff suppressed because it is too large Load Diff

3255
locale/eo.po Normal file

File diff suppressed because it is too large Load Diff

3270
locale/es_ES.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -4,9 +4,12 @@
# information. This file is offered as-is, without any warranty.
desktopdir = $(datarootdir)/applications
desktop_DATA = starfighter.desktop
desktop_DATA = io.github.pr_starfighter.starfighter.desktop
icondir = $(datarootdir)/pixmaps
icon_DATA = starfighter.png
dist_man6_MANS = starfighter.6
appdatadir = $(datarootdir)/metainfo
appdata_DATA = io.github.pr_starfighter.starfighter.metainfo.xml

View File

@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop-application">
<id>io.github.pr_starfighter.starfighter</id>
<metadata_license>CC-BY-SA-4.0</metadata_license>
<project_license>GPL-3.0-or-later</project_license>
<name>Project: Starfighter</name>
<summary>Space shoot 'em up game.</summary>
<recommends>
<control>keyboard</control>
<control>gamepad</control>
</recommends>
<description>
<p>
Project: Starfighter is a space shoot 'em up game originally developed
by Parallel Realities in 2002, and released in 2003. You assume the role
of Chris Bainfield in his quest to put an end to WEAPCO, the weapons
corporation which has enslaved the galaxy.
</p>
</description>
<launchable type="desktop-id">io.github.pr_starfighter.starfighter.desktop</launchable>
<screenshots>
<screenshot type="default">
<image>https://pr-starfighter.github.io/images/screenshot1.png</image>
<caption>Explosions</caption>
</screenshot>
<screenshot>
<image>https://pr-starfighter.github.io/images/screenshot2.png</image>
<caption>Main Menu</caption>
</screenshot>
<screenshot>
<image>https://pr-starfighter.github.io/images/screenshot3.png</image>
<caption>Boss Fight</caption>
</screenshot>
<screenshot>
<image>https://pr-starfighter.github.io/images/screenshot4.png</image>
<caption>Mines and Asteroids</caption>
</screenshot>
</screenshots>
<releases>
<release version="v2.4" date="2020-12-27" type="stable">
<url>https://github.com/pr-starfighter/starfighter/releases/tag/v2.4</url>
</release>
<release version="v2.3.3" date="2020-09-20" type="stable">
<url>https://github.com/pr-starfighter/starfighter/releases/tag/v2.3.3</url>
</release>
<release version="v2.3.2" date="2020-09-05" type="stable">
<url>https://github.com/pr-starfighter/starfighter/releases/tag/v2.3.2</url>
</release>
<release version="v2.3.1" date="2020-07-27" type="stable">
<url>https://github.com/pr-starfighter/starfighter/releases/tag/v2.3.1</url>
</release>
<release version="v2.3" date="2020-07-16" type="stable">
<url>https://github.com/pr-starfighter/starfighter/releases/tag/v2.3</url>
</release>
<release version="v2.2.1" date="2020-06-22" type="stable">
<url>https://github.com/pr-starfighter/starfighter/releases/tag/v2.2.1</url>
</release>
<release version="v2.2" date="2020-05-27" type="stable">
<url>https://github.com/pr-starfighter/starfighter/releases/tag/v2.2</url>
</release>
<release version="v2.1.1" date="2020-05-24" type="stable">
<url>https://github.com/pr-starfighter/starfighter/releases/tag/v2.1.1</url>
</release>
<release version="v2.1" date="2020-04-02" type="stable">
<url>https://github.com/pr-starfighter/starfighter/releases/tag/v2.1</url>
</release>
<release version="v2.0" date="2019-07-04" type="stable">
<url>https://github.com/pr-starfighter/starfighter/releases/tag/v2.0.0.3</url>
</release>
</releases>
<url type="homepage">https://pr-starfighter.github.io/</url>
<url type="bugtracker">https://github.com/pr-starfighter/starfighter/issues</url>
<url type="donation">https://liberapay.com/diligentcircle</url>
<categories>
<category>Game</category>
<category>ActionGame</category>
<category>ArcadeGame</category>
</categories>
<provides>
<binary>starfighter</binary>
</provides>
<update_contact>diligentcircle@riseup.net</update_contact>
<content_rating type="oars-1.0">
<content_attribute id="violence-cartoon">none</content_attribute>
<content_attribute id="violence-fantasy">none</content_attribute>
<content_attribute id="violence-realistic">moderate</content_attribute>
<content_attribute id="violence-bloodshed">none</content_attribute>
<content_attribute id="violence-sexual">none</content_attribute>
<content_attribute id="drugs-alcohol">none</content_attribute>
<content_attribute id="drugs-narcotics">none</content_attribute>
<content_attribute id="drugs-tobacco">none</content_attribute>
<content_attribute id="sex-nudity">none</content_attribute>
<content_attribute id="sex-themes">none</content_attribute>
<content_attribute id="language-profanity">moderate</content_attribute>
<content_attribute id="language-humor">none</content_attribute>
<content_attribute id="language-discrimination">none</content_attribute>
<content_attribute id="social-chat">none</content_attribute>
<content_attribute id="social-info">none</content_attribute>
<content_attribute id="social-audio">none</content_attribute>
<content_attribute id="social-location">none</content_attribute>
<content_attribute id="social-contacts">none</content_attribute>
<content_attribute id="money-purchasing">none</content_attribute>
<content_attribute id="money-gambling">none</content_attribute>
</content_rating>
</component>

View File

@ -6,14 +6,18 @@
musicdir = $(pkgdatadir)/music
nobase_dist_music_DATA = \
death.ogg \
android_oppression.ogg \
androids_last_dance.ogg \
first_cyber_dance.ogg \
frozen_jam.ogg \
last_cyber_dance.ogg \
orbital_colossus.ogg \
railjet_short.ogg \
RE.ogg \
rise_of_spirit.ogg \
sleeping_with_androids.ogg \
sound_and_silence.ogg \
space_dimensions.ogg \
through_space.ogg \
walking_among_androids.ogg
through_space.ogg
EXTRA_DIST = sources

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
music/first_cyber_dance.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -84,6 +84,15 @@ void alien_nerf(int index)
aliens[index].maxShield /= 2;
}
}
else if ((game.difficulty != DIFFICULTY_ORIGINAL)
&& (game.difficulty < DIFFICULTY_HARD)
&& (game.area == MISN_URUSOR)
&& (aliens[index].classDef == CD_CARGOSHIP))
{
// Lighter version of the Urusor cargo ship shield buff.
aliens[index].shield *= 3;
aliens[index].maxShield *= 3;
}
}
void alien_defs_init()
@ -1190,7 +1199,11 @@ void aliens_init()
}
}
int alien_add()
/* Adds an alien. If spawnedMisnTarget is non-NULL, it is set to 1 if
* a mission target which can be forced with game.forceMisnTarget was
* spawned (or otherwise left unchanged).
*/
int alien_add(int *spawnedMisnTarget)
{
int index = alien_getFreeIndex();
@ -1315,10 +1328,19 @@ int alien_add()
&& (game.area != MISN_SIVEDI)
&& (game.area != MISN_MARS))
{
if ((game.system == SYSTEM_EYANANTH) && (game.area == MISN_INTERCEPTION))
if ((game.system == SYSTEM_EYANANTH)
&& (game.area == MISN_INTERCEPTION))
{
if (CHANCE(1. / 5.))
if (CHANCE(1. / 5.)
|| (game.difficulty != DIFFICULTY_ORIGINAL
&& game.forceMisnTarget))
{
randEnemy = CD_SLAVETRANSPORT;
game.forceMisnTarget = 0;
if (spawnedMisnTarget != NULL)
*spawnedMisnTarget = 1;
}
}
if (CHANCE(1. / 6.))
@ -2067,7 +2089,7 @@ void alien_destroy(Object *alien, Object *attacker)
"Target destroyed!\n"
"One more for me!\n"
"Yes! Did you see that, Chris?\n"
"Hey Chris, remind me to check my kill count later!\n"
"Hey, Chris, remind me to check my kill count later!\n"
"Bring it on, WEAPCO!\n"
"Take that, WEAPCO!\n"
"My kill count is going up!\n"
@ -2173,6 +2195,7 @@ void alien_hurt(Object *alien, Object *attacker, int damage, int ion)
int ai_type;
double run_chance;
int stage1_shield, stage2_shield, stage3_shield;
int i;
ai_type = ((game.difficulty == DIFFICULTY_ORIGINAL) ?
alien->AITypeOriginal : alien->AIType);
@ -2254,21 +2277,31 @@ void alien_hurt(Object *alien, Object *attacker, int damage, int ion)
else
{
stage1_shield = KLINE_SHIELD_TINY;
if ((game.difficulty != DIFFICULTY_ORIGINAL)
&& (game.difficulty > DIFFICULTY_EASY))
{
for (int i = 0 ; i < ALIEN_MAX ; i++)
{
if (aliens[i].active && (i != ALIEN_KLINE)
&& (aliens[i].flags & FL_WEAPCO)
&& (aliens[i].shield > 0))
{
stage1_shield = KLINE_SHIELD_SMALL;
break;
}
}
}
if ((alien->shield <= alien->maxShield - stage1_shield)
&& !(alien->flags & FL_LEAVESECTOR))
{
&& !(alien->flags & FL_LEAVESECTOR))
alien->flags |= FL_LEAVESECTOR;
}
}
}
run_chance = (game.difficulty == DIFFICULTY_ORIGINAL) ? 0.02 : damage / 50.;
if ((alien->flags & FL_RUNSAWAY) && CHANCE(run_chance))
{
alien->flags |= FL_LEAVESECTOR;
}
audio_playSound(SFX_HIT, alien->x, alien->y);
if (ai_type == AI_EVASIVE)

View File

@ -29,7 +29,7 @@ extern Object aliens[ALIEN_MAX];
void alien_nerf(int index);
void alien_defs_init();
void aliens_init();
int alien_add();
int alien_add(int *spawnedMisnTarget);
void alien_addDrone(Object *hostAlien);
void alien_addSmallAsteroid(Object *hostAlien);
void alien_addFriendly(int type);

View File

@ -26,6 +26,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "defs.h"
#include "structs.h"
#include "alien.h"
#include "game.h"
#include "engine.h"
#include "screen.h"
@ -66,7 +67,8 @@ void audio_playSound(int sid, float x, float y)
int angle = atanf((x - (screen->w / 2)) / (screen->w / 2)) * 180 / M_PI;
int attenuation = fabsf(x - (screen->w / 2)) / (screen->w / 20);
float distance = sqrtf(powf(fabsf(x - (screen->w / 2)), 2) + powf(fabsf(y - (screen->h / 2)), 2));
int volume = MIX_MAX_VOLUME - (MIX_MAX_VOLUME * distance / (3 * screen->w));
const int max_volume = MIX_MAX_VOLUME;
int volume = max_volume - (max_volume * distance / (3 * screen->w));
if ((!engine.useSound) || (!engine.useAudio) || (volume <= 0))
return;
@ -109,8 +111,8 @@ void audio_playSound(int sid, float x, float y)
}
else
{
if (Mix_Playing(channel) && (volume <= MIX_MAX_VOLUME / 4)
&& (channelVolume[channel] >= MIX_MAX_VOLUME * 3 / 4))
if (Mix_Playing(channel) && (volume <= max_volume / 4)
&& (channelVolume[channel] >= max_volume * 3 / 4))
return;
else
channelVolume[channel] = volume;
@ -169,6 +171,14 @@ void audio_setMusicVolume(int volume)
#endif
}
void audio_setMusicPosition(double position)
{
#ifndef NOSOUND
if (engine.useMusic && engine.useAudio)
Mix_SetMusicPosition(position);
#endif
}
void audio_playMusic(const char *filename, int loops)
{
#ifndef NOSOUND
@ -176,7 +186,7 @@ void audio_playMusic(const char *filename, int loops)
{
audio_haltMusic();
music = Mix_LoadMUS(filename);
audio_setMusicVolume(100);
audio_setMusicVolume(MIX_MAX_VOLUME);
Mix_PlayMusic(music, loops);
}
#endif
@ -223,7 +233,41 @@ void audio_playRandomTrack()
{
#ifndef OLD_MUSIC
case MISN_START:
audio_playMusic("music/railjet_short.ogg", -1);
case MISN_INTERCEPTION:
if ((aliens[ALIEN_KLINE].classDef == CD_KLINE)
&& aliens[ALIEN_KLINE].active)
audio_playMusic("music/last_cyber_dance.ogg", -1);
else if ((game.system == SYSTEM_MORDOR)
&& (aliens[ALIEN_BOSS].classDef == CD_CLOAKFIGHTER)
&& aliens[ALIEN_BOSS].active)
audio_playMusic("music/space_dimensions.ogg", -1);
else
audio_playMusic("music/railjet_short.ogg", -1);
break;
case MISN_HAIL:
case MISN_JOLDAR:
case MISN_DORIM:
case MISN_SIVEDI:
case MISN_NEPTUNE:
case MISN_SATURN:
audio_playMusic("music/frozen_jam.ogg", -1);
break;
case MISN_CERADSE:
case MISN_ALLEZ:
case MISN_URUSOR:
case MISN_FELLON:
case MISN_POSWIC:
case MISN_MARS:
audio_playMusic("music/sound_and_silence.ogg", -1);
break;
case MISN_HINSTAG:
case MISN_NEROD:
case MISN_ODEON:
case MISN_ALMARTHA:
case MISN_PLUTO:
case MISN_URANUS:
case MISN_JUPITER:
audio_playMusic("music/space_dimensions.ogg", -1);
break;
#endif
case MISN_MOEBO:
@ -240,7 +284,7 @@ void audio_playRandomTrack()
#ifdef OLD_MUSIC
audio_playMusic("music/LoopsAndTings.mod", -1);
#else
audio_playMusic("music/RE.ogg", -1);
audio_playMusic("music/androids_last_dance.ogg", -1);
#endif
break;
default:

View File

@ -29,6 +29,7 @@ void audio_haltMusic();
void audio_pauseMusic();
void audio_resumeMusic();
void audio_setMusicVolume(int volume);
void audio_setMusicPosition(double position);
void audio_playMusic(const char *filename, int loops);
void audio_playRandomTrack();
void audio_free();

View File

@ -124,8 +124,7 @@ void collectable_add(float x, float y, int type, int value, int life)
type = P_PLASMA_RATE;
if ((game.difficulty == DIFFICULTY_NIGHTMARE)
|| ((game.difficulty != DIFFICULTY_SUPEREASY)
&& (game.difficulty != DIFFICULTY_EASY)
|| ((game.difficulty > DIFFICULTY_EASY)
&& (game.difficulty != DIFFICULTY_ORIGINAL)
&& ((game.area == MISN_MOEBO)
|| (game.area == MISN_ELAMALE)

View File

@ -29,8 +29,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define WRAP_ADD(x, y, a, b) x = (((x) + (y)) + \
((x) + (y) < (a) ? ((b) - (a)) : 0) + \
((x) + (y) > (b) ? ((a) - (b)) : 0))
#define CHANCE(x) ((rand() % RAND_MAX) < ((x) * RAND_MAX))
#define RANDRANGE(x, y) (((x) < (y)) ? ((x) + (rand() % (long)(1 + (y) - (x)))) : (x))
#define CHANCE(x) (((double)rand() / ((double)RAND_MAX+1)) < (x))
#define RANDRANGE(x, y) (((x) < (y)) ? \
((x) + (rand() % (long)(1 + (y) - (x)))) : (x))
#define DRAND ((double)rand() / RAND_MAX)
#define _(s) gettext(s)
#define CSDLP(x) (((x) == SDL_PRESSED) ? 1 : 0)
@ -555,8 +556,10 @@ enum {
// Text sprites
enum {
// Main menu
TS_PRESENTS = MAX_INFOLINES,
TS_DILIGENTCIRCLE = MAX_INFOLINES,
TS_PRESENTS,
TS_AN_SDL_GAME,
TS_ORIGINALLY_BY,
TS_START_NEW_GAME,
TS_LOAD_GAME,
TS_CONTINUE_CURRENT_GAME,

View File

@ -56,7 +56,7 @@ Engine engine;
void engine_init()
{
engine.musicVolume = 100;
engine.musicVolume = MIX_MAX_VOLUME;
engine.useAudio = 1;
engine.maxAliens = 9;

View File

@ -24,6 +24,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "SDL.h"
#ifndef NOSOUND
#include "SDL_mixer.h"
#endif
#include "colors.h"
#include "defs.h"
#include "structs.h"
@ -100,6 +104,8 @@ void game_init()
game.slavesRescued = 0;
game.experimentalShield = 1000;
game.forceMisnTarget = 1;
game.timeTaken = 0;
game.stationedPlanet = -1;
@ -897,8 +903,7 @@ static void game_doBullets()
}
}
if ((game.difficulty != DIFFICULTY_SUPEREASY)
&& (game.difficulty != DIFFICULTY_EASY)
if ((game.difficulty > DIFFICULTY_EASY)
&& ((bullet->owner == &player) || (bullet->id == WT_ROCKET)))
{
for (int j = 0 ; j < 20 ; j++)
@ -2451,7 +2456,7 @@ static void game_showGameOver()
#ifdef OLD_MUSIC
audio_playMusic("music/Wybierak.mod", -1);
#else
audio_playMusic("music/death.ogg", -1);
audio_playMusic("music/sleeping_with_androids.ogg", 0);
#endif
int x = (screen->w - gameover->w) / 2;
@ -2489,8 +2494,8 @@ void game_getDifficultyText(char *dest, int difficulty)
switch (difficulty)
{
case DIFFICULTY_SUPEREASY:
/// DIFFICULTY_SUPEREASY
strcpy(dest, _("Super-Easy"));
/// DIFFICULTY_SUPEREASY (Assisted)
strcpy(dest, _("Assisted"));
break;
case DIFFICULTY_EASY:
/// DIFFICULTY_EASY
@ -2519,6 +2524,7 @@ void game_getDifficultyText(char *dest, int difficulty)
int game_mainLoop()
{
int spawnedMisnTarget;
float chance;
engine_resetLists();
@ -2537,8 +2543,12 @@ int game_mainLoop()
if (game.area == MISN_ELAMALE)
aliens[ALIEN_KLINE].active = 0;
spawnedMisnTarget = 0;
for (int i = 0 ; i < engine.maxAliens ; i++)
alien_add();
alien_add(&spawnedMisnTarget);
if (!spawnedMisnTarget)
game.forceMisnTarget = 1;
if (game.hasWingMate1)
alien_addFriendly(ALIEN_PHOEBE);
@ -2577,7 +2587,7 @@ int game_mainLoop()
// Some specifics for interception missions
if (game.area == MISN_INTERCEPTION)
{
if ((game.system > SYSTEM_EYANANTH) && ((rand() % 5) == 0))
if ((game.system > SYSTEM_EYANANTH) && CHANCE(1. / 5.))
{
aliens[ALIEN_KLINE] = alien_defs[CD_KLINE];
aliens[ALIEN_KLINE].owner = &aliens[ALIEN_KLINE];
@ -2590,7 +2600,9 @@ int game_mainLoop()
if ((game.system == SYSTEM_MORDOR) && (game.experimentalShield > 0))
{
if ((rand() % 5) > 0)
if (CHANCE(4. / 5.)
|| (game.difficulty != DIFFICULTY_ORIGINAL
&& game.forceMisnTarget))
{
aliens[ALIEN_BOSS] = alien_defs[CD_CLOAKFIGHTER];
aliens[ALIEN_BOSS].owner = &aliens[ALIEN_BOSS];
@ -2601,8 +2613,18 @@ int game_mainLoop()
aliens[ALIEN_BOSS].y = player.y;
player_setTarget(ALIEN_BOSS);
aliens[ALIEN_BOSS].shield = game.experimentalShield;
game.forceMisnTarget = 0;
}
else
game.forceMisnTarget = 1;
}
// Note: music is started here only for interceptions. For
// regular missions, it is instead started by
// mission_showStartScreen(). This is necessary to ensure the
// proper music can be played when Kline or the cloak fighter
// are active.
audio_playRandomTrack();
}
if (game.area == MISN_VENUS)
@ -2678,7 +2700,7 @@ int game_mainLoop()
engine.counter2 = (SDL_GetTicks() + 1000);
engine.missionCompleteTimer = 0;
engine.musicVolume = 100;
engine.musicVolume = MIX_MAX_VOLUME;
int rtn = 0;
@ -2786,7 +2808,7 @@ int game_mainLoop()
engine.keyState[KEY_ALTFIRE] = 0;
engine.xaxis = 0;
engine.yaxis = 0;
LIMIT_ADD(engine.musicVolume, -0.2, 0, 100);
LIMIT_ADD(engine.musicVolume, -0.2, 0, MIX_MAX_VOLUME);
audio_setMusicVolume(engine.musicVolume);
}
else
@ -2802,7 +2824,7 @@ int game_mainLoop()
else
{
player_getInput();
LIMIT_ADD(engine.musicVolume, -0.2, 0, 100);
LIMIT_ADD(engine.musicVolume, -0.2, 0, MIX_MAX_VOLUME);
audio_setMusicVolume(engine.musicVolume);
if (SDL_GetTicks() >= engine.missionCompleteTimer)
{
@ -2882,7 +2904,7 @@ int game_mainLoop()
WRAP_ADD(engine.addAliens, -1, 0, mission.addAliens);
if ((engine.addAliens == 0) && (allowableAliens > 0))
{
allowableAliens -= alien_add();
allowableAliens -= alien_add(NULL);
}
}

View File

@ -64,6 +64,9 @@ typedef struct Game_ {
// remaining shield for experimental fighter
int experimentalShield;
// Whether to force interception targets to appear
int forceMisnTarget;
Uint32 timeTaken; // In seconds
int missionCompleted[MAX_PLANETS];

View File

@ -179,6 +179,7 @@ void intermission_updateSystemStatus()
game.stationedPlanet = 0;
game.system = 1;
game.area = MISN_RESCUESLAVES;
game.forceMisnTarget = 1;
intermission_initPlanets(game.system);
if (game.difficulty == DIFFICULTY_ORIGINAL)
@ -189,6 +190,7 @@ void intermission_updateSystemStatus()
game.stationedPlanet = 0;
game.system = 2;
game.area = MISN_CLOAKFIGHTER;
game.forceMisnTarget = 1;
intermission_initPlanets(game.system);
if (game.difficulty == DIFFICULTY_ORIGINAL)
@ -1057,7 +1059,7 @@ static void intermission_createMissionDetailSurface(SDL_Surface *comms, int miss
case MISN_FELLON:
/// Mission dialog: Mordor, Fellon (Sid Wilson)
strcpy(string, _("A rebel group has organized a counter strike. If we can help them secure a victory it will be a real boost to morale."));
strcpy(string, _("A rebel group has organized a counter strike. If we can help them secure a victory, it will be a real boost to morale."));
y = intermission_renderDialog(comms, y, FS_SID, string);
/// Mission dialog: Mordor, Fellon (Chris Bainfield)
@ -1465,8 +1467,7 @@ int intermission()
intermission_createCommsSurface(commsSurface);
// Remove the Supercharge, if it is there
if ((game.difficulty != DIFFICULTY_SUPEREASY)
&& (game.difficulty != DIFFICULTY_EASY)
if ((game.difficulty > DIFFICULTY_EASY)
&& (game.difficulty != DIFFICULTY_ORIGINAL))
{
weapons[W_PLAYER_WEAPON].reload[0] = MAX(

View File

@ -1175,10 +1175,12 @@ void mission_showStartScreen()
gfx_createTextObject(TS_POWER, "Power", 0, 0, FONT_WHITE);
gfx_createTextObject(TS_OUTPUT, "Output", 0, 0, FONT_WHITE);
gfx_createTextObject(TS_COOLER, "Cooler", 0, 0, FONT_WHITE);
audio_playRandomTrack();
if (game.area != MISN_INTERCEPTION)
{
// Note: music is started here only for regular missions. For
// interceptions, it is instead started by game_mainLoop().
audio_playRandomTrack();
renderer_update();
player_flushInput();

View File

@ -352,9 +352,9 @@ void save_createSurface(SDL_Surface *savesSurface, int clickedSlot)
gfx_drawRect(savesSurface, 5, 265, 100, 25, 0x00, 0x99, 0x00);
gfx_drawRect(savesSurface, 125, 265, 100, 25, 0x99, 0x99, 0x00);
gfx_drawRect(savesSurface, 243, 265, 100, 25, 0x99, 0x00, 0x00);
gfx_renderUnicode(_("SAVE"), 40, 270, FONT_WHITE, 0, savesSurface);
gfx_renderUnicode(_("CANCEL"), 150, 270, FONT_WHITE, 0, savesSurface);
gfx_renderUnicode(_("DELETE"), 270, 270, FONT_WHITE, 0, savesSurface);
gfx_renderUnicode(_("SAVE"), 10, 270, FONT_WHITE, 0, savesSurface);
gfx_renderUnicode(_("CANCEL"), 130, 270, FONT_WHITE, 0, savesSurface);
gfx_renderUnicode(_("DELETE"), 248, 270, FONT_WHITE, 0, savesSurface);
gfx_renderUnicode(_("SAVE will save the game"), 17, 200, FONT_WHITE, 0, savesSurface);
gfx_renderUnicode(_("CANCEL will unselect that slot"), 17, 220, FONT_WHITE, 0, savesSurface);
gfx_renderUnicode(_("DELETE will remove the save"), 17, 240, FONT_WHITE, 0, savesSurface);

View File

@ -245,8 +245,10 @@ int title_show()
prlogo = gfx_loadImage("gfx/prlogo.png");
sflogo = gfx_loadImage("gfx/sflogo.png");
gfx_createTextObject(TS_DILIGENTCIRCLE, "THE DILIGENT CIRCLE", 0, 0, FONT_WHITE);
gfx_createTextObject(TS_PRESENTS, "PRESENTS", 0, 0, FONT_WHITE);
gfx_createTextObject(TS_AN_SDL_GAME, "AN SDL GAME", 0, 0, FONT_WHITE);
gfx_createTextObject(TS_ORIGINALLY_BY, "ORIGINALLY BY", 0, 0, FONT_WHITE);
gfx_createTextObject(TS_START_NEW_GAME, _("START NEW GAME"), 0, 0, FONT_WHITE);
gfx_createTextObject(TS_LOAD_GAME, _("LOAD GAME"), 0, 0, FONT_WHITE);
gfx_createTextObject(TS_CONTINUE_CURRENT_GAME, _("CONTINUE CURRENT GAME"), 0, 0, FONT_WHITE);
@ -316,7 +318,7 @@ int title_show()
#ifdef OLD_MUSIC
audio_playMusic("music/Platinum.mod", 1);
#else
audio_playMusic("music/walking_among_androids.ogg", 1);
audio_playMusic("music/android_oppression.ogg", 1);
#endif
while (!engine.done)
@ -342,23 +344,28 @@ int title_show()
}
}
if ((now - then > 2000) && (now - then < 8000) && (!skip))
if ((now - then > 2000) && (now - then < 7000) && (!skip))
{
screen_blit(prlogo, ((screen->w - prlogo->w) / 2), ((screen->h - prlogo->h) / 2));
screen_blitText(TS_DILIGENTCIRCLE, -1, screen->h / 2);
}
else if ((now - then > 9000) && (now - then < 15000) && (!skip))
else if ((now - then > 7500) && (now - then < 14250) && (!skip))
{
screen_blitText(TS_PRESENTS, -1, screen->h / 2);
}
else if ((now - then > 16000) && (now - then < 21000) && (!skip))
else if ((now - then > 14750) && (now - then < 21500) && (!skip))
{
screen_blitText(TS_AN_SDL_GAME, -1, screen->h / 2);
}
else if ((now - then > 25500) || (skip))
else if ((now - then > 22000) && (now - then < 29000) && (!skip))
{
screen_blitText(TS_ORIGINALLY_BY, -1, screen->h / 2 - MENU_SPACING);
screen_blit(prlogo, ((screen->w - prlogo->w) / 2), screen->h / 2);
}
else if ((now - then > 29500) || (skip))
{
screen_blit(sflogo, ((screen->w - sflogo->w) / 2), ((screen->h - sflogo->h) / 3));
if ((now - then >= 27500) || (skip))
if ((now - then >= 33250) || (skip))
{
optionRec.x = screen->w / 2 - optionRec.w / 2;
optionRec.y = (MENU_Y - 4 - MENU_SPACING) + MENU_SPACING * selectedOption;
@ -517,7 +524,7 @@ int title_show()
#ifdef OLD_MUSIC
audio_playMusic("music/Platinum.mod", 1);
#else
audio_playMusic("music/walking_among_androids.ogg", 1);
audio_playMusic("music/android_oppression.ogg", 1);
#endif
}
else