NScripter Ver.19.00

■ このスレッドは過去ログ倉庫に格納されています
2014/01/30(木) 22:41:08.23ID:BRbRh5DC
商業流通でなければフリーで利用可能な
ゲームエンジンNScripterについて語るスレです。

・本家
ttp://www.nscripter.com/

・うpろだ
ttp://nscuploader.wkeya.com/
2016/09/05(月) 13:38:02.55ID:3ILYBxCe
splitが標準命令に入ってるのは割と偉い判断だったと思う
2016/09/05(月) 15:36:12.87ID:js57+KTZ
>>493
ものすごい遅いレスだけど、stopとfreeの違いはリファレンスに書いてあるよ
あとろだのラッパーなんかも見てみるといいと思う
2016/09/06(火) 02:01:00.67ID:y+SHv1Mh
よほど特殊な使い方でない限りは2曲前のメモリを解放するようにしとけばクロスフェードさせつつメモリの心配せずに済むと思う
2016/10/04(火) 11:38:51.37ID:WMuq/SLD
@Visual Studioで新規C++プロジェクト作成して
ALuaとスタックをやりとりする適当な関数hoge(受け取った値計算して返す)をC側に作る
 Lua5.1ライブラリを読み込む、lua_tointegerとか使う
BLua5.1.dllに依存するdllファイルをコンパイルする
C作ったdllファイルからNL_bindで関数hogeの参照を引っ張る
Dhoge()をLuaから直接呼んで返り値受け取るコードを書く
Enscr.exeと同じ場所かdllフォルダにLua5.1.dllを置けばちゃんと動作する
Luaのサンプルと睨めっこしながら弄っていてここで詰まった
Lua5.1.dllではなくnslua.dll、
lua_tointegerではなくNL_tointeger使うためには何すりゃいいですか?
2016/10/04(火) 22:08:53.09ID:d+T9HY2t
こんな感じかな
//hoge.c
#include <windows.h>
__declspec(dllexport) int hoge(void *L);

//関数のポインタ型を定義する
typedef int (*NL_tointeger_T)(void *L,int index);
typedef void (*NL_pushinteger_T)(void *L,int n);

