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

Friday, February 21, 2020

Hussar Problem Solved

I mentioned that while I was up at the Wargames Holiday Centre I was hoping to make a few purchases. Well,I did indeed, and here are a few pics of some of them. Mike has been selling off quite a few units this year in order to "slim down" the collection (for example, having nearly 180 x 36 man French btns seemed a bit OTT), and I hoped to buy a few units I'd always really liked. High on the list were these 2 regts of Austrian Hussars, 1 of 36 men and another of 48 (Wish they were both 48's).
One of the problems I've always had with the Austrian army is the hussar uniform. Now I know they invented the things, but I've always thought the Austrian hussar uniform looked more at home in Billy Smart's Circus than on a battlefield. All that purulent bright green, stupid red trousers, and yellow plumes...Give them some long, floppy shoes rather than hussar boots and they would have looked better.
Subsequently I've never had any great desire to paint any. So from years ago when I first saw these rather more subdued paint jobs they always appealed. They are all wearing overalls and the green is (a more realistic) darker shade.  Despite this they are still suitably gaudy enough for hussars, with their red shabraques with yellow piping and either bright or dark blue dolmans.
They are (naturally) the Elite miniatures castings, painted and converted by Doug Mason. All the sabres are pins soldered into the hand and are very tough. Even after many years of service up in Scarborough I only had to replace 3 swords out of 84. Doug has done plenty of bends and twists to these figures. There are only 4 basic figures here, officer, trumpeter and 2 trooper figures, and he really has imparted an incredible sense of movement to the models which really look the part of hussars at full tilt

I just did a minimal amount of work on the bases to blend them with my standard basing. Just an oilwash and highlight then some grass clumps added. I also gave them a quick new coat of gloss. I had contemplated giving them a matt coat, but they look infinitely better in their original gloss glory. I'm developing a bit of a theory about gloss V matt: Gloss varnish isn't terribly fashionable these days which is actually a bit wierd. There is no debate about it bringing out the colour and establishing a visual contrast between the figure and its base, this is simply optical fact. Nonetheless, a lot of folk "prefer" matt these days. Anyway, my theory is, that gloss varnish makes well painted figures look even better and badly painted figures look even worse, while matt varnish just dulls everything down to a more median uniformity (no pun inteneded). So for Mr Average painter (like me, and most of you) we think our stuff looks better when we matt varnish it, because gloss just shows up all the cock-ups, while matt is more....forgiving.
Anyway, thats my theory.

These figures were painted by someone who really knew what he was doing, and it shows up even better in the flesh than through the lens of my rather inadequate camera.

These weren't the only figures I bought from Mike, there are more (I just kept peeling off the tenners until he said stop) but the rest will have to wait for another time.



Free Web Site Counter
Free Counter

Atomic Ed, Short Film, Review And Interview


As the synopsis points out, Atomic Ed is about the underdog becoming the person they need to be for the situation. It is a fun-filled short ride that makes you smile, even if you might get a little squeamish because it is in a horror setting.

I saw Atomic Ed at the 2019 FilmQuest film festival (website). It was nominated for Best Foreign Short, Best Ensemble Cast, Best Score, and Best Makeup.

This is a light horror setting that doesn't reach the gore level of recent television shows. It's a family friendly story everyone can enjoy.

Synopsis: When the body of one of the members of Mark's band is found horribly mutilated, the gang lash out on Ed, who has no choice but to become the person he has always dreamed of being.

The director, Nicolas Hugon, shared some information how his youth in Paris inspired him for Atomic Ed and being a filmmaker.

What was the inspiration for Atomic Ed?

I grew up with my friend writer Cyril Delouche in a suburban suburb near Paris (we also shot the film in the neighborhood of my childhood). At that time, we were watching a lot of horror movies, mostly American. And often, they took place in neighborhoods quite similar to ours.

I think that with the passing of time, my memories of youth have ended up mixing with the images of horror movies that we consume in high doses!

Atomic Ed is a tribute to all these films and my youth.

There is indeed a lot of my experience in Atomic Ed. Already, the alleyways you can see in Atomic Ed are the same ones I have walked with my mates for much of my youth.

After, of course, there is this fantasy a little cliché of the teenager in love with the girl inaccessible and finally arrives at his ends.

Me, I did not arrive, but I was not beautiful as Oscar (who plays Ed in the film)!

What project(s) do you have coming up you're excited about?

