/* ========================================================= FICHA · SEO / META / JSON-LD ========================================================= */ if (!function_exists('cez_seo_clean_text')) { function cez_seo_clean_text($value, int $limit = 0): string { $text = trim(preg_replace('/\s+/u', ' ', strip_tags((string)$value))); if ($limit > 0 && function_exists('mb_strlen') && mb_strlen($text, 'UTF-8') > $limit) { $text = rtrim(mb_substr($text, 0, $limit - 1, 'UTF-8')) . '…'; } elseif ($limit > 0 && strlen($text) > $limit) { $text = rtrim(substr($text, 0, $limit - 1)) . '…'; } return $text; } } if (!function_exists('cez_seo_companies_from_row')) { function cez_seo_companies_from_row(array $r, int $max = 3): array { $out = []; foreach (['compania','compania2','compania3','compania4','compania5','compania6'] as $field) { foreach (explode(',', (string)($r[$field] ?? '')) as $name) { $name = trim($name); if ($name !== '' && !in_array($name, $out, true)) { $out[] = $name; } } } return array_slice($out, 0, $max); } } if (!function_exists('cez_seo_platforms_from_codes')) { function cez_seo_platforms_from_codes(array $codes, array $sisToSistemaMap = [], int $max = 6): array { $out = []; foreach ($codes as $code) { $code = trim((string)$code); if ($code === '') { continue; } $label = trim((string)($sisToSistemaMap[$code] ?? $code)); if ($label !== '' && !in_array($label, $out, true)) { $out[] = $label; } } return array_slice($out, 0, $max); } } if (!function_exists('cez_ficha_meta_description')) { function cez_ficha_meta_description(array $r, array $context = []): string { $isEn = (($context['l'] ?? null) === 'en'); $pg = trim((string)($context['pg'] ?? '')); $item = trim((string)($context['itemDescription'] ?? '')); $name = trim((string)($r['nombre'] ?? '')); $subtitle = trim((string)($r['subtitulo'] ?? '')); $fullName = trim($name . ($subtitle !== '' ? ' - ' . $subtitle : '')); $companies = cez_seo_companies_from_row($r, 2); $companyText = implode(' / ', $companies); $yearText = trim((string)($context['anos_string'] ?? '')); $platforms = cez_seo_platforms_from_codes((array)($context['platforms'] ?? []), (array)($context['sisToSistemaMap'] ?? []), 5); $platformText = implode(', ', $platforms); $features = []; if ($pg === '') { if (!empty($r['comentario'])) { $features[] = $isEn ? 'review' : 'análisis'; } if ((int)($context['totalDescargasFicha'] ?? 0) > 0) { $features[] = $isEn ? 'downloads' : 'descargas'; } if ((int)($r['rscreens'] ?? 0) > 0) { $features[] = $isEn ? 'screenshots' : 'pantallas'; } if ((int)($r['rcovers'] ?? 0) > 0) { $features[] = $isEn ? 'covers' : 'carátulas'; } if ((int)($r['rmanual'] ?? 0) > 0) { $features[] = $isEn ? 'manuals' : 'manuales'; } if ((int)($context['rmags'] ?? 0) > 0) { $features[] = $isEn ? 'magazine reviews' : 'revistas'; } $features[] = $isEn ? 'credits' : 'créditos'; } if ($pg !== '' && $item !== '') { $desc = $isEn ? $item . ' of ' . $fullName . '. Additional material and information from Computer Emuzone' : $item . ' de ' . $fullName . '. Material e información complementaria en Computer Emuzone'; } else { $featureText = implode(', ', array_values(array_unique($features))); $desc = $isEn ? 'Game card of ' . $fullName . ($featureText ? ': ' . $featureText : '') : 'Ficha de ' . $fullName . ($featureText ? ': ' . $featureText : ''); } $tail = []; if ($companyText !== '') { $tail[] = $companyText; } if ($yearText !== '') { $tail[] = $yearText; } if ($platformText !== '') { $tail[] = ($isEn ? 'for ' : 'para ') . $platformText; } if ($tail) { $desc .= '. ' . implode(', ', $tail) . '.'; } return cez_seo_clean_text($desc, 165); } } if (!function_exists('cez_ficha_jsonld')) { function cez_ficha_jsonld(array $r, array $context = []): array { $isEn = (($context['l'] ?? null) === 'en'); $name = trim((string)($r['nombre'] ?? '')); $subtitle = trim((string)($r['subtitulo'] ?? '')); $fullName = trim($name . ($subtitle !== '' ? ' - ' . $subtitle : '')); $companies = cez_seo_companies_from_row($r, 6); $platforms = cez_seo_platforms_from_codes((array)($context['platforms'] ?? []), (array)($context['sisToSistemaMap'] ?? []), 12); $canonical = trim((string)($context['canonical'] ?? '')); $imageUrl = trim((string)($context['imageUrl'] ?? '')); $description = trim((string)($context['description'] ?? '')); $json = [ '@context' => 'https://schema.org', '@type' => 'VideoGame', 'name' => $fullName !== '' ? $fullName : $name, 'url' => $canonical, 'inLanguage' => $isEn ? 'en' : 'es', 'publisher' => [ '@type' => 'Organization', 'name' => 'Computer Emuzone', 'url' => 'https://computeremuzone.com/' ], ]; if ($description !== '') { $json['description'] = $description; } if ($imageUrl !== '') { $json['image'] = [$imageUrl]; } if ($canonical !== '') { $json['mainEntityOfPage'] = ['@type' => 'WebPage', '@id' => $canonical]; } if ($platforms) { $json['gamePlatform'] = $platforms; } if ($companies) { $json['creator'] = array_map(static fn($name) => ['@type' => 'Organization', 'name' => $name], $companies); } $years = preg_split('/[^0-9]+/', (string)($context['anos_string'] ?? ''), -1, PREG_SPLIT_NO_EMPTY); if (!empty($years)) { $json['datePublished'] = (string)min(array_map('intval', $years)); } $genreLabels = []; foreach ((array)($context['genres'] ?? []) as $g) { $label = trim((string)($g[$isEn ? 'nombre_en' : 'nombre'] ?? $g['nombre'] ?? '')); if ($label !== '' && !in_array($label, $genreLabels, true)) { $genreLabels[] = $label; } } foreach ((array)($context['subgenres'] ?? []) as $g) { $label = trim((string)($g[$isEn ? 'nombre_en' : 'nombre'] ?? $g['nombre'] ?? '')); if ($label !== '' && !in_array($label, $genreLabels, true)) { $genreLabels[] = $label; } } if ($genreLabels) { $json['genre'] = $genreLabels; } $dateModified = trim((string)($context['dateModified'] ?? '')); if ($dateModified !== '' && preg_match('/^\d{4}-\d{2}-\d{2}/', $dateModified)) { $json['dateModified'] = substr($dateModified, 0, 10); } $votos = (int)($context['votos'] ?? 0); $media = (float)($context['media'] ?? 0); if ($votos > 0 && $media > 0) { $json['aggregateRating'] = [ '@type' => 'AggregateRating', 'ratingValue' => round($media, 1), 'ratingCount' => $votos, 'bestRating' => 10, 'worstRating' => 1 ]; } $cezScore = isset($context['cezScore']) && $context['cezScore'] !== '' ? (float)$context['cezScore'] : 0.0; $reviewBody = cez_seo_clean_text($r['comentario'] ?? '', 500); if ($reviewBody !== '') { $review = [ '@type' => 'Review', 'reviewBody' => $reviewBody, 'author' => ['@type' => 'Organization', 'name' => 'Computer Emuzone'] ]; if ($cezScore > 0) { $review['reviewRating'] = [ '@type' => 'Rating', 'ratingValue' => round($cezScore, 1), 'bestRating' => 10, 'worstRating' => 1 ]; } $json['review'] = $review; } return array_filter($json, static fn($v) => $v !== '' && $v !== [] && $v !== null); } } Do Not Feed the Monkeys (Fictiorama Studios / Alawar 2019) :: Mobile Zone
carátulascarátulas
PUNTUACIONESpuntuaciones

CEZ

Total
Valoración editorial
Valoración actual y desglose por apartados.
Gráficos
Música
Jugabilidad
Presentación

Comunidad y Revistas

Votos
0
Participación
Nota Votos
Usuarios
Usuarios
0
equipo de programaciónequipo de programación
Info
No disponemos de información sobre los autores de este juego. Si los conoces, pega aquí los créditos.
comentacomenta
AFILIADOS
agradecimientosagradecimientos
Todavía no hay contribuciones registradas para esta ficha.