HSP : Hot Soup Processor ver3.3 / onion software 1997-2013(c)

# HSP3.32 アップデートガイド

1. イントロダクション
2. HSP3.32の変更点について
3. 新規ランタイム、HSP3Dishについて
4. HSP3.32のアップデートについて
5. HSP2との違いについて
6. HSP3の概要
   1. 動作環境
   2. 命令の追加
   3. 関数のサポート
   4. 実数のサポート
   5. プラグイン
   6. モジュール
   7. ラベル型変数のサポート
   8. HSPLet
   9. DLL呼び出し
   10. COM呼び出し
   11. スクリプトエディタ
   12. peasエディタ
   13. HSPTVブラウザ
7. ver2.xからのスクリプト移行
   1. 計算順序の変更
   2. 命令の関数化
   3. 命令及びシステム変数の変更
   4. モジュール機能の仕様変更
   5. プラグイン仕様の変更
   6. 配列についての変更
   7. メモリバッファについての変更
   8. peek命令の変更
   9. HSP3は難しい？（HSP2との互換マクロについて）

## イントロダクション

HSP3.32は、HSP3.3及びHSP3.31に替わる新しいバージョンです。 大幅な仕様の変更はなく、あくまでも上位互換として動作する形で、各種機能が追加されています。

ここでは、HSP3.32とHSP3.2、HSP3.3の違いについて。 そして、HSP2.61とHSP3全般の違いについて解説していきます。

## HSP3.32の変更点について

HSP3.32は、HSP3.3のマイナーアップデートバージョンです。 HSP3.3をすでに使っているユーザーは、特に意識することなくHSP3.32をお使いいただけるはずです。

HSP3の詳細な更新履歴については、こちら(history.txt)を参照してください。

HSP3.32でHSP3.2から追加変更された主要な項目は以下の通りです。

- 自由に使用できる標準の素材がhsptvフォルダに追加されています
- 文字列の置換を行なう新規命令、strrepを追加しています
- await命令による待ち時間の精度が向上しています
- 標準でPNG、TGA、PSDフォーマットの読み込みに対応しています
- スマートフォン(iOS、android)に対応したHSP3Dishランタイムを同梱しています
- HSP3Dish Helperを同梱し、androidデバイスへの変換をサポートします
- HSPソースコンバーターによりCソースコードへの変換が可能です
- HSPスクリプトエディタのエンジン(Footy2)を更新し、表示や操作面の改善を行ないました
- 未初期化の変数が使用されたことを検出する機能を追加しています
- スクリプト実行速度を10〜20%程度改善しています
- HGIMG3にある不具合のいくつかを修正しました
- おちゃっこさん製作のEasy3Dプラグインを最新版に更新しました
- powf関数がマクロから標準の実装に切り替えられ、より正確な値を返します
- USB機器のコントロールに関するプラグイン、モジュールを同梱しています
- セキュリティ対策のためDPM暗号化のアルゴリズムを調整しています

バージョンアップにあたり互換性の影響が出る可能性は、以下があります。これ以外で、問題が出ることは想定していません。

