inital commit of game events
parent
df6b24fc99
commit
abcce0985c
|
@ -0,0 +1,126 @@
|
||||||
|
import GameState from "./gameState";
|
||||||
|
|
||||||
|
class GameEvents {
|
||||||
|
private events: OregonEvent[];
|
||||||
|
private totalThreshold: number;
|
||||||
|
constructor() {
|
||||||
|
// Initialize the events and their thresholds.
|
||||||
|
this.events = [
|
||||||
|
{
|
||||||
|
name: "Wagon Breakdown",
|
||||||
|
threshold: 10, // Probability weight
|
||||||
|
action: (gameState) => {
|
||||||
|
gameState.totalMileageWholeTrip -= 15;
|
||||||
|
gameState.amountSpentOnMiscellaneousSupplies -= 8;
|
||||||
|
return "Wagon breaks down. Lose time and supplies fixing it.";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Ox Injures Leg",
|
||||||
|
threshold: 15,
|
||||||
|
action: (gameState) => {
|
||||||
|
gameState.totalMileageWholeTrip -= 25;
|
||||||
|
gameState.amountSpentOnAnimals -= 20;
|
||||||
|
return "Ox injures leg. Slows you down rest of the trip.";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Daughter Breaks Arm",
|
||||||
|
threshold: 20,
|
||||||
|
action: (gameState) => {
|
||||||
|
gameState.totalMileageWholeTrip -= 5 + Math.floor(Math.random() * 4);
|
||||||
|
gameState.amountSpentOnMiscellaneousSupplies -= 2 + Math.floor(Math.random() * 3);
|
||||||
|
return "Bad luck--your daughter broke her arm. You had to stop and use supplies to make a sling.";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Ox Wanders Off",
|
||||||
|
threshold: 25,
|
||||||
|
action: (gameState) => {
|
||||||
|
gameState.totalMileageWholeTrip -= 17;
|
||||||
|
return "Ox wanders off--spend time looking for it.";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Son Gets Lost",
|
||||||
|
threshold: 30,
|
||||||
|
action: (gameState) => {
|
||||||
|
gameState.totalMileageWholeTrip -= 10;
|
||||||
|
return "Your son gets lost---spend half the day looking for him.";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Unsafe Water",
|
||||||
|
threshold: 35,
|
||||||
|
action: (gameState) => {
|
||||||
|
gameState.totalMileageWholeTrip -= Math.floor(Math.random() * 10) + 2;
|
||||||
|
return "Unsafe water--lose time looking for clean spring.";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Heavy Rains",
|
||||||
|
threshold: 40,
|
||||||
|
action: (gameState) => {
|
||||||
|
gameState.amountSpentOnFood -= 10;
|
||||||
|
gameState.amountSpentOnMiscellaneousSupplies -= 15;
|
||||||
|
gameState.totalMileageWholeTrip -= Math.floor(Math.random() * 10) + 5;
|
||||||
|
return "Heavy rains---time and supplies lost.";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Fire in Your Wagon",
|
||||||
|
threshold: 45,
|
||||||
|
action: (gameState) => {
|
||||||
|
gameState.amountSpentOnFood -= 40;
|
||||||
|
gameState.amountSpentOnAmmunition -= 400;
|
||||||
|
gameState.amountSpentOnMiscellaneousSupplies -= Math.floor(Math.random() * 8) + 3;
|
||||||
|
gameState.totalMileageWholeTrip -= 15;
|
||||||
|
return "There was a fire in your wagon—food and supplies damaged!";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Lose Your Way in Heavy Fog",
|
||||||
|
threshold: 50,
|
||||||
|
action: (gameState) => {
|
||||||
|
gameState.totalMileageWholeTrip -= 10 + Math.floor(Math.random() * 5);
|
||||||
|
return "Lose your way in heavy fog—time is lost.";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Wagon Swamped Fording River",
|
||||||
|
threshold: 55,
|
||||||
|
action: (gameState) => {
|
||||||
|
gameState.amountSpentOnFood -= 30;
|
||||||
|
gameState.amountSpentOnClothing -= 20;
|
||||||
|
gameState.totalMileageWholeTrip -= 20 + Math.floor(Math.random() * 20);
|
||||||
|
return "Wagon gets swamped fording river—lose food and clothes.";
|
||||||
|
},
|
||||||
|
}
|
||||||
|
// Add more events here...
|
||||||
|
];
|
||||||
|
|
||||||
|
this.totalThreshold = this.events.reduce((acc, event) => acc + event.threshold, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
generateEvent(gameState: GameState): string {
|
||||||
|
const randomEventNumber = Math.random() * this.totalThreshold;
|
||||||
|
let cumulativeThreshold = 0;
|
||||||
|
|
||||||
|
for (let event of this.events) {
|
||||||
|
cumulativeThreshold += event.threshold;
|
||||||
|
if (randomEventNumber < cumulativeThreshold) {
|
||||||
|
console.log(`Event triggered: ${event.name}`);
|
||||||
|
return event.action(gameState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default GameEvents;
|
||||||
|
|
||||||
|
interface OregonEvent {
|
||||||
|
name: string,
|
||||||
|
threshold: number,
|
||||||
|
action: (gameState: GameState) => string
|
||||||
|
}
|
Loading…
Reference in New Issue