Silver, ruby and diamond veins; treasury shows its treasures; announced payday
- New veins (appended kinds): silver (common), ruby (rare), diamond (very rare, far from the core); treasure caves contain gems; each treasure is worth a different amount per strike and per vein - Imps carry one kind of treasure at a time - Treasury tiles hold up to 500 each and show gold coins, silver bars, rubies or diamonds; spending empties random treasury tiles, the soul core keeps what does not fit - Training no longer drains gold continuously: it is billed on the next payday - Payday is announced 20 s before (message with the cost); the HUD shows a payday countdown and the cost of the next payday in red next to the gold counter - Tests for the treasury and the payday bill Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
75dc445d3b
commit
7e84cae910
7 files changed
+362
-31
No files matched your search
+62
-1
@@ -6,7 +6,7 @@ use macroquad::prelude::*;
|
||||
|
||||
pub const CELL: f32 = 16.0;
|
||||
const ATLAS_COLS: u32 = 16;
|
||||
const ATLAS_ROWS: u32 = 8;
|
||||
const ATLAS_ROWS: u32 = 9;
|
||||
|
||||
// atlas indices (4 variants each)
|
||||
pub const T_ROCK: u32 = 0;
|
||||
@@ -56,6 +56,12 @@ pub const T_FORTWALL: u32 = 108; // 4 variants: knight fortress masonry
|
||||
pub const D_SHARD: u32 = 112; // shard of the soul core
|
||||
pub const D_BANNER: u32 = 113; // knight banner
|
||||
pub const I_BRIDGE: u32 = 114;
|
||||
pub const T_SILVER: u32 = 115; // 2 variants each: veins in the earth
|
||||
pub const T_RUBY: u32 = 117;
|
||||
pub const T_DIAMOND: u32 = 119;
|
||||
pub const D_SILVER: u32 = 121; // treasury content
|
||||
pub const D_RUBY: u32 = 122;
|
||||
pub const D_DIAMOND: u32 = 123;
|
||||
|
||||
pub struct Gfx {
|
||||
pub atlas: Texture2D,
|
||||
@@ -643,6 +649,58 @@ fn gen_atlas() -> Image {
|
||||
None
|
||||
}
|
||||
});
|
||||
// ---- more treasures: veins (earth with embedded pieces) and treasury piles
|
||||
let vein = |x: i32, y: i32, v: u32, seed: u32, hi: Color, mid: Color, lo: Color, size: f32| -> Color {
|
||||
let mut best = 99.0f32;
|
||||
for k in 0..5 {
|
||||
let nx = 2 + (hash(k, 1, v + seed) % 12) as i32;
|
||||
let ny = 2 + (hash(k, 2, v + seed) % 12) as i32;
|
||||
best = best.min((((x - nx).abs() + (y - ny).abs()) as f32) - if k % 2 == 0 { 0.5 } else { 0.0 });
|
||||
}
|
||||
if best < size * 0.4 {
|
||||
hi
|
||||
} else if best < size {
|
||||
mid
|
||||
} else if best < size + 0.8 {
|
||||
lo
|
||||
} else {
|
||||
earth_px(x, y, v + seed)
|
||||
}
|
||||
};
|
||||
for v in 0..2u32 {
|
||||
cv.cell(T_SILVER + v, |x, y| Some(vein(x, y, v, 170, c(245, 245, 255), c(180, 186, 200), c(100, 104, 118), 2.0)));
|
||||
cv.cell(T_RUBY + v, |x, y| Some(vein(x, y, v, 180, c(255, 150, 170), c(210, 30, 60), c(110, 16, 36), 1.6)));
|
||||
cv.cell(T_DIAMOND + v, |x, y| Some(vein(x, y, v, 190, c(255, 255, 255), c(150, 230, 255), c(70, 140, 190), 1.4)));
|
||||
}
|
||||
// treasury heaps, same dome shape as the gold pile: silver bars, rubies, diamonds
|
||||
let heap = |x: i32, y: i32| -> Option<f32> {
|
||||
let dx = (x as f32 - 7.5) / 7.0;
|
||||
let dy = (y as f32 - 11.0) / 5.0;
|
||||
let d = dx * dx + dy * dy;
|
||||
if d < 1.0 && y <= 14 {
|
||||
Some(d)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
};
|
||||
cv.cell(D_SILVER, |x, y| {
|
||||
let d = heap(x, y)?;
|
||||
// bars: 4 px wide bricks in rows of 2
|
||||
let row = y / 2;
|
||||
let off = if row % 2 == 1 { 2 } else { 0 };
|
||||
Some(if y % 2 == 0 { c(240, 242, 250) } else if (x + off) % 4 == 0 { c(110, 114, 128) } else if d > 0.6 { c(150, 156, 172) } else { c(196, 200, 216) })
|
||||
});
|
||||
let gems = |x: i32, y: i32, seed: u32, hi: Color, mid: Color, lo: Color| -> Option<Color> {
|
||||
let d = heap(x, y)?;
|
||||
// facetted stones: diamond shaped cells of 4 px
|
||||
let (u, v) = (x + y, x - y + 16);
|
||||
let (cu, cv) = (u / 4, v / 4);
|
||||
let e = (u % 4 == 0) || (v % 4 == 0);
|
||||
let h = hash(cu, cv, seed) % 3;
|
||||
Some(if e { lo } else if h == 0 || (u % 4 == 1 && v % 4 == 1) { hi } else if d > 0.65 { lo } else { mid })
|
||||
};
|
||||
cv.cell(D_RUBY, |x, y| gems(x, y, 200, c(255, 150, 170), c(215, 30, 60), c(120, 12, 36)));
|
||||
cv.cell(D_DIAMOND, |x, y| gems(x, y, 210, c(255, 255, 255), c(170, 232, 255), c(80, 150, 200)));
|
||||
cv.img
|
||||
}
|
||||
|
||||
@@ -1010,6 +1068,9 @@ impl Gfx {
|
||||
Kind::Earth if reinforced => T_REINF + v,
|
||||
Kind::Earth => T_EARTH + v,
|
||||
Kind::Gold => T_GOLD + v,
|
||||
Kind::Silver => T_SILVER + (v & 1),
|
||||
Kind::Ruby => T_RUBY + (v & 1),
|
||||
Kind::Diamond => T_DIAMOND + (v & 1),
|
||||
Kind::Floor => {
|
||||
if claimed {
|
||||
T_CLAIM + v
|
||||
|
||||
Reference in new issue
Block a user