from pathlib import Path import shutil, zipfile, textwrap, os, json, re base = Path("/mnt/data/the-waltens-remains-neocities") if base.exists(): shutil.rmtree(base) (base / "assets" / "images").mkdir(parents=True) (base / "assets" / "audio").mkdir(parents=True) # ---------- Shared pieces ---------- nav = """ """ footer = """ """ head = """ """ def build_page(title, content, body_class=""): return f""" {title} | The Walten's Remains {head}
{nav}
{content}
{footer}
""" # ---------- Homepage ---------- index_content = """

THE WALTEN'S REMAINS

CURRENTLY IN DEVELOPMENT

Some things should have remained forgotten.

A survival horror fangame created by THE STATICWORKS.

Watch the cameras. Preserve the power. Do not let them reach the office.

""" # ---------- Game ---------- game_content = """
Imagem promocional do jogo

THE GAME

The Walten's Remains é uma fangame de survival horror inspirada na simplicidade e no mistério dos antigos sites de jogos independentes.

Durante cada turno, o jogador precisa observar câmeras, controlar o consumo de energia e reagir ao comportamento de diferentes animatrônicos.

PROJECT INFORMATION

GENRE: SURVIVAL HORROR / POINT-AND-CLICK

DEVELOPER: THE STATICWORKS

STATUS: IN DEVELOPMENT

PLATFORM: PC

LANGUAGES: PORTUGUÊS / ENGLISH

RELEASE DATE: TO BE ANNOUNCED

FEATURES

SECURITY CAMERA SYSTEM

LIMITED ENERGY

PROGRESSIVE NIGHTS AND WAVES

UNIQUE ANIMATRONIC BEHAVIOURS

RANDOM EVENTS

RECOVERABLE FILES AND HIDDEN LORE

""" # ---------- Archive ---------- archive_content = """
Arquivo corrompido

ARCHIVE

RECOVERED MATERIAL. SOME FILES MAY BE CORRUPTED.

""" # ---------- Development ---------- development_content = """
Imagem de desenvolvimento

DEVELOPMENT

THE WEBSITE IS ONLINE

The official website for The Walten's Remains is now available. New images, development notes and recovered files will be added here.

ENERGY SYSTEM UPDATE

The power system has been adjusted to make every action more important during a night.

FIRST MOVEMENT TEST

The first animatronic movement and behaviour tests have been added to the current prototype.

""" # ---------- Team ---------- team_content = """
Imagem da The StaticWorks

THE STATICWORKS

The StaticWorks é uma equipe independente dedicada à criação de jogos, experiências interativas e projetos de terror com identidades próprias.

Nosso objetivo é combinar narrativa, atmosfera, mistério, design sonoro e mecânicas memoráveis em universos construídos com atenção aos detalhes.

TEAM

SEU NOME

DIRECTOR / PROGRAMMER

Responsável pela direção geral, sistemas e implementação do jogo.

NOME DO INTEGRANTE

ART / DESIGN

Responsável pelos personagens, interfaces e materiais visuais.

NOME DO INTEGRANTE

MODELING / ANIMATION

Responsável pelos modelos, cenários e animações.

NOME DO INTEGRANTE

MUSIC / SOUND DESIGN

Responsável pela trilha sonora, ambientação e efeitos.

""" # ---------- Contact ---------- contact_content = """
Tela de contato

CONTACT

For project questions, partnerships or press contact:

SEUEMAIL@EXEMPLO.COM

OFFICIAL PAGES

YOUTUBE

GAMEJOLT

DISCORD

X / TWITTER

DISCLAIMER

The Walten's Remains is an unofficial fan project. The StaticWorks does not claim ownership of the original franchises that inspired this project.

""" pages = { "index.html": build_page("Home", index_content, "home-body"), "game.html": build_page("The Game", game_content), "archive.html": build_page("Archive", archive_content), "development.html": build_page("Development", development_content), "team.html": build_page("The StaticWorks", team_content), "contact.html": build_page("Contact", contact_content), } for filename, data in pages.items(): (base / filename).write_text(data, encoding="utf-8") # ---------- CSS ---------- css = r""" :root { --background: #000; --text: #9a9a9a; --light: #d6d6d6; --dim: #5d5d5d; --line: #262626; --accent: #b10d0d; --gold: #8c7633; --max-width: 760px; } * { box-sizing: border-box; } html { background: var(--background); color-scheme: dark; scroll-behavior: smooth; } body { margin: 0; min-height: 100vh; background: var(--background); color: var(--text); font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 1.55; letter-spacing: 0.02em; } a { color: #b4b4b4; text-decoration: none; } a:hover, a:focus-visible { color: #fff; text-decoration: underline; } button, input { font: inherit; } img { display: block; max-width: 100%; } .skip-link { position: fixed; top: -80px; left: 12px; z-index: 100; background: #fff; color: #000; padding: 8px 12px; } .skip-link:focus { top: 12px; } .page-shell { width: min(100% - 28px, var(--max-width)); margin: 0 auto; padding: 26px 0 34px; } .site-nav { display: flex; justify-content: center; flex-wrap: wrap; gap: 7px; margin-bottom: 24px; color: #303030; font-size: 10px; letter-spacing: 0.13em; text-transform: uppercase; } .site-nav a { color: #4c4c4c; } .site-nav a:hover, .site-nav a:focus-visible { color: #a8a8a8; text-decoration: none; } .home-page { text-align: center; } .teaser-button { display: block; width: min(100%, 640px); margin: 0 auto; border: 0; padding: 0; background: transparent; cursor: default; } .main-teaser { width: 100%; min-height: 390px; object-fit: cover; background: #050505; } .teaser-button.secret-ready { cursor: pointer; } .home-copy { width: min(100%, 580px); margin: 19px auto 0; text-align: center; } .home-copy h1 { margin: 0 0 8px; color: #a8a8a8; font-size: 14px; font-weight: normal; letter-spacing: 0.13em; } .home-copy p { margin: 5px 0; } .release-note { color: #5f5f5f; font-size: 10px; letter-spacing: 0.16em; } .tagline { color: #777; font-style: italic; } .hidden-message { margin-top: 16px !important; color: var(--accent); letter-spacing: 0.15em; } .minimal-page { text-align: center; } .page-image { width: min(100%, 620px); margin: 0 auto 25px; border: 0; background: #050505; } .narrow-image { width: min(100%, 520px); } .text-page { width: min(100%, 620px); margin: 0 auto; text-align: left; } .text-page h1, .text-page h2, .text-page h3 { color: #b3b3b3; font-weight: normal; } .text-page h1 { margin: 0 0 18px; padding-bottom: 8px; border-bottom: 1px solid var(--line); font-size: 15px; letter-spacing: 0.14em; } .text-page h2 { margin: 30px 0 10px; font-size: 12px; letter-spacing: 0.12em; }