Friday, March 6, 2020

Ep 34: Top Faves With Dave Goes Digital Is Live!

Ep 34: Top Faves with Dave goes digital

https://soundcloud.com/user-989538417/ep-34-top-faves-with-dave-goes-digital

Dave Tubbs, Nick Nerthery and I talk about military-themed video games.

Join the conversation at https://theveteranwargamer.blogspot.com, email theveteranwargamer@gmail.com, Twitter @veteranwargamer

Follow Dave on Twitter! @FrmrSldrFgtPlyr

Try Audible for your free audiobook credit by going to http://audibletrial.com/tvwg

New Segment - Stump Jay! Dave's attempt to stump Jay took 308 milliseconds to solve.
Maori Wars Empress Miniatures - http://www.empressminiatures.com/page11.htm

Emu Wars Eureka Miniatures - http://www.eurekamin.com.au/product_info.php?cPath=131&products_id=13353

SCW Empress - http://www.empressminiatures.com/page9.htm

Top Faves
Myth: The Fallen Lords - http://projectmagma.net/what/
Gog - https://www.gog.com/
Wolfenstein 3D - http://3d.wolfenstein.com/game_NA.php
Starcraft: Brood War - https://starcraft.com/en-us/
War Thunder - https://warthunder.com/en
Wolfpack - https://www.emuparadise.me/Abandonware_Games/WolfPack_(1990)(NovaLogic)/95670
UBoot Kickstarter - https://www.kickstarter.com/projects/phalanxgames/uboot-the-board-game
Captain Sonar - https://www.asmodee.us/en/games/captain-sonar/
Red November - https://www.fantasyflightgames.com/en/products/red-november/
Close Combat: A Bridge Too Far - https://www.gog.com/promo/20180206_launch_promo_close_combat
Ghost Recon: Advanced Warfighter - https://www.gamestop.com/xbox-360/games/ghost-recon-advanced-warfighter/39276
Axis & Allies CD - http://www.harrisgamedesign.com/phpBB3/viewtopic.php?t=2268
Company of Heroes -  http://www.companyofheroes.com/
Dawn of War - https://www.dawnofwar.com/
Halo - https://www.halowaypoint.com/en-us
Halo Fleet Battles - https://boardgamegeek.com/boardgame/176936/halo-fleet-battles-fall-reach
Diplomacy Play By Email - http://www.playdiplomacy.com/
Junta - https://www.alderacsite.com/junta/
Call of Duty: World at War - http://store.steampowered.com/app/10090/Call_of_Duty_World_at_War/
Total War - https://www.totalwar.com/
Brothers In Arms: Hell's Highway - http://store.steampowered.com/app/15390/Brothers_in_Arms_Hells_Highway/
Nick's Article - http://www.offdutygamers.com/2010/01/brothers-in-arms-hell%E2%80%99s-highway-good-enough-to-be-a-training-aid/

Music courtesy bensound.com. Recorded with zencastr.com. Edited with Audacity. Make your town beautiful; get a haircut.

(218 MB) GTA Vice City Download For Free

(218 MB) GTA Vice City Download For Free




Screenshot



System Requirements of GTA Vice City Free Download

  • Tested on Windows 7 64-Bit
  • Operating System: Windows Vista/7/8/8.1/10
  • CPU: 800 MHz Intel Pentium III or 800 MHz AMD Athlon or 1.2GHz Intel Celeron or 1.2 GHz AMD Duron processor
  • RAM: 512MB
  • Setup Size:218 MB
  • Hard Disk Space:450 MB












Thursday, March 5, 2020

Shattered Apollo (XCOM Files)

PFC Tom Shaw, March 1st
They told us we were the first humans to kill a creature from outer space. They told us we were heroes. They told us we were the best humanity has to offer to fight off this invasion. I'm going to be honest with you here and tell you, I don't really think any of that is true. These guys knew the aliens were coming. They must have known for a while. The XCOM project had been dormant for years before they came and picked us up and told us we were chosen to protect humanity. It's possible no one had seen or fought an alien before us, but then how did they know what to expect? How did they know when to expect it? We certainly weren't heroes. Most of us were just dumb kids who knew how to shoot. Yeah, we were trained to kill each other, but not one among us had been trained to repel alien invaders with death rays. Hell, I don't even really know what plasma is and I've been covered in the stuff.

You're here to talk about that night, right? I relive that night a lot in my nightmares. It's difficult to talk about for a lot of reasons, but as the squad leader of the first human beings to engage and defeat an alien threat - well I'm getting used to being asked about it. Well, here goes.