Like all the filmmakers, I would like to shoot a feature movie one day of course!

I'm already trying to shoot a new short film by doing better than the previous one.

And maybe, other projects but it's a secret for the moment!

What was your early inspiration for pursuing a career in film?

I grew up in the 80s and like all children of my age I was amazed by all the movies of this era Spielberg/Lucas/Zemekis. Films where the marvelous arose in the everyday life of teenagers. I think about The Goonies, Gremlins, Back to the Future. But also, the first Star Wars.

At the time, I did not even ask myself the question of how we made movies, I let myself be transported and then that's all. Then, I think I needed more and stronger emotions and I really became passionate about genre cinema.

I was traumatized by films like Robocop, The Exorcist, or Brain Dead that I discovered very young and that's when I really wondered how these people make movies. So, I watched the movie with another, more technical look, and then one day my dad bought a camcorder to shoot family movies. I started like that when I was 12, shooting horror movies in my parents' house and garden, splashing my friends with a liter of ketchup!

What would be your dream project?

This one, I have not dreamed of it yet!

I already dream of continuing to do what I do, I still have a lot to improve.

And maybe start shooting movies a little bit longer!

What are some of your favorite pastimes when not working on a movie?
Cinema is a very time-consuming activity that tends to intrude much on privacy. When I do not make a film, I look a lot, I also discuss a lot with my friends about cinema. But I also find time to read, to see my friends, to play video games and to take care of my wife and my son.

What is one of your favorite movies and why?

Robocop of Paul Verhoven. This film, as I said earlier, traumatized me when I saw it when I was barely 10 years old. All this graphic violence, I did not feel well. Then, with time, he fascinated me, I discovered the second degree and the double reading that was hidden behind this film, which seems really nagging.

Since then, I watch it very often, for me it's a perfect film in many ways: the clarity of the screenplay, the rhythm, the structure of the film, the special effects, the emotions it summons to me.

This is the movie I would have dreamed of doing!

You can watch the trailer for Atomic Ed on Vimeo (link).

Find out more about Atomic Ed on

IMDb (link)

Facebook (link)

Instagram (link)

I'm working at keeping my material free of subscription charges by supplementing costs by being an Amazon Associate and having advertising appear. I earn a fee when people make purchases of qualified products from Amazon when they enter the site from a link on Guild Master Gaming and when people click on an ad. If you do either, thank you.

If you have a comment, suggestion, or critique please leave a comment here or send an email to guildmastergaming@gmail.com.

I have articles being published by others and you can find most of them on Guild Master Gaming on Facebookand Twitter(@GuildMstrGmng).

 

Thursday, February 20, 2020

About Hyper Casual Games

In 2014, I wrote a post titled "Casual games for casual players", analyzing important features a good casual game must have. This category of games had a boom with the rise of mobile media (smartphones and tablets). Probably the most iconic case that we can discuss here is the Angry Birds phenomenon: a beautiful game with rules you can understand in a second, a high level of replay, and available for a cheap price. Angry Birds became a model in the app stores and after that we could observe a great number of casual games that explored different business models using these simple mechanics.



We have many casual games in different platforms today, but there's a new idea rising strongly: the hyper casual games concept. These categories of games, according to Johannes Heinze are "games that are lightweight and instantly playable". Note the difference: the hyper casual are instantly playable; this makes a big difference in today's gaming context.

Companies like Voodoo and Ketchapp Games (both French) are two good examples of how to explore business models using hyper casual games. They are creating very simple and addicting games. You play them and, if you like them, there's a possibility to buy a premium version of the game without ads, or you can play it and watch the ads.

One good example of this kind of game is the awesome Helix Jump (one of my favorites). Check the gameplay trailer below:



Here in Brazil, companies like Sioux are investing in this gaming category. They launched a very interesting title named Overjump. Do the exercise: watch the video and notice that in the first 8 seconds you already understand the mechanics.



The most important point of this discussion is the rising of hyper casual games parallel to a big triple A titles showing us that we are living a great moment in the gaming industry: a moment full of opportunities.

#GoGamers

Something Oddish In Cerulean

