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;	// キーループ継続
}
Beispiel #3
0
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();
}
Beispiel #5
0
// 表示開始
//
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);
}
Beispiel #6
0
// 表示開始
//
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);
}
Beispiel #7
0
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();
}
Beispiel #8
0
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;	// キーループ継続
}
Beispiel #9
0
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;	// キーループ継続
}
Beispiel #10
0
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;	// キーループ継続
}
Beispiel #11
0
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;	// キーループ継続
}
Beispiel #12
0
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;	// キーループ継続
}
Beispiel #15
0
bool CWinEnemyEditor::onkeypress_up()
{
    if (m_cur.y > 0)	m_cur.y--;
    drawwin();
    return true;	// キーループ継続
}
Beispiel #16
0
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;	// キーループ継続
    }
}
Beispiel #17
0
bool CWinSelect1Icon::onkeypress_left()
{
	if (m_cur.x > 0)	m_cur.x--;
	drawwin();
	return true;	// キーループ継続
}
Beispiel #18
0
bool CWinSelect1Icon::onkeypress_up()
{
	if (m_cur.y > 0)	m_cur.y--;
	drawwin();
	return true;	// キーループ継続
}
Beispiel #19
0
bool CWinEnemyEditor::onkeypress_down()
{
    if (m_cur.y < m_index.size() - 1)	m_cur.y++;
    drawwin();
    return true;	// キーループ継続
}
Beispiel #20
0
bool CWinSelect1Icon::onkeypress_down()
{
	if (m_cur.y < m_list.size() / m_cols - 1)      m_cur.y++;
	drawwin();
	return true;	// キーループ継続
}
Beispiel #21
0
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;
		}
	}
}
Beispiel #22
0
bool CWinSelect1Icon::onkeypress_right()
{
	if (m_cur.x < m_cols - 1)      m_cur.x++;
	drawwin();
	return true;	// キーループ継続
}
Beispiel #23
0
bool CWinEnemyEditor::onkeypress_left()
{
    if (m_dpos.x > 0)	m_dpos.x--;
    drawwin();
    return true;	// キーループ継続
}