We were flown from the Cheyenne Mountain complex to Vancouver late on the night of March 1st. Aliens had touched down at a shipping warehouse and were in the process of abducting any humans unfortunate enough to be out that late. None of this junk sounded real to me, by the way. Here I was leading this team and I wasn't even convinced we were going to be fighting what they said we'd be fighting. I'd never seen an alien or a UFO. This was the stuff of TV shows and silly documentaries on conspiracy theories. How could this crap be real? It felt like a dream flying out to Vancouver that night. It felt like a dream until our boots hit the ground.

The Landing Zone
We dropped down on the street outside the parking lot of the warehouse. The lot itself was fenced in with a stone wall creating a bit of a fortress for these aliens to hide in. We could hear some damn strange noises coming from beyond that wall. That's when most of us knew that this was really happening. You can be dropped into a foreign country where you don't speak a word of the local language, but you know those sounds coming from the other side of the wall are human voices speaking human words that you just don't understand. This was not like that. No, sir. I can't even begin to describe these sounds to you. They were like nothing I'd ever heard on Earth. This was really happening.

First Contact
Grace was the first to lay eyes on an alien - Private Grace Russell, my fellow American that night. As she took up a position against the wall and moved forward to the entrance of the lot, she spotted three little greys working on one of their abduction pods. I guess they store humans inside these things for transportation. The science team understood more about that than I ever did, but we just called them abduction pods. Anyway, these aliens saw Grace and took up defensive positions behind the pod and some nearby cars. My Brazilian brother, Julio "Burrito" Brito, took up a position across from Russell at the entrance to the lot.


The Great Kobayashi Grenade
I couldn't see a damn thing from where I was pressed up against the wall, but the next thing I know I'm hearing the bizarre sizzling sounds of these plasma pistols firing on my team. Russell and Brito open fire, but they're basically exchanging rounds with the aliens shooting their green ooze back at us. That's when Shinji Kobayashi - no one even knew this dude until that night. This guy really kept to himself at the base. He barely spoke a word of English to anyone. He was definitely a loner. So this guy, Kobayashi, decided to sneak up along the outside of the wall and toss a grenade over the top on to the aliens' positions. The crack of his anti-personnel grenade marked a stop to the plasma pistols sizzling shots, but Russell could see two were wounded, but none were killed. Burrito and I slipped into the parking lot in this short window of opportunity.

Man, the first time I saw a grey - hunkered down behind that abduction pod, staring down at the shrapnel out of its body - I just fired on the thing. I ended its life. That thing didn't even see me sweep in from around the corner. Yeah, as far as anyone can tell me, I'm the first guy on Earth to take one down. I barely even got a good look at the thing before putting a hail of bullets into its small grey body. There was a certain exhilaration among the team knowing that our simple ballistic weapons had defeated these technologically superior beings with futuristic, space rayguns. Sadly this small moment of victory was diminished by the sounds of heavy plasma fire coming from further down the street.

Kobayashi Comes Under Fire
Private Kobayashi's bold maneuver had left him alone and exposed. He was pinned against the wall farther up the road and barely holding back four greys who were trying to gain a strategic position behind our squad. Knowing this, Burrito rushed across the parking lot toward the warehouse hoping to end our conflict inside the compound swiftly. The aliens were wounded and distracted by the loss of one of their own. They didn't even see him get in close and mow down a second alien hiding behind a car in shock. Grace had only reported three aliens in the lot, so I felt confident that Private Brito and I could pincer the last one on our own. I sent Russell, Rojas and Marin to backup Kobayashi on the street. You know, I think about this moment often and wonder if splitting up the squad had been a mistake. That might have been where things went truly wrong for me and Marin, but if I hadn't sent them, then Kobayashi would probably have died in the streets of Vancouver that night.

Burrito Gets the Drop on This Alien
As Julio and I pushed forward in the parking lot searching for that final alien, Russell, Rojas and Marin made their way up the street toward Private Kobayashi. We heard Marin nscream out in pain from our position and it still sends chills down my spine. Julio and I thought she was dead. As far as we understood, no one had ever been hit by these death-rays so we expected the worst. Rojas came over the radio, though, saying she'd been hit but she was still alive. She even managed to take one of the aliens down before falling back behind a car to rest. Adriana Marin was tough.

As far as I understand, while the aliens were distracted by Private Marin, Kobayashi was able to take up a new position across the street - rushing away from the wall where he had been pinned down. From there he was able to take down an alien firing on Marin and Rojas with ease. Although Marin was hurt, it sounded to us like the firefight on the street was turning in our favor. We could hear the aliens shrieking their horrible sounds and scattering back to defensive positions further down the lot. Private Brito and I obviously wanted to pin the aliens down, but before we could rejoin Kobayashi we had to take care of our immediate enemy. We found the final alien of the initial squad hiding behind a yellow car. I took some shots that missed, which to this day still haunt me. That damn yellow car is one of the last things I remember that night. After that, things go dark.

