diff --git a/assets/super3.svg b/assets/super3.svg new file mode 100644 index 0000000..e0a5922 --- /dev/null +++ b/assets/super3.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/index.html b/index.html index cd99483..b98ce7a 100644 --- a/index.html +++ b/index.html @@ -58,6 +58,23 @@
+ +
diff --git a/server.py b/server.py index d47a767..3e5e3d0 100644 --- a/server.py +++ b/server.py @@ -1,15 +1,58 @@ +import argparse +import errno import http.server -import socketserver -PORT = 5500 class NoCacheHTTPRequestHandler(http.server.SimpleHTTPRequestHandler): def end_headers(self): - self.send_header('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') - self.send_header('Pragma', 'no-cache') - self.send_header('Expires', '0') + self.send_header("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0") + self.send_header("Pragma", "no-cache") + self.send_header("Expires", "0") super().end_headers() -with socketserver.TCPServer(("", PORT), NoCacheHTTPRequestHandler) as httpd: - print(f"Server running at http://localhost:{PORT}/") - httpd.serve_forever() + +class ReusableThreadingHTTPServer(http.server.ThreadingHTTPServer): + allow_reuse_address = True + + +def serve(host: str, preferred_port: int, auto_port: bool) -> None: + candidate_ports = [preferred_port] + if auto_port: + candidate_ports.extend(range(preferred_port + 1, preferred_port + 50)) + + last_error: OSError | None = None + for port in candidate_ports: + try: + with ReusableThreadingHTTPServer((host, port), NoCacheHTTPRequestHandler) as httpd: + print(f"Server running at http://{host}:{port}/", flush=True) + httpd.serve_forever() + return + except OSError as exc: + last_error = exc + if auto_port and exc.errno in (errno.EADDRINUSE, 10048): + continue + raise + + message = f"Could not bind to {host}:{preferred_port}" + if auto_port: + message += " (and nearby ports)" + if last_error is not None: + message += f": {last_error}" + raise SystemExit(message) + + +def main() -> None: + parser = argparse.ArgumentParser(description="Local dev server (no-cache headers).") + parser.add_argument("--host", default="localhost", help="Host/interface to bind (default: localhost)") + parser.add_argument("--port", type=int, default=5500, help="Preferred port (default: 5500)") + parser.add_argument( + "--no-auto-port", + action="store_true", + help="Do not try a different port if the preferred port is in use.", + ) + args = parser.parse_args() + serve(args.host, args.port, auto_port=not args.no_auto_port) + + +if __name__ == "__main__": + main() diff --git a/style.css b/style.css index 1e60a1b..43c1037 100644 --- a/style.css +++ b/style.css @@ -207,6 +207,79 @@ body { padding: 20px 16px 40px; } +.featured-row { + display: flex; + gap: 16px; + max-width: 1200px; + margin: 0 auto 16px; + align-items: stretch; +} + +.featured-card { + flex: 1; + min-height: 0; + justify-content: flex-start; + gap: 14px; +} + +.featured-main { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 12px; + width: 100%; + color: inherit; + text-decoration: none; + text-align: center; +} + +.featured-text { + display: flex; + flex-direction: column; + align-items: center; + gap: 6px; +} + +.featured-card h3 { + font-size: 20px; + margin: 0; +} + +.featured-kicker { + margin: 0; + font-size: 13px; + font-weight: 600; + color: #ff2a9d; + text-shadow: + 0 0 10px rgba(255, 42, 157, 0.6), + 0 0 20px rgba(255, 42, 157, 0.4); +} + +.email-cta { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 10px; + padding: 10px 14px; + border-radius: 999px; + border: 1px solid rgba(255, 255, 255, 0.25); + background: rgba(0, 0, 0, 0.25); + color: rgba(255, 255, 255, 0.9); + text-decoration: none; + font-size: 13px; + font-weight: 600; + width: fit-content; + max-width: 100%; + margin: 0 auto; +} + +.gmail-icon { + width: 28px; + height: 28px; + display: block; +} + .project-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); @@ -254,6 +327,20 @@ body { animation: neonPulse 3s ease-in-out infinite; } +.project-page .coming-soon { + display: inline-block; + padding: 6px 12px; + margin: 0 auto 28px; + border-radius: 999px; + border: 1px solid rgba(0, 227, 255, 0.5); + background: rgba(0, 227, 255, 0.08); + color: #00e3ff; + font-size: 12px; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; +} + .project-card h3 { margin: 0; font-size: 16px; @@ -423,6 +510,10 @@ body { padding: 30px 24px 60px; } + .featured-row { + margin-bottom: 20px; + } + .project-grid { grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 20px; @@ -472,6 +563,16 @@ body { } } +@media (max-width: 420px) { + .featured-row { + flex-direction: column; + } + + .email-cta { + width: 100%; + } +} + /* Neon Pink Button */ .btn-neon-pink { color: #ff2a9d !important; diff --git a/super3-privacy.html b/super3-privacy.html new file mode 100644 index 0000000..d40b480 --- /dev/null +++ b/super3-privacy.html @@ -0,0 +1,98 @@ + + + + + +Privacy Policy - SUPER3 + + + + + + +
+ +
+ +
+ +
+

Privacy Policy for SUPER3

+

Last updated: December 26, 2025

+ +
+

Introduction

+

SUPER3 ("we," "our," or "us") is an open-source Sega Model 3 emulator for Android (the "Service"). This Privacy Policy explains what data the Service collects (if any), how it is used, and what third parties may receive data as a result of your use of the Service.

+ +

Information We Do NOT Collect

+

SUPER3 is designed to run locally on your device and does not include analytics/telemetry by default. We do not collect:

+
    +
  • Personal identification information
  • +
  • Location data
  • +
  • Contact lists
  • +
  • Advertising identifiers
  • +
  • Usage analytics or tracking
  • +
  • Device identifiers for profiling
  • +
+ +

Information The App May Store or Access Locally

+

To provide emulator functionality, SUPER3 may store and/or access the following on your device:

+
    +
  • Emulator settings and configuration files
  • +
  • Save states and screenshot thumbnails
  • +
  • Folders/files you explicitly select (e.g., ROM folder, optional export/sync folder)
  • +
  • Downloaded flyer images (if you use Flyer view)
  • +
+ +

Data Storage

+

Data used by SUPER3 is stored locally on your device (for example under .../Android/data/<package>/files/super3/). We do not operate a backend server for storing your emulator files.

+ +

Third-Party Services

+ +

Flyer Downloads (Optional)

+

If you use Flyer view, SUPER3 may download artwork from GitHub:

+ +

When your device connects to GitHub to download files, GitHub may receive standard network information (such as your IP address and user agent) as part of serving the request. Please review GitHub’s policies for details.

+ +

External Links

+

The Service may link to external sites (such as upstream projects on GitHub). We are not responsible for the privacy practices of those sites.

+ +

Permissions and File Access

+

SUPER3 may offer an optional export/sync workflow using Android’s Storage Access Framework. If enabled, the app only accesses the folder(s) you explicitly choose via the system file picker.

+ +

No Games Included / Copyright

+

SUPER3 does not include any games, ROMs, BIOS files, or copyrighted game content. You must supply your own legally obtained game ROMs. "SEGA" and all associated game names and trademarks are the property of their respective owners. SUPER3 is not affiliated with or endorsed by SEGA.

+ +

Children's Privacy

+

The Service is not directed to children under the age of 13, and we do not knowingly collect personal information from children under 13.

+ +

Data Security

+

Because SUPER3 primarily stores data locally on your device, the security of your data depends on your device’s security measures. We recommend keeping your device updated and secured.

+ +

Changes to This Privacy Policy

+

We may update this Privacy Policy from time to time. Changes will be reflected on this page by updating the "Last updated" date.

+ +

Contact

+

If you have questions about this Privacy Policy, contact:

+ + +

This privacy policy is intended to help comply with Google Play policy requirements.

+
+
+ + + + + + diff --git a/super3.html b/super3.html new file mode 100644 index 0000000..b3ed6f4 --- /dev/null +++ b/super3.html @@ -0,0 +1,123 @@ + + + + + +SUPER3 Aú izzy2lost + + + + + + + +
+ +
+ + + +
+ SUPER3 icon +

SUPER3

+

Open-source Sega Model 3 emulator for Android

+
Coming soon
+ +
+

SUPER3 is an open-source Sega Model 3 emulator for Android. It is based on the Supermodel emulator by trzy, with additional work derived from the model3emu-code-sinden (ARM) fork.

+

No games are included. This app does not include any games, ROMs, BIOS files, or copyrighted game content. You must supply your own legally obtained game ROMs.

+
+ +
+

Features

+
    +
  • Sega Model 3 emulation (compatibility varies by title/device)
  • +
  • On-screen touch controls (Service/Test/Coin/Start and game-specific controls)
  • +
  • Virtual on-screen steering wheel for driving games (when supported)
  • +
  • Save states (10 slots) with automatic screenshot thumbnails and tap-to-preview
  • +
  • In-game pause/resume button
  • +
  • Game flyers (front/back) in the launcher list
  • +
  • Video settings (Resolution & Widescreen)
  • +
+
+ +
+

Video Settings

+

From the main game list, open the side menu (toolbar “menu” icon) and look under Video.

+
    +
  • Resolution: Native (496x384) and integer scale options (2x through 8x). Higher values look sharper but can reduce performance.
  • +
  • Match device resolution: Sets the internal resolution to your device’s exact pixel resolution (landscape). This also enables Widescreen and Wide background.
  • +
  • Widescreen: Expands the horizontal field of view (Supermodel -wide-screen). At very wide aspect ratios some games may cull objects at the edges.
  • +
  • Wide background: Stretches the 2D background layers when using widescreen (Supermodel -wide-bg).
  • +
  • Enhanced Real3D (experimental): Enables more desktop-like Real3D rendering (multi-pass transparency compositing + scroll fog). This can improve visuals in some games/areas, but may reduce performance on lower-end devices.
  • +
+

These settings are written to .../Android/data/<package>/files/super3/Config/Supermodel.ini (XResolution, YResolution, WideScreen, WideBackground, New3DAccurate).

+
+ +
+

Files & Storage

+
    +
  • Save states & thumbnails: Stored under .../Android/data/<package>/files/super3/Saves/
  • +
  • Optional sync/export: May use Android’s Storage Access Framework; if enabled, the app only accesses folder(s) you explicitly choose.
  • +
+
+ +
+

Flyers

+

Flyers are downloaded on-demand (when you switch to Flyer view) from https://github.com/izzy2lost/Model3flyers.

+

They are stored in .../Android/data/<package>/files/super3/Flyers/ as <game>_front.png and <game>_back.png. You can replace or add files in that folder to customize artwork.

+
+ +
+

Legal / Google Play Policy Notes

+
    +
  • No games included: SUPER3 does not ship with ROMs or game data, and it is not intended to facilitate piracy.
  • +
  • You must own the games: Only use ROMs you are legally permitted to use in your region.
  • +
  • Trademarks: “SEGA” and all associated game names, trademarks, and copyrighted works are the property of their respective owners.
  • +
  • Not affiliated: This project is not affiliated with or endorsed by SEGA or any arcade hardware manufacturer.
  • +
+
+ +
+

Privacy

+
    +
  • SUPER3 can run offline for emulation, but Flyer view may download artwork from GitHub.
  • +
  • The app stores emulator settings, save states, and screenshots locally on your device.
  • +
  • If you opt into selecting a user folder for syncing/export, access is limited to the folder you select via the system file picker.
  • +
+
+ +
+

Upstream / Credits

+ +
+ +
+

License

+

This project is licensed under the GNU GPL v3.0 (see LICENSE). If you distribute builds (including on Google Play), GPL requires providing the corresponding source code to recipients.

+ +
+ +
+

Ac 2025 SUPER3. Licensed under GPL-3.0.

+

No games, ROMs, BIOS files, or copyrighted content are included. SUPER3 is not affiliated with or endorsed by SEGA.

+
+
+ + + + +