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

製作初心者講座スレ

1あなたの名前を入力してください:2018/12/17(月) 19:27:03 ID:XL3qFHUU
ここは全く製作したことの無い人達が一段階ずつ製作者へ目指していくスレです。
eraでこれが作りたいと思ったり、eraであれがやりたいんだ
といった情熱があっても、どうしていいかわからないといった方の参考になるべく立てられました
製作したいといった情熱があればぜひ目を通していってください。

情報提供されるの皆さまへ
このスレに書きこまれた、こうしたほうがいいといった発言やまとめはeraシリーズを語るスレ まとめWiki V3に掲載されるかもしれません。
そういった事を踏まえて初心者の方々に有益な情報の提供をお願いします。

このスレに書きこむ前にこちらをお読みください
スレのテンプレ>>1-3

※注 ・投下されたサンプルへの意見交換などは歓迎しますが、
    サンプル投下者への人格批判につながるものや、誹謗中傷に取られるものは禁止とします。
    また、議論も禁止とします。
    意見交換の際に、誰かから苦言を呈されたらいったんレスを止め、時間を置いて落ち着いてください。

2あなたの名前を入力してください:2018/12/17(月) 19:29:29 ID:XL3qFHUU
製作に関することで書きこむ際のテンプレです。
各自、目的に沿った使用をお願いします。
住民同士の会話などでは、検索する人のために【】の記号を使用しないようにお願いします。

【質問】
・環境(既存のバリアント名ないし新バリアント)
・質問内容
・目的
作った構文が意図したとおりに動かないなど口頭での説明・検証が難しいケースはERBをeraロダに上げてください。
【サンプル投下】
教材を投下する時に使用します。
どんなものを作ったのかを書きこんでください。
また、readmeなどにライセンスを書いてください。

3あなたの名前を入力してください:2018/12/17(月) 19:32:08 ID:XL3qFHUU
wiki編集について
主にこちらに製作に関する記述や情報をまとめます。
wikiのページ
ttps://seesaawiki.jp/eraseries/d/%c0%bd%ba%ee%bd%e9%bf%b4%bc%d4%b9%d6%ba%c2
編集は誰でも可能です。情報の加筆や修正、むしろ一から書いてやるなど、お待ちしております。
編集する際はwikiの編集方針の議論ページの記述を厳守し、迷惑の掛からないようにしましょう。

4あなたの名前を入力してください:2018/12/17(月) 19:38:43 ID:IAXMtmQ6
ライセンスについてのWiki既存記事
https://seesaawiki.jp/eraseries/d/%a5%e9%a5%a4%a5%bb%a5%f3%a5%b9%a4%cb%a4%c4%a4%a4%a4%c6
とりあえずライセンスとは何ぞや、というあなたに
結局界隈ではCCとかMITとかあんまり見ないし自分でも使ってないけども

5館の羊 ◆rUj9ETkRpU:2018/12/17(月) 20:12:53 ID:XL3qFHUU
>>4
情報の提供ありがとうございます。
wikiのページにリンクを載せてみました。

wikiに関してですが、特に決まった型はなく、独自の講座やリンクなどを貼って頂ければと思います。
あまり気張らず、皆さんで集まって情報を共有できればなと考えています。

6あなたの名前を入力してください:2018/12/17(月) 22:49:27 ID:Qf3DLMw2
>>4
CCライセンスやMITライセンスは「煮るなり焼くなり好きにしていいよ!」という場合には役立つけど
「バグ修正以外の加筆禁止」とか「改造してもいいけどera以外での使用禁止」みたいなケースには使えないので……

このページ結構長いので初心者には最初の3行だけ読んでくれれば大丈夫、と言っておく

7あなたの名前を入力してください:2018/12/19(水) 21:18:21 ID:B9We7tVs
推奨エディタとその設定ってどこかに置いて有りましたっけ? とりあえずメモ帳やExcelで作成とか無理ですし。
ちなみに自分はsakuraです

8あなたの名前を入力してください:2018/12/19(水) 21:39:09 ID:aKxxCo86
推奨エディタまでならこれが。メニューから飛べるよ
https://seesaawiki.jp/eraseries/d/%b2%fe%c2%a4%c6%fe%cc%e7
サクラエディタ用設定ファイルは
https://seesaawiki.jp/eraseries/d/%a5%c4%a1%bc%a5%ebから落とせ……ないな。
ちょっと見てくる

9あなたの名前を入力してください:2018/12/19(水) 21:57:52 ID:aKxxCo86
下のほうもリンク張り直したのでたぶん残ってるやつは行けると思う
ロダトラブルまわりしか触ってないから既存ソフト系はリンク確認してないけど

10あなたの名前を入力してください:2018/12/19(水) 22:49:34 ID:1QBq0xvw
エディタはVSCodeもいいかと。シンタックスハイライトあるし。

11あなたの名前を入力してください:2018/12/19(水) 23:02:10 ID:aKxxCo86
開発環境スレではSublime Textとかも推されてましたね。

12あなたの名前を入力してください:2018/12/19(水) 23:07:49 ID:5aPi6Jnw
メモ帳使いのワイ、低見の見物

13あなたの名前を入力してください:2018/12/19(水) 23:38:44 ID:kiL4RePo
ERBの読み方・書き方_181219
http://era.moe.hm/cgi/era2/upload.php?id=0000243
erbしか扱えない自分の経験したつまずきポイントを網羅したら長くなってきた
館の羊さんの資料にmorphが過去に書いたブツが取り上げられててちょっとこそばゆかった

14あなたの名前を入力してください:2018/12/20(木) 00:11:06 ID:v416t5kM
>>13
今更ながら、無許可に掲載してすみませんです…。
こういった講座とか役に立つ情報が埋もれていってしまうのは
もったいないなと感じまして…。
掲載したくないなどありましたら遠慮なくお申し付けください。

15あなたの名前を入力してください:2018/12/20(木) 00:21:45 ID:QKiYtwH2
>今更ながら、無許可に掲載してすみませんです…。
いえいえ、嬉しかったですよ
>掲載したくないなどありましたら遠慮なくお申し付けください。
13に関してはCC0にしておいたので好きに使ってくれて構いません
こちらとしても情報が必要な人に届かないというのは残念ですし

16あなたの名前を入力してください:2018/12/20(木) 16:34:51 ID:sUvkdm3Y
era改造どころかプログラミング初心者なんですがera構文の理解にあたってわからないところがあります。
このスレはそういった質問も投下していいんでしょうか。

17あなたの名前を入力してください:2018/12/20(木) 17:13:35 ID:An1j1O3Q
いいけど>>2のテンプレ使おう

18あなたの名前を入力してください:2018/12/20(木) 18:27:09 ID:sUvkdm3Y
>>17
ありがとうございます。
今回のはいろいろ調べてたら解決したのでまた何かあったら質問させていただきます。

19あなたの名前を入力してください:2018/12/30(日) 03:20:05 ID:bPuIL4Dc
A or B を満たし、かつCも満たす場合って

IF A || B && C
IF C && A || B

どっちなんでしょうか?

20あなたの名前を入力してください:2018/12/30(日) 03:51:22 ID:5oJxKvTY
IF (A&&C)||(B&&C)
で括弧で括る

21あなたの名前を入力してください:2018/12/30(日) 05:13:57 ID:bPuIL4Dc
なるほどー、ありがとうございました

22あなたの名前を入力してください:2018/12/30(日) 06:53:49 ID:5lWoXAdc
IF C
IF A || B
でもいい どっちが見やすいかは好みの問題で

23あなたの名前を入力してください:2018/12/30(日) 06:56:15 ID:ToX0daDs
処理速度は比較が少ない分
>>22

24あなたの名前を入力してください:2018/12/30(日) 07:03:43 ID:ToX0daDs
の方が処理が速いよね
可視性と文字数とその後に新しい条件を付けやすいかなど
メリットデメリットもあるけど

25あなたの名前を入力してください:2018/12/30(日) 09:05:03 ID:9u55/tCE
(A || B) && C かなー
ただまぁELSE部分を使うか次第な気がする

26あなたの名前を入力してください:2018/12/30(日) 16:27:07 ID:o9f3HSS6
>>22は入れ子が深くなって可読性が悪くなるから俺も>>25かな

27あなたの名前を入力してください:2019/01/02(水) 22:50:42 ID:kaTRwDpA
自分はまとめられるより条件1つずつ見てった方がわかりやすいんだけど少数派?

28あなたの名前を入力してください:2019/01/03(木) 07:47:21 ID:s9u0IYDA
少数派というかその辺好みだし
処理工程減らしたい人もいりゃ行数減らしたい人や一つ一つフルに条件明記する人もいる
ただ不特定多数と作業するならコメントなり何なりで説明つけるくらいは欲しいよね

29あなたの名前を入力してください:2019/01/03(木) 17:40:18 ID:zbllGr/Q
パッチが配布されたCSVやERVファイルを比較して、
ここの文が変更されているとか、この行が追加されているとか
みたいなのがわかるツールってあるんでしょうか?
一行ずつ地道に見ていくしかない?

30あなたの名前を入力してください:2019/01/03(木) 17:46:00 ID:WH8UBHGw
winmergeでディレクトリ比較かなぁ

31あなたの名前を入力してください:2019/01/04(金) 08:45:59 ID:pjfiPmnE
>>30ありがとうございます。
試してみます。

32あなたの名前を入力してください:2019/01/05(土) 23:24:31 ID:sQ9IhQbY
>>27, 28
使える状況ならこういうのもいいよね

;AB共に満たさないなら終了
SIF !A && !B
RETURN
;Cを満たさないなら終了
SIF !C
RETURN
(以下条件を満たした場合の処理)

33あなたの名前を入力してください:2019/01/05(土) 23:30:00 ID:ybVYOjI.
>>32
バリアントにもよるだろうけど、COMABLE.ERBがそんな構造になってるな

34あなたの名前を入力してください:2019/01/05(土) 23:34:36 ID:sQ9IhQbY
そうそう
時々IF~ENDIFがクッソ長い関数とか見るけど、そういうのは最初に条件満たさない場合を
スパっとRETURNで終わらせちゃった方がすっきりするよね

35あなたの名前を入力してください:2019/01/05(土) 23:52:12 ID:BUI6jrFM
早期リターンとかガード節とか呼ばれるやつね
場合によるが条件部が複雑になるときは、条件を変数化して名前をつけたり、関数化したり、時にはSELECT文に切り替えたりすると読みやすくなる

36あなたの名前を入力してください:2019/01/06(日) 18:10:50 ID:vfrmZZh.
CALL SERIF,"よく来てくださいましたね、%NAME:MASTER%"

セリフなどの文字内容をCALLで入力する時
%NAME:MASTER%とか、こういうのちゃんとNAMEから返した「あなたの名前」ではなく
%NAME:MASTER%をそのまま表示してしまったのですが…
どうすればちゃんと反応してくれるようになるのでしょうか?

37あなたの名前を入力してください:2019/01/06(日) 18:40:54 ID:vJ4A4UVU
CALL SERIF,@"よく来てくださいましたね、%NAME:MASTER%"

38あなたの名前を入力してください:2019/01/06(日) 19:24:32 ID:vfrmZZh.
>>37
なるほど、ありがとうございました

39あなたの名前を入力してください:2019/01/12(土) 17:29:06 ID:K5r1r8Ic
色々研究していじったりするところ……
気づいたんだけど…
画像表示に
html_print < img scr ="" height = "" width = "" ypos= "">
yposはあるけど、
xposがないんだよ!!
じゃどうやって画像のxポジションを変えるのだ???
png画像自体を弄るバカな方法があるけど…
コードだけでなんとかならないかな
教えて!erabasicが詳しい人!!

4039:2019/01/12(土) 18:03:48 ID:K5r1r8Ic
また色々試したけど
まさかhtml_printのなかでめっちゃ長いhtml指令や文面など色々入れちゃうんだね…
alignで画像の位置を画面の中心か左右側に固定できるけど、
結局の所、画像の場所を具体的に設定できる命令が見つからなかった…
やはり誰か教えてー

41あなたの名前を入力してください:2019/01/13(日) 12:03:43 ID:icacJPXQ
https://ja.osdn.net/projects/emuera/wiki/exhtml
「横軸位置の調整には<shape type='space'>やbuttonのpos属性を利用してください。 」だってよ

42あなたの名前を入力してください:2019/01/13(日) 17:31:17 ID:dLHN1Gw2
俺もHTML_PRINTはめっちゃ長くなってるな
行連結だと半角スペースが入るから微妙にずれてしまう

>>40
リソース指定時点でxposを入力してしまう手も一応ある

43あなたの名前を入力してください:2019/01/14(月) 20:50:08 ID:jffPfmi.
>>41
まさか shapeのspaceを使うとは…(posでウィキサーチしてたので見落としてしまった)
ありがとうございました

>>40
xposでエラー出たから聞きに来たんけど。指定できるのか???

44あなたの名前を入力してください:2019/01/14(月) 22:41:17 ID:G3iMYD.c
>>43
csvにxposを記述するということではないの?
それでもSPRITEMOVEでいいんじゃないかなと思ったりする

45あなたの名前を入力してください:2019/01/17(木) 01:03:39 ID:GHAD01.Y
関数名やファイル名が英語(ローマ字)表記統一が多いのは何か理由があるのでしょうか、慣習的なものですか?
2バイト文字だと最終的な読み込み速度が違ってきたり、変なエラーの原因にでもなるんでしょうか、日本で普通のPCで遊ぶ分には関数名等に日本語を使っても大丈夫という認識でいいんですか?

46あなたの名前を入力してください:2019/01/17(木) 02:36:11 ID:KqwN8Adk
>>45
プログラミングの慣習でもあるし、口上とかでがんがん日本語を書き連ねる関係から
関数名とかまで日本語で書くとリファクタリング&検索しづらくなるので基本英語
あと速度云々言う前にeraBASIC以外の言語に少しでも触れておく事をおすすめします

47あなたの名前を入力してください:2019/01/17(木) 21:10:53 ID:q.a4tyBk
実際に日本語関数は多々ありますし、ファイル名に一部日本語を使うのはもっとよくあります。
だから「大丈夫かどうか」については「大丈夫です」となろうかなと思います

48あなたの名前を入力してください:2019/01/17(木) 22:35:55 ID:GHAD01.Y
>>46
>>47
なるほどわかりました、ありがとうございました

49あなたの名前を入力してください:2019/01/17(木) 22:46:21 ID:vugMhyNU
「言語的に許容されてる」と「可読性高いコードのために使える」は別概念だからねぇ

50あなたの名前を入力してください:2019/01/18(金) 22:15:35 ID:oVWtoIIs
>>43
色々試した感じshapeは空白の文字数を考えればいいから
文字の半角スペースの数でレイアウトするのと同じ感覚で使いやすい
けど重ね合わせ用の<nobr>で挟むと0が基準になって横に並んでいかないから
<nonbutton>や<button>をよく使う

@IMG_DISP(IMG_NAME, POS_X, POS_Y, SIZE_X, SIZE_Y)
#FUNCTIONS
#DIMS IMG_NAME
#DIM POS_X
#DIM POS_Y
#DIM SIZE_X
#DIM SIZE_Y
#DIMS IMG_TAG

IMG_TAG '= IMG_TAG + @"<nonbutton pos='{POS_X}'>"
IMG_TAG '= IMG_TAG + @"<img src='%IMG_NAME%' ypos='{POS_Y}' width='{SIZE_X}' height='{SIZE_Y}'>"
IMG_TAG '= IMG_TAG + "</nonbutton>"

RETURNF IMG_TAG

HTML_PRINT IMG_DISP("画像名", 横位置, 縦位置, 画像横幅, 画像縦幅)
とか

重ね合わせするときは
#DIMS IMG_TAG_PILE
IMG_TAG_PILE '= "<nobr>"
IMG_TAG_PILE '= IMG_TAG_PILE + IMG_DISP("画像1", 100, 100, 画像横幅, 画像縦幅)
IMG_TAG_PILE '= IMG_TAG_PILE + IMG_DISP("画像2", 100, 100, 画像横幅, 画像縦幅)
IMG_TAG_PILE '= IMG_TAG_PILE + IMG_DISP("画像3", 100, 100, 画像横幅, 画像縦幅)
IMG_TAG_PILE '= IMG_TAG_PILE + "</nobr>"
HTML_PRINT IMG_TAG_PILE
ってやったり
テキストの回り込みをやりたいときはフォントタグも加える

テストしてないからどこか間違えてたらごめん

51あなたの名前を入力してください:2019/01/18(金) 22:22:53 ID:oVWtoIIs
>>45
関数名がよく使う日本語だと口上とかのgrepで引っ掛けてしまいやすいのは同じく思う
ファイル名は日本語だとわかりやすいんだけど長い名前かつフォルダ階層が深くなると
エクスプローラじゃzip圧縮できないことがあった
そういう意味じゃ英語のほうが安心かもしれない

52あなたの名前を入力してください:2019/02/13(水) 02:20:02 ID:woLKtqQM
EMUERAって配列渡しができないんでしょうか?
できないなら配列操作関数を作りたいときはみなさんどうしていますか
諦めてリストライブラリを導入したほうがいいんでしょうか

53あなたの名前を入力してください:2019/02/13(水) 02:39:14 ID:woLKtqQM
すみませんSELF_RESOLVEしました
REF使えば普通にできました。実験したコードにバグがあったのでできないと思っていただけでした

54あなたの名前を入力してください:2019/02/25(月) 20:03:27 ID:QfRwXbL6
すいません教えてください

表示スキップ中にデフォルト値を持たないINPUTに遭遇しました
INPUTに必要な処理をNOSKIP〜ENDNOSKIPで囲むか、SKIPDISP 0〜SKIPDISP 1で囲ってください
NTR_MASTER_SEX.ERBの15行目でエラーが発生しました:Emuera1821+v11.1
INPUT
エラー内容:無限ループに入る可能性が高いため実行を終了します

このエラーがINPUT内部をいじっていない、というより直前のIFに条件増やして保存かけただけで出始めて
保管しておいた原本と差し替えても再発するんですが、こういうときの対処法ってどうすればいいんでしょうか?
INPUTの内容自体は[0]か[1]入力の二択式です。

55あなたの名前を入力してください:2019/02/25(月) 23:55:57 ID:3oNWuU2U
他のファイルは触っていない?
いなくても元あったバグが噴出してる可能性もあるけどもな。

エラー文にあるように、SKIPDISPで表示スキップをしてるのが問題なわけなので、
SKIPDISP 1(か何か)後に関数内でちゃんとSKIPDISP 0されてるかどうか見てみればよさそう。
さしあたってはSKIPDISPでGrep掛けてみるといいのでは。

56あなたの名前を入力してください:2019/02/26(火) 00:00:02 ID:3RIS2iXM
本来は SKIPDISP 1 の状態で実行されるべきじゃない処理が実行されてるんだろうね
どこかで全体の処理の流れを変えてしまってないか見直したほうが良いかもしれないけど暫定対策としては

1.エラーが出てる箇所のINPUTと、そのINPUT付近の部分を
NOSKIP
(選択肢表示)
INPUT
(後処理とか、INPUTの入力値が範囲外だった時に前に戻る処理)
ENDNOSKIP
のような形にする

2.ゲームのシステム側で選択肢を勝手に決める
IF ISSKIP()
RESULT = (ゲームのシステム側で勝手に決めた選択肢)
ELSE
INPUT
ENDIF

とりあえずはどっちかで何とかなると思う

57あなたの名前を入力してください:2019/02/26(火) 07:30:11 ID:39FfCTFA
>>55 >>56
レス遅くなってすいません
今いじり始めたところ以外はまだ手を付けていなかったんです。これで成功したら少しずつと思ってて
ひとまず56さんの1.で試したらそこは正常になったようです
続く同じINPUT記述されているところでまたエラー起こったんで、元のバランス崩しちゃダメなところだったんですかね・・・

#DIM iLoop
WHILE 1

中略

IF CFLAG:〜 (&& ここに条件追加した)
PRINTL [0]A [1] B
ELSE
PRINTL [0] C [1] D
ENDIF
$INPUT_LOOP_NMS_1
INPUT
IF RESULT == 0 && CFLAG:MASTER:〜
PRINTFORMW 描写

ERB内すべておなじ書き方で、NMSあとの数字で区別されてるようでした
とりあえず夜にGrepでSKIPDISPも調べてみます。ありがとうございました!

58あなたの名前を入力してください:2019/03/14(木) 00:01:47 ID:7hLP1Qyo
全くプログラムとか習得してない者ですが、少し携わってみたいものができたので
思い切って製作の質問をしてみます。
【質問】
・対象バリアント:era_inSchool
・質問内容:基礎の追加
新しいBaseのステータスを追加するためには何をどう弄ればいいんでしょうか…。
また、能力表示としてカラーバーを追加する方法も聞きたいです。

59あなたの名前を入力してください:2019/03/14(木) 10:41:57 ID:gEuYDOes
よくわかっていないけれど頑張って出しゃばってみる。
長くなったので二分割でレスします。

>>58
すみません、era_inSchoolの本体はどれでしょうか?
era_inSchoolAver0.18 まとめ版なのか 旧era0002016.zip
era_inSchoolA私家改造版なのか 新era0000107.zip
era_inSchool_orgなのか 新era0000494.zip

一応、era_inSchoolAver0.18 まとめ版での手順をテキストにしてみました。
汎用関数なので大幅な変更は無いと思いますが…。

対象バリアント era_inSchoolAver0.18 まとめ版 era0002016.zip
パッチなどはあてていないです。

1.基礎の追加

csvフォルダにBase.csvを作って
0,体力
1,気力
2,射精
3,母乳
4,射精(触手)
10,今回追加したい名前
を記述。

追加したいときはBase.csvに記述した後、
ERB内かキャラのCSVに BASE:XX = xx や ERB内で最大値を決めたいときは MAXBASE:XX = xx
など記述すれば基礎を追加できます。
(基礎番号10としましたが、そのほかでもOKです。その場合は下のコピペの部分の (LOCAL:99):10 の 10 をその数字又は文字にして下さい)
あとはPRINTFORMなどで表示をすればできる…はず。

60あなたの名前を入力してください:2019/03/14(木) 10:45:05 ID:gEuYDOes
>>58

2.カラーバーの追加
ERB>汎用組込み関数>BAR.ERBにカラーバー用の関数が書かれています。

とりあえず、ERB>INFO.ERBの能力表示の詳細欄に追加してみます。
;学力、運動能力、戦闘能力、感性を表示 (103行目付近…?)
の上に空き行を作り

 PRINTFORML {LOCAL:2}/{MAXBASE:(LOCAL:99):1}
;テストバーの表示 〜ここからコピペ〜
 PRINT テス
 LOCAL:2 = BASE:(LOCAL:99):10
 CALL PRINT_COLORBAR, LOCAL:2, MAXBASE:(LOCAL:99):10, 25, UNICODE(0x2586), UNICODE(0x2586), 0xFFFFFF, 0x504010, -128*8
 SIF LOCAL:2 < 10
  PRINTFORM
 SIF LOCAL:2 < 100
  PRINTFORM
 SIF LOCAL:2 < 1000
  PRINTFORM
 PRINTFORML {LOCAL:2}/{MAXBASE:(LOCAL:99):10}
↑ここまで

多分、MAXBASE:10が0なので表示が変になるかと思います。
なので、CSVかERBで指定をしておいて下さい。

CALL PRINT_COLORBAR, LOCAL:2, MAXBASE:(LOCAL:99):10, 25, UNICODE(0x2586), UNICODE(0x2586), 0xFFFFFF, 0x504010, -128*8
にて、バーの呼び出しを行っています。
内容はおおまかですが、
CALL PRINT_COLORBAR, 基礎の番号, その基礎の最大値, バーの長さ, バーの形を指定, バーの形を指定, バーの色を指定, バーの背景色を指定, バーのグラデーション幅を指定
となっているようです…多分。

CALL PRINT_COLORBAR. 基礎番号,〜略
を改変できるとバーの追加ができると思います。
詳しくは ERB>汎用組込み関数>BAR.ERBのBARカラー化を覗いてみてください。

すみません、俺も良く分かっていないので上手く説明できないです。
間違いなど有りましたらご指摘をお願いします。

61あなたの名前を入力してください:2019/03/14(木) 23:05:56 ID:7hLP1Qyo
>>59 >>60、出来ました!ありがとうございます。
解説のおかげでデータを用意→呼び出しという手順がちょっと理解できた気がします。
ド初歩なんでしょうけど、めっちゃ助かりました。

62あなたの名前を入力してください:2019/03/16(土) 00:25:46 ID:/RaW/dfg
そういえば、秀丸エディタ用の設定ファイルってパチュロダの方に普通にあるよ
http://eratoho.dyndns.dk/cgi/up1/img/eraT0008375.7z

エンディングの判定にビット(2進数)を採用したんだけど、色々見て回って混乱しながら数時間かけて作ったコードがこれ(まだ作りかけ)
単&で判定できことを知るためにほとんどの時間を費やしたので晒す

@ENDING_CHECK
#FUNCTION
LOCAL = 0
;エンディング1 ポイントを100000以上貯める
SIF MONEY >= 100000
 LOCAL += 0b000001
;エンディング2 最後の一人になる
SIF CHARANUM <= 1
 LOCAL += 0b000010
RETURNF LOCAL

@ENDING
SIF ENDING_CHECK() & 0b000001
 PRINTL [1] - エンディング1(ポイントを100000以上貯める)
SIF ENDING_CHECK() & 0b000010
 PRINTL [2] - エンディング2(最後の一人になる)
PRINTL [99] - 戻る
$INPUT_LOOP
INPUT
SELECTCASE RESULT
 CASE 1
  SIF ENDING_CHECK() & 0b000001
   CALL ENDING1
 CASE 2
  SIF ENDING_CHECK() & 0b000010
   CALL ENDING2
 CASE 99
  RETURN
ENDSELECT

63あなたの名前を入力してください:2019/03/16(土) 00:53:02 ID:e/fqMXQU
BITの判定にはSETBIT/GETBITがわかりやすくておすすめです
こんな感じ(BITの判定位置を変えたのはENDING番号と合わせただけで深い意味はない)

@ENDING_CHECK
#FUNCTION
#DIM DYNAMIC E_CHECK;DYNAMNIC指定をした変数は自動で初期化
;エンディング1 ポイントを100000以上貯める
SIF MONEY >= 100000
 SETBIT E_CHECK, 1
;エンディング2 最後の一人になる
SIF CHARANUM <= 1
 SETBIT E_CHECK, 2
RETURNF E_CHECK

;ENDING_CHECK()の実行は毎回一度で十分
@ENDING
#DIM DYNAMIC E_CHECK
E_CHECK = ENDING_CHECK()
SIF GETBIT(E_CHECK, 1)
 PRINTL [1] - エンディング1(ポイントを100000以上貯める)
SIF GETBIT(E_CHECK, 2)
 PRINTL [2] - エンディング2(最後の一人になる)
PRINTL [99] - 戻る
DO
 INPUT
 SELECTCASE RESULT
  CASE 1, 2
   SIF !GETBIT(E_CHECK, RESULT)
    CONTINUE
   CALLFORM ENDING{RESULT}
   RETURN
  CASE 99
   RETURN
 ENDSELECT
LOOP 1

64あなたの名前を入力してください:2019/03/18(月) 22:44:35 ID:1Kat6d2g
【質問】
・対象バリアント:eratohoA(E2)
・質問内容:調教コマンドに確率イベントを仕込む方法
あるコマンドから派生入力とかじゃなくて、一定確率でイベントが起こるってどう記述したらいいんでしょう。
似た仕様のコマンドがあれば真似してみるんですけど、作る側目線でeraを見たことがないので思い当たらなくて…

65あなたの名前を入力してください:2019/03/18(月) 22:49:03 ID:TJgTH4GE
IF RAND:100 < 発生確率
△なんかの処理
ENDIF

△はインデントなんでタブなり半角スペースなりで置換ね

66あなたの名前を入力してください:2019/03/18(月) 23:14:11 ID:asKDrRpo
;例 SIFのRANDを変えることで確率を変えることができる。
;今回は確率三分の一
IF RAND:100
 SIF RAND:0 < 33
  CALL EVENT_0001
 SIF RAND:33 < 66
  CALL EVENT_0002
 SIF RAND:66 < 100
  CALL EVENT_0003
; GOTO END
ENDIF

@関数でEVENT_0001、EVENT_0002、EVENT_0003を作る。
その関数に口上やイベントを作成する。

イベントが起こった際に残りの処理をしたくない場合はRETURN前に
ラベル$ENDを作り、イベント後にGOTO ENDを実行し$ENDに飛ぶ。

すみません説明下手で。

67あなたの名前を入力してください:2019/03/18(月) 23:23:26 ID:asKDrRpo
>>66
ぬおっ?
確率三分の一と言いながら、三分の一で1.2.3のどれかが実行される仕組みになっていたという…。
この場合は三分の一でどれかが起こる、が正しいです。

68あなたの名前を入力してください:2019/03/18(月) 23:24:15 ID:fV9G0cLc
>>66の構文は意図はわかるけどおかしいと思うの
SIFの条件が常に真(RAND:66なら66以上にならない等)だし
RAND:0はemueraさんに叱られそうな気がする

確率抽選系のはなしは汎用関数スレや新バリスレの過去ログにいろいろ転がってたはず

69あなたの名前を入力してください:2019/03/18(月) 23:38:57 ID:asKDrRpo
あー本当だ、>>66-67の文は忘れてください。
SIF RANDとか何やってんだコレ…。

70あなたの名前を入力してください:2019/03/18(月) 23:58:17 ID:asKDrRpo
>>64.68
確認もせずにすみません。
これでどうでしょうか?

LOCAL = RAND:100
IF LOCAL
 IF LOCAL < 33
  CALL EVENT_0001
 ELSEIF LOCAL < 66
  CALL EVENT_0002
 ELSEIF LOCAL < 100
  CALL EVENT_0003
 ENDIF
;GOTO END
ENDIF

@EVENT_0001
PRINTL 対象イベント
@EVENT_0002
PRINTL はずれ
@EVENT_0003
PRINTL はずれ

確かに、汎用関数・ライブラリ総合スレに確立に関する関数があったかと思います。
そちらを参考にしてみては如何でしょうか。

71あなたの名前を入力してください:2019/03/19(火) 00:15:21 ID:xI4Z.0PM
>>65-70、ありがとうございます。考えてた通りのが出来ました。
汎用関数・ライブラリ総合スレにランダム抽選関数の投稿自体はあったんですけど、
404エラーだったので利用出来ずじまいですね…。

72あなたの名前を入力してください:2019/03/19(火) 00:19:23 ID:403rI9.A
>>70
自分もこういう構文のサンプルが欲しかった
ありがとう

73あなたの名前を入力してください:2019/03/19(火) 00:25:36 ID:Ws6/zu.c
>>68さん
ご教授ありがとうございました。
自分もまだまだ未熟なので、またご指摘をいただければと思います。

74あなたの名前を入力してください:2019/03/19(火) 00:28:54 ID:5YE.0AcE
>汎用関数・ライブラリ総合スレにランダム抽選関数の投稿自体はあったんですけど、
>404エラーだったので利用出来ずじまいですね…。

鯖瀕死騒動等いろいろありまして
復旧時にアドレスが変わってます
たとえば
ttp://era.moe.hm/cgi/era/upload.php?id=0004027
 ↓
ttp://era.moe.hm/cgi/era/img/era0004027.zip

1.対象のid(上記例なら0004027)をメモる
2.webブラウザからeraロダに入ってeraロダoldに入る
3.ctrl+fでid検索して対象物を見つける

こんな風にすれば発掘はできます

75あなたの名前を入力してください:2019/03/19(火) 12:28:57 ID:/n.6NqIA
3分の1になってないような。等分ならRAND:3にしたほうがわかりやすそう。あとGOTOはなるべく避けたいところ
確率で複数分岐するならSELECTCASE文が便利、ひとつの例に詰め込んだからかえってわかりにくかったらごめんね
;0-99のどれかになる
LOCAL = RAND:100
SELECTCASE LOCAL
 ;0のときだけなので1%
 CASE 0
  CALL 1%で起こるべき何か
 ;1から8のときと11のときなので、8% + 1%
 CASE 1 TO 8, 11
  CALL 9%で起こるべき何か
 ;90%(実際は89%、IS <= 99でないといけない)
 CASE IS < 99
  CALL 90%で起こるべき何か
 ;これは分岐間違えてるので99のとき(1%)起こってしまう
 CASEELSE
  THROW THROWはemueraがエラーを吐く命令です
ENDSELECT

76あなたの名前を入力してください:2019/03/19(火) 12:53:57 ID:Ws6/zu.c
>>75さん
ありがとうございます。
書き込みに問題があったようで、少し黙っています。

77sage:2019/04/21(日) 09:26:40 ID:fJj4Pscc
【質問】
・eratohoA(E2)
・対象を100人以上へ増やしたい
・ド素人なのですが原作人数的に調教対象が100人を超えてしまいます
SHOP2.ERBの217行目からの説明でフラグ1000番台を使用することと
処理が済んだら自動でリセットはされないのでやっておくことなどは記載されてるのですが
さっぱりなのですがとっかかりのアドバイスなどいただけませんでしょうか

78あなたの名前を入力してください:2019/04/21(日) 11:56:28 ID:.vNFjlKk
>>77
アドバイスと言うか、改変箇所を書いてみました。
長くなったのでテキストに。
http://eratoho.dyndns.dk/cgi/up2/upload.php?id=0000242
一応、テストはしましたが不具合がでたらごめんなさい。

79あなたの名前を入力してください:2019/04/21(日) 11:58:16 ID:Ea39AdOM
>77
対象を100人以上にする際に手を加えるべきポイントは以下の三点です

・購入時のフラグ処理の件
これは「新バリアント作成を目指すスレ9」の177さんが詳しく書いてるけど、すごい乱暴に説明すると
①SHOP2.ERB内で「REPEAT」を検索して「REPEAT 100」をキャラ数より大きい数字に(「REPEAT 500」とか)書き換える
②SHOP2.ERBの282行目「RESULT > 100 + 100」も「RESULT > 100 + 500」とかに書き換える
一応、自分は「REPEAT 200」内の処理も怪しいと踏んでこれも500に変えてるけど、特にエラーは発生していない

・奴隷購入及び主人公選択の件
もしキャラ数が120人を超えているなら、デフォではキャラ番号の若い順に30人x4ページ分しか表示されないので、これにも手を加える必要がある
SHOP2.ERBの282行目とEVENT_S.ERBの237行目の「TFLAG:100 < 3」の「3」はページ数(ページ0から数えてるので実質4ページ)なので、ここを書き換えるとおk

・淫乱取得時の名前呼んだり艶めかしい視線送ったりする件
デフォではCFLAG:899〜998も、キャラ番号数分のフラグをふんだんに使っている
EVENT_A.ERBの369行目の「REPEAT 99」も「REPEAT 500」とかに書き換えるとおk……と思う
自分はフラグが勿体なくてEVENT_A内の処理も全コマンドでの処理も抹消してしまったけど、面倒なのでオススメはできない

同じ所で躓いてアドバイスを頂いた身として、完成を楽しみにしています……応援しています

80あなたの名前を入力してください:2019/04/21(日) 12:08:14 ID:.vNFjlKk
間違えてtohoのほうにアップロードしてしまった…。
こちらです。
http://era.moe.hm/cgi/era2/upload.php?id=0000612
txtで上げたら文字化けして見れなかった…。

81あなたの名前を入力してください:2019/04/21(日) 13:05:54 ID:fJj4Pscc
間違えて名前欄にsage入れた阿呆に丁寧にありがとうございます
頂けたレスを参考に頑張りたいと思います

82あなたの名前を入力してください:2019/04/21(日) 13:23:57 ID:fJj4Pscc
>>80
再々申し訳ありません
ロダから用意するもの、にあるファイルはeraロダに上がってるファイルであってますか

83あなたの名前を入力してください:2019/04/21(日) 13:49:35 ID:.vNFjlKk
>>82
説明不足で申し訳ありません。これらはtohoの旧ロダにあるものです。
お手数をお掛けしますが、
こちらからhttp://eratoho.dyndns.dk/cgi/up1/
Ctrl+FでeraT003126など検索をお願いします。
用意するものと書きましたが、試した環境がそれだったので…。
本体があれば問題はないかなと思います。

あと、>>79氏の方が詳しく説明されているので
そちらの方を参考にした方がいいかなとは思います。

84あなたの名前を入力してください:2019/04/21(日) 13:56:25 ID:.vNFjlKk
うわ、修正パッチを無くても問題ないとか失礼すぎる…。
失言でした。すみません。

改変する部分にはパッチは関係ないので、
本体があれば問題はないかなと思います。です。
(修正パッチはあてた方がいいです)

85あなたの名前を入力してください:2019/04/21(日) 14:12:51 ID:fJj4Pscc
>>78さん、>>79さん、迅速にお相手いただきありがとうございます

86あなたの名前を入力してください:2019/04/21(日) 16:58:05 ID:fJj4Pscc
おかげさまで191人並びました
どうもeratohoA(E2)は汎用口上のブランクテンプレートがないようなので
改造しようと試みて躓いたら御教授賜りますようお願い申し上げます

87あなたの名前を入力してください:2019/04/21(日) 17:16:16 ID:SWUvwums
Aもかなり古いバリアントだからな
色んなバリアントの派生元になったという意味では偉大な傑作だが、
今から改造元にするには色々問題あると思う

88あなたの名前を入力してください:2019/04/21(日) 18:34:12 ID:fJj4Pscc
ド素人ですがそもそも何を元にさせていただければいいでしょうか
とか作り始める前にまず聞くべきでしたかもしれません
派生元として良いという文章で決めたので
確かに既に昔の物となれば、それについて聞かれても、もう触ってないといったところもあると思いますし
でも助かりました、ありがとうございました

89あなたの名前を入力してください:2019/04/21(日) 21:14:53 ID:Ea39AdOM
ぶっちゃけ、「逆レイプ」「3P」「助手を犯させる」辺りは条件次第では不具合起こるし、三周目突入時にバグで強制終了するなど怪しい部分は少なくない
ただ派生先でどのように改造されたかを見比べられる対象が多いのがメリットとしてデカい
上記の三周目バグも例えばeraVoiceroidAのENDING.ERBを参照して修正できる
……まあ、コードに慣れたり改造しまくって自分の色に染めたりにはAも悪くないけど、基本的には猿のようにシコれたバリアントをそのまま改造するのが手っ取り早いかなという感じ

