1. bass库
```bash
# open "https://www.un4seen.com/"
# 找到bass库和bassmidi扩展下载linux版本
```
2. lua库
```bash
# 只能安装lua5.2版本
sudo apt install liblua5.2-dev
```
3. sdl2库
```bash
sudo apt install libsdl2-dev libsdl2-ttf-dev libsdl2-image-dev
```
4. minizip库
```bash
sudo apt install libminizip-dev
```
5. tinyPot库
```bash
# 这个库是最麻烦的先下载源码
git clone https://gitee.com/scarsty/bigpot.git
# 要编译这个源码还需要安装几个依赖
# sdl2上面已经安装了
# ass库
sudo apt install libass-dev
# iconv库
# 从https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.17.tar.gz下载
tar zxvf libiconv-1.17.tar.gz
cd libiconv-1.17
./configure --prefix=/usr/local
make
make install
```
6. tinypot依赖的ffmpeg安装
```bash
# ffmpeg库需要3.0版本以下,不然会不兼容
# 到https://launchpadet/ubuntu/+source/ffmpeg下载2.8版本库,我选择的2.8.6版本2.8.17, 页面最下面那个7:2.8.17-0ubuntu0.1
# 试了下用deb包安装,会要求很多依赖,还是源码安装方便些
# 下拉列表点开,下载ffmpeg_2.8.17.orig.tar.xz,这个文件就是ffmpeg源码
xz -d ffmpeg_2.8.17.orig.tar.xz
tar xvf xz -d ffmpeg_2.8.17.orig.tar
cd ffmpeg_2.8.17.orig
cd ffmpeg-2.8.17/
# 源码的有个文件中的汇编语法有问题需要更改一下
vi libavcodec/x86/mathops.h
# 第一个函数和最后二个函数改成如下样子
static av_always_inline av_const int MULL(int a, int b, unsigned shi ft)
{
int rt, dummy;
__asm__ (
"imull %3 \n\t"
"shrdl %4, %%edx, %%eax \n\t"
:"=a"(rt), "=d"(dummy)
//:"a"(a), "rm"(b), "ci"((uint8_t)shift)
:"a"(a), "rm"(b), "c"((uint8_t)shift)
);
return rt;
}
#define NEG_SSR32 NEG_SSR32
static inline int32_t NEG_SSR32( int32_t a, int8_t s){
__asm__ ("sarl %1, %0\n\t"
: "+r" (a)
//: "ic" ((uint8_t)(-s))
: "c" ((uint8_t)(-s))
);
return a;
}
#define NEG_USR32 NEG_USR32
static inline uint32_t NEG_USR32(uint32_t a, int8_t s){
__asm__ ("shrl %1, %0\n\t"
: "+r" (a)
//: "ic" ((uint8_t)(-s))
: "c" ((uint8_t)(-s))
);
return a;
}
# 安装ffmpeg依赖
sudo apt install libx264-dev libx265-dev libfdk-aac-dev yasm
# 配置安装选项
./configure --prefix=/usr/local/ffmpeg --enable-shared --enable-gpl --enable-nonfree --enable-ffplay
make -j4
sudo make install
# 安装完成后可以在/usr/local/ffmpeg/下面看到bin,include,lib,share四个目录
```
7. tinyPot库编译
```bash
# 第5步已经下载了tinyPot,如果还没有克隆使用下面命令克隆
git clone https://gitee.com/scarsty/bigpot.git
cd bigpot
cd src
vi CMakeLists.txt
# 第8行和第9行加入iconv和ffmpeg库的头文件和库文件位置
include_directories(../include . ./others /usr/local/ffmpeg/include /usr/local/include)
link_directories(. ../lib /usr/local/ffmpeg/lib /usr/local/lib)
# 最后加两行编译生成动态和静态库
ADD_LIBRARY(tinyPot SHARED ${SRC_LIST})
ADD_LIBRARY(tinyPotStatic STATIC ${SRC_LIST})
8. 开始编译
mkdir build
cd build
cmake ..
make -j8
# 编译完成后就会生成3个重要文件tinypot, libtinyPotStatic.a, libtinyPot.so。
# 第一个是个简单的播放器,可以运行后将播放的文件拖到上面就能播放了,鼠标滚动可以调节音量,左右按键可以快进和后退
# 后面两个就是生成的静态和动态库了,可以用来编译游戏的底层程序
```
9. 编译黑山群侠传
```bash
# 改下源文件中的配置文件路径
vi src/jymain.cpp
#ifdef _WIN32
char* JY_CurrentPath = "./";
#else
char* JY_CurrentPath = "./";
#endif
# 在jysdl-bh-master目录下新建一个library目录
mkdir library
# 新建bass和tinyPot目录
cd library
mkdir bass
mkdir tinyPot
cd bass
mkdir inc
mkdir lib
cd ../
cd tinyPot
mkdir inc
mkdir lib
cd ..
cd ..
# 新建一个编译脚本
vi CMakeLists.txt
project(黑山群侠传)
cmake_minimum_required(VERSION 2.6)
set(CMAKE_VERBOSE_MAKEFILE on)
set(CMAKE_CXX_COMPILER $ENV{CXX})
set(CMAKE_CXX_FLAGS "-O3 -std=c++11 -pthread")
include_directories(/home/xxx/repo/JYQXZ/jysdl-bh-master/library/bass/inc /xxx/dawen/repo/JYQXZ/jysdl-bh-master/library/tinyPot/inc /usr/include/lua5.2/ /usr/include/minizip/ /usr/include/SDL2)
link_directories(/home/xxx/repo/JYQXZ/jysdl-bh-master/library/bass/lib /home/xxx/repo/JYQXZ/jysdl-bh-master/library/tinyPot/lib /usr/lib/x86_64-linux-gnu)
aux_source_directory(./src SRC_LIST)
#aux_source_directory(./hash OTHER_SRC_LIST1)
#aux_source_directory(./tinyxml2 OTHER_SRC_LIST2)
#list(APPEND SRC_LIST ${OTHER_SRC_LIST1} ${OTHER_SRC_LIST2})
set(LINK_LIBRARIES iconv SDL2 SDL2_ttf SDL2_image SDL2main lua5.2 bass bassmidi tinyPot minizip)
add_executable(黑山群侠传 ${SRC_LIST})
target_link_libraries(黑山群侠传 ${LINK_LIBRARIES})
# 编译
mkdir build
cd build
cmake ..
make -j4
# src/luafun.cpp编译时会提示没有minishared.h头文件,直接注释掉就可以了。还有一个get_file_date函数没有定义,也直接注释掉。
```
最后将生成的黑山群侠传复制到黑山群侠传的游戏目录。打开编译生成的黑山群侠传就可以进入游戏了。
10. 黑山群侠传文件重命名
```bash
# 进入黑山群侠传游戏目录
sudo apt install rename
# 在游戏主目录下运行,将DATA,FONT,PIC,SCRIPT,SOUND都转换为小写字母
rename -f 'y/A-Z/a-z/' *
cd data
rename -f 'y/A-Z/a-z/' *
cd fight
rename -f 'y/A-Z/a-z/' *
cd ../pic
rename -f 'y/A-Z/a-z/' *
cd ../sound
rename -f 'y/A-Z/a-z/' *
# 最后再改下eft.idx和eft.grp设置
cd script
vi jyconst.lua
# CC.EFTFile = {CONFIG.DataPath .. "Eft.idx", CONFIG.DataPath .. "Eft.grp"}改为小写
CC.EFTFile = {CONFIG.DataPath .. "eft.idx", CONFIG.DataPath .. "eft.grp"}
``` |