Bay 12 Games Forum

Please login or register.

Login with username, password and session length
Advanced search  

Poll

See Episode 11, Which contract should we take?

Contract 1, FedCom Extraction Raid
- 4 (100%)
Contract 2, Outworlds Alliance Recon Raid
- 0 (0%)
Contract 3, FedCom Recon Raid #1
- 0 (0%)
Contract 4, FedCom Recon Raid #2
- 0 (0%)
None of the above - wait a month and try again (please post to specify acceptable contract criteria)
- 0 (0%)

Total Members Voted: 4


Pages: 1 ... 14 15 [16] 17 18 ... 40

Author Topic: Let's Play MegaMek (Against the Bot campaign)  (Read 75170 times)

EuchreJack

  • Bay Watcher
  • Lord of Norderland - Lv 20 SKOOKUM ROC
    • View Profile
Re: Let's Play MegaMek (Against the Bot campaign)
« Reply #225 on: November 27, 2015, 11:47:05 am »

I know you can turn them to heat mode. And I tried using it a couple of times. But iirc they produce more heat than they apply, the Firestarter is already running quite hot and some of their benefits are not really in the game (I think?), as burning down forests to create smoke cover for example. I'd totally use the standard Firestarter if the enemy was fielding infantry.

I mean there is a mechanism where a mech can turn their heat production into direct buffs.
Not in our era.  Our company needs to survive to the Clan Invasion in order to mount that stuff.  Well...we could get lucky on Star League stuff, but in all likelihood we'll need Clan Salvage, at a minimum.

Neonivek

  • Bay Watcher
    • View Profile
Re: Let's Play MegaMek (Against the Bot campaign)
« Reply #226 on: November 27, 2015, 11:50:43 am »

And we REALLY don't want to bump into Clans... What with their genetic engineering.

I bet the game doesn't have proper AI for the Clan so they will kick away.
Logged

Rince Wind

  • Bay Watcher
    • View Profile
Re: Let's Play MegaMek (Against the Bot campaign)
« Reply #227 on: November 27, 2015, 11:54:49 am »

And you only need 10 heat for that to work I think. Without double heatsinks that is quite easy to achieve with most mechs. You can also shoot buildings and the landscape with some lasers to turn up the heat. It is harder to keep them below 10 quite often. Unless they are Shadowhawks or some of the light mechs with barely any weapons. But you might heat them up via jumping and shooting as well.

But I'll give you that perk, though it is a rather special use that will not come into play very often even if we had the stuff.


What I read is that the clans often bring three full stars of OmniMechs. Fun times!
Logged

EuchreJack

  • Bay Watcher
  • Lord of Norderland - Lv 20 SKOOKUM ROC
    • View Profile
Re: Let's Play MegaMek (Against the Bot campaign)
« Reply #228 on: November 27, 2015, 11:56:08 am »

And we REALLY don't want to bump into Clans... What with their genetic engineering.

I bet the game doesn't have proper AI for the Clan so they will kick away.

I'm not even sure the game properly assigns the penalty to melee combat for Clan mechwarriors that it should.  Or that the game properly assigns Trueborn status to the bulk of the Clan Invaders, with the skill boost that entails.

Rince Wind

  • Bay Watcher
    • View Profile
Re: Let's Play MegaMek (Against the Bot campaign)
« Reply #229 on: November 27, 2015, 11:57:55 am »

I think the melee malus is in. Clan warriors have -1 or -2 to hit.
Logged

Erkki

  • Bay Watcher
    • View Profile
Re: Let's Play MegaMek (Against the Bot campaign)
« Reply #230 on: November 27, 2015, 12:42:45 pm »

And you only need 10 heat for that to work I think. Without double heatsinks that is quite easy to achieve with most mechs. You can also shoot buildings and the landscape with some lasers to turn up the heat. It is harder to keep them below 10 quite often. Unless they are Shadowhawks or some of the light mechs with barely any weapons. But you might heat them up via jumping and shooting as well.

