Carregando agora

Dying Light: The Beast homenageia a história dos zumbis na cultura pop com novo trailer

A Techland lançou um novo trailer para Dying Light: The Beast que presta uma impressionante homenagem à história dos zumbis na cultura pop. O vídeo percorre a evolução dessas criaturas desde o início do século passado até as interpretações modernas, demonstrando como o game se conecta com essa tradição de horror que fascina gerações.

No trailer, uma equipe de maquiadores transforma um modelo em diferentes versões de não-mortos ao longo das décadas, começando pelos “catatônicos” dos anos 30, inspirados nas antigas lendas de magia voodoo. A progressão continua com os clássicos zumbis dos filmes de George Romero do final dos anos 60, que estabeleceram muitos dos padrões que conhecemos hoje.

A viagem temporal avança para os “infectados” dos anos 90, resultados de experimentos científicos secretos, até chegar às versões mais ágeis dos anos 2000. Estes últimos representaram uma mudança significativa na mitologia zumbi, abandonando o movimento lento e cambaleante por criaturas capazes de perseguir suas vítimas em alta velocidade.

O vídeo culmina com as interpretações contemporâneas, incluindo as versões vistas em jogos recentes, caracterizadas por zumbis maiores, mais fortes e resistentes, dotados de habilidades sobre-humanas e muito mais difíceis de eliminar – elementos que claramente influenciaram o design das criaturas em Dying Light: The Beast.

dying-light-the-beast_jpg_1280x720_q85 Dying Light: The Beast homenageia a história dos zumbis na cultura pop com novo trailer

Dying Light: The Beast será lançado em 19 de setembro para Xbox Series X/S, PlayStation 5 e PC. O jogo também chegará ao Xbox One e PlayStation 4 ainda este ano, em data a ser anunciada. O jogo marca o retorno do protagonista Kyle Crane, agora com novas habilidades sobrenaturais que prometem mudar significativamente a dinâmica de gameplay da série. 

Qual é o seu tipo favorito de zumbi apresentado no vídeo?

Processando seu voto…


document.addEventListener(‘alpine:init’, () => {
Alpine.data(‘ramarPoolComponent’, () => ({
poolId: 0,
hasVoted: false,
votedOption: 0,
results: null,
loading: false,
error: false,
errorMessage: ”,
options: [],
ajaxurl: ”,
resultsurl: ”,
statusurl: ”,
nonce: ”,

init() {
// Get data from HTML attributes
this.poolId = parseInt(this.$el.dataset.poolId);
this.options = JSON.parse(this.$el.dataset.poolOptions);
this.ajaxurl = this.$el.dataset.ajaxUrl;
this.resultsurl = this.$el.dataset.resultsUrl;
this.statusurl = this.$el.dataset.statusUrl;
this.nonce = this.$el.dataset.nonce;

// Initialize async operations
this.initAsync();
},

async initAsync() {
await this.checkVotingState();
if (this.hasVoted) {
this.loadResults();
}
},

async checkVotingState() {
const localStorageKey = `ramar_pool_voted_${this.poolId}`;
const localVote = localStorage.getItem(localStorageKey);

if (localVote) {
this.hasVoted = true;
this.votedOption = parseInt(localVote);
}

try {
const response = await fetch(`${this.statusurl}/${this.poolId}`, {
method: ‘GET’,
headers: {
‘X-WP-Nonce’: this.nonce
}
});

if (response.ok) {
const data = await response.json();
if (data.success) {
this.hasVoted = data.has_voted;
this.votedOption = data.voted_option;

if (data.has_voted) {
localStorage.setItem(localStorageKey, data.voted_option.toString());
if (data.results) {
this.results = data.results;
}
} else {
localStorage.removeItem(localStorageKey);
}
}
}
} catch (error) {
console.log(‘Could not verify voting status with server’);
}
},

async loadResults() {
try {
const response = await fetch(`${this.resultsurl}/${this.poolId}`, {
method: ‘GET’,
headers: {
‘X-WP-Nonce’: this.nonce
}
});

if (response.ok) {
const data = await response.json();
if (data.success) {
this.results = data.results;
}
}
} catch (error) {
console.log(‘Could not load existing results’);
}
},

async vote(option) {
if (this.hasVoted || this.loading) return;

this.loading = true;
this.error = false;

try {
const response = await fetch(this.ajaxurl, {
method: ‘POST’,
headers: {
‘Content-Type’: ‘application/json’,
‘X-WP-Nonce’: this.nonce
},
body: JSON.stringify({
pool_id: this.poolId,
option: option
})
});

const data = await response.json();

if (data.success) {
this.hasVoted = true;
this.votedOption = data.voted_option;
this.results = data.results;

const localStorageKey = `ramar_pool_voted_${this.poolId}`;
localStorage.setItem(localStorageKey, data.voted_option.toString());
} else {
this.error = true;
this.errorMessage = data.message || ‘Erro ao processar voto.’;
}
} catch (error) {
this.error = true;
this.errorMessage = ‘Erro de conexão. Tente novamente.’;
} finally {
this.loading = false;
}
}
}));
});

