したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

汎用関数・ライブラリ総合スレ

1あなたの名前を入力してください:2017/06/29(木) 23:05:15 ID:YnTR6v9M
このスレッドは、フリーの調教ゲーム作成ツールeramakerおよびeramaker2、およびeramakerエミュレーターのEmueraに用いる
汎用コードの開発、配布のためのスレッドです。

スレッドの利用の際、以下の点にご注意ください。
・スレにオリジナルのコードを書き込んだ場合は、ライセンスを明示しない限りCC0で提供されたものとします。
参考……CC0 ttps://creativecommons.org/publicdomain/zero/1.0/deed.ja
>この作品は、たとえ営利目的であっても、許可を得ずに複製、改変・翻案、配布、上演・演奏することが出来ます
・ファイル配布時にはライセンスを明記すること。ライセンスなしだとあらゆる利用が不許可になります。


関連サイト

漠々ト、獏
ttp://cbaku.com/

Emuera公式ページ
ttp://sourceforge.jp/projects/emuera/wiki/FrontPage

eraシリーズを語るスレ まとめWiki V3
ttp://w.livedoor.jp/eraseries/

2あなたの名前を入力してください:2017/07/02(日) 14:21:06 ID:JJVsHAwc
試しに自分の作った関数をうpして見ることにしました。
このスレがもっと積極的に利用されるといいな。

汎用ランダム抽選関数RANDCHOOSE_ver2.0
ttp://era.moe.hm/cgi/era/upload.php?id=0003099

【改変:可】
【再配布:可】
【商用利用:可】
【使用報告:不要】

この関数はCC0ライセンスに準拠し、作者は著作権を放棄します。

3あなたの名前を入力してください:2017/07/02(日) 15:15:36 ID:JJVsHAwc
こういう機能が欲しいとか、他にもっと便利な設計があるとか、
色々と感想や情報交換をしてくださると助かります。

4あなたの名前を入力してください:2017/07/02(日) 16:11:28 ID:YCnVq8FA
ageてみるのと、各スレに周知するのも大事だと思う。
とはいえマルチポストまがいの宣伝文書きまくるのもアレだしなぁw

5あなたの名前を入力してください:2017/07/02(日) 16:21:01 ID:y3nW5D1.
これ使ったらこういうのができますよーとかも書いてあったらありがたい

6あなたの名前を入力してください:2017/07/02(日) 16:38:35 ID:JJVsHAwc
しまったreadmeは用意したけどスレに用途を書いてなかった

>>2の用途について】
N個の候補からランダムに1つを選ぶ関数です。
候補の追加と削除が簡単にできるのがチャームポイント。

好きな数値を好きなタイミングで抽選候補としてリストに追加し、
そのリストからランダムで候補をひとつ選択しその結果を返します。
リストを編集する関数とランダム抽選を実行する関数が別々に分離しているため
リストへの候補の追加・削除が簡単にできる仕組みになっています。
かんたんそうさ!

ただし、それぞれの候補の抽選確率は平等なので
確率を変えたい場合は候補の数を偏らせる必要があります。
例:アタリを1個追加してハズレを9個追加すればアタリの確率は10%、
ハズレを99個にすればアタリの確率は1%といった具合

7あなたの名前を入力してください:2017/07/02(日) 16:45:20 ID:JJVsHAwc
実際に>>2をどのように使えば良いのかイメージがわかない人は
「RANDCHOOSE」でeraGVT別人改造版をgrepしてみると良いでしょう
(ダイレクトマーケティング)

8あなたの名前を入力してください:2017/07/04(火) 22:08:27 ID:QmHEwHDQ
適当に自作関数をば放流CC0でどうぞ
ttp://era.moe.hm/cgi/era/upload.php?id=0003101

簡易説明
・一次元配列まるごと表示関数:@ARRAY_PRINT
 一次元配列の0〜Xの要素の内容をPRINTする主にデバッグ用の関数
・配列抽選F関数:@ARRAY_HIT
 一次元配列の0〜Xの要素の内容を相対確率として捉えて0〜Xのいずれかを返す抽選関数
 柔軟にお手軽に確率を変えた抽選が実行できる
・配列RAND化関数:@ARRAY_RAND
 一次元配列の0〜Xの要素にそれぞれRAND数値を代入する
・汎用算術F関数:@MATH
 100√2などの数値を手軽に得られるようにした
 小数点以下切り捨てのEmueraで√2などによる補正をかけたい場合に有用(精度を上げられる)
 MATHって名前で偉そうにしてますがごく単純な処理しか行えません
・その他、上記関数の動作サンプル用関数群

9あなたの名前を入力してください:2017/07/04(火) 22:11:11 ID:QmHEwHDQ
@ARRAY_HITを使用すると
これが
SELECTCASE RAND:10
CASE 0 TO 4
CASE 5 TO 7
CASEELSE
ENDSELECT
;・各CASEがどの程度発生しやすいのかイメージしづらい
;・発生確率の調整が面倒(数値範囲を直接いじる必要がある)
;・CASEを増設するとまた面倒

こうなる
;相対発生確率の代入
LOCAL = 5, 3, 2
SELECTCASE ARRAY_HIT(LOCAL, 3)
CASE 0
CASE 1
CASE 2
ENDSELECT
;・一次元配列変数が必須
;・相対的な発生確率が明示されている
;・発生確率の調整が容易、CASE増設も簡単

10あなたの名前を入力してください:2017/07/06(木) 07:15:22 ID:t46l/FLk
5割、3割、2割の割合で表示確率に差のある口上が出せるってことで良いですか?

11あなたの名前を入力してください:2017/07/06(木) 07:39:47 ID:9qSHtzhE
・・・個人的には配列とCASEの数字の対応を手動で確認しないといけないのが好みじゃないけど、そこを確認できるようにコード組むと状態をコードがもつことになるから筋がいい設計じゃなくなるなぁ
一応作るだけ作るか

12あなたの名前を入力してください:2017/07/06(木) 10:13:29 ID:9qSHtzhE
http://era.moe.hm/cgi/era/upload.php?id=0003102
@SAMPLE_ANOTHER_ARRAY_HIT()
#DIM HIT_LIST, 10
#DIM HIT
PRINTFORML HIT_LIST = 1, 2, 3, 4, -1
PRINTFORML
;リストの終端を0以下の数字で表現する -1を代入するのは念のため
HIT_LIST = 1, 2, 3, 4, -1
HIT = ANOTHER_ARRAY_HIT(HIT_LIST)
SELECTCASE HIT
;分岐の使用例
;分岐するたびにリストで指定した数字であることを確認できる 順番を抜かしたり入れ替えたらそこでエラーが起きる(要テスト)
;HIT_LIST:ANOTHER_ARRAY_HIT_CHECK(LOCAL) = LOCAL
CASE ANOTHER_ARRAY_HIT_CHECK(1)
PRINTL 1です
CASE ANOTHER_ARRAY_HIT_CHECK(2)
PRINTL 2です
CASE ANOTHER_ARRAY_HIT_CHECK(3)
PRINTL 3です
CASE ANOTHER_ARRAY_HIT_CHECK(4)
PRINTL 4です
;注意:終盤に確率低い分岐入れると多分テスト大変 手動で分岐の数字入れて試すのも数えるの面倒
CASEELSE
;きちんとリストと分岐の対応を取っていればここは呼ばれないはず
THROW 分岐が足りていない
ENDSELECT
PRINTFORML HIT={HIT}
[SKIPSTART]
サンプルを踏まえたうえで利点欠点
## 利点
+ リストと分岐の対応を取らないとエラー

## 欠点
+ リストと分岐の対応を取らないとエラー
+ 静的変数を使っている
+ ネストできない あるいは複数同時に使用できない 元のサンプルのように複数のRANDを取りそれに応じて分岐することはできない
+ リストサイズいっぱいに数字が入ってると実はエラーを起こす
[SKIPEND]

13あなたの名前を入力してください:2017/07/06(木) 12:28:12 ID:JdHB6FIw
>>10
9で書いた例ならそれであってます

>>12
負数(というか-1)でリスト端を指定というのは使えそう
分岐の設定ミスをエラーとして顕在化できるようにって感じだと思うんだけど

んー、自分としては
;一般イベント発生抽選
VARSET HIT_LIST
FOR LOCAL:0, 1, LAST_COMMON + 1
 SIF !INT_COMMON_EVENT(CHARA, "発生条件", LOCAL:0)
  CONTINUE
 HIT_LIST:(LOCAL:0) = INT_COMMON_EVENT(CHARA, "発生率", LOCAL:0)
NEXT
RETURNF ARRAY_HIT(HIT_LIST, LAST_COMMON + 1)
こういうことをするつもりなのであんまりピンときません
そこまでチェックいるのかなぁって感覚です

14あなたの名前を入力してください:2017/07/06(木) 20:14:58 ID:9qSHtzhE
>>13
まあ、出された例に気に食わないから(内部実装が筋が悪いけど)作っただけなので、実際の運用ならそんな感じだろうし使い道ないだろうとは自分でも思います
でも、配列の中身と実際の分岐の対応が目に見えないのが気持ち悪かった

15あなたの名前を入力してください:2017/07/06(木) 21:06:34 ID:JdHB6FIw
とにかく実装乙

16自動探索の人 ◆hDnGQesiDI:2017/07/06(木) 23:01:34 ID:qEzcbQic
[その他] 汎用関数_カラーバー表示関数
http://era.moe.hm/cgi/era/upload.php?id=0003103
[その他] 汎用関数_カラー指定文字列描画関数
http://era.moe.hm/cgi/era/upload.php?id=0003104
[その他] 汎用関数_INPUT補助
http://era.moe.hm/cgi/era/upload.php?id=0003105