Local Cerulean trainers were hosting a tournament of sorts on Nugget Bridge, but by the time I got there the tournament was over. In fact, the tournament was exposed as a recruiting ring for Team Rocket and was overturned by a trainer quite a few years younger than me. Although Team Rocket was gone, the trainers were still there accepting challenges and I took them on one by one without hesitation or incident. After trouncing Wolf and the Nugget Bridge trainers, I was feeling pretty proud of my team and confident in our ability to succeed.
Beyond Nugget Bridge which spans Route 24 was a short hike along Route 25 to the Cerulean Cape. Bill lived out there in a small cottage and welcomed trainers to come visit and discuss all things Pokémon with him. Just west of Nugget Bridge, I caught a second Pidgey whom I named Charlie. He was a bit stronger than Kiwi when we first met, but now that Kiwi had evolved into Pidgeotto, Kiwi was a star member of my team.
League rules dictate that trainers can only carry six Pokémon at a time in Kanto, so Charlie would soon be stored away waiting for his day to train and battle alongside his teammates. The sixth member of the team was about to be Arnold, a small Oddish I caught on Route 25. This tiny little sprout was unexpectedly strong. He single-handedly toppled an Onix in his very first trainer battle on our way to meet Bill. I knew in that moment that he would be a great asset when I went to challenge the Cerulean Gym, which was known for its fierce water-type Pokémon.

When I first met Bill, he was recovering from some rare illness. He assured me it was not contagious, but he was still not feeling quite himself. I could tell he didn't really want to talk about it, so instead I steered the conversation to our absolute favorite topic: Pokémon. Bill is a self-proclaimed PokéManiac and no one has ever really challenged it. His obsession with Pokémon has very few rivals.
Bill is credited with inventing and operating the Pokémon Storage System that was available in Kanto at the time, and that system's descendants are still in use today. At that very moment, Charlie was sitting in a subsection of the Pokémon Storage System that was allotted to me for my own personal Pokémon needs. Much like the Pokédex, this would prove to be an invaluable tool to help me kick start the Pokémon Sanctuary that I run today. It's because of people like Professor Oak and Bill that Kanto was such a tremendous hot spot for aspiring Pokémon trainers back then and is still somewhat of a legendary region to this day.
Bill was delighted at my idea for a Pokémon Sanctuary. He was also interested in my resolve to not let any Pokémon faint in battle. He was shocked I was able to let go of Rascal (Sr.) and Nibbles. I assured him then and I assure you now, it was not easy. It truly broke my heart, but it was an important part of my growth as a trainer. Bill offered to help in any way he could with my project. He also offered to look after or find aspiring new trainers to take care of any future Pokémon I was forced to release by my own personal code. His love for all things Pokémon was abundantly clear.
Bill was eager to show me his favorite Pokémon, one I had never heard of before meeting Bill. He had numerous files on his computer system about the Pokémon Eevee, and Bill had been doing research into its wide variety of evolutions. Bill was a leading expert on the Kanto Evolution Stones which included Moon Stones first found on Mount Moon, as well as Fire, Water, Thunder and Leaf Stones. More would be discovered in time, but these were among the first known to transform certain Pokémon when exposed to their faint light. Bill showed me some pictures and sketches of Flareon, Vaporeon and Jolteon.
Bill and I spent several hours passing the time in conversation, but eventually it was time to head back to Cerulean City to rest up before my gym challenge. I was really happy I had taken the time on my trip to meet Bill and shake his hand. As I said, I couldn't have gotten where I am today without Bill and his amazing work on the Pokémon Storage System.

The day after I met Bill, I challenged Misty at the Cerulean City Pokémon Gym. Unlike my devastating loss to one of Brock's junior trainers, my new friend Arnold made short work of the two trainers in Misty's gym. They simply couldn't hurt him more than his own absorption could repair. All the Pokémon of the Cerulean City Gym were powerless against Arnold's ability to drain their energy and bolster his own.
I was worried about facing Misty. I had been warned that her Starmie was one of the most powerful Pokémon in the region, so I came prepared. After defeating Misty's Staryu efficiently with Arnold, I put her Starmie to sleep with a soothing powder that spreads from Arnold's leaves. Though, Starmie's powerful psychic attacks had the potential to cripple or even knock out Arnold instantly, it simply slept peacefully while Arnold nuzzled up to it and sapped its energy. Misty was soundly defeated and Arnold was the super star of the Cerulean Gym challenge.
It wasn't the most exciting series of battles in Kanto, but sometimes strategy and planning is more important than a fast paced battle of strength and determination. I was lucky to have found such a great Pokémon like Arnold just a day or two before challenging a tough gym leader like Misty.

Current Team:
Attacks in Blue are recently learned.


Bill's Storage: Charlie (Pidgey)

