Recent posts by leftylink on Kongregate

Flag Post

Topic: Kongregate Multiplayer Games / [WarMetal Tyrant] [DEV] Arachis Raid Released

Originally posted by SeanDougherty86:

Potential Bug:

How did this poor bastard get in our raid?

We didn’t make it public

Look ma I’m famous

Flag Post

Topic: Kongregate Multiplayer Games / [WarMetal Tyrant] [bug?] Summoning overload bug again?

Originally posted by hunterhogan:
Originally posted by dmerritt:

Dunno if this is posted/belongs elsewhere, Mission 290 is glitching with a 5x Enclave Warp Gate Deck. Warp Gates stop summoning after a few rounds.

I used a deck with 5 Warp Gates and the sim winrate is 99.75% but I lost 4 of 12 matches. Another player reported losing twice in a row. I didn’t look for this issue, so I don’t know if this happened to me or not.

Anyone else?

FredrIQ has it right. The fact that only 50 units can be summoned has been well explored since the release of Credo Master over a year ago. this should not be a surprise to anyone.

tyrant_optimize gives a win rate of 83% for that deck, not 99.75%.

./tyrant_optimize ROhGhbg+-CEhGhuL4hGg+hG "Mission 290" -r sim 1000000
win%: 83.0136 (830136 out of 1000000)

Edit: It seems the cap is even lower than originally expected. That means the win rate should be even lower than the 83% than tyrant_optimize reports.
Maybe it’s even around the neighborhood of 49% or so. Just a guess.

Flag Post

Topic: Kongregate Multiplayer Games / [WarMetal Tyrant] [GUIDE] Phobos Skills

We know that Jam will stop "on death" activation skills from activating. So it is reasonable to be curious about whether Freeze does the same.

I have just tested on a Chilling Touch tile: Freeze does not stop "on death" activation skills. A Neverender, even when frozen, will still Strike 2 as it dies.

Originally posted by Moraku:

• Can you payback On Death skills? (only applicable against Neverender)
Answer: NO. Regenerate triggers AFTER the window for Payback trigger. This means there is no target for Payback to activate upon.

Heh... I can demonstrate a situation where an on death skill is paybacked. Watch this (and thank you to commonkey for pointing this out initially).

Attack deck: Cyrus (or really, any non-heal, non-protect commander), Interdictor, Neverender.
Defense deck: Atlas, Mobile Command, Electromagnetic Pulse.


Fight yourself. Play Interdictor. If defense plays EMP (50% chance), skip the battle and try again. Else, defense played Mobile Command, which is good! Sit back and watch the battle carefully. Next, you will play Neverender. Defense now plays EMP, killing both your units.
Interdictor strikes 3 on death.
Assuming you got to this point, then 50% of the time, Neverender regenerates.
Regardless of whether Neverender regenerates, Neverender strikes 2 on death.
If Neverender has regenerated, there is a further 50% chance you will see Mobile Command payback Neverender's strike onto itself, causing Neverender to be killed a second time (oddly it does not strike 2 again when it dies a second time?!).
For those keeping track at home, this happens 12.5% of the time in this setup.

---------- TURN  4 ----------
Attacking Commander: Elena #-1, 4/4 HP
    Interdictor #1, 3 atk, 2/3 HP, 1 wait
    Neverender #2, 4 atk, 2/2 HP, 2 wait

Defending Commander: Atlas #-2, 10/10 HP
    Mobile Command #101, 1 atk, 12/12 HP, 3 wait
Defending side plays Electromagnetic Pulse #102
Electromagnetic Pulse #102 uses strike(2) on ["1", 2]
Interdictor #1, 3 atk, 0/3 HP, 1 wait uses strike(3) on [101]
Neverender #2, 4 atk, 0/2 HP, 2 wait uses regenerate(2) on [2]
Neverender #2, 4 atk, 2/2 HP, 2 wait uses strike(2) on [101]
Mobile Command #101, 1 atk, 7/12 HP, 3 wait uses payback(0) on [2]
Mobile Command #101, 1 atk, 7/12 HP, 3 wait uses strike(2) on [2]
---------- TURN  5 ----------