応援に。こういうの活気付くといいですね。
以下、簡単な説明。
・汎用関数_カラーバー表示関数
HPなどの表示に使える割合ゲージ、RGBスライダー、HSBスライダーを描画する関数群です。
割合ゲージは使える場面は多いと思います。カラースライダー2種はあまり使う場面は多くないんじゃないかな。
プレイヤーが任意の色を入力する時に視覚的な補助が必要だったら……くらい。

・汎用関数_カラー指定文字列描画関数
頻繁にフォントカラーを変更する人向け。関数ひとつでカラフルな文字列が描画できます。

・汎用関数_INPUT補助
ボタン入力の表示と入力内容のチェックを行う関数と、文字列入力の補助関数。
ついでに話題が盛り上がってたランダム抽選機能も追加してみました。

3つともサンプルを用意したので、詳しくはそちらで確認してみて下さい。

17あなたの名前を入力してください:2017/07/07(金) 05:15:32 ID:qewQ/Jxo
こりゃまた需要が濃そうなものを…乙です

18あなたの名前を入力してください:2017/07/07(金) 21:17:37 ID:5F7G4L4s
STRFORMでFORループの変数を拾えない?
変な挙動するせいで原因究明と回避方法の模索に手間取っちまった。

数値入力画面を作る関数詰め合わせ
http://era.moe.hm/cgi/era/upload.php?id=0003106

中身は三種類です。簡易な説明は>>19
@INPUT_NUMBER
@INPUT_TIME
@INPUT_ITEMBUY

CC0で配布します。中にも書いてあるよ。

19あなたの名前を入力してください:2017/07/07(金) 21:20:06 ID:5F7G4L4s
;数値入力補助関数@INPUT_NUMBER
;
;―――――――――
;114514
;―――――――――
;[7] [8] [9] [CLEAR]
;[4] [5] [6]
;[1] [2] [3]
;[0] [00] [ENTER]
;
;このような数字入力用の画面を構築する関数です。
;作ったはいいものの、正直2,3桁の入力にテンキー型は向いてないと思います()


;数値入力補助関数@INPUT_TIME
;
;△ △ △ △
;――――――
; 0 7 : 3 0
;――――――
;▼ ▼ ▼ ▼
;
;[ENTER]
;
;このような時間入力用の画面を構築する関数です。
;
;【重要】初期値、返り値は分合わせ、つまり時*60+分になります。
;07:30の場合、RESULT = 450になります。
;
;直接入力することも可能です。
;その場合730で07:30になります。


;アイテム購入補助関数@INPUT_ITEMBUY(A_アイテム番号 = -1)
;
;アイスティー
;
;所有数: 1 所持金:114514金
; △ △
;購入数: 1 9 購入額: 1919金
; ▼ ▼
;
;[ENTER]
;[キャンセル]
;
;このような複数購入可能なアイテムの購入画面を構築する関数です。
;最大数はデフォルト99個ですが変更可能です。

20あなたの名前を入力してください:2017/07/07(金) 21:23:02 ID:5F7G4L4s
スレだとズレるなあ。
実処理ではズレない。はず。たぶん。直したと思う……。

21あなたの名前を入力してください:2017/07/08(土) 11:12:58 ID:1zL3umeE
スレだとタブやスペースの連続が消えてコードを貼るのに向いてないから
pastebinみたいな所使った方がいいって話がスレ建てスレであった

22あなたの名前を入力してください:2017/07/08(土) 13:55:47 ID:6xVlwSaY
pastbinは軽く解説を見た限り、Syntax Highlightingはどれが一番erabasicに向いてるのかわかりませんでした……。
あと本人しか知りえないだろうけど、アドレス貼り付けるだけで俺が作ったと言えるのか分からない。
>>19は出力サンプルだし、どっちもどうでもいいんだけどね。

23あなたの名前を入力してください:2017/07/08(土) 17:14:07 ID:gg5h6CiQ
著作権を放棄するとしても著作権表示を入れるのがよいかな。
あるいは電子署名のfingerprintを入れるか。

24あなたの名前を入力してください:2017/07/15(土) 16:24:52 ID:IUhgz7QQ
こんなの作りました!!
是非使ってください!(CC0)

;ARG=0 3回でフィニッシュ
;ARG=1 軽く2回
@SPERM_FLASH(ARG)
#DIM L_ARR, 10, 100
#DIM L_LEN, 10
ARG = LIMIT(ARG, 0, 1)
L_ARR:0:0 = 100, 60, 20, 100, 80, 60, 40, 20, 0, 0, 0, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 0
L_LEN:0 = 22
L_ARR:1:0 = 100, 50, 100, 80, 60, 40, 20, 0
L_LEN:1 = 8
GETBGCOLOR
LOCAL:1 = RESULT
FOR LOCAL:2, 0, L_LEN:ARG
LOCAL = L_ARR:ARG:(LOCAL:2)
LOCAL = MAX(0, MIN(255, LOCAL * 255 / 100))
SETBGCOLOR LOCAL, LOCAL, LOCAL
TWAIT 200, 1
NEXT
SETBGCOLOR LOCAL:1

25自動探索の人 ◆hDnGQesiDI:2017/08/01(火) 22:52:16 ID:xgPSoezk
[その他]汎用関数_身体サイズ生成
http://era.moe.hm/cgi/era/upload.php?id=0003125

身長やその他いくつかの要素から3サイズなどを生成するための関数群です。
流用しやすいようにキャラデータの領域を直接指定する部分は極力少なくしています。

サンプルを用意したので、詳しくはそちらで確認してみて下さい。

26あなたの名前を入力してください:2017/08/03(木) 12:50:27 ID:THgpoiqs
おつです
面倒な計算のライブラリができるなんて素晴らしいです
ライセンスは CC0 なんですね
ソースが置いてあるフォルダのテキストを見て分かりました

将来、バリアント作成時にはぜひ使いたいなと思ってます

27自動探索の人 ◆hDnGQesiDI:2017/08/06(日) 07:30:46 ID:u0jCWgpg
乙ありです。
そういってもらえると、上げたかいがあります。
ライセンスの場所については、Sampleの方に本体が入っているので、勘違いする人が出ないように念のために。まあ、いないとは思いますけど。

28あなたの名前を入力してください:2017/08/09(水) 18:56:29 ID:f8f9NGvA
こんな複雑な計算式で理想の体が算出されるとはカノンまじゴールデン
>>16もありがとうございます
なんかもう開いて見てるだけで美しいってなってます

29自動探索の人 ◆hDnGQesiDI:2017/08/11(金) 20:46:43 ID:gXzd4x8g
>>28
ありがとうございます。感想うれしいです。
ゴールデンさんの計算式自体はすごく単純なんですけどね。
計算がめんどくさくなってるのは、理想体型からブレさせるのと、おっぱいの重さ計算してるせい。
おのれおっぱい

30自動探索の人改めばふぉ ◆hDnGQesiDI:2017/08/19(土) 00:47:30 ID:fyZKKcEM
[その他]汎用関数_タグ指定文字列描画関数
http://era.moe.hm/cgi/era/upload.php?id=0003134
以前に公開したカラー指定文字列描画関数を改造してボタンやフォント指定も行えるようにしたものです

[その他]汎用関数_Window描画関数
http://era.moe.hm/cgi/era/upload.php?id=0003135
複数のウィンドウをまとめて描画できるようにする関数群です。上記のタグ指定文字列描画関数を使用しています。
同じ行位置の左右にウィンドウでそれぞれ別の内容を表示したい。なんて時に便利です。
ウィンドウを重ねて表示することも可能で、RPGのコマンド風の表示なんかも行えます

31自動探索の人改めばふぉ ◆hDnGQesiDI:2017/08/19(土) 01:09:46 ID:fyZKKcEM
>>30続き
いつもの如くサンプルを同梱してあるので、詳しくはそちらで確認してみて下さい。

32あなたの名前を入力してください:2017/08/20(日) 05:38:11 ID:r1wrUq8c
>>30
うぽつです

Window描画関数…だと…しゅごい
画面のレイアウトに困ることが多いので助かります

33あなたの名前を入力してください:2017/08/20(日) 17:56:05 ID:oVLp65yU
>>30
ウィンドウすげー!

34あなたの名前を入力してください:2017/08/21(月) 12:09:33 ID:wclAV05A
>>30
なにこれすげえ
こんなことできるのか…

35ばふぉ ◆hDnGQesiDI:2017/08/21(月) 21:45:02 ID:KTVbrI1o
ありがとうございます!
でもちょっと問題があったので修正しました

[その他]汎用関数_タグ指定文字列描画関数_ver1.1(機能追加)
http://era.moe.hm/cgi/era/upload.php?id=0003144
[その他]汎用関数_Window描画関数_ver1.1(機能追加)
http://era.moe.hm/cgi/era/upload.php?id=0003145

SHOP画面で使用しようとしたら文字列ボタンだとボタンが反応しないという現実が。
ということで、数値ボタンでの表示も出来るように修正しました。

ついでに同時に生成できるウィンドウ数を20個に増やしました。

36あなたの名前を入力してください:2017/08/27(日) 21:13:44 ID:f/gr.fiw
良いスレですね

>>35を見て、そういえば自分もそんな感じのやつ作ったなと思い出したのでUPします。
低機能でウインドウ化なんてとてもできませんが、書式が短いのでタイピングは楽です。

[その他]PRINTEX 色とスタイル指定可能なPRINT関数
http://era.moe.hm/cgi/era/upload.php?id=0003149

サンプル画像
http://i.imgur.com/kNl7myY.png

>>35があればこれ要らなくない?というのは全くその通りですが、
複数のアプローチがあっても良いかなと思うので上げてみました。

37あなたの名前を入力してください:2017/09/13(水) 22:11:55 ID:5LYVIWZM
新バリアントスレで盛り上がってるのに微妙に乗り遅れたので・・・・
多数のバリアントで使用する前提の汎用口上(事実上パッチ)を書いてみた