90あなたの名前を入力してください:2019/04/21(日) 21:44:04 ID:dViJkrcQ
A系統で行くならeracustom_cあたり使ったほうがいいのかなーという感覚

91あなたの名前を入力してください:2019/04/26(金) 23:54:35 ID:FHH4VswQ
emueraに画像関連の命令が増えたと聞いてwikiを見たのですがよくわかりません
GraphicsとSpriteはどう違ってどういう風に使い分けるのでしょうか

92あなたの名前を入力してください:2019/04/28(日) 16:33:07 ID:65cKKms.
>>91
色々試してみたけど俺には使い方が分からなかった…。
力になれず申し訳ないです。

93あなたの名前を入力してください:2019/04/30(火) 09:36:34 ID:d2uh5PNE
すまん、間違ってたらアレなんだが・・・・
もしかしたら@USERSHOP以外でBEGIN TRAINしても調教画面に遷移しないのか?
色々試してるんだが、何度やっても@EVENTTRAINを呼んでくれない・・・・

94あなたの名前を入力してください:2019/04/30(火) 11:00:25 ID:zZusTfoM
真っ先に思い浮かぶのはコレ
BEGIN命令はCALLとは違い、呼び出し元の全ての処理が終了してから処理が実行されるので
以下の構文は動かない
@HOGE1
DO
 CALL HOGE2
LOOP1

@HOGE2
BEGIN TRAIN

95あなたの名前を入力してください:2019/04/30(火) 11:22:02 ID:d2uh5PNE
ああ、確かに関数の途中でCALLして、その先でBEGINしてるわ。それが原因か
CALLEVENTしたら動いたんでしばらくそれで様子をみる。ありがとう

96あなたの名前を入力してください:2019/05/03(金) 22:52:37 ID:DJhgp/1g
>>91
使い方が正しいかはわかってないけどでかい画像をGraphicsで読み込んで
Spriteで切り取って名前つけて使う感じだと思う

97あなたの名前を入力してください:2019/05/09(木) 09:43:46 ID:SwaItuwU
スプライト処理...ゆっくり時代を追いかけて行ってるな
でもテクスチャパッカーがフリーだとあんまりいいのなかった気がする
なんかおすすめある?

98あなたの名前を入力してください:2019/05/13(月) 00:59:58 ID:simK.DtU
PRINTFORM あああ

SETCOLOR
PRINTFORM いいい
RESETCOLOR

PRINTFORML ううう


みたいな文中の一部だけ色を変えたいとき、他に何かスマートな方法ってありますか?

99あなたの名前を入力してください:2019/05/13(月) 01:47:53 ID:uGaEeJSQ
汎用関数ライブラリスレにいいのがあったはず

100あなたの名前を入力してください:2019/05/13(月) 02:25:49 ID:simK.DtU
見つけました、ありがとうございます

101あなたの名前を入力してください:2019/05/13(月) 17:06:53 ID:KXNwL7M6
【質問】
・自作バリアント
質問内容
@組込_COM0
@組込_COM1
@組込_COM2

のように番号を割り振った組み込み関数を作りたいのですが
条件式に入れるさいの書き方がわかりません

ループ文に入れた時の

SIF 組込_COM{LOCAL}

みたいなやつです

CALLFORMFを使った呼び出しは作れたのですが
RETURNFの返り値で判定をしたい場合はどうしたらいいのでしょうか

102あなたの名前を入力してください:2019/05/13(月) 17:37:44 ID:cKqUFHqc
式中関数はCALLF系の命令を除き通常の関数呼び出しが出来ないのでCALLF系で呼び出す事になるけど
CALLF系の命令は戻り値を破棄してしまうので戻り値を取得したい場合は
式中関数内部でRESULTやRESULTSに値を設定しておけばよかったはず

@組込_COM0
#FUNCTION
RESULT = 1
RETURNF RESULT


CALLFORMF 組込_COM{LOCAL}
SIF RESULT
;略

大雑把にこんなん
式中関数であるメリットが殆どなくなってしまうので普通の関数定義して
TRYCALLFORMで呼び出せばいいやってなる

103あなたの名前を入力してください:2019/05/13(月) 18:03:54 ID:KXNwL7M6
>>102
回答ありがとうございます

やっぱりそうなりますよね
一応自作の式中関数からも呼べたりしたのでCALLFで呼び出す形で進めます

104あなたの名前を入力してください:2019/05/13(月) 18:07:07 ID:cKqUFHqc
あー条件式内で書式指定して使いたいという事なら無理(構文エラーになる)なはず
CALLFORMFを使えば式中関数を通常の関数呼び出しする時に書式指定できるよーてだけ

105あなたの名前を入力してください:2019/05/13(月) 18:10:16 ID:cKqUFHqc
oh...リロードしてなかったから余計なレスしてもうた
式中関数が書式指定対応してたりTRYCALL出来たればすげーはかどるんだけどねぇ

106あなたの名前を入力してください:2019/05/13(月) 22:43:59 ID:HlU3nJik
式中関数の結果を取りたいならSTRFORMを使えばいい
STRFORM("{組込_COM + TOSTR(LOCAL) + "()}")で結果が取れる
ただし呼び出し先の関数がないと容赦なく異常終了するので注意

これをライブラリ化したのが↓ね
http://jbbs.shitaraba.net/bbs/read.cgi/otaku/16783/1498745115/93

式中関数をTRYCALLしたいよなぁ
せめて関数の存在チェックが欲しい

107あなたの名前を入力してください:2019/05/13(月) 22:45:55 ID:HlU3nJik
閉じ忘れてた。こうだ
STRFORM("{組込_COM" + TOSTR(LOCAL) + "()}")

108あなたの名前を入力してください:2019/05/14(火) 00:20:38 ID:E1ql9/sQ
>>106
おお考えていたものにかなり近いです
使い所が難しそうですが周りを整えながら試してみます
ありがとうございました

109あなたの名前を入力してください:2019/05/15(水) 21:50:59 ID:jrEcSrDM
特定の素質を持つキャラのみを表示させる場合ってどうしたらいいですか?
例えば、ステータス画面で作品ごとのキャラのみ表示とか死体です

110あなたの名前を入力してください:2019/05/15(水) 22:41:15 ID:C5D3sqvg
FOR LOCAL, 0, CHARANUM
 ;素質:処女が「1でないキャラは表示しない(=1のキャラのみを表示)」
 SIF TALENT:LOCAL:処女 != 1
  CONTINUE
 PRINTFORML [{LOCAL}] - %CALLNAME:LOCAL%
NEXT

111あなたの名前を入力してください:2019/05/17(金) 02:47:39 ID:tE9mVwoM
汎用関数・ライブラリ総合スレの
https://jbbs.shitaraba.net/bbs/read.cgi/otaku/16783/1498745115/30
を参考にして、コードを書いてみたのですがどうやっても改行テスト2に行きません

何がおかしいのか初心者では分からなかったので、ご教授お願いします
http://era.moe.hm/cgi/era2/img/era0000666.erb
>>110
ありがとうございます、無事できました。

112あなたの名前を入力してください:2019/05/17(金) 03:32:37 ID:s28oaM8s
FLAG:進行度を2にしてないからそりゃ改行テスト2は表示されないでしょう
あとそういうの聞くなら作業しているものを丸々上げてくれないと実行できないので検証できない

113あなたの名前を入力してください:2019/05/17(金) 08:25:28 ID:CoOgeiGc
こういった動作を想定しているのかな?

$PRINT_LOOP を IF FLAG:進行度 == 1 の上に持ってくる。

 CASE "[次へ]"
  FLAG:進行度 = FLAG:進行度+1 の下に

 FOR LOCAL, 0, 5
  CALL WINDOW_DESTROY( nWndId:(LOCAL) ) ; ウィンドウを破棄する
 NEXT

を書き足す。
これでどうだろうか?

114あなたの名前を入力してください:2019/05/17(金) 16:05:21 ID:tE9mVwoM
ありがとうございます!上手くいきました

115あなたの名前を入力してください:2019/06/01(土) 12:06:22 ID:wYFfqwmY
【質問】
・eraGVT SP Edition0.1
・作ったエネミーを雑魚敵フィルターに追加したい
・ガールVSモンスターズに改造したいが、追加の仕方がERBのコンフィグを見ても良くわからないため

116あなたの名前を入力してください:2019/06/01(土) 14:19:12 ID:7E0aCxao
俺もGVTには初めて触れるので間違いがあるかもしれません。
やりたいことはこういうことでしょうか?
まず、フォルダ
資料 → 各種テンプレ → 雑魚触手テンプレ.ERBをテキストエディタで開いて見てみてください。
詳しい説明が載っています。

例として、雑魚敵を作ってみます。
フォルダ
ERB → OLD FILE → 触手データ → 雑魚敵 → 0_無形 に雑魚触手テンプレ.ERBをコピペして
TENTACLE_MOB_3(敵の名前).ERBに名前を変更する。今回はMOB_3としているけどほかの数字(カテゴリーごと100以下)ならOK

ERBを開いて ### の部分を MOB_3 に置換する。
*** の部分を対応するCOMに置換する。(今回はCOM0)

これでコンフィグの雑魚敵フィルターを設定する、の無形の[3]に触手敵が出現しているはずです。
後はコピペしてきたテンプレをいじれば敵の名前など、いろいろ変更できます。
違う、そうじゃないとかありましたらレスをいただければ。

117あなたの名前を入力してください:2019/06/01(土) 21:05:50 ID:wYFfqwmY
ありがとうございます、無事出来ました

これからはテンプレをしっかり確認してから質問するようにします

118あなたの名前を入力してください:2019/06/25(火) 01:05:42 ID:tR.CLR3w
【質問】
・環境 eraPaS魔改造版(β)
・目的 初期パラに低確率特性を持つ場合、侵蝕に応じてエグい特性を得るするように改造したく、改造やプログラミングなんて初めてなのでどなたか教えてください。
①目立ちたがり→侵蝕40%で露出中毒→侵蝕100%で露出狂 とか、
②貞操無頓着→円光少女→売春中毒→セックス狂+イキ癖→公衆便女+永続絶頂 とか、
③快感に弱い→自慰しやすい→発情体質+自慰中毒→永久発情+オナニー依存症 とか。
それで③なら、自慰しやすいで大人のおもちゃを初購入、自慰中毒でエグいおもちゃに嵌り成績ガタ落ち
依存症で学校のトイレでオナニー、確率で異音に気づき心配して声をかけてきた非感染者を引きずり込み感染を広げる って妄想が止まりません。

・質問内容
初期パラの改変は、"汎用キャラ_特徴と素質の決定.ERB"を改変 or 専用キャラを作ってオリジナルCharaにcsvを放り込めばいいと思うのですが、
進化・フレーバーについては?だらけです。今考えている作業イメージは以下なのですが、

"③日付更新フェイズ.ERB"の@侵蝕フェイズに以下を追記 ##←日付更新フェイズの直接改変でよいのか?
;オリジナル・露出願望判定
IF TALENT:LCOUNT:目立ちたがり == 2 && TALENT:LCOUNT:露出願望 <= 1 && BASE:LCOUNT:侵蝕率 >= 40 ##←別の箇所の見よう見まね。構文正しいか?
TALENT:LCOUNT:露出願望 = 2
PRINTL 夜、自室で宿題をしていた%NAME%は気分転換にコンビニに出かけることにした ##←名前の呼び出し方ってこれでいいんでしょうか?
PRINTL 店の煌々とした光が目に入った瞬間、不意に淫らな思考に支配された%NAME%は前後に人気のないことを確認すると(略)
PRINTL %NAME%は露出中毒になった
##↑print文本当はこんなところに入れず別ファイルで管理すべきなんですよね?ただやり方が分かりません
ENDIF
IF TALENT:LCOUNT:露出願望 == 2 && BASE:LCOUNT:侵蝕率 >= 100
TALENT:LCOUNT:露出願望 = 3
PRINTL 初の露出経験で痺れる程の快楽を得た%NAME%は、その後もしばしば露出に及び、行動もエスカレートしつつあった(略)
ENDIF
IF TALENT:LCOUNT:露出願望 == 3 && ??? ##←これだけだと毎日イベント発生してしまうはずなので、露出狂になった翌日1度限りの動作にしたい
PRINTL %NAME%の露出行動は過激さも頻度も日を追うごとにを増していたが、昨日までは残された理性で「見つからないスリル」を楽しんでいた(略)
##そう難易度高くなく実装できるなら、非感染者に発見され、襲いかかり感染させるイベントにしたい。難易度が高いなら感染に関係ないただのフレーバーテキストのみで良い
ENDIF
IF TALENT:LCOUNT:露出願望 == 3 && ??? ##←露出狂になった翌々日以降、確率で発生させたい
PRINTL 人に見られる悦びを脳に刻まれた%NAME%は、今日も興奮を求めて下着をつけずに短いスカートで白昼から街を彷徨っている(略)
##成績ガタ落ちさせるとかしたい。難易度高くないなら・・・
ENDIF

開発できる方から見ればこいつホントに分かってないなという感じかと思いますが、なにとぞ・・・

119あなたの名前を入力してください:2019/06/25(火) 08:54:59 ID:kgZxBd0k
申し訳ないですが、俺の構文はギルティと言われたので答えられません。
ギルティを量産するわけにもいかないので。

ガイドラインを見たところ、製作初心者の方が改変するには難しいバリアントではないでしょうか?

120KDM ◆7Y.LjfNfOk:2019/06/25(火) 15:27:41 ID:zJCiPt8o
>>119
申し訳ありませんとしかいえないです……

責任をとって自分で答えておくと
1、そこまでわかってるならだいたいあってると思うから試してみれば
2、追記場所についてはとりあえずそこにして、追加する部分は「素質進化イベント」みたいな名前の関数を自分で作ろう。そうすれば場所を変えたくなっても呼び出す場所を変えるだけですむ
3、%NAME%だけでは名前は出てこない。キャラ番号を指定する必要がある、3番のキャラなら%NAME:3%みたいなかんじで。その例ならLCOUNTがキャラ番号
4、地の文については地の文・フレーバーフォルダにまとめてある。その中の関数の真似をして新しい関数を作り、表示したい箇所で呼び出せばいい
5、一日限りのイベントを起こしたい場合、イベントが発生したことを覚えておくフラグがキャラクターごとに必要になる。CFLAGにそのフラグを追加しよう
6、確率で発生させるにはRANDを使う。が、条件を満たしたキャラの数だけ判定するとそのイベントのログで埋め尽くされることになるかも
7、そのスクリプトだと場合によっては同じ日で連続してイベントが起きることになる。ELSEIFを使ったほうがいい
8、書き込むときに消えただけだとは思うが、ちゃんとインデントしよう

121あなたの名前を入力してください:2019/06/25(火) 17:25:51 ID:G5Jq3nuM
PRINTLじゃなくてPRINTFORMLしないとそのまま表示されちゃうよ

122あなたの名前を入力してください:2019/06/26(水) 12:23:31 ID:WFpXkQSE
ここは正しい構文の書き方養成講座じゃなくて初心者スレだろ?
相談者も簡潔で機能的な構文よりとにかく動かしたいって意図で聞いてるんだろうし一応動かせるレベルでも分かるなら教えてあげればいいじゃん
それでその例は良くないと思う人がいればもっといい例を書き込むだろうし一緒に勉強できるじゃん
つーかアドバイスのハードル上げないで

123あなたの名前を入力してください:2019/06/26(水) 17:56:09 ID:LtH7JW4E
>>122
>ハードルを上げないで
その書き込みは俺の構文が晒し上げされたときに見たかったです。
以下、質問に関して。
##←日付更新フェイズの直接改変でよいのか?
↑お好みで。別の関数にしてもいいかもしれないです。ただ、別関数にするとLCOUNTとかが機能しないかもしれない。

##←別の箇所の見よう見まね。構文正しいか?
↑どこかで目立ちたがりを2にする処理を入れてください。

##↑print文本当はこんなところに入れず別ファイルで管理すべきなんですよね?ただやり方が分かりません
↑CALL XXXXで別の関数を呼び出せます。@XXXX(CALL XXXXと同じにしてください)で関数を作れます。

##←これだけだと毎日イベント発生してしまうはずなので、露出狂になった翌日1度限りの動作にしたい
↑新しくCFLAGを使用して変数を作成してください。そのイベントの条件を(作成した変数 == 0)イベント完了時に変数を == 1にすれば一度限りのイベントになります。
???の部分を CFLAG:LCOUNT:露出狂イベント1 == 0 に
下の分岐にCFLAG:LCOUNT:露出狂イベント1 = 1 を追加。
CSVのCFLAG.CSVを開き、空いている番号に 番号,露出狂イベント1 を追加。
また、上記イベントと一緒にELSEIFを使用してください。

##そう難易度高くなく実装できるなら、非感染者に発見され、襲いかかり感染させるイベントにしたい。難易度が高いなら感染に関係ないただのフレーバーテキストのみで良い
↑すみません、わかりません。

##←露出狂になった翌々日以降、確率で発生させたい
↑CFLAGを作成し経過時間をカウント。日付変更時にカウントを+、2以上ならRAND:XXで発生。上記翌日1度限りの動作にしたいを参照し、専用イベントを作成。
条件式を IF TALENT:LCOUNT:露出願望 == 3 && CFLAG:LCOUNT:露出狂カウント >= 2 && CFLAG:LCOUNT:露出狂イベント2 == 0 にする。
その下に
 LOCAL = RAND:100
 IF LOCAL >= XX ←(XXは確率0〜99 LOCALはそれ以上の時)
  TRYCALL 露出狂イベント2
  CFLAG:LCOUNT:露出狂イベント2
 ELSE
 ENDIF
とする

次に
 フォルダ ERB→③日付更新フェイズ→@日付更新フェイズの FORCEWAIT の下あたりに
  FOR LCOUNT, 1, CHARANUM
   SIF TALENT:LCOUNT:露出願望 == 3
    CFLAG:LCOUNT:露出狂カウント += 1
  NEXT
を追加する。(日付変更時に露出願望が3だった場合、露出狂イベント2のカウントを+1する)

##成績ガタ落ちさせるとかしたい。難易度高くないなら・・・
↑@テスト成績生成の最後辺りに
SIF TALENT:LC_CHARA:露出願望 == 3
 成績表:LC_CHARA:LC_TIME:0 -= XX
を入れればいいのかもしれないけど、このテスト成績って実装されているのかどうか、わからねーです。

沢山の質問だったのでポカしているところがあるかもしれません。
その際は訂正をお願いします。
分からないところがあればできる限り答えます。製作、頑張ってください。

124118:2019/06/26(水) 18:36:19 ID:M.L1fylA
荒れるのは本望じゃないんで言い出しっぺがご報告を。一応動かせるレベル、なら実装できました。
>>123の回答いただいてますが、書き始めてたのでそのまま記載。

オリジナルキャラとして素質,露出願望,1とか素質,円光少女,1とかのキャラを作成。

"③日付更新フェイズ.ERB"に以下を追加
IF TALENT:LCOUNT:露出願望 >= 1
CALL 露出進化(LCOUNT)
ELSEIF TALENT:LCOUNT:円光少女 >= 1(1キャラが露出狂で公衆便女で・・・ってのを避けたいのでELSEIF)
CALL 援交進化(LCOUNT)
ENDIF

"④素質進化処理.ERB"を以下の感じで自分で作成(テキストがここにあるのは自分用なので許容。>>123でやり方わかったのでいずれ変えたい)
@露出進化(進化対象)
#DIM 進化対象
IF BASE:進化対象:侵蝕率 >= 40 && TALENT:進化対象:露出願望 == 1
PRINTFORMW (テキスト略)
TALENT:進化対象:露出願望 = 2
ENDIF
IF BASE:進化対象:侵蝕率 >= 100 && TALENT:進化対象:露出願望 == 2
(略 テキストと露出願望=3にする処理)
(このケースで感染広げるイベント作るなら、「ここ」にいろいろ書けばいい?)
ENDIF

若干できて欲が出てきたので、
ゲーム内で1度しか発生しないイベントを作りたい
→例えば露出進化イベントはゲーム中に1回だけでいい。多くてもクドいので。
→「露出進化管理」みたいな変数を作って、変数0のときだけ露出願望1→2のイベントが発生、変数を1にする
 変数1のときだけ露出願望2→3のイベントが発生、変数を2にする
 そうすれば露出願望が最大の3になってif条件分岐に使えなってからも色んなイベントを日々起こせて良い
(変数3ならこのイベント、4ならこのイベント、・・・ってできるので。できますよね?)
という運用にしようと思っています。
変数を定義する方法を追加で聞くつもりだったんですが、>>123見るに、FLAG.csvに定義すればいいんですね。

非感染者をとっ捕まえて感染広げるイベントをやっぱり作りたい
進化接触対象 = RAND:??←非感染者の中からランダムで対象を決めたい。非感染者を割り出す方法?
CALL 進化接触フェイズ(LCOUNT,進化接触対象)
と上記の「ここ」の部分に書いて、
@進化接触フェイズ(進化感染源,進化接触対象)
#DIM 進化感染源
#DIM 進化接触対象
TALENT:進化接触対象:侵食率 = 1
として、@援交進化でもCALL 進化接触フェイズ(LCOUNT,進化接触対象)で流用できる形にしようと思っています。
非感染者を割り出す方法が引き続きわからないのでcsvとかerbとかをひっくり返して考えてみます。

教えて君ですみません。ありがとうございました。

125あなたの名前を入力してください:2019/06/28(金) 05:28:21 ID:TUFhDm9s
詳しくない者だけど傲慢な意見

露出進化管理の変数はレベルごとに分けていいんじゃない?(露出進化LV◯イベント既出フラグ、みたいに)
後から見る時のために説明は多く関数の役割は少なく、マジックナンバー化は出来るだけ避けたい

非感染者を割り出す方法は…
1:まず非感染者のリストを作成する関数
2:リストからランダムなキャラを選ぶ処理の関数
3:その二つを関数でパッケージング
でいけない?

126あなたの名前を入力してください:2019/06/28(金) 05:33:35 ID:TUFhDm9s
あれ、言っといてなんだけどemueraって引数として配列渡せたっけ?

127あなたの名前を入力してください:2019/06/28(金) 05:38:55 ID:TUFhDm9s
書いといてなんだけど露出進化イベント既出フラグはレベルごとに分けんでもいいな。
名前を変えればいい。『露出進化イベントLV以下既出フラグ』とでもしよう

128あなたの名前を入力してください:2019/06/28(金) 08:42:23 ID:Z/YOWcGc
>>126
REFで渡せばいける

129あなたの名前を入力してください:2019/06/29(土) 00:56:03 ID:p.bzhMO.
>>124
TALENTかCFLAGに感染者のフラグ追加すれば感染者かどうか判断できるんじゃない?
--------------------------------
#DIM LCOUNT
#DIM TARGET_COUNT
; 非感染者のリストを作る(LOCALに格納)
TARGET_COUNT = 0
VARSET LOCAL, -1
FOR LCOUNT, 0, CHARANUM
  IF TALENT:LCOUNT:感染者 == 0
    LOCAL:TARGET_COUNT = LCOUNT
    TARGET_COUNT += 1
  ENDIF
NEXT
; LOCAL:RAND(TARGET_COUNT) で非感染者からランダムな一人を取得できる
--------------------------------
こんな感じ。この例ではTALENTに感染者って項目を追加して、感染者は 1 が設定されていることにしてる。

なお、対象のバリアントを触ってないので見当はずれのことを言ってたらゴメン

130あなたの名前を入力してください:2019/06/29(土) 01:26:27 ID:uEUYIO8U
感染フラグはTALLENTの3番にすでにある

131118:2019/06/29(土) 13:13:15 ID:3iahV/Qo
いろんな方から教えてもらえて感謝です。
http://book-shelf-end.com/up/dwlink.cgi?eraRx0044.zip
途中も途中ですがアップしてみました。構文理解するのも大変だし何よりも地の文書くのにこんなに時間かかると思ってなかったです。
もっと読ませる地の文を書く力つけようと思うともっと本読むとかしないといけないんでしょうね・・・
援交進化と自慰進化はいつになるか全く分かりません。

④素質進化処理.erbの170行目以下に書いてるとおりですが、
>>129>>130に従いやったつもりが、181行目が読めないとエラーが出ます。
どこの理解が間違っているのか、ご指摘いただけますか?

132あなたの名前を入力してください:2019/06/29(土) 13:20:56 ID:AECfa8ZQ
>>131
やろうとしてる処理は、非感染者のリストを作った後、そのリスト中からランダムで一人抽選、ってことでいい?
なら、182行目と合わせて、これでいいはず
BASE:(LOCAL:(RAND:TARGET_COUNT)):侵蝕率 = 16

133あなたの名前を入力してください:2019/06/29(土) 13:23:20 ID:AECfa8ZQ
16じゃねぇ、10だ

134あなたの名前を入力してください:2019/06/29(土) 20:18:11 ID:3iahV/Qo
>>132
やろうとしてるのはそのとおりなんですが、
そのrandで選んだ被害者はそれ以降どうやったら特定できますか?
侵蝕率を設定して終わりじゃなく、地の文でそのキャラの名前出したり、DAY:4==6ではそのキャラを追いかけてストーリー書いたりしたいんです。

135あなたの名前を入力してください:2019/06/29(土) 20:51:54 ID:AECfa8ZQ
>>134
だったら適当な変数に格納してイベントに渡してやればいい

#DIM victimIndex
victimIndex = LOCAL:(RAND:TARGET_COUNT)
BASE:victimIndex:侵蝕率 = 10

ここではなく、別の所で使いたいならvictimIndexを戻り値にして呼び元でRESULTから取り出すか、グローバル変数使うか、REF宣言した引数に格納するかだな

136あなたの名前を入力してください:2019/06/29(土) 21:56:03 ID:1QOrIq.I
>>131
先にスマートなやり方が出てしまったけど一応
被害者を記憶しておくには加害者のCFLAGに被害者のCFLAG:uidを保存しておく方法もあるかと
次に参照するときは、保存したCFLAGとCFLAG:uidが一致するキャラを選んでくれば被害者を特定できる

①CFLAG.csvに『500,素質進化被害者』を追加
②感染時にCFLAG:進化対象:素質進化被害者に被害者のuidを入れる
③DAY:4==6での処理時にはCFLAG:進化対象:素質進化被害者とCFLAG:uidの一致するキャラクターを呼び出す

の流れ。具体的には


@露出進化(進化対象)
#DIM 進化対象
#DIM 被害者
 中略
 NEXT
 被害者 = LOCAL:RAND(TARGET_COUNT)
 CALL 潜伏感染(進化対象, 被害者) ;感染時の処理
 CFLAG:進化対象:素質進化被害者 = CFLAG:被害者:uid


;DAY:4==6以降
#DIM 進化対象
#DIM 被害者
 被害者 = FINDCHARA(CFLAG:(GETNUM(CFLAG, "uid")), CFLAG:進化対象:素質進化被害者)

それと、感染時に感染率を上げるだけだと処理が足りないので、通常の感染と同じように@潜伏感染 を呼び出すなり、同じような処理をするなりした方がいいと思う
素質進化の処理自体も『日付更新フェイズ.ERB』よりも『ターン進行.ERB』の●一日の終わりよりも前に入れた方がいいかと

ただ感染処理を他のところで実行すると問題が出るかもしれないから、処理は素質進化だけに留めて、
素質進化したキャラクターが他のキャラクターを放課後感染させるときの地の文を変えた方が問題が起こらないような気がする

137あなたの名前を入力してください:2019/06/29(土) 21:58:33 ID:p.bzhMO.
>>134
地の文や口上なんかでも使うことを考えたら、FLAGあたりに格納するのがいいんじゃないかな
--------------------------------
FLAG.csvに「進化対象」を追加
----------------
FLAG:進化対象 = LOCAL:(RAND:TARGET_COUNT)
BASE:(FLAG:進化対象):侵蝕率 = 10
----------------
@別の地の文を出力する関数
PRINTFORML %CALLNAME:(FLAG:進化対象)%は感染した
--------------------------------
とかそんな感じ。
あと、非感染者の感染処理が一通り終わったら、
FLAG:進化対象 = -1
のように値をリセットしておくのも忘れずに。
残しておくと忘れたころにバグの原因になったりするよ。

138あなたの名前を入力してください:2019/06/30(日) 11:12:23 ID:wPWrmZ8w
技術的には分かってきてるっぽいけど、
資料\アイデアメモ の妄想ノート1に
>経験値で技能レベルが上昇していく(だんだんオナニー狂いになってゆくとか)
> 伝統的珠システムではなくもっと簡素な%管理で
> 0〜10%くらいから始まって10000%くらいの天井目安に
>侵蝕100%で派生を得る(苗床とか傀儡とか人形とか)
とあるから、一度元スレで作者に意見を求めてみてはどうでしょう
将来的に作者が機能実装して全部無駄になったら悲しいし
意見が帰ってこなかったり、実装見込みなしなら思うままに改造したらよろし

139あなたの名前を入力してください:2019/06/30(日) 20:42:07 ID:codzM.JI
フォルダにある全ファイルの中から特定の文字列を削除できるエディタってありませんかね?
例えば、ある素質を削除したときに全てのCSVからその素質を一気に削除できるようなやつ

140あなたの名前を入力してください:2019/06/30(日) 20:44:57 ID:G/1f0XnM
grep置換でブランクに変えればええんちゃう

141あなたの名前を入力してください:2019/06/30(日) 20:52:36 ID:TMuXipfA
CSVディレクトリ上で
for /s "tokens=* usebackq" %X in (`dir /s /b Chara*.csv`) do @(type %X | find /v "素質,(素質番号)" > %X)

142あなたの名前を入力してください:2019/06/30(日) 20:54:44 ID:TMuXipfA
あ、CSVファイルをS-JISで書いてないと動かんなコレ

143あなたの名前を入力してください:2019/07/01(月) 01:10:44 ID:komTxmLY
私の環境(win7)だとfor /sのオプションが存在しないので/fで実行してみたが全csvが0Bの空ファイルになったぞ
リダイレクト先のファイルを生成してからtypeが実行されるから同名ファイルだと空ファイルが読み込まれる模様
別ファイルに出力してから元ファイル削除してリネームすればうまくいくが・・・

144あなたの名前を入力してください:2019/07/01(月) 02:46:44 ID:Z1.N.rD.
>>143
あれ? そこはテストしたハズなんだが・・・・
じゃあこうか
for /f "tokens=* usebackq" %X in (`dir /s /b Chara*.csv`) do @(copy %~nxX %~nX.bk & type %~nX.bk | find /v "素質,(素質番号)" >"%X" & del %~nX.bk)

145あなたの名前を入力してください:2019/07/01(月) 10:58:57 ID:komTxmLY
>>144
それならうまく動作した。
只、dirは/sでサブディレクトリも探索するんで、サブディレクトリがあるとサブディレクトリ側は空ファイルになったので実行の際はディレクトリ構成に注意が必要。
フルパス指定の%Xのままにしておけば確実かな。
拡張子が*.csv.bkでも削除には困らないだろうし。

146あなたの名前を入力してください:2019/07/01(月) 14:25:01 ID:k5ZW1iyk
BAT芸はワロタが初心者スレ向けのネタとしてはいかがなものか
grepのひとつも標準搭載してないWindowsが悪い? せやな

147あなたの名前を入力してください:2019/07/01(月) 21:21:25 ID:3fhtZer2
>>140
解決したわ、ありがとう!

148あなたの名前を入力してください:2019/07/01(月) 22:53:07 ID:komTxmLY
相手の環境がwindowsしかわからなくても提示できる数少ない解決策だからしょうがないね・・・・・・

149あなたの名前を入力してください:2019/07/01(月) 22:55:42 ID:Z1.N.rD.
>>146
え、forとtypeは初心者の範疇だろ?(DOS4.0の遺児)

冗談はさておき、行置換って意外とやれるエディタ少ない希ガス

150あなたの名前を入力してください:2019/07/08(月) 21:11:41 ID:V1OvVGKg
>>149
秀丸なら行末¥

151150:2019/07/08(月) 21:13:22 ID:T/srdksY
消された…
秀丸なら正規表現指定の行末にバックスラッシュとnで行削除してくれるよ

152あなたの名前を入力してください:2019/07/22(月) 15:36:55 ID:XJn0uqsE
仕事が暇になった(意味深)から昔お世話になったeraを弄りたくなったんだけど
ガチ初心者はeracustom ver0.03を弄ってみる、っていう開始で良いのかな? なんかまとめwikiのリンク死んでるけど…

153あなたの名前を入力してください:2019/07/22(月) 15:40:47 ID:D0t/BKa2
自分の作りたいものに近いのが一番だぞ

154あなたの名前を入力してください:2019/07/22(月) 15:49:42 ID:uyqaXtVY
ガチ初心者は好みのバリアントのちょっとした改造からのほうがいいかも
ただしあんまり古いバリアントは構文が古いので止めたほうがいい
あと、暇ならプログラミング入門サイトやら動画やらが巷に溢れているので、それを見てからのほうが構文学習が早い

155あなたの名前を入力してください:2019/07/22(月) 16:02:46 ID:D0t/BKa2
ブランクあるみたいだし最近の人気バリアントに少し手をつけてみたら?
昔より飛躍的に高機能化してるから新鮮だろうし、気に入ったのがあればコマンド追加とかのパッチを作ってみればいい
現行バリアントの方がスレで質問もしやすいしな

156あなたの名前を入力してください:2019/07/22(月) 21:42:16 ID:XJn0uqsE
ご意見感謝です
浦島状態を解消するためにも現行にちょっと触れてみるところから始めてみますね!

157あなたの名前を入力してください:2019/09/29(日) 17:36:16 ID:O9YnZQjA
俺も改変バリアント作ってみたい
SQNが一番好きなんだけど明らかに地獄の道

158あなたの名前を入力してください:2019/10/14(月) 17:00:44 ID:YS.8tgnI
はじめて改造に手を出しているのですが、callで関数を呼び出すときの引数の使い方がよくわからないので教えて下さい

#DIM 体格,3 として体格という変数を作り、
体格:0に身長として155 体格:1に体重として45 体格:2に座高として80という値を持たせた状態で、
CALL 身体測定(体格) で別の関数に飛びます

@身体測定(体格)
#DIM 体格,3
PRINT 体格:0
PRINT 体格:1
PRINT 体格:2
とすると、155 0 0となってしまい、体格:0しかcallで情報が渡せないですよね?

変数を体格にまとめず、#DIM 身長 #DIM 体重 #DIM 座高として、CALL身体測定(身長,体重,座高)みたいにするやり方しかわからず、
渡したい情報がめちゃくちゃ多い(この例では3つですが、実際には数十個)ので、適正なやり方を教えてもらえませんか?

159あなたの名前を入力してください:2019/10/14(月) 17:38:48 ID:wBxdm982
引数に配列を渡したいならこれかな
#DIM REF 体格
https://ja.osdn.net/projects/emuera/wiki/reference%2Ftypes%2Finteger-reference

160あなたの名前を入力してください:2019/10/14(月) 19:33:50 ID:YS.8tgnI
ありがとうございます!
3次元までってことは10個渡したければ4つ用意しないといけないってことなんですね・・・
でも1/3にできるだけでもだいぶすっきりします!

161あなたの名前を入力してください:2019/10/14(月) 21:39:23 ID:7Epy8.ls
>>160
三次元っていうのは配列の次元の話だから関係ないね
入れ子にするのが3つまでって意味
要素数がゼロなのは参照元を直接編集するから指定できないってこと

@Sample
#DIM 体格, 60
体格:0 = 155
体格:1 = 45
体格:2 = 80
CALL Sample1(体格)

@Sample1(適当な名前)
#DIM REF 適当な名前, 0
;80って出るはず
PRINTSL TOSTR(適当な名前:2)

162あなたの名前を入力してください:2019/10/15(火) 22:38:24 ID:LCFUfiNE
>>161
よく分かりました&できました!
初歩中の初歩ですみません。ありがとうございます!

163あなたの名前を入力してください:2019/10/21(月) 22:53:57 ID:J02HRy.E
初めての質問失礼します。

改変バリアントを作っているのですが、キャラ登録番号が範囲外です、というエラーが
なかなか消えません。
アドバイスいただけないでしょうか。
説明が難しいのでバリアント自体をロダにあげました。
見ていただけると幸いです。

http://book-shelf-end.com/up/dwlink.cgi?eraRx0367.zip

164あなたの名前を入力してください:2019/10/21(月) 23:39:11 ID:AR6A1b5Q
>>163
キャラの登録番号とNoを混同しているのが原因
SHOW_APPEARANCEに渡すのはキャラの登録番号であってNoではない

SHOW_APPEARANCEを使い回したいなら、この呼び出し前にキャラを登録してしまうのが楽(キャンセルされた場合は削除する)
もしくはSHOW_APPEARANCEをNo基準で処理する内部関数を組んだ上で、SHOW_APPEARANCEからそいつを呼び出すとかか

165あなたの名前を入力してください:2019/10/22(火) 00:16:03 ID:M.CTHa1Q
>>163
奴隷購入とかでステータス見ると出るヘアカラー参照辺りのエラーを例に

@SHOW_HAIRCOLOR(ARG, ARG:1=0)
IF CFLAG:ARG:150 == 0

これは〇番目に登録されているキャラのCFLAG:150を見ようとしてるんだけど、そもそも初期ではあなたしかいないから、キャラは一人(あなた)しかいない、だから登録されてないキャラ見ようとしてるっていうエラーが出る
そもそもARGに渡されて来たのはNOで、CSV参照する時用の数字、CFLAG:〇:150とかで参照する番号はゲームに登録された順の番号
あなたはCSV0番で、最初に登録されてるから登録番号も0(仕様上0から数え始めるので0)、たまたま一致してるから奴隷購入画面でもあなたは問題なくステータス見れてる

奴隷購入ってのはCSV〇番目のキャラをゲームに登録する処理だから、CFLAG:〇:150とかの形では参照できない
じゃあ名前とかはなんで表示されてるかっていうと、SUMMONS_MAIN.ERBの557行目が名前の表示処理なんだけど

 PRINTFORM キャラクター名:%CSVNAME(L_T, 0), 40, LEFT%

