Friday, August 11, 2023

Rediscovering the Magic

I've completely fallen for a new game - Baldur's Gate 3.

I loved Larian Studios work on their game Divinity Original Sin 2, which was considered one of the best CRPGs ever made. Well, I can say with confidence that Baldur's Gate 3 goes even beyond that.

What makes Larian's games stand out is their unique approach to development. They publicly release the first act of their games in early access and take in feedback from players over the course of years. This feedback-driven process is a recipe for creating games that resonate deeply with their players.

While Baldur's Gate 3 is, of course, constrained by the inherent limitations of video gaming, the developers have done their utmost to encapsulate the unbridled chaos, creativity and horniness that can occur during a tabletop game.

There is a now famous demo Larian gave around the launch of the game. Where the parties vampire rogue has a intimate relations with a bear. But it's OK! The bear is actually a Druid using his wildshape form. For context in the lead up to a demo of the romance features they followed what the crowd wanted for each dailogue option and that's where they landed!

If that description doesn't pique your interest, then perhaps nothing will. But if it does, you're in for an incredible gaming experience.

Here are my tips for Min Maxing your own amusement. Well it's what worked for me anyway.

🌟 Shadowheart's Evolution: At first, I had Shadowheart, a Trickster Cleric, who, while handy for her healing abilities, didn't mesh at all with how I played, she seemed weak and was annoying. So, the game let me do somethign about it! I respecced her into a Shadow Monk and wow, what a transformation! Not only did this change make her an evasion tank dishing out a whopping 30 damage per round, but the Shadow Monk role also complements her backstory perfectly. She underwent this transofrmation after spending the night with my main character Karlach. They just talked ok! Stop being so quick to judge! I am not worried about this change at all as to me anyway, it makes sense in the narrative and the timing of her transformation makes total sense. Now if the monk class ever feels less impactful later on, or I feel like I a missing the heals, there's always the possibility of transitioning her into a Paladin, which would work just as well, character wise, narativly and mechanically. It's this level of adaptability and character evolution that makes the game truly shine for me.

🌟 Natural Camp Comfort: After battling through intense scenarios and facing countless foes, there's nothing like unwinding at the party camp. I decided to embrace a more natural approach, setting everyone's camp outfits to be completely without armor or clothing. It's become a quirky and lighthearted ritual. As we settle down each evening, we shed our battle gear and embrace a carefree moment of relaxation, enjoying each other's company as a tight-knit and unashamedly authentic family. Hey don't judge! It's a fun, humorous touch to our in-game dynamics. 

🌟 Karlach's Redemptive Rage: Initially, I was skeptical about playing as a tiefling, but Karlach's personality completely won me over. Her vibrant and positive voice emotes coupled with her barbarian strength create such a dynamic character. It's almost poetic — she's a tiefling escaped from avernus, literally a devil breaking free from hell's shackles, rampaging through the world with a fierce drive. But here's the twist: she's on a mission for good. After our successful rescue of the tieflings at the Druid's Grove, Karlach's fervor for justice and righteousness only amplified. She's fired up, ready to champion more noble causes, and every time she vows to uphold what's right, I can't help but beam with pride. The contrast of her heritage with her desire to do good creates a wonderfully rich character arc that's both entertaining and heartwarming.

🧙‍♂️ Gale, the Classic Wizard: I've embraced a traditional approach with Gale, modeling him after the wizards we've cherished since the days of the gold box games. I'm all about that min-max life for him; I've opted for the iconic spells that have graced many a spellbook: Level 1’s Magic Missile and Burning Hands, followed by Misty Step and Enlarge for Level 2, and who can resist the sheer power of Level 3’s Fireball and Haste? It's like rekindling an old love affair with the foundational D&D spell lists. The gratification when those level 3 spells come online at level 5? Pure, nostalgic gold. Now, I am curious about the 'Fly' spell — I'm curious to see how they've adapted this. The idea of soaring through a meticulously rendered 3D environment? I have no idea how they'd pull it off technically.

🎲 Reuniting with Old DnD Mates: One of the best aspects has been reaching out to my longtime DnD buddies for a joint session this weekend. There's an unmatched joy in adventuring alongside old comrades, and I'm buzzing with anticipation! Curious to see the characters they'll craft and the strategies they'll employ. Navigating the challenges of Baldur’s Gate 3 is bound to bring back so many memories and create countless new ones. The weekend can't come soon enough!

In essence, Baldur's Gate 3 isn't just another game; it's a heartfelt ode to every tabletop session, every character we've ever created, and every narrative we've woven over dice rolls and character sheets. It's a bridge between cherished memories and the endless possibilities of the digital frontier. To the team at Larian Studios: thank you for rekindling that old magic and letting us dive into a world where every choice matters, every character evolves, and every session brings a new story to tell. Here's to many more adventures, side-quests, and late-night gaming sessions.

