wip noise-based formulations

This commit is contained in:
Tangent 2020-05-21 22:16:49 -07:00
commit 93cba190c0
2 changed files with 196 additions and 0 deletions

53
main.moon Normal file
View File

@ -0,0 +1,53 @@
w, h = love.graphics.getDimensions!
map = {}
map.get = (x, y) -> if map[x] return map[x][y]
map.set = (x, y, v) ->
map[x] = {} unless map[x]
map[x][y] = v
seed = love.math.random!
scale = 10
tileSize = 20
camera = { x: 0, y: 0 }
update = ->
if love.keyboard.isDown "a"
camera.x -= 4
if love.keyboard.isDown "d"
camera.x += 4
if love.keyboard.isDown "w"
camera.y -= 4
if love.keyboard.isDown "s"
camera.y += 4
time, tick = 0, 1/60
love.update = (dt) ->
time += dt
if time >= tick
time -= tick
update()
love.draw = ->
a, b = math.floor(camera.x / tileSize), math.floor(camera.y / tileSize)
i, j = camera.x % tileSize, camera.y % tileSize
for x = 0, w / tileSize
for y = 0, h / tileSize
n = love.math.noise (x + a + seed) / scale, (y + b + seed) / scale
m = love.math.noise (x + a + seed) / scale, (y + b + seed) / scale, n
if m < 0.72
love.graphics.setColor n, 1, 0, 1
else
love.graphics.setColor 1, 1, 1, 1
X, Y = x * tileSize - i, y * tileSize - j
love.graphics.rectangle "fill", X, Y, tileSize, tileSize
if map.get x + a, y + b
love.graphics.setColor 0, 0, 0, 1
love.graphics.line X + tileSize / 2, Y + tileSize / 2, X, Y
love.mousepressed = (x, y, btn) ->
X, Y = math.floor((x + camera.x) / tileSize), math.floor((y + camera.y) / tileSize)
print X, Y
map.set X, Y, true
love.keypressed = (key) ->
love.event.quit! if key == "escape"

143
src/main.moon Normal file
View File

