Thursday, March 19, 2020

Feeling Guilty About Gaming Deaths!!!?

I just finished Mass Effect 2 for PS3, I am years behind current games! But being years behind has the advantage of getting an awesome title like ME2 for only £2 in CeX.

I was wondering if anyone else out there couldn't help feeling a bit guilty about the fate of certain characters in this game....

If you don't know, in Mass Effect 2, depending on how you play the game and how much time you pump into the game characters will either live or die in the final chapter of the story and all at a pretty rapid succession!

For me, I felt bad when Mordin died, and again, of all things, when Garrus died, I even had a twinge of guilt at seeing Jack's mangled face.... am I disclosing here how little I put into the game, here...?

I think to be honest only Grunt, the black guy, Miranda and the DLC girl survived for me... this was surprising as I thought if you did the side quests for each character they basically would survive... this was not the case, I used Garrus all the time in pretty much every quest.... but still... he didn't make it.... any I felt a little guilty for it......

As for Grunt, I had no sympathy towards him, I had read a few minor spoiler hints and I was under the impression that you had to choose one character to kill off, to send on a suicide mission..... I had Grunt in mind for this because I figured he was the least human and most animal like..... and yet, Grunt survived!

I went down to CeX and saw Mass Effect 3 for £2, so have just bought it, I understand that characters that lived can get carried over, but those who died, they are gone forever.

There is something refreshing about this. In most games death is something that can be corrected with loading up an old save, or using a phoenix down or whatever.... but here, death is death and we have to live with the consequences of our failings to protect the characters in our team. That's something I really like because its true to life, and whilst we play games as a form of escape, I like games to have some moral teaching in them, or something to help make me a better person. Being reminded of my mortality and the mortality of my friends, and the permanence of death... they are all good things from a Catholic world view.

Remember Mordin, thou art bits, and unto bits thou hast returned.
Remember Fr Higgins you are dust and unto dust you shall return.

What Have I Been Up To?

   Personally, I have been dealing with treatment for Major Depression Disorder and ADD. After many years of denial. Meds and therapy are helping. A lot. Please don't be dumb like me - go get help if you even think you need it.

  Hobby-wise, I have been into Gaslands and KillTeam lately. Lots of terrain painted, and some more cars. Painted up the starter box for KillTeam for my sons, so a few Primaris Reaver Space Marines and some Tau Fire Warriors. Working on my own team of Genestealer Cultists because I have wanted to play them since they first appeared in White Dwarf in 1989 or so. Played some Team Yankee, and some Flames of War v.4. Have almost completed a Starfinder campaign (Against the Aeon Throne AP) that I am GMing. I play in an online Starfinder game, too. Played a big OGRE game in November. Finished up a couple of airships, but need to build stands for them. Though that has been designed.























The Shiny Trashcan Effect

Greetings from debt purgatory!

