Hot Soup Processor(ホットスーププロセッサー)は、1995年からおにたまにより開発されているプログラミングツール、およびそのプログラミング言語である。略称はHSP。

## 歴史

### 誕生とHSP2登場

1994年にHSPの前身となるlight SOUP processor(LSP)がPC-9800シリーズで開発された。名前の SOUP processor は「sequential output control processor: a text script interpreter for multi-purpose, multi-target」が由来である。言語仕様は米ダートマス大学で開発された BASIC 言語の書式に基づいているが、BASIC との互換性はない。

1995年より Windows 3.1 で動作するHSP1.0の開発が開始され、1996年にフリーウェアとして一般に公開された。開発した経緯について、おにたまは『自分にとって必要だから作った、いわば中間生成物的ソフトなのです。』と述べている。

1997年にHSP2.0が登場し、Windows 95 以降で動作する32ビットアプリケーションとなった。定数や文字列型の変数に対応したほか、後のバージョンアップで3D描画機能をサポートした。1999年に「Microsoft DXSD 賞」、2001年に「オンラインソフトウェア大賞2001」をそれぞれ受賞した。2005年には日本の経済産業省が支援する「ITクラフトマンシップ・プロジェクト」にHSPを取り入れた教育・研修が採択された。なお、HSP2.61は Visual Studio .NET 2003 を使用して開発しコンパイルされていた。

### HSP3の登場