Sid Meier's Civilization V: Complete Edition Free Download

Sid Meier's Civilization V - is a 4X video game in the Civilization series developed by Firaxis Games. The video game was released on Microsoft Windows in September 2010, on OS X on November 23, 2010. Free download.


Featuring: Become Ruler of the World by establishing and leading a civilization from the dawn of man into the space age: Wage war, conduct diplomacy, discover new technologies, go head-to-head with some of history's greatest leaders and build the most powerful empire the world has ever known. The inviting presentation: Jump right in and play at your own pace with an intuitive interface that eases new players into the game. Veterans will appreciate the depth, detail and control that are highlights of the series. Download this game.
1. FEATURES OF THE GAME

In this cool video game, jump right in and play at your own pace with an intuitive Interface that eases new players.
Ultra realistic graphics showcase beautiful lush Landscapes for you to explore, battle over and claim as your own.
Compete with players all over the world or locally in LAN matches you can mod the game in unprecedented ways.
More compatibility: Civilization V operates on many different systems, from the high end Desktop to many laptops.
New features: New hex-based Gameplay grid opens up exciting new combat and build strategies plus many more.

Game is updated to latest version

Included Content

▪ Sid Meier's Civilization V - Gods and Kings DLC
▪ Sid Meier's Civilization V - Explorer's Map Pack
▪ Sid Meier's Civilization V - Brave New World DLC
▪ Sid Meier's Civilization V - Babylon (Nebuchadnezzar II) DLC
▪ Sid Meier's Civilization V - Cradle of Civilization - Mediterranean DLC
▪ Sid Meier's Civilization V - Cradle of Civilization - Asia DLC
▪ Sid Meier's Civilization V - Cradle of Civilization - Americas DLC
▪ Sid Meier's Civilization V - Cradle of Civilization - Mesopotamia DLC
▪ Sid Meier's Civilization V - Spain and Inca Civilization and Scenario Pack
▪ Sid Meier's Civilization V - Polynesia Civilization and Scenario Pack
▪ Sid Meier's Civilization V - Denmark - Vikings Civilization and Scenario Pack
▪ Sid Meier's Civilization V - Korea Civilization and Scenario Pack
▪ Sid Meier's Civilization V - Wonders of the Ancient World Scenario Pack
▪ Sid Meier's Civilization V - Scrambled Continents Map Pack
▪ Sid Meier's Civilization V - Scrambled Nations Map Pack
▪ Sid Meier's Civilization V - Conquest of the New World Deluxe Scenario

2. GAMEPLAY AND SCREENSHOTS
3. DOWNLOAD GAME:

♢ Click or choose only one button below to download this game.
♢ View detailed instructions for downloading and installing the game here.
♢ Use 7-Zip to extract RAR, ZIP and ISO files. Install PowerISO to mount ISO files.

SID MEIER'S CIVILIZATION V: COMPLETE [v1.0.3.279 + MULTi10 + ALL DLCs] - LINKS
http://pasted.co/af29b5ae      
PASSWORD FOR THE GAME
Unlock with password: pcgamesrealm

4. INSTRUCTIONS FOR THIS GAME
➤ Download the game by clicking on the button link provided above.
➤ Download the game on the host site and turn off your Antivirus or Windows Defender to avoid errors.
➤ When the download process is finished, locate or go to that file.
➤ Open and extract the file by using 7-Zip, and run 'setup.exe' as admin then install the game on your PC.
➤ Once the installation is complete, run the game's exe as admin and you can now play the game.
➤ Congratulations! You can now play this game for free on your PC.
➤ Note: If you like this video game, please buy it and support the developers of this game.
Turn off or temporarily disable your Antivirus or Windows Defender to avoid false positive detections.








5. SYSTEM REQUIREMENTS:
(Your PC must at least have the equivalent or higher specs in order to run this game.)
Operating System: Windows 7, Windows Vista, Windows 8, Windows 8.1, Windows 10
Processor: Intel Core 2 Duo 1.8 GHz or AMD Athlon X2 64 2.0 GHz or better
Memory: at least 2GB System RAM
Hard Disk Space: 8GB free HDD Space
Video Card: 256 MB ATI HD2600 XT or better, 256 MB nVidia 7900 GS or better graphics
Supported Language: English, French, Italian, German, Spanish, Polish, Russian, Japanese, Korean, & Chinese.
If you have any questions or encountered broken links, please do not hesitate to comment below. :D