diff --git a/package.json b/package.json
index df0b0c8b7..ae53d6ee8 100644
--- a/package.json
+++ b/package.json
@@ -9,8 +9,7 @@
"start:server-dev": "GAME_ENV=dev node --loader ts-node/esm --experimental-specifier-resolution=node src/server/Server.ts",
"dev": "GAME_ENV=dev concurrently \"npm run start:client\" \"npm run start:server-dev\"",
"tunnel": "npm run build-prod && npm run start:server",
- "test": "jest",
- "tailwind": "tailwindcss build -i ./src/client/tailwind.css -o public/tailwind.css"
+ "test": "jest"
},
"devDependencies": {
"@babel/core": "^7.25.2",
@@ -95,4 +94,4 @@
"zod": "^3.23.8"
},
"type": "module"
-}
+}
\ No newline at end of file
diff --git a/resources/images/OpenFrontLogo.svg b/resources/images/OpenFrontLogo.svg
new file mode 100644
index 000000000..b67262183
--- /dev/null
+++ b/resources/images/OpenFrontLogo.svg
@@ -0,0 +1,91 @@
+
+
diff --git a/src/client/UsernameInput.ts b/src/client/UsernameInput.ts
index b02a78459..fe26699f4 100644
--- a/src/client/UsernameInput.ts
+++ b/src/client/UsernameInput.ts
@@ -14,8 +14,8 @@ export class UsernameInput extends LitElement {
static styles = css`
input {
- width: 100%;
- padding: 0.75rem;
+ width: 200px;
+ padding: 0.5rem;
background-color: white;
border: 1px solid #d1d5db;
border-radius: 0.375rem;
diff --git a/src/client/index.html b/src/client/index.html
index f94a8923c..2a6fd6535 100644
--- a/src/client/index.html
+++ b/src/client/index.html
@@ -17,105 +17,60 @@
}
gtag("js", new Date());
- gtag("config", "AW-16702609763");
-
+
+
+
+ OpenFront (ALPHA)
+
+
+
+
-
-
+
+
+

+
(v0.14.0)
-
-
-
- OpenFront.io
-
-
- (v0.14.0)
-
-
-
-
-
-
+
-
-
-
-
+
-
-
-
-
-
-
+
+
+ How to Play
+
-
- Public Games
-
-
-
-
-
+
+ Join the Discord!
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
@@ -128,6 +83,7 @@
+
-
-
\ No newline at end of file
diff --git a/src/client/styles.css b/src/client/styles.css
index e048f7222..0577d6320 100644
--- a/src/client/styles.css
+++ b/src/client/styles.css
@@ -1,11 +1,9 @@
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
-
html,
body {
touch-action: manipulation;
-ms-touch-action: manipulation;
+ height: 100%;
+ overflow: hidden;
}
* {
@@ -17,7 +15,6 @@ body {
user-select: none;
}
-
@font-face {
font-family: 'Overpass';
src: url('/resources/fonts/overpass.woff') format('woff');
@@ -35,27 +32,33 @@ body {
background-position: center;
background-attachment: fixed;
background-blend-mode: overlay;
-}
-
-html,
-body {
- height: 100%;
- overflow: hidden;
+ visibility: hidden;
+ opacity: 0;
+ transition: opacity 0.3s ease;
}
.content {
+ text-align: center;
+ padding: 20px;
max-width: 100%;
margin: 0 auto;
position: relative;
}
+/* Typography */
h1 {
font-family: Arial, serif;
text-align: center;
color: #2e2e2e;
font-size: 3em;
- margin-bottom: 10px;
- margin-top: 1em;
+ margin: 1em 0 10px;
+}
+
+h1 img {
+ height: auto;
+ width: auto;
+ max-width: 100%;
+ transform: scale(2);
}
h2 {
@@ -70,9 +73,16 @@ h3 {
font-family: Arial, serif;
text-align: center;
color: #000000;
- font-size: 1.2em;
}
+.version {
+ font-family: Arial, serif;
+ text-align: center;
+ color: #000000;
+ font-size: 1em;
+}
+
+/* Username input */
#username-container {
margin-bottom: 50px;
display: flex;
@@ -92,13 +102,63 @@ h3 {
display: block;
}
-.joining-message {
- font-size: 24px;
- color: rgb(0, 0, 0);
- text-align: center;
- text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
+/* Buttons */
+.button-container {
+ display: flex;
+ gap: 1rem;
+ max-width: 400px;
+ margin: 0 auto;
}
+.primary-button {
+ background-color: #2563eb;
+ color: white;
+ padding: 2rem 1.5rem;
+ font-weight: bold;
+ font-size: 1.25rem;
+ border-radius: 0.5rem;
+ flex: 1;
+ border: none;
+ cursor: pointer;
+ transition: background-color 0.3s;
+}
+
+.secondary-button {
+ background-color: #dbeafe;
+ color: #1e40af;
+ padding: 1rem;
+ font-weight: 500;
+ font-size: 0.875rem;
+ border-radius: 0.375rem;
+ width: 100%;
+ border: none;
+ cursor: pointer;
+ transition: background-color 0.3s;
+}
+
+.link-button {
+ display: block;
+ max-width: 400px;
+ margin: 1rem auto;
+ padding: 0.5rem 1rem;
+ text-align: center;
+ text-decoration: none;
+ font-weight: bold;
+ border-radius: 0.375rem;
+ transition: background-color 0.3s;
+}
+
+.link-button.green {
+ background-color: #059669;
+ color: white;
+}
+
+.link-button.purple {
+ background-color: #4f46e5;
+ color: white;
+}
+
+/* Discord */
.discord-link {
position: fixed;
top: 20px;
@@ -122,17 +182,15 @@ h3 {
height: 30px;
}
+/* Media Queries */
@media (min-width: 768px) {
h1 {
- font-size: 6em;
+ font-size: 2em;
}
- h2 {
- font-size: 2.5em;
- }
h3 {
- font-size: 2em;
+ font-size: 1em;
}
#username {
@@ -164,119 +222,4 @@ h3 {
width: 40px;
height: 40px;
}
-}
-
-#customMenu {
- display: none;
- position: absolute;
- background-color: #f9f9f9;
- border: 1px solid #ccc;
- padding: 10px;
- z-index: 1000;
-}
-
-#customMenu ul {
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-
-#customMenu ul li {
- padding: 8px 12px;
- cursor: pointer;
-}
-
-#customMenu ul li:hover {
- background-color: #f1f1f1;
-}
-
-#table-container {
- background-color: rgba(0, 0, 0, 0.7);
-}
-
-/* Events Table Styles */
-.events-table {
- width: 100%;
- border-collapse: collapse;
- background-color: rgba(0, 0, 0, 0.5);
- color: white;
- box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);
-}
-
-.events-table th,
-.events-table td {
- padding: 15px;
- text-align: left;
- border-bottom: 1px solid rgba(255, 255, 255, 0.0);
- z-index: 1000;
-}
-
-.events-table th {
- background-color: rgba(0, 0, 0, 0.0);
- font-size: 1.2em;
- text-transform: uppercase;
-}
-
-.events-table tr:hover {
- background-color: rgba(255, 255, 255, 0.0);
-}
-
-.btn {
- display: inline-block;
- padding: 8px 16px;
- margin: 5px 10px 5px 0;
- background-color: #4CAF50;
- color: white;
- text-decoration: none;
- border-radius: 4px;
- transition: background-color 0.3s;
-}
-
-.btn:hover {
- background-color: #45a049;
-}
-
-.btn-info {
- background-color: #2196F3;
-}
-
-.btn-info:hover {
- background-color: #0b7dda;
-}
-
-@media (max-width: 600px) {
-
- .events-table th,
- .events-table td {
- padding: 10px;
- }
-
- .btn {
- display: block;
- margin: 5px 0;
- }
-}
-
-
-/* Radial Menu */
-.radial-menu {
- position: absolute;
- display: none;
- width: 150px;
- height: 150px;
- border-radius: 50%;
- background: rgba(0, 0, 0, 0.5);
-}
-
-.menu-item {
- position: absolute;
- width: 40px;
- height: 40px;
- border-radius: 50%;
- background: white;
- display: flex;
- justify-content: center;
- align-items: center;
- font-weight: bold;
- cursor: pointer;
}
\ No newline at end of file
diff --git a/src/core/Schemas.ts b/src/core/Schemas.ts
index bea67b70e..532573170 100644
--- a/src/core/Schemas.ts
+++ b/src/core/Schemas.ts
@@ -232,7 +232,7 @@ const ClientBaseMessageSchema = z.object({
export const ClientSendWinnerSchema = ClientBaseMessageSchema.extend({
type: z.literal('winner'),
- winner: ID,
+ winner: ID.nullable(),
})
export const ClientLogMessageSchema = ClientBaseMessageSchema.extend({
diff --git a/src/core/configuration/DevConfig.ts b/src/core/configuration/DevConfig.ts
index dab1368be..aa4403df4 100644
--- a/src/core/configuration/DevConfig.ts
+++ b/src/core/configuration/DevConfig.ts
@@ -30,23 +30,23 @@ export class DevConfig extends DefaultConfig {
return info
}
- percentageTilesOwnedToWin(): number {
- return 1
- }
+ // percentageTilesOwnedToWin(): number {
+ // return 1
+ // }
- populationIncreaseRate(player: Player): number {
- return this.maxPopulation(player)
- }
+ // populationIncreaseRate(player: Player): number {
+ // return this.maxPopulation(player)
+ // }
// boatMaxDistance(): number {
// return 5000
// }
- numBots(): number {
- return 0
- }
- spawnNPCs(): boolean {
- return false
- }
+ // numBots(): number {
+ // return 0
+ // }
+ // spawnNPCs(): boolean {
+ // return false
+ // }
}