HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
1026
tuisekimodeHSPで作ったゲームがOSによって動きません。8解決


tuisekimode

リンク

2016/10/26(Wed) 00:33:47|NO.77236

D-STARSという弾幕シューティングを公開しております。

フリーゲームとして公開していたのですが、バージョンアップ後、複数のOSで
動かないと言う報告をいただいておりまして、ここで質問させていただければと。

WinXP...OK / Win7(32bit)...NG / Win7(64bit)...OK / Win8.1(64bit)...OK
Win10(32bit)...NG / Win10(64bit)...OK といった具合です。

同じOSでも前バージョンでは動いていたとの連絡もあり、
なにか変わったことを追加したかな?と回想していたところといえば、
・プラグインのhspwaveを使って、音量メーターを付け足した。
・mciを使ってフルスクリーン化している。というところです。


//プラグイン読み込み部 #include "hspdxfix.as" ;DirectX特化のプラグインを使用する #include "hspcv.as" ;画像操作の拡張プラグイン #include "mod_img.as" ;PNG形式を読み込むためのプラグイン #include "hsp3util.as" ;emintなどの特定命令を使うためのプラグイン #include "hspext.as" ;固定少数→整数への命令を使う際に必要 #include "hmm.as" ;DirectSoundを使うためのプラグインを使用する #include "ck_joyforce.as" ;joystickを使うためのプラグイン #include "hspwave.as" ;音量レベルメータを使うためのプラグイン #include "hspdef.as" #include "user32.as" ;フルスクリーンに対応させるため //フルスクリーン化 dscx = ginfo_dispx : dscy = ginfo_dispy //デスクトップ画面のXサイズとYサイズを取得 gosub *dataload //データロードしてみる if wsize = 0 : screen 0, 640,480 : width 640,480 //画面サイズの指定、画面サイズ変更用 if wsize = 1 : screen 0, 800,600 : width 800,600 if wsize = 2 : screen 0, 1024,768 : width 1024,768 if wsize = 3 : screen 0, 1280,1024 : width 1280,1024 if wsize = 4 { SetWindowLong hwnd,-16,$80000000|$10000000 // フルスクリーンにする SetWindowPos hwnd,0,0,0,dscx,dscy,$4 // ウィンドウ枠のサイズ考えずにサイズ変更 } await 16 ;1/60秒待ってから es_sync 2 ;実画面に表示するよ //音量メータ部 repeat;バッファがいっぱいになるのを待つ w_in_bufs bufs await 0 if bufs==0 :break loop color 0,255,0 pos 0,128 repeat 640 //読み出すバッファサイズ tc(cnt)=peek(buf,cnt) if tsc >= 0 & tsc < tc(cnt) : tsc = tc(cnt) loop if tsc > 200 : tsc = 201 ;c=128が音量0であると考えると if playflg = 0 & tsc > 0 : tsc = tsc - 110 //プレイ中でなければ音量は0に if tsc > 0 : tsc = tsc -8 //音量ゲージは常に減少する pos 296 ,636 //左スピーカ位置 if tsc >= 160 : es_copy 7, 512,480,80,80 //最大スピーカ repeat 6 if tsc < 160-cnt*8 : es_copy 7, 592+cnt*80,480,80,80 //スピーカ loop //音に合わせたグラフィックに変更 repeat 320 //読み出すバッファサイズ c=peek(buf,cnt)-110 pos 378+cnt,636 es_copy 7, 384+c,128,1,80 loop pos 696 ,636 //右スピーカ位置 if tsc >= 160 : es_copy 7, 512,560,80,80 //最大スピーカ repeat 6 if tsc < 160-cnt*8 : es_copy 7, 592+cnt*80,560,80,80 //スピーカ loop w_in_add buf,640,0 ;2回目以降

ソースの一部ですが、長々と貼り付けてしまいました。

なぜ32bitでは動かないのかわからず、また環境も手元にあるのは動いてしまう
XP,Win8.1(64bit)なので、動作試験も自由にできるわけではありません…

なにか情報がありましたらご教授のほどお願いします。



この記事に返信する


MillkeyStars

リンク

2016/10/26(Wed) 04:53:58|NO.77237

検証ダウンロード元 : https://freegame-mugen.jp/shooting/game_3648.html

Windows 10 (x64) Insider Preview 1607.14946.1000 (Music ロード完了から動かない)
Windows Vista HomeBasic (x86) 上記に同じく動かない。

[思ったところなど]
・WIMMM.DLL を使用している部分が不明な処理になっている。
w_in_bufs bufs は w_in_open を事前に呼び出す必要があるのに呼び出されていない。
呼び出されなくても、w_in_bufs は数値を返してしまうため、正常な数値なのか判断できない。

・HMM.DLL は元々バグを含んでいるので、DirectSound だけであるなら、hspogg.as の方がいい。
(プロセス[ソフト]を終了時に、正しく開放処理をしないので、タスクに残り続けてしまう)



ZAP

リンク

2016/10/26(Wed) 11:09:55|NO.77241

場合によっては原因と思われる箇所をそれぞれ取っ払った(あるいは置き換えた)テストバージョンを作って実験してみてもよいかもしれませんね



MillkeyStars

リンク

2016/10/26(Wed) 19:55:53|NO.77246

追加です。HSP側スクリプトが異常ではなくて、DLL側から処理が戻ってきていない。
WIMMM(HSPWave.DLL) と DSOUND(hmm.dll) がCPUを使用しているので、どちらかが処理をHSPに戻していない。

上記検証に使ったソフト
Microsoft - Process Monitor
Microsoft - Process Explorer



inovia

リンク

2016/10/26(Wed) 23:45:41|NO.77251

手元の環境だと、
録音デバイスがすべて使用不能な状態の時にフリーズする現象が発生していますね。
https://twitter.com/hk1v/status/791288433587081217



tuisekimode

リンク

2016/10/26(Wed) 23:50:25|NO.77252

MillkeyStarsさん
いろいろと検証ありがとうございます。

>w_in_bufs bufs は w_in_open を事前に呼び出す必要があるのに呼び出されていない。
>呼び出されなくても、w_in_bufs は数値を返してしまうため、正常な数値なのか判断できない。

ここですが、ちょうどロード画面からOPデモシーンへと移行する手前で

sdim buf,44200 //音量メータ用 dim tc,640 w_in_open 22050,8,1 if stat :es_mes "error":stop w_in_add buf,640,1 //音量メータ用ここまで
を用意していたので、ここが要因な気がしています。
hmm.dllは前バージョンから使用しているので問題ないと仮定し

ZAPさん
ご指摘ありがとうございます。

http://tuiskeimode.web.fc2.com/game/toppage.html

こちらにhspwave関連を使わずにビルドした実行ファイルのみを置いてみましたので
もしよろしければ実行テストしてみていただけませんでしょうか。

他力本願ですみません...



inovia

リンク

2016/10/27(Thu) 00:00:46|NO.77253


if stat :es_mes "error":stop

ん?
録音デバイスが1つもなかったり、使用不能な状態だと
このifの中に入っちゃうので、止まっちゃうかと。



MillkeyStars

リンク

2016/10/27(Thu) 00:22:02|NO.77254

HSPWave.dll を使用しない差分バージョン - 正常動作確認できました。



tuisekimode

リンク

2016/10/27(Thu) 01:15:45|NO.77255

MillkeyStarsさん
動作確認ありがとうございました。

サウンドメータ関連は相手の環境に依存してしまいそうなので、
今後使わない方向で行きたいと思います。

これにて解決とします。



ONION software Copyright 1997-2021(c) All rights reserved.