Mercurial > otakunoraifu
changeset 65:4416cfac86ae
Convert EUC-JP files to UTF8
author | Thibaut Girka <thib@sitedethib.com> |
---|---|
date | Fri, 26 Nov 2010 10:53:15 +0100 (2010-11-26) |
parents | 045ca45f9610 |
children | d112357a0ec1 |
files | font/font_face.cc font/font_layout.cc font/font_peer_ft2.cc font/font_peer_x11.cc font/text_stream.cc music2/koedec.cc music2/koedec_ogg.cc music2/movie.cc music2/music.cc music2/nwatowav.cc music2/wavfile.cc music2/wavfile.h scn2k/scn2k.h scn2k/scn2k_cmd.cc scn2k/scn2k_cmd.h scn2k/scn2k_flags.h scn2k/scn2k_grp.cc scn2k/scn2k_impl.cc scn2k/scn2k_impl.h scn2k/scn2k_text.cc scn2k/scn2kdump.cc scn2k/test.cc system/file.cc system/file.h system/file_impl.h system/system_config.cc system/system_config.h system/visarc.cc window/button.cc window/event.cc window/event.h window/menuitem.cc window/menuitem.h window/picture.cc window/picture.h window/render.cc window/render.h window/system.cc window/widget.cc window/widget.h xlovesys.cc |
diffstat | 41 files changed, 1308 insertions(+), 1308 deletions(-) [+] |
line wrap: on
line diff
--- a/font/font_face.cc +++ b/font/font_face.cc @@ -49,7 +49,7 @@ namespace XKFont { { cache = new Cache; - /* name: ';' ���ڤ��ʣ�������ǽ */ + /* name: ';' 区切りで複数指定可能 */ char* name = new char[strlen(name_orig)+1]; while(*name_orig != 0) { const char* next_name = strchr(name_orig, ';'); @@ -137,7 +137,7 @@ namespace XKFont { return face; } catch(...) { std::cerr << "Cannot create font face; font "<<pimpl->fontname<<", size "<<size<<std::endl; - /* �̤��礭����õ�� */ + /* 別の大きさを探す */ int i; for (i=0; i<size; i++) { if (cache.find(size-i) != cache.end()) return cache[size-i]; @@ -153,7 +153,7 @@ namespace XKFont { return face; } catch(...) {}; } - /* ���Ĥ���ʤ� */ + /* 見つからない */ throw; } }
--- a/font/font_layout.cc +++ b/font/font_layout.cc @@ -1,5 +1,5 @@ /* layout2.cc - * �ƥ����Ȥζ�§�������쥤�����Ȥʤɤ�Ԥ� + * テキストの禁則処理、レイアウトなどを行う */ /* * Copyright (c) 2004-2006 Kazunori "jagarl" Ueno @@ -37,37 +37,37 @@ using namespace std; #include "font.h" #include "text.h" -const int line_skip = 1; // �ԤȹԤδ֤δֳ� -const int ruby_textskip = 0; // ʸ���ȥ�Ӥδ֤δֳ� -const int ruby_lineskip = 1; // ��Ӥ�����Ȥ��˹Դ֤˲ä����� -const double ruby_scale = 0.4; // ��ӤΥ������� +const int line_skip = 1; // 行と行の間の間隔 +const int ruby_textskip = 0; // 文字とルビの間の間隔 +const int ruby_lineskip = 1; // ルビがあるときに行間に加える値 +const double ruby_scale = 0.4; // ルビのスケール class TextGlyphStreamHelper; enum KinsokuType { KinsokuHead = 1, KinsokuTail = 2}; static int kinsoku_table1[] = { /* 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 */ - 0,0,2,2,2,2,0,0, /* �ء������������� */ - 0,2,2,0,0,0,0,0, /* ���������������� */ - 0,0,0,0,0,0,0,0, /* ���������������� */ - 0,0,0,0,2,0,0,0, /* ���������������� */ - 0,2,0,0,2,2,1,2, /* �����¡áġšơ� */ - 1,2,1,2,1,2,1,2, /* �ȡɡʡˡ̡͡Ρ� */ - 1,2,1,2,1,2,1,2, /* �Сѡҡӡԡա֡� */ - 1,2,1,2,0,0,0,0, /* �ء١ڡۡܡݡޡ� */ - 0,0,0,0,0,0,0,0, /* ��������� */ - 0,0,0,0,0,0,0,0, /* ���������� */ - 0,0,0,0,0,0,0,0, /* ������������ */ - 0,0,0,0,0,0,0,0, /* ���������������� */ + 0,0,2,2,2,2,0,0, /* X 、。,.・: */ + 0,2,2,0,0,0,0,0, /* ;?!゛゜´`¨ */ + 0,0,0,0,0,0,0,0, /* ^ ̄_ヽヾゝゞ〃 */ + 0,0,0,0,2,0,0,0, /* 仝々〆〇ー―‐/ */ + 0,2,0,0,2,2,1,2, /* \〜‖|…‥‘’ */ + 1,2,1,2,1,2,1,2, /* “”()〔〕[] */ + 1,2,1,2,1,2,1,2, /* {}〈〉《》「」 */ + 1,2,1,2,0,0,0,0, /* 『』【】+−±× */ + 0,0,0,0,0,0,0,0, /* ÷=≠<>≦≧∞ */ + 0,0,0,0,0,0,0,0, /* ∴♂♀°′″℃¥ */ + 0,0,0,0,0,0,0,0, /* $¢£%#&*@ */ + 0,0,0,0,0,0,0,0, /* §☆★○●◎◇X */ 0 }; static int kinsoku_table2[] = { - 0,2,0,2,0,2,0,2,0,2,0,0,0,0,0,0, /* �������������������������������� */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* �������������������������������� */ - 0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, /* �����¤äĤŤƤǤȤɤʤˤ̤ͤΤ� */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* �ФѤҤӤԤդ֤פؤ٤ڤۤܤݤޤ� */ - 0,0,0,2,0,2,0,2,0,0,0,0,0,0,2,0, /* ������������������ */ - 0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0, /* ���������� */ + 0,2,0,2,0,2,0,2,0,2,0,0,0,0,0,0, /* ぁあぃいぅうぇえぉおかがきぎく */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ぐけげこごさざしじすずせぜそぞた */ + 0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, /* だちぢっつづてでとどなにぬねのは */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ばぱひびぴふぶぷへべぺほぼぽまみ */ + 0,0,0,2,0,2,0,2,0,0,0,0,0,0,2,0, /* むめもゃやゅゆょよらりるれろゎわ */ + 0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0, /* ゐゑをんヴヵヶ */ 0 }; @@ -121,7 +121,7 @@ void TextGlyphStreamHelper::Init(TextGly TextGlyphStreamHelper::Iterator TextGlyphStreamHelper::Add(int& x, TextGlyphStreamHelper::Iterator begin, TextGlyphStreamHelper::Iterator end, int max_x) { - /* text �� glyph ���Ѵ����� */ + /* text を glyph に変換する */ TextGlyph gl; Iterator it; gl.x = x; gl.y = 0; gl.r = r; gl.g = g; gl.b = b; gl.flag = TextGlyph::Flag(0); gl.is_rev = false; @@ -164,12 +164,12 @@ TextGlyphStreamHelper::Iterator TextGlyp if (it == send) return it; if (it->type != TextElem::escape || it->impl.Escape.type != TextElem::ruby_start) return sbegin; it++; - /* �ޤ�����ʸ���� */ + /* まず、本文描画 */ int str_firstpos = data->size(); int str_width = 0; it = Add(str_width, it, send); if (it == send || it->type != TextElem::escape || it->impl.Escape.type != TextElem::ruby_startruby) { - // ���ꤨ�ʤ��Ϥ����������礨���ʤˤ⤷�ʤ��ǽ�λ + // ありえないはずだが、取り合えずなにもしないで終了 cerr << "TextGlyphStream::AddRuby : invalid operation; fallback to the upeer level"<<endl; data->erase(data->begin()+str_firstpos, data->end()); return sbegin+1; @@ -178,7 +178,7 @@ TextGlyphStreamHelper::Iterator TextGlyp int str_lastpos = data->size()-1; TextGlyph& str_first = data->begin()[str_firstpos]; TextGlyph& str_last = data->back(); - // ���ˡ��ե���Ȥ��꤫���ƥ������ + // 次に、フォントを取りかえてルビ描画 int ruby_firstpos = data->size(); XKFont::Face* save_font = face; if (ruby_face == 0) ruby_face = font->FaceLoad(ruby_scale); @@ -186,7 +186,7 @@ TextGlyphStreamHelper::Iterator TextGlyp int ruby_width = 0; it = Add(ruby_width, it, send); if (it->type != TextElem::escape || it->impl.Escape.type != TextElem::ruby_end) { - /* ���ꤨ�ʤ��Ϥ����������礨���ʤˤ⤷�ʤ��ǽ�λ */ + /* ありえないはずだが、取り合えずなにもしないで終了 */ cerr << "TextGlyphStream::AddRuby : invalid operation; fallback to the upeer level"<<endl; data->erase(data->begin()+str_firstpos, data->end()); return sbegin+1; @@ -196,27 +196,27 @@ TextGlyphStreamHelper::Iterator TextGlyp TextGlyph& ruby_first = (*data)[ruby_firstpos]; TextGlyph& ruby_last = data->back(); - /* ��Ӥ��ư���٤��⤵����� */ + /* ルビを移動すべき高さを求める */ int dummy, str_ascent, ruby_descent; CalcHeight(str_ascent, dummy, data->begin()+str_firstpos, data->begin()+ruby_firstpos); CalcHeight(dummy, ruby_descent, data->begin()+ruby_firstpos, data->end()); int ruby_height = str_ascent + ruby_descent + ruby_textskip; - /* ����������Ρ���Ӥκ�¦����¦�Υޡ����� */ + /* センタリングした場合の、ルビの左側、右側のマージン */ int leftmergin, rightmergin; leftmergin = str_first.glyph->advance.x/2 - (ruby_first.glyph->advance.x+1)/2; rightmergin = str_last.glyph->advance.x/2 - (ruby_last.glyph->advance.x+1)/2; - /* ��ӡ���ʸ�β������ΰ�ư */ + /* ルビ、本文の横方向の移動 */ int ruby_xstart_add = 0, ruby_xend_add = 0, str_xstart_add=0, str_xend_add = 0; - if (ruby_width+leftmergin+rightmergin <= str_width) { // ��Ӥ����������� + if (ruby_width+leftmergin+rightmergin <= str_width) { // ルビの方が小さい ruby_xstart_add = leftmergin; ruby_xend_add = str_width-rightmergin-ruby_width; - } else if (ruby_width <= str_width) { // �ޡ�����餹ɬ�פ��� + } else if (ruby_width <= str_width) { // マージンを減らす必要あり leftmergin = (str_width-ruby_width)/2; ruby_xstart_add = leftmergin; ruby_xend_add = str_width-leftmergin-ruby_width; - } else { // ��Ӥ������礭�� + } else { // ルビの方が大きい int str_count = ruby_firstpos - str_firstpos; str_xstart_add = ruby_width/str_count/2 - str_first.glyph->advance.x/2; str_xend_add = (ruby_width-str_width) - (ruby_width/str_count/2-str_last.glyph->advance.x/2); @@ -225,7 +225,7 @@ TextGlyphStreamHelper::Iterator TextGlyp AdjustPosition(str_xstart_add+x, str_xend_add+x, 0, data->begin()+str_firstpos, data->begin()+ruby_firstpos); AdjustPosition(ruby_xstart_add+x, ruby_xend_add+x, -ruby_height, data->begin()+ruby_firstpos, data->end()); - /* ��ʸ����ʸ������ɽ�������褦�� glyph �ν��֤����줫�������롼�ײ� */ + /* 本文が一文字ずつ表示されるように glyph の順番を入れかえ、グループ化 */ vector<TextGlyph> save; save.assign(data->begin()+str_firstpos, data->end()); iterator it_str = save.begin(); @@ -258,13 +258,13 @@ void TextGlyphStreamHelper::SetGroup(Tex void TextGlyphStreamHelper::AdjustPosition(int xstart_add, int xend_add, int y_add, TextGlyphStreamHelper::iterator begin, TextGlyphStreamHelper::iterator end) { iterator it; - /* ʸ����������� */ + /* 文字数を数える */ int total_count = 0; for (it = begin; it != end; it++) { if (it->flag & TextGlyph::Group) continue; total_count++; } - /* ʸ���֤Υ���åפ��ѹ� */ + /* 文字間のギャップを変更 */ int incr = 0; if (total_count != 1) incr = (xend_add - xstart_add) * 256 / (total_count-1); int cur = xstart_add * 256; @@ -278,7 +278,7 @@ void TextGlyphStreamHelper::AdjustPositi } void TextGlyphStreamHelper::CalcHeight(int& ascent_r, int& descent_r, TextGlyphStreamHelper::iterator begin, TextGlyphStreamHelper::iterator end) { iterator it; - /* ����� descent, ascent ��� */ + /* 最大の descent, ascent を計算 */ int ascent = 0; int descent = 0; for (it = begin; it != end; it++) { @@ -357,7 +357,7 @@ void TextHorizLayout::SetName(void) { Iterator it; tab_width = 0; - /* ��Ƭ��̾���ʤ顢�������� */ + /* 行頭が名前なら、処理開始 */ for (; pos != end; pos++) { if (pos->type == TextElem::escape || pos->type == TextElem::glyph) break; int x = 0; @@ -366,7 +366,7 @@ void TextHorizLayout::SetName(void) { if (pos->type != TextElem::escape || pos->impl.Escape.type != TextElem::name_start) return; - /* ̾���åȤ�����Ƭ�Ρ֤�ʬ��ޤ�ƥ����������ꤹ�� */ + /* 名前をセットし、行頭の「の分を含めてタブ幅を設定する */ pos++; for (it = pos; it != end; it++) { if (it->type == TextElem::escape && it->impl.Escape.type == TextElem::name_end) break; @@ -377,9 +377,9 @@ void TextHorizLayout::SetName(void) { pos++; helper.SetGroup(data->begin() + line_firstpos, data->end()); - // ��Ƭ�Ρ�ʬ���� + // 行頭の「分を開ける try { - tab_width += helper.CharWidth(0xa1d6); /* �� */ + tab_width += helper.CharWidth(0xa1d6); /* 「 */ } catch(...) {} return; @@ -387,7 +387,7 @@ void TextHorizLayout::SetName(void) { void TextHorizLayout::SetLineHead(void) { - /* ��Ƭ�� �֤ʤɤ��� */ + /* 行頭は 「などか? */ for (; pos != end; pos++) { if (pos->type == TextElem::escape || pos->type == TextElem::glyph) break; @@ -396,7 +396,7 @@ void TextHorizLayout::SetLineHead(void) } if (pos->type != TextElem::glyph || Kinsoku(pos->impl.Glyph.code) != KinsokuHead) return; - /* �֤ʤΤǡ��������� */ + /* 「なので、処理する */ if (tab_width != 0) tab_width -= helper.CharWidth(pos->impl.Glyph.code); int line_firstpos = data->size(); pos = helper.Add(tab_width, pos, pos+1); @@ -406,7 +406,7 @@ void TextHorizLayout::SetLineHead(void) void TextHorizLayout::MakeLine(int line_start, int width, vector<int>& lineheights) { int x = tab_width; - /* �ޤ�����ʸ�����褹�� */ + /* まず、全文字描画する */ while(pos != end) { pos = helper.Add(x, pos, end); if (pos->type == TextElem::escape && pos->impl.Escape.type == TextElem::ruby_start) { @@ -417,7 +417,7 @@ void TextHorizLayout::MakeLine(int line_ if (pos->impl.Escape.type != TextElem::ruby_start) pos++; } } - /* �Ԥ�ʬ�䤷�Ƥ��� */ + /* 行に分割していく */ TextGlyphStream::iterator it_start = data->begin() + line_start; TextGlyphStream::iterator it_end = data->end(); TextGlyphStream::iterator it = it_start; @@ -426,7 +426,7 @@ void TextHorizLayout::MakeLine(int line_ int xstart = tab_width; int xend = width; while(it != it_end) { - // ���ιԤν�������� + // この行の終わりを決める bool is_ruby = false; TextGlyphStream::iterator it_line_start = it; for (; it != it_end; it++) { @@ -434,21 +434,21 @@ void TextHorizLayout::MakeLine(int line_ if (it->flag & TextGlyph::Group) is_ruby = true; if (!(it->flag & TextGlyph::Group)) group_head = it; } - // ��ʿ��ư���礭������롣�ǥե���Ȥǥ��ְ��֤ޤ��᤹ + // 水平移動の大きさを決める。デフォルトでタブ位置まで戻す int xadd_start = -xstart + tab_width; int xadd_end = xadd_start; - // it == ���Ԥ���Ƭ�ʤΤǡ����Ԥ��������᤹ - // �������� �����ʸ����ɽ�����ݾ� + // it == 次行の先頭なので、今行の末尾へ戻す + // ただし、 最低一文字の表示は保証 if (it != it_line_start && it != it_line_start+1 && it != it_end) it--; if (it != it_end) { - // ���롼�ײ�����Ƥ���ʸ���ǽ�λ�����顢����ʸ�����᤹ + // グループ化されている文字で終了したら、前の文字に戻す if (it->flag & TextGlyph::Group) it = group_head; - // ������Ƭ��§ʸ���ʤ餳�ιԤ������ + // 次が行頭禁則文字ならこの行に入れる if ( (it+1) != it_end && (it+1)->flag & TextGlyph::Kinsoku) it++; - // ��ư�����礭������� - // ��ü������������ʸ���ʤ�Ⱦʸ��ʬ�����ͤ��Ф� + // 移動する大きさを決める + // 行端ぞろえ、行末文字なら半文字分だけ突き出る int glyph_xend = it->x + it->glyph->advance.x; - if (it != it_line_start && (it-1)->flag & TextGlyph::Group) { // ���롼�ײ�ʸ���ξ�硢��ʸ�����⸫�� + if (it != it_line_start && (it-1)->flag & TextGlyph::Group) { // グループ化文字の場合、1文字前も見る if (glyph_xend < (it-1)->x + (it-1)->glyph->advance.x) glyph_xend = (it-1)->x + (it-1)->glyph->advance.x; } @@ -458,7 +458,7 @@ void TextHorizLayout::MakeLine(int line_ } if (it != it_end) { it->flag = TextGlyph::Flag(it->flag | TextGlyph::LineEnd); - it++; // it == ���Ԥ���Ƭ�� + it++; // it == 次行の先頭へ } int ascent, descent; helper.CalcHeight(ascent, descent, it_start, it); @@ -472,11 +472,11 @@ void TextHorizLayout::MakeLine(int line_ cur_y += ascent + descent + line_skip; lineheights.push_back(ascent+descent+line_skip); - /* ���ιԤ� */ + /* 次の行へ */ if (it != it_end) { it_start = it; group_head = it_start; - /* ��ʸ���ܤ����롼�ײ�����Ƥ���С����롼�פ���Ƭʸ���ˤ��� */ + /* 1文字目がグループ化されていれば、グループの先頭文字にする */ xstart = it->x; if (it->flag & TextGlyph::Group) { TextGlyphStream::iterator jit; @@ -545,7 +545,7 @@ int TextGlyphStream::height(void) { if (ymax < y) ymax = y; if (it == begin()) break; if (it->flag & TextGlyph::LineEnd) { - if (!(it->flag & TextGlyph::PhraseEnd)) break; // PhraseEnd �ϺǸ��ʸ�� + if (!(it->flag & TextGlyph::PhraseEnd)) break; // PhraseEnd は最後の文字 } } return ymax + 1;
--- a/font/font_peer_ft2.cc +++ b/font/font_peer_ft2.cc @@ -228,8 +228,8 @@ bool PeerFt2::GlyphCreate(unsigned int c slot = face->glyph; if (slot) { // if (! FT_Load_Glyph(face, index, FT_LOAD_DEFAULT)) { - // BITMAP ���� �ʤ��� render ���Ƥ���ʤ��ġ� - // LOAD_DEFAULT �Ǥ⡢�����б������ɤ��դ����Τǰ��������� + // BITMAP だと なぜか render してくれない…… + // LOAD_DEFAULT でも、下に対応コードを付けたので一応は大丈夫 if (! FT_Load_Glyph(face, index, FT_LOAD_NO_BITMAP)) FT_Render_Glyph(slot, ft_render_mode_normal); } @@ -252,7 +252,7 @@ bool PeerFt2::GlyphCreate(unsigned int c glyph->bitmap.buffer = new unsigned char[bmsize]; memcpy(glyph->bitmap.buffer, slot->bitmap.buffer, bmsize); } -// �ʤ��� Render �����Τ� MONO �ʤ��Ȥ�����ġ� +// なぜか Render したのに MONO なことがある…… /* for freetype < 2.1.3, use ``ft_pixel_mode_mono'' */ if (slot->bitmap.pixel_mode == ft_pixel_mode_mono) { int i, j;
--- a/font/font_peer_x11.cc +++ b/font/font_peer_x11.cc @@ -61,8 +61,8 @@ inline int read_little_endian_int(const ** ** Fontinfo / FontSetInfo ** -** fontset �������� pixel size ����� -** �̤�fontset��������뤿��Υ��饹 +** fontset から特定 pixel size を持つ +** 別のfontsetを作成するためのクラス */ struct FontInfo { std::map<int, string> fontlist; @@ -83,7 +83,7 @@ struct FontSetInfo { ** */ FontInfo::FontInfo(Display* display, const char* fontname_orig) { - /* �ե���Ȥ��礭���ط��ξ����õ� */ + /* フォントの大きさ関係の情報を消去 */ int i; char* fontname = new char[strlen(fontname_orig)+50]; int minus_count = 0; @@ -102,13 +102,13 @@ FontInfo::FontInfo(Display* display, con } if (! is_skip) fontname[fc++] = fontname_orig[i]; } - /* �ե���Ⱦ�������� */ + /* フォント情報を得る */ fontname[fc] = 0; int count; char** fontnamelist = XListFonts(display, fontname, 100, &count); for (i=0; i<count; i++) { char* curfont = fontnamelist[i]; - /* fontname ���� pixel size ��������� */ + /* fontname から pixel size 情報を得る */ int j; int minus_count = 0; for (j=0; curfont[j] != 0; j++) { @@ -122,7 +122,7 @@ FontInfo::FontInfo(Display* display, con } } } - /* �����˼��Ԥ�����硢�Ȥꤢ���� fontname ������Ƥ��� */ + /* 検索に失敗した場合、とりあえず fontname を入れておく */ if (fontlist.find(0) == fontlist.end()) { fontlist[0] = string(fontname); } @@ -132,15 +132,15 @@ FontInfo::FontInfo(Display* display, con } string FontInfo::Search(int pixsize) { int i; - /* pixsize �˶ᤤ�ե���Ȥ�(�����)���� */ + /* pixsize に近いフォントが(あれば)帰す */ if (fontlist.find(pixsize) != fontlist.end()) return fontlist[pixsize]; for (i=1; i<4; i++) { if (fontlist.find(pixsize-i) != fontlist.end()) return fontlist[pixsize-i]; if (fontlist.find(pixsize+i) != fontlist.end()) return fontlist[pixsize+i]; } - /* ���Ĥ���ʤ���fontlist[0] ��ù����Ƶ��� */ - /* pt/xres/yres �ʤɤΥե�����ɤ� '-0-' �Ȥ����Τ������ '-*-'���Ѵ� - ** pixsize ��Ϳ����줿 pixsize �ˤ��� + /* 見つからない:fontlist[0] を加工して帰す */ + /* pt/xres/yres などのフィールドに '-0-' というのがあれば '-*-'に変換 + ** pixsize は与えられた pixsize にする */ string basefont_s = fontlist[0]; const char* basefont = basefont_s.c_str(); @@ -246,7 +246,7 @@ PeerX11::PeerX11(const char* fontname, i string err = "XKFont::PeerX11:PeerX11() : No supported Color mode of X : neither TrueColor nor DirectColor"; throw std::runtime_error(err); } - /* ���ν���� */ + /* 色の初期化 */ white = visual->red_mask | visual->green_mask | visual->blue_mask; black = 0; if (visual->green_mask == 0) { @@ -266,7 +266,7 @@ PeerX11::PeerX11(const char* fontname, i XSupportsLocale(); //FIXME: er... yes? - /* font �ɤ߹��� */ + /* font 読み込み */ FontSetInfo fsinfo(display,fontname); string fontset_name = fsinfo.Search(fontsize); char** missing_cl; @@ -306,7 +306,7 @@ printf("locale %s\n",XLocaleOfOM(XOMOfOC ascent = MAX(ascent, font_structs[i]->ascent); } - /* �����Ѥ� pixmap ����� */ + /* 描画用の pixmap を作成 */ XGCValues gc_values; unsigned int gc_values_mask; gc_values.function = GXcopy; @@ -321,7 +321,7 @@ printf("locale %s\n",XLocaleOfOM(XOMOfOC canvas = XCreatePixmap(display, w, width, height, DefaultDepth(display, scr)); - /* �����ž���Ѥ� image �κ��� */ + /* イメージ転送用の image の作成 */ int ignore; use_shm = false; if (XShmQueryExtension(display) == True) {
--- a/font/text_stream.cc +++ b/font/text_stream.cc @@ -223,15 +223,15 @@ void TextStream::RemoveName(char* name, Iterator it; for (it = container.begin(); it != container.end(); it++) { if (it->type == TextElem::escape && it->impl.Escape.type == TextElem::name_start) { - // ��Ƭ��̾���� + // 行頭の名前? int pt = it - container.begin(); Iterator name_start = it; for (; it != container.end(); it++) { if (it->type == TextElem::escape && it->impl.Escape.type == TextElem::name_end) break; } if (it != container.end()) { - // ̾�������Ĥ��ä��ΤǺ�� - if (name) { // ��¸�褬����ʤ���¸���� + // 名前が見つかったので削除 + if (name) { // 保存先があるなら保存する Iterator name_end = it; int pos = 0; namelen--; @@ -247,7 +247,7 @@ void TextStream::RemoveName(char* name, } } name[pos] = 0; - name = 0; // �ǽ�˽Ф�̾���Τ���¸���� + name = 0; // 最初に出た名前のみ保存する } it++; container.erase(name_start, it); @@ -341,7 +341,7 @@ std::string TextStream::Save(void) { *buf++ = (code/0x10) + 'A'; *buf++ = (code%0x10) + 'A'; } else { - code = codeconv_euc_to_sjis(code); // save file �δ��������ɤ�SJIS + code = codeconv_euc_to_sjis(code); // save file の漢字コードはSJIS *buf++ = code/256; *buf++ = code%256; }
--- a/music2/koedec.cc +++ b/music2/koedec.cc @@ -39,11 +39,11 @@ using namespace std; /********************************************* ** -** FindKoe -- RealLive�β������������ֽ��� +** FindKoe -- RealLiveの音声アーカイブ処理 ** */ -/* ���ե�����Υ����������ѤΥ���å��� */ +/* 声ファイルのアーカイブ用のキャッシュ */ #define koe_cache_size 7 struct AvgKoeTable { int koe_num; @@ -101,7 +101,7 @@ AvgKoeInfo AvgKoeCache::Find(int file_nu list<AvgKoeHead>::iterator it; it = find(cache.begin(), cache.end(), file_number); if (it == cache.end()) { - /* ������ head ���� */ + /* 新たに head を作る */ char fname[100]; KoeType type = koe_unknown; sprintf(fname, "z%03d.koe", file_number); @@ -145,11 +145,11 @@ AvgKoeInfo AvgKoeCache::Find(int file_nu if (cache.size() >= koe_cache_size) cache.pop_back(); it = cache.begin(); } - if (it->file_number != file_number) return info; // �ֹ椬�������� + if (it->file_number != file_number) return info; // 番号がおかしい AvgKoeTable* table = it->Find(index); //FIXME: table == NULL ? - if (table == 0) return info; // index �����դ���ʤ� - // info ��������� + if (table == 0) return info; // index が見付からない + // info を作成する info.length = table->length; info.offset = table->offset; info.rate = it->rate; @@ -179,8 +179,8 @@ AvgKoeHead::AvgKoeHead(FILE* _s, int _fi rate = 22050; type = _type; if (stream == NULL) return; - /* header �ɤ߹��� */ - if (type == koe_nwk) { // ���������� : .nwk file + /* header 読み込み */ + if (type == koe_nwk) { // 新しい形式 : .nwk file rate = 44100; fread(head, 4, 1, stream); int table_len = read_little_endian_int(head); @@ -215,7 +215,7 @@ AvgKoeHead::AvgKoeHead(FILE* _s, int _fi int table_len = read_little_endian_int(head+0x10); rate = read_little_endian_int(head+0x18); if (rate == 0) rate = 22050; - /* table �ɤ߹��� */ + /* table 読み込み */ table.reserve(table_len); char* buf = new char[table_len*8]; fread(buf, table_len, 8, stream); @@ -244,7 +244,7 @@ AvgKoeTable* AvgKoeHead::Find(int koe_nu /********************************************* ** -** MakeWavHeader : koe �ե������ wave header ���դ��� +** MakeWavHeader : koe ファイルに wave header を付ける ** */ @@ -278,14 +278,14 @@ const char* MakeWavHeader(int rate, int /********************************************* ** -** decode_koe -- �����ǡ���Ÿ�� +** decode_koe -- 音声データ展開 ** */ extern char* decode_koe(AvgKoeInfo info, int* len); -/* 8bit -> 16bit �ؤ��Ѵ��ơ��֥롣����� signed short ���� -** �Ȥꤢ���� unsigned �ǰ��äƤ��� +/* 8bit -> 16bit への変換テーブル。本来は signed short だが +** とりあえず unsigned で扱っている */ unsigned short koe_8bit_trans_tbl[256] = { @@ -323,9 +323,9 @@ unsigned short koe_8bit_trans_tbl[256] = 0x707f,0x7261,0x7447,0x7631,0x781f,0x7a11,0x7c07,0x7fff }; -/* ADPCM����������ʤ��餷����������DPCM�Υʤ�ơ��֥롣 -** ��ư��������㤤���������256byte���ä��� -** �ơ��֥�Ǥ�����ʤ��Ǥ��� +/* ADPCM・・・じゃないらしい。ただのDPCMのナめたテーブル。 +** 自動生成すりゃいいんだけど256byteだったら +** テーブルでも問題ないでしょ */ char koe_ad_trans_tbl[256] = { @@ -368,7 +368,7 @@ char* decode_koe(AvgKoeInfo info, int* d fseek(info.stream, -20, SEEK_CUR); return decode_koe_ogg(info, dest_len); } - /* avg32 �����ǡ���Ÿ�� */ + /* avg32 の声データ展開 */ table = (char*)malloc(info.length*2); fseek(info.stream, info.offset, SEEK_SET); fread(table, 2, info.length, info.stream); @@ -376,7 +376,7 @@ char* decode_koe(AvgKoeInfo info, int* d all_len = 0; for (i=0; i < info.length; i++) all_len += read_little_endian_short(table + i*2); - /* �ǡ����ɤ߹��� */ + /* データ読み込み */ src_orig = (unsigned char*) malloc(all_len); dest_orig = (unsigned short*)malloc(info.length * 0x1000 + 0x2c); if (src_orig == NULL || dest_orig == NULL) return NULL; @@ -388,13 +388,13 @@ char* decode_koe(AvgKoeInfo info, int* d dest = dest_orig + 0x2c; /* memset(dest_data, 0, table_len * 0x1000); */ - /* Ÿ�� */ + /* 展開 */ for (i=0; i<info.length; i++) { int slen = read_little_endian_short(table+i*2); if (slen == 0) { // do nothing memset(dest, 0, 0x1000); dest += 0x800; src += 0; - } else if (slen == 0x400) { // table �Ѵ� + } else if (slen == 0x400) { // table 変換 for (j=0; j<0x400; j++) { write_little_endian_short((char*)(dest+0), koe_8bit_trans_tbl[*src]); write_little_endian_short((char*)(dest+1), koe_8bit_trans_tbl[*src]);
--- a/music2/koedec_ogg.cc +++ b/music2/koedec_ogg.cc @@ -72,7 +72,7 @@ struct OggInfo { int offset; }; -/* ogg stream �ɤ߹����Ѥ� dummy callback */ +/* ogg stream 読み込み用の dummy callback */ static size_t ogg_readfunc(void* ptr, size_t size, size_t nmemb, void* datasource) { OggInfo* info = (OggInfo*)datasource; int pt = ftell(info->stream) - info->offset; @@ -110,8 +110,8 @@ static int fseek_wrap(FILE *f,ogg_int64_ extern char* decode_koe_ogg(AvgKoeInfo info, int* dest_len) { if (info.stream == NULL) return NULL; - // Voice �ե������ľ�ܻ��ꤹ��������ȥ���������Ƥ��ޤ��Τ� - // ɬ�פ���ʬ�����ڤ�Ф��� callback ��ͳ�ǵ��� + // Voice ファイルを直接指定すると全ストリームを再生してしまうので + // 必要な部分だけ切り出して callback 経由で帰す fseek(info.stream, info.offset, SEEK_SET); ov_callbacks callback; @@ -151,7 +151,7 @@ extern char* decode_koe_ogg(AvgKoeInfo i } while(1); ov_clear(&vf); - *dest_len = cur; // ���ޤ�����С��ȤǤ��Ƥ�Τ��ʤ��ġ� + *dest_len = cur; // うまくコンバートできてるのかなあ…… const char* header = MakeWavHeader(info.rate, channels, 2, cur); memcpy(out, header, 0x2c);
--- a/music2/movie.cc +++ b/music2/movie.cc @@ -26,7 +26,7 @@ */ /* - * movie.cc smpeg �ˤ��ư����� + * movie.cc smpeg による動画再生 * */
--- a/music2/music.cc +++ b/music2/music.cc @@ -25,7 +25,7 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* music.cc SDL_mixer ���Ѥ������ں����롼���� */ +/* music.cc SDL_mixer を用いた音楽再生ルーチン */ #include <string.h> @@ -94,11 +94,11 @@ void MuSys::PlayCDROM(char* name, int pl if (track == -1) track = atoi(name); if (config->track_name.WaveTrack(name) != NULL) strncpy(wave, config->track_name.WaveTrack(name), 127); - if (wave[0] == 0 && track != 0) { /* DSTRACK �����Ĥ���ʤ���硢CDTRACK����Ѥ��� */ + if (wave[0] == 0 && track != 0) { /* DSTRACK が見つからない場合、CDTRACKを使用する */ sprintf(wave, "audio_%02d", track); } if (wave == 0) return; - // BGM ���� + // BGM 再生 if (!pcm_enable) return; if (play_count == 0) bgm_start(wave, -1); @@ -187,7 +187,7 @@ void MuSys::FinalizeMusic(void) /************************************************************************* ** -** �ե������ɤ߹��� / �������ޥ�ɸƤӽФ� +** ファイル読み込み / 外部コマンド呼び出し */ struct WavChunk { @@ -205,7 +205,7 @@ void WavChunk::callback(void *userdata, { WavChunk* chunk = (WavChunk*)userdata; int count; - if (chunk->loop_pt == -2) { // ������λ�� + if (chunk->loop_pt == -2) { // 再生終了後 memset(stream, 0, len); return; } @@ -214,8 +214,8 @@ void WavChunk::callback(void *userdata, count = chunk->wav->Read( (char*)stream_dup, 4, len/4); if (count != len/4) { - // �Ǹ�ޤǺ������� - if (chunk->loop_pt == -1) { // ��λ + // 最後まで再生した + if (chunk->loop_pt == -1) { // 終了 chunk->loop_pt = -2; memset(stream_dup+count*4, 0, len-count*4); } else { @@ -227,9 +227,9 @@ void WavChunk::callback(void *userdata, int cur_vol = (*chunk->volmod)*SDL_MIX_MAXVOLUME/255; if (fadetime_total) { - // ���ڤ������ (fade out) + // 音楽を停止中 (fade out) int count_total = fadetime_total*(WAVFILE::freq/1000); - if (fadecount > count_total || fadetime_total == 1) { // ������� + if (fadecount > count_total || fadetime_total == 1) { // 音楽停止 chunk->loop_pt = -2; memset(stream, 0, len); delete[] stream_dup; @@ -262,7 +262,7 @@ fprintf(stderr,"bgm start %s\n",path); Mix_PauseMusic(); Mix_HaltMusic(); Mix_HookMusic(0,0); - /* ���˺������Ƥ����Τ�λ */ + /* 前に再生していたのを終了 */ if (wav_playing.wav != NULL) { delete wav_playing.wav; wav_playing.wav = NULL; @@ -281,7 +281,7 @@ void effec_start(int chn, const char* pa if (!mu->pcm_enable) return; SDL_RWops* op = OpenSDLRW(path); - if (op == NULL) { // �ե����뤬���դ���ʤ� + if (op == NULL) { // ファイルが見付からない return; } Mix_Pause(chn); @@ -310,7 +310,7 @@ void MuSys::PlayKoe(const char* path) { int chn = MIX_PCM_KOE; Mix_Pause(chn); - Mix_HaltChannel(chn); // ����� RWop �����������Ϥ��� + Mix_HaltChannel(chn); // これで RWop が解放されるはず… if (mu->play_chunk[chn] != NULL) { Mix_FreeChunk(mu->play_chunk[chn]); mu->play_chunk[chn] = NULL; @@ -341,13 +341,13 @@ AvgKoeInfo OpenKoeFile(const char* path) info.stream = NULL; info.length = 0; info.offset = 0; - if (isdigit(path[0]) && strchr(path,'.') == NULL) { // ���� (��ĥ�����ʤ�) - /* avg32 �����β������������֤Υ���å���� */ + if (isdigit(path[0]) && strchr(path,'.') == NULL) { // 数値 (拡張子等なし) + /* avg32 形式の音声アーカイブのキャッシュを検索 */ int pointer = atoi(path); int file_no = pointer / radix; int index = pointer % radix; info = FindKoe(file_no, index); - } else { // �ե����� + } else { // ファイル int length; ARCINFO* arcinfo = FileSearcher::GetInstance()->Find(FileSearcher::KOE, path, ".WPD"); if (arcinfo == NULL) return info; @@ -362,7 +362,7 @@ AvgKoeInfo OpenKoeFile(const char* path) } static SDL_RWops* OpenSDLRW(const char* path) { - /* �ޤ� wav �ե������õ�� */ + /* まず wav ファイルを探す */ FileSearcher* file_searcher = FileSearcher::GetInstance(); ARCINFO* info = file_searcher->Find(FileSearcher::WAV, path, ".wav"); if (info == NULL) { @@ -392,7 +392,7 @@ static SDL_RWops* OpenSDLRW(const char* } static WAVFILE* OpenWaveFile(const char* path) { - /* �ޤ� wav �ե������õ�� */ + /* まず wav ファイルを探す */ FileSearcher* file_searcher = FileSearcher::GetInstance(); ARCINFO* info = file_searcher->Find(FileSearcher::WAV, path, ".wav"); if (info == NULL) info = file_searcher->Find(FileSearcher::BGM, path, "wav"); @@ -404,7 +404,7 @@ static WAVFILE* OpenWaveFile(const char* WAVFILE* w = WAVFILE::MakeConverter(new WAVFILE_Stream(f, size)); return w; } - /* ���� nwa �ե����� */ + /* 次に nwa ファイル */ info = file_searcher->Find(FileSearcher::WAV, path, ".nwa"); if (info == NULL) info = file_searcher->Find(FileSearcher::BGM, path, "nwa"); if (info != NULL) { @@ -416,7 +416,7 @@ static WAVFILE* OpenWaveFile(const char* return w; } - /* ���� mp3 �ե����� */ + /* 次に mp3 ファイル */ info = file_searcher->Find(FileSearcher::WAV, path, ".mp3"); if (info == NULL) info = file_searcher->Find(FileSearcher::BGM, path, "mp3"); if (info != NULL) { @@ -431,7 +431,7 @@ static WAVFILE* OpenWaveFile(const char* delete w; } - /* ���� ogg �ե����� */ + /* 次に ogg ファイル */ info = file_searcher->Find(FileSearcher::WAV, path, ".ogg"); if (info == NULL) info = file_searcher->Find(FileSearcher::BGM, path, "ogg"); if (info != NULL) {
--- a/music2/nwatowav.cc +++ b/music2/nwatowav.cc @@ -1,24 +1,24 @@ -/* nwatowav : Visual Arts �ϤΥ�����Υǥ�ǻȤ��� nwa ������ -** �ե������ wav �������Ѵ����� +/* nwatowav : Visual Arts 系のゲームのデモで使われる nwa 形式の +** ファイルを wav 形式に変換する ** ** compile : gcc -O2 -o nwatowav nwatowav.cc ** usage : nwatowav [nwa-file [outfile]] ** nwatowav [nwk-file [outfile]] -** example : nwatowav HM06.nwa HM06.wav # BGM�ե����롣HM06.wav ��Ÿ������� -** nwatowav z2813.nwk z2813 # �����ե����롣 z2813-100.wav �ʤɤΥե�����̾��Ÿ������� -** nwatowav z0513.ovk z0513 # �����ե����롣 z0513-100.ogg �ʤɤΥե�����̾��Ÿ������� +** example : nwatowav HM06.nwa HM06.wav # BGMファイル。HM06.wav に展開される +** nwatowav z2813.nwk z2813 # 音声ファイル。 z2813-100.wav などのファイル名で展開される +** nwatowav z0513.ovk z0513 # 音声ファイル。 z0513-100.ogg などのファイル名で展開される ** ** -** 2004.5.19 ��������<s1100089@u-aizu.ac.jp> ���� CLANNAD ��̵����nwa�������б����� -** �ѥå����������Τǡ�Ŭ�Ѥ��ޤ��������꤬�Ȥ��������ޤ��� -** 2006.9.10 �����奢�ե����פβ����ե�������� (complevel = 5) �ݡ��� -** .nwk �Ȥ�����ĥ�Ҥ���ĥե������������Ȳ����ե�����Ȥ��� -** ��ᡢʬ�䤷��Ÿ������褦�ˤ��� -** 2007.7.28 �֥�ȥ�Х����������פβ����ե�������� (*.ovk; ogg Ϣ�뷿) -** �ݡ��ȡ�.ovk �Ȥ�����ĥ�Ҥ��ĥե������������� -** �����ե�����Ȥ��Ʋ�ᡢʬ�䤷��Ÿ������褦�ˤ��� -** �֥�ȥ�Х����������פ�BGM�ե������¿�̤ΥΥ������������� -** �����ʥ�������̤ν�������ɬ�פ��ä��� +** 2004.5.19 小松さん<s1100089@u-aizu.ac.jp> から CLANNAD の無圧縮nwa形式に対応する +** パッチをいただいたので、適用しました。ありがとうございます。 +** 2006.9.10 「智代アフター」の音声ファイル形式 (complevel = 5) をサポート +** .nwk という拡張子を持つファイルを受け取ると音声ファイルとして +** 解釈、分割して展開するようにする +** 2007.7.28 「リトルバスターズ!」の音声ファイル形式 (*.ovk; ogg 連結型) +** をサポート。.ovk という拡張子をもつファイルを受け取ると +** 音声ファイルとして解釈、分割して展開するようにする +** 「リトルバスターズ!」のBGMファイルに多量のノイズが乗る問題も +** 解決(ランレングス圧縮の処理が不必要だった) */ /* @@ -28,14 +28,14 @@ * Redistribution and use in source and binary forms, with or without * modification, are permitted. * - * ���Υץ������κ�Ԥ� jagarl �Ǥ��� + * このプログラムの作者は jagarl です。 * - * ���Υץ�����ࡢ�ڤӥ���ѥ���ˤ�ä����������Х��ʥ�� - * �ץ��������ѹ����롢���ʤ��ˤ�����餺�����۲�ǽ�Ǥ��� - * ���κݡ��嵭 Copyright ɽ�����ݻ�����ʤɤξ��ϲݤ��� - * �����б������ݤʤΤǥХ��������������Ϣ���� - * �ʤɤ�ɬ�פ⤢��ޤ��������ΰ�����ή�Ѥ��뤳�Ȥ�ޤᡢ - * ����ͳ�ˤ��Ȥ����������� + * このプログラム、及びコンパイルによって生成したバイナリは + * プログラムを変更する、しないにかかわらず再配布可能です。 + * その際、上記 Copyright 表示を保持するなどの条件は課しま + * せん。対応が面倒なのでバグ報告を除き、メールで連絡をする + * などの必要もありません。ソースの一部を流用することを含め、 + * ご自由にお使いください。 * * THIS SOFTWARE IS PROVIDED BY KAZUNORI 'jagarl' UENO ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE @@ -54,9 +54,9 @@ /******************************************** ** -** nwa �ե����ޥåȤˤĤ��� +** nwa フォーマットについて ** -** ���ΤȤ��Ƥϰʲ��ι�¤����� +** 全体としては以下の構造を持つ ** NWA Header ** data offset index ** data block<0> @@ -64,104 +64,104 @@ ** ... ** data block<N> ** -** NWA Header: �ե�������Ƭ���� 44 bytes -** magic number �ʤɤϤʤ��Τ�nwa �ե����뤫�� -** �ǡ���������������Ƚ�Ǥ���ɬ�פ����� -** �ǡ��������� little endian �ǡ� -** short(signed 2byte)�ޤ��� int(signed 4byte) �Ǥ��롣 +** NWA Header: ファイル先頭から 44 bytes +** magic number などはないのでnwa ファイルかは +** データの整合性から判断する必要がある +** データは全て little endian で、 +** short(signed 2byte)または int(signed 4byte) である。 ** -** +00 short channel ��(1/2) -** +02 short sample ��Ĥ������ bit ��(16) -** +04 int ���ȿ�(���ä�����Υǡ�����) -** +08 int ���̥�٥롧-1~5.2�ǺǾ��Υǡ�����0�Ǻ����������(-1��̵����raw�ǡ����Ȥߤʤ����) +** +00 short channel 数(1/2) +** +02 short sample 一つあたりの bit 数(16) +** +04 int 周波数(一秒あたりのデータ数) +** +08 int 圧縮レベル:-1~5.2で最小のデータ、0で最大の復元度(-1は無圧縮rawデータとみなされる) ** +12 int ? -** +16 int �֥��å��� -** +20 int Ÿ����Υǡ������礭��(�Х���ñ��) -** +24 int ���̻��Υǡ������礭��(nwa �ե�������礭�����Х���ñ��) -** +28 int ����ץ����Ÿ����Υǡ�����(16bit data�ʤ� short ñ��==����ץ�ñ�̤Υǡ������礭��) -** +32 int �ǡ������֥��å���Ÿ���������Υ���ץ�ñ�̤Υǡ����� -** +36 int �ǽ��֥��å���Ÿ���������Υ���ץ�ñ�̤Υǡ����� +** +16 int ブロック数 +** +20 int 展開後のデータの大きさ(バイト単位) +** +24 int 圧縮時のデータの大きさ(nwa ファイルの大きさ。バイト単位) +** +28 int サンプル数:展開後のデータ数(16bit dataなら short 単位==サンプル単位のデータの大きさ) +** +32 int データ1ブロックを展開した時のサンプル単位のデータ数 +** +36 int 最終ブロックを展開した時のサンプル単位のデータ数 ** +40 int ? ** ** data offset index -** ���֥��å��� x 4 byte �Υǡ��� -** ���줾�� int �Υǡ��������֥��å���³���Ƥ��� +** 全ブロック数 x 4 byte のデータ +** それぞれ int のデータが全ブロック数続いている ** -** �ǡ����֥��å�����Ƭ��ؤ��ե�������Ƭ����ΰ���(���ե��å�) -** ����Ǽ����Ƥ��� +** データブロックの先頭を指すファイル先頭からの位置(オフセット) +** が格納されている ** ** data block -** Ĺ���ϲ��ѡ�Ÿ�����뤳�Ȥǰ�����礭�����ĥǡ�����Ÿ������롣 -** �ǡ�����DPCM�������� PCM �ǡ����� a,b,c �ʤ�� (a),b-a, c-b �� -** ���ä���ʬ�ǡ�����������3-5bit,�ؿ�3bit�η�������¸����Ƥ��롣 -** ���Ū�ˡ�16bit �Υǡ�����¿���ξ�� 6-8bit �dz�Ǽ����롣 -** �����Υӥåȿ��ϰ��̥�٥�0��5bit�����̥�٥�2��3bit�Ȥʤ롣 -** �ʲ������̥�٥�2�ξ��ˤĤ����ä�ʤ�롣 -** ��Υ��ξ�硧 -** +00 short �֥��å���κǽ�Υǡ��� +** 長さは可変。展開することで一定の大きさをもつデータに展開される。 +** データはDPCM形式。元 PCM データが a,b,c ならば (a),b-a, c-b と +** いった差分データが、仮数3-5bit,指数3bitの形式で保存されている。 +** 結果的に、16bit のデータが多くの場合 6-8bit で格納される。 +** 仮数のビット数は圧縮レベル0で5bit、圧縮レベル2で3bitとなる。 +** 以下、圧縮レベル2の場合について話を進める。 +** モノラルの場合: +** +00 short ブロック内の最初のデータ ** +02- bit stream -** ���ƥ쥪�ξ�硧 -** +00 short ��(?)�����ͥ�κǽ�Υǡ��� -** +02 short ��(?)�����ͥ�κǽ�Υǡ��� +** ステレオの場合: +** +00 short 左(?)チャンネルの最初のデータ +** +02 short 右(?)チャンネルの最初のデータ ** +04- bit stream ** -** ��ʬ�ǡ��������٤��⤯�ʤ��Τdzƥ֥��å�����Ƭ�� -** ���Τʥǡ����ˤ�����������(��) +** 差分データの精度が高くないので各ブロックの先頭で +** 正確なデータにより補正される(?) ** ** bit stream ** little endian -** +0 - +2 : �ؿ� -** +3 - +5 : ���� -** �η������㤨�� a,b,c �Ȥ���8bit�ǡ���������С� -** a&0x07 : �ǡ������λؿ� -** (a>>3)&0x07 : �ǡ������β���(signed ; -** ((b<<2)|(a>>6))&0x07 : �ǡ������λؿ� -** (b>>1)&0x07 : �ǡ������β��� -** �Ȥʤ롣 -** ���������ؿ����ͤˤ�겾����bit�����Ѳ����뤳�Ȥ����롣 -** �ؿ� = 1 - 6 �ξ�硧 -** a=�ؿ���b=������p=���Υǡ����Ȥ��ơ�����Υǡ���d �� -** b��2bit�ܤ�Ω�äƤ����硧 +** +0 - +2 : 指数 +** +3 - +5 : 仮数 +** の形式。例えば a,b,c という8bitデータがあれば、 +** a&0x07 : データ1の指数 +** (a>>3)&0x07 : データ1の仮数(signed ; +** ((b<<2)|(a>>6))&0x07 : データ2の指数 +** (b>>1)&0x07 : データ2の仮数 +** となる。 +** ただし、指数の値により仮数のbit数が変化することがある。 +** 指数 = 1 - 6 の場合: +** a=指数、b=仮数、p=前のデータとして、今回のデータd は +** bの2bit目が立っている場合: ** d = p - (b&3)<<(4+a) -** Ω�äƤʤ���硧 +** 立ってない場合: ** d = p + (b&3)<<(4+a) -** �ؿ� = 0 �ξ�硧������¸�ߤ��ʤ�(�ǡ�����3bit�Ȥʤ�) +** 指数 = 0 の場合:仮数は存在しない(データは3bitとなる) ** d = p -** �����奢�ե����פβ����ե����� (complevel == 5) �Ǥϥ���������Ѥ˻Ȥ��Ƥ��롣 -** �ؿ� = 7 -** ���� bit ��Ω�äƤ����硧 -** d = 0 (����̤����) -** (�ǡ�����4bit�Ȥʤ�) -** ���� bit ��Ω�äƤʤ���硧 +** 「智代アフター」の音声ファイル (complevel == 5) ではランレングス圧縮用に使われている。 +** 指数 = 7 +** 次の bit が立っている場合: +** d = 0 (現在未使用) +** (データは4bitとなる) +** 次の bit が立ってない場合: ** complevel = 0,1,2: -** ���� b = 6bit -** b �� 5bit �ܤ�Ω�äƤ����硧 +** 仮数 b = 6bit +** b の 5bit 目が立っている場合: ** d = p - (b&0x1f)<<(4+7) -** Ω�äƤʤ���硧 +** 立ってない場合: ** d = p + (b&0x1f)<<(4+7) -** (�ǡ�����10bit�Ȥʤ�) +** (データは10bitとなる) ** complevel = 3,4,5: -** ���� b = 8bit -** b �� 7bit �ܤ�Ω�äƤ����硧 +** 仮数 b = 8bit +** b の 7bit 目が立っている場合: ** d = p - (b&0x7f)<<9 -** Ω�äƤʤ���硧 +** 立ってない場合: ** d = p + (b&0x1f)<<9 -** (�ǡ�����10bit�Ȥʤ�) +** (データは10bitとなる) ** -** ���̥�٥뤬�ۤʤ��硢���Ȥ��а��̥�٥�==0�� -** �ؿ�==1~6��d�κǾ��bit��Ω�äƤ����� +** 圧縮レベルが異なる場合、たとえば圧縮レベル==0で +** 指数==1~6でdの最上位bitが立っている場合 ** d = p - (b&0x0f)<<(2+a) -** �ؿ�==7��d�κǾ��bit��Ω�äƤ����� +** 指数==7でdの最上位bitが立っている場合 ** d = p - (b&0x7f)<<(2+7) -** (b : 8bit�ʤΤǥǡ�����12bit�Ȥʤ�) -** �Τ褦�ˡ����٤������Ѳ�����褦�ˤʤäƤ��롣 +** (b : 8bitなのでデータは12bitとなる) +** のように、精度だけが変化するようになっている。 ** -** �إå��ɤ߹��ߤˤĤ��Ƥ�NWAData::ReadHeader()���� -** bit stream ����Υǡ���Ÿ���ˤĤ��Ƥ� NWADecode()���� +** ヘッダ読み込みについてはNWAData::ReadHeader()参照 +** bit stream からのデータ展開については NWADecode()参照 ************************************************************** */ -// #define NDEBUG /* �ʤ��� assert�����ä�����®�������� */ +// #define NDEBUG /* なぜか assertが入った方が速い、、、 */ #include <stdio.h> #include <stdlib.h> @@ -172,9 +172,9 @@ #ifdef WORDS_BIGENDIAN #error Sorry, This program does not support BIG-ENDIAN system yet. -/* �⤷ big endian �Υ����ƥ���б��������� -** �ʲ��� *_little_endian_* �ڤ� -** getbits() �ؿ����ѹ�����ɬ�פ����� +/* もし big endian のシステムに対応させる場合 +** 以下の *_little_endian_* 及び +** getbits() 関数を変更する必要がある */ #endif @@ -200,7 +200,7 @@ inline int getbits(const char*& data, in return ret & ((1<<bits)-1); /* mask */ } -/* ���ꤵ�줿�����Υإå���Ĥ��� */ +/* 指定された形式のヘッダをつくる */ const char* make_wavheader(int size, int channels, int bps, int freq) { static char wavheader[0x2c] = { 'R','I','F','F', @@ -227,7 +227,7 @@ const char* make_wavheader(int size, int return wavheader; } -/* NWA �� bitstreamŸ����ɬ�פȤʤ���� */ +/* NWA の bitstream展開に必要となる情報 */ class NWAInfo { private: int channels; @@ -256,7 +256,7 @@ template<class NWAI> void NWADecode(cons int i; int shift = 0; const char* dataend = data+datasize; - /* �ǽ�Υǡ������ɤ߹��� */ + /* 最初のデータを読み込む */ if (info.Bps() == 8) {d[0] = *data++; datasize--;} else /* info.Bps() == 16 */ {d[0] = read_little_endian_short(data); data+=2; datasize-=2;} if (info.Channels() == 2) { @@ -264,18 +264,18 @@ template<class NWAI> void NWADecode(cons else /* info.Bps() == 16 */ {d[1] = read_little_endian_short(data); data+=2; datasize-=2;} } int dsize = outdatasize / (info.Bps()/8); - int flip_flag = 0; /* stereo �� */ + int flip_flag = 0; /* stereo 用 */ int runlength = 0; for (i=0; i<dsize; i++) { if (data >= dataend) break; - if (runlength == 0) { // ���ԡ��롼����Ǥʤ��ʤ�ǡ����ɤ߹��� + if (runlength == 0) { // コピーループ中でないならデータ読み込み int type = getbits(data, shift, 3); - /* type �ˤ��ʬ����0, 1-6, 7 */ + /* type により分岐:0, 1-6, 7 */ if (type == 7) { - /* 7 : �礭�ʺ�ʬ */ - /* RunLength() ͭ������CompLevel==5, �����ե�����) �Ǥ�̵�� */ + /* 7 : 大きな差分 */ + /* RunLength() 有効時(CompLevel==5, 音声ファイル) では無効 */ if (getbits(data, shift, 1) == 1) { - d[flip_flag] = 0; /* ̤���� */ + d[flip_flag] = 0; /* 未使用 */ } else { int BITS, SHIFT; if (info.CompLevel() >= 3) { @@ -294,7 +294,7 @@ template<class NWAI> void NWADecode(cons d[flip_flag] += (b&MASK2)<<SHIFT; } } else if (type != 0) { - /* 1-6 : �̾�κ�ʬ */ + /* 1-6 : 通常の差分 */ int BITS, SHIFT; if (info.CompLevel() >= 3) { BITS = info.CompLevel()+3; @@ -311,9 +311,9 @@ template<class NWAI> void NWADecode(cons else d[flip_flag] += (b&MASK2)<<SHIFT; } else { /* type == 0 */ - /* ��������̤ʤ��ξ��Ϥʤˤ⤷�ʤ� */ + /* ランレングス圧縮なしの場合はなにもしない */ if (info.UseRunLength() == true) { - /* ��������̤���ξ�� */ + /* ランレングス圧縮ありの場合 */ runlength = getbits(data,shift,1); if (runlength==1) { runlength = getbits(data,shift,2); @@ -332,7 +332,7 @@ template<class NWAI> void NWADecode(cons write_little_endian_short(outdata, d[flip_flag]); outdata += 2; } - if (info.Channels() == 2) flip_flag ^= 1; /* channel �ڤ��ؤ� */ + if (info.Channels() == 2) flip_flag ^= 1; /* channel 切り替え */ } return; } @@ -377,9 +377,9 @@ class NWAData { } return blocksize * (bps/8); } - /* data �� BlockLength �ʾ��Ĺ������Ĥ��� - ** �֤��ͤϺ��������ǡ�����Ĺ������λ���� 0�� - ** ���顼���� -1 + /* data は BlockLength 以上の長さを持つこと + ** 返り値は作成したデータの長さ。終了時は 0。 + ** エラー時は -1 */ int Decode(FILE* in, char* data, int& skip_count); void Rewind(FILE* in); @@ -398,7 +398,7 @@ void NWAData::ReadHeader(FILE* in, int _ if (offset_start == -1) offset_start = 0; if (_file_size != -1) filesize = _file_size; curblock = -1; - /* header �ɤ߹��� */ + /* header 読み込み */ if (in == NULL || feof(in) || ferror(in)) { fprintf(stderr,"invalid stream\n"); return; @@ -420,18 +420,18 @@ void NWAData::ReadHeader(FILE* in, int _ blocksize = read_little_endian_int(header+0x20); restsize = read_little_endian_int(header+0x24); dummy2 = read_little_endian_int(header+0x28); - if (complevel == -1) { /* ̵����raw�ǡ��� */ - /* Ŭ���˷���Ǥ����� */ + if (complevel == -1) { /* 無圧縮rawデータ */ + /* 適当に決め打ちする */ blocksize = 65536; restsize = (datasize % (blocksize * (bps/8))) / (bps/8); blocks = datasize / (blocksize * (bps/8)) + (restsize > 0 ? 1 : 0); } if (blocks <= 0 || blocks > 1000000) { - /* �����֤�Ķ����ʤäƤΤϤʤ��Ǥ���*/ + /* 1時間を超える曲ってのはないでしょ*/ fprintf(stderr,"too large blocks : %d\n",blocks); return; } - /* regular file �ʤ� filesize �ɤ߹��� */ + /* regular file なら filesize 読み込み */ if (filesize == 0 && fstat(fileno(in), &sb)==0 && (sb.st_mode&S_IFMT) == S_IFREG) { int pos = ftell(in); fseek(in, 0, SEEK_END); @@ -443,7 +443,7 @@ void NWAData::ReadHeader(FILE* in, int _ } } if (complevel == -1) return; - /* offset index �ɤ߹��� */ + /* offset index 読み込み */ offsets = new int[blocks]; fread(offsets, blocks, 4, in); for (i=0; i<blocks; i++) { @@ -465,7 +465,7 @@ void NWAData::Rewind(FILE* in) { int NWAData::CheckHeader(void) { if (complevel != -1 && offsets == NULL) return false; - /* �ǡ������Τ�ΤΥ����å� */ + /* データそのもののチェック */ if (channels != 1 && channels != 2) { fprintf(stderr,"This program only supports mono / stereo data : data have %d channels.\n",channels); return false; @@ -492,7 +492,7 @@ int NWAData::CheckHeader(void) { fprintf(stderr,"This program only supports -1,0,1,2 compression level : the level of data is %d\n",complevel); return false; } - /* �����������å� */ + /* 整合性チェック */ if (filesize != 0 && filesize != compdatasize) { fprintf(stderr,"file size is invalid : %d != %d\n",filesize,compdatasize); return false; @@ -510,7 +510,7 @@ int NWAData::CheckHeader(void) { fprintf(stderr,"total sample count is invalid : samplecount %d != %d*%d+%d(block*blocksize+lastblocksize).\n",samplecount,blocks-1,blocksize,restsize); return false; } - tmpdata = new char[blocksize*byps*2]; /* ����ʾ���礭���Ϥʤ������������� */ + tmpdata = new char[blocksize*byps*2]; /* これ以上の大きさはないだろう、、、 */ return true; } @@ -523,10 +523,10 @@ class NWAInfo_sw2 { }; int NWAData::Decode(FILE* in, char* data, int& skip_count) { - if (complevel == -1) { /* ̵���̻��ν��� */ + if (complevel == -1) { /* 無圧縮時の処理 */ if (feof(in) || ferror(in)) return -1; if (curblock == -1) { - /* �ǽ�Υ֥��å��ʤ顢wave header ���� */ + /* 最初のブロックなら、wave header 出力 */ memcpy(data, make_wavheader(datasize, channels, bps, freq), 0x2c); curblock++; fseek(in, offset_start + 0x2c, SEEK_SET); @@ -555,12 +555,12 @@ int NWAData::Decode(FILE* in, char* data if (blocks == curblock) return 0; if (feof(in) || ferror(in)) return -1; if (curblock == -1) { - /* �ǽ�Υ֥��å��ʤ顢wave header ���� */ + /* 最初のブロックなら、wave header 出力 */ memcpy(data, make_wavheader(datasize, channels, bps, freq), 0x2c); curblock++; return 0x2c; } - /* �����ɤ߹��ࡿ�ǥ����ɤ���ǡ������礭�������� */ + /* 今回読み込む/デコードするデータの大きさを得る */ int curblocksize, curcompsize; if (curblock != blocks-1) { curblocksize = blocksize * (bps/8); @@ -576,9 +576,9 @@ int NWAData::Decode(FILE* in, char* data curblock++; return -2; } - /* �ǡ����ɤ߹��� */ + /* データ読み込み */ fread(tmpdata, 1, curcompsize, in); - /* Ÿ�� */ + /* 展開 */ if (channels == 2 && bps == 16 && complevel == 2) { NWAInfo_sw2 info; NWADecode(info, tmpdata, data, curcompsize, curblocksize);
--- a/music2/wavfile.cc +++ b/music2/wavfile.cc @@ -247,9 +247,9 @@ WAVFILE::WAVFILE(void) { } int WAVFILE_Stream::Read(char* in_buf, int blksize, int length) { - /* �ե�������ɤ߹��� */ + /* ファイルの読み込み */ if (data_length == 0 && stream_length == 0) return -1; - /* wf->data �˥ǡ����λĤ꤬����Ф�����ɤ߹��� */ + /* wf->data にデータの残りがあればそれも読み込む */ if (data_length > blksize*length) { memcpy(in_buf, data, blksize*length); data += blksize * length; @@ -275,7 +275,7 @@ int WAVFILE_Stream::Read(char* in_buf, i void WAVFILE_Stream::Seek(int count) { int blksize = 1; - /* block size ������ */ + /* block size の設定 */ blksize *= wavinfo.Channels * (wavinfo.DataBits/8); data_length = 0; stream_length = stream_length_orig - stream_top - count*blksize; @@ -326,7 +326,7 @@ WAVFILE* WAVFILE::MakeConverter(WAVFILE* need = true; } if (!need) return new_reader; - /* �Ѵ���ȤΥե����ޥåȤ����� */ + /* 変換もとのフォーマットを得る */ int from_format; if (new_reader->wavinfo.DataBits == 8) from_format = AUDIO_S8; else from_format = AUDIO_S16; @@ -379,9 +379,9 @@ int WAVFILE_Converter::Read(char* buf, i } cvt->len = cnt; SDL_ConvertAudio(cvt); - if (freq < original->wavinfo.SamplingRate) { // rate conversion �� SDL_ConvertAudio �ǤϤ��ޤ��Ԥ��ʤ� - // 48000Hz -> 44100Hz or 22050Hz �ʤɤ����� - // Ĺ����û���ʤ�Ϥ��ʤΤǡ��ä˽����Ϥʤ� + if (freq < original->wavinfo.SamplingRate) { // rate conversion は SDL_ConvertAudio ではうまく行かない + // 48000Hz -> 44100Hz or 22050Hz などを想定 + // 長さは短くなるはずなので、特に処理はなし cvt->len = conv_wave_rate( (short*)(cvt->buf), cvt->len_cvt/4, original->wavinfo.SamplingRate, freq, tmpbuf); cvt->len *= 4; } else { @@ -402,8 +402,8 @@ int WAVFILE_Converter::Read(char* buf, i } return copied_length / blksize; } -/* format �� signed, 16bit, little endian, stereo �ȷ�ᤦ�� -** ���ˤ�äƤ��� big endian �ˤʤ뤳�Ȥ⤢�뤫�⡣ +/* format は signed, 16bit, little endian, stereo と決めうち +** 場合によっていは big endian になることもあるかも。 */ static int conv_wave_rate(short* in_buf, int length, int in_rate, int out_rate, char* tmpbuf) { int input_rate = in_rate; @@ -415,13 +415,13 @@ static int conv_wave_rate(short* in_buf, if (input_rate == output_rate) return length; if (length <= 0) return 0; - /* ���̤μ��ȿ��Ѵ��������䴰 */ + /* 一般の周波数変換:線型補完 */ int& first_flag = *(int*)(tmpbuf); int& prev_time = *(int*)(tmpbuf+4); int& prev_sample1 = *(int*)(tmpbuf+8); int& prev_sample2 = *(int*)(tmpbuf+12); out = (short*)(tmpbuf+16); - /* ���Ƥʤ�ǡ��������� */ + /* 初めてならデータを初期化 */ if (first_flag == 0) { first_flag = 1; prev_time = 0; @@ -429,7 +429,7 @@ static int conv_wave_rate(short* in_buf, prev_sample2 = short(read_little_endian_short((char*)(in_buf++))); length--; } - /* �����������ǡ����̤����� */ + /* 今回作成するデータ量を得る */ dtime = prev_time + length * output_rate_d; outlen = (int)(dtime / input_rate_d); out_orig = out; @@ -439,14 +439,14 @@ static int conv_wave_rate(short* in_buf, write_little_endian_short((char*)out, prev_sample2); out++; } - dtime -= input_rate_d*outlen; /* ���� prev_time */ + dtime -= input_rate_d*outlen; /* 次の prev_time */ time = 0; next_sample1 = short(read_little_endian_short((char*)(in_buf++))); next_sample2 = short(read_little_endian_short((char*)(in_buf++))); for (i=0; i < outlen; i++) { - /* double �Ƿ����Ƥߤ����ɤ�����ñ�ˤϹ�®����̵���餷�� */ - /* �ʤ����Ѵ��� 1ʬ�Υǡ�����1�����٤�����(Celeron 700MHz) */ + /* double で計算してみたけどそう簡単には高速化は無理らしい */ + /* なお、変換は 1分のデータに1秒程度かかる(Celeron 700MHz) */ time += input_rate; while(time-prev_time>output_rate) { prev_sample1 = next_sample1; @@ -676,7 +676,7 @@ enum mad_flow MP3FILE_impl::callback_wri if (write_pointer + nsamples * nchannels * 2 > write_data_len) { nsamples = (write_data_len - write_pointer) / nchannels / 2; } - write_data_len &= ~(nchannels*2-1); /* write_data_len �Ϥ��餫����ݤ�Ƥ��� */ + write_data_len &= ~(nchannels*2-1); /* write_data_len はあらかじめ丸めておく */ src_pointer += nsamples; if (write_data == NULL) { // skip data write write_pointer += nsamples*2*2;
--- a/music2/wavfile.h +++ b/music2/wavfile.h @@ -1,5 +1,5 @@ /* - * wavfile.h WAV file��Ϣ + * wavfile.h WAV file関連 * * Copyright: wavfile.c (c) Erik de Castro Lopo erikd@zip.com.au *
--- a/scn2k/scn2k.h +++ b/scn2k/scn2k.h @@ -63,6 +63,6 @@ class PicContainer; class AyuSysConfig; class Surface; -void dprintf(const char* fmt, ...); // debug �� -void eprintf(const char* fmt, ...); // ���ޥ�ɼ¹�(XXXexec)������ +void dprintf(const char* fmt, ...); // debug 用 +void eprintf(const char* fmt, ...); // コマンド実行(XXXexec)追跡用 #endif
--- a/scn2k/scn2k_cmd.cc +++ b/scn2k/scn2k_cmd.cc @@ -39,7 +39,7 @@ using namespace std; // #define SCN_DUMP -/* �������� @@@ ��ɽ�� */ +/* 注意点: @@@ で表記 */ @@ -115,11 +115,11 @@ int Flags::Get(int type, int number) con if (index == 11) index = 9; if (index > TYPE_VARMAX || uint(type) > 4) return 0; if (type == 0) { - // A[]..G[], Z[] ��ľ���ɤ� + // A[]..G[], Z[] を直に読む if (uint(number) >= 2000) return 0; return var[index][number]; } else { - // Ab[]..G4b[], Z8b[] �ʤɤ��ɤ� + // Ab[]..G4b[], Z8b[] などを読む int factor = 1 << (type - 1); int eltsize = 32 / factor; if (uint(number) >= (64000 / factor)) return 0; @@ -144,11 +144,11 @@ void Flags::Set(VarInfo info, int value) fprintf(stderr,"Error: invalid access to Var<%d>[%d]\n",info.type,info.number); } if (type == 0) { - // A[]..G[], Z[] ��ľ�˽� + // A[]..G[], Z[] を直に書く if (uint(info.number) >= 2000) return; var[index][info.number] = value; } else { - // Ab[]..G4b[], Z8b[] �ʤɤ�� + // Ab[]..G4b[], Z8b[] などを書く int factor = 1 << (type - 1); int eltsize = 32 / factor; int eltmask = (1 << factor) - 1; @@ -340,13 +340,13 @@ void Flags::SaveSys(string& save) { //FI } bool Flags::Exec(Cmd& cmd) { - if (cmd.cmd_type == CMD_FLAGS) { // �����黻 + if (cmd.cmd_type == CMD_FLAGS) { // 代入演算 if (cmd.args.size() != 2) return false; Set(cmd.args[0], cmd.args[1].value); cmd.clear(); return true; } - if (cmd.cmd1 == 1 && cmd.cmd2 == 0x0a) { // ʸ����黻 + if (cmd.cmd1 == 1 && cmd.cmd2 == 0x0a) { // 文字列演算 VarInfo arg1 = cmd.args[0]; switch(cmd.cmd3) { case 0: @@ -360,7 +360,7 @@ bool Flags::Exec(Cmd& cmd) { for (i=0; i < sc[i] && len != 0; i++, len--) { if (sc[i]<0 && sc[i+1]!=0) i++; } - s.erase(i); // ���Ѥ� len ʸ���ޤ��ڤ�ͤ�� + s.erase(i); // 全角で len 文字まで切り詰める SetStr(arg1, s); // fprintf(stderr,"Set[%d,%d]<-%s\n",arg1.type,arg1.number,s.c_str()); } else break; @@ -371,7 +371,7 @@ bool Flags::Exec(Cmd& cmd) { SetStr(arg1, ""); cmd.clear(); } else if (cmd.cmd4 == 1) { - // �ΰ�����ʸ���ꥢ + // 領域指定で文字列クリア VarInfo v1 = cmd.args[0]; VarInfo v2 = cmd.args[1]; eprintf("memclear(str). Var[%d]<%d> - Var[%d]<%d>\n",v1.type, v1.number, v2.type, v2.number); @@ -407,7 +407,7 @@ bool Flags::Exec(Cmd& cmd) { break; } case 5: // substring, index from left case 6: // substring, index from right - // �����б��餷�� + // 全角対応らしい //FIXME: Make sure it works properly { int offset = cmd.args[2].value; int len = strlen(cmd.Str(cmd.args[1])); @@ -415,7 +415,7 @@ bool Flags::Exec(Cmd& cmd) { const char* s = str.c_str(); if (cmd.cmd3 == 6) offset = len - offset; if (offset < 0) offset = 0; - // ��Ƭ N ʸ�����ɤ����Ф� + // 先頭 N 文字を読み飛ばす int i; int offset_top = 0; for (i=0; i<offset && s[offset_top] != 0; i++) { @@ -424,7 +424,7 @@ bool Flags::Exec(Cmd& cmd) { } if (s[offset_top] == 0) { SetStr(arg1, ""); - } else if (cmd.cmd4 == 0) { // Ĺ�����¤ʤ� + } else if (cmd.cmd4 == 0) { // 長さ制限なし SetStr(arg1, string(s, offset_top, len-offset_top)); } else { // cmd.cmd4 == 1 int slen = cmd.args[3].value; @@ -447,7 +447,7 @@ bool Flags::Exec(Cmd& cmd) { SetSys(i); cmd.clear(); break; } - case 8: // ʸ������ڤä�û������ + case 8: // 文字列を切って短くする if (cmd.args[1].value <= 0) { SetStr(arg1, ""); } else if (cmd.args[1].value < strlen(cmd.Str(cmd.args[1]))) { @@ -455,7 +455,7 @@ bool Flags::Exec(Cmd& cmd) { } cmd.clear(); break; - case 0x0e: // �����⡼�ɤ�itoa + case 0x0e: // 漢字モードでitoa { int arg1 = cmd.args[0].value; string result; @@ -488,19 +488,19 @@ bool Flags::Exec(Cmd& cmd) { cmd.clear(); } break; - case 0x0f: case 0x11: // itoa (0x11 ������ zero padding ����äݤ�) + case 0x0f: case 0x11: // itoa (0x11 の方は zero padding するっぽい) if (cmd.cmd4 == 0) { int arg1 = cmd.args[0].value; char buf[1024]; sprintf(buf, "%d", arg1); SetStr(cmd.args[1], buf); cmd.clear(); } else if (cmd.cmd4 == 1) { - // ����(SJIS) : 82 [4f+N] - // ��Ϥ��������ʤ��� + // 漢字(SJIS) : 82 [4f+N] + // やはり漢字じゃない? int arg1 = cmd.args[0].value; char buf[1024]; char fmt[1024]; if (cmd.cmd3 == 0x0f) { - sprintf(fmt, "%%%dd",cmd.args[2].value); /* ����ǥѥǥ��� */ + sprintf(fmt, "%%%dd",cmd.args[2].value); /* 空白でパディング */ } else { sprintf(fmt, "%%0%dd",cmd.args[2].value); } @@ -509,7 +509,7 @@ bool Flags::Exec(Cmd& cmd) { cmd.clear(); } break; - case 0x64: // ʸ�����ɽ�� : ������ƥ����ȥ�����ɥ���ɽ�� + case 0x64: // 文字列の表示 : 引数をテキストウィンドウに表示 if (cmd.cmd4 == 1) { char buf[256]; snprintf(buf, 255, "%d", Get(cmd.args[0].type, cmd.args[0].number)); @@ -521,9 +521,9 @@ bool Flags::Exec(Cmd& cmd) { break; } } - if (cmd.cmd1 == 1 && cmd.cmd2 == 0x0b) { // �����ѿ��黻 + if (cmd.cmd1 == 1 && cmd.cmd2 == 0x0b) { // 数値変数演算 if (cmd.cmd3 == 0 && cmd.cmd4 == 0) { - /* ʣ�����ѿ��å� */ + /* 複数の変数をセット */ VarInfo v1 = cmd.args[0]; eprintf("set multiple-var Var[%d]<%d> <- ",v1.type, v1.number); int i; @@ -539,7 +539,7 @@ bool Flags::Exec(Cmd& cmd) { eprintf("\n"); cmd.clear(); } else if (cmd.cmd3 == 1 && cmd.cmd4 == 0) { - /* �ΰ������ѿ��ꥢ */ + /* 領域指定で変数をクリア */ VarInfo v1 = cmd.args[0]; VarInfo v2 = cmd.args[1]; eprintf("memclear. Var[%d]<%d> - Var[%d]<%d>\n",v1.type, v1.number, v2.type, v2.number); @@ -552,7 +552,7 @@ bool Flags::Exec(Cmd& cmd) { } cmd.clear(); } else if (cmd.cmd3 == 1 && cmd.cmd4 == 1) { - /* �ΰ������ѿ��å� */ + /* 領域指定で変数をセット */ VarInfo v1 = cmd.args[0]; VarInfo v2 = cmd.args[1]; int value = cmd.args[2].value; @@ -565,7 +565,7 @@ bool Flags::Exec(Cmd& cmd) { Set(v1, value); } cmd.clear(); - } else if (cmd.cmd3 == 4 && cmd.cmd4 == 1) { // �ΰ襯�ꥢ(sysfunc.txt) + } else if (cmd.cmd3 == 4 && cmd.cmd4 == 1) { // 領域クリア(sysfunc.txt) VarInfo v1 = cmd.args[0]; int step = cmd.args[1].value; int deal = cmd.args[2].value; @@ -576,7 +576,7 @@ bool Flags::Exec(Cmd& cmd) { v1.number += step; } cmd.clear(); - } else if (cmd.cmd3 == 0x64 && cmd.cmd4 == 0) { //�ΰ�ǿ��ͤ��פ��� + } else if (cmd.cmd3 == 0x64 && cmd.cmd4 == 0) { //領域で数値を合計する VarInfo v1 = cmd.args[0]; VarInfo v2 = cmd.args[1]; eprintf("sum var. Var[%d]<%d> - Var[%d]<%d>\n",v1.type, v1.number, v2.type, v2.number); @@ -633,9 +633,9 @@ bool SimpleCmd::operator==(const SimpleC ** Cmd */ -/* ���� num := 0x24 0xff <int num> */ -/* �ѿ� var := 0x24 <uchar type> 0x5b <exp> 0x5d */ -/* �� token := num | var | 0x28 <exp> 0x29 | <plus|minus> token */ +/* 数値 num := 0x24 0xff <int num> */ +/* 変数 var := 0x24 <uchar type> 0x5b <exp> 0x5d */ +/* 項 token := num | var | 0x28 <exp> 0x29 | <plus|minus> token */ int Cmd::GetLeftToken(const char*& d, VarInfo& info) { bool var_flag = true; @@ -648,7 +648,7 @@ int Cmd::GetLeftToken(const char*& d, Va var_flag = false; } if (d[0] == 0x24 && ((unsigned const char*)d)[1] == 0xff) { - // if ( (d[0] == 0x30 || d[0] == 0x31) && d[1] == 0x24 && ((unsigned const char*)d)[2] == 0xff) /* @@@ not supported; selection ��ǡ�0x30|0x31 ���տ魯�뤳�Ȥ����� */ + // if ( (d[0] == 0x30 || d[0] == 0x31) && d[1] == 0x24 && ((unsigned const char*)d)[2] == 0xff) /* @@@ not supported; selection 内で、0x30|0x31 が付随することがある */ // numerical atom d += 6; value = read_little_endian_int(d-4); @@ -746,8 +746,8 @@ Cmd::Cmd(const Flags& f, int _sys_ver) : pos = -1; } -/* �黻�� op := 0x5c <uchar op> */ -/* ���� exp: [op] <token> [op <token> [...]] */ +/* 演算子 op := 0x5c <uchar op> */ +/* 数式 exp: [op] <token> [op <token> [...]] */ int Cmd::GetExpression(const char*& d, VarInfo* info_ptr) { #define STACK_DEPTH 1024 #define OP_LB 11 @@ -755,7 +755,7 @@ int Cmd::GetExpression(const char*& d, V int val_stack[STACK_DEPTH]; int stack_count = 0; - // ������ɤ߹��� + // 第一項の読み込み while(*d == 0x28) { d++; dprintf("("); @@ -772,7 +772,7 @@ int Cmd::GetExpression(const char*& d, V if (*d != 0x5c && stack_count == 0) { if (info_ptr) *info_ptr = info; - return value; // ñ���left-term�Ϥ����ǽ�λ��ͭ����info_ptr���ʲ�ǽ��������� + return value; // 単純なleft-termはここで終了。有効なinfo_ptrを帰す(可能性がある) } while(*d == 0x5c) { @@ -783,7 +783,7 @@ int Cmd::GetExpression(const char*& d, V if (op_type >= 10) SetError(); int cur_pri = op_pri(op_type); while(stack_count != 0 && op_pri(op_stack[stack_count-1]) <= cur_pri) { - // ͥ���̤ι⤤����Ԥ���黻��Ԥ� + // 優先順位の高い、先行する演算を行う value = eval(val_stack[stack_count-1], op_stack[stack_count-1], value); stack_count--; } @@ -798,12 +798,12 @@ int Cmd::GetExpression(const char*& d, V value = GetLeftToken(d, info); while (*d != 0x5c && stack_count > 0) { - // ̤�¹Ԥα黻��餻�� + // 未実行の演算を終わらせる if (op_stack[stack_count-1] != OP_LB) { value = eval(val_stack[stack_count-1], op_stack[stack_count-1], value); stack_count--; } else if (*d == 0x29) { /* op_stack == OP_LB */ - // bracket ��ü������С��Ĥ��Ƥ��� + // bracket 終端があれば、閉じておく d++; dprintf(")"); stack_count--; @@ -819,7 +819,7 @@ int Cmd::GetExpression(const char*& d, V return value; } -// ���ʬ�����Ѥˡ����黻�Ȼ��ѱ黻�κ�����ΤǤ������ѥ롼����������GetExpression�Ǻ����٤��ʤ�) +// 条件分岐専用に、条件演算と算術演算の混合を検知できる専用ルーチン(本来はGetExpressionで差し支えない) int Cmd::GetExpressionCond(const char*& d) { char op_stack[STACK_DEPTH]; int val_stack[STACK_DEPTH]; @@ -828,7 +828,7 @@ int Cmd::GetExpressionCond(const char*& #define ATTR_FLAG 1 int stack_count = 0; - // ������ɤ߹��� + // 第一項の読み込み while(*d == 0x28) { d++; dprintf("("); @@ -850,7 +850,7 @@ int Cmd::GetExpressionCond(const char*& else dprintf("err."); int cur_pri = op_pri_cond(op_type); while(stack_count != 0 && op_pri_cond(op_stack[stack_count-1]) <= cur_pri) { - // ͥ���̤ι⤤����Ԥ���黻��Ԥ� + // 優先順位の高い、先行する演算を行う if (op_stack[stack_count-1] >= 60) { if (valattr_stack[stack_count-1] != ATTR_FLAG || valattr != ATTR_FLAG) SetError(); } else { @@ -873,7 +873,7 @@ int Cmd::GetExpressionCond(const char*& valattr = ATTR_VAL; while (*d != 0x5c && stack_count > 0) { - // ̤�¹Ԥα黻��餻�� + // 未実行の演算を終わらせる if (op_stack[stack_count-1] != OP_LB) { if (op_stack[stack_count-1] >= 60) { if (valattr_stack[stack_count-1] != ATTR_FLAG || valattr != ATTR_FLAG) SetError(); @@ -883,7 +883,7 @@ int Cmd::GetExpressionCond(const char*& value = eval(val_stack[stack_count-1], op_stack[stack_count-1], value); if (op_stack[stack_count-1] >= 40) valattr = ATTR_FLAG; stack_count--; - // bracket ��ü������С��Ĥ��Ƥ��� + // bracket 終端があれば、閉じておく } else if (*d == 0x29) { /* op_stack == OP_LB */ d++; dprintf(")"); @@ -905,23 +905,23 @@ args = 0x28 <exp> [[0x2c] <exp> [[0x2c] */ int Cmd::GetArgs(const char*& d) { - if (*d != 0x28) return 0; /* �����ʤ� */ + if (*d != 0x28) return 0; /* 引数なし */ d++; dprintf("args:"); VarInfo var; int i; for (i=0; i<100 ; i++) { - /* number, variable, string �μ��̤ʤ��ͤ����� */ - if (*d == 0x61) { // �褯�狼��ʤ�(���奢�ե���) + /* number, variable, string の種別なく値を得る */ + if (*d == 0x61) { // よくわからない(智代アフター) dprintf("@%d",d[1]); d += 2; if (*d == 0x28) { dprintf("{"); - GetArgs(d); // (A,B,C)��ޤޤ�뤳�Ȥ����� + GetArgs(d); // (A,B,C)節が含まれることがある dprintf("}"); } else { dprintf("{}"); } - } else if (d[0] == 0x0a || d[0] == 0x40) { // �褯�狼��ʤ� (Little Busters!) + } else if (d[0] == 0x0a || d[0] == 0x40) { // よくわからない (Little Busters!) int var; if (system_version == 0) { var = read_little_endian_int(d+1); d += 5;} else { var = read_little_endian_short(d+1); d += 3;} @@ -935,7 +935,7 @@ int Cmd::GetArgs(const char*& d) { args.push_back(var); } else SetError(); if (*d == 0x29) break; - if (*d == 0x2c) {d++;} // ���� arg ���黻�ҤǻϤޤ롢�ʤɤ��ʤ����¸�ߤ��ʤ� + if (*d == 0x2c) {d++;} // 次の arg が演算子で始まる、などがなければ存在しない dprintf(","); } if (*d == 0x29) d++; @@ -944,48 +944,48 @@ int Cmd::GetArgs(const char*& d) { } int Cmd::GetArgsSpecial(int normal_args,const char*& d) { - if (*d != 0x28) return 0; /* �����ʤ� */ + if (*d != 0x28) return 0; /* 引数なし */ d++; dprintf("args:"); int i; for (i=0; i<normal_args; i++) { - /* number, variable, string �μ��̤ʤ��ͤ����� */ + /* number, variable, string の種別なく値を得る */ if (*d == 0x24 || (*d == 0x5c && (d[1] == 1 || d[1] == 0)) || *d == 0x28) { GetExpression(d); } else if (StrType(d)) { GetString(d); } else SetError(); if (*d == 0x29) break; - if (*d == 0x2c) {d++;} // ���� arg ���黻�ҤǻϤޤ롢�ʤɤ��ʤ����¸�ߤ��ʤ� + if (*d == 0x2c) {d++;} // 次の arg が演算子で始まる、などがなければ存在しない dprintf(","); } for (i=0; i<argc ; i++) { if (*d == 0x28) { /* ** cmd 01-22:0c1c, 01-22:0835 -** Princess Bride �Υ����ɤ�����륢�˥�ξ��� -** �ʤ���_PBCARDANM* �β����Ϥ��Υ��ޥ�ɤǤΤȤ��Ƥ���Τǡ��ü�����Ȥ���̵�뤹�뤳�Ȥ��ǽ +** Princess Bride のカードが落ちるアニメの場面 +** なお、_PBCARDANM* の画像はこのコマンドでのみ使われているので、特殊処理として無視することも可能 ** ** cmd 01-04:0276, 026c, 0270 -** ʣ���� enum �� args �ο�����³���������ü�����Ȥ���ʬΥ���� +** 複数の enum が args の数だけ続く処理。特殊処理として分離する */ dprintf("enum.<"); - /* (...) ����� or ��¤�Τβ�ǽ�������� */ + /* (...) は列挙型 or 構造体の可能性がある */ const char* d_orig = d; int pt = args.size(); args.push_back(VarInfo(0)); int count = GetArgs(d); args[pt] = VarInfo(count); dprintf(">"); } else if (*d == 0x61 && (d[1] >= 0x00 && d[1] <= 0x04) && d[2] == 0x28 ) { - /* �Ȥ��륳�ޥ�ɤ� 01-21:004b, 01-28:0064 �Τ����줫��R,C,PB,LO) - ** �����Υ��ޥ�ɤ� - ** arg1: �����ե�����̾ - ** arg2 : Sel �ֹ� - ** �餷����arg3 �ʹߤ� 0x61 <00-04> (a,b,c,...) �Ȥʤ�ʥ����� enum ��ɽ�������) - ** () ��ΰ����Ϥ��ޤ��ޤǡ�a �Τߡʲ����ե�����̾�ˡ� + /* 使われるコマンドは 01-21:004b, 01-28:0064 のいずれか(R,C,PB,LO) + ** それらのコマンドは + ** arg1: 画像ファイル名 + ** arg2 : Sel 番号 + ** らしく、arg3 以降が 0x61 <00-04> (a,b,c,...) となる(ダンプ上は enum と表記される) + ** () 内の引数はさまざまで、a のみ(画像ファイル名)、 ** a,b b=SEL? - ** a,b,c (b,c)=��ɸ�� + ** a,b,c (b,c)=座標? ** a,(b,c,d,e,f,g) b-g = src / dest? - ** �餷�� + ** らしい */ dprintf("kasane. #%d <",d[1]); d += 2; @@ -994,21 +994,21 @@ dprintf(">"); args[pt] = VarInfo(count); dprintf(">"); } else if (*d == 0x24 || (*d == 0x5c && (d[1] == 1 || d[1] == 0))) { - /* cmd 01-15:0028 ; �Ϥ�� 0x24 ����ꡢ³���� 0x28 ��ˤʤ� */ + /* cmd 01-15:0028 ; 始めに 0x24 節があり、続いて 0x28 節になる */ VarInfo var; GetExpression(d, &var); args.push_back(var); - i--; // ���ΰ�����argc �ο��ˤ�����ʤ� + i--; // この引数はargc の数には入らない } else SetError(); if (d[0] == 0x0a || d[0] == 0x40) { - /* cmd 01-15:0028 ; 0x28 ��θ����� 0x0a ���� */ + /* cmd 01-15:0028 ; 0x28 節の後に毎回 0x0a 節が来る */ int var; if (system_version == 0) { var = read_little_endian_int(d+1); d += 5;} else { var = read_little_endian_short(d+1); d += 3;} dprintf("line %d; ",var); } if (*d == 0x29) break; - if (*d == 0x2c) {d++;} // ���� arg ���黻�ҤǻϤޤ롢�ʤɤ��ʤ����¸�ߤ��ʤ� + if (*d == 0x2c) {d++;} // 次の arg が演算子で始まる、などがなければ存在しない dprintf(","); } if (*d == 0x29) d++; @@ -1124,7 +1124,7 @@ void Cmd::GetSelection(const char*& d) { else { var = read_little_endian_short(d+1); d += 3;} dprintf("Line %d; ",var); if (text.length() != 0) { - if (cond_result) ; // ���� true �ʤ�ɽ�����ʤ� + if (cond_result) ; // 条件節が true なら表示しない else { const char* str = text.c_str(); VarInfo var; @@ -1145,12 +1145,12 @@ void Cmd::GetSelection(const char*& d) { dprintf(":cond:"); d++; while(d[0] != 0x29) { - int result = GetExpressionCond(d); // PRINT- ��Ǥʤ��Ф��������ɽ��������ʸ���ᡢ�ޤ���PRINT��ΤϤ� - if (*d == 0x32) { // 0x32 �ʤ顢���ߤξ�����ɽ�����ʤ� + int result = GetExpressionCond(d); // PRINT- 節でないばあい、条件表示。次は文字節、またはPRINT節のはず + if (*d == 0x32) { // 0x32 なら、現在の条件節を表示しない d++; dprintf("##"); cond_result = result; - } else if (*d == 0x31) { // 0x31 �ʤ顢���ߤξ�����ɽ������ - // Little Busters! : ���ξ�������������̤���� + } else if (*d == 0x31) { // 0x31 なら、現在の条件節を表示する + // Little Busters! : この条件で正しいかは未検証 d++; dprintf("***"); cond_result = !result; } @@ -1165,7 +1165,7 @@ void Cmd::GetSelection(const char*& d) { } else if (*d == 0x23 && strncmp(d,"###PRINT",8) == 0) { d += 8; if (d[0] != 0x28) SetError(); - else { // ʸ���ѿ������Ƥ�ɽ�� + else { // 文字変数の内容の表示 d++; dprintf("Print."); VarInfo info; @@ -1173,7 +1173,7 @@ void Cmd::GetSelection(const char*& d) { if (d[0] != 0x29 || info.type == -1) SetError(); d++; dprintf(";");/* - // ���ͤ�����ʸ�����Ѵ�������Ͽ + // 数値を全角文字に変換して登録 char str[10], str2[20]; // itoa sprintf(str, "%d", info.value); int i; for (i=0; str[i] != 0; i++) { @@ -1187,7 +1187,7 @@ void Cmd::GetSelection(const char*& d) { } d++; /* @@@ */ - /* ���פ��ʤ���礬����Τǥ����ȥ����� */ + /* 一致しない場合があるのでコメントアウト */ // if (arg_count != argc) SetError(); dprintf("\n}\n"); } @@ -1198,7 +1198,7 @@ void Cmd::GetCmd(Flags& flags_orig, cons cmdstr[0] = 0; rawdata = d; - if (*d == 0x23) { /* ���ޥ�� */ + if (*d == 0x23) { /* コマンド */ cmd_type = CMD_OTHER; cmd1 = *(unsigned const char*)(d+1); cmd2 = *(unsigned const char*)(d+2); @@ -1209,8 +1209,8 @@ void Cmd::GetCmd(Flags& flags_orig, cons /* verbose */ // dprintf(" 0x23 - cmd %02x-%02x:%04x:%02x[%2d] \n",cmd1,cmd2,cmd3,cmd4,argc); sprintf(cmdstr, "%02x-%02x:%04x:%02x : %s",cmd1,cmd2,cmd3,cmd4, CmdDescr(cmd1,cmd2,cmd3,cmd4)); - /* ���������� */ - /* �ü�����Τ�� */ + /* 引数を得る */ + /* 特殊引数のもの */ int is_special = 0; if (cmd1 == 0) { if (cmd2 == 1) { @@ -1229,12 +1229,12 @@ void Cmd::GetCmd(Flags& flags_orig, cons if (*d++ != 0x28) { SetError(); return;} dprintf("\t"); int cond = GetExpressionCond(d); - if (cmd3 == 1) cond = !cond; // �դˤʤ� + if (cmd3 == 1) cond = !cond; // 逆になる if (*d++ != 0x29) { SetError(); return; } int jumpto = read_little_endian_int(d); d += 4; dprintf("-> %d\n", jumpto); - if (! cond) jump_arg = jumpto; /* condition ����������ʤ���硢������ */ + if (! cond) jump_arg = jumpto; /* condition が満たされない場合、ジャンプ */ is_special = 1; } else if (cmd3 == 4) { /* switch to */ @@ -1264,7 +1264,7 @@ void Cmd::GetCmd(Flags& flags_orig, cons } } retry: - /* ���̰����Τ�� */ + /* 一般引数のもの */ if (!is_special) { dprintf(" 0x23 - cmd %02x-%02x:%04x:%02x[%2d] : %s\n",cmd1,cmd2,cmd3,cmd4,argc,CmdDescr(cmd1,cmd2,cmd3,cmd4)); dprintf("\t"); @@ -1278,7 +1278,7 @@ retry: dprintf("\n"); } - } else if (*d == 0x24) { /* �����黻 */ + } else if (*d == 0x24) { /* 代入演算 */ if (d[1] == 0x12 || d[2] != 0x5b) SetError(); dprintf("expr: "); sprintf(cmdstr, "expr"); @@ -1291,20 +1291,20 @@ retry: else dprintf("%s",op_str[type]); d += 2; int value2 = GetExpression(d); - // ��������������� + // 代入情報を埋め込む if (type != 30) value2 = eval(value, type-20, value2); cmd_type = CMD_FLAGS; args.push_back(info); args.push_back(value2); dprintf("\n"); - } else if (StrType(d)) { /* ʸ������ */ + } else if (StrType(d)) { /* 文字出力 */ VarInfo info; info.type = TYPE_STR; info.value = GetString(d); args.push_back(info); cmd_type = CMD_TEXT; dprintf("\n"); - } else if (*d == 0x0a || *d == 0x40 || *d == 0x21) { /* �ǥХå��ѥǡ����ȴ��ɥե饰 */ + } else if (*d == 0x0a || *d == 0x40 || *d == 0x21) { /* デバッグ用データと既読フラグ */ cmd_type = CMD_NOP; if (*d == 0x0a) { dprintf("line "); @@ -1319,9 +1319,9 @@ retry: } dprintf("%d\n", l); } else { /* 0x40, 0x21 */ - // ���ɥޡ������餷��������ȥ�ݥ���Ȥȥ����֥ݥ���Ȥ�Ȥ��롣 - // RealLive 1.2.5���顢0x40�ϥ����֥ݥ���ȡ�0x21�ϥ���ȥ�ݥ���ȡ� - // 1.2.5�������ɤ����0x40���Ȥ��롣 + // 既読マーカーらしい。エントリーポイントとセーブポイントも使われる。 + // RealLive 1.2.5から、0x40はセーブポイント、0x21はエントリーポイント。 + // 1.2.5以前、どちらも0x40が使われる。 int kidoku_index; d++; if (system_version == 0) { @@ -1332,10 +1332,10 @@ retry: d += 2; } dprintf("kidoku marker %d\n", kidoku_index); - // text_readflag�ϡ�����kidoku_index��Ȥä����ɤ����ʡ� + // text_readflagは、このkidoku_indexを使ったら良いかな。 } } else if (*d == 0x2c) { /* ??? */ - dprintf("commd;0x2c\n"); // conditional jump �ιԤ���ˤ褯����餷���ʾ�ˡ����Ϥ狼��ʤ��� + dprintf("commd;0x2c\n"); // conditional jump の行き先によくあるらしい(常に、かはわからない) d++; } else { SetError(); @@ -1456,7 +1456,7 @@ const char* Cmd::Str(const VarInfo& info } int Cmd::AddStr(char* s) { - // 1-0a-0064 �Ϥ���������Τ�ɬ�פ餷�� + // 1-0a-0064 はこういうものが必要らしい int start = strend; while (*s) strheap[strend++] = *s++; strheap[strend++] = 0; @@ -1474,7 +1474,7 @@ void Cmd::read(const CmdSimplified& from cmd3 = from.cmd3; cmd4 = from.cmd4; argc = from.argc; - /* args ���ɤ߹��� */ + /* args の読み込み */ args.clear(); char* d = from.args; if (d == NULL) return; @@ -1517,7 +1517,7 @@ void Cmd::write(CmdSimplified& to, char* to.cmd3 = cmd3; to.cmd4 = cmd4; to.argc = argc; - /* args �ν��� */ + /* args の書き込み */ if (args.empty()) { to.args = NULL; } else { @@ -1549,7 +1549,7 @@ void CmdSimplified::copy(const CmdSimpli *this = from; if (args == NULL) return; char* args_old = from.args; - /* args �Υ��ԡ� */ + /* args のコピー */ while(*args_old != TYPE_END) { if (*args_old == TYPE_VAL) { args_old += 5; @@ -1569,16 +1569,16 @@ void CmdSimplified::Save(string& saveret sprintf(buf, "%02x-%02x:%04x:%02x(%02d),", cmd1, cmd2, cmd3, cmd4, argc); saveret += buf; - /* args �Υ��ԡ� */ + /* args のコピー */ char* d = args; while(d && *d != TYPE_END) { if (*d == TYPE_VAL) { d++; sprintf(buf, "%d,", read_little_endian_int(d)); d += 4; - } else { /* TYPE_STR �Ȳ��� */ + } else { /* TYPE_STR と仮定 */ d++; - if (strlen(d) > 1000) d[1000] = 0; // ���ꤨ�ʤ������� + if (strlen(d) > 1000) d[1000] = 0; // ありえない・・・ int i; int cnt = 0; buf[cnt++] = '"'; for (i=0; d[i] != 0; i++) { @@ -1681,7 +1681,7 @@ int main(int argc, char** argv) { char* data = info->CopyRead(); char* d = data; char* dend = d + info->Size(); - /* version ��ǧ */ + /* version 確認 */ if (read_little_endian_int(d) == 0x1cc) { system_version = 0; } else if (read_little_endian_int(d) == 0x1d0) { @@ -1703,7 +1703,7 @@ int main(int argc, char** argv) { const char* dstart = d; fprintf(stderr,"Dumping %s\n",fname); Flags flags; - /* �ǽ餫��Ǹ�ޤǥ��ޥ�ɼ��� -> ���Ϥ��֤� */ + /* 最初から最後までコマンド取得 -> 出力を繰り返す */ while(dcur<dend) { const char* dprev = dcur; Cmd cmd(flags, system_version); cmd.ClearError();
--- a/scn2k/scn2k_cmd.h +++ b/scn2k/scn2k_cmd.h @@ -23,7 +23,7 @@ enum SkipMode { SKIP_GRP_NODRAW=64, SKIPEND_TEXT=256, SKIPEND_KEY=512, SKIP_IN_MENU=1024 }; -struct CmdSimplified { // Cmd ÊÝžÍÑ +struct CmdSimplified { // Cmd 保存用 int type, cmd1, cmd2, cmd3, cmd4, argc; char* args; void Save(std::string& save);
--- a/scn2k/scn2k_flags.h +++ b/scn2k/scn2k_flags.h @@ -27,12 +27,12 @@ struct VarInfo { class Flags { /* flag: -** type 0-5 : ¥í¡Œ¥«¥ëÀ°¿ô¡¢³Æ2000žÄ -** type 6, 25 : ¥°¥í¡Œ¥Ð¥ëÀ°¿ô¡¢2000žÄ -** type 10,11: ¥í¡Œ¥«¥ëÀ°¿ô??¡¢³Æ2000žÄ -** type 12 : ¥°¥í¡Œ¥Ð¥ëÊž»úÎó¡¢2000žÄ (º£€Ï̵»ë€·€Æ€âÎÉ€€€¬) -** type 18 : ¥í¡Œ¥«¥ëÊž»úÎó¡¢2000žÄ -** type 25: ¥·¥¹¥Æ¥àÊÑ¿ô¡Ê¥Þ¥Š¥¹ºÂÉž€Ê€É¡©¡Ë 1000 žÄ¡© +** type 0-5 : ローカル整数、各2000個 +** type 6, 25 : グローバル整数、2000個 +** type 10,11: ローカル整数??、各2000個 +** type 12 : グローバル文字列、2000個 (今は無視しても良いが) +** type 18 : ローカル文字列、2000個 +** type 25: システム変数(マウス座標など?) 1000 個? ** type 26-32, 51 : 1-bit access to 0-6, 25 ** type 52-58, 77 : 2-bit access to 0-6, 25 ** type 78-84, 103 : 4-bit access to 0-6, 25
--- a/scn2k/scn2k_grp.cc +++ b/scn2k/scn2k_grp.cc @@ -126,17 +126,17 @@ void GrpObj::GetSrcGeom(int& width, int& if (name.length() == 0) { return; } - /* �ܥ���ΰ��־������� */ - /* g00 �ե�����Υإå���ʬ�˰��־�������äƤ��� */ + /* ボタンの位置情報を求める */ + /* g00 ファイルのヘッダ部分に位置情報は入っている */ string path(name); path += ".g00"; ARCINFO* info = FileSearcher::GetInstance()->Find(FileSearcher::PDT, path.c_str(), "g00"); - if (info == NULL) { // �ե����뤬���Ĥ���ʤ� + if (info == NULL) { // ファイルが見つからない fprintf(stderr, "GrpObj::GetSrcGeom : Cannot find file %s\n", path.c_str()); return; } const char* data = info->Read(); - if (data != NULL && *data == 2) { // �����ե�������˥ܥ������¸�ߤ��� + if (data != NULL && *data == 2) { // 画像ファイル内にボタン情報が存在する int srclen = read_little_endian_int(data+5); int i; for (i=0; i<srclen; i++) { @@ -148,7 +148,7 @@ void GrpObj::GetSrcGeom(int& width, int& if (width < src_pos.back().width()) width = src_pos.back().width(); if (height < src_pos.back().height()) height = src_pos.back().height(); } - } else { // �����ե����뤫���礭������ + } else { // 画像ファイルから大きさ取得 width = read_little_endian_short(data+1); height = read_little_endian_short(data+3); src_pos.push_back(Rect(0,0,width,height)); @@ -213,7 +213,7 @@ void GrpObj::CreateSurface(PicContainer* delete p; } src_pos.clear(); - // picture ����� + // picture を作成 pic_parent = parent; picture = parent->create_leaf(Rect(_posx,_posy,_posx+1,_posy+1), 0); picture->hide(); @@ -225,14 +225,14 @@ void GrpObj::UpdateSurface(void) { int width = 0, height = 0; if (gtype == FILE || gtype == GAN) { if (name.length() == 0) return; - // �ե�����̾��¸�ߤ����硢�ե�������ɤ߹��� + // ファイル名が存在する場合、ファイルを読み込み GetSrcGeom(width, height); if (width <= 0 || height <= 0) return; - // surface ������ + // surface の設定 if (surface_num == 0 && ( (zoom > 0 && zoom != 256) || rotate > 0)) { ZoomRotate(); } else { - // ���̤� surface ������ + // 普通に surface を設定 string path(name); path += ".g00"; picture->SetSurface(path.c_str(), 0, 0); @@ -240,10 +240,10 @@ void GrpObj::UpdateSurface(void) { } if (attr & BLIT_ADD) picture->SetSurfaceAttribute(PicBase::BLIT_ADD); - } else if (gtype == MOJI) { // �ƥ��������� + } else if (gtype == MOJI) { // テキスト描画 if (print_moji.length() == 0) return; UpdateMoji(); - } else if (gtype == DIGIT) { // ���ͤ����ɽ�� + } else if (gtype == DIGIT) { // 数値を画像表示 UpdateDigit(); } } @@ -251,7 +251,7 @@ void GrpObj::UpdateSurface(void) { void GrpObj::ZoomRotate(void) { picture->SetSurface( (Surface*)0, 0, 0); - // ��ž���̾�����Ϻ�ɸ�������������濴�ˤʤ� + // 回転、縮小拡大は座標原点が画像の中心になる string path(name); path += ".g00"; Surface* surface_orig = pic_parent->Root().NewSurface(path.c_str()); @@ -262,20 +262,20 @@ void GrpObj::ZoomRotate(void) { picture->SetSurface(zoom_surface, 0, 0); picture->SetSurfaceFreeFlag(); //picture->Move(PosX() + - zoom_r.width()/2, PosY() + - zoom_r.height()/2); -// �濴��ɸ���狼����� +// 中心座標がわからん・・・ picture->Move(320 - zoom_r.width()/2, 240 - zoom_r.height()/2); picture->SetSurfaceRect(Rect(0, 0, zoom_r.width(), zoom_r.height())); pic_parent->Root().DeleteSurface(surface_orig); } -void GrpObj::UpdateMoji(void) { // ʸ�����礭�������ʤɤ��ѹ� +void GrpObj::UpdateMoji(void) { // 文字の大きさ、色などを変更 if (print_moji.length() == 0 || print_size <= 2) return; if (pic_parent == 0) return; - /* �ƥ����Ȥ��礭�������� */ + /* テキストの大きさを得る */ int r, g, b; - if (print_r == -1 || print_g == -1 || print_b == -1) {// ������ʤ� - r = g = b = 0; // �Ȥꤢ������(clannad ��Save/Load��˥塼��) + if (print_r == -1 || print_g == -1 || print_b == -1) {// 色設定なし + r = g = b = 0; // とりあえず黒(clannad のSave/Loadメニュー用) } else { r = print_r; g = print_g; @@ -284,8 +284,8 @@ void GrpObj::UpdateMoji(void) { // ʸ�����礭�������ʤɤ��ѹ� TextStream ts = TextStream::ParseMoji(print_moji.c_str(), r, g, b, print_size); TextGlyphStream gs; vector<int> lh; - // �Ȥꤢ���� drawable width �Ͻ�ʬ���礭��(2048)��� - DefaultLayout(print_size-2)->Layout(ts, gs, lh, 2048); // print_size ���Τޤޤ��ȼ崳�礭������Τ� -2 + // とりあえず drawable width は充分に大きく(2048)取る + DefaultLayout(print_size-2)->Layout(ts, gs, lh, 2048); // print_size そのままだと弱干大きすぎるので -2 int width = gs.width(); int height = gs.height(); Surface* surface = pic_parent->Root().NewSurface(width, height, ALPHA_MASK); @@ -297,9 +297,9 @@ void GrpObj::UpdateMoji(void) { // ʸ�����礭�������ʤɤ��ѹ� } void GrpObj::UpdateDigit(void) { - // ����ɽ���ο���ʸ�����ɽ������ + // 画像表示の数値文字列を表示する if (name.length() == 0) return; - // �ե�����̾��¸�ߤ����硢�ե�������ɤ߹��� + // ファイル名が存在する場合、ファイルを読み込み string path(name); path += ".g00"; Surface* surface_orig = pic_parent->Root().NewSurface(path.c_str()); @@ -310,14 +310,14 @@ void GrpObj::UpdateDigit(void) { GetSrcGeom(width, height); if (width <= 0 || height <= 0) return; if (src_pos.size() < 14) { - // ɬ�פʿ��� object ���ʤ� - // ɽ���Ǥ��ʤ�ʬ�ζ��� rect ���ɲä��Ƥ��� + // 必要な数の object がない + // 表示できない分の空の rect を追加しておく for (i=src_pos.size(); i<14; i++) src_pos.push_back(Rect(0,0,0,0)); pic_parent->Root().DeleteSurface(surface_orig); return; } - // ����η� + // 桁数の計算 char num_str[20]; if (dig_number < 0) sprintf(num_str, "%d", -dig_number); else sprintf(num_str, "%d", dig_number); @@ -333,9 +333,9 @@ void GrpObj::UpdateDigit(void) { Surface* surface = pic_parent->Root().NewSurface(width*total_count, height, ALPHA_MASK); DSurfaceFill(surface, Rect(*surface), 0, 0, 0, 0); - /* surface �˥��ԡ����� */ + /* surface にコピーする */ int cur_x = 0; - if ( (attr & DIG_PACK) && !(attr & DIG_ZERO)) { // �Ϥ�˶�������� + if ( (attr & DIG_PACK) && !(attr & DIG_ZERO)) { // 始めに空白を挿入 cur_x += space_count * width; } int plus = 10, minus = 11, plusminus = 12; @@ -349,12 +349,12 @@ void GrpObj::UpdateDigit(void) { DSurfaceMove(surface, src_pos[plus], surface, Rect(cur_x,0)); cur_x += width; } - if (attr & DIG_ZERO) { // �������ѥǥ��� + if (attr & DIG_ZERO) { // ゼロ・パディング for (i=0; i<space_count; i++) { DSurfaceMove(surface, src_pos[0], surface, Rect(cur_x, 0)); cur_x += width;; } - } else if (!(attr & DIG_PACK)) { // PACK ���ץ����ʤ� + } else if (!(attr & DIG_PACK)) { // PACK オプションなし cur_x += space_count * width; } for (i=0; num_str[i] != 0; i++) { @@ -362,7 +362,7 @@ void GrpObj::UpdateDigit(void) { cur_x += width; } - /* picture ������ */ + /* picture に設定 */ picture->SetSurface(surface, 0, 0); picture->SetSurfaceRect(Rect(0,0,width*total_count,height)); picture->SetSurfaceFreeFlag(); @@ -381,7 +381,7 @@ void GrpObj::CreateGan(Event::Container& anm = NULL; } if (gan_name.empty()) return; - /* ���ˡ�������� (.GAN �ե�����)����� */ + /* アニーメション情報 (.GAN ファイル)を求める */ string path(gan_name); path += ".gan"; ARCINFO* info = FileSearcher::GetInstance()->Find(FileSearcher::GAN, path.c_str(), "gan"); @@ -399,21 +399,21 @@ void GrpObj::CreateGan(Event::Container& attr = Attribute(attr | UPDATE_POS); const char* buf = data + 16; - buf += strlen(buf) + 1; // �����ե�����̾�����äƤ��� - buf += 4; // ��� 20000 - int pics = read_little_endian_int(buf); buf += 4; // ʣ���Υ��˥�����������äƤ����硢����� - // �ʲ���pics ���֤� - // ���˥������Ԥ����Τ���� + buf += strlen(buf) + 1; // 画像ファイル名が入っている + buf += 4; // 定数 20000 + int pics = read_little_endian_int(buf); buf += 4; // 複数のアニメーション情報が入っている場合、情報数 + // 以下、pics 回繰り返し + // アニメーションを行う実体を作成 AnmAlphaMove* wid = new AnmAlphaMove(event, picture); - if (event_number && event_number < pics) { // ʣ���Υ��˥�����������硢��ξ�����ɤ����Ф� */ + if (event_number && event_number < pics) { // 複数のアニメーション情報がある場合、先の情報を読み飛ばす */ int i; for (i=0; i<event_number; i++) { - buf += 4; // ��� 30000 + buf += 4; // 定数 30000 int ptns = read_little_endian_int(buf); buf += 4; buf += ptns*52; } } - buf += 4; // ��� 30000 + buf += 4; // 定数 30000 int ptns = read_little_endian_int(buf); buf += 4; int total_time = 0; int i; @@ -425,7 +425,7 @@ void GrpObj::CreateGan(Event::Container& int a = read_little_endian_int(buf+i*52+4*8+4); x += PosX(); y += PosY(); - if (p == -1) { a = 0; p = 0; } // p == -1 �ʤ�ʤˤ�ɽ�����ʤ� + if (p == -1) { a = 0; p = 0; } // p == -1 ならなにも表示しない if (p >= src_pos.size()) { fprintf(stderr,"Reading GAN file %s (G00 %s) : not enough pictures in .G00 file\n", path.c_str(), name.c_str()); a = 0; p = 0; @@ -433,7 +433,7 @@ void GrpObj::CreateGan(Event::Container& total_time += t; wid->ptns.push_back(AnmAlphaMove::Ptn(Rect(x,y), src_pos[p], a, total_time)); } - wid->SetPtn(); // �ѥ�������Ͽ��λ + wid->SetPtn(); // パターン登録終了 attr = Attribute(attr | ANM_PLAYSTART); anm = wid; } @@ -449,16 +449,16 @@ void GrpObj::CreateGanSpecial(Event::Con anm = NULL; } - // ���˥������Ԥ����Τ���� + // アニメーションを行う実体を作成 AnmAlphaMove* wid = new AnmAlphaMove(event, picture); int i; switch(event_number) { - case 0: // pattern �� 0 ����Ǹ�ޤ��Ѳ������� + case 0: // pattern を 0 から最後まで変化させる for (i=0; i<src_pos.size(); i++) { wid->ptns.push_back(AnmAlphaMove::Ptn(Rect(PosX(), PosY()), src_pos[i], 255, time*i)); } - wid->SetPtn(); // �ѥ�������Ͽ��λ + wid->SetPtn(); // パターン登録終了 anm = wid; attr = Attribute(attr | ANM_PLAYSTART); break; @@ -470,7 +470,7 @@ void GrpObj::CreateGanSpecial(Event::Con void GrpObj::SetZoomRotate(int new_zoom, int new_rotate) { if (zoom == new_zoom && rotate == new_rotate) return; if ( zoom == -1 || new_zoom == -1) { - attr = Attribute(attr | UPDATE_POS); // centering ���� + attr = Attribute(attr | UPDATE_POS); // centering する } zoom = new_zoom; if (new_rotate != -1) rotate = new_rotate; @@ -535,7 +535,7 @@ void GrpObj::_debug_Dump(int id, int ind ** ** class ScnGrp* */ -/* Princess Bride: �طʲ�ΰ����Τ߰�ư���μ��� */ +/* Princess Bride: 背景画の一部のみ移動、の実装 */ ScnGrpMove::ScnGrpMove(Event::Container& container, PicBase* _pic, PicRoot& _root, Surface* _dest, const Rect& _dest_r, Surface* _src, const Rect& _from, const Rect& _to, int total_time) : WidAnmTime(container, _pic, total_time), @@ -563,7 +563,7 @@ void ScnGrpMove::Exec(int count) { } void ScnGrpAnm::CalcTotal(void) { - /* total time ��� */ + /* total time を計算 */ if (empty()) return; int tm = 0; vector<ScnGrpAnmAtom>::iterator it; @@ -883,13 +883,13 @@ Grp::~Grp() { Surface* Grp::Dsurface(int pdt) { if (pdt == 0) return surface; - if (dsurface[pdt] == 0) { // �Ȥꤢ�������̤��礭���Ȥ������Ȥˤ��� + if (dsurface[pdt] == 0) { // とりあえず画面の大きさということにする if (pdt == WORKPDT) dsurface[pdt] = parent.Root().NewSurface(parent.Width(), parent.Height(), ALPHA_MASK); else dsurface[pdt] = parent.Root().NewSurface(parent.Width(), parent.Height(), NO_MASK); } - if (ssurface[pdt]) { // ssurface ��¸�ߤ���С�dsurface �˥��ԡ������֤� + if (ssurface[pdt]) { // ssurface が存在すれば、dsurface にコピーして返す DSurfaceMove(ssurface[pdt], Rect(*ssurface[pdt]), dsurface[pdt], Rect(0,0)); parent.Root().DeleteSurface(ssurface[pdt]); ssurface[pdt] = 0; @@ -943,7 +943,7 @@ void Grp::LoadSurface(const char* str, i if (ssurface[pdt]) parent.Root().DeleteSurface(ssurface[pdt]); ssurface[pdt] = bg; if (pdt == 0) { - /* �Ȥꤢ���� Princess Bride �Υ��˥������������ */ + /* とりあえず Princess Bride のアニメーション効果専用 */ Rect r(*ssurface[0]); Rect dr(*surface); int x = (dr.width()-r.width())/2; @@ -1046,14 +1046,14 @@ void Grp::StartAnm(int type) { anm1 = NULL; } map<int,GrpObj>::iterator it; - // ����ɽ�����object��õ� + // 現在表示中のobjectを消去 deleted_pic.push_back(screen); for (it=grpobj.begin(); it!=grpobj.end(); it++) { - if (! (it->second.attr & GrpObj::WIPEON)) { // �����ڤ��ؤ����� object ��� + if (! (it->second.attr & GrpObj::WIPEON)) { // 画像切り替え時に object 削除 deleted_pic.push_back(it->second.DeletePic()); } else { GrpObj& new_obj = bs_obj[it->first]; - if (new_obj.name.empty()) { // ������ object ��¸�ߤ��ʤ�������Ƥ�����Ѥ� + if (new_obj.name.empty()) { // 新しい object が存在しなければ内容を引き継ぐ new_obj = it->second; it->second.DeletePic(); } else { @@ -1062,10 +1062,10 @@ void Grp::StartAnm(int type) { } } } - grpobj.clear(); // �����֥������Ⱥ�� + grpobj.clear(); // 全オブジェクト削除 - // ���������֥������Ȥ�����screen ��ư - // ������ screen_front ��������Ƥ��� + // 全画像オブジェクトの前にscreen 移動 + // 新しい screen_front を作成しておく screen = screen_front; screen->hide(); screen->SetSurface(surface_update, 0, 0); @@ -1075,8 +1075,8 @@ void Grp::StartAnm(int type) { screen_front->hide(); screen_front->ZMove(screen); - // ������ object �ع�����surface_update �ؿ����� object ��ɽ�� - // (object �������� picture �� hide ����Ƥ���) + // 新しい object へ更新、surface_update へ新しい object を表示 + // (object 作成時は picture は hide されている) for (it=bs_obj.begin(); it!=bs_obj.end(); it++) { grpobj[it->first] = it->second; it->second.DeletePic(); @@ -1090,10 +1090,10 @@ void Grp::StartAnm(int type) { } } bs_obj.clear(); - // �������̳��� + // 画像効果開始 switch(sel.sel_no) { default: - case 0: case 50: // 0 �� 50 �ΰ㤤���ɤ��狼��ʤ� + case 0: case 50: // 0 と 50 の違いが良くわからない if (skip_mode & SKIP_GRP_NOEFFEC) anm1 = new WidAnmAlpha(event, screen, ALPHA_MAX, ALPHA_MAX, 0); else if (skip_mode & SKIP_GRP_FAST) @@ -1114,7 +1114,7 @@ void Grp::StartShake(int total, const in anm2 = NULL; } if (skip_mode & SKIP_GRP_NOEFFEC) return; - AnmAlphaMove* new_anm = new AnmAlphaMove(event, &parent); // shake screen �Ǥϸ����̤κ�ɸ���ɤ餹 + AnmAlphaMove* new_anm = new AnmAlphaMove(event, &parent); // shake screen では元画面の座標を揺らす int i; int tm = 0; for (i=0; i<total; i+=3) { @@ -1124,7 +1124,7 @@ void Grp::StartShake(int total, const in tm += pattern[i+2]; } new_anm->ptns.push_back(AnmAlphaMove::Ptn(Rect(0,0), Rect(0,0), 255, tm)); - new_anm->SetPtn(); // �ѥ�������Ͽ��λ + new_anm->SetPtn(); // パターン登録終了 new_anm->Play(); anm2 = new_anm; } @@ -1134,35 +1134,35 @@ void Grp::AbortAnm(void) { anm1->Abort(); delete anm1; anm1 = NULL; - /* �������̽�λ */ - /* �Ť����̤ؤβ������̤�����оõ� */ + /* 画像効果終了 */ + /* 古い画面への画像効果があれば消去 */ if (anm2 && anm2->pic[0] != screen) { anm2->Abort(); delete anm2; anm2 = NULL; } - /* pdt1 -> pdt0 �إ��ԡ� */ + /* pdt1 -> pdt0 へコピー */ DSurfaceMove(dsurface[1], Rect(*dsurface[1]), surface, Rect(0,0)); screen->SetSurface(surface, 0, 0); - // �������̳��ϻ���¸�ߤ���object��õ� - // ������ object ɽ�� + // 画像効果開始時に存在したobjectを消去 + // 新しい object 表示 RefreshObj(); return; } void Grp::LoadSurface(const char* str) { - if (anm1 != NULL) AbortAnm(); // �������褬����äƤʤ���ж�����λ + if (anm1 != NULL) AbortAnm(); // 前の描画が終わってなければ強制終了 LoadSurface(str, 1); bg_name = str; } void Grp::LoadSurface(void) { - if (anm1 != NULL) AbortAnm(); // �������褬����äƤʤ���ж�����λ + if (anm1 != NULL) AbortAnm(); // 前の描画が終わってなければ強制終了 LoadSurface(bg_name.c_str(), 1); } void Grp::AddSurface(const char* str) { - if (anm1 != NULL) AbortAnm(); // �������褬����äƤʤ���ж�����λ + if (anm1 != NULL) AbortAnm(); // 前の描画が終わってなければ強制終了 LoadSurface(bg_name.c_str()); string s = str; @@ -1185,7 +1185,7 @@ void Grp::CreateObj(int index) { GrpObj& g = grpobj[index]; g.CreateSurface(&parent); g.order = index; - if (g.picture == NULL) return; // ���顼��surface ��¸�ߤ��ʤ� + if (g.picture == NULL) return; // エラー:surface が存在しない g.picture->hide(); SetObjChanged(index); ZMoveObj(index); @@ -1200,7 +1200,7 @@ void Grp::CreateSubObj(int grp_index, in g = &g->children_obj[index]; g->CreateSurface(&parent); g->order = index; - if (g->picture == NULL) return; // ���顼��surface ��¸�ߤ��ʤ� + if (g->picture == NULL) return; // エラー:surface が存在しない g->picture->hide(); //TODO SetObjChanged(grp_index); @@ -1212,8 +1212,8 @@ void Grp::ZMoveObj(int index) { if (cur == grpobj.end()) return; GrpObj& g = grpobj[index]; if (g.picture == NULL) return; - // ��ʬ������� object ������С���������ɽ�� - // �����Ǥʤ���� screen ������ɽ�� + // 自分より前に object があれば、その前に表示 + // そうでなければ screen の前に表示 GrpObjMap::iterator cur_backobj = grpobj.end(); GrpObjMap::iterator it; for (it = grpobj.begin(); it != grpobj.end(); it++) { @@ -1235,10 +1235,10 @@ void Grp::ZMoveObj(int index) { } void Grp::SwapObj(int index1, int index2) { - // �ǥե�����ͤ��� order ���ѹ�����Ƥ������Τߡ�order ����¸����� - // �ޤ���ξ����object��swap + // デフォルト値から order が変更されていた場合のみ、order は保存される + // まずは両方のobjectをswap if (grpobj.find(index1) == grpobj.end()) { - if (grpobj.find(index2) == grpobj.end()) return; // �ɤ���� object ��¸�ߤ��ʤ� + if (grpobj.find(index2) == grpobj.end()) return; // どちらの object も存在しない grpobj[index1] = grpobj[index2]; if (grpobj[index1].order == index2) grpobj[index1].order = index1; @@ -1246,7 +1246,7 @@ void Grp::SwapObj(int index1, int index2 grpobj.erase(index2); ZMoveObj(index1); return; - } else if (grpobj.find(index2) == grpobj.end()) { // index2 ��¸�ߤ��ʤ���� + } else if (grpobj.find(index2) == grpobj.end()) { // index2 が存在しない場合 grpobj[index2] = grpobj[index1]; if (grpobj[index2].order == index1) grpobj[index2].order = index2; @@ -1269,7 +1269,7 @@ void Grp::SwapObj(int index1, int index2 } } -bool Grp::Pressed(int x, int y, void* pointer) { // �ޥ�������å��ǥ���� +bool Grp::Pressed(int x, int y, void* pointer) { // マウスクリックでキャンセル Grp* g = (Grp*)pointer; if (g->status == WAIT_MOVIE) g->music->StopMovie(); @@ -1283,7 +1283,7 @@ bool Grp::Pressed(int x, int y, void* pointer) { // �ޥ�������å��ǥ���� return false; // event deleted } -/* mode.cgm �� decode �� */ +/* mode.cgm の decode 用 */ static unsigned char decode_char[256] = { 0x8b, 0xe5, 0x5d, 0xc3, 0xa1, 0xe0, 0x30, 0x44, 0x00, 0x85, 0xc0, 0x74, 0x09, 0x5f, 0x5e, 0x33, @@ -1320,7 +1320,7 @@ static unsigned char decode_char[256] = }; void Grp::LoadCgm() { - /* cgm �ե������ɤ߹��� */ + /* cgm ファイル読み込み */ const char* fname = config->GetParaStr("#CGTABLE_FILE"); if (fname == NULL) return; ARCINFO* info = FileSearcher::GetInstance()->Find(FileSearcher::ALL, fname, ""); @@ -1337,11 +1337,11 @@ void Grp::LoadCgm() { cgm_size = read_little_endian_int(data+0x10); int i, j; - // xor ��� + // xor 解除 for (i=0; i < sz-0x20; i++) { data[i+0x20]^=decode_char[i&0xff]; } - // Ÿ�� + // 展開 int dest_size = cgm_size * 36; char* dest = new char[dest_size+1024]; char* src = data + 0x28; @@ -1359,7 +1359,7 @@ void Grp::LoadCgm() { /***************************************************** * -* Grp :: Save, Load : �����֥ե�������� +* Grp :: Save, Load : セーブファイル処理 * */ void Grp::Save(std::string& str) { @@ -1426,7 +1426,7 @@ void Grp::LoadSys(const char* save) { /***************************************************** * -* Grp :: Wait , Exec : ���ޥ�ɼ¹��� +* Grp :: Wait , Exec : コマンド実行部 * */ static vector<int> drawn_images; @@ -1509,7 +1509,7 @@ bool Grp::Wait(unsigned int current_time return false; } -void Grp::DeleteObjPic(int num) { // object �� surface �Τߺ�� +void Grp::DeleteObjPic(int num) { // object の surface のみ削除 if (grpobj.find(num) == grpobj.end()) return; deleted_pic.push_back(grpobj[num].DeletePic()); } @@ -1539,12 +1539,12 @@ void Grp::DeleteSubObj(int num_grp, int void Grp::Exec(Cmd& cmd) { if (cmd.cmd_type == CMD_TEXTEND) { - music->StopKoe(500); // �ƥ����Ƚ�λ������ߤ�� + music->StopKoe(500); // テキスト終了で声を止める cmd.clear(); return; } if (cmd.cmd_type == CMD_WAITFRAMEUPDATE) { - // wait ������� RefreshObj() ���Ƥ��� + // wait する場合は RefreshObj() しておく RefreshObj(); } if (cmd.cmd_type != CMD_OTHER) return; @@ -1552,8 +1552,8 @@ void Grp::Exec(Cmd& cmd) { CommandHandler::Exec(cmd); //TODO: ??? - if (cmd.cmd1 == 1 && cmd.cmd2 == 60 && cmd.cmd3 == 0) { // ??? : KANOGI : �������֥������Ȥκ���� - DeleteObjPic(cmd.args[0].value); // ��ե�����̾��surface���� + if (cmd.cmd1 == 1 && cmd.cmd2 == 60 && cmd.cmd3 == 0) { // ??? : KANOGI : 画像オブジェクトの削除? + DeleteObjPic(cmd.args[0].value); // 旧ファイル名のsurfaceを削除 GrpObj& g = grpobj[cmd.args[0].value]; g.attr = GrpObj::Attribute(g.attr | GrpObj::HIDDEN); cmd.clear();
--- a/scn2k/scn2k_impl.cc +++ b/scn2k/scn2k_impl.cc @@ -76,7 +76,7 @@ Scn2k::Scn2k(Event::Container& _event, P menu = NULL; menu_mouseshown = false; - /* �ޥ��������������� */ + /* マウスカーソルを作成 */ mouse_type = 0; mouse_surface = NULL; mouse_pressed = 0; @@ -107,7 +107,7 @@ char* Scn2k::OpenScript(int new_scn_numb if (info == NULL) goto err; data = info->Read(); - /* version ��ǧ */ + /* version 確認 */ scenario_magic = read_little_endian_int(data + 4); if (scenario_magic != 0x2712 && scenario_magic != 0x1adb2) { fprintf(stderr,"Invalid scenario header : scenario number %d\n",new_scn_number); @@ -123,7 +123,7 @@ char* Scn2k::OpenScript(int new_scn_numb fprintf(stderr,"Invalid scenario header : scenario number %d\n",new_scn_number); goto err; } - /* header ���� subroutine number �Ȥ���� */ + /* header から subroutine number とりだし */ if (call_vec) { int i; for (i=0; i<100; i++) { @@ -170,7 +170,7 @@ bool Scn2k::ChangeScript(int new_scn_num scn_pt = 0; } } else if (call_no < 0) { - scn_pt = -call_no; // �ǥХå��� + scn_pt = -call_no; // デバッグ用 } scn_number = new_scn_number; @@ -205,21 +205,21 @@ bool Scn2k::ReadCmdAt(Cmd& cmd, int scn, return true; } -extern bool save_req, load_req; // �����ܡ��ɤ��饻���֡������ɤǤ���褦�� +extern bool save_req, load_req; // キーボードからセーブ・ロードできるように extern bool pressAreq; void Scn2k::Elapsed(unsigned int current_time) { - SetWakeup(current_time + 10); // 10ms�˰�ʥꥪ������ץȲ�� + SetWakeup(current_time + 10); // 10msに一回シナリオスクリプト解釈 if (script == NULL) return; -//VarInfo info; info.type = 6; info.number = 0; // PB �Ρְ����Ϥ������Ȥ�����ץե饰 +//VarInfo info; info.type = 6; info.number = 0; // PB の「一回ゲームを開始したことがある」フラグ //flag.Set(info,1); -//info.type = 0; info.number = 604; // Princess Bride: ���ꥢ�о�����ե饰 (��) +//info.type = 0; info.number = 604; // Princess Bride: クリア対象設定フラグ (聖) //flag.Set(info, 1); Cmd cmd(flag, system_version); int cnt1; - int cnt2 = 1000; // flag / jump / flag �ϥ��ޥ�ɤκ���¹Բ�� + int cnt2 = 1000; // flag / jump / flag 系コマンドの最大実行回数 /* XXX */ if (save_req) { @@ -237,12 +237,12 @@ void Scn2k::Elapsed(unsigned int current return; } - /* �������Ϥʤɤ��б� */ - // ��˥塼��ʳ��� shift �����������줿�饹���å׳��� + /* キー入力などに対応 */ + // メニュー内以外で shift キーが押されたらスキップ開始 if ( (skip_mode&SKIP_IN_MENU) == 0) { if (event.pressed(KEY_SHIFT)) { if (skip_mode & SKIP_TEXT) { - ; // �����å���ʤ�ʤˤ⤷�ʤ� + ; // スキップ中ならなにもしない } else { SetSkipMode(SkipMode(SKIP_TEXT | SKIP_GRP_NOEFFEC | SKIPEND_KEY)); } @@ -261,8 +261,8 @@ void Scn2k::Elapsed(unsigned int current } } - for (cnt1=0; cnt1<20; cnt1++) { // ���ˤĤ� 20 �ĤΥ��ޥ�ɼ¹� - // ¾�Υ��ޥ�ɼ¹���ʤ齪λ + for (cnt1=0; cnt1<20; cnt1++) { // 一回につき 20 個のコマンド実行 + // 他のコマンド実行中なら終了 if ( (cmd.cmd_type == CMD_NOP && SysWait(cmd)) || // (cmd.cmd_type == CMD_NOP && text_exec.Wait(current_time, cmd)) || // (cmd.cmd_type == CMD_NOP && grp_exec.Wait(current_time, cmd))) { @@ -270,7 +270,7 @@ void Scn2k::Elapsed(unsigned int current (cmd.cmd_type == CMD_NOP && text_exec.Wait(current_time, cmd))) { break; } - // ���ޥ���ɤ߹��� + // コマンド読み込み for (; cnt2 > 0; cnt2--) { scn_point = script - script_start; eprintf("%d / %d :", script - script_start, script_end-script_start); @@ -355,7 +355,7 @@ fprintf(stderr," -> fall back to %d\n",s if (cmd.cmd_type == CMD_TEXT && cmd.pos != -1) { set<int>& readflag = text_readflag[scn_number]; - if (readflag.find(cmd.pos) == readflag.end()) { // ̤�ɥƥ�����ȯ�� + if (readflag.find(cmd.pos) == readflag.end()) { // 未読テキスト発見 readflag.insert(cmd.pos); if (skip_mode & SKIPEND_TEXT) { if (!(skip_mode & SKIPEND_KEY)) SetSkipMode(SKIP_NO); @@ -474,10 +474,10 @@ void Scn2k::SysExec(Cmd& cmd) { return; } if (cmd.cmd_type == CMD_BACKLOGREQ_FWD) { - cmd.clear(); // backlog mode �ʳ��� fwd ����Ƥ�ʤˤ⤷�ʤ� + cmd.clear(); // backlog mode 以外で fwd を押されてもなにもしない return; } - SetSkipMode(SKIP_IN_MENU); // �ƥ����ȥ����å����Ϥ��������� + SetSkipMode(SKIP_IN_MENU); // テキストスキップ等はここで中断 menu = new Scn2kMenu(Scn2kMenu::MENU_BACKLOG, *this, flag, text_exec, system_version); menu->InitPanel(event, parent); menu->InitTitle(Scn2kSaveTitle(*this)); @@ -490,7 +490,7 @@ void Scn2k::SysExec(Cmd& cmd) { int scn=0, pt=0; config->GetParam("#CANCELCALL", 2, &scn, &pt); if (scn) { - // ������å����줿�� global call ��Ԥ� + // 右クリックされたら global call を行う cmd.cmd_type = CMD_OTHER; cmd.cmd1 = 0; cmd.cmd2 = 1; @@ -499,16 +499,16 @@ void Scn2k::SysExec(Cmd& cmd) { cmd.args.clear(); cmd.args.push_back(VarInfo(SCN_INFO_MENU)); cmd.args.push_back(0); - SetSkipMode(SKIP_IN_MENU); // �ƥ����ȥ����å����Ϥ��������� + SetSkipMode(SKIP_IN_MENU); // テキストスキップ等はここで中断 } } if (cmd.cmd_type == CMD_SAVECMDGRP || cmd.cmd_type == CMD_SAVECMDGRP_START || cmd.cmd_type == CMD_SAVECMDGRP_ONCE || cmd.cmd_type == CMD_SAVECMD_ONCE) { - // �������ޥ�����ϥ����å�����¸���������ֻ�����¸�Ǥ���褦�ˤ��� + // 画像コマンド等はスタックに保存し、セーブ時に保存できるようにする if (cmd.cmd_type == CMD_SAVECMDGRP_START) { vector<CmdSimplified>::iterator it, cur; cur = cmd_stack.begin(); cmd_stack_str = cmd_stack_str_orig; - /* ������Ϣ���ޥ�ɰʳ����̤ˤ��� */ + /* 画像関連コマンド以外を別にする */ for (it=cmd_stack.begin(); it != cmd_stack.end(); it++) { if (it->type != CMD_SAVECMDGRP && it->type != CMD_SAVECMDGRP_START && it->type != CMD_SAVECMDGRP_ONCE) { cur->copy(*it, cmd_stack_str); @@ -517,7 +517,7 @@ void Scn2k::SysExec(Cmd& cmd) { } cmd_stack.erase(cur, cmd_stack.end()); } - if (cmd.cmd_type == CMD_SAVECMD_ONCE || cmd.cmd_type == CMD_SAVECMDGRP_ONCE) { // Ʊ�����ޥ�ɤ�����к������ + if (cmd.cmd_type == CMD_SAVECMD_ONCE || cmd.cmd_type == CMD_SAVECMDGRP_ONCE) { // 同じコマンドがあれば削除する vector<CmdSimplified>::iterator it; for (it = cmd_stack.end(); it != cmd_stack.begin(); ) { --it; @@ -543,22 +543,22 @@ void Scn2k::SysExec(Cmd& cmd) { int call_no = 0; if (cmd.args.size() >= 2) call_no = cmd.args[1].value; eprintf("global jump to %d\n",cmd.args[0].value); - if (! ChangeScript(cmd.args[0].value, call_no)) return; // �ɤ߹���ʤ�; abort. + if (! ChangeScript(cmd.args[0].value, call_no)) return; // 読み込めない; abort. cmd.clear(); - } else if (cmd.cmd3 == 0x0c || cmd.cmd3 == 0x12) { // call (0x12 ��������̯) + } else if (cmd.cmd3 == 0x0c || cmd.cmd3 == 0x12) { // call (0x12 の方は微妙) int new_scn = cmd.args[0].value; int new_pt = 0; - if (cmd.args.size() >= 2) { // subroutine number ���դ� - // �������դ��Τ⤢��餷�� + if (cmd.args.size() >= 2) { // subroutine number が付く + // 引数が付くのもあるらしい new_pt = cmd.args[1].value; } if (new_scn == SCN_INFO_MENU) { // menu call config->GetParam("#CANCELCALL", 2, &new_scn, &new_pt); - stack.push_back(StackItem(SCN_INFO, SCN_INFO_MENU)); // menu call ���ü�ʵ��� + stack.push_back(StackItem(SCN_INFO, SCN_INFO_MENU)); // menu call を示す特殊な記号 } else { int i; VarInfo var; - // ���������ѿ���ȼ�� subroutine call + // ローカル変数を伴う subroutine call var.type = 11; var.number = 0; int saved_vars = 0; @@ -583,7 +583,7 @@ void Scn2k::SysExec(Cmd& cmd) { var.type = 11; var.number = 0; - // �ü�� subroutine call �ʤΤǡ�;�פʾ����������Ϥ� + // 特殊な subroutine call なので、余計な情報を引数に渡す for (i=2; i<cmd.args.size(); i++) { flag.Set(var, cmd.args[i].value); // fprintf(stderr,"<%d:%d>=%d;",var.type,var.number,cmd.args[i].value); @@ -595,20 +595,20 @@ void Scn2k::SysExec(Cmd& cmd) { stack.push_back(StackItem(scn_number, scn_pt)); // fprintf(stderr,"\nglobal call %d:%d from %d:%d\n",new_scn,new_pt,scn_number,scn_pt); eprintf("global call to %d, %d\n",new_scn, new_pt); - if (! ChangeScript(new_scn, new_pt)) return; // �ɤ߹���ʤ�; abort. + if (! ChangeScript(new_scn, new_pt)) return; // 読み込めない; abort. cmd.clear(); - } else if (cmd.cmd3 == 0x65) { // ʸ������֤��ͤåȤ��� + } else if (cmd.cmd3 == 0x65) { // 文字列の返り値をセットする int arg1 = cmd.args[0].value; string s = cmd.Str(cmd.args[1]); int sp = stack_strbuffer.size(); stack.push_back(StackItem(SCN_INFO_RETSTR+arg1, sp)); stack_strbuffer.push_back(s); cmd.clear(); - } else if (cmd.cmd3 == 0x0d || cmd.cmd3 == 0x0a || cmd.cmd3 == 0x11 || cmd.cmd3 == 0x13) { // return (0a: local return) (0x13�Ϥ褯�狼��ʤ�) + } else if (cmd.cmd3 == 0x0d || cmd.cmd3 == 0x0a || cmd.cmd3 == 0x11 || cmd.cmd3 == 0x13) { // return (0a: local return) (0x13はよくわからない) // fprintf(stderr,"global return : stack size %d\n",stack.size()); if (stack.empty()) { cmd.clear(); - return; // �����å�������������abort + return; // スタックがおかしい:abort } map<int, string> retstr; while( (!stack.empty()) && stack.back().scn_number >= SCN_INFO_RETSTR) { @@ -621,7 +621,7 @@ void Scn2k::SysExec(Cmd& cmd) { } if (stack.empty()) { cmd.clear(); - return; // �����å�������������abort + return; // スタックがおかしい:abort } StackItem s = stack.back(); stack.pop_back(); @@ -631,12 +631,12 @@ void Scn2k::SysExec(Cmd& cmd) { stack.pop_back(); if (mode == SCN_INFO_MENU) { // fprintf(stderr,"\nInfo Menu;"); - // menu �⡼�ɽ�λ + // menu モード終了 SetSkipMode(SkipMode(skip_mode & (~SKIP_IN_MENU) )); } else if (mode >= SCN_INFO_LOCALS && mode <= SCN_INFO_LOCALS+50) { // fprintf(stderr,"\nInfo Local;"); int i; - // ���������ѿ����᤹ + // ローカル変数を元に戻す VarInfo var; var.type = 11; var.number = 0; @@ -675,7 +675,7 @@ void Scn2k::SysExec(Cmd& cmd) { } if (cmd.cmd3 == 0x11 || cmd.cmd3 == 0x13) { // fprintf(stderr,"\nSet RetLocal;"); - // �֤��ͤåȤ��� + // 返り値をセットする map<int,string>::iterator it; VarInfo var; var.type = TYPE_VARLOCSTR; @@ -698,7 +698,7 @@ void Scn2k::SysExec(Cmd& cmd) { // fprintf(stderr,"global return : return to %d:%d\n",s.scn_number,s.scn_pt); // fprintf(stderr,"\nglobal return %d:%d from %d:%d\n",s.scn_number,s.scn_pt,scn_number, script - script_start); if (s.scn_number != -1) { - if (! ChangeScript(s.scn_number, 0)) return; // �ɤ߹���ʤ�; abort. + if (! ChangeScript(s.scn_number, 0)) return; // 読み込めない; abort. } script = script_start + s.scn_pt; cmd.clear(); @@ -710,15 +710,15 @@ void Scn2k::SysExec(Cmd& cmd) { DllCall_LB(cmd, flag); cmd.clear(); } - } else if (cmd.cmd1 == 0 && cmd.cmd2 == 0x04) { // ��˥塼�⡼�� + } else if (cmd.cmd1 == 0 && cmd.cmd2 == 0x04) { // メニューモード if (cmd.cmd3 == 300 || cmd.cmd3 == 301 || cmd.cmd3 == 302) { - // ��˥塼�����return + // メニューからのreturn cmd.cmd2 = 1; cmd.cmd3 = 0x0d; SysExec(cmd); } } else if (cmd.cmd1 == 1 && cmd.cmd2 == 0x04) { - if (cmd.cmd3 == 0 && cmd.cmd4 == 0) { // �����ȥ�̾���� + if (cmd.cmd3 == 0 && cmd.cmd4 == 0) { // タイトル名設定 const char* name = cmd.Str(cmd.args[0]); if (name == NULL) name = ""; window_title = name; @@ -728,7 +728,7 @@ void Scn2k::SysExec(Cmd& cmd) { parent.Root().SetWindowCaption(setname.c_str()); cmd.clear(); } else if (cmd.cmd3 == 0x82 && cmd.cmd4 == 0) { - /* cmd.cmd3 == 0x82 : �ޥ����� press ���֥��ꥢ���� */ + /* cmd.cmd3 == 0x82 : マウスの press 状態クリアかも */ event.presscount(MOUSE_LEFT); event.presscount(MOUSE_RIGHT); cmd.clear(); @@ -750,25 +750,25 @@ void Scn2k::SysExec(Cmd& cmd) { flag.Set(cmd.args[3], right); cmd.clear(); } else if (cmd.cmd3 == 0x15e || cmd.cmd3 == 0x161 || cmd.cmd3 == 0x162 || cmd.cmd3 == 0x14c || cmd.cmd3 == 0x7d1) { -/* 15e, 161, 162, 14c, 7d1 : �ʤ�餫�Υ����ƥ������֤���skip mode�ʤɡ��� */ -/* 7d1: == 1 || 14c: == 1 || (15e==1&&161==1&&162==0) || (press_val == 2) : �����å��桩 �����ȥ���̤Υ��˥�����λ */ +/* 15e, 161, 162, 14c, 7d1 : なんらかのシステム情報を返す(skip modeなど?) */ +/* 7d1: == 1 || 14c: == 1 || (15e==1&&161==1&&162==0) || (press_val == 2) : スキップ中? タイトル画面のアニメーション終了 */ flag.SetSys(0); cmd.clear(); - } else if (cmd.cmd3 == 0x4b0) { // ��λ + } else if (cmd.cmd3 == 0x4b0) { // 終了 System::Main::Quit(); //script = NULL; script_start = NULL; script_end = NULL; cmd.clear(); cmd.cmd_type = CMD_WAITFRAMEUPDATE; - } else if (cmd.cmd3 == 0x4b4 || cmd.cmd3 == 0x4b5) { // ����贬���ᤷ + } else if (cmd.cmd3 == 0x4b4 || cmd.cmd3 == 0x4b5) { // 選択肢巻き戻し LoadRollback(cmd); } else if (cmd.cmd3 == 0x58d) { - // ���˥�����|�����֤��줿�ֹ���֤��� + // 前にロード|セーブされた番号を返す。 int lastsave; config->GetParam("#LASTSAVE", 1, &lastsave); flag.SetSys(lastsave-1); } else if (cmd.cmd3 == 0x585) { - // �������ε�Ͽ���줿���ա������ȥ�ʤɤ��֤���� - // �ǡ������ʤ��ʤ� sys �� 0��������ʤ� 1 ���֤� + // 第一引数の記録された日付、タイトルなどが返される + // データがないなら sys に 0が、あるなら 1 が返る int y,m,d,wd,h,min,s,ms; string title; fprintf(stderr,"StatSave %d:",cmd.args[0].value+1); @@ -793,7 +793,7 @@ fprintf(stderr,"StatSave %d:",cmd.args[0 Save(cmd); } else if (cmd.cmd3 == 0xc25) { // load Load(cmd); - } else if (cmd.cmd3 == 0x4b1 || cmd.cmd3 == 0x4b3) { // menu ����� (4b3: �Хåɥ����) + } else if (cmd.cmd3 == 0x4b1 || cmd.cmd3 == 0x4b3) { // menu へ戻る (4b3: バッドエンド) int scn_start; if (config->GetParam("#SEEN_MENU", 1, &scn_start) == 0) { ChangeScript(scn_start, 0); @@ -834,7 +834,7 @@ fprintf(stderr,"StatSave %d:",cmd.args[0 #include <errno.h> #include <unistd.h> -// �����֥ե������̾����Ĥ��� +// セーブファイルの名前をつくる string Scn2k::MakeSaveFile(void) const { struct stat sstatus; string dir = "~/.xkanon"; @@ -846,7 +846,7 @@ string Scn2k::MakeSaveFile(void) const { dir = new_dir; } } - // savepath�˥ե�����̾�����äƤ���С�������֥ե�����Ȥ��ƻȤ� + // savepathにファイル名が入っていれば、それをセーブファイルとして使う if (stat(dir.c_str(), &sstatus) == -1) { if (errno != ENOENT) { fprintf(stderr,"Cannot open save file; dir %s is not directory\n",dir.c_str()); @@ -860,11 +860,11 @@ string Scn2k::MakeSaveFile(void) const { return dir; } } - // �ե�����̾���� + // ファイル名を作る const char* regname = config->GetParaStr("#REGNAME"); char* fname = new char[strlen(regname)+1]; - /* �쥸���ȥ�̾��ե�����̾�Ȥ���ͭ���ʤ�Τˤ��� */ + /* レジストリ名をファイル名として有効なものにする */ int i; for (i=0; regname[i]!=0; i++) { char c = regname[i]; if (c == '\\' || c == '/' || c == ':' || c <= 0x20) c = '_'; @@ -877,7 +877,7 @@ string Scn2k::MakeSaveFile(void) const { return dir; } -// �����֥ե������̾����Ĥ��� +// セーブファイルの名前をつくる string Scn2kSaveTitle::operator() (int number) const { int y,m,d,wd,h,min,sec,msec; string title; @@ -999,7 +999,7 @@ void Scn2k::LoadSys(void) { delete[] savedata; } - /* ����� */ + /* 初期化 */ int scn_start; config->GetParam("#SEEN_START", 1, &scn_start); ChangeScript(scn_start, 0); save_scn = 0; @@ -1032,7 +1032,7 @@ bool Scn2k::StatSaveFile(int num, int& y min = t->tm_min; sec = t->tm_sec; msec = 0; - /* �����ȥ�μ��� */ + /* タイトルの取得 */ FILE* savefile = fopen(path.c_str(), "rb"); if (savefile == NULL) return false; char regname[1024]; @@ -1080,7 +1080,7 @@ void Scn2k::LoadRollback(Cmd& cmd) { text_exec.Load(savedata.c_str()); grp_exec.Load(savedata.c_str()); - /* ���̤β����ʤ� */ + /* 画面の回復など */ SetSkipMode(SKIP_NO); vector<CmdSimplified>::iterator it; cmd.clear(); @@ -1098,7 +1098,7 @@ void Scn2k::LoadRollback(Cmd& cmd) { void Scn2k::Save(Cmd& cmd) { if (cmd.cmd_type == CMD_SAVEREQ) { if (menu == NULL) { - SetSkipMode(SKIP_IN_MENU); // �ƥ����ȥ����å����Ϥ��������� + SetSkipMode(SKIP_IN_MENU); // テキストスキップ等はここで中断 menu = new Scn2kMenu(Scn2kMenu::MENU_SAVE, *this, flag, text_exec, system_version); menu->InitPanel(event, parent); menu->InitTitle(Scn2kSaveTitle(*this)); @@ -1113,7 +1113,7 @@ void Scn2k::Save(Cmd& cmd) { FILE* f = NULL; if (save_scn == 0) { fprintf(stderr,"Cannot decide save point\n"); - return; // �����ְ��֤���¸����Ƥʤ� + return; // セーブ位置が保存されてない } string path = MakeSaveFile(); int file_number = 1; @@ -1126,7 +1126,7 @@ void Scn2k::Save(Cmd& cmd) { sprintf(buf, ".%d",file_number); path += buf; - /* �����֥ե������ǧ */ + /* セーブファイル確認 */ sprintf(buf, "KEY=%s\n", config->GetParaStr("#REGNAME")); save += buf; string save_sys; SaveImpl(save_sys); @@ -1161,7 +1161,7 @@ void Scn2k::Load(Cmd& cmd) { menu = new Scn2kMenu(Scn2kMenu::MENU_LOAD, *this, flag, text_exec, system_version); menu->InitPanel(event, parent); menu->InitTitle(Scn2kSaveTitle(*this)); - SetSkipMode(SKIP_IN_MENU); // �ƥ����ȥ����å����Ϥ��������� + SetSkipMode(SKIP_IN_MENU); // テキストスキップ等はここで中断 if (mouse_surface) menu_mouseshown = true; else menu_mouseshown = false; ShowCursor(); @@ -1212,7 +1212,7 @@ void Scn2k::Load(Cmd& cmd) { rollback_data = rollback_end; } - /* ���̤β����ʤ� */ + /* 画面の回復など */ SetSkipMode(SKIP_NO); vector<CmdSimplified>::iterator it; for (it = cmd_stack.begin(); it != cmd_stack.end(); it++) { @@ -1235,7 +1235,7 @@ void Scn2k::SaveImpl(string& save) { sprintf(buf, "Title=%s\nMouseType=%d\nMouseShown=1\n",window_title.c_str(), mouse_type); save += buf; vector<StackItem>::iterator sit; for (sit=stack.begin(); sit!=stack.end(); sit++) { - if (sit->scn_number == SCN_INFO && sit->scn_pt == SCN_INFO_MENU) break; // ��˥塼������ľ���ޤǤΥ����å�����¸ + if (sit->scn_number == SCN_INFO && sit->scn_pt == SCN_INFO_MENU) break; // メニューに入る直前までのスタックを保存 sprintf(buf, "Stack=%d,%d\n",sit->scn_number,sit->scn_pt); save += buf; } @@ -1329,7 +1329,7 @@ void Scn2k::SetSkipMode(SkipMode mode) { ** **/ static double* lb_ef_param = 0; -void DLLCall_LB_EF00_0(Cmd& cmd, Flags& flags) { // ���ե����Ȥ����� +void DLLCall_LB_EF00_0(Cmd& cmd, Flags& flags) { // エフェクトの設定 if (lb_ef_param == 0) { lb_ef_param = new double[sizeof(double) * 0x60 * 8]; } @@ -1402,7 +1402,7 @@ void DLLCall_LB_EF00_0(Cmd& cmd, Flags& flags) { // ���ե����Ȥ����� return; } -void DLLCall_LB_EF00_1(Cmd& cmd, Flags& flags) { // ����Ԥ� +void DLLCall_LB_EF00_1(Cmd& cmd, Flags& flags) { // 計算を行う if (lb_ef_param == 0) { fprintf(stderr,"Warning : DLLCall_LB_EF00_1 : Script error : effect calculation was called before setting\n"); return; @@ -1419,7 +1419,7 @@ void DLLCall_LB_EF00_1(Cmd& cmd, Flags& flags) { // ����Ԥ� m *= 3; // 0 < x < 1 - // va - vd �� 0-1 ���ϰϤ��о�������ģ����ؿ� + // va - vd は 0-1 の範囲で対称性を持つ3次関数 double x = double(flags.Get(5, 1162 + index)) * 0.001; double va = (x * x * x)/6; double vb = (-x*x*x + 3*x*x - 3*x + 1) / 6; @@ -1445,12 +1445,12 @@ void DLLCall_LB_EF00_1(Cmd& cmd, Flags& flags) { // ����Ԥ� } -void DllCall_LB(Cmd& cmd, Flags& flags) { // ��ȥ�Х����������� EF00.dll �ߥ�졼�� +void DllCall_LB(Cmd& cmd, Flags& flags) { // リトルバスターズ!の EF00.dll をエミュレート if (cmd.args[0].value == 1) { // "EF00.dll" - if (cmd.args[1].value == 0) { // ���ե����Ȥ����� + if (cmd.args[1].value == 0) { // エフェクトの設定 DLLCall_LB_EF00_0(cmd, flags); - } else if (cmd.args[1].value == 1) { // ����Ԥ� + } else if (cmd.args[1].value == 1) { // 計算を行う DLLCall_LB_EF00_1(cmd, flags); } } else { @@ -1669,7 +1669,7 @@ void LoadMenu::SetPage(int new_page) { else button->SetText("----"); } } - // �ܥ�������Ƥ��ѹ����� + // ボタンの内容を変更する if (select_value < cur_page || select_value > cur_page+12) btn_local->SetValue(-1); else @@ -1697,18 +1697,18 @@ void LoadMenu::SetValue(int new_value) { in_setpage = true; if (new_value < 0 || new_value > title.size() || - (interface.type == Scn2kMenu::MENU_LOAD && title_valid[new_value] == 0) ) { // ̵��������� + (interface.type == Scn2kMenu::MENU_LOAD && title_valid[new_value] == 0) ) { // 無効な選択肢 if (select_value < select_page/10 || select_value > select_page/10+12) btn_local->SetValue(-1); else btn_local->SetValue(select_value-select_page/10); - } else { // �������ѹ����� + } else { // 選択肢を変更する if (select_value == new_value) { - PressOk(); // ���֥륯��å� + PressOk(); // ダブルクリック } else { select_value = new_value; if (interface.type == Scn2kMenu::MENU_SAVE && title_valid[select_value] == 0) { - PressOk(); // �����������֥ǡ����ʤ�̵�������� + PressOk(); // 新しいセーブデータなら無条件に選択 } } } @@ -1718,23 +1718,23 @@ void LoadMenu::SetValue(int new_value) { void LoadMenu::PressOk(void) { if (select_value == -1) { - btn_set->SetValue(-1); // �ʤˤ⤷�ʤ� + btn_set->SetValue(-1); // なにもしない return; } menu->deactivate(); if (interface.type == Scn2kMenu::MENU_LOAD) { interface.cmd.cmd_type = CMD_LOAD; interface.cmd.args.push_back(VarInfo(select_value)); - awk_dialog = new Dialog(*pevent, pparent, "�ե����������ɤ��ޤ�����", true); + awk_dialog = new Dialog(*pevent, pparent, "ファイルをロードしますか?", true); awk_dialog->set_pointer = this; awk_dialog->set_func = ChangeDialog; } else {// MENU_SAVE interface.cmd.cmd_type = CMD_SAVE; interface.cmd.args.push_back(VarInfo(select_value)); - if (title_valid[select_value] == 0) { // �����������֥ǡ��� + if (title_valid[select_value] == 0) { // 新しいセーブデータ interface.status = Scn2kMenu::MenuStatus(Scn2kMenu::MENU_CMD | Scn2kMenu::MENU_DELETE); - } else { // �����֥ǡ���������ǧ - awk_dialog = new Dialog(*pevent, pparent, "�ǡ��������ޤ�����", true); + } else { // セーブデータを上書き:確認 + awk_dialog = new Dialog(*pevent, pparent, "データを上書きしますか?", true); awk_dialog->set_pointer = this; awk_dialog->set_func = ChangeDialog; } @@ -1742,10 +1742,10 @@ void LoadMenu::PressOk(void) { } void LoadMenu::Cancel(void) { - if (awk_dialog != NULL) { // �����������Υ���� + if (awk_dialog != NULL) { // ダイアログのキャンセル awk_dialog->status = Dialog::CANCEL; ChangeDialog(this, awk_dialog); - } else { // ���̥���� + } else { // 一般キャンセル btn_set->SetValue(1); } } @@ -1778,7 +1778,7 @@ void LoadMenu::ChangeBtnSet(void* pointe void LoadMenu::ChangeDialog(void* pointer, Dialog* widget) { LoadMenu* instance = (LoadMenu*)pointer; if (widget->status == Dialog::CANCEL) { - // �����������õOK �ܥ������� + // ダイアログ消去、OK ボタン復帰 delete instance->awk_dialog; instance->awk_dialog = NULL; instance->menu->activate(); @@ -1850,7 +1850,7 @@ void BacklogMenu::Exec(Cmd& cmd) { } if (cmd.cmd_type != CMD_NOP) return; if (backlog_update) return; - // backlog ��ǿ��ξ��֤˹��� + // backlog を最新の状態に更新 cmd.clear(); BacklogItem item;
--- a/scn2k/scn2k_impl.h +++ b/scn2k/scn2k_impl.h @@ -86,7 +86,7 @@ class Scn2k : Event::Time { SCN_INFO = 999999, SCN_INFO_MENU = 10000001, SCN_INFO_LOCALS = 10000100, SCN_INFO_LOCALSTR = 10000200, SCN_INFO_RETSTR = 10000300 - }; // stack ���Ѥޤ���ü���ֹ� + }; // stack に積まれる特殊な番号 int save_scn, save_point; @@ -123,7 +123,7 @@ class Scn2k : Event::Time { virtual void Elapsed(unsigned int current_time); - // �����ִ�Ϣ + // セーブ関連 std::string MakeSaveFile(void) const; bool StatSaveFile(int num, int& year, int& month, int& day, int& wday, int& hour,int& min, int& sec, int& msec, std::string& title) const; void SaveImpl(std::string& s);
--- a/scn2k/scn2k_text.cc +++ b/scn2k/scn2k_text.cc @@ -1,31 +1,31 @@ /* TODO: - ���դΥ�٥뤬�����ڤ��ؤ����˷礱��Τ��� - �������� : �ʹ֤����촹���ʤ� - kcursor ������ WidText ���饹��Ǥ���� - WidText ���饹�ˤϿ����˰ʲ�������ä��� - ���������Ƚ�λ�塢���ꥢ�ʤ��˿����ʥƥ����Ȥ��ɲá�������start-wait���� - ��ʸ�������� (Start) �� Wait(��������ɽ���Ԥ�)��ʬΥ�� - Start �����ʸ�������賫�Ϥ��롣����å��������衣 - Flush ����ȥХåե����ʸ���٤����褹�� - Wait �����������塢����å������ޤǥ��������ɽ������ޤ��Ԥ� - Text ¦�ξ��֤Ȥ��Ƥ� Wait �Τߤ���� (PREPARE�����Τ��Ԥ�) - ��������Skip �θ����Ϥɤä�����ġ��ʸ����ϡ��� + 日付のラベルが画面切り替え時に欠けるのを修正 + 画像効果 : 人間の入れ換わりなど + kcursor の操作を WidText クラスに任せる + WidText クラスには新たに以下の操作を加える + ・ウェイト終了後、クリアなしに新たなテキストを追加、新たにstart-waitする + ・文字の描画 (Start) と Wait(カーソル表示待ち)の分離。 + Start すると文字を描画開始する。クリックで全描画。 + Flush するとバッファ内の文字をすべて描画する + Wait すると全描画後、クリックされるまでカーソルを表示するまで待つ + Text 側の状態としては Wait のみを持つ (PREPAREに戻るのを待つ) + ただし、Skip の権利はどっちがもつ?(現状は?) - GrpObj: NextObj �� GrpObj ��ʬΥ��CreateObj �ϸ����̤ꡢVisible=1 ���˹Ԥ��� - ���줾�� num=0 (screen) �λ�leaf �Ȥ��Ƽ�����delete���ϿƤ�delete�Τߤ� - �Ԥ����Ҥ�GrpObj�μ��Τ����������� - Visible ���hide �ϼºݤ� hide �Ȥ��� - ExecReservedCmd() �Ϥʤ�����Ϥ���Delete() ��ʤ��ʤ롣 - ���Υ���ReBlit() �����ޤ������ʤ�������̾��������ɥ����ä��������طʤ��ʤ��ʤ� + GrpObj: NextObj と GrpObj を分離。CreateObj は現状通り、Visible=1 時に行う。 + それぞれ num=0 (screen) の枝leaf として実装。delete時は親のdeleteのみを + 行い、子はGrpObjの実体だけを削除する + Visible 後のhide は実際に hide とする + ExecReservedCmd() はなくせるはず。Delete() もなくなる。 + カノギ:ReBlit() がうまくいかないせいで名前ウィンドウが消えた時の背景がなくなる - ���顧����ɽ�� - SEL�������� + くら:回想表示 + SEL画像効果 DONE: - �Ȥ��Υƥ����ȥ�����ɥ��������ܥ������ - shake �β������� - ���֥���������Υƥ����ȿ��μ��� - �������̤β��� + ともよのテキストウィンドウ実装、ボタン実装 + shake の画像効果 + オブジェクト内のテキスト色の実装 + 画像効果の改善 */ /* @@ -230,7 +230,7 @@ void Text::PressFuncButton(void* pointer void Text::SetSkipMode(SkipMode _mode) { if ( (skip_mode & SKIP_IN_MENU) && (_mode & SKIP_IN_MENU) == 0) { - if (status_mask & BACKLOG_WAIT_MASK) { // backlog mode �������� + if (status_mask & BACKLOG_WAIT_MASK) { // backlog mode から復帰 status_mask = Status(status_mask & (~(BACKLOG_MASK|BACKLOG_MASK_FWD|BACKLOG_MASK_KOE|BACKLOG_WAIT_MASK))); text->wid->Clear(); if (status == WAIT_TEXT && text != NULL) { @@ -278,15 +278,15 @@ void Text::InitWindow(void) { const char* s = config->GetParaStr(buf); if (s != NULL) replace_name[i] = s; } - // replace_name2 : ������� - // ������������ (CLANNAD) + // replace_name2 : 初期設定 + // 渚、秋生、渚 (CLANNAD) char name_nagisa[3] = {'\x8f', '\x8d', '\0'}; char name_akio[5] = {'\x8f', '\x48', '\x90', '\xb6', '\0'}; replace_name2[0] = name_nagisa; replace_name2[1] = name_akio; replace_name2[2] = name_nagisa; text = NULL; - /* �ƥ�����®�٤����� */ + /* テキスト速度の設定 */ int speed, mod, wait, auto_mod; config->GetParam("#INIT_MESSAGE_SPEED", 1, &speed); config->GetParam("#INIT_MESSAGE_SPEED_MOD", 1, &mod); @@ -364,7 +364,7 @@ void Text::Save(string& str, bool rollba buflen += snprintf(buf+buflen, 1000-buflen, ",\"%s\"", it->face.c_str()); } buf[buflen++] = '\0'; - if (buflen >= 1000) { // �����졢�Хå������������ƥ���礭���� 1000byte ��ۤ���Ȥ� + if (buflen >= 1000) { // 万が一、バックログ1アイテムの大きさが 1000byte を越えるとき fprintf(stderr,"Fatal : Cannot save backlog crrectly; Please send bug report to the author.\n"); } else str += buf; } @@ -484,12 +484,12 @@ void Text::Load(const char* str) { } } while (*strend != 0); } - if (new_backlog.empty() && (!backlog.empty())) { // empty �ʤ� save_selectcount �ޤ� backlog ���᤹ + if (new_backlog.empty() && (!backlog.empty())) { // empty なら save_selectcount まで backlog を巻き戻す vector<BacklogItem>::iterator it = backlog.end(); do { it--; if (it->scn == BacklogItem::SaveSelect && it->pos == save_selectcount) { - // Save ���֤Ĥ����餽��ʹߤ� erase + // Save 位置を見つけたらそれ以降を erase backlog.erase(it, backlog.end()); break; } @@ -520,10 +520,10 @@ void Text::show(int num) { char key[1024]; sprintf(key, "#WINDOW.%03d.KEYCUR_MOD", text_window_number); config->GetParam(key, 3, &d, &kx, &ky); - // �������ʤ��������� + // 正しくない気がする kx += text->wid->Pic()->PosX(); ky += text->wid->Pic()->PosY(); - // ��̯�˲��ˤ��� + // 微妙に下にする ky += 8; kcursor->Pic()->Move(kx, ky); } @@ -535,7 +535,7 @@ void Text::DrawBacklog(BacklogItem& item status_mask = Status(status_mask | BACKLOG_WAIT_MASK); drawn_backlog_item = item; if (item.text.container.empty()) { - // cmd ���� text ���Ƥ�ƹ��� + // cmd から text 内容を再構成 TextStream saved_text = text_stream; text_stream.Clear(); AddText(cmd.Str(cmd.args[0])); @@ -582,9 +582,9 @@ void Text::CreateSelect(Cmd& cmd) { int sel_size = cmd.args.size() / 2; int i; - // cur_backlog_item �˼���backlog������٤����Ƥ���� - // CreateSelect() �塢SAVEPOINT �ʤΤǸ��ߤ�backlog������(���Υ�å�����)�� - // backlog ����������롣���θ塢backlog_item �� cur_backlog_item �����Ƥ����åȤ����(Wait()��) + // cur_backlog_item に次にbacklogに入るべき内容を作成 + // CreateSelect() 後、SAVEPOINT なので現在のbacklogの内容(前のメッセージ)が + // backlog に代入される。その後、backlog_item に cur_backlog_item の内容がセットされる(Wait()内) char backlog_sel_text[11] = {0x81,0x69,0x91,0x49,0x91,0xf0,0x8e,0x88,0x81,0x6a,0x00}; cur_backlog_item.Clear(); cur_backlog_item.AddTextPos(cmd); @@ -598,10 +598,10 @@ void Text::CreateSelect(Cmd& cmd) { } sel_backlog_pos.push_back(cur_backlog_item.text.container.size()); - if (sel_type == 0) { // Princess Bride: ������ɥ�����ɽ�� + if (sel_type == 0) { // Princess Bride: 選択ウィンドウを別表示 External_select: CreateSelBG(); - hide(); // �ʤΤǡ��ƥ����ȥ�����ɥ��Ͼõ� + hide(); // なので、テキストウィンドウは消去 int baseposx, baseposy, repposx, repposy, centerx, centery; int mojisize, col1, col2; config->GetParam("#SELBTN.000.CENTERING", 2, ¢erx, ¢ery); @@ -610,7 +610,7 @@ External_select: config->GetParam("#SELBTN.000.MOJISIZE", 1, &mojisize); config->GetParam("#SELBTN.000.MOJIDEFAULTCOL", 1, &col1); config->GetParam("#SELBTN.000.MOJISELECTCOL", 1, &col2); - if (col1 == col2) col2 = 1; // CLANNAD �ǤȤꤢ������ + if (col1 == col2) col2 = 1; // CLANNAD でとりあえず。 int r, g, b; sprintf(key, "#COLOR_TABLE.%03d", col1); config->GetParam(key, 3, &r, &g, &b); @@ -619,10 +619,10 @@ External_select: config->GetParam(key, 3, &r, &g, &b); Color seled(r,g,b); - /* �������åȺ��� */ - /* ������ɥ��طʤ��礭������� */ + /* ウィジット作成 */ + /* ウィンドウ背景の大きさを求める */ if (baseposx == 0 && sel_bg_rect.width() != 0) - baseposx = (parent.Width()-sel_bg_rect.width()) / 2; // �ܥ�����֤�� + baseposx = (parent.Width()-sel_bg_rect.width()) / 2; // ボタン位置をセンタリング if (centerx) baseposx = (parent.Width()-sel_bg_rect.width()-sel_size*repposx) / 2; if (centery) @@ -632,7 +632,7 @@ External_select: for (i=0; i<sel_size; i++) { PicBase* p; - // �طʺ��� + // 背景作成 if (sel_bg2) { p = sel_widget->create_node(Rect(baseposx, baseposy, baseposx+sel_bg_rect.width(), baseposy+sel_bg_rect.height()),0); p->SetSurface(sel_bg2, 0, 0); @@ -641,10 +641,10 @@ External_select: p = sel_widget->create_node(Rect(baseposx, baseposy, baseposx+sel_bg_rect.width(), baseposy+sel_bg_rect.height()),0); p->SetSurface(sel_bg1, 0, 0); } - /* �ܥ������ */ + /* ボタン作成 */ const char* str = cmd.Str(cmd.args[i*2]); int value = cmd.args[i*2+1].value; - while(selects.size() <= value) selects.push_back(0); // vector ���礭������ + while(selects.size() <= value) selects.push_back(0); // vector の大きさを広げる kconv( (const unsigned char*)str, (unsigned char*)key); selects[value] = new WidTextButton(event, sel_widget, key, mojisize, WidTextButton::CENTER, @@ -657,17 +657,17 @@ External_select: } sel_widget->show_all(); status = WAIT_SELECT_OUTBOX; - } else { // CLANNAD: �ƥ����ȥ�����ɥ���������ɽ�� + } else { // CLANNAD: テキストウィンドウ内に選択肢表示 int mojisize; config->GetParam("#SELBTN.000.MOJISIZE", 1, &mojisize); Color fore(0xff,0xff,0xff); Color seled(0xff,0xff,0xff); show(); - if (text == NULL) goto External_select; // �ƥ����ȡ�������ɥ���ɽ���Ǥ��ʤ���г��������ˤ��� + if (text == NULL) goto External_select; // テキスト・ウィンドウを表示できなければ外部選択肢にする text->wid->Clear(); if (kcursor) kcursor->hide(); - /* �������åȺ��� : �ƥ�����ɽ���ϰϤ�Ʊ��*/ + /* ウィジット作成 : テキスト表示範囲と同じ*/ int posx = text->wid->pictext->PosX(); int posy = text->wid->pictext->PosY(); int sel_w = text->wid->pictext->Width(); @@ -676,10 +676,10 @@ External_select: int sel_y = 0; for (i=0; i<sel_size; i++) { - /* �ܥ������ */ + /* ボタン作成 */ const char* str = cmd.Str(cmd.args[i*2]); int value = cmd.args[i*2+1].value; - while(selects.size() <= value) selects.push_back(0); // vector ���礭������ + while(selects.size() <= value) selects.push_back(0); // vector の大きさを広げる kconv( (const unsigned char*)str, (unsigned char*)key); selects[value] = new WidTextButton(event, sel_widget, key, mojisize, WidTextButton::Attribute(WidTextButton::REVERSE | WidTextButton::NOPADDING), @@ -697,16 +697,16 @@ External_select: void Text::AddText(const char* str_o) { char str[10001]; if (text == NULL) return; - /* �ޤ���replace string ���Ѵ� */ + /* まず、replace string を変換 */ int i; int cnt = 0; - /* �� = 81 96 A-Z = 0x82 [0x60-0x79] */ - /* �� = 81 93 A-Z = 0x82 [0x60-0x79] */ + /* * = 81 96 A-Z = 0x82 [0x60-0x79] */ + /* % = 81 93 A-Z = 0x82 [0x60-0x79] */ for (i=0; cnt<10000 && str_o[i] != 0; i++) { if (str_o[i] < 0) { if ( (unsigned char)str_o[i] == 0x81 && (unsigned char)str_o[i+1] == 0x96 && (unsigned char)str_o[i+2] == 0x82) { int c = str_o[i+3]; - if (c >= 0x60 && c <= 0x79 && replace_name[c-0x60].length() != 0) { // ̾���Ѵ� + if (c >= 0x60 && c <= 0x79 && replace_name[c-0x60].length() != 0) { // 名前変換 i += 3; strcpy(str+cnt, replace_name[c-0x60].c_str()); cnt += replace_name[c-0x60].length(); @@ -714,7 +714,7 @@ void Text::AddText(const char* str_o) { } } else if ( (unsigned char)str_o[i] == 0x81 && (unsigned char)str_o[i+1] == 0x93 && (unsigned char)str_o[i+2] == 0x82) { int c = str_o[i+3]; - if (c >= 0x60 && c <= 0x79 && replace_name2[c-0x60].length() != 0) { // ̾���Ѵ��� + if (c >= 0x60 && c <= 0x79 && replace_name2[c-0x60].length() != 0) { // 名前変換2 i += 3; strcpy(str+cnt, replace_name2[c-0x60].c_str()); cnt += replace_name2[c-0x60].length(); @@ -732,7 +732,7 @@ void Text::AddText(const char* str_o) { for (char* s = str_top; *s != 0; s++) { // if (*(unsigned char*)s == 0xa1 && *(unsigned char*)(s+1) == 0xda) { /* euc */ if (*(unsigned char*)s == 0x81 && *(unsigned char*)(s+1) == 0x79) { /* sjis */ - // ̾�� + // 名前 *s = 0; if (s != str_top) text_stream.Add(str_top); s += 2; @@ -745,7 +745,7 @@ void Text::AddText(const char* str_o) { text_stream.AddName(name_top); break; } - if (*s < 0 && s[1] != 0) s++; // ����ʸ���ʤ飲�����Ф� + if (*s < 0 && s[1] != 0) s++; // 全角文字なら2字飛ばす } str_top = s; } @@ -780,7 +780,7 @@ void Text::Exec(Cmd& cmd) { cmd.clear(); else cmd.cmd_type = CMD_SAVEPOINT; - text_parsing = true; /* �ƥ������Ԥ�ľ��Υƥ����Ȱ��֡���ְ��� */ + text_parsing = true; /* テキスト待ち直後のテキスト位置=セーブ位置 */ return; } @@ -809,7 +809,7 @@ print_blit^=1; else { if ( (status == WAIT_TEXT && text != NULL) || status == WAIT_SELECT_INBOX || status == WAIT_SELECT_OUTBOX) { if(text && text->wid->status != WidText::PREPARE && text->wid->status != WidText::WAIT && text->wid->status != WidText::WAIT2) { - text->wid->Flush(); // ɽ����Ǹ�ξ��֤ˤ��� + text->wid->Flush(); // 表示を最後の状態にする } if (status == WAIT_TEXT && text != NULL && kcursor != NULL) kcursor->show(); } @@ -849,7 +849,7 @@ print_blit^=1; } if (status_mask & SKIPEND_MASK) { if ( (skip_mode & SKIP_TEXT) && (skip_mode & SKIPEND_TEXT)) { - if (skip_mode & SKIPEND_KEY) { // shift skip �� + if (skip_mode & SKIPEND_KEY) { // shift skip 中 SkipMode new_mode = SkipMode(skip_mode & (~SKIPEND_TEXT)); if (new_mode & (SKIP_GRP_NOEFFEC || SKIP_GRP_NODRAW)) new_mode = SkipMode(new_mode & (~SKIP_GRP_FAST)); @@ -872,7 +872,7 @@ print_blit^=1; if (event.presscount(MOUSE_RIGHT)) { if ( (status == WAIT_TEXT && text != NULL) || status == WAIT_SELECT_INBOX || status == WAIT_SELECT_OUTBOX) { if(text && text->wid->status != WidText::PREPARE && text->wid->status != WidText::WAIT && text->wid->status != WidText::WAIT2) { - text->wid->Flush(); // ɽ����Ǹ�ξ��֤ˤ��� + text->wid->Flush(); // 表示を最後の状態にする } cmd.cmd_type = CMD_MENUREQ; if (!(status_mask & STATSAVE_MASK)) { @@ -887,7 +887,7 @@ print_blit^=1; if (event.presscount(MOUSE_UP)) { if ( (status == WAIT_TEXT && text != NULL) || status == WAIT_SELECT_INBOX || status == WAIT_SELECT_OUTBOX) { if(text && text->wid->status != WidText::PREPARE && text->wid->status != WidText::WAIT && text->wid->status != WidText::WAIT2) { - text->wid->Flush(); // ɽ����Ǹ�ξ��֤ˤ��� + text->wid->Flush(); // 表示を最後の状態にする } cmd.cmd_type = CMD_BACKLOGREQ; if (!(status_mask & STATSAVE_MASK)) { @@ -901,7 +901,7 @@ print_blit^=1; if ( (status == WAIT_TEXT && text != NULL ) || status == WAIT_SELECT_INBOX || status == WAIT_SELECT_OUTBOX) { if (skip_mode) skip_mode = SKIP_NO; if (text && text->wid->status != WidText::PREPARE && text->wid->status != WidText::WAIT && text->wid->status != WidText::WAIT2) { - text->wid->Flush(); // ɽ����Ǹ�ξ��֤ˤ��� + text->wid->Flush(); // 表示を最後の状態にする return true; } status_mask = Status(status_mask & (~CLEARSCR_MASK) | CLEARSCR_WAIT_MASK); @@ -966,7 +966,7 @@ print_blit^=1; delete sel_widget; sel_widget = NULL; status = NORMAL; - // CreateSelect() �Ǻ������줿 cur_backlog_item �� backlog_item ��ȿ�Ǥ����� + // CreateSelect() で作成された cur_backlog_item を backlog_item へ反映させる cur_backlog_item.text.InsertColor(sel_backlog_pos[sel_val], sel_backlog_pos[sel_val+1], 0xff, 0, 0); backlog_item = cur_backlog_item; cur_backlog_item.Clear(); @@ -1029,7 +1029,7 @@ static const char* btnname[BTNCNT] = { "EXBTN_002" }; -static int btnpos[BTNCNT] = { // g00 �ե�������Υܥ������ΰ��� +static int btnpos[BTNCNT] = { // g00 ファイル内のボタン情報の位置 // 0, 1, 13, 12, 2, 3, 4, 5, 6, 7 // princess bride? 0, 1, 13, 14, 2, 3, 4, 5, 6, 7 // tomoyo after? }; @@ -1088,7 +1088,7 @@ void Text::SetCursor(int cursor_no) { char key[1024]; sprintf(key, "#CURSOR.%03d.NAME", cursor_no); string path = config->GetParaStr(key); - if (path.length() == 0) return; // ̾���ʤ� + if (path.length() == 0) return; // 名前なし path += ".pdt"; int w,h,cont,speed; sprintf(key, "#CURSOR.%03d.SIZE", cursor_no); @@ -1098,7 +1098,7 @@ void Text::SetCursor(int cursor_no) { sprintf(key, "#CURSOR.%03d.SPEED", cursor_no); config->GetParam(key, 1, &speed); - // speed �ǣ�����cont ���Ѳ� + // speed で1周、cont 回変化 if (kcursor != NULL) delete kcursor; kcursor = new WidTimeCursor(event, speed/cont, &parent, path.c_str(), 0, 0, w, 0, cont, Rect(0,0,w,h)); @@ -1258,7 +1258,7 @@ void TextWindow::MakeWaku(PicContainer& AyuSysConfig *config = AyuSysConfig::GetInstance(); char key[1024]; std::string str; - /* �Ȥ���� */ + /* 枠を作成 */ sprintf(key, "#WAKU.%03d.000.NAME", waku_no); const char* name = config->GetParaStr(key); if (name != NULL && name[0] == 0) name = NULL; @@ -1271,7 +1271,7 @@ void TextWindow::MakeWaku(PicContainer& if (name == NULL && back == NULL && btn == NULL) return; - /* �ޤ����ƥ������طʤ����� */ + /* まず、テキスト背景を設定 */ if (back != NULL) { str = back; str += ".g00"; int rc, gc, bc, ac, flag; @@ -1285,14 +1285,14 @@ void TextWindow::MakeWaku(PicContainer& Rect rect(*back_s); Surface* s = pic.Root().NewSurface(rect.width(), rect.height(), ALPHA_MASK); DSurfaceMove(back_s, rect, s, rect); - DSurfaceFillA(s, rect, rc, gc, bc, ac); // Ʃ�������� + DSurfaceFillA(s, rect, rc, gc, bc, ac); // 透明度設定 pic.SetSurface(s, 0, 0); pic.SetSurfaceFreeFlag(1); if (flag == 0) wid->Pic()->SetSurfaceAttribute(PicBase::BLIT_MULTIPLY); pic.Root().DeleteSurface(back_s); } } - /* ���������Ⱦ�������� */ + /* その前に枠飾りを設定 */ if (name != NULL) { str = name; str += ".g00"; Surface* s = pic.Root().NewSurface(str.c_str()); @@ -1307,26 +1307,26 @@ void TextWindow::MakeWaku(PicContainer& } if (btn == NULL) return; if (use_btn == NULL) return; - // �ܥ���κ��� - // ���Ѥ���ܥ���ˤĤ��Ƥϡ�ɬ�פ˱����� show() ���뤳�� + // ボタンの作成 + // 使用するボタンについては、必要に応じて show() すること - /* �ܥ���ΰ��־������� */ + /* ボタンの位置情報を求める */ str = btn; str += ".g00"; ARCINFO* info = FileSearcher::GetInstance()->Find(FileSearcher::PDT, str.c_str(), "g00"); if (info == NULL) return; // cannot find file const char* data = info->Read(); - /* g00 �ե�����Υإå���ʬ�˰��־�������äƤ��� */ - /* ¸�ߤ��ʤ���Хܥ�������ǤϤʤ� */ + /* g00 ファイルのヘッダ部分に位置情報は入っている */ + /* 存在しなければボタン画像ではない */ if (data == NULL || *data != 2) { delete info; return; } - int index_count = read_little_endian_int(data+5); // 0x70 == 112 ( 8 �Ĥ��ĥ��롼�פʤΤǡ�14�ĤΥܥ��� ) ��ɸ�� + int index_count = read_little_endian_int(data+5); // 0x70 == 112 ( 8 個ずつグループなので、14個のボタン ) が標準 int i; for (i=0; i<BTNCNT; i++) { if (!use_btn[i]) continue; if (btnpos[i]*8 >= index_count) { - continue; // �ܥ���¸�ߤ��ʤ� + continue; // ボタンが存在しない } int x, y, w, h; sprintf(key, "#WAKU.%03d.000.%s_BOX", waku_no, btnname[i]); @@ -1365,8 +1365,8 @@ TextWindow::TextWindow(PicContainer& par sprintf(key, "#WINDOW.%03d.WAKU_SETNO", win_no);if (config->GetParam(key, 1, &waku_no) == -1) return; sprintf(key, "#WINDOW.%03d.LUBY_SIZE", win_no); if (config->GetParam(key, 1, &ruby) == -1) return; - /* �ƥ����ȥ������åȡ����̤α������դޤǻ��� */ - /* posd == 2 �ʤ���̲��ˤҤäĤ��褦������ */ + /* テキストウィジット:画面の右下一杯まで使用 */ + /* posd == 2 なら画面下にひっつくように配置 */ Rect r(0,0); if (posd == 2) { r = WakuSize(parent, waku_no); @@ -1376,16 +1376,16 @@ TextWindow::TextWindow(PicContainer& par } else /* posd == 0 ? */ r = Rect(posx, posy, parent.Width(), parent.Height()); - /* �ƥ����ȥ�����ɥ��κ��� */ + /* テキストウィンドウの作成 */ int w = size*cntw; int h = (size+ruby+2)*cnth; wid = new WidText(event, &parent, r, Rect(mposx, mposy, mposx+w, mposy+h), size); wid->stream.kanji_type = TextStream::sjis; - /* �饦����ɥ��κ��� */ + /* 顔ウィンドウの作成 */ for (i=0; i<8; i++) { int x,y; sprintf(key, "#WINDOW.%03d.FACE.%03d", win_no, i); if (config->GetParam(key, 2, &x, &y) == -1) continue; - /* �饦����ɥ���������� */ + /* 顔ウィンドウを作成する */ if (x >= 0 && y >= 0) { face_pics[i] = wid->PicNode()->create_leaf(Rect(x,y), PicBase::FIT_SURFACE); } else { @@ -1394,7 +1394,7 @@ TextWindow::TextWindow(PicContainer& par face_pics[i]->show(); } face = face_pics[0]; - // �ܥ�������� + // ボタンの設定 for (i=0; i<BTNCNT; i++) { int num; sprintf(key, "#WINDOW.%03d.%s_USE", win_no, btnname[i]); @@ -1420,15 +1420,15 @@ TextWindow::TextWindow(PicContainer& par sprintf(key, "#WINDOW.%03d.NAME_WAKU_SETNO", win_no); if (config->GetParam(key, 1, &name_waku) != -1 && name_waku != -1) { Rect waku_r = WakuSize(parent, name_waku); - waku_r.rmove(r.lx, r.ty); // �ƥ����ȥ�����ɥ����֤�ư���� - waku_r.rmove(name_posx, name_posy-waku_r.height()); // NAME_POS �ذ������� + waku_r.rmove(r.lx, r.ty); // テキストウィンドウ位置に動かす + waku_r.rmove(name_posx, name_posy-waku_r.height()); // NAME_POS へ位置補正 name_container = parent.create_node(waku_r, 0); MakeWaku(*name_container, event, name_waku, win_no, 0, callback); Rect name_r(0,0,w,h); name_r.rmove(name_mposx, name_mposy); name = new WidLabel(name_container, name_r, true, 0, name_size); name->show(); - } else { // ̾�������Ȥʤ� + } else { // 名前専用枠なし Rect name_r(0, 0, w, h); name_r.rmove(r.lx, r.ty); name_r.rmove(name_posx, name_posy-name_size);
--- a/scn2k/scn2kdump.cc +++ b/scn2k/scn2kdump.cc @@ -123,7 +123,7 @@ int main(int argc, char** argv) { char* data = info->CopyRead(); char* d = data; char* dend = d + info->Size(); - /* version ��ǧ */ + /* version 確認 */ if (read_little_endian_int(d) == 0x1cc) { system_version = 0; } else if (read_little_endian_int(d) == 0x1d0) { @@ -150,7 +150,7 @@ int main(int argc, char** argv) { if (n != 6) fprintf(stdout,"subroutine table %2d: %6d\n",i,n); }} Flags flags; - /* �ǽ餫��Ǹ�ޤǥ��ޥ�ɼ��� -> ���Ϥ��֤� */ + /* 最初から最後までコマンド取得 -> 出力を繰り返す */ while(dcur<dend) { const char* dprev = dcur; CmdD cmd(flags, system_version); cmd.ClearError(); @@ -210,26 +210,26 @@ DeleteFaceGraphics KoePlay 0x23 - cmd 01-17:0000:01[ 2] args:100000026,5 -DrawGraphics(���ʲ褢��� +DrawGraphics(前景画あり) 0x23 - cmd 01-21:004b:00[ 1] args:V<18>[1],10,kasane. #1 <args:V<18>[17],11> -DrawGraphics(�طʤΤ�) +DrawGraphics(背景のみ) 0x23 - cmd 01-21:0049:00[ 2] args:V<18>[1],10 Ruby 0x23 - cmd 00-03:0078:01[ 0] - "��ͳ" + "理由" 0x23 - cmd 00-03:0078:00[ 1] - "�櫓" + "わけ" SetTitle 0x23 - cmd 01-04:0000:00[ 1] args:"Long Long Time Ago..." WaitTime 0x23 - cmd 01-14:0069:00[ 1] args:3000 -ChangeBGM ���Ͱ����ϥե����ɥ����ȡ�����λ��֤ȿ�¬ +ChangeBGM 数値引数はフェードアウト、インの時間と推測 0x23 - cmd 01-14:0000:02[ 3] args:"BGM18",700,700 */
--- a/scn2k/test.cc +++ b/scn2k/test.cc @@ -66,22 +66,22 @@ int main(void) { main_panel->show(); Scn2k scn(main.event, *main_panel, mu, config); // MouseCursor* cursor = new MouseCursor - // scn.OpenScript(1002, -19482); // ������� - //scn.OpenScript(1002, -18240); // ����������� - // scn.OpenScript(1002, -59528); // ����������� + // scn.OpenScript(1002, -19482); // ラブ生〜 + //scn.OpenScript(1002, -18240); // ラブ生シーン開始 + // scn.OpenScript(1002, -59528); // ラブ生シーン開始 // scn.OpenScript(2, 0); // scn.OpenScript(320, 0); - //scn.OpenScript(320, -4269); // �����ץ˥�(Chap.2) + //scn.OpenScript(320, -4269); // オープニング(Chap.2) //scn.OpenScript(320, -2523); //scn.OpenScript(320, -7549); - // scn.OpenScript(310, 0); // ����ǥ���(Wed.day) - //scn.OpenScript(311, 0); // ����ǥ��� - // scn.OpenScript(100, -2244); // ����� - // scn.OpenScript(100, -9008); // ����� - //scn.OpenScript(1001, -118520 ); // ����衧��륯�� - // scn.OpenScript(1, 0); // ���� - // scn.OpenScript(414,380); // ���� - // scn.OpenScript(9142,0); // ���� + // scn.OpenScript(310, 0); // エンディング(Wed.day) + //scn.OpenScript(311, 0); // エンディング + // scn.OpenScript(100, -2244); // 選択肢 + // scn.OpenScript(100, -9008); // 選択肢 + //scn.OpenScript(1001, -118520 ); // 選択肢:葛城クン + // scn.OpenScript(1, 0); // 開始 + // scn.OpenScript(414,380); // 開始 + // scn.OpenScript(9142,0); // 開始 // config.SetParam("#SEEN_START", 1, 9140); //scn.show_textwindow(0);
--- a/system/file.cc +++ b/system/file.cc @@ -1,9 +1,9 @@ bool init_end=false; -/* file.cc : KANON �ΰ��̥ե����롦PDT �ե�����ʲ����ե�����ˤ�Ÿ���� - * ����Υ�å� - * class ARCFILE : ��˥ե��������Τ����饹 - * class ARCINFO : ��˥ե��������Σ��ĤΥե���������饹 - * class PDTCONV : PDT �ե������Ÿ����Ԥ��� +/* file.cc : KANON の圧縮ファイル・PDT ファイル(画像ファイル)の展開の + * ためのメソッド + * class ARCFILE : 書庫ファイル全体を扱うクラス + * class ARCINFO : 書庫ファイルの中の1つのファイルを扱うクラス + * class PDTCONV : PDT ファイルの展開を行う。 * */ @@ -85,7 +85,7 @@ using namespace std; // #define delete fprintf(stderr,"file.cc: %d.",__LINE__), delete -/* FileSearcher class �� default �ο����� */ +/* FileSearcher class の default の振る舞い */ FileSearcher *FileSearcher::_singleton = NULL; FileSearcher::ARCTYPE FileSearcher::default_is_archived[TYPEMAX] = { ATYPE_DIR, ATYPE_DIR, ATYPE_DIR, ATYPE_DIR, @@ -100,16 +100,16 @@ const char* FileSearcher::default_dirnam /********************************************* ** ARCFILE / DIRFILE: -** ��˥ե����롢���뤤�ϥǥ��쥯�ȥ�� -** ���Τ�������륯�饹 +** 書庫ファイル、あるいはディレクトリの +** 全体を管理するクラス ** -** ��˥ե����뤫��ե������ȴ���Ф���Find() -** Find ������Τ�Read��������Ƥ������롣 +** 書庫ファイルからファイルの抜き出しはFind() +** Find したものをReadすると内容が得られる。 */ ARCFILE::ARCFILE(const char* aname) { struct stat sb; - /* �ѿ������ */ + /* 変数初期化 */ arcname = NULL; list_point = 0; filenames_orig = NULL; @@ -119,7 +119,7 @@ ARCFILE::ARCFILE(const char* aname) { arcname[0]='\0'; return; } // NULFILE - /* �ǥ��쥯�ȥ꤫�ݤ��Υ����å� */ + /* ディレクトリか否かのチェック */ if (stat(aname,&sb) == -1) { /* error */ perror("stat"); } @@ -141,9 +141,9 @@ ARCFILE::ARCFILE(const char* aname) { void ARCFILE::Init(void) { if (! arc_atom.empty()) return; if (arcname == NULL) return; - /* �ե������������ */ + /* ファイル数を得る */ int slen = CheckFileDeal(); - /* �ե�����̾�Υ��å� */ + /* ファイル名のセット */ ListupFiles(slen); if ( (!arc_atom.empty()) && arc_atom[0].filename) filenames_orig = arc_atom[0].filename; sort(arc_atom.begin(), arc_atom.end()); @@ -160,16 +160,16 @@ ARCFILE::iterator ARCFILE::SearchName(co Init(); if (f == NULL) return arc_atom.end(); if (arc_atom.empty()) return arc_atom.end(); - /* ���顼�����å� */ + /* エラーチェック */ if (strlen(f)>500) return arc_atom.end(); if (ext && strlen(ext)>500) return arc_atom.end(); - /* ���� */ + /* 検索 */ strncpy(buf, f, 1000); buf[1000]=0; it = lower_bound(arc_atom.begin(), arc_atom.end(), (char*)buf); if (it != arc_atom.end() && strcmp(it->filename_lower, buf) == 0) return it; - // ��ĥ�Ҥ�Ĥ��Ƹ��� + // 拡張子をつけて検索 if (ext) { strcpy(buf_ext, buf); char* ext_pt = strrchr(buf_ext, '.'); @@ -181,7 +181,7 @@ ARCFILE::iterator ARCFILE::SearchName(co if (it != arc_atom.end() && strcmp(it->filename_lower, buf_ext) == 0) return it; } - /* ��ʸ���ˤ��� ���� */ + /* 小文字にして 検索 */ int i; int l = strlen(f); if (l > 500) l = 500; for (i=0; i<l; i++) @@ -190,13 +190,13 @@ ARCFILE::iterator ARCFILE::SearchName(co it = lower_bound(arc_atom.begin(), arc_atom.end(), (char*)buf); if (it != arc_atom.end() && strcmp(it->filename_lower, buf) == 0) return it; - // ��ĥ�Ҥ�Ĥ��Ƹ��� + // 拡張子をつけて検索 if (ext == NULL) return arc_atom.end(); strcpy(buf_ext, buf); char* ext_pt = strrchr(buf_ext, '.'); if (ext_pt == NULL || ext_pt == buf_ext) ext_pt = buf_ext + strlen(buf_ext); *ext_pt++ = '.'; - /* ��ĥ�Ҥ�Ĺ�������� */ + /* 拡張子の長さを得る */ l = strlen(ext); for (i=0; i<l; i++) ext_pt[i] = tolower(*ext++); @@ -218,7 +218,7 @@ ARCINFO* ARCFILE::Find(const char* fname ARCINFO* ARCFILE::MakeARCINFO(ARCFILE_ATOM& atom) { if (atom.arcsize == atom.filesize) return new ARCINFO(arcname, atom); - else // ������ + else // 圧縮付 return new ARCINFO_AVG32(arcname, atom); } ARCINFO* NULFILE::MakeARCINFO(ARCFILE_ATOM& atom) { @@ -297,7 +297,7 @@ char* ARCFILE::ListItem(void) { int ARCFILE::CheckFileDeal(void) { char buf[0x20]; - /* �إå��Υ����å� */ + /* ヘッダのチェック */ FILE* stream = fopen(arcname, "rb"); if (stream == NULL) { fprintf(stderr, "Cannot open archive file : %s\n",arcname); @@ -386,7 +386,7 @@ void DIRFILE::ListupFiles(int fname_len) fprintf(stderr, "Cannot open dir file : %s\n",arcname); return; } - /* ���Ū�� arcname �Υǥ��쥯�ȥ�˰�ư���� */ + /* 一時的に arcname のディレクトリに移動する */ int old_dir_fd = open(".",O_RDONLY); if (old_dir_fd < 0) { closedir(dir); @@ -427,7 +427,7 @@ void DIRFILE::ListupFiles(int fname_len) arc_atom.push_back(atom); buf += l*2+2; fname_len -= l*2+2; } - /* chdir() �����Τ���� */ + /* chdir() したのを元に戻る */ closedir(dir); fchdir(old_dir_fd); close(old_dir_fd); } @@ -447,7 +447,7 @@ void NULFILE::ListupFiles(int fname_len) } int SCN2kFILE::CheckFileDeal(void) { - /* �إå��Υ����å� */ + /* ヘッダのチェック */ FILE* stream = fopen(arcname, "rb"); if (stream == NULL) { fprintf(stderr, "Cannot open archive file : %s\n",arcname); @@ -462,7 +462,7 @@ int SCN2kFILE::CheckFileDeal(void) { } char* buf = new char[10000*8]; fread(buf, 10000, 8, stream); - /* size == 0 �Υǡ�����¸�ߤ��ʤ� */ + /* size == 0 のデータは存在しない */ int count = 0; int i; for (i=0; i<10000; i++) { int tmp_offset = read_little_endian_int(buf+i*8); @@ -472,7 +472,7 @@ int SCN2kFILE::CheckFileDeal(void) { } fclose(stream); delete[] buf; - return count*13; /* �ե�����̾�� seenXXXX.txt �����顢���12ʸ��+null */ + return count*13; /* ファイル名は seenXXXX.txt だから、一つ12文字+null */ } void SCN2kFILE::ListupFiles(int fname_len) { @@ -492,23 +492,23 @@ void SCN2kFILE::ListupFiles(int fname_le int tmp_offset = read_little_endian_int(buf+i*8); int tmp_size = read_little_endian_int(buf+i*8+4); if (tmp_size <= 0 || tmp_offset < 0 || tmp_offset+tmp_size > int(arc_size) ) continue; - /* header �����ư��̷����ʤɤ�Ĵ�٤� */ + /* header を得て圧縮形式などを調べる */ fseek(stream, tmp_offset, SEEK_SET); fread(header, 0x200, 1, stream); int header_top = read_little_endian_int(header+0); int file_version = read_little_endian_int(header+4); if (file_version == 0x1adb2) ; // Little Busters! - else if (file_version != 0x2712) continue; /* system version ���㤦 */ + else if (file_version != 0x2712) continue; /* system version が違う */ - if (header_top == 0x1cc) { /* �Ť����� : avg2000 */ + if (header_top == 0x1cc) { /* 古い形式 : avg2000 */ int header_size = read_little_endian_int(header+0)+read_little_endian_int(header+0x20)*4; int data_size = read_little_endian_int(header+0x24); atom.arcsize = data_size + header_size; atom.filesize = data_size + header_size; atom.private_data = header_size; - } else if (header_top == 0x1b8) { /* ���븥�� */ + } else if (header_top == 0x1b8) { /* 初夜献上 */ int header_size = read_little_endian_int(header+0)+read_little_endian_int(header+0x08)*4; int data_size = read_little_endian_int(header+0x0c); int compdata_size = read_little_endian_int(header+0x10); @@ -516,7 +516,7 @@ void SCN2kFILE::ListupFiles(int fname_le atom.filesize = data_size + header_size; atom.private_data = header_size; - } else if (header_top == 0x1d0) { /* ������������ reallive */ + } else if (header_top == 0x1d0) { /* 新しい形式: reallive */ int header_size = read_little_endian_int(header+0x20); int data_size = read_little_endian_int(header+0x24); int compdata_size = read_little_endian_int(header+0x28); @@ -525,7 +525,7 @@ void SCN2kFILE::ListupFiles(int fname_le atom.private_data = header_size; } else { fprintf(stderr,"invalid header top; %x : not supported\n",header_top); - continue; /* ���ݡ��Ȥ��ʤ����� */ + continue; /* サポートしない形式 */ } atom.offset = tmp_offset; @@ -608,7 +608,7 @@ const char * KeyHolder::GetKey(void) } /******************************************************** -** FileSearcher ���饹�μ��� +** FileSearcher クラスの実装 */ FileSearcher* FileSearcher::GetInstance(void) { @@ -647,7 +647,7 @@ FileSearcher::~FileSearcher(void) { } int FileSearcher::InitRoot(char* root) { - /* ɬ�פ˱����� ~/ ��Ÿ�� */ + /* 必要に応じて ~/ を展開 */ if (root[0] == '~' && root[1] == '/') { char* home = getenv("HOME"); if (home != NULL) { @@ -657,7 +657,7 @@ int FileSearcher::InitRoot(char* root) { root = new_root; } } - /* �Ť��ǡ�����ä� */ + /* 古いデータを消す */ int i; for (i=0; i<TYPEMAX; i++) { if (searcher[i] != NULL && @@ -671,13 +671,13 @@ int FileSearcher::InitRoot(char* root) { if (root_dir) delete root_dir; dat_dir = NULL; - /* �������ǥ��쥯�ȥ�Τ�Ȥǽ���� */ + /* 新しいディレクトリのもとで初期化 */ root_dir = new DIRFILE(root); root_dir->Init(); - /* dat/ �� */ + /* dat/ を検索 */ char* dat_path = root_dir->SearchFile("dat"); if (dat_path == NULL) { - /* ���Ĥ���ʤ��ä��� root �� dat ������ˤĤ��� */ + /* 見つからなかったら root を dat の代わりにつかう */ dat_dir = root_dir; } else { dat_dir = new DIRFILE(dat_path); @@ -693,7 +693,7 @@ void FileSearcher::SetFileInformation(FI int type = tp; if (type < 0 || type >= TYPEMAX) return; ARCFILE* next_arc = NULL; - /* ���Ǥ� searcher ��¸�ߤ���в��� */ + /* すでに searcher が存在すれば解放 */ if (searcher[type] != NULL && searcher[type] != root_dir && searcher[type] != dat_dir) { @@ -701,7 +701,7 @@ void FileSearcher::SetFileInformation(FI delete searcher[type]; } searcher[type] = NULL; - /* Ŭ���˽���� */ + /* 適当に初期化 */ if (filenames[type] != NULL && filenames[type] != default_dirnames[type]) delete[] filenames[type]; filenames[type] = filename; @@ -714,18 +714,18 @@ void FileSearcher::SetFileInformation(FI void FileSearcher::AppendFileInformation(FILETYPE tp, ARCTYPE is_arc, char* filename) { int type = tp; if (type < 0 || type >= TYPEMAX) return; - /* searcher ���ޤ�������Ƥ��Ƥʤ���� */ + /* searcher がまだ割り当てられてない場合 */ if (searcher[type] == NULL || searcher[type] == root_dir || searcher[type] == dat_dir) { searcher[type] = MakeARCFILE(is_archived[type], filenames[type]); - if (searcher[type] == NULL) { /* �����Ǥ��ʤ��ä���� */ - /* ���η������ FileInformation �Ȥ��� */ + if (searcher[type] == NULL) { /* 作成できなかった場合 */ + /* この型情報を FileInformation とする */ SetFileInformation(tp, is_arc, filename); return; } } - /* ����� */ + /* 初期化 */ ARCFILE* arc = MakeARCFILE(is_arc, filename); /* append */ ARCFILE* cur; @@ -773,7 +773,7 @@ err: ARCINFO* FileSearcher::Find(FILETYPE type, const char* fname, const char* ext) { if (searcher[type] == NULL) { - /* searcher ���� */ + /* searcher 作成 */ if (filenames[type] == NULL) { searcher[type] = dat_dir; } else { @@ -788,10 +788,10 @@ ARCINFO* FileSearcher::Find(FILETYPE typ } char** FileSearcher::ListAll(FILETYPE type) { - /* �Ȥꤢ���� searcher ������ */ + /* とりあえず searcher を初期化 */ Find(type, "THIS FILENAME MAY NOT EXIST IN THE FILE SYSTEM !!!"); if (searcher[type] == NULL) return NULL; - /* ���ե�����Υꥹ�ȥ��å� */ + /* 全ファイルのリストアップ */ int deal = 0; ARCFILE* file; for (file = searcher[type]; file != NULL; file = file->Next()) @@ -834,7 +834,7 @@ int ARCINFO::Size(void) const { return info.filesize; } -/* ���ԡ����֤� */ +/* コピーを返す */ char* ARCINFO::CopyRead(void) { const char* d = Read(); if (d == NULL) return NULL; @@ -845,13 +845,13 @@ char* ARCINFO::CopyRead(void) { } const char* ARCINFO::Path(void) const { - if (info.offset != 0) return NULL; /* archive file �ʤΤǥѥ����ʤ� */ + if (info.offset != 0) return NULL; /* archive file なのでパスを帰せない */ char* ret = new char[strlen(arcfile)+1]; strcpy(ret, arcfile); return ret; } -/* �ߴ������� */ +/* 互換性専用 */ FILE* ARCINFO::OpenFile(int* length) const { FILE* f = fopen(arcfile, "rb"); if (info.offset) lseek(fileno(f), info.offset, SEEK_SET); @@ -859,20 +859,20 @@ FILE* ARCINFO::OpenFile(int* length) con return f; } -// Ÿ�������Ϥʤ� +// 展開処理はなし bool ARCINFO::ExecExtract(void) { return true; } -/* �ɤ߹��ߤϤ��� */ +/* 読み込みを開始する */ const char* ARCINFO::Read(void) { - // ���Ǥ˥ǡ������ɤ߹��ߺѤߤʤ鲿�⤷�ʤ� + // すでにデータを読み込み済みなら何もしない if (data != NULL) return data; if (info.offset < 0 || info.arcsize <= 0) { return NULL; } - /* �ե������ */ + /* ファイルを開く */ fd = open(arcfile, O_RDONLY); if (fd < 0) { return NULL; @@ -882,7 +882,7 @@ const char* ARCINFO::Read(void) { fd = -1; return NULL; } - /* mmap ���ߤ� */ + /* mmap を試みる */ #ifdef HAVE_MMAP mmapped_memory = (char*)mmap(NULL, info.arcsize, PROT_READ, MAP_SHARED, fd, info.offset); if (mmapped_memory != MAP_FAILED) { @@ -891,7 +891,7 @@ const char* ARCINFO::Read(void) { } else #endif /* HAVE_MMAP */ { - /* ���ԡ����̤˥ե�������ɤ߹��� */ + /* 失敗:普通にファイルを読み込み */ char* d = new char[info.arcsize]; read(fd, d, info.arcsize); close(fd); @@ -899,9 +899,9 @@ const char* ARCINFO::Read(void) { use_mmap = false; data = d; } - /* Ÿ������ */ + /* 展開する */ if (! ExecExtract()) { - // ���� + // 失敗 #ifdef HAVE_MMAP if (use_mmap) { munmap(mmapped_memory, info.arcsize); @@ -915,7 +915,7 @@ const char* ARCINFO::Read(void) { } #ifdef HAVE_MMAP if (use_mmap && data != (const char*)mmapped_memory) { - // ���Ǥ� mmap ��ɬ�פʤ� + // すでに mmap は必要ない munmap(mmapped_memory, info.arcsize); close(fd); fd = -1; @@ -927,7 +927,7 @@ const char* ARCINFO::Read(void) { /********************************************** ** -** ����Ÿ���ϥ��饹����������� +** 画像展開系クラスの定義、実装 ** *********************************************** */ @@ -1036,7 +1036,7 @@ class JPEGCONV : public GRPCONV { #endif GRPCONV* GRPCONV::AssignConverter(const char* inbuf, int inlen, const char* fname) { - /* �ե���������Ƥ˱���������С������������Ƥ� */ + /* ファイルの内容に応じたコンバーターを割り当てる */ GRPCONV* conv = NULL; if (inlen < 10) return NULL; /* invalid file */ if (strncmp(inbuf, "PDT10", 5) == 0 || strncmp(inbuf, "PDT11", 5) == 0) { /* PDT10 or PDT11 */ @@ -1084,16 +1084,16 @@ GRPCONV* GRPCONV::AssignConverter(const } PDTCONV::PDTCONV(const char* _inbuf, int _inlen,const char* filename) { -// PDT FILE �Υإå� -// +00 'PDT10' (PDT11 ��̤�б�) -// +08 �ե����륵���� (̵��) -// +0C width (�ۤܤ��٤ơ�640) -// +10 height(�ۤܤ��٤ơ�480) -// +14 (mask ��) x ��ɸ (�ºݤ�̵�롦�������ե������ 0 ) -// +1c (mask ��) y��ɸ (�ºݤ�̵�� ���������ե������ 0 ) -// +20 mask ��¸�ߤ���С�mask �ؤΥݥ��� +// PDT FILE のヘッダ +// +00 'PDT10' (PDT11 は未対応) +// +08 ファイルサイズ (無視) +// +0C width (ほぼすべて、640) +// +10 height(ほぼすべて、480) +// +14 (mask の) x 座標 (実際は無視・・・全ファイルで 0 ) +// +1c (mask の) y座標 (実際は無視 ・・・全ファイルで 0 ) +// +20 mask が存在すれば、mask へのポインタ - /* �إå������å� */ + /* ヘッダチェック */ if (_inlen < 0x20) { fprintf(stderr, "Invalid PDT file %s : size is too small\n",filename); return; @@ -1116,14 +1116,14 @@ PDTCONV::PDTCONV(const char* _inbuf, int G00CONV::G00CONV(const char* _inbuf, int _inlen, const char* filename) { -// G00 FILE �Υإå� +// G00 FILE のヘッダ // +00 type (1, 2) // +01: width(word) // +03: height(word) -// type 1: (color table �դ� LZ ���� ; PDT11 ���б�) -// +05: ���̥�����(dword) ; +5 ����ȥǡ������ΤΥ����� -// +09: Ÿ���奵����(dword) -// type 2: (�ޥ����ġ����������ΰ��ʬ�䤷�Ƥ��줾�찵��) +// type 1: (color table 付き LZ 圧縮 ; PDT11 に対応) +// +05: 圧縮サイズ(dword) ; +5 するとデータ全体のサイズ +// +09: 展開後サイズ(dword) +// type 2: (マスク可、画像を矩形領域に分割してそれぞれ圧縮) // +05: index size // +09: index table(each size is 0x18) // +00 @@ -1133,14 +1133,14 @@ G00CONV::G00CONV(const char* _inbuf, int // +09+0x18*size+08: (data top) // - /* �ǡ�����������ɤ߹��� */ + /* データから情報読み込み */ int type = *_inbuf; int w = read_little_endian_short(_inbuf+1); int h = read_little_endian_short(_inbuf+3); if (w < 0 || h < 0) return; - if (type == 0 || type == 1) { // color table �դ����� + if (type == 0 || type == 1) { // color table 付き圧縮 if (_inlen < 13) { fprintf(stderr, "Invalid G00 file %s : size is too small\n",filename); return; @@ -1153,7 +1153,7 @@ G00CONV::G00CONV(const char* _inbuf, int return; } Init(filename, _inbuf, _inlen, w, h, false); - } else if (type == 2) { // color table �ʤ����ޥ����դ��Ĥΰ��� + } else if (type == 2) { // color table なし、マスク付き可の圧縮 int head_size = read_little_endian_short(_inbuf+5); if (head_size < 0 || head_size*24 > _inlen) return; @@ -1172,17 +1172,17 @@ G00CONV::G00CONV(const char* _inbuf, int bool G00CONV::Read(char* image) { if (data == NULL) return false; - /* header ���� */ + /* header 識別 */ int type = *data; if (type == 0) return Read_Type0(image); else if (type == 1) return Read_Type1(image); else if (type == 2) return Read_Type2(image); } -/* ����Ū�� LZ ���̤�Ÿ���롼���� */ -/* datasize �ϥǡ������礭����char / short / int ������ */ -/* datatype �� Copy1Pixel (1�ǡ����Υ��ԡ�)�ڤ� ExtractData(LZ ���̤ξ�������� -** �Ȥ�����åɤ�����������饹 */ +/* 一般的な LZ 圧縮の展開ルーチン */ +/* datasize はデータの大きさ、char / short / int を想定 */ +/* datatype は Copy1Pixel (1データのコピー)及び ExtractData(LZ 圧縮の情報を得る +** というメソッドを実装したクラス */ static int bitrev_table[256] = { 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, @@ -1207,7 +1207,7 @@ template<class DataType, class DataSize> const char* lsrc = src; char* ldest = dest; if (lsrc+50 < lsrcend && ldest+1024 < ldestend) { - /* �ޤ����ϰϥ����å���ˤ����ƹ�®�ʥ롼�����Ȥ� */ + /* まず、範囲チェックを緩くして高速なルーチンを使う */ lsrcend -= 50; ldestend += 1024; while (ldest < ldestend && lsrc < lsrcend) { @@ -1233,7 +1233,7 @@ template<class DataType, class DataSize> lsrcend += 50; ldestend += 1024; } - /* �Ĥ���Ѵ� */ + /* 残りを変換 */ while (ldest < ldestend && lsrc < lsrcend) { count += 8; int flag = int(*(unsigned char*)lsrc++); @@ -1258,12 +1258,12 @@ template<class DataType, class DataSize> return 0; } -/* �����餹�����wrapper */ +/* 引数を減らすためのwrapper */ template<class DataType, class DataSize> inline int lzExtract(DataType datatype, DataSize datasize ,const char*& src, char*& dest, const char* srcend, char* destend) { return lzExtract<DataType, DataSize>(datatype,src,dest,srcend,destend); } -/* ���̤� PDT */ +/* 普通の PDT */ class Extract_DataType { public: static void ExtractData(const char*& lsrc, int& data, int& size) { @@ -1286,7 +1286,7 @@ class Extract_DataType { static int IsRev(void) { return 0; } }; -/* PDT11 ������ʳ��Ѵ� */ +/* PDT11 の第一段階変換 */ class Extract_DataType_PDT11 { private: int* index_table; @@ -1305,7 +1305,7 @@ class Extract_DataType_PDT11 { static int IsRev(void) { return 0; } }; -/* �ޥ����� */ +/* マスク用 */ class Extract_DataType_Mask { public: void ExtractData(const char*& lsrc, int& data, int& size) { @@ -1321,7 +1321,7 @@ class Extract_DataType_Mask { static int IsRev(void) { return 0; } }; -/* ����� */ +/* 書庫用 */ class Extract_DataType_ARC { public: void ExtractData(const char*& lsrc, int& data, int& size) { @@ -1337,7 +1337,7 @@ class Extract_DataType_ARC { static int IsRev(void) { return 0; } }; -/* avg2000 �Υ��ʥꥪ�� */ +/* avg2000 のシナリオ用 */ class Extract_DataType_SCN2k { public: void ExtractData(const char*& lsrc, int& data, int& size) { @@ -1353,7 +1353,7 @@ class Extract_DataType_SCN2k { static int IsRev(void) { return 1; } }; -/* ReadLive �� type0 */ +/* ReadLive の type0 */ class Extract_DataType_G00Type0 { public: static void ExtractData(const char*& lsrc, int& data, int& size) { @@ -1385,7 +1385,7 @@ bool PDTCONV::Read(char* image) { if (! Read_PDT11(image)) return false; } if (! is_mask) return true; - // �ޥ����ɤ߹��� + // マスク読み込み int mask_pt = read_little_endian_int(data + 0x1c); char* buf = new char[width*height+1024]; const char* src = data + mask_pt; @@ -1452,8 +1452,8 @@ bool PDTCONV::Read_PDT11(char* image) { return true; } -/* dest �� dest_end ���� 256 byte �ʾ���ޤ� -** ���߲�ǽ�Ǥ��뤳�ȡ� +/* dest は dest_end よりも 256 byte 以上先まで +** 書き込み可能であること。 */ void ARCINFO::Extract(char*& dest_start, char*& src_start, char* dest_end, char* src_end) { const char* src = src_start; @@ -1468,12 +1468,12 @@ void ARCINFO::Extract2k(char*& dest_star } bool ARCINFO_AVG32::ExecExtract(void) { - // �إå��Υ����å� + // ヘッダのチェック if (strncmp(data, "PACK", 4) != 0) return false; if (read_little_endian_int(data+8) != info.filesize) return false; if (read_little_endian_int(data+12) != info.arcsize) return false; - // �ե������Ÿ������ + // ファイルを展開する char* ret_data = new char[info.filesize+1024]; const char* s = data + 0x10; @@ -1510,10 +1510,10 @@ bool ARCINFO2k::ExecExtract(void) { char* ret_data = new char[info.filesize + 1024]; char* decoded_data = new char[info.arcsize + 1024]; - /* header �Υ��ԡ� */ + /* header のコピー */ memcpy(ret_data, data, info.private_data); - /* �ޤ���xor �ΰŹ沽��� */ + /* まず、xor の暗号化を解く */ const char* s; const char* send; char* d; char* dend; @@ -1528,7 +1528,7 @@ bool ARCINFO2k::ExecExtract(void) { if (info.filesize == info.arcsize) { memcpy(ret_data+info.private_data, decoded_data + info.private_data + 8, info.arcsize - info.private_data - 8); } else { - /* ���̤���Ƥ���ʤ顢�����Ÿ�� */ + /* 圧縮されているなら、それを展開 */ s = (const char*)(decoded_data + info.private_data + 8); send = (const char*)(decoded_data + info.arcsize); d = ret_data + info.private_data; @@ -1552,13 +1552,13 @@ bool G00CONV::Read_Type0(char* image) { int uncompress_size = read_little_endian_int(data+9); char* uncompress_data = new char[uncompress_size+1024]; - // �ޤ�Ÿ�� + // まず展開 const char* src = data + 13; const char* srcend = data + datalen; char* dest = uncompress_data; char* dstend = uncompress_data + uncompress_size; while(lzExtract(Extract_DataType_G00Type0(), char(), src, dest, srcend, dstend)){}; - // image �˥��ԡ� + // image にコピー CopyRGB(image, uncompress_data); delete[] uncompress_data; return true; @@ -1569,7 +1569,7 @@ bool G00CONV::Read_Type1(char* image) { int uncompress_size = read_little_endian_int(data+9) + 1; char* uncompress_data = new char[uncompress_size + 1024]; - // �ޤ���Ÿ�� + // まず、展開 const char* src = data + 13; const char* srcend = data + datalen; char* dest = uncompress_data; @@ -1598,7 +1598,7 @@ bool G00CONV::Read_Type1(char* image) { bool G00CONV::Read_Type2(char* image) { memset(image, 0, width*height*4); - /* ʬ���ΰ������ */ + /* 分割領域を得る */ int region_deal = read_little_endian_int(data+5); REGION* region_table = new REGION[region_deal]; @@ -1612,7 +1612,7 @@ bool G00CONV::Read_Type2(char* image) { head += 24; } - // Ÿ�� + // 展開 int uncompress_size = read_little_endian_int(head+4); char* uncompress_data = new char[uncompress_size + 1024]; @@ -1622,7 +1622,7 @@ bool G00CONV::Read_Type2(char* image) { char* destend = uncompress_data + uncompress_size; while(lzExtract(Extract_DataType_SCN2k(), char(), src, dest, srcend, destend)){}; - /* region_deal2 == region_deal �ΤϤ��ġ�*/ + /* region_deal2 == region_deal のはず……*/ int region_deal2 = read_little_endian_int(uncompress_data); if (region_deal > region_deal2) region_deal = region_deal2; @@ -1633,7 +1633,7 @@ bool G00CONV::Read_Type2(char* image) { srcend = (const char*)(uncompress_data + offset + length); while(src < srcend) { int x, y, w, h; - /* ���ԡ������ΰ������ */ + /* コピーする領域を得る */ x = read_little_endian_short(src); y = read_little_endian_short(src+2); w = read_little_endian_short(src+6); @@ -1670,7 +1670,7 @@ void G00CONV::Copy_32bpp(char* image, in void GRPCONV::CopyRGBA_rev(char* image, const char* buf) { int mask = is_mask ? 0 : 0xff000000; - /* ���Ѵ���Ԥ� */ + /* 色変換を行う */ int len = width * height; int i; unsigned char* s = (unsigned char*)buf; @@ -1686,7 +1686,7 @@ void GRPCONV::CopyRGBA(char* image, cons CopyRGB(image, buf); return; } - /* ���Ѵ���Ԥ� */ + /* 色変換を行う */ int len = width * height; int i; int* outbuf = (int*)image; @@ -1697,7 +1697,7 @@ void GRPCONV::CopyRGBA(char* image, cons } void GRPCONV::CopyRGB(char* image, const char* buf) { - /* ���Ѵ���Ԥ� */ + /* 色変換を行う */ int len = width * height; int i; unsigned char* s = (unsigned char*)buf; @@ -1914,7 +1914,7 @@ void JPEGCONV::SetupSrc(struct jpeg_deco #endif /* HAVE_LIBJPEG */ BMPCONV::BMPCONV(const char* _inbuf, int _inlen, const char* _filename) { - /* �ǡ�����������ɤ߹��� */ + /* データから情報読み込み */ int w = read_little_endian_int(_inbuf + 0x12); int h = read_little_endian_int(_inbuf + 0x16); if (h < 0) h = -h; @@ -1926,7 +1926,7 @@ BMPCONV::BMPCONV(const char* _inbuf, int bool BMPCONV::Read(char* image) { if (data == NULL) return false; - /* �ޥ����Υ����å� */ + /* マスクのチェック */ int bpp = read_little_endian_short(data+0x1c); int h = read_little_endian_int(data + 0x16); int dsz = read_little_endian_int(data + 0x22);
--- a/system/file.h +++ b/system/file.h @@ -1,8 +1,8 @@ -/* file.h : KANON �ΰ��̥ե����롦PDT �ե�����ʲ����ե�����ˤ�Ÿ���� - * ����Υ��饹 - * class FileSearcher : �ե�����δ�����Ԥ� - * class ARCINFO : ��˥ե��������Σ��ĤΥե���������饹 - * class PDTCONV : PDT �ե������Ÿ����Ԥ��� +/* file.h : KANON の圧縮ファイル・PDT ファイル(画像ファイル)の展開の + * ためのクラス + * class FileSearcher : ファイルの管理を行う + * class ARCINFO : 書庫ファイルの中の1つのファイルを扱うクラス + * class PDTCONV : PDT ファイルの展開を行う。 */ /* @@ -88,21 +88,21 @@ static int write_little_endian_short(cha /********************************************* ** FileSearcher: -** ��˥ե����롿�ǥ��쥯�ȥ��ޤᡢ -** ���ե�����δ�����Ԥ��� +** 書庫ファイル/ディレクトリを含め、 +** 全ファイルの管理を行う。 ** -** �ǽ�ˡ�����ե����뤫��ե�����μ��ऴ�Ȥ� -** �ºݤ����äƤ���ǥ��쥯�ȥꡢ��ˤ����ꤹ�� +** 最初に、設定ファイルからファイルの種類ごとに +** 実際に入っているディレクトリ、書庫を設定する ** -** �ʹߤ�Find() ��åɤǼºݤΥե���������Ƥ����� +** 以降はFind() メソッドで実際のファイルの内容を得る ** */ -/* ARCFILE �� DIRFILE �ϥե�������ऴ�Ȥξ��� */ +/* ARCFILE と DIRFILE はファイル種類ごとの情報 */ class ARCFILE; class DIRFILE; class SCN2kFILE; -/* ARCINFO �ϥե�������ɤ߹��ि���ɬ�� */ +/* ARCINFO はファイルを読み込むために必要 */ class ARCINFO; class ARCFILE_ATOM; @@ -131,9 +131,9 @@ class FileSearcher { public: #define TYPEMAX 14 enum FILETYPE { - /* �����0 - 15 �ޤ� reserved */ - ALL = 1, /* dat/ �ʲ��Υե�����(�ǥե���Ȥθ�����) */ - ROOT= 2, /* ������Υ��ȡ���ǥ��쥯�ȥ� */ + /* 一応、0 - 15 まで reserved */ + ALL = 1, /* dat/ 以下のファイル(デフォルトの検索先) */ + ROOT= 2, /* ゲームのインストールディレクトリ */ PDT = 3, /* default: PDT/ */ SCN = 4, /* default: DAT/SEEN.TXT */ ANM = 5, /* default: DAT/ALLANM.ANL */ @@ -152,19 +152,19 @@ class FileSearcher { static FileSearcher* GetInstance(void); static void Quit(void); - /* ���˥�����Υǡ���������ǥ��쥯�ȥ�����ꤹ��ɬ�פ����� */ + /* 初めにゲームのデータがあるディレクトリを設定する必要がある */ int InitRoot(char* root); - /* �ե�����η����Ȥξ���åȤ��� */ + /* ファイルの型ごとの情報をセットする */ void SetFileInformation(FILETYPE type, ARCTYPE is_arc, char* filename); - /* ʣ���Υե�������Ĥη��˴�Ϣ�Ť��� */ + /* 複数のファイルを一つの型に関連づける */ void AppendFileInformation(FILETYPE type, ARCTYPE is_arc, char* filename); ARCFILE* MakeARCFILE(ARCTYPE tp, const char* filename); - /* fname �ǻ��ꤵ�줿̾���Υե������ */ + /* fname で指定された名前のファイルを検索 */ class ARCINFO* Find(FILETYPE type, const char* fname, const char* ext=0); - /* �������Υե�����٤ƥꥹ�ȥ��å� - ** ������ NULL pointer + /* ある種類のファイルをすべてリストアップ + ** 末尾は NULL pointer */ char** ListAll(FILETYPE type); @@ -173,14 +173,14 @@ class FileSearcher { ~FileSearcher(); private: - /* InitRoot() �λ����ǽ����������ѿ� */ + /* InitRoot() の時点で初期化される変数 */ DIRFILE* root_dir; DIRFILE* dat_dir; ARCFILE* searcher[TYPEMAX]; - /* �ե������¸�߰��֤� information */ + /* ファイルの存在位置の information */ ARCTYPE is_archived[TYPEMAX]; const char* filenames[TYPEMAX]; - /* �ǥե���Ȥ� information */ + /* デフォルトの information */ static ARCTYPE default_is_archived[TYPEMAX]; static const char* default_dirnames[TYPEMAX]; static FileSearcher *_singleton; @@ -188,14 +188,14 @@ class FileSearcher { class ARCINFO { protected: - /* �ե����뤽�Τ�Τξ��� */ + /* ファイルそのものの情報 */ ARCFILE_ATOM& info; char* arcfile; - /* mmap ���Ƥ����硢���ξ��� */ + /* mmap している場合、その情報 */ bool use_mmap; char* mmapped_memory; int fd; - /* �ե��������Ƥ����äƤ���Хåե� */ + /* ファイル内容の入っているバッファ */ const char* data; protected: @@ -205,18 +205,18 @@ class ARCINFO { virtual bool ExecExtract(void); public: - /* dest ��256byte ���٤�;͵�����뤳�� */ + /* dest は256byte 程度の余裕があること */ static void Extract(char*& dest, char*& src, char* destend, char* srcend); static void Extract2k(char*& dest, char*& src, char* destend, char* srcend); virtual ~ARCINFO(); - /* ɬ�פʤ� Read ���˸Ƥ֤��Ȥǽ�����ʬ��Ǥ��� */ + /* 必要なら Read 前に呼ぶことで処理を分割できる */ int Size(void) const; - char* CopyRead(void); /* Read() �������ƤΥ��ԡ����֤� */ + char* CopyRead(void); /* Read() して内容のコピーを返す */ const char* Read(void); - /* �ե����뤬 regular file �ξ�硢�ե�����̾�� */ - /* �����Ǥʤ��ʤ� 0 �� */ + /* ファイルが regular file の場合、ファイル名を帰す */ + /* そうでないなら 0 を帰す */ const char* Path(void) const; - FILE* OpenFile(int* length=0) const; /* �ߴ����Τ��ᡧraw file �ξ�硢�ե������ */ + FILE* OpenFile(int* length=0) const; /* 互換性のため:raw file の場合、ファイルを開く */ }; class GRPCONV {
--- a/system/file_impl.h +++ b/system/file_impl.h @@ -54,8 +54,8 @@ class ARCFILE { int list_point; std::vector<ARCFILE_ATOM> arc_atom; typedef std::vector<ARCFILE_ATOM>::iterator iterator; - ARCFILE* next; /* FILESEARCH �ΰ�Ĥη���ʣ���� ARCFILE ����ĤȤ����ꥹ�Ȥ�Ĥ��� */ - /* arcname �˻��ꤵ�줿�ե����롿�ǥ��쥯�ȥ�����ƥ����å� */ + ARCFILE* next; /* FILESEARCH の一つの型が複数の ARCFILE を持つとき、リストをつくる */ + /* arcname に指定されたファイル/ディレクトリの内容チェック */ virtual int CheckFileDeal(void); virtual void ListupFiles(int fname_len); virtual ARCINFO* MakeARCINFO(ARCFILE_ATOM&); @@ -66,9 +66,9 @@ class ARCFILE { ARCFILE* Next(void) { return next; } void Init(void); virtual ~ARCFILE(); - /* �ե����븡�� */ + /* ファイル検索 */ class ARCINFO* Find(const char* fname, const char* ext); - /* �ե�����ꥹ�Ȥν��� */ + /* ファイルリストの出力 */ int Deal(void) { Init(); return arc_atom.size(); } void ListFiles(FILE* out); void InitList(void); @@ -88,7 +88,7 @@ class SCN2kFILE : public ARCFILE { class CattleyaFILE : public ARCFILE { private: bool is_compress; - /* header �� Huffman �ڹ����� */ + /* header の Huffman 木構築用 */ char* bitbuf; char* bitbuf_end; int ltree[0x400]; @@ -129,8 +129,8 @@ class DIRFILE : public ARCFILE { public: DIRFILE(char* fname) : ARCFILE(fname) {} virtual ~DIRFILE() {} - FILE* Open(const char* fname); /* FILE* �� */ - char* SearchFile(const char* dirname); /* �ե����븡�� */ + FILE* Open(const char* fname); /* FILE* を開く */ + char* SearchFile(const char* dirname); /* ファイル検索 */ }; class ARCINFO_AVG32 : public ARCINFO {
--- a/system/system_config.cc +++ b/system/system_config.cc @@ -1,5 +1,5 @@ /* system_config.cc - * gameexe.ini �ե�������ɤ߹��� + * gameexe.ini ファイルの読み込み */ /* @@ -41,16 +41,16 @@ using namespace std; # define dprintf(X) #endif /* DEBUG_CONFIG */ -#define MAXTOKEN 10 /* = �Ƕ��ڤ�줿�ΰ�κ���� */ -#define MAXVARS 32 /* , �Ƕ��ڤ�줿���ͤκ���� */ +#define MAXTOKEN 10 /* = で区切られた領域の最大数 */ +#define MAXVARS 32 /* , で区切られた数値の最大数 */ -// ������ե�������ɤ߹��� -/* config �� ʸ��������ʣ��ʤɡ����������ʷ��������ꤦ�� */ -/* ʸ����ȿ���ϰ��̤� AyuSys_Config ���饹�˴ޤ�� */ +// 初期化ファイルの読み込み +/* config は 文字列、数列、その複合など、いろいろな形式がありうる */ +/* 文字列と数列は一般に AyuSys_Config クラスに含める */ /**********************************************************/ -/* �Ȥꤢ�����ϥå�������դ�ʸ���� */ +/* とりあえずハッシュ比較付き文字列 */ class HashStr { const char* str; unsigned int hash; @@ -80,7 +80,7 @@ HashStr::HashStr(const char* s ) { char* new_str = new char[strlen(s)+1]; strcpy(new_str, s); str = new_str; - /* calc hash... Ŭ�� */ + /* calc hash... 適当 */ int h = strlen(s); while(*s != 0) { h = *s + ((h * (0x9449+*s))>>7); @@ -101,32 +101,32 @@ HashStr::HashStr(const HashStr& orig) { /********************************************************** **AyuSys_Config_[String | Intlist] : -** ��������� -** original : ������ -** old_data : ���� ClearDiff() �����Ȥ������� -** new_data : ClearDiff() �ʹߤ����ꤷ�����Ƥ���¸ -** �ǡ������ꡧ -** Init() : ���������� -** Set() : ������ѹ� -** Get() : �Ǥ⿷������������� +** 設定の本体 +** original : 元設定 +** old_data : 前回 ClearDiff() したときの設定 +** new_data : ClearDiff() 以降に設定した内容を保存 +** データ設定: +** Init() : 元設定を作成 +** Set() : 設定を変更 +** Get() : 最も新しい設定を得る ** -** �ѹ��ε�Ͽ�� -** Diff() : �����ClearDiff() �����ѹ��������Ƥ����� -** DiffLen() : Diff() ��ɬ�פ�ʸ����Ĺ������ -** ClearDiff() : �ѹ���Ͽ��ä� -** PatchOld() : Diff() ��������Ͽ�˴�Ť����ѹ����ξ��֤��᤹ -** PatchNew() : Diff() ��������Ͽ�˴�Ť����ѹ���ξ��֤��᤹ +** 変更の記録: +** Diff() : 前回のClearDiff() から変更した内容を得る +** DiffLen() : Diff() で必要な文字列長を得る +** ClearDiff() : 変更記録を消す +** PatchOld() : Diff() で得た記録に基づき、変更前の状態に戻す +** PatchNew() : Diff() で得た記録に基づき、変更後の状態に戻す ** -** �����꤫����ѹ��ε�Ͽ�� -** SetOriginal() : ��������᤹ -** DiffOriginal() : �����꤫�鸽�ߤ�������ѹ������� -** DiffOriginalLen() : DiffOriginal() ��ɬ�פ�ʸ����Ĺ������ -** PatchOriginal() : DiffOriginal() ��������Ͽ�˴�Ť�����������줹�� +** 元設定からの変更の記録: +** SetOriginal() : 元設定に戻す +** DiffOriginal() : 元設定から現在の設定の変更を得る +** DiffOriginalLen() : DiffOriginal() で必要な文字列長を得る +** PatchOriginal() : DiffOriginal() で得た記録に基づき、設定を復旧する */ /************************************************ ** AyuSysConfigStringItem -** ʸ�����ǡ����Ȥ��Ƥ��������� +** 文字列をデータとしてもつ設定項目 */ class AyuSysConfigStringItem { char* original_data; @@ -160,22 +160,22 @@ public: strcpy(new_data, o.new_data); } } - /* ���ꡧInit �ǽ������Set ���ѹ���Get ���ѹ���ͥ�褷�Ƽ��Ф� */ - void Init(int deal, const char* str) { /* deal ��̵�� */ + /* 設定:Init で初期化、Set で変更、Get で変更を優先して取り出す */ + void Init(int deal, const char* str) { /* deal は無視 */ if (original_data) delete[] original_data; int len = strlen(str); original_data = new char[len+1]; strcpy(original_data, str); original_data[len] = '\0'; } - void Set(int deal, const char* str) { /* deal ��̵�� */ + void Set(int deal, const char* str) { /* deal は無視 */ if (new_data) delete[] new_data; int len = strlen(str); new_data = new char[len+1]; strcpy(new_data, str); new_data[len] = '\0'; } - const char* Get(int deal) const {/* deal ��̵�� */ + const char* Get(int deal) const {/* deal は無視 */ if (new_data) return new_data; else if (old_data) return old_data; return original_data; @@ -186,16 +186,16 @@ public: int Deal(void) const { return 1; } - /* ���ꥸ�ʥ뤫����Ѳ���Ĵ�� : - ** DiffOriginal ���Ѳ���ʸ����Ǽ��Ф���PatchOriginal �� - ** �Ѳ���ȿ�� + /* オリジナルからの変化の調査 : + ** DiffOriginal で変化を文字列で取り出し、PatchOriginal で + ** 変化を反映 */ int DiffOriginalLen(void) { if (new_data == NULL) return 0; return strlen(new_data)+1; } void DiffOriginal(string& data) { - if (new_data == NULL) { /* �������ʤ� */ + if (new_data == NULL) { /* あり得ない */ fprintf(stderr,"AyuSysConfigStringItem::DiffOriginal : this method must not called if not required!\n"); return; } @@ -263,7 +263,7 @@ public: /************************************************ ** AyuSysConfigIntlistItem -** �������ǡ����Ȥ��Ƥ��������� +** 数値列をデータとしてもつ設定項目 */ class AyuSysConfigIntlistItem { int item_deal; @@ -300,8 +300,8 @@ public: memcpy(new_data, o.new_data, sizeof(int)*item_deal); } } - /* ���ꡧInit �ǽ������Set ���ѹ���Get ���ѹ���ͥ�褷�Ƽ��Ф� */ - void Init(int deal, const int* list) { /* deal ��̵�� */ + /* 設定:Init で初期化、Set で変更、Get で変更を優先して取り出す */ + void Init(int deal, const int* list) { /* deal は無視 */ if (original_data) delete[] original_data; original_data = NULL; if (deal <= 0) { @@ -311,13 +311,13 @@ public: original_data = new int[item_deal]; memcpy(original_data, list, sizeof(int)*deal); } - void Set(int deal, const int* list) { /* deal ��̵�� */ + void Set(int deal, const int* list) { /* deal は無視 */ item_deal = deal; if (new_data) delete[] new_data; new_data = new int[item_deal]; memcpy(new_data, list, sizeof(int)*item_deal); } - const int* Get(int deal) const {/* deal ��̵�� */ + const int* Get(int deal) const {/* deal は無視 */ if (item_deal == 0) return NULL; if (deal > item_deal) { fprintf(stderr,"AyuSysConfigIntlistItem::Get : invalid items deal %d (correct: %d)\n",deal,item_deal); @@ -327,7 +327,7 @@ public: else if (old_data) return old_data; return original_data; } - const int* GetOriginal(int deal) const {/* deal ��̵�� */ + const int* GetOriginal(int deal) const {/* deal は無視 */ if (item_deal == 0) return NULL; if (deal > item_deal) { fprintf(stderr,"AyuSysConfigIntlistItem::Get : invalid items deal %d (correct: %d)\n",deal,item_deal); @@ -338,16 +338,16 @@ public: int Deal(void) const { return item_deal; } - /* ���ꥸ�ʥ뤫����Ѳ���Ĵ�� : - ** DiffOriginal ���Ѳ���ʸ����Ǽ��Ф���PatchOriginal �� - ** �Ѳ���ȿ�� + /* オリジナルからの変化の調査 : + ** DiffOriginal で変化を文字列で取り出し、PatchOriginal で + ** 変化を反映 */ int DiffOriginalLen(void) { if (new_data == NULL) return 0; return 12 * item_deal + 1; } void DiffOriginal(string& data) { - if (new_data == NULL) { /* �������ʤ� */ + if (new_data == NULL) { /* あり得ない */ fprintf(stderr,"AyuSysConfigStringItem::DiffOriginal : this method must not called if not required!\n"); return; } @@ -409,8 +409,8 @@ public: /************************************************ ** AyuSysConfigItem -** �ǡ���̾ -> �ǡ������Τ� map �ȡ�map ���Τ� -** �͡�������Ԥ�����Υ�å� +** データ名 -> データ本体の map と、map 全体に +** 様々な操作を行うためのメソッド */ template<class ItemType, class DataType> class AyuSysConfigItem { @@ -420,22 +420,22 @@ template<class ItemType, class DataType> maptype data; public: void SetOrig(HashStr& name, int deal, const DataType* str) { - if (str == NULL) return; /* ̵�� */ + if (str == NULL) return; /* 無効 */ data[name].Init(deal, str); } void Set(HashStr& name, int deal, const DataType* new_data) { - if (new_data == NULL) return; /* ̵�� */ - /* ����� */ + if (new_data == NULL) return; /* 無効 */ + /* 設定を検索 */ mapiterator it = data.find(name); - /* ���꤬������˸��Ĥ���ʤ��ʤ鼺�� */ + /* 設定が元設定に見つからないなら失敗 */ if (it == data.end()) { fprintf(stderr,"AyuSysConfigItem::Set : there is no '%s' parameter\n",name.c_str()); return; } - /* ������ѹ� */ + /* 設定を変更 */ it->second.Set(deal, new_data); } - /* �����������ͥ�褷���֤� */ + /* 新しい設定を優先して返す */ const DataType* Get(int deal, HashStr& name) const { const_mapiterator it = data.find(name); if (it == data.end()) return NULL; @@ -451,9 +451,9 @@ public: if (it == data.end()) return NULL; return it->second.Deal(); } - /* ���ꥸ�ʥ뤫����Ѳ���Ĵ�� : - ** DiffOriginal ���Ѳ���ʸ����Ǽ��Ф���PatchOriginal �� - ** �Ѳ���ȿ�� + /* オリジナルからの変化の調査 : + ** DiffOriginal で変化を文字列で取り出し、PatchOriginal で + ** 変化を反映 */ void DiffOriginal(string& ret_str) { mapiterator it = data.begin(); @@ -510,7 +510,7 @@ public: // template AyuSysConfigItem<AyuSysConfigIntlistItem, int>; /************************************************/ -/* ��å� */ +/* ラッパ */ struct AyuSysConfigString { AyuSysConfigItem<AyuSysConfigStringItem,char> orig; void Dump(FILE* f) const { @@ -527,12 +527,12 @@ struct AyuSysConfigIntlist { }; /************************************************/ -/* AyuSysConfig ���饹 */ +/* AyuSysConfig クラス */ int AyuSysConfig::SearchParam(const char* name) const{ HashStr str(name); - if (str_config->orig.Get(1, str)) return 1; /* char* �Υѥ��� */ - else if (int_config->orig.Get(1, str)) return 2; /* int �Υѥ��� */ - /* XXX.015.XXX ����Υ���̾�� XXX.000.XXX �η��˵��ʲ����ƺƸ��� */ + if (str_config->orig.Get(1, str)) return 1; /* char* のパラメータ */ + else if (int_config->orig.Get(1, str)) return 2; /* int のパラメータ */ + /* XXX.015.XXX の類のキー名を XXX.000.XXX の形に規格化して再検索 */ char name_copy[1024]; strncpy(name_copy, name, 1000); name_copy[1000] = 0; @@ -544,8 +544,8 @@ int AyuSysConfig::SearchParam(const char s++; } HashStr str2(name_copy); - if (str_config->orig.Get(1, str2)) return 1; /* char* �Υѥ��� */ - else if (int_config->orig.Get(1, str2)) return 2; /* int �Υѥ��� */ + if (str_config->orig.Get(1, str2)) return 1; /* char* のパラメータ */ + else if (int_config->orig.Get(1, str2)) return 2; /* int のパラメータ */ else return 0; } const char* AyuSysConfig::GetParaStr(const char* name) const{ @@ -652,7 +652,7 @@ void AyuSysConfig::SetOrigParamArray(con int_config->orig.SetOrig(str, deal, array); } void AyuSysConfig::SetOriginal(void) { - /* ���Ƥ�������᤹ */ + /* 全ての設定を元に戻す */ str_config->orig.SetOriginal(); int_config->orig.SetOriginal(); change_flag = 1; @@ -674,8 +674,8 @@ void AyuSysConfig::Dump(FILE* f) const { } /************************************************ -** AyuSysConfig �Υ��ȥ饯���� -** ���Ƥ� config ���ܤ��������� +** AyuSysConfig のコンストラクタ: +** 全ての config 項目を初期化する */ AyuSysConfig * AyuSysConfig::_singleton = NULL; @@ -703,24 +703,24 @@ AyuSysConfig::AyuSysConfig(void) { str_config = new AyuSysConfigString; int_config = new AyuSysConfigIntlist; - /****** ʸ���� *******/ - SetOrigParaStr("#WAKUPDT", "GRDAT"); /* �ȡ��ޥ�����������ʤɤβ����ե����� */ - SetOrigParaStr("#REGNAME", "xclannad"); /* �쥸���ȥ�̾�������֥ե�����κ����˻Ȥ� */ - SetOrigParaStr("#CAPTION", "xclannad"); /* ������ɥ��Υ����ȥ� */ - SetOrigParaStr("#SAVENAME","SAVE.INI"); /* �����֥ե������̾�� */ - SetOrigParaStr("#SAVETITLE", "This is save file"); /* �����֥ե��������Ƭ��ʸ���� */ - SetOrigParaStr("#SAVENOTITLE", "-----------------"); /* �Ȥ��Ƥʤ������֥ǡ�����̾�� */ - SetOrigParaStr("#CGM_FILE", "MODE.CGM");/* CG mode �����꤬��¸���줿�ե�����̾ */ - SetOrigParaStr("#CGTABLE_FILE", "MODE.CGM");/* CG mode �����꤬��¸���줿�ե�����̾ */ + /****** 文字列 *******/ + SetOrigParaStr("#WAKUPDT", "GRDAT"); /* 枠、マウスカーソルなどの画像ファイル */ + SetOrigParaStr("#REGNAME", "xclannad"); /* レジストリ名。セーブファイルの作成に使う */ + SetOrigParaStr("#CAPTION", "xclannad"); /* ウィンドウのタイトル */ + SetOrigParaStr("#SAVENAME","SAVE.INI"); /* セーブファイルの名前 */ + SetOrigParaStr("#SAVETITLE", "This is save file"); /* セーブファイルの先頭の文字列 */ + SetOrigParaStr("#SAVENOTITLE", "-----------------"); /* 使われてないセーブデータの名前 */ + SetOrigParaStr("#CGM_FILE", "MODE.CGM");/* CG mode の設定が保存されたファイル名 */ + SetOrigParaStr("#CGTABLE_FILE", "MODE.CGM");/* CG mode の設定が保存されたファイル名 */ - SetOrigParaStr("#WAKU.000.000.NAME", ""); // �ƥ����ȥ�����ɥ�����������̾ - SetOrigParaStr("#WAKU.000.000.BACK", ""); // �ƥ����ȥ�����ɥ��Υƥ������طʲ���̾ - SetOrigParaStr("#WAKU.000.000.BTN", ""); // �ƥ����ȥ�����ɥ��Υܥ������̾ + SetOrigParaStr("#WAKU.000.000.NAME", ""); // テキストウィンドウの窓飾り画像名 + SetOrigParaStr("#WAKU.000.000.BACK", ""); // テキストウィンドウのテキスト背景画像名 + SetOrigParaStr("#WAKU.000.000.BTN", ""); // テキストウィンドウのボタン画像名 - SetOrigParaStr("#MOUSE_CURSOR.000.NAME", ""); // �ޥ�����������Υե�����̾ - SetOrigParaStr("#CURSOR.000.NAME", ""); // ���������Υե�����̾ - SetOrigParaStr("#SELBTN.000.NAME", ""); // ������ط� - SetOrigParaStr("#SELBTN.000.BACK", ""); // ������ط� + SetOrigParaStr("#MOUSE_CURSOR.000.NAME", ""); // マウスカーソルのファイル名 + SetOrigParaStr("#CURSOR.000.NAME", ""); // リターンカーソルのファイル名 + SetOrigParaStr("#SELBTN.000.NAME", ""); // 選択肢背景 + SetOrigParaStr("#SELBTN.000.BACK", ""); // 選択肢背景 char name_str[8] = "#NAME.A"; for (i='A'; i<='Z'; i++) { @@ -728,109 +728,109 @@ AyuSysConfig::AyuSysConfig(void) { SetOrigParaStr(name_str, ""); } - /****** ������ *******/ - SetOrigParam("#CANCELCALL", 2, 0,0); /* �����ܥ���(������å�)�����Ȥ��˸ƤӽФ���륵�֥롼�����ֹ�(��˥塼) */ - SetOrigParam("#COM2_TITLE", 1, 1); /* �� */ - SetOrigParam("#COM2_TITLE_COLOR", 1, 2); /* ����西���ȥ�ο� */ - SetOrigParam("#COM2_TITLE_INDENT", 1, 2); /* �� */ - SetOrigParam("#SAVEFILETIME", 1, 24); /* �����֤�����ο� */ - SetOrigParam("#SEEN_START", 1, 0); /* ������Ϥ��륷�ʥꥪ�ֹ� */ - SetOrigParam("#SEEN_SRT", 1, 0); /* ������Ϥ��륷�ʥꥪ�ֹ�(���������繥��) */ - SetOrigParam("#SEEN_MENU", 1, 0); /* ��˥塼�Υ��ʥꥪ�ֹ� */ - SetOrigParam("#SEEN_TEXT_CURRENT", 1, 0); /* seen.txt �� root directory ���֤��� */ - SetOrigParam("#FADE_TIME", 1, 40); /* ���̤Υե����ɡ������Ȥ�®�� */ - SetOrigParam("#NVL_SYSTEM",1, 0); /* �ƥ����ȥ�����ɥ��������̤��ݤ� */ - SetOrigParam("#WINDOW_ATTR", 5, -1, 128,128, 190, 0); /* �ƥ����ȥ�����ɥ��ο� */ - SetOrigParam("#WINDOW_ATTR_AREA", 4, 4,4,4,4); /* �ƥ����ȥ�����ɥ����ϰ� */ - SetOrigParam("#WINDOW_ATTR_TYPE", 1, 0); /* �ƥ����ȥ�����ɥ���ȾƩ���ˤ��뤫 */ - SetOrigParam("#WINDOW_MSG_POS", 2, 22, 350); /* �ƥ����ȥ�����ɥ��ΰ��� */ - SetOrigParam("#WINDOW_COM_POS", 2,450, 250); /* ������ɥ��ΰ��� */ - SetOrigParam("#WINDOW_GRP_POS", 2, 16, 100); /* �ʤˤ��Υ�����ɥ��ΰ��� */ - SetOrigParam("#WINDOW_SUB_POS", 2, 48, 100); /* �ʤˤ��Υ�����ɥ��ΰ��� */ - SetOrigParam("#WINDOW_SYS_POS", 2, 32, 100); /* �ʤˤ��Υ�����ɥ��ΰ��� */ - SetOrigParam("#WINDOW_WAKU_TYPE", 1, 0); /* �ƥ����ȥ�����ɥ����Ȥμ��ࡣxkanon �ȼ����� */ - SetOrigParam("#RETN_CONT", 1, 16); /* ���������ο� */ - SetOrigParam("#RETN_SPEED",1,100); /* ����������ư��®�� */ - SetOrigParam("#RETN_XSIZE", 1, 16); /* �����������礭�� */ - SetOrigParam("#RETN_YSIZE", 1, 16); /* �����������礭�� */ - SetOrigParam("#FONT_SIZE", 1, 26); /* �ե���Ȥ��礭�� */ - SetOrigParam("#FONT_WEIGHT", 1, 100); /* �ե���Ȥ� weight */ - SetOrigParam("#MSG_MOJI_SIZE", 2, 12, 29); /* ʸ�����礭��(Ⱦ��) */ - SetOrigParam("#MESSAGE_SIZE", 2, 23, 3); /* ��å�����������ɥ���ʸ���� */ - SetOrigParam("#COM_MESSAGE_SIZE", 2, 23, 3); /* ��å�����������ɥ���ʸ���� */ - SetOrigParam("#INIT_MESSAGE_SPEED", 1, 30); /* �ƥ�����ɽ��®�� */ - SetOrigParam("#INIT_MESSAGE_SPEED_MOD", 1, 0); /* �ƥ�����ɽ�� no wait */ - SetOrigParam("#MESSAGE_KEY_WAIT_USE", 1, 0); /* �ƥ����ȿʹԥ����ȥ⡼�� */ - SetOrigParam("#MESSAGE_KEY_WAIT_TIME", 1, 1500); /* �����ȥ⡼�ɤǤΥ����Ԥ����� */ + /****** 数値列 *******/ + SetOrigParam("#CANCELCALL", 2, 0,0); /* キャンセルボタン(右クリック)したときに呼び出されるサブルーチン番号(メニュー) */ + SetOrigParam("#COM2_TITLE", 1, 1); /* ? */ + SetOrigParam("#COM2_TITLE_COLOR", 1, 2); /* 選択肢タイトルの色 */ + SetOrigParam("#COM2_TITLE_INDENT", 1, 2); /* ? */ + SetOrigParam("#SAVEFILETIME", 1, 24); /* セーブする場所の数 */ + SetOrigParam("#SEEN_START", 1, 0); /* ゲームを開始するシナリオ番号 */ + SetOrigParam("#SEEN_SRT", 1, 0); /* ゲームを開始するシナリオ番号(好き好き大好き) */ + SetOrigParam("#SEEN_MENU", 1, 0); /* メニューのシナリオ番号 */ + SetOrigParam("#SEEN_TEXT_CURRENT", 1, 0); /* seen.txt を root directory に置くか */ + SetOrigParam("#FADE_TIME", 1, 40); /* 画面のフェード・アウトの速度 */ + SetOrigParam("#NVL_SYSTEM",1, 0); /* テキストウィンドウが全画面か否か */ + SetOrigParam("#WINDOW_ATTR", 5, -1, 128,128, 190, 0); /* テキストウィンドウの色 */ + SetOrigParam("#WINDOW_ATTR_AREA", 4, 4,4,4,4); /* テキストウィンドウの範囲 */ + SetOrigParam("#WINDOW_ATTR_TYPE", 1, 0); /* テキストウィンドウを半透明にするか */ + SetOrigParam("#WINDOW_MSG_POS", 2, 22, 350); /* テキストウィンドウの位置 */ + SetOrigParam("#WINDOW_COM_POS", 2,450, 250); /* 選択ウィンドウの位置 */ + SetOrigParam("#WINDOW_GRP_POS", 2, 16, 100); /* なにかのウィンドウの位置 */ + SetOrigParam("#WINDOW_SUB_POS", 2, 48, 100); /* なにかのウィンドウの位置 */ + SetOrigParam("#WINDOW_SYS_POS", 2, 32, 100); /* なにかのウィンドウの位置 */ + SetOrigParam("#WINDOW_WAKU_TYPE", 1, 0); /* テキストウィンドウの枠の種類。xkanon 独自設定 */ + SetOrigParam("#RETN_CONT", 1, 16); /* リターンカーソルの数 */ + SetOrigParam("#RETN_SPEED",1,100); /* リターンカーソルの動く速度 */ + SetOrigParam("#RETN_XSIZE", 1, 16); /* リターンカーソルの大きさ */ + SetOrigParam("#RETN_YSIZE", 1, 16); /* リターンカーソルの大きさ */ + SetOrigParam("#FONT_SIZE", 1, 26); /* フォントの大きさ */ + SetOrigParam("#FONT_WEIGHT", 1, 100); /* フォントの weight */ + SetOrigParam("#MSG_MOJI_SIZE", 2, 12, 29); /* 文字の大きさ(半角) */ + SetOrigParam("#MESSAGE_SIZE", 2, 23, 3); /* メッセージウィンドウの文字数 */ + SetOrigParam("#COM_MESSAGE_SIZE", 2, 23, 3); /* メッセージウィンドウの文字数 */ + SetOrigParam("#INIT_MESSAGE_SPEED", 1, 30); /* テキスト表示速度 */ + SetOrigParam("#INIT_MESSAGE_SPEED_MOD", 1, 0); /* テキスト表示 no wait */ + SetOrigParam("#MESSAGE_KEY_WAIT_USE", 1, 0); /* テキスト進行オートモード */ + SetOrigParam("#MESSAGE_KEY_WAIT_TIME", 1, 1500); /* オートモードでのキー待ち時間 */ - SetOrigParam("#GRP_DC_TIMES", 1, 4); /* ���̤ο� */ - SetOrigParam("#MUSIC_LINEAR_PAC",1,0); /* PCM �ǡ����� 8bit -> 16bit �Ѵ���Ԥ��� */ - SetOrigParam("#MUSIC_TYPE",1,0); /* PCM �ǡ����μ��� */ - SetOrigParam("#WINDOW_MSGBK_BOX",1,0); /* �Хå������ѤΥܥ��� */ - SetOrigParam("#WINDOW_MSGBK_LBOX_POS",4,15,7,8,0); /* �Хå������ѤΥܥ���(��)�ΰ��� */ - SetOrigParam("#WINDOW_MSGBK_RBOX_POS",4,7,7,0,0); /* �Хå������ѤΥܥ���(��)�ΰ��� */ - SetOrigParam("#MSGBK_MOD",1,0); /* �Хå������ѤΥܥ������Ѥ��뤫 */ + SetOrigParam("#GRP_DC_TIMES", 1, 4); /* 裏画面の数 */ + SetOrigParam("#MUSIC_LINEAR_PAC",1,0); /* PCM データの 8bit -> 16bit 変換を行うか */ + SetOrigParam("#MUSIC_TYPE",1,0); /* PCM データの種類 */ + SetOrigParam("#WINDOW_MSGBK_BOX",1,0); /* バックログ用のボタン */ + SetOrigParam("#WINDOW_MSGBK_LBOX_POS",4,15,7,8,0); /* バックログ用のボタン(左)の位置 */ + SetOrigParam("#WINDOW_MSGBK_RBOX_POS",4,7,7,0,0); /* バックログ用のボタン(左)の位置 */ + SetOrigParam("#MSGBK_MOD",1,0); /* バックログ用のボタンを使用するか */ SetOrigParam("#WAKU.000.000.TYPE", 1, 5); - SetOrigParam("#WAKU.000.000.MOVE_BOX", 5, 0, 0, 0, 0, 0); // �ƥ����ȥ�����ɥ��ΰ�ư�ѥܥ������ - SetOrigParam("#WAKU.000.000.CLEAR_BOX", 5, 0, 0, 0, 0, 0); // ����õ��ѥܥ������ - SetOrigParam("#WAKU.000.000.READJUMP_BOX", 5, 0, 0, 0, 0, 0); // �����å��ѥܥ������ - SetOrigParam("#WAKU.000.000.AUTOMODE_BOX", 5, 0, 0, 0, 0, 0); // �������ѥܥ������ - SetOrigParam("#WAKU.000.000.MSGBK_BOX", 5, 0, 0, 0, 0, 0); // �Хå������ܥ������ - SetOrigParam("#WAKU.000.000.MSGBKLEFT_BOX", 5, 0, 0, 0, 0, 0); // �Хå������ʿʤ��˥ܥ������ - SetOrigParam("#WAKU.000.000.MSGBKRIGHT_BOX", 5, 0, 0, 0, 0, 0); // �Хå����������˥ܥ������ - SetOrigParam("#WAKU.000.000.EXBTN_000_BOX", 5, 0, 0, 0, 0, 0); // ����¾�ܥ����� - SetOrigParam("#WAKU.000.000.EXBTN_001_BOX", 5, 0, 0, 0, 0, 0); // ����¾�ܥ����� - SetOrigParam("#WAKU.000.000.EXBTN_002_BOX", 5, 0, 0, 0, 0, 0); // ����¾�ܥ����� + SetOrigParam("#WAKU.000.000.MOVE_BOX", 5, 0, 0, 0, 0, 0); // テキストウィンドウの移動用ボタン位置 + SetOrigParam("#WAKU.000.000.CLEAR_BOX", 5, 0, 0, 0, 0, 0); // 一時消去用ボタン位置 + SetOrigParam("#WAKU.000.000.READJUMP_BOX", 5, 0, 0, 0, 0, 0); // スキップ用ボタン位置 + SetOrigParam("#WAKU.000.000.AUTOMODE_BOX", 5, 0, 0, 0, 0, 0); // オート用ボタン位置 + SetOrigParam("#WAKU.000.000.MSGBK_BOX", 5, 0, 0, 0, 0, 0); // バックログボタン位置 + SetOrigParam("#WAKU.000.000.MSGBKLEFT_BOX", 5, 0, 0, 0, 0, 0); // バックログ(進める)ボタン位置 + SetOrigParam("#WAKU.000.000.MSGBKRIGHT_BOX", 5, 0, 0, 0, 0, 0); // バックログ(戻る)ボタン位置 + SetOrigParam("#WAKU.000.000.EXBTN_000_BOX", 5, 0, 0, 0, 0, 0); // その他ボタン0位置 + SetOrigParam("#WAKU.000.000.EXBTN_001_BOX", 5, 0, 0, 0, 0, 0); // その他ボタン1位置 + SetOrigParam("#WAKU.000.000.EXBTN_002_BOX", 5, 0, 0, 0, 0, 0); // その他ボタン2位置 - SetOrigParam("#WINDOW.000.MOJI_SIZE", 1, 21); // ʸ�������� - SetOrigParam("#WINDOW.000.MOJI_REP", 2, -1, 2); // ʸ����;͵ - SetOrigParam("#WINDOW.000.MOJI_CNT", 2, 20, 3); // ������ɥ����ʸ���� - SetOrigParam("#WINDOW.000.MOJI_POS", 4, 100, 0, 180, 40); // �ƥ����Ȱ��֡�3���ܤ�x ��1���ܤ�y�餷�� - SetOrigParam("#WINDOW.000.MOJI_SHADOW", 1, 0); // ʸ���˱Ƥ��դ��뤫 - SetOrigParam("#WINDOW.000.LUBY_SIZE", 1, 8); // ��Ӥ�ʸ�������� - SetOrigParam("#WINDOW.000.MOJI_MIN", 2, 8, 1); // ʸ��Ʊ�Τη�֡� - SetOrigParam("#WINDOW.000.SELCOM_USE", 1, 0); // �����μ�����ˡ - SetOrigParam("#WINDOW.000.POS", 4, 100, 0, 0, 260); // ������ɥ����� - SetOrigParam("#WINDOW.000.ATTR_MOD", 1, 0); // ������ɥ��� - SetOrigParam("#WINDOW.000.ATTR", 5, -1, -1, -1, -1, -1); // ������ɥ��� - /* SELCOM �Ϥ褯�狼���Τ�̵�� */ - SetOrigParam("#WINDOW.000.OPEN_ANM_MOD", 1, 0); // ������ɥ����Ȥ��θ��̤餷�� + SetOrigParam("#WINDOW.000.MOJI_SIZE", 1, 21); // 文字サイズ + SetOrigParam("#WINDOW.000.MOJI_REP", 2, -1, 2); // 文字の余裕 + SetOrigParam("#WINDOW.000.MOJI_CNT", 2, 20, 3); // ウィンドウ内の文字数 + SetOrigParam("#WINDOW.000.MOJI_POS", 4, 100, 0, 180, 40); // テキスト位置。3つ目がx で1つ目がyらしい + SetOrigParam("#WINDOW.000.MOJI_SHADOW", 1, 0); // 文字に影を付けるか + SetOrigParam("#WINDOW.000.LUBY_SIZE", 1, 8); // ルビの文字サイズ + SetOrigParam("#WINDOW.000.MOJI_MIN", 2, 8, 1); // 文字同士の隙間? + SetOrigParam("#WINDOW.000.SELCOM_USE", 1, 0); // 選択肢の実装方法 + SetOrigParam("#WINDOW.000.POS", 4, 100, 0, 0, 260); // ウィンドウ位置 + SetOrigParam("#WINDOW.000.ATTR_MOD", 1, 0); // ウィンドウ色 + SetOrigParam("#WINDOW.000.ATTR", 5, -1, -1, -1, -1, -1); // ウィンドウ色 + /* SELCOM はよくわからんので無視 */ + SetOrigParam("#WINDOW.000.OPEN_ANM_MOD", 1, 0); // ウィンドウを開くときの効果らしい SetOrigParam("#WINDOW.000.OPEN_ANM_TIME", 1, 500); - SetOrigParam("#WINDOW.000.CLOSE_ANM_MOD", 1, 0); // ������ɥ����Ĥ���Ȥ��θ��̤餷�� + SetOrigParam("#WINDOW.000.CLOSE_ANM_MOD", 1, 0); // ウィンドウを閉じるときの効果らしい SetOrigParam("#WINDOW.000.CLOSE_ANM_TIME", 1, 500); - SetOrigParam("#WINDOW.000.WAKU_SETNO", 1, 0); // �Ȥμ��� - SetOrigParam("#WINDOW.000.MOVE_USE", 1, 0); // ������ɥ��Ȱ�ư�ܥ�����Ѥβ��� - SetOrigParam("#WINDOW.000.CLEAR_USE", 1, 0); // ������ɥ��Ⱦõ�ܥ�����Ѥβ��� - SetOrigParam("#WINDOW.000.READJUMP_USE", 1, 0); // �����åץܥ�����Ѥβ��� - SetOrigParam("#WINDOW.000.AUTOMODE_USE", 1, 0); // �����åץܥ�����Ѥβ��� - SetOrigParam("#WINDOW.000.MSGBK_USE", 1, 0); // �Хå������ܥ�����Ѥβ��� - SetOrigParam("#WINDOW.000.MSGBKLEFT_USE", 1, 0); // �Хå������ʿʤ�˥ܥ�����Ѥβ��� - SetOrigParam("#WINDOW.000.MSGBKRIGHT_USE", 1, 0); // �Хå����������˥ܥ�����Ѥβ��� - SetOrigParam("#WINDOW.000.EXBTN_000_USE", 1, 0); // ����¾�ܥ����Ѥβ��� - SetOrigParam("#WINDOW.000.EXBTN_001_USE", 1, 0); // ����¾�ܥ����Ѥβ��� - SetOrigParam("#WINDOW.000.EXBTN_002_USE", 1, 0); // ����¾�ܥ����Ѥβ��� - SetOrigParam("#WINDOW.000.NAME_MOD", 1, 0); // ̾��������ɥ������ӻ��Ѥ��뤫 - SetOrigParam("#WINDOW.000.NAME_MOJI_SIZE", 1, 20); // ̾���ե���ȤΥ����� - SetOrigParam("#WINDOW.000.NAME_MOJI_POS", 2, 0, 0); // ̾��������ɥ���ʸ���ΰ��� - SetOrigParam("#WINDOW.000.NAME_MOJI_MIN", 1, 0); // ̾��������ɥ����� - SetOrigParam("#WINDOW.000.NAME_CENTERING", 1, 1); // ̾���Υ����̵ͭ - SetOrigParam("#WINDOW.000.NAME_POS", 2, 159, 78); // ̾��������ɥ����֡ʺ������֤餷���� - SetOrigParam("#WINDOW.000.NAME_WAKU_SETNO", 1, -1); // ̾��������ɥ����֡ʺ������֤餷���� - SetOrigParam("#WINDOW.000.FACE.000", 5, 0, 0, 1, 1, 1); // �饦����ɥ�����(�Ϥᣲ�Ĥ�x,y��MOJI_POS��������а��֤ʤΤ�����) - SetOrigParam("#WINDOW.000.KEYCUR_MOD", 3, 0, 0, 0); // ���������ΰ��� + SetOrigParam("#WINDOW.000.WAKU_SETNO", 1, 0); // 枠の種類 + SetOrigParam("#WINDOW.000.MOVE_USE", 1, 0); // ウィンドウ枠移動ボタン使用の可否 + SetOrigParam("#WINDOW.000.CLEAR_USE", 1, 0); // ウィンドウ枠消去ボタン使用の可否 + SetOrigParam("#WINDOW.000.READJUMP_USE", 1, 0); // スキップボタン使用の可否 + SetOrigParam("#WINDOW.000.AUTOMODE_USE", 1, 0); // スキップボタン使用の可否 + SetOrigParam("#WINDOW.000.MSGBK_USE", 1, 0); // バックログボタン使用の可否 + SetOrigParam("#WINDOW.000.MSGBKLEFT_USE", 1, 0); // バックログ(進む)ボタン使用の可否 + SetOrigParam("#WINDOW.000.MSGBKRIGHT_USE", 1, 0); // バックログ(戻る)ボタン使用の可否 + SetOrigParam("#WINDOW.000.EXBTN_000_USE", 1, 0); // その他ボタン0使用の可否 + SetOrigParam("#WINDOW.000.EXBTN_001_USE", 1, 0); // その他ボタン1使用の可否 + SetOrigParam("#WINDOW.000.EXBTN_002_USE", 1, 0); // その他ボタン2使用の可否 + SetOrigParam("#WINDOW.000.NAME_MOD", 1, 0); // 名前ウィンドウを別途使用するか + SetOrigParam("#WINDOW.000.NAME_MOJI_SIZE", 1, 20); // 名前フォントのサイズ + SetOrigParam("#WINDOW.000.NAME_MOJI_POS", 2, 0, 0); // 名前ウィンドウの文字の位置 + SetOrigParam("#WINDOW.000.NAME_MOJI_MIN", 1, 0); // 名前ウィンドウの幅 + SetOrigParam("#WINDOW.000.NAME_CENTERING", 1, 1); // 名前のセンタリングの有無 + SetOrigParam("#WINDOW.000.NAME_POS", 2, 159, 78); // 名前ウィンドウ位置(左下位置らしい) + SetOrigParam("#WINDOW.000.NAME_WAKU_SETNO", 1, -1); // 名前ウィンドウ位置(左下位置らしい) + SetOrigParam("#WINDOW.000.FACE.000", 5, 0, 0, 1, 1, 1); // 顔ウィンドウ位置(始め2つがx,y、MOJI_POSからの相対位置なのに注意) + SetOrigParam("#WINDOW.000.KEYCUR_MOD", 3, 0, 0, 0); // リターンカーソルの位置 - SetOrigParam("#CURSOR.000.SIZE", 2, 0, 0); // �����������礭�� - SetOrigParam("#CURSOR.000.CONT", 1, 50); // ���������η����֤��� - SetOrigParam("#CURSOR.000.SPEED", 1, 1000); // �֥����®�� + SetOrigParam("#CURSOR.000.SIZE", 2, 0, 0); // リターンカーソルの大きさ + SetOrigParam("#CURSOR.000.CONT", 1, 50); // リターンカーソルの繰り返し数 + SetOrigParam("#CURSOR.000.SPEED", 1, 1000); // ブリンクする速さ SetOrigParam("#SELBTN.000.CENTERING", 2, 0, 0); - SetOrigParam("#SELBTN.000.BASEPOS", 2, 0, 0); // ����襦����ɥ��ΰ��� - SetOrigParam("#SELBTN.000.REPPOS", 2, 0, 50); // ����襦����ɥ��μ��ΰ��֡����С� - SetOrigParam("#SELBTN.000.MOJISIZE", 4, 26, 0,0,0); // ʸ�����礭�� - SetOrigParam("#SELBTN.000.MOJIDEFAULTCOL", 1, 0); // ���������ʸ���� - SetOrigParam("#SELBTN.000.MOJISELECTCOL", 1, 0); // �������ʸ���� + SetOrigParam("#SELBTN.000.BASEPOS", 2, 0, 0); // 選択肢ウィンドウの位置 + SetOrigParam("#SELBTN.000.REPPOS", 2, 0, 50); // 選択肢ウィンドウの次の位置(相対) + SetOrigParam("#SELBTN.000.MOJISIZE", 4, 26, 0,0,0); // 文字の大きさ + SetOrigParam("#SELBTN.000.MOJIDEFAULTCOL", 1, 0); // 非選択時の文字色 + SetOrigParam("#SELBTN.000.MOJISELECTCOL", 1, 0); // 選択時の文字色 SetOrigParam("#COLOR_TABLE.000", 3, 255,255,255); SetOrigParam("#SHAKE.000", 3, 0,0,0); @@ -850,30 +850,30 @@ AyuSysConfig::~AyuSysConfig(void) { } static int SplitVar(const char* str, int* ret_var, int ret_size) { - /* , ���뤤�� ),:( �ѥ졼���Ȥ��ơ�-?[0-9]+ �� - ** �ե����ޥåȤο�������ɤ߹��ࡣ��Ƭ�� (�������� ) ���դ����롣 - ** (),-[0-9] �ʳ���ʸ�������ä��餽���ǽ�λ - ** ����줿�ǡ��������֤� + /* , あるいは ),:( をセパレータとして、-?[0-9]+ の + ** フォーマットの数値列を読み込む。先頭に (、末尾に ) が付きうる。 + ** (),-[0-9] 以外の文字があったらそこで終了 + ** 得られたデータ数を返す */ if (*str == '(') str++; int i; for (i=0; i<ret_size; i++) { int c; int is_positive = 1; - /* ���ѥ졼�����ɤ����Ф� */ + /* セパレータの読み飛ばし */ c = *str; if (c == ',' || c == ':') { str++; } else if (c == ')' && str[1] == '(') { str += 2; } - /* - �� parse */ + /* - を parse */ c = *str; if (c == '-' && isdigit(str[1])) { is_positive = -1; str++; } else if (! isdigit(c)) { - return i; /* �۾��ʸ���Ĥ�������λ */ + return i; /* 異常な文字を見つけた:終了 */ } int number = 0; - /* �����ɤ߹��� */ + /* 数字読み込み */ while(isdigit( (c=*str) )) { number *= 10; number += c-'0'; @@ -883,7 +883,7 @@ static int SplitVar(const char* str, int } return i; } -/* ����줿���ΰ��������롣-1 �ʤ饨�顼�������� */ +/* 決められた数の引数を得る。-1 ならエラーが生じた */ static inline int SplitVar(const char* str, int& var1) { if (SplitVar(str, &var1, 1) != 1) return -1; return 0; @@ -925,17 +925,17 @@ bool AyuSysConfig::LoadInitFile(void) unsigned char* buf_end = buf_orig + size; int line_count = 0; while(buf_orig < buf_end) { - /* buf_orig �������ɤ߹��� */ - /* ���κݤˡ� - ** ��Ƭ�� # �ʳ��ʤ鼡�ιԤޤǤȤФ� - ** ��"" ���Υ��ڡ�����TAB����Ȥ�������ʸ�� (0x20 �ʲ���ASCII������)���� - ** ��= �Ƕ��ڤ롣���ڤ�Ϻ����10�Ĥǡ�tokens ����������� - ** �ʤɤ�����Ԥ� + /* buf_orig から一行読み込む */ + /* その際に、 + ** ・頭が # 以外なら次の行までとばす + ** ・"" 外のスペース、TABを初めとする制御文字 (0x20 以下のASCIIコード)を削除 + ** ・= で区切る。区切りは最大で10個で、tokens に代入される + ** などの操作を行う */ - /* # �����å� */ + /* # チェック */ if (*buf_orig != '#') { - /* ���� '\n' �ޤ��ɤ����Ф� */ + /* 次の '\n' まで読み飛ばし */ while(buf_orig < buf_end && *buf_orig != '\n' && *buf_orig != '\r') buf_orig++; if (buf_orig < buf_end-1 && *buf_orig == '\r' && buf_orig[1] == '\n') buf_orig += 2; @@ -943,7 +943,7 @@ bool AyuSysConfig::LoadInitFile(void) line_count++; continue; } - /* ����� */ + /* 初期化 */ token_deal = 1; tokens[0] = buf; buf_ptr = NULL; @@ -951,7 +951,7 @@ bool AyuSysConfig::LoadInitFile(void) while(buf_orig < buf_end && buf_ptr < 1023) { if (in_quote) { - /* "" ���� */ + /* "" の中 */ int c = *buf_orig; if (c == '\n' || c == '\r') { break; @@ -961,13 +961,13 @@ bool AyuSysConfig::LoadInitFile(void) buf[buf_ptr++] = c; } buf_orig++; - } else { /* quote ����Ƥʤ� */ - /* ����ʸ�����ɤ����Ф� */ + } else { /* quote されてない */ + /* 制御文字を読み飛ばす */ while(*buf_orig <= 0x20 && buf_orig < buf_end && *buf_orig != '\n' && *buf_orig != '\r') buf_orig++; int c = *buf_orig; if (c == '\n' || c == '\r') break; - /* = �ʤ鼡�� token */ + /* = なら次の token */ if (c == '=') { c = 0; tokens[token_deal++] = buf+buf_ptr+1; @@ -980,10 +980,10 @@ bool AyuSysConfig::LoadInitFile(void) } } buf[buf_ptr] = '\0'; - /* ������ \r\n ��õ� */ + /* 末尾の \r\n を消去 */ if (buf_orig < buf_end-1 && buf_orig[0] == '\r' && buf_orig[1] == '\n') buf_orig += 2; else if (buf_orig < buf_end && (buf_orig[0] == '\r' || buf_orig[0] == '\n')) buf_orig++; - /* ɬ�פʤ� parse ���Ƥ���� */ + /* 必要なら parse 内容を出力 */ dprintf(("line %3d ",line_count)); for (i=0; i<token_deal; i++) { dprintf(("%d:\"%s\", ",i,tokens[i])); @@ -994,18 +994,18 @@ bool AyuSysConfig::LoadInitFile(void) } - /* ����줿���Ƥ� parse */ + /* 得られた内容を parse */ - /* #NAME=<ʸ����> */ + /* #NAME=<文字列> */ int type = SearchParam(tokens[0]); - if (type == 1) { /* #NAME=<ʸ����> */ + if (type == 1) { /* #NAME=<文字列> */ if (token_deal != 2) { dprintf(("Parse error, line %d, %s\n",line_count, tokens[0])); goto parse_error; } SetOrigParaStr(tokens[0], tokens[1]); goto parse_end; - } else if (type == 2) { /* #NAME=<������> */ + } else if (type == 2) { /* #NAME=<数値列> */ if (token_deal != 2) { dprintf(("Parse error, line %d, %s\n",line_count, tokens[0])); goto parse_error; @@ -1014,14 +1014,14 @@ bool AyuSysConfig::LoadInitFile(void) SetOrigParamArray(tokens[0], number_deal, numbers); goto parse_end; } - /* ����Ū������ʳ� : cdrom track �ʤ� */ + /* 一般的な設定以外 : cdrom track など */ if (strncmp(tokens[0],"#NAME.", 6) == 0) { if (token_deal != 2) goto parse_error; SetOrigParaStr(tokens[0], tokens[1]); goto parse_end; } else if (strncmp(tokens[0],"#DIRC.",6) == 0) { if (token_deal != 3) goto parse_error; - /* �ե���������λ��� */ + /* ファイル形式の指定 */ FileSearcher::FILETYPE type; char* name = tokens[0]+6; if (strcmp(name, "PDT") == 0) type = FileSearcher::PDT; @@ -1034,11 +1034,11 @@ bool AyuSysConfig::LoadInitFile(void) else if (strcmp(name, "WAV") == 0) type = FileSearcher::WAV; else if (strcmp(name, "KOE") == 0) type = FileSearcher::KOE; else if (strcmp(name, "GAN") == 0) type = FileSearcher::GAN; - else goto parse_error; /* ¾�� ALL,ROOT,MID,KOE,BGM�����֤�¸�ߤ��ʤ� */ + else goto parse_error; /* 他に ALL,ROOT,MID,KOE,BGM。たぶん、存在しない */ if (tokens[2][0] == 'N') { /* directory */ file_searcher->SetFileInformation(type, FileSearcher::ATYPE_DIR, tokens[1]); dprintf(("set file directory; type %s, directory %s\n",name,tokens[1])); - } else if (tokens[2][0] == 'P' && tokens[2][1] == ':') { /* ���������� */ + } else if (tokens[2][0] == 'P' && tokens[2][1] == ':') { /* アーカイブ */ file_searcher->SetFileInformation(type, FileSearcher::ATYPE_ARC, tokens[2]+2); dprintf(("set file archive; type %s, file %s\n",name,tokens[2]+2)); } else goto parse_error; @@ -1046,7 +1046,7 @@ bool AyuSysConfig::LoadInitFile(void) } if (strncmp(tokens[0],"#ADRC.",6) == 0) { if (token_deal != 3) goto parse_error; - /* �ե���������λ��� */ + /* ファイル形式の指定 */ FileSearcher::FILETYPE type; char* name = tokens[0]+6; if (strcmp(name, "PDT") == 0) type = FileSearcher::PDT; @@ -1059,14 +1059,14 @@ bool AyuSysConfig::LoadInitFile(void) else if (strcmp(name, "WAV") == 0) type = FileSearcher::WAV; else if (strcmp(name, "KOE") == 0) type = FileSearcher::KOE; else if (strcmp(name, "GAN") == 0) type = FileSearcher::GAN; - else goto parse_error; /* ¾�� ALL,ROOT,MID,KOE,BGM�����֤�¸�ߤ��ʤ� */ + else goto parse_error; /* 他に ALL,ROOT,MID,KOE,BGM。たぶん、存在しない */ if (tokens[2][0] == 'N') { /* directory */ file_searcher->AppendFileInformation(type, FileSearcher::ATYPE_DIR, tokens[1]); dprintf(("set file directory; type %s, directory %s\n",name,tokens[1])); - } else if (tokens[2][0] == 'P' && tokens[2][1] == ':') { /* ���������� */ + } else if (tokens[2][0] == 'P' && tokens[2][1] == ':') { /* アーカイブ */ file_searcher->AppendFileInformation(type, FileSearcher::ATYPE_ARC, tokens[2]+2); dprintf(("set file archive; type %s, file %s\n",name,tokens[2]+2)); - } else if (tokens[2][0] == 'R' && tokens[2][1] == ':') { /* ���컶�륢�������� */ + } else if (tokens[2][0] == 'R' && tokens[2][1] == ':') { /* それ散るアーカイブ */ file_searcher->AppendFileInformation(type, FileSearcher::ATYPE_ARC, tokens[2]+2); dprintf(("set file archive; type %s, file %s\n",name,tokens[2]+2)); } else goto parse_error; @@ -1074,7 +1074,7 @@ bool AyuSysConfig::LoadInitFile(void) } if (strncmp(tokens[0],"#FOLDNAME.",10) == 0) { if (token_deal != 3) goto parse_error; - /* �ե���������λ��� */ + /* ファイル形式の指定 */ FileSearcher::FILETYPE type; char* name = tokens[0]+10; if (strcmp(name, "PDT") == 0) type = FileSearcher::PDT; @@ -1087,11 +1087,11 @@ bool AyuSysConfig::LoadInitFile(void) else if (strcmp(name, "WAV") == 0) type = FileSearcher::WAV; else if (strcmp(name, "BGM") == 0) type = FileSearcher::BGM; else if (strcmp(name, "GAN") == 0) type = FileSearcher::GAN; - else goto parse_error; /* ¾�� ALL,ROOT,MID,KOE,BGM�����֤�¸�ߤ��ʤ� */ + else goto parse_error; /* 他に ALL,ROOT,MID,KOE,BGM。たぶん、存在しない */ if (tokens[2][0] == '0') { /* directory */ file_searcher->AppendFileInformation(type, FileSearcher::ATYPE_DIR, tokens[1]); dprintf(("set file directory; type %s, directory %s\n",name,tokens[1])); - } else if (tokens[2][0] == '1' && tokens[2][1] == ':') { /* ���������� */ + } else if (tokens[2][0] == '1' && tokens[2][1] == ':') { /* アーカイブ */ file_searcher->AppendFileInformation(type, FileSearcher::ATYPE_SCN2k, tokens[2]+2); dprintf(("set file archive; type %s, file %s\n",name,tokens[2]+2)); } else goto parse_error; @@ -1106,7 +1106,7 @@ bool AyuSysConfig::LoadInitFile(void) if (strcmp(tokens[0], "#DSTRACK") == 0) { /* #DSTRACK=00000000-99999000-00782556="filename" ="name" */ /* #DSTRACK=00000000-99999000-00782556="name" */ - /* ����ȡ�����Σ��Ĥ�Υѥ���������ʷ����֤��λ��κ������ϰ��֡� */ + /* 第二トークンの3つめのパラメータを得る(繰り返しの時の再生開始位置) */ int start_pt = 0; const char* tk1 = strchr(tokens[1], '-'); const char* tk2 = NULL; @@ -1133,14 +1133,14 @@ bool AyuSysConfig::LoadInitFile(void) dprintf(("Set SE %d, name %s\n",atoi(tokens[0]+4), tokens[1])); goto parse_end; } - /* ������ܤ����Ĥ���ʤ��ä� */ + /* 設定項目が見つからなかった */ dprintf(("Cannot find configuration name: %s\n",tokens[0])); parse_error: parse_end: line_count++; } delete info; - /* �ǥե���ȤΥ��ץ�������ꤹ�� */ + /* デフォルトのオプションを指定する */ // set_game(GetParaStr("#REGNAME"), *this); return true; }
--- a/system/system_config.h +++ b/system/system_config.h @@ -1,5 +1,5 @@ /* system_config.h - * gameexe.ini �ե�������ɤ߹��� + * gameexe.ini ファイルの読み込み */ /* @@ -27,7 +27,7 @@ #include <string> -/* CD Track ̾ <-> Track �ֹ���Ѵ���Ԥ� */ +/* CD Track 名 <-> Track 番号の変換を行う */ class TrackName { private: char** track; @@ -51,12 +51,12 @@ class TrackName { const char* WaveTrack(char* name); const char* SETrack(int num); }; -/* gameexe.ini �����ꤵ���ѥ��� */ -/* �ޤ����ˡ�������ܤ� SetOrigPara* �ǥ��åȤ��� -** ������������̾��255ʸ���ʲ��Ǥ���ɬ�פ����롣 +/* gameexe.ini で設定されるパラメータ */ +/* まず初めに、設定項目を SetOrigPara* でセットする +** ただし、設定名は255文字以下である必要がある。 ** -** SetPara* ��������ܤ��ѹ��Ǥ��� -** �ޤ���GetPara* ��������ܤ������롣 +** SetPara* で設定項目は変更できる +** また、GetPara* で設定項目を得られる。 */ class AyuSysConfig { @@ -65,10 +65,10 @@ class AyuSysConfig { static void Quit(void); bool LoadInitFile(void); - /* �ѥ��������� */ - /* str �ʤ� 1, int �ʤ� 2, ���Ĥ���ʤ��ʤ� 0 */ + /* パラメータを検索する */ + /* str なら 1, int なら 2, 見つからないなら 0 */ int SearchParam(const char* name) const; - /* �ѥ��������� */ + /* パラメータを得る */ const char* GetParaStr(const char* name) const; /* str */ int GetParam(const char* name, int deal, ...) const; /* int, error -> return -1, no error -> return 0 */ int GetOriginalParam(const char* name, int deal, ...) const; /* int, error -> return -1, no error -> return 0 */ @@ -78,28 +78,28 @@ class AyuSysConfig { return n; } const int* GetParamArray(const char* name, int& deal) const; - /* �ѥ������ѹ����� */ + /* パラメータを変更する */ void SetParaStr(const char* name, const char* var); /* str */ void SetParam(const char* name, int deal, ...); /* int */ - /* ���ꥸ�ʥ������ط� - ** SetOriginal : ���Ƥ��������ξ��֤��᤹ - ** DiffOriginal : ���ξ��֤ȸ��ߤξ��֤��ѹ�ʬ������ - ** PatchOriginal: DiffOriginal ������ʸ���������� - ** �Ϥ���DiffOriginal �ƤӽФ����ξ��֤��᤹ + /* オリジナルの設定関係 + ** SetOriginal : 全ての設定を初めの状態に戻す + ** DiffOriginal : 初めの状態と現在の状態の変更分を得る + ** PatchOriginal: DiffOriginal で得た文字列を引数に + ** 渡す。DiffOriginal 呼び出し時の状態に戻す */ void SetOriginal(void); void DiffOriginal(std::string&); const char* PatchOriginal(const char*); - /* config �����Ƥ�ɽ������ */ + /* config の内容を表示する */ void Dump(FILE* f) const; private: - /* �������Ԥ� */ - /* AyuSys ����Τ߲�ǽ */ + /* 元設定を行う */ + /* AyuSys からのみ可能 */ void SetOrigParaStr(const char* name, const char* var); /* str */ void SetOrigParam(const char* name, int para_deal, ...); /* int */ - void SetOrigParamArray(const char* name, int deal, int* array); /* ��Ȥ��ʤ� */ + void SetOrigParamArray(const char* name, int deal, int* array); /* 上とおなじ */ AyuSysConfig(void); ~AyuSysConfig();
--- a/system/visarc.cc +++ b/system/visarc.cc @@ -2,8 +2,8 @@ #define VERSION "1.00" /***************************************** -** Visual Arts �ΰ��̽�˥ե������ -** Ÿ������ +** Visual Arts の圧縮書庫ファイルを +** 展開する ** ** usage : visarc x <arcfile> <file> [<file> ...] ** visarc l <arcfile> @@ -239,12 +239,12 @@ void ExtractPngRgbaGraphic(char* path,ch } if (! masked) { for (int i = 0; i < conv->Width() * conv->Height(); i++) { - data[4*i+3] = 0xff; // ��Ʃ���٤����ˤ��� + data[4*i+3] = 0xff; // 不透明度を最大にする } } - if (outpath == NULL) ChangeExt(path,".png", buf); // path ��Ĥ��� + if (outpath == NULL) ChangeExt(path,".png", buf); // path をつくる else fname = outpath; - FILE* out = fopen(fname, "wb"); // �ե������ + FILE* out = fopen(fname, "wb"); // ファイルを開く if (out == NULL) { fprintf(stderr, "Cannot open raw file : %s\n",buf); delete conv; @@ -267,7 +267,7 @@ int main(int argc, char* argv[]) { usage(); return -1; } for (i=2; i<argc; i++) { - /* option ���� */ + /* option を削る */ argc--; int j; for (j=i; j<argc; j++) argv[j] = argv[j+1]; }
--- a/window/button.cc +++ b/window/button.cc @@ -25,15 +25,15 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* r,g,b �δ��ܿ��� number (0:left 1:right 2:up 3:down)������Υӥåȥޥåפ�������� -** width/height�Τɤ��餫��-1�ˤ���ȡ�����ˤ��碌�ƥ������� +/* r,g,b の基本色で number (0:left 1:right 2:up 3:down)の矢印のビットマップを作成する +** width/heightのどちらかを-1にすると、それにあわせてスケール */ #include <stdlib.h> extern char* create_button(int number, int& width, int& height, int r, int g, int b); extern char* create_box(int& width, int& height, int r, int g, int b); -// �ܥ����bitmap -// ������Ǵʰװ��� +// ボタンのbitmap +// ランレングスで簡易圧縮 static int buttonleft_cnt = 990; static char buttonleft[991] = { 0x00,0x10,0x04,0x7e,0x39,0x00,0x22,0x04,0x7f,0x59,0x00,0x1e,0x04,0x81,0x79,0x00, @@ -379,7 +379,7 @@ static char* extract_button(int number, char* out = new char[width*height]; int outc = 0; int i; - // �������Ÿ�� + // ランレングスの展開 for (i=0; i<size; i++) { int c = *(unsigned char*)(data+i); int s = 0; @@ -396,15 +396,15 @@ static char* extract_button(int number, return out; } -// R,G,B �λ��꿧����쿧�ˡ����뤵���Ѥ������� RGB -> HLS -> RGB �Ѵ��Ǻ������� +// R,G,B の指定色を基底色に、明るさを変えた色を RGB -> HLS -> RGB 変換で作成する struct ButtonColor { int rs[8]; int gs[8]; int bs[8]; int as[8]; - int* c_min, *c_mid, *c_max; // rgb->hls->rgb�Ѵ��ѡ�r,g,b ��⤤���max,mid,min�˳�����Ƥ� + int* c_min, *c_mid, *c_max; // rgb->hls->rgb変換用。r,g,b を高い順にmax,mid,minに割り当てる bool is_gray; - int hc, hd, l, s; // h,l,s �ϡ�h ���ǤϾ�� c_min|mid|max�ˤ����� + int hc, hd, l, s; // h,l,s 系。h 要素は上の c_min|mid|maxにも入る ButtonColor(int _r, int _g, int _b); void SetBrightness1(int n, int c1); void SetBrightness(int c1, int c2, int c3, int c4, int c5); @@ -419,7 +419,7 @@ ButtonColor::ButtonColor(int r, int g, i } *rs = r; *bs = b; *gs = g; - // r,g,b �ξ����max,mid,min��rs,gs,bs�˳�����Ƥ� + // r,g,b の昇順にmax,mid,minをrs,gs,bsに割り当てる if (r > g) { if (r > b) { // r = max c_max = rs; @@ -511,7 +511,7 @@ static void draw_button(char* rdata, int int xadd = width*65536/bwidth; int yadd = height*65536/bheight; - // ���Υӥåȥޥåפ��忧���ʤ���̾����� + // 元のビットマップに着色しながら縮小する for (by=0; by<bheight; by++) { ScaleData* d = data + y*width; char* s = bdata + by*bwidth; @@ -550,16 +550,16 @@ char* create_button(int number, int& wid int bwidth, bheight; char* bdata = extract_button(number, bwidth, bheight); if (bdata == NULL) return NULL; - // ����Ψ�˹�碌��width,height�å� + // 拡大率に合わせてwidth,heightをセット if (width == -1 && height == -1) width = bwidth, height = bheight; else if (width == -1) width = bwidth * height / bheight; else if (height == -1) height = bheight * width / bwidth; if (width > bwidth) width = bwidth; if (height > bheight) height = bheight; - // �������ꤹ�� + // 色を設定する ButtonColor color(r,g,b); - // ���� + // 描画 char* rdata = (char*)malloc(width*height*4*3); color.SetBrightness(0x60, 0xa0, 0xc0, 0xe0, 0xe0); draw_button(rdata, width, height, bdata, bwidth, bheight, color); @@ -591,9 +591,9 @@ static void draw_box(char* buf, int widt const int* gs = color.gs; const int* bs = color.bs; const int* as = color.as; - // �ޤ���Ʀ���� + // まず、豆腐を書く drawbox(buf, Rect(0,0,width,height), width, rs[3],gs[3],bs[3],as[3]); - // �� + // 影 if (height > 2) { drawbox(buf, Rect(0,0,width,kage_w1), width, rs[4], gs[4], bs[4],as[4]); drawbox(buf, Rect(0,height-kage_w1,width,height), width, rs[1], gs[1], bs[1],as[1]); @@ -612,7 +612,7 @@ static void draw_box(char* buf, int widt char* create_box(int& width, int& height, int r, int g, int b) { ButtonColor color(r,g,b); - // scale �Υ������� + // scale のカーソル if (width == -1 && height == -1) width = 32, height = 48; else if (width == -1) width = height*3/2; else if (height == -1) height = width * 3/2; @@ -622,7 +622,7 @@ char* create_box(int& width, int& height if (kage_w2 <= 1) kage_w2 = 2; char* buf = (char*)malloc(width*height*4*3); - // ���� + // 描画 color.SetBrightness(0x60, 0xa0, 0xc0, 0xe0, 0xe0); draw_box(buf, width, height, kage_w1, kage_w2, color); color.SetBrightness(0x60, 0xa0, 0xe0, 0xe0, 0xe0);
--- a/window/event.cc +++ b/window/event.cc @@ -35,7 +35,7 @@ using namespace std; -bool save_req = false, load_req = false, grpdump_req = false; // scn2k/scn2k_impl.cc: �����ܡ��ɤ��饻���֡������ɤǤ���褦�� +bool save_req = false, load_req = false, grpdump_req = false; // scn2k/scn2k_impl.cc: キーボードからセーブ・ロードできるように bool pressAreq=false,pressFreq=false,pressDreq=false; namespace Event { /* Impl: struct Event::Video */ @@ -73,7 +73,7 @@ inline int Video::point_in(int x, int y) else return -1; } -/* ���������ư��������塢���ν�˽���դ� */ +/* カーソルの動く順序:上、左の順に準位付け */ bool operator <(const Video& pos1, const Video& pos2) { if (pos1.region.ty < pos2.region.ty) return true; if (pos1.region.ty == pos2.region.ty) return pos1.region.lx < pos2.region.lx; @@ -142,11 +142,11 @@ void ContainerImplTime::Delete(Time* del bool ContainerImplTime::Exec(unsigned int current_time) { if (current_time == Time::NEVER_WAKE) return true; - // �ƤӽФ��ޤǤ˺������줿item���ɲ� + // 呼び出しまでに作製されたitemを追加 insert(end(), new_item.begin(), new_item.end()); new_item.clear(); if (empty()) return true; - if (current_time == Time::FRAME_UPDATE) { // �ӥǥ��ե졼��ι����� + if (current_time == Time::FRAME_UPDATE) { // ビデオフレームの更新時 for (iterator it = begin(); it != end(); it++) { if (! it->valid) continue; @@ -155,8 +155,8 @@ bool ContainerImplTime::Exec(unsigned in it->instance->Elapsed(prev_execed_time); } } - } else { // �����Ѳ��� - if (current_time < prev_execed_time) prev_execed_time = 0; /* ���֤����ꤷ�ƣ�����ä��Ȥ� */ + } else { // 時間変化時 + if (current_time < prev_execed_time) prev_execed_time = 0; /* 時間が一回りして0に戻ったとき */ for (iterator it = begin(); it != end(); it++) { if (! it->valid) continue; unsigned tm = it->instance->Wakeup(); @@ -166,7 +166,7 @@ bool ContainerImplTime::Exec(unsigned in } prev_execed_time = current_time; } - // ������˺�����줿 item ��ºݤ˺�� + // 処理中に削除された item を実際に削除 erase(remove_if(begin(), end(), is_invalid), end()); return true; } @@ -209,7 +209,7 @@ class ContainerImplVideo : private vecto void Press(void); void TakeScreenshot(void); iterator cur_pos; - Video* cur_item; // ���ߤΥե����������� + Video* cur_item; // 現在のフォーカス位置 int cur_pressed_x, cur_pressed_y; }; @@ -319,7 +319,7 @@ void ContainerImplVideo::Motion(int x, i } - /* @@@ �ɥ�å������ȥޥ����������ΥХåƥ��ǡ����ܥ�����ʤ��ȱ����״�Ϣ�ΥХ��β�ǽ������ */ + /* @@@ ドラッグ処理とマウスを押す処理のバッティングで「二回ボタンを押さないと云々」関連のバグの可能性あり */ if (button_pressed & (1<<MOUSE_LEFT)) { if (cur_item) cur_item->Drag(cur_pressed_x, cur_pressed_y, x, y); return; @@ -386,8 +386,8 @@ bool ContainerImplVideo::Exec(void) { SDL_PumpEvents(); while(SDL_PeepEvents(&event, 1, SDL_GETEVENT, SDL_ALLEVENTS) == 1) { switch(event.type) { - case SDL_QUIT: return false; // @@@ �ʤˤ����ʤ��� - case SDL_ACTIVEEVENT: // �ʤˤ⤷�ʤ� + case SDL_QUIT: return false; // @@@ なにかやらないと + case SDL_ACTIVEEVENT: // なにもしない // cout<<"active : gain "<<int(event.active.gain)<<", state "<<int(event.active.state)<<endl; break; case SDL_KEYDOWN: @@ -495,12 +495,12 @@ bool ContainerImplVideo::Exec(void) { // cout << "mouse which "<<int(event.button.which)<<"button "<<int(event.button.button)<< // "state "<<int(event.button.state)<<"x "<<event.button.x << "y "<<event.button.y<<endl; break; - case SDL_VIDEOEXPOSE: // redraw ��ɬ�פ����롩 + case SDL_VIDEOEXPOSE: // redraw の必要がある? // cout<<"expose."<<endl; break; } } - // Motion �ƤӽФ��ϰ����� + // Motion 呼び出しは一回だけ if (is_mouse_motion) Motion(motion_x, motion_y); return true; @@ -595,9 +595,9 @@ bool Container::presscount(int mask) { } /* end of namespace Container */ -// ���ꡧ -// z ���� xy ������ߴ��ġ���®�� -// ��ư���륦�����å�����ι�®�� -// ����å��� -// ʸ����ΰ����Τ߹����ι�®�� -// �ֳ��� z �� x �ʤ��ΰ�̵������y �ʤ��ΰ������פ��ɤ�����Expose +// 問題: +// z 軸と xy 軸の相互干渉;高速化 +// 移動するウィジット描画の高速化 +// キャッシュ +// 文字列の一部のみ更新の高速化 +// 「階層 z で x なる領域無効化、y なる領域生成」で良い?>Expose
--- a/window/event.h +++ b/window/event.h @@ -38,8 +38,8 @@ namespace Event { class Container; /* - ** �ޥ����� press, �ɥ�å���in/out �ФǤ��� - ** focus ��������� left/right/space(==press) �Υ�����Ƚ�̤Ǥ��� + ** マウスの press, ドラッグ、in/out を検出できる + ** focus がある時の left/right/space(==press) のキーを判別できる */ struct Video { public: @@ -52,7 +52,7 @@ namespace Event { virtual void KeyLeft(void) {} virtual void KeyRight(void) {} - int point_in(int x, int y); /* z or -1 ���֤����礭���ۤɹ⤤�Ȥ����ˤ��� */ + int point_in(int x, int y); /* z or -1 を返す。大きいほど高いところにある */ Video(Container& container); Video(Container& container, const Rect& init_rect); @@ -109,9 +109,9 @@ namespace Event { void Delete(Time* item); typedef bool (*motionfunc)(int x, int y, void* pointer); - void RegisterGlobalMotionFunc(motionfunc, void* pointer); // �ޥ����ΰ�ư�Τ��Ӥ˸ƤӽФ����ؿ�����Ͽ���� + void RegisterGlobalMotionFunc(motionfunc, void* pointer); // マウスの移動のたびに呼び出される関数を登録する void DeleteGlobalMotionFunc(motionfunc, void* pointer); - void RegisterGlobalPressFunc(motionfunc, void* pointer); // �ޥ����Υ���å��Τ��Ӥ˸ƤӽФ����ؿ�����Ͽ���� + void RegisterGlobalPressFunc(motionfunc, void* pointer); // マウスのクリックのたびに呼び出される関数を登録する void DeleteGlobalPressFunc(motionfunc, void* pointer); Container(void);
--- a/window/menuitem.cc +++ b/window/menuitem.cc @@ -91,7 +91,7 @@ void MenuItem::deactivate(void) { void MenuItem::pack(void) { int x_min = 0, y_min = 0; - if (lb_width == -1) { // ��˥�٥��Ž�� + if (lb_width == -1) { // 上にラベルを貼る if (lb_left < 0) lb_left = 0; if (lb_bottom < 0) lb_bottom = 0; if (label && label->Pic()) { @@ -100,7 +100,7 @@ void MenuItem::pack(void) { } else { y_min = lb_bottom; } - } else { // ���˥�٥��Ž�� + } else { // 左にラベルを貼る if (lb_right < 0) lb_right = 0; if (label && label->Pic()) { int label_width = label->Pic()->Width(); @@ -142,7 +142,7 @@ void MenuItem::pack(void) { } int x=x_min, y=y_min; - // width / height �κƳ������ + // width / height の再割り当て if (menu_width > width + x_min) { int dif = menu_width - width - x_min; int n = x_size + 1; @@ -177,7 +177,7 @@ void MenuItem::pack(void) { y += item_height[i]; } } - // ���֤κƳ������ + // 位置の再割り当て it = item.begin(); for (i=0; i<y_size; i++) { for (j=0; j<x_size; j++) { @@ -190,7 +190,7 @@ void MenuItem::pack(void) { it++; } } - // ���˥�٥뤬�����硢��٥�ι⤵�����Υ���� + // 左にラベルがある場合、ラベルの高さ方向のセンタリング if (label && label->Pic() && lb_width != -1) { int label_width = label->Pic()->Width(); int label_height = label->Pic()->Height();
--- a/window/menuitem.h +++ b/window/menuitem.h @@ -34,23 +34,23 @@ #define MenuRadioButton WidMenuRadioButton #define MenuScale WidMenuScale -// ɬ�פʤ�Ρ� +// 必要なもの: // -// ��٥롧surface��Ž�줿�����褤�����ޤ������� -// ��٥���֡��ܥ���ξ塢�⤷���ϱ� -// ���ξ�硧�������justify ����Τǡ���٥����Τ����ȱ��ޡ�����ɬ�� -// ��ξ�硧������justify ����Τǡ����ޡ�����Ȳ��ޡ�����ɬ�� +// ラベル:surfaceも貼れた方がよいが、まあいいや +// ラベル位置:ボタンの上、もしくは右 +// 右の場合:右中央へjustify するので、ラベル全体の幅と右マージンが必要 +// 上の場合:左下へjustify するので、左マージンと下マージンが必要 -// ���ơ�x,y�Ŀ�����ꡢ����������������� +// 内容:x,y個数を指定、その中で中央割り当て -// ��٥���־���ʤ麸����justify, ���ʤ鱦�����justify -// �ʤΤǡ����ؤΥޡ�����Ⱦ�ؤΥޡ����� -// ��٥�ܻͳѥܥ���ʥ����å��ܥå����� -// �ܥ���������deactivate����� +// ラベル位置情報:上なら左下にjustify, 右なら右中央にjustify +// なので、下へのマージンと上へのマージン、 +// ラベル+四角ボタン(チェックボックス) +// ボタンが押されるとdeactivateされる // -// �饸���ܥ��� -// �ƥ����ȥܥ���ν����Ρ�x,y �θĿ������ -// �������� +// ラジオボタン +// テキストボタンの集合体。x,y の個数を指定 +// スケール struct MenuItem : PicWidget { int x_size, y_size;
--- a/window/picture.cc +++ b/window/picture.cc @@ -45,7 +45,7 @@ using namespace std; void DSurfaceBlitAlpha(Surface* src_o, const Rect& srcrect_o, Surface* dst_o, const Rect& dstrect_o, const unsigned char* alpha, const Rect& alpharect); void DSurfaceBlitAdd(Surface* src_o, const Rect& srcrect, Surface* dst_o, const Rect& dstrect, unsigned char alpha); void DSurfaceBlitMultiply(Surface* src_o, const Rect& srcrect, Surface* dst_o, const Rect& dstrect); -void DSurfaceFill(Surface* src, const Rect& rect, int r, int g, int b, int a=0xff); // ���ꥢ +void DSurfaceFill(Surface* src, const Rect& rect, int r, int g, int b, int a=0xff); // クリア #if 0 /* DEBUG */ #include<sys/types.h> #include<sys/time.h> @@ -101,11 +101,11 @@ PicBase::~PicBase() { if (surface_own != NULL && (attribute & SURFACE_FREE)) root->DeleteSurface(surface_own); if (surface_alpha != NULL && (attribute & ALPHA_FREE)) delete surface_alpha; iterator it; - if (parent) { // ��ʬ��Ƥ����� + if (parent) { // 自分を親から削除 parent->children.remove(this); - // root �� update ���鼫ʬ���� + // root の update 情報から自分を削除 parent->Root().DeleteUpdatePic(this); - // ��ʬ���ΰ���ľ�� + // 自分の領域を書き直す Rect old_ppos = rel_pos; parent->QueryAbsPos(old_ppos); parent->ReBlit(old_ppos); @@ -113,9 +113,9 @@ PicBase::~PicBase() { } void PicBase::Blit(const Rect& rpos_orig) { - // �ºݤ����褹���ΰ������ + // 実際に描画する領域を得る Rect rpos = rpos_orig; - // ��widget������ꤵ�줿clip area ����������ꤹ�� + // 親widget上に設定されたclip area 内に描画を限定する if (clip_area.width() != 0) { Rect clip = clip_area; clip = child_pos(clip, this); @@ -123,7 +123,7 @@ void PicBase::Blit(const Rect& rpos_orig } Rect apos = QueryAbsPos(rpos); if (rpos.empty()) return; - // ɬ�פ˱�������¸������ + // 必要に応じて保存、描画 if (attribute & CACHE_BACK) root->BlitSurface(root->surface, apos, surface_back, rpos); if (! (attribute & NO_PICTURE)) { rpos.rmove(surface_x, surface_y); @@ -134,7 +134,7 @@ void PicBase::Blit(const Rect& rpos_orig //if (apos.ty < 200) fprintf(stderr,"Blit: %p : (%d,%d,%d,%d) -> (%d,%d,%d,%d)\n",surface_own,rpos_orig.lx,rpos_orig.ty,rpos_orig.rx,rpos_orig.by,apos.lx,apos.ty,apos.rx,apos.by); root->BlitSurface(surface_own, rpos, surface_alpha, surface_alpha_rect, root->surface, apos, attribute); rpos.rmove(-surface_x, -surface_y); - } else if (parent == 0) { // �Ƥ����ʤ��ʤ��طʾõ����Ǥ���� + } else if (parent == 0) { // 親がいないなら背景消去の責任をもつ DSurfaceFill(root->surface, apos, 0, 0, 0); } PicContainer* cur = dynamic_cast<PicContainer*>(this); @@ -144,7 +144,7 @@ void PicBase::Blit(const Rect& rpos_orig } void PicBase::SimpleBlit(Surface* screen) { - // �ºݤ����褹���ΰ������ + // 実際に描画する領域を得る Rect rpos(0, 0, rel_pos.width(), rel_pos.height()); Rect apos = QueryAbsPos(rpos); if (rpos.empty()) return; @@ -162,7 +162,7 @@ Rect PicBase::QueryAbsPos(Rect& rpos) { if (parent == NULL) { // root container return rpos; } - // �Ƥκ�ɸ���Ѵ��塢Query ���� + // 親の座標に変換後、Query する Rect ppos = parent_pos(rpos); Rect apos = parent->QueryAbsPos(ppos); rpos = child_pos(ppos, this); @@ -200,14 +200,14 @@ void PicBase::ZMove(PicBase* move_to) { fprintf(stderr,"Error: PicBase::ZMove was called with a no-brother picture\n"); return; } - // move_to �� zpos �Τ�������������� picture ����ʤ���ɬ�פ����� + // move_to と zpos のうち、後ろの方の picture から書きなおす必要がある iterator redraw_zpos = z_pos; redraw_zpos++; - if (move_to == ZMOVE_BOTTOM) { // �����̤� + if (move_to == ZMOVE_BOTTOM) { // 最背面へ parent->children.erase(z_pos); parent->children.push_front(this); z_pos = parent->children.begin(); redraw_zpos = parent->children.begin(); - } else if (move_to == ZMOVE_TOP) { // �����̤� + } else if (move_to == ZMOVE_TOP) { // 最前面へ redraw_zpos = z_pos; redraw_zpos++; parent->children.erase(z_pos); parent->children.push_back(this); @@ -224,7 +224,7 @@ void PicBase::ZMove(PicBase* move_to) { if (! is_hidden_now) { is_cached = false; ReBlit(); - /* @@@ parent->Blit() �� Blit() �ΰ㤤��ʬ����ʤ��Τǽ��� 06/12/02 + /* @@@ parent->Blit() と Blit() の違いが分からないので修正 06/12/02 Rect ppos = rel_pos; parent->QueryAbsPos(ppos); parent->ReBlit(ppos); @@ -272,16 +272,16 @@ bool PicBase::IsParent(PicBase* to) { } void PicBase::show(void) { - /* ��ʬ�οƤ����٤� shown ���� */ + /* 自分の親がすべて shown か? */ PicContainer* cur; for (cur = parent; cur != 0; cur = cur->parent) if (cur->is_hidden) break; - if (cur != NULL) { // �Ƥ�����Ƥ���Τ�ɽ���Ϥ��ʤ� + if (cur != NULL) { // 親が隠れているので表示はしない is_hidden = false; is_hidden_now = true; return; } - if (is_hidden == false) return; // ���Ǥ�ɽ������Ƥ���ΤǤʤˤ⤷�ʤ� + if (is_hidden == false) return; // すでに表示されているのでなにもしない if (widget != NULL) { widget->activate(); } @@ -330,8 +330,8 @@ void PicBase::SetSurfaceColorKey(int r, void PicBase::SetSurfaceAlphaFile(const char* file) { - /* �ե������ alpha ������������� */ - /* �ե����롧 �ѥ�ե��� 'fil' �ե����� */ + /* ファイルを元に alpha 画像を作成する */ + /* ファイル: パルフェの 'fil' ファイル */ ARCINFO* info = FileSearcher::GetInstance()->Find(FileSearcher::PDT, file,"fil"); if (info == NULL) return; char* new_alpha = info->CopyRead(); @@ -349,7 +349,7 @@ err_ret: h = sr.height(); if (alpha_size < w*h) goto err_ret; int i,j; - if ( ((SDL_Surface*)surface_own)->format->Amask == 0) { // mask �� surface �˷������ + if ( ((SDL_Surface*)surface_own)->format->Amask == 0) { // mask を surface に繰り込む Surface* dest = root->NewSurface(w,h, ALPHA_MASK); for (i=0; i<h; i++) { char* a = new_alpha + w*i; @@ -371,8 +371,8 @@ err_ret: root->DeleteSurface(surface_own); surface_own = dest; SetSurfaceAlpha(0, Rect(0,0)); - } else { // �����˥ޥ������� - /* �ޥ����Τ�����0xff �Ǥ���٤���ʬ���������Ƚ�̡��ѹ����� */ + } else { // 外部にマスク作成 + /* マスクのうち、0xff であるべき部分を画像から判別、変更する */ for (i=0; i<h; i++) { char* a = new_alpha + w*i; char* s = (char*)((SDL_Surface*)surface_own)->pixels + ((SDL_Surface*)surface_own)->pitch*i; @@ -406,7 +406,7 @@ void PicBase::SetSurface(Surface* new_su surface_h = -1; if (attribute & FIT_SURFACE) { - // surface ���礭���˼�ʬ���礭�����ѹ� + // surface の大きさに自分の大きさを変更 parent->ReBlit(rel_pos); if (surface_own == 0) { rel_pos = Rect(rel_pos.lx, rel_pos.ty); @@ -488,7 +488,7 @@ PicContainer::~PicContainer() { iterator end = children.end(); for (iterator it = children.begin(); it != end; ) { iterator it_next = it; it_next++; - if ((*it)->widget != NULL) delete (*it)->widget; // picture ��widget ����°���Ƥ���ʤ顢�������delete + if ((*it)->widget != NULL) delete (*it)->widget; // picture にwidget が付属しているなら、そちらをdelete else delete (*it); it = it_next; } @@ -502,16 +502,16 @@ void PicContainer::BlitBack(iterator z, Rect ppos = parent_pos(rpos); if (is_hidden_now) goto parent_redraw; - // cache ����Ƥ����ΰ��õ�� - // z���Ȥ�����å��夷�Ƥ���С������ǽ�λ + // cache されている領域を探す + // z自身がキャッシュしていれば、ここで終了 if ( ((*z)->attribute & CACHE_BACK) && ( (*z)->is_cached) && (*z)->rel_pos.is_inner(rpos)) { Rect cpos = child_pos(rpos, *z); Rect apos = (*z)->QueryAbsPos(cpos); root->BlitSurface( (*z)->surface_back, cpos, root->surface, apos); return; } - // z ��겼�λҤ�����å��塢���뤤�� SOLID ����Ǥ��ʤ����� - for (it = z; it != begin;) { // �Ҥ�container�ξ��Υ����å��Ͼ�ά + // z より下の子がキャッシュ、あるいは SOLID 描画できないか? + for (it = z; it != begin;) { // 子がcontainerの場合のチェックは省略 it--; if ( (*it)->is_hidden_now) continue; if ( (*it)->rel_pos.is_crossed(rpos)) { @@ -526,7 +526,7 @@ void PicContainer::BlitBack(iterator z, } } } - // ��ʬ���Ȥ�����å��塢���뤤�� SOLID ����Ǥ��ʤ����� + // 自分自身がキャッシュ、あるいは SOLID 描画できないか? if (rel_solid_area.is_inner(ppos)) { goto self_redraw; } @@ -544,7 +544,7 @@ parent_redraw: } if (is_hidden_now) return; self_redraw: - BlitSelf(rpos); // �Ҥ����褻������ʬ�������� + BlitSelf(rpos); // 子は描画せず、自分だけ描画 children_redraw: for (; it != z; it++) { if ( (*it)->is_hidden_now) continue; @@ -586,11 +586,11 @@ void PicContainer::BlitFront(iterator z, } void PicContainer::BlitSelf(Rect rpos) { - // �ºݤ����褹���ΰ������ + // 実際に描画する領域を得る rpos.intersect(Rect(0, 0, rel_pos.width(), rel_pos.height())); if (rpos.empty()) return; Rect apos = QueryAbsPos(rpos); - // ɬ�פ˱�������¸������ + // 必要に応じて保存、描画 if (attribute & CACHE_BACK) root->BlitSurface(root->surface, apos, surface_back, rpos); if (! (attribute & NO_PICTURE)) { rpos.rmove(surface_x, surface_y); @@ -600,7 +600,7 @@ void PicContainer::BlitSelf(Rect rpos) { rpos.intersect(clip); } root->BlitSurface(surface_own, rpos, surface_alpha, surface_alpha_rect, root->surface, apos, attribute); - } else if (parent == NULL) { // �Ƥ����ʤ��ʤ��طʾõ����Ǥ���� + } else if (parent == NULL) { // 親がいないなら背景消去の責任をもつ DSurfaceFill(root->surface, apos, 0, 0, 0); } } @@ -628,7 +628,7 @@ void PicContainer::set_nowhiddenflag(boo } } -void PicContainer::RMove(int add_x, int add_y) { // event widget �ΰ�ư����������ΤǻҤˤĤ��Ƥ�RMove��ƤӽФ� +void PicContainer::RMove(int add_x, int add_y) { // event widget の移動があり得るので子についてもRMoveを呼び出す PicBase::RMove(add_x, add_y); iterator end = children.end(); for (iterator it = children.begin(); it != end; it++) { @@ -724,7 +724,7 @@ class FileToSurface { FileToSurface::FileToSurface(const PicRoot& _root) : root(_root) { count = 0; - count_max = 32; // ����å����̡ʷ���Ǥ��� + count_max = 32; // キャッシュ量(決め打ち) }; FileToSurface::~FileToSurface() { @@ -761,7 +761,7 @@ inline Surface* FileToSurface::LoadSurfa Surface* s = NULL; if (conv->Read(mem)) { MaskType is_mask = conv->IsMask() ? ALPHA_MASK : NO_MASK; - if (is_mask == ALPHA_MASK) { // alpha �����٤� 0xff �ʤ�ޥ���̵���Ȥ��� + if (is_mask == ALPHA_MASK) { // alpha がすべて 0xff ならマスク無しとする int len = conv->Width()*conv->Height(); unsigned int* d = (unsigned int*)mem; int i; for (i=0; i<len; i++) { @@ -787,12 +787,12 @@ Surface* FileToSurface::Load(string name Surface* surface = LoadSurface(name, mem); if (surface == NULL) return NULL; - while (count >= count_max) { // count_max �ʾ�Υǡ������ǽ�ʤ������� + while (count >= count_max) { // count_max 以上のデータを可能なら削除する qiterator it; for (it=queue.begin(); it != queue.end(); it++) { if (DeleteData(*it)) break; } - if (it == queue.end()) break; // ���ǡ�����������ʤ齪λ + if (it == queue.end()) break; // 全データが使用中なら終了 } SurfaceIndex* new_index = new SurfaceIndex; new_index->filename = name; @@ -849,7 +849,7 @@ PicRoot::PicRoot(void) { } PicRoot::~PicRoot() { - // if (surface) DeleteSurfaceImpl(surface); // SDL_GetVideoSurface() ���� surface �ϳ�����ɬ�פ��ʤ��餷�� + // if (surface) DeleteSurfaceImpl(surface); // SDL_GetVideoSurface() した surface は開放の必要がないらしい surface = NULL; delete root; delete ftosurface; @@ -877,7 +877,7 @@ void PicRoot::DeleteUpdatePic(PicBase* p } void PicRoot::ExecUpdate(void) { - /* ���̤����ΰ��õ�� */ + /* 共通する領域を消去する */ sort(update_rects.begin(), update_rects.end(), UpdateItem::less); vector<UpdateItem>::iterator it; vector<UpdateItem>::iterator end = update_rects.end(); @@ -891,12 +891,12 @@ void PicRoot::ExecUpdate(void) { vector<UpdateItem>::iterator jt = it; jt++; for (; jt != end; jt++) { if (apos.is_inner(jt->apos)) { - if (jt->pic == pic || jt->pic->IsParent(pic)) { // �Ƥ����̡������ΰ�ⶦ�� - jt->rpos = Rect(0,0); // empty rect �å� + if (jt->pic == pic || jt->pic->IsParent(pic)) { // 親が共通、かつ領域も共通 + jt->rpos = Rect(0,0); // empty rect をセット jt->apos = Rect(0,0); } - } else if (jt->apos.is_inner(apos)) { // ���˼�ʬ����ޤ���� - if (jt->pic == pic || jt->pic->IsParent(pic)) { // �Ƥ����̡������ΰ�ⶦ�� + } else if (jt->apos.is_inner(apos)) { // 相手に自分が包含される + if (jt->pic == pic || jt->pic->IsParent(pic)) { // 親が共通、かつ領域も共通 it->rpos = Rect(0,0); it->apos = Rect(0,0); break; @@ -955,7 +955,7 @@ Surface* PicRoot::NewSurface(const char* if (with_mask == COLOR_MASK) { SDL_SetColorKey( (SDL_Surface*)s, SDL_SRCCOLORKEY, *(Uint32*)s->pixels); } - /* xkanon �λij� */ + /* xkanon の残骸 */ if (strcmp(f, "grdat") == 0) SDL_SetColorKey(s, SDL_SRCCOLORKEY, 0x55aa66); return s; @@ -1039,7 +1039,7 @@ bool PicRoot::with_mask(Surface* s) { void PicRoot::SetWindowCaption(const char* caption) { #if USE_X11 // SDL_WM_SetCaption(caption, 0); - // SDL�δؿ��Ǥ�2�Х���ʸ���ݡ��Ȥ��Ƥ���ʤ��Τǡ�Ʊ�������Ƥ˽��� + // SDLの関数では2バイト文字をサポートしてくれないので、同等の内容に修正 SDL_SysWMinfo info; memset(&info,0,sizeof(info)); SDL_VERSION(&(info.version));
--- a/window/picture.h +++ b/window/picture.h @@ -44,7 +44,7 @@ namespace Event { class Video; } -/* PicBase �����Ƥ٥�Ȥ�Ϣư�����뤿��Υ����ե����� */ +/* PicBase の内容をイベントと連動させるためのインターフェース */ class PicAnm { public: typedef std::vector<PicBase*>::iterator iterator; @@ -104,7 +104,7 @@ class PicBase { ** the latter form is used for 'rel_pos', ** because rel_pos is defined as the relative position to the parent */ - Rect QueryAbsPos(Rect& ppos); // ���� picture ��� rel_pos ��ɽ������Τ˼ºݤ�ɬ�פ����к�ɸ������ + Rect QueryAbsPos(Rect& ppos); // この picture 内の rel_pos を表示するのに実際に必要な絶対座標を得る static Rect child_pos(Rect rpos, PicBase* child) { /* return 'cpos' */ rpos.intersect(child->rel_pos); @@ -129,9 +129,9 @@ class PicBase { virtual void RMove(int add_x, int add_y); void Move(int new_rx, int new_ry); - #define ZMOVE_TOP ((PicBase*)0xffff00ff) /* �����̤� */ - #define ZMOVE_BOTTOM ((PicBase*)0xffff0fff) /* �����̤� */ - void ZMove(PicBase* back); // back �����˰�ư(back �ȼ�ʬ��Ʊ���Ƥ���Ĥ���) + #define ZMOVE_TOP ((PicBase*)0xffff00ff) /* 最前面へ */ + #define ZMOVE_BOTTOM ((PicBase*)0xffff0fff) /* 最背面へ */ + void ZMove(PicBase* back); // back の前に移動(back と自分は同じ親を持つこと) void SetSurface(Surface* new_surface, int x, int y, int attribute = 0); void SetSurface(const char* new_surface, int x, int y); @@ -166,8 +166,8 @@ class PicContainer : public PicBase { private: friend class PicBase; - void BlitBack(iterator z, Rect rpos); // z ��������ΰ������ - void BlitFront(iterator z, Rect rpos); // z ��ޤᡢz��������ΰ������ + void BlitBack(iterator z, Rect rpos); // z より後ろの領域を描画 + void BlitFront(iterator z, Rect rpos); // z を含め、zより前の領域を描画 void BlitChildren(Rect rpos); void BlitSelf(Rect rpos); void BlitSelf(void) { @@ -212,8 +212,8 @@ struct PicRoot { void ExecUpdate(void); void SetWindowCaption(const char* caption); - // Surface ��� - Surface* NewSurfaceFromRGBAData(int w, int h, char* data, MaskType with_mask) const; // data �� malloc ���줿��ΤǤ��뤳��(SDL����������) + // Surface 操作 + Surface* NewSurfaceFromRGBAData(int w, int h, char* data, MaskType with_mask) const; // data は malloc されたものであること(SDLの内部仕様) Surface* NewSurface(int w, int h, MaskType with_mask) const; Surface* NewSurface(const char* filename, MaskType with_mask = ALPHA_MASK); Surface* RotZoomSurface(Surface* from, double zoom, double rotate_angle); @@ -239,7 +239,7 @@ struct PicRoot { class PicWidget { private: - PicBase* pic; /* ����Ѿ�����٤��������ٱ������������Τ� instance */ + PicBase* pic; /* 本来継承するべきだが、遅延初期化したいので instance */ public: PicWidget(void); virtual ~PicWidget();
--- a/window/render.cc +++ b/window/render.cc @@ -172,7 +172,7 @@ void DSurfaceMove(Surface* src_o, const SDL_Surface* dst = (SDL_Surface*)dst_o; SDL_Surface* src = (SDL_Surface*)src_o; - if (dst->format->BytesPerPixel != src->format->BytesPerPixel) return; // RGB�Ѵ��ϤǤ��ʤ� + if (dst->format->BytesPerPixel != src->format->BytesPerPixel) return; // RGB変換はできない Rect srcrect(srcrect_o), dstrect(dstrect_o); clip_rect(srcrect, dstrect, dst); @@ -188,7 +188,7 @@ void DSurfaceMove(Surface* src_o, const char* smem_end = src_o->mem_end(srcrect); char* dmem_end = dst_o->mem_end(dstrect); - // ����˽Ťʤ꤬���ꡢsrc �����¦�ξ�硢���ԡ��������ž���� + // メモリに重なりがあり、src が上位側の場合、コピー方向を逆転する if (smem < dmem && dmem < smem_end) { int i,j; for (i=0; i<height; i++) { @@ -221,7 +221,7 @@ void DSurfaceFillA(Surface* dsto, const char* dmem = (char*)(dst->pixels) + rect.ty*dbpl + rect.lx*bpp; unsigned int pixel = SDL_MapRGBA(dst->format, r, g, b, 0); unsigned int pixela = SDL_MapRGBA(dst->format, r, g, b, a); - a += a>>7; /* 0-256 �ˤ��� */ + a += a>>7; /* 0-256 にする */ int i, j; for (i=0; i<height; i++) { char* d = dmem; @@ -281,7 +281,7 @@ static void blit_line(Uint32* dest, Uint int j; int ax = ax0; const unsigned char* a = alpha + ax0; - if (awidth == 1) { // ���Ȥ褯����ΤǺ�Ŭ�� + if (awidth == 1) { // わりとよくあるので最適化 for (j=aj0; j < aj1; j++) { blit_pixel(dest++, src++, alpha, use_srcalpha); } @@ -357,7 +357,7 @@ void DSurfaceBlitAdd(Surface* src_o, con SDL_Surface* dst = (SDL_Surface*)dst_o; SDL_Surface* src = (SDL_Surface*)src_o; - if (dst->format->BytesPerPixel != src->format->BytesPerPixel) return; // RGB�Ѵ��ϤǤ��ʤ� + if (dst->format->BytesPerPixel != src->format->BytesPerPixel) return; // RGB変換はできない Rect srcrect(srcrect_o), dstrect(dstrect_o); clip_rect(srcrect, dstrect, dst); @@ -437,7 +437,7 @@ void DSurfaceBlitMultiply(Surface* src_o char* smem = src_o->mem(srcrect); SDL_PixelFormat& fmt = *dst->format; - /* dst �� 0-255 �� 0-pixel ���Ѵ�������ѻ��� */ + /* dst の 0-255 を 0-pixel に変換する(積算) */ int i; int table1[256], table2[256], table3[256]; Uint32 src_pixel = *(Uint32*)smem;
--- a/window/render.h +++ b/window/render.h @@ -32,11 +32,11 @@ #include "surface.h" Rect DSurfaceRenderText(TextGlyphStream::iterator start, TextGlyphStream::iterator end, const Rect& srcrect, - Surface* dst, const Rect& dstrect); // Êž»úÉÁ²è + Surface* dst, const Rect& dstrect); // 文字描画 -void DSurfaceFill(Surface* src, const Rect& rect, int r, int g, int b, int a=0xff); // ¥¯¥ê¥¢ -void DSurfaceFillA(Surface* src, const Rect& rect, int r, int g, int b, int a=0xff); // ¥Æ¥¥¹¥È¥Š¥£¥ó¥É¥ŠÇØ·Ê€ÎÀßÄê -void DSurfaceMove(Surface* src_o, const Rect& srcrect, Surface* dst_o, const Rect& dstrect); // ¥³¥Ô¡Œ +void DSurfaceFill(Surface* src, const Rect& rect, int r, int g, int b, int a=0xff); // クリア +void DSurfaceFillA(Surface* src, const Rect& rect, int r, int g, int b, int a=0xff); // テキストウィンドウ背景の設定 +void DSurfaceMove(Surface* src_o, const Rect& srcrect, Surface* dst_o, const Rect& dstrect); // コピー void DSurfaceBlitAlpha(Surface* src_o, const Rect& srcrect_o, Surface* dst_o, const Rect& dstrect_o, const unsigned char* alpha, const Rect& alpharect); void DSurfaceBlitAdd(Surface* src_o, const Rect& srcrect, Surface* dst_o, const Rect& dstrect, unsigned char alpha); void DSurfaceBlitMultiply(Surface* src_o, const Rect& srcrect_o, Surface* dst_o, const Rect& dstrect_o);
--- a/window/system.cc +++ b/window/system.cc @@ -79,12 +79,12 @@ namespace System { old_time = start_time; } - // ���ꡧ - // z ���� xy ������ߴ��ġ���®�� - // ��ư���륦�����å�����ι�®�� - // ����å��� - // ʸ����ΰ����Τ߹����ι�®�� - // �ֳ��� z �� x �ʤ��ΰ�̵������y �ʤ��ΰ������פ��ɤ�����Expose + // 問題: + // z 軸と xy 軸の相互干渉;高速化 + // 移動するウィジット描画の高速化 + // キャッシュ + // 文字列の一部のみ更新の高速化 + // 「階層 z で x なる領域無効化、y なる領域生成」で良い?>Expose /* Uint32 end_time = SDL_GetTicks(); Uint32 delay = (end_time-start_time); @@ -98,7 +98,7 @@ namespace System { void Main::SetCursor(Surface* s, const Rect& r) { if (instance == NULL) return; if (instance->cursor) delete instance->cursor; - if (s == NULL) { // ��������õ� + if (s == NULL) { // カーソル消去 instance->cursor = NULL; } else if (s == DEFAULT_MOUSECURSOR) { instance->cursor = NULL;
--- a/window/widget.cc +++ b/window/widget.cc @@ -142,9 +142,9 @@ MouseCursor::~MouseCursor() { bool MouseCursor::Motionfunc(int x, int y, void* pointer) { MouseCursor* _this = (MouseCursor*)pointer; - // ���夬��������ݥ���Ȥξ�� + // 左上がカーソルポイントの場合 // _this->Pic()->Move(x,y); - // ��������������ݥ���Ȥξ�� + // 左下がカーソルポイントの場合 _this->Pic()->Move(x,y-_this->Pic()->Height()); return true; } @@ -196,7 +196,7 @@ void Button::Toggle(bool new_toggle) { return; } is_toggled = new_toggle; - // if (is_in) return; // is_in �˴ؤ�餺�������åȤ�ɽ�����ѹ����뤳�Ȥˤ��� + // if (is_in) return; // is_in に関わらずウィジットの表示を変更することにする if (is_toggled) { if (nptn > 2) Pic()->SetSurfacePos(sx+sdx*2, sy+sdy*2); @@ -252,26 +252,26 @@ extern char* create_box(int& width, int& void Scale::Init(Rect r_orig) { int r=cursor_color.r, g=cursor_color.g, b=cursor_color.b; - // ��� + // 矢印 int arrow_width = -1; cursor_width = -1; char* button1; char* button2; if (is_vertical) { - // �����ɬ�פ��ΰ���� + // 矢印に必要な領域確保 int arrow_height = r_orig.width(); button1 = create_button(2, arrow_height, arrow_width, r, g, b); button2 = create_button(3, arrow_height, arrow_width, r, g, b); if (r_orig.height() < arrow_width*4) { - if (r_orig.height() < 8) r_orig.by = r_orig.ty + 8; // ������������϶����ѹ� + if (r_orig.height() < 8) r_orig.by = r_orig.ty + 8; // 小さすぎる場合は強制変更 free( (void*)button1); free( (void*)button2); arrow_width = r_orig.height()/4; - // �Ƴ������ + // 再割り当て button1 = create_button(2, arrow_height, arrow_width, r, g, b); button2 = create_button(3, arrow_height, arrow_width, r, g, b); } - // ����ܥ���κ��� + // 矢印ボタンの作成 Surface* a1s = parent->Root().NewSurfaceFromRGBAData(arrow_height, arrow_width*3, button1, ALPHA_MASK); int x = r_orig.lx; int y = r_orig.ty; arrow_up = new Button(container, parent, a1s, 0, 0, 0, arrow_width, 3, Rect(x,y,x+arrow_height,y+arrow_width),1); @@ -280,32 +280,32 @@ void Scale::Init(Rect r_orig) { x = r_orig.rx - arrow_height; y = r_orig.by - arrow_width; arrow_down = new Button(container, parent, a2s, 0, 0, 0, arrow_width, 3, Rect(x,y,x+arrow_height,y+arrow_width),1); arrow_down->Pic()->SetSurfaceFreeFlag(); - // picture�����ʥܥ����ư���ΰ�� + // picture作成(ボタンの動く領域) Rect r = r_orig; r.ty += arrow_width; r.by -= arrow_width; panel = parent->create_node(r, 0); SetPic(panel); - // �ܥ�����濴�������衢���� + // ボタンの中心線を描画、設定 Surface* s = parent->Root().NewSurface(r.width()/2, r.height(), ALPHA_MASK); DSurfaceFill(s, Rect(0,0,r.width()/2,r.height()), 0, 0, 0, 0xff); Pic()->SetSurface(s, -r.width()/4, 0, 0); Pic()->SetSurfaceFreeFlag(); } else { - // �����ɬ�פ��ΰ���� + // 矢印に必要な領域確保 int arrow_height = r_orig.height(); button1 = create_button(0, arrow_width, arrow_height, r, g, b); button2 = create_button(1, arrow_width, arrow_height, r, g, b); if (r_orig.width() < arrow_width*4) { - if (r_orig.width() < 8) r_orig.rx = r_orig.lx + 8; // ������������϶����ѹ� + if (r_orig.width() < 8) r_orig.rx = r_orig.lx + 8; // 小さすぎる場合は強制変更 free( (void*)button1); free( (void*)button2); arrow_width = r_orig.width()/4; - // �Ƴ������ + // 再割り当て button1 = create_button(2, arrow_width, arrow_height, r, g, b); button2 = create_button(3, arrow_width, arrow_height, r, g, b); } - // ����ܥ���κ��� + // 矢印ボタンの作成 Surface* a1s = parent->Root().NewSurfaceFromRGBAData(arrow_width, arrow_height*3, button1, ALPHA_MASK); int x = r_orig.lx; int y = r_orig.ty; arrow_up = new Button(container, parent, a1s, 0, 0, 0, arrow_height, 3, Rect(x,y,x+arrow_width,y+arrow_height),1); @@ -314,13 +314,13 @@ void Scale::Init(Rect r_orig) { x = r_orig.rx - arrow_width; y = r_orig.by - arrow_height; arrow_down = new Button(container, parent, a2s, 0, 0, 0, arrow_height, 3, Rect(x,y,x+arrow_width,y+arrow_height),1); arrow_down->Pic()->SetSurfaceFreeFlag(); - // picture�����ʥܥ����ư���ΰ�� + // picture作成(ボタンの動く領域) Rect r = r_orig; r.lx += arrow_width; r.rx -= arrow_width; panel = parent->create_node(r, 0); SetPic(panel); - // �ܥ�����濴�������衢���� + // ボタンの中心線を描画、設定 Surface* s = parent->Root().NewSurface(r.width(), r.height()/2, ALPHA_MASK); DSurfaceFill(s, Rect(0,0,r.width(),r.height()/2), 0, 0, 0, 0xff); Pic()->SetSurface(s, 0, -r.height()/4, 0); @@ -344,14 +344,14 @@ void Scale::InitCursor(int width_ratio) if (width_ratio < 0) width_ratio = 0; else if (width_ratio > 1024) width_ratio = 1024; if (is_vertical) { - if (width_ratio == 0) cursor_width = Pic()->Width() * 3 / 2; // ����1.5�� + if (width_ratio == 0) cursor_width = Pic()->Width() * 3 / 2; // 幅の1.5倍 else cursor_width = Pic()->Height()*width_ratio/1024; - if (cursor_width <= 0) return; // ��������ʤ��ʤ����Τ����� + if (cursor_width <= 0) return; // カーソルなし(いいのか?) region = Rect(0, 0, Pic()->Width(), cursor_width); } else { // horizontal - if (width_ratio == 0) cursor_width = Pic()->Height() * 3 / 2; // �⤵��1.5�� + if (width_ratio == 0) cursor_width = Pic()->Height() * 3 / 2; // 高さの1.5倍 else cursor_width = Pic()->Width()*width_ratio/1024; - if (cursor_width <= 0) return; // ��������ʤ��ʤ����Τ����� + if (cursor_width <= 0) return; // カーソルなし(いいのか?) region = Rect(0, 0, cursor_width, Pic()->Height()); } @@ -368,7 +368,7 @@ void Scale::InitCursor(int width_ratio) cursor->drag_pointer = (void*)this; cursor->show(); - // �������å������Ȥ��ΰ�ư�̷� + // 矢印等をクリックしたときの移動量計算 int bar_width; if (is_vertical) bar_width = Pic()->Height(); else bar_width = Pic()->Width(); @@ -479,7 +479,7 @@ TextButton::TextButton(Event::Container& fore(_fore), pressed(_pressed), back(_back) { bool rect_changed = false; - // �ޤ����ƥ������ΰ�ι��������� + // まず、テキスト領域の広さを得る Rect r(r_orig); if (text == NULL) text = ""; @@ -489,7 +489,7 @@ TextButton::TextButton(Event::Container& TextStream ts = TextStream::ParseMoji(text, _fore.r , _fore.g, _fore.b, text_size); TextGlyphStream gs = DefaultLayout(text_size)->Layout(ts, width); - if (r.width() == 0) { // ʸ���˹�碌�ƥ������åȺ��� + if (r.width() == 0) { // 文字に合わせてウィジット作成 rect_changed = true; width = gs.width() + text_size; r.rx = r.lx + gs.width(); @@ -502,7 +502,7 @@ TextButton::TextButton(Event::Container& } if (rect_changed) { - // �礭���ѹ� + // 大きさ変更 Pic()->SetSurfaceRect(r); } @@ -515,7 +515,7 @@ TextButton::TextButton(Event::Container& y = (Pic()->Height() - gs.height()) / 2; //FIXME: (back.a == NULL ?) - if (back.a == 0) { // �طʤʤ����⤷���ϥܥ��ξ��֤Τ��طʤ��� + if (back.a == 0) { // 背景なし、もしくはボタン押の状態のみ背景あり surface = root.NewSurface(r.width(), r.height()*2, ALPHA_MASK); DSurfaceFill(surface, Rect(*surface), 0, 0, 0, 0); if (attribute & REVERSE) { @@ -532,8 +532,8 @@ TextButton::TextButton(Event::Container& DSurfaceRenderText(gs.begin(), gs.end(), Rect(0,0,gs.width(),gs.height()), surface, Rect(x,y+r.height())); } nptn = 2; - } else { // �ܥ����طʤ��� - /* ��٥��Ѥ� Surface ���� */ + } else { // ボタン型の背景あり + /* ラベル用の Surface を作る */ width = r.width(); height = r.height(); char* box = create_box(width, height, back.r, back.g, back.b); surface = root.NewSurfaceFromRGBAData(r.width(), r.height()*3, box, ALPHA_MASK); @@ -558,7 +558,7 @@ TextButton::TextButton(Event::Container& void TextButton::SetText(const char* text, const Color& _fore, const Color& _pressed, const Color& _back) { int width = Pic()->Width(); int height = Pic()->Height(); - // �ޤ����ƥ������ΰ�ι��������� + // まず、テキスト領域の広さを得る if (text == NULL) text = ""; TextGlyphStream gs = DefaultLayout(text_size)->Layout(text, width); @@ -575,7 +575,7 @@ void TextButton::SetText(const char* tex surface = NULL; //FIXME: (back.a == NULL) ? - if (back.a == 0) { // �طʤʤ� + if (back.a == 0) { // 背景なし surface = root.NewSurface(width, height*2, ALPHA_MASK); DSurfaceFill(surface, Rect(*surface), 0, 0, 0, 0); if (attribute & REVERSE) { @@ -589,7 +589,7 @@ void TextButton::SetText(const char* tex gs.SetReverse(false); nptn = 2; } else { - /* ��٥��Ѥ� Surface ���� */ + /* ラベル用の Surface を作る */ char* box = create_box(width, height, _back.r, _back.g, _back.b); surface = root.NewSurfaceFromRGBAData(width, height*3, box, ALPHA_MASK); @@ -701,7 +701,7 @@ label_wait: cursor_activated = false; if (cursor) cursor->hide(); while(cur_pos != gstream.end()) { - // ���������뤷�Ƥϼ������衢���֤� + // スクロールしては次行描画、を繰り返す for (scroll_height = CalcScrollHeight(); scroll_height > 0; scroll_height--) { status = SCROLL; label_scroll: @@ -763,7 +763,7 @@ void Text::Start(void) { bottom_pos.clear(); layout.Layout(stream, gstream, bottom_pos, pictext->Width()-fontsize/2); - // height ���ѻ��ͤȤ��� bottom_pos ��� + // height の積算値として bottom_pos を計算 std::vector<int>::iterator it; int pos = 0; for (it = bottom_pos.begin(); it != bottom_pos.end(); it++) { @@ -783,13 +783,13 @@ void Text::Start(void) { } void Text::DrawText(int& nChar) { - // �����ϰϤ����� + // 描画範囲を得る iterator end = gstream.end(); iterator it = cur_pos; - while(nChar && it != end) { // nChar < 0 �ʤ����������ʸ�������� + while(nChar && it != end) { // nChar < 0 なら出来るだけの文字を描画 if (! (it->flag & TextGlyph::Group)) nChar--; if (it->flag & TextGlyph::LineEnd) { - if (bottom_pos[line_number+1] > srcrect.by) { //���Ԥ���Ȳ��̤���ФƤ��ޤ� + if (bottom_pos[line_number+1] > srcrect.by) { //改行すると画面から出てしまう it++; if (nChar == 0) nChar = 1; break; @@ -798,14 +798,14 @@ void Text::DrawText(int& nChar) { } it++; } - // ���褹�� + // 描画する Rect r = DSurfaceRenderText(cur_pos, it, srcrect, surface, Rect(0,0,0,0)); pictext->ReBlit(r); cur_pos = it; } void Text::Scrollup(int& nChar) { - if (nChar < 0) { // �����ʬ���������뤹�� + if (nChar < 0) { // 一画面分スクロールする DSurfaceFill(surface, Rect(*surface), 0, 0, 0, 0); pictext->ReBlit(); srcrect = Rect(*surface); @@ -814,7 +814,7 @@ void Text::Scrollup(int& nChar) { scrolled_count = 0; return; } - // ����������������� + // スクロール幅を求める const int max_scroll_count = 8; int dy = bottom_pos[line_number+1] - bottom_pos[line_number]; int cur_dy; @@ -873,7 +873,7 @@ Label::Label(PicContainer* parent, const TextGlyphStream gs = DefaultLayout(text_size)->Layout(text, width); - if (r.width() == 0) { // ʸ���˹�碌�ƥ������åȺ��� + if (r.width() == 0) { // 文字に合わせてウィジット作成 width = gs.width(); r.rx = r.lx + gs.width(); } @@ -883,7 +883,7 @@ Label::Label(PicContainer* parent, const SetPic(parent->create_leaf(r, 0)); - /* ��٥��Ѥ� Surface ���� */ + /* ラベル用の Surface を作る */ surface = parent->Root().NewSurface(r.width(), r.height(), ALPHA_MASK); DSurfaceFill(surface, Rect(*surface), 0, 0, 0, 0); @@ -927,18 +927,18 @@ Dialog::Dialog(Event::Container& contain XKFont::HorizLayout& layout = *DefaultLayout(26); int dialog_width = parent->Width() / 2; - TextGlyphStream s_ok = layout.Layout("�ϣ�", dialog_width); - TextGlyphStream s_cancel = layout.Layout("���", dialog_width); + TextGlyphStream s_ok = layout.Layout("OK", dialog_width); + TextGlyphStream s_cancel = layout.Layout("取消", dialog_width); TextGlyphStream s_text = layout.Layout(text, dialog_width); Rect r_text(0, 0, s_text.width(), s_text.height()); Rect r_ok(0, 0, s_ok.width(), s_ok.height()); Rect r_cancel(0, 0, s_cancel.width(), s_cancel.height()); - /* �����������ܥå����� Surface ���� */ + /* ダイアログボックスの Surface を作る */ int dwidth = r_text.width() + (r_text.width()/10)*2 + 6; int dheight = r_text.height() + r_ok.height() + r_cancel.height()*3 + 4; - surface_diag = parent->Root().NewSurface(dwidth, dheight, NO_MASK); // alpha �ʤ� + surface_diag = parent->Root().NewSurface(dwidth, dheight, NO_MASK); // alpha なし DSurfaceFill(surface_diag, Rect(*surface_diag), 0xf0, 0xd0, 0xa0); DrawBox(surface_diag, Rect(0,0,dwidth,dheight)); @@ -950,20 +950,20 @@ Dialog::Dialog(Event::Container& contain parent->Root().BlitSurface(surface_text, r_text, surface_diag, Rect(x, y, x+r_text.width(), y+r_text.height())); parent->Root().DeleteSurface(surface_text); - /* panel ��Ĥ��� */ + /* panel をつくる */ x = (parent->Width()-dwidth)/2; y = (parent->Height()-dheight)/2; SetPic(parent->create_node(Rect(x, y, x+dwidth, y+dheight), 0)); - /* �ܥ����������� */ - /* f8d8c8 �ط�(��)*/ - /* f0d0a0 �ط�*/ - /* b08040 �ȡ���)*/ - /* 805010 ��*/ - /* 382018 ��*/ - /* 9890f8 ��*/ - /* dc6448 ��*/ - /* �ƥܥ���Ϻ����˥ܥ������� 1/4, �岼�˥ܥ������� 1/4 �Υޡ��������� */ + /* ボタンを作成する */ + /* f8d8c8 背景(明)*/ + /* f0d0a0 背景*/ + /* b08040 枠(明)*/ + /* 805010 枠*/ + /* 382018 黒*/ + /* 9890f8 青*/ + /* dc6448 赤*/ + /* 各ボタンは左右にボタン幅の 1/4, 上下にボタン幅の 1/4 のマージンを持つ */ Rect r_btn(r_ok); r_btn.join(r_cancel); int btn_width = r_btn.width() * 3 / 2; int btn_height = r_btn.height() * 3 / 2; @@ -1184,8 +1184,8 @@ void AnmAlphaMove::Exec(int count) { if (ptns.empty()) return; if (cur_count != 0 && ptns[cur_count].next_tick > count) return; if (cur_count >= ptns.size()) return; - // ���Υѥ������õ�� - // count <= it->next_tick �ʤ�����������Ǹ�� it ��õ�� + // 次のパターンを探す + // count <= it->next_tick なる条件を満たす最後の it を探す std::vector<Ptn>::iterator it; for (it=ptns.begin()+cur_count; it != ptns.end(); it++) { if (count <= it->next_tick) break; @@ -1212,7 +1212,7 @@ void AnmAlphaMove::Finish(void) { if (ptns.empty()) return; if (cur_count >= ptns.size() - 1) return; cur_count = ptns.size() - 1; - Exec(ptns[cur_count].next_tick); // �Ǹ�� pattern �ξ��֤ˤ��� + Exec(ptns[cur_count].next_tick); // 最後の pattern の状態にする } AnmPtnSolid::AnmPtnSolid(Event::Container& container, PicBase* _pic, const unsigned char* _ptn, const Rect& _alpha_r, int total_time) : @@ -1288,68 +1288,68 @@ void AnmPtnAlpha::Finish(void) { /* -Widget �μ��� - Mouse: �ޥ������֤�Ϣư���롣Surface �� origin ��ɬ�� - Panel : �ʤˤ�¸�ߤ��ʤ��Ȥ�����ĥ��Ĥ��Ƥ��� - �ط�ĥ��Ĥ����ǽ - ButtonPanel : ̵������ǽ��Group �� Button ��������������ä��顢��Button / Label ���֥������벼���֤ˤʤ� - Ʊ���ѿ����ܥ���ϸ�§��Ʊ��ButtonPanel �β������뤳�ȡ�Ʊ�����롣��®����ǽ�� - �����Ǥʤ���硢�ܥ���� GlobalVariable �ե饰��Ω�Ƥ�ɬ�פ����� - �طʼ��ࡧWindow - ������Ʃ���٤��ȷ����̡��˻����ǽ���ȷ������ȡ���ʬ�Ȥɤ���η��Ǥ��ǽ - ����ʬ�Ȥʤ顢����Ū�ˤϾ��ȡ����ȡ������Ȥ��� Surface �Ǵ�������� +Widget の種類 + Mouse: マウス位置に連動する。Surface と origin が必須 + Panel : なにも存在しないところに張りつけていく + 背景張りつけも可能 + ButtonPanel : 無効化可能。Group の Button がカーソルに入ったら、全Button / Label が「カーソル下」状態になる + 同一変数を扱うボタンは原則、同一ButtonPanel の下に入ること(同期する。高速化可能) + そうでない場合、ボタンの GlobalVariable フラグを立てる必要がある + 背景種類:Window + 内部の透明度と枠形を別々に指定可能。枠形は全枠、部分枠どちらの形でも可能 + (部分枠なら、内部的には上枠、下枠、左右枠と別 Surface で管理する) DragButton - Panel ���Τ�ɥ�å���������ѹ��Ǥ���ܥ��� - Button: ̵�������̾�䥫�����벼��ܥ��� ��picture / animation - Toggle Button �ˤǤ���(Group�������RadioButton�ˤ�Ǥ���) - Label : ̵�������̾�䥫�����벼����animation - animation �� - ����ؤ��Ѳ� - �����ؤ��Ѳ� - ������ѷ� - �Σ��Ĥη������ġ� - ������ - ��x / y increment �ˤ������ΰ�� x,y ���礭������ꤹ��Ⱥ��夫�鱦�塢�������Ȥ������ؾ�����ΰ���ѹ����Ƥ����� - �����Ѳ��������Ѳ��ˡ����ơ��֥����ꤹ�롣Surface �� alpha �ΤߤȤ��� - �ɤ���⡢��ĤΥ�٥�˻Ȥ����֤�Ĺ������ꤹ�� - ��callback �ˤ�롣���ꤷ��������ְʾ夬Ω�Ĥ�CallBack ���ƤӽФ��졢������Surface , origin ����ꤹ�롣 + Panel 全体をドラッグし、場所変更できるボタン。 + Button: 無効化>通常>カーソル下>ボタン押下 のpicture / animation + Toggle Button にできる(Group化すればRadioButtonにもできる) + Label : 無効化>通常>カーソル下 のanimation + animation は + ・上への変化 + ・下への変化 + ・常時変形 + の3つの形式をもつ。 + 形式は + ・x / y increment による(全領域と x,y の大きさを指定すると左上から右上、左下、という方へ勝手に領域を変更していく) + ・色変化(明度変化)。色テーブルを指定する。Surface は alpha のみとする + どちらも、一つのラベルに使う時間の長さを指定する + ・callback による。指定した一定時間以上が立つとCallBack が呼び出され、新たなSurface , origin を指定する。 - ��Surface �� - ���̤β��� - ʸ�����Ŭ���˲��۲��� - ���������� - �Τ����줫 + ・Surface は + 普通の画像 + 文字列(適当に仮想化) + 画像数値列 + のいずれか Cursor - ��������롣Label �ΰ� + リターンカーソル。Label の一種。 Number - ������ɽ�����롣�ե���Ȥ��礭�����⤷���ϲ��������� + 数字を表示する。フォントの大きさ、もしくは画像数値列 Text - �ƥ����Ȥ�ɽ������ - �ѥͥ���礭���������ꤹ���Ŭ���ˤ�äƤ���� - ��������ΰ��֡�ʸ���μ�/�ǽ��ˤ���ꤹ�뤳�� - ��ǽ��ʸ������®�����ꡢ�ɤ����Ф�����ʾ�˺ǹ�®�Dz����äѤʤ��� - ProgressBar �ʤ� - �С���Ĺ�������뤤�ϰ��֤��ѿ����礭������ - Tick, Max ����ꡢ�ѿ����Ѳ��ˤ�Ŭ�����б��Ǥ���褦�ˤ��� - �С��������Ȥ��ƽ�/����Surface �Ϸ����֤��ǻȤ���®�پ塢32pixel ���餤���ä��ۤ����������⡩�� - �С�������˥ܥ����Ȥ��롣Surface ����Υ�åɤ��㤦������ - ���ץ���С��Τɤ�����å����줿�Ȥ��������˰�ư���뤫�����˸����äư�ư���뤫 - ���ץ��������ܥ���ʤ���ʤ����� + テキストを表示する + パネルの大きさだけ指定すると適当にやってくれる + カーソルの位置(文字の次/最終)を指定すること + 機能:文字送り速度設定、読み飛ばし設定(常に最高速で押しっぱなし) + ProgressBar など + バーの長さ、あるいは位置で変数の大きさを示す。 + Tick, Max を指定、変数の変化には適当に対応できるようにする + バーの方向として縦/横。Surface は繰り返しで使う(速度上、32pixel くらいあったほうがいいかも?) + バーの代わりにボタンも使える。Surface 指定のメソッドが違うだけ。 + オプション:バーのどこかをクリックされたとき、そこに移動するかそこに向かって移動するか + オプション?:矢印ボタン(いらないか) ScrollBar - ��/�ġ�Panel ��Ϣư����(����, ProgressBar �ΰ��Ȥ��Ƽ���) - (Panel ¦�ǡָ����ʤ���ʬ��delete, ��������ʬ�ϼ�ư�Ǻ�����ǽ��Ĥ��롩���Хå������� + 横/縦。Panel と連動する(専用, ProgressBar の一種として実装) + (Panel 側で「見えない部分はdelete, 見える部分は自動で作成」機能をつける?:バックログ) -��˥塼�νФ��� - ������å� - �ܥ���� - ��������������ʤ��ΰ�˹Ԥ��ȥ̤äȽФƤ��� -��˥塼�⡼���� - �ܥ�����ƽ�λ - �ޥåפ��äƤ������ƥ�˥塼��̾�����꿶������˹����ä���˥塼�ˤʤ� - ̾�����꿶��Ⱦ��̾���ꥹ�Ȥ��ǤƤ��� - ̾�����꿶��Ȳ���̾���ꥹ�Ȥ��ФƤ��� +メニューの出し方 + 右クリック + ボタンを押す + 上の方、右の方など領域に行くとヌっと出てくる +メニューモード内 + ボタンを押して終了 + マップを作っておき、各メニューに名前を割り振ると二次元に広がったメニューになる + 名前を割り振ると上に名前リストがでてくる + 名前を割り振ると横に名前リストが出てくる */ // }
--- a/window/widget.h +++ b/window/widget.h @@ -87,7 +87,7 @@ struct Button : public Event::Video, Pic DragFunc drag_func; void* drag_pointer; - /* �Ѿ� */ + /* 継承 */ void activate(void) { Event::Video::activate();} void deactivate(void) { Event::Video::deactivate();} void SetRegion(const Rect& new_rect) { Event::Video::SetRegion(new_rect);} @@ -131,11 +131,11 @@ struct Scale : Event::Video, PicWidget { static void PressCursor(void* pointer, Button* from); static void DragCursor(int x_from, int y_from,int x, int y, void* pointer, Button* from); - // �Ѿ���Event::Video + // 継承:Event::Video void Press(void); void Motion(int x, int y); - /* �Ѿ� : PicWidget */ + /* 継承 : PicWidget */ void activate(void) { Event::Video::activate();} void deactivate(void) { Event::Video::deactivate();} void SetRegion(const Rect& new_rect) { Event::Video::SetRegion(new_rect);} @@ -167,7 +167,7 @@ struct Text : public Event::Video, Event TimeCursor* cursor; Surface* surface; TextGlyphStream gstream; - std::vector<int> bottom_pos; // �Թ⤵(height)���߷��� + std::vector<int> bottom_pos; // 行高さ(height)の累計値 XKFont::HorizLayout layout; int fontsize;
--- a/xlovesys.cc +++ b/xlovesys.cc @@ -28,8 +28,8 @@ // #define ROOTPATH "/mnt/KEY/CLANNAD" // #define ROOTPATH "/home/uenok/pb" // #define FONT "msgothic.ttc" - /* kochi-mincho-subst.ttf ���뤤�� -*-*-*-r-*--24-*-*-*-*-*-jisx0208.1983-* �ʤ� */ - /* TrueType Font �� /usr/X11R6/lib/X11/fonts/TrueType/ �ʤɤ�¸�ߤ���ɬ�פ����� */ + /* kochi-mincho-subst.ttf あるいは -*-*-*-r-*--24-*-*-*-*-*-jisx0208.1983-* など */ + /* TrueType Font は /usr/X11R6/lib/X11/fonts/TrueType/ などに存在する必要がある */ #include <stdio.h> #include <stdlib.h> @@ -55,7 +55,7 @@ const char key_lb_orig[] = {0x4b, 0x45, const char key_lb_new[] = "KEY\\LittleBusters"; -extern "C" int main(int argc, char* argv[]); /* SDL.h ����������Τ�ɬ�פʤ��Ϥ��ʤ�����ɡġ� */ +extern "C" int main(int argc, char* argv[]); /* SDL.h で定義されるので必要ないはずなんだけど…… */ int main(int argc, char *argv[]) { AyuSysConfig *config = AyuSysConfig::GetInstance(); @@ -116,7 +116,7 @@ int main(int argc, char *argv[]) { FileSearcher::GetInstance()->InitRoot(rootPath); config->LoadInitFile(); const char* regname = config->GetParaStr("#REGNAME"); - if (strcmp(regname, key_lb_orig) == 0) { // "��ȥ�Х��������� -> LittleBusters��#REGNAME���ѹ� + if (strcmp(regname, key_lb_orig) == 0) { // "リトルバスターズ! -> LittleBustersに#REGNAMEを変更 config->SetParaStr("#REGNAME", key_lb_new); } if (xor_key == NULL)