@ -0,0 +1,143 @@
SPAWN = {} -- special value, for things existing naturally
-- <name tool used (not destroyed, but causes wear)
-- name+ heavy/large variant required
-- name- light/small or medium variant required (no +/- == medium)
-- name name multiple types of product / resource required
-- name#int 1 to int produced / exactly int required
-- unless int==1 -> 0 or 1
-- unless construct-based -> exact numbers
-- name:type specific subtype produced / specific subtype required
-- :type produces random type OF subtype / requires any type OF subtype
-- name/name requires one of specific types / produces one of specific types
-- NOTE tool use may refer to tools (hand-crafted) and constructs
-- (factory-crafted)
-- most resources can be a tile, inside a tile (something with capacity), or inside a player
recipes = {
tree: SPAWN
bush: SPAWN
grass: SPAWN
tall_grass: SPAWN
["log#1 leaf#2 seed#1/fruit#1"]: "tree"
["log#2 leaf#5 seed#4/fruit#4"]: "tree <cutter"
["leaf#4 fruit#3/herb#3/vegetable#3"]: "bush"
["grain#1/herb#1/seed#1"]: "grass"
["herb#2/seed#2/grain#3 plant_fiber#1"]: "tall_grass"
animal: SPAWN
carcass: "animal" -- must be killed
["raw_meat bone#1"]: "carcass"
["raw_meat#2 leather#2 bone#2"]: "carcass <cutter-"
-- TODO cooker is not obtainable
meat: "raw_meat <cooker-"
rock: SPAWN
stone: SPAWN
["flint/stone"]: "rock"
["stone#3 metal_ore#1/coal#1"]: "stone <digger+"
-- driftwood: SPAWN
-- wood: "driftwood"
-- TODO smelter is not obtainable
["metal#1"]: "metal_ore <smelter-"
["metal#2"]: "metal_ore <smelter"
["metal#4"]: "metal_ore <smelter+"
["wood#2"]: "log <cutter"
-- TODO forge is not obtainable
-- TODO plastic is not obtainable
-- TODO molder is not obtainable
knife: { "flint/stone", "metal_ore/metal <forge-", "plastic <molder", tool: "cutter-" }
axe: { "log/wood flint/stone", "log/wood metal_ore/metal <forge", "plastic <molder+", tool: "cutter" }
pickaxe: { "log/wood flint/stone", "log/wood metal_ore/metal <forge", "plastic <molder+", tool: "digger+" }
-- NOTE there are no container types defined
milk: { "animal:mammal", fluid: true } -- note: medium or large animal
egg: "animal:laying"
["cheese#1"]: "milk"
-- TODO bacteria is not obtainable
["cheese#2"]: "milk bacteria"
-- TODO farm is not obtainable
fertilizer: { SPAWN, "leaf#2/seed#4", "<farm:animal" }
-- TODO syringe is not obtainable (make sure it requires a needle-)
-- NOTE organic is not defined
dna: ":organic <syringe"
-- TODO cloner is not obtainable
["animal#1"]: "dna <cloner"
["tree#1/bush#1/tall_grass#1"]: "seed farmland water"
["seed#2"]: "fruit/vegetable"
["seed#1"]: "herb/grain"
dirt: { SPAWN, "dirt <digger" }
farmland: "dirt <tiller"
hoe: { "log/wood flint/stone", "log/wood metal_ore/metal <forge", "plastic <molder+", tool: "tiller" }
shovel: { "log/wood flint/stone", "log/wood metal_ore/metal <forge", "plastic <molder+", tool: "digger" }
sand: { SPAWN, "sand <digger" }
-- hammer: { "log/wood flint/stone", "log/wood metal_ore/metal <forge", "plastic <molder+", tool: "smasher" }
-- gravel: { SPAWN, "gravel <digger", "stone <smasher" }
water: { SPAWN, fluid: true }
-- salt_water: SPAWN
["glass#1"]: "sand <forge-"
["glass#2"]: "sand <forge"
["glass#4"]: "sand <forge+"
-- TODO distiller is not obtainable
alcohol: { "fruit <distiller-", "grain#2 herb water <distiller+", "vegetable <distiller", fluid: true }
-- NOTE remember that depending on origins, different flavor text for item types will exist
-- ie: alcohol should be wine, beer, and vodka
-- TODO mineral is not obtainable (idea: refine from stone)
-- TODO lab is not obtainable
medicine: { "herb#3", "mineral plastic water <lab" }
textile: { "plant_fiber#2/leather <needle-" }
["needle#1-"]: "bone/wood/log"
needle: { "plastic <molder-", "metal_ore/metal <forge-", "bone/wood/log <cutter" }
["needle-"]: { "plastic <molder", "metal_ore/metal <forge" }
backpack: { "textile#2/leather#2 <needle", capacity: 12 } -- base capacity can fluctuate
["backpack+"]: { "textile#3/leather#3 <needle-", capacity: 20 }
sack: { "textile/leather <needle", capacity: 5 }
belt: { "textile/leather/plant_fiber <needle", capacity: 7 }
-- crystal: { SPAWN, "crystal <digger+" } -- NOTE will be used in advanced electronics
-- TODO factory is unobtainable
microscope: "glass metal/plastic#2 <factory+" -- TODO more advanced recipes for better microscopes
-- TODO well is unobtainable
oil: { SPAWN, "oil <well+" }
ice: SPAWN
-- ["medicine acid"]: "mineral#5 oil water#2"
-- TODO gem -> lens
-- TODO uranium -> centrifuge -> fission reactor -> electricity
-- TODO oil -> plastic&gasoline&kerosine&tar&methane?
-- TODO bacteria -> hydrocarbons
-- TODO oxygen, hydrogen, carbon, methane, carbon dioxide, carbon monoxide, nitrogen, argon, helium
-- TODO catalytic_metal ?
-- TODO ??? super strong metal (harvest from gas giant for advanced techs?)
-- TODO bose-einstein condensate, neutronium, superfluidics, superconductors, quantum lockers
-- TODO electricity
-- TODO computer
-- TODO zero-point energy, casimir energy, fusion energy, he3 mining
-- TODO battery tech: lead acid, lithium ion, aluminium air, zinc-nickel (metal batteries)
-- TODO dynamite
-- TODO machinery :mining,logging,farm
-- TODO chair,table,dresser,desk,bookshelf,shelf,lamp,locker,door
-- TODO clothing
-- TODO medkit: syringes, medicine, textiles
-- TODO tesla coil
-- TODO many foodstuffs (bread, pie, stew, pilaf, salad, etc)
-- TODO offices ?
-- TODO antimatter generator, particle accelerator, magnetic trap
-- TODO plasma, alignment crystal, etc, matter transmitter
-- TODO research subatomic particles
-- TODO wormhole expansion drive, gravimetric drive, ion drive/photonic drives
-- TODO quantum drive, reality rupture drive, warp folding drive
-- NOTE hay is just a grain type
}
buildings = { -- listing what constructs are required
-- NOTE everything requires at least one office and bathroom
capitol: { "office", "atrium/lounge", optional: { "cafeteria", "garage?" } }
bank: {}
}
-- TODO list animal types somewhere
-- NOTE materials have inherint strength, which will effect quality of things
-- produced from them
-- building: enclosed with walls (and door(s)/window(s))
-- and has floors and "roof", two materials per interior tile, one per wall tile :3
-- pen: enclosed with fence (and gate(s))
-- TODO food edibility chart
-- TODO research, universities, prototyping