2005年8月1日にHSP3.0が登場。OSはWindows 98以降が必要になった。文法体系の見直し、Windowsプラットフォームへの親和性の向上などが行われ、一部が従来のHSP2.x系と互換性のない書式に変更された。(詳細は#言語仕様参照)

HSP3.0のリリースから2年後にあたる2007年8月1日にHSP3.1が登場、HSPスクリプトエディタの機能改善や、新規のプラグイン・モジュールなどの追加、Peasエディタやかんたん入力機能によるスクリプト入力補助、Javaランタイム上でHSPを動作させるためのHSPLetの標準サポート、ライセンス形式の改定(BSDライセンス)による仕様やソースコードのオープン化が行われた。

2011年9月13日に登場したHSP3.3では、HSPDishというランタイムパッケージが供給されており、変換によってiOSやAndroid上でプログラムを実行させることができるようになった。また、HSP3のコードを他のソースに変換するためのツールとしてhsp3cnvが同梱され、公式にC++へのコード変換が可能になった。

HSP3の登場から新ポータルサイトHSPTV!が立ち上がりHSP3ユーザーのコミュニケーションの場として提供されている。またHSPTV!で同サイトのCGIプログラマを募集するなどの取り組みも試みられている。
2003年からは毎年HSPプログラムコンテストが開催されており、2013年のコンテストでは「ニコニコ自作ゲームフェス2」との作品の相互提供が行われている。

## 特徴

HSPは手続き型言語であり、中間言語系インタープリタのプログラミングツールとして設計されている。公式に『子供でも理解し易いプログラム言語』を掲げており、低年齢(例えば小学生)向けの解説書も出版されている。

ユーザーがスクリプトの記述や開発環境の設定を行うことなく、自動的にウィンドウの作成や制御が行われる。コンソール版HSP(HSPCL)を用いれば、コマンドプロンプト上で実行するプログラムも開発できる。スクリプトの最後の行が終わるとその時点で実行が停止し、自動的にプログラムが終了しない。

Windowsでの使用を前提としているが、公式にMac OSへの移植をしたHSP/Macも存在する。有志によって非公式的にLinuxにも移植されているが、移植版の場合はWindows版より古いバージョンがベースになっている。ただし、2018年4月1日に、正式にRaspberry PiやLinux対応を謳う、HSP3 for Linux/Raspberry Piが公開され、今後はWindows版もこちらに準拠する旨アナウンスされている。

### 言語仕様の特徴

HSP3.xの(ユーザーが実際に入力する)言語仕様に関する主な特徴として、以下のように挙げられる。

- BASICと似た構文を別名として利用できる。
- 行番号は利用しない(できない)。
- 構文の大文字・小文字を区別しない。
- 変数の使用に事前の定義が必要ない(自動的にグローバル変数またはモジュール内定義変数として確保される)。
- 変数・ラベルはモジュールという他と隔離された名前空間で分離することができる。
- 変数名に日本語(2バイト文字)を利用できる。
- ラベルを使用したサブルーチンの別個記述が可能である。
- DLLをプラグインとして利用することができ、それによってWindowsのさまざまな機能を利用することが出来る。DirectXやOpenGLなどの3Dグラフィックスを扱うものもある。
- プリプロセッサを持つ。
- COMオブジェクトに対応している。

## 開発環境

### スクリプトエディタ

HSPには専用のスクリプトエディタが付属している。一般的なテキストエディタの機能を有しているほか、コンパイルや外部ツールの呼び出しなど独自の機能も備える。複数のファイルを参照・編集する場合、同一のウインドウ内にタブを用いて表示・切り替えできる。プロジェクトファイルの概念は無い。エディタのエンジンにはFootyが使用されている。

EXE形式で出力できるが、ファイルのアイコン変更は「Let's HSPIC!」や「Sato Icon Changer」等の専用のソフトウェアが必要となる。また、HSP3.5以降(正確には3.5 beta6から)では標準でアイコン書き換え機能が追加され、#packopt命令を利用することによりアイコンを変更できるようになった。

現在の最新バージョンであるHSP3.XのリソースはHSP2.Xのリソースとも共通規格でないため、一般的なリソースエディタはもちろんのこと、前記のソフトウェア以外のHSP2.X用に作成された変更ソフトではファイルが壊れてしまう。

コンパイルを行うツールを利用すれば外部エディタでの開発も可能である。

### Peasエディタ

パーツ(要素)と呼ばれるものをマウスで配置し配線することで、自動的にHSPのスクリプトを生成するためのオーサリングツールである。HSP3.1より同梱された。

今までプログラミングに触れてこなかった人や、初心者にとっての新しい選択肢となるものの、すべての作業をPeasエディタで行なうことは想定していないとしている。

なお、パーツはユーザー自身で制作することも可能である。

### HSP Document Library (HDL)

HSPに同梱された関連ドキュメントを検索・観覧するための専用ブラウザである。ソフトウェア本体はsprocketが開発している。HSP3.0からHSP HELP Browserとして標準で同梱され、HSP3.2より同名称になった。

ドキュメントやサンプルスクリプトを検索し、表示することができる。ユーザー自身で新たなドキュメントを追加することが可能で、独自形式のドキュメントファイルを編集・作成するエディタが付属している。

HDLではhs(HDLのコマンドヘルプ)、html、txt、hsp、as(HSPヘッダファイル)の拡張子が付いたファイルを読み込み・表示することができる。

## 言語仕様

### 主な構文

以下の表はHSP1.x系とHSP2.x系とHSP3.x系との違いである。

| 項目 | HSP1.x系 | HSP2.x系 | HSP3.x系 |
| --- | --- | --- | --- |
| 定数 | 未対応 | 整数、文字列 | 整数、文字列、実数 |
| 変数の型 | 整数型 | 整数型、文字列型 | 整数型、文字列型、実数型、comobj型、モジュール変数(struct)型、ラベル型、拡張型 |
| 式の評価 | 演算子の優先度なし、左方優先 | | 演算子の優先度あり |
| 代入演算子 | 未対応 | `+=`, `-=`, `++`, `--` | `+=`, `-=`, `++`, `--`のほか `*=`, `/=` 等、ほぼすべての代入演算子に対応 |
| 関数 | 未対応 | 対応(標準関数、ユーザー定義関数、拡張関数) |
| マクロ | 仮対応 | 対応 |
|

HSP3.x系では、関数のサポートなど一部が従来のHSP2.x系と互換性のない書式に変更された。これは添付されている互換マクロを利用することで、(関数を#undefとマクロにより命令風に置き換えるなど)一部は擬似的に互換を取ることが可能である。現在は未対応なものの今後、2.x系と同様、演算子の優先度などに関係なく左優先方式にも対応する予定である。ただし、新しく作成する場合はスクリプトの見やすさの面や他の言語との相互互換性,将来性などのこともあり新方式(関数などを利用した方式)で作成することが推奨されている。

HSP1.x系とHSP2.x系では命令中のラベル名にラベル名であることを明示するアスタリスクが省略できる、変数名やラベル名などに半角英数字以外に全角文字が使用できたりといくつかの仕様上の欠陥がある。HSP3.x系ではラベルのアスタリスク省略はできないように修正されている。システム変数はHSP3.x系で一部廃止され、関数やマクロに置き換わっている。HSP3.x系では拡張プラグインにより様々な構文(変数/命令/関数/システム変数など)を拡張できる。ただし、HSP3.0時点では定数の拡張はできない。

### 命令リスト

これは、HSPで使う命令の一例である。

一般的な通常命令

| 命令 | 意味 |
| --- | --- |
| `mes` | 文字列を表示する |
| `button` | 押しボタンを表示する。押された場合、指定されたラベルにジャンプする。 |
| `input` | 入力ボックスを表示する |
| `pos` | 表示位置を指定する |
| `picload` | 画像を表示する(ver3.31ベータ版よりも前のバージョンの場合、PNG形式は`imgload`という拡張命令と Internet Explorer が必要) |
| `color` | 色指定(RGB形式で、各要素0~255、十進法で指定) |
| `if` | もし~ならば~する(分岐命令) |
| `font` | 文字列の大きさ・フォントを指定する |
| `boxf` | 矩形を描画する |
| `repeat` | `repeat`~`loop`間の処理を指定回数繰り返す |
| `loop` |
| `goto` | 指定したラベルにジャンプする |
| `gosub` | 指定したラベルに行き、`return` があると元の `gosub` の次の行へ戻って実行 |
| `return` |
| `end` | プログラムを終了する |
| `stop` | プログラムの実行を一時的に中断する |
| `title` | タイトルバーに表示する文字列を指定する |
| `screen` | 大きさ、位置などを指定してスクリーンを作る(`bgscr`命令で枠なしスクリーンも可能) |

### コード例

Linux版HSP3における例

### 外部APIとの連携

HSP は外部DLLライブラリやWindows APIとの連携にも対応している。

それぞれプリプロセッサを使用することで、Windowsのコモンコントロールを使用することができる。
また、それらのコントロールを最初から使用できるようにするモジュールスクリプトもHSP パッケージに標準で同梱されている。

## その他

一部バージョンにおいて、アンチウィルス製品でマルウェアと誤認識される現象が報告されている。

## 関連書籍

- 『はじめてのHSP』 工学社 ISBN 4-87593-289-8
- 『HSPゲームプログラミング クックブック 2.6』 秀和システム ISBN 4-7980-0495-2
- 『HSPプログラミング入門 2.55』 秀和システム ISBN 4-7980-0209-7
- 『HSPプログラミング入門 2.6』 秀和システム ISBN 4-7980-0821-4
- 『最新HSP3.2プログラミング入門』 秀和システム ISBN 978-4-7980-2432-5
- 『HSPスクリプトプログラミング逆引きテクニック 2.55』 秀和システム ISBN 4-7980-0186-4
- 『無料ツールでゲームプログラミング HSP編』 エンターブレイン ISBN 4-7577-1863-2
- 『12歳からはじめる、わくわくHSPゲームプログラミング教室』 ラトルズ ISBN 4-89977-078-2