Map Database  •  FAQ  •  RSS  •  Login

Aasfresser's Maps

<<

Aasfresser

Farmer

Posts: 20

Joined: 22 Mar 2014, 14:01

KaM Skill Level: Skilled

Post 29 Dec 2015, 14:24

Aasfresser's Maps

Hey KAM Community.

In the last 1 and 1/2 year I have been working on some maps/mapideas and I have finally decided, that it is time to upload a fair share of it here in the forum!

Bitterblossom:
First of all I have a made a Single Player map. It's called Bitterblossom after one of my favorite Magic the Gathering cards :D. The map was designed to be challanging for me. With early attacks all over the place, limited ressources and pretty strong and hard to attack enemies I believe I have all the ingredients for a very difficult Single Player map. To make it easier for less expierienced players I added a difficulty setting at the start of the game. The easy and medium setting changes the rate your enemy trains units, who attacks you and your start units and ressources.

Here a few Screenshots:

Image

Image

Image

Crossfire:
Next up is a 1v1 Multiplayer Map. Its inspired by Crystalline Falls. I played 1 game against my brother on Crossfire and it defnitly makes for an interesting game. Both locs have one pretty big opening on the one side and a pretty small one on the other side. But its mirrored for each loc. This forces the player to fight on two sides at the same time since you cant push on the same side you defend. There is also the middle entrance the player need to have an eye on all the time. Other then that its a pretty normal 1v1 map with the option of two Iron Mines.

Image

Image

The Arena:
The Arena is a map about micro and knowing when to take a fight. It's designed as a 1v1v1v1. You play 10 Rounds of which one Round takes about 1 minute. So its a pretty small map and designed as a minigame for breaks or to chill out a bit. The goal of the whole thing is to gain as many points as you can in each Round. At the start of each Round you get 1 unit. With this unit you can make Points by killing other units controlled by other players, being on "the Towers" (basically a "king of the hill") or staying alive as long as possible. A Round ends as soon as only one Player has 1 unit left.
There is also an AI enemy, which spawns random amounts of Serfs/Milita into the Arena. If you kill Serfs you lose Points and the Milita is there to catch you in bad positions so other player can easily finish you of.

Image

Image

Image

Clan Wars:
Last up is a map I have never tested in a "real game" only against the AI, which means I have no idea if this really works in a multiplayer enviroment. The idea is: You never loose, if you get defeated you join the side of whom killed you. So it starts as a free for all and then works it way towards a 7v1 :D. To make this happen I changed the way the KAM economy works. Since if you normally get invaded by an enemy you're out of this game. Hopefully this wont happen here since almost everything is based on an Income rate. You dont need to build a Woodcutter anymore, since the Sawmill gets Treetrunks automatically into there storage. Same goes for Grain, Ironore, Coal, Goldore and Stone (you get that at a set rate into your Storehouse). This way your town is way less dependent on Serfs and therefore you can recover more quickly from an Invasion. Also this is designed to be played without peacetime!
At the start of the map the players can choose their start position freely on the map. To choose a start positon the player has to place their storehouse wherever they want. After every player placed their storehouse you get a normal start at that positon. This way every game is different since the players hide in very different positions every game.
The next goal for every player should be to collect the treasures that randomly spawned on the map. Treasures are buildings from an AI player. Destroying these buildings gives you additional ressources and therefore an advantage throughout the game. There are up to 8 treasures ( on per player) and the Townhall, which is always at the centre of the map. The Townhall is different to the other treasures, since it gives you a Milita/Rebel/Rouge or Vagabond randomly every Minute and can be retaken by other players at any time of the game.
To get other players to join in your team, you have to destroy their Storehouse. As soon as you do that they are on your side and get a brand new Storehouse at the position of their old one.
As an anti rush tool every player has the option to change all his Labours into Barbarians by placing a market. These Barbs are completly uncontrolable and automatically attack the first enemy that attacks any of your buildings/units.
The idea so far is finished. Now I only need players to help me test this and brush out bugs and problems with the concept. Also I don't have a finished map for this. At the moment I'm using the map "A War of Justice" as a placeholder. (I'm doing this without the permission of ARagingBullet, hope that's not a problem :D)

Image

Image

Image

I have also been working on a campaign of 10 Missions. The whole thing is done to I just want to make a few last minute tests before Ill upload it to the forum!
So look forward to that ;)

If you want to use or change any of my maps/ideas feel free to do so as long as you mention me in your credits ;)

Thanks for reading and enjoy my maps :lol:
You do not have the required permissions to view the files attached to this post.
<<

sado1

User avatar

Council Member

Posts: 1430

Joined: 21 May 2012, 19:13

KaM Skill Level: Skilled

Post 30 Dec 2015, 09:54

Re: Aasfresser's Maps

The Arena is a really neat little gamemode, well done. There are a few things I'd like to see improved though.
1. Small thing - when there's less than four players, the script shouldn't display the missing players in overlay ( [$] : 0 ). To fix this, simply wrap the parts of the overlay with an if clause:
  Code:
if States.PlayerEnabled(0) then begin Actions.OverlayTextAppend(-1, '||[$'+ States.PlayerColorText(0) + ']'+ States.PlayerName(0) + '[$FFFFFF]: ' + IntToStr(iPoints[0])); if iRoundWinner = 0 then Actions.OverlayTextAppend(-1, '|[$'+ States.PlayerColorText(0) + ']' + 'Last Round Winner'); end;
Do the same for the other players.
2. Just as I said earlier, your script is lagging a lot because you need to make the script "do less" per every tick. You should wrap the entire OnTick in an if statement like this:
  Code:
