1+ import { runRandomEvent } from './eventRunner.js' ;
2+
13console . log ( "Checking if .master elements exist..." ) ;
24console . log ( document . querySelectorAll ( ".master" ) ) ;
35document . addEventListener ( "DOMContentLoaded" , ( ) => {
@@ -74,8 +76,8 @@ function populateServantDropdown(servantDataArray) {
7476 servantDataArray . forEach ( servant => {
7577 const option = document . createElement ( "option" ) ;
7678 // Extract a shortname; if you have a better key, replace servant.name here
77- const shortName = servant . name . split ( " " ) [ 0 ] ; // crude fallback: take first word like "Artoria"
78- option . value = shortName ; // store shortname for simulator matching
79+ // const shortName = servant.name.split(" ")[0]; // crude fallback: take first word like "Artoria"
80+ // option.value = shortName; // store shortname for simulator matching
7981 option . textContent = servant . name ; // full display name for user
8082 option . dataset . id = servant . id ; // store numeric ID if needed later
8183 dropdown . appendChild ( option ) ; // <-- fix here
@@ -163,9 +165,12 @@ function saveParticipantsAndStartSimulation() {
163165 let servantContainer = teamContainer . querySelector ( ".servant-selection" ) ;
164166
165167 let nameInput = masterContainer . querySelector ( ".master-name" ) ;
168+ let genderSelect = masterContainer . querySelector ( ".gender-select" ) ;
166169 let pictureEl = masterContainer . querySelector ( ".master-img" ) ;
167170
168171 let name = nameInput ? nameInput . value . trim ( ) || `Master ${ index + 1 } ` : `Master ${ index + 1 } ` ;
172+ let gender = genderSelect ? genderSelect . value : "nonbinary" ; // fallback to nonbinary if missing
173+ let pronouns = getPronouns ( gender ) ;
169174 let pictureUrl = pictureEl ? pictureEl . src : "" ;
170175
171176 let servantDropdown = servantContainer ? servantContainer . querySelector ( ".servant-select" ) : null ;
@@ -191,15 +196,29 @@ function saveParticipantsAndStartSimulation() {
191196 }
192197
193198 let masterData = {
199+ id : `master${ index + 1 } ` ,
194200 name : name ,
201+ gender : gender ,
202+ pronouns : pronouns ,
195203 picture : pictureUrl ,
196204 status : "alive" ,
197205 type : "master" ,
198206 servantId : servantId ,
199- servantName : servantName
207+
208+ } ;
209+
210+ let servantData = {
211+ id : servantId ,
212+ name : servantName ,
213+ type : "servant" ,
214+ status : "alive" ,
215+ masterId : masterData . id ,
216+ hasIndependentAction : servantHasIndependentAction ,
217+ image : servantImage
200218 } ;
201219
202220 participants . push ( masterData ) ;
221+ participants . push ( servantData ) ;
203222 } ) ;
204223
205224 console . log ( "Saved participants:" , participants ) ;
@@ -208,6 +227,15 @@ function saveParticipantsAndStartSimulation() {
208227 window . location . href = "simulation.html" ;
209228}
210229
230+ function getPronouns ( gender ) {
231+ if ( gender === "male" ) {
232+ return { subject : "he" , object : "him" , possessive : "his" } ;
233+ } else if ( gender === "female" ) {
234+ return { subject : "she" , object : "her" , possessive : "her" } ;
235+ } else {
236+ return { subject : "they" , object : "them" , possessive : "their" } ;
237+ }
238+ }
211239
212240//code to attach the above function to the button:
213241document . addEventListener ( "DOMContentLoaded" , function ( ) {
@@ -218,4 +246,66 @@ document.addEventListener("DOMContentLoaded", function () {
218246 } else {
219247 console . error ( "Start Simulation button not found!" ) ;
220248 }
221- } ) ;
249+ } ) ;
250+
251+ //the code to run random events follows...?
252+ let currentDay = 1 ;
253+ let pastEvents = [ ] ; // store event IDs
254+ let participants = JSON . parse ( localStorage . getItem ( "participants" ) ) || [ ] ;
255+
256+ function processEventTemplate ( template , master , servant ) {
257+ return template
258+ . replace ( / { m a s t e r .n a m e } / g, master . name )
259+ . replace ( / { m a s t e r .p r o n o u n s .s u b j e c t } / g, master . pronouns . subject )
260+ . replace ( / { m a s t e r .p r o n o u n s .o b j e c t } / g, master . pronouns . object )
261+ . replace ( / { m a s t e r .p r o n o u n s .p o s s e s s i v e } / g, master . pronouns . possessive )
262+ . replace ( / { s e r v a n t .n a m e } / g, servant ? servant . name : "no servant" ) ;
263+ }
264+
265+ function runDayEvents ( ) {
266+ const aliveMasters = participants . filter ( p => p . type === "master" && p . status === "alive" ) ;
267+ const aliveServants = participants . filter ( p => p . type === "servant" && p . status === "alive" ) ;
268+
269+ console . log ( `===== DAY ${ currentDay } =====` ) ;
270+
271+ aliveMasters . forEach ( master => {
272+ const servant = aliveServants . find ( s => s . id === master . servantId ) ;
273+
274+ const validEvents = events . filter ( event => {
275+ const validPool = event . valid ( participants , pastEvents ) ;
276+ return validPool . includes ( master ) ;
277+ } ) ;
278+
279+ if ( validEvents . length === 0 ) {
280+ console . log ( `No valid events for ${ master . name } ` ) ;
281+ return ;
282+ }
283+
284+ const selectedEvent = validEvents [ Math . floor ( Math . random ( ) * validEvents . length ) ] ;
285+
286+ // Apply effects
287+ selectedEvent . effects ( master , servant , participants ) ;
288+
289+ // Save event id
290+ pastEvents . push ( selectedEvent . id ) ;
291+
292+ // Display event text
293+ const eventText = processEventTemplate ( selectedEvent . description , master , servant ) ;
294+ console . log ( eventText ) ;
295+
296+ const logDiv = document . getElementById ( "event-log" ) ;
297+ logDiv . innerHTML += `<p>Day ${ currentDay } : ${ eventText } </p>` ;
298+ } ) ;
299+
300+ currentDay ++ ;
301+ }
302+
303+ // Run day 1 immediately after load
304+ window . onload = ( ) => {
305+ runDayEvents ( ) ; // runs once for each master
306+ } ;
307+
308+ // Button for next days
309+ document . getElementById ( "next-day" ) . addEventListener ( "click" , ( ) => {
310+ runDayEvents ( ) ; // runs once for each alive master
311+ } ) ;
0 commit comments