http://era.moe.hm/cgi/era/upload.php?id=0003163

基本コンセプトは↓の3つ。
・素質に応じて複数の口上を呼び分ける
・キャラ別口上と同じフォーマットで書ける
・バリアントごとの差違は関数で使い分ける

多数のバリアントを使用する前提と言いつつ、今開発してるバリアント(eraRL)以外での動作検証はしてないが

38あなたの名前を入力してください:2017/10/11(水) 08:06:24 ID:F/tfGFJ2
バグがあったので更新です。

汎用ランダム抽選関数RANDCHOOSE_ver2.1
ttp://era.moe.hm/cgi/era/upload.php?id=0003193
【用途】
複数の数値を「候補」として自由に指定して、それらの候補の中からランダム抽選を行う関数です。
特定の条件を満たしたキャラクターだけを候補に加えて抽選する、
といった用途を想定しています。


あと、用途が狭いけどせっかく作ったので晒し。

汎用指定桁抽出関数FIGURE_SPLIT
ttp://era.moe.hm/cgi/era/upload.php?id=0003194
【用途】
変数の指定した桁の値を返す汎用関数
桁数を参照することでひとつの変数に180個のフラグを持たせたりできる
必要に応じて通常のビット演算と使い分けてください

39あなたの名前を入力してください:2017/10/16(月) 00:23:40 ID:Z1I2IfaE
おつです〜。

>>FIGURE_SPLIT
大したことではないですが、REPEAT〜RENDはCOUNTを汚すんで使わないほうがよさげです。
例えば、REPEAT〜REND中にFIGURE_SPLIT使うとたぶん望む結果が得られないはず。

40あなたの名前を入力してください:2017/10/17(火) 02:01:59 ID:2odMCXo6
>>39
おうふ、初歩的なミスを…
ご指摘ありがとうございます、修正して差し替えました〜

汎用指定桁抽出関数FIGURE_SPLIT
ttp://era.moe.hm/cgi/era/upload.php?id=0003199

41あなたの名前を入力してください:2017/10/28(土) 13:00:51 ID:OI78Jgng
とりあえず作ってみたので上げます。汎用関数というかアプリがメインですが……

era2talk v0.00
http://era.moe.hm/cgi/era/upload.php?id=0003220&downf=org
eraのテキストを読み上げソフトに読ませます。

;-------------------------------------------------
;口上表示・保存関数@PRINTFORMW2T
;口上をグローバル変数として保存し、また表示もする

;-------------------------------------------------
;口上保存関数@SAVE2T
;保存はするが表示はしない
;表示と発音で表記を変えるとき(「膣内」で「なか」みたいな)に使う

42あなたの名前を入力してください:2017/10/28(土) 22:42:18 ID:HzWt731Q
>>30のウィンドウ関数のヘルパー関数作ってみた

; 使い方
;CALL WINDOW_CREATE, 0, 0, 0, 20, 5, 1
;CALL WINDOW_BEGIN, 0
;CALL WINDOW_PRINTSL, @"【システム】"
;CALL WINDOW_PRINTSL, @"@B:20@[20] セーブ@/B@"
;CALL WINDOW_PRINTSL, @"@B:21@[21] ロード@/B@"
;CALL WINDOW_PRINTSL, @"@B:22@[22] コンフィグ@/B@"
;CALL WINDOW_FINISH

@WINDOW_BEGIN(L_ID)
#DIM L_ID
CALLF WINDOW_UTIL_CURRENT_ID, 1, L_ID
CALLF WINDOW_UTIL_CURRENT_LINE, 1, 0
CALL WINDOW_CLEARTEXT, L_ID

@WINDOW_PRINTSL(L_STR)
#DIMS L_STR
CALL WINDOW_SETTEXT, WINDOW_UTIL_CURRENT_ID(), WINDOW_UTIL_CURRENT_LINE(), L_STR
CALLF WINDOW_UTIL_CURRENT_LINE(1, WINDOW_UTIL_CURRENT_LINE() + 1)

@WINDOW_FINISH()
;見栄え兼拡張用

; 内部用 ERHを使わないインスタントグローバル変数 5行が最小か
@WINDOW_UTIL_CURRENT_LINE(ARG, ARG:1)
#FUNCTION
#DIM L_CONTENT
L_CONTENT = ARG ? ARG:1 # L_CONTENT
RETURNF L_CONTENT

@WINDOW_UTIL_CURRENT_ID(ARG, ARG:1)
#FUNCTION
#DIM L_CONTENT
L_CONTENT = ARG ? ARG:1 # L_CONTENT
RETURNF L_CONTENT

43あなたの名前を入力してください:2017/11/05(日) 22:02:08 ID:3Uc4E06k
>>41
とりあえず、SofTalkで試してみました。
今のところ強制終了などは発生していませんが、同じ台詞を2回言うことがありました。
こちらの環境はWindows7 64bitで、.NET Frameworkは4.7のようです。

ところで、この「global.savを外部プロセスで監視する」という手法を使えばEmueraのEXEファイルは無改造で、
・効果音を鳴らす
・BGMを鳴らす
・Emueraとは別のウィンドウでAAを表示する
・Emueraとは別のウィンドウで一枚絵を表示する
なども可能になるんですよね。
作る人や使う人がいるかどうかは別ですが。

44あなたの名前を入力してください:2017/11/06(月) 19:59:44 ID:wwdhGxnk
>>43
動作確認ありがとうございます。
同じ内容を再生してしまう不具合は、右クリックなどで高速でglobal.savを書き換えると起こるようですが、
とりあえずera2talkでは短期間に口上を再生しないように一応は対策してある……はずでした

もしよろしければ、確実に2回読んでしまう不具合が状況再現できるならば、詳細に報告をお願いします。

45あなたの名前を入力してください:2017/11/06(月) 22:29:12 ID:rgld1its
>>44
確実に2回再生させる方法はわかりません、というよりも今日少し触った範囲内では全然2回再生にならない……

>>43 に書いた内容に追加で別件を。
設定が保存される場所はera2talk.exeと同じフォルダではなく、C:\Users\(ユーザー名)\AppData\Local\era2talk\ 以下のサブフォルダの user.config のようです。
かつ、era2talk.exeの場所を変更すると、別のサブフォルダの user.config に記録されるようです。

使い勝手としては、いくつか考えられますが
・対応させるバリアントごとに別の場所にera2talk.exeを置いて、設定はera2talk.exeと同じフォルダに記録する
・era2talk.exeを起動するときのコマンドラインオプションで、セーブフォルダの場所などを指定する
・今は過去の履歴も含めてファイルパスを3つまで保持するようだけど、もっと多数保持できるようにする
などのほうが良いかもしれません。

また、ERA2TALK_FUNC.ERB以外でSAVEGLOBALが使用された場合のことを考えると
・グローバル変数にはセリフだけではなく1回ごとに変化するIDのような物も記録して、IDが変化した場合だけera2talk.exeからセリフ再生指示を出す(GLOBALS:0 の先頭に1文字追加して、それをIDとして扱っても良い?)
または
・適当なタイミングで、GLOBALS:0 を空っぽにする
のような手法も検討したほうが良いかもしれません。
・前回と全く同じセリフの場合はera2talk.exeからセリフ再生指示を出さない
でも対処はできそうですが、制限事項になってしまいますね。

46あなたの名前を入力してください:2017/11/06(月) 23:00:01 ID:9yLu6D1w
ポーリングしてるとしたらI/O待ちでって状況は想定し得る…かな?
その意味でシーケンス案は妥当だと思う

そこまで想定するなら素直に組み込んじゃえ!と思わなくはないけど、セーブデータ経由の無改造IPCという発想は面白いw

47あなたの名前を入力してください:2017/11/07(火) 09:09:12 ID:3ge56lrg
>>43
理屈の上ではオナホやローターと連動させることも可能だね
具体的にはこのあたり
ttp://www.waffle1999.com/onahole/cyclonex10usb.html
ttp://www.waffle1999.com/onahole/rinkaiten.html

後は頑張ればarduinoあたりで作れるかも

4841:2017/11/08(水) 18:04:37 ID:aKl4phlk
>>45
様々なアドバイスありがとうございます。参考になります。
それぞれの解決策として、以下のような更新を考えました:
・era2talkのconfig保存方法を変更する(user.configを使わずに別のxmlファイルをera2talkと同フォルダに保存)
・ファイルパスの保存数を拡張
・出力するGLOBALS:0の先頭に"e2t:"という識別子を入れることで、別用途でのGLOBALSAVE実行時に再生するのを防ぐ
・GLOBALS:0に空の文字列を代入する汎用関数を実装

また、同セリフ再生についてですが、同一コマンド連続実行をプレイヤーが実行したり、口上側が同じセリフを連呼したりする可能性もあるので、同セリフ再生は許可する方針でいきます。


それにしてもglobal.savの外部監視は可能性に溢れてますね。将来的なアップデート予定として、wavの再生機能を追加しようかなとも考えてます。
(VOICEROIDのexVoice再生とかに使えるので)

49あなたの名前を入力してください:2017/11/09(木) 22:31:51 ID:x33aatEc
どんなバリアントでもglobal.savの監視を使えるようにしたい場合、新しいEmueraで使えるようになってる「セーブデータをバイナリ形式で保存する」への対応が1つのハードルになるのかな。
Emueraのソースの適当な場所から処理を持ってきて簡単に対応できるんならいいけど。
新しいEmueraでセーブデータをUTF-8にしても文字化けせずに喋ってる?era2talkでは"shift_jis"指定してるはずだけど、自動検出が働いてる?

