Hatena::ブログ(Diary)

永字八法 RSSフィード Twitter

 | 

2009-09-30 Wednesday

2009-09-29


Powered by twtr2src

グラデーションスクエア2の続き。

グラデーションスクエア2 - 永字八法の続き。
http://www.eiji8pou.pics/download/gradsquare2_20090929.zip
NScripterの側から、ある程度の操作ができるようにしてみました。

導入

まず、「gradsquare2.lua」が必須です。これを、「system.lua」の中から呼びだす必要があります。以下、system.lua記述すべき内容。

--system.lua

math.randomseed(os.time())

NL_dofile("gradsquare2.lua")

NSExec('luasub animestart')
function NSCOM_animestart()
	NSLuaAnimationMode(true)
end

NSExec('luasub animestop')
function NSCOM_animestop()
	NSLuaAnimationMode(false)
end

NSExec('luasub animeinterval')
function NSCOM_animeinterval()
	NSLuaAnimationInterval(NSPopInt())
end

NSExec('luacall animation')
function NSCALL_animation()
	gradsquare2.all_action()
	return true
end

「gradsquare2.lua」を同じフォルダに置きます

このsystem.luaの使い方

animestart ; アニメーションをスタートします。
animestop ; アニメーションをストップさせます。ただし、表示されているものをどうこうはしません。明示的に消す必要があります。
animeinterval 25 ; アニメーションの間隔を決めます。引数の数値と同じミリ秒間隔で一コマずつ動かしていきます。

ちなみに25ミリ秒は、秒間40コマ。40フレームと呼んでもいいでしょう。あんまり細かくしすぎても処理が重くなります
今回のサンプルのような処理ならば、40ミリ秒(秒間25フレーム)や60ミリ秒(秒間約16フレーム)でもいいかも知れません。これぐらいでも、アニメと同じ程度の処理速度になります

NScripter側の処理

; gradsquare (スプライト番号),(幅),(高さ),(赤要素の変化係数),(青要素の変化係数),(緑要素の変化係数)
gradsquare 100,400,300,3,5,7 ; こんな感じで。
; 第一引数で指定したスプライト番号をグラデーションアニメする四角にします。
; 第二、第三引数で大きさを指定できます。
; 第四引数以降は、変化係数です。大きくすればするほど、変化速度が遅くなります。

; gradamsp (スプライト番号),(新しいx座標),(新しいy座標),(新しいアルファ値)
gradamsp 100,400,0
; amspのグラデーション版です。通常のamspでもエラーは出ませんが、有効ではありません。
; gradsquareで使っていないスプライト番号を指定すると、エラーになります。
; 第四引数は省略できます。

; gradvsp (スプライト番号),(表示するなら1, 表示しないなら0)
gradvsp 100,0
; vspのグラデーション版です。通常のvspでもエラーは出ませんが、有効ではありません。
; gradsquareで使っていないスプライト番号を指定すると、エラーになります。

; gradcsp (スプライト番号)
gradcsp 100
; cspのグラデーション版です。通常のcspでもエラーは出ませんが、有効ではありません。
; gradsquareで使っていないスプライト番号を指定すると、エラーになります。
; -1指定は有効です。ただし、gradsquareで宣言したものだけです。

アニメーションをやめる方法は、gradcsp、gradvsp、animestopなどを使い分けてください。

細かい注意点

塗りつぶし長方形システムを使っているので、その制限を受けます
たとえば、指定した幅が、(この場合)32の倍数になっていないときは、余りの部分が真っ黒になります
幅が640、320、800の時はこれは問題になりませんが、400の時には、右側に16ドットの黒い帯が発生してしまいます
また、gradsquareはセーブされません。gradsquareをしている最中セーブし、再びロードした際には、gradsquareの設定はなくなっています
loadgosubを使って、再現するようにしてください。animestart()を忘れずに。

思いついた小技

複数のgradsquareを作り、それぞれを半透明にして重ね合わせます。(いずれも色の変化度合はずらしておきます)そうすると、波打つようなグラデーションが観察できます

既知のバグ

時間グラデーションさせていると、数値がオーバーフローを起こす可能性があります
多分、9日以上でエラー出すんじゃないかなあ。そこまでやるとは思わないけど。

2009-09-29


Powered by twtr2src

グラデーションスクエア2の続き。

グラデーションスクエア2 - 永字八法の続き。
http://www.eiji8pou.pics/download/gradsquare2_20090929.zip
NScripterの側から、ある程度の操作ができるようにしてみました。

導入

まず、「gradsquare2.lua」が必須です。これを、「system.lua」の中から呼びだす必要があります。以下、system.lua記述すべき内容。

--system.lua

math.randomseed(os.time())

NL_dofile("gradsquare2.lua")

NSExec('luasub animestart')
function NSCOM_animestart()
	NSLuaAnimationMode(true)
end

NSExec('luasub animestop')
function NSCOM_animestop()
	NSLuaAnimationMode(false)
end

NSExec('luasub animeinterval')
function NSCOM_animeinterval()
	NSLuaAnimationInterval(NSPopInt())
end

NSExec('luacall animation')
function NSCALL_animation()
	gradsquare2.all_action()
	return true
end

「gradsquare2.lua」を同じフォルダに置きます

このsystem.luaの使い方

animestart ; アニメーションをスタートします。
animestop ; アニメーションをストップさせます。ただし、表示されているものをどうこうはしません。明示的に消す必要があります。
animeinterval 25 ; アニメーションの間隔を決めます。引数の数値と同じミリ秒間隔で一コマずつ動かしていきます。

ちなみに25ミリ秒は、秒間40コマ。40フレームと呼んでもいいでしょう。あんまり細かくしすぎても処理が重くなります
今回のサンプルのような処理ならば、40ミリ秒(秒間25フレーム)や60ミリ秒(秒間約16フレーム)でもいいかも知れません。これぐらいでも、アニメと同じ程度の処理速度になります

NScripter側の処理

; gradsquare (スプライト番号),(幅),(高さ),(赤要素の変化係数),(青要素の変化係数),(緑要素の変化係数)
gradsquare 100,400,300,3,5,7 ; こんな感じで。
; 第一引数で指定したスプライト番号をグラデーションアニメする四角にします。
; 第二、第三引数で大きさを指定できます。
; 第四引数以降は、変化係数です。大きくすればするほど、変化速度が遅くなります。

; gradamsp (スプライト番号),(新しいx座標),(新しいy座標),(新しいアルファ値)
gradamsp 100,400,0
; amspのグラデーション版です。通常のamspでもエラーは出ませんが、有効ではありません。
; gradsquareで使っていないスプライト番号を指定すると、エラーになります。
; 第四引数は省略できます。

; gradvsp (スプライト番号),(表示するなら1, 表示しないなら0)
gradvsp 100,0
; vspのグラデーション版です。通常のvspでもエラーは出ませんが、有効ではありません。
; gradsquareで使っていないスプライト番号を指定すると、エラーになります。