We are half way through paying off our construction debt for our expansion project started in 2014. Do you remember 2014? Fantasy Flight Games was still an independent company, Magic was going strong and the big news story was the outbreak of Ebola. Good times. Our Kickstarter did fund successfully that year. We did complete the project, albeit two years late. We did send out all the rewards, and one refund to that jackass who likes to leave me (hidden) blog comments. That saga is a whole other story (it's in the book).

Customers occasionally come in, tell us how they're great supporters of ours, how they buy all their games from us and ... holy hell, you built a second floor!!! Yes, thank you, thank you. Mmm hmmm. I stopped mentioning it was years ago. Snark is not appreciated and we need all the customers we can get. Got debt to pay down.

So how are we doing? It's a bit of a struggle making loan payments and trying to grow during a period of industry transition. There are projects I would like to do. There's a white board in my office with $20,000 worth of stuff. Yet, we just improved the store in our bid to obtain Wizards of the Coast "premium" status, and we somehow came up with the thousands to do that.

Yes, thousands of dollars for a nebulous status. However, this is exactly what I had been asking for. Recognition of hard work and capital spent to improve a venue rather than shoeboxes of cardboard (even though the cardboard is more in line with success with the WOTC model). How could I not pursue this? When motivated, we can make things happen. In the future we shall refer to this as the Shiny Trashcan Effect.





Our sales necessary for growth, the needed engine to pay off our debt, have exceeded expectations. We saw a large jump when the space was complete, but it was a one time thing (about three times bigger than projected). We immediately went back to the grind. It brought home the fact that the space is really important to a small subset of customers (20%). That money spent on doubling inventory would have seen growth over years, but probably slower growth, rather than all at once. There's also the question of whether doing nothing at all would have led to the same growth rate, considering we struggled to focus the business in the Kickstarter and construction year. No, no, this will have longer term benefits, if we can leverage them.


Anyway, we're up 25% this year, due to a number of factors, so I'll continue to fantasize about that white board and work on projects that don't require intensive capital. And maybe we'll hit Premium status with WOTC and see some benefit there.

Monday, March 16, 2020

Wooden Jigsaw Puzzles: A Comparison (Monday Musings 80)

I've decided to write as many posts as possible, and titling it Monday Musings from now on, to insure that I don't "fall behind" lol.

As another hobby to consider (to give your eyes much needed rest from all the blue light of video games) is jigsaw puzzles. I got into puzzles once again as my friend introduced me to the Wentworth wooden puzzles. I was so impressed with these puzzles because of the quality and the satisfying tactile feel when you put the pieces together, that I wanted to order some myself.

Upon visiting Wentworth's online site, my heart sank as the puzzles were rather pricey, though at $50 for a 250-piece puzzle, the cost/time is actually reasonable, as long as you do the puzzle a couple of times. Since I'm very slow, it takes about 2 hours, so if you do the puzzle 2 or 3 times, it's cheaper than going to the movies. So I thought of getting one, but then the shipping charges were astronomical, since it's shipping from the UK. However, I found out later that Wentworth often has free shipping to US! But not realizing that at the time, I decided to see if there are US manufacturers which will have lower shipping costs.

Therefore, I did more research and stumbled upon the ridiculous Stave puzzles (Barbara Bush-endorsed) at average price of $1000 (perhaps even $2000 as some are $15K), so this brand will not be reviewed. I then fell upon the much more affordable and reasonable Architect and Liberty puzzles.

I find that they are all equal to each other, so the puzzle manufacturer that is best for you is based really on your preferences and what you're looking for. I'll outline the differences between the three, in alphabetical order.

Artifact puzzles is the most creative of not just the pictures offered, but the many interesting puzzle shapes. I don't find the tired, drab images of known paintings, and boring, uninspired nature scenes, as compelling as the fantastical pictures including monsters, cartoon characters, and so forth that Artifact offers.

Although Artifact pieces are the most loose fitting of the three, the irregularly irregular pieces are significantly more bizarre and odd than the other brands, and therefore quite compelling. It's interesting to see how these weird pieces fit together, often leading to a lot of "Ah ha" moments. They're coming out with the new Ecru line which offers tighter fitting pieces with no glare design, but it's more costly of course. Further, the designs aren't as whimsical or fantastic as their regular line, so I have a feeling that I'd prefer the regular over the upcoming Ecru. Picture for me tends to be most important.


Artifact's Mechanical Griffin
Artifact tends to have the most whimsy pieces out of the three, meaning pieces that are shaped thematically. So a cat puzzle will have cat-shaped pieces.

The image quality on Artifact and Wentworth is better than Liberty in the sense that the images seem like it's actually painted on the wooden pieces. One of the Liberty puzzle pieces had a small peel, that can be glued, so I don't find this a deal breaker.

If interested in Artifact, I would recommend the Griffin that comes with a clever surprise (spoilers avoided here). 

All the Artifact puzzles I own are so completely different from each other (I have 4!). Other customers also noticed that any time you get a puzzle from Artifact, it's a whole new experience.

As for the Liberty Puzzle, it has the same thickness as Artifact (6.35 mm), but the fit of the pieces are much tighter, so in that sense the pieces are better quality than Artifact's regular line, only marred by the fact that a piece may (or may not) have some peeling (it seems like this would be a rare occurrence), unlike Artifact and Wentworth. 

Liberty does have a lot of whimsy pieces, not as much as the Artifact, but more so than the
Liberty's and Wentworth's An Exuberant Success
Wentworth. The pieces are more redundant than Artifact, tending to be more regularly irregular, rather than the irregularly irregular shapes of Artifact.


The Wentworth is made of considerably thinner wood than Artifact and Liberty, less than half the thickness (3 mm versus 6.35 mm). The thicker wood feels more luxurious, but because the Wentworth pieces are thinner, it's the best fitting of the three. The sensation of putting the pieces together in a satisfying click, so it  has the most pleasant sensory experience out of all three. There are whimsy pieces, but nowhere near as much as Artifact and Liberty, and more regular-shaped pieces than even the Liberty.

Wentworth includes a rather lovely felt bag to hold the pieces within its sturdy box. Sadly, Artifact and Liberty don't.

If you prefer unique pictures, and thicker, peculiar, odd and whimsical pieces, I'd recommend Artifact. If you prefer an equally thick cut with better fit, and you don't mind more regularly irregular shaped pieces, than I'd chose the Liberty. Finally, if you want that tactile, satisfying click feel with nice bag, and don't mind less creative shapes, then Wentworth is the puzzle for you. With these criteria in mind, Artifact is my favorite of the three due to the creativity aspects.

If none of these issues matter to you, I'd recommend ordering the designs that you find the most pleasing, because you can't go wrong with any of these puzzle manufacturers. They all cost around the same price, and Wentworth frequently has sales where shipping is free to the US.

For all three manufacturers, prices are cheaper ordering online at their websites:

Artifact Puzzles
Liberty Puzzles
Wentworth Puzzles

The How of Happiness Review

Sunday, March 15, 2020

Hiring: Project-based Programmer



Title: Gameplay Programmer
Type: Full-time, project-based (1 year)
Last day to apply: 8th of July 2018


Frictional Games is famous for its immersive, atmospheric first-person games; games created by a small team working closely together. For our next game, we need to expand that team! We need a gameplay coder who can support the rest of us, taking on responsibility for game-wide systems such as inventory, AI, first-person body, and other features that the player's experience will depend on. Join us, and help us transport our players to strange and terrifying new realms.

The position is full-time, and project-based for the period of 1 year. After that period there may be a possibility for the position to become permanent.

What will you work on?
Here are some of the specific gameplay systems you will find yourself working on:
  • Inventory management
  • AI behavior
  • Physics interactions
  • User interface
  • Game-specific systems (think Sanity system in Amnesia: The Dark Descent)
  • Inverse kinematics
It is a big plus if you have already worked on most of these before. While we value experience, it is more important that you are willing and able to dig into challenges and learn new things. We are interested in playing to your strengths, so the things listed will not be the only ones you will be working on.

What are we looking for?
The person we're looking for should have a solid understanding of different gameplay systems. You need to be able to see the big picture and have a firm grasp on how information flows between modules, and how complex behaviour can be reduced into simple rule sets.

We use our own engines, so you need to be able to adapt to the existing system and code base. We also value the end user experience, so we hope you can step into the players' shoes instead of only focusing on the nitty gritty technical stuff.

You have to be a European resident to apply!

Here are our other essential requirements:
  • You have worked on a game that uses 3D environments.
  • Well-versed in C++, C#, Java or similar.
  • Strong linear algebra skills.
  • Major role in completing at least one game.
  • Strong self-drive and ability to organise your own work.
  • A critical approach to your work, ability to reflect.
  • Confidence in implementing your own designs.
  • Fluency in English.
  • Team communication skills.
  • Knowledge of game design.
  • A Windows PC that runs recent games (such as SOMA) that you can use for work (unless you live in Malmö and will work from the office).
  • A fast and stable internet connection.
For this position you can work from home. We have a central hub in Malmö, Sweden, which you can use if you wish.

What we offer:
  • Flexible working hours, a no-crunch approach.
  • Opportunities to influence your work flow.
  • Variety in your work tasks, and ability to influence your work load.
  • Participation in Show & Tell of games, having a say in all aspects of the game making.
  • An office in central Malmö you can use.
  • An inclusive work environment.
  • A possibility to become a permanent employee.

Apply? Yes!
Did the tasks above sound like your cup of tea (or other beverage)? Are you the person we're looking for? Then we would love you hear from you! The last day to send the application is 8th of July 2018 - but the sooner the better.

Please send us your:
  • Cover letter
    • Tell us why we should hire YOU!
  • CV
  • Portfolio
    • PDF or links to your works
Please note that we require all the attachments to consider you.

Send your application to apply@frictionalgames.com!

Privacy Policy
By sending us your application, you give us permission to store your personal information and attachments.

We store all applications in a secure system. The applications are stored for two years, after which they are deleted. If you want your your information removed earlier, please contact us through our Contact form. Read more in our Privacy Policy.

Thursday, March 5, 2020

Tech Book Face Off: Effective Python Vs. Data Science From Scratch

I must confess, I've used Python for quite some time without really learning most of the language. It's my go-to language for modeling embedded systems problems and doing data analysis, but I've picked up the language mostly through googling what I need and reading the abbreviated introductions of Python data science books. It was time to remedy that situation with the first book in this face-off: Effective Python: 59 Specific Ways to Write Better Python by Brett Slatkin. I didn't want a straight learn-a-programming-language book for this exercise because I already knew the basics and just wanted more depth. For the second book, I wanted to explore how machine learning libraries are actually implemented, so I picked up Data Science from Scratch: First Principles with Python by Joel Grus. These books don't seem directly related other than that they both use Python, but they are both books that look into how to use Python to write programs in an idiomatic way. Effective Python focuses more on the idiomatic part, and Data Science from Scratch focuses more on the writing programs part.

Effective Python front coverVS.Data Science from Scratch front cover

Effective Python

I thought I had learned a decent amount of Python already, but this book shows that Python is much more than list comprehensions and remembering self everywhere inside classes. My prior knowledge on the subjects in the first couple chapters was fifty-fifty at best, and it went down from there. Slatkin packed this book with useful information and advice on how to use Python to its fullest potential, and it is worthwhile for anyone with only basic knowledge of the language to read through it.

The book is split into eight chapters with the title's 59 Python tips grouped into logical topics. The first chapter covers the basic syntax and library functions that anyone who has used the language for more than a few weeks will know, but the advice on how to best use these building blocks is where the book is most helpful. Things like avoiding using start, end, and stride all at once in slices or using enumerate instead of range are good recommendations that will make your Python code much cleaner and more understandable.

Sometimes the advice gets a bit far-fetched, though. For example when recommending to spell out the process of setting default function arguments, Slatkin proposed this method:

def get_first_int(values, key, default=0):
    found = values.get(key, [''])
    if found[0]:
        found = int(found[0])
    else:
        found = default
    return found
Over this possibility using the or operator short-circuit behavior:
def get_first_int(values, key, default=0):
    found = values.get(key, [''])[0]
    return int(found or default)
He claimed that the first was more understandable, but I just found it more verbose. I actually prefer the second version. This example was the exception, though. I agreed and was impressed with nearly all of the rest of his advice.

The second chapter covered all things functions, including how to write generators and enforce keyword-only arguments. The next chapter, logically, moved into classes and inheritance, followed by metaclasses and attributes in the fourth chapter. What I liked about the items in these chapters was that Slatkin assumes the reader already knows the basic syntax so he spends his time describing how to use the more advanced features of Python most effectively. His advice is clear and direct so it's easy to follow and put to use.

Next up is chapter 5 on concurrency and parallelism. This chapter was great for understanding when to use threads, processes, and the other concurrency features of Python. It turns out that threads and processes have unique behavior (beyond processes just being heavier weight threads) because of the global interpreter lock (GIL):
The GIL has an important negative side effect. With programs written in languages like C++ or Java, having multiple threads of execution means your program could utilize multiple CPU cores at the same time. Although Python supports multiple threads of execution, the GIL causes only one of them to make forward progress at a time. This means that when you reach for threads to do parallel computation and speed up your Python programs, you will be sorely disappointed.
If you want to get true parallelism out of Python, you have to use processes or futures. Good to know. Even though this chapter was fairly short, it was full of useful advice like this, and it was possibly the most interesting part of the book.

The next chapter covered built-in modules, and specifically how to use some of the more complex parts of the standard library, like how to define decorators with functools.wraps, how to make some sense of datetime and time zones, and how to get precision right with decimal. Maybe these aren't the most interesting of topics, but they're necessary to get right.

Chapter 7 covers how to structure and document Python modules properly when you're collaborating with the rest of the community. These things probably aren't useful to everyone, but for those programmers working on open source libraries it's helpful to adhere to common conventions. The last chapter wraps up with advice for developing, debugging, and testing production level code. Since Python is a dynamic language with no static type checking, it's imperative to test any code you write. Slatkin relates a story about how one programmer he knew swore off ever using Python again because of a SyntaxError exception that was raised in a running production program, and he had this to say about it:
But I have to wonder, why wasn't the code tested before the program was deployed to production? Type safety isn't everything. You should always test your code, regardless of what language it's written in. However, I'll admit that the big difference between Python and many other languages is that the only way to have any confidence in a Python program is by writing tests. There is no veil of static type checking to make you feel safe.
I would have to agree. Every program needs to be tested because syntax errors should definitely be caught before releasing to production, and type errors are a small subset of all runtime errors that can occur in a program. If I was depending on the compiler to catch all of the bugs in my programs, I would have a heckuva lot more bugs causing problems in production. Not having a compiler to catch certain classes of errors shouldn't be a reason to give up the big productivity benefits of working in a dynamic language like Python.

I thoroughly enjoyed learning how to write better Python programs through the collection of pro tips in this book. Each tip was focused, relevant, and clear, and they all add up to a great advanced level book on Python. Even better, the next time I need to remember how to do concurrency or parallelism or how to write a proper function with keyword arguments, I'll know exactly where to look. If you want to learn how to write Python code the Pythonic way, I'd highly recommend reading through this book.

Data Science from Scratch

I didn't expect to enjoy this book quite as much as I did. I went into it expecting to learn about how to implement the fundamental tools of the trade for data science, and that was indeed what I got out of the book. But I also got a lighthearted, entertaining, and surprisingly easy-to-read tour of the basics of machine learning using Python. Joel Grus has a matter-of-fact writing style and a dry wit that I immediately took to and thoroughly enjoyed. These qualities made a potentially complex and confusing topic much easier to understand, and humorous to boot, like having an excellent tour guide in a museum that can explain medieval culture in detail while cracking jokes about how toilet paper wasn't invented until the 1850s.

Of course, like so many programming books, this book starts off with a primer on the Python language. I skipped this chapter and the next on drawing graphs, since I've had just about enough of language primers by now, especially for languages that I kind of already know. The real "from scratch" parts of the book start with chapter 4 on linear algebra, where Grus establishes the basic functions necessary for doing computations on vectors and matrices. The functions and classes shown throughout the book are well worth typing out in your own Python notebook or project folder and running through an interpreter, since they are constantly being used to build up tooling in later chapters from the more fundamental tools developed in earlier chapters. The progression of development from this chapter on linear algebra all the way to the end was excellent, and it flowed smoothly and logically over the course of the book.

The next few chapters were on statistics, probability, and their use with hypothesis testing and inference. Sometimes Grus glossed over important points here, like when explaining standard deviations he failed to mention that this metric only applies to (or at least applies best to) normal distributions. Distributions that deviate too much from the normal curve will not have meaningful standard deviations. I'm willing to cut him some slack, though, because he is covering things quickly and makes it clear that his goal is to show roughly what all of this stuff looks like in simple Python code, not to make everything rigorous and perfect. For instance, here's his gentle reminder on method in the probability chapter:
One could, were one so inclined, get really deep into the philosophy of what probability theory means. (This is best done over beers.) We won't be doing that.
He finishes up the introductory groundwork with a chapter on gradient descent, which is used extensively in the later machine learning algorithms. Then there are a couple chapters on gathering, cleaning, and munging data. He has some opinions about some API authors choice of data format:
Sometimes an API provider hates you and only provides responses in XML.
And he has some good expectation setting for the beginner data scientist:
After you've identified the questions you're trying to answer and have gotten your hands on some data, you might be tempted to dive in and immediately start building models and getting answers. But you should resist this urge. Your first step should be to explore your data.
Data is never exactly in the form that you need to do what you want to do with it, so while the gathering and the munging is tedious, it's a necessary skill that separates the great data scientist from the merely mediocre. Once we're done learning how to whip our data into shape, it's off to the races, which is great because we're now halfway through this book.

The chapters on machine learning models, starting with chapter 12, are excellent. While Grus does not go into intricate detail on how to make the fastest, most efficient MLMs (machine learning models, not multi-level marketing), that is not the point. His objective is to show as clearly as possible what each of these algorithms looks like and that it is possible to understand how they work when shown in their essence. The models include k-nearest neighbors, naive bayes, linear regression, multiple regression, logistic regression, decision trees, neural networks, and clustering. Each of these models is actually conceptually simple, and the models can be described in dozens of lines of code or less. These implementations may be doggedly slow for large data sets, but they're great for understanding the underlying ideas of each algorithm.

Threaded through each of these chapters are examples of how to use each of the statistical and machine learning tools that is being developed. These examples are presented within the context of the tasks given to a new data scientist who is an employee of a budding social media startup for…well…data scientists. I just have to say that it is truly amazing how many VPs a young startup can support, and I feel awfully sorry for this stalwart data scientist fulfilling all of their requests. This silliness definitely keeps the book moving along.

The next few chapters delve a bit deeper into some interesting problems in data science: natural language processing, network analysis (or graph algorithms), and recommender systems. These chapters were just as great as the others, and by now we've built up our data science tooling pretty well from the original basics of linear algebra and statistics. The one thing we haven't really talked about, yet, is databases. That's the topic of the 23rd chapter, where we implement some of the basic operations of SQL in Python in the most naive way possible. Once again it's surprising to see how little code is needed to implement things like SELECT or INNER JOIN as long as we don't give a flying hoot about performance.

Grus wraps things up with an explanation of the great and all-powerfull MapReduce, and shows the basics of how it would be implemented with mapper and reducer functions and the plumbing to string it together. He does not get into how to distribute this implementation to a compute cluster, but that's the topic of other more complicated books. This one's done from scratch so like everything else, it's just the basics. That was all fine with me because the basics are really important, and knowing the basics well can lead you to a much deeper understanding of the more complex concepts much faster than if you were to try to dive into the deep end without knowing the basic strokes. This book provides that foundation, and it does it with flair. I highly recommend giving it a read.


Both Effective Python and Data Science from Scratch were excellent books, and together they could give a programmer a solid foundation in Python and data science as long as they already have some experience in the language. With that being said, Data Science from Scratch will not provide the knowledge on how to use the powerful data analysis and machine learning libraries like numpy, pandas, scikit-learn, and tensorflow. For that, you'll have to look elsewhere, but the advanced, idiomatic Python and fundamental data science principles are well covered between these two books.

Financial Accounting, 11Th Edition - Fox eBook

Financial Accounting, 11th Edition

Misty Knows The One True Religion


When it comes to getting rid of demons, Jesus Christ is the only way. Mohammed cannot help you, Buddah is useless, there is only one name before whom they must all kneel, the name of Jesus Christ (and the names of His Holy Saints, who are filled with Him and reflect Him).

Wednesday, March 4, 2020

The Ultimate Megadungeon


I feel like I fought long and hard for this review...

Battled my inner demons, smoked a peace-pipe with that old serpent until we were both baked into a fever-dream cake with black rainbow frosting, risked my stack by going all-in against a lavender mo-hawked skeever who I knew was bluffing, and so forth!

Endzeitgeist's Cha'alt review!

I knew it wouldn't be easy, that he'd make me pay dearly for every bit of laziness or self-indulgence, every decision carefully considered and weighed as if standing before an exotic gold idol with a pouch full of sand, every creative choice mercilessly judged.

And yet, I came out unscathed... relatively speaking.  I just re-read the damn thing and I'm exhausted.  I don't have the time, energy, or even the inclination to refute his claims, except to say that I really wanted an all-caps GONZO fun-house megadungeon.  If blasters and sleep spells were commonplace, then really weird stuff would have to be way over-the-top.

Also, for a 90 minute online game or 3-hour face-to-face one-shot of D&D, Crimson Dragon Slayer D20 is just about perfect.  It also plays better than it reads.  ;)

