HSP : Hot Soup Processor ver3.6 / onion software 1997-2020(c)

# HSP3.6 新機能ハイライト

1. HSP3.6アップデート概要
2. mes(print)命令の機能拡張について
3. HSP3Dishの配置オブジェクトについて
4. レイヤーオブジェクトについて
5. 標準スプライトについて
6. コールバックルーチンについて
7. objcolor命令について
8. rgbcolor命令について
9. stick命令で取得されるキーの追加
10. strexchange命令による文字列置き換えについて
11. zipファイルの圧縮解凍サポートについて
12. MUCOM88プラグインについて
13. hspswプラグインについて
14. hspinetプラグインの更新について
15. 64bit(x64)版ランタイムについて
16. HSPTVフォルダ素材について
17. 英語版インターフェースの対応について
18. HSP3Dishのスクリーンサイズ変更について
19. viewcalc命令による座標変換について
20. celbitmap命令による画像データ制御について
21. HSP3DishのiOS,android版更新について
22. HGIMG4の更新について

## HSP3.6のアップデート概要

HSP3.6は、特に変更を意識することなく、HSP3.5と同様にお使い頂けます。 HSP3.6で変更された項目の概要は、以下の通りです。

標準命令の拡充

  mes,print命令で影文字、縁取りなどの修飾ができるオプションが追加されています。 配置オブジェクトの配色を指定するためのobjcolor命令、ユーザー定義による配置オブジェクトを定義するためのobjlayer命令が追加されています。 他にもコールバックルーチンの厳格化や、24bitカラーコードを指定するためのrgbcolor命令など多くの新機能を搭載しています。
  また、Unicode文字を標準で使用する新しいランタイム、hsp3utf、hsp3_64などもアップデートされています。 いままでの機能はそのままに、ゲームだけでなく、ツール製作や手軽なプロトタイピングに役立つ機能を拡充しています。

プラグイン機能拡充

  新規追加プラグイン「hspsw」(Steamプラットフォーム連携API)、「hspmucom」 (MML記述によるFM音源楽曲再生プラグイン)、「ZLibWrap.dll」(zipファイルの圧縮解凍)など 高度な機能拡張を同梱しており、すぐに利用可能です。

HSP3Dishの機能拡充

  Windows/iOS/android/Linux/html5(WebGL)上での実行をサポートするHSP3Dishの各種機能を拡充しています。
  文字列の描画を大きく見直し、すべてのプラットフォームで日本語を含む文字列の表示、半透明合成に対応しています。 また、新しい配置オブジェクトとしてチェックボックス、入力ボックスをサポートしています。 Windows/Linuxプラットフォームでは、screen、bgscr命令によるウインドウサイズの変更、フルスクリーン表示に対応しています。 他にも、最新の端末に対応できる新しいSDKへの対応や、各種センサー情報の取得、ネットワークアクセス、スプライト描画などの機能も拡充しています。 webブラウザで動作するhsp3jsは、新たにWebAssembly形式の出力が可能です。 幅広いデバイスへの変換をサポートするHSP3Dish Helperツールも、より便利で手軽に利用できようになりました。

HGIMG4プラグインの更新

  ハイレベルな3D表現を可能にするHGIMG4プラグインを大幅に更新しています。 システムの安定向上のほか、FBXモデル変換時の制約、複製時の制約など細かい使い勝手が向上しています。また、Unityからモデルやアニメーションをインポートする方法などもドキュメントで解説しています。
  また、新しいHGIMG4ツールにより、fbxファイルを変換した後の3Dデータをより詳細に確認、編集できるようになりました。 マテリアル(.material)ファイルをGUIにより詳細に確認することが可能になっています。

新しいHSPTV素材

  自由に使える素材として、HSPTVフォルダに多くの素材が拡充されています。 HSP3オフィシャルキャラクター "珠音（たまね）"を始めとして、プロ生ちゃんコラボ素材など ゲームを中心に幅広く活用することができます。 新たなサンプルスクリプトも同梱し、オリジナルの作品作りのため、自由に活用することができます。

HSP3.6で追加された新機能を手軽に試すことができるサンプルスクリプトが、「sample/new36」フォルダに含まれています。 ぜひ新しいサンプルでの動作を、実際に実行してお試しください。

## mes(print)命令の機能拡張について

mes(print)命令が機能拡張され、文字の修飾などができるようになっています。
mes命令のパラメーターは以下の通りです。

    		mes "strings",sw
    		"strings" : 表示するメッセージまたは変数
    		sw(0)     : オプション