Just Before Things Go Dark
The alien that Julio and I were tracking was leading us into an ambush. Julio told me later while I was in the med-bay that three aliens popped out of the warehouse itself right on top of my position. One of them fired several shots into my left side, nearly covering me in that burning green plasma. I went down hard and Julio thought I was dead right then and there. I don't have any memory of this, you know? The last thing I can remember is missing that damn bastard who led me into the trap. I guess after I fell, Brito rushed up taking shots on my attacker and killing it. He said I was bleeding out right there in the lot. He reported over the radio that if they couldn't get me on the skyranger soon, and rush me to medical attention I was a goner.

Kobayashi Coming in Hot
Now, from what I understand, once Burrito reported I'd been shot down, Kobayashi took charge of the team on his side of the wall. To this day, I never heard the guy speak, but if you hear Grace tell it, without Kobayashi's leadership I wouldn't be here today. She makes it sound like Shinji single-handedly killed the rest of the aliens in some kind of maddened rage, which makes Julio laugh every time we bring it up. All he would tell me is that Shinji led his sub-squad around the northern end of the wall and closed in behind the ambush in a pincer attack with Brito. Together, their counter-ambush wiped out the rest of the greys on site and we were able to be extracted soon afterward.

That's really all their is to tell. The six of us took out ten greys. Marin was wounded, and I was rendered unconscious. Technically, I was leading the mission and I got the first kill so some people think I'm a hero. Personally, I know it could have gone better. I'm still kicking myself for walking into that trap like a goddamn puppet on a string. It was my leadership that got Marin hurt, too. Kobayashi was the real hero that night as far as I'm concerned and I don't think I'm alone in that regard.


  • From an interview with Tom Shaw, US Special Forces, Leader on Operation Shattered Apollo



XCOM Report - March 1, 2015 - "Shattered Apollo" 

PFC Tom Shaw (USA) - Squad Leader
  • Confirmed Kills: 1 (Sectoid)
  • Condition:  Gravely Wounded
  • Earned Promotion 

PFC Grace Russell (USA) 

  • Confirmed Kills: 1 (Sectoid)
  • Earned Promotion 

PFC Roman Rojas (Guatemala)
  • Confirmed Kill: 2 (Sectoid)
  • Earned Promotion 

PFC Adriana Marin (Moldova)
  • Confirmed Kill: 1 (Sectoid)
  • Condition:  Minor Wounds
  • Earned Promotion 

PFC Shinji Kobayashi (Japan)
  • Confirmed Kill: 3 (Sectoid)
  • Earned Promotion 

PFC Julio Brito (Brazil)
  • Confirmed Kill: 2 (Sectoid)
  • Earned Promotion 

About London By J. Ewing Ritchie

About London by J. Ewing Ritchie

Tuesday, February 25, 2020

Tech Book Face Off: Programming Massively Parallel Processors Vs. Professional CUDA C Programming

After getting an introduction to GPU programming with CUDA by Example, I wanted to dig in deeper and get to know the real ins and outs of CUDA programming. That desire quickly lead to the selection of books for this Tech Book Face Off. The first book is definitely geared to be a college textbook, and as I spent years learning from books like this, I felt comfortable taking a look at Programming Massively Parallel Processors: A Hands-on Approach by David B. Kirk and Wen-mei W. Hwu. The second book is targeted more at the working professional, as the title suggests: Professional CUDA C Programming by John Cheng, Max Grossman, and Ty McKercher. I was surprised by both books, and not in the same way. Let's see how they do at teaching CUDA programming.

Programming Massively Parallel Multiprocessors front coverVS.Professional CUDA C Programming front cover

Programming Massively Parallel Processors

The polite way to critique this book is to say, it's somewhat verbose and repetitive, but if you can get past that, it has a lot to offer in the way of example CUDA programs that show how to optimize code for the GPU architecture. A slightly less polite way to say that would be that while this book does offer some good code examples, the writing leaves much to be desired, and much better books are out there that cover the same material. The honest assessment is that this book is just a mess. Half the book could be cut and the other half rewritten to better explain things with clearer, non-circular definitions. The only good thing about the book is the code examples, and many of those examples are also redundant, filling the pages of the book with lines of code that the reader has seen multiple times before. This book could have been a third the length and covered the same amount of material.