あと、試してないけどWindowsで「アクセス日時」を更新する設定にしている場合、
(参考: ttp://news.mynavi.jp/column/win81tips/026/ )
WatcherChangeTypes.Changedは「Emueraで書き込んだ時のlast write time」と「era2talk自身で中身を見た時のlast access time」の両方で発生したりする?(last access timeは「前回からの間隔が短いので無視します」で回避できる?)もしかすると、セキュリティ対策ソフトのlast access timeで発生する可能性もあり?

50あなたの名前を入力してください:2017/11/12(日) 01:53:32 ID:qNknA.ps
全然ジャンルは違うけどもしglobal.savの書き込みまで出来たら
HTTP-GETしたりした結果を書き戻してERBで外部通信とかもできるのかしら・・・

51あなたの名前を入力してください:2017/11/12(日) 13:34:41 ID:OrQIqlHY
外部プロセスで書き込みまでやっちゃうと、
「Emueraでの書き込みタイミングと外部プロセスでの書き込みタイミングが重なってしまったら、global.sav更新内容の一部が失われたり、Emueraがエラー落ちしたりするんじゃないか疑惑」

「Emueraはglobal.savの変更を監視するためにループさせておいて外部プロセスでの処理に時間がかかってしまったら、Emueraが無限ループ警告を出すんじゃないか疑惑」
が発生するかもしれない
全自動でやるんじゃなくて、人間が世話してやればいいのかな

Emueraは入力待ち状態にしておいて、外部プロセスからEmueraにWM_INPUTやWM_KEYDOWNのようなメッセージを送信することでプロセス間通信できるかな、とも思ったけどそうすると今度は
「人間がEnterキーやマウスボタンを押してから離すまでの間にメッセージが来ても大丈夫なのかどうか疑惑」
が発生するのかなあ

52あなたの名前を入力してください:2017/11/12(日) 19:59:39 ID:oqxIipdw
自前でファイル更新確認ループとかやりゃおかしなことになるけど
それは方法がおかしいからじゃないの
ファイル監視はFileSystemWatcher使えばやってくれると思うよ

53あなたの名前を入力してください:2017/11/12(日) 22:14:39 ID:OrQIqlHY
そっちじゃないんだ
自分でC#か何かで実行ファイルを作る時の話じゃなくて、バリアントのERBファイル側で処理をどう書くかの話なんだ
global.savが外部から変更されるのを待つ機能なんて、Emueraには用意されてないよね?

54あなたの名前を入力してください:2017/11/12(日) 23:16:58 ID:oqxIipdw
まさかERBでやる気だとは思わなかった
書き込みタイミングが被った場合の>>51の懸念は妥当だと思う
対処するならEmuera側でやるのが現実的じゃないか

55あなたの名前を入力してください:2017/11/13(月) 00:10:24 ID:Wh4.T.AM
>対処するならEmuera側でやるのが現実的じゃないか
それを言ってしまうのであれば、もう
「global.savを外部プロセスで監視するとかじゃなくて、もうEmueraにプロセス間通信機能を付けるとか、プラグイン機能を追加するとかやっちゃえよ」
という話になるよね……

56あなたの名前を入力してください:2017/11/13(月) 09:09:38 ID:M3GsfCrM
>>55
100%同意するが、Emueraの開発側がそういうの嫌ってそうなのがなぁ

57あなたの名前を入力してください:2017/11/14(火) 08:29:42 ID:v6iZUYC.
emuera側書込完了フラグと外部プロセス側書込完了フラグを用意して
外部プロセス書込完了フラグのチェックとTINPUTをループで回せばいけるんじゃないの?

58あなたの名前を入力してください:2017/11/14(火) 12:16:41 ID:bF4yJOTY
>>57
何でそれでできるのか分からない

59あなたの名前を入力してください:2017/11/15(水) 00:16:25 ID:8yd69N8c
SAVEGLOBAL
LOCALS = %GLOBALS:0%
REDRAW 0
$LOOP1
TINPUT 100,0,0," "
CLEARLINE 2
LOADGLOBAL
SIF LOCALS == GLOBALS:0
GOTO LOOP1
REDRAW 1
PRINTFORML 誰かが書き換えやがったぜ

TINPUTを使うというのは、こんな感じのことだよね
上記の処理のままでは無限ループ警告が出ないけど、TINPUTとCLEARLINEを消したら無限ループ警告が出る

60あなたの名前を入力してください:2017/11/15(水) 00:43:02 ID:8yd69N8c
もしかすると、TINPUTとCLEARLINEを使う代わりにTWAIT 100,0みたいなのでもいいのかな

61あなたの名前を入力してください:2017/11/15(水) 08:25:24 ID:2awMuoCI
>>59
大体そんな感じ。ボクが考えてたのはこんな感じですかね。
----------------
GLOBALS:0 = 外部プロセスに渡したい文字列
GLOBALS:1 =
SAVEGLOBAL
GLOBAL:0 = 1    ; emuera側書込完了フラグ
GLOBAL:1 = 0    ; 外部プロセス側書込完了フラグ
SAVEGLOBAL
; 外部プロセス処理待ちループ
REDRAW 0
WHILE 1
TINPUT 100,0,0," "
CLEARLINE 2
LOADGLOBAL
IF GLOBAL:0 == 1 && GLOBAL:1 == 1
 GLOBAL:0 = 0
 GLOBAL:1 = 0
 SAVEGLOBAL
 BREAK
ENDIF
WEND
; 渡された文字列に対する処理
PRINTFORML 「%GLABALS:1%」が外部プロセスから渡されたよ
GLOBALS:0 =
GLOBALS:1 =
SAVEGLOBAL

----------------
外部プロセス側の要求待ち
WHILE 1
LOADGLOBAL
IF GLOBAL:0 == 1 && GLOBAL:1 == 0
 GLOBALS:1 = emueraに渡したい文字列
 SAVEGLOBAL
 GLOBAL:1 = 1
 SAVEGLOBAL
ENDIF
WEND
----------------

TINPUTにすると、emuera側で処理待ちのキャンセルを組み込めるという利点が一応あります

62あなたの名前を入力してください:2017/11/15(水) 08:33:27 ID:2awMuoCI
>>61
フラグと渡す文字列でSAVEGLOBALを分けてるのはただのおまじないです。
たぶんそこまでやる必要はない。
なお、動作確認してないので間違いがないかは知りません。

63あなたの名前を入力してください:2017/11/15(水) 20:18:29 ID:3hm/cPJA
無限ループ疑惑のメッセージボックスを抑制する命令を作ってくれればいいと思う
重い処理するときとか勝手に出るのも抑制できるし結構要るよね

64あなたの名前を入力してください:2017/11/15(水) 21:48:40 ID:8yd69N8c
TWAIT 100,0 では100ミリ秒待たなくてもEnterやマウスクリックで進むことができる。
TWAIT 100,1 では強制的に100ミリ秒待たせる、はず。
・入力値を知りたい場合
または
・数値入力しないでEnterやマウスクリックだけの場合には進めたくない
であればTINPUTにする必要あり。

ちなみに、>>61はemuera側も外部プロセス側もerabasicの文法で書いてくれてるけど
外部プロセス側は普通にC#でも何でも使って作ればいい。
元々の>>41が、
「無改造のEmuera単体では実現できないことを、外部プロセスを利用して実現してみよう」
という感じの発想(だと思う)ので。
もしも外部プロセスがerabasicを実行できるのであれば、プロセス間通信とか考えずに
eraIm@sJ4U!やeraSumireTeruのように改造版Emuera単体でバリアントを実行するほうが
確実だと思う。そもそも、global.savを使って通信すること自体がイレギュラーなので。

ただし、無改造Emueraを2つ同時に動かして連携させて何かを実現する、というのも
それはそれでネタとしては面白いかもしれない。

>>63
「無限ループ警告までのミリ秒」を大きい数値にしておけばいいと思う。
不具合で本当に無限ループになってる場合、警告が出てくれないと困る。

65あなたの名前を入力してください:2017/11/15(水) 23:57:58 ID:2awMuoCI
マウスクリックには対応できないけど、TINPUTでなくTONEINPUTにしたほうが良かったかも。
待機待ちキャンセルに使うならそれこそね。
>>64
外部プロセスをerabasicで書いたのは、みんな共通で分かるかなということで使っただけで、外部プロセスもeraであることを想定したわけではないです。
多重起動してglobalでデータのやり取りすれば、Emueraでマルチスレッドとかできるね
そこまでやる必要があるかと聞かれると無い気がするけれど

66あなたの名前を入力してください:2017/11/16(木) 23:40:33 ID:8GSPxWrg
>外部プロセスをerabasicで書いたのは、みんな共通で分かるかなということで使っただけで、外部プロセスもeraであることを想定したわけではないです。
ですよねー。
ただ、>>61を読んだだけでは断定できないので一応。

単なるEmuera多重起動の場合、どのプロセスがどんな役割を担当するのか決めるのが難しいかもしれない。
global.savを介して先着順で決めたりできる……?
batファイルか何かで時間差起動してやったほうが、タイミングが重なる心配をしなくていいかも?

自分が考えてたのは、メインとサブとでファイルを別にする。
メインは、「セーブデータをsavフォルダ内に作成する」をYESにする。
サブは、「セーブデータをsavフォルダ内に作成する」をNOにして、メインのsavフォルダ内に配置する。
NTFSのハードリンクだかジャンクションだかを使えば自由にフォルダ配置できてEmueraを3つでも4つでも
使えるかもしれないけど、使い道を思いつかないし、扱いが面倒っぽいのでやらない。

活用方法としては、>>43で書いたような別ウィンドウでのAA表示や画像表示ぐらいしか考えてなかったけど。
とりあえず、一方向の通信でサブに表示させるテスト。
ttp://era.moe.hm/cgi/era/upload.php?id=0003245
ただし、特定の環境上で、
Emuera1821.exe(私家改造版ではない最新版)ではタイミング次第でエラー落ちしてしまう。
Emuera1821+v6.exeでも同様にエラー落ち。
Emuera1755.exe(>>41でも使われてる)では時々エラーメッセージが出るだけで落ちないんだけど。

67あなたの名前を入力してください:2017/11/17(金) 22:44:33 ID:301vlBq6
>>66
サンプル見てみましたが、これemuera本体の問題ですね。
SAVEGLOBALとLOADGLOBALが同タイミングで実行された場合にアクセスエラーになる模様
ファイルアクセス失敗時に即例外とせず、何回かリトライするようにすれば、発生は抑制できるけどそれはなんか違う方向に行ってる気がする

68あなたの名前を入力してください:2017/11/17(金) 23:52:37 ID:O/Df.RPA
>>67
・Emueraのバージョンによって挙動が異なる
・他のプロセスとの通信とか考えてない場合でも、エラーになる可能性があると思う
・リトライの仕組みはあったほうが良いと思う
というわけで、とりあえずera板のEmueraスレに書き込んでみました。

69あなたの名前を入力してください:2017/11/20(月) 01:21:38 ID:fpumW5hg
面白そうなことやってますね
昔nscrでチャットの書き込み表示させて遊んだのを思い出した
maker1-maker2間の通信とかはやってみた方居るんだろうか?

70あなたの名前を入力してください:2017/11/20(月) 01:53:47 ID:fpumW5hg
確かデータの末尾にマジックワードを付けて、ファイルに書き込む途中で読み込んだ場合はそれがないので読みなおし、
データが正規なら読んだら消すって感じの単純なポーリングだった気がするんだけど細部は覚えてないなあ

71あなたの名前を入力してください:2017/12/07(木) 21:54:49 ID:5Vp85Gow
>>66
http://era.moe.hm/cgi/era/upload.php?id=0003266
動くようにEmuera改造してみました。

7266:2017/12/08(金) 22:22:23 ID:Mx5B2K8s
>>71
ありがとうございます。
5ミリ秒では少ないかな、と思ったけど大丈夫っぽいですね。
start_era1821.batでエラー落ちする環境でも、start_era1821_改造版.batでは落ちない。
もちろん、sav\global.sav を読み取り専用にすればエラーになる。

73あなたの名前を入力してください:2018/01/23(火) 21:38:10 ID:Qe.7U9RE
某所のレスで思い出したので適当に
CC0ライセンスで

;精度確保用、係数つきSQRT関数
@X_SQRT(ARG:0, ARG:1)
#FUNCTION
RETURNF SQRT(ARG:0 * ARG:1 * ARG:1)

;精度確保用、係数つきCBRT関数
@X_CBRT(ARG:0, ARG:1)
#FUNCTION
RETURNF CBRT(ARG:0 * ARG:1 * ARG:1 * ARG:1)

;ARG:0にARG:1の平方根をかける(ARG:2で精度を指定する)
@TIMES_SQRT(ARG:0, ARG:1, ARG:2 = 100)
#FUNCTION
RETURNF ARG:0 * X_SQRT(ARG:1, ARG:2) / ARG:2

;SOURCE系で何か手抜きできないかと思ったがどうなんだ?これ
;具体的にはCOM側で関数に数値渡してオシマイ!みたいなの
;MIN_VALUE==0, LEVEL==9, RATE==10, BORDER==10で10000
@S_CURVE(MIN_VALUE, LEVEL, RATE = 10, BORDER = 10)
#FUNCTION
#DIM MIN_VALUE ;最小値、COM依存を想定
#DIM LEVEL ;効果レベル、感覚系ABL等を想定
#DIM RATE ;効果レート、COM依存を想定
#DIM BORDER ;上限っぽいもの、COM依存を想定
SIF INRANGE(LEVEL, 0, BORDER - 1)
 RETURNF MIN_VALUE + RATE * POWER(LEVEL + 1, 3)
RETURNF TIMES_SQRT((MIN_VALUE + RATE * POWER(BORDER, 3)), LEVEL - (BORDER - 2), 100)

74あなたの名前を入力してください:2018/02/07(水) 04:10:00 ID:LYCwuwsY
外部プロセスとの通信が可能になれば伺かのような媒体とemueraを組み合わせてインタラクティブなプレイが出来そう
ちなみに伺か側はSAORIっていう外部プロセスとやりとりする機能はある

75あなたの名前を入力してください:2018/02/07(水) 21:05:02 ID:b2IVX2yo
era.moe.hm/cgi/era/upload.php?id=0003394
文字列を上書配置していくための関数
車輪の再発明かもしれない

7675:2018/02/07(水) 21:40:47 ID:b2IVX2yo
懐かしのブラクラが簡単に作れたりします

┌──────────────────┐
│┌──────────────────┐
││ │
││終了しますか はい [0] │
└│ │
└──────────────────┘

0


┌──────────────────┐
│┌──────────────────┐
││┌──────────────────┐
│││ │
└││終了しますか はい [0] │
└│ │
└──────────────────┘

77あなたの名前を入力してください:2018/02/07(水) 21:42:20 ID:hCc/T3j.
>>75
頭に[]を付けると良くない挙動をする、
というのは具体的に何がどう良くない挙動なのでしょうか?

ボタンとして設定していない文字列がボタンの一部として認識される現象のことなら、
文字列配置変数.erbの122行目をPRINTPLAINFORMにすることで解決できるっぽいですがどうでしょうか。

7875:2018/02/07(水) 21:57:17 ID:b2IVX2yo
>>77
PRINTPLAINFORMは試してみたけどすごく重くなるんです

79あなたの名前を入力してください:2018/02/08(木) 00:23:54 ID:.0QvokyI
>>78
ボタンの後にPRINTPLAINしたとしても、
PRINTPLAINの中身が空文字列( == "" )だった場合はボタンを区切ることができないようです。

PRINTPLAINを多用すると重くなるということなので使用を最小限に抑えるため、
ボタンを描画した直後の一文字だけPRINTPLAINするように改造してみました。
era.moe.hm/cgi/era/upload.php?id=0003396

なお、>>78氏向けの提案用サンプルであり一般使用を想定していません。注意。

8075:2018/02/08(木) 19:51:48 ID:li2FVAeQ
>>79
他人が書いたコード読んでうまいこと書き直すってすごいですね…
なにはともあれありがとうございます

81あなたの名前を入力してください:2018/02/08(木) 22:02:49 ID:FFj9ZdAI
乙です。
これはすごい・・・
オートで立ち絵のAAと背景のAAを合成できる・・・

8275:2018/02/08(木) 23:34:27 ID:li2FVAeQ
era.moe.hm/cgi/era/upload.php?id=0003399
>>79氏のものに加えて少し更新
 ・デモ表示でちょっと遊んでみた
 ・使い方説明を作ってみた
 ・枠の線種を選べるようにした

83あなたの名前を入力してください:2018/03/26(月) 21:17:29 ID:1kL9MVHk
[その他]汎用チートERBv1.2
http://era.moe.hm/cgi/era/upload.php?id=0003497
大抵のバリアントで使えるチート(データ操作)ERBです

84average:2018/07/30(月) 16:56:29 ID:B7e17qyk
era2talk v0.10
http://era.moe.hm/cgi/era/upload.php?id=0003815
eraの口上をsoftalkやVOICEROIDなどの読み上げソフトに読ませます。
>>41のアップデートです。
Emuera1808以降のすべてのバリアントに対応させたほか、多重読み上げを抑制するようにしました。

また、実際にeratohoЯeverseの口上に適応させてみました(同梱してあります)。
grep置換することで既存の口上のセリフ部分を読み上げさせることができます。

85妊)|д゚):2018/07/30(月) 22:33:20 ID:z9sL6aNg
ほんとだ、PRINTPLAINやたら重いねぇ、ちと見てみるか