って感じでCSVを直接参照する方法で見てるから

なので
 IF CFLAG:ARG:150 == 0 以下同様の処理

 IF CSVCFLAG(ARG, 150) == 0

に書き換えていけば動く

そも、大本の関数名がSUMMONS_DATA_BASICで、召喚(購入)するキャラの基本ステータス(CSVのデータ)表示処理みたいだし

166あなたの名前を入力してください:2019/10/22(火) 06:48:42 ID:9GSiJwrY
>>164
なるほど、一覧から選んだ時点で登録しておく感じですかね。ありがとうございます。

>>165
CSVからデータを引っ張ってくるのはまた別なんですね。勉強になります。
ちなみに、これらの処理は普通の能力表示でも使うんですが、
CSVとデータが異なるキャラ(娘とか)やそもそもCSVがないキャラは、別の処理にした方がいいのでしょうか?

167あなたの名前を入力してください:2019/10/22(火) 09:41:22 ID:M.CTHa1Q
>>166
ランダム生成のキャラでも使うのかな

ADDVOIDCHARA
ってので、CSV使わずにキャラを追加できるんだけど、BASEとかCFLAGとかは全部空のキャラだから、追加後に直接弄ってやる必要がある

例えば娘なら、娘誕生に合わせてADDVOIDCHARAで追加したキャラに名前とか親データとかを入れてやる

例えばランダムモブ的な奴隷なら、奴隷購入画面に入ったのに合わせてキャラ生成関数実行(ADDVOIDCHARA+各種ステータスを生成)、購入されたら購入フラグでも立てておいて
奴隷購入画面から抜けたときに購入フラグがないモブを削除する(DELCHARA [登録番号])

CHARANUM
ってのが現在の登録キャラ数を返してくれるやつだから、CHARANUM

168あなたの名前を入力してください:2019/10/22(火) 09:54:23 ID:M.CTHa1Q
すまんミスった
CHARANUM
ってのが現在の登録キャラ数を返してくれるやつだから、CHARANUM -1が最新の登録キャラ
これを使用して

ADDVOIDCHARA+各種ステータスを生成したキャラを一人作る
ステ見ていらねっ と思ったらDELCHARA (CHARANUM -1)とかしてやると都合いい、後は生成時に一時フラグ立てておいて、購入時にフラグ消去、後から一時フラグ立ってるやつは一斉消去とか、まぁやり方は人それぞれあるけど

>一覧から選んだ時点で登録しておく感じですかね。
これだとステータス確認の度に新キャラ生成して削除してで吟味面倒(プレイヤー目線)だから、奴隷購入画面に入るときとかに生成して、抜ける時にいらないのは削除するのがいいと思う、まぁ好みだけど


適当に簡素な試験用のバリアント手元に置いとく色々実験するのにちょうどいいから、用意しとくといいと思う
個人的な改造とかしかしてないから、1から作ったり大規模な改造したるやつは尊敬するわ、頑張って

169あなたの名前を入力してください:2019/10/22(火) 10:24:19 ID:hGwKlN4s
理想をいうならフラグと番号渡したら分岐するように関数を作り替えてしまうのが一番いいかな
面倒だから先にキャラつくる方が手っ取り早いけど

170あなたの名前を入力してください:2019/10/22(火) 16:05:46 ID:JPU4GY2U
後は割と大手術になるが、キャラやCSVから値を取る処理とその値を解釈して処理を行う部分を分けるというのが一番すっきりするかな
もの凄いざっくり書くとこんな感じ。値は適当だしテストもしてないからバグってたらゴメン

@GET_HAIRCOLOR_FROM_NO(charaNo)
#FUNCTIONS
#DIM charaNo
RETURNF GET_HAIRCOLOR(CSVCFLAG(charaNo,GETNUM(CFLAG,"髪色")))

@GET_HAIRCOLOR_FROM_INDEX(charaIndex)
#FUNCTIONS
#DIM charaIndex
RETURNF GET_HAIRCOLOR(CFLAG:charaIndex:髪色)

@GET_HAIRCOLOR(colorType)
#FUNCTIONS
SELECTCASE colorType
    CASE 0
        RETURNF "黒"
    CASE 1
        RETURNF "金"
    CASE 2
        RETURNF "赤"
    CASEELSE
        RETURNF "?COLOR" ;throwした方がいいかも
ENDSELECT

171あなたの名前を入力してください:2019/10/22(火) 16:07:56 ID:JPU4GY2U
あ、@GET_HAIRCOLORにcolorTypeの#DIMが抜けてるや
足しておいてー

172あなたの名前を入力してください:2019/10/22(火) 19:24:56 ID:9GSiJwrY
>>164

>SHOW_APPEARANCEを使い回したいなら、この呼び出し前にキャラを登録してしまうのが楽(キャンセルされた場合は削除する
このキャラ登録の処理って、ADDCHARAではないのでしょうか?
購入画面〜@SHOW_APPEARLANCEまでの流れにADDCHARAを差し込んでみたのですが、依然エラーを吐いています。
キャラ追加処理と思われる@SUMMONS_EXEやC_ADD_CHARAも同様に試してみましたがダメでした。

173あなたの名前を入力してください:2019/10/23(水) 17:59:35 ID:fqlw/Dqg
【質問】
・環境:eraFGOK
・質問内容
 特定のキャラが触手系調教のみを実行するように制限したい
・目的
 触手兵せっかくあるから獣型とか触手の塊とかそういうふうにユニットで違いを出せたらなあと
 戦闘関係はともかく、全員触手使わず普通に人間体としてエロしてるのがもったいないと思って
 各選択肢に条件づけは数多いから、まとめて例外処理とか作れませんか

174あなたの名前を入力してください:2019/10/23(水) 19:36:09 ID:0S.hlG3I
便乗で質問です

同じくK系列で慰安の過程のテキスト等を飛ばして、結果だけを対象に適用するいい方法なにかないですか?
慰安でなすがままを何回も入力するの、だれるかなと思うので

175あなたの名前を入力してください:2019/10/23(水) 23:06:56 ID:Z5VqpW16
>>172
ADDCHARAにちゃんとNo渡してる?
まだダメならログうp

176あなたの名前を入力してください:2019/10/24(木) 20:30:03 ID:oHjYgn6I
>>175
すいません、改造初心者なもので、ADDCHARAのわたすNOも理解できているかどうか
自信がありません。
一応、他のADDCHARAを使っている部分を見ていれてはいるのですが…

エラーログ上げておきます。
データ自体もロダに上げているのでお使いください。

データ:http://book-shelf-end.com/up/dwlink.cgi?eraRx0367.zip

ログ

キャラクターNo.43
キャラクター名:白鐘 直斗 出身作品:ペルソナ

■ TALENT(素質) ■
【ABL素質】 :[魅力][オンナ][処女][A処女]
【体質素質】:[巨乳]
【個人素質】:[プライド高い][倒錯的][素直][自制心][恥じらい][一線越えない][快感の否定][抵抗]
【対人素質】:
【特徴素質】:

■ APPEAL(外見) ■
【種族名】: %CFLAG:ARG:種族名%
【髪の色】:
本体\その他処理\SYSTEM_APPEARANCE.ERBの352行目でエラーが発生しました:Emuera1821
IF CFLAG:ARG:150 == 0
エラー内容:キャラクタ配列変数CFLAGの第1引数(43)はキャラ登録番号の範囲外です
現在の関数:@SHOW_HAIRCOLOR(本体\その他処理\SYSTEM_APPEARANCE.ERBの348行目)
関数呼び出しスタック:
↑本体\その他処理\SYSTEM_APPEARANCE.ERBの334行目(関数@SHOW_APPEARANCE内)
↑本体\召喚\SUMMONS_MAIN.ERBの568行目(関数@SUMMONS_DATA_BASIC内)
↑本体\召喚\SUMMONS_MAIN.ERBの437行目(関数@SUMMONS_DATA_MAIN内)
↑本体\召喚\SUMMONS_MAIN.ERBの336行目(関数@SYSTEM_SUMMONS_MAIN内)
↑SYSTEM_MENU.ERBの179行目(関数@SYSTEM_MENU内)
↑SYSTEM.ERBの97行目(関数@EVENTLOAD内)

177あなたの名前を入力してください:2019/10/25(金) 01:14:07 ID:Ia3.SoYg
>>176
横からだけれど、取り敢えず動かせるようにしてみた。
これでどうだろう? バグったらごめんね…。
@SUMMONS_DATA_BASIC(ARG)
#DIM L_T
L_T = ARG
ADDVOIDCHARA ARG
ARG = CHARANUM-1
;-- 紹介
PRINTFORML キャラクターNo.{L_T,3,LEFT}
PRINTFORM キャラクター名:%CSVNAME(L_T, 0), 40, LEFT%
PRINTFORML 出身作品:%CSVCSTR(L_T, GETNUM(CSTR, "出身作品"))%
PRINTFORML

;- 表示:STATUS(素質)
PRINTFORML ■ TALENT(素質) ■
CALL INFO_STATUS_TALENT(L_T, 1)
PRINTL
PRINTFORML ■ APPEAL(外見) ■
;- 身体特徴
CALL SHOW_APPEARANCE(ARG, 1)
;- スリーサイズ
CALL SHOW_INFO_BODYSIZE(ARG, 1)
;- 衣装:情報
CALL CLOTHES_INFO(ARG, 1)
PRINTL

;- 表示:STATUS(紹介)
PRINTFORML ■ 人物紹介 ■
CALL INFO_STATUS_INTRODUCTION(L_T, 1)
PRINTL

DELCHARA CHARANUM-1

178あなたの名前を入力してください:2019/10/25(金) 21:06:28 ID:fmA2F7XQ
>>177
解決しました!
ありがとうございます!
これでまたいろいろ進められます。
ロダに上げたファイルも消しておきます。

179あなたの名前を入力してください:2019/10/26(土) 19:56:44 ID:9XcR4GZI
>>173
「のみ」を実行するように制限するとフィルタで触手系が全滅のときエラーが起きる
確率を上げるなら特殊勢力生成時に実行条件を満たす設定にして性癖設定でいいと思う
ただ恋姫系は触手があると戦略で極端に強いから
Kは触手兵実装初期触手だが触手を持たせないって調整してたようだった
戦略に影響しないようにするには判定を種族で分岐させるしかないのかも?

>>174
慰安で[なすがまま]コマンド選択を省いてオート実行するのも
毎ターンの短縮ステータス・描写・ソース変動表示・クリック待ちを省いて
処理だけする分岐を作るのも、範囲が広くてハードル高めの改変に感じる
成長だけ欲しいなら慰安メニューに[閲覧せず実行]とか専用ボタンくっつけて
偽慰安処理作って表示するほうが改変範囲が狭くて安心かもしれない

180あなたの名前を入力してください:2019/10/26(土) 20:08:33 ID:9XcR4GZI
ごめんエラーは起きず愛撫連打が起きるんだっけ
どっちも難しい内容に見えたから微妙に自信のないレス

181あなたの名前を入力してください:2019/10/26(土) 21:34:02 ID:i8KhRbQ.
>>179
なるほど、SLGフェイズのバランスも考えた上でのことだったんですね。フィルタのことも考えてませんでした…
ひとまず性癖イジってみて、追加で判定の種族分岐できないか、ERB眺めてみます
実行判定に手を加えようとするとさすがに色々見ないといけないんですね、勉強になります。アドバイスありがとうございました!

182あなたの名前を入力してください:2019/10/27(日) 10:28:03 ID:BafWRebk
>>179
回答ありがとうございます

やっぱりかなりの大工事になっちゃいますよね
敵勢力や放浪中のキャラも陰で慰安していて、捕まえたり仲間にして経験見たら楽しめるようにしたかったんですけど
なんか別の方法考えてみます

183あなたの名前を入力してください:2019/10/27(日) 21:04:12 ID:m5D6MOqM
【質問】
・環境:自改造バリアント(元はeraH)
・質問:妊娠出産時の素質遺伝について
・目的:父親と母親の持つ素質から遺伝させる。

eraHのNINSIN.ERBをいじっています。
理想は、両親の素質をすべて子供に遺伝→RANDで選別→ランダムで素質を2,3個つける
なんですが、現状CSVからしか引っ張ってこれてません。
実際のキャラからそしつをひっぱってくるにはどうすればよいのでしょうか?

184あなたの名前を入力してください:2019/10/27(日) 23:30:33 ID:OIiST036
TALENTに対してループ走らせて t != 0 なものを探すんじゃだめ?

185あなたの名前を入力してください:2019/10/28(月) 00:04:13 ID:q233zFCk
あげた方がいいかな

186あなたの名前を入力してください:2019/10/28(月) 02:15:47 ID:YV0w/GPg
NINSIN.ERBをCSVTALENTで検索する(手元の古いeraHでは331行目)。そこがCSVからデータを引っ張ってくる部分
ただしこれ親のCSV番号しか保存してないのでキャラ配列番号に変換しないといけないんだけど
NOからキャラ配列番号に変換する仕組みだと孫の代が不可能になっちゃうので妊娠時にあらかじめキャラ配列番号で保存しとくといいと思う
あとはソース見た感じ母親からしか継承してないっぽいのでついでに種親の素質継承も仕込めばおk
最後にキャラ売却時とキャラソート時にキャラ配列番号がずれるのに対応すればおk

187あなたの名前を入力してください:2019/10/29(火) 08:55:14 ID:Mfh15qlo
>>184-186
すいません。CSV番号とキャラ配列番号の書き分けがいまいち理解できてません。
もしよろしければあげていただくと助かります。

188あなたの名前を入力してください:2019/11/05(火) 19:52:16 ID:O0aXBsxs
>>187
このスレageるよりeraHのスレで尋ねたほうが詳しい人に会えるかも?

「CSV番号」はERBで「NO:番号」って書かれてるやつ
CSVフォルダ内の「CharaXX.csv」の番号と一致する
eraに用意されている変数だからどのバリアントでも「NO:番号」

「キャラ配列番号」はおそらくモブやランダムキャラのような
CSVが存在しないキャラのために各バリアント作者が独自に用意する
キャラを識別するための番号のことだと思う
これは「キャラ登録番号」とか「キャラID」とか
用意する人によって呼び方が変わるから、勘違いしていたらごめん

その「キャラ配列番号」の書き方が知りたいんだと思うけど
呼び方だけじゃなく保存場所や割り振りかたもバリアントごとに違うから
専スレのほうが詳しい人が多いんじゃないかな

189あなたの名前を入力してください:2019/11/07(木) 19:49:28 ID:XUbO0ue.
NINSIN.ERBにあるL_Pが父親、L_Tが母親なんだから
IF L_P > -1
TALENT:L_P:番号
ENDIF
でそのまま使っちゃダメなん?

190>>188:2019/11/08(金) 21:03:16 ID:kWhzJORk
>>189
配列番号はCHARANUMを最大値とする番号のことだったんだな
一番よく使われてるのに勘違いしてしまってごめん、突っ込みありがとう
質問者の>>187にも混乱を招いてしまってごめん

孫の代のため妊娠時にキャラ配列番号で保存しておくってところを見て
DELCHARA命令とかを通って番号がずれてもわかるように保存しておく
固有の識別番号のことかと勘違いして読んでた

CFLAG:L_O:母親番号 = NO:L_T → CFLAG:L_O:母親番号 = L_T
こんな感じにする場合、いらなくなったキャラを削除する機能とかがあると
ずれる可能性があって、ない場合は大丈夫だと思う

今思えばバリアントごとに呼び方が違うというより
キャラ登録番号がその番号で、キャラIDが後者の識別用で使い分けられていて
キャラ削除がなければ登録番号=IDでいいから呼び方がまちまちに思えただけだった感

191あなたの名前を入力してください:2019/11/08(金) 21:45:23 ID:kWhzJORk
名前欄の>>いらんかった
素質継承してるのが@NINSIN_CHILD_BIRTHならL_Pはないみたいだった
CFLAG:L_T:妊娠相手番号もCSV番号で保存してそう

192あなたの名前を入力してください:2019/11/09(土) 00:27:39 ID:B4WLkmfM
凄い初歩的な質問で申し訳ないんですが、配列ってできます?

193あなたの名前を入力してください:2019/11/09(土) 01:39:19 ID:cVunJ7Kg
>>192
聞いて驚け、このEra Basic という言語は基本的に最初から用意されている変数は全て配列だ

二次元配列とかが作りたいなら下のページの
DA〜DEの項みると良いよ
https://ja.osdn.net/projects/emuera/wiki/exvar#h5-LOCAL

194あなたの名前を入力してください:2019/11/09(土) 02:37:13 ID:B4WLkmfM
>>193ありがとうございます!

195あなたの名前を入力してください:2019/11/10(日) 20:23:46 ID:1tXYNdzo
バリアントの質問ではないですが、以下リンクのERBの基礎から応用までの知識を手広くカバーしたファイルはどこか別錆に上がっていたりとかはしませんか?
https://seesaawiki.jp/eraseries/d/%c0%bd%ba%ee%bd%e9%bf%b4%bc%d4%b9%d6%ba%c2

ERBの読み方書き方(というかEraの基本構造やフロー)をすごく勉強したいです!

196あなたの名前を入力してください:2019/11/10(日) 21:25:30 ID:.3P6UQQU
>>195
CC0とのことですので勝手ながら再アップをしました。
作者様にお礼を申し上げます。
ttp://book-shelf-end.com/up/dwlink.cgi?eraRx0535.zip

こちらのEmueraのwikiと一緒に見るのを推奨されています。頑張ってください!
ttps://ja.osdn.net/projects/emuera/wiki/FrontPage

197あなたの名前を入力してください:2019/11/10(日) 21:27:19 ID:mm/uPGkE
そのページにもリンクがあるけれど
本体ツールの説明書になってるEmueraWikiが情報新しくて網羅されてると思う
https://osdn.net/projects/emuera/wiki/FrontPage
この下のほうにあるeramaker basic 開発者向け情報

リンクタイトルがユーザー定義・演算・関数とか意味のわかる人向けだが
そのページの次行にある用語辞典で調べたりして見てる
フローが欲しいって考える人ならわかりやすいんじゃないかな
https://osdn.net/projects/emuera/wiki/flow

用意されてる変数の推奨非推奨はダウンロードページにあるetc1821.zipに
コメントされてるVariableSize_0.csvが入ってる
変数や配列を自前でつくる方法はここ
https://osdn.net/projects/emuera/wiki/UserVars

噛み砕いた内容はそのWiki以外だとeratohoWikiとか充実してる
https://w.atwiki.jp/eratoho/
https://seesaawiki.jp/eratoho/

198あなたの名前を入力してください:2019/11/10(日) 22:02:10 ID:1tXYNdzo
>>196 >>197
ありがとうございます!
圧倒的感謝ッッ

199あなたの名前を入力してください:2019/11/16(土) 10:25:15 ID:HrA79oZg
質問なんですが
不連続な数字が入ったプール(例:1,3,5,7,11,13)からランダムに一つを選ぶ処理を簡潔に作る方法なにか無いでしょうか?
力業ではなんとでもなるんですけど、複数作ると関数の中身が膨れ上がってスゴい見辛いので

200あなたの名前を入力してください:2019/11/16(土) 10:59:02 ID:DWT00LII
汎用スレにたくさん置いてある
が、ろだ置きの関数群ふっとんでるのかな

201あなたの名前を入力してください:2019/11/16(土) 12:18:47 ID:HrA79oZg
>>200
なんとそんなスレが確かにある、情報ありがとうございます
しかもいっちゃん最初に欲しい機能の関数があるじゃないか
ただここの関数全部旧ロダっぽい
使えそうな関数が色々あるから悲しい

202あなたの名前を入力してください:2019/11/16(土) 13:03:27 ID:DWT00LII
適当に汎用スレに投げといた

203あなたの名前を入力してください:2019/11/16(土) 14:34:49 ID:HrA79oZg
ありがとうございます
確率やランダム関係で行いたい処理があったのでとても助かります

204あなたの名前を入力してください:2019/11/18(月) 16:00:49 ID:hy9nPJp2
起動時に呼ばれるTITLE処理とロード時に呼ばれるSHOP処理以外のBEGIN XXXXXの処理って使わなくても良いんでしょうか?
極論 SHOW_SHOPから適当にMAIN_MENUみたいな関数をCALLしてそこで全ての処理を行なっても問題ないですか?

205あなたの名前を入力してください:2019/11/18(月) 17:46:38 ID:nvQJDKt.
>>204
BEGIN処理を使わなくても多分、問題ないと思います。
ただ、関数を全部自作しなくてはいけないので処理を作るのは面倒かもしれないです。

206あなたの名前を入力してください:2019/11/18(月) 19:15:39 ID:hy9nPJp2
ありがとうございます 調べたところ eratohoYMなんかはABLUPを実装していませんでした
ただ、SYSTEM_TITLEからCALLした関数でBEGINをするとうまく働かずRETURNをしたことになるっぽいです
(CALLした関数でLOADDATAするのも問題ない)

207あなたの名前を入力してください:2019/11/18(月) 19:36:07 ID:ghpwV/6Q
>>206
多分 >>93-95 の話

208あなたの名前を入力してください:2019/11/18(月) 19:50:38 ID:hy9nPJp2
@SHOW_SHOP
CALLFORM AAAAA
RPINTS XXXXX
THROW

@AAAAA
BEGIN TITLE

のように書くとTITLEが呼ばれるのではなくXXXXXと表示された後THROWでエラーを出します
THROWをなくすとXXXXXと表示された後タイトルに飛ぶのですが…これって仕様ですか?

209あなたの名前を入力してください:2019/11/18(月) 19:52:39 ID:hy9nPJp2
もう書かれてましたか…ありがとうございます

210あなたの名前を入力してください:2019/11/28(木) 19:15:16 ID:7B4495Jo
イベント発生部分で配列チェックして一人でも所属が違うか捕虜なら発生しないみたいに書いたんだけどなんでか配列内のキャラが捕虜になっててもイベントが発生しちゃいます…どこか間違ってますか…? FOR カウンター, 0, 3 対象 = NAME_TO_CHARA(配列:カウンター) IF CFLAG:MASTER:所属 != CFLAG:対象:所属 || CFLAG:対象:捕虜先 != 0 RETURN 0 BREAK ELSE RETURN 1 ENDIF NEXT

211あなたの名前を入力してください:2019/11/28(木) 19:34:13 ID:A0LkY5VY
RETURN 1をループの外に出さないと1回目の判定外したときに1を返して終了してしまうね

212あなたの名前を入力してください:2019/11/28(木) 21:57:30 ID:7B4495Jo
>>211意図した挙動になりました…ありがとうございます!

213あなたの名前を入力してください:2019/12/23(月) 20:39:18 ID:vP2Fekys
K系列で臆病とか反抗的とかで汎用口上分岐させたいんですがどんな感じにすればいいでしょうか

214あなたの名前を入力してください:2019/12/26(木) 14:08:56 ID:JfMZ59X2
ちょっと質問なんですが、以下の処理をスムーズにするにはどうしたらいいでしょうか?

関数@HOGE_001,HOGE_002……(以下HOGE_30まである)
これを呼び出す為にCALL HOGE_XXとしたい
ここのXXに直接変数なりプライベート変数を割り当てるのって出来るのでしょうか?

CALL HOGE(LOCAL)として
@HOGE(LOCAL)
SELECTCASE LOCAL
CASE 1
CALL HOGE_001
以下CASE30まで

これなら動くんですが、後後からみると色々と見づらいもので
何かいい方法あれば是非ご教授下さい

215あなたの名前を入力してください:2019/12/26(木) 14:22:49 ID:LNNg4OW2
CALLFORM HOGE_{LOCAL}
でいけないかな

216あなたの名前を入力してください:2019/12/26(木) 17:18:01 ID:JfMZ59X2
>>215
できました!アドバイスありがとうございます

217あなたの名前を入力してください:2019/12/27(金) 23:43:40 ID:I8lIfKHw
【質問】
ユーザー定義のキャラクタ変数で躓いているのですが
以下のエラーの原因は何でしょうか?

[COMMON.ERH]
#DIM CHARADATA SAVEDATA UID

[EVENTFIRST.ERB]
@EVENTFIRST
$LOOP
PRINTFORML {UID:0}
GOTO LOOP

[エラーログ]
EVENTFIRST.ERBの3行目でエラーが発生しました:Emuera1824+v6.2
PRINTFORML {UID:0}
エラー内容:キャラクタ配列変数UIDの第1引数(1)はキャラ登録番号の範囲外です
現在の関数:@EVENTFIRST(EVENTFIRST.ERBの1行目)

218あなたの名前を入力してください:2019/12/27(金) 23:56:43 ID:tQEPRuQU
エラー内容まんまだけどどこが分からなかった感じ?

解説すると
まずキャラ変数はキャラ番号省略するとTARGETが使われる
そしてEVENTFIRSTの時点じゃTARGETが-1だから範囲外

EVENTFIRSTの時点だと0番目のあなたしかいないだろうから
UID:0:0
と指定すればいけるはず
まあこのまんまのコードだと無限ループでエラーになるけども

219あなたの名前を入力してください:2019/12/28(土) 00:24:49 ID:S9PBZcbY
動作確認しました。ありがとうございます。
仕様を誤解した理由はERHでは配列としての宣言を意図していないところです。
例えばNAME:0なら動きますし、VARSIZE("NAME")では以下のようなエラーが出るので
非配列型のキャラ変数NAMEの長さを取得しようとしました

220あなたの名前を入力してください:2019/12/28(土) 00:32:42 ID:S9PBZcbY
途中送信
上述レスを理由に非配列型のキャラ変数UIDを宣言したつもりでいました。
現在はVARSIZE("UID")は1を返して配列であることを確認しています。
ただCFLAGを使わないことを目標にCHARADATAに手を出したのでUID:(CNO):0みたいになるのは不格好ですね・・・

221あなたの名前を入力してください:2019/12/28(土) 01:08:01 ID:ZEzd81Sw
なるほど
確かにぱっと見非配列型の宣言に見えるかも
一応ユーザー定義変数解説には
省略したら要素数1になるとはあるけど直感的ではないしね

仕様的には配列型しか宣言できないから
非配列っぽくするにはマクロや関数でなんとかするしかないかな

自分はまだユーザー定義のキャラ変数を扱ったことがないから
その辺はもっと詳しい人に譲ります

222あなたの名前を入力してください:2019/12/28(土) 23:38:14 ID:nMKJ0MpI
>>220
CFLAGって「CFLAG,キャラ数,データ数」の二次元配列だろうから
その使い方なら以下で実現できそうだけどこういう意味かな?

[COMMON.ERH]
#DIM CONST CHARA_MAX = 100
#DIM SAVEDATA CHARA_ID, CHARA_MAX
#DIMS SAVEDATA CHARA_NAME, CHARA_MAX
(CHARA_MAXはCHARANUMの代用。CFLAGのようにここに追加していく想定)

[EVENTFIRST.ERB](使用例)
@EVENTFIRST
#DIM COUNTER_CHARA ;キャラ番号カウンタ
#DIM COUNTER_ID ;キャラIDカウンタ

CHARA_NAME:1 '= "一郎"
CHARA_NAME:2 '= "次郎"
CHARA_NAME:3 '= "三郎"
CHARA_NAME:20 '= "二十郎"

COUNTER_ID = 0
FOR COUNTER_CHARA, 0, CHARA_MAX
IF CHARA_NAME:COUNTER_CHARA == ""
CONTINUE
ENDIF
COUNTER_ID += 1
CHARA_ID:COUNTER_CHARA = COUNTER_ID
PRINTFORML 識別番号:{CHARA_ID:COUNTER_CHARA} 名称:%CHARA_NAME:COUNTER_CHARA%
NEXT

223あなたの名前を入力してください:2019/12/29(日) 04:14:46 ID:SejZ7S0w
オプションに省略を許可するのなかったっけ

224あなたの名前を入力してください:2019/12/29(日) 21:19:03 ID:DiOMUQMI
>>222
結局キャラ変数も配列なのだからそれそのものを自作するというのもひとつの選択肢かもしれませんね
CSVやdatファイルなどが使えなくなるのは若干困りますがテキストをフル活用すれば・・・

225あなたの名前を入力してください:2019/12/30(月) 12:10:29 ID:aLuMmOtQ
【質問】
・環境 eratohoYM Mk-3改8proto6     macOS Mojave
・質問内容 一度Visual Studio Codeに入れたデータを上書きし、ゲームを起動したら触った覚えのない箇所までエラーが出るのですが
対処方法はありますか?サクラエディタを使った場合でもエラー個所は減りますが同様の現象が起きます
やはりMacでの改変は難しいのでしょうか

・エラーログ 余りにも長いので冒頭だけ、この下にも同じ様に触っていない個所のエラーがずっと出ています」
警告Lv1:ITEM.CSV:4行目:金額が読み取れません
2,繝壹ル繧ケ繝舌Φ繝?2000,告Lv1:ITEM.CSV:5行目:金額が読み取れません
3,繝舌う繝?500,
警告Lv1:ITEM.CSV:11行目:金額が読み取れません

226あなたの名前を入力してください:2019/12/30(月) 12:12:30 ID:aLuMmOtQ
すいませんsage忘れてました

227あなたの名前を入力してください:2019/12/30(月) 12:34:11 ID:4YPM0f9E
Mac環境もVisual Studio Codeもわからんから、思いっきり文字化けしてることしからわからんや
Visual Studio Codeで読み込んだ時か、上書きした時に何かあったのかな、文字コードを間違えてるとか?

そもそものデータの解凍ミスとかは大丈夫だろうか、eraではないけど、以前何かのフリーゲームを解凍したら中身が一通り文字化けしてて動かないことがあった、解凍ソフト変えたら治ったけど

228あなたの名前を入力してください:2019/12/30(月) 12:38:43 ID:vY.VYKWw
>>225
エラーログを見ての通り
データやソースコードが文字化けしているようです

解凍時に文字化けしていないか
またエディタで開いた時に正しい文字コードで読めているか
保存する前と後で文字コードは元のままか
確認してみてください

おそらくShift_JIS絡みだと思われますので
エディタの設定を見直して
読み込み時のデフォルトの文字コードや
文字コードの推測機能を有効にすると
やりやすいかもしれません

229あなたの名前を入力してください:2019/12/30(月) 12:45:38 ID:jyBGgLO6
エスパーするとたぶんCSVがBOMなしUTF-8になっている
EmueraがShift_JIS(Windows31j)とUTF-8と読み分ける都合でUTF-8はBOM有りUTF-8でないといけない
C#じゃなくてJavaだがこっちはBOM有りUTF-8を読み込めなかったり稀に良くあるトラブル

230あなたの名前を入力してください:2019/12/30(月) 12:58:48 ID:Io1Ov0hM
MacだからどっかでSJISがUTF8に自動変換されちゃったんだろね

231あなたの名前を入力してください:2019/12/30(月) 14:32:51 ID:aLuMmOtQ
>>227 解凍時はどのファイルも問題なかったです
VSCに取り込んだら一部のCSVが文字化けしていたので元フォルダからコピペして上書きしました
Item欄はどこも文字化けしていなかったので触っていません

>>228
解凍時には文字化けしていませんでした
いいえ、AblやBaseの中身が文字化けしていました
改変した箇所以外は同じです

>>229 これでした!BOM付きに変更すると全てのエラーが消えました、ありがとうございます
>>230 の自動変換も知れて良かったです

【質問】連続で申し訳ないのですが
ゲームを始めようとすると
関数の終端でエラーが発生しました:Emuera1809+v8.6.exe
関数"@EVENTFIRST"が見つかりません

とエラーが出ます
解凍ソフトを変えたりまた別のデータを使いましたがどれもCSVを置き換えるとこのエラーが出ます
調べた限り_fixed.configを使うと何とかなるかも知れないらしいですがもう既にあったので
@EVENTFIRSTを追加すると行けるのでは?と思い追加しても何も変わらずCSVが影響しているのはわかるがその先がわからない非常にもどかしい状態になっているのでお助け下さい

232あなたの名前を入力してください:2019/12/30(月) 16:38:27 ID:jyBGgLO6
さすがに同じ環境を持ってないとどうしようもない気がする
私だったらこれを試すかなという手順だけ載せとこうか

0. ZIPから解凍したものを使いファイルは弄らない
1.セーブデータがあればを全て削除する
2.emuera.configがあれば削除する
3.emueraを起動し、emuera.configを作り直し、動作を確認する
4. ダメなら以下の設定を総当たりで変更、繰り返し1と3を試す
[emuera.config]
読み込み順をファイル名順にソートする:YES
セーブデータをUTF-8で保存する:NO
セーブデータをバイナリ形式で保存する:NO

5. それでもダメならすべてのテキストファイルをBOM付きUTF-8で保存し直し1から4を試す

233あなたの名前を入力してください:2019/12/30(月) 17:55:44 ID:UQ54wJ.U
Sierra+Wineskinで試したけどMk-3改8proto6自体は普通に起動するなあ
ただ@EVENTFIRST自体はSYSTEM.ERBの56行目に最初から存在してたんで、
改造で消したのでなければERBファイルの読み込みが怪しいかな、ってくらい

どうしても不明なら改造部分を上げてくれれば手元で試してみることはできる
(試して解決するとは言ってない)

234あなたの名前を入力してください:2019/12/31(火) 09:28:48 ID:FBkltksA
>>232 CSVファイル内の全てにBOMを付けたら無事にゲーム開始しました!
頑張って制作します、本当にありがとうございました!

235あなたの名前を入力してください:2019/12/31(火) 16:46:08 ID:ScmQDyHs
しかし、Windowsのメモ帳がBOMなしUTF-8にデフォルト変換されたから
この先、BOMなしが標準化されるんやろか?


「メモ帳」に多数の改善、BOMなしUTF-8がデフォルト保存形式に 〜「Windows 10 19H1」
ttps://forest.watch.impress.co.jp/docs/news/1157696.html

236あなたの名前を入力してください:2019/12/31(火) 19:35:56 ID:/cRyfKZg
C#というか.net Frameworkの仕様みたいなもんだしなぁ
文字コード判別機能を実装すれば対応可能だけど、そこまですることか?とも思う

237あなたの名前を入力してください:2019/12/31(火) 19:39:24 ID:aOijJFhQ
文字コード自動判別は結構めんどくさいからなぁ
mlang.dllが.netからは使いづらいのが悪い

238好好 ◆hcbh0U7bsY:2020/01/17(金) 23:57:46 ID:cp1D656s
すみません、Talentの要素の上限数はいくらなのか教えていただけますでしょうか?

239あなたの名前を入力してください:2020/01/18(土) 00:06:05 ID:t.nM.KKU
VariableSize.csv準拠じゃないのん
これによる設定とか関係ない上限があるかもしれないけど

240好好 ◆hcbh0U7bsY:2020/01/18(土) 00:41:38 ID:JgvAT8ww
>>239
なるほど助かりました、ありがとうございます。

241好好 ◆hcbh0U7bsY:2020/02/03(月) 05:51:06 ID:ypGB4PeU
datフォルダにある、「chara_X.dat」などのカスタムキャラについて、
これらのキャラデータはCHKCHARADATAでロードの可否を確認した際に、
「セーブデータのバージョン違い」で弾かれることがありますが、
datデータのバージョン移行を行う方法はありますでしょうか?
それとも「csv\GameBase.csv」にて「バージョン違い認める」で指定し対処する他ないのでしょうか?

242あなたの名前を入力してください:2020/02/15(土) 19:00:22 ID:QIV6KUUQ
サービス終了した18禁ソシャゲのキャラが好きだからキャラ並べて汎用口上つけた奴作りたいんですが
改造しやすい素体とか無いですか
era自体昔eratohoRR1317でプレイやってたってだけなうえにプログラミングはしたことないですが
しいて言えば職場でVBAでテスト問題とかランダム単語プリントとか作ってるだけです
舐めんな諦めろと言うならその通りだとは思いますが

243あなたの名前を入力してください:2020/02/15(土) 20:05:51 ID:St4GkAf6
>>242

>>3から行けるwikiのページに掲載されてる製作支援バリアントの中からお好みで

244あなたの名前を入力してください:2020/02/16(日) 02:09:02 ID:JnjIQtG2
>>242
複数のバリアントのcsvを見比べて見よう見真似すれば、経験無くてもキャラcsv揃えるのは可能
技術的に詰まったらここか新バリアントスレで質問すれば答えてくれるし
キャラが100人超えてたりすると長期戦になるから、途中で作成に飽きないようにする気力がむしろ大事になってくる感じね

245あなたの名前を入力してください:2020/02/16(日) 21:03:48 ID:BlS5dHqY
emuera wikiが読めれば何だって出来る

246あなたの名前を入力してください:2020/02/16(日) 22:38:19 ID:lP2B225E
あれを読むのにまずある程度の知識がいるのがなぁ、確かに読めるようになると何でも出来るんだけど

247あなたの名前を入力してください:2020/02/16(日) 23:19:48 ID:voJOWMnU
出てくる用語が難解だし使用例が少なくて困る

248あなたの名前を入力してください:2020/02/16(日) 23:27:32 ID:bXHjm8bk
eramakerの基本的な部分はすでに解ってるのが前提の、emuera独自部分のリファレンスだからなぁあれ
そもそも解説じゃないっていう

249あなたの名前を入力してください:2020/02/16(日) 23:34:16 ID:GQw8tWWo
やっぱり動物表紙で
はじめてのEraBasic
プログラミングEraBasic
EraBasicクックブック
の3冊セットが必要なのでは……?

250あなたの名前を入力してください:2020/02/17(月) 00:13:46 ID:wZJJq492
>>248
そのeramakerの部分自体は大したことしてないでしょ
大学の授業でちょっとかじっただけの俺でも大体理解できるし

251あなたの名前を入力してください:2020/02/17(月) 10:48:27 ID:/TTbuLkE
>>243,244
ありがとうございます、やってみます

252あなたの名前を入力してください:2020/02/17(月) 11:39:52 ID:6FuZ06Sg
>>249
それむっちゃ欲しい、ってのは冗談としても
eraまとめwiki辺りにもう少し詳しいERB講座があると初心者もデビューしやすい気はする
ベースバリアントを改造していく手順を解説する感じで(キャラ追加、アイテム追加、調教コマンド追加辺りを具体的に解説)

253あなたの名前を入力してください:2020/02/17(月) 18:00:32 ID:QFejTEhQ
eraTutorialでもつくるか

254あなたの名前を入力してください:2020/02/17(月) 18:18:53 ID:77K2bzZk
書き方は書いてあっても
使い方がわからないとかありがちだしな

255あなたの名前を入力してください:2020/02/27(木) 22:44:17 ID:aSn.98uo
【質問】
・環境 eraH
・内容 下の構文をCSV以外から引用する方法はないでしょうか?
・目的 妊娠関連をいじって、CSVのないキャラからでも素質やRPGデータを引用できるようにしたいです。

CFLAG:L_T:L_STR_ID = CSVCFLAG(L_P,GETNUM(CFLAG,L_STR_ID),0)

256あなたの名前を入力してください:2020/02/27(木) 23:14:10 ID:HRvu8e4Q
記載の構文はそもそも間違えてると思う
CFLAG:L_T:L_STR_ID = CSVCFLAG(L_P,GETNUM(CFLAG,L_STR_ID))
なら通る

その前提で、現在のCFLAGを見るなら、
CFLAG:L_P:GETNUM(CFLAG,L_STR_ID)

そうではなく、登録直後のデータを見たいのであれば、emueraにCSV以外で過去の断面のデータを参照する方法はない
どっかに過去の断面データを保存しておく必要がある。文字列にして複数の値を格納しておくと便利

257あなたの名前を入力してください:2020/02/28(金) 22:10:17 ID:E8pyU.4k
eraFGOで色々試そうと思ってるんですが、CSV500番以降のキャラを追加すると下記エラーが出ます。
どこを調整すれば回避できますでしょうか

口上\EVENT_KOJO_DAILY.ERBの135行目でエラーが発生しました:Emuera1824
EVENT_NUM = KOJO_DAILY_EVENT_NUM:対象NO:デイリー_通常派生
エラー内容:配列型変数KOJO_DAILY_EVENT_NUMの第1引数(500)は配列の範囲外です
現在の関数:@KOJO_DAILY_DERIVATION(口上\EVENT_KOJO_DAILY.ERBの102行目)
関数呼び出しスタック:
↑口上\EVENT_KOJO_DAILY.ERBの20行目(関数@EVENT_KOJO_DAILY内)
↑SYSTEM\TURNEND.ERBの170行目(関数@TURNEND_LIFE内)
↑SYSTEM\TURNEND.ERBの12行目(関数@EVENTTURNEND内)

258あなたの名前を入力してください:2020/02/28(金) 22:31:46 ID:HT2xFFok
VARIABLE_DAILY.ERHで500と書かれている部分をぜんぶ固定キャラの最大人数(1000)に書き換える

259あなたの名前を入力してください:2020/02/28(金) 22:49:50 ID:E8pyU.4k
>>258
ありがとうございます。無事解決しました

260あなたの名前を入力してください:2020/02/29(土) 13:33:54 ID:cqYFFW1g
>>256
無事解決しました、ありがとうございました!

261あなたの名前を入力してください:2020/02/29(土) 22:32:28 ID:cqYFFW1g
【質問】
・環境 eraH
・内容 キャラ2体のTALENTを全部遺伝させたい場合、下の構文でいいでしょうか
・目的 妊娠関連の素質遺伝のシステムを作っています。流れとしては
    全ての素質を遺伝→ダブった素質をはじく→相反する素質はランダムでどちらかをはじく
    という形を目指しています

L_J = 母親
L_OYA = 父親
L_O = 子ども

L_O = TALENT:L_OYA + TALENT:L_J

262あなたの名前を入力してください:2020/03/01(日) 11:15:17 ID:yZrHMSvM
eraHの仕様は知らない
>全ての素質を遺伝
そのまんま書くとこんなの
@SAMPLE_IDEN(L_MOM, L_DAD, L_BAB)
#DIM L_MOM ;母親
#DIM L_DAD ;父親
#DIM L_BAB こども;
#DIM T_ID ;対象素質
FOR T_ID, 0, VARSIZE("TALENT")
 IF TALENT:L_MOM:T_ID
  TALENT:L_BAB:T_ID = TALENT:L_MOM:T_ID
 ELSEIF TALENT:L_DAD:T_ID
  TALENT:L_BAB:T_ID = TALENT:L_DAD:T_ID
 ENDIF
NEXT


ただこの手の継承、相殺処理って個々の素質について検討が必要になるから
FOR-NEXTで回すことにこだわらなくてもいいかもしれない

263あなたの名前を入力してください:2020/03/01(日) 13:10:30 ID:YzV57wd2
度々すいません。257ですが、今度はスキル追加で詰まってしまいました
能力表示でスキル追加されてるか確認しようとすると下記エラーが出ます
どこを調整すればよいでしょうか

SKILLS\FUNCTIONS_SKILL.ERBの363行目でエラーが発生しました:Emuera1824
CALLFORM %アクセサ%EXPLANATION(対象)
エラー内容:引数の数が関数"@SKILL_500_SP_1_EXPLANATION"に設定された数を超えています
現在の関数:@SKILL_EXPLANATION(SKILLS\FUNCTIONS_SKILL.ERBの332行目)
関数呼び出しスタック:
↑SYSTEM\SHOW_INFO\SHOW_INFO.ERBの296行目(関数@SHOW_SKILLS内)
↑SYSTEM\SHOW_INFO\SHOW_INFO.ERBの206行目(関数@SHOW_INFO内)
↑SYSTEM\SHOW_INFO\SHOW_INFO.ERBの20行目(関数@SHOW_INFO_WITH_UI内)
↑SHOP\SHOP_LIFE\SHOP_LIFE51_能力表示.ERBの85行目(関数@SHOP_LIFE_USERSHOP51内)
↑SHOP\SHOP_LIFE.ERBの165行目(関数@USERSHOP_LIFE_CHARA1内)
↑SHOP\SHOP_LIFE.ERBの136行目(関数@USERSHOP_LIFE内)
↑SHOP\SHOP.ERBの171行目(関数@USERSHOP内)

264あなたの名前を入力してください:2020/03/01(日) 14:01:35 ID:2Mlc0Lg2
fgok以外からスキルテンプレ引っ張ってきたでしょ
スキルファイルのその関数名の後ろに(ARG:0)を書き加える

265あなたの名前を入力してください:2020/03/01(日) 20:58:45 ID:YzV57wd2
>>264
すいません、そのとおりでした。ありがとうございました

266あなたの名前を入力してください:2020/03/06(金) 23:16:11 ID:GfRw2pGQ
>>262
>>261です。無事解決しました。
ありがとうございました!

267あなたの名前を入力してください:2020/03/12(木) 22:39:12 ID:GxNbv1OQ
【質問】
・環境 eraH
・内容 3つ以上の素質からランダムに一つを選ぶ場合、どんな式を組めばいいのでしょうか?

娘への素質遺伝に関してなのですが、継承、相殺処理にあたって下のように式を組んでいます。
しかしこれだと3つ以上の処理に対応できません。
IF-ENDIFぐらいしか使いこなせず、申し訳ないんですが、
何かいい方法があれば教えてくれませんでしょうか?

IF TALENT:L_O:C敏感 == 1 && TALENT:L_O:C鈍感 == 1
IF RAND:2 == 0
TALENT:L_O:C敏感 = 0
ELSE
TALENT:L_O:C鈍感 = 0
ENDIF

268あなたの名前を入力してください:2020/03/12(木) 22:45:47 ID:hxCa7epw
SELECTCASE RAND:分岐数
CASE 0
TALENT:L_O:C敏感 = 0
CASE 1
TALENT:L_O:C敏感 = 1
  ・
  ・
  ・
CASE 分岐数-1
TALENT:L_O:C敏感 = 何か
ENDSELECT


一番簡単かつ綺麗なのだとこんなかな
ライブラリ組むともう少しスマートに書けるけど

269あなたの名前を入力してください:2020/03/12(木) 23:08:46 ID:69yhwzsE
遺伝させたいなら完全ランダムはまずいのでは
超敏感、敏感、鈍感、超鈍感の4候補と仮定して
超敏感&敏感の両親から鈍感系が生まれてほしくないならもっと複雑になると思う

270あなたの名前を入力してください:2020/03/12(木) 23:19:55 ID:hxCa7epw
ああ、遺伝かー
面倒なんであんま手を出してないんだよなぁ

eraHやったことないんだけど、仮に超敏感〜超鈍感がそれぞれ独立した素質として、RAND:分岐数のところを

LIMIT(((TALENT:親1:C超敏感*3 + TALENT:親1:C:敏感*2 + TALENT:親1:C:鈍感*1) + (TALENT:親2:C超敏感*3 + TALENT:親2:C:敏感*2 + TALENT:親2:C:鈍感*1)) + RAND:2 - RAND:2,0,3)
とでもしておけばそれっぽくはなるんじゃね?

271あなたの名前を入力してください:2020/03/13(金) 21:52:39 ID:MX8z8GA2
>>268
ありがとうございます。二つの相反する素質に関してはこれでやってみます。

>>269
ありがとうございます。
完全ランダムというよりは、
両親の素質をすべて継承→両立できない素質をランダムでどちらかはじく
といった流れにするつもりです。
今の知識ではこれが限界なので・・・

>>270
ありがとうございます。LIMITは初めて知りました。
まだ使いこなせないので、もう少し理解してから
使ってみます。


二つ以上の両立できない素質(貧乳、巨乳、爆乳等)についても、
>>268さんのやり方を総当たりで繰り返してやってみます。
eratenの性格素質遺伝ではそうしているようなので。
もっとスマートなやり方があれば後学のために教えていただけると
嬉しいです。

272あなたの名前を入力してください:2020/03/14(土) 23:35:03 ID:f//6Rcwo
>>271です。
無事問題解決しました。ありがとうございました。

273あなたの名前を入力してください:2020/03/14(土) 23:47:17 ID:mZpuYS7U
親:0 = 父
親:1 = 母
LOCAL = 親:(RAND:2)
TALENT:子:爆乳 = TALENT:LOCAL:爆乳
TALENT:子:巨乳 = TALENT:LOCAL:巨乳
TALENT:子:貧乳 = TALENT:LOCAL:貧乳
TALENT:子:絶壁 = TALENT:LOCAL:絶壁
うーん…

274あなたの名前を入力してください:2020/03/15(日) 02:13:31 ID:0VGT.f1Y
それだと1/2で父親のバストサイズ受け継ぐ可能性があるな
絶壁〜爆乳に数値を割り振って、ランダム+母の影響でいいんでないかな
たとえば絶壁〜爆乳を0~4で評価して母が巨(3)ならRAND:4(基本値)に母の影響RAND:(3 + 1) - 1を加算して
0~4に収まるようにLIMITでまとめる
ただし0~4で評価する場合絶壁〜爆乳が均等に出てきちゃうから1:2:5:2:1にするとか
ある程度ばらけさせた方が自然かも

275あなたの名前を入力してください:2020/03/15(日) 02:26:23 ID:uVu2Yfc6
「いずれかの親と同じになる」「両親の中間になる」「0および両親からランダム」「その他」のどれにしたいのか分からないからとりあえず1つ目の分をと…
バストサイズを決定するばあい父(男)はまあ除外した方がいいよね、父(フタナリ)なら参照してもいいだろうけど
重み付けランダムはシンプルに組みたい場合は嫌かなと思った

276あなたの名前を入力してください:2020/03/24(火) 13:37:27 ID:3HBGWxsg
CFLAGってCSVから削除した場合、その番号に保存されていた数値は既存のセーブデータに残り続けるんでしょうか?

277あなたの名前を入力してください:2020/03/24(火) 22:32:40 ID:iLmRCgdo
意味わからん
CSVの定義は初期値であってセーブデータとは無関係だぞ

278あなたの名前を入力してください:2020/03/24(火) 22:51:47 ID:ehtyQ4/.
キャラCSVは上の通り消えないし、CFLAG.CSVの場合場合も消えない
CFLAG.CSVで決めてるのはCFLAGNAMEの中身であって、内容に関わらずCFLAG自体は存在するため
ただし、variablesize.csvでCFLAGの要素数そのものを縮めた場合は余った分は消えてしまう、はず

279あなたの名前を入力してください:2020/03/24(火) 23:30:37 ID:3HBGWxsg
CFLAG.CSVの整理をしようと思ってたんですが
例えば
"100,好感度"を"適当な空き番,好感度"へ移動したら100を好感度として使っていた古いセーブデータのCFLAG100の中に好感度用の整数がずっと保存され続けるのか知りたかったんです
その場合はCFLAG100の数値を空き番へ転写した後に100をリセットする処理入れとかないと後々に100を別の用途へ使ったときに最初から数値入ってて不具合が起きる可能性がありそうなので

csvで定義してるのが呼び名だけならリセットが必要なのでアップデート処理に組み込んでおこうと思います
回答ありがとうございました

280あなたの名前を入力してください:2020/03/30(月) 23:37:53 ID:dprOp05.
http://book-shelf-end.com/up2/dwlink.cgi?eraTx0543.txt
@SHOW_USERCOM内でTINPUTを使ってアニメーション表示させてたんですけど、アニメ表示はうまくいったのですがプレイ中にボタンクリックや番号直打ちでコマンドを選択すると二回入力しないと進まなくなってしまいました
最初の入力がTINPUTの方へ入るのが原因だと思ってるのですが解決法が思いつきませんでした

なんとかする方法はありませんか?

281あなたの名前を入力してください:2020/03/31(火) 06:02:36 ID:Ie4I6W2g
入力がTINPUTに入るんならTINPUTからコマンド分岐を処理すればいいのでは
入力がなかった場合だけアニメーションやってループ回すでいい、ように見える

282あなたの名前を入力してください:2020/03/31(火) 21:03:21 ID:c2KP7xi6
>>281
試してみたところ@SHOW_USERCOM内ではBEGIN命令が使えないらしくUSERCOMの[999]終了でBEGIN AFTERTRAINが呼び出されるとスタックしてしまうようです
また他の関数も呼び出した後に@SHOW_STATUSではなく@SHOW_USERCOM内へ戻ってきてしまうため何も表示がない状態の画面になってしまいました

IF RESULT == 2000 && CFLAG:TARGET:瞬きフラグ == 0
  CLEARLINE LINECOUNT - LINE
  FLAG:TARGET:瞬きフラグ = 1
  GOTO ANIME
ELSEIF RESULT == 2000 && CFLAG:TARGET:瞬きフラグ == 1
  CLEARLINE LINECOUNT - LINE
  CFLAG:TARGET:瞬きフラグ = 0
  GOTO ANIME
ELSEIF RESULT < 600 && FLAG:COM表示フラグ == 0
  TRYCCALLFORM COM_ABLE{TINPUT_RESULT}
    SIF RESULT == 1 || FREETRAIN
      DOTRAIN TINPUT_RESULT
    RETURN
  CATCH
  ENDCATCH
ELSE
  PRINTBUTTON "[  次へ  ]", RESULT
ENDIF


現状ではこれが精一杯なのですが
ELSEの部分のボタンをクリックせずに自動で入力する方法とかないでしょうか…

283あなたの名前を入力してください:2020/03/31(火) 21:28:13 ID:fULYLzuE
改めて考えるとTRAIN周りのフローとか全然わかんねぇ
独自関数なら好き勝手設計できるんだがな
というわけで
ttps://ja.osdn.net/projects/emuera/wiki/flow/attach/train.gif

表示処理の順序としては
 @SHOW_STATUS→通常のCOM表示処理→@SHOW_USERCOM
この後にINPUT受付待機
 a)通常のCOM番号の入力後、@COM##実行処理
 b)それ以外の入力で@USERCOM実行処理