Even though that last bit was a pretty harsh review, we should still explore what's in the book, if only to see how the breadth of material compares to Professional CUDA C Programming. The first chapter is the normal introduction to the book's material, describing the architecture of a GPU and discussing how parallel programming with this architecture is so different than programming on a CPU. The verbosity of this chapter alone should have been a clue that this book would drag on and on, but I was willing to give it a chance. The next chapter introduces our first real CUDA program with a vector addition kernel. We're still getting started with CUDA C at this point, so I chalk up the authors' overly detailed explanations to taking extra care with novice readers. We end up walking through all of the parts of a working CUDA program, explaining everything in excruciating detail.

The third chapter covers how to work more efficiently with threads and loading data into GPU memory from the CPU with a more complex example of calculating image blur. We also get our first exposure to thread synchronization, something that must be thoroughly understood to program GPUs effectively. This chapter is also where I start to realize how nutty some of the explanations are getting. Here's just one example of them describing how arrays are laid out in memory:
A two-dimensional array can be linearized in at least two ways. One way is to place all elements of the same row into consecutive locations. The rows are then placed one after another into the memory space. This arrangement, called row-major layout, is depicted in Fig. 3.3. To improve readability, we will use Mj,i to denote the M element at the jth row and the ith column. Pj,i is equivalent to the C expression M[j][i] but is slightly more readable. Fig. 3.3 illustrates how a 4×4 matrix M is linearized into a 16-element one-dimensional array, with all elements of row 0 first, followed by the four elements of row 1, and so on. Therefore, the one-dimensional equivalent index for M in row j and column i is j*4 +i. The j*4 term skips all elements of the rows before row j. The i term then selects the right element within the section for row j. The one-dimensional index for M2,1 is 2*4 +1 =9, as shown in Fig. 3.3, where M9 is the one-dimensional equivalent to M2,1. This process shows the way C compilers linearize two-dimensional arrays.
Wow. I'm not sure how a reader that needs this level of detail for understanding how a matrix is arranged in memory is going to understand the memory hierarchy and synchronization issues of GPU programming. This explanation is just too much for a book like this. Readers should already have some knowledge of standard C programming, including multi-dimensional array memory layout, before attempting CUDA programming. I can't imagine learning both at the same time going very well. As for readers who already know how all of this stuff works, they could easily skip every other paragraph and skim the rest to make trudging through these explanations more tolerable.

The next chapter is on how to manage memory and arrange data access to optimize memory usage and bandwidth. We find that memory management is just as, if not more important than thread management for making optimal use of the GPU computing resources, and the book solidifies this understanding through an extended optimization example of a matrix multiplication kernel.

At this point we've learned the fundamentals of GPU programming, so the next chapter moves into more advanced topics in performance optimization with the memory hierarchy and the compute core architecture. Then, chapter six covers number format considerations between integers and single- and double-precision floating point representations. The authors' definition of representable numbers struck me as exceptionally cringe-worthy here:
The representable numbers of a representation format are the numbers that can be exactly represented in the format.
This is but one example of their impenetrable and useless definitions. More often than not, I found that if I hadn't already known what they were talking about, their discussions would provide no further illumination.

Now we get into the halfway decent part of the book, the extended example chapters on parallel patterns. Each of these chapters works through a different example kernel of a particular problem that comes up often in parallel programming, and they introduce additional features of GPU programming that can assist in solving these problems in a more optimal way. The contents of these chapters are as follows:
  • Chapter 7: Convolution
  • Chapter 8: Prefix Sum (Accumulator)
  • Chapter 9: Parallel Histogram Calculation
  • Chapter 10: Sparse Matrix Computation
  • Chapter 11: Merge Sort
  • Chapter 12: Graph Search
As long as you skim the descriptions of the problems and solutions, and focus on understanding the code yourself, these chapters are quite useful examples of how to write performant parallel programs with CUDA. However, the authors continue to suffer from what seems to be a mis-interpretation of the phrase, "a picture is worth a thousand words." For every diagram they use, they also include a thousand words or more of explanation, describing the diagrams ad nauseam. 

The next chapter covers how to kick off kernels from within other kernels in order to enable dynamic parallelism. Up until this point, all kernels have been launched from the host (CPU) code, but it is possible to have kernels launch other kernels to take advantage of additional parallelism while the code is executing on the GPU, an effective feature for some algorithms. Then, the next three chapters are fairly useful application case studies. Like the parallel pattern example chapters, these chapters use CUDA code to show how to take advantage of more advanced features of the GPU, and how to put together everything we've learned so far to optimize some example parallel programs. The applications described are for non-Cartesian MRI, molecular visualization and analysis, and machine learning neural networks, so nice, interesting topics for GPU programming.

The last five chapters were either more drudgery or topics I wasn't interested in, so I skipped them and called it quits for this long and tedious book. For completeness, those chapters are on how to think when parallel programming (so a pep talk on what to think about from authors that couldn't clearly describe much else in the book), multi-GPU programming, OpenACC (another GPU programming framework, like CUDA), still more performance considerations, and a summary chapter. 