標準スクリプトエディタの更新

  エディタのエンジンとして使用しているFooty2ライブラリを新しいバージョンに更新しています。 これにより、以前のエンジン(Footy1)による不具合や制限が解消されます。 エディタの操作自体は基本的に以前と変わっていませんが、以下の点についてご注意下さい。

  - Footy2ライブラリの制約により、Windows2000より前のOS(Windows 95/98/Me)は、動作対象外となります
    これは、エディタの動作に関する制約であり、HSP3自体はWindows 98以降で使用することができます。
    これらのOSをご利用のユーザーには大変不自由をお掛けしますが、同梱されているシンプルなエディタ(hsed3le.exe)か、またはHSP3.21まで使用していたFooty1版のエディタ(hsed3f1.exe)をお使い頂くことを推奨致します。 Windows 2000以降のOS(Windows XP,Vista,7)環境であれば、新しいエディタは特に問題なく使用することができます。
  - オートインデント利用時の空行はTAB1がつ含まれた行となります
    以前のスクリプトエディタでは、ただの空行とされていました。今後のバージョンでは、以前のエディタに近い動作に修正していきたいと考えています。
  スクリプトエディタの更新により、エディタ機能を一部修正しています。

      	・「表示」メニューを設定ダイアログに統合
      	・「カーソル」メニューを「編集」メニューに統合
      	・キーワード色付けの変更
      	・hspdef.asで定義されるマクロを色付けされるように修正
      	・起動・終了時にHSPアシスタントと連携されるように修正
      	・URL、メールアドレスの強調表示

  尚、設定項目の変更があるため、HSP3.3より前のスクリプトエディタと 設定の記録先を変更しています。いままでの設定は引き継がれませんのでご注意ください。
  以前のエディタとの動作の違いや、新しいエディタの動作が不安定などの理由で、 HSP3.21まで使用していたFooty1版のエディタを使用したい方は、HSPインストールディレクトリにあるhsed3f1.exeをお使い頂くことができます。
  その場合は、hsed3f1.exeをリネームするか、関連付け先を変更してご使用ください。
powfの標準数学関数置き換えについて

  いままでマクロとして実装されていたpowf関数を標準の数学関数として置き換えました。 これにより、使用方法そのものが変更されることはありませんが 過去のバージョンと演算結果が異なる場合があるので注意してください。従来は、近似値を求めていたため、

      				mes 0+powf(2,3)

  の結果で7(7.99999…)が返されていました。これにより想定と違った 結果が起こる場合がありましたが、新しいバージョンでは、8(8.0)が返されます。 また、hspmath.asのpowマクロも、powfを使用するよう変更されています。 新しいpowf関数は、commonフォルダのhspdef.as及び、HSP3の必須ファイル hspcmp.dll、hsp3.exe等のランタイムが正しく更新されていない場合、 正常に動作しなかったりエラーが発生することがあります。 アップデートの際は、必ずcommonフォルダも含めて最新版であることを 確認するようにしてください。
中間コードの最適化について

  中間コードに最適化のためのフラグを新規に埋め込んでいます。 これにより、パラメーター解析などで実行時にかかる処理を軽減することができ、高速化につながります。
  HSP3.3に関わるファイルをすべて正しくアップデートされていれば、特に問題はありません。 あまりないケースだと思いますが、HSP3.3で作成した axファイル(オブジェクトファイル)を、それ以前のバージョンのHSPで 動作させようとした場合に問題が発生します。
  HSP3.3自体は、従来のコードに対して上位互換で動作しますが、 HSP3.3で生成された中間コード(axファイル、オブジェクトファイル)は、 HSP3.3より古いバージョン(HSP3.21、HSP3.22を含む)では正常に動作しませんので注意してください。

      	HSP3.2で生成したaxファイル　→　HSP3.2○　HSP3.3○ [上位互換あり]
      	HSP3.3で生成したaxファイル　→　HSP3.2×　HSP3.3○ [下位互換なし]

  中間コードの最適化機能を操作する場合は、プリプロセッサ命令#cmpoptを使用します。

      		#cmpopt optprm 1	; パラメーター最適化ON

  または、

      		#cmpopt optprm 0	; パラメーター最適化OFF

  をソースに記述することで、明示的に最適化機能を選択することができます。
  また、ブラウザ上でHSPのコードを動作させるHSPLetは、中間コードの最適化に対応していません。 HSPLetを使用する場合には、必ず「#cmpopt optprm 0」をソースコードに指定して、パラメーター最適化を無効にしてください。
DPM暗号化の更新について

  セキュリティ対策のためDPM暗号化のアルゴリズムを一部調整しています。 これにより、HSP3.3より古いバージョン(HSP3.21、HSP3.22を含む)で作成された暗号化付きDPMファイルの読み取りができません。
  HSP3.3で読み込み可能なDPMファイルは、HSP3.3以降のバージョンで作成する必要がありますのでご注意ください。 また、exeファイル内にパックされるstart.axや、暗号化済みデータも以前のバージョンとは異なる形式で格納されます。
  尚、HSP3.3では、スクリプトエディタで、「指定フォルダからDPM作成」メニューにより、DPMファイルの生成を行なうツールの呼び出しが可能になっています。