Just tested this tonight, and it still works. Enjoy.

I used the same idea (Interdictor's strike causing Neverender to regenerate) to attempt to cause chaosed Neverender to strike itself, but I have not yet had any luck. My setup for that was Ningeco, Utopia Beacon, Infantry, Sustained Wall, Zarak against Dalia, Interdictor, Neverender. Fight as Ningeco, surrender if Neverender comes first, let Infantry smack Interdictor once, then wait for Zarak to kill both units at once. You cannot use EMP here because EMP will act before Ningeco can use Chaos on Neverender. If what we observed above holds, Interdictor should strike, Neverender might regenerate, and then if Neverender is alive when it's Neverender's turn to Strike 2, it should kill itself. However, I have gone through at least ten trials without success here.
Flag Post

Topic: Kongregate Multiplayer Games / [POLL] Rename "The Alliance" (and a debate on the morality of said "Alliance")

I was going to suggest that you call the larger alliance (currently known “the Alliance” on the forum) what we call ourselves (the G5 Allies). It just seems ridiculous to put this up to a vote when it is clear what we call ourselves. Then, I realized that it is not always the case that a group is known the same way by those in the group and those outside the group. So I will yield to the community on this point. Call us “the Alliance” if you want, I guess, but I agree it is confusing because there has historically been a different “Alliance”.

In the same vein, I was also going to suggest calling the smaller alliance what we call ourselves (the UA), but the same problem applies here. I would request, however, that you not call us “the counter-alliance”. That just seems like a silly name for us.

As for various arguments in this thread… whatever.

Flag Post

Topic: Kongregate Multiplayer Games / Automatic deck optimization - leftylink's thread

Originally posted by Tester8372:

I noticed (in my compiled binary at least) that the order of the flags matter, i’m not sure if it’s intended or not.

No, certainly not intended. And in fact I cannot reproduce this behavor. Either ordering of the flags works. Is there anything else you think would affect this?

Originally posted by Tester8372:

Another thing is that i found a strange behavior. The % of success is different before and after saving the optimized deck.
For example:

me@M1530:~/lefty$ ./optim “ogre-spam” “ogre-spam” -s -e “Decay” climb 1000

This is an interesting bug. If you simulate a named deck against itself, when the optimizer improves the attack deck, it changes the defense deck too!
You can observe that this behavior does not occur if you use deck hashes:

./tyrant_optimize QVH0+q QVH0+q -s -e Decay climb 1000

It also does not happen if you have two different decks with different names but the same cards.
./tyrant_optimize ogres ogres2 -s -e Decay climb 1000

I agree that this is a bug. I would like to fix it. I cannot do it for at least the next three days though. For the time being all I can do is make people aware of this bug. You are free to submit a patch to either me or commonkey.

Flag Post

Topic: Kongregate Multiplayer Games / Automatic deck optimization - leftylink's thread

Originally posted by cormy1:

So… I downloaded everything and followed all the steps and everything seems to be fine… But apparently there’s a custom.txt file that I’m randomly missing for some reason that I need to make my own deck hashes to use in this?
Any ideas what happened or what I can do to get it?
Of course I’ll redo EVERYTHING if I REALLY have to…

Please read my first post again.

Originally posted by leftylink:

Optional ingredients

  • Custom.txt – Each line of this file contains “deckname: commander, card1, card2, …, cardn”. If this file exists, you may refer to decks by their name on the command line, instead of using deck hashes.

Alternatively, as the bullet point suggests, you may always specify deck hashes on the command line, regardless of whether Custom.txt exists.

Flag Post

Topic: Kongregate Multiplayer Games / [WarMetal Tyrant] [DEV] 12/7/2012 Conquest, Shards, and Bug Fixes!

Originally posted by DaWayne33:

Other small fixes here and there but those are the most notable.

Feel free to post any feedback! Another announcement coming soon!

You… you fixed getNewFactionMessages. You guys really do listen.


I love you guys.

Flag Post

Topic: Kongregate Multiplayer Games / Automatic deck optimization - leftylink's thread

I submitted my first patches to commonkey’s tyrant_optimize on November 11th. Since then, I went on to make many other changes to it, including ANP (to make the best raid decks ever) and conquest battleground effects (to make the ultimate conquest tool).

I have been called many things since then. Some hailed me as a hero, or “master programmer” (I’m really not). It makes my heart swell to see my name posted in Fansite comments, though I would say the one more deserving of the credit is commonkey. Others decried my actions, claiming I ruined conquest, and indeed the entire game of Tyrant. That’s too bad, but it’s just fine.

Was I right in releasing this code to the public? Did I act correctly in opening this Pandora’s Box? I’m not sure. I do know that as a coder, I am a supporter of open source. I have benefitted from being able to peruse Moraku’s and Netrat’s source code for their respective simulators, and I use other open source software on a daily basis. And it certainly would not have felt right to keep my improvements to myself and friends only. So I did what I felt was right.

Whether what I did was right or not, I no longer have the time to support such an endeavor. Just as I took the torch from commonkey, I think it is time to pass the torch back on to the next contributor, whoever that may be. commonkey seems to be working on his own repo again, and there has been a little bit of extra work done by andor. Because of the distributed nature of git, everyone who forked my repository on github has a complete copy of all changes I have made, so anyone can pick up where I left off.

I may be back in a few months, but until then, it has been a pleasure serving you. It’s time for me to disappear from the spotlight, back into the shadows (where some have argued that I operate best), and make way for other coders with enormous potential.

Flag Post

Topic: Kongregate Multiplayer Games / [WarMetal Tyrant] SimTyrant - The simulator that runs from your browser!

Counterexample: Play Tabitha and a Patrol Cruiser against Jotun. Jotun will freeze it, and Tabitha will not cleanse the Patrol Cruiser, meaning an inactive Patrol Cruiser suffering from only freeze is not a valid target for Cleanse.

Now, Cleanse might target an inactive unit that suffers from freeze and also, say, poison. It would cleanse the poison and incidentally cleanse the freeze (doing nothing). That’s fine. This is not important in Jotun since no opponents have poison, but is important (well, not really) in the Chilling Touch battleground. I can test this if i can find a Chilling Touch tile on the edge of the map…

Allowing inactive units that only have freeze and no other negative ailments to be cleanse targets weakens cleanse in Jotun. If unit A is immobilized or jammed (which can happen in Jotun) and unit B is inactive and frozen, cleanse should always cleanse unit A, and never unit B.

Flag Post

Topic: Kongregate Multiplayer Games / [WarMetal Tyrant] [GUIDE] Quest / Conquest Battleground Effects


tl;dr: Faction restrictions are removed, as you would expect.

Zander and 4 Hydras face off against an unknown enemy force headed by Invasion Coordinator. Recall that Zander has Enfeeble 1 Bloodthirsty.

I play a few Hydras, my cunning foe plays a Steadfast Cannon, which Zander Enfeebles! He then plays a Xeno Mothership, which Zander Enfeebles as well (along with the Steadfast Cannon, of course)!
The lengthy battle ends in my crushing defeat. I have no clue how that happened. I thought my deck was infallible…

Anyway… I think we can see that faction restrictions are removed from this.

Just under five hours left in this invasion of the Decrepit tile! Submit your test requests before it’s too late!

Flag Post

Topic: Kongregate Multiplayer Games / [WarMetal Tyrant] [GUIDE] Quest / Conquest Battleground Effects

Let’s talk about Decrepit.

From the quests XML file
Both Commanders gain the skill “Enfeeble All 1” (replaces any instance of Enfeeble)

All right. So, I’ve observed that with Atlas, the Enfeeble All 1 comes after his Strike 1. He’s gaining a new skill, and it is added at the end of his skill list. Great.

What about Halcyon the Corrupt, who already had Enfeeble 1? What are the semantics of “replace” in the effect description?
Does his shiny new Enfeeble All 1 modify his Enfeeble 1, keeping it in the same spot in his skill list? In this case, he would use Enfeeble All 1, then use Mimic.
Or does he lose his original Enfeeble 1, and gain a new Enfeeble All 1 skill? In this case, he would use Mimic, then use Enfeeble All 1.

I’d like to test this myself, but I may not be able to do it personally. In that case, I will have to depend on the wise words of someone from the community who has seen this. Help me out. The fate of Halcyon the Corrupt hangs in the balance.

Guess what guys? I tested this personally (and you can too, with Halcyon the Corrupt or Lucina the Wicked, on any Decrepit tile). The answer… Halcyon the Corrupt will use Enfeeble before he uses Mimic (so Enfeeble All 1 replaces his Enfeeble 1 in the same position in his skill list). This ordering is much more favorable toward Halcyon the Corrupt than the other possible ordering. Rejoice, ye fans of Halcyon the Corrupt!

Let us assume that the same semantics apply to the Forcefield effect until we see otherwise. It is less important for Forcefield; there are fewer commanders with existing Protect for whom the ordering of Protect relative to their other skills matters. The only example I see is Kleave sieging a Crumbling Remains. Is anyone able to think of any others?

Flag Post

Topic: Kongregate Multiplayer Games / [WarMetal Tyrant] List of outstanding glitches/errors (NOV 2012)

Minor nuisance: Tyrant GUI client has integer overflow (unsigned 32-bit integer) on last_post parameter of getNewFactionMessages API call. This causes all messages to be returned, instead of only new messages. Confirmed to be a client-side problem only, as the server correctly returns only new messages if a proper last_post parameter is passed.

Probably could save bandwidth of the gigabyte-per-day order of magnitude if this was fixed. LOL.

Client sends getFactionMessages.
Server sends back an array of 50 messages. The last post_id is 4958409002.
Now, client sends getfactionMessages with a last_post of… you guessed it, 663441706!
Wait, what? That’s not what I guessed! Oh, right, 663441706 + 232 = 4958409002. Oops.
Server sends back… ALL 50 messages again because, of course, all of those messages have IDs greater than 663441706. Of course, none of these messages are new messages. And now we’ve just wasted about 5 kilobytes of bandwidth.
And the server and client are going to repeat this conversation periodically too. This really adds up…

Flag Post

Topic: Kongregate Multiplayer Games / [WarMetal Tyrant] No Save November

The month of November has been designated as No Save November.

The rules of No Save November are very simple: At all times, players should be as close to 0 energy and stamina as possible. No saving energy or stamina at any time!

Join this growing movement today.

Flag Post

Topic: Kongregate Multiplayer Games / [WarMetal Tyrant] (Tyrant) Jokes Thread :D


Flag Post

Topic: Kongregate Multiplayer Games / [WarMetal Tyrant] Dev please fix this deadly bug!!!!! conquest invasion cheating

We need more than 2 alt factions. Each faction may only conquer contiguous regions of land. The level-restricted areas number one at each corner (8 tiles each) and five along each edge (four groups of 6 tiles, one group of 3, totaling 27 per edge), so we need a total of 24 alt factions (all named Dragons, of course) to take the level-restricted lands (a total of 140 tiles—the math checks out), plus the main one to take the 485 non-restricted tiles.

Faced with this question, we ask… will we do it? Will we take all 625 tiles on the Conquest map? The answer, my friends, is we’re doin’ it, we can’t be beat! Buh-bring the boys out! We’re born to win, better tell all your friends, ’cuz we get it in, you know the girls! Buh-bring the boys out!

Flag Post

Topic: Kongregate Multiplayer Games / [WarMetal Tyrant] Fun bugs with summoning too many units

tl;dr version: Try playing the deck Dalia, 3 Credo Master against the deck Emanuel, Utopia Beacon and see if it buggers up the game.

Explanation: Tyrant assigns your cards IDs from 1 to 10, and opponent cards IDs from 101 to 110.
When summon was introduced, the decision was made to have your summoned cards get IDs starting from 51, and opponent summoned cards get IDs starting from 151. (Edit: No, this has been the case since split was introduced, not just summon)
Okay. So what if you summon so many cards that your IDs start running into your opponent’s IDs? What will happen?
Unfortunately, this is usually not possible, since you must summon more than 50 cards before turn 50, and remember that you only act in half of those turns. So you must summon strictly more than 2 units per turn.
In most situations, you would kill the opponent commander before you could summon so many units anyway.
However, we now have an answer in Credo Master, who summons units that have no attack!
With three Credo Masters summoning Credo Defenders every turn, in seventeen turns, fun things should start to happen!
We just need to stop the Credo Masters from killing anything. Three hits from a Credo Master kill Emanuel, so we’ll use a Utopia Beacon to block one attack, but weaken it down to 0 attack so it does not kill Credo Masters.

What happens?

In my game, the last turn during which my Credo Masters summoned was turn 39. After that, there were no summons. I did the math, and I see that at turn 37 I had 48 Credo Defenders, so at turn 39 I would have hit the magic number of 50. I did not see everything on that crucial turn, but I believe I summoned only two Credo Defenders.
Furthermore, on turn 39, the Utopia Beacon shifted over one space to the right permanently, even though there was no unit to its left! It stayed there for the rest of the battle.
Notwithstanding the odd position of the Utopia Beacon, the attack from my first Credo Master still hit the Utopia Beacon, while the attack from the second went through the Utopia Beacon and hit Emanuel.

Very strange. Any other fun bugs we can trigger by summoning too many units?

Flag Post

Topic: Kongregate Multiplayer Games / [WarMetal Tyrant] My first legendary

Uh huh. Listen boy. My first Legendary story, ooh whoa oh ooh whoa oh, yeah. My Righteous Hold (ho ohhhhh), and my Defiance (ho ohhhhhh), my Tyrant, uh, uh, let’s go!

Flag Post

Topic: Kongregate Multiplayer Games / [WarMetal Tyrant] [Last Guide] Auto Faction's Net DMG

Originally posted by DarkBlood1:

Yes, so the simple solution to Zlib::GzipFile::Error is to add a code to the script to automatically clean the cache folder everytime it starts, but well.. is not too much job for the user to manually delete that folder.

Then, pray tell, what is the point of having the cache directory?! This is a TERRIBLE solution! We should be trying to fix the root of the problem instead of proposing terrible solutions that DESTROY the performance of the code!

A completely wild guess at the problem is Windoze messing with newlines characters, corrupting the cache file? I have no clue what could be going wrong here since I don’t really want to install Ruby on a Windoze machine to test this.

My code just un-gzips the response from the server and stores that in the cache directory. That way, the stuff in the cache directory is human readable too. No need to gzip your cache. JSON is plain text and cheap to store on disk. My cache goes back to April and it’s 33 MB.

Looks like it’s quite simple to modify BlankZero’s code to do the same. Just change one line in Net::HTTP#cached_request, and change one line in Tyrant#fetch_collection.

Flag Post

Topic: Kongregate Multiplayer Games / [WarMetal Tyrant] [Last Guide] Auto Faction's Net DMG

Originally posted by jogol:

Can somebody please explain me the 4th step, i dont understand what to do. Im a total noob took me 3 hours to get up to this point so would be really nice if somebody could answer :p

Open a terminal, then type:

gem install 'google_drive'

BlankZero, a few comments. Line numbers correspond to your last release version, though who knows what you’ve done since then.

Huh? You had to go and redefine a String#blank? method (lines 114-116)?
What’s wrong with String#empty? ?

I disagree with the line require 'rubygems' (line 120), and believe that you should never require rubygems.

Unused method parameters should be named _ (a single underscore), rather than i (lines 380, 384, 388, 392, 396).

I prefer Array#collect then Array#join rather than your repeated string concatenation in FactionMember#to_s (lines 406-411) and probably FactionRankings::generate_aliases (lines 459-468) and FactionRankings::export (lines 487-491), but that’s again my perhaps-warped view of how things “should be done”. The end result is of course the same.

Isn’t it better to use JSON#dump rather than your custom JSON output code (lines 457-467)? I might be wrong here, since I have never used this script.

Nice work, of course. I’ve taken a few pages out of your book, and I’m sure the rest of the forum finds this script to be quite useful.

Flag Post

Topic: Kongregate Multiplayer Games / MOAR BAULDE!

The fact that sameul11 linked to lyrics of Girls’ Generation (AKA So Nyuh Shi Dae, SNSD) hit song Gee is an indication that the Hallyu Wave is spreading to the Tyrant community as well. I see that it will only be a matter of time before the entire forum feels the same powerful moving love for these girls that I do. I invite all of you to visit the link and take the first step toward becoming a SONE today. My life has become so much brighter and filled with bliss after being graced by the Nine Angels, and I believe the same can happen to yours.



Jigeumeun So Nyuh Shi Dae! Apeurodo So Nyuh Shi Dae! Yeongwonhi So Nyuh Shi Dae!

Flag Post

Topic: Kongregate Multiplayer Games / [WarMetal Tyrant] [DEV] 6/21/2012 Tweaks and Fixes!

Originally posted by burdgod:

oh wait i think i understand what you mean now. i thought that you meant it would stay up during your opponents turn. damn well thats not real exciting.

Da ****** are you talking about? This is the BEST FEATURE IN THIS UPDATE, dammit! I have been waiting for this one feature for forever!

Flag Post

Topic: Kongregate Multiplayer Games / [WarMetal Tyrant] Suggestion

This makes decision points too complicated. I disapprove of this motion.

Flag Post

Topic: Kongregate Multiplayer Games / [WarMetal Tyrant] [DEV] 6/21/2012 Tweaks and Fixes!

Originally posted by DaWayne33:
- Location of the combat card popup is remembered between sessions

BEST UPDATE EVER!!! I don’t even care about anything else, THIS SHIT IS AWESOME!!!

Originally posted by DaWayne33:
- Faction war members are sorted with “you” on top, then descending based on Faction Points for that war

In a perfect world, it would be sorted on net points, not points gained. But this is fine enough.

Flag Post

Topic: Kongregate Multiplayer Games / [WarMetal Tyrant] [Recruitment] Enter The Hole today!

One member’s reaction upon joining the Hole:

Check us out. Stop in our IRC chatroom.

Flag Post

Topic: Kongregate Multiplayer Games / [WarMetal Tyrant] [Last Guide] Auto Faction's Net DMG

Originally posted by Cold_Master:
Last active day is slightly odd – it gains in a linear fashion, today is 15450, yesterday was 15449, tomorrow is 15451 etc.

It’s not odd at all. It’s just the number of seconds since the Unix epoch divided by 86400 (seconds per day).

Originally posted by Cold_Master:
It lists the entire faction, but the format is horrible. I just copy my factions to word, and organise it bit more.

Well, the format is JSON. While I’m sure some people out there agree that JSON is horrible, there are at least well-established libraries for parsing it in every major programming language. So why would you use Word rather than one of those? … in fact, why use Word for anything at all? WYSIWYG is terrible.

While I’m here, might as well give some suggestions for the code. Except for the last one, none of them really qualify as functional improvements, just matters of good coding (and for the first, user interface design). I’d like to leave the functional improvements as an exercise for the reader. I’m sure the imaginative reader already knows what can be done with this code.

  1. Why are you automatically putting the output into a file of an arbitrary name? It’s plain text, so just print it to standard output, let the user decide where it should go. If the user wants to put it into a file, let them redirect it themselves.
  2. faction_wars should really use select, rather than using each and push if.
  3. Parallel hashes are BAD. Use a class for each player! That way you don’t need the silly hash of hash thing you have. Then you can sort your array of players however you want, have your “over the last X days” calculation logic encapsulated within the player class, etc.
  4. The numbers don’t need to be recorded in hashes! You KNOW that your reporting period is (for example) 7 days and there are wars each day (for a reasonable faction). Just use an array with all elements initialized to 0!
  5. Should cache requests. That’s all I’m going to say for this one. Bam, massive perf increase right there (for repeated invocations of script)