I couldn't bring myself to keep reading chapters that wouldn't amount to anything, so I put down the book after finishing the last chapter on application case studies. I found that chapters seven through sixteen contained most of the useful information in the book, but the introduction to CUDA programming was too verbose and confusing. There are much better books out there for learning that part of CUDA programming. Case in point: CUDA by Example or the next book in this review.

Professional CUDA C Programming

Unlike the last book, I was surprised by how readable this book was. The authors did an excellent job of presenting concepts in CUDA programming in a clear, direct, and succinct manner. They also did this without resorting to humor, which can sometimes work if the author is an excellent writer, but it often feels forced and lame when done poorly. It's better to stick to clear descriptions and tight writing, as these authors did quite well. I was actually disappointed that I didn't read this book first, instead saving it until last, because it did the best job of explaining all of the CUDA programming concepts while covering essentially the same material as Programming Massively Parallel Processors and certainly more than CUDA by Example. 

The first chapter is the obligatory introduction to CUDA with the requisite Hello, World program showing how to run code on the GPU. Right away, we can see how well-written the descriptions are with this discussion of how parallel programming is different than sequential programming:

When implementing a sequential algorithm, you may not need to understand the details of the computer architecture to write a correct program. However, when implementing algorithms for multicore machines, it is much more important for programmers to be aware of the characteristics of the underlying computer architecture. Writing both correct and efficient parallel programs requires a fundamental knowledge of multicore architectures.
We need to be prepared to think differently about problems when parallel programming, and we're going to have to learn the architecture of the underlying hardware to make full use of it. That leads us right into chapter 2, where we learn about the CUDA programming model and how to organize threads on the device, but it doesn't end there. Throughout the book we're learning more and more about the nVidia GPU architecture (specifically the older Fermi and Kepler architectures, since those were available at the time of the book's writing) in order to take full advantage of its compute power. I like how the authors grounded their discussions in specific GPU architectures and showed how the architecture was evolving from one generation to the next. I'm sure the newer Pascal, Volta, and Turing architectures provide more advanced and flexible features, but the book builds a great foundation. Chapter 2 also contains the clearest definition of a kernel that I've seen, yet:
A kernel function is the code to be executed on the device side. In a kernel function, you define the computation for a single thread, and the data access for that thread. When the kernel is called, many different CUDA threads perform the same computation in parallel.
This explanation is the essence of the paradigm shift from sequential to parallel programming, and it's important to understand the effect it has on the code that you write and how it runs on the hardware. In addition to the excellent writing, each chapter has some nice exercises at the end. That's not normally something you find in programming books like this. Exercises seem to be left to textbooks, like Programming Massively Parallel Processors, which had them as well, but in Professional CUDA C Programming they're more well-conceived and more relevant.

The next chapter covers the CUDA execution model, or how the code runs on the real hardware. Here is where we learn how to optimize CUDA programs to take advantage of all of those independent compute cores on the GPU, and this chapter even gets into dynamic parallelism earlier in the book rather than waiting and treating it as a special topic like the last book did.

Chapter 4 covers global memory and chapter 5 looks at shared and constant memory. Understanding the trade-offs of each of these memories is important to getting the maximum performance out of the GPU because most often these programs are memory-bound, not compute-bound. Like everything else, the authors do an excellent job explaining the memory hierarchy and how those trade-offs affect CUDA programs. The examples used throughout the book are simple so that the reader doesn't get bogged down trying to understand unrelated algorithm details. The more complex examples may be thought-provoking, but simple examples do a good job of showcasing the specifics of the topic at hand.

Chapter 6 addresses streams and events, which are used to overlap computation with data transfer. Using streams can partially, or in some cases completely hide the time it takes to get the data into the GPU memory. Chapter 7 explains more optimization techniques by using CUDA instruction-level primitives to directly control how computations are performed on the GPU. These instructions trade some accuracy for speed, and they should be used only if the accuracy is not critical to the application. The authors do a good job of explaining all of the implications here.

The last three chapters weren't as interesting to me, not because I was tired of the book this time, but because they were about the same topics that I skipped in the other CUDA books: OpenACC, multi-GPU programming, and the CUDA development process. The rest of the book was excellent, and far better than the other two CUDA books I read. The writing is clear with plenty of diagrams for better understanding of each topic, and the book organization is done well. If you're interested in GPU programming and want to read one book, this one is it.


