Overview
Comment: | fix some bugs, start work on actually using the tier system, add usage docs |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
e905f495dc51bcb45ecc91c61af102a7 |
User & Date: | lexi on 2024-05-07 23:16:29 |
Other Links: | manifest | tags |
Context
2024-05-09
| ||
15:33 | add beginnings of construction system, add cuprite, fix granite, tweak balance, add sane asset management system check-in: d831add94c user: lexi tags: trunk | |
2024-05-07
| ||
23:16 | fix some bugs, start work on actually using the tier system, add usage docs check-in: e905f495dc user: lexi tags: trunk | |
03:45 | compiler now draws power, better compile job progress bars, stats screen refreshes check-in: 52a4f364ac user: lexi tags: trunk | |
Changes
Modified mods/starlit-electronics/init.lua from [50792bb85d] to [edafa25ca2].
302 302 -- makeshift: cheap, weak, low quality 303 303 -- imperial ("da red wunz go fasta"): powerful, low quality 304 304 -- commune ("snooty sophisticates"): limited power, high quality, expensive 305 305 -- usukwinya ("value engineering"): high power, mid quality, affordable 306 306 -- eluthrai ("uncompromising"): high power, high quality, wildly expensive 307 307 -- firstborn ("god-tier"): exceptional 308 308 309 + print(dump(starlit.world.tier.fabsum('commune', 'battery'))) 309 310 local batteryTiers = { 310 311 makeshift = { 311 312 name = 'Makeshift'; capacity = .5, decay = 3, leak = 2, dischargeRate = 1, 312 - fab = starlit.type.fab { 313 - element = {copper=10}; 314 - cost = {power = 0.3}; 315 - time = {print = .25}; 316 - }; 313 +-- fab = starlit.type.fab { 314 +-- element = {copper=10}; 315 +-- cost = {power = 0.3}; 316 +-- time = {print = .25}; 317 +-- }; 318 + fab = starlit.world.tier.fabsum('makeshift', 'battery'); 317 319 desc = "Every attosecond this electrical abomination doesn't explode in your face is but the unearned grace of the Wild Gods."; 318 320 complexity = 1; 319 321 sw = {rarity = 1}; 320 322 }; 321 323 imperial = { 322 324 name = 'Imperial'; capacity = 2, decay = 2, leak = 2, dischargeRate = 2; 323 - fab = starlit.type.fab { 324 - element = {copper=15, iron = 20}; 325 - size = { print = 0.1 }; 326 - cost = {power = 2}; 327 - time = {print = .5}; 328 - }; 325 +-- fab = starlit.type.fab { 326 +-- element = {iron = 20}; 327 +-- size = { print = 0.1 }; 328 +-- cost = {power = 2}; 329 +-- time = {print = .5}; 330 +-- }; 331 + fab = starlit.world.tier.fabsum('imperial', 'battery'); 329 332 desc = "The Empire's native technology is a lumbering titan: bulky, inefficient, unreliable, ugly, and awesomely powerful. Their batteries are no exception, with raw capacity and throughput that exceed even Usukinwya designs."; 330 333 drm = 1; 331 334 complexity = 2; 332 335 sw = {rarity = 2}; 333 336 }; 334 337 commune = { 335 338 name = 'Commune'; capacity = 1, decay = .5, leak = .2, dischargeRate = 1; 336 - fab = starlit.type.fab { 337 - element = {vanadium = 50}; 338 - metal = {steel=10}; 339 - size = { print = 0.05 }; 340 - cost = {power = 1}; 341 - }; 339 + fab = starlit.world.tier.fabsum('commune', 'battery'); 340 +-- fab = starlit.type.fab { 341 +-- element = {vanadium=10}; 342 +-- metal = {aluminum=10}; 343 +-- size = { print = 0.05 }; 344 +-- cost = {power = 1}; 345 +-- }; 342 346 desc = "The Commune's proprietary battery designs prioritize reliability, compactness, and maintenance concerns above raw throughput, with an elegance of engineering and design that would make a Su'ikuri cry."; 343 347 complexity = 5; 344 348 sw = {rarity = 3}; 345 349 }; 346 350 usukwinya = { 347 351 name = 'Usukwinya'; capacity = 2, decay = 1, leak = 1, dischargeRate = 1.5, 348 - fab = starlit.type.fab { 349 - element = {argon=10}; 350 - metal = {vanadium=30}; 351 - size = { print = 0.07 }; 352 - cost = {power = .8}; 353 - }; 352 + fab = starlit.world.tier.fabsum('usukwinya', 'battery'); 353 +-- fab = starlit.type.fab { 354 +-- element = {argon=10, vanadium=10}; 355 +-- size = { print = 0.07 }; 356 +-- cost = {power = .8}; 357 +-- }; 354 358 desc = "A race of consummate value engineers, the Usukwinya have spent thousands of years refining their tech to be as cheap to build as possible, without compromising much on quality. The Tradebirds drive an infamously hard bargain, but their batteries are more than worth their meagre cost."; 355 359 drm = 2; 356 360 sw = {rarity = 10}; 357 361 complexity = 15; 358 362 }; 359 363 eluthrai = { 360 364 name = 'Eluthrai'; capacity = 3, decay = .4, leak = .1, dischargeRate = 1.5, 361 - fab = starlit.type.fab { 362 - element = {beryllium=20, platinum=20, technetium = 1}; 363 - metal = {cinderstone = 10}; 364 - size = { print = 0.03 }; 365 - cost = {power = 10}; 366 - time = {print = 2}; 367 - }; 365 + fab = starlit.world.tier.fabsum('eluthrai', 'battery'); 366 +-- fab = starlit.type.fab { 367 +-- element = {beryllium=20, platinum=20, technetium = 1}; 368 +-- metal = {cinderstone = 10}; 369 +-- size = { print = 0.03 }; 370 +-- cost = {power = 10}; 371 +-- time = {print = 2}; 372 +-- }; 368 373 desc = "The uncompromising Eluthrai are never satisfied until every quantifiable characteristic of their tech is maximally optimised down to the picoscale. Their batteries are some of the best in the Reach, and unquestionably the most expensive -- especially for those lesser races trying to copy the designs without the benefit of the sublime autofabricator ecosystem of the Eluthrai themselves."; 369 374 complexity = 200; 370 375 sw = {rarity = 0}; -- you think you're gonna buy eluthran schematics on SuperDiscountNanoWare.space?? 371 376 }; 372 377 firstborn = { 373 378 name = 'Firstborn'; capacity = 5, decay = 0.1, leak = 0, dischargeRate = 3; 374 - fab = starlit.type.fab { 375 - element = {neodymium=20, xenon=150, technetium=5}; 376 - metal = {sunsteel = 10}; 377 - crystal = {astrite = 1}; 378 - size = { print = 0.05 }; 379 - cost = {power = 50}; 380 - time = {print = 4}; 381 - }; 379 + fab = starlit.world.tier.fabsum('firstborn', 'battery'); 380 +-- fab = starlit.type.fab { 381 +-- element = {neodymium=20, xenon=150, technetium=5}; 382 +-- metal = {sunsteel = 10}; 383 +-- crystal = {astrite = 1}; 384 +-- size = { print = 0.05 }; 385 +-- cost = {power = 50}; 386 +-- time = {print = 4}; 387 +-- }; 382 388 desc = "Firstborn engineering seamlessly merges psionic effects with a mastery of the physical universe unattained by even the greatest of the living Starsouls. Their batteries reach levels of performance that strongly imply Quantum Gravity Theory -- and several major holy books -- need to be rewritten. From the ground up."; 383 389 complexity = 1000; 384 390 sw = {rarity = 0}; -- lol no 385 391 }; 386 392 } 387 393 388 394 local batterySizes = { ................................................................................ 395 401 huge = {name = 'Huge', capacity = 3, dischargeRate = 2, complexity = 1, matMult = 2, 396 402 fab = starlit.type.fab {size={print=0.8},cost={power=8},time={print=120}}}; 397 403 } 398 404 399 405 local batteryTypes = { 400 406 supercapacitor = { 401 407 name = 'Supercapacitor'; 402 - desc = 'Room-temperature superconductors make for very reliable, high-dischargeRate, but low-capacity batteries.'; 408 + desc = 'Room-temperature superconductors make for very reliable, high-discharge rate, but low-capacity batteries.'; 403 409 fab = starlit.type.fab { 404 410 metal = { enodium = 5 }; 405 411 size = {print=0.8}; 406 412 cost = {power = 1e3}; 407 413 }; 408 414 sw = { 409 415 cost = { ................................................................................ 499 505 for bTierName, bTier in pairs(batteryTiers) do 500 506 for bSizeName, bSize in pairs(batterySizes) do 501 507 -- elemath(elementCost, bType.fab.element or {}, bSize.matMult) 502 508 -- elemath(elementCost, bTier.fab.element or {}, bSize.matMult) 503 509 -- elemath(metalCost, bType.fab.metal or {}, bSize.matMult) 504 510 -- elemath(metalCost, bTier.fab.metal or {}, bSize.matMult) 505 511 local fab = bType.fab + bTier.fab + bSize.fab + starlit.type.fab { 506 - element = {copper = 10, silicon = 5}; 512 + element = {copper = 10}; 507 513 } 508 514 local baseID = string.format('battery_%s_%s_%s', 509 515 bTypeName, bTierName, bSizeName) 510 516 local id = 'starlit_electronics:'..baseID 511 517 local name = string.format('%s %s Battery', bTier.name, bType.name) 512 518 if bSize.name then name = bSize.name .. ' ' .. name end 513 519 local function batStat(s)
Modified mods/starlit/terrain.lua from [e1d816e7a5] to [18098e5201].
1 1 local T = starlit.translator 2 2 local lib = starlit.mod.lib 3 + 4 +local soilRec = starlit.type.fab { 5 + element = { 6 + carbon = 25; 7 + }; 8 + time = { shred = 2.5; }; 9 +}; 3 10 4 11 starlit.terrain = {} 5 12 local soilSounds = { 6 13 footstep = 'default-dirt-footstep'; 7 14 dug = 'default-dug-node'; 8 15 } 9 16 local sandSounds = { ................................................................................ 32 39 tiles = {'starlit-terrain-soil.png'}; 33 40 groups = {looseClump = 2, soil = 1}; 34 41 drop = soilDrop; 35 42 sounds = soilSounds; 36 43 _starlit = { 37 44 kind = 'block'; 38 45 elements = {}; 46 + recover = soilRec; 39 47 }; 40 48 }) 41 49 42 50 43 51 minetest.register_node('starlit:sand', { 44 52 description = T 'Sand'; 45 53 tiles = {'starlit-terrain-sand.png'}; ................................................................................ 56 64 description = T 'Lifesilt'; 57 65 tiles = {'starlit-terrain-lifesilt.png'}; 58 66 groups = {looseClump = 1, lifesilt = 1, falling_node = 1}; 59 67 drop = ''; 60 68 sounds = sandSounds; 61 69 _starlit = { 62 70 kind = 'block'; 63 - fab = starlit.type.fab { element = { carbon = 8, silicon = 4 } }; 71 + recover = starlit.type.fab { element = { carbon = 16, silicon = 16, rubidium = 4 } }; 64 72 }; 65 73 }) 66 74 67 75 minetest.register_craftitem('starlit:soil_clump', { 68 76 short_description = T 'Soil'; 69 77 description = starlit.ui.tooltip { 70 78 title = T 'Soil'; ................................................................................ 77 85 if me:get_count() < 3 then return end 78 86 if minetest.place_node(point.above, {name = 'starlit:soil'}, luser) then 79 87 me:take_item(3) 80 88 end 81 89 return me 82 90 end; 83 91 _starlit = { 84 - fab = starlit.type.fab { element = { carbon = 12 / 4 } }; 92 + recover = starlit.type.fab { element = { carbon = 25 / 4 } }; 85 93 }; 86 94 }) 87 95 88 96 function starlit.terrain.createGrass(def) 89 97 local drop = { 90 98 max_items = 4; 91 99 items = { ................................................................................ 105 113 tileable_vertical = false; 106 114 }; 107 115 }; 108 116 groups = {looseClump = 2, grass = 1, soil = 1, sub_walk = 1}; 109 117 drop = soilDrop; 110 118 sounds = grassSounds; 111 119 _starlit = { 112 - fab = def.fab; 113 120 recover = def.recover; 114 121 recover_vary = def.recover_vary; 115 122 }; 116 123 }) 117 124 end 118 125 119 126 120 127 starlit.terrain.createGrass { 121 128 name = 'starlit:greengraze'; 122 129 desc = T 'Greengraze'; 123 130 img = 'starlit-terrain-greengraze'; 124 - fab = starlit.type.fab { 125 - element = { carbon = 12; }; 126 - time = { shred = 2.5; }; 127 - }; 131 + recover = soilRec; 128 132 } 129 133 130 134 starlit.terrain.createGrass { 131 135 name = 'starlit:undergloam'; 132 136 desc = T 'Undergloam'; 133 137 -- fungal carpet 134 138 img = 'starlit-terrain-undergloam'; 135 - fab = starlit.type.fab { 136 - element = { 137 - carbon = 12; 138 - }; 139 - time = { shred = 2.5; }; 140 - }; 139 + recover = soilRec; 141 140 } 142 141 143 142 for _, w in pairs {false,true} do 144 143 minetest.register_node('starlit:liquid_water' .. (w and '_flowing' or ''), { 145 144 description = T 'Water'; 146 145 drawtype = 'liquid'; 147 146 waving = 3; 148 147 tiles = { 149 148 { 150 - name = "default_water_source_animated.png"; 149 +-- name = "default_water_source_animated.png"; 150 + name = "starlit-water.png"; 151 151 backface_culling = false; 152 152 animation = { 153 153 type = "vertical_frames"; 154 154 aspect_w = 16; 155 155 aspect_h = 16; 156 156 length = 2.0; 157 157 }; 158 158 }; 159 159 { 160 - name = "default_water_source_animated.png"; 160 +-- name = "default_water_source_animated.png"; 161 + name = "starlit-water.png"; 161 162 backface_culling = true; 162 163 animation = { 163 164 type = "vertical_frames"; 164 165 aspect_w = 16; 165 166 aspect_h = 16; 166 167 length = 2.0; 167 168 };
Modified mods/starlit/tiers.lua from [513c94b946] to [de1b489a19].
7 7 function starlit.world.tier.fabsum(name, ty) 8 8 local dest = fab {} 9 9 local t = starlit.world.tier.db[name] 10 10 assert(t, 'reference to nonexisting tier '..name) 11 11 if t.super then 12 12 dest = dest+starlit.world.tier.fabsum(t.super, ty)*(t.cost or 1) 13 13 end 14 - if t.fabclasses and t.fabclasses[ty] then 15 - dest = dest + t.fabclasses[ty] 14 + if t.fabclass and (t.fabclass[ty] or t.fabclass.basis) then 15 + dest = dest + (t.fabclass[ty] or t.fabclass.basis) 16 16 end 17 17 return dest 18 18 end 19 19 20 20 function starlit.world.tier.tech(name, tech) 21 21 local t = starlit.world.tier.db[name] 22 22 if t.techs and t.techs[tech] ~= nil then return t.techs[tech] end ................................................................................ 37 37 ------------------ 38 38 -- tier classes -- 39 39 ------------------ 40 40 41 41 lesser = { 42 42 name = 'Lesser', adj = 'Lesser'; 43 43 super = 'base'; 44 - fabclasses = { 44 + fabclass = { 45 45 basis = fab { 46 - metal = {aluminum=4}; 46 + element = {aluminum=4}; 47 47 }; 48 48 }; 49 49 }; 50 50 greater = { 51 51 name = 'Greater', adj = 'Greater'; 52 52 super = 'base'; 53 - fabclasses = { 53 + fabclass = { 54 54 basis = fab { 55 - metal = {vanadium=2}; 55 + element = {vanadium=2}; 56 56 }; 57 57 }; 58 58 }; 59 59 starlit = { 60 - name = 'Starsoul', adj = 'Starsoul'; 60 + name = 'Starlit', adj = 'Starlit'; 61 61 super = 'base'; 62 - fabclasses = { 62 + fabclass = { 63 63 basis = fab { 64 - metal = {osmiridium=1}; 64 + element = {iridium=1}; 65 65 }; 66 66 }; 67 67 }; 68 68 forevanished = { 69 69 name = 'Forevanished One', adj = 'Forevanished'; 70 70 super = 'base'; 71 - fabclasses = { 71 + fabclass = { 72 72 basis = fab { 73 73 metal = {elusium=1}; 74 74 }; 75 75 }; 76 76 }; 77 77 78 78 ------------------ ................................................................................ 83 83 name = 'Makeshift', adj = 'Makeshift'; 84 84 super = 'lesser'; 85 85 techs = {tool = true, prim = true, electric = true}; 86 86 power = 0.5; 87 87 efficiency = 0.3; 88 88 reliability = 0.2; 89 89 cost = 0.3; 90 - fabclasses = { -- characteristic materials 90 + fabclass = { -- characteristic materials 91 91 basis = fab { -- fallback 92 - metal = {iron=3}; 92 + element = {aluminum=4}; 93 93 }; 94 94 }; 95 95 }; 96 96 97 97 imperial = { --powerful trash 98 98 name = 'Imperial', adj = 'Imperial'; 99 99 super = 'lesser'; 100 100 techs = {tool = true, electric = true, electronic = true, suit = true, combatSuit = true, weapon = true, hover='ion'}; 101 101 power = 2.0; 102 102 efficiency = 0.5; 103 103 reliability = 0.5; 104 104 cost = 1.0; 105 - fabclasses = { 105 + fabclass = { 106 106 basis = fab { 107 - metal = {steel=2}; 107 + element = {iron=2}; 108 108 }; 109 109 }; 110 110 }; 111 111 112 112 commune = { --reliability 113 113 name = 'Commune', adj = 'Commune'; 114 114 super = 'lesser'; 115 115 techs = {tool = true, electric = true, electronic = true, suit = true, combatSuit = true, weapon = true, gravitic = true, hover='grav'}; 116 116 power = 1.0; 117 117 efficiency = 2.0; 118 118 reliability = 3.0; 119 119 cost = 1.5; 120 - fabclasses = { 120 + fabclass = { 121 121 basis = fab { 122 - metal = {titanium=1}; 122 + element = {titanium=1}; 123 123 time = {print = 1.2}; -- commune stuff is intricate 124 124 }; 125 125 }; 126 126 }; 127 127 128 128 ------------------- 129 129 -- Greater Races -- ................................................................................ 138 138 name = 'Su\'ikuri', adj = "Su'ikuruk"; 139 139 super = 'starlit'; 140 140 techs = {psi = true, prim = true, bioSuit = true, psiSuit = true}; 141 141 power = 1.5; 142 142 efficiency = 1.0; 143 143 reliability = 3.0; 144 144 cost = 2.0; 145 - fabclasses = { 145 + fabclass = { 146 146 psi = fab { 147 - metal = {numinium = 2.0}; 148 - crystal = {beryllium = 1.0}; 147 + element = {numinium = 2.0}; 149 148 }; 150 149 bio = fab { 151 - crystal = {beryllium = 1.0}; 150 + element = {beryllium = 1.0}; 152 151 }; 153 152 }; 154 153 }; 155 154 156 155 usukwinya = { --value for 'money'; no weapons; no hovertech (they are birds) 157 156 -- NOTA BENE: the ususkwinya *do* have weapons of their own; however, 158 157 -- they are extremely restricted and never made available except to a 159 - -- very select number of that species. consequently, usuk players 158 + -- very select number of that species, those members who need stronger 159 + -- defenses than their native psionics can provide. consequently, usuk players 160 160 -- of a certain scenario may have usuk starting weapons, but these must 161 161 -- be manually encoded to avoid injecting them into the overall crafting 162 162 -- /loot system. because there are so few of these weapons in existence, 163 163 -- all so tightly controlled, the odds of the weapons or plans winding 164 164 -- up on Farthest Shadow are basically zero unless you bring them yourself 165 165 name = 'Usukwinya', adj = 'Usuk'; 166 166 super = 'starlit'; 167 167 techs = lib.tbl.set('tool', 'electric', 'electronic', 'suit', 'gravitic'); 168 168 power = 2.0; 169 169 efficiency = 2.0; 170 170 reliability = 2.0; 171 171 cost = 0.5; 172 - fabclasses = { 172 + fabclass = { 173 173 basis = fab { 174 - crystal = {aluminum = 5}; -- ruby 174 + element = {cobalt=2}; 175 175 }; 176 176 }; 177 177 }; 178 178 179 179 eluthrai = { --super-tier 180 180 name = 'Eluthrai', adj = 'Eluthran'; 181 181 super = 'starlit'; 182 182 techs = {tool = true, electric = true, electronic = true, weapon = true, gravitic = true, gravweapon = true, suit = true, combatSuit = true, hover = 'grav'}; 183 183 power = 4.0; 184 184 efficiency = 4.0; 185 185 reliability = 4.0; 186 186 cost = 4.0; 187 - fabclasses = { 187 + fabclass = { 188 188 basis = fab { 189 - crystal = {carbon = 5}; -- diamond 189 + element = {scandium = 1}; 190 + }; 191 + weapon = { 192 + metal = {cinderstone = 1}; 190 193 }; 191 194 special = fab { 192 - metal = {technetium=1, cinderstone=1} 195 + element = {technetium=1}; 193 196 }; 194 197 }; 195 198 }; 196 199 197 200 ----------------------- 198 201 -- Forevanished Ones -- 199 202 ----------------------- ................................................................................ 202 205 name = 'Firstborn', adj = 'Firstborn'; 203 206 super = 'forevanished'; 204 207 techs = {tool = true, electric = true, electronic = true, suit = true, psi = true, combatSuit = true, weapon = true, gravitic = true, gravweapon = true}; 205 208 power = 10.0; 206 209 efficiency = 5.0; 207 210 reliability = 3.0; 208 211 cost = 10.0; 209 - fabclasses = { 212 + fabclass = { 210 213 basis = fab { 211 - metal = {technetium=2, neodymium=3, sunsteel=1}; 212 - crystal = {astrite=1}; 214 + element = {technetium=2, neodymium=3}; 215 +-- metal = {sunsteel=1}; 216 +-- crystal = {astrite=1}; 213 217 }; 214 218 }; 215 219 }; 216 220 217 221 forevanisher = { --godslayer-tier 218 222 name = 'Forevanisher', adj = 'Forevanisher'; 219 223 super = 'forevanished'; 220 224 techs = {tool = true, electric = true, electronic = true, suit = true, psi = true, combatSuit = true, weapon = true, gravitic = true, gravweapon = true}; 221 225 power = 20.0; 222 226 efficiency = 1.0; 223 227 reliability = 2.0; 224 228 cost = 100.0; 225 - fabclasses = { 229 + fabclass = { 226 230 basis = fab { 227 231 metal = {}; 228 - crystal = {}; 229 232 }; 230 233 }; 231 234 }; 232 235 233 236 }
Modified mods/starlit/user.lua from [4cee014aa7] to [1ac6a2a876].
158 158 159 159 uiColor = function(self) return lib.color {hue=238,sat=.5,lum=.5} end; 160 160 161 161 ----------- 162 162 -- stats -- 163 163 ----------- 164 164 statDelta = function(self, stat, d, cause, abs) 165 + if self.entity:get_hp() == 0 then return end 165 166 local dt = self.persona.statDeltas 166 167 local min, max, base = self:statRange(stat) 167 168 if abs then 168 169 if d == true then d = max 169 170 elseif d == false then d = min end 170 171 end 171 172 if stat == 'health' then ................................................................................ 714 715 dropInv 'main' 715 716 dropInv 'starlit_suit' 716 717 self:updateSuit() 717 718 end; 718 719 onRespawn = function(self) 719 720 local meta = self.entity:get_meta() 720 721 self.entity:set_pos(vector.from_string(meta:get_string'starlit_spawn')) 721 - self:statDelta('psi', 0, 'death', true) 722 + self:statDelta('numina', 0, 'death', true) 722 723 self:statDelta('nutrition', 1500, 'death', true) 723 724 self:statDelta('hydration', 2, 'death', true) 724 725 self:statDelta('fatigue', 0, 'death', true) 725 726 self:statDelta('stamina', 0, 'death', true) 726 727 self:updateSuit() 727 728 return true 728 729 end;
Modified mods/vtlib/math.lua from [276f7a5d6e] to [818384c4da].
89 89 function fn.lerp(t, a, b) return (1-t)*a + t*b end 90 90 function fn.gradient(grad, pos) 91 91 local n = #grad 92 92 if n == 1 then return grad[1] end 93 93 local op = pos*(n-1) 94 94 local idx = math.floor(op) 95 95 local t = op-idx 96 - return fn.lerp(t, grad[1 + idx], grad[2 + idx]) 96 + return fn.lerp(t, grad[1 + idx] or grad[n], grad[2 + idx] or grad[n]) 97 97 end 98 98 99 99 function fn.trim(fl, prec) 100 100 local fac = 10^prec 101 101 return math.floor(fl * fac) / fac 102 102 end 103 103
Modified starlit.ct from [7cb4085b3b] to [ee106030ea].
24 24 25 25 [!liars], all of them. 26 26 27 27 are there other survivors? have they been similarly changed? what was that artifact and who were those terrorists? important questions, all, but they pale in comparison with the most important one: 28 28 29 29 how the fuck are you going to survive the next 24 hours? 30 30 31 +## usage 32 +the ideal way to install [`starlit] on your system is to simply clone the repository with [`fossil]. this way, you can easily update the game whenever it's updated. 33 +~~~ 34 +$ cd ~/.minetest/games 35 +$ fossil clone https://c.hale.su/starlit 36 +~~~ 37 +game assets are not versioned. to update these, run the following command [*in the root of the open starlit repository] (otherwise the archiver will shit all over your everything). 38 +~~~ 39 +$ fossil uv cat asset.cpxz | xzcat | cpio -i 40 +~~~ 41 +if, for some unaccountable reason, you don't want to use fossil, you can download a tarball. 42 +~~~ 43 +$ curl https://c.hale.su/starlit/tarball/starlit.tar.gz | tar x 44 +$ curl https://c.hale.su/starlit/uv/asset.cpxz | xzcat | cpio -i 45 +~~~ 46 +eventually i might make proper release tarballs available that bundle the game and assets together, but the game isn't stable enough to do that yet. 47 + 31 48 ## engine 32 49 starlit is developed against a bleeding-edge version of minetest. it definitely won't work with anything older than v5.7, and ideally you should build directly from master. 33 50 34 51 starlit is best used with a patched version of minetest, though it is compatible with vanilla. the recommended patches are: 35 52 36 53 * [>p11143 11143] - fix third-person view orientation 37 54