Beta 6 is out. Pi 5 working. On to 7!

This commit is contained in:
Scott Duensing 2023-12-21 18:47:15 -06:00
parent 0914c760a1
commit 6c6a635484
7 changed files with 125 additions and 58 deletions

View file

@ -224,3 +224,20 @@ New Features
- singeQuit
- singeVersion
- soundStop
------------------------------------------------------------------------------
SINGE 1.00
==========
Released 2006
Notes
-----
- Original add-on for Daphne.
- Shipped with the ActionMax "emulator" and games.

View file

@ -4,7 +4,7 @@
\begin_header
\save_transient_properties true
\origin unavailable
\textclass scrartcl
\textclass scrbook
\use_default_options true
\begin_modules
theorems-ams
@ -205,7 +205,8 @@ Things to Know
\end_layout
\begin_layout Standard
Don't touch the Singe/ folder!
Don't touch the Singe/ folder! Files in this folder belong to Singe and
may be updated or deleted at any time.
\end_layout
\begin_layout Part
@ -217,7 +218,7 @@ Installing Games
\end_layout
\begin_layout Standard
Games designed for Singe 2.x and later simply need to be unpacked and copied
Games designed for Singe 2.xx and later simply need to be unpacked and copied
into the same folder where you placed the Singe binary.
The included menu system will automatically detect them and add them to
the menu.
@ -228,7 +229,7 @@ Customizing the Controls
\end_layout
\begin_layout Standard
By default, Singe maps controllers as if they were Xbox 360 gamepads.
By default, Singe maps controllers as if they were Xbox gamepads.
If your controller is not recognized or you wish to change the default
mappings as they appear to Singe, you can use the free SDL2 Gamepad Tool
from http://generalarcade.com/gamepadtool/.
@ -239,24 +240,33 @@ By default, Singe maps controllers as if they were Xbox 360 gamepads.
In addition to configuring your controller, you can remap all the input
options for Singe as a whole or for any individual game by using controls.cfg
files.
When determining how inputs are mapped, Singe begins with the default settings
and then applies changes specified in controls.cfg files in the following
order:
When determining how inputs are mapped, Singe reads configuration settings
in the following order:
\end_layout
\begin_layout Enumerate
1.
The main data directory
The defaults from inside Singe.
\end_layout
\begin_layout Enumerate
2.
The per-game data directory
controls.cfg from the Singe directory.
\end_layout
\begin_layout Enumerate
3.
The game script directory
controls.cfg from the root of the data directory.
\end_layout
\begin_layout Enumerate
controls.cfg from the game's data directory.
\end_layout
\begin_layout Enumerate
controls.cfg from the game's main script directory.
\end_layout
\begin_layout Standard
You do not have to specify every option in a custom controls.cfg file.
Feel free to just provide the entries you want changed.
\end_layout
\begin_layout Standard
@ -281,24 +291,24 @@ Singe is the name of the dragon in Dragon's Lair.
\end_layout
\begin_layout Itemize
What is the difference between Daphne, Singe, Hypseus, and Singe 2.x?
What is the difference between Daphne, Singe, Hypseus, and Singe 2.xx?
\end_layout
\begin_layout Quotation
Daphne is an actual laserdisc game emulator that can run a handful of classic
laser games.
Daphne/Singe or Singe 1.x is the original version of Singe that was an add-on
for the Daphne emulator.
Daphne/Singe or Singe 1.xx is the original version of Singe that was an
add-on for the Daphne emulator.
Originally it was shipped as a game DLL for Daphne and then later combined
into a single binary with the Daphne emulation features removed.
Hypseus-Singe is an enhanced fork of Daphne with Singe 1.x and some Singe
2.x support.
Finally, Singe 2.x is an all-new, built-from-scratch, upgrade of the original
Hypseus-Singe is an enhanced fork of Daphne with Singe 1.xx and some Singe
2.xx support.
Finally, Singe 2.xx is an all-new, built-from-scratch, upgrade of the original
Singe.
In short, if you want accuracy, use Daphne or Hypseus if they support emulating
the desired game.
If it's a Singe game, use Singe 2.x or you can try Hypseus.
Obviously we'd like you to use Singe 2.x.
If it's a Singe game, use Singe 2.xx or you can try Hypseus.
Obviously we'd like you to use Singe 2.xx.
:-)
\end_layout
@ -316,14 +326,14 @@ Emulators use the real software or ROMs from the original game and pretend
\end_layout
\begin_layout Itemize
Can I run Singe 1.x games on Singe 2.x?
Can I run Singe 1.xx games on Singe 2.xx?
\end_layout
\begin_layout Quotation
Yes! Probably.
But you likely won't want to.
Almost everything (that I know of) from Singe 1.x has been converted and
enhanced for Singe 2.x.
Almost everything (that I know of) from Singe 1.xx has been converted and
enhanced for Singe 2.xx.
\end_layout
\begin_layout Itemize
@ -361,7 +371,7 @@ Users have discovered that most Singe audio and stuttering problems are
\begin_layout Enumerate
Install VB-CABLE.
https://vb-audio.com/Cable/
(https://vb-audio.com/Cable/)
\end_layout
\begin_layout Enumerate
@ -393,10 +403,6 @@ You should have sound again.
Load up Singe, and your audio will be working and lag free!
\end_layout
\begin_layout Part
History
\end_layout
\begin_layout Part
Game Development
\end_layout
@ -467,6 +473,14 @@ Do not distribute non-essential files.
not ship index files generated from the videos.
\end_layout
\begin_layout Section
Game Directory Layout
\end_layout
\begin_layout Section
Packaging Your Game
\end_layout
\begin_layout Section
Event Driven...
Or Not?
@ -506,7 +520,7 @@ With the event-driven programming model, Singe controls the main "program
\begin_layout Standard
\begin_inset listings
lstparams "basicstyle={\scriptsize},tabsize=4"
lstparams "basicstyle={\tiny},tabsize=2"
inline false
status open
@ -966,7 +980,7 @@ singeYield()
\begin_layout Standard
\begin_inset listings
lstparams "basicstyle={\scriptsize},tabsize=4"
lstparams "basicstyle={\tiny},tabsize=2"
inline false
status open
@ -1091,7 +1105,7 @@ The games.dat file allows Singe to automatically locate new games when they
\begin_layout Standard
\begin_inset listings
lstparams "basicstyle={\scriptsize},tabsize=4"
lstparams "basicstyle={\tiny},tabsize=2"
inline false
status open
@ -1717,6 +1731,40 @@ GAMES = {
Included Libraries
\end_layout
\begin_layout Standard
In addition to the standard Lua libraries and the Singe API, the following
libraries are also available for use in Singe programs without the need
to install any additional software:
\end_layout
\begin_layout Description
Copas - Asynchronous networking
\end_layout
\begin_layout Description
LuaFileSystem - Expanded filesystem support
\end_layout
\begin_layout Description
LuaJSON - JavaScript Object Notation encoding and decoding
\end_layout
\begin_layout Description
LuaSec - TLS/SSL communication
\end_layout
\begin_layout Description
LuaSocket - TCP and UDP
\end_layout
\begin_layout Description
LuaRS232 - RS232 serial port access
\end_layout
\begin_layout Standard
Their usage is beyond the scope of this document.
\end_layout
\begin_layout Section
API
\end_layout

BIN
assets/magnifyingGlass.xcf (Stored with Git LFS)

Binary file not shown.

View file

@ -55,7 +55,7 @@ function buildAll() {
sudo chroot ${SYSROOT} apt-get -y install libasound-dev libxi-dev libvdpau-dev
fi
if [[ 1 == 1 ]]; then
if [[ 0 == 1 ]]; then
pushd thirdparty/bzip2
clearAndEnterBuild
cmake ${COMMON} \
@ -116,8 +116,8 @@ if [[ 1 == 1 ]]; then
-DSDL2IMAGE_JXL=off \
-DSDL2IMAGE_TIF=off \
-DSDL2IMAGE_WEBP=on \
-DSDL_LIBRARY="${G_TARGET}/lib/libSDL2.a" \
-DSDL_INCLUDE_DIR="${G_TARGET}/include" \
-DSDL2_LIBRARY="${G_TARGET}/lib/libSDL2.a" \
-DSDL2_INCLUDE_DIR="${G_TARGET}/include/SDL2" \
-DWEBP_BUILD_ANIM_UTILS=off \
-DWEBP_BUILD_CWEBP=off \
-DWEBP_BUILD_DWEBP=off \
@ -365,10 +365,10 @@ if [[ 1 == 1 ]]; then
# === timerwheel.lua ===
createEmbeddedBinary thirdparty/timerwheel.lua/src/timerwheel/timerwheel.lua ${G_GENERATED}/timerwheel_lua.h TIMERWHEEL_LUA_H
fi
# === json.lua ===
createEmbeddedBinary thirdparty/json.lua/json.lua ${G_GENERATED}/json_lua.h JSON_LUA_H
fi
# === Singe Framework ===
createEmbeddedBinary assets/Framework.singe ${G_GENERATED}/Framework_singe.h FRAMEWORK_SINGE_H
@ -379,20 +379,15 @@ fi
# === Singe Menu App ===
createEmbeddedBinary assets/Menu.singe ${G_GENERATED}/Menu_singe.h MENU_SINGE_H
:<<UNUSED
# === Singe Manual ===
#libreoffice --headless "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}" --convert-to pdf:writer_pdf_Export Manual.odt
documentbuilder makePDFs.docbuilder
mv /tmp/Manual.pdf ${G_TARGET}/.
createEmbeddedBinary ${G_TARGET}/Manual.pdf ${G_GENERATED}/Manual_pdf.h MANUAL_H
rm ${G_TARGET}/Manual.pdf
UNUSED
lyx -batch -f all -E pdf ${G_GENERATED}/Manual.pdf assets/Manual.lyx
createEmbeddedBinary ${G_GENERATED}/Manual.pdf ${G_GENERATED}/Manual_pdf.h MANUAL_H
pushd ${G_TARGET}
clearAndEnterBuild
cmake ${COMMON} ${G_BUILDROOT}
make
upx -9 --force singe2${SUFFIX}
#upx -9 --force singe2${SUFFIX}
mv -f singe2${SUFFIX} ${G_BUILDROOT}/${G_BUILDDIR}/Singe-v2.10-${OS^}-${ARCH}${SUFFIX}
popd
}
@ -537,15 +532,16 @@ sudo apt-get install -y \
xxd \
imagemagick \
lua5.4 \
lyx \
ffmpeg \
libasound-dev \
libxi-dev \
libvdpau-dev \
upx-ucl
#buildAll linux x86_64 2>&1 | tee ${G_BUILDDIR}/linux-x86_64.log
buildAll linux x86_64 2>&1 | tee ${G_BUILDDIR}/linux-x86_64.log
buildAll windows x86_64 2>&1 | tee ${G_BUILDDIR}/windows-x86_64.log
#buildAll pi aarch64 2>&1 | tee ${G_BUILDDIR}/pi-aarch64.log
buildAll pi aarch64 2>&1 | tee ${G_BUILDDIR}/pi-aarch64.log
#buildAll linux x86
#buildAll macos aarch64

View file

@ -37,7 +37,7 @@
#include "generated/Menu_singe.h"
#include "generated/FreeSansBold_ttf.h"
#include "generated/menuBackground_mkv.h"
//#include "generated/Manual_pdf.h"
#include "generated/Manual_pdf.h"
// LuaSocket
#include "generated/ftp_lua.h"

View file

@ -721,7 +721,7 @@ void showHeader(void) {
// 00000000011111111112222222222333333333344444444445555555555666666666677777777778
// 12345678901234567890123456789012345678901234567890123456789012345678901234567890
utilSay(" ___ ___ _ _ ___ ___");
utilSay("/ __|_ _| \\| |/ __| __| Somewhat Interactive Nostalgic Game Engine %s Beta 5", VERSION_STRING);
utilSay("/ __|_ _| \\| |/ __| __| Somewhat Interactive Nostalgic Game Engine %s B7", VERSION_STRING);
utilSay("\\__ \\| || .` | (_ | _| Copyright (c) 2006-%s Scott C. Duensing", COPYRIGHT_END_YEAR);
utilSay("|___/___|_|\\_|\\___|___| https://KangarooPunch.com https://SingeEngine.com");
utilSay("");
@ -824,9 +824,9 @@ void unpackData(char *name) {
created |= extractFile(temp, controls_cfg, controls_cfg_len);
free(temp);
// Singe/Manual.pdf
//temp = utilCreateString("Singe%Manual.pdf", utilGetPathSeparator());
//created |= extractFile(temp, Manual_pdf, Manual_pdf_len);
//free(temp);
temp = utilCreateString("Singe%cManual.pdf", utilGetPathSeparator());
created |= extractFile(temp, Manual_pdf, Manual_pdf_len);
free(temp);
// Singe/Menu.singe
temp = utilCreateString("Singe%cMenu.singe", utilGetPathSeparator());
created |= extractFile(temp, Menu_singe, Menu_singe_len);

View file

@ -3488,7 +3488,9 @@ int32_t apiKeyboardIsDown(lua_State *L) {
if (n == 1) {
if (lua_isnumber(L, 1)) {
d = lua_tonumber(L, 1); s = (int32_t)d;
if ((s >= 0) && (s < SDL_NUM_SCANCODES)) {
r = _global.keyboardState[s];
}
result = true;
}
}
@ -4415,11 +4417,15 @@ void processKey(bool down, int32_t keysym, int32_t scancode) {
// Keep track of keyboard state for other API calls.
if (down) {
_global.keyboardLastDown = scancode;
if ((scancode >= 0) && (scancode < SDL_NUM_SCANCODES)) {
_global.keyboardState[scancode] = true;
}
} else {
_global.keyboardLastUp = scancode;
if ((scancode >= 0) && (scancode < SDL_NUM_SCANCODES)) {
_global.keyboardState[scancode] = false;
}
}
if (_global.keyboardMode == KEYBD_NORMAL) {
// Mappable keys