Between these two CUDA books, the choice is obvious. Programming Massively Parallel Processors was a bloated dud. It may be worth it just for the large set of example programs it contains, but there are other options coming down the pipeline for that kind of cookbook that may be better. Professional CUDA C Programming was better in every way, and really the book to get for learning CUDA programming. The authors did a great job of explaining complex topics in GPU architecture with concise, understandable writing, relevant diagrams, and appropriate exercises for practice. It's exactly the kind of book I want for learning a new programming language, or in this case, programming paradigm. If you're at all interested in CUDA programming, it's worth checking out.

Monday, February 24, 2020

Ragnarok: Gods And Giants

About how it goes every time I face a new monster.
           
Playing Ragnarok is a process of repeatedly convincing yourself that your character is getting stronger and you're getting better and then suddenly getting torn apart--quite literally--by the next level of foe. That's not quite a complaint, but it's inescapable that while the main game is about as difficult as NetHack, its worst foes would have the Wizard of Yendor for lunch.

I spent the bulk of this last session finishing up the dungeon beneath the opening forest. The dungeon consisted of 3 levels and 27 screens, and the key plot reason to be there was to obtain Odin's spear, Gungnir, from Vidur. As I closed my last session, I was having no luck even scratching Vidur let alone killing him. I tried it hastened with Potions of Speed; I tried it invisible; I tried it under the influence of a Potion of Phasing, which doubles your armor class. He still kept killing me in one round.
         
Maybe don't eat random mushrooms.
       
I took time to explore the rest of the dungeon to strengthen my character and hopefully find more valuable items. Some notes from that process:

  • The levels aren't all randomly generated. Even when they are, there are rules set on some of them to avoid exits on certain sides of the map. The Temple of Vidur on Level 3 is only supposed to be accessible from a hole on Level 2, not any of the other Level 3 maps. However, a Wand of Tunneling or a pick-axe can undo such intentions--sometimes.
  • More intrinsics: fire dragons confer fire resistance; "blurs" make you faster (although I think just temporarily); wraiths give you level increases, although at a certain point they stopped working. Through other means that I didn't fully note, I have also acquired resistances to petrification and death rays.
        
This sounds so unappealing.
       
  • There's one mushroom that fills you up when you eat it. The others are not worth experimenting with.
  • Kalvins are horrid, hateful monsters who swipe one of your eyes out with every hit. It turns out that a blessed potion of curing will regrow an eye, but I was so traumatized by my temporary blindness that the next time I found a Scroll of Extinction, I used it on Kalvins.
  • Worse that Kalvins are Zardons. They can send out a piercing wail that hits you for about 50 hit points at a time from anywhere within the dungeon level. Guess what else soon went extinct? 
           
I'm not sure I should have this kind of power.
        
  • One damned hit from a werewolf is enough to give you lycanthropy, which requires a blessed Potion of Curing to cure. Scrolls of Blessing aren't so common that I like wasting them on this.
  • On the matter of Scrolls of Extinction, I can't be the only roguelike player who has secretly thought that if I just find enough of them, I can genocide every monster in the game. 
  • I keep finding Amulets of Quickening, which double my speed and are thus incredibly useful. But they have limited duration, and then they run out, they turn into something called "Eyes of Sertrud." I have no idea if they do anything in their "Sertrud" form.
  • A couple of enemy types are capable of reproducing faster than you can kill them. One is these little tiny things called "secitts." The second are tree creatures called "faleryns." I had to abandon a dungeon level to the latter creature when they wouldn't stop multiplying, but I gained about 15 levels trying to kill them all. If I need to grind, I'm going back there.
        
You guys can have this dungeon level. I'm just trying to get to the stairs.
        
  • The best spell scroll combination I've found is a Scroll of Blessing with a Scroll of Enhancement. Use the former on the latter and then the latter on a piece of armor or a weapon, and you soon have a +13 (or higher) item. I'm carrying a +14 mirror shield and a +13 silver sword because of that combination.
  • Some of the scrolls are "diaries," which give you hints. 
         
Glad I got this hint because I would have thought this was bad.
         
  • Something weird happened with my strength. For a long time, it was stuck at 18.99, and I figured that was the highest, but at some point it rolled over to 19-something and has been continuing to grow towards 20 ever since.
  • At some point, I acquired the "Psi Blast" power. I have no idea when it happened or why. It doesn't seem to do very much damage.
            
When I hit Level 20, I got the "Fletching" skill, which allows me to make arrows out of woods. Since "Terraforming" allows me to turn any square into woods, I basically have all the arrows I want. Anyway, I took the game's offer to change classes and changed to a conjurer. I spent 20 levels as a conjurer, skipping the first offer to change, because I hardly gained any spells. Even after 20 levels, I can only cast "Set Recall" (which only helps if you have a Scroll of Recall), "Reflect," "Draw Life," and "Illusory Self."
        
Casting spells. I thought I'd have cooler spells.
        