See you in the Baldurs Gate! 🎲🔮🗡️


Tuesday, July 11, 2023

A Guide to becoming Hardcore

 



Yes I want to discuss further my passion for Diablo 4 with anyone who will listen - This is a game that has ascended to the peak of my gaming experiences. There's this intoxicating sense of impending danger lurking around each beautifully realized corner of this stunning artistic masterpiece. I often find myself pausing, entranced by the minutiae of the world – the torchlight reflecting from pool of blood splattered on a dungeon floor. A poetic illustration of the light triumphing over darkness? Or just really high quality horror and gore? It's a game that can at times be transcendently terrifying. 

There's nothing quite like the gut-wrenching dread when your health plummets, or the triumphant relief as you decimate the monstrous horde that almost laid you low. This ongoing struggle against an ever-looming demise is what makes Hardcore mode of Diablo 4 incredibly enticing. But you know this from my last post

As the inaugural season of Diablo 4 kicks off on the 20th of July, I plan to roll out a Hardcore character. For those of you who are daring enough to tread the same path, I'd like to offer some advice. 

1.      First and foremost, understand that death is inevitable in Hardcore mode. The world is teeming with nightmarish creatures, it is a literal battleground where Angels and Demons are locked in the eternal conflict. You are choosing to be a hero in that world. Good luck Bucko. The odds are stacked against you, but how you manage these imminent deaths will dictate your success in this game mode.

2.     For your first character start on World Tier 1. This is about setting up for the future. Take it easy to start with while you unlock all the powers that’ll make the higher tiers safer.

3.      In Hardcore, it's not about raising a single, unstoppable character, to godhood. But rather establishing a robust legacy. Even when your character perishes, they leave behind infrastructure for their successors to build upon. Therefore, the primary focus should be on building this legacy - accumulating gear, creating sets, and unlocking account wide bonuses.

4.       A viable strategy could involve having sets of gear for every ten levels or so. This way, you're always ready to bounce back after a death. Gear is the most important aspect of character power in D4. The world scales to your level so the stats on your gear is the most important differentiator of power.  Here is my rough plan of character level to item power

Level 01-10 Item Power 001-149 World Tier 1

Level 11-20 Item Power 150-339 World Tier 1

Level 21-40 Item Power 340-459 World Tier 1

Level 41-60 Item Power 460-624 World Tier 2

Level 61-80 Item Power 625-724 World Tier 3

Level 80+ Item Power 725+ World Tier 4

5.      Couple this gear plan with the Renown system - which lets you earn renown with the 5 zones in the game to unlock permanent account-wide bonuses There are 10 skill points to be had from renown they are worth securing early so new characters can be ready with the core of their build from level one.

6.      Legendary aspects are granted as rewards for completing dungeons. So they are a priority, so long as you are confident you can kill the boss at the end. Those fights can be tense. Be careful. Plan the aspects you want and weigh the risk against the reward. Again these unlocks are account wide so they are highly valuable to get early.

7.      Another consideration are the Alters of Lilith, which also provide permanent character power boosts. They too persist across characters, offering yet another leg up for your successors. Whether you choose to discover these through gameplay or follow a guide is a matter of personal preference. I followed a guide and now regret it. It’s probably more fun to discover them “in the wild”.

8.       Lastly, two items are crucial for Hardcore characters. First is the "Elixir of Death Avoidance" that grants you a second chance at life when you drop to zero health. The second, "The scroll of Escape," teleports you back to town when you're in peril. Both can save your life, but they are expensive to craft and hard to find so should be used judiciously. 

Why play a high-risk game that could end in a moment of less-than-perfect gameplay or a random disconnect? The answer lies in the thrill of survival, the joy of building a dynasty of heroes that stand against the forces of evil. Even if you die to a disconnect, if you’ve planned and prepared, you are setup for the next character to level up and fill the void left by their predecessor.

So, take the plunge into this heart-pounding journey and make the first season of Diablo 4 a memorable one! The risk is high, the journey is challenging, but the rewards? They're absolutely worth it. Happy hunting, fellow adventurers!


Thursday, June 29, 2023

Embracing the Thrill of Diablo 4's Hardcore Mode

I've embarked on an exhilarating journey, plunging into the depths of Diablo 4, discovering a thrilling facet of the game - Hardcore mode. In Hardcore, when death reaches out, it's not just a pause, it's the end. Contrasting this to the relative safety of Softcore mode, the difference is stark and deeply rewarding.

Hardcore gameplay intensifies the risk and heightens the rewards, dramatically altering the player's emotional landscape. It's a dance with peril, a battle for survival, where weeks of investment into your character culminate in high-stakes showdowns. Where the thrill of entering a fight, the panic of almost losing, and the euphoria of snatching victory from the jaws of defeat create an intoxicating gaming cocktail I hadn't tasted in a long time.