mes命令の最初のパラメーターは、文字列または変数名を指定することができます。変数名を指定した場合は、変数に代入されている内容を表示します。
2番目のオプションパラメーターによって文字の修飾と動作の設定を行うことが可能です。

    			   値  : マクロ名       : 動作
    			 -----------------------------------------------------
    			   1   : mesopt_nocr    : 最後に改行しない
    			   2   : mesopt_shadow  : 影付き文字を描画する
    			   4   : mesopt_outline : 縁取り文字を描画する
    			   8   : mesopt_light   : 影付き/縁取りを簡易描画する
    			   16  : mesopt_gmode   : gmodeの設定を反映する(HSP3Dishのみ)

オプションに2またはmesopt_shadowを指定した場合は、影の付いた文字を描画します。 オプションに4またはmesopt_outlineを指定した場合は、縁取りの付いた文字を描画します。 影と縁取りは、objcolor命令で指定された色が使用されます。 また、影と縁取りの幅はfont命令の第4パラメーターで指定することができます。

上の例では、左が影付き文字、中央が縁取り文字、右が通常の文字になります。 オプションに16またはmesopt_gmodeを指定した場合は、gmodeで指定した半透明、色加算などの設定を反映した描画を行います。 (このオプションは、HSP3Dish及びHGIMG4でのみ有効です。通常のHSP3ランタイムでは無視されます)
オプション値は加算することで複数を同時に指定することができます。 「mesopt_nocr+mesopt_shadow」を指定した場合は、影付きで改行しない表示となります。

## HSP3Dishの配置オブジェクトについて

HSP3Dish及びHGIMG4ランタイムにおいて、チェックボックス、入力ボックスの サポートが追加されました。(入力ボックスはWindows/Linuxのみ)
chkbox、input命令をHSP3と同様に使用できます。また、objcolor、objmode命令などで設定される背景色、フォントの変更にも対応しています。
これらのGUIパーツはOSが提供する部品ではなく、HSP3Dishが独自に実装を行ったものです。 OSが提供する外観と異なる場合がありますが、異なるプラットフォーム間で統一された外観を提供することができます。 HSP3Dishの配置オブジェクトは、今後もHSP3と同様のパーツを拡充していく予定です。

## レイヤーオブジェクトについて

レイヤーオブジェクトは、新しく提供されたユーザーによって定義される配置オブジェクトです。 あらかじめ画面上の描画を行うサブルーチンを登録しておくことで、指定したタイミング(レイヤー)で描画を実行させることができます。

    			layerobj p1,p2,p3,*label,p4
    			p1,p2     ; レイヤーオブジェクトのXYサイズ（ドット単位）
    			p3(0)     : レイヤーID
    			*label    : レイヤーオブジェクトの処理サブルーチン
    			p4=0〜(0) : オプション値

    		　例 :
    				layerobj 320,240,objlayer_normal,*laysub,100
    				stop
    			*laysub
    				return

レイヤーオブジェクトはそれ自体では何の機能も持ちません。 画面内の特定のエリアをレイヤーオブジェクトとして管理し、描画のタイミングごとにユーザーのプログラム(コールバックルーチン)を呼び出します。 使い方は色々ありますが、後から追加されるモジュールなどで描画部分だけを独立して管理することができます。
また、objprm命令でパラメーターを受け取ることができ、独自の配置オブジェクトを設置したり、作成することも可能です。
レイヤーオブジェクトの詳細は、プログラミング・マニュアルの「レイヤーオブジェクト」の項目を参照してください。

## 標準スプライトについて

HSP3Dish、HGIMG4ランタイムでは、手軽に使用できる標準スプライトをサポートしました。
標準スプライトの命令は、hspdxプラグインとして追加されていた命令と互換があり、2D描画を手軽に扱うことが可能です。

HSP3で2D描画を行う際に、スプライト(矩形の画像)を利用するための手段はいくつか用意されていました。

    		・HSPDXプラグイン
    		・HGIMG/HGIMGXプラグイン
    		・HGIMG3プラグイン
    		・HGIMG4プラグイン
    		・mod_spriteモジュール

