Open3
Screeps: ArenaをC++で書く
概要
Screeps: ArenaをC++を使用して実装する
このスクラップの進捗
- C++をWASMに変換したうえでJSから呼び出すようにできた
- ReferenceErrorが出るためArenaで実行できない(使っているcppreepsリポジトリがScreeps: World用で、どうもArenaと実行環境が異なるらしい
- 一方screeps-arena-starter-rustのリポジトリを使うとRust → WASMにできてArenaでも動くが、このWASMは何か形式が違うようでC++から変換したWASMに入れ替えると動かなくなる
スターターリポジトリ
たぶんない
Screeps: World用はこれ
- ゲームオブジェクトをemscripten::val型として扱うようになっているため、型情報がない(型安全に書くには自前でキャストしたアクセサを書くなどする必要がある)
Getting started
READMEの内容 を進める
- Download and install
emsdk
(Emscripten SDK, compiler toolchain): guide.
$ ./emsdk install latest
...
Error: Downloading URL 'https://storage.googleapis.com/webassembly/emscripten-releases-builds/deps/node-v14.18.2-darwin-x64.tar.gz': <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)>
Warning: Possibly SSL/TLS issue. Update or install Python SSL root certificates (2048-bit or greater) supplied in Python folder or https://pypi.org/project/certifi/ and try again.
error: installation failed!
Pythonファイルをキックしたところ進められた
$ python ./emsdk.py install latest
$ python ./emsdk.py activate latest
$ source ./emsdk_env.sh
- Prepare building environment:
特に問題なし
# ※ 1. Download and install `emsdk` はemsdkのリポジトリで操作したが、ここからはcppreepsリポジトリに戻る
$ source <path to emsdk>/emsdk_env.sh
- Build project using
em++
to WASM module (pair of.wasm
and.js
files):
$ ./create.sh
include/lzw.hpp:12:10: fatal error: 'lzw/lzw.hpp' file not found
submoduleをcloneしてなかった
$ git submodule update --init --recursive
$ ./create.sh
$ ls dist
loop.wasm loop_mod.js main.js wasm_loader.js
main.js
ができてる
ついでに生成されたファイルをignoreする
$ touch .gitignore
# 編集
$ cat .gitignore
/build
/dist
- Push generated files from
/dist
folder to Screeps/PTR
Screeps: Worldとは異なり、ArenaはArenaアプリが参照するローカルディレクトリにコードを放り込んでおけばアプリがデプロイしてくれるらしい
実行すると ReferenceError: require is not defined
が出るのでどうも Screeps: Worldと実行環境が違うらしい