bool CWinEditValue_Event::onkeypress_up() { if (m_cur.y > 0) m_cur.y--; // カーソル上げる if (m_my_tt[m_cur.y] == TT_SPC) m_cur.y--; // スペーサならもういっちょ上げる // スペーサで始まるリストだと落ちるので注意 drawwin(); return true; // キーループ継続 }
bool CWinEditValue_Event::onkeypress_down() { if (m_cur.y < m_name.size() - 1) m_cur.y++; // カーソル下げる if (m_my_tt[m_cur.y] == TT_SPC) m_cur.y++; // スペーサならもういっちょ下げる // スペーサで終わるリストだと落ちるので注意 drawwin(); return true; // キーループ継続 }
bool CWinEnemyEditor::onkeypress_right() { // 個々のラインの右端までスクロール //if (m_list[m_cur.y].length() / 2 - m_dpos.x > m_winw - 2) m_dpos.x++; // 最大長ラインの右端までスクロール if (m_winw - m_wpos.x - 1 + m_dpos.x < m_maxwidth) m_dpos.x++; drawwin(); return true; // キーループ継続 }
void CWinScenarioEditor::warn(enum msg_id tmp_msg) { CWinMsg* nw_msg; nw_msg = new CWinMsg; nw_msg->m_msg = msg[tmp_msg].msg; nw_msg->setdefcpair(1, 0); nw_msg->startwin(true); delete(nw_msg); drawwin(); }
// 表示開始 // std::string CWindows::startdialog(bool frame) { m_this = newwin(m_winh, adjx(m_winw), m_winy, adjx(m_winx)); refresh(); if (frame) drawframe(); drawwin(); keyloop(); return (m_returnstr); }
// 表示開始 // int CWindows::startwin(bool frame) { m_this = newwin(m_winh, adjx(m_winw), m_winy, adjx(m_winx)); refresh(); if (frame) drawframe(); drawwin(); keyloop(); return (m_return); }
void CWinMapEditor::warn_no_map() { CWinMsg* nw_msg; nw_msg = new CWinMsg; nw_msg->m_msg = msg[MY_MSG_SYS_NO_MAP].msg; nw_msg->setdefcpair(1, 0); nw_msg->startwin(true); delete(nw_msg); refreshwin(); drawwin(); }
bool CWinMapEditor::onkeypress_left() { chg_attr(m_cur.x - m_dpos.x, m_cur.y - m_dpos.y, WA_NORMAL); if (m_cur.x > 0){ m_cur.x--; // カーソル左 if (m_cur.x < m_dpos.x) { m_dpos.x--; // 左スクロール refreshwin(); } } drawwin(); return true; // キーループ継続 }
bool CWinMapEditor::onkeypress_down() { chg_attr(m_cur.x - m_dpos.x, m_cur.y - m_dpos.y, WA_NORMAL); if (m_cur.y < m_dpos.y + LINES && m_cur.y < m_mapdata.height - 1){ m_cur.y++; // カーソル下げる if (m_cur.y > m_dpos.y + LINES - 1) { m_dpos.y++; // 下スクロール refreshwin(); } } drawwin(); return true; // キーループ継続 }
bool CWinMapEditor::onkeypress_up() { chg_attr(m_cur.x - m_dpos.x, m_cur.y - m_dpos.y, WA_NORMAL); if (m_cur.y > 0){ m_cur.y--; // カーソル上げる if (m_cur.y < m_dpos.y) { m_dpos.y--; // 上スクロール refreshwin(); } } drawwin(); return true; // キーループ継続 }
bool CWinMapEditor::onkeypress_right() { chg_attr(m_cur.x - m_dpos.x, m_cur.y - m_dpos.y, WA_NORMAL); if (m_cur.x < m_dpos.x + COLS / 2 && m_cur.x < m_mapdata.width - 1){ m_cur.x++; // カーソル右 if (m_cur.x > m_dpos.x + COLS / 2 - 1) { m_dpos.x++; // 右スクロール refreshwin(); } } drawwin(); return true; // キーループ継続 }
void redraw(Image *screen, int all) { int i; all |= geometry(); if(all) draw(screen, screen->r, lightblue, nil, ZP); for(i=0; i<nwin; i++) if(all || win[i].dirty) drawwin(i); if(!all) for(; i<onwin; i++) drawnowin(i); onwin = nwin; }
bool CWinEditValue_Event::onkeypress_ok() { if (m_my_tt[m_cur.y] != TT_SPC) { CWinGetPath* nw_getpath; nw_getpath = new CWinGetPath; nw_getpath->settitle(m_name[m_cur.y]); m_value[m_cur.y] = nw_getpath->startdialog(true); decode(&m_value[m_cur.y], m_ptr[m_cur.y], m_my_tt[m_cur.y]); delete(nw_getpath); drawwin(); touchwin(m_this); wrefresh(m_this); if (m_cur.y == 0) { m_return = 1; return false; // キーループを終了して、次のIDで再表示する } } return true; // キーループ継続 }
bool CWinScenarioEditor::onkeypress_up() { drawwin(); return true; // キーループ継続 }
bool CWinEnemyEditor::onkeypress_up() { if (m_cur.y > 0) m_cur.y--; drawwin(); return true; // キーループ継続 }
bool CWinEnemyEditor::onkeypress_ok() { CWinEditValue* nw_editvalue; if (m_cur.y == m_enemynum) { // 新規作成 Enemy tmp_enemy; int i; for (i = 0; i < MAX_ENEMYNAME; i++) { tmp_enemy.name[i] = '\0'; } tmp_enemy.type = 1; tmp_enemy.hp = 0; tmp_enemy.ap = 0; tmp_enemy.an = 0; tmp_enemy.ag = 0; tmp_enemy.mp = 0; tmp_enemy.mn = 0; tmp_enemy.mg = 0; tmp_enemy.hr = 0; tmp_enemy.er = 0; tmp_enemy.fp = 0; tmp_enemy.exp = 0; tmp_enemy.gold = 0; for (i = 0; i < ENEMY_ITEM; i++) { tmp_enemy.item[i].id = 0; tmp_enemy.item[i].num = 0; tmp_enemy.item_r[i] = 0; } for (i = 0; i < ENEMY_FIGHT; i++) { tmp_enemy.fight[i] = 0; tmp_enemy.fight_r[i] = 0; } tmp_enemy.flg = 0; tmp_enemy.next_enemy = 0; for (i = 0; i < ENEMY_CALL; i++) { tmp_enemy.call_enemy[i] = 0; } for (i = 0; i < MAX_ENEMYPROF; i++) { tmp_enemy.prof[i] = 0; } m_data->m_enemy.push_back(tmp_enemy); } for ( ; ; ) { nw_editvalue = new CWinEditValue; // アイテムリスト登録(リスト番号0に登録) nw_editvalue->push_list(&m_itemlist); // 敵キャラリスト登録(リスト番号1に登録) nw_editvalue->push_list(&m_enemylist); // 属性リスト登録(リスト番号2に登録) nw_editvalue->push_list(&m_typelist); // 攻撃方法リスト登録(リスト番号3に登録) nw_editvalue->push_list(&m_fightlist); // ポインタセット nw_editvalue->push("名前", m_data->m_enemy[m_cur.y].name, TT_CHR, MAX_ENEMYNAME); nw_editvalue->push("属性", &m_data->m_enemy[m_cur.y].type, TT_LST, 2); // リスト番号2を指定 nw_editvalue->push("--------------", NULL, TT_SPC, 1); nw_editvalue->push("体力(最大)", &m_data->m_enemy[m_cur.y].hp, TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃力(最大)", &m_data->m_enemy[m_cur.y].ap, TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃回数(最大)", &m_data->m_enemy[m_cur.y].an, TT_INT, MAX_INTNUM); nw_editvalue->push("防御力(最大)", &m_data->m_enemy[m_cur.y].ag, TT_INT, MAX_INTNUM); nw_editvalue->push("魔法力(最大)", &m_data->m_enemy[m_cur.y].mp, TT_INT, MAX_INTNUM); nw_editvalue->push("魔法回数(最大)", &m_data->m_enemy[m_cur.y].mn, TT_INT, MAX_INTNUM); nw_editvalue->push("魔法防御力(最大)",&m_data->m_enemy[m_cur.y].mg, TT_INT, MAX_INTNUM); nw_editvalue->push("命中率(%)", &m_data->m_enemy[m_cur.y].hr, TT_INT, MAX_INTNUM); nw_editvalue->push("回避率(%)", &m_data->m_enemy[m_cur.y].er, TT_INT, MAX_INTNUM); nw_editvalue->push("素早さ(最大)", &m_data->m_enemy[m_cur.y].fp, TT_INT, MAX_INTNUM); nw_editvalue->push("--------------", NULL, TT_SPC, 1); nw_editvalue->push("経験値", &m_data->m_enemy[m_cur.y].exp, TT_INT, MAX_INTNUM); nw_editvalue->push("所持金", &m_data->m_enemy[m_cur.y].gold, TT_INT, MAX_INTNUM); nw_editvalue->push("--------------", NULL, TT_SPC, 1); nw_editvalue->push("所持アイテム :0",&m_data->m_enemy[m_cur.y].item[0].id, TT_LST, 0); // リスト番号0を指定 nw_editvalue->push("所持アイテム数:0",&m_data->m_enemy[m_cur.y].item[0].num, TT_INT, MAX_INTNUM); nw_editvalue->push("所持アイテム率:0",&m_data->m_enemy[m_cur.y].item_r[0], TT_INT, MAX_INTNUM); nw_editvalue->push("所持アイテム :1",&m_data->m_enemy[m_cur.y].item[1].id, TT_LST, 0); nw_editvalue->push("所持アイテム数:1",&m_data->m_enemy[m_cur.y].item[1].num, TT_INT, MAX_INTNUM); nw_editvalue->push("所持アイテム率:1",&m_data->m_enemy[m_cur.y].item_r[1], TT_INT, MAX_INTNUM); nw_editvalue->push("所持アイテム :2",&m_data->m_enemy[m_cur.y].item[2].id, TT_LST, 0); nw_editvalue->push("所持アイテム数:2",&m_data->m_enemy[m_cur.y].item[2].num, TT_INT, MAX_INTNUM); nw_editvalue->push("所持アイテム率:2",&m_data->m_enemy[m_cur.y].item_r[2], TT_INT, MAX_INTNUM); nw_editvalue->push("所持アイテム :3",&m_data->m_enemy[m_cur.y].item[3].id, TT_LST, 0); nw_editvalue->push("所持アイテム数:3",&m_data->m_enemy[m_cur.y].item[3].num, TT_INT, MAX_INTNUM); nw_editvalue->push("所持アイテム率:3",&m_data->m_enemy[m_cur.y].item_r[3], TT_INT, MAX_INTNUM); nw_editvalue->push("所持アイテム :4",&m_data->m_enemy[m_cur.y].item[4].id, TT_LST, 0); nw_editvalue->push("所持アイテム数:4",&m_data->m_enemy[m_cur.y].item[4].num, TT_INT, MAX_INTNUM); nw_editvalue->push("所持アイテム率:4",&m_data->m_enemy[m_cur.y].item_r[4], TT_INT, MAX_INTNUM); nw_editvalue->push("--------------", NULL, TT_SPC, 1); nw_editvalue->push("攻撃ID:0", &m_data->m_enemy[m_cur.y].fight[0], TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃率:0", &m_data->m_enemy[m_cur.y].fight_r[0], TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃ID:1", &m_data->m_enemy[m_cur.y].fight[1], TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃率:1", &m_data->m_enemy[m_cur.y].fight_r[1], TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃ID:2", &m_data->m_enemy[m_cur.y].fight[2], TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃率:2", &m_data->m_enemy[m_cur.y].fight_r[2], TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃ID:3", &m_data->m_enemy[m_cur.y].fight[3], TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃率:3", &m_data->m_enemy[m_cur.y].fight_r[3], TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃ID:4", &m_data->m_enemy[m_cur.y].fight[4], TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃率:4", &m_data->m_enemy[m_cur.y].fight_r[4], TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃ID:5", &m_data->m_enemy[m_cur.y].fight[5], TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃率:5", &m_data->m_enemy[m_cur.y].fight_r[5], TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃ID:6", &m_data->m_enemy[m_cur.y].fight[6], TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃率:6", &m_data->m_enemy[m_cur.y].fight_r[6], TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃ID:7", &m_data->m_enemy[m_cur.y].fight[7], TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃率:7", &m_data->m_enemy[m_cur.y].fight_r[7], TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃ID:8", &m_data->m_enemy[m_cur.y].fight[8], TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃率:8", &m_data->m_enemy[m_cur.y].fight_r[8], TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃ID:9", &m_data->m_enemy[m_cur.y].fight[9], TT_INT, MAX_INTNUM); nw_editvalue->push("攻撃率:9", &m_data->m_enemy[m_cur.y].fight_r[9], TT_INT, MAX_INTNUM); nw_editvalue->push("--------------", NULL, TT_SPC, 1); nw_editvalue->push("死後フラグ", &m_data->m_enemy[m_cur.y].flg, TT_INT, MAX_INTNUM); nw_editvalue->push("死後次の敵ID", &m_data->m_enemy[m_cur.y].next_enemy, TT_INT, MAX_INTNUM); nw_editvalue->push("呼ぶ敵ID:0", &m_data->m_enemy[m_cur.y].call_enemy[0],TT_LST, 1); // リスト番号0を指定 nw_editvalue->push("呼ぶ敵ID:1", &m_data->m_enemy[m_cur.y].call_enemy[1],TT_LST, 1); nw_editvalue->push("呼ぶ敵ID:2", &m_data->m_enemy[m_cur.y].call_enemy[2],TT_LST, 1); nw_editvalue->push("呼ぶ敵ID:3", &m_data->m_enemy[m_cur.y].call_enemy[3],TT_LST, 1); nw_editvalue->push("呼ぶ敵ID:4", &m_data->m_enemy[m_cur.y].call_enemy[4],TT_LST, 1); nw_editvalue->push("--------------", NULL, TT_SPC, 1); nw_editvalue->push("プロフィール", m_data->m_enemy[m_cur.y].prof, TT_CHR, MAX_ENEMYPROF); nw_editvalue->startwin(true); delete(nw_editvalue); // 敵キャラ書き出し CWinSelect1Item* nw_select1item; nw_select1item = new CWinSelect1Item; nw_select1item->setsize(20, 5); nw_select1item->movewin(5, 1); nw_select1item->m_msg = msg[MY_MSG_SYS_SAVE_YN].msg; nw_select1item->m_split = 2; nw_select1item->m_wpos.y = 3; nw_select1item->push(msg[MY_MSG_SYS_YES].msg, 1); nw_select1item->push(msg[MY_MSG_SYS_NO].msg, 2); nw_select1item->push(msg[MY_MSG_SYS_CANSEL].msg, 0); int tmp_ret = nw_select1item->startwin(true); delete(nw_select1item); if (tmp_ret == 0) { continue; } else if (tmp_ret == 2) { if (m_cur.y == m_enemynum) { // 新規追加だったら元に戻す m_data->m_enemy.pop_back(); } else { // 敵キャラ名再度読み込み(リストを元に戻す) read_enemy(m_cur.y); } } else if (tmp_ret == 1) { write_enemy(m_cur.y); change(std::string(m_data->m_enemy[m_cur.y].name), m_cur.y, m_cur.y); if (m_cur.y == m_enemynum) { // 新規追加だった m_enemynum++; push("新規作成", m_enemynum); } } drawwin(); touchwin(m_this); wrefresh(m_this); return true; // キーループ継続 } }
bool CWinSelect1Icon::onkeypress_left() { if (m_cur.x > 0) m_cur.x--; drawwin(); return true; // キーループ継続 }
bool CWinSelect1Icon::onkeypress_up() { if (m_cur.y > 0) m_cur.y--; drawwin(); return true; // キーループ継続 }
bool CWinEnemyEditor::onkeypress_down() { if (m_cur.y < m_index.size() - 1) m_cur.y++; drawwin(); return true; // キーループ継続 }
bool CWinSelect1Icon::onkeypress_down() { if (m_cur.y < m_list.size() / m_cols - 1) m_cur.y++; drawwin(); return true; // キーループ継続 }
void CWinMapEditor::keyloop() { timeout(-1); // キー入力で待つ CWinEditValue* nw_editvalue; CWinEditValue_Flg* nw_editvalue_flg; CWinEditValue_Tile* nw_editvalue_tile; CWinEditValue_Event* nw_editvalue_event; CWinEditValue_Pos* nw_editvalue_pos; CWinEditValue_Cmask* nw_editvalue_cmask; CWinSelect1Icon* nw_select1icon; CWinSelect1Item* nw_select1item; CWinMsg* nw_msg; CWinGetPath* nw_getpath; for( ; ; ) { int ch = wgetch(m_this); switch(ch) { case MYKEY_LEFT: if (!onkeypress_left()) return; break; case MYKEY_DOWN: if (!onkeypress_down()) return; break; case MYKEY_UP: if (!onkeypress_up()) return; break; case MYKEY_RIGHT: if (!onkeypress_right()) return; break; case 'a': // タイル追加 int tmp_copyid; if (m_data->get_flg(m_posdata[xyton(m_cur.x, m_cur.y)].flg) == true) tmp_copyid = m_posdata[xyton(m_cur.x, m_cur.y)].trueid; else tmp_copyid = m_posdata[xyton(m_cur.x, m_cur.y)].falseid; m_tiledata[m_tilenum] = m_tiledata[tmp_copyid]; m_tilenum++; // 追加完了メッセージ nw_msg = new CWinMsg; nw_msg->m_msg = msg[MY_MSG_SYS_ADD_TILE].msg; nw_msg->setdefcpair(1, 0); nw_msg->startwin(true); delete(nw_msg); refreshwin(); drawwin(); break; case 'b': // フラグビットエディタ int tmp_id, tmp_old_id, tmp_value, tmp_ret; tmp_id = 1; tmp_old_id = 1; for ( ; ; ) { nw_editvalue_flg = new CWinEditValue_Flg(m_data); tmp_value = m_data->get_flg(tmp_id); nw_editvalue_flg->push("ID", &tmp_id, TT_INT, 1); nw_editvalue_flg->push("Value ", &tmp_value, TT_INT, 1); nw_editvalue_flg->setsize(12, 5); tmp_ret = nw_editvalue_flg->startwin(true); delete(nw_editvalue_flg); if (tmp_id != tmp_old_id) { // IDが変更された if (tmp_id < 0) tmp_id = FLG_BITS * 32 - 1; if (tmp_id > FLG_BITS * 32 - 1) tmp_id = 0; tmp_old_id = tmp_id; continue; } // フラグ変更 m_data->set_flg(tmp_id, tmp_value); if (tmp_ret) break; } refreshwin(); drawwin(); break; case 'c': // コピー m_posbuf = m_posdata[xyton(m_cur.x, m_cur.y)]; break; case 'v': // ペースト m_posundobuf = m_posdata[xyton(m_cur.x, m_cur.y)]; if (m_posmsk.flg) m_posdata[xyton(m_cur.x, m_cur.y)].flg = m_posbuf.flg; if (m_posmsk.falseid) m_posdata[xyton(m_cur.x, m_cur.y)].falseid = m_posbuf.falseid; if (m_posmsk.trueid) m_posdata[xyton(m_cur.x, m_cur.y)].trueid = m_posbuf.trueid; if (m_posmsk.name) m_posdata[xyton(m_cur.x, m_cur.y)].name = m_posbuf.name; if (m_posmsk.enemy) m_posdata[xyton(m_cur.x, m_cur.y)].enemy = m_posbuf.enemy; if (m_posmsk.encount) m_posdata[xyton(m_cur.x, m_cur.y)].encount = m_posbuf.encount; refreshwin(); drawwin(); break; case 'u': // アンドゥ if (m_posmsk.flg) m_posdata[xyton(m_cur.x, m_cur.y)].flg = m_posundobuf.flg; if (m_posmsk.falseid) m_posdata[xyton(m_cur.x, m_cur.y)].falseid = m_posundobuf.falseid; if (m_posmsk.trueid) m_posdata[xyton(m_cur.x, m_cur.y)].trueid = m_posundobuf.trueid; if (m_posmsk.name) m_posdata[xyton(m_cur.x, m_cur.y)].name = m_posundobuf.name; if (m_posmsk.enemy) m_posdata[xyton(m_cur.x, m_cur.y)].enemy = m_posundobuf.enemy; if (m_posmsk.encount) m_posdata[xyton(m_cur.x, m_cur.y)].encount = m_posundobuf.encount; refreshwin(); drawwin(); break; case 'e': // イベントエディタ case 'f': // イベントエディタ if (m_mapdata.height > 0 && m_mapdata.width > 0) { // マップが存在した int tmp_id = 0; for ( ; ; ) { nw_editvalue_event = new CWinEditValue_Event; if (ch == 'e') { nw_editvalue_event->push("StopEvent:ID", &tmp_id, TT_INT, 1); nw_editvalue_event->push("StopEvent:FLG ", &m_sevent[tmp_id].flg, TT_INT, 1); nw_editvalue_event->push("StopEvent:FLG BIT ", &m_sevent[tmp_id].torf, TT_INT, 1); nw_editvalue_event->push("StopEvent:HEIGHT", &m_sevent[tmp_id].h, TT_INT, 1); nw_editvalue_event->push("StopEvent:EVENT NO", &m_sevent[tmp_id].event, TT_INT, 1); } else { nw_editvalue_event->push("PointEvent:ID ", &tmp_id, TT_INT, 1); nw_editvalue_event->push("PointEvent:FLG", &m_pevent[tmp_id].flg, TT_INT, 1); nw_editvalue_event->push("PointEvent:FLG BIT", &m_pevent[tmp_id].torf, TT_INT, 1); nw_editvalue_event->push("PointEvent:HEIGHT ", &m_pevent[tmp_id].h, TT_INT, 1); nw_editvalue_event->push("PointEvent:EVENT NO ",&m_pevent[tmp_id].event, TT_INT, 1); } int tmp_ret = nw_editvalue_event->startwin(true); delete(nw_editvalue_event); if (tmp_ret == 1) { // IDが変更された if (tmp_id < 0) tmp_id = MAX_MAPEVENT - 1; if (tmp_id > MAX_MAPEVENT - 1) tmp_id = 0; refreshwin(); drawwin(); } else { refreshwin(); drawwin(); break; } } } else { // マップが読み込まれていない警告 warn_no_map(); } break; case 'h': nw_msg = new CWinMsg; nw_msg->m_msg = "A:タイル追加nB:フラグビットエディタnC:コピーnV:ペーストnU:アンドゥnQ:コピーマスクエディタnE:イベントエディタnL:ロードnM:マップ情報エディタnN:地名エディタnP:パレット表示nT:タイルエディタnS:スペシャルポジションエディタnX:ポジションエディタnZ:セーブ終了"; nw_msg->setsize(20,16); nw_msg->startwin(true); delete(nw_msg); refreshwin(); drawwin(); break; case 'l': // マップ番号を入力する nw_getpath = new CWinGetPath; nw_getpath->settitle(std::string(msg[MY_MSG_SYS_INP_MAPNO].msg)); m_path = nw_getpath->startdialog(true); m_path = "data/qwert123/map/" + m_path; delete(nw_getpath); // マップサイズ、NextMapを取得 m_mapdata = m_file->get_map_size(m_path); if (m_mapdata.height > 0 && m_mapdata.width > 0) { // 以前のポジションテーブルがあれば、まず破棄する if (m_posdata != NULL) delete[] m_posdata; // ポジションテーブル再生成 m_posdata = new PosData[m_mapdata.height * m_mapdata.width]; // マップの中身を読み込み m_tilenum = m_file->read_map(m_path, &m_mapdata, m_posdata, m_spposdata, m_tiledata, m_pevent, m_sevent, m_fieldname); } m_cur.x = 1; m_cur.y = 1; refreshwin(); drawwin(); break; case 'm': // マップ情報エディタ nw_editvalue = new CWinEditValue; nw_editvalue->push("NEXTMAP 上", &m_mapdata.nextmap_u, TT_INT, 1); nw_editvalue->push("NEXTMAP 下", &m_mapdata.nextmap_d, TT_INT, 1); nw_editvalue->push("NEXTMAP 左", &m_mapdata.nextmap_l, TT_INT, 1); nw_editvalue->push("NEXTMAP 右", &m_mapdata.nextmap_r, TT_INT, 1); nw_editvalue->startwin(true); delete(nw_editvalue); refreshwin(); drawwin(); break; case 'n': // 地名エディタ nw_editvalue = new CWinEditValue; char tmp_str[4]; for (int i = 0; i < MAX_FNAME; i++) { sprintf(tmp_str, "%02d", i); nw_editvalue->push(std::string(tmp_str), &m_fieldname[i], TT_STR, 1); } nw_editvalue->startwin(true); delete(nw_editvalue); refreshwin(); drawwin(); break; case 'p': // パレット表示 if (m_mapdata.height > 0 && m_mapdata.width > 0) { // マップが存在した nw_select1icon = new CWinSelect1Icon; nw_select1icon->setsize(10, 10); for (int i = 0; i < COLOR_NUM * COLOR_NUM; i++) { nw_select1icon->m_cols = 8; nw_select1icon->push("● ", i, i); } nw_select1icon->startwin(true); delete(nw_select1icon); refreshwin(); drawwin(); } else { // マップが読み込まれていない警告 warn_no_map(); } break; case 'q': // コピーマスクエディタ for ( ; ; ) { nw_editvalue_cmask = new CWinEditValue_Cmask(); nw_editvalue_cmask->push("FLG ", &m_posmsk.flg, TT_INT, 1); nw_editvalue_cmask->push("FALSE ID", &m_posmsk.falseid, TT_INT, 1); nw_editvalue_cmask->push("TRUE ID", &m_posmsk.trueid, TT_INT, 1); nw_editvalue_cmask->push("NAME", &m_posmsk.name, TT_STR, 1); nw_editvalue_cmask->push("ENEMY ", &m_posmsk.enemy, TT_INT, 1); nw_editvalue_cmask->push("ENCOUNT ", &m_posmsk.encount, TT_INT, 1); nw_editvalue_cmask->setsize(20, 8); tmp_ret = nw_editvalue_cmask->startwin(true); delete(nw_editvalue_cmask); if (!tmp_ret) break; } refreshwin(); drawwin(); break; case 't': // タイルエディタ if (m_mapdata.height > 0 && m_mapdata.width > 0) { // マップが存在した int tmp_id = gettile(m_cur.x, m_cur.y); for ( ; ; ) { nw_editvalue_tile = new CWinEditValue_Tile; nw_editvalue_tile->push("FALSE ID", &tmp_id, TT_INT, 1); nw_editvalue_tile->push("FALSE CHAR", &m_tiledata[tmp_id].tile, TT_STR, 1, getcpair(m_tiledata[tmp_id].ch, m_tiledata[tmp_id].bg)); nw_editvalue_tile->push("FALSE CH", &m_tiledata[tmp_id].ch, TT_INT, 1, getcpair(m_tiledata[tmp_id].ch, 0)); nw_editvalue_tile->push("FALSE BG", &m_tiledata[tmp_id].bg, TT_INT, 1, getcpair(m_tiledata[tmp_id].bg, 0)); nw_editvalue_tile->push("FALSE ATTR", &m_tiledata[tmp_id].attr, TT_INT, 1); nw_editvalue_tile->push("FALSE HEIGHT", &m_tiledata[tmp_id].height, TT_INT, 1); nw_editvalue_tile->push("FALSE MOVE", &m_tiledata[tmp_id].move, TT_INT, 1); int tmp_ret_id = nw_editvalue_tile->startwin(true); delete(nw_editvalue_tile); if (tmp_ret_id == 1) { // タイルが変更された if (tmp_id < 0) tmp_id = m_tilenum - 1; if (tmp_id > m_tilenum - 1) tmp_id = 0; refreshpos(m_cur.x, m_cur.y); drawwin(); } else { refreshwin(); drawwin(); break; } } } else { // マップが読み込まれていない警告 warn_no_map(); } break; case 's': // スペシャルポジションデータエディタ case 'x': // ポジションデータエディタ if (m_mapdata.height > 0 && m_mapdata.width > 0) { // マップが存在した PosData* tmp_posdata; int posi = -1; for ( ; ; ) { if (ch == 'x') { posi = xyton(m_cur.x, m_cur.y); tmp_posdata = &m_posdata[posi]; } else { if (posi == -1) { nw_getpath = new CWinGetPath(); nw_getpath->settitle(std::string(msg[MY_MSG_SYS_INP_SPOS].msg)); std::string spos = nw_getpath->startdialog(true); delete(nw_getpath); posi = atoi(spos.c_str()); if (posi < 0 || posi >= MAX_SPPOS) { posi = -1; continue; } tmp_posdata = &m_spposdata[posi]; } } nw_editvalue_pos = new CWinEditValue_Pos; // 参照フラグ nw_editvalue_pos->push("FLAG", &tmp_posdata->flg, TT_INT, 1); nw_editvalue_pos->push("FALSE ID", &tmp_posdata->falseid, TT_INT, 1); nw_editvalue_pos->push("TRUE ID", &tmp_posdata->trueid, TT_INT, 1); nw_editvalue_pos->push("F NAME", &tmp_posdata->name, TT_INT, 1); nw_editvalue_pos->push("ENEMY ", &tmp_posdata->enemy, TT_INT, 1); nw_editvalue_pos->push("ENCOUNT ", &tmp_posdata->encount, TT_INT, 1); nw_editvalue_pos->push("--------------", NULL, TT_SPC, 1); if (tmp_posdata->falseid >= 100000) nw_editvalue_pos->push("FALSE CHAR", &tmp_posdata->falseid, TT_INT, 1); else nw_editvalue_pos->push("FALSE CHAR", &m_tiledata[tmp_posdata->falseid].tile, TT_STR, 1, getcpair(m_tiledata[tmp_posdata->falseid].ch, m_tiledata[tmp_posdata->falseid].bg)); if (tmp_posdata->trueid >= 100000) nw_editvalue_pos->push("TRUE CHAR", &tmp_posdata->trueid, TT_INT, 1); else nw_editvalue_pos->push("TRUE CHAR", &m_tiledata[tmp_posdata->trueid ].tile, TT_STR, 1, getcpair(m_tiledata[tmp_posdata->trueid ].ch, m_tiledata[tmp_posdata->trueid ].bg)); nw_editvalue_pos->push("F NAMESTR ", &m_fieldname[(int)tmp_posdata->name], TT_STR, 1); int tmp_ret = nw_editvalue_pos->startwin(true); delete(nw_editvalue_pos); if (tmp_ret == 1) { // Falseタイルが変更された if (tmp_posdata->falseid == 99999) tmp_posdata->falseid = 100000 + MAX_SPPOS - 1; else if (tmp_posdata->falseid > 100000 + MAX_SPPOS - 1) tmp_posdata->falseid = 100000; else if (tmp_posdata->falseid >= 100000) ; else if (tmp_posdata->falseid < 0) tmp_posdata->falseid = m_tilenum - 1; else if (tmp_posdata->falseid > m_tilenum - 1) tmp_posdata->falseid = 0; refreshpos(m_cur.x, m_cur.y); drawwin(); } else if (tmp_ret == 2) { // Trueタイルが変更された if (tmp_posdata->trueid == 99999) tmp_posdata->trueid = 100000 + MAX_SPPOS - 1; else if (tmp_posdata->trueid > 100000 + MAX_SPPOS - 1) tmp_posdata->trueid = 100000; else if (tmp_posdata->trueid >= 100000) ; else if (tmp_posdata->trueid < 0) tmp_posdata->trueid = m_tilenum - 1; else if (tmp_posdata->trueid > m_tilenum - 1) tmp_posdata->trueid = 0; refreshpos(m_cur.x, m_cur.y); drawwin(); } else { refreshwin(); drawwin(); break; } } } else { // マップが読み込まれていない警告 warn_no_map(); } break; case 'z': // マップの中身を書き出し if (m_mapdata.height > 0 && m_mapdata.width > 0) { nw_select1item = new CWinSelect1Item; nw_select1item->setsize(20, 5); nw_select1item->m_msg = msg[MY_MSG_SYS_SAVE_YN].msg; nw_select1item->m_split = 2; nw_select1item->m_wpos.y = 3; nw_select1item->push(msg[MY_MSG_SYS_YES].msg, 1); nw_select1item->push(msg[MY_MSG_SYS_NO].msg, 2); int tmp_ret = nw_select1item->startwin(true); delete(nw_select1item); if (tmp_ret == 1) { m_file->write_map( m_path, &m_mapdata, m_posdata, m_spposdata, m_tiledata, m_pevent, m_sevent, m_fieldname, m_tilenum ); return; } else if (tmp_ret == 2) { return; } } refreshwin(); drawwin(); break; default: continue; break; } } }
bool CWinSelect1Icon::onkeypress_right() { if (m_cur.x < m_cols - 1) m_cur.x++; drawwin(); return true; // キーループ継続 }
bool CWinEnemyEditor::onkeypress_left() { if (m_dpos.x > 0) m_dpos.x--; drawwin(); return true; // キーループ継続 }