But I'll give you that perk, though it is a rather special use that will not come into play very often even if we had the stuff.


What I read is that the clans often bring three full stars of OmniMechs. Fun times!

9 heat actually - and its best to stay there because more maluses kick in at 10.

Heatsinks can be shut down so for most mechs its easy to get to 9 heat - usually the problem is staying exactly there while using weapons... Theres mechs with that tech and fracking Streak-SRMs so its not easy.

However there are some excellent TSM units around. Once its 3059, head to CapCon space with all your cash.  ;)
Logged

Anvilfolk

  • Bay Watcher
  • Love! <3
    • View Profile
    • Portuguese blacksmithing forum!
Re: Let's Play MegaMek (Against the Bot campaign)
« Reply #231 on: November 27, 2015, 04:41:03 pm »

Fixed it! I hadn't taken into account reinforcements, which have extra sets of parentheses, or the fact that some unit variants have parentheses (like the Hover tank (Standard) here). Also, turns out missiles weren't being taken into account!

Hopefully all of this is now fixed, along with the thing where two mechs with the same name but different factions would get bunched together :) I have a feeling changing their name in Megamek might screw things over, so no need to rename units now. Thanks for the debug information, got me everything I needed! And ... you know, hopefully I didn't break anything, which is totally possible :D

Code: [Select]
import re

with open ("round.txt", "r") as myfile:
    data=myfile.readlines()
   
data = [line.strip('\n').strip('\r').strip('\t') for line in data]
data = list(filter("".__ne__, data))

class Unit:
    def __init__(self, name, faction):
        self.name = name
        self.faction = faction
        self.timesFired = 0
        self.timesFiredHit = 0
        self.timesFiredAt = 0
        self.timesFiredAtHit = 0
        self.damageTaken = 0
        self.damageDealt = 0
       
        self.kick = False
        self.kicked = 0
        self.punch = 0
        self.punched = 0
        self.physTarget = None
        self.physDamage = 0
       
        self.lastPartHit = None
        self.crits = []
        self.destroyedParts = []
       
        self.destroyed = ""
        self.prone = False
        self.immobile = False
   
    def __str__(self):
        return "("+self.faction+") " + self.name
   
    def asList(self):
        l = []
        l.append("("+ self.faction +") " + self.name)
        if self.timesFired > 0:
            l.append("   Fired " + str(self.timesFired) + " times, hit " + str(self.timesFiredHit) + " times for " +str(self.damageDealt)+" damage")
        if self.damageTaken > 0 or self.timesFiredAt > 0:
            l.append("   Fired at " + str(self.timesFiredAt) + " times, hit " + str(self.timesFiredAtHit) + " times for " + str(self.damageTaken) +" damage")
        if self.kick:
            pd = " for " + str(self.physDamage) + " damage" if (self.physDamage > 0) else " and missed!"
            l.append("   Kicked " + str(self.physTarget) + pd)
        if self.punch > 0:
            pd = " " + str(self.punch) +" times for " + str(self.physDamage) + " damage" if (self.physDamage > 0) else " and missed!"
            l.append("   Punched " + str(self.physTarget) + pd)
        if self.punched > 0 or self.kicked > 0:
            l.append("   Was punched " + str(self.punched) + " times and kicked " + str(self.kicked) + " times.")
        if len(self.crits) > 0:
            l.append("   Crits received: " + ", ".join(self.crits))
        if len(self.destroyedParts) > 0:
            l.append("   Destroyed parts: " + ", ".join(self.destroyedParts))
        if self.prone:
            l.append("   PRONE")
        if self.immobile:
            l.append("   IMMOBILE")
        if len(self.destroyed) > 0:
            l.append("   DESTROYED ("+self.destroyed+")")
        return l

def getNextLine():
    global data
    line = data[0]
    data = data[1:]
    return line


   