## 新規ランタイム、HSP3Dishについて

HSP3Dishは、HSP3の動作環境を様々なデバイス上で構築するための 追加セットです。Windows上で開発したスクリプトを、別なOS上で 動作させるための仕組みを提供します。

HSP3.3に含まれる、HSP3Dishランタイムは、通常版のHSP3と比べて機能が制限され、 いくつかの特殊な機能が付加されています。 HSP3Dishに合わせたスクリプトを作成することで、iPhone/iPad、またはandroidといったスマートフォンなど 異なるシステム上での動作に繋げることが可能です。

特殊な利用を想定したHSP3DishですがWindows上で使用する上では、 DirectXを使用した高速描画や、アルファチャンネルやPNG形式の標準サポートなど、 通常のHSP3にはないメリットも持ちあわせています。 HSP3Dishは、現在まだ制約や未実装の機能がありますが、 新しいHSP3の流れとして今後も進化を続ける予定です。どうぞご期待ください。

HSP3Dishの詳細と使用方法については、マニュアル(hsp3dish_prog.htm)を参照してください。

## HSP3.32のアップデートについて

HSP3.32は、HSP3.3からのマイナーアップデートになります。 特に変更を意識することなく、HSP3.3と同様にお使い頂けます。 HSP3.32で変更された項目の詳細は、以下の通りです。

Windows8の対応について

  HSP3.32では、Windows8上での動作を確認しています。 HSP3.31までのバージョンでは、Windows8(x64)上でウインドウを閉じる(終了する)際にランタイムエラーが表示されることがありました。 これは、動作自体に影響はなく、システム上で問題が起こるものではありませんが、Windows8上での動作を安定させるためにも最新版でのご使用を推奨します。

読み込み可能画像フォーマットの追加について

  標準で、PNG、TGA、PSD形式の画像を読み込むことが可能になりました。 (コンパクト版(hsp3c)ランタイムを除く)

      		PNG形式  : 拡張子 PNG : Portable Network Graphicsデータ。
      		PSD形式  : 拡張子 PSD : Photoshop形式のデータ。(合成レイヤーのみ)
      		TGA形式  : 拡張子 TGA : TARGA 形式のデータ。
      		※従来通りのBMP、GIF、JPG、ICO形式もサポートされます。

  ただし、インターレース形式のPNGファイルには標準では対応していません。PNGがサポートするすべての形式を読み込む場合は、imgloadまたはhspcvプラグインをご使用下さい。

  PNG、TGA、PSD形式で透明色(アルファチャンネル)を含む画像を picload命令で読み込む場合、画像のアルファチャンネルが適用されます。 picload命令のモード1(現在の画面の上にロード)で読み込んだ場合、 アルファチャンネルを適用した状態で合成されることになります。 モード0(画面を初期化してロード)の場合は、通常通り白色の背景で 画面を初期化した上で、読み込みを行ないます。 HSP3.32では、新しくモード2(黒色で画面を初期化してロード)が追加 されています。これは、黒色の背景で画面を初期化した上で、 読み込みを行ないます。これにより、透明部分が黒色になりgcopy命令等で 黒色を透明としてコピーする場合に有効です。 また、celload命令での画像読み込み時は、常にモード2と同様に 黒色の背景で画面を初期化して読み込みを行なう動作となっています。

await命令の精度について

  HSP3.32では、await命令の待ち時間精度を向上させています。 これにより、従来よりも一定で高精度な時間待ちを実現できます。 ただし、従来のスクリプトと待ち時間のタイミングが微妙に変わる 可能性がありますのでご注意ください。

新規命令、strrepについて

  新規の文字列操作命令として、文字列の置換を行なうstrrep命令が 新たに追加されています。

      		strrep p1,"検索文字列","置換文字列"

      		p1=変数名 : 検索される文字列が格納されている文字列型変数名
      		"検索文字列" : 検索する文字列
      		"置換文字列" : 置換する文字列

  p1で指定した文字列型変数の内容すべてにおいて、 "検索文字列"で指定した文字列を、"置換文字列"に置き換えます。 実行後、システム変数statに文字列を置換した回数が代入されます。