86妊)|д゚):2018/07/30(月) 22:39:30 ID:z9sL6aNg
あー、そういうことかー
PRINTPLAINは呼び出しごとに逐次バッファクリアしないといけないから処理量多いのか

再設計したくなるような処理だが、これいじろうとすると、一帯の処理全部書き換え必要な気もするな…

87あなたの名前を入力してください:2018/08/30(木) 02:36:44 ID:iA0rH1i6
文字列を使った連想配列もどき&可変長配列もどき
ttp://era.moe.hm/cgi/era/upload.php?id=0003893

・_DICTIONARY.ERB
"[髪型:ショート][髪色:緑][瞳色:青]"のような文字列を作って連想配列のように扱うライブラリ。
例えば変数STRが"[髪型:ショート][髪色:緑][瞳色:青]"であるとき、DIC_GET(STR, "髪色")で"緑"を取得します。
DIC_SET(STR, "髪型", "ロング")は"[髪型:ロング][髪色:緑][瞳色:青]"を返します。

・_DICTIONARY.ERH
"ショート,セミロング,ロング,"のような文字列を作って可変長配列のように扱うライブラリ。
LIST_GET(STR, 1)は"セミロング"、LIST_ADD(STR, "ロングウェーブ")は"ショート,セミロング,ロング,ロングウェーブ,"を返します。
CALL LIST_FOREACH(STR, "関数名") で配列中のそれぞれについてCALLFORM %関数名% 値 ;を呼び出したりもできます。
詳細はファイル内の説明を参照してください。


このライブラリとEmuera1.823beta003の新機能を使って「キャラクターなんとか機」の再現を試みたのがこちら
ttp://era.moe.hm/cgi/era/upload.php?id=0003892

88あなたの名前を入力してください:2018/08/30(木) 02:41:29 ID:iA0rH1i6
間違えた。
「・_DICTIONARY.ERH」は「・_LIST.ERB」の間違いです

