Remedy Entertainment se encuentra estos días celebrando el décimo aniversario del estreno de Alan Wake por todo lo alto con su llegada a Xbox Game Pass, entre otras cosas. Este juego de terror psicológico se convirtió pronto en un título de culto por su ambientación y narrativa, pero su desarrollo fue todo lo contrario a un paseo de rosas. Tras abandonar parte de la ambiciosa propuesta jugable que se pensó en un principio para Alan Wake, el juego tuvo que rehacerse casi por completo en el tercer año de desarrollo.
Aunque no es ningún secreto que Alan Wake en un principio iba a tener un mundo abierto, tal y como se enseñó en su presentación del E3 2005, el equipo de Sam Lake fue incapaz de hacer funcionar sus ambiciones dentro del juego, ni con el respaldo que supuso el acuerdo con Microsoft. Tal y como cuenta Sam Lake en una entrevista con Arsh Technica, durante el tercer año de desarrollo se tomó la difícil decisión de prescindir de gran parte de sus ideas de mundo abierto y rehacer el juego casi por completo para asemejarse al Alan Wake que llegó finalmente a las tiendas.
Microsoft enseñará un «montón de nuevos AAA first party» para Xbox Series X en el evento de julio
Algunas de las ideas del mundo abierto se mantuvieron, aunque de manera casi testimonial, y se rehicieron cosas como el propio aspecto del protagonista. Esto retrasó más de lo debido el desarrollo de Alan Wake hasta que finalmente saliera al mercado en 2010. Había ciertos indicios de ese mundo abierto en el juego final, pero cuesta imaginarse ahora el juego con un mundo abierto que encaje igual de bien con su apartado narrativo.
En estos momentos, el lanzamiento de una segunda entrega parece bastante improbable, pero Remedy dará respuesta a algunos de los misterios de Alan Wake a través del segundo DLC de Control. Veremos lo que la Agencia ha podido averiguar sobre los acontecimientos de Bright Falls durante estos años.
//functions that need to run after ajax buttons are clicked dynamicElements();
//menu hover fx menuHovers();
});
//applied to elements within ajax panels function dynamicElements() { //portholes mouseovers jQuery(".portholes .porthole-link").hover( function() { jQuery(this).siblings(".porthole-color").stop().animate({ 'opacity':'.8' }, 150); jQuery(this).siblings(".porthole-layer").stop().animate({ 'opacity':'0' }, 350); jQuery(this).siblings(".porthole-info").find(".rating-wrapper").stop().animate({ 'opacity':'.9' }, 100); jQuery(this).siblings(".porthole-info").stop().delay(0).queue(function(next){ jQuery(this).addClass("active"); next(); }); }, function() { jQuery(this).siblings(".porthole-color").stop().animate({ 'opacity':'0' }, 550); jQuery(this).siblings(".porthole-layer").stop().animate({ 'opacity':'.9' }, 250); jQuery(this).siblings(".porthole-info").find(".rating-wrapper").stop().animate({ 'opacity':'0' }, 550); jQuery(this).siblings(".porthole-info").stop().delay(150).queue(function(next){ jQuery(this).removeClass("active"); next(); }); } ); //active hover jQuery(".add-active").hover( function() { jQuery(this).addClass("active"); }, function() { jQuery(this).removeClass("active"); } ); //image hovers jQuery(".active-image").hover( function() { jQuery(this).find('img').stop().animate({ opacity: .4 }, 150); }, function() { jQuery(this).find('img').stop().animate({ opacity: 1.0 }, 500); } ); jQuery(".the_content").hover( function() { jQuery(this).find('img').stop().animate({ opacity: .4 }, 150); }, function() { jQuery(this).find('img').stop().animate({ opacity: 1.0 }, 500); } ); //jQuery tooltips jQuery('.info').tooltip(); jQuery('.info-top').tooltip(); jQuery('.info-bottom').tooltip({ placement: 'bottom' }); jQuery('.info-left').tooltip({ placement: 'left' }); jQuery('.info-right').tooltip({ placement: 'right' }); //jQuery popovers jQuery('.popthis').popover(); //jQuery alert dismissals jQuery(".alert").alert(); //jQuery fitvids jQuery('.video_frame').fitVids(); //equal height columns equalHeightColumns(jQuery(".widget-panel")); equalHeightColumns(jQuery(".loop.grid .article-panel")); //if items are dynamically added on page load, need to account for new width resizeContentsMenu(); resizeStickyMenu(); }
//call equal height columns when window is resized jQuery(window).resize(function() { equalHeightColumns(jQuery(".widget-panel")); equalHeightColumns(jQuery(".loop.grid .article-panel")); resizeContentsMenu(); resizeStickyMenu(); });
//call equal height columns when widgets is resized jQuery("#widgets").resize(function(e){ equalHeightColumns(jQuery(".widget-panel")); });
//call equal height columns when main menu items are hovered since sub menus are //hidden and don't have heights until visible jQuery('body').on('mouseover', '#section-menu-full a.parent-item', function(e){ equalHeightColumns(jQuery("#section-menu-full ul.term-list, #section-menu-full li.post-list"), true); }); //equal height columns function equalHeightColumns(group, nolimit) { tallest = 0; width = jQuery(window).width(); group.each(function() { jQuery(this).removeAttr('style'); thisHeight = jQuery(this).height(); if(thisHeight > tallest) { tallest = thisHeight; } }); if(width > 991 "https://www.somosxbox.com/" nolimit) { group.height(tallest); } }
var topOffset = 70; var barOffset = 208;
jQuery(window).scroll(function() { if (jQuery(this).scrollTop() > 110) { jQuery('#sticky-bar').addClass('fixed'); jQuery('#sticky-bar.logo-slide .logo a').stop().animate({ opacity: 1.0, left: '0px' }, 100); } else { if(!jQuery('#sticky-menu').is(':visible') && !jQuery('#section-menu-mobile').is(':visible')) { jQuery('#sticky-bar').removeClass('fixed'); jQuery('#sticky-bar.logo-slide .logo a').stop().animate({ opacity: 0, left: '-100px' }, 500); } } if(jQuery(this).scrollTop() > 44) { jQuery('#sticky-bar').addClass('sticky-mobile'); } else { jQuery('#sticky-bar').removeClass('sticky-mobile'); }
//back to top arrow if (jQuery(this).scrollTop() < 150) { jQuery("#back-to-top").fadeOut(); } else { jQuery("#back-to-top").fadeIn(); } resizeContentsMenu(); resizeStickyMenu(); }); function resizeStickyMenu() { //see if compact versions of menus should be shown if(jQuery('#section-menu-full').length > 0) { var megaWidth = jQuery('.mega-menu').width(); if(jQuery('.mega-menu').length == 0) { var megaWidth = jQuery('.non-mega-menu').width(); } var standardWidth = jQuery('.secondary-menu-full').width(); var compactWidth = jQuery('.secondary-menu-compact').width(); var menusWidth = megaWidth + standardWidth; var compactMenusWidth = megaWidth + compactWidth; var logoWidth = jQuery('#sticky-bar .logo').width(); //var logoLeft = jQuery('#sticky-bar .logo').offset(); //logoWidth = logoWidth + logoLeft.left; var newWidth = jQuery('#new-articles').width(); var stickyWidth = jQuery('#sticky-menu-selector').width(); var randomWidth = jQuery('#random-article').width(); var controlsWidth = jQuery('#sticky-controls').width(); var barWidth = jQuery('#sticky-bar > .row > .col-md-12 > .container').width(); if(barWidth === null) barWidth = jQuery('#sticky-bar > .row > .col-xs-12 > .container').width(); var extraWidth = logoWidth + newWidth + stickyWidth + randomWidth + controlsWidth; var limitWidth = barWidth - extraWidth; //alert('megaWidth=' + megaWidth + 'nstandardWidth=' + standardWidth + 'nmenusWidth=' + menusWidth + 'nlogoWidth=' + logoWidth + 'nnewWidth=' + newWidth + 'nstickyWidth=' + stickyWidth + 'nrandomWidth=' + randomWidth + 'ncontrolsWidth=' + controlsWidth + 'nbarWidth=' + barWidth + 'nextraWidth=' + extraWidth + 'nlimitWidth=' + limitWidth); //mega menu alone passes limit if(megaWidth > limitWidth) { jQuery('#section-menu-full').hide(); jQuery('#section-menu-compact').show(); } //standard menu alone passes limit if(standardWidth > limitWidth) { jQuery('.secondary-menu-full').hide(); jQuery('.secondary-menu-compact').show(); } //both menus together pass limit if(menusWidth > limitWidth) { //first reduce standard menu jQuery('.secondary-menu-full').hide(); jQuery('.secondary-menu-compact').show(); //compact standard plus mega menu pass limit if(compactMenusWidth > limitWidth) { jQuery('#section-menu-full').hide(); jQuery('#section-menu-compact').show(); } } } }
function resizeContentsMenu() { //bookmark positioning if(jQuery('.contents-menu-wrapper').length > 0) { var menuOffset = jQuery('.contents-menu-wrapper').offset().top - topOffset; var newWidth = jQuery('.contents-menu-wrapper').width() - 2; var btnWidth = jQuery('.contents-menu-wrapper ul.sort-buttons').width(); var lblWidth = jQuery('.contents-menu-wrapper .bar-label-wrapper').width(); var wrapperWidth = jQuery('#main-content').width() - 2; var barWidth = btnWidth + lblWidth; if (barWidth > wrapperWidth) { jQuery('.contents-menu-wrapper').addClass('vertical'); } if (!jQuery('.contents-menu-wrapper').hasClass('vertical') && jQuery(this).scrollTop() > menuOffset) { jQuery('.contents-menu').addClass('fixed').width(newWidth); } else { jQuery('.contents-menu').removeClass('fixed').removeAttr('style'); } //show the menu after scrolling and hide after a while (only for vertical layout) if(jQuery('.contents-menu-wrapper').hasClass('vertical')) { if(!jQuery('.contents-menu-wrapper').is(':visible')) { jQuery('.contents-menu-wrapper').stop().fadeIn(100); } } } if(jQuery('.contents-menu-wrapper').hasClass('vertical')) { var newOffset = 68; jQuery('body').data()('bs.scrollspy').options.offset = newOffset; // Set the new offset jQuery('body').data()('bs.scrollspy').process(); // Force scrollspy to recalculate the offsets to your targets jQuery('body').scrollspy('refresh'); // Refresh the scrollspy. } }
//if disqus is active need to adjust anchor link from comments to disqus thread function disqusContentsMenu() { if (jQuery("#disqus_thread").length > 0){ jQuery("#comments-anchor-wrapper a").attr("href", "#disqus_thread"); } }
//hide contents menu 2 seconds after scrolling has stopped (function() { var timer; jQuery(window).bind('scroll',function () { clearTimeout(timer); timer = setTimeout( refresh , 1800 ); }); var refresh = function () { //only want to do this for vertical style and only if mouse is not currently hovering over the menu if(jQuery('.contents-menu-wrapper').hasClass('vertical') && jQuery('.contents-menu-wrapper:hover').length == 0) { jQuery('.contents-menu-wrapper').fadeOut(1200); } }; })();
//hide contents menu after user mouses out (function() { var timer; jQuery('body').on('mouseenter', '.contents-menu-wrapper.vertical', function(e) { jQuery('.contents-menu-wrapper').stop(true, true).fadeIn(100); clearTimeout(timer); }); jQuery('body').on('mouseleave', '.contents-menu-wrapper.vertical', function(e) { clearTimeout(timer); timer = setTimeout( refresh , 1800 ); }); var refresh = function () { //only want to do this for vertical style and only if mouse is not currently hovering over the menu if(jQuery('.contents-menu-wrapper').hasClass('vertical') && jQuery('.contents-menu-wrapper:hover').length == 0) { jQuery('.contents-menu-wrapper').fadeOut(1200); } }; })();
/** * Check a href for an anchor. If exists, and in document, scroll to it. * If href argument ommited, assumes context (this) is HTML Element, * which will be the case when invoked by jQuery after an event */ function scroll_if_anchor(href) { href = typeof(href) == "string" ? href : jQuery(this).attr("href");
//do not interfere with bootstrap carousels if(jQuery(href).length > 0 && !jQuery(this).hasClass('no-scroll')) { var fromTop = 118;
//subtract contents menu height (and margin) if(jQuery('.contents-menu-wrapper').hasClass('vertical')) { fromTop = fromTop - 51; }
// If our Href points to a valid, non-empty anchor, and is on the same page (e.g. #foo) // Legacy jQuery and IE7 may have issues: http://stackoverflow.com/q/1593174 if(href.indexOf("#") == 0) { var $target = jQuery(href);
// Older browser without pushState might flicker here, as they momentarily // jump to the wrong position (IE < 10) if($target.length) { jQuery('html, body').animate({ scrollTop: $target.offset().top - fromTop }); if(history && "pushState" in history) { history.pushState({}, document.title, window.location.pathname + href); return false; } } } } } // When our page loads, check to see if it contains an anchor scroll_if_anchor(window.location.hash); // Intercept all anchor clicks jQuery("body").on("click", "a", scroll_if_anchor); //menu hovers function menuHovers() { jQuery(".menu .post-list a").hover( function() { jQuery(this).children('img').stop().animate({ opacity: .3 }, 150); }, function() { jQuery(this).children('img').stop().animate({ opacity: 1.0 }, 500); } ); } //new articles effects jQuery("#new-articles .selector").hover( function() { jQuery(this).addClass('over'); }, function() { jQuery(this).removeClass('over'); } ); jQuery("#new-articles .selector").click(function() { jQuery('#new-articles .post-container').animate({ height: 'toggle' }, 100, 'linear' ); jQuery(this).toggleClass('active'); }); //show search box jQuery("#menu-search-button").hover( function() { jQuery(this).toggleClass('hover'); } ); jQuery("#menu-search-button").click( function() { jQuery('#menu-search').fadeToggle("fast"); jQuery(this).toggleClass('active'); } ); //hide superfish more drop down on mobile if clicked again jQuery("#secondary-menu-selector").click( function() { if(jQuery('.secondary-menu-compact ul.menu').is(':visible')) { jQuery('.secondary-menu-compact ul.menu').hide(); } } ); //search form submission jQuery("#searchformtop input").keypress(function(event) { if (event.which == 13) { event.preventDefault(); var len = jQuery("#s").val().length; if(len >=3) { jQuery("#searchformtop").submit(); } else { alert("Search term must be at least 3 characters in length"); } } }); //email subscribe form submission jQuery("#feedburner_subscribe button").click(function() { jQuery("#feedburner_subscribe").submit(); }); //show login form jQuery("#sticky-login").click(function() { jQuery('#sticky-login-form').animate({ height: 'toggle' }, 100, 'linear' ); jQuery('#sticky-register-form').hide(); jQuery('#sticky-register').removeClass('active'); jQuery(this).toggleClass('active'); }); //show register form jQuery("#sticky-register").click(function() { jQuery('#sticky-register-form').animate({ height: 'toggle' }, 100, 'linear' ); jQuery('#sticky-login-form').hide(); jQuery('#sticky-login').removeClass('active'); jQuery(this).toggleClass('active'); }); //submit button hover effects jQuery(".sticky-submit").hover(function() { jQuery(this).toggleClass("active"); }); //login form submission jQuery(".sticky-login-form #user_pass").keypress(function(event) { if (event.which == 13) { jQuery("#sticky-login-form .loading").show(); jQuery("form.sticky-login-form").animate({opacity: "0.15"}, 0); event.preventDefault(); jQuery(".sticky-login-form").submit(); } }); jQuery("#sticky-login-submit").click(function() { jQuery("#sticky-login-form .loading").show(); jQuery("form.sticky-login-form").animate({opacity: "0.15"}, 0); jQuery(".sticky-login-form").submit(); }); //register form submission jQuery(".sticky-register-form #user_email").keypress(function(event) { if (event.which == 13) { jQuery("#sticky-register-form .loading").show(); jQuery("form.sticky-register-form").animate({opacity: "0.15"}, 0); event.preventDefault(); jQuery(".sticky-register-form").submit(); } }); jQuery("#sticky-register-submit").click(function() { jQuery("#sticky-register-form .loading").show(); jQuery("form.sticky-register-form").animate({opacity: "0.15"}, 0); jQuery(".sticky-register-form").submit(); }); //hide check password message jQuery(".check-password").click(function() { jQuery(this).animate({ height: 'toggle' }, 100, 'linear' ); }); //scroll all #top elements to top jQuery("a(href='#top')").click(function() { jQuery("html, body").animate({ scrollTop: 0 }, "slow"); return false; }); //image darkening jQuery('body').on('mouseenter', '.darken', function(e) { jQuery(this).find('img').stop().animate({ opacity: .4 }, 150); }).on('mouseleave', '.darken', function(e) { jQuery(this).find('img').stop().animate({ opacity: 1.0 }, 500); }); //reaction mouseovers jQuery('body').on('mouseenter', '.reaction.clickable', function(e) { jQuery(this).addClass('active'); }).on('mouseleave', '.reaction', function(e) { jQuery(this).removeClass('active'); }); // user rating panel display jQuery('body').on('mouseover', '.user-rating .rating-wrapper.rateable', function(e) { jQuery(this).addClass('over'); jQuery(this).find('.form-selector-wrapper').fadeIn(100); }); jQuery('body').on('mouseleave', '.user-rating .rating-wrapper', function(e) { jQuery(this).stop().delay(100) .queue(function(n) { jQuery(this).removeClass('over'); n(); }); jQuery(this).find('.form-selector-wrapper').stop().fadeOut(500); }); // user comment rating panel display jQuery('body').on('mouseover', '#respond .rating-wrapper.rateable', function(e) { jQuery(this).addClass('over'); jQuery(this).find('.form-selector-wrapper').fadeIn(100); }); jQuery('body').on('mouseleave', '#respond .rating-wrapper', function(e) { jQuery(this).stop().delay(100) .queue(function(n) { jQuery(this).removeClass('over'); n(); }); jQuery(this).find('.form-selector-wrapper').stop().fadeOut(500); }); // user comment rating jQuery( "#respond .form-selector" ).on( "slidestop", function( event, ui ) { var divID = jQuery(this).parent().parent().parent().attr("id"); var rating = jQuery(this).parent().siblings('.rating-value').html(); jQuery('#' + divID + ' .theme-icon-check').delay(100).fadeIn(100); jQuery('#' + divID + ' .hidden-rating-value').val(rating); });
//pinterest if(jQuery('#pinterest-social-tab').length > 0) { (function(d){ var f = d.getElementsByTagName('SCRIPT')(0), p = d.createElement('SCRIPT'); p.type = 'text/javascript'; p.async = true; p.src = "https://assets.pinterest.com/js/pinit.js"; f.parentNode.insertBefore(p, f); }(document)); }
//facebook if(jQuery('#facebook-social-tab').length > 0) { (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)(0); if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "https://connect.facebook.net/en_US/all.js#xfbml=1&status=0"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); }
//WINDOW.LOAD jQuery(window).load(function() {
//flickr if(jQuery('#flickr-social-tab').length > 0) { jQuery('.flickr').jflickrfeed({ limit: 9, qstrings: { id: "https://www.somosxbox.com/" }, itemTemplate: '
' }, function(data) { }); }
//tabs - these must go in window.load so pinterest will work inside a tab jQuery('.widgets-wrapper .it-social-tabs').tabs({ fx: { opacity: 'toggle', duration: 150 } }); jQuery('#footer .it-social-tabs').tabs({ active: 2, fx: { opacity: 'toggle', duration: 150 } }); jQuery('.share-wrapper').show(); equalHeightColumns(jQuery(".loop.grid .article-panel")); disqusContentsMenu();
//show ads after mmenu is setup because it wraps the page in a div //causing google adsense to reload jQuery('.it-ad').animate({opacity: '1'}, 0);
});
jQuery.noConflict();