この中で、HSPDX、HGIMG、HGIMGXまでのプラグインはHSP2時代のもので、すでに開発が終了しており、 現在のOSや環境で動作させることが困難になっています。
HGIMG3/HGIMG4プラグインには、3D機能とともに高機能な2Dスプライトとしての 機能も持っていますが、座標をすべて実数で管理し、機能が多い代わりに 習得する内容も増えて手軽には扱いずらい所がありました。
今回、最も長い歴史があり、多くのユーザーが使用してきたHSPDXプラグインの 命令をもとに、手軽で扱いやすい2D専用のスプライト命令を拡充しました。
シンプルな命令でスプライトを表示でき、スプライトの画像を自由に登録できる 柔軟なシステムを搭載しています。また、スプライトコールバックやマップ描画など ユニークな仕組みも導入され、元のHSPDXプラグインよりも利便性向上しています。
座標も整数で管理されており、2DゲームやUI表示などで扱いやすいものになっています。 もちろんイベントリストによる自律移動や3Dとの連携については、従来のプラグインを利用することもできます。
標準スプライトは、HSP3Dish、HGIMG4がサポートする全プラットフォームで動作するほか、 HSP3標準ランタイムでもサポートすることを予定しています。
標準スプライトの詳細は、「標準スプライトプログラミングガイド」を参照してください。

## コールバックルーチンについて

いままで、HSP3の中で発生していた割り込み、モジュール型変数のコンストラクタ、デストラクタなどを総称して 「コールバックルーチン」と定義し、従来よりも厳格に管理されます。
コールバックルーチン呼び出し時は限定された状況で、すぐにreturn命令により処理を終了させる必要があります。
以下の状況で呼び出されるラベル、またはユーザー定義命令はコールバックルーチンとして扱われます。

    	・#deffunc命令で定義されるクリーンアップ命令の実行時
    	・モジュール型変数のコンストラクタ、デストラクタ実行時
    	・配置オブジェクト(objlayer)によるユーザー割り込み
    	・es_setgosub命令によるスプライト表示割り込み(HSP3Dish)

コールバックルーチンは、通常のサブルーチンと同様に命令を記述することができますが、 wait,await,stop命令など時間待ちや停止をさせることができません。
もし、コールバックルーチンの実行中に使用できない命令があった場合は、 エラー42(コールバック内で使用できない命令です)というエラーが発生します。
コールバックルーチンの詳細は、プログラミング・マニュアルの「コールバックルーチン」の項目を参照してください。

## objcolor命令について

配置オブジェクトの配色を指定するためのobjcolor命令が新規に追加されています。

    	objcolor p1,p2,p3	配置オブジェクトの配色を指定する

    		p1,p2,p3=0〜255(0) : 色コード（R,G,Bの輝度）

objcolor命令により、入力ボックス等の配色を設定することができます。
objcolor命令による配色を有効にするためには、あらかじめobjmode命令のオプションで 「objmode_usecolor」を指定する必要があります。

    	objmode objmode_usecolor

mesbox、input命令による入力ボックスは、rgbcolorで指定した文字色、color命令で指定した 背景色が適用されます。
また、mesboxによるテキスト入力ボックスは、[ctrl]+[A]キーにより全選択できるよう 修正されています。

## rgbcolor命令について

24bitカラーコードを指定するためのrgbcolor命令が追加されています。
従来、RGBそれぞれを「color 1,2,3」のように分けてパラメーターを記述していたものを 「rgbcolor $010203」のような形で記述することができます。
Web(html)等で使用する「#112233」のようなRGBコードと親和性の高い指定方法です。
実行される内容は、color命令も、rgbcolor命令も変わりません。色のコードを記述する方法が異なるのみになります。

## stick命令で取得されるキーの追加

カーソルキーを始めとして、ゲームなどで使用されるキーの情報をまとめて取得するstick命令で、新しく[Z][X][C]、及び[A][W][D][S]のキー情報が追加されています。
追加された情報は、以下の数値として格納されます。

値(10進) | 値(16進) | キー
1 | $00001 | カーソルキー左(←)
2 | $00002 | カーソルキー上(↑)
4 | $00004 | カーソルキー右(→)
8 | $00008 | カーソルキー下(↓)
16 | $00010 | スペースキー
32 | $00020 | Enterキー
64 | $00040 | Ctrlキー
128 | $00080 | ESCキー
256 | $00100 | マウスの左ボタン
512 | $00200 | マウスの右ボタン
1024 | $00400 | TABキー
2048 | $00800 | [Z]キー
4096 | $01000 | [X]キー
8192 | $02000 | [C]キー
16384 | $04000 | [A]キー
32768 | $08000 | [W]キー
65536 | $10000 | [D]キー
131072 | $20000 | [S]キー