; gradcsp (スプライト番号)
gradcsp 100
; cspのグラデーション版です。通常のcspでもエラーは出ませんが、有効ではありません。
; gradsquareで使っていないスプライト番号を指定すると、エラーになります。
; -1指定は有効です。ただし、gradsquareで宣言したものだけです。

アニメーションをやめる方法は、gradcsp、gradvsp、animestopなどを使い分けてください。

細かい注意点

塗りつぶし長方形システムを使っているので、その制限を受けます
たとえば、指定した幅が、(この場合)32の倍数になっていないときは、余りの部分が真っ黒になります
幅が640、320、800の時はこれは問題になりませんが、400の時には、右側に16ドットの黒い帯が発生してしまいます
また、gradsquareはセーブされません。gradsquareをしている最中セーブし、再びロードした際には、gradsquareの設定はなくなっています
loadgosubを使って、再現するようにしてください。animestart()を忘れずに。

思いついた小技

複数のgradsquareを作り、それぞれを半透明にして重ね合わせます。(いずれも色の変化度合はずらしておきます)そうすると、波打つようなグラデーションが観察できます

既知のバグ

時間グラデーションさせていると、数値がオーバーフローを起こす可能性があります
多分、9日以上でエラー出すんじゃないかなあ。そこまでやるとは思わないけど。

2009-09-29


Powered by twtr2src

グラデーションスクエア2の続き。

グラデーションスクエア2 - 永字八法の続き。
http://www.eiji8pou.net/download/gradsquare2_20090929.zip
NScripterの側から、ある程度の操作ができるようにしてみました。

導入

まず、「gradsquare2.lua」が必須です。これを、「system.lua」の中から呼びだす必要があります。以下、system.lua記述すべき内容。

--system.lua

math.randomseed(os.time())

NL_dofile("gradsquare2.lua")

NSExec('luasub animestart')
function NSCOM_animestart()
	NSLuaAnimationMode(true)
end

NSExec('luasub animestop')
function NSCOM_animestop()
	NSLuaAnimationMode(false)
end

NSExec('luasub animeinterval')
function NSCOM_animeinterval()
	NSLuaAnimationInterval(NSPopInt())
end

NSExec('luacall animation')
function NSCALL_animation()
	gradsquare2.all_action()
	return true
end

「gradsquare2.lua」を同じフォルダに置きます

このsystem.luaの使い方

animestart ; アニメーションをスタートします。
animestop ; アニメーションをストップさせます。ただし、表示されているものをどうこうはしません。明示的に消す必要があります。
animeinterval 25 ; アニメーションの間隔を決めます。引数の数値と同じミリ秒間隔で一コマずつ動かしていきます。

ちなみに25ミリ秒は、秒間40コマ。40フレームと呼んでもいいでしょう。あんまり細かくしすぎても処理が重くなります
今回のサンプルのような処理ならば、40ミリ秒(秒間25フレーム)や60ミリ秒(秒間約16フレーム)でもいいかも知れません。これぐらいでも、アニメと同じ程度の処理速度になります

NScripter側の処理

; gradsquare (スプライト番号),(幅),(高さ),(赤要素の変化係数),(青要素の変化係数),(緑要素の変化係数)
gradsquare 100,400,300,3,5,7 ; こんな感じで。
; 第一引数で指定したスプライト番号をグラデーションアニメする四角にします。
; 第二、第三引数で大きさを指定できます。
; 第四引数以降は、変化係数です。大きくすればするほど、変化速度が遅くなります。

; gradamsp (スプライト番号),(新しいx座標),(新しいy座標),(新しいアルファ値)
gradamsp 100,400,0
; amspのグラデーション版です。通常のamspでもエラーは出ませんが、有効ではありません。
; gradsquareで使っていないスプライト番号を指定すると、エラーになります。
; 第四引数は省略できます。

; gradvsp (スプライト番号),(表示するなら1, 表示しないなら0)
gradvsp 100,0
; vspのグラデーション版です。通常のvspでもエラーは出ませんが、有効ではありません。
; gradsquareで使っていないスプライト番号を指定すると、エラーになります。

; gradcsp (スプライト番号)
gradcsp 100
; cspのグラデーション版です。通常のcspでもエラーは出ませんが、有効ではありません。
; gradsquareで使っていないスプライト番号を指定すると、エラーになります。
; -1指定は有効です。ただし、gradsquareで宣言したものだけです。

アニメーションをやめる方法は、gradcsp、gradvsp、animestopなどを使い分けてください。

細かい注意点

塗りつぶし長方形システムを使っているので、その制限を受けます
たとえば、指定した幅が、(この場合)32の倍数になっていないときは、余りの部分が真っ黒になります
幅が640、320、800の時はこれは問題になりませんが、400の時には、右側に16ドットの黒い帯が発生してしまいます
また、gradsquareはセーブされません。gradsquareをしている最中セーブし、再びロードした際には、gradsquareの設定はなくなっています
loadgosubを使って、再現するようにしてください。animestart()を忘れずに。

思いついた小技

複数のgradsquareを作り、それぞれを半透明にして重ね合わせます。(いずれも色の変化度合はずらしておきます)そうすると、波打つようなグラデーションが観察できます

既知のバグ

時間グラデーションさせていると、数値がオーバーフローを起こす可能性があります
多分、9日以上でエラー出すんじゃないかなあ。そこまでやるとは思わないけど。

2009-09-29 Tuesday

2009-09-28


Powered by twtr2src

2009-09-28


Powered by twtr2src

2009-09-28


Powered by twtr2src

2009-09-28 Monday

2009-09-27


Powered by twtr2src

グラデーションスクエア2

グラデーションスクエア - 永字八法の続き。

右から左、あるいは左から右に色が変化するなら、もっと少ないメモリーで済む……はず。

実装してみました。
http://www.eiji8pou.pics/download/gradsquare2.zip
画像は、グッスマセイバー・リリィ壁紙を加工したものです。
あんまりよくわからないけれども、画面右端から色が変わり始め、最後に左端の色が変わるようになっています。
色は32色です。

反省

  • 32色しか使えない、と言うのはちと致命的かも。色数を増やす工夫をしたい。
  • 鎧の部分だけうまく半透明指定できれば、かなり奇麗になるんじゃないかな。機械的になんとかならないものなのか。

参考資料

塗りつぶし長方形 - Atelier de Muguet 制作記録
塗りつぶし長方形は、32色しか使えない、か。

2009-09-27


Powered by twtr2src

グラデーションスクエア2

グラデーションスクエア - 永字八法の続き。

右から左、あるいは左から右に色が変化するなら、もっと少ないメモリーで済む……はず。