unitFire = re.compile('Weapons fire for ([^\(]*(?: *\([^\)]+\))?) \(([^\)]+?(?: *\(Reinforcements\))?)\)')
unitPhys = re.compile('Physical attacks for ([^\(]*(?: *\([^\)]+\))?) \(([^\)]+?(?: *\(Reinforcements\))?)\)')
weaponsFire = re.compile('[ ]*([a-zA-Z/0-9 ]+) at ([^\(]*(?: *\([^\)]+\))?) \(([^\)]+?(?: *\(Reinforcements\))?)\); needs \d+, rolls \d+ : (misses|hits)[ ]*(?:\([^\)]+\))?[ ]*([A-Z]+)?')
missileFire = re.compile('[ ]*([a-zA-Z/0-9 ]+) at ([^\(]*(?: *\([^\)]+\))?) \(([^\)]+?(?: *\(Reinforcements\))?)\); needs \d+, rolls \d+ : (misses|\d+ missile\(s\) hit)')
damageTaken = re.compile('[ ]*([^\(]*(?: *\([^\)]+\))?) \(([^\)]+?(?: *\(Reinforcements\))?)\) takes (\d+) damage to ([A-Z]+)')
physAttack = re.compile('[ ]*(Kick|Punch)[ ]*(?:\([^\)]+\))? at ([^\(]*(?: *\([^\)]+\))?) \(([^\)]+?(?: *\(Reinforcements\))?)\); needs \d+, rolls \d+ : (misses|hits)[ ]*(?:\([^\)]+\))?[ ]*([A-Z]+)?')
falling = re.compile('[ ]*([^\(]*(?: *\([^\)]+\))?) \(([^\)]+?(?: *\(Reinforcements\))?)\) falls ')
critical = re.compile('CRITICAL HIT on ([^.]+).')
destroyedParts = re.compile('SECTION DESTROYED')
destroyed = re.compile('\*\*\* ([^\(]*(?: *\([^\)]+\))?) \(([^\)]+?(?: *\(Reinforcements\))?)\) DESTROYED by ([^!]+)! \*\*\*')
transferDamage = re.compile('(\d+) damage transfers to [A-Z]+')

units = dict()

def getUnit(name, faction):
    global units
    if name+faction not in units:
        units[name+faction] = Unit(name, faction)
    return units[name+faction]
   
currentUnit = None
targetUnit = None
physical = False

while len(data) > 0:
    line = getNextLine()
   
    # Check if this is a firing line
    r = unitFire.match(line)
    if r is not None:
        physical = False
        currentUnit = getUnit(r.group(1), r.group(2))
        targetUnit = None
        continue
   
    r = unitPhys.match(line)
    if r is not None:
        physical = True
        currentUnit = getUnit(r.group(1), r.group(2))
        targetUnit = None
        continue
   
    r = weaponsFire.search(line)
    if r is not None:
        currentUnit.timesFired += 1
        targetUnit = getUnit(r.group(2), r.group(3))
        targetUnit.timesFiredAt += 1
        if r.group(4) == "hits":
            currentUnit.timesFiredHit += 1
            targetUnit.timesFiredAtHit += 1
       
    r = missileFire.search(line)
    if r is not None:
        currentUnit.timesFired += 1
        targetUnit = getUnit(r.group(2), r.group(3))
        targetUnit.timesFiredAt += 1
        if r.group(4) != "misses":
            currentUnit.timesFiredHit += 1
            targetUnit.timesFiredAtHit += 1
        continue
   
    r = physAttack.search(line)
    if r is not None:
        targetUnit = getUnit(r.group(2), r.group(3))
        currentUnit.physTarget = targetUnit
        if r.group(1) == "Kick":
            currentUnit.kick = True
            if r.group(4) == "hits":
                targetUnit.kicked += 1
        elif r.group(1) == "Punch":
            currentUnit.punch += 1
            if r.group(4) == "hits":
                targetUnit.punched += 1
        continue

    r = falling.search(line)
    if r is not None:
        currentUnit = None
        targetUnit = getUnit(r.group(1), r.group(2))
        targetUnit.prone = True
       
    r = damageTaken.search(line)
    if r is not None:
        targetUnit.damageTaken += int(r.group(3))
        targetUnit.lastPartHit = r.group(4)
        if currentUnit is None:
            continue
        if physical:
            currentUnit.physDamage += int(r.group(3))
        else:
            currentUnit.damageDealt += int(r.group(3))
        continue   
   
    r = transferDamage.search(line)
    if r is not None:
        targetUnit.damageTaken -= int(r.group(1))
        if physical and currentUnit is not None:
            currentUnit.physDamage -= int(r.group(1))
        elif not physical and currentUnit is not None:
            currentUnit.damageDealt -= int(r.group(1))
   
    r = critical.search(line)
    if r is not None:
        targetUnit.crits.append(r.group(1) + "["+targetUnit.lastPartHit+"]")
   
    r = destroyedParts.search(line)
    if r is not None:
        targetUnit.destroyedParts.append(targetUnit.lastPartHit)
       
    r = destroyed.search(line)
    if r is not None:
        unit = getUnit(r.group(1), r.group(2))
        unit.destroyed = r.group(3)
   
   