HSP3Dishを含むすべてのプラットフォームでキー情報が追加されます。 従来のキー情報の値に変更はありません。上位互換として使用することが可能です。

## strexchange命令による文字列置き換えについて

新規に追加された、strexchange命令はスクリプトに含まれる文字列データをすべてまとめて置き換える機能を持っています。 これにより、スクリプト内で使用する文字列を別な言語に翻訳したり、バージョンによってメッセージを差し替えるなどの処理が容易になります。
文字列置き換えは、3つのステップで実現されます。

- 文字列データの作成
- 置き換え文字列データの作成
- スクリプトからの置き換え

実際のサンプルが「sample/new36/strex_test1.hsp」「sample/new36/strex_test2.hsp」として同梱されています。 最初のステップは、文字列データの作成です。strex_test1.hspのスクリプトは、strex_test2.hspに含まれる文字列を文字列データとして、strex_test2.strmapファイルに書き出します。 このファイルは、使用されている文字列とその管理情報(スクリプト内で使用されている位置を示しています)で構成されています。
テキストエディタ等でstrex_test2.strmapファイルを編集し、この中から置き換える必要がある文字列を書き換えます。 たとえば、「***こんにちは***」という文字列を「***Hello***」に書き換えることができます。文字列の長さは変わっても問題ありません。実際に書き換えたデータ「strex_test2en.strmap」もサンプルフォルダに同梱されています。
最後に、strex_test2.hspスクリプトの中で、自分自身の文字列を置き換えます。strexchange命令で文字列を編集した、「strex_test2en.strmap」ファイルを指定することで、スクリプト内の文字列が自動的にすべて置き換わります。

    	strexchange "strex_test2en.strmap"

これにより、スクリプト内の文字列に手を加えることなく、別な内容に置き換えが可能です。置き換えのためのファイルを、複数用意することにより多国語に置き換えることもできます。
文字列の置き換えを適用せず、スクリプト内の文字列に戻す場合は、

    	strexchange ""

のように空の文字列を指定してください。 置き換え文字列データのファイルには、元の文字列を示す数値(ハッシュコード)が含まれています。このコードと、スクリプト内の文字列をマッチングさせて、置き換えを行っています。 ですから、同じ文字列は同一のハッシュとしてまとめられてしまいますので注意してください。
また、あくまでもスクリプト内の文字列が対象となっているため、外部のテキストファイルを読み込んだり、文字コードから文字列を生成している場合には適用されません。
色々な場面で、翻訳やカスタマイズに威力を発揮します。ぜひご活用ください。

## zipファイルの圧縮解凍サポートについて

ZLibWrap.dllライブラリを使用したzipファイル圧縮解凍をサポートしました。
シンプルな2つの命令で、スクリプトからファイルの圧縮、解凍を行うことが可能です。

    	#include "zipfile.as"

を記述することで、以下の命令を使用することができます。 (実行の際には、ZLibWrap.dllファイルが必要となります。)

    	ZipCompress "srcfiles", "zipfile"

    		"srcfiles"で指定したファイル(ワイルドカード使用可)を
    		"zipfile"で指定したファイルに圧縮して保存します。

    	ZipExtract "zipfile", "path"

    		"zipfile"で指定した圧縮ファイルを、"path"で指定したフォルダに解凍します。

詳しくは、それぞれの命令ヘルプ、サンプルを参照してください

## MUCOM88プラグインについて

HSP3.6では、MML記述によるFM音源再生をサポートするMUCOM88プラグインを標準で同梱しています。
NECのパソコンPC-8801シリーズで動作していた、FM音源のドライバーを再現したMUCOM88 Windowsが持つ機能を コントロールすることができます。
MUCOM88プラグインを使用することにより、単純な音楽の再生から、MMLの解釈までスクリプト言語から 幅広く制御することができます。
FM音源(OPNA)6音+PSG音源(3声)+リズム音源+PCM音源の合計11チャンネルをMML言語により記述できます。 Windowsのサウンド再生処理は、DirectX8以降のDirectSoundを使用し、Windows XP以降の環境で、 追加のコンポーネントを用意することなく動作させることができます。
MUCOM88プラグインの詳細は、付属のマニュアル(docs/hspmucom.txt)それぞれの命令ヘルプ、 サンプル(samples/mucom88)を参照してください。
HSPMUCOMは、Open MUCOM88プロジェクトの一部として公開されています。 Open MUCOM88プロジェクトについては、以下を参照してください。

    	Open MUCOM88
    		https://onitama.tv/mucom88/