実装してみました。
http://www.eiji8pou.pics/download/gradsquare2.zip
画像は、グッスマセイバー・リリィ壁紙を加工したものです。
あんまりよくわからないけれども、画面右端から色が変わり始め、最後に左端の色が変わるようになっています。
色は32色です。

反省

  • 32色しか使えない、と言うのはちと致命的かも。色数を増やす工夫をしたい。
  • 鎧の部分だけうまく半透明指定できれば、かなり奇麗になるんじゃないかな。機械的になんとかならないものなのか。

参考資料

塗りつぶし長方形 - Atelier de Muguet 制作記録
塗りつぶし長方形は、32色しか使えない、か。

2009-09-27


Powered by twtr2src

グラデーションスクエア2

グラデーションスクエア - 永字八法の続き。

右から左、あるいは左から右に色が変化するなら、もっと少ないメモリーで済む……はず。

実装してみました。
http://www.eiji8pou.net/download/gradsquare2.zip
画像は、グッスマセイバー・リリィ壁紙を加工したものです。
あんまりよくわからないけれども、画面右端から色が変わり始め、最後に左端の色が変わるようになっています。
色は32色です。

反省

  • 32色しか使えない、と言うのはちと致命的かも。色数を増やす工夫をしたい。
  • 鎧の部分だけうまく半透明指定できれば、かなり奇麗になるんじゃないかな。機械的になんとかならないものなのか。

参考資料

塗りつぶし長方形 - Atelier de Muguet 制作記録
塗りつぶし長方形は、32色しか使えない、か。

2009-09-27 Sunday

グラデーションスクエア

画像が気にいったのでアンビエント的なものにしてみた。 - 永字八法の続き。

これは背景画像の下にRBGを変化させたレイヤーを重ねてる?