89あなたの名前を入力してください:2018/08/31(金) 02:04:27 ID:gEBxa2XQ
>>87
両方DLさせていただきました。
Emueraってこんなこともできるんですね、eraの新境地を見た感じです。
仕様とかコードを理解出来たら製作がもっと楽しくなるのだろうなぁ。

90あなたの名前を入力してください:2018/10/08(月) 23:52:24 ID:HoJJ7p/w
>>38
RANDCHOOSEで古い処理に存在した上のほうのキャラばかりが優先される弊を除けそうです
ありがとうございました

91あなたの名前を入力してください:2018/10/19(金) 00:49:48 ID:/6ZLW.z6
厨二ネーム生成関数
ttp://era.moe.hm/cgi/era/upload.php?id=0004027
この関数は汎用キャラ用ランダム名前付けをベースに作成されました

この関数は、
1)まず「読み仮名」を生成
2)次にその読み仮名に適合する漢字を生成
このように二段階で名前を生成します

これによって、名前(given nameの方)のバリエーションが大幅に増えます
従来の500パターンから1万パターンくらいにはなってるんじゃないでしょか
ちゃんと計算したわけじゃないけど

また、漢字変換処理の過程において、ケレン味のある派手な当て字もあえて使用することにしました
まともっぽい名前と厨二ネームで半々くらいでしょうか
ゲームに使うんだしこれくらいやっちゃってもいいんじゃないの?という感覚です

※変換パターンを削減すれば普通の人っぽい名前のみを生成できるようにもできるはずです

92あなたの名前を入力してください:2018/10/19(金) 00:53:31 ID:/6ZLW.z6
……一文字で色々変換して漢字拾ってたら予測変換が変な教育されちって使いづらい

93あなたの名前を入力してください:2018/10/20(土) 08:59:19 ID:d.dTL3BQ
疑似lambda
http://era.moe.hm/cgi/era/upload.php?id=0004040

lambdaっぽい処理をeraでやるための関数群

SIF TALENT:恋慕
  A += 3
SIF TALENT:淫乱
  A += 6

とか、

REPEAT CHARANUM
  IF TALENT:COUNT:服従
    (処理)
  ENDIF
REND

みたいなパターンを簡易化することを目的としています。

【主要関数】
・CALC_CHARA_SINGLE_DATA(valueName,charaIndex,valueKeys)
 与えられたキャラに対し、CFLAGやTALENTに重みをつけて合計を計算する。
 例:CALC_CHARA_SINGLE_DATA("TALENT",MASTER,"針さばき*2,サド")
   ->MASTERが針さばきを持っているなら2、サドを持っているなら1として、合計を返す。(両方持っているなら3を返す)

・CALC_CHARA_RANGED_DATA(valueName,charaIndex,valueKey,rangeList)
 与えられたキャラのABLやCFLAGについて、値の範囲ごとに重み付けをして結果を返す。
 例:CALC_CHARA_RANGED_DATA("ABL",MASTER,"技巧","3,1|7,3|*,5")
   ->MASTERの技巧が3以下なら1、4〜7ならば3、8以上なら5を返す。

・GET_RANDOM_CHARAS(rule,selectResult)
 ruleを満たすキャラをselectResultの要素数分だけランダムに返す。戻り値はselectResultに格納
 例:GET_RANDOM_CHARAS("TALENT:index:恋慕 && TALENT:index:処女",targetList)
   ->処女かつ恋慕であるキャラをtargetListの要素数分だけランダムに返す。

・GET_RANDOM_CHARAS_CORE(rule,selectResult)
 GET_RANDOM_CHARASの式中関数版。戻り値の返し方以外同じ

・GET_RULED_SINGLE_CHARA(rule)
 GET_RANDOM_CHARASで返すキャラ数を1名に限定した代わりに、関数そのものの戻り値としてキャラ番号を返すようにしたもの
 例:GET_RULED_SINGLE_CHARA("ABL:index:従順 >= 5")
   ->従順が5以上であるキャラからランダムで一人選んで返す

・GET_RULED_CHARAS(rule,selectResult)
 ruleを満たすキャラを先頭からselectResultの要素数分だけ返す。
 例:GET_RULED_CHARAS("TALENT:index:恋慕 && TALENT:index:処女",targetList)
   ->処女かつ恋慕であるキャラを先頭からtargetListの要素数分だけ返す。

・COUNT_RULED_CHARAS(rule)
 ruleを満たすキャラ数を返す。それ以外はGET_RANDOM_CHARASに同じ
 例:COUNT_RULED_CHARAS("CFLAG:index:200")
   ->CFLAGの200番が0以外なキャラ数を返す。(eraRL&@exの場合、強姦フラグが立っているキャラ数となります)

【ruleの定義】
・ruleは最終的に数値を返すのであれば、どんな条件式でも設定可能です。
 すなわち、グローバルな変数、定数、TALENT、ABL、CFLAG、EXP、式中関数などが全て使用できます。
・ただし、ローカル変数は使用できません。必要に応じ、リテラル化して条件式を組み立ててください。
・ここに上げている関数では、indexはキャラ番号として解釈されます。内部処理関数では異なる場合があります。
 詳細はEVALUATE関数の定義を参照してください。


普段は↓で色々と弄っています。実装例も下記バリアントになります。
eraRL@&ex 開発スレ
http://jbbs.shitaraba.net/bbs/read.cgi/otaku/16783/1514679031/

また、eraInSchool_orgでも上記関数を使用しています。

【学園系】era_inSchool開発スレ【淫乱3人目】
http://jbbs.shitaraba.net/bbs/read.cgi/otaku/16783/1494631846/

94No.76 ◆TjhVHgLlXw:2018/11/29(木) 19:31:10 ID:Tw/3btV6
末尾平仮名・片仮名の文字列を渡すと捨て仮名を追加して返す式中関数 権利放棄
スレでたくさん改善して頂いたので貼り
@SMALL_STR(ARG_STR)
#FUNCTIONS
#DIMS ARG_STR
#DIMS REPLACE_STR
#DIMS LAST_CHARACTER_STR

REPLACE_STR '= REPLACE(ARG_STR, "゛", "")
REPLACE_STR '= REPLACE(REPLACE_STR, "゜", "")

SIF STRLENSU(ARG_REPLACE_STR) < 1
 RETURNF

LAST_CHARACTER_STR '= CHARATU(ARG_REPLACE_STR, STRLENSU(ARG_REPLACE_STR) - 1)

SIF STRCOUNT(LAST_CHARACTER_STR, "[あかさたなはまやらわがざだばぱアカサタナハマヤラワガザダバパ]")
 RETURNF ARG_STR + "ぁ"
SIF STRCOUNT(LAST_CHARACTER_STR, "[いきしちにひみりぎじぢびぴイキシチニヒミリギジヂビピ]")
 RETURNF ARG_STR + "ぃ"
SIF STRCOUNT(LAST_CHARACTER_STR, "[うくすつぬふむゆるぐずづぶぷウクスツヌフムユルグズヅブプ]")
 RETURNF ARG_STR + "ぅ"
SIF STRCOUNT(LAST_CHARACTER_STR, "[えけせてねへめれげぜでべぺエケセテネヘメレゲゼデベペ]")
 RETURNF ARG_STR + "ぇ"
SIF STRCOUNT(LAST_CHARACTER_STR, "[おこそとのほもよろごぞどぼぽオコソトノホモヨロゴゾドボポ]")
 RETURNF ARG_STR + "ぉ"

RETURNF

名前のフリガナやランダム喘ぎ声などを渡すと末尾に合う「ぁぃぅぇぉ」を付けて返し
甘えた呼び方にしたり、喘ぎにランダム感を足します
見やすいようにスペース入れたのでコピペするときはタブに置き換えしてください

95No.76 ◆TjhVHgLlXw:2018/12/09(日) 19:48:16 ID:JvFxZN1Y
すみませんorz
>>94は最後に変数名をわかりやすくしようとして変えたら
変更前の名前が残ってしまってました
ARG_REPLACE_STR←REPLACE_STRに置換してください

96あなたの名前を入力してください:2019/09/05(木) 09:32:03 ID:v.qF8Uz6
サスケェ…

97No.76 ◆TjhVHgLlXw:2019/09/08(日) 23:02:03 ID:vVc.2kjQ
以前スレ民のかたに教わりながら作ってUPしたCO0のcolorMatrixのサンプルから
ARG_COLORに0xRRGGBBのカラーコードを、ARG_ALPHAに0〜255の透明度を指定し
画像の色を変える機能だけ抜き出して貼ります(ARG_ALPHAは指定しなければ初期値不透明)
ARG_COLOR=-2でグレーのシルエット画像に・ARG_COLOR=-1で元の画像をそのまま表示
発色は元画像の明るさでだいぶ変わるので少し癖があります
ベース画像は彩度0を想定して作りました
もっと奇麗に色の出るやりかたがあるのかもしれないので気が向いた方は改善してください
今度は最低限の部分をコピペしたのでミスはないはず(と願う)作者名表記とかは不要です

ERHに
#DIM COLOR_MATRIX_ELEMENTS, 5, 5

ERBに
@CODE_TO_RGB_R(ARG_COLOR)
#FUNCTION
#DIM DYNAMIC ARG_COLOR
#DIM DYNAMIC RGB_R

RGB_R = (ARG_COLOR >> 16) & 0xFF

RETURNF RGB_R


@CODE_TO_RGB_G(ARG_COLOR)
#FUNCTION
#DIM DYNAMIC ARG_COLOR
#DIM DYNAMIC RGB_G

RGB_G = (ARG_COLOR >> 8) & 0xFF

RETURNF RGB_G


@CODE_TO_RGB_B(ARG_COLOR)
#FUNCTION
#DIM DYNAMIC ARG_COLOR
#DIM DYNAMIC RGB_B