factions = {}
def getFaction(name):
    global factions
    if name not in factions:
        factions[name] = {}
    return factions[name]

for unit in units.values():
    f = getFaction(unit.faction)
    f[unit.name] = unit

output = []
   
sortedFactions = sorted(factions.keys())
for factionName in sortedFactions:
    unitList = getFaction(factionName)
    sortedUnitList = sorted(unitList.keys())
    for unitName in sortedUnitList:
        output = output + unitList[unitName].asList() + [""]
       
   
with open ("round2.txt", "w") as myfile:
    myfile.write("\n".join(output))




Could someone explain the two types of ratings to me? Does it make a difference which one you've selected? The official rules seem to mostly reference the dragoons letter rating, but the tutorials I've seen tell us to use the other one. Not sure what to do.

Also, once your admins are strong enough and it'd take 40xp to increase administration, definitely consider upping the negotiation skill! Turns out this allows you to reroll parts of the contracts, which can be an awesome way to buff them up, especially if you got some unlucky rolls.

Also, looking forward to seeing Zhou's lance totally not get ripped to pieces  :P
« Last Edit: November 27, 2015, 04:49:00 pm by Anvilfolk »
Logged

EuchreJack

  • Bay Watcher
  • Lord of Norderland - Lv 20 SKOOKUM ROC
    • View Profile
Re: Let's Play MegaMek (Against the Bot campaign)
« Reply #232 on: November 27, 2015, 05:13:42 pm »

Fun fact: ANYONE can be an administrator!  Just spend XP ->Admin (it cost 0 XP), and set it as their secondary job.  Suddenly, it is a lot easier to not get penalized for not having enough Admin.

Mech Techs are the real shortfall, as someone actually needs XP in order to have enough skill for that as their secondary job.

Hard to avoid the penalty for no dropship under the interstellar rating.

For the record, I usually go Dragoon rating.  I like the letter score.

Anvilfolk

  • Bay Watcher
  • Love! <3
    • View Profile
    • Portuguese blacksmithing forum!
Re: Let's Play MegaMek (Against the Bot campaign)
« Reply #233 on: November 27, 2015, 06:20:51 pm »

Also, what to do with Astechs? Is the Astech skill worth anything? Or do we just wait for them to get 5xp and then give them some other skill that seems useful?

Rince Wind

  • Bay Watcher
    • View Profile
Re: Let's Play MegaMek (Against the Bot campaign)
« Reply #234 on: November 27, 2015, 06:31:59 pm »

Also, what to do with Astechs? Is the Astech skill worth anything? Or do we just wait for them to get 5xp and then give them some other skill that seems useful?

You can save one Astech...but as those don't seem to cost anything (wonder why they work for free, but then, the others mostly only want very little money as well) it doesn't really matter. I have a 3 year old toddler with 3 xp now, I wonder if I can set her into a mech as soon as she has 10, or a vehicle with only 5XP. :D
Logged