HSPTVフォルダ素材について

  HSP3.32では、自由に使用できる素材として、HSPTVフォルダ素材に サウンド(.wav、.mid)、画像(.jpg、.bmp、.png)を同梱しています。 これらの素材は、ユーザーがソフトを作成する際に自由に使用・配布 することができます。(著作権表記をする場合は、ドキュメントに 「HSP3.32付属のフリー素材データを使用」のようにお書き下さい。 ただし、データを使用しても著作権表記を行なう義務はありません。)
  スクリプトから素材データを呼び出す際には、dir_tvマクロを 使用すると便利です。

      		picload dir_tv+"sozai1.jpg"

  のように記述することで、HSPTVフォルダから指定されたファイル名を 検索することになります。 素材のデータを含むexe(実行)ファイルを作成する場合は、

      		#pack "sozai1.jpg"

  のように#pack命令に素材のファイル名を直接指定してください。 (#epack命令も同様です) #pack、#epack命令では、スクリプトのあるフォルダ及びHSPTVフォルダ から該当するファイルを検索し、exe(実行)ファイルを作成します。

  素材データの一覧については、HSPTVフォルダ素材一覧(hsptv_res.htm)を参照してください。

## HSP2との違いについて

HSP3は、HSP2までの仕様とプログラムを大幅に見直し、再構築したHSP3の最新バージョンです。 ver2.61までに培われた親しみやすさ、習得のしやすさ、シンプルさといった資産を継承しながら、 より幅広い応用と汎用性を持たせた環境を提供すべく開発されています。

以前のバージョンからの移行も含めて入門者から上級者まで幅広く使っていけるスクリプト言語となる ことを願っています。

HSP3は、まったく新しく設計されたコアシステムを中心に構成されています。 このコアシステムは、プラットフォームに依存しないスクリプトエンジンと、自由に機能拡張を可能とする アーキテクチャを持っています。 シンプルで強力なコアシステムのもとで、各種プラットフォームに対応した拡張コンポーネントを 用意し、安定した可搬性と生産性を実現するシステムを目指しています。

いままでの書式やルールの特長は継承し、不要な仕様を見直すことで豊富な資料や過去の資産を有効に 活用することができ、次期バージョンへ移行するための敷居も低くなっています。

HSP3は、ver2.61までの書式やルールを継承していますが、完全な互換性はありません。
HSP3を新規にインストールした場合でも、HSP2.xは削除されず独立した形で使用することができます。

ver2.61までのソーススクリプトをver3.0に移行させるためには、注意点を参照した上で 互換性のない部分を変更するようにしてください。

また、ver3.0が正式にリリースされた後も、ver2.xの配布及びメンテナンスはしばらくの間継続される予定です。 既存のすべてのユーザーに、無理なくver3.0への移行ができるよう努力をしていきたいと考えています。

## HSP3の概要

HSP2を利用してきたユーザー向けに、HSP3.2の概要を紹介します。

### 動作環境

HSP3のコアシステムは、WIN32上で動作します。 HSP2.xはWindows95以降のバージョンをサポートしていましたが、HSP3ではWindows98以降を動作環境としています。 (ただし、Windows95+InternetExplorer4以降の環境では動作可能です。)

### 命令の追加

HSP2.xではプラグイン命令だった画像関連の命令が標準で装備されています。 画像の拡大や回転を行なうgrotate、grect、gsquare命令や、 円を描画するcircle命令、HSVによる色指定を行なうhsvcolor命令など 多くの機能がサポートされています。

### 関数のサポート

式の中に関数を含めることができるようになっています。 これにより、一部の命令やシステム変数が関数に置き換えられています。

### 実数のサポート

64bit浮動小数による実数計算をサポートしています。 三角関数や平方根などの数学関数を装備しており、 精度の高い計算を行なうことができます。

### プラグイン

拡張プラグインについては、3.0から大きく仕様が拡張されています。 3.0専用にプラグインを作成することにより、型の拡張や描画システム、 イベントの管理など、大幅なシステムの拡張を可能にします。