int hoge(void *L){
NL_tointeger_T NL_tointeger;
NL_pushinteger_T NL_pushinteger;
HMODULE mod;
int i;

//関数のポインタ変数に実際のアドレスを割り当てる
mod = LoadLibrary(
2016/10/04(火) 22:10:42.25ID:d+T9HY2t
書き込み失敗した…
続きです

//関数のポインタ変数に実際のアドレスを割り当てる
mod = LoadLibrary("nslua.dll");
if(!mod) mod = LoadLibrary("dll\\nslua.dll");
if(!mod) return 0;
NL_tointeger = (NL_tointeger_T)GetProcAddress(mod,"NL_tointeger");
NL_pushinteger = (NL_pushinteger_T)GetProcAddress(mod,"NL_pushinteger");
FreeLibrary(mod);

//引数を2倍して返す
i = NL_tointeger(L,1);
NL_pushinteger(L,i *2);
return 1;
}

--system.lua
NL_bind("hoge.dll","hoge","hoge")
NSOkBox(tostring(hoge(4)),"test")
2016/10/05(水) 07:17:08.56ID:vPSjcoVf
>>498-499
おおお動いた!ダメもとで聞いてみてよかった、ありがとうございますっ!
2016/11/04(金) 00:27:03.96ID:/KQPiDUz
1.20がリリースされて同梱のサンプルが動かせるようになってるね
1.11で再発したprintとtimeのバグも修正されたけど
tend
bdup
bjoiny
sdelete
clearmessage
sklppauseのバグは相変わらずかぁ・・・
502名前は開発中のものです。
垢版 |
2016/11/25(金) 12:18:57.64ID:sWcEnk2Q
あどばんすどNscripterオフィシャルガイドの、セーブ、ロード画面のカスタマイズを参考に、セーブ、ロード画面をカスタマイズしたのですが、ロードすると、ゲーム画面ではなく、セーブ画面でロードされてしまいます 。
どのようにすれば、ゲーム画面でロードされるようになるのでしょうか?
2016/11/25(金) 22:46:10.83ID:yC/lz6Qk
本が手元にないから分からないけど、とりあえず
*define節に
autosaveoff
を追加してみたらどうかしら?
2016/11/26(土) 00:00:05.95ID:66ydR4P1
>>503
出来ました!
とても悩んでいたので助かりました。
ありがとうございました。
2016/11/30(水) 13:15:10.98ID:LfnZhDu1
セーブポイント周りの仕様は(太古の時代は知らんけど)基本互換性維持してきたNScripterの数少ない変更があった点だから本参考だと引っ掛かる
2.92以後対応の解説サイトならその辺も書いてくれてると思う
2017/01/09(月) 11:28:50.26ID:iggXj3Pm
gettag命令では、文字列変数は取得できないのでしょうか。
mov $Name,
2017/01/09(月) 11:43:16.28ID:iggXj3Pm
途切れて失礼しました、表示できない文字使ったのかも。
gettag $0 で、ブラケットで囲った$Nameを取得し、名前ウィンドウに表示しようとしても空白になってしまいます。分かる方、どうか返信お願いいたします。
2017/01/09(月) 18:09:26.27ID:ywG/2S3b
・切れる文字列の例
・実際のコード
2017/01/10(火) 05:39:33.41ID:sNJP6WMc
[$Name]をgettag $varで拾うと空文字列になるね
>取得し、名前ウィンドウで表示
やるならこんな感じかな

*define
humanz 200
windowback
pretextgosub *pretext_lb
numalias Name,800
game
;続く
2017/01/10(火) 05:40:24.83ID:sNJP6WMc
*start
setwindow 32,320,28,20,26,26,0,2,20,1,1,#999999,0,300,639,479
inputstr $Name,"名前を入力してください(全角4文字以内)",8,1,240,120,128,30
[仮面のおっさん]
「ふふふ…
 さらにできるようなったな、$Name!!」
\
[Name]
「親父にもぶたれたことないのにっ!!」
\
[text]
宇宙世紀0079、
人々はみずからの行為に恐怖した…。
\
end

*pretext_lb
gettag $500
if $500 == "" return
if $500 == "text" mov $500,""
if $500 == "Name" mov $500,$Name
lsp 10,":s#00FFFF"+$500,64,260
print 1
return
2017/01/11(水) 01:52:52.48ID:TZAgad9L
506です、返信気付かずお返事遅れてすみません!
>>508 言葉足らずですみませんでした>_<
>>509 すごい! 詳細な実例ありがとうございます!! 助かりました!
2017/01/16(月) 06:04:15.87ID:nj83EOt6
命令の引数以外に書かれた$0や%0はだいたい中身に自動変換されると思って間違いない
2017/01/16(月) 22:28:04.88ID:2AWcRuBO
改めてテストしてみたけど
[$Name]をgettag $varすると、普通に"$Name"って文字列が帰ってくるね

lsp sp,":s#RRBBGG"+"$str",x,yが
lsp sp,":s#RRBBGG"+"",x,yと同じスプライト(width=1,heigh=fontの高さ)を生成するみたい

>509で空文字列っていうのは勘違いでした。

*define
pretextgosub *pre_txt_lb
numalias Name,100
game

*start
mov $Name,"あいうえお"
[$Name]
end

*pre_txt_lb
gettag $0
mesbox $0,"tag"
if $0 == "$Name" mov $0,$Name
mesbox $0,"$var"
return
2017/01/29(日) 19:14:56.67ID:k6gD2cV+
LuaアリならNSCall_tag内で変換するといいかもしれんね
2017/03/03(金) 14:04:20.11ID:/5wdTSkq
ろだです
アップローダのファイル倉庫にあるアーカイブですが、>>459問題により差し替えました(中身は一緒)
本スレへのリンクも後ほど更新いたします

長い間ほったらかしにしてしまいすみませんでした
また、ご指摘いただいた方々には重ねてお詫びを申し上げます
516ろだ
垢版 |
2017/03/03(金) 19:10:57.96ID:D0vIifTb
リンク修正しました
2017/03/04(土) 03:57:29.26ID:BlNMk/oC
お疲れ様です
2017/03/06(月) 12:15:06.47ID:CwNFW8Kj
なんかセーブするとsave1.ssっていうファイルが出来てるけどなんなんでしょうか
実態はスクリーンショットbmpみたいだけどスクショ系命令は使ってません
2017/03/06(月) 22:18:35.43ID:XazHrUeb
>>518
自作のスクリプトの話?

このスクリプトで.ssってファイルできる?
*define
game
*start
くりっく
\
savegame 10
end
2017/03/07(火) 21:07:10.19ID:venXESi6
>>519
自作のスクリプトの話です
>>519で.ssはできなかったから組み方の問題か……
かなり作りこんでるから原因究明に骨が折れそうだ
2017/03/07(火) 21:08:50.30ID:venXESi6
ちなみにほぼLuaで組んじゃってます
522518
垢版 |
2017/03/17(金) 14:01:39.41ID:EZUijqDG
わかった!NSDCopyToBgやbgcopyを使うと.ssが一時作成されて、セーブ時にそれがそのまま残るみたいだ
以下は検証スクリプトなので、まずい所あれば指摘してもらえるとありがたいです

*define
game

*start
bgcopy
drawfill 255,0,128
draw

savegame 1
click
end
2017/03/17(金) 22:17:32.04ID:n1ztOFiG
本当だね。うちの環境でもsave*.ssできました
bgcopyで編集したbgを、savegame時にsave*.ssに保存してるみたいだね
loadgame時に、save*.ssから読み込んでbgを復元させてるみたい
ver2.51からこの仕様になったみたいだね

;1:save*.ssできる
*start
bgcopy
savegame 10
click
end

;2:save*.ssできない
*start
bgcopy
click
end

;3:save*.ssできない
*start
bgcopy
bg #000000,1
savegame 10
click
end
524518
垢版 |
2017/03/18(土) 21:02:23.77ID:4e5QTXWB
ありがとさんくす
仕様なら気にすることないですね
これでやっと先に進める……
2017/03/21(火) 00:46:14.18ID:kpuQAphR
長年使ってるのに知らんかった
2017/04/17(月) 19:42:02.42ID:8Pnq25O/
ろだが繋がらない状態が続いてるみたい?
ファイルが入用な方は直接こちらから飛んでください(すみません)
http://ux.getuploader.com/nsc_pub/
http://ux.getuploader.com/nsc_arc/ 👀
Rock54: Caution(BBR-MD5:669e095291445c5e5f700f06dfd84fd2)
2017/07/06(木) 19:17:21.49ID:zKaQ02ia
textfield命令って、$0で取得することしかできないのでしょうか?

textfield $0,100,50,320,70,10,20,1
リファレンス通りに以上のように入力すれば機能しますが…


textfield $name,100,50,320,70,10,20,1
のように文字列変数を使用したり、

mov $0,$name
textfield $0,100,50,320,70,10,20,1
のように代入しておいたりすると機能しません

そんな事で使い物になる筈がないので
私がとんでもないみす勘違いをしているのかもしれませんが…
どなたか分かる方がいらっしゃったら助言下さるとありがたいです!
2017/07/06(木) 20:52:54.18ID:zKaQ02ia
>>527 一行目 $0で取得することしかできないのでしょうか?

「$0でしか」取得することしかできないのでしょうか?
の間違いでしたすみません
2017/07/06(木) 21:21:34.67ID:zKaQ02ia
>>527
もう少し検証したところ、
$0なり$nameなりに全角文字列が入っていると機能しないようです
$nameに"name"を代入しておくと機能しました

しかしそれを使って"なまえ"と入力するとまた機能しなくなります…
そういう仕様なんでしょうか?
今回は諦めてinputを使おうと思いますが、
何か分かる方いらっしゃればコメント下さい…!

長々と一人で失礼しました
2017/07/07(金) 13:04:29.85ID:c5kdWwsJ
これで動かない?

*define
numalias name,100
game
*start
mov $name,"あいうえお"
textfield $name,100,50,320,70,10,20,1
$name
click
end
2017/07/07(金) 19:06:54.52ID:ll7Gp+TB
>>530
返信ありがとうございます!
頂いたスクリプトのみで動かすと機能しました!
しかし自分のに組み込むと駄目なので検証してみたところ
btndown 1 が機能している事が原因だと判明いたしました!

クリックで飛んだ先でtextfield命令があるので、
そのせいでマウスを押し続けている間はテキストフィールドが開いているが
指を離すと消えてしまうという状態になっていました

飛んだ先でbtndown 0を入れてもclickなりを挟まないと解除はできないようなので
btndownを諦めるか何かをクリックさせるかで解決できそうです

確実に動くスクリプトを頂いた事で、色々検証できました!
本当にありがとうございました
2017/07/07(金) 19:14:18.67ID:ll7Gp+TB
連投すみません
clickさせなくてもprintを挟めば大丈夫でした
解決しました、ありがとうございました!
2017/10/18(水) 09:38:49.19ID:r1NFbPlC
function NSCOM_print()
local n=NSPopInt()
if(n==1)then
NSUpdate()
else
NSExec('_print '..n)
end
end
NSExec('luasub print')

ひょっとしてprint 1ならNSUpdateに投げる的な分岐作った方がluasubなしの_print 1直接呼ぶより僅かに動作早い?
2017/10/19(木) 22:24:45.45ID:26ONJpRU
print 1よりNSUpdate()の方が速いか?って言う意味なら
有意な差はないんじゃない?

--system.lua
function NSCOM_invalidate()
NSInvalidate(0,0,639,479)
end
function NSCOM_update()
NSUpdate()
end
2017/10/19(木) 22:27:02.63ID:26ONJpRU
;00.txt
*define
luasub invalidate
luasub update
game

*start
setwindow 8,16,22,23,22,22,0,2,20,1,1,#999999,0,0,639,479
lsp 10,":c;>640,480,#238c82",0,0,128
lsp 11,":c;>640,480,#234d8c",0,0,255
print 1
クリックしてね
\
3回計測しています
時間かかるので、そのままでお待ちください…
for %100=1 to 3
mov $0,"*update0"
gosub *test
mov %10,%0
mov $0,"*update1"
gosub *test
mov %11,%0
mov $0,"*update2"
gosub *test
mov %12,%0
%100回目:
画面更新なし  :%10
NSUpdate:%11
Print 1 :%12
br
next
2017/10/19(木) 22:27:59.74ID:26ONJpRU
計測終了です
click
end

*test
resettimer
for %0=1 to 50
invalidate
gosub $0
next
gettimer %0
return

*update0
return

*update1
update
return

*update2
print 1
return
2017/10/20(金) 07:37:01.70ID:HX7QfCAd
ttps://ux.getuploader.com/nsc_pub/download/8
細かく試してみた。僅かにNSUpdate()呼びの方が軽くはなるみたいだけど…
その僅かな差が問題になるほど頻繁に画面更新するスクリプトならそもそもNSLuaとか使った方がよくない?
って感想かなあ 👀
Rock54: Caution(BBR-MD5:669e095291445c5e5f700f06dfd84fd2)
538名前は開発中のものです。
垢版 |
2017/11/03(金) 06:10:40.79ID:p91MeMc2
setlayerで指定する「レイヤー番号」ってそれ自体はスプライト番号とはまったく別枠なの?
lsp 10,"*1"
と書いて初めてスプライトと結び付く?
十年以上勘違いしてたぜ……
2017/11/04(土) 00:16:47.85ID:5V+lm//F
>setlayerで指定する「レイヤー番号」ってそれ自体はスプライト番号とはまったく別枠なの?
Yes
レイヤ番号とは、プラグイン(.dll)の登録番号です
レイヤプラグインは32個まで登録できます(0-31)

>lsp 10,"*1"
>と書いて初めてスプライトと結び付く?
Yes
プラグインのDraw()が呼び出されるようになります

たとえば
setlayer 1,30,"foo.dll"
lsp 10,"*1"
とすると

NScripterは画面更新時に
スプライト10番を描画するタイミングで
foo.dllのDraw()を呼び出します
foo.dllのDraw()で雪を描いたり、雨を描いたり、動画のフレームを描いたりするわけです

「lsp 10,"test.png",0,0」
のようにイメージを読み込んで表示するのに対して
こうしたやり方を「動的に画像を生成する」といいます
2017/12/10(日) 19:37:29.14ID:UmUCyanG
最終バージョンのエヌスクリプターで作成したゲームを知人のパソコンで開こうとすると、立ち上がって少しで「動作を停止しました」として落ちてしまうそうです。
自分の環境win7のパソコン二台で試しましたが問題なく進みます。
知人のパソコンは8のようなのですが、ファイルの共有のプロパティに問題があるのではという意見を受け、
手元で確認したところ互換性にチェックを入れる項目がありました。
が、試しに開いた他ソフトのプロパティには存在する「セキュリティ」という項目もそれらしく見えたのですが
エヌスクリプターのエンジンのプロパティにはそれが含まれていません。
知人に何度も試してもらうのも申し訳なく、共有の問題が本当に原因なのか、悩んでいます。
グーグルでも「落ちるときは最終バージョンのエンジンを使って」とまでしか言及が見つからず途方に暮れております。
似たような状況に陥った方はいらっしゃらないでしょうか?またこれと思われる原因は他にありますでしょうか?
2017/12/11(月) 23:27:41.25ID:O6qCUX1D
「Windows 動作を停止しました」でググるとNScripter以外でも検索に引っかかるね
Vista以降で極たまに発生することがあるみたい
たぶん、Windowsのよく分からん不具合の一つだと思う

OSをリカバリーすると改善したっていう書き込み見たけど
ちょっと試すのは面倒くさいよね…
2017/12/12(火) 09:25:05.11ID:yJi9OCvU
>>540
自分もwin8.1で、いろんな所のNスク製ゲームやってるけど落ちた事はないよ
一応、互換性は右クリック→互換性のトラブルシューティングで変更できるみたい
もう試してたらゴメン
2017/12/12(火) 12:35:12.70ID:sSgfdsGT
>>540 >>541 >>542
配布したゲームのプレイヤーの何人かからWin8以降の環境でゲームを起動したら
上手く動作しなかったという連絡もらったけど
その後OSを再起動したら問題なく動いたらしい
544名前は開発中のものです。
垢版 |
2017/12/12(火) 12:37:07.72ID:sSgfdsGT
コーディングが悪いんだろうけどパラメータに応じて分岐する馬鹿みたいな量のif文を書いてしまっているので
switch命令欲しい
2017/12/12(火) 23:55:16.45ID:w7ET5Fhl
>>544
tablegoto使うかtablegosub作って、switchの代用にするのもありかも
tablegosubはNScrでも作れるけど、制御文多用するならLuaの方がやりやすいかも

--system.lua
NL_dofile("sample.lua")

function NSCOM_tablegosub()
local t = NSPopStr()
NSPopComma()
local num = NSPopInt()
_G[t][num]()
end

--sample.lua
--パラメーター分岐による処理の中身
--テーブルを用意して、処理を記述していく
sample = {}
sample[1] = function()
NSOkBox("1","sample")
end
sample[2] = function()
NSOkBox("2","sample")
end
sample[15] = function()
NSOkBox("15","sample")
end
2017/12/12(火) 23:55:56.15ID:w7ET5Fhl
;00.txt
*define
luasub tablegosub
game
*start
inputnum %0,"数値を入力して下さい(1,2,15)",160,96,64,24

;パラメーターによる分岐が一応実現できる
;tablegosub (Luaの)テーブル名,パラメーター
tablegosub "sample",%0

end
2017/12/13(水) 12:12:03.31ID:GSr2gHnf
>>543.541.542
再起動とソフトの入れ直しで解決したようです 手元で現象が確認できずあくまでも「したようだ」とのことなのがもどかしいですが
ありがとうございました
2017/12/14(木) 23:50:07.80ID:oLSFdB/z
>>545-546
tablegoto命令の存在を知らなかった…
ありがとう!Lua難しそうだけどやっぱり使えないと駄目だなあ
2017/12/15(金) 22:13:00.59ID:QOTdCGH1
蛇足かもしれんけど、NScrでtablegosub作るとこんな感じになるよ

使い方:
tablegosub "*label_",10とすると
*label_10にgosubする

パラメーターが負の数の場合、正負反転して頭に"M"が付く
tablegosub "*label_",-15だと
*label_M15にgosubする

パラメーターに合致するラベルがない場合、
ラベル+"defalut"にgosubする

;00.txt
*define
defsub tablegosub
game
*start
inputnum %0,"数値を入力して下さい",160,96,64,24

tablegosub "*sample_",%0

end
2017/12/15(金) 22:13:52.38ID:QOTdCGH1
*tablegosub
;[%0][$0,$1]を使用
getparam $0,%0
if %0>=0 itoa $1,%0
if %0<0 mul %0,-1:itoa $1,%0:mov $1,"M"+$1
mov $1,$0+$1
labelexist %0,$1
if %0==0 mov $1,$0+"default"
gosub $1
return
2017/12/15(金) 22:14:32.14ID:QOTdCGH1
;テーブルの処理
*sample_0
mesbox "0","sample"
return
*sample_1
mesbox "1","sample"
return
*sample_2
mesbox "2","sample"
return
*sample_14
mesbox "14","sample"
return
*sample_M1;-1
mesbox "-1","sample"
return
*sample_M2;-2
mesbox "-2","sample"
return
*sample_M99;-99
mesbox "-99","sample"
return
*sample_default
mesbox "default","sample"
return
552名前は開発中のものです。
垢版 |
2017/12/16(土) 23:10:17.17ID:82GyQIvB
>>549-551
すごく詳しいサンプルありがとうございます
これを参考に今日明日がんばってみます
553名前は開発中のものです。
垢版 |
2017/12/31(日) 18:29:03.90ID:/rN76OKL
簡単にお金が稼げる方法興味ある人だけ見てください。

グーグル検索⇒『来島のモノノリウエ』

3YM4IMJTW8
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。