Windows上で動作するMUCOM88 Windowsツール及びサンプルMMLが公開されています。
HSPMUCOM.DLL及びソースコードは、無償(非営利)である限りは自由に紹介、 複製、再配布することができます。その際には必ずドキュメントと ライセンス表記も含めるようにしてください。

- Portable Z80 emulation作者 Yasuo Kuwahara氏
  http://www.geocities.jp/kwhr0/
- fmgen作者 cisc氏
  http://www.retropc.net/cisc/
- MUCOM88作者 古代祐三氏
  https://twitter.com/yuzokoshiro
- HSPMUCOM作者 おにたま(ONION software)
  https://www.onionsoft.net/

## hspswプラグインについて

HSP3.6では、Steamプラットフォーム用のAPIを呼び出すためのhspswプラグインを標準で同梱しています。
PCゲーム、PCソフトウェアをダウンロード販売するSteamプラットフォームで配信するアプリ上で、 ランキングや実績(トロフィー)、ステータスの読み書きといった機能をサポートすることができます。
hspswプラグインの詳細は、付属のマニュアル(doclib/hspsw.txt)、サンプル(samples/hspsw)を 参照してください。

    	HSPSWプラグインマニュアル
    		doclib/hspsw.txt

## hspinetプラグインの更新について

hspinetプラグインのhttp/httpsリクエストで、 PUT/DELETEメソッドに対応したnetrequest_put、netrequest_deleteの 命令が追加されています。 これにより、より多くのWebAPIを利用することが可能になります。

    	hspinetプラグインマニュアル
    		doclib/hspinet.txt

## 64bit(x64)版ランタイムについて

64bit(x64)アプリとして動作するHSP3標準ランタイム(hsp3_64.exe)は、 標準でunicode(UTF-8)文字ベースで動作するものに変更されました。 使用する場合は、スクリプトの先頭に以下の行を指定してください。

    	#include "hsp3_64.as"

動作の仕様は、HSP3UTF(UTF-8)版ランタイムと同様になっています。 64bit(x64)ランタイムは、64bit版のWindows上(Windows 7以降)でのみ動作します。

## HSPTVフォルダ素材について

作品を発表する際に自由に使用することのできる画像と音のデータファイルとして、 HSPTVフォルダ素材を大幅に拡充しています。 手軽なライセンスで、HSP以外の作品でも使用することが可能です。 また、Web上でHSPのスクリプトを公開できる、「WebDishサービス」でも自由に参照することができます。 「HSPTVフォルダ素材」「WebDish素材」を活用して、多くの作品が作られることを願っています。

    		HSP3.6 WebDish素材データ
    		https://dev.onionsoft.net/seed/webdish_res.html

## 英語版インターフェースの対応について

Windows、及びLinux上のHSPランタイム実行時のエラーメッセージは、OS環境の文字コードをもとに日本語・英語を切り替えて表示します。
また、HSPインストールフォルダに、英語版スクリプトエディタを新規に同梱しています。
「hsed3_en.exe」を起動することで、メニューその他のインターフェースが英語になります。 HSP3本体の機能自体に変更はありませんが、英語版の環境で利用したい方はお試しください。
今後も、HSP開発環境の国際化に向けて準備を進めていきたいと考えています。

## HSP3Dishのスクリーンサイズ変更について

HSP3Dish、HGIMG4のWindows/Linux版において、スクリーン(ウインドウ)サイズの動的な変更に対応しました。
いままでは、hsp3dish.iniファイルに記録されたサイズに従って起動時にサイズが固定されていましたが、 多くの方からサイズの変更とフルスクリーン対応の要望を頂き、修正致しました。 HSP3.6より、screen命令,bgscr命令によりスクリーン(ウインドウ)サイズを変更できます。

    	screen p1,p2,p3,p4,p5,p6

    	p1=0〜(0) : ウィンドウID
    	p2=1〜(640): 初期化する画面サイズX（1ドット単位）
    	p3=1〜(480): 初期化する画面サイズY（1ドット単位）
    	p4=0〜1(0) : 初期化する画面モード
    	p5=0〜(-1) : ウィンドウの配置X（1ドット単位）
    	p6=0〜(-1) : ウィンドウの配置Y（1ドット単位）