Those brave enough to see for themselves are welcome to play in one of my Roll20 games or on January 11th in Madison, WI.

VS

p.s. Yep, still pimping the Cha'alt: Fuchsia Malaise kickstarter - only 5 days left to go!

The Ninja Saviors: Return Of The Warriors Review (PS4)

Written by Alexander O. Cuaycong and Anthony L. Cuaycong


Developer: NatsumeAtari
Publisher: ININ Games
Genre: Action, Arcade, Fighting
Price: $19.99
Also Available On: Switch



Back in the nineties, the two dimensional beat-'em-up genre was in its prime. Games like Golden Axe and Double Dragon found a niche in the fickle market by giving audiences fast, intense, action-packed experiences. Seeing the trend, Taito released Ninja Warriors on the Super Nintendo Entertainment System in 1994. For a port of a seven-year-old arcade offering, it held up well; in fact, it was praised for its tight controls, good pacing, and vibrant art style, all while cashing in on its ninja aesthetic. That said, no sequel was planned or made, effectively relegating it as a footnote in history.




Until now, that is. Ninja Warriors has made its way to modern consoles 25 years after its original release via The Ninja Saviors: Return of the Warriors, a remaster aimed at wowing a whole new generation of gamers. As with its source material, it focuses on control of one of three ninjas out to battle an evil regime existing in a dystopian timeline. And, as with its source material, it's extremely challenging, From the moment it's booted up, it presents crisp, redrawn graphics that belie just how much of the gameplay design remains unchanged. It looks like a 2019 release, but still plays like its 1994 self.




In The Ninja Saviors: Return of the Warriors, the opposition comes in large numbers, and aggressively so; enemies are a constant threat if underestimated, and can bring up a Game Over screen at a moment's notice. Powerups are fairly uncommon, thus making mistakes all but fatal, and the plentiful number of boss characters can prove to be Sisyphean hurdles even to veterans of the genre. On the flipside, the three playable characters have their own unique fighting styles and respond fluidly to commands; they are able to attack, block, and dodge at a moment's notice. Likewise, they can perform a variety of special moves through the consumption of a resource bar.




The Ninja Saviors: Return of the Warriors isn't overly long, but its replay value is enhanced by the uniqueness of the characters. In addition, it boasts of a cooperative feature that raises the fun factor. And while it does little to reinvent the genre, it plays so crisply and fluidly that even newcomers will appreciate its virtues.



THE GOOD:
  • Beautifully redrawn two-dimensional graphics
  • Smooth, crisp, fluid gameplay
  • Good replay value
  • Decent coop functions in place

THE BAD:
  • Fairly standard beat-'em-up
  • Can sometimes feel overly challenging and unfair
  • Relatively short, especially for the skilled


RATING: 7/10