EB Games Canada Says Street Fighter V: Champion Edition Is Coming To Switch
Update 2 – Sun 26th Jan, 2020 09:21 GMT: If you’re still not convinced, Street Fighter’s executive producer Yoshinori Ono also shared the following message, in response to the now-deleted tweet:
Update – Sun 26th Jan, 2020 04:30 GMT: Sorry folks, EB Games Canada is now saying the details in this tweet were inaccurate and has apologised for any disappointment or confusion it may have caused. The intention was to highlight the PS4 version:
Original Story – Sun 26th Jan, 2020 03:00 GMT: Earlier today, the official Twitter account of EB Games Canada announced Street Fighter V: Champion Edition would be coming to the Nintendo Switch. Although the tweet was up for a number of hours, it’s since been deleted.
Here’s a screenshot of it, courtesy of IGN:
A game like this coming to the Nintendo Switch is rather hard to believe when considering the fact the original was developed in partnership with Sony, and Capcom previously said the original game – or any future versions – would remain exclusive to PlayStation and PC.
Capcom or Nintendo haven’t said anything about porting the game across to the Switch – so it’s either a mistake or EB has made an announcement ahead of schedule. The last Street Fighter Capcom released on Switch was the 30th Anniversary Collection in May 2018. Before then, Ultra Street Fighter II: The Final Challengers arrived in May 2017.
Posted by: xSicKxBot - 01-27-2020, 04:56 AM - Forum: Lounge
- No Replies
PlayStation Plus Deal: Grab A 12-Month PS Plus Sub For $37
With a PlayStation Plus subscription, you get two free PS4 games every month, full online multiplayer functionality, and you can upload your games' save files to the cloud. Typically, purchasing 12 months will set you back $60, but you can get a one-year membership for $37 on Ebay right now. Honestly, if you've been waiting for a discount before buying PS Plus, this deal is probably about as cheap as you're going to find.
A limited quantity is available, so don't wait if you've interested in renewing or extending your PS Plus subscription. The listing is a bit unclear, but according to reviews, you should receive the PS Plus code via email within a day. You can then redeem the code in the PlayStation Store to automatically add another 12 months to your membership.
Quarkus is revolutionizing the way that we develop Java applications for the cloud-native era, and in this presentation, Edson Yanaga explains why it also sparks joy.
Watch this live coding session to get familiar with Quarkus and learn how your old and new favorite APIs will start in a matter of milliseconds and consume tiny amounts of memory. Hot reload capabilities for development will bring you instant joy.
In our previous issue, we explored the use of lightweight frameworks— Javalin, Micronaut, and Helidon—to create microservices, which typically are deployed in the cloud. In that issue’s article on Helidon, we also showed how to package a service into a Docker container for deployment.
In this issue, we continue the theme by examining how to build apps with containers in mind and how to deploy containers. For straight Java apps, the jlink and jdeps tools are excellent solutions for creating modularized, small, self-contained apps. We discuss how to use those tools on page 25.
If very fast startup time is a concern, then consider the GraalVM platform. It is written in Java but compiles Java code to an executable format. We’ve discussed GraalVM in past issues, but this article focuses on the latest features and their use in creating small executables with native-code startup speed. Finally, if you’re straddling the Dev and Ops sides of DevOps, you surely have seen that most containers are managed with the open source Kubernetes platform.
In our lead feature, we give you a full introduction to Kubernetes and all the information you need to start working with managing your containerized apps. In addition, we explore what’s new in the recent release of Java 12, and we examine a major upgrade to Java Card, which in all senses is the very smallest container for a Java app.
In addition, we have our usual quiz and our events calendar. Finally, future issues of this magazine will look materially different from what you’re used to. Please see the editorial in this issue for details
Posted by: xSicKxBot - 01-27-2020, 02:17 AM - Forum: Python
- No Replies
Python Re ? Quantifier
Congratulations, you’re about to learn one of the most frequently used regex operators: the question mark quantifier A?.
In particular, this article is all about the ? quantifier in Python’s re library.
What’s the Python Re ? Quantifier
When applied to regular expression A, Python’s A? quantifier matches either zero or one occurrences of A. The ? quantifier always applies only to the preceding regular expression. For example, the regular expression ‘hey?’ matches both strings ‘he’ and ‘hey’. But it does not match the empty string because the ? quantifier does not apply to the whole regex ‘hey’ but only to the preceding regex ‘y’.
Let’s study two basic examples to help you gain a deeper understanding. Do you get all of them?
The first argument is the regular expression pattern ‘aa[cde]?’. The second argument is the string to be searched for the pattern. In plain English, you want to find all patterns that start with two ‘a’ characters, followed by one optional character—which can be either ‘c’, ‘d’, or ‘e’.
The findall() method returns three matching substrings:
First, string ‘aac’ matches the pattern. After Python consumes the matched substring, the remaining substring is ‘de aa aadcde’.
Second, string ‘aa’ matches the pattern. Python consumes it which leads to the remaining substring ‘ aadcde’.
Third, string ‘aad’ matches the pattern in the remaining substring. What remains is ‘cde’ which doesn’t contain a matching substring anymore.
In this example, you’re looking at the simple pattern ‘aa?’. You want to find all occurrences of character ‘a’ followed by an optional second ‘a’. But be aware that the optional second ‘a’ is not needed for the pattern to match.
Therefore, the regex engine finds three matches: the characters ‘a’.
This regex pattern looks complicated: ‘[cd]?[cde]?’. But is it really?
Let’s break it down step-by-step:
The first part of the regex [cd]? defines a character class [cd] which reads as “match either c or d”. The question mark quantifier indicates that you want to match either one or zero occurrences of this pattern.
The second part of the regex [cde]? defines a character class [cde] which reads as “match either c, d, or e”. Again, the question mark indicates the zero-or-one matching requirement.
As both parts are optional, the empty string matches the regex pattern. However, the Python regex engine attempts as much as possible.
Thus, the regex engine performs the following steps:
The first match in the string ‘ccc dd ee’ is ‘cc’. The regex engine consumes the matched substring, so the string ‘c dd ee’ remains.
The second match in the remaining string is the character ‘c’. The empty space ‘ ‘ does not match the regex so the second part of the regex [cde] does not match. Because of the question mark quantifier, this is okay for the regex engine. The remaining string is ‘ dd ee’.
The third match is the empty string ”. Of course, Python does not attempt to match the same position twice. Thus, it moves on to process the remaining string ‘dd ee’.
The fourth match is the string ‘dd’. The remaining string is ‘ ee’.
The fifth match is the string ”. The remaining string is ‘ee’.
The sixth match is the string ‘e’. The remaining string is ‘e’.
The seventh match is the string ‘e’. The remaining string is ”.
The eighth match is the string ”. Nothing remains.
This was the most complicated of our examples. Congratulations if you understood it completely!
[Collection] What Are The Different Python Re Quantifiers?
The question mark quantifier—Python re ?—is only one of many regex operators. If you want to use (and understand) regular expressions in practice, you’ll need to know all of them by heart!
So let’s dive into the other operators:
A regular expression is a decades-old concept in computer science. Invented in the 1950s by famous mathematician Stephen Cole Kleene, the decades of evolution brought a huge variety of operations. Collecting all operations and writing up a comprehensive list would result in a very thick and unreadable book by itself.
Fortunately, you don’t have to learn all regular expressions before you can start using them in your practical code projects. Next, you’ll get a quick and dirty overview of the most important regex operations and how to use them in Python. In follow-up chapters, you’ll then study them in detail — with many practical applications and code puzzles.
Here are the most important regex quantifiers:
Quantifier
Description
Example
.
The wild-card (‘dot’) matches any character in a string except the newline character ‘\n’.
Regex ‘…’ matches all words with three characters such as ‘abc’, ‘cat’, and ‘dog’.
*
The zero-or-more asterisk matches an arbitrary number of occurrences (including zero occurrences) of the immediately preceding regex.
Regex ‘cat*’ matches the strings ‘ca’, ‘cat’, ‘catt’, ‘cattt’, and ‘catttttttt’.
?
The zero-or-one matches (as the name suggests) either zero or one occurrences of the immediately preceding regex.
Regex ‘cat?’ matches both strings ‘ca’ and ‘cat’ — but not ‘catt’, ‘cattt’, and ‘catttttttt’.
+
The at-least-one matches one or more occurrences of the immediately preceding regex.
Regex ‘cat+’ does not match the string ‘ca’ but matches all strings with at least one trailing character ‘t’ such as ‘cat’, ‘catt’, and ‘cattt’.
^
The start-of-string matches the beginning of a string.
Regex ‘^p’ matches the strings ‘python’ and ‘programming’ but not ‘lisp’ and ‘spying’ where the character ‘p’ does not occur at the start of the string.
$
The end-of-string matches the end of a string.
Regex ‘py$’ would match the strings ‘main.py’ and ‘pypy’ but not the strings ‘python’ and ‘pypi’.
A|B
The OR matches either the regex A or the regex B. Note that the intuition is quite different from the standard interpretation of the or operator that can also satisfy both conditions.
Regex ‘(hello)|(hi)’ matches strings ‘hello world’ and ‘hi python’. It wouldn’t make sense to try to match both of them at the same time.
AB
The AND matches first the regex A and second the regex B, in this sequence.
We’ve already seen it trivially in the regex ‘ca’ that matches first regex ‘c’ and second regex ‘a’.
Note that I gave the above operators some more meaningful names (in bold) so that you can immediately grasp the purpose of each regex. For example, the ‘^’ operator is usually denoted as the ‘caret’ operator. Those names are not descriptive so I came up with more kindergarten-like words such as the “start-of-string” operator.
We’ve already seen many examples but let’s dive into even more!
import re text = ''' Ha! let me see her: out, alas! he's cold: Her blood is settled, and her joints are stiff; Life and these lips have long been separated: Death lies on her like an untimely frost Upon the sweetest flower of all the field. ''' print(re.findall('.a!', text)) '''
Finds all occurrences of an arbitrary character that is
followed by the character sequence 'a!'.
['Ha!'] ''' print(re.findall('is.*and', text)) '''
Finds all occurrences of the word 'is',
followed by an arbitrary number of characters
and the word 'and'.
['is settled, and'] ''' print(re.findall('her:?', text)) '''
Finds all occurrences of the word 'her',
followed by zero or one occurrences of the colon ':'.
['her:', 'her', 'her'] ''' print(re.findall('her:+', text)) '''
Finds all occurrences of the word 'her',
followed by one or more occurrences of the colon ':'.
['her:'] ''' print(re.findall('^Ha.*', text)) '''
Finds all occurrences where the string starts with
the character sequence 'Ha', followed by an arbitrary
number of characters except for the new-line character. Can you figure out why Python doesn't find any?
[] ''' print(re.findall('\n$', text)) '''
Finds all occurrences where the new-line character '\n'
occurs at the end of the string.
['\n'] ''' print(re.findall('(Life|Death)', text)) '''
Finds all occurrences of either the word 'Life' or the
word 'Death'.
['Life', 'Death'] '''
In these examples, you’ve already seen the special symbol ‘\n’ which denotes the new-line character in Python (and most other languages). There are many special characters, specifically designed for regular expressions. Next, we’ll discover the most important special symbols.
What’s the Difference Between Python Re ? and * Quantifiers?
You can read the Python Re A? quantifier as zero-or-one regex: the preceding regex A is matched either zero times or exactly once. But it’s not matched more often.
Analogously, you can read the Python Re A* operator as the zero-or-multiple-times regex (I know it sounds a bit clunky): the preceding regex A is matched an arbitrary number of times.
The regex ‘ab?’ matches the character ‘a’ in the string, followed by character ‘b’ if it exists (which it does in the code).
The regex ‘ab*’ matches the character ‘a’ in the string, followed by as many characters ‘b’ as possible.
What’s the Difference Between Python Re ? and + Quantifiers?
You can read the Python Re A? quantifier as zero-or-one regex: the preceding regex A is matched either zero times or exactly once. But it’s not matched more often.
Analogously, you can read the Python Re A+ operator as the at-least-once regex: the preceding regex A is matched an arbitrary number of times but at least once.
The regex ‘ab?’ matches the character ‘a’ in the string, followed by character ‘b’ if it exists—but it doesn’t in the code.
The regex ‘ab+’ matches the character ‘a’ in the string, followed by as many characters ‘b’ as possible—but at least one. However, the character ‘b’ does not exist so there’s no match.
What are Python Re *?, +?, ?? Quantifiers?
You’ve learned about the three quantifiers:
The quantifier A* matches an arbitrary number of patterns A.
The quantifier A+ matches at least one pattern A.
The quantifier A? matches zero-or-one pattern A.
Those three are all greedy: they match as many occurrences of the pattern as possible. Here’s an example that shows their greediness:
The code shows that all three quantifiers *, +, and ? match as many ‘a’ characters as possible.
So, the logical question is: how to match as few as possible? We call this non-greedy matching. You can append the question mark after the respective quantifiers to tell the regex engine that you intend to match as few patterns as possible: *?, +?, and ??.
Here’s the same example but with the non-greedy quantifiers:
In this case, the code shows that all three quantifiers *?, +?, and ?? match as few ‘a’ characters as possible.
Related Re Methods
There are five important regular expression methods which you should master:
The re.findall(pattern, string) method returns a list of string matches. Read more in our blog tutorial.
The re.search(pattern, string) method returns a match object of the first match. Read more in our blog tutorial.
The re.match(pattern, string) method returns a match object if the regex matches at the beginning of the string. Read more in our blog tutorial.
The re.fullmatch(pattern, string) method returns a match object if the regex matches the whole string. Read more in our blog tutorial.
The re.compile(pattern) method prepares the regular expression pattern—and returns a regex object which you can use multiple times in your code. Read more in our blog tutorial.
The re.split(pattern, string) method returns a list of strings by matching all occurrences of the pattern in the string and dividing the string along those. Read more in our blog tutorial.
The re.sub(The re.sub(pattern, repl, string, count=0, flags=0) method returns a new string where all occurrences of the pattern in the old string are replaced by repl. Read more in our blog tutorial.
These seven methods are 80% of what you need to know to get started with Python’s regular expression functionality.
Where to Go From Here?
You’ve learned everything you need to know about the question mark quantifier ? in this regex tutorial.
Summary: When applied to regular expression A, Python’s A? quantifier matches either zero or one occurrences of A. The ? quantifier always applies only to the preceding regular expression. For example, the regular expression ‘hey?’ matches both strings ‘he’ and ‘hey’. But it does not match the empty string because the ? quantifier does not apply to the whole regex ‘hey’ but only to the preceding regex ‘y’.
Want to earn money while you learn Python? Average Python programmers earn more than $50 per hour. You can certainly become average, can’t you?
Join the free webinar that shows you how to become a thriving coding business owner online!
Double Opt-In Subscription Form with Secure Hash using PHP
Last modified on September 24th, 2019 by Vincy.
Do you know that the opening rate of emails by double opt-in confirmed subscribers is a staggering 40%? According to CampaignMonitor, email marketing generates $38 in ROI for every $1 spent.
Email marketing delivers the highest among any channel for marketing. Even in comparison with channels like print, TV and social media.
Email marketing is the way to go. The primary mode to build your list is using a double opt-in subscription form.
Use a double opt-in subscription form to signup to a newsletter, blog or a similar service. It has a two-step subscription process.
In the first step, the user will submit his name and email. Then the site will send an email to the user.
In the second step, the user will click the link in the received email. This will confirm his subscription to the site or service.
We call it the double opt-in because the users consent to the subscription twice. First by submitting the information and second by confirming to in by clicking the link in email.
Why do we need double opt-in?
It is the mechanism used to verify if the subscriber owns the input email. You need to do this verification because there is a chance for misuse by submitting emails that they do not own.
Double opt-in vs single opt-in is well debated and results arrived at. Double opt-in wins hands-on in every critical aspect.
What is the role of a secure hash?
In the confirmation email received by the user, there will be a link. This is the second and important step in the opt-in process. The link should be secure.
It should be unique for every user and request.
It should not be predictable.
It should be immune to a brute-force attack.
Double opt-in subscription form in PHP
I will present you a step by step detail on how to build a double opt-in subscription form with a secure hash using PHP.
You will get a production-grade code which you can use real-time in your live website. You can use this to manage your newsletter subscription.
I am releasing this code to you under MIT license. You can use it free even in commercial projects.
Sequence flow for double opt-in subscription
Show a subscription form to the user.
On AJAX submit, insert a new record in the database.
Send an email to the user with a secure hash link.
On click, the of the link, update the subscription status.
On every step, there will be appropriate validations in place.
Double opt-in Subscription form UI
This is where developers get it wrong. Keep it simple and unobtrusive. For the high conversion, you must keep in minimal.
One field email is enough for the subscription. To address the user in a personal way, you need their name. That’s it. Do not ask for much information on a subscription form.
If you ask for much information, it will drive your users away. The same principle applies when you build a contact form. More or less these two behave in a similar aspect. Check how to build a contact form to know more on it.
You should leave the name field can as optional and only the email field should be as required. This will encourage the user to submit the form and subscribe for the newsletter.
Needless to say, the form should be responsive. Any page or form you build should work in mobile, tablet, laptop and desktop devices. You should optimize to work on any viewport.
Google parses webpages in mobile mode for indexing in the search result. The desktop is an old story and gone are those days. You should always design for the mobile. Make it mobile-first!
PHP AJAX for subscription form submission
I have used AJAX to manage the submission. This will help the user to stay on the page after subscription. You can position this subscription form in a sidebar or the footer.
This is a classic example of where you should use the AJAX. I have seen instances where people use AJAX in inappropriate places, for the sake of using it.
Subscription AJAX endpoint
The AJAX endpoint has three major steps:
Verify the user input.
Insert a record in the database.
Send an email with a link for subscription.
subscribe-ep.php is the AJAX endpoint. It starts with an if condition to check if the submit is via the POST method. It is always good to program for POST instead of the GET by default.
<?php use Phppot\Subscription; use Phppot\SupportService; /** * AJAX end point for subscribe action. * 1. validate the user input * 2. store the details in database * 3. send email with link that has secure hash for opt-in confirmation */ session_start(); // to ensure the request via POST if ($_POST) { require_once __DIR__ . './../lib/SupportService.php'; $supportService = new SupportService(); // to Debug set as true $supportService->setDebug(false); // to check if its an ajax request, exit if not $supportService->validateAjaxRequest(); require_once __DIR__ . './../Model/Subscription.php'; $subscription = new Subscription(); // get user input and sanitize if (isset($_POST["pp-email"])) { $userEmail = trim($_POST["pp-email"]); $userEmail = filter_var($userEmail, FILTER_SANITIZE_EMAIL); $subscription->setEmail($userEmail); } else { // server side fallback validation to check if email is empty $output = $supportService->createJsonInstance('Email is empty!'); $supportService->endAction($output); } $memberName = ""; if (isset($_POST["pp-name"])) { $memberName = filter_var($_POST["pp-name"], FILTER_SANITIZE_STRING); } $subscription->setMemberName($memberName); // 1. get a 12 char length random string token $token = $supportService->getToken(12); // 2. make that random token to a secure hash $secureToken = $supportService->getSecureHash($token); // 3. convert that secure hash to a url string $urlSecureToken = $supportService->cleanUrl($secureToken); $subscription->setSubsriptionKey($urlSecureToken); $subscription->setSubsciptionSatus(0); $currentTime = date("Y-m-d H:i:s"); $subscription->setCreateAt($currentTime); $result = $subscription->insert(); // check if the insert is success // if success send email else send message to user $messageType = $supportService->getJsonValue($result, 'type'); if ('error' != $messageType) { $result = $subscription->sendConfirmationMessage($userEmail, $urlSecureToken); } $supportService->endAction($result); }
I have used the SupportService class to perform common functions.
Input sanitisation is a must. When you collect information using a public website, you should be careful. You could get infected without your knowledge. There are many bots foraging around the Internet and they click on all links and buttons.
To sanitise, do not invent a new function. Use the function provided by PHP and that is safe to use.
URL with secure hash
Generate a unique url for each user subscription. Use this url to confirm the user’s subscription in the second step. Remember, that’s why we call this double opt-in.
I have used a three step process:
Generate a random string token.
Convert the token to secure hash.
Convert the secure hash to safe url.
I have used hexdec, bin2hex and openssl_random_pseudo_bytes to generate random bits. Which forms a random string.
Then to make the random string a secure hash, I have used the PHP’s built-in password_hash function. Never every try to do something on your own. Go with the PHP’s function and it does the job very well.
Before PHP 7, we had the option to supply a user generated salt. Now PHP 7 release has deprecated it. It is a good move because, PHP can generate a better salt than what you will generate. So stick to PHP 7 and use it without supplying your own salt.
The secure hash will contain all sort of special characters. . You can keep those special characters but need to url encode it. But I always wish to keep urls clean and the encoded chars do not look nice.
So no harm in removing them. So I cleanup those and leave only the safe characters. Then as a secondary precaution, I also encode the resultant string.
Thus after going through multi step process, we get a random, hash secure, safe, encoded URL token. Save the user submitted information in database record along with this token.
A PHP utility class for you
This is a utility class which I use in my projects. I am giving it away free for you all. It has functions that I reuse quite often and will be handy in situations. Every method has detailed comments that explain their purpose and usage method.
Insert a record to the database on submission of the subscription form. We get the user’s name, email, generate a secure hash token, current time, subscription status.
The reason for storing the current time is to have an expiry for every link. We can set a predefined expiry for the double opt-in process.
For example, you can set one week as expiry for a link from the moment you generate it. The user has to click and confirm before that expiry period.
Subscription status is by default stored as ‘0’ and on confirmation changed to ‘1’.
A database abstraction layer for you
It is my PHP abstraction for minor projects. This works as a layer between controller, business logic and the database. It has generic methods using which we can to the CRUD operations. I have bundled it with the free project download that is available at the end of this tutorial.
Send confirmation email to users
After you insert the record, send an email will to the user to perform the double opt-in confirmation. The user will have a link in the email which he has to click to confirm.
Keep the email simple. It is okay to have text instead of fancy HTML emails. PHP is capable of generating any email and you can code complex email templates. But the spam engines may not like it.
If you wish to go with HTML emails, then keep the HTML code ratio to as least as possible. As this is also one factor using which the spam engines flag the emails.
Then remember not to use the spam stop words. There are words like “free”, “win”, “cash”, “promo” and “income”. There is a long list and you can get it on the Internet by searching for “email spam filter word list”.
I have used PHP’s mail() function to send the email. I recommend you to change it to PHPMailer to send SMTP based email if you plan to use this code in production.
Subscription confirmation
Create a public landing page and you may use .htaccess for a neat URL mapping. This URL should map with the URL sent to the user and the PHP file that is going to process the request.
As a first step, GET the token and to verify the user against the database. Check,
if such a token exists,
it is not expired,
the user is not already subscribed
add more validation as you deem fit.
<?php use Phppot\Subscription; use Phppot\SupportService; /** * For confirmation action. * 1. Get the secure has from url * 2. validate it against url * 3. update the subscription status in database accordingly. */ session_start(); // to ensure the request via POST require_once __DIR__ . '/lib/SupportService.php'; $supportService = new SupportService(); // to Debug set as true $supportService->setDebug(true); $subscriptionKey = $_GET['q']; require_once __DIR__ . '/Model/Subscription.php'; $subscription = new Subscription(); $result = $subscription->getMember($subscriptionKey, 0); if (count($result) > 0) { // member found, go ahead and update status $subscription->updateStatus($subscriptionKey, 1); $message = $result[0]['member_name'] . ', your subscription is confirmed.'; $messageType = 'success'; } else { // securiy precaution: do not reveal any information here // play subtle with the reported message $message = 'Invalid URL!'; $messageType = 'error'; } ?> <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="author" content="Vincy"> <link rel="stylesheet" type="text/css" href="assets/css/phppot-style.css"> <title>Double Opt-In Subscription Confirmation</title> </head> <body> <div class="phppot-container"> <h1>Double Opt-in Subscription Confirmation</h1> <div class="phppot-row"> <div id="phppot-message" class="<?php echo $messageType; ?>"><?php echo $message;?></div> </div> </div> </body> </body> </html>
If validation fails, do not reveal any information to the user. You should only say that it has failed.
More important do not say, not such email found. This will allow finding who has subscribed to your service. Whenever a validation fails, the displayed message should not reveal internal information.
On validation success, update the subscription status. Then show a happy success message to the user.
Conclusion
I have presented you with a production-grade double opt-in subscription form. I have followed a most secure hash generation method for confirmation URL email. I present it to you under the MIT license. The intention is to be the most permissible. You can download it free and change the code. You can even use it in your commercial projects. I have used the most secure code as possible. You can use this in your live site to manage newsletter subscription. In the coming part, I will include unsubscribe and enhance it further. Leave your comments below with what sort of enhancements you are looking for.
Dharker Studio Bundle & Paradox Interactive Flash Sale
Dharker Studio Bundle | 11 Steam Games | 96% OFF
[www.indiegala.com] Hot story driven games, soundtracks and plenty of romantic dates: the Dharker Studio Bundle has you covered. Don't miss the special 24h launch price.
Paradox Interactive Flash Sale, up to -85%
[www.indiegala.com] Level up your Steam library with BATTLETECH, Cities: Skylines, Age of Wonders, Stellaris and more exclusive deals from Paradox Interactive.
Create an account or log in an already existing one and permanently add the game on your account. Alternatively you can redeem it from the Epic Launcher on the game's giveaway page.
We are welcoming everyone to join our discord server (link below). We are more active there on finding giveaways, small or large.
Review: Stories Untold – A Chilling Horror That Toys With ’80s Nostalgia
Stories Untold is a chilling collection of four interconnected vignettes that make up a twisted little journey exploring the true nature of nostalgia and the very fabric of memories we all hold so dear. It examines how we remember and reconfigure things from our pasts and how digging down into what we, on the surface, may have always assumed to be real, comforting and familiar can reveal all sorts of forgotten traumas and unexpected surprises.
These four short, sharp shocks are bolstered by their delivery through the ingenious lo-fi UI aesthetic provided by developer No Code. It’s an aesthetic fans of Alien: Isolation will immediately recognise – lead writer and director John McKellan’s work injected that horror masterpiece with a real sense of time and place – and here it draws us in completely as we inch forward towards a startling denouement that ties the whole thing together.
The House Abandon, the first part of Stories Untold, was originally released as a standalone prototype but garnered such praise from fans of interactive horror that the team at No Code decided to go ahead and create this fully formed adventure around it. Things start out simply enough. In the comfort of your very own childhood bedroom, you begin your journey here by playing an old text adventure game, sat at your desk banging out instructions on the keyboard of your ZX Spectrum.
As you play this strange game – which mirrors exactly the environment in which you’re currently sat – you slowly begin to realise that what’s happening within it as you play is somehow affecting things in the real world. Something is not quite right, and what was, just moments ago, a warm and familiar environment slowly becomes infused with a creeping dread. There is something at work here; a darkness, a secret at the centre of everything you thought you knew.
Moving into chapter two, The Lab Conduct, your familiar childhood surroundings are gone now; you find yourself stationed in front of a wall of complicated X-Ray equipment. There’s a detailed manual that shows you how each element of this technology works and you must follow instructions carefully in order to successfully complete a series of experiments on what appears to be a human heart.
Again, it’s the extraordinary detail, both aesthetically and in how you’re expected to interact with all this stuff, that draws you in. Switching on a camera, setting an old TV to various viewing modes, powering up a rather long drill and tuning your Amp and Signal Generator until everything is successfully tweaked in order for these delicate procedures to go ahead. It feels like a painstaking and complex process – referring to instructions, mastering and understanding what each bit of kit does – and it fully and very cleverly envelopes you in the narrative, driving home each and every shock with superb force as a result.
Later on, you’ll get to grips with an old Microfiche reader, twisting and turning pages, zooming in and out as you focus on bits and pieces of text. There’s a great big retro radio receiver you’ll use to scan the airwaves for coded messages and then translate them, inputting codes, following the guidelines of mysterious glossaries like some half-mad amnesiac detective, each successful step forward drawing that ever-present unknown, that sense of danger you first felt in your childhood bedroom getting even closer.
Stories Untold is steeped in 1980s pop culture; this is a heady mix of familiar old things, especially for players of a certain vintage. The screeches from your ZX Spectrum as it loads up a game, that old wooden-panelled tv set, the wonderfully ’80s theme tune. There are little bits of The Thing in here, 2001: A Space Odyssey, The Twilight Zone and even the more recent Stanger Things TV show – itself built entirely on the same sense of ’80s nostalgia from which this game creates its core. However, it’s the ruining, not celebrating, of that very nostalgia which plays such a big part in proceedings here – injecting dearly held memories with an almost otherworldly malevolence – and that’s where this game finds most of its power to unsettle.
For an experience that takes all of three hours to complete, Stories Untold certainly packs a wallop; perhaps not the all-out horror you may be expecting, but an emotional and unsettling one that will stay with you well after you put the final pieces of its puzzle together. The final chapter manages to pull everything together in a satisfying and pretty brutal way – we were actually recoiling from our screen, not wanting to take the next step at points – and we genuinely hope we get to see more of this sort of thing from No Code in the future.
In terms of this Switch port, both in docked and portable everything runs perfectly smoothly and we didn’t encounter any bugs on our playthrough of the game. We did feel like the text was a little small in places in handheld mode, although this is somewhat mitigated by a “lean in” function that gets you closer to the various screens and monitors you’re presented with in-game. We also found tuning the radio receiver in chapter three quite difficult to be exact about until we realised we could fine-tune it with some buttons on the radio itself.
Conclusion
Stories Untold is a chilling adventure that manages to draw us right into its world through the ingenious use of its UI and perfectly realised lo-fi aesthetic. Through the walls of old technology and complicated machinery, it creates a uniquely strong bond between player and narrative, giving you a real sense of place within its world as it slowly corrupts and twists from the comfortingly familiar to something else entirely. It’s one of the best interactive horror stories we’ve ever played and a perfect fit for enjoying alone in the dark on Switch.
Sega Hosting Puyo Day Live Stream Next Month, Will Share “24 Pieces Of News”
Over the past few years, Sega has released quite a lot of Puyo Puyo games on the Nintendo Switch. We got Puyo Puyo Tetris in 2017 and Puyo Puyo Champions was localised last year. The Sega AGES version of the original was also made available here in the west in 2019 and earlier this month Puyo Puyo Tsu arrived in Japan.
If you still need more Puyo Puyo in your life, then you should consider tuning into Sega’s ‘Puyo Day 2020 Livestream’ next month on 4th February (8:00 pm JST) over on YouTube or the Japanese video streaming service NicoNico Live. Sega will reportedly be sharing “24 pieces of news” during the broadcast – including updates on each Puyo Puyo title – and there’ll also be various events such as a segment featuring the top Puyo Puyo Champions players.
For some added context, “2-4” reads as “Pu-Yo” in Japanese, which matches the date of Puyo Day (February 4) and also explains why exactly 24 news items will be shared during the event (thanks, Siliconera). Of course, this could only mean one thing – Puyo Puyo for Smash! No, not really, but that’s what some enthusiastic fans are now thinking. After all, if tetrominos are in consideration, a Puyo Puyo representative should also be in with a chance.
Will you be keeping tabs on this broadcast? Tell us down in the comments.