p1のウインドウIDは、0のみとなります。 p4の初期化モードは、以下の値を指定することができます。

    	  +4(screen_fixedsize) : サイズ固定ウィンドウ
    	  +8(screen_tool)      : ツールウィンドウ
    	 +16(screen_frame)     : 深い縁のあるウィンドウ
    	 +256                  : フルスクリーン

p4に256を指定した場合は、指定された解像度のフルスクリーンとして初期化されます。
また、スクリーンサイズ変更時は、通常ランタイムとは異なり、それまでに読み込んだすべての画像バッファは失われますので注意してください。

## viewcalc命令による座標変換について

HSP3Dish、HGIMG4において、描画時の座標変換を設定するviewcalc命令を追加しました。
viewcalc命令は、2D描画時のX,Y座標に任意の計算を適用することができる強力な機能です。 描画される表示物全体のスケーリングや移動、回転などを行うことができます。

    	viewcalc p1,p2,p3,p4,p5

    	p1(0)   : 設定モード
    	p2(0.0) : パラメーター1(実数)
    	p3(0.0) : パラメーター2(実数)
    	p4(0.0) : パラメーター3(実数)
    	p5(0.0) : パラメーター4(実数)

p1で指定する設定モードには、いくつかの種類があり多彩な変換を行うことが可能です。

    	マクロ名            値   内容
    	-----------------------------------------------------
    	vptype_off           0   座標変換なし(デフォルト)
    	vptype_translate     1   移動パラメーターを指定
    	vptype_rotate        2   回転パラメーターを指定
    	vptype_scale         3   スケールパラメーターを指定
    	vptype_3dmatrix      4   4×4マトリクスによる座標変換
    	vptype_2d            5   2D座標変換を設定
    	vptype_3d            6   3D座標変換を設定

vptype_2dは、基本的な2D座標変換を適用するモードになっています。 パラメーター1〜3で、X,Yのスケール(倍率)、回転角度(ラジアン単位)を設定することができます。

    	viewcalc vptype_2d, 2.0, 2.0, 0.0

のように指定した場合は、X,Y方向に2倍のスケールで表示、角度は0となります。
他にも色々なパラメーターを指定できます。詳しくは、viewcalc命令のヘルプを参照してください。

## celbitmap命令による画像データ制御について

HSP3Dish、HGIMG4において、変数バッファの内容を画像データとして扱うためのcelbitmap命令を追加しました。
これまで、HSP3Dishではドット単位の画像データに直接アクセスすることができませんでしたが、この命令によりメモリの内容を画像データとして読み書きできるようになります。

    	celbitmap p1,var,p2

    	p1(0)   : ウインドウID
    	var     : イメージを置き換えるための配列変数
    	p2(0)   : 動作オプション

celbitmap命令を使用する際には、あらかじめbuffer命令により作成したオフスクリーンバッファと、置き換えるための変数バッファを初期化する必要があります。
オフスクリーンバッファは、buffer命令でscreen_offscreenのオプションを指定して作成してください。

    	buffer 2,256,256,screen_offscreen

その後、バッファを置き換えるための変数バッファを作成します。
dim命令により、１次元配列を初期化して作成してください。作成するサイズは、オフスクリーンバッファのXサイズ×Yサイズになります。

    	dim bitmap, 256*256

これで、celbitmap命令を使用する準備が整いました。
celbitmap命令により、オフスクリーンバッファのIDと配列変数を指定することで、変数バッファの内容がそのまま画像イメージとして適用されます。
変数バッファは、1要素あたり1ドットとなります。1ドットは、32bitの要素をR,G,B,Aそれぞれ8bit単位で格納されるRGB形式のデータとなります。(3.6β2版と3.6β3版でRGBの並び順が変更になっています。ご注意ください)
たとえば、「$ff204080」(16進数)を指定した場合は、A=$ff(255)、B=$20(32)、G=$40(64)、R=$80(128)となります。(カッコ内は10進数)
画像データの置き換えは、コストの高い処理になるため、大きなサイズのイメージを置き換える場合、フレームレートが下がることがありますので注意してください。
p2パラメーターにより、置き換えの形式や動作を指定することができます。

    	 値  マクロ             動作
    	---------------------------------------------------------
    	  0  celbitmap_rgb      $aabbggrr形式でデータを保持する
    	  1  celbitmap_bgr      $aarrggbb形式でデータを保持する
    	  16 celbitmap_capture  描画画面の内容を変数に読み出す

