ごきげんよう。皆さんはHSP(Hot Soup Processor)というプログラム言語をご存知でしょうか?Windowsで簡単にゲームを作れることが特徴ですが、Android/iOS/JavaScriptなどのプラットフォームでも実行させることができます。macOSではmachspやwineを使った方法があります。この記事では、linux版をdockerで動かしてみます。
使い方
まずは X Window System をインストールします。
brew install xquarts
startx
XQuartz が立ち上がったのを確認 | 設定から「ネットワーク・クライアントからの接続を許可」をチェック |
インダイレクト設定を有効化します。
defaults write org.xquartz.X11 enable_iglx -bool true
このあと、macOSを再起動します。再起動後、環境変数 DISPLAY
に何らかの値が設定されているのを確認します。
env | grep DISPLAY
Dockerファイルを用意します (そのうちどこかにホストしようと思います)。
[追記] GitHub Packages にアップロードしました。下記でpullできます。
https://github.com/kijuky/docker-openhsp-linux/pkgs/container/hsp
docker pull ghcr.io/kijuky/hsp:3.6
FROM ubuntu:22.04
# 必要なソフトをインストール
RUN apt update && apt install -y \
curl \
libgtk2.0-dev \
libglew-dev \
libsdl1.2-dev \
libsdl-image1.2-dev \
libsdl-mixer1.2-dev \
libsdl-ttf2.0-dev \
libgles2-mesa-dev \
libegl1-mesa-dev \
libsdl2-ttf-dev \
libsdl2-image-dev \
libsdl2-mixer-dev \
&& apt clean && rm -rf /var/lib/apt/lists/*
# ソースコードをインストール
RUN curl -L https://github.com/onitama/OpenHSP/archive/refs/tags/v3.6.tar.gz | tar zx -C .
WORKDIR "OpenHSP-3.6"
RUN make
ENV LIBGL_ALWAYS_INDIRECT 1
# /usr/bin にシンボリックリンクを作成
RUN cd /usr/bin; \
ln -s /OpenHSP-3.6/hsed hsed && \
ln -s /OpenHSP-3.6/hsp3cl hsp3cl && \
ln -s /OpenHSP-3.6/hsp3dish hsp3dish && \
ln -s /OpenHSP-3.6/hsp3gp hsp3gp && \
ln -s /OpenHSP-3.6/hspcmp hspcmp
# デフォルトはエディタを起動
CMD ["hsed"]
ビルドします。
docker build . -t hsp:3.6
まずは例にあるようにコンソールアプリを作ってみましょう。
% echo 'mes "hello world"' >> test.hsp
% docker run --rm -it -v "$(pwd):/root" -w /root hsp:3.6 hspcmp -d -i -u test.hsp
#HSP script preprocessor ver3.6 / onion software 1997-2021(c)
#HSP code generator ver3.6 / onion software 1997-2021(c)
#use UTF-8 strings.
#Code size (20) String data size (21) param size (0)
#Vars (0) Labels (1) Modules (0) Libs (0) Plugins (0)
#No error detected. (total 170 bytes)
% docker run --rm -it -v "$(pwd):/root" -w /root hsp:3.6 hsp3cl test.ax
hello world
いい感じですね 次にエディタも開いてみましょう。
xhost +
docker run --rm -it -v "$(pwd):/root" -w /root -e DISPLAY=host.docker.internal:0 --ipc=host hsp:3.6
xhost -
エディタが開いた様子 |
ゲームも開いてみましょう(エディタの日本語が化けてますね...)
block3.hspを実行した様子 |
ただ、場合によっては、うまく動かないことがあるようです。dockerのログを見ると、X Window System関連のエラーが出ているようです。
X Error of failed request: BadAlloc (insufficient resources for operation)
Major opcode of failed request: 149 (GLX)
Minor opcode of failed request: 3 (X_GLXCreateContext)
Serial number of failed request: 90
Current serial number in output stream: 91
X Error of failed request: GLXBadContext
Major opcode of failed request: 149 (GLX)
Minor opcode of failed request: 5 (X_GLXMakeCurrent)
Serial number of failed request: 165
Current serial number in output stream: 165
まとめ
HSPをmacOS上で動かしてみました。コンソールアプリの場合は問題なく動きます。GUIアプリの場合、X Window Systemのエラーが厄介です。ただ、これも適切に解決すれば、ゲームを起動できるくらいには動かすことができました。皆さんもHSPのプログラミングを楽しんでみてください!
参考
追記
要望はこちら(Dockerfileも随時更新しています)