こんにちは。
Windows限定であればShiftJISのまま、古来からWindowsに同梱されている記号フォント2種を使用して表示する方法もあります。
以下のようにモジュール化して使用すれば気軽にフォントを変えながら描画することもできるので、よろしければお試しください。
#module
#deffunc _font str f,int s,int p //_mesで使うフォントを宣言
myfont=f //標準フォントを記憶
mysize=s //標準サイズを記憶
myprm=p //標準スタイルを記憶
font myfont,mysize,myprm //標準フォントを指定
return
#deffunc _mes str s //文字列中の{64}や{64_}等を工具や指等の特殊文字で描画する命令(数値は記号のアスキーを10進で直指定)
if mysize=0:myfont=msgothic:mysize=16 //フォントが未定義なら勝手に定義
rct=s,"","" //オリジナル文字列, 1行分の文字列, 取得した特殊文字コード
rcp=ginfo_cx,0,0 //表示位置X, 文字列全体の処理したインデックス, 1行中に見つかった特殊文字のインデックス
repeat //行取得ループ
getstr rct(1),rct,rcp(1) //インデックスの位置から1行分をrct(1)に取得
if strsize<1:break:else:rcp(1)+=strsize //処理する文字がなければ処理終了。あればインデックスを送る
repeat //1行中に含まれる特殊文字と文字列を表示するループ
rcp(2)=instr(rct(1),0,"{") //特殊文字のインデックスを取得
if rcp(2)>-1:{ //特殊文字が見つかったら
mes strmid(rct(1),0,rcp(2)),1 //特殊文字までの文字列を描画
getstr rct(2),rct(1),rcp(2)+1,'}':rcp(2)+=strsize+1 //特殊文字の文字コードをrct(2)に取得
rct(1)=strmid(rct(1),rcp(2),strlen(rct(1))-rcp(2)) //特殊文字コード以降の文字列でこの行を上書き
if rct(2)!"":if peek(rct(2),strlen(rct(2))-1)='_':{ //{xx_}ならWebdings、{xx}ならWingdingsを参照
font "Webdings",mysize,myprm
}else{
font "Wingdings",mysize,myprm
}
poke rct(2),0,int(rct(2)):poke rct(2),1,0:mes rct(2),1 //特殊文字を描画
font myfont,mysize,myprm //フォントを標準のフォントに戻す
}else{ //特殊文字が無くなったら処理終了
break
}
loop
mes rct(1) //残っている文字列を描画
pos rcp,ginfo_cy //行を移動する
loop
return
#global
_font msgothic,24 //事前にフォントを指定しておきましょう
objsize ,,40 //今回は改行の幅を広く取ります
pos 100,50 //ここからテスト文字描画
color 192:_mes "ハートも表示できます{89_}\nお知らせがあります{37}"
color ,,192:_mes "気分が晴れません{83}\n{89}召還魔法{89}"
color 128,128:_mes "いいね{74} だめだね{76}"
color 255:_mes "待ってるわ{150_}{150_}{150_}"
color:_mes "{64_}設定 {97_}新しい機能 {97_}素晴らしい互換性"
color ,192:_mes "充電が完了しました{126_}"
stop //★このstopを解除すると記号文字一覧を確認できます。
repeat 2
screen 1+cnt,30*16+30,30*16,0,(ginfo_winx+ginfo(4))*cnt,ginfo(5)
color ,,255
repeat 16
pos 0,cnt*30:mes (cnt*16)
loop
color
if cnt=0:{
font "webdings",24:title "webdings (指定例:{64_})"
}else{
font "wingdings",24:title "wingdings (指定例:{64})"
}
repeat 256
pos cnt\16*30+30,cnt/16*30:a=" ":poke a,0,cnt
mes a
loop
loop