Exploring the Diablo universe from this new hardcore perspective, I found myself drawn to idea of the seasonal competitions. Playing it from a one-life-per-season perspective, one false step could rob you of the rest of that season's narrative. This presents a unique blend of thrill and dread.

I have always enjoyed the underlying narrative of Diablo universe. The ongoing battle between heaven and hell, demons and angels, this adds rich context to this struggle for survival.

Diablo 4 takes this narrative an interesting step further, introducing themes of totalitarianism - a church striving to exert control over the population to prevent demonic corruption. This adds a fascinating dynamic, where the supposed defenders of the light breed as much suffering as their demonic adversaries.

Forming a group in Hardcore mode adds another layer of intrigue. It's an exercise in social dynamics and group strategy, a shared experience of survival where camaraderie is paramount. It's important to remember that death, in this mode, is a personal consequence of individual choices. Thus, pointing fingers and laying blame has no place in the Hardcore realm.

The Diablo 4 is designed to allow players of varying levels to party up. This eliminates arbitrary level gaps and creates opportunities for dynamic gameplay between anyone of any level. Albeit with the strange irony that due this level scaling design leveling up can actually make you less potent if your gear has been neglected. DING! Wow! The whole world has levelled up with me and now I hit for LESS DAMAGE! ... Cool?

There's another consideration too. Technical issues that cause your death. Any kind of connectivity issue between you and Blizzards servers can kill your guy. I've been having periodic black outs (electrical not conciousness) and that makes me super reluctant to play my hardcore character. The veterans of the game assure me that if you play Hardcore long enough you'll eventually die to some bullshit.

Even then the way Hardcore is designed makes it an interesting planning-meta-game. There's a shared stash that persists between characters so as you upgrade your gear you put the old stuff in the stash for the next generation to use. There's also a system of unlockable powerups that persist across characters, that makes Hardcore time investment worthwhile, even if your guy dies to a badly timed lag spike. So, the looming sense of dread that your character is going to die is offset by the fact they can bequeath the fruits of their toil to the next generation of characters.

It's been a long time in gaming since I have felt the heart pumping adrenaline rush that hardcore gave me. It has awakened a fire in my gamer soul. A passion for in-game-achievement that has been absent for a long time.  

So, to those of you on the fence about Hardcore mode or Diablo 4 in general, I urge you to take the leap. Join our ranks and find your place in this captivating world. Experience the thrill, the fear, the satisfaction - it's the fantasy RPG experience you've been waiting for.

The Hardcore journey is demanding, but the rewards are plentiful. If you're ready for a true test of skill and resilience, Diablo 4's Hardcore mode awaits.

Until then, keep your wits about you, and may your blade stay sharp and your spells potent. Let the adventure begin. 

Disclaimer: ChatGTP was used to edit this post for clarity

Sunday, May 12, 2019

Ivanti Service Manager and PowerShell? Oh YEAH!

I discovered the excellent PSHEATAPI a few months ago. Ever since then whenever I have had a spare minute I have been poking around inside the API interface in our ISM tenant.

It wasn't long until I had a light bulb moment. Where I finally truly appreciated how well designed mature Enterprise software can be. Unlocking this API is a game changer for us.

Let me give some background. I was an early adopter of PowerShell. Over the last decade, I've enjoyed building tools that people in my teams have been able to use to streamline their work and make life easier.

I always faced the problem of not being able to put those tools in front of our normal user base. 4 years ago I knuckled down and learnt MVC and c# so I could do that. I built some rudimentary web interfaces that wrote back to a SQL database then read from that database in PowerShell to initiate automation scripts.

This never really gained traction beyond the first few that I built because it simply took too long and was quite labour-intensive. So time to market for new features was too long and it was never really worth investing in.

That all changed when I realised ISM and its request offering module could be called from a simple PowerShell script.

That was my lightbulb moment! When I realised the service management platform could serve as the user interface. While it could also be the backend and a system of record so we know who did what when!

Over the past couple of months, I've been building out a simple framework. The idea is to make it quick and easy to create a form in Ivanti Service Manager that our users can enter values into. Then pull that form from PowerShell and feed user input into some self-service automation script.

Well, it's built now and running 8 service requests in production.  Our time to market for a new self-service feature is now about an hour, down from 1 to 2 weeks. Making self-service features a great time investment.

I'm really excited about this. I don't know if this is old territory for a lot of people. The combination seems really obvious now that I'm looking at it. If it's not already in widespread use in large IT shops this or something like it will be soon.

If you're already a customer of Ivanti service manager in the Cloud and have a large Library of PowerShell scripts you should have a look at this. You don't have to do it the way we're doing it here. But if you only take one thing away from reading this. Let It Be the knowledge that;

