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に入れ替えると動かなくなる
みつよしみつよし

Getting started

READMEの内容 を進める

  1. 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
  1. Prepare building environment:

特に問題なし

# ※ 1. Download and install `emsdk` はemsdkのリポジトリで操作したが、ここからはcppreepsリポジトリに戻る
$ source <path to emsdk>/emsdk_env.sh
  1. 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
  1. Push generated files from /dist folder to Screeps/PTR

Screeps: Worldとは異なり、ArenaはArenaアプリが参照するローカルディレクトリにコードを放り込んでおけばアプリがデプロイしてくれるらしい


実行すると ReferenceError: require is not defined が出るのでどうも Screeps: Worldと実行環境が違うらしい