通常は、OpenGLの標準に合わせたcelbitmap_rgbの形式が使用されます。オプションにcelbitmap_bgrを指定した場合は、DirectX標準に合わせたARGBの並びになります。
celbitmap_captureを指定した場合は、描画先の画面上のデータを配列変数に読み出します。(読み出しのサイズはオフスクリーンバッファのサイズになります)
※celbitmap_captureオプションは、実験的な実装です。現在は、Windows(DirectX版HGIMG4を除く)、Linux版でのみ使用できますのでご了承ください。

## HSP3DishのiOS,android版更新について

HSP3DishのiOS,android版は、それぞれの新しいSDKに対応しています。

    	iOS版	  : XCode9以降用 iOS13,64bit対応
    	android版 : Android SDK 7.0 (API 24),64bit対応、
    	            SDKr25、NDK r12以降、AdMob(Google Firebase)対応

iOS、android版ともに64bitバイナリの出力に対応しています。 それぞれ対応したバージョンのSDKや開発環境が必要となりますので、 詳しくは、マニュアルを参照してください。

    	HSP3Dishマニュアルインデックス
    		hsp3dish.htm

既存のプロジェクトが正しくビルドできなくなる可能性があるため、 既存のプロジェクトは、再度作成し直すことを推奨します。

## HGIMG4の更新について

HSP3.6では、それまでのHGIMG4から大きく修正を行なっています。 より強力で使いやすくなるよう、各種機能を見直しました。 以前のバージョンからの上位互換で動作するよう設計されていますが、 一部の機能で動作が異なる場合がありますので、過去に作成したスクリプトを 動作させる際にはご注意ください。 詳しく使い方は、HGIMG4プログラミングガイドをご覧ください。

    	HGIMG4プログラミングガイド
    		doclib/hgimg4.html

追加変更された項目の概要は以下の通りです。

- FBXモデル変換の更新
  複雑なFBXモデルを変換する際にエラーが出ることがあった処理を大幅に修正しました。 ボーンを含むモデルをアニメーションも含めて正しく変換することができます。 新しく、HGIMG4 Unity連携ガイドを同梱しました。 3Dツール「Unity」と連携してモデルデータやアニメーションの変換を行う方法を解説しています。

      	HGIMG4 Unity連携ガイド
      	doclib/hgimg4_unity.html

  この連携を利用して作られた、「プロ生ちゃんデモ」(sample/pronama3d)も サンプルとして同梱されています。

- システムの安定化とエラーログ取得
  エラーが発生した際の原因を知るためのログ出力を強化しました。 3Dモデルのロード時や、アニメーション適用時、シェーダーコンパイル時などの 詳細なエラーがログとして出力されます。 また、ログの出力をOn/Offするためのスイッチをsysreq(システムリクエスト)項目に 追加されています。

      	setreq SYSREQ_LOGWRITE,0	; ログ出力を抑制

- getang、getangr命令の追加
  オブジェクトの姿勢情報をXYZの回転角度で取得するためのgetang,getangr命令が追加されています。 クォータニオン形式による回転情報より、手軽に扱うことができるようになっています。 また、回転角度を指定するsetang、event_ang、event_setangの命令それぞれに回転順番が異なる命令を 用意しています。

      	setang (X->Y->Zの順番による回転角度の設定)
      	setangy (Y->X->Zの順番による回転角度の設定)
      	setangz (Z->Y->Xの順番による回転角度の設定)
      	event_ang (X->Y->Zの順番による回転角度のイベント変化)
      	event_angy (Y->X->Zの順番による回転角度のイベント変化)
      	event_angz (Z->Y->Xの順番による回転角度のイベント変化)
      	event_setang (X->Y->Zの順番による回転角度のイベント設定)
      	event_setangy (Y->X->Zの順番による回転角度のイベント設定)
      	event_setangz (Z->Y->Xの順番による回転角度のイベント設定)

- gpscrmat命令の追加
  gpscrmat命令が追加されています。これにより、オフスクリーンテクスチャバッファを参照する マテリアルを生成します。マテリアルを独自に生成することにより、オフスクリーンにレンダリングされた 画像イメージをテクスチャとしてシェーダーから再利用することが可能になります。 オフスクリーンに描画した内容をテクスチャとして再利用することで、詳細な鏡面反射(映り込み)、 影の生成などに応用することができます。
  (※オフスクリーンテクスチャバッファはWindows,Linux,androidプラットフォームのみサポートされています)