RGB_B = ARG_COLOR & 0xFF

RETURNF RGB_B


@GET_COLOR_MATRIX(ARG_COLOR, ARG_ALPHA = 255)
#DIM DYNAMIC ARG_COLOR
#DIM DYNAMIC ARG_ALPHA
#DIM DYNAMIC RGB_NEW_R_OLD_R
#DIM DYNAMIC RGB_NEW_G_OLD_R
#DIM DYNAMIC RGB_NEW_B_OLD_R
#DIM DYNAMIC RGB_NEW_R_OLD_G
#DIM DYNAMIC RGB_NEW_G_OLD_G
#DIM DYNAMIC RGB_NEW_B_OLD_G
#DIM DYNAMIC RGB_NEW_R_OLD_B
#DIM DYNAMIC RGB_NEW_G_OLD_B
#DIM DYNAMIC RGB_NEW_B_OLD_B

VARSET COLOR_MATRIX_ELEMENTS

IF ARG_COLOR == -2
COLOR_MATRIX_ELEMENTS:0:0 = 0, 0, 0, 0, 0
COLOR_MATRIX_ELEMENTS:1:0 = 0, 0, 0, 0, 0
COLOR_MATRIX_ELEMENTS:2:0 = 0, 0, 0, 0, 0
COLOR_MATRIX_ELEMENTS:3:0 = 0, 0, 0, ARG_ALPHA, 0
COLOR_MATRIX_ELEMENTS:4:0 = 60, 60, 60, 0, 255
ELSEIF ARG_COLOR == -1
COLOR_MATRIX_ELEMENTS:0:0 = 255, 0, 0, 0, 0
COLOR_MATRIX_ELEMENTS:1:0 = 0, 255, 0, 0, 0
COLOR_MATRIX_ELEMENTS:2:0 = 0, 0, 255, 0, 0
COLOR_MATRIX_ELEMENTS:3:0 = 0, 0, 0, ARG_ALPHA, 0
COLOR_MATRIX_ELEMENTS:4:0 = 0, 0, 0, 0, 255
ELSE
RGB_NEW_R_OLD_R += CODE_TO_RGB_R(ARG_COLOR)
RGB_NEW_G_OLD_R += CODE_TO_RGB_R(ARG_COLOR)
RGB_NEW_B_OLD_R += CODE_TO_RGB_R(ARG_COLOR)
RGB_NEW_R_OLD_G += CODE_TO_RGB_G(ARG_COLOR)
RGB_NEW_G_OLD_G += CODE_TO_RGB_G(ARG_COLOR)
RGB_NEW_B_OLD_G += CODE_TO_RGB_G(ARG_COLOR)
RGB_NEW_R_OLD_B += CODE_TO_RGB_B(ARG_COLOR)
RGB_NEW_G_OLD_B += CODE_TO_RGB_B(ARG_COLOR)
RGB_NEW_B_OLD_B += CODE_TO_RGB_B(ARG_COLOR)
COLOR_MATRIX_ELEMENTS:0:0 = RGB_NEW_R_OLD_R, RGB_NEW_R_OLD_G, RGB_NEW_R_OLD_B, 0, 0
COLOR_MATRIX_ELEMENTS:1:0 = RGB_NEW_G_OLD_R, RGB_NEW_G_OLD_G, RGB_NEW_G_OLD_B, 0, 0
COLOR_MATRIX_ELEMENTS:2:0 = RGB_NEW_B_OLD_R, RGB_NEW_B_OLD_G, RGB_NEW_B_OLD_B, 0, 0
COLOR_MATRIX_ELEMENTS:3:0 = 0, 0, 0, ARG_ALPHA, 0
COLOR_MATRIX_ELEMENTS:4:0 = 0, 0, 0, 0, 255
ENDIF

RETURN 0

98ばふぉ ◆hDnGQesiDI:2019/10/05(土) 18:57:48 ID:Nf4/S4JA
汎用関数_Window描画関数_ver2.0
http://book-shelf-end.com/up/dwlink.cgi?eraRx0290.7z
拙作(>>35)のリメイク版です。
機能的にはいろいろレベルアップしてますが、互換性はないです。
(サンプルレベルならおまけフォルダに入れている"WindowDrawer_OldToNew.ERB"を利用することで動くことは確認しています)
サンプルを同梱してあるので、詳しくはそちらで確認してみて下さい。

99あなたの名前を入力してください:2019/11/16(土) 13:02:28 ID:DWT00LII
CC0ライセンスでどぞ
;デモ関数
@HOGE
#DIM HOGE
#DIM RAND_ID, 3
VARSET RAND_ID
RAND_ID = 50, 30, 20
;数値を相対的な確率として、RAND_IDの添字0〜2を返す
HOGE = ARRAY_HIT(RAND_ID, VARSIZE("RAND_ID"))
SELECTCASE HOGE
CASE 0
 PRINTFORML 50%でここ
CASE 1
 PRINTFORML 30%でここ
CASE 2
 PRINTFORML 20%でここ
CASE -1
 PRINTFORML エラー出たらここ
ENDSELECT

VARSET RAND_ID
RAND_ID = 50, 30, 20
;配列に記録した数値を等確率でランダムに返す、表示されるのは50、30、20
HOGE = RAND_CHOICE1(RAND_ID)
PRINTFORMW いべんと{HOGE}

;----------------------------------------------------------------------------------------------------
;連続した数字を抽選し、確率偏らせたい場合用
;----------------------------------------------------------------------------------------------------
@ARRAY_HIT(HIT_LIST, LIST_SIZE)
#FUNCTION
#DIM REF HIT_LIST ;確率分布リスト
#DIM LIST_SIZE;確率分布リストのサイズ
#DIM CHK_ID ;判定対象となる要素
#DIM HIT_RAND ;抽選乱数処理
LOCAL = MAX(SUMARRAY(HIT_LIST, 0, LIST_SIZE),1)
HIT_RAND = RAND(0, LOCAL)
;DEBUGPRINTFORML LIST_SIZE={LIST_SIZE} HIT_RAND{HIT_RAND}
FOR CHK_ID, 0, LIST_SIZE
 SIF HIT_RAND < SUMARRAY(HIT_LIST, 0, CHK_ID + 1)
  RETURNF CHK_ID
NEXT
;THROW 抽選失敗
;カウンター抽選失敗によるTHROW落ちが発生してるのでー1を返すことにする
RETURNF -1

;----------------------------------------------------------------------------------------------------
;均等分布で数字(自由設定)が直接欲しい場合用
;配列の終端判定はVARSIZE利用(配列長いっぱいまで使い切る必要がある)
;----------------------------------------------------------------------------------------------------
@RAND_CHOICE1(LIST)
#FUNCTION
#DIM REF LIST
#DIM DYNAMIC LIST_SIZE
LIST_SIZE = VARSIZE("LIST")
SIF LIST_SIZE <= 0
 RETURNF -1
RETURNF LIST:(RAND:LIST_SIZE)

;----------------------------------------------------------------------------------------------------
;配列の終端判定を-1検索に変更した
;長い配列の途中まででも使うことが出来る(ただしLIST内に-1を指定できない)
;----------------------------------------------------------------------------------------------------
@RAND_CHOICE2(LIST)
#FUNCTION
#DIM REF LIST
#DIM DYNAMIC LIST_SIZE
LIST_SIZE = FINDELEMENT(LIST, -1)
SIF LIST_SIZE <= 0
 RETURNF -1
RETURNF LIST:(RAND:LIST_SIZE)

100あなたの名前を入力してください:2019/11/20(水) 23:00:54 ID:WQsxQ0GM
ライブラリですらないシロモノですが。

制御コード文字定数集
http://book-shelf-end.com/up/dwlink.cgi?eraRx0574.zip

01〜1Fまで(0Aと0Dを除く)と7Fを格納した定数集です。
CHAR_(略語)という名前で定数を切っています。Emuera1824+v6.2対応
どうしても制御文字を使いたい場合にどうぞ

例:
CHAR_BS : バックスペース文字
CHAR_ESC : エスケープ文字

NULとCRとLFはEmuera側の解析処理が死ぬので多分無理

101あなたの名前を入力してください:2019/12/06(金) 00:40:48 ID:ld8kVcCE
>>41 >>43 の方のGLOBALを使った外部プロセス連携を真似して作ろうと思ったら、
SAVETEXT/LOADTEXTが作り出されてて、ありがとうございますの気持ち

102あなたの名前を入力してください:2019/12/20(金) 23:23:42 ID:Y/WcEBso
[その他]汎用チートERBv1.3
http://book-shelf-end.com/up/dwlink.cgi?eraRx0673.zip
>>83から更新
VariableSize.csvで禁止されていることをERB側で判断しようとしたけど結局できなかった……

103あなたの名前を入力してください:2020/05/21(木) 00:02:30 ID:G/anEBRE
>>93を某所で紹介したのにリンク切れなのを放置してたので、再うpついでにverうp。
以下の関数が追加されました。また、>>100の制御コードを使用しています(Emuera1824+v6.2対応)
http://book-shelf-end.com/up/dwlink.cgi?eraRx1173.zip

【追加関数】
・GET_RULED_FIRST_CHARA(rule)
複数のキャラruleを満たす場合に返すキャラがランダムではなく、indexが最も若いキャラである以外は、GET_RULED_SINGLE_CHARAと同じ

・FOR_EACH(targetArray,funcStr,answerArray)
targetArrayの各要素にfuncStrを適用し、結果をanswerArrayに返す。返り値は最後に処理したindex
funcStrでは、targetArrayのインデックスをindex、indexに対応する値をvalueとして扱う。

・FOR_EACH_CORE(targetArray,funcStr,answerArray)
式中関数であること以外はFOR_EACHに同じ