この「INPUT受付待機」が行われてるのはシステムとして組み込まれた部分、なのかな
だとしたら
・TRAIN系の上記フローを自分で作る(INPUT後の分岐がつくれるようにする)
・画像表示処理を@SHOW_STATUSに移動
くらいしか思いつかない

284あなたの名前を入力してください:2020/03/31(火) 22:19:29 ID:c2KP7xi6
>>283
@SHOW_STATUSへ処理を移動してみたところ、ループするからか@SHOW_STATUSと@SHOW_USERCOM間の処理が全て読み込まれなくなってしまいました
頑張ってTRAINフロー作成に挑戦してみます

285あなたの名前を入力してください:2020/03/31(火) 22:25:50 ID:fULYLzuE
そうかTINPUTでループして再描画するとそうなっちゃうか
かといってループを無くすとCOMの入力待機処理で引っかかって再描画≒アニメーションができなくなる
製作頑張ってください

286あなたの名前を入力してください:2020/03/31(火) 22:40:41 ID:U2L18D6.
>>283
あ-、それこの間俺が詰まったところだ
TRAIN内のINPUT受付はダミーのCOMを立てて、SELECTCOM:1に設定したダミーのCOMをセットした上でCALLTRAIN 1すればスルーできるよ(USERCOMは不可)
変なメッセージが出るが多分回避不可能。しゃーない
(もしかしたらEVENTTRAIN内でNEXTCOMを設定すると回避できるかもしれんが、非推奨って明記されてるので触れない方がよさげ)

287あなたの名前を入力してください:2020/03/31(火) 23:00:56 ID:c2KP7xi6
>>286
そんな手があるとは!
早速明日試してみます

288あなたの名前を入力してください:2020/04/01(水) 20:45:29 ID:TEZGnLlQ
>>286
無事これで解決いたしました
空のダミーコマンド実行で出てくるメッセージに関しては@SOURCE_CHECKの冒頭部分に
SIF SELECTCOM == ダミーCOMの番号
  RETURN

とすることで謎のWAIT以外は消すことができました
一応フロー図を辿って目を通したのですが@SHOW_USERCOMのINPUTと同じく、イベント関数自体が持ってる処理かもしれないです

289あなたの名前を入力してください:2020/04/01(水) 20:48:16 ID:TEZGnLlQ
助言してくださった皆様に圧倒的感謝を!

290あなたの名前を入力してください:2020/04/01(水) 20:59:36 ID:bGthl3.Q
画像表示処理ってHTML_PRINT命令? PRINT_IMG? ClientBackground系命令?
ClientBackground系命令ならSPRITEANIMECREATEがいいと思う

291あなたの名前を入力してください:2020/04/01(水) 22:07:02 ID:TEZGnLlQ
>>290
HTML_PRINTを使ってます
SPRITEANIMECREATEも最初に使おうとしたのですが使用例が全く見つからず断念したという経緯がありまして…

292あなたの名前を入力してください:2020/04/01(水) 23:53:49 ID:g7AjsuVo
>>288
謎のWAITってこれか?
>@SOURCE_CHECK終了後、@EVENTCOMENDが存在しないか@EVENTCOMEND内で一度もWAIT命令が行われない場合、@SHOW_STATUSの直前にWAITを発生させる。
要件を見る限り、COM???で1を返せばスルーできそうだけど

それとごめん、ダミーCOM立てる必要ないかも

293あなたの名前を入力してください:2020/04/02(木) 05:21:32 ID:RI77xn2Y
>>292
@COM_ABLE200
RETURN 1

@COM_NAME200(ARG)
RESULTS =

@COM_BEFORE200

@COM200
RETURN 1

@SET_TEQUIP200

@SOURCE200(ARG)

@COM_MESSAGE200

ダミーCOMの中身はこんな感じなんですが
@COM200が該当部分ならおそらく既に1を返してるかもしれないです

294あなたの名前を入力してください:2020/04/02(木) 08:11:35 ID:RI77xn2Y
フローよく見たら0の方ですね
0だと@SOURCE_CHECK通らずに@SHOW_STATUSへ直行するので@SOURCE_CHECKの冒頭の記述も不必要になりました

謎WAITがなくなったのでバッチシ理想通りの挙動をしてます!
本当に感謝致します

295あなたの名前を入力してください:2020/04/02(木) 23:54:00 ID:qqHDIGMk
>>294
あー、0の方だったか、すまん
うまくいったなら何よりだ

296あなたの名前を入力してください:2020/04/07(火) 19:55:02 ID:XwiUYZ5c
すみません、質問です。
"ERBコードに解釈不可能な行があるためEmueraを終了します"と出るのですが、
何行目にミスがあるのか調べる方法はありますか?
口上を書くときにPRINTFORMを毎回手打ちしてたので、
そのタイプミスだと思うのですけど見つかりません

297あなたの名前を入力してください:2020/04/07(火) 21:02:33 ID:KwzSlHvg
SPRITEMOVE str spriteName, int movex, int movey  ってどうやって使えばいいんでしょう?
;wikiの記述をそのまんま使うと
SPRITEMOVE リソース名,10,10
エラー内容:"リソース名"は解釈できない識別子です
となってしまいます

リソース名は登録済みでHTML_PRINTでも表示できてますし何がいけないのやら

298あなたの名前を入力してください:2020/04/07(火) 22:17:28 ID:UghVZZW6
>>296
logファイル見ろ

299あなたの名前を入力してください:2020/04/07(火) 23:05:02 ID:XwiUYZ5c
>>298
それがこの文章しか出ないんです...
より正確には

ああ忙しい、忙しい……
ERBコードに解釈不可能な行があるためEmueraを終了します
※互換性オプション「解釈不可能な行があっても実行する」により強制的に動作させることができます
emuera.logにログを出力します

です。バリアントは悪魔メイドです

300あなたの名前を入力してください:2020/04/07(火) 23:06:52 ID:UghVZZW6
>>299
なら、「ああ忙しい、忙しい……」でgrepすれ

301あなたの名前を入力してください:2020/04/07(火) 23:17:27 ID:xglydCFU
それ悪魔でメイドのタイトル画面の文章

302あなたの名前を入力してください:2020/04/07(火) 23:52:29 ID:UghVZZW6
>>301
そうなのかー

表示する最低警告レベルを0(標準的でない文法)に

303あなたの名前を入力してください:2020/04/08(水) 11:08:55 ID:d24kWitE
>>302
ありがとうございます!
無事修正箇所が見つかりました!

304あなたの名前を入力してください:2020/04/08(水) 11:43:25 ID:Dpdl0MDY
バリアントにしろ口上にしろ、ERBを自分で書くのであれば
Emuera設定の解析タブで「開発者向けの設定」を選んでおくのは必須
特にロード遅くなる印象もないので、普段遊ぶ時でも開発者向け設定でいいと思う
(ロード時レポート表示だけオフにしておくとよい)

305あなたの名前を入力してください:2020/04/08(水) 11:59:48 ID:T6nrJjHY
>>297
第1引数は文字列型なんだから直接指定するなら"リソース名"みたいにしなきゃダメなんじゃない?
画像使ったことないから詳しいことはわからないけど

306あなたの名前を入力してください:2020/04/08(水) 13:09:33 ID:W7W7XauY
>>305
こんな単純な見落としだったとは…

問題なく動くようになりました
ありがとうございます

307あなたの名前を入力してください:2020/04/17(金) 18:30:33 ID:SqmU6hEY
全てのERB内の命令で干渉される可能性のある変数(既に使われている変数)をリスト化して表示する方法ってないですかね?
使われていないTCVARだと思って使っていたらCSVファイルで変数名を命名されないまま整数指定で使われていたらしく干渉してバグになってたって事があったので…

正規表現Grep検索で探せないか試したんですが変数名がないのでTCVARと番号で探すしかなく、ARGやLOCAL等に代入されていた場合に対応できませんでした

308あなたの名前を入力してください:2020/04/20(月) 14:48:39 ID:aeZIA6No
使われてる変数一覧がみれる機能やツールは無かったと思う。
パッチや口上で使える変数が知りたいということだろうけど、諦めてERHで新たに変数を宣言するしかないんじゃないかな。
その場合TCVARと違ってBEGIN TRAINで初期化されないから必要ならその処理も書かなきゃいけないけど。

309あなたの名前を入力してください:2020/04/20(月) 20:49:14 ID:GXcBI6e.
>>307
楽しい愉しいリファクタリング作業がキミを待ってるぞ♪

310あなたの名前を入力してください:2020/04/20(月) 21:23:00 ID:pglTMQE.
>>308-309
やっぱりないんですね…
どうせ全コードへ目を通す必要があるので楽しみを先取りすると思って頑張ります

311あなたの名前を入力してください:2020/05/02(土) 14:36:12 ID:HtqroKaw
ちょっと質問なんですが


printbutton "ボタン1",1
print (%文字列表示関数%)
prints " "
printbutton "ボタン2",2
print (%文字列表示関数%)



こうやってボタンと文字列表示関数をセットで二個づつ並べて表示させる場合に偶数個目(表示で右にくる奴)を綺麗に揃えて表示する方法ないでしょうか?
単純に例の通りにやると文字列の字数で偶数個目のヘッダーがでこぼこして見映えがわるくなってしまって

312あなたの名前を入力してください:2020/05/02(土) 15:03:28 ID:z5ePdrHY
>>311
まず確認だけど、printじゃなくてprintformでいいんだよね?

で、やり方は色々あると思うけど、311の例を書き換えて実現するなら
FORM拡張構文を使うのが手っ取り早いと思う
https://ja.osdn.net/projects/emuera/wiki/exetc

printbutton "ボタン1",1
printform (%文字列表示関数(1),10,LEFT%)
prints " "
printbutton "ボタン2",2
printform (%文字列表示関数(2),10,LEFT%)

これで関数(1)が「あいう」、(2)が「えお」を返す場合

ボタン1(あいう  ) ボタン2(えお   )

ってなる。他にはPRINTBUTTONC/LCを使うのも手だね

313あなたの名前を入力してください:2020/05/02(土) 15:51:43 ID:HtqroKaw
迅速な解説ありがとうございます
そうですねformが抜けてました

form拡張構文でなんとか見栄えよくなるよういじってみます