HSP2.61までのプラグインは、互換機能によりほぼすべてをそのまま使用することができます。 また、HSP2.61で標準添付されていた拡張プラグインはすべて同名のものを同梱しています。

HSP3では、これに加えてHTTPやFTPのネットワークアクセスに特化したHSPINETや、 高度な3D処理をサポートするHGIMG3を同梱しています。 さらに高度な画像処理に特化したプラグインHSPCVや、3Dゲーム作成で 評価の高いEasy3Dが同梱されています。

### モジュール

モジュール機能はスクリプトの名前空間や、変数の領域を独立させることで、 スクリプトの再利用性とメンテナンス性を高めることができます。 ユーザー定義命令の作成やモジュール変数の作成、 ローカル変数の定義などにも結び付いた高度な仕組みです。 詳しくは「モジュール機能ガイド」をご覧ください。

### ラベル型変数のサポート

ラベル型変数は、スクリプトの任意の位置情報を変数に格納するための仕組みです。 ラベル情報を変数に格納することにより、スクリプトの可能性がさらに広がります。

### HSPLet

HSPLetは、HSPの実行をJavaランタイム上で行なうためのシステムで、 これによりWebブラウザでの実行及び、Windows以外のシステムで HSP3のスクリプトを 動作させることが可能になります。 詳しくはHSPLetの説明書および マニュアルをご覧ください。

### DLL呼び出し

WIN32APIなど外部DLLを手軽に定義して呼び出すことが可能です。 HSP2.61のloadlib関連命令及びllmodに含まれる命令は、HSP3でサポートされません。

### COM呼び出し

WindowsのCOMコンポーネント呼び出しをサポートしています。 COMオートメーション、COMイベントなどの高度な技術を手軽に利用することができます。 これにより、IEコンポーネント、XMLパーサー、正規表現による検索や置き換え、RSSの取得などの 最新テクノロジーをスクリプトから簡単に呼び出せます。

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

新規のスクリプトエディタを同梱しています。 編集サイズ制限の撤廃と、キーワードの色付け、タブの採用などにより 高機能なものとなっています。(以前のバージョンもHSED3LE.EXEとして同梱されています。) スクリプトエディタから呼び出される周辺ツール(ヘルプブラウザ等)も、 バージョンアップしたものを同梱しています。

### peasエディタ

peasエディタは、テンプレート(ひな型)のパーツと、パラメーターやオプションを決めるだけで、 自動的にスクリプトを生成する簡易プログラミング環境を提供します。 ユーザーは、今まで通りにエディタでスクリプトを書くことはもちろん、マウス操作だけで プログラムを作成することが可能になります。

### HSPTVブラウザ

HSPTVブラウザが標準で同梱されています。 これは、ネットワークを介してアップデートされるコンテンツビューアーです。 オンライン上のHSP情報、最新ソフトウェアを手軽にダウンロードして楽しむことができます。

## ver2.xからのスクリプト移行

ここでは、既にver2.xを使用していた方、スクリプトを移行したい方に向けての 変更点および注意点をお知らせします。

### 計算順序の変更

HSP3では、計算式で演算子ごとの優先順位が付けられています。 多くの言語と同様に、「+」「-」よりも「*」「/」の方が先に計算されるようになっています。 これにより、ver2.xまでの計算式(左から処理)と結果が変わってくる場合があります。 優先順位の詳細については、「言語仕様ガイド」を参照してください。

### 命令の関数化

一部の命令が関数として実装されています。 このため、ver2.xで使用していた命令の一部がそのままでは使用できなくなっています。 関数化された主な命令は、以下の通りです。

- int
- str
- rnd
- strlen
- peek
- wpeek
- instr
- strmid
- getpath
- ginfo
- sysinfo

例えば`rnd a, 10`は`a = rnd(10)`という書式になります。

### 命令及びシステム変数の変更

HSP 2.xに存在した以下のキーワードは3.0で変更されています。 ほとんどは代替の命令により同等の動作が可能になります。 また、2.xと互換で動作するマクロ(hsp261cmp.as)を利用することで ある程度の互換を持たせることができるようになります。