・TOTALIZE(targetArray,funcStr,firstValue=0)
初期値firstValueに対してtargetArrayの各要素をfuncStrを用いて統合し、結果を返す。
funcStrでは、targetArrayのインデックスをindex、indexに対応する値をvalue、totalizedValueを合計値として扱う。

・GET_VALUE_FROM_RANGED_DATA(value,rangeList)
CALC_CHARA_RANGED_DATAの一部機能を汎用関数として分離したもの。
valueName,charaIndexの代わりに、valueに値そのものを渡す

・GET_CHARA_ABL_MAP(targetChara,valueType="ABL")
キャラクタ変数valueTypeの全ての値を一つの文字列に連結して返す。ただし値が100を超えるものが一つでもあると、そこで異常終了する。
SAVETEXTを使わず、過去の断面を保存するのに使用できる。具体的にはinSchool_orgでビデオ撮影時のABLを保管するために使用
例:GET_CHARA_ABL_MAP(ASSI,"TALENT")
  ->助手のTALENTの値を全て連結した文字列を返す

・GET_CHARA_STR_ABL_FROM_MAP(targetMap,targetValue,valueType="ABL")
targetValueをvalueTypeの名前(CSVに定義されたもの)として、targetMapから対応する値を返す。
GET_CHARA_STR_ABL_FROM_MAP(targetMap,targetValue,valueType="ABL")
例:GET_CHARA_STR_ABL_FROM_MAP(targetMap,"従順","ABL")
  ->(targetMapにTARGETのABLの値が入っているとして)TARGETのtargetMap取得時点での従順の値を返す。

・GET_CHARA_ABL_FROM_MAP(targetMap,targetValue)
targetValueにCSVの番号を直接入れることを除き、GET_CHARA_STR_ABL_FROM_MAPに同じ

104あなたの名前を入力してください:2020/05/21(木) 00:18:39 ID:G/anEBRE
>>103はよく見たらモジュール足りてなかったので上げ直しました
http://book-shelf-end.com/up/dwlink.cgi?eraRx1174.zip

105average:2020/05/28(木) 09:29:52 ID:8Bb0YFOc
ZIPなどの圧縮ファイル解凍時に、Lhaplusだと文字化けして解凍されてしまい、
それに気づかずユーザーがプレイしてエラー落ちする現象が頻発したので、警告を出すようにするパッチです。

・mojibake_start.ERB
@MOJIBAKE_CHECK_START
RESULT = 99
TRYCALLFORM MOJIBAKE_CHECK
IF RESULT != 0
PRINTFORML ファイルが文字化けしています。「7-zip」を用いて解凍してください。
PRINTFORML https://sevenzip.osdn.jp/download.html
THROW ファイルが文字化けしています。「7-zip」を用いて解凍してください。
ENDIF

RETURN 0

・mojibake_た.ERB
@MOJIBAKE_CHECK
RETURN 0

実装例
@EVENTFIRST

CALL MOJIBAKE_CHECK_START

PRINTFORMW 正常に動作しました
BEGIN TITLE

RETURN 0


Lhaplusで解凍すると文字化けするためファイルを読み込まなくなるバグに警告を実装
http://book-shelf-end.com/up/dwlink.cgi?eraRx1197.zip

これはファイル名の「◯◯た.ERB」「◯◯た.CSV」が文字化けすると拡張子を破壊してしまうのを敢えて利用しました

106あなたの名前を入力してください:2021/03/22(月) 18:38:06 ID:Bky8hR2Q
有用スレなのであげておこう

107TW夢子口上の人:2021/03/29(月) 10:44:34 ID:4yNmY5FM
グラフィック表示ライブラリを更新したのでこちらで報告をば
G、CBG系の描画に対応しました。
使い方が大分煩雑化してきたので、もしわからなければ私宛にここかeratohoの方で呼びかけてもらえれば
気が付いた時にお答えします。(長くなりそうなら雑談スレの方に移った方がいいのだろうか…)

一応……本ライブラリは画像表示を簡略化するためのフリーライセンスのライブラリとなっています。
使用、改変、改造等に私の許可を得る必要はありません。(使うって言ってくれたらすごく喜びます)
同名のライブラリとして再配布するのは判別の観点からご遠慮ください。

グラフィックに文字書けるようにならないかなぁ…待ち望んでます。

【ファイルURL】
http://book-shelf-end.com/up/dwlink.cgi?eraRx2270.zip

【変更内容】
ver3.00
 G、CBG関連の関数を追加
 内部でグラフィックIDを記録保持するように変更
 CBGボタンの動的作成を追加
 HTML形式の描画にピクセル単位で縦横サイズを指定できる関数を追加

108ロウ:2021/11/24(水) 00:20:54 ID:oTOdo7..
emueraにてADVを作成するためのADVシステムライブラリを作成しました。
本システムを利用すれば、簡易にバリアントにADVを搭載させることが出来るようになります。

使用方法については各ERBおよびサンプルシナリオを参照してください。
質問して下さればお答えします。

また、本システムを使用した場合にはこちらのスレまで連絡を頂けると幸いです。
これはどのように使用されているか、バグや要望は無いか等を知るための個人的なお願いです。
報告と質問を元にして説明書を作ろうと思っているのでよろしくお願いします。

【ファイルURL】
http://book-shelf-end.com/up/dwlink.cgi?eraRx3042.zip

109あなたの名前を入力してください:2021/12/19(日) 06:03:02 ID:eOQKziuQ
-

110あなたの名前を入力してください:2021/12/28(火) 16:00:18 ID:6W70r./s
画面がスタックしていくウィンドウに近いUIフレームワーク作ってたけどPC壊れて消えちゃったんよな
コンフィグやショップを呼んだら戻ってこれて便利になりそうだっただけに残念

111あなたの名前を入力してください:2022/01/26(水) 00:01:43 ID:MOXnmXCg
if
0=3
3=3.14=π
π=null=undefined
undefined=understand
understand=0
これって無限ループ?
円周率をeraに組み込んで、演算したいんだけど
この関数でeraJKを改変して、eraDKを作るつもり。

112あなたの名前を入力してください:2022/01/26(水) 00:10:45 ID:1BUgSf/g
そもそも小数を扱えないeraBASICで必要な桁数なんてたかが知れてるし、定数にしていいんでは

113あなたの名前を入力してください:2022/01/26(水) 16:05:37 ID:mZavve0g
DK…? ドンキーコングでもはじまるのか?(初代

114あなたの名前を入力してください:2022/01/26(水) 18:56:30 ID:zWqYlJPg
クレムリン軍団を調教するバリアントか…

115あなたの名前を入力してください:2022/01/27(木) 18:15:57 ID:V5aQzQv6
他のDKというと…ドラゴンナイト?
デスクリムゾンはコンバット越前ぐらいしか居ないし…

116あなたの名前を入力してください:2022/01/28(金) 00:16:28 ID:BTj8rdZY
えっ 令和にダンクーガを!?

117あなたの名前を入力してください:2022/01/28(金) 01:15:25 ID:OIV5OCVs
ダンジョンキーパーやろ?

118あなたの名前を入力してください:2022/01/29(土) 22:45:42 ID:R7iWzq5U
eraBasicで小数うを扱うために自前で浮動小数点数の表示と計算をするライブラリ作ろうと思って調べて
標準規格の要求値が高すぎて諦めて投げ出したな…実装もひたすらビット演算することになってクッソ重いものになる見込みだったし

119あなたの名前を入力してください:2022/01/30(日) 09:15:32 ID:hsabFM4A
バージョン表示みたいに、出力するときに小数点付け足すことで足りる範囲でやれれば軽いんだけどね
314で計算して、文字列で出力するときにスライスして小数点打ってくっつけておしまい

120あなたの名前を入力してください:2022/02/09(水) 21:01:19 ID:RIh43jjQ
多倍長で計算するとか?
http://7ujm.net/play/pi.html

121あなたの名前を入力してください:2022/02/22(火) 15:34:58 ID:LNxQnAeE
例えば0.00001単位での精度の少数で良いならば
普段は目的の数を100,000倍した値で格納しておいて
表示時のみ÷100,000と剰余100,000して整数部と小数部を取得するのが一番手軽そうではある

122あなたの名前を入力してください:2023/03/18(土) 18:08:04 ID:/ULVRnH.
http://book-shelf-end.com/up/dwlink.cgi?eraRx3780.7z
最初は重複しない乱数を任意個数出力させようとしていたのが
いつの間にか(機能を限ってソースも入出力も簡単にした)「重複しない乱数2つ」を返す関数と
呼び出し元から渡された一次元配列の指定範囲の中身をランダムに入れ替える(=中身に重複しない数値を入れておけば「重複しない乱数n個」を出す事もできる)関数に化けていた代物です

(先に山札のn枚目までを特定の順番で積み込む処理とかをした後辺りで)「山札のn枚目よりも後ろのカードを・X枚目までシャッフル」とか
「始めの言葉と締めの言葉だけは固定にして中間の言葉はランダムな順番で表示したい」とか
そんな感じの処理にも使えるはずです

123あなたの名前を入力してください:2023/03/28(火) 00:09:07 ID:D9dHgQHU
http://book-shelf-end.com/up/dwlink.cgi?eraRx3815.7z
ソート用の一次元配列を用意せずに、またソートに用いる配列に0が入っていても関係なく全体をソートする二次元配列のソート用関数です
0を終端以外に使用せず・ソート用の一次元配列を用意するのならARRAYMSORT(と必要に応じてソート用配列にマイナスの値を掛けたりするとか)を用いる方がより高速なんじゃないでしょうか

http://book-shelf-end.com/up/dwlink.cgi?eraRx3814.7z
SWAP命令を用いる形式に修正したシャッフル関数(>>122 @NUM_ARRAY_SHUFFLE・@STR_ARRAY_SHUFFLE)の修正版です


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板