At Level 40, I changed to a blacksmith. Somewhere along the way, I read a couple of Scrolls of Knowledge and obtained the "Fennling" skill, an extremely useful skill that lets you combine the charges of two wands of the same type. I also got "Relocation," which lets me teleport on demand, "Ironworking," and "Taming." I haven't really experimented yet with the latter two. 

When I was done exploring, I went back to the Temple of Vidur. He still killed me instantly, but this time I had one new item: a Wand of Death. It only had two charges, but one of them took care of Vidur nicely (unfortunately, not before he killed my new companion, whose release so enraged Vidur in the first place). Gungnir was on his body, and apparently I'm too weak to wield it.
         
The first god falls.
       
I headed back to the surface and found the forest absolutely swarming with monsters. They're low level, and no danger, but they're so thick that I can barely move. Thankfully, my teleportation abilities get me through. They seem to respawn as fast as I kill them. I wondered if Ragnarok had started while I was in the dungeon or whether carrying Gungnir brings the to me.
            
My reputation must have taken a hit while I was underground.
          
While I was in the forest, I happened to note an icon I hadn't seen before. I (L)ooked at it and the game told me it was Thokk, the giantess who refused to cry for Baldur, meaning I'd have to bring her soul to Hela to get Baldur out of hell. I slipped on my Ring of Soul Trapping and killed her with a single blow. I made the mistake of not taking off the ring afterwards, and her soul was immediately replaced by the new slain enemies'. That required me to reload a significantly older game and replay Vidur's temple again. The second time, I found Thokk in the same area and took off the ring after capturing her soul.
        
Part of one quest down!
        
Lacking guidance on exactly where to go, I escaped the monster hoard by jumping through a portal. It took me to Slaeter's Sea and some other outdoor maps that kind of wrap around the opening forest, including the River Vid and the River Gioll. I can just stroll across the water because I have Skidbladnir (the magic boat) in my pocket.
           
The River Vid is mostly water.
        
I soon found out that if you go the wrong way out of these areas, you wind up in the open ocean and you immediately get attacked by Jormungand. The first time I found him, he damaged me for -60302 hit points. (I had a maximum of 452 at the time.) I tried the Wand of Death on him but it didn't work. He's also inescapable. I suspect you're just not meant to go into these areas.
          
I suppose if I could kill Jormungand, I wouldn't need to do anything else.
        
But there's an enemy that roams the rivers and lakes of this "outer rim" that's almost as deadly as Jormungand: the lorkesth. He gets like 5 attacks per round and does massive damage. He's the reason I can't just blithely stroll through the areas (the other enemies are relatively easy at my level). I have to watch very carefully for their appearance and use my teleportation ability to get to a safe square of land. There's no outrunning them, since they can move three times for every move I make. If I stand one square away from the water, I can defeat them with throwing weapons and wands, but like any monster they may auto-generate at any time. If I get another Scroll of Extinction, they're going to be strong candidates.
         
I like to think I'm skipping these shurikens along the water.
          
To the west, the world ended at the Bifrost. (Which I have been unable to take seriously since I discovered it's properly pronounced "beef roast," although I think it's cool that the Norse conceived it as a rainbow. So many things in mythology are dark and dreary.) I figured it was too soon to go to Asgard, so I went the other way. Mapping in this game is complicated; I'll explain more thoroughly in my next entry. Suffice to say that the particular section of maps I was in ended to the west at the Bifrost and east at the River Gioll. The Gioll map had some patches covered in fog and a river swarming with lorkesths, but oddly no other enemies or items on the map. For some reason, my Ring of Locus Mastery doesn't work, meaning when I teleport, I just teleport to a random place. Something is also causing me to teleport frequently even if I take off my Ring of Relocation.

In the middle of a patch of fog on the east side, I ran into a character named Harbard. He was rooted in place and didn't pursue me, but if I walked up to him, he killed me in a couple of blows. So I stood a couple squares away from him and hit him with the second and last charge in my Wand of Death. His body disappeared in the fog, but when I walked and stood upon it, the game told me that there was a staircase. Taking it led me to Niflheim.
          
Hell looks a lot like Maine in April.
         
I immediately had one of those moments that I described in the opening. I had been killing fire dragons and frost dragons in single blows, so I wasn't bothered by the "hel dragon" heading in my direction--not, at least, before he killed me in one attack that left me with -1,006 hit points.
             
My brief foray into hell.
         