だいたいそんな感じです。より正確に、面白くないように言うと、二つのテクニックを使ってます
1.通常の画像マスク画像として、色の白い部分を透過させた影絵を作る。(「lsp 10,":mimage.png;>800,600,#000000",0,0」の部分)
2.1で作った画像の奥に、ファイル長方形を、定期的に色を変えながら表示する。
これによって、このサンプルの「空の色がじんわり変わる映像」を作っています。(さらに詳しく言うならば、色の変化のさせかたにcosを使用することで、よりじんわり感を以下略
で、この機能をだいたいLuaに置き換えた物を作りました
http://www.eiji8pou.pics/download/gradsquare.zip
ついでに、click待ち中にも変化できるように対応しました。

解説

まず、gradsquare.luaを、NL_dofile("gradsquare.lua")で読み込みます。これで、色が変化する長方形が使えるようになります

square = gradsquare.new(sp, width, height)

これで、色が変化する長方形が一つできました。
引数は、spが使うスプライト番号、width, heightが長方形サイズです。引数なしだと、それぞれ、100, 640, 480がデフォルトの値として採用されます。800*600で背景に使いたいなら、900, 800, 600くらいがいいんではないでしょうか。
サンプルでは省略していますが、この後さらに三つの正数を指定できます。三つの正数はそれぞれRGBの変化の速さで、数値が大きいほどゆっくりになりますデフォルトでは5, 7, 11採用されます
こうやってできたオブジェクトsquareに対し、action()メソッドを実行することで、ちょっとずつ色が変わっていきます

square:action()

ちなみに引数にtrueを与えると、ついでにNSUpdate()も実行します。普通必要ないと思います
さて、NSLuaでは、define節にNSCALL animationを宣言することで、スプライトセルアニメと同じタイミング(多分)で、Lua側のNSCALL_animation()が呼ばれます(つまり普通なら毎秒何十回も、と言うこと)。
そのNSCALL_animation()内にsquare:action()を記述すると、定期的に短期間に何度も実行されることになります

function NSCALL_animation()
	square:action() -- 普通はtrueは要らない。
	return true -- ここで自動的にNSUpdate()が呼ばれるので。
end

このようにして、「じんわり変化」が実装されます

その他

squareオブジェクトは、色々オプションをいじることでさらに細かく操作できます。以下にそのオプションを列挙します。
=で指定した値はデフォルト値です。

square.sp = 100 -- スプライト番号
square.x = 0 -- スプライトのx座標
square.y = 0 -- スプライトのy座標
square.alpha = 255 -- スプライトの不透過度
square.visible = true -- スプライトを表示するかしないか
square.speed = 0.04 -- 全体的な色の変化速度。正の数。0に近いほどゆっくり。

応用

square.visible = false としておいて、その上で定期的にsquare:action()を実行し続けたならば。
そうやって作られた画像をdrawsp系命令で扱うことができる。うまく立ち絵の一部に変形して貼り付けてれば、呪われた貴公子ゲイナーの鎧が表現できるかも。わかりにくい表現だ。

今後の展開

「空の上の方から徐々に色が変わっていくほんまもんのグラデーションやったらかっこええやろなあ」
理論上できますけど、かなりの量のメモリーを食いますね。
右から左、あるいは左から右に色が変化するなら、もっと少ないメモリーで済む……はず。

ゲスパーしてみる

http://xxvoiceactors.seesaa.net/article/128470523.html
ここ最近、ここからリファラがある。当然ながら、このページにはうちへのリンクはない。少なくとも、ざらっとソースを見る限りは。
しかし、何度も来る。
で、こっちも考えたのだが、多分、こういうことだと思う。
古いIE系を使うジョン・ドーがいて、この人物がリンクからブックマーク当方に飛んでくる。しかし、古いIE系の駄目なアレで、リンク先がリファラとしてこちらに登録されたのではないか。で、それを怪しんだ俺がリンク先にアクセス。あちらの管理人アクセス解析みて逆にこちらにアクセス。それでリファラがお互いに登録されたのではないか……と思うのだがどうか。

2009-09-26


Powered by twtr2src

グラデーションスクエア

画像が気にいったのでアンビエント的なものにしてみた。 - 永字八法の続き。

これは背景画像の下にRBGを変化させたレイヤーを重ねてる?

だいたいそんな感じです。より正確に、面白くないように言うと、二つのテクニックを使ってます
1.通常の画像マスク画像として、色の白い部分を透過させた影絵を作る。(「lsp 10,":mimage.png;>800,600,#000000",0,0」の部分)
2.1で作った画像の奥に、ファイル長方形を、定期的に色を変えながら表示する。
これによって、このサンプルの「空の色がじんわり変わる映像」を作っています。(さらに詳しく言うならば、色の変化のさせかたにcosを使用することで、よりじんわり感を以下略
で、この機能をだいたいLuaに置き換えた物を作りました
http://www.eiji8pou.pics/download/gradsquare.zip
ついでに、click待ち中にも変化できるように対応しました。

解説

まず、gradsquare.luaを、NL_dofile("gradsquare.lua")で読み込みます。これで、色が変化する長方形が使えるようになります

square = gradsquare.new(sp, width, height)

これで、色が変化する長方形が一つできました。
引数は、spが使うスプライト番号、width, heightが長方形サイズです。引数なしだと、それぞれ、100, 640, 480がデフォルトの値として採用されます。800*600で背景に使いたいなら、900, 800, 600くらいがいいんではないでしょうか。
サンプルでは省略していますが、この後さらに三つの正数を指定できます。三つの正数はそれぞれRGBの変化の速さで、数値が大きいほどゆっくりになりますデフォルトでは5, 7, 11採用されます
こうやってできたオブジェクトsquareに対し、action()メソッドを実行することで、ちょっとずつ色が変わっていきます

square:action()

ちなみに引数にtrueを与えると、ついでにNSUpdate()も実行します。普通必要ないと思います
さて、NSLuaでは、define節にNSCALL animationを宣言することで、スプライトセルアニメと同じタイミング(多分)で、Lua側のNSCALL_animation()が呼ばれます(つまり普通なら毎秒何十回も、と言うこと)。
そのNSCALL_animation()内にsquare:action()を記述すると、定期的に短期間に何度も実行されることになります

function NSCALL_animation()
	square:action() -- 普通はtrueは要らない。
	return true -- ここで自動的にNSUpdate()が呼ばれるので。
end

このようにして、「じんわり変化」が実装されます

その他

squareオブジェクトは、色々オプションをいじることでさらに細かく操作できます。以下にそのオプションを列挙します。
=で指定した値はデフォルト値です。

square.sp = 100 -- スプライト番号
square.x = 0 -- スプライトのx座標
square.y = 0 -- スプライトのy座標
square.alpha = 255 -- スプライトの不透過度
square.visible = true -- スプライトを表示するかしないか
square.speed = 0.04 -- 全体的な色の変化速度。正の数。0に近いほどゆっくり。

応用

square.visible = false としておいて、その上で定期的にsquare:action()を実行し続けたならば。
そうやって作られた画像をdrawsp系命令で扱うことができる。うまく立ち絵の一部に変形して貼り付けてれば、呪われた貴公子ゲイナーの鎧が表現できるかも。わかりにくい表現だ。

今後の展開

「空の上の方から徐々に色が変わっていくほんまもんのグラデーションやったらかっこええやろなあ」
理論上できますけど、かなりの量のメモリーを食いますね。
右から左、あるいは左から右に色が変化するなら、もっと少ないメモリーで済む……はず。

ゲスパーしてみる

http://xxvoiceactors.seesaa.net/article/128470523.html
ここ最近、ここからリファラがある。当然ながら、このページにはうちへのリンクはない。少なくとも、ざらっとソースを見る限りは。
しかし、何度も来る。
で、こっちも考えたのだが、多分、こういうことだと思う。
古いIE系を使うジョン・ドーがいて、この人物がリンクからブックマーク当方に飛んでくる。しかし、古いIE系の駄目なアレで、リンク先がリファラとしてこちらに登録されたのではないか。で、それを怪しんだ俺がリンク先にアクセス。あちらの管理人アクセス解析みて逆にこちらにアクセス。それでリファラがお互いに登録されたのではないか……と思うのだがどうか。

2009-09-26


Powered by twtr2src

グラデーションスクエア

画像が気にいったのでアンビエント的なものにしてみた。 - 永字八法の続き。

これは背景画像の下にRBGを変化させたレイヤーを重ねてる?

だいたいそんな感じです。より正確に、面白くないように言うと、二つのテクニックを使ってます
1.通常の画像マスク画像として、色の白い部分を透過させた影絵を作る。(「lsp 10,":mimage.png;>800,600,#000000",0,0」の部分)
2.1で作った画像の奥に、ファイル長方形を、定期的に色を変えながら表示する。
これによって、このサンプルの「空の色がじんわり変わる映像」を作っています。(さらに詳しく言うならば、色の変化のさせかたにcosを使用することで、よりじんわり感を以下略
で、この機能をだいたいLuaに置き換えた物を作りました
http://www.eiji8pou.net/download/gradsquare.zip
ついでに、click待ち中にも変化できるように対応しました。

解説

まず、gradsquare.luaを、NL_dofile("gradsquare.lua")で読み込みます。これで、色が変化する長方形が使えるようになります

square = gradsquare.new(sp, width, height)

これで、色が変化する長方形が一つできました。
引数は、spが使うスプライト番号、width, heightが長方形サイズです。引数なしだと、それぞれ、100, 640, 480がデフォルトの値として採用されます。800*600で背景に使いたいなら、900, 800, 600くらいがいいんではないでしょうか。
サンプルでは省略していますが、この後さらに三つの正数を指定できます。三つの正数はそれぞれRGBの変化の速さで、数値が大きいほどゆっくりになりますデフォルトでは5, 7, 11採用されます
こうやってできたオブジェクトsquareに対し、action()メソッドを実行することで、ちょっとずつ色が変わっていきます

square:action()

ちなみに引数にtrueを与えると、ついでにNSUpdate()も実行します。普通必要ないと思います
さて、NSLuaでは、define節にNSCALL animationを宣言することで、スプライトセルアニメと同じタイミング(多分)で、Lua側のNSCALL_animation()が呼ばれます(つまり普通なら毎秒何十回も、と言うこと)。
そのNSCALL_animation()内にsquare:action()を記述すると、定期的に短期間に何度も実行されることになります

function NSCALL_animation()
	square:action() -- 普通はtrueは要らない。
	return true -- ここで自動的にNSUpdate()が呼ばれるので。
end

このようにして、「じんわり変化」が実装されます

その他

squareオブジェクトは、色々オプションをいじることでさらに細かく操作できます。以下にそのオプションを列挙します。
=で指定した値はデフォルト値です。

square.sp = 100 -- スプライト番号
square.x = 0 -- スプライトのx座標
square.y = 0 -- スプライトのy座標
square.alpha = 255 -- スプライトの不透過度
square.visible = true -- スプライトを表示するかしないか
square.speed = 0.04 -- 全体的な色の変化速度。正の数。0に近いほどゆっくり。

応用

square.visible = false としておいて、その上で定期的にsquare:action()を実行し続けたならば。
そうやって作られた画像をdrawsp系命令で扱うことができる。うまく立ち絵の一部に変形して貼り付けてれば、呪われた貴公子ゲイナーの鎧が表現できるかも。わかりにくい表現だ。

今後の展開

「空の上の方から徐々に色が変わっていくほんまもんのグラデーションやったらかっこええやろなあ」
理論上できますけど、かなりの量のメモリーを食いますね。
右から左、あるいは左から右に色が変化するなら、もっと少ないメモリーで済む……はず。

ゲスパーしてみる

http://xxvoiceactors.seesaa.net/article/128470523.html
ここ最近、ここからリファラがある。当然ながら、このページにはうちへのリンクはない。少なくとも、ざらっとソースを見る限りは。
しかし、何度も来る。
で、こっちも考えたのだが、多分、こういうことだと思う。
古いIE系を使うジョン・ドーがいて、この人物がリンクからブックマーク当方に飛んでくる。しかし、古いIE系の駄目なアレで、リンク先がリファラとしてこちらに登録されたのではないか。で、それを怪しんだ俺がリンク先にアクセス。あちらの管理人アクセス解析みて逆にこちらにアクセス。それでリファラがお互いに登録されたのではないか……と思うのだがどうか。

2009-09-26


Powered by twtr2src

2009-09-26 Saturday

やってみた

2009-09-25 - 永字八法2Dマップ自動生成をやってみた。
1:きれいにばらつきすぎるため、マップはできるがうまくない。山の中に海が点々とできたりして、ノイズにしか見えない。
2:初期値をうまくおかないとだめ。それ以外はかなりうまくいく。
3:1ほどではないが、きれいにばらけすぎて不自然
やりながら思ったが、たとえば、256×256のマップ(これでもドラクエ2並だっけか。)を作るとしたら、それを16×16の小エリア256に分け、その小エリアの中では、2種類の地形のどちらかしかないと定めた方が、ましかも知れない。
「海ベース境界以外の部分に平地を膨らませる」→「島」
「山ベース境界以外の部分に水を膨らませる」→「山上湖」
「海と砂を左右から同時に膨らませる」→「海岸線」
こんな感じでやっていくといいかも知れない。

2009-09-25


Powered by twtr2src

やってみた

2009-09-25 - 永字八法2Dマップ自動生成をやってみた。
1:きれいにばらつきすぎるため、マップはできるがうまくない。山の中に海が点々とできたりして、ノイズにしか見えない。
2:初期値をうまくおかないとだめ。それ以外はかなりうまくいく。
3:1ほどではないが、きれいにばらけすぎて不自然
やりながら思ったが、たとえば、256×256のマップ(これでもドラクエ2並だっけか。)を作るとしたら、それを16×16の小エリア256に分け、その小エリアの中では、2種類の地形のどちらかしかないと定めた方が、ましかも知れない。
「海ベース境界以外の部分に平地を膨らませる」→「島」
「山ベース境界以外の部分に水を膨らませる」→「山上湖」
「海と砂を左右から同時に膨らませる」→「海岸線」
こんな感じでやっていくといいかも知れない。

2009-09-25


Powered by twtr2src

やってみた

2009-09-25 - 永字八法2Dマップ自動生成をやってみた。
1:きれいにばらつきすぎるため、マップはできるがうまくない。山の中に海が点々とできたりして、ノイズにしか見えない。
2:初期値をうまくおかないとだめ。それ以外はかなりうまくいく。
3:1ほどではないが、きれいにばらけすぎて不自然
やりながら思ったが、たとえば、256×256のマップ(これでもドラクエ2並だっけか。)を作るとしたら、それを16×16の小エリア256に分け、その小エリアの中では、2種類の地形のどちらかしかないと定めた方が、ましかも知れない。
「海ベース境界以外の部分に平地を膨らませる」→「島」
「山ベース境界以外の部分に水を膨らませる」→「山上湖」
「海と砂を左右から同時に膨らませる」→「海岸線」
こんな感じでやっていくといいかも知れない。

2009-09-25


Powered by twtr2src

2009-09-25 Friday

2009-09-24


Powered by twtr2src

2009-09-24


Powered by twtr2src

2009-09-24


Powered by twtr2src

2009-09-24 Thursday

2009-09-23

  • 10:02  朝食:ご飯一杯、野菜炒め半分、チキンステーキ半分、牛乳一杯。
  • 10:02  牛乳だと思っていたものが実は牛乳じゃなかった。加工乳ってなんだ?
  • 20:29  夕食:ご飯、味噌汁一杯。煮魚。野菜の煮付け。
  • 20:29  アクエリアス 350ml缶
  • 21:50  Gと一緒にシャワー浴びてた。しにてい。
  • 23:24  Luaで無理やりbitmapを読み取れるようにしたが、速度がアレで役に立たんなあ。


Powered by twtr2src

2009-09-23

  • 10:02  朝食:ご飯一杯、野菜炒め半分、チキンステーキ半分、牛乳一杯。
  • 10:02  牛乳だと思っていたものが実は牛乳じゃなかった。加工乳ってなんだ?
  • 20:29  夕食:ご飯、味噌汁一杯。煮魚。野菜の煮付け。
  • 20:29  アクエリアス 350ml缶
  • 21:50  Gと一緒にシャワー浴びてた。しにてい。
  • 23:24  Luaで無理やりbitmapを読み取れるようにしたが、速度がアレで役に立たんなあ。


Powered by twtr2src

2009-09-23

  • 10:02  朝食:ご飯一杯、野菜炒め半分、チキンステーキ半分、牛乳一杯。
  • 10:02  牛乳だと思っていたものが実は牛乳じゃなかった。加工乳ってなんだ?
  • 20:29  夕食:ご飯、味噌汁一杯。煮魚。野菜の煮付け。
  • 20:29  アクエリアス 350ml缶
  • 21:50  Gと一緒にシャワー浴びてた。しにてい。
  • 23:24  Luaで無理やりbitmapを読み取れるようにしたが、速度がアレで役に立たんなあ。


Powered by twtr2src

2009-09-23 Wednesday

2009-09-22


Powered by twtr2src

2009-09-22


Powered by twtr2src

2009-09-22


Powered by twtr2src

2009-09-22 Tuesday

2009-09-21


Powered by twtr2src

2009-09-21


Powered by twtr2src

2009-09-21


Powered by twtr2src

2009-09-21 Monday

2009-09-20


Powered by twtr2src

2009-09-20


Powered by twtr2src

2009-09-20


Powered by twtr2src

2009-09-20 Sunday

2009-09-19


Powered by twtr2src

2009-09-19


Powered by twtr2src

2009-09-19


Powered by twtr2src

2009-09-19 Saturday

ほぼPure Luaで眼鏡衰弱を作ってみた。

NScripterが、system.luaだけでも動くようになった記念(?)の習作。期間限定公開。とりあえず、一週間くらい。
http://www.eiji8pou.pics/download/grasses.zip(約20mb)
容量のほとんどは画像で、しかもネットで拾ってきたものばかり。著作権者の方、何かありましたらご連絡ください。すぐに対処いたします

ゲームの内容

神経衰弱です。ひとつのカットを左右に割って二枚のカードにしています。その左右に割った正しい組み合わせを探すゲームです。
もっとも、正答率などは全然測っていません。
一回クリアーするごとに、最後に取ったカードの元絵がハードディスクダウンロードされます。いわゆる「ご褒美」です。

スクリプトで印象に残った点

  • NSLinear()使ったよー!

注意点

開発の話

作るのに要した時間の約半分が、画像の選別だったこと。眼鏡かけた女の子モザイク要らない画像90枚を集めるのは大変でした。

2009-09-18


Powered by twtr2src

ほぼPure Luaで眼鏡衰弱を作ってみた。

NScripterが、system.luaだけでも動くようになった記念(?)の習作。期間限定公開。とりあえず、一週間くらい。
http://www.eiji8pou.pics/download/grasses.zip(約20mb)
容量のほとんどは画像で、しかもネットで拾ってきたものばかり。著作権者の方、何かありましたらご連絡ください。すぐに対処いたします

ゲームの内容

神経衰弱です。ひとつのカットを左右に割って二枚のカードにしています。その左右に割った正しい組み合わせを探すゲームです。
もっとも、正答率などは全然測っていません。
一回クリアーするごとに、最後に取ったカードの元絵がハードディスクダウンロードされます。いわゆる「ご褒美」です。

スクリプトで印象に残った点

  • NSLinear()使ったよー!

注意点

開発の話

作るのに要した時間の約半分が、画像の選別だったこと。眼鏡かけた女の子モザイク要らない画像90枚を集めるのは大変でした。

2009-09-18


Powered by twtr2src

ほぼPure Luaで眼鏡衰弱を作ってみた。

NScripterが、system.luaだけでも動くようになった記念(?)の習作。期間限定公開。とりあえず、一週間くらい。
http://www.eiji8pou.net/download/grasses.zip(約20mb)
容量のほとんどは画像で、しかもネットで拾ってきたものばかり。著作権者の方、何かありましたらご連絡ください。すぐに対処いたします

ゲームの内容

神経衰弱です。ひとつのカットを左右に割って二枚のカードにしています。その左右に割った正しい組み合わせを探すゲームです。
もっとも、正答率などは全然測っていません。
一回クリアーするごとに、最後に取ったカードの元絵がハードディスクダウンロードされます。いわゆる「ご褒美」です。

スクリプトで印象に残った点

  • NSLinear()使ったよー!

注意点

開発の話

作るのに要した時間の約半分が、画像の選別だったこと。眼鏡かけた女の子モザイク要らない画像90枚を集めるのは大変でした。

2009-09-18


Powered by twtr2src

2009-09-18 Friday

2009-09-17


Powered by twtr2src

2009-09-17


Powered by twtr2src

2009-09-17


Powered by twtr2src

2009-09-17 Thursday

2009-09-16


Powered by twtr2src

2009-09-16


Powered by twtr2src

2009-09-16


Powered by twtr2src

2009-09-16 Wednesday

2009-09-15


Powered by twtr2src

2009-09-15


Powered by twtr2src

2009-09-15


Powered by twtr2src

2009-09-15 Tuesday

2009-09-14


Powered by twtr2src

2009-09-14


Powered by twtr2src

2009-09-14


Powered by twtr2src

2009-09-14 Monday

2009-09-13


Powered by twtr2src

2009-09-13


Powered by twtr2src

2009-09-13


Powered by twtr2src

2009-09-13 Sunday

NSD系のフォント

http://www.nscripter.com/nsdtest.lzhを色々試してみたけど。

残念。

  • 追記。半角文字奇数個並べても表示はおかしくならない。ブラーヴォ。

ライダー話

Hatena::Group::onlooker::2ch-Dojin - Hatena::Group::onlooker::2ch-DojinとかHatena::Group::onlooker::2ch-Dojin - Hatena::Group::onlooker::2ch-Dojinとかを見ていてふと気になったんだが、ここによく挙げられている厨の特徴に、自分が望んだ通りに他人を動かそうとする(それだけでもかなりアレではあるんだが)方法罵倒や嘲笑と言った手段を選択するのは何故なんだろうなあ、とか思った。
あんまり関係ないんだろうけど、こないだ見たライダー映画でも、ディエンドが龍騎世界の悪役ライダーたちを大ショッカーと戦わせようとして「……そんな訳で、お前らクズライダーでも何かの役に……」みたいなセリフを吐いていて、「こいつ、本気で説得とか交渉とかするつもりねーだろ」とか思ったりもした。「いや、こいつはそういう性格なんで」とかTRPGの演技厨みたいな反論も聞こえてきそうだが、しかしそういうキャラ設定他人から共感を得られるもんなんだろうか。それとも、アレが「カッコイイ」のかね。
色々と前科のあるこの俺が言うのもなんだが、ここまでコミュニケーションができない人間が、多数に見られるコンテンツの主役級に据えられたりすると、それを見る子供たちに悪影響が〜とか思わないでもない。いかんな、規制派と同じような発想かこれは。
既に年寄りの発想かも知れんが、ディエンドやディケイドみたいに尊大傍若無人なのが「カッコイイ」と言うパラダイムは、あんまり受け入れたくないんだよな。正直、倉田てつをの方がカッコイイし人間的にも尊敬できると思うんだが。
追記:塾の講師が、生徒がクレしん真似して「すれば〜」と言ったのに一瞬本気で殺意が湧いたと言う話を聞いたことがある。やっぱり行きつくところは、本人が理解しているかどうかかな。

2009-09-12


Powered by twtr2src

NSD系のフォント

http://www.nscripter.com/nsdtest.lzhを色々試してみたけど。

残念。

  • 追記。半角文字奇数個並べても表示はおかしくならない。ブラーヴォ。

ライダー話

Hatena::Group::onlooker::2ch-Dojin - Hatena::Group::onlooker::2ch-DojinとかHatena::Group::onlooker::2ch-Dojin - Hatena::Group::onlooker::2ch-Dojinとかを見ていてふと気になったんだが、ここによく挙げられている厨の特徴に、自分が望んだ通りに他人を動かそうとする(それだけでもかなりアレではあるんだが)方法罵倒や嘲笑と言った手段を選択するのは何故なんだろうなあ、とか思った。
あんまり関係ないんだろうけど、こないだ見たライダー映画でも、ディエンドが龍騎世界の悪役ライダーたちを大ショッカーと戦わせようとして「……そんな訳で、お前らクズライダーでも何かの役に……」みたいなセリフを吐いていて、「こいつ、本気で説得とか交渉とかするつもりねーだろ」とか思ったりもした。「いや、こいつはそういう性格なんで」とかTRPGの演技厨みたいな反論も聞こえてきそうだが、しかしそういうキャラ設定他人から共感を得られるもんなんだろうか。それとも、アレが「カッコイイ」のかね。
色々と前科のあるこの俺が言うのもなんだが、ここまでコミュニケーションができない人間が、多数に見られるコンテンツの主役級に据えられたりすると、それを見る子供たちに悪影響が〜とか思わないでもない。いかんな、規制派と同じような発想かこれは。
既に年寄りの発想かも知れんが、ディエンドやディケイドみたいに尊大傍若無人なのが「カッコイイ」と言うパラダイムは、あんまり受け入れたくないんだよな。正直、倉田てつをの方がカッコイイし人間的にも尊敬できると思うんだが。
追記:塾の講師が、生徒がクレしん真似して「すれば〜」と言ったのに一瞬本気で殺意が湧いたと言う話を聞いたことがある。やっぱり行きつくところは、本人が理解しているかどうかかな。

2009-09-12


Powered by twtr2src

NSD系のフォント

http://www.nscripter.com/nsdtest.lzhを色々試してみたけど。

残念。

  • 追記。半角文字奇数個並べても表示はおかしくならない。ブラーヴォ。

ライダー話

Hatena::Group::onlooker::2ch-Dojin - Hatena::Group::onlooker::2ch-DojinとかHatena::Group::onlooker::2ch-Dojin - Hatena::Group::onlooker::2ch-Dojinとかを見ていてふと気になったんだが、ここによく挙げられている厨の特徴に、自分が望んだ通りに他人を動かそうとする(それだけでもかなりアレではあるんだが)方法罵倒や嘲笑と言った手段を選択するのは何故なんだろうなあ、とか思った。
あんまり関係ないんだろうけど、こないだ見たライダー映画でも、ディエンドが龍騎世界の悪役ライダーたちを大ショッカーと戦わせようとして「……そんな訳で、お前らクズライダーでも何かの役に……」みたいなセリフを吐いていて、「こいつ、本気で説得とか交渉とかするつもりねーだろ」とか思ったりもした。「いや、こいつはそういう性格なんで」とかTRPGの演技厨みたいな反論も聞こえてきそうだが、しかしそういうキャラ設定他人から共感を得られるもんなんだろうか。それとも、アレが「カッコイイ」のかね。
色々と前科のあるこの俺が言うのもなんだが、ここまでコミュニケーションができない人間が、多数に見られるコンテンツの主役級に据えられたりすると、それを見る子供たちに悪影響が〜とか思わないでもない。いかんな、規制派と同じような発想かこれは。
既に年寄りの発想かも知れんが、ディエンドやディケイドみたいに尊大傍若無人なのが「カッコイイ」と言うパラダイムは、あんまり受け入れたくないんだよな。正直、倉田てつをの方がカッコイイし人間的にも尊敬できると思うんだが。
追記:塾の講師が、生徒がクレしん真似して「すれば〜」と言ったのに一瞬本気で殺意が湧いたと言う話を聞いたことがある。やっぱり行きつくところは、本人が理解しているかどうかかな。

2009-09-12


Powered by twtr2src

2009-09-12 Saturday

イテレータ

ipairs()を自分実装してみる。

function ipairs(table)
	if type(table) ~= "table" then return nil end
	local i = 0
	return function ()
		i = i + 1
		return i, table[i]
	end
end

このipairs()は、ちゃんと普通にforに渡せる。

2009-09-11


Powered by twtr2src

イテレータ

ipairs()を自分実装してみる。

function ipairs(table)
	if type(table) ~= "table" then return nil end
	local i = 0
	return function ()
		i = i + 1
		return i, table[i]
	end
end

このipairs()は、ちゃんと普通にforに渡せる。

2009-09-11


Powered by twtr2src

イテレータ

ipairs()を自分実装してみる。

function ipairs(table)
	if type(table) ~= "table" then return nil end
	local i = 0
	return function ()
		i = i + 1
		return i, table[i]
	end
end

このipairs()は、ちゃんと普通にforに渡せる。

2009-09-11


Powered by twtr2src

2009-09-11 Friday

9.11

2001年9月11日は何をしていましたか?
……俺は覚えてない。記録とってなくて、思い出せない。なんてこった。

思い出。

事実のみを書きます。

三日目東館で、車椅子男性を目撃。両膝と片肘から先がなく、反対の腕も下腕途中からなくなっている。複数回目撃したので、おそらく記憶違いではないと思う。
彼は、エロ同人誌サークルに並んで、列に沿って進み、自分の番が来ると見本誌を開いて、内容を確認して購入していた。

思ったこと

「彼は購入した同人誌をどのように『使用』するのだろう」
揶揄とかじゃなく、純粋に、技術的、そのように思った。

2009-09-10


Powered by twtr2src

9.11

2001年9月11日は何をしていましたか?
……俺は覚えてない。記録とってなくて、思い出せない。なんてこった。

思い出。

事実のみを書きます。

三日目東館で、車椅子男性を目撃。両膝と片肘から先がなく、反対の腕も下腕途中からなくなっている。複数回目撃したので、おそらく記憶違いではないと思う。
彼は、エロ同人誌サークルに並んで、列に沿って進み、自分の番が来ると見本誌を開いて、内容を確認して購入していた。

思ったこと

「彼は購入した同人誌をどのように『使用』するのだろう」
揶揄とかじゃなく、純粋に、技術的、そのように思った。

2009-09-10


Powered by twtr2src

9.11

2001年9月11日は何をしていましたか?
……俺は覚えてない。記録とってなくて、思い出せない。なんてこった。

思い出。

事実のみを書きます。

三日目東館で、車椅子男性を目撃。両膝と片肘から先がなく、反対の腕も下腕途中からなくなっている。複数回目撃したので、おそらく記憶違いではないと思う。
彼は、エロ同人誌サークルに並んで、列に沿って進み、自分の番が来ると見本誌を開いて、内容を確認して購入していた。

思ったこと

「彼は購入した同人誌をどのように『使用』するのだろう」
揶揄とかじゃなく、純粋に、技術的、そのように思った。

2009-09-10


Powered by twtr2src

2009-09-10 Thursday

唐突に思い出した記憶

二日目、ビッグサイトビジネスセンター原稿コピーしていた時のこと。
ピザが一人やってきて、パソコンを借りた。そして同人ソフトエロ画集)をそのパソコンで立ち上げて、なんか色々やっていた。最初ピザサークル主で、内容をカラー印刷して客に見せるサンプルにするつもりかと思っていたが、二日目の15:00を過ぎてそれもねえなと考えなおし、視界のすみで観察していると、どうやら内容をFTPだかP2Pだか知らないが、そういうのでうpしようとしているように見えた。えええええ。
この時点で著作権的に屑野郎決定だと思っていたら、しかも、なんか技術に疎いらしく、店員呼んで画面に映る二次エロ画像を指さしながら「これこれを○○したいんだけどどうすれば〜」とかたずねていた。なんかもう色々どん引きしてしまった。
コピーが終わって先に帰ったのでそのピザがどうなったのかは知らないが、しかしあれほど厚顔無恥と言う言葉の似合うピザもいないと思った次第。

2009-09-09


Powered by twtr2src

唐突に思い出した記憶

二日目、ビッグサイトビジネスセンター原稿コピーしていた時のこと。
ピザが一人やってきて、パソコンを借りた。そして同人ソフトエロ画集)をそのパソコンで立ち上げて、なんか色々やっていた。最初ピザサークル主で、内容をカラー印刷して客に見せるサンプルにするつもりかと思っていたが、二日目の15:00を過ぎてそれもねえなと考えなおし、視界のすみで観察していると、どうやら内容をFTPだかP2Pだか知らないが、そういうのでうpしようとしているように見えた。えええええ。
この時点で著作権的に屑野郎決定だと思っていたら、しかも、なんか技術に疎いらしく、店員呼んで画面に映る二次エロ画像を指さしながら「これこれを○○したいんだけどどうすれば〜」とかたずねていた。なんかもう色々どん引きしてしまった。
コピーが終わって先に帰ったのでそのピザがどうなったのかは知らないが、しかしあれほど厚顔無恥と言う言葉の似合うピザもいないと思った次第。

2009-09-09


Powered by twtr2src

唐突に思い出した記憶

二日目、ビッグサイトビジネスセンター原稿コピーしていた時のこと。
ピザが一人やってきて、パソコンを借りた。そして同人ソフトエロ画集)をそのパソコンで立ち上げて、なんか色々やっていた。最初ピザサークル主で、内容をカラー印刷して客に見せるサンプルにするつもりかと思っていたが、二日目の15:00を過ぎてそれもねえなと考えなおし、視界のすみで観察していると、どうやら内容をFTPだかP2Pだか知らないが、そういうのでうpしようとしているように見えた。えええええ。
この時点で著作権的に屑野郎決定だと思っていたら、しかも、なんか技術に疎いらしく、店員呼んで画面に映る二次エロ画像を指さしながら「これこれを○○したいんだけどどうすれば〜」とかたずねていた。なんかもう色々どん引きしてしまった。
コピーが終わって先に帰ったのでそのピザがどうなったのかは知らないが、しかしあれほど厚顔無恥と言う言葉の似合うピザもいないと思った次第。

