list some starting ship options

This commit is contained in:
Tenari
2026-02-04 08:04:45 -06:00
parent 565c1562c6
commit 90cf7272a8
3 changed files with 212 additions and 9 deletions
+17 -1
View File
@@ -455,11 +455,13 @@ fn bool updateAndRender(TuiState* tui, void* s, u8* input_buffer, u64 loop_count
switch (state->screen) { switch (state->screen) {
case ScreenCreateCharacter: { case ScreenCreateCharacter: {
//// SIMULATION //// SIMULATION
state->screen = ScreenMainGame; // TODO change this if you want to actually have character creation
if (state->me.id != 0) { if (state->me.id != 0) {
state->screen = ScreenMainGame; state->screen = ScreenMainGame;
break; break;
} }
if (state->section.selected_index == 0) {
state->menu.len = ShipType_Count;
}
if (input_buffer[0] == 'q' || user_pressed_esc) { if (input_buffer[0] == 'q' || user_pressed_esc) {
should_quit = true; should_quit = true;
@@ -507,6 +509,20 @@ fn bool updateAndRender(TuiState* tui, void* s, u8* input_buffer, u64 loop_count
line++; line++;
// TODO: game-specific character creation stuff // TODO: game-specific character creation stuff
// 3. draw the ship choices
str ship_label = "Choose your starting ship:";
renderStrToBuffer(tui->frame_buffer, 5, ++line, ship_label, screen_dimensions);
line++;
renderChoiceMenu(
tui,
5,
line,
(ptr*)SHIP_TYPE_STRINGS,
ShipType_Count,
state->section.selected_index == 0,
state->menu.selected_index,
NULL
);
} break; } break;
case ScreenMainGame: { case ScreenMainGame: {
// SIMULATION // SIMULATION
+2 -4
View File
@@ -6,10 +6,8 @@
fn str charForEntity(EntityType e) { fn str charForEntity(EntityType e) {
switch (e) { switch (e) {
case EntityWall: case EntityStarSystem:
return "# "; return "";
case EntityDoor:
return "🚪";
case EntityCharacter: case EntityCharacter:
return "🧙"; return "🧙";
//return "웃"; //return "웃";
+193 -4
View File
@@ -1,4 +1,5 @@
#include "base/all.h" #include "base/all.h"
#include "string_chunk.h"
#ifndef GAMESHARED_H #ifndef GAMESHARED_H
#define GAMESHARED_H #define GAMESHARED_H
@@ -15,18 +16,206 @@ typedef enum EntityFeature {
typedef enum EntityType { typedef enum EntityType {
EntityNull, EntityNull,
EntityWall, EntityStarSystem,
EntityDoor,
EntityCharacter, EntityCharacter,
EntityType_Count, EntityType_Count,
} EntityType; } EntityType;
static const char* ENTITY_STRINGS[] = { static const char* ENTITY_STRINGS[] = {
"NULL", "NULL",
"Wall", "StarSystem",
"Door",
"Character", "Character",
}; };
typedef enum ShipType {
ShipSparrow,
ShipDart,
ShipHaulerPrimeZ1,
ShipNX400,
ShipType_Count,
} ShipType;
static const char* SHIP_TYPE_STRINGS[] = {
"Sparrow",
"Dart",
"Hauler-Prime Z-1",
"NX-400",
};
typedef struct ShipTemplate {
ShipType type;
u8 drive_efficiency;
u8 life_support_efficiency;
u16 vacuum_cargo_slots;
u16 climate_cargo_slots;
u16 passenger_berths;
u16 passenger_amenities_flags;
u16 smugglers_hold_cu_m;
u32 base_cost;
} ShipTemplate;
global ShipTemplate SHIPS[] = {
{
.type = ShipSparrow, .drive_efficiency = 1, .life_support_efficiency = 2,
.vacuum_cargo_slots = 5, .climate_cargo_slots = 0, .passenger_berths = 0,
.passenger_amenities_flags = 0,
.smugglers_hold_cu_m = 1, .base_cost = 100000,
},
{
.type = ShipDart, .drive_efficiency = 12, .life_support_efficiency = 4,
.vacuum_cargo_slots = 9, .climate_cargo_slots = 1, .passenger_berths = 1,
.passenger_amenities_flags = 0,
.smugglers_hold_cu_m = 0, .base_cost = 150000,
},
{
.type = ShipHaulerPrimeZ1, .drive_efficiency = 3, .life_support_efficiency = 3,
.vacuum_cargo_slots = 25, .climate_cargo_slots = 5, .passenger_berths = 0,
.passenger_amenities_flags = 0,
.smugglers_hold_cu_m = 0, .base_cost = 250000,
},
{
.type = ShipNX400, .drive_efficiency = 6, .life_support_efficiency = 8,
.vacuum_cargo_slots = 5, .climate_cargo_slots = 5, .passenger_berths = 5,
.passenger_amenities_flags = 0,
.smugglers_hold_cu_m = 0, .base_cost = 350000,
},
};
typedef struct PlayerShip {
ShipType type;
u8 drive_efficiency;
u8 life_support_efficiency;
u16 vacuum_cargo_slots;
u16 climate_cargo_slots;
u16 passenger_berths;
u16 passenger_amenities_flags;
u16 smugglers_hold_cu_m;
u32 base_cost;
u32 remaining_mortgage;
f32 interest_rate;
u32 cu_m_fuel; // we are just saying you can buy as much fuel as you want
u32 cu_m_o2; // we are just saying you can buy as much o2 as you want
u64 id;
} PlayerShip;
typedef enum CommodityType {
CommodityNull,
CommodityHydrogenFuel,
CommodityOxygen,
CommodityWater,
CommodityWheat,
CommodityRice,
CommodityCorn,
CommodityPotatoes,
CommodityBeef,
CommodityChicken,
CommodityButter,
CommodityOliveOil,
CommodityLiquor,
CommodityBeer,
CommodityFertilizer,
CommodityCleaningSupplies,
CommodityAirFilters,
CommodityIndustrialChemicals,
CommodityClothes,
CommodityRawTextiles,
CommodityElectronics,
CommodityConstructionParts,
Commodity3dPrinterParts,
CommodityHandTools,
CommodityCutlery,
CommodityRobots,
CommodityPlastics,
CommodityHandWeapons,
CommodityBatteries,
CommoditySolarPanels,
CommodityMedicines,
CommodityOpticalComponents,
CommodityGlass,
CommodityLithium,
CommodityBerylium,
CommodityMagnesium,
CommodityAluminium,
CommoditySilicon,
CommodityScandium,
CommodityTitanium,
CommodityVanadium,
CommodityChromium,
CommodityManganese,
CommodityIron,
CommodityCobalt,
CommodityNickel,
CommodityCopper,
CommodityZinc,
CommoditySelenium,
CommodityZirconium,
CommodityMolybdenum,
CommodityRuthenium,
CommodityRhodium,
CommodityPalladium,
CommoditySilver,
CommodityCadmium,
CommodityTin,
CommodityTungsten,
CommodityRhenium,
CommodityIridium,
CommodityPlatinum,
CommodityGold,
CommodityMercury,
CommodityLead,
Commodity_Count,
} CommodityType;
static const char* COMMODITY_STRINGS[] = {
"NULL",
"Hydrogen Fuel",
"Oxygen",
"Water",
"Wheat",
"Rice",
"Corn",
"Potatoes",
"Beef",
"Chicken",
"Butter",
"Olive Oil",
"Liquor",
"Beer",
"Fertilizer",
"Cleaning Supplies",
"Air Filters",
"Industrial Chemicals",
"Clothes",
"Raw Textiles",
"Electronics",
"Construction Parts",
"3d Printer Parts",
"Hand Tools",
"Cutlery",
"Robots",
"Plastics",
"Hand Weapons",
"Batteries",
"Solar Panels",
"Medicines",
"Optical Components",
"Glass",
};
typedef struct Commodity {
CommodityType type;
str name;
u32 base_price_per_kg;
u32 kg_per_container;
u32 m3_per_kg;
} Commodity;
typedef struct StarSystem {
StringChunkList name;
} StarSystem;
typedef struct Planet {
StringChunkList name;
bool habitable;
u32 population;
u32 commodities[Commodity_Count];
} Planet;
typedef struct { typedef struct {
i32 x; i32 x;
i32 y; i32 y;