トップ 最新 追記

吉里吉里日記


2005-07-14

吉里吉里 2.25 beta 6 / KAG3 3.25 beta 6 公開

吉里吉里 2.25 beta 6 / KAG3 3.25 beta 6 が公開されました。

先日紹介したTJS スクリプト中から KAG のタグを実行するというハックも 本家に取り込んでいただきました。

詳しい変更点は吉里吉里 開発版(β版)の詳細よりどうぞ。

[]

2005-07-16

2005年冬コミ日程発表

今日は夏コミのカタログ発売日です。(コミケットサービスとかだと前日には置いてあったりしますが)

今年の冬コミ、コミックマーケット69は2日間開催 によると、 今年の冬コミは29, 30日の2日間開催みたいですね。

米沢代表も、確か「ずっと冬を3日間にするわけじゃなくて、たまたま日程がよかったから3日間にできた」みたいな 趣旨の事を言っていましたし、さすがに冬は、年末と土日がうまく重ならないと3日間開催は厳しいようです。もし年末開催が続くとして、3日間できそうなのは再来年かな? (年末以外にずれるという話も検討されているそうですが……?)

[]

2005-07-18

Wiki を設置しました

吉里吉里情報局に、Wiki を設置しました。http://www.kirikiri.info/w/k/

まだほとんどページがありませんが、ぼちぼち作っていこうと思います。

みなさんの編集も大歓迎ですので、もし何かあったらお気軽にどうぞ。

[]

2005-07-19

ICO を始めました

買ったのは確か去年だったと思うんですが、ようやく始めました。 (Ever17 を買ったときにもらったギフト券で買った)

ゲーム内容としては、基本的には少女を連れて城の中を進んで行くゲームのようです。

最初のうちは、窓から外に出られるとか気付かずに悩んだりしていましたが、だいぶスムーズに進めるようになってきました。

とりあえず正門まで。

ICO ICO

Tags: ICO ゲーム
[]

2005-07-23

1周クリア

1周クリアしました。8時間15分25秒。

「少女の手をとって進む」ことがとてもうまく表現されているゲームだと思いました。

少女と離れて一人で進まなければいけない場所もあるのですが、 少年が感じている「不安感」を、あたかも自分のもののように感じたりとか。

ゲームとしての難易度は、難しすぎず易しすぎずという感じでしょうか。

そんなに長いゲームでもないんで、気になっている方はやってみて損はないかと。

Tags: ICO ゲーム
[]

2005-07-24

コミケ三拡

コミックマーケットの第三回拡大準備集会に参加してきました。

逆三角形の中に入る、数少ない機会です。

「まだマンガを描いてない人もいると思いますが…… そういう人はこんなところにいる場合じゃないんじゃないかと(笑)」みたいな話が出ましたが…… うーむ。

[]

2005-07-29

KAGParser パッチ

else と elsif タグを追加するパッチ。 コンパイルすらしてないのでエラーがあるかもしれません。