2009-09-09


Powered by twtr2src

2009-09-09 Wednesday

そのディレクトリが書き込み可能か否か

あるディレクトリ書き込み可能(ハードディスク)か、そうでないか(追記不可にしたCDDVD)か、を確かめる関数
やっていることは、実際にランダム名前ファイルを作ろうとして、出来たか出来なかったかを確かめる。

00.txt

*define
game
*start
click
end

system.lua

-- is writable

function is_writable(dir)
	dir = dir or ""
	local file = ""
	local fullpath = ""
	while true do
		file = random_string()
		if dir == "" then
			fullpath = file
		else
			fullpath = dir.."\\"..file
		end
		if not fileexist(fullpath) then break end
	end
	local fh = io.open(fullpath, 'w')
	if io.type(fh) ~= "file" then return false end
	fh:write(os.date())
	fh:close()
	os.remove(fullpath)
	return true
end

function fileexist(file)
	if type(file) ~= "string" then return false end
	if file == "" then return false end
	local fh = io.open(file)
	if io.type(fh) ~= "file" then return false end
	fh:close()
	return true
end

function random_string(length)
	if type(length) == "nil" then length = 8 end
	if type(length) ~= "number" then length = 8 end
	length = math.floor(length)
	if length < 1 then length = 8 end
	local res = {}
	for i = 1, length do
		table.insert(res, string.char(math.floor(math.random()*26)+97))
	end
	return table.concat(res)
