13. Vapen, magasin och ljud
Målet
Pistolen har åtta skott per magasin. Vi börjar med logiken, inte med en avancerad 3D-modell. Ett träffat monster använder samma skadelogik oavsett sort. Skottet använder en inspelad ljudeffekt. Öppna main.js och reglerna.
Tre värden som inte får blandas ihop
state.ammo är antalet skott kvar i det insatta magasinet. state.magazines är hela reservmagasin som kan användas senare. state.hasMagazine talar om ifall ett magasin alls sitter i pistolen. Vid start är det första magasinet insatt med åtta skott, men spelaren har inga reserver. Om du bara ändrar siffran på skärmen kommer skjutlogiken fortfarande använda det gamla värdet.
if (!state.hasMagazine || state.ammo <= 0) return;
state.ammo -= 1;
updateHud();
I den riktiga fire() finns också kontroll av om rundan pågår och en kort fördröjning mellan skott. Skottet skickar en stråle i siktriktningen. Väggar och stängda dörrar stoppar träffen före ett monster. Se kapitel 14 för hela kedjan.
Desktop
- Vänster musknapp skjuter.
Gkastar ut det aktuella magasinet.Rsätter i ett nytt från förrådet när ett finns.Eplockar upp magasin som ligger på banan. Ett fullständigt magasin ger åtta skott.
Quest
- Höger trigger skjuter. Tryck ned höger spak för att kasta ut magasinet.
- Plocka upp ett banmagasin med grip. När pistolen är utan magasin: för vänster hand till vänster höft och tryck grip för att ta ett reservmagasin; för det till pistolgreppet och tryck grip igen, eller låt det komma mycket nära så att det snäpper på plats. Om det inte fungerar: kontrollera först att HUD visar ett reservmagasin och att det gamla är utkastat.
- Pistolmodellen är fäst vid höger kontroll i denna första webbversion. Den kan inte byta hand ännu.
Ljud
Skottet är ett klipp från Gunshot Sounds, CC0. Bakgrundsslingan är Lost in a bad place, CC0. Monsterlätena skapas i Web Audio och panoreras åt den sida monstret finns; spelarens steg och hopp har enkla syntetiska ljud. SFX och Music går att slå av/på på startskärmen och är på som standard. Ljud spelas först efter en användarhandling enligt webbläsarens regler.
Testa
Skjut åtta gånger. Det nionde trycket ska inte avfyra något. Plocka upp ett magasin, ladda om och prova igen. Kontrollera att SFX av verkligen tystar skotten och att Music av stoppar musiken.
Gör själv
I din kopia: ändra RULES.magazineSize till 5 och testa om både startammunition och omladdning följer med. Om en UI-text fortfarande säger åtta är den hårdkodad och behöver uppdateras. Återställ sedan 8. Detta är ett bra exempel på varför regler bör ha en enda källa.