/* Alpine.js cloaking */
[x-cloak] {
display: none !important;
}

.ramar-pool {
max-width: 600px;
margin: 20px auto;
font-family: -apple-system, BlinkMacSystemFont, ‘Segoe UI’, Roboto, sans-serif;
}

.ramar-pool__card {
background: #ffffff;
border-radius: 12px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
overflow: hidden;
border: 1px solid #e1e5e9;
min-height: 320px; /* Prevent CLS between voting and results states */
}

.ramar-pool__header {
padding: 24px;
border-bottom: 1px solid #e1e5e9;
}

.ramar-pool__title {
margin: 0 0 12px 0;
font-size: 20px;
font-weight: 600;
color: #1a1a1a;
}

.ramar-pool__description {
color: #666;
line-height: 1.5;
}

.ramar-pool__body {
padding: 24px;
min-height: 200px; /* Ensure consistent height for content area */
display: flex;
flex-direction: column;
justify-content: center;
}

.ramar-pool__loading {
display: flex;
align-items: center;
justify-content: center;
padding: 20px;
color: #666;
gap: 12px;
}

.ramar-pool__loading-spinner {
width: 20px;
height: 20px;
border: 2px solid #e1e5e9;
border-top: 2px solid #0073aa;
border-radius: 50%;
animation: spin 1s linear infinite;
}

@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}

.ramar-pool__voting {
display: flex;
flex-direction: column;
gap: 12px;
}

.ramar-pool__option {
padding: 16px 20px;
border-radius: 8px;
border: 2px solid #e1e5e9;
background: #ffffff;
cursor: pointer;
transition: all 0.2s ease;
font-size: 16px;
text-align: left;
position: relative;
}

.ramar-pool__option–clickable:hover {
border-color: #0073aa;
background: #f8f9fa;
transform: translateY(-1px);
}

.ramar-pool__option–clickable:active {
transform: translateY(0);
}

.ramar-pool__option–result {
cursor: default;
padding: 0;
background: #f8f9fa;
overflow: hidden;
}

.ramar-pool__option–voted {
border-color: #0073aa;
background: #e8f4f8;
}

.ramar-pool__option-content {
padding: 16px 20px;
position: relative;
z-index: 2;
display: flex;
justify-content: space-between;
align-items: center;
}

.ramar-pool__option-text {
font-weight: 500;
color: #1a1a1a;
}

.ramar-pool__option-stats {
display: flex;
gap: 12px;
color: #666;
font-size: 14px;
}

.ramar-pool__option-bar {
height: 4px;
background: #e1e5e9;
position: relative;
}

.ramar-pool__option-fill {
height: 100%;
background: linear-gradient(90deg, #0073aa, #005a87);
transition: width 0.8s ease;
border-radius: 0 2px 2px 0;
}

.ramar-pool__option–voted .ramar-pool__option-fill {
background: linear-gradient(90deg, #00a32a, #007a20);
}

.ramar-pool__results {
display: flex;
flex-direction: column;
gap: 16px;
}

.ramar-pool__footer {
padding: 16px 24px;
background: #f8f9fa;
border-top: 1px solid #e1e5e9;
text-align: center;
color: #666;
font-weight: 500;
}

.ramar-pool__error {
background: #f8d7da;
color: #721c24;
padding: 12px 16px;
border-radius: 6px;
border: 1px solid #f5c6cb;
text-align: center;
}

/* Responsive design */
@media (max-width: 768px) {
.ramar-pool {
margin: 16px;
}

.ramar-pool__header,
.ramar-pool__body {
padding: 20px;
}

.ramar-pool__option-content {
flex-direction: column;
align-items: flex-start;
gap: 8px;
}

.ramar-pool__option-stats {
align-self: flex-end;
}
}

Fonte: Multiplayer.it


📰 Notícia originalmente publicada em GameVicio

🎮 Importado automaticamente para SushiGames.com.br

COMPARTILHE:

Publicar comentário