diff --git a/.gitignore b/.gitignore index 1825673..1d2c904 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ node_modules package-lock.json bun.lock dist +*.zip diff --git a/package.json b/package.json index af84f80..27c925f 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,8 @@ "www/**/*" ], "devDependencies": { - "eslint": "10.8.0", + "eslint": "10.8.1", "@eslint/js": "10.0.1", - "typescript-eslint": "8.65.0" + "typescript-eslint": "8.66.0" } } \ No newline at end of file diff --git a/www/games/orbit-idle/index.css b/www/games/orbit-idle/index.css index 164febc..6d10e88 100644 --- a/www/games/orbit-idle/index.css +++ b/www/games/orbit-idle/index.css @@ -42,4 +42,9 @@ a:hover { a:active { color: pink; +} + +kbd { + padding: 0.25rem; + background: dimgray; } \ No newline at end of file diff --git a/www/games/orbit-idle/index.html b/www/games/orbit-idle/index.html index 8f7d124..74b9aa8 100644 --- a/www/games/orbit-idle/index.html +++ b/www/games/orbit-idle/index.html @@ -16,13 +16,17 @@

Orbit Idle

- +

This game takes a new spin as the 4th game in the Revolution Idle series.

-

Controls: Mouse/click for everything. Instructions are shown in-game.

+

In Orbit Idle, grow a interplanetary idle economy by speeding up planets, ascending orbits, and compounding income from each revolution. Manage your solar system, zoom into individual planets, and watch your earnings explode even while the tab is hidden.

+

Controls: Mouse/click for everything. Instructions are shown in-game.

+

Hotkeys: Zoom: + and -   Save: S   Stats: A   Mute/Unmute: M   Help: H   Menu: ESC

+

The original game: Revolution Idle (2017)

Fan collab/remake: Revolution Idle 2 (2017)

My Unity3D remake: Idle R3volutions (2018)

Fun fact: Idle R3volutions was available on Android/Google Play for a short time!

+

Orbit Idle is also available on GameJolt and Itch.io.

diff --git a/www/games/orbit-idle/release b/www/games/orbit-idle/release new file mode 100755 index 0000000..40f72cd --- /dev/null +++ b/www/games/orbit-idle/release @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +bun start prod +cp dist/main.js ./*.mp3 released +zip -r released.zip released +rm -r released/*.js released/*.mp3 diff --git a/www/games/orbit-idle/released/index.css b/www/games/orbit-idle/released/index.css new file mode 100644 index 0000000..66a7979 --- /dev/null +++ b/www/games/orbit-idle/released/index.css @@ -0,0 +1,11 @@ +@import url('https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,100..700;1,100..700&display=swap'); + +* { + box-sizing: border-box; + border-collapse: collapse; +} + +body { + margin: 0; + padding: 0; +} \ No newline at end of file diff --git a/www/games/orbit-idle/released/index.html b/www/games/orbit-idle/released/index.html new file mode 100644 index 0000000..1ed1363 --- /dev/null +++ b/www/games/orbit-idle/released/index.html @@ -0,0 +1,17 @@ + + + + + Orbit Idle + + + + + + + + + + + + \ No newline at end of file diff --git a/www/games/orbit-idle/src/close-info-handler.ts b/www/games/orbit-idle/src/close-info-handler.ts deleted file mode 100644 index 922b556..0000000 --- a/www/games/orbit-idle/src/close-info-handler.ts +++ /dev/null @@ -1,3 +0,0 @@ -const closeInfo: HTMLElement = document.getElementById('close-info') as HTMLElement; -const gameInfo: HTMLElement = document.getElementById('game-info') as HTMLElement; -closeInfo.addEventListener('click', () => gameInfo.parentElement?.removeChild(gameInfo)); diff --git a/www/games/orbit-idle/src/data/state.ts b/www/games/orbit-idle/src/data/state.ts index be68c6b..617a42e 100644 --- a/www/games/orbit-idle/src/data/state.ts +++ b/www/games/orbit-idle/src/data/state.ts @@ -12,7 +12,7 @@ import { Tutorial } from '../form-controls/tutorial'; import { Zoom } from '../ui/zoom'; // Global constants -export const version = 'v1.3.0-alpha'; +export const version = 'v1.0.0'; // UI elements export const cursor: Cursor = new Cursor(); diff --git a/www/games/orbit-idle/src/data/stats.ts b/www/games/orbit-idle/src/data/stats.ts index 2d83f55..6c74b17 100644 --- a/www/games/orbit-idle/src/data/stats.ts +++ b/www/games/orbit-idle/src/data/stats.ts @@ -1,7 +1,7 @@ import { Drawable } from 'graphico'; import { Label } from '../form-controls/label'; import { Color } from 'viridis'; -import { player } from './state'; +import { player, version } from './state'; import { N, SaveLoad } from './lib'; import { SMath } from 'smath'; @@ -21,7 +21,7 @@ export class Statistics extends SaveLoad implements Drawable { super(data); this.visible = false; this.title = new Label('Orbit Idle: Statistics', new Color(255, 255, 255), 2, true, 'center', 'bottom', 0, Label.fontSize * 16); - this.headers = new Label('Started on\nSolar system size\nTotal earned\nTotal spent\nTotal planetary years\nSpeed levels purchased\nAscensions purchased\n\nCredits\n\n\nDisclaimer', new Color(255, 255, 255), 1, false, 'right', 'top', 0, Label.fontSize * 18); + this.headers = new Label('Started on\nSolar system size\nTotal earned\nTotal spent\nTotal planetary years\nSpeed levels purchased\nAscensions purchased\n\nCredits\n\n\nDisclaimer\n\n\n\nVersion', new Color(255, 255, 255), 1, false, 'right', 'top', 0, Label.fontSize * 18); this.content = new Label('', new Color(255, 255, 255), 1, true, 'left', 'top', 0, Label.fontSize * 18); } public load(data: Partial = defaultStats): void { @@ -53,7 +53,7 @@ export class Statistics extends SaveLoad implements Drawable { graphics.fillStyle = Statistics.shade.toString(); graphics.fillRect(Label.fontSize * 15, Label.fontSize * 10, graphics.canvas.width - Label.fontSize * 30, graphics.canvas.height - Label.fontSize * 20); // Set content - this.content.value = `${new Date(this.data.startTime).toLocaleString()}\n${N(player.getNumOrbits())} planets\n$${N(this.data.moneyEarned)}\n$${N(this.data.moneySpent)}\n${N(this.data.orbitsCompleted)} orbits\n${N(this.data.speedLevelsPurchased)}\n${N(this.data.ascensionsPurchased)}\n\nNicolas Ventura\nnicfv.com\n\nGenerative AI was used for\n30-second looping audio but\nnot for game design or code`; + this.content.value = `${new Date(this.data.startTime).toLocaleString()}\n${N(player.getNumOrbits())} planets\n$${N(this.data.moneyEarned)}\n$${N(this.data.moneySpent)}\n${N(this.data.orbitsCompleted)} orbits\n${N(this.data.speedLevelsPurchased)}\n${N(this.data.ascensionsPurchased)}\n\nNicolas Ventura\nnicfv.com\n\nGenerative AI was used for\n30-second looping audio but\nnot for game design or code\n\n${version}`; // X-center all labels this.title.x = graphics.canvas.width / 2; this.headers.x = (graphics.canvas.width - Label.fontSize) / 2; diff --git a/www/games/orbit-idle/src/game/orbit.ts b/www/games/orbit-idle/src/game/orbit.ts index d01788d..cd7d1db 100644 --- a/www/games/orbit-idle/src/game/orbit.ts +++ b/www/games/orbit-idle/src/game/orbit.ts @@ -56,7 +56,7 @@ export class Orbit extends SaveLoad implements Drawable { this.maxSpeedLevel = 100; this.baseCost = 10 ** index; this.costIncrease = 1.02 + 0.02 * index; - this.ascCostIncrease = 2.25 + 0.05 * index; + this.ascCostIncrease = 3.25 + 0.25 * index; } public load(data: Partial = defaultOrbitData): void { this.data.angle = SMath.clamp(data.angle ?? defaultOrbitData.angle, 0, Orbit.TAU); diff --git a/www/games/orbit-idle/src/index.ts b/www/games/orbit-idle/src/index.ts index f841c98..21cf460 100644 --- a/www/games/orbit-idle/src/index.ts +++ b/www/games/orbit-idle/src/index.ts @@ -1,4 +1,3 @@ -import './close-info-handler'; import { Canvas } from 'graphico'; import { ascBtn, buyType, cursor, income, menu, paused, player, shop, stats, system, tutorial, zoom } from './data/state'; import { GameData } from './data/gamedata';