September 18th, 2020, 20:08
Posts: 523
Threads: 1
Joined: Dec 2019
(September 18th, 2020, 12:05)Seravy Wrote: Shiny? ... What does everyone else think? Is the brighter or paler grassland better? ... I intentionally skipped the "zooming" and "screen fading" animations ...
Pale colors may be less pretty, but they're better for the eyes. Faster gameplay is better than redoing the exact same animations.
September 18th, 2020, 21:02
Posts: 175
Threads: 2
Joined: May 2020
Invisibility has no help text.
September 18th, 2020, 21:04
(This post was last modified: September 18th, 2020, 21:14 by Seravy.)
Posts: 10,463
Threads: 394
Joined: Aug 2015
Quote:- Doom bolt, at least the version cast by warlocks, is only doing 8-9 damage sometimes. This seems to usually happen with 4+ figure units, where it sometimes fails to do partial damage to individuals in multi-figure units. You can test it over the end turn battle with neutrals: https://ufile.io/qftuws60
In this save, wizards 4 (Jafar) is banished, but he has zero cities. How did that happen?
Oh, the defeat animation doesn't play if the last city had no fortress in it.
September 18th, 2020, 21:17
Posts: 377
Threads: 10
Joined: Apr 2017
Shiny is one way to put it... I think he just means brighter? One issue with the original game was that its colors were muddy and muted. I don't think that was actually the intention of the creators. Long ago, I fiddled with the contrast, brightness and saturation of the original out of curiosity and realized that there are details and colors in the tiles that you simply can't see in-game. Look at this image; I don't think it's better, exactly, but increasing the contrast made everything feel sharper and brings out details in the swamps that simply aren't visible in the base game.
So I don't think "shiny" is necessarily an issue. In my opinion, the Civizard team did a pretty good job of updating and upgrading Master of Magic's look, which included making it a bit brighter:
IMO, what's missing in the new graphics is a secret of the original game's graphics: the overland world of Master of Magoc does not attempt to make anything look like what it is. Forests don't look anything like forests or trees. Mountains don't look anything like mountains. Their main correspondence with the real-world object is in color; other than that, they rely on vague shapes and the player's imagination to fill the gaps. And it works wonderfully well.
This is what games in the next generation immediately screwed up. As soon as they had the capability for better graphics, they insisted on using it. This is Age of Wonders 1, and it's a mess. Everything is "realistic" and as a result, I can't quickly read the map. Where are my units? Where are my cities? Where do the tiles begin and end, what are my movement costs? I have to study it for a few seconds to know what's going on.
That's a bit of a digression but it points out what's wrong with the new graphics. In CoM2, the mountains now look like mountains. It doesn't screw up readability like Age of Wonders, but I pointed out that game because I think the basic idea is the same: when most people try to draw a mountain, they draw something mountain-shaped. But that's not what they did in Master of Magic, so CoM2 doesn't feel like it quite matches the original.
I didn't spot the explanation for changing the graphics in the old threads actually... why did the tiles have to change?
September 18th, 2020, 22:49
Posts: 10,463
Threads: 394
Joined: Aug 2015
Mountains and hills in particular were one thing I really disliked in the original game... exactly because it didn't really look like one. Or to be specific, it did look like one and the art wasn't even bad but the perspective was wrong. Mountains and hills were drawn as if you were viewing from directly above, but everything else - lairs, cities, etc, used "normal" perspective so the mountains felt absurdly out-of-place.
Why the change?
-The original tiles don't actually have tile graphics for every possible combination. The original game solves this by simply changing the generated terrain to not contain "impossible" configurations but even that had corner cases where such a solution didn't exist. This was the source of the "river cut in half" bug where the river simply didn't flow into an ocean and just ended in the land - basically the tile with the required shore shape and two (or more) rivers flowing in didn't exist. While that is a problem on its own, it also meant a lot of additional investigation on which are the missing tiles and how to avoid using them.
-Tilesets are too repetitive. There were only about 2-3 variations for each tile type. I guess this is up to personal preference but I'd say more variety is better. I feel more incentive to conquer a land that looks different and unique even if it has nothing to do with gameplay, and it also helps immersion. You might even sort some unique terrain shapes that make you come up with some backstory for that area. Basically, terrain that is unique feels more "alive" than tiles like a chessboard.
-While most of the art was great, some were...not so great. In particular, Tundras looked absolutely horrible in my opinion.
-The tweaker can't extract the tile images though most definitely in can be done vie other means, adding, sorting out and organizing the 500-1000 tiles would be a major pain and very time consuming. Procedurally generating all the tiles wasn't easy either but it was much more interesting to do and as this was one of the very first tasks so keeping my motivation high was a relevant factor - Basically this was done before the final decision on "Can I do this or give up".
So overall, this both got rid of a design flaw (missing tiles) and was much more fun to do and also less time consuming while at the same time also giving something new to the game. (This is a sequel afterall, not a remake.)
This is for the overland tiles, for combat it's basically because the original game's combat tiles were...not really suitable for gameplay. Forests had no trees, swamps had no swamps, and so on. Basically, the problem wasn't how the tiles looked like, but what they did for gameplay. It was fairly obvious combat terrain was an incomplete feature in the original game so trying to replicate it accurately seemed like a bad option to choose. (remember, combat rivers weren't even used in the original game)
The reason that not having to sort out hundreds of images and understand a complex algorithm to use those tiles allowed faster progress of course applied here as well.
September 19th, 2020, 02:14
(This post was last modified: September 19th, 2020, 02:15 by jhsidi.)
Posts: 377
Threads: 10
Joined: Apr 2017
(September 18th, 2020, 22:49)Seravy Wrote: So overall, this both got rid of a design flaw (missing tiles) and was much more fun to do and also less time consuming while at the same time also giving something new to the game. (This is a sequel afterall, not a remake.)
This is for the overland tiles, for combat it's basically because the original game's combat tiles were...not really suitable for gameplay. Forests had no trees, swamps had no swamps, and so on. Basically, the problem wasn't how the tiles looked like, but what they did for gameplay. It was fairly obvious combat terrain was an incomplete feature in the original game so trying to replicate it accurately seemed like a bad option to choose. (remember, combat rivers weren't even used in the original game)
The reason that not having to sort out hundreds of images and understand a complex algorithm to use those tiles allowed faster progress of course applied here as well.
Ah, that makes sense. Also if you hated the original mountains I guess that makes it pretty obvious why they look different now.
Honestly though I find the new mountains / hills to be pretty bad, both the regular and Chaos node. They're basically just triangles. If you're open to looking at an alternative I can try to figure something out. I've got a friend who may be able to do some.
The other visual aspect that gets under my skin is the forests in battle. I spend more time waving my cursor around randomly looking for camouflaged wild boars or completely invisible night stalkers than actually playing. But I think I saw you saying elsewhere that you don't want to change it for any reason.
September 19th, 2020, 02:48
Posts: 10,463
Threads: 394
Joined: Aug 2015
Quote:Honestly though I find the new mountains / hills to be pretty bad, both the regular and Chaos node. They're basically just triangles. If you're open to looking at an alternative I can try to figure something out. I've got a friend who may be able to do some.
Well, it's procedurally generated, so then you need to suggest changes to the function that generates them. Note the volcanoes, including the raise volcano spell animation, and chaos nodes, are all handled in the same function.
Which are these :
Code: const
HillColor1 : array[1..nofplanes] of integer = ( $043214, $152234);
HillColor2 : array[1..nofplanes] of integer = ( $044524, $2C3449);
HillColor3 : array[1..nofplanes] of integer = ( $044020, $2A3045);
HillColor4 : array[1..nofplanes] of integer = ( $043618, $272A40);
Procedure Renderhill(x,y,plane,prerenderseed : integer);
var i,j: integer;
wi,he : integer;
const hillshape : array[2..8,1..8] of byte =
((0,10,11,11,11,11,11,11),
(0,1,10,11,11,11,11,11),
(0,0,1,10,11,11,11,11),
(0,0,1,2,10,11,11,11),
(0,0,1,2,3,10,11,11),
(0,0,1,1,2,3,10,11),
(0,0,1,1,2,3,4,10));
begin
begin
saveseed;
randseeD:=prerenderseed;
he:=random(5)+4;
wi:=random(3)+2+he;
for i:=1 to he do case hillshape[he,i] of
0..9 : begin
DrawpixelCheck(x+hillshape[he,i]-1- wi div 2,y-i+1,HillColor4[plane]);
DrawpixelCheck(x+hillshape[he,i]- wi div 2,y-i+1,HillColor2[plane]);
{for j:=1+hillshape[he,i] to wi-hillshape[he,i]-1 do
if (x+j- wi div 2>=topx) and (x+j- wi div 2<=botx) and (y-i+1>=topy) and (y-i+1<=boty) then Renderlandpixel(x+j- wi div 2,y-i+1,plane);}
for j:=1+hillshape[he,i] to wi-hillshape[he,i]-1 do DrawPixelCheck(x+j- wi div 2,y-i+1,Gradual(LandPixelColor[random(2)+1,Plane],1,2,2,3*(i-j)));
DrawpixelCheck(x+wi-hillshape[he,i]- wi div 2,y-i+1,HillColor3[plane]);
DrawPixelCheck(x+wi-hillshape[he,i]+1- wi div 2,y-i+1,HillColor1[plane]);
end;
10 : begin
for j:=1+hillshape[he,i-1] to wi-hillshape[he,i-1]-1 do begin
DrawPixelCheck(x+j- wi div 2,y-i+1,HillColor2[plane]); // Top of hill
DrawPixelCheck(x+j- wi div 2,y-i,HillColor1[plane]); // Top of hill
end;
DrawPixelCheck(x+hillshape[he,i-1]- wi div 2,y-i+1,HillColor1[plane]);
DrawPixelCheck(x+wi-hillshape[he,i-1]- wi div 2,y-i+1,HillColor1[plane]);
end;
11 : ; // Above the hill, do nothing
end;
end;
loadseed;
end;
const MtColor : array[1..4] of array[1..nofplanes] of integer =
(( $3C4149, $3C4149),
( $666666, $666666),
( $555555, $555555),
( $444444, $444444));
MtSideColor : array[1..2] of array[1..nofplanes] of integer =
(( $888888, $888888),
( $999999, $999999));
LavaColor : array[1..5] of array[1..nofplanes] of integer =
(( $0066E0, $0066E0),
( $0044C0, $0044C0),
( $0022B2, $0022B2),
( $0000A0, $0000A0),
( $000070, $000070));
Procedure Rendermountain(x,y,plane,prerenderseed : integer; volcano, chaosnode,raisedvolcano : boolean);
var i,j,k,l: integer;
wi,he : integer;
const mountainshape : array[2..14,1..14] of byte =
((0,10,11,11,11,11,11,11,11,11,11,11,11,11),
(0,1,10,11,11,11,11,11,11,11,11,11,11,11),
(0,0,1,10,11,11,11,11,11,11,11,11,11,11),
(0,0,1,1,10,11,11,11,11,11,11,11,11,11),
(0,0,1,1,2,10,11,11,11,11,11,11,11,11),
(0,0,1,1,2,2,10,11,11,11,11,11,11,11),
(0,0,1,1,2,2,3,10,11,11,11,11,11,11),
(0,0,1,1,2,2,3,3,10,11,11,11,11,11),
(0,0,1,1,2,2,3,3,4,10,11,11,11,11),
(0,0,1,1,2,2,3,3,4,4,10,11,11,11),
(0,0,1,1,2,2,3,3,4,4,5,10,11,11),
(0,0,1,1,2,2,3,3,4,4,5,5,10,11),
(0,0,1,1,2,2,3,3,4,4,5,5,6,10)
);
Procedure LavaFlow(x,y,r : integer; chaosnode : boolean);
begin
if (r<7) or (chaosnode and (r<12+random(3))) then begin DrawPixelCheck(x,y,LavaColor[((Gameticks div 10)+15-r) mod 5+1,plane]);
case random(5)+1 of
1 : if (r mod 2=1) then Lavaflow(x-1,y+1,r+1,chaosnode) else LavaFlow(x,y+1,r+1,chaosnode);
2 : if (r mod 2=1) then Lavaflow(x+1,y+1,r+1,chaosnode) else LavaFlow(x,y+1,r+1,chaosnode);
3 : LavaFlow(x,y+1,r+1,chaosnode);
4 : if (r<2) or (chaosnode and (random(2)=1)) then LavaFlow(x,y+1,r+1,chaosnode);
5 : if (r>=2) then begin
Lavaflow(x-1,y+1,r+1,chaosnode);
Lavaflow(x+1,y+1,r+1,chaosnode);
end else LavaFlow(x,y+1,r+1,chaosnode);
end;
end;
end;
begin
saveseed;
randseeD:=prerenderseed;
he:=random(8)+7;
if raisedvolcano then he:=2+trunc((he-2)*AnimationFrame/60.0);
if chaosnode then he:=14;
wi:=random(2)+he;
for i:=1 to he do case mountainshape[he,i] of
0..9 : begin
DrawPixelCheck(x+mountainshape[he,i]-1- wi div 2,y-i+1,MtColor[4,plane]);
DrawPixelCheck(x+mountainshape[he,i]- wi div 2,y-i+1,MtColor[2,plane]);
{for j:=1+mountainshape[he,i] to wi-mountainshape[he,i]-1 do
if (x+j- wi div 2>=topx) and (x+j- wi div 2<=botx) and (y-i+1>=topy) and (y-i+1<=boty) then Renderlandpixel(x+j- wi div 2,y-i+1,plane);}
l:=7; if (he<=9) then l:=6; if (he<=7) then l:=5;
for j:=1+mountainshape[he,i] to wi-mountainshape[he,i]-1 do begin
k:=0;
if random(2)+l<=i then k:=5;
if volcano then k:=-4;
DrawPixelCheck(x+j- wi div 2,y-i+1,Gradual(MtSidecolor[1+random(2),Plane],1,1,1,12*(i+k)-9*j));
end;
DrawPixelCheck(x+wi-mountainshape[he,i]- wi div 2,y-i+1,Gradual(MtColor[3,plane],1,1,1,12*(i)-60));
DrawPixelCheck(x+wi-mountainshape[he,i]+1- wi div 2,y-i+1,MtColor[1,plane]);
// Make the thing glow!
if Chaosnode then begin
DrawPixelCheck(x+mountainshape[he,i]-1- wi div 2,y-i+1,Lavacolor[(((Gameticks div 10)+i) mod 4)+1,plane]);
DrawPixelCheck(x+wi-mountainshape[he,i]+1- wi div 2,y-i+1,Lavacolor[(((Gameticks div 10)+i) mod 4)+1,plane]);
DrawPixelCheck(x+mountainshape[he,i]- wi div 2,y-i+1,Lavacolor[(((Gameticks div 10)+i) mod 4)+1,plane]);
DrawPixelCheck(x+wi-mountainshape[he,i]- wi div 2,y-i+1,Lavacolor[(((Gameticks div 10)+i) mod 4)+1,plane]);
end;
end;
10 : begin
for j:=1+mountainshape[he,i-1] to wi-mountainshape[he,i-1]-1 do begin
if not volcano then DrawPixelCheck(x+j- wi div 2,y-i+1,MtColor[2,plane])
else begin
DrawPixelCheck(x+j- wi div 2,y-i+1,LavaColor[((Gameticks div 10)+random(2)) mod 5+1,plane]);
DrawPixelCheck(x+j- wi div 2,y-i+2,MtColor[2,plane]);
end;
DrawPixelCheck(x+j- wi div 2,y-i,MtColor[1,plane]); // Top of hill
end;
DrawPixelCheck(x+mountainshape[he,i-1]- wi div 2,y-i+1,MtColor[1,plane]);
DrawPixelCheck(x+wi-mountainshape[he,i-1]- wi div 2,y-i+1,MtColor[1,plane]);
if volcano then LavaFlow((1+mountainshape[he,i-1]+wi-mountainshape[he,i-1]-1) div 2+x-wi div 2,y-i+1,0,false);
if chaosnode then begin
for j:=1 to 3 do LavaFlow((1+mountainshape[he,i-1]+wi-mountainshape[he,i-1]-1) div 2+x-wi div 2,y-i+1,0,true);
for j:=-9 to 9 do for k:=-9 to 9 do begin
if round(sqrt((j*j)+2*(k*k)))=(gameticks div 6) mod 8 then
DrawPixelCheck(x+1+j+mountainshape[he,i-1]- wi div 2,y-i+k,Lavacolor[1,plane]);
if round(sqrt((j*j)+2*(k*k)))=(gameticks div 6) mod 8-1 then
DrawPixelCheck(x+1+j+mountainshape[he,i-1]- wi div 2,y-i+k,Lavacolor[2,plane]);
if round(sqrt((j*j)+2*(k*k)))=(gameticks div 6) mod 8+1 then
DrawPixelCheck(x+1+j+mountainshape[he,i-1]- wi div 2,y-i+k,Lavacolor[2,plane]);
if round(sqrt((j*j)+2*(k*k)))=(gameticks div 6) mod 8-5 then
DrawPixelCheck(x+1+j+mountainshape[he,i-1]- wi div 2,y-i+k,Lavacolor[1,plane]);
if round(sqrt((j*j)+2*(k*k)))=(gameticks div 6) mod 8-6 then
DrawPixelCheck(x+1+j+mountainshape[he,i-1]- wi div 2,y-i+k,Lavacolor[2,plane]);
if round(sqrt((j*j)+2*(k*k)))=(gameticks div 6) mod 8+4 then
DrawPixelCheck(x+1+j+mountainshape[he,i-1]- wi div 2,y-i+k,Lavacolor[2,plane]);
end;
end;
end;
11 : ; // Above the hill, do nothing
end;
loadseed;
end;
I do want to change forests to have good visibility but I already did, 2 or 3 times. Any further and there won't be enough trees left to be really called a forest so I feel that direction might be a dead end.
also, do we even want forests to be 80% forest tiles in combat? That does make forest the second worst terrain for combat mobility or even tied for worst. Swamp tiles cost 3 but there is only 50% of them in a swamp. So maybe that is something wort discussion as well, which terrain types do we want to obstruct movement harshly, why, and to what extent.
Swamps don't have any special features and are generally not very desirable for cities so they are fine being bad for movement. Mountains shouldn't obstruct movement too much because Chaos nodes rely on ranged combat greatly vs Chaos Spawns, but the tile that is impassable for nonflying units is great for it because all Chaos creatures other than Hell Hounds can fly. Hills again doesn't matter either way. Forests appear on Nature nodes which can have Cockatrices but those are much easier to destroy than Chaos Spawn so it's fine if terrain adds a bit of extra difficulty. Web, longbowmen and Mud can take advantage of it and turn the tide against the cockatrices, the Chaos node doesn't offer those options.
Deserts cost 1 on the overland map so probably should be the same in combat especially because every single tile in a combat desert is a desert tile, there is no variety there. Tundra doesn't really matter either way.
September 19th, 2020, 03:07
Posts: 10,463
Threads: 394
Joined: Aug 2015
September 19th, 2020, 03:25
Posts: 10,463
Threads: 394
Joined: Aug 2015
Currently updating the unit enchantment aura colors to match the original. That will be included in the next update.
However, I remember Chaos and Death auras to be pretty hard to tell apart from each other so for a future update we might want to consider changing at least one of those two.
September 19th, 2020, 03:32
Posts: 377
Threads: 10
Joined: Apr 2017
Quote:Well, it's procedurally generated, so then you need to suggest changes to the function that generates them. Note the volcanoes, including the raise volcano spell animation, and chaos nodes, are all handled in the same function.
The map tiles are procedurally generated? You may have explicitly said that before but without a code block attached I honestly would have read past it and thought it meant something else. That's mind blowing... also, I have no idea how anyone is going to help improve the overland map art if that's the case.
Quote:also, do we even want forests to be 80% forest tiles in combat? That does make forest the second worst terrain for combat mobility or even tied for worst. Swamp tiles cost 3 but there is only 50% of them in a swamp. So maybe that is something wort discussion as well, which terrain types do we want to obstruct movement harshly, why, and to what extent.
I definitely don't enjoy it much at 80%. Maybe 10-20% less would be good to test.
Side note, I've been really enjoying the mountain maps, it's fun to be able to create chokepoints or phase through the stone with wraithform units. Maybe forests would be more fun if the forested bits clumped together and left free spaces to navigate between them.
As for the readability, it's going to remain a problem as long as you have trees that both layer over units and share colors with their palette. There are definitely some problem units here. Everything with a dark brown / black palette (or clear, like night stalkers) blends in and becomes invisible. Wild boars are the worst -- really bad, because they get summoned in droves.
You could list out those units and change them. Or, you could add a targeting aid -- player clicks a button to enable a glowing outline around all units, or maybe a glowing circle beneath them to avoid conflicting with enchantment glows.
|