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.

Thursday, November 24, 2016

Windows 10 Delivery Optimization Service

Ok so how the heck didn't I know this was a thing?

https://privacy.microsoft.com/en-US/windows-10-windows-update-delivery-optimization

From that site

How is my PC used to send apps and updates to other PCs?
Delivery Optimization downloads the same updates and apps that you get through Windows Update and the Windows Store. Delivery Optimization creates a local cache, and stores files that it has downloaded in that cache for a short period of time. Depending on your settings, Windows then send parts of those files to other PCs on your local network or PCs on the Internet that are downloading the same files.

So I'm essentially seeding windows updates from my home PC? Which is great and all, a really efficient use of resources... For the people trying to distribute the updates.
Me I guess I've gotta suck up the rest of the month (22 days) with no download allowance. How generous of me.

Running with the powershell theme that we're all about here... Here's how you would stop that;

Get-Service DoSvc | Set-Service -StartupType Disabled