std::vector<bool> IfLevelExecutedStack と std::vector<tjs_int> ExcludeLevelStack が必要。

 --- tmp/tvp2win32/kirikiri2/src/core/utils/KAGParser.cpp	2005-04-02 00:27:22.000000000 +0900
 +++ tmp/KAGParser.cpp	2005-07-28 16:24:46.140625000 +0900
 @@ -464,6 +464,8 @@
  	// copy ExcludeLevel, IfLevel
  	ExcludeLevel = ref.ExcludeLevel;
  	IfLevel = ref.IfLevel;
 +	ExcludeLevelStack = ref.ExcludeLevelStack;
 +	IfLevelExecutedStack = ref.IfLevelExecutedStack;
  }
  //---------------------------------------------------------------------------
  iTJSDispatch2 *tTJSNI_KAGParser::Store()
 @@ -862,6 +864,8 @@
  	// break condition state and macro recording
  	RecordingMacro = false;
  	ExcludeLevel = -1;
 +	ExcludeLevelStack.clear();
 +	IfLevelExecutedStack.clear();
  	IfLevel = 0;
  	PopMacroArgsTo(MacroArgStackBase);
  		// clear macro argument down to current base stack position
 @@ -1411,7 +1415,7 @@
  
  		// check special control tags
  		enum tSpecialTags
 -		{ tag_other, tag_if, tag_ignore, tag_endif, tag_endignore,
 +		{ tag_other, tag_if, tag_else, tag_elsif, tag_ignore, tag_endif, tag_endignore,
  			tag_emb, tag_macro, tag_endmacro, tag_macropop, tag_erasemacro,
  			tag_jump, tag_call, tag_return} tagkind;
  		static bool tag_checker_init = false;
 @@ -1428,6 +1432,10 @@
  			special_tags_hash.Add(
  				ttstr(TJS_W("endignore")), (tjs_int)tag_endignore);
  			special_tags_hash.Add(
 +				ttstr(TJS_W("else")), (tjs_int)tag_else);
 +			special_tags_hash.Add(
 +				ttstr(TJS_W("elsif")), (tjs_int)tag_elsif);
 +			special_tags_hash.Add(
  				ttstr(TJS_W("emb")), (tjs_int)tag_emb);
  			special_tags_hash.Add(
  				ttstr(TJS_W("macro")), (tjs_int)tag_macro);
 @@ -1551,39 +1559,101 @@
  					break;
  				}
  
 -				// if/endif
 +				// if/ignore
  				if(tagkind == tag_if || tagkind == tag_ignore)
  				{
 -					tTJSVariant val;
 -					ttstr exp;
 -					DicObj->PropGet(0, __exp_name.c_str(), __exp_name.GetHint(), &val, DicObj);
 -					exp = val;
 -					if(exp == TJS_W(""))
 -						TVPThrowExceptionMessage(TVPKAGSyntaxError);
 -					TVPExecuteExpression(exp, &val);
  					IfLevel ++;
 +					IfLevelExecutedStack.push_back(false);
 +					ExcludeLevelStack.push_back(ExcludeLevel);
 +
 +					if(ExcludeLevel == -1)
 +					{
 +						tTJSVariant val;
 +						ttstr exp;
 +						DicObj->PropGet(0, __exp_name.c_str(), __exp_name.GetHint(), &val, DicObj);
 +						exp = val;
 +						if(exp == TJS_W(""))
 +							TVPThrowExceptionMessage(TVPKAGSyntaxError);
 +						TVPExecuteExpression(exp, &val);
 +
 +						bool cond = val.operator bool();
  
 -					bool cond = val.operator bool();
 -					if(tagkind == tag_if) cond = !cond;
 +						IfLevelExecutedStack.back() = cond;
 +						if(!cond)
 +						{
 +							if(ExcludeLevel == -1)
 +							{
 +								ExcludeLevel = IfLevel;
 +							}
 +						}
 +					}
 +				}
  
 -					if(cond)
 +				// elsif
 +				if(tagkind == tag_elsif){
 +					if(IfLevelExecutedStack.empty())
 +					{
 +						// no preceded if/ignore tag.
 +						// should throw an exception?
 +					}
 +					else if(IfLevelExecutedStack.back())
  					{
 -						if(ExcludeLevel == -1)
 +						ExcludeLevel = IfLevel;
 +					}
 +					else if(IfLevel == ExcludeLevel){
 +						tTJSVariant val;
 +						ttstr exp;
 +						DicObj->PropGet(0, __exp_name.c_str(), __exp_name.GetHint(), &val, DicObj);
 +						exp = val;
 +						if(exp == TJS_W(""))
 +							TVPThrowExceptionMessage(TVPKAGSyntaxError);
 +						TVPExecuteExpression(exp, &val);
 +
 +						bool cond = val.operator bool();
 +						if(cond)
  						{
 -							ExcludeLevel = IfLevel;
 +							IfLevelExecutedStack.back() = true;
 +							ExcludeLevel = -1;
 +						}
 +						else
 +						{
 +							if(ExcludeLevel == -1)
 +							{
 +								ExcludeLevel = IfLevel;
 +							}
  						}
  					}
  				}
  
 +				// else
 +				if(tagkind == tag_else){
 +					if(IfLevelExecutedStack.empty())
 +					{
 +						// no preceded if/ignore tag.
 +						// should throw an exception?
 +					}
 +					else if(IfLevelExecutedStack.back())
 +					{
 +						ExcludeLevel = IfLevel;
 +					}
 +					else if(IfLevel == ExcludeLevel)
 +					{
 +						IfLevelExecutedStack.back() = true;
 +						ExcludeLevel = -1;
 +					}
 +				}
  
  				// endif/endignore
  				if(tagkind == tag_endif || tagkind == tag_endignore)
  				{
  					// endif
 -					if(IfLevel == ExcludeLevel)
 +					if(!ExcludeLevelStack.empty())
  					{
 -						ExcludeLevel = -1;
 +						ExcludeLevel = ExcludeLevelStack.back();
 +						ExcludeLevelStack.pop_back();
  					}
 +					if(!IfLevelExecutedStack.empty())
 +						IfLevelExecutedStack.pop_back();
  
  					IfLevel --;
  					if(IfLevel < 0) IfLevel = 0;
 
[]

2005-07-30

タイトーメモリーズ

発売されたようですが、いくつかのゲームは最初から遊べないという仕掛けが入っていたようです。

何でそんなことするかなぁ……と思ったのですが、 今日になってみると解除コマンドが発表されてました

とりあえずよかったよかった。近いうち買う予定。

タイトーメモリーズ上巻 タイトーメモリーズ上巻

秋葉原へ

CD-R 100枚購入。

タイトーメモリーズを買うか……と思ったが、なぜか買ったのは これこれこれ

新宿のヨドバシカメラで Borland C++ Builder 6 Personal を買う。

毎度のこととは言え、メディア100枚持って歩きまわるのは非常に疲れる。

[]

2005-07-31

吉里吉里ビルド

BCB6 を買ったので、dee さんの助けを借りて、吉里吉里をコンパイルできるようになりました。どうもありがとうございます。

早速、else パッチを試してみましたが…… elsif の exp 属性が、その前の if タグの exp 属性のままになっちゃってますね。

どこかで DicObj を更新しないといけないと思うのですが…… まだきちんと把握できていません。

else/elsif パッチ

2000行目過ぎの

 if(!RecordingMacro && ExcludeLevel == -1)

 if((!RecordingMacro && ExcludeLevel == -1) || tagkind == tag_elsif)

にしたら、とりあえず解決しました。(deeさんありがとうございます)

が、if ブロックの中から call でジャンプすると、return で戻ってきた ときに IfLevelExecutedStack と ExcludeLevelStack の情報を忘れているのでおかしくなるということに気付きました。

if の中にジャンプしてくるのは call-return のときだけのはずなので、 Stack の Stack を作って、保存しておけばいいのかなぁ……

後で試してみます。

[]

2005|02|03|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|04|05|07|08|