変更された命令
命令名 | 変更点
--- | ---
rnd | rnd()という書式の関数になりました
gettime | gettime()という書式の関数になりました
peek | peek()という書式の関数になりました
wpeek | wpeek()という書式の関数になりました
notemax | notemaxというシステム変数(マクロ)になりました
strlen | strlen()という書式の関数になりました
sysinfo | sysinfo()という書式の関数になりました
getpath | getpath()という書式の関数になりました
strmid | strmid()という書式の関数になりました
instr | instr()という書式の関数になりました
ginfo | ginfo()という書式の関数になりました
sndload | mmload命令という名称に変更されました
snd | mmplay命令という名称に変更されました
sndoff | mmstop命令という名称に変更されました
skiperr | onerror命令による割り込みをお使いください
objsend | 代替としてsendmsg命令が用意されています
palfade | 代替命令は用意されていません
palcopy | 代替命令は用意されていません
getpal | palcolorと同機能になります
text | "hsp3util.as"モジュールにてtext,emes命令を提供しています

変更されたシステム変数
システム変数名 | 変更点
--- | ---
csrx | ginfo_cxマクロに名称変更
csry | ginfo_cyマクロに名称変更
paluse | ginfo_paluseマクロに名称変更
dispx | ginfo_dispxマクロに名称変更
dispy | ginfo_dispyマクロに名称変更
rval | ginfo_rマクロに名称変更
gval | ginfo_gマクロに名称変更
bval | ginfo_bマクロに名称変更
winx | ginfo_winxマクロに名称変更
winy | ginfo_winyマクロに名称変更
cmdline | dir_cmdlineマクロに名称変更
windir | dir_winマクロに名称変更
curdir | dir_curマクロに名称変更
exedir | dir_exeマクロに名称変更
sysdir | dir_sysマクロに名称変更
prmx | ginfo命令の仕様変更により必要なくなりました
prmy | ginfo命令の仕様変更により必要なくなりました

loadlib関連命令は、#uselib・#funcを利用したDLL呼び出しか、 またはcallfunc関数による外部呼び出しに引き継がれます。 以下の命令は、HSP3ではサポートされていません。 (ll_poke、ll_peek等は、「dupptr命令+poke命令/peek関数」で代替が可能です。)

- ll_ret
- ll_retset
- ll_getptr
- ll_peek
- ll_peek1
- ll_peek2
- ll_peek4
- ll_poke
- ll_callfunc
- ll_n
- ll_poke1
- ll_poke2
- ll_poke4
- ll_libfree
- ll_callfnv
- ll_call
- ll_free
- ll_s
- ll_p
- ll_str
- ll_dll
- ll_func
- ll_type
- ll_z
- ll_libload
- ll_getproc
- ll_bin

ただし、HSP3.2以降ではllmodに含まれる命令、マクロ等を継承したllmod3が同梱されています。 詳しくは、common/llmod3ディレクトリにあるソースを参照してください。

### モジュール機能の仕様変更

モジュール機能の仕様が変更されています。 数値以外のパラメーターをユーザー定義命令に渡す場合には、スクリプトを変更する必要があります。 また、mref命令についても一部機能変更がありますので注意してください。 詳細については、「言語仕様ガイド」を参照してください。

### プラグイン仕様の変更

HSP2.5以降のすぺてのプラグイン規約に対応していますが、 HSP3の内部仕様変更による制限がいくつかあるので、注意が必要です。

- BMSCR構造体は、flagからcolorまでのフィールドのみ参照できます。
- PVal構造体のflagフィールド(型タイプ値)やlenフィールド(配列情報)を DLL側で書き換えることはできません。
- PVal構造体から文字列型の配列変数にアクセスすることはできません。

これ以外の点においては、HSP ver2.61と同等の情報が受け渡されます。 HSP2.61互換のプラグインでは、以下のような制限が発生しますので注意してください。 また、プラグインの互換機能はすべてのHSP2.xプラグインの動作を保障するものではありません。

