Merge pull request #54 from OmniTroid/master

Restructuring +  better cross-platform support
This commit is contained in:
oldmud0 2019-01-02 09:40:38 -06:00 committed by GitHub
commit 4d93f059c0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
82 changed files with 1289 additions and 119 deletions

2
.gitignore vendored
View File

@ -3,11 +3,13 @@
*.user *.user
*.dll *.dll
*.so *.so
*.pro.autosave
base_override.h base_override.h
base-full/ base-full/
bass.lib bass.lib
bin/
bins/ bins/
release/ release/
debug/ debug/

30
Attorney_Online.pro Normal file
View File

@ -0,0 +1,30 @@
#-------------------------------------------------
#
# Project created by QtCreator 2016-12-29T01:14:46
#
#-------------------------------------------------
QT += core gui multimedia network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = Attorney_Online
TEMPLATE = app
VERSION = 2.6.0.0
INCLUDEPATH += $$PWD/include
DESTDIR = $$PWD/bin
OBJECTS_DIR = $$PWD/build
MOC_DIR = $$PWD/build
SOURCES += $$files($$PWD/src/*.cpp)
HEADERS += $$files($$PWD/include/*.h)
LIBS += -L$$PWD/lib -lbass -ldiscord-rpc
CONFIG += c++11
RESOURCES += resources.qrc
win32:RC_ICONS = resource/logo.ico
QTPLUGIN += qapng

View File

@ -1,116 +0,0 @@
#-------------------------------------------------
#
# Project created by QtCreator 2016-12-29T01:14:46
#
#-------------------------------------------------
QT += core gui multimedia network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
RC_ICONS = logo.ico
TARGET = Attorney_Online
TEMPLATE = app
VERSION = 2.6.0.0
SOURCES += main.cpp\
lobby.cpp \
text_file_functions.cpp \
path_functions.cpp \
aoimage.cpp \
file_functions.cpp \
aobutton.cpp \
debug_functions.cpp \
networkmanager.cpp \
aoapplication.cpp \
aopacket.cpp \
packet_distribution.cpp \
hex_functions.cpp \
encryption_functions.cpp \
courtroom.cpp \
aocharbutton.cpp \
hardware_functions.cpp \
aoscene.cpp \
aomovie.cpp \
misc_functions.cpp \
aocharmovie.cpp \
aoemotebutton.cpp \
emotes.cpp \
aosfxplayer.cpp \
aomusicplayer.cpp \
aoblipplayer.cpp \
evidence.cpp \
aoevidencebutton.cpp \
charselect.cpp \
aotextarea.cpp \
aolineedit.cpp \
aotextedit.cpp \
aoevidencedisplay.cpp \
discord_rich_presence.cpp \
aooptionsdialog.cpp \
chatlogpiece.cpp \
aocaseannouncerdialog.cpp
HEADERS += lobby.h \
aoimage.h \
file_functions.h \
aobutton.h \
debug_functions.h \
networkmanager.h \
aoapplication.h \
datatypes.h \
aopacket.h \
hex_functions.h \
encryption_functions.h \
courtroom.h \
aocharbutton.h \
hardware_functions.h \
aoscene.h \
aomovie.h \
misc_functions.h \
aocharmovie.h \
aoemotebutton.h \
aosfxplayer.h \
aomusicplayer.h \
aoblipplayer.h \
aoevidencebutton.h \
aotextarea.h \
aolineedit.h \
aotextedit.h \
aoevidencedisplay.h \
discord_rich_presence.h \
discord-rpc.h \
aooptionsdialog.h \
text_file_functions.h \
chatlogpiece.h \
aocaseannouncerdialog.h
# 1. You need to get BASS and put the x86 bass DLL/headers in the project root folder
# AND the compilation output folder. If you are compiling statically, you'll probably
# need the .lib file too. MinGW-GCC is really finicky finding BASS, it seems. However,
# even with the .lib file, you still need the DLL in the final output.
# 2. You need to compile the Discord Rich Presence SDK separately and add the lib/headers
# in the same way as BASS. Discord RPC uses CMake, which does not play nicely with
# QMake, so this step must be manual. If you are compiling dynamically, it's fine to
# use the prebuilt libraries.
# 3. You also need to build QtApng (https://github.com/Skycoder42/QtApng).
# Optionally, you may install it in /usr/share/qt5/plugins/imageformats, but if you do
# so, then you must patch qapng.pri, qapngd.pri, png.pri, pngd.pri, z.pri, and zd.pri
# such that they no longer point to the builds in the original project directory
# (by removing those respective entries in QMAKE_PRL_LIBS and replacing them with
# something like `-L$$[QT_INSTALL_LIBS] -lpng -lz`).
#
# Naturally, the build process becomes significantly less convoluted if you simply
# compile dynamically. If your primary distribution method is via the launcher, then
# a simple dynamic compilation is recommended.
unix:LIBS += -L$$PWD -lbass -ldiscord-rpc
win32:LIBS += -L$$PWD "$$PWD/bass.dll" -ldiscord-rpc
INCLUDEPATH += $$PWD/include
CONFIG += c++11
RESOURCES += \
resources.qrc
DISTFILES +=

View File

@ -1,4 +1,4 @@
# Attorney Online 2 # Attorney Online
[Attorney Online](https://aceattorneyonline.com) is an online version of the world-renowned courtroom drama simulator that allows you to create and play out cases in an off-the-cuff format. [Attorney Online](https://aceattorneyonline.com) is an online version of the world-renowned courtroom drama simulator that allows you to create and play out cases in an off-the-cuff format.

43
README_BUILD.md Normal file
View File

@ -0,0 +1,43 @@
### Dependencies
This program has five main dependencies
* Qt 5.6+ (https://www.qt.io/download)
* BASS (http://www.un4seen.com/bass.html)
* BASS Opus Plugin (http://www.un4seen.com/bass.html#addons)
* Discord Rich Presence (https://github.com/discordapp/discord-rpc/releases)
* Qt Apng Plugin (https://github.com/Skycoder42/QtApng/releases)
### How to build dynamically (the easy way)
What you want to do is first download the latest version of Qt from the first link. (get the prebuilt dynamic version)
If you're on Ubuntu, go to the scripts/ folder and run configure_ubuntu.sh. This should fetch all the required dependencies automatically.
If not, go to each one of the links above and find the right dynamic library for your platform:
* Windows: .dll
* Linux: .so
* Mac: .dylib
And put them in BOTH lib/ and the repository root (lib/ is required for linking and root is required for runtime)
Launch Qt creator, open the .pro file and try running it. Ask in the Discord if you're having issues: https://discord.gg/wWvQ3pw
### How to build statically (the hard way)
You're gonna have a bad time.
Building statically means you can distribute the final program without needing to pack alongside a lot of dynamic libraries.
This is a tricky process and is not recommended unless you know what you're doing.
First, you need to build the entirety of Qt statically. To do this, check the desired version under "Sources" in the Qt maintenance tool.
After this is done, follow these instructions: https://dimitris.apeiro.gr/2015/06/24/build-a-static-qt5-for-windows-by-compiling/
This guide is specifically for Windows, but Qt is cross-platform and you should be good with or without some minor adjustments to the guide.
Note that this **is** a computationally heavy process and will take a lot of time on a slow computer.
After this, you need to configure the project to use the static version of qmake (see http://doc.qt.io/qtcreator/creator-build-settings.html)
BASS and BASS Opus only comes as dynamic libraries and is not open-source. That means you can't link it statically in the program.
For Discord RPC, you can download prebuilt static libraries for your platform. Just put them in lib/.
For Qt Apng Plugin, you need to compile it statically. This guide does not go into detail how to configure this to build a static library. You may have to add Q_IMPORT_PLUGIN(ApngImagePlugin); in main.cpp. See more about importing static plugins here: http://doc.qt.io/qt-5/plugins-howto.html#static-plugins
It's also possible to just link this dynamically.

1139
include/bass.h Normal file

File diff suppressed because it is too large Load Diff

2
lib/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*
!.gitignore

View File

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 97 KiB

View File

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -1,6 +1,6 @@
<RCC> <RCC>
<qresource prefix="/"> <qresource prefix="/">
<file>resource/fonts/Ace-Attorney.ttf</file> <file>resource/fonts/Ace-Attorney.ttf</file>
<file>logo.png</file> <file>resource/logo.png</file>
</qresource> </qresource>
</RCC> </RCC>

38
scripts/configure_ubuntu.sh Executable file
View File

@ -0,0 +1,38 @@
#!/bin/bash
#assumes a somewhat recent 64-bit ubuntu
#need some openGL stuff
sudo apt install libgl1-mesa-dev
mkdir tmp
cd tmp
#get the bass prebuilt
curl http://www.un4seen.com/files/bass24-linux.zip -o bass_linux.zip
unzip bass_linux.zip
cp x64/libbass.so ../../lib
#get the discord-rpc prebuilt
curl -L https://github.com/discordapp/discord-rpc/releases/download/v3.4.0/discord-rpc-linux.zip -o discord_rpc_linux.zip
unzip discord_rpc_linux.zip
cp discord-rpc/linux-dynamic/lib/libdiscord-rpc.so ../../lib/
#get libqtapng plugin prebuilt
curl -L https://github.com/Skycoder42/QtApng/releases/download/1.1.0-5/build_gcc_64_5.12.0.tar.xz -o apng.tar.xz
tar -xvf apng.tar.xz
cp gcc_64/plugins/imageformats/libqapng.so ../../lib
cd ..
rm -rf tmp
#during runtime, the program expects the libraries to exist in the root folder
cp ../lib/* ..

View File

@ -0,0 +1,16 @@
#!/bin/bash
#this script relinks dynamic libraries so the .app file can be distributed as standalone
install_name_tool -id @executable_path/../Frameworks/libbass.dylib ../bin/Attorney_Online.app/Contents/Frameworks/libbass.dylib
install_name_tool -id @executable_path/../Frameworks/libbassopus.dylib ../bin/Attorney_Online.app/Contents/Frameworks/libbassopus.dylib
install_name_tool -id @executable_path/../Frameworks/libdiscord-rpc.dylib ../bin/Attorney_Online.app/Contents/Frameworks/libdiscord-rpc.dylib
install_name_tool -id @executable_path/../Frameworks/libqapng.dylib ../bin/Attorney_Online.app/Contents/Frameworks/libqapng.dylib
install_name_tool -change @loader_path/libbass.dylib @executable_path/../Frameworks/libbass.dylib ../bin/Attorney_Online.app/Contents/MacOS/Attorney_Online
install_name_tool -change @rpath/libdiscord-rpc.dylib @executable_path/../Frameworks/libdiscord-rpc.dylib ../bin/Attorney_Online.app/Contents/MacOS/Attorney_Online

View File

@ -512,6 +512,11 @@ bool AOOptionsDialog::needs_default_audiodev()
{ {
return false; return false;
} }
#elif defined __APPLE__
bool AOOptionsDialog::needs_default_audiodev()
{
return true;
}
#else #else
#error This operating system is not supported. #error This operating system is not supported.
#endif #endif

View File

@ -3508,6 +3508,11 @@ void Courtroom::load_bass_opus_plugin()
{ {
BASS_PluginLoad("libbassopus.so", 0); BASS_PluginLoad("libbassopus.so", 0);
} }
#elif defined __APPLE__
void Courtroom::load_bass_opus_plugin()
{
BASS_PluginLoad("libbassopus.dylib", 0);
}
#else #else
#error This operating system is unsupported for bass plugins. #error This operating system is unsupported for bass plugins.
#endif #endif

View File

@ -50,6 +50,13 @@ QString get_hdid()
return "gxcpz32sa9fnwic92mfbs0"; return "gxcpz32sa9fnwic92mfbs0";
} }
#elif defined __APPLE__
QString get_hdid()
{
//hdids are broken at this point anyways
return "just a mac passing by";
}
#else #else
#error This operating system is unsupported for hardware functions. #error This operating system is unsupported for hardware functions.

View File

@ -7,7 +7,6 @@
#include "courtroom.h" #include "courtroom.h"
#include <QPluginLoader> #include <QPluginLoader>
#include <QDebug> #include <QDebug>
Q_IMPORT_PLUGIN(ApngImagePlugin);
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
#if QT_VERSION > QT_VERSION_CHECK(5, 6, 0) #if QT_VERSION > QT_VERSION_CHECK(5, 6, 0)