mirror of
https://github.com/elasota/Aerofoil.git
synced 2025-09-23 14:53:52 +00:00
Compare commits
9 Commits
1663d9d6fe
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
75e5cceaf5 | ||
|
baa7bbde7f | ||
|
bdb51862f4 | ||
|
81f963cfeb | ||
|
89ed6ae29b | ||
|
f6069e7a58 | ||
|
e8028920aa | ||
|
e3b481093a | ||
|
b866b0e67c |
@@ -18,7 +18,7 @@
|
|||||||
"enabled" : false
|
"enabled" : false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name" : "Aerofoil ©2019-2021 Gale Force Games LLC",
|
"name" : "Aerofoil ©2019-2024 Eric Lasota",
|
||||||
"itemType" : "Label",
|
"itemType" : "Label",
|
||||||
"pos" : [ 16, 21 ],
|
"pos" : [ 16, 21 ],
|
||||||
"size" : [ 406, 20 ],
|
"size" : [ 406, 20 ],
|
||||||
|
@@ -734,3 +734,15 @@ install(TARGETS "${EXECNAME}" COMPONENT Executable)
|
|||||||
install(FILES ${DATA_FILES} DESTINATION lib/aerofoil/Packaged COMPONENT Resources)
|
install(FILES ${DATA_FILES} DESTINATION lib/aerofoil/Packaged COMPONENT Resources)
|
||||||
install(FILES ${HOUSE_FILES} DESTINATION lib/aerofoil/Packaged/Houses COMPONENT Resources)
|
install(FILES ${HOUSE_FILES} DESTINATION lib/aerofoil/Packaged/Houses COMPONENT Resources)
|
||||||
install(TARGETS ${TOOL_EXES} DESTINATION lib/aerofoil/tools COMPONENT Tools)
|
install(TARGETS ${TOOL_EXES} DESTINATION lib/aerofoil/tools COMPONENT Tools)
|
||||||
|
|
||||||
|
if (UNIX AND NOT APPLE)
|
||||||
|
install(FILES Resources/Linux/io.github.elasota.aerofoil.metainfo.xml
|
||||||
|
DESTINATION share/appdata
|
||||||
|
PERMISSIONS WORLD_READ GROUP_READ GROUP_EXECUTE OWNER_READ OWNER_WRITE)
|
||||||
|
install(FILES Resources/Linux/io.github.elasota.aerofoil.desktop
|
||||||
|
DESTINATION share/applications
|
||||||
|
PERMISSIONS WORLD_EXECUTE WORLD_READ GROUP_READ GROUP_EXECUTE OWNER_READ OWNER_WRITE OWNER_EXECUTE)
|
||||||
|
install(FILES Resources/Linux/io.github.elasota.aerofoil.svg
|
||||||
|
DESTINATION share/icons/hicolor/scalable/apps
|
||||||
|
PERMISSIONS WORLD_READ GROUP_READ GROUP_EXECUTE OWNER_READ OWNER_WRITE)
|
||||||
|
endif()
|
||||||
|
@@ -5,38 +5,61 @@ files, if necessary, to the "Houses" directory inside of the "Aerofoil"
|
|||||||
directory in your "Documents" directory, then restart Aerofoil.
|
directory in your "Documents" directory, then restart Aerofoil.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
IMPORTING EXISTING COMMUNITY CONTENT TO AEROFOIL
|
IMPORTING EXISTING COMMUNITY CONTENT TO AEROFOIL
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
If you want to import an existing third-party Glider PRO house to Aerofoil,
|
If you want to import an existing third-party Glider PRO house to Aerofoil,
|
||||||
a few steps are required.
|
a few steps are required. All Aerofoil import tools are currently command-line
|
||||||
|
only, so you will need to use a command prompt to use them. Launch the tool
|
||||||
|
programs without any arguments and they will give instructions for usage.
|
||||||
|
|
||||||
You need to convert the file into Aerofoil's "triplet" format, which consists
|
|
||||||
of a metadata file (extension .gpf), and file forks (.gpd for data, .gpr for
|
|
||||||
resources). How you get these depends on the input format:
|
|
||||||
- For MacBinary files (.bin), use the "bin2gp" utility
|
|
||||||
- For BinHex files (.hqx), use the "hqx2gp" utility
|
|
||||||
- For StuffIt (.sit) and Compact Pro (.cpt) archives, use the "unpacktool"
|
|
||||||
utility to extract the contents in triplet format. The "unpacktool"
|
|
||||||
utility should support most vintage StuffIt archives made with StuffIt
|
|
||||||
Deluxe 6 or lower.
|
|
||||||
|
|
||||||
(NOTE: ".sea" files are self-extracting archives, typically StuffIt or Compact
|
Some history: On most modern operating systems, files are a single stream of
|
||||||
Pro archives with the self-extractor program in the resources. These will
|
data, and the file type is represented by an extension at the end of the file
|
||||||
always be distributed in a fork-grouping container like MacBinary or BinHex.
|
name. On classic Macintosh systems, files have 2 streams: The data fork and
|
||||||
For cases like these, you need to split the self-extracting archive using
|
resource fork, and the file type (among other things) is stored in a metadata
|
||||||
"bin2gp" or "hqx2gp" and then pass the ".sea.gpd" file (which contains the
|
block that is separate from the file data itself.
|
||||||
archive data) to "unpacktool" to decompress it.)
|
|
||||||
|
|
||||||
Once you've done that, if the house has custom resources (i.e. a .gpr file),
|
Macintosh Glider PRO house files use the data fork to store the level data and
|
||||||
you need to convert it to an Aerofoil resource archive, which you can do using
|
the resource fork to store custom features like sounds.
|
||||||
the "gpr2gpa" tool.
|
|
||||||
|
|
||||||
|
However, most server software only supports transmitting files as a single data
|
||||||
|
stream, so Macintosh files were shared in formats that bundle the 3 types of
|
||||||
|
data into a single data stream, and were converted into the full Macintosh
|
||||||
|
format files using conversion software on a Macintosh machine.
|
||||||
|
|
||||||
|
Aerofoil's unpack tools will always extract Macintosh files as a triplet of 3
|
||||||
|
files:
|
||||||
|
- The resource fork will be split to a file with a ".gpr" extension
|
||||||
|
- The data fork will be split to a file with a ".gpa" extension
|
||||||
|
- The metadata will be split to a file with a ".gpf" extension
|
||||||
|
|
||||||
|
Some file types you may encounter in the wild:
|
||||||
|
- MacBinary files (.bin): These encode a single file. Use the "bin2gp"
|
||||||
|
utility to unpack it.
|
||||||
|
- BinHex files (.hqx): These encode a single file. Use the "hqx2gp" utility
|
||||||
|
to unpack it.
|
||||||
|
- Compact Pro (.cpt) and StuffIt (.sit) archives encode multiple files.
|
||||||
|
Use the "unpacktool" utility to extract it.
|
||||||
|
- Self-extracting archives (.sea) are programs that contain archive data,
|
||||||
|
usually in StuffIt or Compact Pro format, in the data fork, and a
|
||||||
|
decompression program in the resource fork. Typically you will encounter
|
||||||
|
these as ".sea.hqx" or similar. For these, you need to extract the .sea
|
||||||
|
file from its original encoding, and then pass the data fork file (.gpd)
|
||||||
|
to the "unpacktool" utility.
|
||||||
|
|
||||||
|
|
||||||
|
Once you've unpacked the data for the house, you may need to convert the
|
||||||
|
resources (.gpr file) to Aerofoil's resource format. Aerofoil can not read .gpr
|
||||||
|
files directly.
|
||||||
|
|
||||||
|
To convert resources for a house, use the "gpr2gpa" utility. Note that
|
||||||
gpr2gpa's PICT converter may not support all PICT encodings. If you find a
|
gpr2gpa's PICT converter may not support all PICT encodings. If you find a
|
||||||
house with custom PICT resources that isn't supported, please submit a sample
|
house with custom PICT resources that isn't supported, please submit a sample
|
||||||
to Aerofoil's issue tracker.
|
to Aerofoil's issue tracker.
|
||||||
|
|
||||||
|
Once you've done this, you should have a .gpf, .gpa, and .gpd file for the
|
||||||
|
house. Put them in the Houses directory to add the house to Aerofoil.
|
||||||
|
|
||||||
|
|
||||||
IMPORTING TV QUICKTIME MOVIES
|
IMPORTING TV QUICKTIME MOVIES
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
@@ -79,12 +102,9 @@ with an asterisk (*) and omit the output filename.
|
|||||||
|
|
||||||
SECURITY CONSIDERATIONS
|
SECURITY CONSIDERATIONS
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
Glider PRO didn't really do any validation of houses. Currently, Aerofoil
|
Glider PRO didn't really do any validation of houses. Aerofoil 1.1 has a
|
||||||
doesn't do any additional validation either, and it's possible that invalid
|
significantly stricter validator, which will reject data that seems
|
||||||
house data may lead to crashes or even remote code execution.
|
excessively large or invalid.
|
||||||
|
|
||||||
Aerofoil 1.1 has a significantly stricter validator, which will reject data
|
|
||||||
that seems excessively large or invalid.
|
|
||||||
|
|
||||||
Also, Glider PRO houses were able to take advantage of a resource overlaying
|
Also, Glider PRO houses were able to take advantage of a resource overlaying
|
||||||
feature of the Macintosh operating system, where a resource being present in
|
feature of the Macintosh operating system, where a resource being present in
|
||||||
|
@@ -344,6 +344,7 @@ void DoAboutFramework (void)
|
|||||||
surface->DrawString(Point::Create(creditsHorizontalOffset, verticalPoint + spacing * (lineNum++)), PSTR("Eric Lasota - Programming, admin"), blackColor, font);
|
surface->DrawString(Point::Create(creditsHorizontalOffset, verticalPoint + spacing * (lineNum++)), PSTR("Eric Lasota - Programming, admin"), blackColor, font);
|
||||||
surface->DrawString(Point::Create(creditsHorizontalOffset, verticalPoint + spacing * (lineNum++)), PSTR("Thijs Verboon - macOS programming"), blackColor, font);
|
surface->DrawString(Point::Create(creditsHorizontalOffset, verticalPoint + spacing * (lineNum++)), PSTR("Thijs Verboon - macOS programming"), blackColor, font);
|
||||||
surface->DrawString(Point::Create(creditsHorizontalOffset, verticalPoint + spacing * (lineNum++)), PSTR("Phil Marell - macOS programming"), blackColor, font);
|
surface->DrawString(Point::Create(creditsHorizontalOffset, verticalPoint + spacing * (lineNum++)), PSTR("Phil Marell - macOS programming"), blackColor, font);
|
||||||
|
surface->DrawString(Point::Create(creditsHorizontalOffset, verticalPoint + spacing * (lineNum++)), PSTR("Iain King-Speir - Linux programming"), blackColor, font);
|
||||||
(lineNum++);
|
(lineNum++);
|
||||||
surface->DrawString(Point::Create(horizontalOffset, verticalPoint + spacing * (lineNum++)), PSTR(GP_APPLICATION_NAME " is an unoffical third-party port of Glider PRO."), blackColor, font);
|
surface->DrawString(Point::Create(horizontalOffset, verticalPoint + spacing * (lineNum++)), PSTR(GP_APPLICATION_NAME " is an unoffical third-party port of Glider PRO."), blackColor, font);
|
||||||
(lineNum++);
|
(lineNum++);
|
||||||
|
@@ -47,3 +47,6 @@ to install them.
|
|||||||
|
|
||||||
Please report any issues that you experience with this to the issue tracker on
|
Please report any issues that you experience with this to the issue tracker on
|
||||||
GitHub.
|
GitHub.
|
||||||
|
|
||||||
|
If the executable doesn't start, try running with the -diagnostics flag to
|
||||||
|
output a log file, typically to ~/.local/share/aerofoil/aerofoil/Logs
|
||||||
|
@@ -9,6 +9,6 @@ To play:
|
|||||||
Windows, macOS:
|
Windows, macOS:
|
||||||
Download from the Releases page, or from https://galeforcegames.itch.io/aerofoil
|
Download from the Releases page, or from https://galeforcegames.itch.io/aerofoil
|
||||||
|
|
||||||
Android: Download from Google Play Store: https://play.google.com/store/apps/details?id=org.thecodedeposit.aerofoil from itch.io: https://galeforcegames.itch.io/aerofoil, or from the Releases page
|
|
||||||
|
|
||||||
Browser (HTML5): Visit https://galeforcegames.itch.io/aerofoil
|
Browser (HTML5): Visit https://galeforcegames.itch.io/aerofoil
|
||||||
|
|
||||||
|
Android: Unfortunately, the Android version has been discontinued due to high maintenance requirements. The Google Play Store listing will be retired in August, 2025. You can try downloading an APK from the Releases page, but it may not work on newer devices.
|
9
Resources/Linux/io.github.elasota.aerofoil.desktop
Normal file
9
Resources/Linux/io.github.elasota.aerofoil.desktop
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Game
|
||||||
|
Comment=A modern port of Glider PRO, the classic Macintosh paper airplane game
|
||||||
|
Exec=AerofoilX
|
||||||
|
Icon=io.github.elasota.aerofoil
|
||||||
|
Keywords=glider;glider pro;paper airplane
|
||||||
|
Name=Aerofoil
|
||||||
|
StartupNotify=true
|
||||||
|
Terminal=false
|
64
Resources/Linux/io.github.elasota.aerofoil.metainfo.xml
Normal file
64
Resources/Linux/io.github.elasota.aerofoil.metainfo.xml
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<component>
|
||||||
|
<id>io.github.elasota.aerofoil</id>
|
||||||
|
<name>Aerofoil</name>
|
||||||
|
<developer id="io.github.elasota.aerofoil">
|
||||||
|
<name>John Calhoun, Eric Lasota, Aerofoil Contributors</name>
|
||||||
|
<url>https://github.com/elasota/Aerofoil/graphs/contributors</url>
|
||||||
|
</developer>
|
||||||
|
<branding>
|
||||||
|
<color type="primary" scheme_preference="light">#ffcc99</color>
|
||||||
|
<color type="primary" scheme_preference="dark">#6b3838</color>
|
||||||
|
</branding>
|
||||||
|
<summary>A modern cross-platform port of Glider PRO, the classic Macintosh paper airplane game</summary>
|
||||||
|
<metadata_license>CC0-1.0</metadata_license>
|
||||||
|
<project_license>GPL-2.0</project_license>
|
||||||
|
<url type="homepage">https://github.com/elasota/Aerofoil/</url>
|
||||||
|
<description>
|
||||||
|
<p>Aerofoil is a port of John Calhoun's Glider PRO, the classic paper airplane game
|
||||||
|
for Apple Macintosh computers released in 1994.</p>
|
||||||
|
<p>The port features a 90's-style GUI, gamepad support, high-quality upscaling and
|
||||||
|
color correction, a full port of the level editor, a set of import tools for unpacking
|
||||||
|
and converting the vast majority of existing community content, and a new touchscreen interface
|
||||||
|
for mobile devices.</p>
|
||||||
|
</description>
|
||||||
|
<screenshots>
|
||||||
|
<screenshot type="default">
|
||||||
|
<image type="source">https://cdn.jsdelivr.net/gh/elasota/elasota.github.io@refs/heads/master/aerofoil/titlescreen.png</image>
|
||||||
|
<caption>The classic title screen with the custom menu GUI</caption>
|
||||||
|
</screenshot>
|
||||||
|
<screenshot>
|
||||||
|
<image type="source">https://cdn.jsdelivr.net/gh/elasota/elasota.github.io@refs/heads/master/aerofoil/demomode.png</image>
|
||||||
|
<caption>Demo mode</caption>
|
||||||
|
</screenshot>
|
||||||
|
<screenshot>
|
||||||
|
<image type="source">https://cdn.jsdelivr.net/gh/elasota/elasota.github.io@refs/heads/master/aerofoil/winscreen.png</image>
|
||||||
|
<caption>You won!</caption>
|
||||||
|
</screenshot>
|
||||||
|
<screenshot>
|
||||||
|
<image type="source">https://cdn.jsdelivr.net/gh/elasota/elasota.github.io@refs/heads/master/aerofoil/nemosmarket.png</image>
|
||||||
|
<caption>One of the included houses</caption>
|
||||||
|
</screenshot>
|
||||||
|
<screenshot>
|
||||||
|
<image type="source">https://cdn.jsdelivr.net/gh/elasota/elasota.github.io@refs/heads/master/aerofoil/editor.png</image>
|
||||||
|
<caption>Level editor included!</caption>
|
||||||
|
</screenshot>
|
||||||
|
</screenshots>
|
||||||
|
<recommends>
|
||||||
|
<input>keyboard</input>
|
||||||
|
</recommends>
|
||||||
|
<categories>
|
||||||
|
<category>Game</category>
|
||||||
|
</categories>
|
||||||
|
<releases>
|
||||||
|
<release version="1.1.2" date="2021-11-10">
|
||||||
|
<url>https://github.com/elasota/Aerofoil/releases/tag/1.1.2</url>
|
||||||
|
<description>
|
||||||
|
<p>Added gamepad support to Android and fixed gamepads not working
|
||||||
|
on other platforms.</p>
|
||||||
|
<p>Split off comand-line import tools to a separate package.</p>
|
||||||
|
</description>
|
||||||
|
</release>
|
||||||
|
</releases>
|
||||||
|
<content_rating type="oars-1.1"></content_rating>
|
||||||
|
</component>
|
2
Resources/Linux/io.github.elasota.aerofoil.svg
Normal file
2
Resources/Linux/io.github.elasota.aerofoil.svg
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="512pt" height="512pt" version="1.1" viewBox="0 0 682.67 682.67" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="linearGradient2" x1="79.399" x2="79.399" y1="176.02" y2="120.3" gradientTransform="matrix(2.3332,0,0,2.3332,-111.25,-195.69)" gradientUnits="userSpaceOnUse"><stop stop-color="#d00" offset="0"/><stop stop-color="#f63" offset=".32649"/><stop stop-color="#fc9" offset=".71632"/><stop stop-color="#ff0" offset="1"/></linearGradient></defs><g transform="matrix(3.4895 0 0 3.4895 -98.192 -304.23)"><g transform="matrix(1.1519,0,0,1.1519,4.4555,12.215)"><path d="m170 150a65 65 0 01-64.743 64.999 65 65 0 01-65.255-64.486 65 65 0 0164.227-65.509 65 65 0 0165.763 63.968" fill="url(#linearGradient2)"/><path d="m30 130h26.25l3.75-10h45l20 20 4.8276-5h25.172l5 5h5l15 20h-20l-10 10h-71.128l-3.8724-10h-30z" fill="none" stroke="#336" stroke-linecap="square" stroke-width="5" style="paint-order:normal"/><path d="m30 130h26.25l3.75-10h45l15 15 5.0862 4.9108 4.7414-4.9108h25.172l5 5h5l15 20h-20l-10 10h-71.128l-3.8724-10h-30z" fill="#555"/><path d="m30 130h26.25l3.75-10h45l5 5 15.086 14.911 4.9138-4.9108h25l5 5h5l1.9297 6.5285-4.2904 6.9963-2.6393 6.4752 11.106-11.859-11.106 11.859-10 10h-11.166l-15.198-21.859h-34.614l-10.149 11.859h-7.4876l-11.385-32.431-11.853 32.431h-3.1472z" fill="#888"/><path d="m95.996 148.14h6.2852l-19.119 21.859h-4.2904z" fill="#444" stroke-linecap="square" stroke-width="5"/><path d="m30 130h26.25l3.75-10h45l20 20h40l15 20h-16.197l8.697-10-1.3943-1.8591-11.106 11.859-10 10h-7.5632l-17.437-25h-25l-21.128 25-18.872-50-15 40z" fill="#fff"/></g></g></svg>
|
After Width: | Height: | Size: 1.6 KiB |
Reference in New Issue
Block a user