Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,18 @@ Tutte le versioni notevoli del gioco. Le date sono in formato AAAA-MM-GG.
Ogni versione pubblicata ha anche una [release GitHub](https://github.com/cammo22/DaProd-ClawMachine/releases)
con le app per Android, Windows e Mac, e va online su [GitHub Pages](https://cammo22.github.io/DaProd-ClawMachine/) subito dopo il push.

## [1.1.5] — 2026-09-26 · Niente premio fisso, e i potenziamenti DaProd

- **La vincita è dinamica** (con la [DaProd Suite](https://github.com/cammo22/DaProdSuite) 1.5.1): «togliamo il max dei
20 euro di vincita». Quello che metti (ricariche e potenziamenti) rende di più quanto più vai avanti col punteggio,
da metà a tre volte, e finire la collezione lo moltiplica per 1,25, più velocità e montepremi. Il pannello della
fine fa vedere la stima della sala, contando in su.
- **⚡ Potenziamenti DaProd coi soldi veri**: Super presa, Pinza larga, Prese gratis, Pioggia shiny, Rendita ×5, Lire
×10, per 2, 5 o 10 minuti. Si pagano dal portafoglio della suite, e ogni volta la sala avvisa. Nel pannello c'è anche
quanto porteresti a casa adesso.
- **Gli effetti accesi si vedono ai lati**, col conto alla rovescia, e lampeggiano negli ultimi dieci secondi.
- **L'incasso dice tutto prima**, anche quello della cornice, e dopo il sì il gioco riparte da capo.

## [1.1.4] — 2026-09-25 · La fine che paga, e PRENDI al centro

- **La fine della partita ha il suo pannello**: tutti e 20 i modellini, e le tue lire di gioco (anche 6,1 miliardi)
Expand Down
15 changes: 12 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,18 @@ capienza, motore, fortuna shiny e rendita, più le teste da sbloccare.
### 🏆 La fine

Tutti e 20 i modellini in collezione e la partita è finita: il pannello fa vedere le tue lire di gioco
(anche miliardi) diventare euro. Nella [DaProd Suite](https://github.com/cammo22/DaProdSuite) si riscatta:
da 20 a 30 euro nel portafoglio, più il premio della velocità e un pezzo del montepremi, e il gioco
ricomincia da capo. Fuori dalla suite si ricomincia e basta.
(anche miliardi) diventare euro. Nella [DaProd Suite](https://github.com/cammo22/DaProdSuite) si riscatta, e
**non c'è un premio fisso** (dalla 1.1.5): quello che hai messo (ricariche e potenziamenti) rende di più quanto
più sei andato avanti, da metà fino a tre volte, e finire lo moltiplica ancora per 1,25, più il premio della
velocità e un pezzo del montepremi. La sala dice tutto prima di incassare, e il gioco ricomincia da capo.
Fuori dalla suite si ricomincia e basta.

### ⚡ Potenziamenti DaProd (solo nella suite)

Il tasto **⚡ DaProd** a destra di PRENDI apre sei potenziamenti a tempo, che si pagano coi **soldi veri** del
portafoglio della suite (la sala chiede conferma ogni volta): Super presa, Pinza larga, Prese gratis, Pioggia
shiny, Rendita ×5 e Lire ×10. Accesi, si vedono ai lati dello schermo col conto alla rovescia, e negli ultimi
dieci secondi lampeggiano. Nello stesso pannello c'è quanto porteresti a casa adesso, e finendo.

**Mai bloccato**: ogni fase del carroponte ha un tempo massimo, la presa si paga solo se parte davvero,
sopra la buca non si cala, e con meno di L.100 arriva il **bonus di cortesia**.
Expand Down
58 changes: 53 additions & 5 deletions gioca/daprod-lira.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,14 @@
* DaProdLira.evento("dozer", "jackpot");
* DaProdLira.incassa(); // dal tasto del gioco; la cornice ha il suo
* DaProdLira.soldi(12345); // «L. 12.345» o «€ 6,38», come ha scelto chi gioca
* DaProdLira.paga(9681, "Pioggia d'oro").then(function () { attiva(); });
* DaProdLira.suStima(function (s) { tasto.textContent = "Incassa " + DaProdLira.soldi(s.netto); });
*
* **Dalla 1.5.1** i potenziamenti si pagano coi soldi veri del portafoglio
* (`paga`): la sala fa vedere l'avviso ogni volta, e solo se chi gioca dice si'
* la promessa si risolve. E la sala manda al gioco **la stima dell'incasso**
* (`suStima`): quanto porteresti a casa adesso, e con che punti. L'incasso
* chiede sempre conferma, dicendo tutto, e chiude la partita.
*
* **Dalla 1.4.9** il gioco racconta alla sala quante lire ha, ogni tre
* secondi, e la sala le mostra dal vivo; e la valuta (lire o euro) la sceglie
Expand Down Expand Up @@ -79,6 +87,8 @@

var ascoltatori = [];
var perLaValuta = [];
var perLaStima = [];
var ultimaStima = null;
var ultimo = null;
var valuta = "lire";
function annuncia(stato) {
Expand All @@ -96,8 +106,16 @@

var numero = 0;
var attese = {};
/**
* ⚠ Le domande che aspettano una persona (1.5.1): l'avviso dei soldi veri e
* la conferma dell'incasso restano aperti finche' chi gioca non tocca un
* tasto. Per quelle si aspetta dieci minuti, e il silenzio non spegne il
* modulo: chi ci pensa su non e' una sala che non risponde.
*/
var ASPETTANO_UNA_PERSONA = { paga: true, incassa: true };
function allaSala(cosa, dati) {
if (spento) return Promise.reject(new Error("Fuori dalla sala giochi della DaProd Suite le lire non ci sono."));
var persona = Boolean(ASPETTANO_UNA_PERSONA[cosa]);
return new Promise(function (risolvi, rifiuta) {
var n = ++numero;
attese[n] = { risolvi: risolvi, rifiuta: rifiuta };
Expand All @@ -106,16 +124,22 @@
setTimeout(function () {
if (!attese[n]) return;
delete attese[n];
if (persona) { rifiuta(new Error("Annullato")); return; }
spento = true;
rifiuta(new Error("La sala non risponde: si gioca lo stesso, ma senza lire."));
}, 15000);
}, persona ? 600000 : 15000);
});
}
if (inSuite) {
window.addEventListener("message", function (ev) {
var m = ev.data;
if (!m || m.daprod !== "lira" || ev.source !== window.parent) return;
if (m.stato) annuncia(m.stato);
// 1.5.1: quanto porteresti a casa adesso, e con che punti.
if (m.stima) {
ultimaStima = m.stima;
for (var k = 0; k < perLaStima.length; k++) { try { perLaStima[k](m.stima); } catch (e) { /* niente */ } }
}
if (m.n && attese[m.n]) {
var a = attese[m.n]; delete attese[m.n];
if (m.errore) a.rifiuta(new Error(m.errore)); else a.risolvi(m.esito);
Expand Down Expand Up @@ -212,10 +236,12 @@
},

/**
* L'incasso (1.4.8): quello che il gioco ha diventa lire vere, meno la
* fetta di DaProd, fino al tetto della partita. `opzioni.fine` chiude la
* partita col premio della velocita' (Claw, Neon); `opzioni.chiudi` la
* chiude senza premio. Risponde con `preso`: quante lire togliersi.
* L'incasso: quello che il gioco ha diventa lire vere, meno la fetta di
* DaProd. Dalla 1.5.1 senza tetto, e **la sala chiede sempre conferma**
* dicendo tutto (quanto hai messo, quanto porti a casa, che il gioco
* ricomincia da capo): se chi gioca dice no, la promessa si rifiuta con
* «Annullato» e `togli` non si chiama. `opzioni.fine` vuol dire che il
* gioco e' stato finito (Claw, Neon). Ogni incasso chiude la partita.
*/
incassa: function (opzioni) {
manda();
Expand All @@ -225,13 +251,35 @@
// Claw e Neon ricominciano da capo a ogni incasso: la partita si chiude sempre.
var chiudi = Boolean(opzioni.chiudi || (cassa && cassa.chiudi));
return allaSala("incassa", { gioco: gioco, grezzo: grezzo, fine: fine, chiudi: chiudi }).then(function (r) {
if (!r || r.annullato) throw new Error("Annullato");
if (cassa && cassa.togli) { try { cassa.togli(r); } catch (e) { /* il gioco si arrangia */ } }
dettoNelGioco = -1;
setTimeout(raccontaNelGioco, 300);
return r;
});
},

/**
* ⚠ **Un potenziamento coi soldi veri** (1.5.1). La sala fa vedere
* l'avviso — quanto costa in lire e in euro, e da dove escono — e la
* promessa si risolve solo se chi gioca dice si' e le lire sono uscite
* davvero dal portafoglio. Se dice no, o non bastano, si rifiuta: il gioco
* non da' niente. Fuori dalla suite si rifiuta sempre.
*/
paga: function (lire, cosa) {
var n = Math.floor(Number(lire) || 0);
if (n <= 0) return Promise.reject(new Error("Quanto costa?"));
return allaSala("paga", { gioco: gioco, lire: n, cosa: String(cosa || "potenziamento") }).then(function (r) {
if (!r || r.annullato) throw new Error("Annullato");
return r;
});
},

/** L'ultima stima dell'incasso (1.5.1), o null. */
stima: function () { return spento ? null : ultimaStima; },
/** Chi vuole sapere quanto vale la partita adesso: arriva ogni volta che cambia. */
suStima: function (fn) { perLaStima.push(fn); if (ultimaStima) { try { fn(ultimaStima); } catch (e) { /* niente */ } } },

/** Lire in euro, scritte all'italiana: «€ 1,00». Il cambio e' quello del 2002. */
euro: function (lire) {
var e = (Number(lire) || 0) / 1936.27;
Expand Down
Loading
Loading