- gpcamera命令に平行投影カメラのオプションを追加
  カメラを生成するgpcamera命令にカメラタイプのパラメーターオプションを追加しています。 カメラタイプ値に1を指定することで、平行投影(Orthographic)を行うカメラを設定することが可能です。
- キューブマップテクスチャのサポート
  マテリアルのオプションパラメーターに、GPOBJ_MATOPT_CUBEMAPが追加されています。 キューブマップは、6面方向の画像をまとめた特殊な形式で環境マップやスカイボックスなどに 利用することができます。 (キューブマップ画像は、+X,-X,+Y,-Y,+Z,-Z放送の6画像を縦に連結した1枚の.PNG形式を使用する 必要があります。)
- カメラごとのレンダリンググループ設定
  オブジェクトのレンダリンググループを設定する、setobjrender命令が追加されています。 これにより、カメラごとに表示する/しないという設定をオブジェクトに与えることができます。 また、ライティングのグループも設定することができ、オブジェクトごとにライトの反映を コントロールすることができます。

      	setobjrender id,rendergroup,lightgroup

      		id(0) : オブジェクトID
      		 rendergroup(1) : レンダリンググループ値
      		lightgroup(1) : ライティンググループ値

  レンダリンググループ値は、カメラやライトが持つレンダリンググループ値と同一である場合は、 有効となります。 通常は、オブジェクト、カメラともにグループ1が設定されています。特定のカメラからの表示のみ 表示を無効にしたい場合などに利用できます。 ライティンググループ値は、特定のライトに対して有効/無効を切り替えるものです。 ライトが持つライティンググループ値と異なる場合は、ライトが無効となります。 それぞれのグループ値は、1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768の中から 任意のビットを組み合わせて指定可能です。

- TTFフォントのサポート
  文字列(フォント)の表示方法を見直し、すべてのプラットフォームでTTFフォントによる日本語表示をサポートしました。 従来のバージョンでは、res/font.gpb ファイルが必須でしたが、このファイルは必要なくなりました。 ただし、プラットフォームにより、別途フォントファイルが必要な場合があります。

  プラットフォーム | 文字コード | フォントファイル
  Windows | SJIS | 不要
  Linux/RaspberryPi | UTF-8 | ipaexg.ttfファイルが必要
  html5(Emscripten) | UTF-8 | 不要
  android | UTF-8 | 不要
  iOS | UTF-8 | 不要

  プラットフォームによってサポートされるフォントの種類、品質などが異なる場合がありますのでご注意ください。
  TTFフォント表示は、HSP3Dishと同様にフォント文字列をテクスチャに描画してキャッシュする形になっています。 この方法は、自由なフォントと文字を使える利点がありますが、異なる内容を広範囲に表示する場合はCPUやメモリ負荷が大きくなります。 毎フレームごとに変化する値や内容を表示しているとフレームごとの負荷が増大してしまうので、この点は以前とは大きく異なります。 また、フォントサイズが大きかったり、画面内に大量のテキストを表示するような場合も負荷が大きくなります。
  TTFフォントによる描画が必要ない場合は、従来の描画形式による表示をシステムリクエストで切り替えることが可能です。

      	setreq SYSREQ_USEGPBFONT,1

  上のように、システムリクエストでSYSREQ_USEGPBFONTに1を設定することで従来のフォント表示に切り替えることができます。(「res/font.gpb」ファイルを用意する必要があります)
  システムリクエストによるフォント描画の切り替えは、任意のタイミングで行うことが可能です。

- 2D描画シェーダーの内蔵
  従来のバージョンでは、起動時に「res/shaders」内にある2D描画のためのシェーダーファイルを読み込んで使用していましたが、 新しいバージョンでは、2D用のシェーダーを内蔵し外部のファイルを不要となりました。 2D描画のみの利用であれば、「res/shaders」内のファイルを用意する必要はありません。 3D描画時は、引き続き外部のシェーダーファイルが必要となります。
- HGIMG4ツールの更新
  スクリプトエディタから起動できるHGIMG4ツール(gpbconv.exe)に、新しい機能が追加されています。
  fbxファイルを変換した後の3Dデータをより詳細に確認、編集できるマテリアル(.material)GUIエディタを追加しています。 マテリアルごとの細かい描画設定を変更できるほか、テクスチャファイルの確認や、ライティング設定なども後から編集することが可能です。