It is now ridiculously easy to build enterprise-grade self-service applications.

A copy of the framework is available on GitHub. https://github.com/benhaslett/OhBe

Monday, June 5, 2017

Everyday Powershell - Part 43 - Automatically Resume Failed HyperV Replication

Everyday Powershell, as useful as HyperV Replication.

So on our 2012R2 HyperV boxes we occasionally get problems with replication. Usually after a Windows Update related reboot.


So we could go through each of the VMs failed Replications, right click, resume replication but what are we? Barbarians?!?

We've scheduled the following script  to run on our hypervisors;

$hypervisor = "someserver"

$vms = Get-VMReplication -ComputerName $hypervisor | where health -eq "critical" | where state -ne replicating | where name -ne "someservertoexclude"

foreach($vm in $vms){
    while((Get-VM -ComputerName $hypervisor -VMName $vm.name | where ReplicationState -ne "disabled" | get-vmReplication).state -ne "Replicating"){
        $vm.name
        (get-VM -ComputerName $hypervisor -VMName $vm.name | where ReplicationState -ne "disabled" | get-vmReplication).state
        if ((get-VM -ComputerName $hypervisor -VMName $vm.name | where ReplicationState -ne "disabled" | get-vmReplication).state -ne "Resynchronizing"){
            get-vm $vm.name -ComputerName $hypervisor | Resume-VMReplication -Resynchronize
            get-vm $vm.name -ComputerName $hypervisor | Resume-VMReplication -Continue
            get-vm $vm.name -ComputerName $hypervisor | Resume-VMReplication
            get-vm $vm.name -ComputerName $hypervisor | get-VMReplication
        }
        start-sleep -Seconds 10
    }
}

get-vm -ComputerName $hypervisor | where health -eq "warning" | foreach-object {Reset-VMReplicationStatistics $_.name}

So now when replication goes to hell because of a reboot, all the VMs just politley get back in line and do as they're told!

Friday, May 5, 2017

Everyday Powershell - Part 42 - Creating and populating Groups

Everyday Powershell, as useful as a loosely typed variable. In that sometime it's great others it can ruin your day!

So we're following on from last time where we learned the resolution of all the monitors we could talk to.

Now we're going to do something with that data.
import-csv C:\temp\monitoraudit.csv | where pcon -eq $true | where ScreenWidth -ne "" | ForEach-Object{
    $temp = "" | select pc, resolutionstring
    $temp.pc = $_.computername
    $temp.resolutionstring = ("PCs with screens at " + $_.ScreenWidth + "x" + $_.ScreenHeight)
    $temp
    $test = $null
    $test = get-adgroup $temp.resolutionstring
    if($test -eq $null){
        New-ADGroup -GroupScope DomainLocal -Name $temp.resolutionstring
    }
    Add-ADGroupMember $temp.resolutionstring -Members (get-adcomputer $temp.pc)
}
 
We use another foreach-object to jump over each row in our CSV
  • setup another temp object 
  • fill the temp object if useful information, PC name and a string with the resolution
  • we check if an AD group with the name of our string exists
  • if it doesn't we create the group
  • then we add the PC Name to the AD group
So what can we do with this? Well it's really useful to had AD groups with all your machines resolutions. You can;
  • See who management likes
  • Create interesting reports on which monitors should be replaced
  • Use the groups to apply policies to
The last one is what we're doing this for. We'll use these groups to target customised wallpapers, screen savers and login screens.

Friday, April 28, 2017

Everyday Powershell - Part 41 - Get Screen Resolution from remote PCs

Everyday powershell. It's not updated everyday, it's tools you could use daily.

You know sometimes you just need to know what resolution all your computers are running.
get-adcomputer -Filter {operatingsystem -like "Windows 7*"-Properties operatingsystem | ForEach-Object {
    $temp = "" | select computername, ScreenHeight, ScreenWidth, pcon
    $temp.pcon = Test-Connection $_.name -Count 1 -Quiet
    $temp.computername = $_.name
    if($temp.pcon){
        $resolution = Get-WmiObject -ComputerName $_.name -Class Win32_DesktopMonitor
        $temp.ScreenHeight = $resolution.ScreenHeight
        $temp.ScreenWidth  = $resolution.ScreenWidth
    }
    $temp
    $temp | export-csv C:\temp\monitoraudit.csv -Append
}

Check out the filter on the first line, that can be anything. We just needed Windows 7 machines.

It's a pretty easy foreach-object;

  • sets up a temp object in my favorite manner,
  • pings the machine to make sure it's up,
  • pulls the info we need from WMI
  • then bangs it out to the console and a CSV.
Hitting up each machine with a WMI query gets us fast results but it's not exactly complete. You could rejig this so that it ran as part of a login script or schedule it to run daily.

Why do we need this info? Well that's for next time when we'll do something useful with this data set we've created.