Upon reloading, I tried again, taking pains to avoid the dragon, and I did come across some luck when I stumbled on a Wand of Wishing with three charges. I immediately wished for another Wand of Death, and while it worked fine against the next hel dragon, it did nothing against the unique enemies of the area, including Konr Rig and Plog. I reluctantly returned to the surface and decided to try again when I was stronger, although given the fact that I've already maxed in most of the game's classes and I have incredibly powerful equipment and near-max strength (I assume, since it's now going up by decimals instead of integers), I don't know what "stronger" is going to look like.

Still, I moved north from the River Gioll to what turned out to be the mountainous realm of Jotenheim. I expected to meet a lot of giants but mostly found the same creatures from previous areas, including a lot of faleryns, who fortunately didn't seem to be as interested as replicating as they were in the dungeon. Teleport control still doesn't work, which makes it hard to explore systematically.
        
The transition to Jotenheim.
       
After I cleared most of the map, there remained an impenetrable rectangle of mountains and trees. Figuring it must hold something interesting, I used my "Terraforming" ability to change a tree into regular ground. Inside the rectangle was a small building populated by a large foe named Gymir. He had the decency not to kill me in a single blow, but his attacks were capable of doing more than 100 damage each. I quaffed a Potion of Speed and a Potion of Curing and proceeded to kill him in legitimate combat. He left behind Mimming, Freyr's sword. I'm too weak to wield it.
          
My character doesn't just chop down trees; he changes the very nature of the landscape.
          
Jotenheim continued for two maps to the north. To the north of that was "Mimer's Realm," a map of mountains, lava pools, and fog. A new monster called "iridorns" were introduced. They can kill in a single hit by ripping off your head, although they die pretty easily if you can strike them first.
          
With Mimer's Realm, I found Mimer's Well, mentioned in the backstory as the residence of the serpent Aspenth, the transformed version of Gjall, Heimdall's horn. But I need the "Swimming" ability to navigate there and I don't have it yet.
           
My character at the end of this session.
          
At some point, while exploring Jotenheim, Heimdall's voice bellowed from the sky:
              
O great heroes of the world! I must have Gjall to rally the forces of good. Time begins to grow short. The sea rages with the anger of Jormungand. The earth quakes mightily. Loki seems ready to burst his bonds. The moon and sun shall soon be swallowed by the mighty wolves Fenrir and Garm. Surtr is honing his sword of destruction. The evil ones are gathering their forces.

To speed you in your quest, I will use my powers over nature. The lesser creatures of the realm shall grow weary and despair. They shall no longer wish to battle against your might.
              
This announcement suggests the game has a time limit (and also that Heimdall just removed my ability to easily grind). I'm going to explore to the north a little further, but if nothing pans out, I'll use my Wand of Wishes for Scrolls of Knowledge and see if I can pick up the swimming ability. At this point, I have three of the six quest items. If I can get one more, it might be worth heading to Asgard.


Time so far: 15 hours

*****

B.A.T. II: The Koshan Conspiracy was going to be next, but I'm not sure how it got on my list in the first place. None of my sources call it an RPG, not even a hybrid. I can't find evidence that any commenter defended it as an RPG. I'm dumping it unless someone can make a persuasive case. The Adventure Gamer already covered it if you really need to read about it.

That means we get to our first random roll for the next game on the list! Pulling up the list, adding a "Random" column, filtering out games I've already played or rejected, we get . . . Xenus II: White Gold (2008). But of course I'm not going to play a game before its predecessor, which in this case is Boiling Point: Road to Hell (2005). That's also the first game on my list from Ukraine. I can't find mention of any other necessary precursors. But I'm just kidding because I'm not going to let myself jump that far ahead in one go. The actual next game needs to be in the next year I have not yet played, and a random selection from that year brings us to Shadowkeep 1: The Search by the same author as the Bandor series. Meanwhile, Planet's Edge gets moved up a notch to Game 358, but I'm having trouble with that one. DOSBox crashes every time I try to leave the intro screen. So the real next game might be Ishar while I try to solve that problem.

Saturday, February 22, 2020

1603, Quest For Quintana Roo!

In this episode we look at the game Quest for Quintana Roo, which I mispronounced for most of the show. Thanks to Eugenio for correcting me. I loved the game and I hope you will too. Next up is a big game, Joust by Atari via Williams. If you have any thoughts on this game, please get them to me by end of day 5th October and I'll put it in the show. Remember, just tell me your thoughts on the game, I'll take care of the game play. you can send those thoughts to 2600gamebygame@gmail.com. Thanks so much for listening!

Quest for Quintana Roo on Random Terrain
Atari Age thread on Quintana Roo Carbon Dating
Sunrise memo on Atarimania Page 1  Page 2
Ed Salvo interview by Scott Stilphen
Atari Compendium Quest For Quintana Roo Easter egg and bug page
No Swear Gamer 461 - Quest for Quintana Roo
No Swear Gamer - Quest for Quintana Roo gameplay