mirror of
https://github.com/godotengine/godot-website.git
synced 2025-12-31 09:48:43 +03:00
496 lines
14 KiB
HTML
496 lines
14 KiB
HTML
---
|
|
permalink: /consoles/index.html
|
|
title: "Console Support"
|
|
description: "Learn about console porting and publishing options for Godot games."
|
|
layout: default
|
|
|
|
providers:
|
|
- name: W4 Games
|
|
url: https://www.w4games.com/
|
|
image: /assets/images/consoles/w4-games.png
|
|
platforms: ["switch", "switch-2", "xbox-series", "playstation-5"]
|
|
- name: Lone Wolf Technology
|
|
url: https://www.lonewolftechnology.com/
|
|
image: /assets/images/consoles/lone-wolf.png
|
|
platforms: ["switch", "playstation-4", "playstation-5"]
|
|
- name: Pineapple Works
|
|
url: https://pineapple.works/
|
|
image: /assets/images/consoles/pineapple-works.png
|
|
platforms: ["switch", "switch-2", "xbox-one", "xbox-series", "playstation-5"]
|
|
- name: RAWRLAB Games
|
|
url: https://www.rawrlab.com/
|
|
image: /assets/images/consoles/rawrlab-games.png
|
|
platforms: ["switch", "switch-2"]
|
|
- name: mazette!
|
|
url: https://mazette.games/
|
|
image: /assets/images/consoles/mazette-games.png
|
|
platforms: ["switch", "xbox-one", "xbox-series"]
|
|
- name: Tuanisapps
|
|
url: https://www.tuanisapps.com/
|
|
image: /assets/images/consoles/tuanis-apps.png
|
|
platforms: ["switch"]
|
|
- name: Seaven Studio
|
|
url: https://www.seaven-studio.com/
|
|
image: /assets/images/consoles/seaven-studio.png
|
|
platforms: ["switch", "xbox-one", "xbox-series", "playstation-4", "playstation-5"]
|
|
- name: Sickhead Games
|
|
url: https://www.sickhead.com
|
|
image: /assets/images/consoles/sickhead-games.png
|
|
platforms: ["switch", "xbox-one", "xbox-series", "playstation-4", "playstation-5"]
|
|
---
|
|
|
|
{% include header.html %}
|
|
|
|
<link rel="stylesheet" href="/assets/css/transparent-nav.css?2" />
|
|
<style>
|
|
.consoles-wrapper *,
|
|
.consoles-hero * {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.consoles-hero {
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: flex-start;
|
|
align-items: center;
|
|
background: url('/assets/images/consoles/consoles-hero.svg') center bottom/1400px auto no-repeat, linear-gradient(45deg, #320eac, #fe2270);
|
|
padding-top: 100px;
|
|
overflow: hidden;
|
|
position: relative;
|
|
min-height: 480px;
|
|
}
|
|
|
|
@media (max-width: 560px) {
|
|
.consoles-hero {
|
|
background: url('/assets/images/consoles/consoles-hero.svg') center bottom/1000px auto no-repeat, linear-gradient(45deg, #320eac, #fe2270);
|
|
padding-top: 100px;
|
|
padding-left: 16px;
|
|
padding-right: 16px;
|
|
min-height: 400px;
|
|
}
|
|
}
|
|
|
|
.consoles-hero h2 {
|
|
color: white;
|
|
font-size: 40px;
|
|
text-align: center;
|
|
margin: 0;
|
|
position: relative;
|
|
z-index: 2;
|
|
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
@media (max-width: 540px) {
|
|
.consoles-hero h2 {
|
|
font-size: 35px;
|
|
margin: 0 16px;
|
|
}
|
|
}
|
|
|
|
.consoles-wrapper {
|
|
max-width: 1200px;
|
|
margin: auto;
|
|
padding-left: 16px;
|
|
padding-right: 16px;
|
|
}
|
|
|
|
.consoles-wrapper h2 {
|
|
font-size: 36px;
|
|
font-weight: 800;
|
|
margin-top: 24px;
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
@media (max-width: 1250px) {
|
|
.consoles-wrapper {
|
|
width: auto;
|
|
}
|
|
}
|
|
|
|
.main {
|
|
display: grid;
|
|
grid-template-columns: 1fr 200px;
|
|
grid-template-areas: "content aside";
|
|
gap: 20px;
|
|
margin-bottom: 60px;
|
|
}
|
|
|
|
@media (max-width: 800px) {
|
|
.main {
|
|
grid-template-columns: 1fr;
|
|
grid-template-areas: "aside" "content";
|
|
}
|
|
}
|
|
|
|
.content {
|
|
grid-area: content;
|
|
}
|
|
|
|
.hidden {
|
|
display: none !important;
|
|
}
|
|
|
|
aside {
|
|
grid-area: aside;
|
|
position: sticky;
|
|
top: 10px;
|
|
align-self: start;
|
|
}
|
|
|
|
aside h3 {
|
|
margin-top: 24px;
|
|
margin-bottom: 0;
|
|
font-size: 36px;
|
|
font-weight: 800;
|
|
}
|
|
|
|
.filter-options {
|
|
margin-bottom: 20px;
|
|
margin-top: 12px;
|
|
display: grid;
|
|
gap: 8px;
|
|
}
|
|
|
|
@media (max-width: 800px) {
|
|
.filter-options {
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 8px 16px;
|
|
}
|
|
}
|
|
@media (max-width: 430px) {
|
|
.filter-options {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
|
|
.filter-options label {
|
|
cursor: pointer;
|
|
}
|
|
|
|
.grid-container {
|
|
display: grid;
|
|
justify-content: center;
|
|
column-gap: 28px;
|
|
row-gap: 24px;
|
|
grid-template-columns: 1fr;
|
|
margin-top: 12px;
|
|
}
|
|
|
|
.grid-container.grid-container-3x {
|
|
grid-template-columns: 1fr 1fr 1fr;
|
|
}
|
|
.grid-container.grid-container-3x h2 {
|
|
grid-column: span 3;
|
|
}
|
|
@media (max-width: 1020px) {
|
|
.grid-container.grid-container-3x {
|
|
grid-template-columns: 1fr 1fr;
|
|
}
|
|
.grid-container.grid-container-3x h2 {
|
|
grid-column: span 2;
|
|
}
|
|
}
|
|
@media (max-width: 800px) {
|
|
.grid-container.grid-container-3x {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
.grid-container.grid-container-3x h2 {
|
|
grid-column: span 1;
|
|
}
|
|
}
|
|
|
|
.content-card {
|
|
background-color: var(--card-background-color);
|
|
border-radius: 12px;
|
|
padding: 20px;
|
|
transition: 0.1s filter;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.content-card h4 {
|
|
color: white;
|
|
font-size: 18px;
|
|
font-weight: 800;
|
|
margin: 0;
|
|
}
|
|
|
|
.content-card p {
|
|
font-size: 95%;
|
|
margin-top: 12px;
|
|
}
|
|
|
|
ol {
|
|
margin-top: 0;
|
|
}
|
|
|
|
.card-vendor {
|
|
justify-content: space-between;
|
|
border-radius: 16px;
|
|
overflow: hidden;
|
|
padding: 0;
|
|
background-color: #323c61;
|
|
transition: 0.1s filter, 0.1s transform;
|
|
text-decoration: none;
|
|
color: white;
|
|
cursor: pointer;
|
|
}
|
|
.card-vendor:hover {
|
|
filter: brightness(112.5%);
|
|
transform: scale(1.02);
|
|
}
|
|
.card-vendor .card-image img {
|
|
width: 100%;
|
|
height: 100%;
|
|
object-fit: fill;
|
|
}
|
|
.card-vendor .card-content {
|
|
padding: 20px;
|
|
text-align: center;
|
|
}
|
|
.card-vendor .card-content h4 {
|
|
font-size: 24px;
|
|
}
|
|
.vendor-button {
|
|
display: inline-block;
|
|
background-color: var(--primary-color);
|
|
color: white;
|
|
padding: 8px 16px;
|
|
border-radius: 6px;
|
|
text-decoration: none;
|
|
font-weight: 500;
|
|
transition: background-color 0.2s ease;
|
|
width: 100%;
|
|
text-align: center;
|
|
margin-top: 16px;
|
|
}
|
|
|
|
.vendor-button:hover {
|
|
background-color: color-mix(in srgb, var(--primary-color) 90%, white 3%);
|
|
color: white;
|
|
text-decoration: none;
|
|
}
|
|
|
|
.cards-container {
|
|
display: grid;
|
|
justify-content: center;
|
|
column-gap: 24px;
|
|
row-gap: 24px;
|
|
grid-template-columns: 1fr 1fr;
|
|
margin-top: 24px;
|
|
}
|
|
@media (max-width: 800px) {
|
|
.cards-container {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
.section-description {
|
|
margin-top: 12px;
|
|
}
|
|
.add-your-company {
|
|
margin-top: 24px;
|
|
margin-bottom: 42px;
|
|
width: 100%;
|
|
}
|
|
.add-your-company .card-content {
|
|
padding: 20px;
|
|
text-align: left;
|
|
}
|
|
.add-your-company-card {
|
|
margin: 0 auto;
|
|
}
|
|
.add-your-company .add-your-company-content {
|
|
text-align: center;
|
|
}
|
|
.contact-button {
|
|
display: inline-block;
|
|
width: auto;
|
|
}
|
|
|
|
</style>
|
|
|
|
<div class="consoles-hero">
|
|
<h2>Console support in Godot</h2>
|
|
</div>
|
|
|
|
<div class="container">
|
|
<div class="consoles-wrapper">
|
|
<h2>Godot and console porting</h2>
|
|
<div class="cards-container">
|
|
<div class="content-card">
|
|
<h4>Closed ecosystems</h4>
|
|
<p>
|
|
Consoles are closed platforms that require special permissions, SDKs, and hardware. They're bound by strict NDAs and legal rules. While Godot can't offer official support due to its open source license, approved developers can still ship console games using Godot through certified third-party providers.
|
|
</p>
|
|
</div>
|
|
<div class="content-card">
|
|
<h4>An open source system</h4>
|
|
<p>
|
|
Godot is MIT-licensed and fully open source, no NDAs, no restricted tools, and no legal liability. Console development requires the opposite: legal contracts and closed access. To preserve its values of openness and freedom, the Godot Foundation does not maintain official console ports.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="cards-container">
|
|
<div class="content-card">
|
|
<h4>Console porting in Godot</h4>
|
|
<p>
|
|
You can release a Godot game on consoles if you're approved by the platform holder and use official SDKs, either building tools yourself or using licensed third-party middleware.
|
|
</p>
|
|
<p>
|
|
Godot runs on consoles, but export templates must be built with official SDKs and can only be shared privately with approved developers. Several third-party companies offer this middleware under the necessary legal constraints.
|
|
</p>
|
|
<p>
|
|
More info: <a href="https://godotengine.org/article/about-official-console-ports/">https://godotengine.org/article/about-official-console-ports/</a>
|
|
</p>
|
|
</div>
|
|
<div class="content-card">
|
|
<h4>What's the console porting process?</h4>
|
|
<p>
|
|
To start the process of bringing your Godot game to consoles, you'll need to:
|
|
</p>
|
|
<ol>
|
|
<li>Register as a developer with the console manufacturer</li>
|
|
<li>Be approved and gain access to dev tools & SDKs</li>
|
|
<li>Obtain a devkit (confidential pricing)</li>
|
|
<li>Use or build console export templates</li>
|
|
<li>Rate your game with regional agencies (ESRB, PEGI, etc.)</li>
|
|
<li>Either do the porting in-house or partner with a trusted vendor</li>
|
|
</ol>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="main">
|
|
<aside>
|
|
<h3>Filter by:</h3>
|
|
<div class="filter-options">
|
|
<label><input type="checkbox" class="platform-filter" value="switch"> Nintendo Switch</label>
|
|
<label><input type="checkbox" class="platform-filter" value="switch-2"> Nintendo Switch 2</label>
|
|
<label><input type="checkbox" class="platform-filter" value="xbox-one"> Xbox One</label>
|
|
<label><input type="checkbox" class="platform-filter" value="xbox-series"> Xbox Series X/S</label>
|
|
<label><input type="checkbox" class="platform-filter" value="playstation-4"> PlayStation 4</label>
|
|
<label><input type="checkbox" class="platform-filter" value="playstation-5"> PlayStation 5</label>
|
|
</div>
|
|
</aside>
|
|
|
|
<div class="content">
|
|
<div class="middleware-section">
|
|
<h2 class="section-title">Middleware (download and self-port)</h2>
|
|
<div class="content-card section-description">
|
|
<p>
|
|
Middleware ports are available directly from the console vendor's portal. These provide a version of Godot that runs natively on the target console. You are still responsible for adapting your game to each platform, but since the engine itself is already ported, the workload is significantly reduced.
|
|
</p>
|
|
<p>
|
|
W4 Games offers official middleware ports for Nintendo Switch, Xbox Series X/S, and PlayStation 5.
|
|
</p>
|
|
<p>
|
|
The list of service providers below is not necessarily exhaustive and it is not a guarantee of quality. It is advisable to check with each provider whether its services are fit for purpose, and to compare offers, reviews and costs before committing to any service.
|
|
</p>
|
|
</div>
|
|
<div class="grid-container grid-container-3x" id="middleware-support">
|
|
{% for provider in page.providers %}
|
|
{% if provider.name == "W4 Games" or provider.name == "RAWRLAB Games" %}
|
|
<a href="{{ provider.url }}" class="content-card card-vendor {% for platform in provider.platforms%}{{platform}} {% endfor %}">
|
|
<div class="card-image">
|
|
<img src="{{ provider.image }}" alt="{{ provider.name }}" />
|
|
</div>
|
|
<div class="card-content">
|
|
<h4>{{ provider.name }}</h4>
|
|
<div class="vendor-button">Visit {{ provider.name }}</div>
|
|
</div>
|
|
</a>
|
|
{% endif %}
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="porting-section">
|
|
<h2 class="section-title">Porting houses and services</h2>
|
|
<div class="grid-container grid-container-3x" id="porting-support">
|
|
{% for provider in page.providers %}
|
|
<a href="{{ provider.url }}" class="content-card card-vendor {% for platform in provider.platforms%}{{platform}} {% endfor %}">
|
|
<div class="card-image">
|
|
<img src="{{ provider.image }}" alt="{{ provider.name }}" />
|
|
</div>
|
|
<div class="card-content">
|
|
<h4>{{ provider.name }}</h4>
|
|
<div class="vendor-button">Visit {{ provider.name }}</div>
|
|
</div>
|
|
</a>
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
<div class="add-your-company">
|
|
<div class="content-card card-vendor add-your-company-card">
|
|
<div class="card-content add-your-company-content">
|
|
<h4>Add your company</h4>
|
|
<p>
|
|
If your company offers porting, or porting <em>and</em> publishing
|
|
services for Godot games, feel free to contact the Godot Foundation
|
|
to add your company to the list above.
|
|
</p>
|
|
<a href="mailto:contact@godotengine.org" class="vendor-button contact-button">
|
|
Contact the Godot Foundation
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
document.addEventListener("DOMContentLoaded", function () {
|
|
function shuffleContainer(selector) {
|
|
const container = document.querySelector(selector);
|
|
if (!container) return;
|
|
|
|
const items = [...container.children];
|
|
items.sort(() => Math.random() - 0.5)
|
|
items.forEach(item => container.appendChild(item));
|
|
}
|
|
|
|
// Shuffle both sections
|
|
shuffleContainer('#middleware-support');
|
|
shuffleContainer('#porting-support');
|
|
|
|
// Filtering
|
|
const checkboxes = document.querySelectorAll('.platform-filter');
|
|
const cards = document.querySelectorAll('.card-vendor:not(.add-your-company-card)');
|
|
const middlewareSection = document.querySelector('.middleware-section');
|
|
const portingSection = document.querySelector('.porting-section');
|
|
|
|
function filterVendors() {
|
|
// List of selected values, like ["switch", "xbox-series"]
|
|
const selected = [...checkboxes]
|
|
.filter(cb => cb.checked)
|
|
.map(cb => cb.value);
|
|
|
|
const counts = { middleware: 0, porting: 0 };
|
|
|
|
cards.forEach(card => {
|
|
const noCheckboxesChecked = selected.length === 0;
|
|
const containsSelectedPlatform = selected.some(platform => card.classList.contains(platform));
|
|
const show = noCheckboxesChecked || containsSelectedPlatform;
|
|
// Show/hide card
|
|
card.classList.toggle('hidden', !show);
|
|
|
|
if (show) {
|
|
const section = card.closest('#middleware-support') ? 'middleware' : 'porting';
|
|
counts[section]++;
|
|
}
|
|
});
|
|
|
|
// Show/hide sections
|
|
middlewareSection.classList.toggle('hidden', counts.middleware === 0);
|
|
portingSection.classList.toggle('hidden', counts.porting === 0);
|
|
}
|
|
|
|
checkboxes.forEach(cb => cb.addEventListener('change', filterVendors));
|
|
filterVendors();
|
|
});
|
|
</script>
|
|
|
|
{% include /download/download-section.html %} {% include footer.html %}
|