end

-- 動作テスト。導入する時は削除するべし。
if is_writable() then
	NSOkBox("書き込めます。", "lua")
else
	NSOkBox("書き込めません。", "lua")
end

解説

is_writable(string)は、ディレクトリ名を与えると、そのディレクトリ書き込み可能かそうでないかをbooleanで返す関数
fileexist()とrandom_string()の二つの関数依存している。
引数無で呼んだ場合は、カレントディレクトリになる。

用途

移動なし起動の変化球 - 永字八法みたいな。
一般的NScripter等を使った同人ソフトは、「インストールは、CDの中身をフォルダごとハードディスクに移動。アンインストールは、フォルダ毎削除」と言う仕様だが、これを「CDから起動、セーブデータのみをハードディスクに保存」と言う仕様にすることはなんとかできそう。
ただし、フォルダ全移動にも対応するため、カレントディレクトリや、あるいはユーザー指定したディレクトリ書き込み可能かどうかをチェックする必要はある。この関数はそのために使える。
実際にこれをCDに焼き、追記禁止にしてから実行すると、書き込めないようになっているのがわかる。

2009-09-08


Powered by twtr2src

そのディレクトリが書き込み可能か否か

あるディレクトリ書き込み可能(ハードディスク)か、そうでないか(追記不可にしたCDDVD)か、を確かめる関数
やっていることは、実際にランダム名前ファイルを作ろうとして、出来たか出来なかったかを確かめる。