if (States.GameTime mod 10 = 0) then begin //all of the code you currently have in OnTick end;
This will spread the CPU load a lot, making everything inside that if statement run only per 10 ticks (so, once for every second). If you want to improve it even further and avoid a lag every second (it's not always needed but if the script does a lot in short time then it might lag a bit), you need to spread the load between players as well, but it requires more modifications to the code. I'm not sure if it's needed, I advise you to try the simpler version above first, then, if the lag still persists, try the one below.
  Code:
for (P := 0 to NumberOfPlayersInTheGame do if (States.GameTime mod 10 + P = 0) then begin //all of the code you currently have in OnTick end;
Additionally, you need to add P to every single variable that is depending on the time. For example,
  Code:
iTicks := (iTicks + 1 + P); iSpikes := ((iTicks + P)/80) iNeutrals := ((iTicks + P) / 180) iOrder := ((iTicks + P) / 5) iOverlay := ((iTicks + P) / 10);
Otherwise, none of the procedures that check something similar to "if (current time is dividable by 180)" would work, because the time would always be "(something * 180) + P". I hope you get what I mean.
3. The win/lose conditions are slightly wrong - the game ends before 10th round even starts. I suppose you need to add 1 somewhere, shouldn't be that hard to fix :)

Things that I don't like but I'm not sure if we can call them mistakes:
1. Instead of this:
  Code:
iTicks := (iTicks + 1); iNeutrals := (iTicks / 180) iOverlay := (iTicks / 10); //(...) if iTicks = (10 * iOverlay) then Overlay; //(...) if ((iTicks = (iNeutrals * 180)) and (iRoundTicks > 150) and (States.StatUnitCount(4) < 4)) then begin //(...)
I would do something like this:
  Code:
iTicks := States.GameTime; //(...) if iTicks mod 10 = 0 then Overlay; //(...) if ((iTicks mod 180 = 0) and (iRoundTicks > 150) and (States.StatUnitCount(4) < 4)) then begin //(...)
Although, I'm curious to hear from scripters better than myself on which approach is better, if there is any difference at all.
2. Would be handy to keep OnTick more clear - I'd move the Neutrals part to a different procedure.
3. Line 585 - this is a perfect use case for "case .. of" statement.
<<

sado1

User avatar

Council Member

Posts: 1430

Joined: 21 May 2012, 19:13

KaM Skill Level: Skilled

Post 30 Dec 2015, 10:14

Re: Aasfresser's Maps

Sorry for a double post but if I edited the previous one out, I guess it could be lost here, so I'll make an exception. I tried out the Clan Wars script but it fails - when I try to open it, every player loses the game. I tried setting the map as Special, to avoid the default winning conditions which are the problem here. It helps, but (not sure if it's a part of the same problem or something else) making a storehouse plan doesn't make anything happen (I expect the storehouse should be built automatically?) Do I have to set teams or something? I just tried FFA with 3 AIs.
<<

Aasfresser

Farmer

Posts: 20

Joined: 22 Mar 2014, 14:01

KaM Skill Level: Skilled

Post 30 Dec 2015, 12:08

Re: Aasfresser's Maps

if (States.GameTime mod 10 = 0) then
I have to admit I didn't know about the "mod" function. I'm guessing this means it will run the trigger every ten ticks and obvoiusly is pretty useful :D
2. Just as I said earlier, your script is lagging a lot because you need to make the script "do less" per every tick. You should wrap the entire OnTick in an if statement like this:
right I forgot about that *derp*
I just tried FFA with 3 AIs.
You can't really test this against AI, since every player that is in the game has to place a storehouse before they get placed officaly. If you want you can test it against Ai in SinglePlayer using F11!
iTicks := (iTicks + 1 + P);
iSpikes := ((iTicks + P)/80)
iNeutrals := ((iTicks + P) / 180)
iOrder := ((iTicks + P) / 5)
iOverlay := ((iTicks + P) / 10);
I gotta admit I don't really understand the point of the P's. What does it help to add the number of Players to every Variable? Or are the P's not the Players? But then I don't understand the point either :D
*Edit: Okay I got it now, but for the moment I will try the script with running every second so this isn't needed anyways ;)
<<

Black

User avatar

Warrior

Posts: 113

Joined: 20 May 2015, 20:14

KaM Skill Level: Average

Location: Italy

Post 03 Jan 2016, 11:08

Re: Aasfresser's Maps

Seems me really nice, i hope to have time to test these maps soon :)
<<

Aasfresser

Farmer

Posts: 20

Joined: 22 Mar 2014, 14:01

KaM Skill Level: Skilled

Post 06 Jan 2016, 16:25

Re: Aasfresser's Maps

Sorry for not updating my mistakes. My Pc crashed and I had to deal with that, but now that I'm back from vacation I will update them as soon as I find the time.
<<

sado1

User avatar

Council Member

Posts: 1430

Joined: 21 May 2012, 19:13

KaM Skill Level: Skilled

Post 15 May 2016, 21:10

Re: Aasfresser's Maps

We found a few bugs in Arena:
-it ends before round 10, should be easy to fix
-rogues can shoot the units on the top, and when these units get killed, the player doesn't get them in the next rounds. Easiest fix would be to make them have the same color as player but different team (use 4 AIs for that), although it might become a problem when you want to make a hypothetical 8P version. The best fix would be to not depend on the spawned units (just make array and store the randomized units there), see next bug to know why...
-sometimes the unit at top doesn't spawn at all
-it's possible to join your troop with those on the top, which is a bad thing to happen for a troll. I'm unsure how to fix this, though, I think new script command to disallow joining to a/any group would be needed.

Return to “Map Design”

Who is online

Users browsing this forum: No registered users and 12 guests