プラグインから変数に値を代入する場合、バッファの自動拡張は行なわれません。 バッファオーバーフローが発生しないように注意してください。

フルセットのアーカイブには、ver2.61同梱プラグインのうち、hspda、hspdb、hspdx、 hspext、hspsock、hgimg(x)及びヘッダファイルが含まれています。 これらのプラグインは、ver2.61に同梱されているものとまったく同一のDLL ファイルで、3.0のプラグイン互換機能により動作しています。 (HSP同梱でないユーザー作成プラグインの互換性については、それぞれの仕様により異なります。)

hspdx.dllについては、HSP3.0のpicload仕様変更によりパレットモード時に 読み込んだ画像のパレットが反映されません。このため、画像ファイルから パレットデータを取り出すためのbmppalette命令を定義したモジュール集、 「hsp3util.as」を提供しています。 使用例については、hspdxのサンプルスクリプトを参照してください。

### 配列についての変更

ver3.0からは配列変数の扱いが大きく変更されています。 ver2.xではdimまたはsdim命令によって、配列の最大数を確保してから使用する形になっていましたが、 ver3.0では配列の確保をすることなく配列変数に代入することが可能になっています。 (ただし、代入されていない配列の内容を参照するとエラーになります)

ver2.xではデフォルトで0〜15までの配列(数値型変数の場合)を利用可能でしたが、 ver3.0ではデフォルトの確保はありません(0のみ)。 この違いによって一部のスクリプトが配列の参照中にエラーとなる場合があります。

### メモリバッファについての変更

HSP3から文字列型の変数は、自動拡張により自由なサイズのデータが扱われることになります。 このため、文字列型の配列変数を作成した場合には可変長の変数バッファが複数作成されることになり、 ver2.xまでのような連続したメモリ空間での管理ではなくなります。 これにより、文字列型の配列変数に対してbsave、bloadなどを始めとした直接メモリを操作する命令を実行した場合、 ver2.xではすべての次元にアクセスできましたが、 ver3.0からは特定の配列要素単位でのアクセスとなります。

実際にそのような操作を行なっているスクリプトは多くないと思われますが、 文字列型の配列変数に対するメモリ操作には注意が必要です。

### peek命令の変更

peek命令はpeek関数になりましたが、同時にver2.xでサポートしていた文字列読み出しの機能は廃止されています。 同等の処理を行なう場合は、getstr命令で区切りキャラクターコードを0としてお使いください。

### HSP3は難しい？

いままでHSP2を利用してきたユーザーの中には、HSP3になって新しい要素が大幅に 導入されたため、難しくなったと考えている方も多いと思います。

HSP3は、HSP2を使ってきたユーザーすべてに移行して使ってもらえるよう、設計されています。 HSP3で、大きく変わった点として関数の導入がありますが、これはいままで命令だったものを 計算式の中に記述できるようにしたもので、機能が変更されているわけではありません。 それ以外に追加された多くの機能は、HSPを拡張するための仕組みで、モジュール機能や 外部API呼び出し(loadlib関連命令にあたるもの)など、一般ユーザーが手軽に新しい機能を 使うことができるようにしたものです。

HSP3では、より柔軟な書き方ができるようになりましたが、人それぞれのスタイルが あるものなので、HSP2と同じ書き方でも構いませんし、必要のない機能は使う必要はありません。 もしHSP2に慣れている場合は、スクリプトの先頭に次のような1行を追加してください。 主要な命令のほとんどがHSP2と同じ書き方で実行できるようになります。

    #include "hsp261cmp.as"		;ver2.61互換を有効にする

これは、commonフォルダに存在する「hsp261cmp.as」で定義されている ver2.61互換マクロにより、3.0以降で動作するよう適切な命令に変換するものです。 ただし、現状のver2.61互換マクロは、β版でありすべての記述をサポートして いるわけではありません。また、計算式の優先順位変更も行なわれません。 完全ではないものの、ある程度までのスクリプトであれば、そのまま3.0で 動作させることが可能です。

ver2.61互換マクロの設定以降には、ver3.x専用の命令及び定義ファイルなどを 置かないように注意してください。