00.txt

*define
game
*start
click
end

system.lua

-- is writable

function is_writable(dir)
	dir = dir or ""
	local file = ""
	local fullpath = ""
	while true do
		file = random_string()
		if dir == "" then
			fullpath = file
		else
			fullpath = dir.."\\"..file
		end
		if not fileexist(fullpath) then break end
	end
	local fh = io.open(fullpath, 'w')
	if io.type(fh) ~= "file" then return false end
	fh:write(os.date())
	fh:close()
	os.remove(fullpath)
	return true
end

function fileexist(file)
	if type(file) ~= "string" then return false end
	if file == "" then return false end
	local fh = io.open(file)
	if io.type(fh) ~= "file" then return false end
	fh:close()
	return true
end

function random_string(length)
	if type(length) == "nil" then length = 8 end
	if type(length) ~= "number" then length = 8 end
	length = math.floor(length)
	if length < 1 then length = 8 end
	local res = {}
	for i = 1, length do
		table.insert(res, string.char(math.floor(math.random()*26)+97))
	end
	return table.concat(res)
end

-- 動作テスト。導入する時は削除するべし。
if is_writable() then
	NSOkBox("書き込めます。", "lua")
else
	NSOkBox("書き込めません。", "lua")
end

解説

is_writable(string)は、ディレクトリ名を与えると、そのディレクトリ書き込み可能かそうでないかをbooleanで返す関数
fileexist()とrandom_string()の二つの関数依存している。
引数無で呼んだ場合は、カレントディレクトリになる。

用途

移動なし起動の変化球 - 永字八法みたいな。
一般的NScripter等を使った同人ソフトは、「インストールは、CDの中身をフォルダごとハードディスクに移動。アンインストールは、フォルダ毎削除」と言う仕様だが、これを「CDから起動、セーブデータのみをハードディスクに保存」と言う仕様にすることはなんとかできそう。
ただし、フォルダ全移動にも対応するため、カレントディレクトリや、あるいはユーザー指定したディレクトリ書き込み可能かどうかをチェックする必要はある。この関数はそのために使える。
実際にこれをCDに焼き、追記禁止にしてから実行すると、書き込めないようになっているのがわかる。