Neonivek

  • Bay Watcher
    • View Profile
Re: Let's Play MegaMek (Against the Bot campaign)
« Reply #235 on: November 27, 2015, 06:51:13 pm »

Hard to avoid the penalty for no dropship under the interstellar rating.

Given they can easily be worth far more then your entire company combined... there is a reason why a lot of DMs just sort of let the players find a junky rusted up Dropship.

And to those wondering it is fantastically rare to actually take someone else's Dropship. Ignoring that you REALLY don't want to fight one... Most people consider Dropships to be so valuable that they keep them as far away from battle at all times.

I hope I am getting my terminology correct.
« Last Edit: November 27, 2015, 06:53:08 pm by Neonivek »
Logged

EuchreJack

  • Bay Watcher
  • Lord of Norderland - Lv 20 SKOOKUM ROC
    • View Profile
Re: Let's Play MegaMek (Against the Bot campaign)
« Reply #236 on: November 27, 2015, 09:36:45 pm »

Hard to avoid the penalty for no dropship under the interstellar rating.

Given they can easily be worth far more then your entire company combined... there is a reason why a lot of DMs just sort of let the players find a junky rusted up Dropship.

And to those wondering it is fantastically rare to actually take someone else's Dropship. Ignoring that you REALLY don't want to fight one... Most people consider Dropships to be so valuable that they keep them as far away from battle at all times.

I hope I am getting my terminology correct.

Sounds correct to me.  Although the Dropship under Intersellar rating needs Mek bays to count, I think, so it would be hard to make one so decrepit to not be worth 2.5 companies of starter mechs.

RedKing

  • Bay Watcher
  • hoo hoo motherfucker
    • View Profile
Re: Let's Play MegaMek (Against the Bot campaign)
« Reply #237 on: November 27, 2015, 10:50:07 pm »

I would have to say I'm pleased with Konrad's performance so far.
BTW, a mech getting behind me isn't that worrisome. That's what Flip Arms is for. In the instance in the last battle, I could have flipped arms and tore him a new one at short range. One of the reasons I love the Jenner. Mobile enough to avoid being outflanked by most mechs, and enough firepower to put a hurt on mechs which are fast enough to do it.
Logged

Remember, knowledge is power. The power to make other people feel stupid.
Quote from: Neil DeGrasse Tyson
Science is like an inoculation against charlatans who would have you believe whatever it is they tell you.

Hanzoku

  • Bay Watcher
    • View Profile
Re: Let's Play MegaMek (Against the Bot campaign)
« Reply #238 on: November 28, 2015, 12:24:16 pm »

Jenner and mechs with flipping arms:

I'm always nervous about it, mostly because of how much thinner rear armor is compared to front armor. The fact you can shoot back at 100% effectiveness doesn't deter the AI as much as it might a human player.

DropShip: I've been considering having the Captain of the Gladius strike up a long-term relationship with the unit, but given we want to go combined arms, we need something like a Colossus if we want to keep everyone aboard the same DropShip.

Astech/Dependents: They're mostly just placeholders until they gain enough XP to specialize into something more useful.

Administrator: that's true, we can game the Administrator thing, but I'm not spending precious, precious XP on our mechs or techs on Administrator duties until they're elite-skilled. :P

Script: Thanks! I'll try that out for the next battle. Zhou's Scout Lance is getting backup, and the enemy is focused on running, so hopefully it won't go too badly. Still, those Pegasus' can ruin someone's day if they get lucky with those SRM packs.
Logged

Knave

  • Bay Watcher
    • View Profile
Re: Let's Play MegaMek (Against the Bot campaign)
« Reply #239 on: November 28, 2015, 01:04:57 pm »

Hoping I get some payback for the drubbing the Pegasus/Blackjack gave me last battle!  :'(
Logged
Pages: 1 ... 14 15 [16] 17 18 ... 40