Now that we are mesmerized by the arrival of a new generation, we are looking back at the past with a genre that has always been around: graphic adventure. Survivors who can adapt and reinvent themselves. Because a leading studio in this development like Dontnod Entertainmente has just released a game.
Those at Remember Me and Life is Strange marked their bottom with Tell me Why last summer, repeating before winter comes with Twin Mirror, a game by Shibuya Productions. His recipe is a great storytelling skill with a gameplay that is as simple as possible but effective. This title, which concerns us, is the exception, as it has a lot in common with all the others, but a change of direction is very noticeable. The question is whether it is positive and sufficient.
The site is located in Basswood, one less mining town than West Virginia, USA. Sam is a seasoned investigative journalist who left for an investigation after the mine closed, a tough event for many in the area. He has returned home to say goodbye to his old friend Nick, who was killed in a car accident. There’s something wrong, however, and his goddaughter, Joan, Nick’s daughter, insists that he start indgaring if it could have been murder.
The player quickly notices that the environment is hostile, that few are waiting for Sam there. The miners, former friends who withdraw their greetings, and Anna, who was very important to him in this life, are against him. As if these outer wounds weren’t enough, there is also his double, an inner self that only he can see and bring out the worst from within. With this outlook, his investigation against him seems to end.
The titles of this study contain two important elements. One is exploration and the other, which usually appears as a related mechanic or consequence of the above, is some kind of supernatural power or ability that distinguishes the protagonist. Max was able to rewind the time in LiS and here Sam has his “mental palace”. His irrepressible ability to memorize details and his analytical brain derive his ability to retrieve and rearrange information that can be used to solve puzzles. He has a database in his head with every memory and with all the people he has met in his work.
To hypothesize, check the clues to see if you can find connections. Once you’ve found all of the evidence, you can start building theories that reconstruct what happened. While all of this Phoenix Wright seems fun, it gets boring shortly after you grasp the trick: Because in every scenario you have to find absolutely all the clues to take the next steps when you’re less clear with what happened with something and who was slowing the pace bad thing.
To make the experience even slower if possible, stop by and watch the Basswood people talk. As with the other games in this study, the relationships you make with the NPC characters shape the story and open and close paths. My advice is to take a look at the menu from time to time to find out what your doing, what you have, and who you’ve been talking to.
You have to go with the strong idea of finding the most appropriate answers and this is sometimes accomplished by paying attention to Double’s suggestions. Moving the conversation to the best place will give you more details to investigate and a broader perspective on the situation. But even here you have the feeling that you are progressing at a snail’s pace, a bad start rhythm, to which the small supporting characters contribute. Most are flat, poorly represented, and lack substance. They look so little like a full Dontnod character that you don’t want to hear from them.
And this problem is also reflected in Sam and Double. In contrast to the protagonists of the previous graphic adventures of the French company and without going any further than Tell me Why, this journalist is immobile and does not develop any further. It lacks all of the inner path that every main character walks in a well-written Dontnod story. I feel a little repulsive even though as the plot progresses they tell certain things about their lives that make it all clear. Three quarters of the same with this double, which in the end is an uncomfortable presence from which one completely deviates in the end. Even the mechanics of making ethical decisions that should get you into trouble have lost that power. Because whatever you choose, it doesn’t seem like it is pulling the weight you would expect in a game like this.
While Twin Mirror doesn’t work for its narrative contribution, which is what is most expected of it, technically it deserves applause. Thanks to the use of the Unreal Engine, it’s one of Dontnod’s most successful visual expressions, with lots of lighting and superior detail work. They didn’t choose the photorealism of other similar works, and they did well not to pursue it any further. What’s more, it works the best it can with no errors or crashes. It’s like an early entry for this team into what’s to come. It’s a shame it’s not the most important thing.
Twin Mirror had all of the ballots to be a very cool graphic adventure. A story that begins with an investigation into a murder in a city full of personal secrets and grudges, a gritty protagonist with some sort of split personality and an infallible mind to gather information. But Dontnod and his partner Shibuya Productions have failed what is most expected of them: building a protagonist and characters around him who are relevant to the player. A weak story and a terrible rhythm of the game were what this work lacked, which, oddly enough, stands out the most for the technical ending. So many things have failed when it seemed like I had it all that it’s a real shame.
// document.addEventListener("DOMContentLoaded", function(){ // DrawFacebookLikeNotification(); // });
function FastRegister(tournament=false){ ajaxAgreementsPopUp(); if (typeof isSmartphoneLayout != 'undefined' && isSmartphoneLayout) window.location='/join'; else { $.ajax({ type: "POST", url: "/ajaxstuff/fastRegister.php", data: {session: {"screated":1606844935,"updated":1606844935},tournament:tournament}
}) .done(function (code) { $('#re_loginbox').replaceWith(code); // console.log(code); $('.loginWrapper').show(); }) .fail(function(jqXHR, msg) { console.log("request fail"); $(selectorForLoginMessage).text(msg).show(); }); } return false; }
function FastRegisterResponse(){ $.ajax({ type: "POST", url: "/ajaxstuff/fastRegister.php",
}) .done(function (code) { $('#re_loginbox').replaceWith(code); // console.log(code); $('.loginWrapper').show(); }) .fail(function(jqXHR, msg) { console.log("request fail"); $(selectorForLoginMessage).text(msg).show(); }); return false; }
function LoginWithFacebook(selectorForLoginMessage, fbUpdateUser) {
FB.login(function(response) { if (response.authResponse) { FB.api('/me', {fields: 'email,last_name,name,first_name'}, function(user) { var main = false; if (user && !user.error) { // console.log(user); if(selectorForLoginMessage == '#fbLoginMessageMain') main = true; $.ajax({ type: "POST", url: "/ajaxstuff/fblogin.php", data: {userobj: user, fbUpdateUser: fbUpdateUser, main: main} }) .done(function(code) { if(main){ console.log("Is logged"+code); if(code==0) { if(!$('.signin').hasClass('active-signin')) { $('.signin').addClass('active-signin'); if($('.login').hasClass('active-login')) { $('.login').removeClass('active-login'); var request = new GRAsync(); var path="/ajaxstuff/join.php?ajaxRequest"; request.setUrl(path) .setSelectors($('#joinContainer') ) .setData({register:true,facebookUser:user}) .setDataType('html') .setType('POST') .sendRequest();
} } } else { window.location="/";
} } else{ $('#re_loginbox').replaceWith(code); $('.loginWrapper').show(); //location.reload(true); } }) .fail(function(jqXHR, msg) { console.log("request fail"); $(selectorForLoginMessage).text(msg).show(); });
} }); } else { // console.log('User cancelled login or did not fully authorize.'); } }, {scope: 'email,publish_actions'}); // TODO: don't ask for publish_actions by default. It might scare away some users. Ask later, when they actually want it. return false; }
function AddSearchParamsAndReload(newParamStr) { var newParamArr = newParamStr.split("&"); if (window.location.search.length > 1) { // don't count the initial '?' var oldParams = window.location.search.substr(1).split("&"); var paramsToAdd = []; for (var j = 0; j < newParamArr.length; j++) { var found = false; for (var i = 0; i < oldParams.length; i++) if (newParamArr[j] == oldParams[i]) found = true; if (!found) paramsToAdd.push(newParamArr[j]); } if (!paramsToAdd.length) window.location.reload(); else window.location.search += '&'+paramsToAdd.join("&"); } else window.location.search="?"+newParamStr; }