314あなたの名前を入力してください:2020/05/02(土) 15:54:12 ID:yf2EK2WU
そこまでできているなら、括弧閉じをFORM構文の中に入れてしまえばOK
printbutton "ボタン1",1
printform (%文字列表示関数(1) + ")",10,LEFT%
prints " "
printbutton "ボタン2",2
printform (%文字列表示関数(2) + ")",10,LEFT%

315あなたの名前を入力してください:2020/05/07(木) 21:51:36 ID:fU3petyI
【質問】
・環境
 eraMegaten0.309+修正6+私家版パッチ纏め_Rev123 + Rev128
・質問内容
 あなた含むメンバーの中からランダム抽選をするにはどうすればよいでしょうか
・目的
 master対象のイベの最後に、陥落しているメンバーから一人をランダム抽選して今後のイベにつなげるフラグを付けたい
【サンプル投下】
#LOCALSIZE 1
#DIM LCOUNT
#DIM 対象
LOCAL = 0

;キャラ登録数が1以下の時は引き返す
SIF CHARANUM <= 1
RETURN 1

FOR LCOUNT, 0, CHARANUM
;レンタル中は除外
SIF CFLAG:LCOUNT:労役フラグ == 3
CONTINUE
;主人ならスキップ
SIF LCOUNT == MASTER
CONTINUE
;陥落していないキャラは除外
SIF !TALENT:LCOUNT:恋慕 == 1 || !TALENT:LCOUNT:親愛 == 1 || !TALENT:LCOUNT:淫乱 == 1 || !TALENT:LCOUNT:娼婦 == 1 || !TALENT:LCOUNT:服従 == 1 || !TALENT:LCOUNT:隷属 == 1
CONTINUE
NEXT
対象 = LCOUNT

CALLNAME:対象で描写と、その対象にフラグを付けたいんですが
ランダム抽選はよくわからず、とりあえず他の人が作ったのを真似していじってみるとエラー発生

エラー内容:キャラクタ配列変数CALLNAMEの第一引数(5)はキャラ登録番号の範囲外です

どうにも、ランダム抽選の仕組みが理解できてないんですが、WIKI見てもよくわからず……ご指導いただけないでしょうか

316あなたの名前を入力してください:2020/05/07(木) 22:22:35 ID:vZCUmrs6
>>315
http://jbbs.shitaraba.net/bbs/read.cgi/otaku/16783/1498745115/93
↑を使う・・・・という、宣伝を兼ねた冗談はさておき。

パッと思いつく範囲でやり方は大きく二つ。
・キャラクター全員が入る変数に条件を満たすキャラのリストを格納し、その中からランダムで一人選ぶ
 ↑のライブラリで使用してるのはこの方式
・(条件を満たすキャラが一人以上いるのを確認した上で)とにかくランダムに1キャラ選び、条件を満たすか確認。
 満たさない場合は最初からやり直し

前者より後者の方が単純だが、遅くなる可能性があるし下手すると簡単に無限ループに入るな
個人的には前者がオススメだが、書くのけっこー面倒

317あなたの名前を入力してください:2020/05/07(木) 22:50:50 ID:fU3petyI
>>316
ありがとうございます
今のやり方で条件追加したりしていじってたら、たしかにループなるから終了しとけと言われたりもしてましたね…
ライブラリの内容、読んで勉強させてもらいます!

318あなたの名前を入力してください:2020/05/08(金) 12:59:39 ID:pLAxw03I
解決してるっぽいけど一応
>>315
対象 = LCOUNTがNEXTの外にあるから必ずCHARANUMが代入されてしまう
CHARANUM == 5の時CALLNAMEは0〜4までしかないので当然エラーになる

そもそもこの構文だとランダムじゃなくて登録番号順でキャラが選ばれてしまうぞ
>>316さんの後者の方式を使うならRAND:CHARANUMして選ばれたキャラが条件を満たしてなかったらループさせればいい
何回ループさせるかわからないのでFOR~NEXTじゃなくてDO~LOOPを使おう

あと
SIF !TALENT:LCOUNT:恋慕 == 1 は
SIF TALENT:LCOUNT:恋慕 == 0 か SIF TALENT:LCOUNT:恋慕 != 1って書いた方が良い
0か否かだけなら SIF !TALENT:LCOUNT:恋慕 だけでも良い

319あなたの名前を入力してください:2020/05/08(金) 15:06:10 ID:WpbsUk7w
>318
なるほど、アドバイスありがとうございます
見様見真似でやってるばかりであんまり理解しきれてないもんで、自分が貼ったものの問題点もご指摘いただけるのはありがたいです!

わざわざ == 1 とか、場合によっては書かなくてもちゃんと判別してくれるんですね
他の人の見てたらたしかに書いてないのも見てたんですが、なんでこれでいけるんだって?マーク浮かべてるだけでした…勉強になりますっ

320あなたの名前を入力してください:2020/05/08(金) 15:12:06 ID:fnXxv3SE
今のEmueraなら1次元配列限定で指定データ差し込んで配列ずらす、ARRAYSHIFTが使えるから
それでキャラリスト作ればいいんじゃないかな?

※スレでインデントするために全角スペース使用

; 何万回もADDCHARAする特殊例でも無い限り2^16で足りるはず?この例だとあふれたらエラー
#DIM DYNAMIC 堕落キャラリスト, 65536
#DIM 候補数
#DIM LCOUNT
#DIM 対象

候補数 = 0
; メンバー全員チェック
FOR LCOUNT, 0, CHARANUM
 SIF 除外する条件...
  CONTINUE
 ; 全ての例外に当てはまらなかったらリストに追加して、候補数+1
 ARRAYSHIFT 堕落キャラリスト, 1, LCOUNT
 候補数++
NEXT
; 完成したリストから1人抜き出す
対象 = 堕落キャラリスト:(RAND:候補数)

321あなたの名前を入力してください:2020/05/08(金) 15:14:21 ID:fnXxv3SE
・・・堕落になってら

322あなたの名前を入力してください:2020/05/08(金) 16:02:13 ID:Ae1yGuM6
陥落が一人もいなかった時の処理が入ってないぞ

323あなたの名前を入力してください:2020/05/08(金) 19:18:49 ID:WpbsUk7w
ひとまず例文をいただいた>320さんので動かしてみようとしてみました
なるほどこうやって候補を洗い出して、その候補の中からランダム決定させるんですね

これは>316さんの1つめのやり方で、もう一つのほうは>318さんが言うように先に対象を決めてその対象が条件合致してるか確認
ダメなら戻って別の候補選出って方法ってことでいいのかな?


あと、SIFで条件を絞っていっていると、陥落キャラのみを対象にしたい時にうまくいかないんですが、指定の仕方が間違ってるでしょうか

;陥落していないキャラは除外
SIF TALENT:LCOUNT:恋慕 != 1 || TALENT:LCOUNT:親愛 != 1 || TALENT:LCOUNT:淫乱 != 1 || TALENT:LCOUNT:娼婦 != 1 || TALENT:LCOUNT:服従 != 1 || TALENT:LCOUNT:隷属 != 1
CONTINUE

これで恋慕〜隷属のどれかがついてないと対象から外れるって認識だったんですが…

324あなたの名前を入力してください:2020/05/08(金) 19:52:56 ID:A1owIAPQ
その書き方だとどれかが0なら除外されない?

325あなたの名前を入力してください:2020/05/08(金) 20:43:47 ID:A1owIAPQ
というかeratenには@陥落って関数があるね
SIF !陥落(LCOUNT)
CONTINUE

326あなたの名前を入力してください:2020/05/08(金) 21:30:16 ID:WpbsUk7w
>324
AもしくはBだからいずれかが条件満たしてれば、とはならないってことですか…恋慕系、淫乱系、服従系でそれぞれIFで作らないとかあ

>325
そしてeratenこんな便利な関数が! あるもの把握して有効利用しないと自分が大変になるだけですね
>316さんのライブラリのも含め、有効活用できるよういろいろ試してみます。ありがとうございます!

327あなたの名前を入力してください:2020/05/08(金) 21:50:24 ID:enuCb1lY
>>326
323でOR(||)じゃなくてAND(&&)で書けば望み通りの動作になる

まぁ論理式は混乱しやすいから、ダサく見えてもIFを並べた方が間違いが無いとはいえる
結局は関数化するのが一番いいと思うけどね

328あなたの名前を入力してください:2020/05/08(金) 23:01:54 ID:FxufY.Jw
ド・モルガンとビット演算は覚えておくとできたハゲが治るくらいには便利だぞ
>>323はド・モルガンで変換すると
TALENT:LCOUNT:恋慕 != 1 || TALENT:LCOUNT:親愛 != 1 || TALENT:LCOUNT:淫乱 != 1 || TALENT:LCOUNT:娼婦 != 1 || TALENT:LCOUNT:服従 != 1 || TALENT:LCOUNT:隷属 != 1
⇔ !(TALENT:LCOUNT:恋慕 == 1 && TALENT:LCOUNT:親愛 == 1 && TALENT:LCOUNT:淫乱 == 1 && TALENT:LCOUNT:娼婦 == 1 && TALENT:LCOUNT:服従 == 1 && TALENT:LCOUNT:隷属 == 1)
⇔全ての陥落状態を満たす状態に近しい
ということになるからなんかおかしい、と気づける

というか、プログラミングってよっぽど変なことやらない限り、高校数学がかなり役に立つ
(よっぽど変なことの例:OS書くとかコンパイラ書くとか)

329あなたの名前を入力してください:2020/05/08(金) 23:36:22 ID:fnXxv3SE
わざわざORで繋げられるように(!恋慕)==1の形になってるのを
!(恋慕==1)と勘違いして恋慕!=1にしてしまったから起きたんだよこれは…

基本の論理式しか使わない人から見ると違和感のある記法だとは思うけど
後から条件の数が増えたり減ったりする可能性がある場合に都合のいい形だからこういう書き方をする

330あなたの名前を入力してください:2020/05/09(土) 00:04:09 ID:/mR0Pq82
悪い酒入って支離滅裂な事言ってる

331あなたの名前を入力してください:2020/05/09(土) 00:07:48 ID:nxuPXDiQ
>>329
>わざわざORで繋げられるように(!恋慕)==1の形になってる
なんでそんな変な書き方したし
(!恋慕)ってことはbool型を想定した書き方だし、なのに==1で比較してるし。間違えやすくなるだけやん

素直に↓でええやん
!TALENT:COUNT:恋慕 && !TALENT:COUNT:親愛 && !TALENT:COUNT:淫乱 (以下略

332あなたの名前を入力してください:2020/05/09(土) 06:46:06 ID:nx4RMyeE
>>329-330
ベロンベロンじゃねーか……しかも間違ってるてタチわるいな

333あなたの名前を入力してください:2020/05/09(土) 07:37:11 ID:pDvkornQ
みんなも禁酒しよう
タイポ事故が多発したから家ではもう3ヶ月飲んでない

334あなたの名前を入力してください:2020/05/09(土) 08:09:49 ID:x5CHAins
>315です
遅くなりましたが皆さんご指導ありがとうございます
こういうのいじるのもera始めてからで、WIKIや他の人のERB読みながら遊んでるもので、
基礎がきちんと理解できてなくお恥ずかしい限りです

これからも色々試しながらやっていこうと思います、ありがとうございます!

335あなたの名前を入力してください:2020/05/11(月) 20:05:38 ID:UgocxgVs
口上を作成しようとサクラエディタをDLしたのですが
そこからサクラエディタ用の設定ファイルもDLを試したのですがリンク切れをしていてDL出来ませんでした
この設定ファイルが無くても作成自体は可能ですかね
他の方と内容が違って構文の質問でなくてすみません…

336あなたの名前を入力してください:2020/05/11(月) 20:35:48 ID:k/v1Hpbo
>>335
eraロダ三号機の方に上げなおしてくれた人がいるよ。
http://book-shelf-end.com/up/dwlink.cgi?eraRx0060.zip

337あなたの名前を入力してください:2020/05/11(月) 20:54:49 ID:oz/MU2t2
>>335
>>336のはDO〜LOOPのLOOPに引数を指定しようとするとエラーみたいな表示になっちゃうけど気にしないように
もし直したいならERB.rkwをテキストとして開いて最後のほうの

//私家版
RxKey[094]=RKA,/^[ \t ]*(DATALIST|ENDDATA|ENDLIST|LOOP)(?=[ \t ])/k

から「|LOOP」の部分を消してから導入すればいい

338あなたの名前を入力してください:2020/05/11(月) 22:04:30 ID:qOyZl/gg
特定の文字列にマウスオーバーする事で吹き出しを表示する事は可能ですか?
素質・アイテム・呪文等の簡易ヘルプとして機能させる事を意図しています。

339あなたの名前を入力してください:2020/05/11(月) 23:02:19 ID:k/v1Hpbo
>>338
HTML_PRINT命令でボタンのタグを使えばツールチップってのを表示出来る。
https://ja.osdn.net/projects/emuera/wiki/exhtml#h5-button.2C.20nonbutton
ここのtitle属性ってのが表示内容。

他にもツールチップ関連の命令がいくつかあるからそっちも一応調べとくと良いかも。

340あなたの名前を入力してください:2020/05/11(月) 23:22:33 ID:UgocxgVs
>>336,337
ノートンにディフェンスされてDLに時間かかりましたけども
なんとかエラーも出ず無事カラフルになりました
教えて頂きましてありがとうございます!

341あなたの名前を入力してください:2020/05/12(火) 01:40:11 ID:YmbjpuE2
>>339
ありがとうございます!
試してみます!

342あなたの名前を入力してください:2020/06/18(木) 21:55:01 ID:yO0oojxE
自分でヴァリアント作ってみたくて
eracustomを四苦八苦しながら改造しているんですけど
ところどころに出てくる「LOCAL:n」(nは1,2,3...)や「A」「B」「C」が
処理の何に使用するための変数なのか読み解くのに苦労しています
今の所、なんとか理解できた部分はコメントを付けているのですが
変数名を自分で定義することはできるのでしょうか
(wshでいうdim xのような)

343あなたの名前を入力してください:2020/06/18(木) 23:08:04 ID:U6a5j7aw
>>342
できる
というか、eracustomならやってる場所あるはず

344あなたの名前を入力してください:2020/06/18(木) 23:24:09 ID:Flbz9S9k
emueraのwikiを読もう

345あなたの名前を入力してください:2020/06/19(金) 07:25:18 ID:ISfaZchE
むしろ今はLOCALや1文字変数は排除できるならそれに越したことはないって考えが広まってる、はず…
まさに質問通りの読み解き難さのせいで古くからあるバリアントやそこから派生したものでは未だに使われ続けてたりするけど
実際maouでも1文字変数をプライベート変数に置き換えた結果、別なところでその1文字変数を参照しててエラー吐いた…なんて例もあったしなぁ…

なので新規に変数を作るならいいけど、元にしたバリアントがLOCALや1文字変数を多用してる場合
全てを置き換えるのは大変かも…っていうのはどうしてもあるのよね…
質問の内容からはちょっとずれちゃってるけど

346あなたの名前を入力してください:2020/06/19(金) 22:04:42 ID:EBD1Him2
>>345
でもバグの原因が1文字変数だったりするから厄介なんだよなー
しかも大抵初期のコードに埋め込まれてるからデバッグが大変大変

347342:2020/06/20(土) 03:14:50 ID:57Xm2G6U
ありがとうございます。
emuera wikiの存在を知らなかったのですが
色んな仕様の詳細が書いてあって捗りそうです。
ひとまず、wikiとERBを並べて調べながら頑張ってみようと思います。
自分で実装する処理の変数には丹精込めて名前をつけてあげようと思います。

348あなたの名前を入力してください:2020/06/22(月) 08:39:35 ID:L8OgLseE
CDFLAGというものを見かけたのですが
お恥ずかしながら説明を読んだだけではどのような場面で活用するのか今ひとつ掴めません

CFLAGのようにキャラごとに持っていて(正確な表現かは自信ありませんが…)
CDFLAGの例えば0の中に更に受け皿があり、もう一段階複雑に数値を保管できると解釈していますが間違いないでしょうか

例えばつまり
キャラ003がキャラ004と、あなたの知らない所で逢瀬を交わしたとして
DIMでそれぞれ、密会者の番号をSEME、誘われた方の番号をUKEに代入して

CDFLAG:SEME:1:UKE += 1
CDFLAG:UKE:1:SEME += 1

とすれば、キャラ003のCDFLAG1の4に1加算(初密会ならCFLAG1,4,1)
キャラ004のCDFLAG3に1加算(初密会ならCFLAG1,3,1)となって
密会した数値をキャラ別に記録出来るという挙動になるのでしょうか

349あなたの名前を入力してください:2020/06/22(月) 09:40:33 ID:ljDFFiq.
>>348
だいたいあってる
例えばあるキャラに相手方をとるタイプのランダムイベントを起こして、それが特定の相手と一定回数を超えたら専用イベントを起こす、みたいな処理をしたい場合、各キャラとのイベント発生回数を保管しておける
eraPaSの恋人イベントではこの考えでCDFLAG使ってる
同じことはCFLAGでもできなくはないが、アホほど領域取るので今後の足かせになってよろしくない

まあ、要はデフォルトでSAVEDATAかかってるキャラ型配列ってだけなので、使い道は割とどうにでもなるよ

350あなたの名前を入力してください:2020/06/23(火) 00:33:06 ID:WiC/Oe9Q
>>349
了解です
拙い説明を汲んでくださり誠にありがとうございます

351あなたの名前を入力してください:2020/06/23(火) 20:36:24 ID:ZUSDvNik
eracustomについて質問です
CSVフォルダ内の先頭にアンダーバーが付いているものが幾つかあると思いますが
その理由は何でしょうか
(_default.config、_Rename.csvなど)
emuera側で予約されている単語だからかな?と推測しているのですが
他にも理由が有るなら教えていただけると助かります

352あなたの名前を入力してください:2020/06/23(火) 21:30:36 ID:u1u1rcGk
>>351
それらはeracustomに固有のファイルではなく、全てera(Emuera)の動作に関わるファイルです

名前にアンダーバーが付いていること自体に重要な意味は無いと思いますが、
他のCSVと同様に仕様で決められている名前ですので、違うファイル名にしたら読み込まれません
(他のCSVファイルとは目的が大きく違うファイルではあるので、区別をつける意味での命名かもしれませんね)

https://ja.osdn.net/projects/emuera/wiki/replace
https://ja.osdn.net/projects/emuera/wiki/exconfig

353あなたの名前を入力してください:2020/06/23(火) 21:36:29 ID:ZUSDvNik
>>352
特に命名規則は気にしなくても良いのですね
ひとまず、名前を気にせずに各々のファイルの役割を確認していこうと思います
wikiのURLもありがとうございます
とても助かりました!

354あなたの名前を入力してください:2020/06/25(木) 14:47:49 ID:alrV9s1E
あるキャラのCSVにて体型を指定する際
CSTR,0,\,尻,3\と代入して最初の「0,」移行を単純な文字列として代入し
体型の表記を行う関数@BODY(ARGS,ARG)を用意して
PRINTFORML BODY(%CSTR:TARGET:0%)とした場合
この命令で@BODY(,文字列,0)となり、第一&第二引数として処理を行うでしょうか

355あなたの名前を入力してください:2020/06/25(木) 23:57:13 ID:F.O4SmEo
>>354
ならない
構文解析は一度しか行われないから、"BODY(,文字列,0)"という文字列が表示されるだけ
つーか最初のカンマが邪魔でそもそも構造がおかしい

356あなたの名前を入力してください:2020/06/26(金) 08:29:17 ID:w3eTPJM6
次のようなことはできる
文字列から引数を2つ取り出す処理は別に必要かと
TRYCALLFORM "BODY", %STR%

357あなたの名前を入力してください:2020/06/26(金) 09:06:11 ID:nF/xjVI6
それ以前にeraのCSVでカンマエスケープできないでしょ

358あなたの名前を入力してください:2020/06/26(金) 13:52:13 ID:Y0AUs8As
>>354
SPLIT 文字列, 区切り文字, 代入先
を使うのじゃダメかい?

・CSV側
CSTR,0,尻/3

・ERB側
; ARG : 対象キャラクター
@BODY, ARG
SPLIT CSTR:ARG:0, "/"
; CSTR:ARG:0が"尻/3"ならば、RESULTS:0は”尻”、RESULTS:1は"3"(文字列)が入る

LOCAL = TOINT(RESULTS:1)
; そのままだと文字列なので数字になおす



359あなたの名前を入力してください:2020/06/26(金) 15:59:52 ID:ZnfrmcyI
ご説明ありがとうございます
私の構文への理解が足らずお恥ずかしい限りです

CSVにてCSTR:0を「尻/3」(要素と数値の間に区切るようの文字を挟む)

まずCSTRを要素と数値に分ける関数を作成
ERBにてSPLITでCSTR:0の文字列を/を区切りにして尻と3の文字に分ける
TOINTで文字列としてRESULTSに格納された3を数値としてローカル変数(LOCAL)に代入

要素と数値を参照して表記を返す関数@BODYを引数(RESULTS:0,LOCAL)で呼び出す

実行するとすればこのような形になるという理解でよろしかったでしょうか

360あなたの名前を入力してください:2020/06/27(土) 02:08:58 ID:hlRPCHag
>>358
SPLITって第三引数省略できたっけ?
あとCSTR:ARG:0だとCSTR:TARGET:ARGになっちゃわない?
>>359
それでもできるけど@BADYの中でSPLITすればいいんじゃないの?
あとLOCALに代入しなくてもBADY(RESULTS:0, TOINT(RESULTS:1))でいい。
そもそも@BADYの中で何するのかわからないけど、PRINTFORMする時は文字列で返ってくるなら%%で囲う。数値で返ってくるなら{}で囲わないと。
文字列で返ってくるならTOINTは二度手間になるかも。

尻という文字をどうするのかとか3って数字の意味が不明なのでスリーサイズを取得する式中関数に勝手に変えてしまうけども、
CSTR.CSVに
0,スリーサイズ
CHARA.CSVに
CSTR,スリーサイズ,90/50/80
って書いて
ERBで
@BADY(ARGS, ARG = TARGET)
#FUNCTION
まずARGがCHARANUM未満か確認する。CHARANUM以上だったらエラー出ちゃうので帰るようにする。
それからSPLIT CSTR:(ARG):スリーサイズ, "/", LOCALSする。
でARGSがBならLOCALS:0を、Wなら:1を、Hなら:2をTOINTして返すようにすればいい。
最後に、CSV書いたキャラが登録番号5番だとして、PRINTFORM 尻:{BADY("H", 5)}ってやれば尻:80ってプリントされる。
この場合ARGを省略してBADY("H")だけでもTARGETに入ってるキャラのヒップサイズが得られる。

と言うかここまで言っといてあれだけどCFLAGとかTALENTで用意したらダメなの?

361あなたの名前を入力してください:2020/06/27(土) 08:42:56 ID:hlRPCHag
違うわ
× CSTR:TARGET:ARG
〇 CSTR:(TARGET):ARG

しかもBODYが全部BADYになってるし寝ぼけ過ぎだろ俺

362あなたの名前を入力してください:2020/06/27(土) 09:47:36 ID:bCpWcwfI
>>360
うん、第三引数は省略しちゃダメだったね
少なくともEmueraではCSTR:ARG:XはCSTR:(ARG:0):Xと同じになるので問題ないよ

363あなたの名前を入力してください:2020/06/27(土) 13:39:12 ID:mEU/LRys
>>360

ご指摘ありがとうございます
具体的な目的を記載するのを忘れていました、申し訳ありません。先にこちらを説明致します
何分拙い発想ですので、非合理的な部分や根本的な見落としがあるかもしれません
 

元々は「TALNETの胸サイズに2を代入すると巨乳となる」みたいな処理について
TALENTの数値を参照する形だと都度、素質別にSELECTCASEで分岐させる方法しか知らなかったもので
「これだと元々0か1の処理に新しい分岐を持ち込むのは手間だな」
「地の文とかの代入数値別に分岐してる処理1つ1つ探して直さなくちゃならないな」と感じました

「尻のサイズとか髪型とかフレーバー要素の強い物はもっと簡略化できないか」
「後から部位表現の数値による分岐を気軽に追加できる関数にできないか」
「かつ、増やした後も、更新に対応していないキャラや既存の処理に影響が無いように」と思って自分なりに考えた結果です

切っ掛けは、キャラを作る時に例えば髪型の指定で
「ツインテキャラだけどロングのツインテな事を強調したい」
「でも要素内にツインテが既にあるのにロングなだけで新しく要素を使うのもな」となったとき
要素:ツインテに2と気安く代入して
素質表記する関数にSIFとかの簡素な命令を加えるだけで対応させたりできたらなと

最初はステータス表記する関数が単にキャラのCSTRを表示して…と考えたのですが
表現を作者に一任しては文字数とレイアウトの問題が起きそうですし
後からサイズ別に地の文や珠の取得が変わる処理とか入れにくいだろうなと

そこで、関数が部位と数値を参照して、引数に対応する文字列(引数が尻と3なら「巨尻」みたいな)を返す従来の形で
更にステータス表記だけ代入された値を細かく参照するようにして
地の文の分岐などは基本的に第二引数が一定以上ならまとめて同じ表記
(例の場合、尻が3以上なら巨尻対応の地の文、個別対応するならIF分岐で「>= 3 && ==5」といった形)

CFLAGでなくCSTRを選んだのはCSVから部位と数値を1要素のみで指定できれば
新たにキャラを制作する人が現れた時、制作が楽になるかなと
また例えば、CSTR:0が尻サイズ参照のためとした後でも
後に「尻周辺の特徴」に解釈を広げ、CSTR:0の第一引数が「肛門」、「太腿」だった場合の分岐を作れれば
「制作当初の想定によりCSTR:0〜9を部位サイズ指定用に設けてCSTR:10から別要素枠になっている」
「更に加筆しようとした時点で0〜9がほぼ使用済み」
という時にも要素数を圧迫せず、不自然に枠が離れる事も無いかなと
あと、指定したい部位を日本語で入力する方が、手間は増えても直感的な気がするというか
「俺は尻をいじるぞ」というモチベがはっきりして、後から他者が見ても伝わりやすいかなと

364あなたの名前を入力してください:2020/06/27(土) 20:43:27 ID:hlRPCHag
う〜ん、わかるようなわからないような

似たような属性の変数は数字が並んでいて欲しい(EXP:0〜3までABCVだとしてM(口)が9とかだと気持ち悪いし把握しにくい)ってのはわかる。
新しいバリアント作るならマジックナンバー使わずにTALENTNAMEとかを使うことを徹底すればいいけど古いバリアントだとそうもいかないしね。

だけど、CSTR使うなら数字で管理する必要なくない?
尻/3って言うけど『3』って言うのはマジックナンバーだから何を意味するのか調べないとわからない。尻なのはわかるけど尻の何なの?ってなる。
なら初めから巨尻書いてタグにしちゃえばいいでしょ。

例えばCSTR:髪って変数を作って、タグを入れる。タグはロングとかショートとかツインテとかポニテとかあとは色とか思いつく限り何でもいい。

CSTR:髪 = ロング/ツインテ/黒/リボン
この子を調教中にリボン取れて髪がほどけたならツインテとリボンを取って、また結んだならリボンとツインテをまた追加すればいい。
でイラマの時にIF STRFIND(CSTR:髪, "ツインテ") != -1ってやって真ならツインテをイラマハンドルにした!って地の文につなげばいい。

まぁ、この場合ツインテがほどけた時にこの子がツインテであったことを忘れちゃうから『ツインテ』タグを消すんじゃなくて『ほどけた』ってタグを追加するんでもいい。
その場合は先のIF文で『ほどけた』が無いことも一緒に確認する必要がある。

要するに中の数値がいくつなのかで判断するんじゃなくてタグの有無で判断させるって事。
巨乳と貧乳タグを同時に持ってるとかそういう矛盾が発生する恐れはあるけどそういうのはタグを付加する際に相反するタグを取り除くようにすればいい。
それと、『ベリーショート』と『ショート』ってタグを作るとショートかどうかチェックした時にベリーショートも反応しちゃうから『ベリショ』とかにして被る部分が無いようにする必要もある。
もしくはSTRFIND使わないで/でSPLITして完全一致させるか。
最後にREADMEとか仕様書とかにタグ一覧を載せておく。

こっちの方が直感的でわかりやすいと思うけどどうかな?
ちなみに似たようなライブラリが公開されてたと思うよ。このスレにもちょっと前にリンクが貼られてた気がする。

>>362
問題なかったか。
でも記述者の意図が分かりにくいからやっぱり()は付けといた方が無難かと思う。

365あなたの名前を入力してください:2020/06/27(土) 22:32:33 ID:VW1KL0fY
>>364
言いたいことはわかるが、それBOOL扱いのTALENT追加する方が楽じゃね?

366あなたの名前を入力してください:2020/06/27(土) 22:45:25 ID:RpfylVGU
CSTR:(TARGET):Xなんて書き方他で見たことないし、逆に困惑してしまうな
CSTR:(ARG:1):Xみたいな時は括弧要るんだから統一しようよ、っていう主張なら解らんでもないが

367あなたの名前を入力してください:2020/06/27(土) 23:29:42 ID:AFdHul4o
扱いを楽にしようとデータベース作成を頑張った結果
なにがどう便利なのかわかりやすくすることにハードル高を感じてCSVに戻ってくる罠が

368あなたの名前を入力してください:2020/06/27(土) 23:42:00 ID:hlRPCHag
>>365
そうだけど、そうしたくないからって話じゃないの?

>>366
まぁ、TARGETならそもそも省略できるから…って事ではないか。
ERBぐらいしか触らない初心者でしばらく離れてたりするとどっちなのか忘れてわからなくなったりするんだよ。
それに実際にはTALENT:ARG:V敏感とかって書くからそういう場合は間違えないんだけども。

369あなたの名前を入力してください:2020/06/28(日) 10:04:02 ID:OnlI9xZk
つかそこまで気にするなら
ttp://jbbs.shitaraba.net/bbs/read.cgi/otaku/16783/1498745115/87
これの技術使えば解決できるんじゃないか?
今のろだにはアップされてたっけ?

370あなたの名前を入力してください:2020/06/28(日) 15:56:13 ID:JQSg20UE
>369
旧ロダに上げられたものは消えてるけど
emueraの作者様のHP上で公開されてますね
ttp://www.emuera.net/
ファイル置き場 > DictionaryList.zip

371あなたの名前を入力してください:2020/06/28(日) 16:27:06 ID:Jw3XORt2
eraIm@scgprov0.66 私家改造版Ver0.54を弄っています。
プレーヤーから見たキャラ一覧の表示順を任意で入れ替えできるようにしたいと思っています。
今のところどの場面でも常に登録番号順に表示されるので登録番号の並びを変更したいのですが、
どうも結構副作用が出そうな感じでどう対処するか悩んでいます。
で、お伺いしたいのですが
質問1 SWAPCHARA命令 (SWAPCHARA <数式>, <数式>) って正味のところ中では何をしているのかご存知の方良ければ教えていただけませんか。
質問2 一般論として登録番号をソートする場合、どこに影響出るかを洗ういい手立てって何かありますでしょうか。

そもそもEmueraで使われてる変数の構造全般が未だによくわかってないのですが、
今のところCALLNAMEの引数として参照されてる変数を抜き出してセーブされるものをケアしようとしています。
毎日の起床前のメニューでのみ並び替えが行えるようにしておけば、セーブロードも同メニュー内でしかできないバリアントなので
それ以外の変数はほっといていいかなという考えです。

372あなたの名前を入力してください:2020/06/28(日) 23:33:04 ID:RTveCKYI
>>371
・1
SWAPCHARAは書いてある通りキャラの登録番号が入れ替わる。
登録番号3 CALLNAME:3 == 花子 BASE:3:HP == 50
登録番号5 CALLNAME:5 == 太郎 BASE:5:HP == 60
この二人を入れ替えた場合
CALLNAME:5は「花子」になりBASE:3:HPは「60」になる。
CFLAGやTALENTなど他のキャラクター変数もすべて入れ替わる。

・2
影響としてはキャラ間の血縁関係や、二次元配列でエッチ回数なんかを記録してると登録番号がずれることで別のキャラとの関係に置き換わってしまうことがあげられる。
上の例で言うと登録番号10のキャラの母親FLAGに3が入っていた場合ソート前は花子だったのにソート後は太郎になってしまう。

解決方法として簡単なのは、キャラ一覧を表示する時だけ登録番号を入れ替えて一覧から出る時に元に戻す方法。
一度登録番号を入れ替えたら元の番号を忘れちゃうから一覧に入った時にあらかじめ記憶させるか、ADDCHARAの時に各キャラに固有のIDを順番に振ってすべてのキャラにIDを持たせるなりする必要がある。

もしくは、登録番号は動かさずにソート専用配列にARRAYSHIFTとかを使って特定要素の値順に登録番号を入れる関数を作るか。

あとソートしたいならSWAPCHARAじゃなくてそのままズバリなSORTCHARAを使った方が楽。

373あなたの名前を入力してください:2020/06/29(月) 22:14:12 ID:UJ6G1rMg
1.DIMでCHARADATAにできない三次元配列とかも問題が起きそうだとおもった
2.の効率的な洗い方はあったら知りたい、全体を調べまくるくらいしかわからない

質問者じゃないけど登録番号がどう使われてるかわからないバリアントの改変なら
「CFLAG:表示順」作ってソート順を保存してからIF 表示順=キャラ番号で表示する
FOR文って考えだったから>>372ためになった
色んなやりかた教えてくれてありがとう

374371:2020/06/29(月) 23:41:55 ID:dF6UyPqs
お二人ともありがとうございます。これ結構厳しいですね・・・
どうやら大半のバリアントの作りだと、emuera自体に機能があっても
登録番号弄っちゃうのはヤバいケースが多そうですね。
自分の欲しい操作性を実現する現実解は、お話を総合すると
>「CFLAG:表示順」作ってソート順を保存してからIF 表示順=キャラ番号で表示する
っぽいかなぁ。

375あなたの名前を入力してください:2020/06/30(火) 00:03:23 ID:KrLxs4r.
若干出遅れた感はあるが一応。

実は汎用性高いのは
「1キャラの位置を入れ替える」関数を書く→「それを使ってソート用の関数を書く」だったりする
特にこだわりがなければバブルソート書けばいい。ただし相応にめんどくさい
(手間の大半は現在のCFLAGの使用状況を調査することなので、>>372とそう変わらんが)

後は最初からNOで管理する手もある。(ランダム生成キャラの場合は生成時にユニークな通し番号を振る)
eraPaSの魔改造版が後者の思想だったな。後からその仕様になったからそうなってない箇所もあるが

376あなたの名前を入力してください:2020/06/30(火) 08:15:35 ID:BVn31qSo
>>373>>372を読んで効率的そうだと思ったのは先に保存して後で戻す方法
試してみたらうまくいった、12人くらいキャラ登録して↓をやってみた
----
PRINTL まず、NOが規則的だとうまく順番を保存できたかどうかわかりにくいので
PRINTL SWAPCHARAでNO内のキャラ番号を不規則にします。
PRINTL この順番がリスト表示前の正しい順番と考えます。
PRINTW リスト開始前にこの順番を保存して、後で元に戻せたら成功です。
DRAWLINE
SWAPCHARA 3, 7
SWAPCHARA 2, 5
FOR L_COUNTER, 1, CHARANUM
PRINTFORML COUNTER.{L_COUNTER}_NO.{NO:L_COUNTER}:%CALLNAME:L_COUNTER%
NEXT
DRAWLINE
FOR L_COUNTER, 1, CHARANUM
CFLAG:L_COUNTER:キャラ順 = L_COUNTER
NEXT
PRINTL CFLAG:キャラ順に現在のNO順を保存してみました。
PRINTW 次にリストの入れ替えを行います。「SORTCHARA NAME」で名前順にソートしてみます。
DRAWLINE
SORTCHARA NAME
FOR L_COUNTER, 1, CHARANUM
PRINTFORML COUNTER.{L_COUNTER}_NO.{NO:L_COUNTER}:%CALLNAME:L_COUNTER%
NEXT
DRAWLINE
PRINTL 名前順にソートしたので番号がぐちゃぐちゃになりました。
PRINTW 「SORTCHARA CFLAG:キャラ順」で元に戻します。
DRAWLINE
SORTCHARA CFLAG:キャラ順
FOR L_COUNTER, 1, CHARANUM
PRINTFORML COUNTER.{L_COUNTER}_NO.{NO:L_COUNTER}:%CALLNAME:L_COUNTER%
NEXT
DRAWLINE
PRINTL 元に戻せているでしょうか?
PRINTW リストから抜ける前に元に戻せたら登録番号を利用した変数が他にあっても大丈夫そうです。
----
注意はemuera.configの「キャラクタ変数の引数を補完しない」を
TARGET指定省略とかを検出するためにYESにしていると
SORTCHARAの「CFLAG:X」のような指定方法は読み込みできなくてエラーが出ること
デフォルト値がどっちかわからないけど_fixed.configでNOに設定すると安全そう

377あなたの名前を入力してください:2020/06/30(火) 13:00:16 ID:sl31G9sU
>>376
SORTCHARA等の指定でも「キャラクタ変数の引数を補完しない」が影響するのは想定外仕様なんじゃないかなと思わないではないけど、

SORTCHARA CFLAG:TARGET:キャラ順

みたいな指定でもちゃんと動くよ
(キャラ変数の第一引数はASSIでも0でも何でもいい 指定しても無視されるだけだと思う)

378あなたの名前を入力してください:2020/06/30(火) 19:58:50 ID:3Z.kxOzQ
>>364
数字に頼らなくても良いというのは盲点でした
タグについては全く関知していませんでした。ありがとうございます
まずはこちらの線で色々試してみます

>>369
>>370
情報ありがとうございます
こちらも追って手を付けてみようと思います

こちらは例えばCSTR:1をDictionary.ERBに利用するとして
キャラ001が
 CSTR,1,[髪型:ショート][髪色:緑][瞳色:青]
キャラ002が
 CSTR,1,[髪型:ベリーショート][髪色:黄緑][瞳色:紫]
とした時
仮にフェラ中のキャラ002に「褒める」や「頭を撫でる」等のコマンドを行ったとして地の文出力の際
#DIMS HAIR_COLORを予め用意して
TRYCALLFORM DIC_GET(CSTR:TARGET:1, 髪色)
IF RESULTS:0 != ""
 SELECTCASE RESULTS:0
  CASE 緑
   HAIR_COLOR == 青葉
  CASEELSE 黄緑
   HAIR_COLOR == 萌葱色

(中略)
PRINTFORMW %CALLNAME:MASTER%は%CALLNAME:TARGET%の%HAIR_COLOR%の髪をそっと撫でた

これで「あなたはキャラ002の萌黄色の髪を〜」
という挙動になるという理解で間違いないでしょうか
合っていれば確かにCSTR一つでおおよその要素を参照できますし
処理や分岐に関与している単語を別途一覧にまとめて知らせる事もできるので
かなり今の理想に近そうです

379369:2020/06/30(火) 23:30:05 ID:fzBYC8Dk
んー、不正解
基本的にこいつらFUNCTIONだったからTRYCALLは使わないし
式中関数はRESULTを介さないでそのまま数値や文字列が返ってくるよ
参照時は
 SELECTCASE DIC_GET(CSTR:TARGET:1, "髪色")
 CASE "緑"
 CASE "黄緑"
 ENDSELECT
等だな
※文字列を直接記述する時は""で囲う必要がある
※ついでに代入時は==ではなく=を使おう

そういう風にやるなら他の地の文でも同じ髪色描写を使い回せるように関数化してやって
 PRINTFORMW %CALLNAME:MASTER%は%CALLNAME:TARGET%の%SCENE_DESCRIPTION_HAIR_COLOR(TARGET)%の髪をそっと撫でた

これでできるかな
;地の文用の髪色描写文字列取得
@SCENE_DESCRIPTION_HAIR_COLOR(C_ID)
#FUNCTIONS
#DIM C_ID;登録番号を渡す
SELECTCASE DIC_GET(CSTR:C_ID:1, "髪色")
;髪色を参照した結果による分岐
CASE "緑"
 RETURNF "青葉"
 ;返ってくる文字列はコレ
CASE "黄緑"
 RETURNF "萌葱色"
CASEELSE
 RETURNF "濡羽色"
ENDSELECT

380あなたの名前を入力してください:2020/07/01(水) 21:49:46 ID:321Gp5Cw
>>379
そうだったのですか……
FUCTIONはまだよくわかってなくて……
実際に試す前によく調べてみようと思います

381あなたの名前を入力してください:2020/07/01(水) 23:29:49 ID:S5MJP/Kk
>>380
>>378のCASEELSEはELSEIFとは違うから引数を指定してはいけない。
ELSEIFじゃなくてELSEと同じだと思えばいい。
SELECTCASEの前にRESULTSの中身があるか確認してるけど何も入ってなければCASEELSEに行くだけだから確認する必要ないかな。

>>379
@SCENE_DESCRIPTION_HAIR_COLOR(C_ID)を、
@SCENE_DESCRIPTION_HAIR_COLOR(C_ID = TARGET)
って書けば引数を省略した際に初期値としてTARGETが代入されるので呼ぶ際にTARGETを省略できるよ。
引数を省略する場合でも()は付けなくちゃいけないけど。

382あなたの名前を入力してください:2020/07/02(木) 06:41:55 ID:eBF84YlE
>>381
事前に中身の有無をチェックするのはアリだよ
コード的に無意味でも構造的には意味があるからね

383あなたの名前を入力してください:2020/07/02(木) 16:53:42 ID:znrOPwc.
>>381
>>382
丁寧にご指摘ありがとうございます
まだまだ勘違いが多いですが精進していきたいと思います

384あなたの名前を入力してください:2020/07/02(木) 20:12:27 ID:C7Tjykxw
CASE文もまだはっきり知らないのに
辞書配列関数を読んだだけで試さなくても大まかに理解できているとか
地頭が良過ぎてのけぞる
>>377 それも知らなかった、ありがとう

385あなたの名前を入力してください:2020/07/03(金) 06:52:56 ID:nEIiOVIQ
>>381
繰り返し呼ばれる関数で初期値を代入させたいときは変数宣言のときにDINAMIC指定が必要だった気がする

386あなたの名前を入力してください:2020/07/03(金) 12:13:09 ID:WxfZGPio
>>385
ややこしい話だけど、引数の初期値はDYNAMICでなくても毎回指定値で呼び出される(もちろん引数省略時には、だけど)
引数ではないローカル変数の宣言時初期値指定については>>385の言ってる通り

引数の初期値は初期値というより、関数呼び出しでの省略時に毎回代わりに代入されるもの
だと考えれば分かるんだけど、ややこしい話ですよホント

387あなたの名前を入力してください:2020/07/24(金) 08:01:20 ID:soBpZw9k
ちょっと質問
CDFLAGのCSVの書き方ってどうすればいいんだ?
CDFLAG1.csvはともかく、CDFLAG2.csvがどんなフォーマットで何を書けばいいのか分からん・・・・
CDFLAG1の値に応じてCDFLAG2は違う定義にしたいんだが、できないんだろうか・・・・

388あなたの名前を入力してください:2020/07/24(金) 21:43:59 ID:Dcae3iqg
CDFLAG:XXX:YYYのYYY(の名称)を定義するのがcdflag2ってだけだから書式は他と一緒だよ

389あなたの名前を入力してください:2020/07/24(金) 22:19:51 ID:soBpZw9k
マジか
っていうことはCDFLAG1の値に応じて使い分けるとかできないんか

むぅ、使い勝手悪いなぁ・・・・

390あなたの名前を入力してください:2020/07/24(金) 23:06:32 ID:zNuYXdE.
何がやりたいのかわからんが、CFLAGをカテゴリ別に名前つけて整理したいとか思ってるのなら、
CDFLAGはそういう用途のものではないので使えない(想定してる用途は多分 >>348-349
今ならユーザー定義キャラクタ変数を用途別に定義して使った方がいい

391あなたの名前を入力してください:2020/07/24(金) 23:14:51 ID:Dcae3iqg
多次元配列が必要なら素直にERHで定義した方が使いやすいかもしれない

392あなたの名前を入力してください:2020/07/24(金) 23:38:30 ID:soBpZw9k
>>390-391
#DIM SAVEDATAで多次元配列宣言するとバイナリセーブデータしか使えんねん・・・・
しゃーない、定数きって使い分けるか

393あなたの名前を入力してください:2020/07/24(金) 23:56:09 ID:zNuYXdE.
なんでテキストセーブデータにこだわるのか興味がある
データ改変ならデバッグモード使った方がずっと楽だと思うんだけど
他にありそうなのはテキストセーブデータを読む外部ツールとかかな

394あなたの名前を入力してください:2020/07/25(土) 02:27:12 ID:WlU2o.Os
やり方を聞く前に
何がしたいのかを相談したほうがいいと思う

したいことに対してやり方や考え方が間違ってたら
根本的な解決にはならないからね

395あなたの名前を入力してください:2020/07/25(土) 10:22:00 ID:Ky4q/pZs
>>393
既にテキストセーブデータでリリースしてるから
既プレイユーザーのセーブデータ互換性吹っ飛ぶのは看過できんわー

>>394
構造体みたいにデータをある程度の塊で管理したいな、というのがそもそもの発端

396あなたの名前を入力してください:2020/07/25(土) 12:07:26 ID:eTyargvA
>>395
「セーブデータをバイナリ形式で保存する」をオンにしてもテキスト形式データの読み込みは可能ですよ
逆にバイナリ保存設定がオフの状態でもバイナリセーブの読み込みはできるから、この設定のオンオフだけでセーブデータ互換性が崩れることはない

397あなたの名前を入力してください:2020/07/25(土) 13:57:27 ID:TY1tKgHk
これ以上死体蹴りするのはやめようね!

398あなたの名前を入力してください:2020/07/25(土) 14:47:12 ID:Ky4q/pZs
>>396
マジ? 無理だと思い込んでた
すまん

399あなたの名前を入力してください:2020/07/25(土) 15:25:32 ID:764pd2DA
ここ初心者スレだし
死体蹴りっつうか知らなかったわありがとうで終わる話よ

400あなたの名前を入力してください:2020/07/25(土) 16:41:04 ID:eTyargvA
初心者じゃなくても、思い込みで勘違いしたままってのはよくあることだしね
自分で動かして確かめればすぐ気付く勘違いでも、いちど思い込んでしまったら試そうとすることもないからな…

401あなたの名前を入力してください:2020/07/25(土) 22:28:03 ID:Zg2v01e6
まあガイジが馬鹿にされるのは仕方ないしな
蹴られたくらい我慢しろって話

402あなたの名前を入力してください:2020/07/26(日) 01:38:33 ID:aIztF36U
口汚いのはNGに突っ込んで触手サッカーにする

403あなたの名前を入力してください:2020/07/26(日) 07:57:36 ID:FNOLWqdA
サッカーしようぜ、お前(触手)、ボールな! 的な?

404あなたの名前を入力してください:2020/07/26(日) 11:25:36 ID:Ic.5VtiQ
FF5にそういう名前のモンスターがいたな
女にしか攻撃してこないイカ

405あなたの名前を入力してください:2020/08/03(月) 18:26:46 ID:Qzhub8LY
すみません質問させていただきます。
バリアントを作ろうと思っているのですが、構文も何も分からないので、
どれから手を付けたらいいか分からないのでアドバイスをいただければ嬉しいです。
自分が実装したいモノを追加で実装する形から学ぼうとただいまeratohoKを
改造させていただいております。
そこで現在詰まっている場所がありまして、調教時の[愛撫][触手][特殊]といった
タブを追加したいなと思い、USERCOMの220行目辺りを弄りTFLAG:7を増やして
ボタン(タブ)の追加をしたのはいいものの、追加されたタブをクリックしても
コマンドの表示が行われないのでどこを弄れば良いのかうんうん唸って一か月が経ち、
どなたかの手を借りたいなと・・・。
そのタブで表示させたいコマンドをCOMFのところに追加で作り、_COM_CATEGORYや
_COM_KNOWLEDGE_LEVELにも記述を追加したりもしているのですが・・・。
どことどこを弄れば良いのか分からない状態です。
もしよろしければいくつかの質疑応答に付き合っていただけると幸いです・・・。
長文失礼いたしました。

406405:2020/08/03(月) 18:37:02 ID:Qzhub8LY
うわぁごめんなさいっ;;テンプレあるのに確認してないとか・・・!
書き直します!

【質問】
・環境:eratohoK、eraRanceK
・質問内容:調教時のタブを追加したいがどこをどうすれば良いか
・目的
 構文を改造して見たけど思った通りにならないので、どういう仕組なのかを勉強しながら
 思った通りに動かしてみたい。

以上です、すみませんでした!

407あなたの名前を入力してください:2020/08/03(月) 21:04:38 ID:J42BG5Rs
Kの調教画面はいじったことなくて状況がよくわからん

・新設したタブボタンの表示はできている(はい/いいえ)
・新設したタブボタンをクリックした後、新設したタブボタンの色が表示中の色に切り替わっている(はい/いいえ)
・クリックした後、新しいタブに分類しておいたコマンド群が表示されている(はい/いいえ)

USERCOM.ERBで「;タブ設定」とコメントしてあるあたり、
@USERCOMの中でタブ切り替え入力時のTFLAG:7の変更処理があるんだけど
そっちはいじってある?

408あなたの名前を入力してください:2020/08/04(火) 05:29:15 ID:nb6XXe06
>>405
ERBは基本的に3種類の処理を組み合わせて動作しているのだが、どれが欠けても思った通りに動作しない。
A.画面に情報を表示する処理
B.コマンド入力を受け付ける処理
C.内部データを書き換える処理

今回のケースでは用意したボタンをクリックしても反応しないとのことだが、
TRAIN画面ではINPUTなどのコマンド入力用の処理を用意しなくても常にプレイヤーが入力した結果を受け取るように設計されている。
入力されたコマンドはRESULTに格納される。よって、「B.コマンド入力を受け付ける処理」に問題があるわけではない。
内部処理のフロー図:ttps://ja.osdn.net/projects/emuera/wiki/flow

>>407が指摘してくれているのは、
806行目にある @USERCOM で記述されている「C.内部データを書き換える処理」に問題があるのではないだろうか?ということ。
タブを管理している TFLAG:7 を書き換える処理は1056行目の TFLAG:7 = RESULT - 800 と書かれている部分なので、
途中にある IF/ELSEIF などの条件分岐を通過できるように改造してやる必要がある。

409好好 ◆hcbh0U7bsY:2020/08/04(火) 06:08:56 ID:mgbD6unk
>>406
新規タブとコマンドの追加についてですが、
以下の手順で可能だと思います。

1.対象となるコマンドファイルを作成(例:COMF0_愛撫.ERB)
2.Train.csvに対象となるコマンドを登録(番号が既存の物と被らないように注意してください。)
3._COM_CATEGORYに対象コマンドのタブの種類を登録
4._COM_KNOWLEDGE_LEVEL.ERBにコマンドの必要な性知識レベルを登録
5.USERCOM.ERB:220行目~232行目あたりにあるタブボタン表示処理に、対象のタブを追加する
6.USERCOM.ERB:969行目~971行目あたりにある、(;タブ設定)以下に追加したタブの番号を含むように数値を修正する

以上で、新規タブと新規コマンドの追加ができるはずです。
また必要であれば優先度の登録や、各コマンドに対しての新規コマンドの併用条件などを改修してください。

410好好 ◆hcbh0U7bsY:2020/08/04(火) 06:11:19 ID:mgbD6unk
すみませんsage忘れてしまいました。

あと>>409はeraRanceK環境で確認したことなので、
他のバリアントの場合は違う可能性もあります。

411405:2020/08/04(火) 19:15:48 ID:UMfDfEk6
みなさんありがとうございますっ!
今PCが触れる環境ではないので帰ったら早速試してみます!
本当にありがとうございました!!
また何か詰まったら質問させていただくコトになるかもしれませんが、
その時はどうかよろしくお願いいたします・・・!
バリアントの完成はまだまだ先になるかもしれませんし、完成できるかも
分かりませんが、やってみます!

>>410さん
好好さんありがとうございます、今はあたしもRanceさんの方でしているので
とてもありがたかったですっ!

412405:2020/08/10(月) 21:41:37 ID:HMQNCrC2
改めましてお礼を、みなさんのおかげで何がダメだったのかを知るコトができました、
ありがとうございます!

>>407さん
まさにここでした、もう少し構文の中をちゃんと見る癖を付けないとダメですね・・・。
教えてくださってありがとうございます!

>>408さん
ERBの仕組みを解説していただいてすごく為になりました、親切に分解して
説明していただいたのでわくわくしながらメモをさせていただきました!
408さんの解説は自分の中でeraの理解を深める機会になったので本当に助かりました!
ありがとうございます!

>>410の好好さん
具体的な手順の説明ありがとうございますっ!
1〜4までは出来ていたのですが、5〜6を書き換えなければいけないコトに
気が付かず一か月唸っていました・・・。

今回の解説と助言は本当に嬉しくて為になって思い切って聞いてみて良かったと
思っています!バリアントの完成を目指せるように頑張ります!
ありがとうございましたっ!

>>408さん

413あなたの名前を入力してください:2020/08/10(月) 21:47:40 ID:BT.ixpBI
聞くは一時の恥

414405:2020/08/11(火) 01:06:20 ID:L5X5Nu9Y
>>413さん
勇気を出してみて本当に良かったです。
バリアントを完成させたりeraに詳しくなって今度は教えれる立場になるのが、
お返しになるかなと思うので精進します。

415好好 ◆hcbh0U7bsY:2020/08/11(火) 14:59:34 ID:tXW7KLuM
>>412
バリアント製作がんばってください。
完成を楽しみにしています。

416405:2020/08/12(水) 12:33:50 ID:5HJtK3xs
>>415さん
好好さんありがとうございます、頑張りますね!
まさかRanceKの作者さんから助言いただけるとは思わなかったのでちょっとテンパっていました、
私も続いて誰かの琴線に触れるコトができるバリアント目指して頑張ります!

417あなたの名前を入力してください:2020/10/10(土) 02:12:06 ID:ZXimRhK.
関数処理についてGETNUM(STR, "")を使えるようにする場合
ファイル名をSTR.CSVをSTRNAME.CSVに変えれば使えるようになったのですが
代わりにSTR:0などが使用できなくなりました

erbの全体的な変更したくないのですが、STR.CSVとSTRNAME.CSVのCSV2種を併用するか
erbに記述されたSTRをSTRNAMEに置換するだけなのでしょうか?

418あなたの名前を入力してください:2020/10/10(土) 03:55:32 ID:IKQEWvb2
>>417
多分根本の理解が間違ってる
STRはSTRに格納する値を書くファイルで、STRNAMEが各STRの要素名を書くもの
https://ja.osdn.net/projects/emuera/wiki/exvar
>「str.csvで指定するのはSTRの中身であって要素名ではない」

なので、STRに格納している値を検索するならFINDELEMENTなんかで検索する必要がある

419あなたの名前を入力してください:2020/10/10(土) 05:44:49 ID:ZXimRhK.
>>418
ありがとうございます
STRnAME新しく作らなくても実装できました

420あなたの名前を入力してください:2020/12/10(木) 12:00:27 ID:Ass1jS/E
はじめまして。バリアント作成で困っているので質問させてください
配列の一括初期化方法と、配列の0以外の要素が入っている数の取得方法が分からず困っております。

配列の一括初期化方法は毎度配列長分だけループを回して初期値を代入すれば実装できるのですが、もっといい方法があるなら知りたいです。

配列の0以外の要素が入っている数の取得方法に関しても、ループを回して0以外の数を数えれば実装できるのですが、こちらももっといい方法があるなら知りたいです。

というのも現在SLGを作っており、最大ユニット数1024に設定しているため、AIの各勢力が自勢力のユニットを取得したり更新したりする際に何度も1024回ループを回さないといけないため、処理が重くなってしまうからです。
何かいい案がありましたら、是非教えていただけると助かります。
よろしくお願いいたします。

421あなたの名前を入力してください:2020/12/10(木) 12:08:32 ID:A/X1UBxo
>>420
https://ja.osdn.net/projects/emuera/wiki/excom
初期化はVARSET
https://ja.osdn.net/projects/emuera/wiki/exmeth
数えるのはINRANGEARRAY

422あなたの名前を入力してください:2020/12/10(木) 12:27:10 ID:Ass1jS/E
>>421
ご回答ありがとうございます。助かりました!

423あなたの名前を入力してください:2020/12/11(金) 22:36:31 ID:4/eDdq4s
ERBファイルの名前って、アルファベットじゃないとダメだったりしますか?
既存のバリアントに新しいERBで関数作っていじったりしてる時、
日本語ならファイルの中身が一見してわかりやすそうだなと思うのですが

424あなたの名前を入力してください:2020/12/11(金) 22:48:58 ID:qsYqrXXA
日本語でも中国語でもロシア語でも大丈夫
ただし公開するとファイル名エンコーディングの違いでトラブりやすいので注意

425あなたの名前を入力してください:2020/12/12(土) 04:13:22 ID:049LW9dY
アップロードするとファイル名が文字化けする恐れがあるという事でしょうか
であれば念の為、ファイル名はアルファベットで統一しておこうと思います

426あなたの名前を入力してください:2020/12/12(土) 07:12:51 ID:tSN8K/S6
文字化けはアップロード時じゃなくてzip解凍時に起こりやすい
解凍するときの環境(解凍ソフトやOSなど)によってフォルダ名の文字コード判定が誤認識を起こすことがある

tohoKなんかはフォルダ名・ファイル名ともに日本語ファイル名多いゾ
一回やってみてだめだったら切り替えてもいいんじゃない

427あなたの名前を入力してください:2020/12/12(土) 08:06:36 ID:c.mOGqB6
https://jbbs.shitaraba.net/bbs/read.cgi/otaku/16783/1498745115/105

文字化けしたバリアントで起動した場合にエラーを出す汎用関数もあるのでこれを使ってもいいと思う

428あなたの名前を入力してください:2020/12/12(土) 18:50:30 ID:049LW9dY
情報ありがとうございます
日本語名での製作も前向きに考えてみようと思います

429あなたの名前を入力してください:2020/12/27(日) 15:05:33 ID:IUBZ9X6k
eratohoA系列で汎用口上を作りたいのですが、何を参考に作ればいいか分からず困っております。
どなたか参考になるバリアント、あるいは具体的な作り方を教えていただけたらありがたいです。

430あなたの名前を入力してください:2020/12/28(月) 03:15:30 ID:kT9X5rXA
今はどうか知らないけど昔のイメージだと
A系列口上ならMegaten、汎用口上ならtohoYMが化け物って印象

431あなたの名前を入力してください:2020/12/28(月) 03:34:45 ID:EAOEqaBk
文章と構文どっちの参考になるものが欲しいの?

432429:2020/12/28(月) 09:31:09 ID:7JNprlcQ
>>430
eraMegatenですね、ちょっと見てみます!ありがとうございます

>>431
技術的な、汎用口上という仕組みそのものの実装方法が知りたかったです。言葉が足りてませんでした。

433あなたの名前を入力してください:2020/12/28(月) 09:40:34 ID:2rt36uZ.
>>432
基本は個別口上の存在チェック→なかったら汎用口上呼び出すだけだよ
個別口上の存在チェックのやり方と汎用口上の持たせ方とで多少違いはあるけど

434429:2020/12/28(月) 09:48:07 ID:7JNprlcQ
>>433 なるほど。それを踏まえて調べてみます。ありがとうございます!

435あなたの名前を入力してください:2021/01/03(日) 20:32:56 ID:e5T/hH3s
EraGVTに「@PASTTIME_街に出る」などの日本語を含んだ関数名がありますが
もしかして関数の名前は@以降は何語でも問題なかったりしますか?

436あなたの名前を入力してください:2021/01/03(日) 20:47:42 ID:54JSXwyg
>>435
半角記号はアンダーバーしか使えませんが、それ以外は漢字でもキリル文字でも使えます
https://ja.osdn.net/projects/emuera/wiki/diff#h5-.E9.96.A2.E6.95.B0.E5.90.8D.E3.81.AB.E4.BD.BF.E7.94.A8.E5.8F.AF.E8.83.BD.E3.81.AA.E6.96.87.E5.AD.97

437あなたの名前を入力してください:2021/01/04(月) 17:40:40 ID:hQKEfZxM
>>436
ありがとうございます
見たことのある大体の関数がアルファベットだったので入力できるのはアルファベットのみかと思ってました

438あなたの名前を入力してください:2021/01/04(月) 22:23:01 ID:BQ/eIn0o
>>437
大抵の言語では半角アルファベットと記号少々以外の文字を許容しないので、同じノリがEmueraでも生きてるんだと思う
じゃあEmueraではどうかというと、全角文字はファイルのエンコードで化ける可能性があるので個人的には関数名なんかに使うのは推奨しない
ただ、TALENTの定義とかで全角文字使った方が分かりやすいのは事実なんで、好みの問題といえばそうではある

439あなたの名前を入力してください:2021/01/05(火) 00:35:51 ID:/zgt3huQ
???
ファイルエンコードに問題があればそもそも正常動作は期待できないんだから、関数名に使おうが使うまいが関係なくない?
なんなら関数呼べずにエラー落ちしてくれた方が、ミスにすぐ気付けて助かるまであるし

440あなたの名前を入力してください:2021/01/05(火) 00:49:18 ID:5xcuShZs
どっちかというと「どっちも化けた結果動いてしまう」可能性があることが問題かな

441あなたの名前を入力してください:2021/01/05(火) 09:02:06 ID:Uc16LBEg
関数名に日本語を使うのは問題ない
んだけどファイル名に日本語を使うと文字化け時に意図しない動作になることがまあまあある

ファイル名に日本語を入れて文字化けした場合に、警告を出すパッチを以前作ったのでよかったら使ってみてね
https://jbbs.shitaraba.net/bbs/read.cgi/otaku/16783/1498745115/105

442あなたの名前を入力してください:2021/03/18(木) 07:54:57 ID:O1RIOrmM
東方系列などで
既に口上のあるキャラに対して全く別の口上を作ってみたいなと思ったのですが
仮に作った場合、口上はどちらか一方だけをERBに入れるようにしないとダメでしょうか
システム側に何か追加するか書き換えるかして
キャラにどの口上を適用するか選べるようにできないでしょうか

443あなたの名前を入力してください:2021/03/18(木) 08:23:51 ID:9E0jwO6g
>>442
すでに存在するヴァリアントに口上追加するなら、住民の方で対応するだろうから口上に専念してもええで

自作ヴァリアントなら、megatenとかに口上選択システムあるから参考にしていいと思う

444あなたの名前を入力してください:2021/03/18(木) 19:38:38 ID:O1RIOrmM
>>443
了解です
まずは口上作ってから考えてみます
ありがとうございます

445あなたの名前を入力してください:2021/05/02(日) 21:52:21 ID:JqPqcGwM
Rename.csvは具体的にどのように活用するものなのでしょうか
少しググッて見ても、Rename.csv自体がどのような働きを担っているかの説明が見つかりません

また、Emuera.configのデフォルトで無効になっていますが、有効にする必要がないor推奨されないということでしょうか

446あなたの名前を入力してください:2021/05/03(月) 00:46:14 ID:KiqKwz6w
あれそもそもeramakerEx用の定義だもの
ERB内の単純置換をするだけで、要はLISPのマクロと同じ
可読性損なうから必要性がないなら使わない方がいい

詳細はEmueraのconfig設定の説明とeramakerExの記載を参照

447あなたの名前を入力してください:2021/05/03(月) 03:34:57 ID:6EBFkv4E
EramakerExのReadmeを読みました
ERBを記述する際に、素質「臆病」を操作する際などに
TALENT : xxではなく[[臆病]]で処理が通るようにするツールという事でしょうか

ひとまず現在の環境に適したもので無さそうなのは理解できました
ありがとうございます

448あなたの名前を入力してください:2021/05/07(金) 18:58:44 ID:T1NuZT36
昔、Wikiかどこかで「一文字変数は使わないほうが良い」といったような記述を見た気がするのですが
改めて探してみてもソースが見つかりません
実際に一文字変数は現在の環境で相性が悪かったりするのでしょうか
また、他にもデフォルトの変数の中で使用を控えた方が良いものはあるでしょうか

449あなたの名前を入力してください:2021/05/07(金) 19:48:12 ID:kTuIlDkY
1文字変数はとにかく視認性が悪くgrepもしづらい
他のもCFLAGだろうがEXPだろうが数字直打ちはおすすめしない
CSVで名前つけるかERHで変数定義するかした方がいい

450あなたの名前を入力してください:2021/05/07(金) 20:08:50 ID:lNc40D0g
>>448
https://seesaawiki.jp/eraseries/d/%a5%b7%a5%b9%a5%c6%a5%e0%b2%fe%c2%a4Q%26A#content_1_1
相性悪いとかいう次元でなく諸悪の根源レベルなので、一文字変数の使用は禁忌

他に使用すべきでないのは、下リンク先で「この変数はobsoleteです」と書かれている
LOCAL/LOCALSと組み込み多次元配列変数。理由は一文字変数とも共通するけど、変数名から内容を類推しづらいから
https://ja.osdn.net/projects/emuera/wiki/exvar

451あなたの名前を入力してください:2021/05/07(金) 20:12:55 ID:hSvtoCQA
(ループ変数は1文字で許してください)

452あなたの名前を入力してください:2021/05/07(金) 20:24:15 ID:lNc40D0g
(そうしたいのはやまやまだけど、ERBだと問答無用でグローバルになっちゃうのでダメー)

453あなたの名前を入力してください:2021/05/07(金) 21:05:51 ID:hSvtoCQA
(説明見てきました。おこりうる自体を想像したら、なんか背筋がゾッとしたんですが……orz)

454あなたの名前を入力してください:2021/05/07(金) 22:02:25 ID:i72ecdsc
一文字変数のスコープはマジでバグの原因だからな・・・・
今参加してるバリアント、いきなりあなたが㌧タヒする謎のバグが出てて、原因がCALL呼び先で一文字変数上書きしてることだったオチがある

455あなたの名前を入力してください:2021/05/07(金) 22:05:43 ID:RdHL1Q6M
いつでもどこでも使えるからこそ不用意に他で使ってる文字を使ってしまってバグるんよね

456あなたの名前を入力してください:2021/05/07(金) 22:52:44 ID:T1NuZT36
>>449
>>450
了解です
ソースもありがとうございました

新たに2点よろしいでしょうか

1
「CSVで名前をつける」というのはERBで見かける
 EXP:V経験
といった表示の事かと思われますが
これはどのように設定すれば良いでしょうか
CSVにはよく
 1,V経験
とカンマ区切りで名前が書かれていますが
これで名前が付いてERBでも反映されるという事でしょうか

2
ユーザー定義変数(関数内DIMでもERHでも)を定義する際
変数の名前を日本語で定義する事は出来るでしょうか
 #DIM 総数
みたいな形で

457あなたの名前を入力してください:2021/05/07(金) 23:00:29 ID:yqvKmO0Q
1も2もそれで正しい

458あなたの名前を入力してください:2021/05/07(金) 23:57:04 ID:T1NuZT36
了解です
ありがとうございます

459あなたの名前を入力してください:2021/05/08(土) 00:31:25 ID:jBdpv9Z.
>>456,458
補足
名前で要素指定できる変数は、以下リンクの「文字列による配列変数の要素の指定」に一覧がある
https://ja.osdn.net/projects/emuera/wiki/exetc

460あなたの名前を入力してください:2021/05/11(火) 21:53:36 ID:3gUQUBoY
csvいじったりMOB増やしたりしかしたことがない初心者です

【質問】
・環境
 新バリアント

・質問内容
 一般的な調教系eraの中で、ベースとして適しているバリアントを教えてほしい、
 構造がシンプルで理解しやすいものであればありがたいです
 ※一応現時点ではwikiの「eracustom ver0.03」か「eraMeiQ外伝」を使わせていただく想定

・目的
 一般的な調教系バリアントをベースに、
 調教フェイズの前に調教対象を追い詰める調査フェイズと戦闘フェイズを追加したバリアントを作成する

ざっくりした質問で申し訳ないですがよろしくおねがいします。

461あなたの名前を入力してください:2021/05/12(水) 22:26:42 ID:P793RW1E
その想定ならcustomになると思う。eraMeiQ外伝はreadmeの「ほか」項を読もう
おすすめを教えるのが難しい理由は
おすすめバリアントを否定的に言う人が出ると迷惑をかけてしまうからってのもあるが
種類が多くてパッチもあるから、ライセンスまで把握してる人がいないってもある
バックアップreadmeライセンス確認他ツール、このあたりばっかりは自己責任で

462あなたの名前を入力してください:2021/05/13(木) 18:25:15 ID:Z5OdK/AQ
EratohoKシリーズでセーブやロードのショップ項目を左側に寄せて
更に残ったスペースにキャラ一覧を表示させていますが
一見して同じ行に別々の関数の結果を表示しているように見えるあのUIはどのように作られているのでしょうか
まだまだ理解が浅く、ERBを呼んでみてもどうにも要領を得られません

463あなたの名前を入力してください:2021/05/13(木) 19:35:44 ID:boVxsCgA
>>461
回答感謝、readme読めてなかったあぶない
指摘助かります
とりあえず自分の知ってるバリアントの範囲で検討します

464あなたの名前を入力してください:2021/05/15(土) 01:55:39 ID:JCqeJKHI
>>462
おおざっぱなイメージを知りたいなら
右のコンテンツで改行するとき、専用の改行関数をつかってる
その改行関数は、PRINTL の次行で行頭にボタンを表示するよう指定してる
どのボタンを表示するかは、表示開始時の行番号を保存、現在行番号から引くと
開始から今何行表示したかがわかるから、それで分岐させている

465あなたの名前を入力してください:2021/05/15(土) 10:43:46 ID:xUJNwc2Y
>>464
ありがとうございます
イメージが掴めたお陰でどのERBのどの部分が該当するのか把握できてきました
もう一度読み直してみようと思います

466あなたの名前を入力してください:2021/05/18(火) 17:41:38 ID:pwMy8RW.
デフォルトではゲーム開始時に、0番のキャラCSVがMASTERのデータとして適用され
作成されたMASTERを操作するていでゲームが進行するという理解で間違いないでしょうか

ADDCHARA 0を処理に含むバリアントが多く、Era悪魔でメイドではあなたをもう1人作っていたりする所をみると
あるいはMASTERに0番のキャラが反映された上で
0番のキャラを加入させないと調教時の主人等として動かせないという事でしょうか

467あなたの名前を入力してください:2021/05/19(水) 18:06:27 ID:wzzZp3S.
>>466
MASTERという変数は登録されたキャラのうち、マスターは誰なのか指定する変数です。なのでMASTERにはキャラ登録番号が1つ入ります。
多くバリアントでMASTERはあなたで、あなたのキャラ番号はCHARA.CSVで大抵0に指定されているので真っ先にADDCHARA 0され、真っ先に登録されたので登録番号が0になります。したがって、MASTERには0が入ります。
仮にキャラ番号2をMASTERにし、あなたを調教対象にしたいならADDCHARA 0とADDCHARA 2したうえでMASTERに1を入れます。MASTERに入るのはキャラ番号ではなく登録番号なので間違えないで下さい。

MASTERに数値を入れたからといってMASTERキャラが生成されるという訳ではありません。
あくまでADDCHARAされたキャラの内、誰がマスターなのかを指定するだけです。

あなたをキャラクターとして扱わない(主人公が存在しない)のであれば、あなたにABLやBASEなどのキャラ変数は必要無いのであなたをADDCHARAする必要は無いですし、MASTERを使う必要もありません。ぜんぶFLAGやTFLAGなどで賄えます。

era悪魔でメイドを見たことが無いのですがよく分からないのですが2度ADDCHARA 0されているという事でしょうか?
基本的にあなたのCSVを使うのは主人が入れ替わったりあなたを調教対象としたり、あなた以外のキャラ同士でうふふしたりするのを想定しているからです。不要であれば前述の通りあなたをADDCHARAしないバリアントを作ることは可能です。


何が疑問なのかいまいち判然としないのですが、質問の回答はこれでよろしいでしょうか?

468あなたの名前を入力してください:2021/05/20(木) 01:29:08 ID:7By6ades
>>466
たしかに「0番のキャラCSVがMASTERのデータとして適用され」ている
バリアントは多いが、自動的にそうなる処理か問われたら違う
MASTERに0番キャラが反映されているなら既にADDCHARA 0登録はされてるから
そこから更になんらかの加入処理をする必要もない(特殊な処理でない限り)

charaX.csvはADDCHARAなどでゲームに登録されないと読み込まれない
それは0番でも調教者でも他キャラでも同じ
eratohoまとめV3 Q:キャラ番号と登録キャラ番号とはなんですか?
ttps://seesaawiki.jp/eratoho/d/ERB%b3%ab%C8%AFQ%26A#content_1_9
キャラ番号(CSV番号)と登録番号の違い、ADDCHARAのやってることが曖昧そうだから
ここに書いてくれてることを読んでみるといいかも

※最近の話補足
「登録キャラ番号」のほうがよく使うから「登録キャラ番号」を
「キャラの番号」という広義の意味で「キャラ番号」ってつい表現してしまいがち
そのせいか最近は「キャラ番号」を「NO」とか「CSV番号」って
区別して呼ぶ人が多い気がする

「登録キャラ番号」を「キャラ配列番号」って呼ぶ人もいる
「登録キャラ番号」がBASEやCFLAGの配列番号だからだと思う

469466:2021/05/20(木) 02:14:19 ID:zSRQOJvA
>>467
MASTER関連の挙動や役割をよく分かっていませんでした
初回起動時にMASTERに0が代入されて自動的に番号0番のキャラが主人公になるのでなく

・ADDCHARAで番号に対応したキャラデータが読み込まれゲーム内に作成される
・ADDCHARAされたキャラは作成された順に別途、登録番号を持つ
・作成されたキャラの内、MASTERと同じ登録番号のキャラがどこかのタイミングで主人公に指定される
・MASTERへの能力変化等の干渉は、主人公に指定されたキャラに対して処理される

こういう事でしょうか
問題なければおおよその疑問が解けたかもしれません
ありがとうございます


Era悪魔でメイドでは0番のあなたと99番のドッペルあなたを用意して
変数の一時保存等に使うとERBに記述されていました
私の今の理解度よりももっと複雑な処理なのかもしれませんので、ひとまず取り下げます


加えて以下について質問してもよろしいでしょうか

・調教対象リストなどを新たに作る場合、
 MASTERであるキャラを除外して表示させないと調教対象に主人公が含まれる状況になるか

・MASTERに対応する番号のキャラが居ない状態で
 「EXP:MASTER:1 ++」のようにステータスを操作した場合はエラーになるか

470あなたの名前を入力してください:2021/05/20(木) 02:24:19 ID:zSRQOJvA
>>468
ADDCHARAでキャラを読み込んだ上で
MASTER等の役割をあてていく形で間違いないでしょうか
情報ありがとうございます


Emueraの勉強がてら1から基本的な部分を記述していってみてるのですが
いざやってみると分からない事だらけで…
現行のバリアントでもERBのどこかに
MASTER = 0(あるいは対応する変数)とか
TARGET = *
のような記述があったりするのでしょうか
ttps://ja.osdn.net/projects/emuera/wiki/flow
ではMASTERやTARGETの指定に言及が無いので、ERB側で指定するのではと考えているのですが

471あなたの名前を入力してください:2021/05/21(金) 00:08:44 ID:FY47N0sQ
概ねその理解でいいと思います。MASTERの初期値は0なので書き換えしない限り一番最初にADDCHARAされたキャラが主人になると言うことです。

キャラを全員表示した場合、除外しない限り当然MASTERも表示されます。それが調教対象選択の場面であればMASTERがMASTERを調教するということも起こりえます。

キャラクター変数で0〜CHARANUM-1以外のキャラ登録番号を参照しようとすると必ずエラーが発生します
MASTERだけでなくTARGETやASSIでも同様です。
DELCHARAなどでキャタクターを消した場合でも、登録番号は前に詰められるので負の値やCHARANUM以上の値を与えない限りエラーになることはありません。ただ、TARGETやASSIは初期値(誰も選ばれてないとき)は-1なので代入せずに使うとエラーになります。

また、キャラ操作系命令でキャラの登録番号が入れ替わってもMASTER,TARGET,ASSIなどは自動で追従するので殆どの場合手動で操作する必要はありません。

基本的にゲーム中に主人が変わることは余り無いのでMASTERを書き換える事はありません。だから主人になるキャラを最初に生成してMASTERは初期値のままのバリアントが多いです。

TARGETやASSIなどは頻繁に書き換わります。
と言うかキャラクター変数の第一引数は省略されていることが多いので、TARGETを書き換えないことにはキャラを選択出来ないです。

472466:2021/05/21(金) 14:36:06 ID:W00rNSUo

詳細な説明まことにありがとうございます
当初気になっていた部分は全て理解できたと思われます

MASTER代入の前例が余り無いながらも
仮に主人として操作するキャラを変更する場合は専用の関数等を作って
TARGETやASSI同様にMASTER == *で
その後のMASTERを対象にした処理では、代入した登録番号のキャラが参照されるという事で間違いないでしょうか

ご説明を拝読して思い出し、触手宮やSQNの入れ替わり処理やTWやKのなりきりニューゲームを見た所
MASTERはそのままに
ステータスを置き換える処理や
SWAP CHARAで登録番号だけ置き換える処理だったので
余り適切な処理では無いのかも知れませんが

473あなたの名前を入力してください:2021/05/21(金) 18:24:22 ID:MTWFqUYs
eramakerの仕様で言えばMASTERに任意のキャラ番号を代入するだけでいいはずなんだけど、
調教対象キャラを列挙するときに(MASTER==0を前提に)1〜CHARANUMで
ループしちゃってたりするので、SWAPCHARAで0番に入れ替えるとかじゃないかなぁ
この場合は SIF (COUNT == MASTER) ⇒ CONTINUE なんかで除外するようにすれば問題ない

後は単に調教対象キャラリストの番号が飛ぶのが嫌という神経質な人も居るかも(わたしです)
リスト選択肢番号とキャラ番号を分けて対応するのも面倒だし……

474あなたの名前を入力してください:2021/05/21(金) 23:08:47 ID:W00rNSUo
>>473
ループ処理との兼ね合いはとてもストンと納得できました
情報ありがとうございます

475あなたの名前を入力してください:2021/06/05(土) 23:45:39 ID:1hMPOvBs
興味もってwikiやらざっと目を通してみたんだけどほぼ内容理解できなかった…
プログラミングの知識から身に付けるべきなんでしょうか?

476あなたの名前を入力してください:2021/06/05(土) 23:50:51 ID:qxvsaLd.
実践しないと身につかない
恋慕に必要な好感度が記載されてるファイルを特定して数値をちょっと変えてみるとか簡単な改造から始めよう
数値弄るだけでエラー吐くことは少ない

477あなたの名前を入力してください:2021/06/06(日) 00:59:55 ID:Kru5v1LM
つまり前提知識は必要ではないのですね。返答ありがとうございました。善処します

478あなたの名前を入力してください:2021/06/06(日) 01:27:41 ID:HsZmTquE
トライアンドエラーでガチャガチャやってるうちに分かってくるレベルではあるけど、
変数とかIF分岐とか程度の初歩知識はあった方がスムーズに理解が進むかも

479あなたの名前を入力してください:2021/06/06(日) 01:55:52 ID:HOy/u1bw
wikiは行き詰まったら見返すぐらいがいいと思う

480あなたの名前を入力してください:2021/06/06(日) 09:30:13 ID:JBMyT9DI
IFとかも基本的な英語だから触ってればそのうち何となく分かるよね

481あなたの名前を入力してください:2021/06/07(月) 21:59:03 ID:dTIgsFhU
すいません、K系列でコマンドを自作する際はどのようにすればいいでしょうか

482あなたの名前を入力してください:2021/06/10(木) 00:06:01 ID:e2NKxmO.
>>481
tohoKの変更ログを見たらわかるかもしれんね
https://jbbs.shitaraba.net/bbs/read.cgi/otaku/16783/1593673769/83-84n

483あなたの名前を入力してください:2021/06/10(木) 19:32:07 ID:WzkQvzlw
似たコマンドのCOMFをコピペして条件設定、train.csvに追加するまでは他と同じ
日常系は300番からで、持続行動が多いから他コマンドを網羅的にイメージして
重複できない体位や行動を実行中は不可に条件設定する必要がある
カテゴリ(愛撫とかSMとかのタブ)の設定と性知識条件が別ファイルにある
(_COM_CATEGORY.ERB/_COM_KNOWLEDGE_LEVEL.ERB)
できたらAI側にも追加(COM_AUTOSELECTフォルダ内)でよかった気がする

484あなたの名前を入力してください:2021/06/11(金) 19:54:00 ID:DdJGcgto
>>482、483
ありがとうございました。無事できました

485あなたの名前を入力してください:2021/06/16(水) 21:35:34 ID:pI78OSNY
【質問】SORTCHARAのキーワード(FORWARD or BACK)は、必ずベタ打ちしなければならないのでしょうか?
キャラクタをソートするボタンを作っているのですが、分岐処理がスマートに書けなくて泣いています

以下の例はシンプルですが、ABL、BASE、CFLAGなどのパターンと合わせると手間が結構変わるのでどうにかならないかな、と。
tohoKは自作のソーターを用意しているようでこの問題とは無縁でした。簡単に借りられるようなスケールでもなかったので以下で検討しています

・入力例
 RESULTS '= "FORWARD"
 RESULT = 1

・期待するコード (不正なキーワード扱いでエラー落ちする)
 SORTCHARA ABL:TARGET:RESULT, RESULTS

・妥協したコード
 IF RESULTS == "FORWARD"
  SORTCHARA ABL:TARGET:RESULT, FORWARD
 ELSE
  SORTCHARA ABL:TARGET:RESULT, BACK
 ENDIF

486あなたの名前を入力してください:2021/06/17(木) 21:19:18 ID:zlk8271g
>>485
tohoKは表示順を並べ替えているだけであって、実際のキャラ登録番号をソートで変更しているわけではありませんよね、確か。
それはともかく、FORWARDだけなら省略可能ですがBACKのベタ打ちは避けられないと思います。+ではないera板のEmueraスレで軽く要望が出されてたみたいだけど取り入れようという動きは無いと思います。
FORWARDとBACKでSORTCHARAの記述回数が2倍になるのを避けたいならば対処は2パターン思い付くけどスマートとは言い難いな……

パターン1. まずはFORWARDもBACKも指定無しでSORTCHARAしてから、必要に応じてキャラ順をループで前後入れ替える

パターン2. ソート基準になるパラメータを別に用意してからSORTCHARAする
; こんな感じで。文字列のソートには使えないけどね。逆順でパラメータに__INT__MIN__が含まれている場合も多分このままではダメ。
;
; ここからさらにSTRFORM()をうまく使って一旦文字列に変換してから数値に戻せばFORループ中のIFも減らせるかもしれないけど回りくどいし、静的な解析で検出できないエラーが出る可能性もあるからオススメとは言えないかもね……
IF ソート条件2 == "逆順"
 係数 = -1
ELSE
 係数 = 1
ENDIF
FOR LCOUNT, 0, CHARANUM
 IF ソート条件1 == "体力"
  CFLAG:LCOUNT:ソート基準 = 係数 * BASE:LCOUNT:体力
 ELSE ; ソート条件1 == "好感度"
  CFLAG:LCOUNT:ソート基準 = 係数 * CFLAG:LCOUNT:好感度
 ENDIF
NEXT
SORTCHARA CFLAG:ソート基準

487あなたの名前を入力してください:2021/06/17(木) 22:11:30 ID:8A6OzL0A
>>486
回答ありがとうございます! パターン2がステキだと思います
負数を掛ければFORWARD一発でいけるという発想が出てこなかったので助かりました

文字列ソートについても
OSDNのexcomにSTRFORM()が引っかからなかったのですが、
頭3文字くらいかじってENCODETOUNI()でもいけそうですね

過去の経緯も聞けて嬉しかったです。ありがとうございました!

488あなたの名前を入力してください:2021/06/17(木) 22:30:27 ID:L9Mg5SwU
自前でソーティングアルゴリズム書くんやで・・・・(邪笑)

489あなたの名前を入力してください:2021/06/17(木) 23:28:08 ID:zlk8271g
文字列のキャラクタ変数でソートする話とSTRFORMを使う話は別なのよー
STRFORMはexcomじゃなくてexmethなのよー

ところで、文字列のデータをあえてENCODETOUNIを使って数値に変換してソートするという手法は面白いかもしれませんね
逆に、「マイナスの数値が出ないように適当な値を加算してから桁数を揃えた文字列にする」で、さらに複数の数値をそれぞれ文字列にして連結してからソートすれば「体力が小さいキャラから順に並びつつ、体力が同じキャラ同士の中では好感度が小さいキャラから順に並ぶ」もSORTCHARAで実現可能かもしれませんね 自前でソート処理を書いたほうが早い(速くはないかもしれない)気もするけど

490あなたの名前を入力してください:2021/08/30(月) 10:54:44 ID:ofQA/SUQ
ちょっと質問
以下みたいにローカルで定数きった場合、続く配列宣言でその定数を認識してくれないんだが、これは仕様だろうか
UserVars見る限りではいけそうな気がするんだが

@HOGE(fuga:0 = "",fuga:1 = "")
#DIM CONST VALUE_COUNT = 2
#DIMS fuga,VALUE_COUNT ;<-コイツがエラー吐く
FOR index,0,VALUE_COUNT
PRINTFORML fuga:index
NEXT

491あなたの名前を入力してください:2021/08/31(火) 00:10:46 ID:YFTFos2s
>2018/07/16 ver 1.822
>対象の.NetFrameworkのバージョンを2.0から4.5に更新
>ERH内で宣言した定数をERH内で他の変数の宣言に利用できるように修正

ERB内では宣言できないと思う

492あなたの名前を入力してください:2021/08/31(火) 01:37:51 ID:g1YHBm/2
ドキュメントで言う「定数式」は式であって(プライベートの)CONST変数じゃダメってことかね
ERHの方でVALUE_COUNTを定義すれば通るけど、「この関数中では定義されていません」って
エラーメッセージが不自然だし、バグなんじゃないかなぁとも思うが、C#よくわからないんだよなぁ

493あなたの名前を入力してください:2021/09/04(土) 13:49:17 ID:HdZgv6Mg
>>491-492
んー、やっぱりバグっぽいのかな
一応確認してみるか

494あなたの名前を入力してください:2021/09/11(土) 18:16:34 ID:989l8OXo
幾つかのバリアントを参考に基礎的な部分を勉強しているのですが
最近まで更新されてるバリアントの多くが
関数@EVENTBUYを形だけ宣言して中身がほぼ無かったり別の関数に飛ばしたりしている印象を受けました

このEVENTBUYの扱われ方について独学ではいまひとつ要領を得られずこちらに書き込みました
自分で調べた限りでは
ショップ画面等でアイテムとして定義されてる番号を手打ちすると@EVENTBUYが実行される仕様があるという記述を見かけ
独自の購入処理関数を作ってEVENTBUYをそこへ飛ばす処理とする等で無効化しているのかなと考えています

また一部のバリアントではゲーム中でアイテムの売買が行われていながら
_replace.csvでは販売アイテム数が0に設定されている例もありこれもEVENTBUYに関連する事なのでしょうか

495あなたの名前を入力してください:2021/09/12(日) 01:02:30 ID:2/vKB4fY
>>494
@EVENTBUY はeramaker標準のアイテム購入処理時に呼び出されるイベント関数です。

ITEM の値を増やしたり、MONEY を減らしたりする処理はeramaker本体が行うので、
実は @EVENTBUY の宣言は必須ではなかったりします。
(EVENTBUYの主な用途は、購入メッセージの表示や個数限定アイテムの制御など)

詳しい処理内容については、以下の「SHOP」の項を参照してください。
https://ja.osdn.net/projects/emuera/wiki/flow

496あなたの名前を入力してください:2021/09/12(日) 01:05:36 ID:2/vKB4fY
>>494
で、多くのバリアントで @EVENTBUY が使われていない理由ですが、恐らく
eramaker標準のアイテム購入処理だといろいろ融通が利かない部分があるため、
標準処理を使わずに @USERSHOP 内で自前の購入処理を使う事が多いからでしょう。

_replace.csvでの 販売アイテム数,0 指定もこれに関連するもので、
ここでゼロを指定すると @SHOW_SHOP 後の入力で標準購入処理が呼ばれなくなります。
詳しくは下記の「販売アイテム数」の項を参照してください
https://ja.osdn.net/projects/emuera/wiki/replace

497あなたの名前を入力してください:2021/09/12(日) 18:55:20 ID:Y.AvNE3A
>>495
>>496
本当にありがとうございます
疑問が一気に解消されました

498あなたの名前を入力してください:2021/09/13(月) 07:40:27 ID:NGLbFyUY
Eramegatenでは同じキャラを複数加入させることが可能ですが
単純に同じキャラをADDCHARAさせれば番号以外の情報が同じキャラが追加されるという事でしょうか

499あなたの名前を入力してください:2021/09/13(月) 13:15:42 ID:J/RFbQiQ
>>498
可能だよ

500あなたの名前を入力してください:2021/09/13(月) 14:56:41 ID:NGLbFyUY
>>499
了解です。ありがとうございます

501あなたの名前を入力してください:2021/09/20(月) 17:36:49 ID:oTmt4s5.
CSTRの中身によってフラグを立てたいとき、現在見様見真似で作った例として
SELECTCASE CSTR:性格
CASE "強気", "生意気"
 SIF TALENT:処女
  CFLAG:1 = 1
ENDSELECT
という書き方でやっているのですが、処理したいものが1つなので2行で済むように書くと
SIF TALENT:処女 && (CSTR:性格 == "強気" || CSTR:性格 == "生意気")
 CFLAG:1 = 1
ここまではわかりまして(合ってるはず)、
これを条件が増えても書けるようにもっと縮めるにはどのように記述すればいいのでしょうか?
SIF TALENT:処女 && (CSTR:性格 == "強気" || "生意気")
 CFLAG:1 = 1
などは試してもエラーが出てしまいます

502あなたの名前を入力してください:2021/09/20(月) 18:18:40 ID:kWAu3Qmo
SIF TALENT:処女 && GROUPMATCH(CSTR:性格, "強気", "生意気")
条件式をこう書けばいけるかな

503あなたの名前を入力してください:2021/09/20(月) 18:27:12 ID:oTmt4s5.
>>502
求めてたものバッチリそのものでした!ありがとうございます!

504あなたの名前を入力してください:2021/09/23(木) 17:33:17 ID:4emUQ6RQ
4XのCSTRを編集したいのですが、方法がわかりません。
今までは主に触っていたeramegatenにはCSTRのファイルがCSVにあったのですが、
4Xにはないようで、GREPをかけてもそれらしい一覧を見つけることができませんでした。
どなたか教えていただけませんでしょうか。

505あなたの名前を入力してください:2021/09/23(木) 17:49:42 ID:PFhZsw/.
>>504
cstr.csvはあくまでラベリングのためのファイルだからなくてもいい
存在しないなら、当該バリアントで使用してないだけのことなので、追加してやれば動くには動く
ただ、バリアント主に一言言っておいた方がいいかもしれんが

506あなたの名前を入力してください:2021/09/24(金) 03:59:10 ID:SpEaUWfo
>>504
str.csvは箱の中身を決定するファイルだけど、cstr.csvは箱自体の名前を決定するファイルだからcstr.csvをいじってもcstrの中身は書き換えられない。cstrの中身をいじりたいならchara.csvに書き込むかerbに代入する命令を書くしかない。

507あなたの名前を入力してください:2021/09/24(金) 14:55:43 ID:szle9/8A
>>505
>>506

なるほど、必ずしも必要なファイルではないんですね。
ありがとうございました。

508あなたの名前を入力してください:2021/10/10(日) 21:04:29 ID:UQis4QAE
以前質問させていただいた>>504です。
カスタムキャラの種族(エルフ、ドワーフ等)を管理するにあたって素質(Talent)か基礎(Base)のどちらを使うか迷っています。
形としては代入する数字で種族を決定する(1=エルフ、2=ドワーフ)といった感じにするつもりです。
最初は素質で管理しようと思っていましたが、遺伝処理を考えると基礎で管理したほうがいいのではないかと思い立ちました。
素質と基礎で違いはあるのでしょうか?
教えていただけると幸いです。

509あなたの名前を入力してください:2021/10/10(日) 21:17:54 ID:.pgKi8QM
基礎はDOWNBASEとかMAXBASEとかが使えるから増減する数値向け、種族には向いてないと思う
素質でいいとも思うけど、各種族がどの数値に対応するか覚えるの面倒だし可読性悪いから
CSTRかERHで文字列変数定義して種族名をそのまま書き込めばいいんじゃない?

510あなたの名前を入力してください:2021/10/10(日) 21:55:59 ID:UQis4QAE
>>509
なるほど、ありがとうございます。
ご指摘の点は既にCSTRで打ち込めるようにしてあるんですが、将来的にRPG要素を入れたいと思っているので
そこに絡められるように大雑把に分類できるようにしたかったんです。
種族名 :ダークエルフ(CSTRで打ち込み)
種族分類:エルフ(選択肢から選んで定義)
みたいなのが理想です。
K系列のバリアントをもとにいじっているのでタグ(フェアリーや蓬莱人など)を一つしか選べないようにする方法があれば一番なのですが、
どう書けばいいかわからなかったのでいっそ素質に…、と思い立った次第です。

511あなたの名前を入力してください:2021/10/11(月) 00:16:08 ID:HfDkxoWA
#DIM SAVEDATA CHARADATA TAG, MAX_TAG
Kはタグ用の変数群をERHで以上のように定義して、各キャラがMAX_TAG個のタグを設定できるようになってる
この設定枠を一個にすればいいだけ
というか(CSTRで打ち込み)と(選択肢から選んで定義)は排他にならないと思うけどなんか勘違いしてない?
普通に「選択肢の結果に応じて文字列変数に保存」とかできるよ?

512あなたの名前を入力してください:2021/10/11(月) 08:43:52 ID:BXgJt.HQ
>>511
教えていただきありがとうございます。この方法でやってみます。

>>普通に「選択肢の結果に応じて文字列変数に保存」とかできるよ?
不勉強でよくわかってないんですが、
「『エルフ』のボタンを押せばCSTRの文字列として『エルフ』と保存できる」という解釈でいいんでしょうか?
この辺の予定としては、CSTRに打ち込む種族名はあくまでフレーバーで、>>510の「種族分類」で、HPが低い代わりにMPが高めとか実際にRPG要素に影響する部分に絡めていくつもりです。
例えば「獣人」と一口に言っても、狼人間なのか猫人間なのか、同じ狼人間でもフレンズなのか某あつもりの住人なのか、までINFOに載せたいのですが、
そこまでするとタグの量とそれに紐づける処理の量が莫大になると思ったんです。
かといって文字列入力だけにすると、半角全角の違いや微妙な違いに対応しきれなくなるとも思いまして、
実際の処理としては「種族分類」と、フレーバーとして好きな種族名を入れる「種族名」で分けたんですが、もしかしてバグとかエラーになりやすかったりするんですかね?

513あなたの名前を入力してください:2021/10/11(月) 23:14:04 ID:LDEPjcYU
「データ上の種族」と「表記上の種族」をそれぞれ別の変数に持っておくだけなら問題ないんじゃない?
eramegatenはそういう処置が使われてるキャラがいる(全員ではない)
強いて言うならソースを書くときに混同したりしないよう気をつけるぐらいで

514あなたの名前を入力してください:2021/10/12(火) 00:02:56 ID:KQWhzr2I
こんな感じでよくない?

#DIMS CONST RACENAME = "人間","エルフ","ドワーフ"
#DIM MAXRACE = 3

$LOOP
PRINTFORML 種族を決めてください
FOR LOCAL,0, MAXRACE
PRINTBUTTON @"[%RACENAME:LOCAL%]", LOCAL
PRINTL
NEXT
INPUT

515あなたの名前を入力してください:2021/10/13(水) 22:55:38 ID:YyeT.qOU
>>513
ありがとうございます。混同しないように気を付けます

>>514
わざわざコードまで書いてもらってありがとうございます。
一部を参考させていただき、結局下のように落ち着きました。
#DIM 対象
FOR LOCAL, 0, VARSIZE("TAG_NAME")
PRINTBUTTON @"[%TAG_NAME:LOCAL%]", 4000 + LOCAL, HAS_TAG(対象, LOCAL)
NEXT
PRINTL

ひとまず形にすることを優先し、TAG_NAMEのまま流用しています。
ご教授いただきありがとうございました。

516あなたの名前を入力してください:2021/10/17(日) 20:21:20 ID:ogY7GP8E
多次元配列の特定の行だけVARSETすることってできますか?

517516:2021/10/18(月) 02:44:03 ID:Wzhvrin6
できるかはともかくやらなくていいことに気づいたので自己解決しました

518あなたの名前を入力してください:2021/10/19(火) 22:58:13 ID:gGme.ixk
度々質問させていただいてる者です。

ゲーム内でオリジナルスキルを複数作成し、ランダムキャラが使えるようにしたいのですが、良い方法ありませんでしょうか?
eratenのオリジナルスキルの要領で作ったスキルを複数保存し、キャラメイクの時に選択できるのが理想です。
K系列のカスタムキャラの保存機能を流用しようと一応考えてはいるのですが、もっと簡単な方法がもしあれば、と思い質問させていただきました。
皆さんでしたらどのようにされますでしょうか?

519あなたの名前を入力してください:2021/10/19(火) 23:52:03 ID:uWEQ90Wc
ゲーム内で作成したデータをセーブデータ間を超えて共有したいという意味なら、
GLOBALセーブに保存するほうが手っ取り早いと思います
https://ja.osdn.net/projects/emuera/wiki/exvar

ちょっと雑ですが以下例
・ERH
#DIMS SAVEDATA GLOBAL SKILL_NAME, 100
・スキル作成.ERB
LOADGLOBAL
SKILL_NAME:1 '= "スキルの名前"
SAVEGLOBAL
・スキル読み出し.ERB
LOADGLOBAL
printformL %SKILL_NAME:1% = スキルの名前

520あなたの名前を入力してください:2021/10/21(木) 21:22:29 ID:MQOaPfk6
乱文・連投失礼します
作りたいバリアントがあるのですが、どうも制作に手をつけたことがないので分かりません……
あるソシャゲが原作のバリアントです

521あなたの名前を入力してください:2021/10/21(木) 21:25:21 ID:MQOaPfk6
やりたいことの例えとしては「この子のガワを使って悪い事をするぞ、ヘッヘッヘ……」という感じです
原作の舞台が仮想世界なので、最初に選んだキャラクターを少しずつ調教し、駒として利用することを軸に考えたいです
また、主に洗脳や常識改変系を軸とした調教を行い
ハードコアプレイや人体改造要素を充実させたいです

長文失礼しました。

522あなたの名前を入力してください:2021/10/21(木) 22:04:49 ID:npAU4GvE
どっちかというと新バリアント作成スレ向きの話題かな
既存ので理想に近いのはあるの?
フルスクラッチはハードル高いから改変を勧める

523あなたの名前を入力してください:2021/10/21(木) 22:09:02 ID:MQOaPfk6
>>522 返信ありがとうございます。
新バリスレ向きの話題でしたか、申し訳ありません
恥ずかしながら、era系統については初心者なので
既存バリアントの把握は進んでいません……

524あなたの名前を入力してください:2021/10/21(木) 22:25:30 ID:npAU4GvE
いくつか遊んでみて、どういう事ができるのか把握してみるといいよ
誰もやってないことをゼロから作るのは大変だけど既存のものを自分好みに変奏するのはそこまでじゃないから(簡単だとは言ってない)

525あなたの名前を入力してください:2021/10/21(木) 22:37:08 ID:MQOaPfk6
まずは助言通り色々なバリアントを遊ばせていただきますね
近々新バリスレの方にも書き込ませていただきます。
ありがとうございました、失礼しました

526あなたの名前を入力してください:2021/10/24(日) 20:06:31 ID:AJloqceM
標準で読み込まれるcsvファイルの一覧を知りたいのですが、どこかに資料はありませんか?
また、キャラデータCSV(Chara数字.csv)の命名法則はChara数字のみでしょうか?

527あなたの名前を入力してください:2021/10/24(日) 20:29:01 ID:S6qVg7b.
>>519
解説ありがとうございます。
global変数はあまりなじみがなかったですが、スキル作成ERBができたら、チャレンジしてみます。

528あなたの名前を入力してください:2021/10/24(日) 22:31:31 ID:nycG8/Qk
>>526
Emueraならここ
https://ja.osdn.net/projects/emuera/wiki/exvar
eramakerなら仕様の中にあったはず
キャラデータCSVの定義はchara*.csvだから数字いらない

529あなたの名前を入力してください:2021/10/25(月) 20:54:57 ID:AcX3c9So
質問なのですが、
組み込み命令の「TIMES HOGE:1, 1.20」「SETBIT FUGA:2, 1」のように、
配列の途中から渡せる参照渡しの関数って定義できるんでしょうか?
REFを使ってHOGE:1を渡してもHOGE:0指定と同じになってしまうので上手くいきません

@FUNC(_A, _B)
#DIM REF _A
#DIM _B, 1
_A = _B

@FUNC_2
CALL FUNC, HOGE:1, 99
;=> HOGE:0 = 99 になっている

530あなたの名前を入力してください:2021/10/25(月) 23:49:17 ID:DB6djxtI
>配列の途中から渡せる参照渡しの関数って定義できるんでしょうか?
定義できないと聞いた覚えがあります
どのスレかは忘れましたが議論済みの仕様みたいです

531あなたの名前を入力してください:2021/10/26(火) 00:22:47 ID:7gO3NnQg
>>530
Emueraスレまで読んでいなかったので見落としてました
返信ありがとうございました

532あなたの名前を入力してください:2021/11/05(金) 02:09:09 ID:xHsrce8M
質問です
ERHファイルは複数作成しても正常に読み込まれるでしょうか

大量の変数の役割を予め頭に叩き込もうとするとこんがらがってくるので
いっそ使いたい変数を都度宣言して目的ごとにERHファイルを分けて整頓してしまった方が
少なくとも練習として何かしら作る分には気楽かなと思いまして

533あなたの名前を入力してください:2021/11/05(金) 03:09:08 ID:t4DdMN/c
正常に読み込まれるし、そうした方が良いと思う

534あなたの名前を入力してください:2021/11/05(金) 06:54:40 ID:F8EFd9Oo
TWのような箱庭系のバリアントを作る場合に土台にしやすいバリアントはあるのでしょうか?
今はTWのソースコードを追っているのですが、動作フローを追いかけるだけでも一苦労です…

535あなたの名前を入力してください:2021/11/05(金) 15:09:36 ID:xHsrce8M
>>533
了解です
ありがとうございます

536あなたの名前を入力してください:2021/11/05(金) 22:28:55 ID:ElAI/sE6
>>534
初心者が箱庭系バリアント……? 無謀やぞ
いや明らかに初心者じゃない人も質問してるからいいのか?
eracustom_FWってのが箱庭用ベースバリアントらしいけど今どこで入手できるのかはわからない

537あなたの名前を入力してください:2021/11/05(金) 22:29:59 ID:3OPuubuc
箱庭系は独自の良さがあるとはいえ複雑すぎるよね

538あなたの名前を入力してください:2021/11/06(土) 14:25:10 ID:ZXtTAp8.
ERHで定義したCHARADATA等の広域変数の値をChara.csvから代入する事は可能でしょうか


例えばキャラAがキャラBに処女を捧げていたとして

#DIMS CHARADATA SAVEDATA 破瓜相手

とERHで定義しキャラAのCSVにて
例えば

破瓜相手,キャラB
(ついでに処女なしやV経験等)

と書き込めばキャラAをADDCHARAした際に
キャラAの該当広域変数にキャラBの文字列が代入されるでしょうか

539あなたの名前を入力してください:2021/11/06(土) 15:59:11 ID:.BGRiR9A
>>538
>ERHで定義したCHARADATA等の広域変数の値をChara.csvから代入する事は可能でしょうか
できません

蛇足ですが参考まで
開発者向けの設定でemueraを起動したときにファイルの読み込み順が表示されるのを見ると実感しやすいと思いますが、
csvフォルダ内のファイル→*.ERH→*.ERBの順で読むのでERHの効果はCSVフォルダ内の記述には及びません

540あなたの名前を入力してください:2021/11/06(土) 16:06:55 ID:QhMVd0VQ
もっとキャラクターをオブジェクトっぽく扱いたいと思い始めると
普通にC#なりJSなりで書いた方が早いんじゃないかとなってしまう

541あなたの名前を入力してください:2021/11/06(土) 16:10:59 ID:ZXtTAp8.
>>539
了解です
キャラ独自に事前に持たせたい変数はCSTR等の標準のものを使う方が良さそうですね
ありがとうございます

542あなたの名前を入力してください:2021/11/06(土) 16:17:17 ID:ZXtTAp8.
>>540
Eraシリーズの「他ユーザーが持ち寄ったテキストを反映させながらプレイできる」という環境に憧れて
一時期は他の言語やゲームエンジンでのEraテイストゲームを…とも考えたのですが
プログラミングド素人なのでどうにも手順が分からず、Emueraでアレコレ考えていたりします

スレ違いな話題ですが
実行ファイル外のテキストの内部データをどう読み取って取り込むのかとか
パーサなるものを用いるのかとか
調べてみても要領を得られるほど学が足りていませんでした

543あなたの名前を入力してください:2021/11/06(土) 16:48:17 ID:QhMVd0VQ
>>542
>Eraシリーズの「他ユーザーが持ち寄ったテキストを反映させながらプレイできる」という環境に憧れて
>一時期は他の言語やゲームエンジンでのEraテイストゲームを…とも考えたのですが
>プログラミングド素人なのでどうにも手順が分からず、Emueraでアレコレ考えていたりします
ツクールMVやMZは実行エンジンがJacascript製でブラウザでも実行でき、従来のイベントエディタも健在なので
そちらにステップアップするという考えもあると思います。
Eraライクな仕組みを自分で作成する必要があるというハードルもありますが…

544あなたの名前を入力してください:2021/11/06(土) 17:28:09 ID:ZXtTAp8.
>>543
ありがとうございます
MVなら手元にあるので、機会があれば挑んでみたいと思います

Eraライクな仕組みがどのように成り立っているかの部分がやはり課題ですね…
指定した階層の指定した文字列と拡張子を含むファイルを読み取るという命令があるのは理解できるのですが
読み込んだファイルの行ごとに特定の文字列や変数を、実行ファイル内に適切な対象に代入する部分で挫折しました
Era以外でそういった処理をする場面が思いつかず、調べるためのキーワードも分からない状態なので…

545あなたの名前を入力してください:2021/11/06(土) 18:06:22 ID:rlW0.0t2
>>541
ERBを使うという手もある
キャラ制作時に自動で読み込まれるようにするとか、それをフレームワークで動かすとかするのは結構めんどくさいけど

546あなたの名前を入力してください:2021/11/06(土) 18:21:29 ID:3i5XcYgU
TWのキャラデータ方式は結構使えると思う

547あなたの名前を入力してください:2021/11/17(水) 06:33:43 ID:4H.fn8nU
キャラクター独自の変数やフラグを実装するよりうまいやり方はありませんか?
TWを見るとCFLAGの領域にキャラが個別に利用するための領域が確保されていましたが、この方法だと管理がしづらいと思っています。
理想はキャラクター情報をオブジェクト化し、各オブジェクトごとに必要に応じて独自の変数やフラグを実装できるようにすることなのですが…

548あなたの名前を入力してください:2021/11/17(水) 10:54:30 ID:zjDHNFAo
ERHで#DIM CHARADATA 変数名
詳細は↓を参照
https://ja.osdn.net/projects/emuera/wiki/UserVars

549あなたの名前を入力してください:2021/12/15(水) 15:51:30 ID:ZVyt7f5g
eraToLoveAを主人公審神者縛りではなくキャラ×キャラできるようにしたいんですが、
どこのコードで初手あなたカスタム呼び出しているのかがわからずでずっと詰んでます。
どこを弄れば変わるかわかりそうな方っていらっしゃいませんか。

550あなたの名前を入力してください:2021/12/26(日) 22:30:32 ID:T9OSGJEk
SYSTEM.ERBの187行目にあるCALL START_CHARA_SELECTをコメントアウト
直下のCALL CHARA_BUYの次行にCALL KYOHAN_CHARA_SELECTを持ってくる
たぶんこれだけ

これじゃ次同じことがあったとき役に立たないから調べた手順を書くと
「あなたカスタム」フォルダ内にある「MASTER_TALENT_SET.ERB」ファイルの関数名
「ANATA_TALENT_SET」でERBフォルダ全体をgrep
「SHOP2.ERB」の「START_CHARA_SELECT」から呼ばれていて
現在のプレイヤー設定は後から追加された処理とコメントから把握

その前にある「MASTER=0」を1代入に変えてみたら登録外エラー
ここではまだキャラ登録が行われていないようなのでADDCHARAをgrep

「SHOP2.ERB」の「CHARA_BUY」が引っかかり
そこにプレイヤーを登録キャラから選択する処理は既にあることがわかった
あるのになぜ動かないのか、発生条件がMASTER==-1になっている
MASTER = -1でgrepするとSYSTEM.ERBの「EVENTFIRST」開始処理や
SHOP2.ERBの「TSUYOKUTE_GAME」強くてニューゲーム処理が引っかかった

START_CHARA_SELECT・ANATA_TALENT_SETが、CHARA_BUYの上に挟まれ
MASTERを0に設定したため、CHARA_BUY側はMASTER==-1を受け取れなくなり
プレイヤー選択が発生しなくなったのが原因では、と考えた

CHARA_BUY側でMASTER=0を選んだ後、START_CHARA_SELECTからの処理を
選択分岐で発生させるとスマートな追加処理になると思うが
とりあえず希望通りに遊ぶことは簡単にできると思う

551あなたの名前を入力してください:2022/01/24(月) 20:53:40 ID:mIA81buY
eraFGOK.50で遊んでいます

デイリーイベントを一つ作ろうとしていて、ランダム選出したキャラクターの素質を参照した上で素質に対応させた地の文を優先順位なしにランダム表示させたいのですが…

素質のそれぞれに対応させた地の文が4つあるとして、4つとも合致した場合(真、真、真、真)には SELECTCASE RAND:4 で処理できると思うのですが

4つの地の文に対して対応する素質が3つしかない場合(真、偽、真、真だとか) 漏れた素質に対応する文(左記1,3,4合致の時における2に対応させた文)は除外して残った3つの候補の中からランダム表示…と言った事をしたい時に

真真真真、偽真真真(1番目を省いたRANDに掛ける)、真偽真真(2番めを省いたRANDに掛ける)、真真偽真(3番めを省いた...)、真真真偽(4番めを...)…といったそれぞれのパターンを書き出して丁寧にSELECTCASE:RANDで処理していくほかにないのでしょうか?

552あなたの名前を入力してください:2022/01/24(月) 21:26:33 ID:WapRIdnQ
汎用口上を一個作っておいてRAND4の分岐でその素質持ってれば素質用口上持ってなかったら汎用口上ってやると簡単かしら

553あなたの名前を入力してください:2022/01/24(月) 23:27:50 ID:fkCTNKbs
K系列だったらIFRAND関数を使ってみても良いかもしれない
あるいはRAND:4で抽選して偽のところに当たったらRAND:4よりも前のところに戻って抽選し直すとか

554あなたの名前を入力してください:2022/01/25(火) 01:44:48 ID:u227Z.ao
>>551-553
なんだもうあるんだ・・・・w
一応作った。全角スペースをタブに置換すれば動くはず
GET_CHARA_RANDOMRULEの第一引数にキャラのindexを数値で、第二引数以降に条件を文字列で書けば、条件を満たすものの中からランダムで1つ選んで返す
(第一引数に指定した値は第二引数以降では変数indexとして参照できる)

@GET_CHARA_RANDOMRULE_ARRAY(targetChara,rule)
#FUNCTION
#DIM targetChara
#DIMS REF rule,0 ;必要なら雑に増やす
#DIM index
#DIM allowedRulesIndex,100 ;足りないとエラーになるので雑に増やす
VARSET allowedRulesIndex,-1
FOR index,0,VARSIZE("rule")
 SIF rule:index == ""
  CONTINUE
 SIF EVALUATE(rule:index,targetChara)
  allowedRulesIndex:FINDELEMENT(allowedRulesIndex,-1) = index
NEXT
SELECTCASE FINDELEMENT(allowedRulesIndex,-1)
 CASE -1
  RETURNF RAND:VARSIZE("allowedRulesIndex")
 CASE 0
  RETURNF -1
 CASEELSE
  RETURNF RAND:FINDELEMENT(allowedRulesIndex,-1)
ENDSELECT

@GET_CHARA_RANDOMRULE(targetChara,rule:0,rule:1 = "",rule:2 = "",rule:3 = "",rule:4 = "",rule:5 = "",rule:6 = "",rule:7 = "",rule:8 = "",rule:9 = "")
#FUNCTION
#DIM targetChara
#DIMS rule,10
RETURNF GET_CHARA_RANDOMRULE_ARRAY(targetChara,rule)

;コイツは汎用関数・ライブラリスレの>>103-104に入ってるやつと被ってるので、そっち使ってるなら不要
@EVALUATE(evalString,index=-1,value=-1,totalizedValue=-1,strKey="")
#FUNCTION
#DIMS evalString
#DIM DYNAMIC index
#DIM DYNAMIC value
#DIM DYNAMIC totalizedValue
#DIMS DYNAMIC strKey
RETURNF TOINT(STRFORM("{" + evalString + "}"))

555あなたの名前を入力してください:2022/01/25(火) 16:43:01 ID:A1UFGDIY
助かりました、ありがとうございます!

556あなたの名前を入力してください:2022/02/07(月) 12:15:11 ID:Ab7ffkCc
質問です
eraGVTを改造中にこのような記述を見つけたのですが、

LOCAL:1 = RAND:100 && TALENT:ARG:オトコ <= 0 && CHECK_HOLYVIRGIN_F()==0

変数への代入に&&や比較演算子は使えるものなのでしょうか?
単に記述ミスか自分の知識が足りないせいで理解できないだけかわからず……お知恵をお借りしたいのです

557あなたの名前を入力してください:2022/02/07(月) 12:32:02 ID:hJ9cAehE
こりゃまたやっかいな構文だなぁw
結論から言うと、構文としては正しいよ

まずeraBASICは、条件判定式の結果が成立するなら1、しないなら0を返す仕様になってる
(IF分は条件式が0以外ならELSEの前が実行される。SIF文や参考演算子、&&なども同様)
つまり提示の構文は、
"RAND:100 && TALENT:ARG:オトコ <= 0 && CHECK_HOLYVIRGIN_F()==0"
という条件式の結果が成り立つなら1、成り立たないなら0を、LOCAL:1に代入する、という意味になる。

これについては、デバッグモード起動して以下の式を入力してみて
("値1" == "値2") *2 - 1
このままだと-1を返すけど、"値2"を"値1"に書き換えると1を返す
括弧の中全体を0か1に変えて式を読んで見れば、どういうことかわかるはず

次にRAND:100 は、直後に&&がついてるので「RAND:100の結果が0以外のとき」と読み替えることができる
TALENT:ARG:オトコ <= 0とCHECK_HOLYVIRGIN_F()==0は見たままなんで省略

だから全体を解釈すると、RAND:100が0以外かつTALENT:ARG:オトコが0以下かつCHECK_HOLYVIRGIN_F()の結果が0なら、LOCAL:1に1を、それ以外なら0を代入する、という意味になる。

558あなたの名前を入力してください:2022/02/07(月) 12:51:38 ID:Ab7ffkCc
なるほど、普通に右部分は判定式と考えればいいのですね
詳しい説明ありがとうございます!

それならそれでなぜRAND:100で1%の除外を……?とか疑問は湧きましたが
また、直後に

IF LOCAL:1 < 50

という条件式があるのですが、
解説を自分が正しく理解できているのなら、このIFがELSEになることはないでしょうし
本来は50%を基本確率にして分岐させたかったっぽいですね……

意図を読み解いて修正しようと思います
助かりました!

559あなたの名前を入力してください:2022/02/08(火) 00:36:52 ID:aXUSF6vM
質問なんですが、複数人のキャラクターの特定の数値(例えばCFLAG:経験人数)をソートしたい場合、何かいい方法は無いでしょうか?
#DIM 選択キャラ,5
選択キャラ = 15,21,35,6,47
となった場合に、各キャラのCFLAG:経験人数をソートして表示し、その順番を記録したいのですが

560あなたの名前を入力してください:2022/02/08(火) 20:56:05 ID:s/1UzrGM
1.ARRAYMSORT命令を使う
2.自前でソート処理を行う
3.ソート用の配列変数に (CFLAG:経験人数 * 256 + キャラ登録番号) を入れてからARRAYSORT命令を使う キャラ登録番号は配列変数の中身を256で割った余りで求められる (計算式が不適切な場合は適当に変更するべし)
どれを試すかは自由

561あなたの名前を入力してください:2022/02/08(火) 22:30:56 ID:u0h9PrnE
しょうがないにゃぁ
任意の条件でソートする手段はEmuera標準で提供されていないので、自前で実装する必要あり
(ARRAYMSORTは副作用があるので考慮しない)
EVALUATEに関しては>>554参照
CALLF LIST_SORT(選択キャラ,"CFLAG:value:経験人数")
でソートできるはず

@LIST_SORT(targetList,sortRule = "value",isDescend = 0,defaultValue = -1)
#FUNCTION
#DIM REF targetList
#DIM defaultValue
#DIMS sortRule
#DIM isDescend
#DIM gnome ;ノームの位置
#DIM elementCount
#DIMS sortFunc
elementCount = GET_LIST_LAST_ELEMENT(targetList,defaultValue) + 1
gnome = 1
sortFunc = \@ isDescend ? >= # <= \@
WHILE gnome < elementCount
 IF GROUPMATCH(COMPARE(EVALUATE(sortRule,,targetList:(gnome - 1)),EVALUATE(sortRule,,targetList:gnome)),0,(isDescend ? -1 # 1))
  gnome++
 ELSE
  SWAP targetList:(gnome - 1),targetList:gnome
  gnome = MAX(gnome - 1,1)
 ENDIF
WEND
RETURNF 1

;与えられた値を比較し、target1 < target2なら1、target1 == target2なら0、target1 > target2なら-1を返すラッパー関数
@COMPARE(target1,target2)
#FUNCTION
#DIM target1
#DIM target2
RETURNF (target1 == target2 ? 0 # (target2 - target1) / ABS(target2 - target1))

562あなたの名前を入力してください:2022/02/08(火) 23:45:24 ID:aXUSF6vM
>>560-561
ありがとうございます、参考にして目的に合わせて処理作ってみます

563あなたの名前を入力してください:2022/02/28(月) 19:52:36 ID:9nmkTkgE
質問させてください
数値を使ったor文を作りたいのですが構文的にはどういった感じになるのでしょうか

IF LOCAL == 1 || 2 || 3 || 4
PRINTFORML aaaa
ELSEIF LOCAL == 5 || 6 || 7 || 8
PRINTFORML bbbb

上のような感じで組むとLOCALの値が5〜8の時でもaaaaと返ってきます
PRINTFORML aaaa {LOCAL}といったときにaaaa{5~8} と表示はされるので恐らくor文の組み方自体が違うのだろうという事は分かるのですが…

564あなたの名前を入力してください:2022/02/28(月) 20:03:07 ID:/YZa/l4E
根本的に考え方が違う
LOCAL == 1 || 2 || 3 || 4
これは"1 || 2 || 3 || 4"の結果を計算し、その結果をLOCALと比較するという意味になる。
で、||は0かそうでないかしか計算しない(結果は1か0しかない)ので、結局↓の式と同じになる
LOCAL == 1

試しにLOCALの値を2にすると、aaaaもbbbbも表示されないはず

方式は4つ。めんどいのでPRINTFORMLの行は省略
1.律儀に全部書く。一番正攻法
 IF LOCAL == 1 || LOCAL == 2 || LOCAL == 3 || LOCAL == 4
 ELSEIF LOCAL == 5 || LOCAL == 6 || LOCAL == 7 || LOCAL == 8

2.不等号で判定。連続した数値の範囲内か判定するにはこれが楽
 IF 1 <= LOCAL && LOCAL <= 4

3.INRANGE関数を使う。実質的に2と同等
 IF INRANGE(LOCAL,1,4)
 ELSEIF INRANGE(LOCAL,5,8)

4,GROUPMATCH関数を使う。実質的に1と同等
 IF GROUPMATCH(LOCAL,1,2,3,4) > 0
 ELSEIF GROUPMATCH(LOCAL,5,6,7,8) > 0

565あなたの名前を入力してください:2022/02/28(月) 20:05:08 ID:/YZa/l4E
ごめん、2.に↓が抜けてるわ
ELSEIF 5 <= LOCAL && LOCAL <= 8

566あなたの名前を入力してください:2022/03/01(火) 17:08:19 ID:rzqTnce.
ありがとうございます
1の方法で良い具合に動作するようになりました

567あなたの名前を入力してください:2022/03/02(水) 21:43:13 ID:zDGkE8Hk
質問させてください

#DIM フラグ

IF フラグ == 1
PRINTFORML %ANAME(対象A)%の指が沿わされ…
ELSE
PRINTFORML %ANAME(対象B)%の指が沿わされ…
ENDIF

と言った文章で#DIM フラグ が立っているかいないかで分岐させる様にしたいのですが、対象の名前を指定する部分だけが変わる以外は全く同じ文面になる時、
PRINTFORML %ANAME(対象A)%(フラグが立っていないなら%ANAME(対象B)%)の指が沿わされ…
と言う風にひとつにまとめることはできるものでしょうか?

対象Aと対象Bのために全く同じ文章を2つ用意しているのですが、これを1つで済ませることができないだろうかと考えています


もう一つなのですが、3つ程度のの語句をSELECTCASE:RANDを3つ用意して組み合わせた時に
AAで
BBな
CC
といった感じに縦にばらばらに表示されてしまうものを、
AAでBBなCC といった感じに上手に表示させる方法ってあるものでしょうか
今は#DIMを使って%AA%で%BB%な%CC%といった感じでなんとかそれらしく出来てはいるのですが…

568あなたの名前を入力してください:2022/03/02(水) 22:27:10 ID:/vGZk042
1つ目は三項演算子をつかえばOK ↓のリンク先はeratoho WIKIに載ってる説明
https://seesaawiki.jp/eratoho/d/ERB%B9%BD%CA%B8%B9%D6%BA%C22#content_1_2_9
例文を使う時はこうなる
PRINTFORML \@ フラグ == 1 ? %ANAME(対象A)% # %ANAME(対象A)% \@の指が沿わされ…

2つ目はPRINTから改行キーワード"L"を省けば良さげ。 例えば
PRINTFORM AAで
PRINTFORM BBな
PRINTFORML CC
これで
AAでBBなCC
と表示されるけどこういうことでいいのかな

569あなたの名前を入力してください:2022/03/02(水) 23:07:05 ID:nJ7ME.NU
同じ条件で分岐する表現を何度もやるなら関数化した方がいいかもね

570あなたの名前を入力してください:2022/03/03(木) 22:01:41 ID:O9apcPY.
ありがとうございます、思った通り動くようになりました
助かります

571あなたの名前を入力してください:2022/03/17(木) 08:06:08 ID:WWGi7nEU
すみません。質問させてください

Emueraではcsvに記述したNAMEが各変数に割り当てられ、要素名として扱えますが
これを自作の#DIM的な変数にも構築することは可能でしょうか?
具体的にいうと
BASE.csvに 体力,1000とあればERB内でBASE:体力で参照できるように
#DIM HOGE 宣言後に HOGE:HUGAという要素名を割り当てたい

割り当てられないとマジックナンバーか広域な変数を作成する必要があり
かなり不便に感じているのですが…

572あなたの名前を入力してください:2022/03/17(木) 20:48:44 ID:DRxT.Nxs
ERHで#DEFINEする?

573あなたの名前を入力してください:2022/03/17(木) 21:23:11 ID:DRxT.Nxs
>>572
考えをメモしてたら操作間違えて書き込みました。申し訳ないです…

.ERHファイルを作成し、その中で[#DEFINE <置換元識別子> <置換先式>]と記述すれば.ERBファイル内の<置換元識別子>を<置換先式>に置換する
そうすると
<hoge.ERH>
#DEFINE 白米 0
#DEFINE 漬物 1

#DEFINE 好き 0
#DEFINE 嫌い 1

<fuga.ERB>
#DIM 好き嫌い,2

好き嫌い:白米 = 好き;(処理的には好き嫌い:0 = 0)

という形で記述できるから広域変数を使わずに要素名を割り当てられますかね?

574あなたの名前を入力してください:2022/03/17(木) 22:48:34 ID:WWGi7nEU
>>573
回答ありがとうございます
マクロかー 式中のみ展開とはいえ、大文字が基本構文なので怖いところがありますね…
いっそのことキャメル式の関数作って全部ラップしようかな

enumが欲しいぜ
名前空間も欲しい

575あなたの名前を入力してください:2022/03/18(金) 02:28:11 ID:EOhlf8kE
>>571
単純に定数切る方が多分早い

[ERH]
#DIM CONST HUGA = 0

[ERB]
@(省略)
#DIM HOGE
HOGE:HUGA = 1

そもそも単純に連番で表せないなら、変数から分けてしまう方が可読性を確保できるよ

576あなたの名前を入力してください:2022/03/18(金) 13:46:07 ID:hLJ8sNeA
他の変数と要素名が被る場合がね…
Emuera本体が対応してくれれば一番いいんだけど

577あなたの名前を入力してください:2022/03/20(日) 20:54:21 ID:8cYW3tTU
Emueraって大文字小文字区別してないんだ...
キャメル式に命名規則したかったのにな 命令と関数で記法違うのほんとストレス
これ日本語変数使わにゃやってけないなぁ 海外ではどうやってんだか

578あなたの名前を入力してください:2022/03/20(日) 21:06:06 ID:9vmAYQSY
設定で大文字小文字の区別できるよ

579あなたの名前を入力してください:2022/03/20(日) 23:05:37 ID:PmE/uhmc
???
大文字小文字を区別してないからこそ、キャメルケースでもなんでも好きに書けるのでは?
命令をキャメルケースで書いても動作は変わらないんだから

580あなたの名前を入力してください:2022/03/21(月) 01:56:02 ID:Yd5BJRtA
>>578
ありがとうございます!
私のバカ〜 設定を見落としていたとは

>>579
命令と関数で呼び出し方が異なるところがいやらしいのです
例えば関数だと CALL SetBit(ARG, ARG) となるところが
命令だと SETBIT ARG, ARG となる
この関数自作だっけ?命令だっけ?と毎度調べるたびにムカつくので
全部を関数に統一したいわけです KISSの法則的なやつです

同じ理由でFORM構文も殺したい 記号はわかりにくい
Print関数を作って全部文字列式に統一するんだ
TOINT()で整形して渡したほうが見た目で分かりやすいじゃないか

581あなたの名前を入力してください:2022/03/21(月) 01:58:04 ID:Yd5BJRtA
ミス
TOINT()じゃなくてTOSTR()だった

582あなたの名前を入力してください:2022/03/21(月) 17:55:23 ID:AZe2wDN.
>全部を関数に統一したいわけです
すればいいのでは?
命令実行するだけの下請け関数にキャラメル箱だろうがWikiNameだろうが好きなように付けちゃって呼べばいいような?

583あなたの名前を入力してください:2022/03/21(月) 23:17:48 ID:Yd5BJRtA
それやろうとして命令と同じ名前のキャメル式関数つくったら
Emueraが英文字大小区別してないことが分かってエラーになって途方に暮れたんだけど
それで嘆いたら>>578 さんが設定で変更できることを教えてくれたってのが
ことの顛末なんですよぉぉぉぉぉ
二方ともアドバイスありがとぉぉぉ

584あなたの名前を入力してください:2022/03/22(火) 02:36:39 ID:4G1qxkrE
まあ大文字小文字区別しないでキャメル式使おうとすると単語がくっついて解釈されるからなぁ
パッと思いつく、かつあんまり実用性ない例だと isErrorAssertion と isErrOrAssertion とかか?
なので>>580の言いたいこともわからんでもない

ただ既存の殆どのライブラリと互換性取れなくなるから、そこまでのメリットがあるかは知らん

585あなたの名前を入力してください:2022/04/13(水) 04:00:36 ID:IHLwEzTY
最近つーか昨日、eraについて知ったばかりなんですけど、
開発ツールの系譜って、この流れで合ってますかね?

■2005年
佐藤敏(=サークル獏)
・・・「eramaker」を開発

■2008年
MinorShift
・・・「Emuera」を開発

■2009年
佐藤敏(=サークル獏)
・・・「eramaker2」を開発

■2022年現在
妊)|д゚)の中の人
・・・「私家改造Emuera」を配布中

586あなたの名前を入力してください:2022/04/13(水) 18:30:15 ID:Bry8b0pE
既に俺より詳しそう
Emuの人は数年前までアプデしてたんだけどほぼ引退、今は妊の人がバグ取りやら最適化方面だけ引き継いでる感じ

587あなたの名前を入力してください:2022/04/13(水) 18:33:11 ID:Bry8b0pE
あとそれ以外にも機能追加していく人がたまにいたりするな

588あなたの名前を入力してください:2022/04/16(土) 13:56:06 ID:9mEFKmNA
Enter氏のEmueraEEとかですかね

eraはまったくの偶然から知ったもので、
どちらかというとテキストベースのゲームエンジンとして
すごく面白そう!という印象を受けました

Wikipediaに項目があってもよさそうなものだけど、
そこはまぁ、諸般の事情って奴ですかね・・・

589あなたの名前を入力してください:2022/04/20(水) 06:24:47 ID:v2C0GS4o
Wikipediaは明確な基準があるから単純に載せられないんだと思う
特に三大方針のひとつ「検証可能性」に完全に反する
ウィキペ用語だし詳細は省くけど、ソースがほぼ匿名ロダと匿名掲示板、まとめwikiだけになってしまうeraは難しい
獏さん時代メインならワンチャンいけるかもしれないけど、各方針・ガイドラインに沿うならほとんど書くことなさそう

匿名コミュニティ発で記事があるものは、大抵はメディアへの掲載・雑誌含む商業ラインでの配布・法人や著名人の反応があったりする

590あなたの名前を入力してください:2022/07/13(水) 06:41:29 ID:xVpgteFM
口上の側でコマンドに制限かけることって出来ますか?
たとえば特定のキャラだけクンニやフェラが出来ないようにするとか…

591あなたの名前を入力してください:2022/07/13(水) 06:56:23 ID:hiP9OBFM
基本的に無理だがバリアント次第では

592あなたの名前を入力してください:2022/07/13(水) 10:25:35 ID:AYMMrVLo
悪メの本番できないさくらちゃんとか

593あなたの名前を入力してください:2022/07/13(水) 12:27:18 ID:vQVEtU1I
悪メはキャラ毎のコマンド規制が非常に充実してるよな
倒錯系を忌避する伊吹ちゃんとか、名前に恥じず意地でも前の穴を使わせないミアとかそっちの意味でも個性が強い

594あなたの名前を入力してください:2022/07/13(水) 16:53:47 ID:LgX2/7x.
口上側から色々できると作者のモチベも上がるだろうね

595あなたの名前を入力してください:2022/07/13(水) 17:25:10 ID:d3ut9rEU
ここじゃなくて個別のバリアントスレで聞くべきだわ
やりたい事が明確ならバリアント主さんの手助けが貰えるかもしれんし

596あなたの名前を入力してください:2022/07/13(水) 20:35:18 ID:Z263mdm6
個人的にはそのキャラに特定の素質を持たせて、その素質を持ってるならコマンド実行時に弾くとかの方が汎用性高くていいと思うがね

597あなたの名前を入力してください:2022/07/21(木) 18:00:01 ID:31HAcFrQ
今、eraJKの改造してるんですがとりあえずEmuera1824+v8.1入れてみたんですけど
警告Lv1:COMF\性行為\COMF1-愛撫.ERB:14行目:システム関数@COM1 に引数が設定されています
@COM1(ARG)
って出てしまうんですけどこれって何が問題なんですか?引数ここに設定してはいけないのは何故?

598あなたの名前を入力してください:2022/07/21(木) 19:25:18 ID:8V9WckdY
@COMxxはCALLとかで直接呼び出す関数じゃないので引数を渡す事ができないからです

599あなたの名前を入力してください:2022/07/22(金) 18:55:49 ID:4KR/dgRo
回答ありがとうございました!内容理解するのに丸一日かかりました
COMはEmuera側でselectcom変数が配られてるから別の変数を@comに送れない?
という風にまとめとかflowとか見て解釈したんですが、じゃあ(ARG)消してみたら
USERCOM.ERBの13行目でエラーが発生しました:Emuera1824+v8.1
TRYCCALLFORM COM_ABLE{LOCAL}(MASTER)
エラー内容:引数の数が関数"@COM_ABLE1"に設定された数を超えています
現在の関数:@PLAYER_USERCOM(USERCOM.ERBの5行目)
関数呼び出しスタック:
↑EVENTCOMEND.ERBの133行目(関数@EVENTCOMEND内)
って出て意味が分からなくなりました。心が折れました

600あなたの名前を入力してください:2022/07/23(土) 19:25:47 ID:67tTclxk
@COM_ABLE1関数には引数が0個なのに, 実引数としてMASTERを渡そうとしているのエラーが出てますね (@COM_ABLE##も仮引数を持つことはできません)
TRYCCALLFORM COM_ABLE{LOCAL}
として実引数をすべて消すことでエラーは出なくなります

追伸:Emueraの私家改造版はv15が出てますが2年前のv8.1を使われてるのは理由がありますか?

601あなたの名前を入力してください:2022/07/24(日) 20:01:14 ID:mESX72Pk
少しずつ原因がわかってきました。JKは特にコマンド周りが一番好きなシステムですけど
その分特殊で他のを参考に理解っていうのが難しくて困ってました
今、eratohoまとめとeraシリーズを語るスレwiki、emuerawiki(ja.osdn.net/projects/emuera/wiki)
の3つを参考にしながら触ってるんですが、他にこのサイトおすすめだよ、とかってありますか?

v15を使っていない理由は当時のemuera1755より便利な機能が増えてるので1824入れてみたんですが
上記のエラーが出てしまったのでとりあえずエラー消せたらv15にしようかと考えていました

602あなたの名前を入力してください:2022/09/06(火) 20:54:05 ID:Dysw3kNE
素人質問ですいません。
今作っている部分でどうしても下記のエラーが出てしまうので、
EXCELでいうところのIFERROR関数のように、エラーが出た時の処理を加えたいと思っています。
(pythonでいうとtry~except?)
emueraのサイトは見たんですが、いまいち要領を得ません。
emueraでもIFERRORのような命令はかけるのでしょうか?
教えていただければ幸いです。

エラー内容:配列型変数TAG_NAMEの第1引数(-1)は配列の範囲外です

603あなたの名前を入力してください:2022/09/07(水) 00:19:06 ID:oj/mSVew
無いと思う
(関数を呼び出そうとしたけど存在しなかった場合に何かする、だったらTRYCCALLやTRYCCALLFORMがあるけど)
配列型変数の引数がマイナスにならないように事前チェックするのが正攻法だと思う

604あなたの名前を入力してください:2022/09/07(水) 07:03:26 ID:KwtJ4IgQ
回答ありがとうございます。
別の方法を探ってみます。

605あなたの名前を入力してください:2022/09/07(水) 22:27:32 ID:xyL1Vfdk
THROWがあるのにTRY CATCHがないってのもちょっとよくわからないところだよね

606あなたの名前を入力してください:2022/09/08(木) 00:22:10 ID:70LxUvEo
エラーが出るファイルの中身を見てないから確実なことは何も言えないけど、もしかするとEmueraの不具合か何かが原因で(-1)という値が発生しちゃってる可能性もないとは言えないかもしれないねぇ

607あなたの名前を入力してください:2022/09/29(木) 19:59:43 ID:fM3MVu6Q
遊ばせてもらってばかりで自分でいじったりしたことないんだけど、ソシャゲのホームで一線を越えたふれあいできるだけの感じのやつって作るの難しいんだろうか
ホームでふれあうのと行為始めるのは別で
寝るとデイリーイベントがあるくらいの
さらに希望言うならキャラはカスタムで作れるような
それで服着替えさせたりできて台詞とか反応変わるとか
難しいかなあ

608あなたの名前を入力してください:2022/09/29(木) 20:28:34 ID:s.gOcrkg
具体性に乏しいな
クリックすると設定したセリフを条件分岐に応じて出力するぐらいなら簡単だろうが、文字が出るだけで
Live2Dとボイスを標準装備してるソシャゲ並みの手ごたえを得られるとは思えない
もうちょっと何がしたいかはっきりさせて

609あなたの名前を入力してください:2022/09/29(木) 20:35:41 ID:eoedMeRs
話だけ聞くと悪魔でメイドにオリキャラ作成機能を乗っければそんな感じになりそう
ただ、悪魔でメイドには汎用キャラという概念がないからもし作るにしても大変そう

610あなたの名前を入力してください:2022/09/29(木) 21:39:45 ID:OSt9RjMM
ホーム画面みたいな所で立ち絵触って反応欲しいならeratohoLoAとか近いんかな

611あなたの名前を入力してください:2022/09/30(金) 04:56:37 ID:2q1iLtxg
伺かとか某奴隷との生活的なやつだろうか

612あなたの名前を入力してください:2022/09/30(金) 20:05:31 ID:GWypnMGA
たぶんものすごく初歩的な質問で申し訳ないんですが、era開発に必要なプログラミング言語とかって、なにかありますか?

613あなたの名前を入力してください:2022/10/01(土) 18:59:17 ID:X0rxHLFA
悪魔でメイド近いかもだけど難しいんだな
ありがとう

614あなたの名前を入力してください:2022/10/01(土) 19:25:27 ID:c4vyUnd.
>>612
中身はBASIC系統なのでVBとか触った経験あると割と活きるかな

615あなたの名前を入力してください:2022/10/01(土) 20:43:08 ID:/.kMUGTc
eraBasicはマジで単純な言語なので、一般的な言語の基礎さえわかっていれば簡単に応用できるのだ

616あなたの名前を入力してください:2022/10/01(土) 21:33:36 ID:es3eWvmI
そして適当に増改築繰り返すとスパゲッティができあがるのだ

617あなたの名前を入力してください:2022/10/03(月) 21:23:38 ID:zVYYRpVg
>>614-616 ありがとうございます

618あなたの名前を入力してください:2022/10/03(月) 22:57:11 ID:sRMR0SUA
なお本当のBASIC系言語を触ってるとeraBasicの癖が出まくって困るのまでが仕様
ifの後のthen忘れたり、end ifのスペース忘れた経験があるやつは多いはずだw

619あなたの名前を入力してください:2022/10/06(木) 14:46:18 ID:P57Sc.v6
引数を条件式にする方法ってありませんか?
こんな感じで引数を変えれば任意の条件でキャラを走査できればいいんですけど。

CALL HOGE(CFLAG:1 > 5)

@HOGE(条件式)
FOR LOCAL,1,CHARANUM
SIF 条件式
STRING += @"%CALLNAME:LOCAL%/"
NEXT

620あなたの名前を入力してください:2022/10/06(木) 15:13:32 ID:H88C7lWs
>>619
https://jbbs.shitaraba.net/bbs/read.cgi/otaku/16783/1498745115/93,103
↑このあたりを見ると幸せになれるかも。なれないかもw

621あなたの名前を入力してください:2022/10/06(木) 15:44:36 ID:P57Sc.v6
役立ちそうです、ありがとうございました。

622あなたの名前を入力してください:2022/11/09(水) 07:55:22 ID:nKdgtl1Y
eraの言語って他に使えるものだったのか・・・
という事はHTMLとeraしか出来ない俺でもVBってのを使える・・・?

623あなたの名前を入力してください:2022/11/11(金) 11:31:39 ID:CyEuwiCw
なんらかの言語一個マスターしてれば他の言語も大体わかる
erbはbasicに近い古い言語な感はあるけど

624あなたの名前を入力してください:2022/11/11(金) 20:24:25 ID:ZeztM1DE
eraできてもProlog系とかLISP系はキツくねぇかな

625あなたの名前を入力してください:2022/11/11(金) 22:48:02 ID:lqqRGF8.
大体の意味を理解できなかった男

626あなたの名前を入力してください:2022/11/12(土) 07:10:05 ID:Sy9yFJbo
大体の言語も大体わかる、とした方が良かったね
さておきHTMLできるというならJavaScriptも触っているだろうし、Electronで動かすのとかとっつきやすいかも?

627あなたの名前を入力してください:2022/11/15(火) 19:41:02 ID:8bmnu7iQ
素人質問ですいません。
エラー解決のため、CSVのBASEで、0,体力を400,体力というふうに番号を変えてみたところ、「体力が定義されていない」という膨大なエラーを吐きまくり、戻さざるを得なくなりました。
今までCSVの番号は定義されているものの名前で代用できる特に意味がないもの(BASE:MASTER:0=BASE:MASTER:体力)だと思っていたのでびっくりしました。
今は違う解決法を模索中ですが、仮に上記のようにBASEで振ってある番号を変えてもエラーを吐かないようにするにはどこを変えればいいのでしょうか?GREPしてみましたが、それを定義している箇所はわかりませんでした…。
後学のために教えていただければ幸いです。

628あなたの名前を入力してください:2022/11/15(火) 19:58:27 ID:9YjUhyeg
>>627
エラーの最初に「400は定義の範囲外」みたいなエラー吐いてない?
BASEの要素数が400もないから定義を作れず、その状態で構文解析してるから失敗してるだけ
400じゃなくて小さな数(5とか6とか)にするか、VariableSize.csvのBASEの値を401以上にすれば通るよ

ただ、BASEの要素数に連動して要素数変わるのがいくつかあるから、そっちも変更が必要
確認できたのはこれだけ。他にもあるかも
 ・MAXBASE
 ・BASENAME
 ・DOWNBASE

629あなたの名前を入力してください:2022/11/16(水) 17:38:36 ID:68qFOIFg
>>628
なるほど、VariableSizeでしたか。すっかり失念してました・・・。
教えていただきありがとうございました。

630あなたの名前を入力してください:2022/12/07(水) 19:38:58 ID:n3DNl5LU
なのでベースをera紅魔館に変え最新のEmueraを入れてみてとりあえず改造を進めようとしています
するといきなり、エラーが出てしまいました
CSV関連は直すことが出来ましたが、下記の物の理解が追い付きません、
これらエラーの意味をご掲示いただけませんでしょうか?
なお同様の文で紅魔館内部移動時にエラーが出ました

【バリアント】era紅魔館Ver0.022
【導入パッチ】Emuera1803beta008からEmuera
【エラー内容】
【エラーログ】
F0.ERB:27行目:"@FIRSTTIME"の1番目の引数を整数型から文字列型に変換できません(この警告は互換性オプション「ユーザー関数の引数に自動的にTOSTRを補完する」により無視できます)
IF (FIRSTTIME(312,1) ||【エラー発生状況】起動時
警告Lv2:Command\COM FIRSTTIME(20,1)) || (MASTER_POSE(4,4) != TARGET && MASTER_POSE(0,4)) || (STAIN:0 >= 2 && (STAIN:0 != 16 && STAIN:0 != 17) && ASSIPLAY == 0 && TALENT:MASTER:汚臭耐性 < 2) || TEQUIP:20

631あなたの名前を入力してください:2022/12/07(水) 21:38:19 ID:n3DNl5LU
toho総合から来ました
新しいバリアントを作ろうとベースをera紅魔館にEmueraを入れてみてとりあえず改造を進めようとしています
すると開始時にエラーが出てしまいました
CSV関連は直すことが出来ましたが、下記の物の理解が追い付きません、
これらエラーの意味をご掲示いただけませんでしょうか?

【バリアント】era紅魔館Ver0.022
【導入パッチ】なし
【エラー内容】
【エラーログ】
F0.ERB:27行目:"@FIRSTTIME"の1番目の引数を整数型から文字列型に変換できません(この警告は互換性オプション「ユーザー関数の引数に自動的にTOSTRを補完する」により無視できます)
IF (FIRSTTIME(312,1) ||【エラー発生状況】起動時
警告Lv2:Command\COM FIRSTTIME(20,1)) || (MASTER_POSE(4,4) != TARGET && MASTER_POSE(0,4)) || (STAIN:0 >= 2 && (STAIN:0 != 16 && STAIN:0 != 17) && ASSIPLAY == 0 && TALENT:MASTER:汚臭耐性 < 2) || TEQUIP:20

632あなたの名前を入力してください:2022/12/08(木) 03:07:32 ID:Lfsq4yDU
>>631
@FIRSTTIME関数の1番目の引数は文字列型が指定されている。一方で問題となっているFIRSTTIME(312,1)の"312"の部分は数値型
文字列型と数値型というのは別種のデータ形式であり、これらを直接やりとりすることは基本的にできない
だから314という数値型のものを文字列型へ変換する必要がある(EmueraにはTOSTRという数値型を文字列型に変換する命令がある)

古いEmueraでは数値を文字列型の引数に渡した時、自動で文字列型へ変換する機能があったがver1.808で停止された
なので1.807以前の古いEmueraを使うか(推奨しないが)、エラーメッセージにあるようにEmueraのヘルプ→設定→互換性とたどって
「ユーザー関数の引数に自動的にTOSTRを補完する」をチェックすることで回避できる

コード自体を直すなら「FIRSTTIME(312,1)」の部分は「FIRSTTIME(TOSTR(312),1)」となる(はず。多分……)
また最新の紅魔館NTRだとこの件は修正されている

どういう説明を求めているのかよく分からなかったから長くなっちゃった。型くらい知ってる!って人だったらごめんね…
紅魔館Ver0.022は割と古いバリアントだから紅魔館NTR系列のほうがいいかも?(NTRがいやなのかもしれないがNTR要素は除外もできる)

633あなたの名前を入力してください:2022/12/08(木) 10:44:54 ID:gdi1cLLc
紅魔はoverdriveも作られてたはずだからそっちでもいいかも

634あなたの名前を入力してください:2022/12/08(木) 14:07:48 ID:d9q/agNk
era紅魔館ODはロダ消滅で消えたからなあ

635あなたの名前を入力してください:2022/12/08(木) 20:08:53 ID:DVWEDg8M
お答えいただきありがとうございます、ですが…やはり今だちんぷんかんぷんですね
とりあえず追ってみて確認しましたが、
“;ARGSはイベント番号、ARGは真だと初回判定を更新しない、ARG:1はキャラ登録番号(省略するとTARGET,-1ならMASTER)”
に従うとしたら
IF FIRSTTIME(312,1)は
【312】がCOMF312(キス)、1が真で初回判定を変更しない(?)、そして今回は省略されているのでTargetで
かみ砕くと、「対象がキスをしていない状態のフラグが立っている時」ということになるのでしょうか?
また、今までは口上しか触っていなかったのでTOSTRの使い道がわかりませんね…
NTRより紅魔館を選んだのは単純に規模が小さい方がやりやすいと思ったからですが…
現実的に触ってみてキャラを削るだけでも相当難しいと感じ始めました…
これにさらにTWのコマンドや挿入継続などの状態を紅魔館仕様に変える必要があると考えると相当難しそうですね…

636あなたの名前を入力してください:2022/12/08(木) 21:55:11 ID:Lfsq4yDU
@FIRSTTIME関数には
  1,ARGSに与えられた番号のコマンドが過去に実行されたことがあるかを調べて報告する
  2,ARG:1のキャラクタに対し、ARGSに与えられたコマンドを実行したことがあるというフラグを立てる
の二つの機能があります
今回の場合では「キスを実行したことは記録せず(ARG=1)、TARGET(ARG:1省略)が過去にキス(312)を実行されたか調べて0か1で報告する」という働きをします
ARGが真だと初回判定を更新しないというのは口上などで過去の実行履歴を参照だけするときに使います。(2が実行されなくなる)

数値型、文字列型に関してはeratoho wikiのERB構文講座・基本やERB開発Q&Aに簡単ながら記述があるようなのでご覧ください

637ジンバブエ ◆rw2NXmNKnQ:2023/02/04(土) 19:04:06 ID:g3WqLoAw
完全に返事するのを忘れてしまいましたが…
2か月前にお答えいただきありがとうございます、おかげさまでまだいろいろとわからないままですが、
現在ヴァリアント自体を運営できるようになりました
そしてまた自分では解決できない問題が出たので質問させていただきます
GameBase.csvでバージョンを更新できるのは分かりましたが…
こちら上げた場合前のバージョンのセーブデータとの互換性がなくなってしまいます
セーブデータの互換性をそのままでバージョンを上げたいのですがその場合はどうすればよろしいのでしょうか?

638あなたの名前を入力してください:2023/02/04(土) 20:32:26 ID:uwmva7MM
GameBase.csvの話なので大元本家のGameBase.csvに関するヘルプを読んでみよう
ttp://cbaku.com/b/erakanon/eramacsv.html
これで解決するハズ

639ジンバブエ ◆rw2NXmNKnQ:2023/02/04(土) 23:21:32 ID:g3WqLoAw
解決しました!ありがとうございます…
しかしこういうWIKIってあとどれくらいあるんでしょうか…?
osdnもありましたし

640あなたの名前を入力してください:2023/02/05(日) 01:08:31 ID:he7AwxHg
eramakerの説明文書各種:>>3からチュートリアルに飛んでリンクを辿るといい
#遊びながら改変情報を見てみよう のとこね

Emueraの説明文書各種:osdnのEmueraWiki
ここから「eramaker情報について」のリンクを辿れば、
>>638をはじめ上で上げたeramakerの説明文書のとこには行きつく
一か所リンク切れがあるのとそれぞれのページの説明があるので、
上ではチュートリアル推したけど

噛み砕いて説明してる場所は他にもあるけど、
とりあえず最低限この両者を見れば仕様レベルの話は分かるはず
説明としてはとりあえずそれこそまずは>>3とかからかなあ

641あなたの名前を入力してください:2023/02/21(火) 01:47:43 ID:nf9Jjv5g
既存のeratohoKにちょっとした改造をして他作品の二次創作バリアントを作っているのですが、公開ってどのタイミングどの場所でやってみるのがいいですかね?
今はcsvは全部作成し世界観に合わない用語等を差し替えている段階なのですが
全キャラ分のスキル実装には正直時間がかかりそうで、完成度100%を目指すと出せるのはかなり先になりそうです……

642あなたの名前を入力してください:2023/02/21(火) 23:54:52 ID:GoL0nBcU
tohoKも初公開のバージョンではマップがera恋姫の物だったみたいなので、全然100%じゃなくてもいいと思う
キャラCSVの差し替えが終わってるならあとは「なんか動く物ができたよ!見てちょ!」と自分が思ったタイミングで良いのでは?

643あなたの名前を入力してください:2023/02/22(水) 16:58:01 ID:Q4qBpmqw
公開場所は新バリ作成スレでいいんじゃないかな

644あなたの名前を入力してください:2023/02/22(水) 17:02:55 ID:e1siyLKA
実際に動かしてはじめて浮上してくる問題もあるから、早いうちに公開して感想募るのがいいんじゃないかな

645あなたの名前を入力してください:2023/02/22(水) 22:43:43 ID:AeXPT3CE
ありがとうございます
もう少しだけ弄りたい部分があるのでそれが終わり次第新バリスレに投げてみようかと思います

646あなたの名前を入力してください:2023/03/03(金) 23:38:44 ID:eLjIHLS6
Flag.csvでフラグを管理するメリットはなんでしょうか?
広域変数を使えばよさそうな気がするのですが

647あなたの名前を入力してください:2023/03/04(土) 08:16:12 ID:O5XeFsXw
自分で答えを出してるじゃない。オワリ

648あなたの名前を入力してください:2023/03/06(月) 01:49:34 ID:o6fICZ5I
一文字変数とかと同じで(#DIMで任意の変数を定義できなかった頃の)古い仕様が残っている部分、というのが大きいかと

調べてみた感じだとemueraの「1.756beta002」で「#DIMによるプライベート変数宣言を追加」 「1.808」で「ヘッダーファイル(.ERH)実装」で
emueraが出てからでも数年は広域変数どころかプライベート変数も定義できなかったみたいですし
未だに残っているという部分に関しては「手を加える予定がないのなら今あえて整理に手間を掛けるのか」というのでそのまんまなんじゃないでしょうか

649あなたの名前を入力してください:2023/03/06(月) 10:50:45 ID:F/d5MU3o
強いてあげるならSAVEDATA使うとセーブデータがバイナリ形式にする必要がある

あとはFLAG表記があることで一目で広域変数だと認識できるとか

650あなたの名前を入力してください:2023/03/14(火) 10:28:36 ID:GTJgWDck
【質問】
・環境 eraVoiceroidA-1.26ベースの自作バリアント
・質問内容 eratohoЯeverseに実装されているアニメーションの実装方法が知りたいです
・目的 eratohoЯeverseにあるカラーバーが増減したり文字のカットインを行う方法を探しています
eratohoЯeverseの中身を覗いてみると、「ぱんくしょん」「ぱにめーしょん」というファイルでそれっぽいことをしていそうなので、これの最新版を探して取り入れるのが最適でしょうか?
ご教示よろしくお願いします

651あなたの名前を入力してください:2023/03/18(土) 09:56:01 ID:smsQmPqg
わけわからんからどなたか分かる人お願いします
tohoKのバリアントでスキルを作っているのですが、以下の方法でターゲットを取り戦闘不能にしたいと思ってます
敵が3名いたと仮定し、特定のタグを持った敵をターゲット対象に記録します
記録した対象からランダムで対象を取り出し戦闘不能に関わる関数を呼び出して終了します

〜省略〜
FOR LOCAL, 0, BATTLE_COMMANDER_NUM:対象側
    IF HAS_TAG(BATTLE_COMMANDER:対象側:LOCAL, タグ_ほにゃらら)
        対象リスト = BATTLE_COMMANDER:対象側:LOCAL
        対象人数 ++
    ENDIF
NEXT

IF カウント == 対象人数
    CALL FISHER_YATES_SHAFFLE(対象リスト)
    FOR LOCAL, 0, カウント
        シャッフル保存:LOCAL = SHAFFLE_ARRAY:LOCAL
    NEXT
   ※攻撃対象 = BATTLE_COMMANDER:対象側:(シャッフル保存:LOCAL)
    CALL SKILL_ASSASINATE(攻撃対象)
ENDIF

※印の部分で対象側のIDナンバーと思われる数値までは記録されてましたが、ASSASINATEの部分で対象は配列範囲外(-1)とされてうまくいきません
どう間違ってるのかもうよくわからんなってしまったので、どなたか原因が解る方よろしくお願いします

652あなたの名前を入力してください:2023/03/18(土) 14:54:07 ID:oXBnVKFg
tohoK 1.29.3で
ERB/SKILLS/98_針妙丸/SKILL_針妙丸_PERSONAL_2_鬼殺し両目突きの針.ERB
を見てみると敵を戦闘不能にさせるのは
CALL BATTLE_KNOCKOUT(対象側, LOCAL)
という感じなので関数名も引数の個数も異なっている
FGO K 0.5(修正版)にはSKILL_ASSASINATEがあるけどやっぱり引数は2つ
何か根本的に間違っている気がしないでもない

653あなたの名前を入力してください:2023/03/18(土) 17:46:02 ID:smsQmPqg
tohoKでもfgoでも共通して作ってたので見るべきソース先間違ってたあ…
ただ、どちらも関数直して見間違えてた参照引数を直して再トライしましたが、
BATTLE_武闘:対象側:対象番号 = 0
エラー内容:配列型変数BATTLE_武闘の第2引数(xxx)は配列の範囲外です
xxx←対象のキャラ番号

わかりません…

654あなたの名前を入力してください:2023/03/18(土) 19:52:09 ID:smsQmPqg
すみません、色々やってたら自決しました
話聞いてくれてありがとうございました…

655あなたの名前を入力してください:2023/03/18(土) 20:27:53 ID:dWwfQmrY
>自決しました
生きて?w

656Яeverse★:<売却済み>
<売却済み>

657あなたの名前を入力してください:2023/05/08(月) 23:07:59 ID:u4WD.Pbo
妙な終わり方してたんで亀レスのかき捨て
>>651だと選択結果の攻撃対象として{キャラ番号}を指定している
 BATTLE_COMMANDERの〇人目の{0, 1, 2}を指定するべき、、、動かしてないから多分、だけど

#DIM DYNAMIC 対象リスト, 3
#DIM 対象人数
#DIM 攻撃対象

対象人数 = 0
FOR LOCAL, 0, BATTLE_COMMANDER_NUM:対象側
  IF HAS_TAG(BATTLE_COMMANDER:対象側:LOCAL, タグ_ほにゃらら)
    対象リスト:対象人数 = LOCAL
    対象人数 ++
  ENDIF
NEXT

IF 対象人数 >= 1
  攻撃対象 = 対象リスト:(RAND:対象人数)
  CALL SKILL_ASSASINATE(対象側, 攻撃対象)
ENDIF

658あなたの名前を入力してください:2023/05/09(火) 07:43:30 ID:d//5i.zk
遅レスサンクス。全くその通りで、攻撃対象の指定に気付いたのは自決コメントを書き込んだ辺りでした
デバッグモードで代入されてる数値を目で追いながら、あーでもないこーでもないと悩ませてた結果こうなりました

;複数人
ELSE
   FOR LOCAL, 0, BATTLE_COMMANDER_NUM:対象側
     ;安全弁
     SIF BATTLE_SKILL_SEALED:対象側:LOCAL && !BATTLE_武闘:対象側:LOCAL
       CONTINUE
     SIF HAS_TAG(BATTLE_COMMANDER:対象側:LOCAL, タグ_ほにゃらら)
       対象リスト = LOCAL
   NEXT

   CALL FISHER_YATES_SHAFFLE(対象リスト)

   FOR LOCAL:0, 0, BATTLE_COMMANDER_NUM:対象側
     ;安全弁
     SIF SHAFFLE_ARRAY:LOCAL > BATTLE_COMMANDER_NUM:対象側
       CONTINUE
     SIF BATTLE_SKILL_SEALED:対象側:(シャッフル保存:LOCAL) && !BATTLE_武闘:対象側:(シャッフル保存:LOCAL)
       CONTINUE
     シャッフル保存:LOCAL = SHAFFLE_ARRAY:LOCAL
   NEXT
   COMBAT_SKILL_TARGET = シャッフル保存:LOCAL
ENDIF
CALL SKILL_ASSASINATE(対象側, COMBAT_SKILL_TARGET)

659あなたの名前を入力してください:2023/05/09(火) 11:26:56 ID:.1XNm7wk
憶測でキツメになってすまんけど、配列回りの理解が怪しくみえる
・対象リストの段階で、対象リスト:0 に上書きしていてリストになってない
・バリアントにもよるだろうけど、[ @FISHER_YATES_SHAFFLE ] 手元のtohoKだと用途がそもそも違う
・COMBAT_SKILL_TARGET で LOCAL は{BATTLE_COMMANDER_NUM:対象側 +1}であり、シャッフル保存のその部分には多分なにも入ってない
 結果対象側の最初のキャラに誤爆してるのではなかろうか
・BATTLE_SKILL_SEALED:対象側:(-1)は範囲外ですエラー落ち発生してないかな 一人/二人/三人部隊が混ざった時

660あなたの名前を入力してください:2023/05/09(火) 11:46:52 ID:.1XNm7wk
COMBAT_SKILL_TARGET = シャッフル保存:LOCAL の次行に以下を入れればデバッグモードで候補一覧がつらつらと表示されます
クラ落ちするようなら PRINTFORM %CALLNAME〜 の行はコメントアウトを。

[IF_DEBUG]
PRINTFORML タグ持ち対象キャラ 
FOR LOCAL:1, 0, 10
 SIF シャッフル保存:(LOCAL:1) == -1
  CONTINUE
 PRINTFORM キャラNo:{シャッフル保存:(LOCAL:1)}
 PRINTFORM %CALLNAME:(BATTLE_COMMANDER:対象側:(シャッフル保存:(LOCAL:1)))%
NEXT
PRINTW
[ENDIF]

661あなたの名前を入力してください:2023/05/09(火) 12:32:52 ID:d//5i.zk
その都度printform挟んで動きを止めて、中に入ってる数値を繰り返しチェックして回したので、エラーも出ませんしちゃんと動きますよー

662あなたの名前を入力してください:2023/05/09(火) 15:46:48 ID:d//5i.zk
と思って新規プレイデータで再デバック始めた途端にだめでした…なんてこった。前のデータはなんだったんだろ
660のデータを挟んでやってみます

663あなたの名前を入力してください:2023/05/26(金) 07:21:29 ID:eZa3SUQU
【質問】
・質問内容
 内輪向けに小規模なオリジナルのバリアントを制作しようとしているのですが、
 ベースにするのにいいバリアントはありますか?
 以下の条件で考えています。
  -口上の対応はなし
  -元ネタの要素は削除する
  -通常モードとエンドレスモードのみ
  -特別なエンディング分岐も考えない(あっても通常のハーレムエンドのみ)
 古いユーザーなのでeratohoRR1317等は手元にありますが、流石にレガシーすぎると考えています。

664あなたの名前を入力してください:2023/05/28(日) 23:26:19 ID:pt3h1nIo
奴隷監禁調教バリアントでパチュロダ3号機やeraロダ3号機に(も)置いてある物としてはeratohoYMAEMやeraVoiceroidAなどがあるみたいだけどベースとして適切かどうかは不明ですなあ
あるいはeramakerや古いEmueraで動いているバリアントを新しいEmueraで動かせば従来より快適になる可能性もあるけど、互換性に関する設定を変更するだけでは足りずにERBファイルを書き換える必要が生じる物もあるかもしれない

665あなたの名前を入力してください:2023/05/31(水) 18:28:47 ID:/wgNqzpM
>664
そうですか、ありがとうございます。

666あなたの名前を入力してください:2023/07/12(水) 18:44:06 ID:52f4SVnU
ちょっと聞きたいんですが

VARSET DITEMTYPE:0

ってした場合DITEMTYPE:1〜の中身も全部0になっちゃう?

667あなたの名前を入力してください:2023/07/12(水) 19:22:10 ID:r9QoLkOk
>>666
EmueraWiki見てって言いたかったけどなんか繋がらないな…
VARSETはDITEMTYPEとかの非キャラクタ多次元配列変数を対象にした場合、
第三引数以降の範囲指定すら無視して常に配列全体に代入される仕様

668あなたの名前を入力してください:2023/07/12(水) 19:36:03 ID:52f4SVnU
OSDNはなんか最近ずっとつながりにくいです。
読んでもわかりにくかったから聞いたんだけど結局試して確認しました。ありがとうございます。
そもそもVARSET DITEMTPYE:0:0って書かないとエラー出ちゃうのね。
その上VARSET DITEMTPYE:1:0って書いても結果は同じと

ってことは多次元配列で特定の配列の一部だけまとめて消したいときはFOR〜NEXTとか使うしかないのかな

669ジンバブエ ◆rw2NXmNKnQ:2023/10/25(水) 11:26:17 ID:k5zTdEAQ
お久しぶりに開発で詰まったので来ました
命令に関する質問なのですが、BEGINという命令の中身を見る方法はありますでしょうか?
TWや紅魔館NTRではすでにこの命令でターンの処理がひとまとめにされていて、
過去紅魔館ではCALL TRAIN_MAIN_LOOPを使ってターンのの動きを処理していました

670あなたの名前を入力してください:2023/10/25(水) 15:49:40 ID:pW/TwlEI
Emuera wikiの処理フローの流れ見るのが一番いいよ

671あなたの名前を入力してください:2023/11/28(火) 06:45:54 ID:H4j0rFVk
口上のネタってどう探したらいいかな
有名なネタとかは既に擦られていることが多いし
あんまり天丼みたいになるのはよくないと思うんだけど

672あなたの名前を入力してください:2023/11/28(火) 18:13:42 ID:LqpyXGxg
フランス書院?

673あなたの名前を入力してください:2023/11/29(水) 06:10:00 ID:UJ76oQYM
やっぱり書き分けにはインプットを増やすしかないのか
口上実装に穴ぼこ出来てるバリアントが多いから、とりあえず埋めてけば別人版の土台くらいにはなるかと思ったんだけど

674あなたの名前を入力してください:2023/11/29(水) 09:33:19 ID:w.mZoAtQ
口上の書き方なんてベース反応にキャラの口調で書き分けるぐらいでいいんだよ
Addその日の気持ちのノリ具合で加筆すればええ(update)

675あなたの名前を入力してください:2023/11/29(水) 15:12:04 ID:9HB3AIiE
とりあえず感じて来たら舌っ足らずにすると楽

……どれも同じになってあれだが


新着レスの表示


名前: E-mail(省略可)

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

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

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

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