For the console log, we could have simple pop-up window under some hotkey. You can’t see it all the time, but could see longer part of long at once.
@Stil: I admit it doesn’t happen more than once a year when I feel something weird just happened and I go back to the log to double check. However the log is slightly more important during application development (where we are now) as a useful tool for testers to monitor what’s happening (e.g…: double check that the damage formulas are correct). Plus, although I may be biased on this, while I know Heroes 3 may not outlive Chess, I still think it’s one of the best strategy games ever created which - as long as (3D graphics aside) Ubi or any other dev will not be able to come with something at least close as good - will still be discovered by young players in the years, maybe even generations to come. And for some of them it’ll certainly remain useful in the first weeks and months. See my suggestion below for it, in case you think you can code it.
For the rest, I wouldn’t worry much about most of the other windows. I can’t recall pop-ups which would lose more than their borders at worst in 480p hight, except maybe the Hero screen, which is the only notable problem that I see. At least I can’t think of a decent solution, other than perhaps moving the army from the horizontal panel below, to a vertical panel on the left. But that would probably still require a resize or rescale of creature icons. Until someone feels inspired to undergo an effort in that direction, I suggest using Kingdom Overview screen for troop rearrangement. For the rest - if I’m not missing something - we’re left with:
- Town screen: aesthetically perhaps not the best solution, but I guess we could simply cut about 80p from the top and 40p from the bottom, which should still give access to all functional buildings in all towns.
- Kingdom Overview: this should be even easier I believe. A simple edit of the default OvCast.pcx and the resolution file to have size 3 i/o 4 should do it.
[size=75]One more thing. This is perhaps just psychological or a matter of intuitive perception (so feel free to ignore if you feel otherwise > it’s your “baby” afterwards), but I feel the order of the side buttons should be the other way around:
- Autocombat on top, with Surrender at the bottom (psychological, but also intuitive as Surrender is next to Combat Options on the classic interface)
- Spell Book on top, with Defense at the bottom (for symmetry in transposing the buttons, but somehow also intuitively, especially when it comes to the Defend button)[/size]
@Warmonger: “L” would probably be the best hotkey for the log and it’s not taken. I actually thought once of a feature suggestion, where “L” would toggle an enlarged battle log in all resolutions, as it’s really hard to follow when you have only 2 rows at a time (in x600 would unfold up over the lowest hex row, in higher res would unfold down). But anyway, going back to x480, we could use the Quest Log button graphics from the Hero Screen, and place it in the battle screen symmetric with the Combat Options button (as in attached screenshot). Together with the L hotkey, it could toggle a battle log next to it in the lower right corner of the screen. It’s not the most active corner anyway, as often we like to let the enemy move closer, so after the first round it may often be a place where player could open the log to follow what’s happening. Of course, best is to have a certain degree of transparency to it, just in case the enemy summons a creature there for example, but I can imagine that’s more challenging.
Ok
Developers, is there a easy way to crop SDL_Surface? When I tried (I dont know how to do it), the best thing i’ve had was the “black” texture
battles-and-advMap.7z (114 KB)
Haven’t tested but this should work.
SDL_Surface *cropSurface(SDL_Surface *source, SDL_Rect *sourceRect)
{
SDL_Surface *dest = SDL_CreateRGBSurface(source->flags, sourceRect->w, sourceRect->h, source->format->BitsPerPixel,
source->format->Rmask, source->format->Gmask, source->format->Bmask, source->format->Amask);
if (source->format->BitsPerPixel == 8)
SDL_SetPalette(dest, SDL_LOGPAL, source->format->palette->colors, 0, source->format->palette->ncolors);
SDL_BlitSurface(source, sourceRect, dest, NULL);
SDL_FreeSurface(source);
return dest;
}
The positions of the attacking and defending heroes can be set at line 1430 approximately in the ctor of the class CBattleInterface in the file CBattleInterface.cpp.
//loading hero animations
if(hero1) // attacking hero
{
int type = hero1->type->heroType;
if ( type % 2 ) type--;
if ( hero1->sex ) type++;
attackingHero = new CBattleHero(graphics->battleHeroes[type], 0, 0, false, hero1->tempOwner, hero1->tempOwner == curInt->playerID ? hero1 : NULL, this);
attackingHero->pos = genRect(attackingHero->dh->ourImages[0].bitmap->h, attackingHero->dh->ourImages[0].bitmap->w, pos.x - 43, pos.y - 19);
}
else
{
attackingHero = NULL;
}
if(hero2) // defending hero
{
int type = hero2->type->heroType;
if ( type % 2 ) type--;
if ( hero2->sex ) type++;
defendingHero = new CBattleHero(graphics->battleHeroes[type ], 0, 0, true, hero2->tempOwner, hero2->tempOwner == curInt->playerID ? hero2 : NULL, this);
defendingHero->pos = genRect(defendingHero->dh->ourImages[0].bitmap->h, defendingHero->dh->ourImages[0].bitmap->w, pos.x + 693, pos.y - 19);
}
else
{
defendingHero = NULL;
}
One more question, please.
When I crop original surface instead of just replacing it I’m getting something strange.
Hexes, mouse selections, Morale&Luck animations works fine, but units (and their animation) are located for 62px upper than they it should be.
Where could I find their arrangement?
62px comes from here
if ((conf.cc.resx == 800) && (conf.cc.resy == 480)) {
SDL_Surface *tmp = BitmapHandler::loadBitmap(backref rand() % backref.size()], false );
SDL_Rect temp_rect = genRect(480, 800, 0, 62);
background = cropSurface(tmp, &temp_rect);
} else {
background = BitmapHandler::loadBitmap(backref rand() % backref.size()], false );
}
Try changing this line:
In CBattleHex::getXYUnitAnim()
ret.y = -139 + 42 * (hexNum/BFIELD_WIDTH); //counting y
In case anyone still monitors this thread…
I DID IT!
TLDR: remove resolution check when running windowed or not-true fullscreen. Done.