void ActionListPressRight(int & index)
 {
   Troop troop(Monster(index), 1);
   Dialog::ArmyInfo(troop, 0);
 };
void TestMonsterSprite(void)
{
    // cursor
    Cursor & cursor = Cursor::Get();
    cursor.Hide();
    cursor.SetThemes(Cursor::POINTER);

    //Monster monster(Monster::PEASANT);
    Army::Troop troop(Monster::PEASANT, 1);
    troop.BattleInit();
    const Battle2::Stats & b = *troop.GetBattleStats();
    Background back;
    Rect pos;

    Display & display = Display::Get();
    LocalEvent & le = LocalEvent::Get();

    //std::string str;

    StatusBar speed_bar;
    StatusBar count_bar;
    StatusBar start_bar;
    StatusBar frame_bar;
    StatusBar info_bar;

    start_bar.SetCenter(100, display.h() - 15);
    count_bar.SetCenter(200, display.h() - 15);
    speed_bar.SetCenter(300, display.h() - 15);
    frame_bar.SetCenter(400, display.h() - 15);
    info_bar.SetCenter(550, display.h() - 15);

    u32 ticket = 0;

    u8 start = 0;
    u8 count = AGG::GetICNCount(b.ICNFile());
    u8 frame = 0;
    u8 speed = 100;

    frame_bar.ShowMessage("frame: " + GetString(frame));
    speed_bar.ShowMessage("speed: " + GetString(speed));
    start_bar.ShowMessage("start: " + GetString(start));
    count_bar.ShowMessage("count: " + GetString(count));

    cursor.Show();
    display.Flip();

    // mainmenu loop
    while(le.HandleEvents())
    {
	if(Game::HotKeyPress(Game::EVENT_DEFAULT_EXIT)) break;

	if(le.MouseClickLeft(pos))
	{
            u32 mons = troop().GetID();
            if(Dialog::SelectCount("Monster", Monster::PEASANT, Monster::WATER_ELEMENT, mons))
	    {
        	cursor.Hide();
		troop.SetMonster(Monster(mons));
		start = 0;
		count = AGG::GetICNCount(b.ICNFile());
		frame = 0;
        	cursor.Show();
        	display.Flip();
	    }
	}

	if(le.MouseClickLeft(start_bar.GetRect()))
	{
	    u32 start2 = start;
	    if(Dialog::SelectCount("Start", 0, AGG::GetICNCount(b.ICNFile()) - 1, start2))
	    {
        	cursor.Hide();
		start = start2;
		if(start + count > AGG::GetICNCount(b.ICNFile())) count = AGG::GetICNCount(b.ICNFile()) - start;
		start_bar.ShowMessage("start: " + GetString(start));
        	cursor.Show();
        	display.Flip();
    	    }
	}

	if(le.MouseClickLeft(count_bar.GetRect()))
	{
	    u32 count2 = count;
	    if(Dialog::SelectCount("Count", 1, AGG::GetICNCount(b.ICNFile()), count2))
	    {
        	cursor.Hide();
		count = count2;
		frame = start;
		count_bar.ShowMessage("count: " + GetString(count));
        	cursor.Show();
        	display.Flip();
	    }
	}

	if(le.MouseClickLeft(speed_bar.GetRect()))
	{
	    u32 speed2 = speed;
	    if(Dialog::SelectCount("Speed", 1, 50, speed2))
	    {
        	cursor.Hide();
		speed = speed2;
		frame = start;
		speed_bar.ShowMessage("speed: " + GetString(speed));
        	cursor.Show();
        	display.Flip();
	    }
	}

        if(0 == (ticket % speed))
        {
            cursor.Hide();
            const Sprite & sprite = AGG::GetICN(b.ICNFile(), frame);
	    pos.x = 320 + sprite.x();
	    pos.y = 240 + sprite.y();
	    pos.w = sprite.w();
	    pos.h = sprite.h();
	    back.Restore();
	    back.Save(pos);
            sprite.Blit(pos);

	    frame_bar.ShowMessage("frame: " + GetString(frame));
	    info_bar.ShowMessage("ox: " + GetString(sprite.x()) + ", oy: " + GetString(sprite.y()));

            cursor.Show();
            display.Flip();

	    ++frame;
	    if(frame >= start + count) frame = start;
        }

        ++ticket;
    }
}