diff --git a/xtrn/dicewarz/ai.js b/xtrn/dicewarz/ai.js index 38afec98c183cd483e43d74411cd8af4c6b440c5..62b02cd362c92ba3d9d6d567dbd216ac76e51d09 100644 --- a/xtrn/dicewarz/ai.js +++ b/xtrn/dicewarz/ai.js @@ -122,8 +122,7 @@ function WildAndCrazyAICheck(gameNumber, playerNumber, base, target) var rand=random(100); if(g.grid[base].dice>g.grid[target].dice) return(true); - if(g.grid[base].dice==g.grid[target].dice) - { + if(g.grid[base].dice==g.grid[target].dice) { if(computerPlayer.territories.length>g.grid.length/6 || computerPlayer.reserve>=20) return(true); else { @@ -131,8 +130,7 @@ function WildAndCrazyAICheck(gameNumber, playerNumber, base, target) return(true); } } - if(rand>50 && g.grid[base].dice==(g.grid[target].dice-1)) - { + if(rand>50 && g.grid[base].dice==(g.grid[target].dice-1)) { if(computerPlayer.territories.length>g.grid.length/6) return(true); } diff --git a/xtrn/dicewarz/dice.ini b/xtrn/dicewarz/dice.ini index 77b19025d8efbffdadc77135ab9f36a9fa7de0bd..97233627e1239b33fa72f2b9cd37473eec3fee27 100644 --- a/xtrn/dicewarz/dice.ini +++ b/xtrn/dicewarz/dice.ini @@ -1,9 +1,9 @@ enablelogging= false -pointstowin= 100 +pointstowin= 200 minscore= -2 maxgames= 100 -maxperplayer= 40 -minplayers= 3 +maxperplayer= 30 +minplayers= 4 maxplayers= 7 maxdice= 8 killpointssolo= 1 @@ -12,7 +12,7 @@ winpointssolo= 2 winpointsmulti= 4 deathpointssolo= -3 deathpointsmulti= -2 -forfeitpoints= -1 +forfeitpoints= -2 skipdays= 3 abortdays= 10 keepgamedata= 2 diff --git a/xtrn/dicewarz/dice.js b/xtrn/dicewarz/dice.js index 2da55e6a617e940379d952614513919800c882c5..73ef0b713ff7e9ff5e0dbce5ef021a8aae1f2d49 100644 --- a/xtrn/dicewarz/dice.js +++ b/xtrn/dicewarz/dice.js @@ -7,60 +7,62 @@ ******************************************* */ - load("sbbsdefs.js"); - load("graphic.js"); - var game_dir; - try { barfitty.barf(barf); } catch(e) { game_dir = e.fileName; } - game_dir = game_dir.replace(/[^\/\\]*$/,''); - - load(game_dir + "diceroll.js"); - load(game_dir + "lock.js"); - load(game_dir + "maps.js"); - load(game_dir + "territory.js"); - load(game_dir + "menu.js"); - load(game_dir + "player.js"); - load(game_dir + "display.js"); - load(game_dir + "ai.js"); - var activeGame=""; - +load("sbbsdefs.js"); +load("graphic.js"); +var root = js.exec_dir; + +load(root + "diceroll.js"); +load(root + "lock.js"); +load(root + "maps.js"); +load(root + "territory.js"); +load(root + "menu.js"); +load(root + "player.js"); +load(root + "display.js"); +load(root + "ai.js"); + +var activeGame=""; + //######################### INITIALIZE PROGRAM VARIABLES ######################### - const root= "game"; - const scorefile= "rankings.dat"; - const settingsfile= "dice.ini" - const halloffame= "hof.dat"; - const instructions= "dice.doc"; - const bColors= [BG_BLUE, BG_CYAN, BG_RED, BG_GREEN, BG_BROWN, BG_MAGENTA, BG_LIGHTGRAY]; //MAP BACKGROUND COLORS - const bfColors= [BLUE, CYAN, RED, GREEN, BROWN, MAGENTA, LIGHTGRAY]; //MAP BACKGROUND COLORS (FOREGROUND CHARS) - const fColors= ["\1h\1w", "\1h\1c", "\1h\1r", "\1h\1g", "\1h\1y", "\1h\1m", "\1k"]; //MAP FOREGROUND COLORS - const border_color= "\1n\1k\1h"; +const scorefile= "rankings.dat"; +const settingsfile= "dice.ini" +const halloffame= "hof.dat"; +const instructions= "dice.doc"; +//MAP BACKGROUND COLORS +const bColors= [BG_BLUE, BG_CYAN, BG_RED, BG_GREEN, BG_BROWN, BG_MAGENTA, BG_LIGHTGRAY]; +//MAP BACKGROUND COLORS (FOREGROUND CHARS) +const bfColors= [BLUE, CYAN, RED, GREEN, BROWN, MAGENTA, LIGHTGRAY]; +//MAP FOREGROUND COLORS +const fColors= ["\1h\1w", "\1h\1c", "\1h\1r", "\1h\1g", "\1h\1y", "\1h\1m", "\1k"]; +const border_color= "\1n\1k\1h"; //######################### DO NOT CHANGE THIS SECTION ########################## - var userFileName=game_dir + user.alias + ".usr"; - var userFile=new File(userFileName); - userFile.open('a'); - userFile.close(); +var userFileName=root + user.alias + ".usr"; +var userFile=new File(userFileName); +userFile.open('a'); +userFile.close(); - const daySeconds= 86400; - const startRow= 4; - const startColumn= 3; - const menuRow= 1; - const menuColumn= 50; - const columns= 9; - const rows= 9; - const blackbg= console.ansi(ANSI_NORMAL); - - //TODO: FIX SCORING SYSTEM... BECAUSE RIGHT NOW IT SUCKS - var scores= []; - var messages= []; //MESSAGES QUEUED FOR DISPLAY UPON RELOADING MAIN MENU - var games= new GameStatusInfo(); - var settings= new GameSettings(); - var dice= loadDice(); - var oldpass= console.ctrlkey_passthru; - - console.ctrlkey_passthru="+ACGKLOPQRTUVWXYZ_"; - bbs.sys_status|=SS_MOFF; +const daySeconds= 86400; +const startRow= 4; +const startColumn= 3; +const menuRow= 1; +const menuColumn= 50; +const columns= 9; +const rows= 9; +const blackbg= console.ansi(ANSI_NORMAL); + +//TODO: FIX SCORING SYSTEM... BECAUSE RIGHT NOW IT SUCKS +var scores= []; +var messages= []; //MESSAGES QUEUED FOR DISPLAY UPON RELOADING MAIN MENU +var games= new GameStatusInfo(); +var settings= new GameSettings(); +var dice= loadDice(); +var oldpass= console.ctrlkey_passthru; + +js.on_exit("file_remove(userFileName);"); +console.ctrlkey_passthru="+ACGKLOPQRTUVWXYZ_"; +bbs.sys_status|=SS_MOFF; //########################## MAIN FUNCTIONS ################################### function scanProximity(location) @@ -126,8 +128,9 @@ function CountSparseArray(data) function viewInstructions() { console.clear(); - console.printfile(game_dir + instructions); - if(!(user.settings & USER_PAUSE)) console.pause(); + console.printfile(root + instructions); + if(!(user.settings & USER_PAUSE)) + console.pause(); console.aborted=false; } function viewRankings() @@ -254,18 +257,25 @@ function deliverMessage(nextTurnPlayer,gameNumber) } function deliverKillMessage(killer,eliminated,gameNumber) { + if(eliminated < 0) + return; var message="\1r\1h" + killer + " has eliminated you in \1yDice\1r-\1yWarz\1r game #\1y" + gameNumber + "\1r!\r\n\r\n"; - if(!storeMessage(eliminated,message)) system.put_telegram(eliminated, message); + if(!storeMessage(eliminated,message)) + system.put_telegram(eliminated, message); } -function deliverSkipMessage(unum,gameNumber) +function deliverForfeitMessage(unum,gameNumber) { - var message="\1r\1hYour turn has been skipped in \1yDice-Warz\1r game #" + gameNumber + "\r\n\r\n"; - if(!storeMessage(unum,message)) system.put_telegram(unum, message); + if(unum < 0) + return; + var message="\1r\1hYou have forfeited \1yDice-Warz\1r game #" + gameNumber + " due to inactivity\r\n\r\n"; + if(!storeMessage(unum,message)) + system.put_telegram(unum, message); } function storeMessage(unum,msg) { - var ufname=game_dir + system.username(unum) + ".usr"; - if(!file_exists(ufname)) return false; + var ufname=root + system.username(unum) + ".usr"; + if(!file_exists(ufname)) + return false; else { var user_online=false; for(n=0;n<system.node_list.length && !user_online;n++) { @@ -283,12 +293,11 @@ function storeMessage(unum,msg) } } - //########################GAME MENU FUNCTIONS################################ function splashStart() { console.clear(); - var splash_filename=game_dir + "dicewarz.bin"; + var splash_filename=root + "dicewarz.bin"; var splash_size=file_size(splash_filename); splash_size/=2; splash_size/=80; @@ -306,8 +315,9 @@ function splashExit() bbs.sys_status&=~SS_MOFF; file_remove(userFileName); console.clear(); - var splash_filename=game_dir + "exit.bin"; - if(!file_exists(splash_filename)) exit(); + var splash_filename=root + "exit.bin"; + if(!file_exists(splash_filename)) + exit(); var splash_size=file_size(splash_filename); splash_size/=2; splash_size/=80; @@ -331,8 +341,7 @@ function gameMenu() gMenu.add(gmenu_items); games.init(); - while(1) - { + while(1) { //LOOPING MAIN MENU, UPDATES GAME STATUS INFO UPON REFRESH //TODO: make recently completed games disappear from "your turn" list upon refresh @@ -365,8 +374,7 @@ function gameMenu() wipeCursor("right"); var cmd=console.getkey(K_NOSPIN|K_NOECHO|K_NOCRLF|K_UPPER); - switch(cmd) - { + switch(cmd) { case "R": viewRankings(); break; @@ -396,30 +404,26 @@ function chooseGame() { console.gotoxy(x,y); console.cleartoeol(); - if(!games.gameData.length) - { + if(!games.gameData.length) { putMessage("\1r\1hThere are currently no games.",x,y); break; } console.putmsg("\1n\1gEnter game number or [\1hQ\1n\1g]uit\1h: "); game_num=console.getkeys("Q",settings.maxGames); - if(game_num=="Q") return false; - if(games.gameData[game_num]) - { + if(game_num=="Q") + return false; + if(games.gameData[game_num]) { var game_data=games.gameData[game_num]; var num=game_num; - if(game_num<10) num="0" + num; - gamefile=root + num; + if(game_num<10) + num="0" + num; + gamefile="game" + num; - if(Locked(gamefile)) + if(Locked(gamefile)) putMessage("\1r\1hThat game is in use by another node.",x,y); - else - { - if(game_data.singlePlayer) - { - if(games.gameData[game_num].users[user.number]>=0); - else - { + else { + if(game_data.singlePlayer) { + if(!(games.gameData[game_num].users[user.number]>=0)) { putMessage("\1r\1hGame #" + game_num + " is private.",x,y); continue; } @@ -427,36 +431,38 @@ function chooseGame() return game_num; } } - else putMessage("\1r\1hNo Such Game!",x,y); + else + putMessage("\1r\1hNo Such Game!",x,y); } return false; } function processSelection(gameNumber) { var num=gameNumber; - if(gameNumber<10) num="0" + num; - var gamefile=root + num; + if(gameNumber<10) + num="0" + num; + var gamefile="game" + num; Lock(gamefile); var g=games.gameData[gameNumber]; var fileName=g.fileName; var lastModified=file_date(fileName); - if(lastModified>g.lastModified) games.gameData[gameNumber]=games.loadGame(fileName,gameNumber,lastModified); + if(lastModified>g.lastModified) + games.gameData[gameNumber]=games.loadGame(fileName,gameNumber,lastModified); if(g.status>=0) - { playGame(gameNumber); - } - else - { + else { viewGameInfo(gameNumber); - if(g.users[user.number]>=0) - { + if(g.users[user.number]>=0) { var gamePlayer=g.users[user.number]; - if(g.fixedPlayers) askRemove(gameNumber,gamePlayer); - else changeVote(gameNumber,user.number); + if(g.fixedPlayers) + askRemove(gameNumber,gamePlayer); + else + changeVote(gameNumber,user.number); } - else joinGame(gameNumber); + else + joinGame(gameNumber); } Unlock(gamefile); games.filterData(); @@ -469,19 +475,16 @@ function changeVote(gameNumber,userNumber) var g=games.gameData[gameNumber]; var gamePlayer=g.users[userNumber]; - if(console.noyes("\1n\1gChange your vote?")) - { + if(console.noyes("\1n\1gChange your vote?")) { console.gotoxy(30,20); console.cleartoeol(); askRemove(gameNumber,gamePlayer); } - else - { + else { var vote=g.players[gamePlayer].vote; if(vote==1) g.players[gamePlayer].vote=0; else g.players[gamePlayer].vote=1; - if(g.tallyVotes()) - { + if(g.tallyVotes()) { g.maxPlayers=g.countPlayers(); startGame(gameNumber); } @@ -491,15 +494,12 @@ function changeVote(gameNumber,userNumber) function askRemove(gameNumber,playerNumber) { g=games.gameData[gameNumber]; - if(console.noyes("\1n\1gRemove yourself from this game?")); - else - { + if(!(console.noyes("\1n\1gRemove yourself from this game?"))) { g.removePlayer(playerNumber); if(g.countHumanPlayers()==0) - { file_remove(g.fileName); - } - else games.storeGame(gameNumber); + else + games.storeGame(gameNumber); } } function viewGameInfo(gameNumber) @@ -516,14 +516,11 @@ function viewGameInfo(gameNumber) console.putmsg("\1n\1g Player names hidden: \1h" + g.hiddenNames + "\r\n"); console.putmsg("\1n\1g Players In This Game:\r\n"); - for(playerNumber=0;playerNumber<g.players.length;playerNumber++) - { + for(playerNumber=0;playerNumber<g.players.length;playerNumber++) { var player=g.players[playerNumber]; var name=getUserName(player,playerNumber); if(g.hiddenNames && name!=user.alias) - { name="Player " + (playerNumber+1); - } console.putmsg("\1g\1h " + name); if(player.vote>=0) { if(g.maxPlayers>g.minPlayers) @@ -553,7 +550,7 @@ function startGame(gameNumber) queueMessage("\1r\1hGame " + gameNumber + " initialized!"); games.gameData[gameNumber].notify(); /* Set up computer players */ - var aifile=new File(game_dir + "ai.ini"); + var aifile=new File(root + "ai.ini"); aifile.open("r"); var possibleplayers=aifile.iniGetSections(); for(i=0; i<g.players.length; i++) { @@ -580,23 +577,17 @@ function startGame(gameNumber) function joinGame(gameNumber) { var numplayergames=games.yourGames.length-games.eliminated.length; - if(numplayergames>=settings.maxPerPlayer) - { + if(numplayergames>=settings.maxPerPlayer) { console.pause(); return; } var vote=-1; g=games.gameData[gameNumber]; - if(console.noyes("\1n\1gjoin this game?")); - else - { + if(!(console.noyes("\1n\1gjoin this game?"))) { if(g.maxPlayers>g.minPlayers && g.players.length+1<g.maxPlayers) vote=getVote(); g.addPlayer(user.number,vote); - if(g.players.length>=g.minPlayers) - { - if(g.players.length==g.maxPlayers || - g.tallyVotes()) - { + if(g.players.length>=g.minPlayers) { + if(g.players.length==g.maxPlayers || g.tallyVotes()) { g.maxPlayers=g.players.length; startGame(gameNumber); } @@ -607,8 +598,7 @@ function joinGame(gameNumber) function createNewGame() { var numplayergames=games.yourGames.length-games.eliminated.length; - if(numplayergames>=settings.maxPerPlayer) - { + if(numplayergames>=settings.maxPerPlayer) { queueMessage("\1r\1hYou can only be active in " + settings.maxPerPlayer + " games at a time"); return false; } @@ -625,18 +615,17 @@ function createNewGame() var y=19; console.gotoxy(x,y); console.cleartoeol(); - if(console.yesno("\1n\1gBegin a new game?")) - { + if(console.yesno("\1n\1gBegin a new game?")) { clearArea(3,1,14); clearArea(19,30,5); var gameNumber=getNextGameNumber(); var gnum=gameNumber; - if(gameNumber<10) gnum="0" + gnum; - var gamefile=root + gnum; + if(gameNumber<10) + gnum="0" + gnum; + var gamefile="game" + gnum; Lock(gamefile); } - else - { + else { console.gotoxy(x,y); console.cleartoeol(); return false; @@ -645,109 +634,112 @@ function createNewGame() console.gotoxy(x,y); console.cleartoeol(); y++; - if(!console.noyes("\1n\1gSingle player game?")) - { + if(!console.noyes("\1n\1gSingle player game?")) { singlePlayer=true; - while(1) - { + while(1) { console.gotoxy(x,y); console.cleartoeol(); - console.putmsg("\1n\1gEnter number of opponents [\1h" + (settings.minPlayers-1) + "\1n\1g-\1h" + (settings.maxPlayers-1) + "\1n\1g] or [\1hQ\1n\1g]uit: "); + console.putmsg( + "\1n\1gEnter number of opponents [\1h" + + (settings.minPlayers-1) + "\1n\1g-\1h" + + (settings.maxPlayers-1) + "\1n\1g] or [\1hQ\1n\1g]uit: " + ); var num=console.getkeys("Q",settings.maxPlayers-1); - if(num>=settings.minPlayers-1 && num<settings.maxPlayers) - { + if(num>=settings.minPlayers-1 && num<settings.maxPlayers) { minNumPlayers=num+1; maxNumPlayers=num+1; numComputerPlayers=num; y++; break; } - else if(num=="Q") return false; - else putMessage("\1r\1h Please enter a number within the given range.",x,y); + else if(num=="Q") + return false; + else + putMessage("\1r\1h Please enter a number within the given range.",x,y); } } - else - { + else { console.gotoxy(x,y); y++; - if(!console.noyes("\1n\1gKeep player names hidden?")) hiddenNames=true; - while(1) - { + if(!console.noyes("\1n\1gKeep player names hidden?")) + hiddenNames=true; + while(1) { console.gotoxy(x,y); console.cleartoeol(); console.putmsg("\1n\1gEnter minimum number of players [\1h" + settings.minPlayers + "\1n\1g-\1h" + settings.maxPlayers + "\1n\1g] or [\1hQ\1n\1g]uit: "); var num=console.getkeys("Q",settings.maxPlayers); - if(num>=settings.minPlayers && num<=settings.maxPlayers) - { + if(num>=settings.minPlayers && num<=settings.maxPlayers) { minNumPlayers=num; y++; break; } - else if(num=="Q") return false; - else putMessage("\1r\1h Please enter a number within the given range.",x,y); + else if(num=="Q") + return false; + else + putMessage("\1r\1h Please enter a number within the given range.",x,y); } if(minNumPlayers<settings.maxPlayers) { - while(1) - { + while(1) { console.gotoxy(x,y); console.cleartoeol(); console.putmsg("\1n\1gEnter maximum number of players [\1h" + minNumPlayers + "\1n\1g-\1h" + settings.maxPlayers + "\1n\1g] or [\1hQ\1n\1g]uit: "); var num=console.getkeys("Q",settings.maxPlayers); - if(num>=minNumPlayers && num<=settings.maxPlayers) - { + if(num>=minNumPlayers && num<=settings.maxPlayers) { maxNumPlayers=num; y++; break; } - else if(num=="Q") return false; - else putMessage("\1r\1h Please enter a number within the given range.",x,y); + else if(num=="Q") + return false; + else + putMessage("\1r\1h Please enter a number within the given range.",x,y); } } - else fixedPlayers=true; - while(1) - { + else + fixedPlayers=true; + while(1) { console.gotoxy(x,y); console.cleartoeol(); - if(console.noyes("\1n\1gInclude computer players?")) break; + if(console.noyes("\1n\1gInclude computer players?")) + break; console.gotoxy(x,y); console.cleartoeol(); console.putmsg("\1n\1gHow many? [\1h1\1n\1g-\1h" + (maxNumPlayers-1) + "\1n\1g] or [\1hQ\1n\1g]uit: "); cnum=console.getkeys("Q",maxNumPlayers-1); - if(cnum<=(maxNumPlayers-1) && cnum>0) - { + if(cnum<=(maxNumPlayers-1) && cnum>0) { numComputerPlayers=cnum; break; } - else if(cnum=="Q") return false; - else putMessage("\1r\1h Please enter a number within the given range.",x,y); + else if(cnum=="Q") + return false; + else + putMessage("\1r\1h Please enter a number within the given range.",x,y); } } games.gameData[gameNumber]=new NewGame(minNumPlayers,maxNumPlayers,gameNumber); games.gameData[gameNumber].fileName=getFileName(gameNumber); for(cp=0;cp<numComputerPlayers;cp++) - { games.gameData[gameNumber].addPlayer(-1, 1); //NO USER NUMBER, NO VOTE - } - if(!singlePlayer) - { - if(hiddenNames) games.gameData[gameNumber].hiddenNames=true; - if(fixedPlayers) games.gameData[gameNumber].fixedPlayers=true; - else - { + if(!singlePlayer) { + if(hiddenNames) + games.gameData[gameNumber].hiddenNames=true; + if(fixedPlayers) + games.gameData[gameNumber].fixedPlayers=true; + else { console.crlf(); vote=getVote(); } } games.gameData[gameNumber].addPlayer(user.number, vote); - if(singlePlayer) - { + if(singlePlayer) { games.gameData[gameNumber].singlePlayer=true; startGame(gameNumber); games.singleGames.push(gameNumber); games.yourGames.push(gameNumber); games.yourTurn.push(gameNumber); } - else games.notFull.push(gameNumber); + else + games.notFull.push(gameNumber); games.storeGame(gameNumber); queueMessage("\1r\1hGame " + gameNumber + " Created!"); @@ -757,9 +749,10 @@ function createNewGame() function getFileName(gameNumber) { var num=gameNumber; - if(gameNumber<10) num="0" + gameNumber; - var gamefile=root + num; - return (game_dir + gamefile + ".dat"); + if(gameNumber<10) + num="0" + gameNumber; + var gamefile="game" + num; + return (root + gamefile + ".dat"); } function getVote() { @@ -767,9 +760,7 @@ function getVote() console.putmsg("\1n\1gDo you wish to start the game immediately or wait for more players?"); console.crlf(); if(console.yesno("\1g\1hYes to start, No to wait")) - { vote = 1; - } return vote; } function getUserName(playerData,playerNumber) @@ -780,6 +771,7 @@ function getUserName(playerData,playerNumber) return(playerData.AI.name); return("Computer " + (playerNumber+1)); } + //###########################GAMEPLAY FUNCTIONS############################# function selectTile(gameNumber,playerNumber,attackPosition,startPosition) { @@ -955,23 +947,23 @@ function forfeit(gameNumber,playerNumber) var g=games.gameData[gameNumber]; var p=g.players[playerNumber]; - scores[p.user].losses+=1; - scores[p.user].score+=settings.forfeitPoints; + if(p.user > 0) { + Log("forfeiting " + system.username(g.players[playerNumber].user) + " in game " + gm.gameNumber); + scores[p.user].losses+=1; + scores[p.user].score+=settings.forfeitPoints; + } + else { + Log("forfeiting " + g.players[playerNumber].AI.name + " in game " + gameNumber); + } if(g.singlePlayer) - { file_remove(g.fileName); - } - else - { + else { var activePlayers=g.countActivePlayers(); - if(activePlayers.length==2) - { + if(activePlayers.length==2) { g.status=0; - for(player in activePlayers) - { + for(player in activePlayers) { var ply=activePlayers[player]; - if(g.players[ply].user!=p.user) - { + if(g.players[ply].user!=p.user) { g.winner=g.players[ply].user; if(g.winner>=0) { scores[g.winner].score+=settings.winPointsMulti; @@ -981,8 +973,7 @@ function forfeit(gameNumber,playerNumber) } } } - else - { + else { delete g.users[p.user]; g.players[playerNumber].AI.name=system.username(p.user)+" AI"; g.players[playerNumber].user=-1; @@ -991,6 +982,7 @@ function forfeit(gameNumber,playerNumber) } g.displayPlayers(); games.storeRankings(); + return true; } //MAIN GAMEPLAY FUNCTION function playGame(gameNumber) @@ -1012,36 +1004,28 @@ function playGame(gameNumber) pMenu.disable(["A","E","T","F"]); clearArea(16,menuColumn,9); - while(1) - { - if(g.users[user.number]>=0) - { + while(1) { + if(g.users[user.number]>=0) { userInGame=true; currentPlayer=g.users[user.number]; } - else - { + else { currentPlayer=-1; userInGame=false; } var turn=g.turnOrder[g.nextTurn]; - while(g.players[turn].user<0 && userInGame && g.status==1) - { + while(g.players[turn].user<0 && userInGame && g.status==1) { var name=g.players[turn].AI.name; - if(g.hiddenNames) - { + if(g.hiddenNames) { name="Player " + (parseInt(turn,10)+1); } - //////////////////////////////////// - clearLine(1,48); - console.gotoxy(2,1); - console.putmsg("\1r\1hPlease wait. " + name + " taking turn."); - mswait(750); - ///////////////////////////////////// + clearLine(1,48); + console.gotoxy(2,1); + console.putmsg("\1r\1hPlease wait. " + name + " taking turn."); + mswait(750); g.players[turn].AI.turns=0; g.players[turn].AI.moves=0; - while(g.canAttack(turn)) - { + while(g.canAttack(turn)) { if(!takeTurnAI(gameNumber,turn)) break; } @@ -1050,34 +1034,27 @@ function playGame(gameNumber) g.displayPlayers(); turn=g.turnOrder[g.nextTurn]; } - if(!g.takingTurn) - { + if(!g.takingTurn) { clearArea(16,50,8); console.gotoxy(51,16); console.putmsg("\1r\1hGame \1n\1r#\1h" + gameNumber); - if(g.status==0) - { + if(g.status==0) { pMenu.disable(["A","E","T","F"]); pMenu.enable(["Q"]); showWinner(g); } else if(turn==currentPlayer) - { pMenu.enable("T"); - } - else - { + else { var name=getUserName(g.players[turn],turn); - if(g.hiddenNames) - { + if(g.hiddenNames) { name="Player " + (parseInt(turn,10)+1); } console.gotoxy(51,18); console.putmsg("\1r\1hIt is " + name + "'s turn"); var daysOld=g.findDaysOld(); var hoursOld=parseInt(daysOld*24,10); - if(daysOld>0) - { + if(daysOld>0) { console.gotoxy(51,19); console.putmsg("\1r\1hLast turn taken " + hoursOld + " hours ago"); } @@ -1086,18 +1063,14 @@ function playGame(gameNumber) pMenu.displayHorizontal(); var cmd=console.getkey(K_NOECHO|K_NOCRLF|K_UPPER); wipeCursor("right"); - if(pMenu.items[cmd] && pMenu.items[cmd].enabled) - { - switch(cmd) - { + if(pMenu.items[cmd] && pMenu.items[cmd].enabled) { + switch(cmd) { case "T": pMenu.enable(["F"]); pMenu.disable(["Q","T"]); g.takingTurn=true; if(g.canAttack(currentPlayer)) - { pMenu.enable("A"); - } pMenu.enable("E"); continue; case "F": @@ -1112,9 +1085,11 @@ function playGame(gameNumber) g.displayPlayers(); break; case "A": - if(!attack(gameNumber,currentPlayer)) continue; + if(!attack(gameNumber,currentPlayer)) + continue; g.displayPlayers(); - if(!g.canAttack(currentPlayer)) pMenu.disable(["A"]); + if(!g.canAttack(currentPlayer)) + pMenu.disable(["A"]); break; case "E": pMenu.disable(["A","E","F"]); @@ -1141,14 +1116,21 @@ function takeTurnAI(gameNumber,playerNumber) g=games.gameData[gameNumber]; computerPlayer=g.players[playerNumber]; targets=[]; + + /* if we are down to two players */ + if(g.countActivePlayers().length == 2) { + /* if this ai occupies less than a quarter of the map, forfeit the game */ + if((computerPlayer.countTerritory() / g.mapSize) < (0.25)) { + Log("computer player forfeiting game " + gameNumber); + forfeit(gameNumber,playerNumber); + } + } /* For each owned territory */ - for(territory in computerPlayer.territories) - { + for(territory in computerPlayer.territories) { base=computerPlayer.territories[territory]; /* If we have enough to attack */ - if(g.grid[base].dice>1) - { + if(g.grid[base].dice>1) { /* Find places we can attack */ attackOptions=g.canAttack(playerNumber,base,computerPlayer,g); if(attackOptions!==false) { @@ -1156,8 +1138,7 @@ function takeTurnAI(gameNumber,playerNumber) /* Randomize the order to check in */ attackOptions.sort(RandomSort); - for(option in attackOptions) - { + for(option in attackOptions) { target=attackOptions[option]; /* Check if this is an acceptable attack */ if(AICheckFunctions[computerPlayer.AI.check](gameNumber, playerNumber, base, target)) @@ -1177,8 +1158,7 @@ function takeTurnAI(gameNumber,playerNumber) if(attackQuantity < 1) return false; targets.sort(AISortFunctions[computerPlayer.AI.sort]); - for(attackNum=0;attackNum<attackQuantity;attackNum++) - { + for(attackNum=0;attackNum<attackQuantity;attackNum++) { attackFrom=g.grid[targets[attackNum].base]; attackTo=g.grid[targets[attackNum].target]; if(attackFrom.dice>1 && attackTo.player!=playerNumber) { @@ -1189,6 +1169,7 @@ function takeTurnAI(gameNumber,playerNumber) computerPlayer.AI.turns++; return true; } + //#######################MAIN GAME CLASS################################### function GameSettings() { @@ -1214,8 +1195,9 @@ function GameSettings() this.load=function() { - var sfile=new File(game_dir + settingsfile); - if(!file_exists(sfile.name)) return; + var sfile=new File(root + settingsfile); + if(!file_exists(sfile.name)) + return; sfile.open('r',true); this.logEnabled= sfile.iniGetValue(null,"enablelogging"); @@ -1257,14 +1239,12 @@ function GameStatusInfo() this.storeRankings=function() { Log("storing rankings"); - var sfilename=game_dir+scorefile; + var sfilename=root+scorefile; var sfile=new File(sfilename); - if(!Locked(scorefile,true)) - { + if(!Locked(scorefile,true)) { Lock(scorefile); sfile.open((file_exists(sfilename)?'r+':'w+'), true); - for(s in scores) - { + for(s in scores) { var score=scores[s]; var points=score.score>=settings.minScore?score.score:settings.minScore; sfile.iniSetValue(s,"score",points); @@ -1279,22 +1259,19 @@ function GameStatusInfo() this.loadRankings=function() { Log("loading rankings"); - var sfilename=game_dir+scorefile; - if(file_exists(sfilename)) - { + var sfilename=root+scorefile; + if(file_exists(sfilename)) { var lfile=new File(sfilename); lfile.open('r',true); var plyrs=lfile.iniGetSections(); - for(p=0;p<plyrs.length;p++) - { + for(p=0;p<plyrs.length;p++) { var player=plyrs[p]; var score=parseInt(lfile.iniGetValue(player,"score"),10); var kills=parseInt(lfile.iniGetValue(player,"kills"),10); var wins=parseInt(lfile.iniGetValue(player,"wins"),10); var losses=parseInt(lfile.iniGetValue(player,"losses"),10); scores[player]={'score':score,'kills':kills,'wins':wins,'losses':losses}; - if(score>=settings.pointsToWin) - { + if(score>=settings.pointsToWin) { lfile.close(); file_remove(lfile.name); this.winRound(player); @@ -1307,7 +1284,7 @@ function GameStatusInfo() } this.winRound=function(player) { - hfilename=game_dir+halloffame; + hfilename=root+halloffame; var hfile=new File(hfilename); hfile.open('a'); hfile.writeln(" \1w\1h" + system.datestr() + "\1n: \1y" + system.username(player)); @@ -1315,12 +1292,11 @@ function GameStatusInfo() } this.hallOfFame=function() { - if(file_exists(game_dir+halloffame)) - { + if(file_exists(root+halloffame)) { console.clear(); console.putmsg("\1y\1hBBS DICE WARZ HALL OF FAME (Previous Round Winners)"); console.crlf(); - console.printtail(game_dir + halloffame,10); + console.printtail(root + halloffame,10); console.gotoxy(1,24); console.pause(); console.aborted=false; @@ -1336,8 +1312,7 @@ function GameStatusInfo() var hn=gfile.readln()==0?false:true; var status=parseInt(gfile.readln(),10); - if(status<0) - { + if(status<0) { var minp=parseInt(gfile.readln(),10); var maxp=parseInt(gfile.readln(),10); lgame=new NewGame(minp,maxp,gameNumber); @@ -1346,19 +1321,16 @@ function GameStatusInfo() lgame.fileName=gamefile; if(minp==maxp) lgame.fixedPlayers=true; - for(nnn=0;!gfile.eof && nnn<maxp;nnn++) - { + for(nnn=0;!gfile.eof && nnn<maxp;nnn++) { userNumber=gfile.readln(); - if(userNumber===null || userNumber===undefined || userNumber==="") break; - else - { + if(userNumber===null || userNumber===undefined || userNumber==="") + break; + else { userNumber=parseInt(userNumber,10); vote=gfile.readln(); lgame.addPlayer(userNumber,parseInt(vote,10)); if(userNumber>0 && !scores[userNumber]) - { scores[userNumber]={'score':0,'kills':0,'wins':0,'losses':0}; - } } } gfile.close(); @@ -1380,15 +1352,13 @@ function GameStatusInfo() lgame.playerTerr=pt; lgame.hiddenNames=hn; - for(to=0;to<np;to++) - { + for(to=0;to<np;to++) { ttoo=parseInt(gfile.readln()); lgame.turnOrder[to]=ttoo; } - var aifile=new File(game_dir + "ai.ini"); + var aifile=new File(root + "ai.ini"); aifile.open("r"); - for(pl=0;pl<np;pl++) - { + for(pl=0;pl<np;pl++) { var uname=gfile.readln(); var u=-1; if(uname.search(/^[0-9]+$/) != -1) @@ -1401,14 +1371,11 @@ function GameStatusInfo() lgame.players[pl].setColors(pl); lgame.players[pl].reserve=res; - if(u>0) - { + if(u>0) { lgame.users[u]=pl; humans++; if(!scores[u]) - { scores[u]={'score':0,'kills':0,'wins':0,'losses':0}; - } } else { /* Set up computer players */ @@ -1426,11 +1393,8 @@ function GameStatusInfo() } aifile.close(); if(humans<2) - { lgame.singlePlayer=true; - } - for(sec=0;sec<ms;sec++) - { + for(sec=0;sec<ms;sec++) { spot_player=parseInt(gfile.readln(),10); spot_index=parseInt(gfile.readln(),10); spot_dice=parseInt(gfile.readln(),10); @@ -1455,12 +1419,10 @@ function GameStatusInfo() gfile.writeln(g.hiddenNames?1:0); gfile.writeln(g.status); - if(g.status<0) - { + if(g.status<0) { gfile.writeln(g.minPlayers); gfile.writeln(g.maxPlayers); - for(nnn=0;nnn<g.players.length;nnn++) - { + for(nnn=0;nnn<g.players.length;nnn++) { gfile.writeln(g.players[nnn].user); gfile.writeln(g.players[nnn].vote); } @@ -1474,11 +1436,8 @@ function GameStatusInfo() gfile.writeln(g.columns); gfile.writeln(g.playerTerr); for(to=0;to<g.maxPlayers;to++) - { gfile.writeln(g.turnOrder[to]); - } - for(ply in g.players) - { + for(ply in g.players) { p=g.players[ply]; if(p.user==-1) gfile.writeln(p.AI.name); @@ -1486,8 +1445,7 @@ function GameStatusInfo() gfile.writeln(p.user); gfile.writeln(p.reserve); } - for(sector in g.used) - { + for(sector in g.used) { location=sector; gfile.writeln(g.grid[location].player); gfile.writeln(g.grid[location].location); @@ -1498,36 +1456,30 @@ function GameStatusInfo() this.updateGames=function() { var u=false; - for(gd in this.gameData) - { + for(gd in this.gameData) { var fileName=this.gameData[gd].fileName; var lastModified=file_date(fileName); - if(file_exists(fileName)) - { - if(lastModified>this.gameData[gd].lastModified) - { + if(file_exists(fileName)) { + if(lastModified>this.gameData[gd].lastModified) { this.gameData[gd]=this.loadGame(fileName,gd,lastModified); u=true; } } - else - { + else { delete this.gameData[gd]; u=true; } } - if(u) this.filterData(); + if(u) + this.filterData(); } this.sortArray=function(data) { var numItems=data.length; - for(n=0;n<numItems;n++) - { - for(m = 0; m < (numItems-1); m++) - { - if(parseInt(data[m],10) > parseInt(data[m+1],10)) - { + for(n=0;n<numItems;n++) { + for(m = 0; m < (numItems-1); m++) { + if(parseInt(data[m],10) > parseInt(data[m+1],10)) { holder = data[m+1]; data[m+1] = data[m]; data[m] = holder; @@ -1548,8 +1500,7 @@ function GameStatusInfo() this.yourTurn=[]; this.eliminated=[]; - for(ggg in this.gameData) - { + for(ggg in this.gameData) { var gm=this.gameData[ggg]; if(!file_exists(gm.fileName)) { Log("game file missing, removing data: " + gm.filename); @@ -1557,48 +1508,48 @@ function GameStatusInfo() } else { var playerNumber=gm.users[user.number]; - if(gm.users[user.number]>=0) - { - if(gm.status<0) this.notFull.push(ggg); - if(gm.singlePlayer) this.singleGames.push(ggg); + if(gm.users[user.number]>=0) { + if(gm.status<0) + this.notFull.push(ggg); + if(gm.singlePlayer) + this.singleGames.push(ggg); this.yourGames.push(ggg); - if(gm.status==0) - { + if(gm.status==0) { this.completed.push(ggg); - if(gm.winner==user.number) this.youWin.push(ggg); + if(gm.winner==user.number) + this.youWin.push(ggg); } - else if(gm.status>0) - { + else if(gm.status>0) { this.inProgress.push(ggg); - if(gm.turnOrder[gm.nextTurn]==playerNumber || gm.singlePlayer) { + if(gm.turnOrder[gm.nextTurn]==playerNumber || gm.singlePlayer) this.yourTurn.push(ggg); - } else { + else { var nextTurn=gm.nextTurn; while(gm.players[gm.turnOrder[nextTurn]].user<0) { nextTurn++; - if(nextTurn==gm.maxPlayers) nextTurn=0; + if(nextTurn==gm.maxPlayers) + nextTurn=0; } - if(gm.turnOrder[nextTurn]==playerNumber) { + if(gm.turnOrder[nextTurn]==playerNumber) this.yourTurn.push(ggg); - } } } - if(gm.players[playerNumber].eliminated===true) this.eliminated.push(ggg); + if(gm.players[playerNumber].eliminated===true) + this.eliminated.push(ggg); } - else - { - if(gm.status<0) this.notFull.push(ggg); - else if(!gm.singlePlayer) - { - if(gm.status==0) - { + else { + if(gm.status<0) + this.notFull.push(ggg); + else if(!gm.singlePlayer) { + if(gm.status==0) { this.completed.push(ggg); - if(gm.winner>=0) - { - if(gm.winner==user.number) this.youWin.push(ggg); + if(gm.winner>=0) { + if(gm.winner==user.number) + this.youWin.push(ggg); } } - else this.inProgress.push(ggg); + else + this.inProgress.push(ggg); } } } @@ -1606,11 +1557,9 @@ function GameStatusInfo() } this.loadGames=function() { - var open_list=directory(game_dir + root + "*.dat"); - if(open_list.length) - { - for(lg in open_list) - { + var open_list=directory(root + "game*.dat"); + if(open_list.length) { + for(lg in open_list) { var temp_fname=file_getname(open_list[lg]); var lastModified=file_date(open_list[lg]); var daysOld=(time()-lastModified)/daySeconds; @@ -1619,55 +1568,44 @@ function GameStatusInfo() this.gameData[gameNumber]=lgame; } } - this.skipPlayers(); this.filterData(); + this.updatePlayers(); this.deleteOld(); } this.deleteOld=function() { Log("deleting old game data"); - for(oldgame in this.gameData) - { + for(oldgame in this.gameData) { daysOld=(time()-this.gameData[oldgame].lastModified)/daySeconds; - if(this.gameData[oldgame].singlePlayer===true && daysOld>=settings.keepGameData) - { + if(this.gameData[oldgame].singlePlayer===true && daysOld>=settings.keepGameData) { file_remove(this.gameData[oldgame].fileName); delete this.gameData[oldgame]; } } - for(completed in this.completed) - { + for(completed in this.completed) { gm=this.completed[completed]; daysOld=(time()-this.gameData[gm].lastModified)/daySeconds; - if(this.gameData[gm].singlePlayer===true || daysOld>=settings.keepGameData) - { + if(this.gameData[gm].singlePlayer===true || daysOld>=settings.keepGameData) { file_remove(this.gameData[gm].fileName); delete this.gameData[gm]; } } } - this.skipPlayers=function() + this.updatePlayers=function() { - Log("skipping players"); - for(inp in this.inProgress) - { - gm=this.gameData[this.inProgress[inp]]; - if(gm) - { + Log("updating players"); + for(inp in this.inProgress) { + var gm=this.gameData[this.inProgress[inp]]; + if(gm) { daysOld=(time()-gm.lastModified)/daySeconds; - if(settings.abortDays>=0 && daysOld>=settings.abortDays) - { + if(settings.abortDays>0 && daysOld>=settings.abortDays) { Log("removing expired game: " + gm.fileName); file_remove(gm.fileName); } - if(settings.skipDays>=0 && daysOld>=settings.skipDays && !gm.singlePlayer) - { + else if(settings.skipDays>0 && daysOld>=settings.skipDays && !gm.singlePlayer) { nextTurnPlayer=gm.turnOrder[gm.nextTurn]; - Log("skipping " + system.username(gm.players[nextTurnPlayer].user) + " in game " + gm.gameNumber); - deliverSkipMessage(gm.players[nextTurnPlayer].user,gm.gameNumber); - gm.reinforce(nextTurnPlayer); - this.storeGame(this.inProgress[inp]); - file_utime(gm.fileName,time(),gm.lsatModified); + deliverForfeitMessage(gm.players[nextTurnPlayer].user,gm.gameNumber); + forfeit(gm.gameNumber,nextTurnPlayer); } } } @@ -1681,11 +1619,10 @@ function GameStatusInfo() } function Log(txt) { - if(settings.logEnabled) { + if(settings.logEnabled) log(LOG_DEBUG,txt); - } } - splashStart(); - gameMenu(); - splashExit(); +splashStart(); +gameMenu(); +splashExit(); diff --git a/xtrn/dicewarz/display.js b/xtrn/dicewarz/display.js index f946962deca57d6a3282bb076913d0060cc84e87..15ee680ca9f1e50064d0da31625231a5a1e6f60b 100644 --- a/xtrn/dicewarz/display.js +++ b/xtrn/dicewarz/display.js @@ -93,7 +93,7 @@ function displayMessages() { var x=30; var y=20; - var fileName=game_dir + user.alias + ".usr"; + var fileName=root + user.alias + ".usr"; if(file_size(fileName)>0) { var file=new File(fileName); file.open('r',false); diff --git a/xtrn/dicewarz/lock.js b/xtrn/dicewarz/lock.js index eac4bc4982ab7f853dfeff17036728eabaae6a64..0ce10e2bdce41a2f50531d4eaf5866dd65365d2f 100644 --- a/xtrn/dicewarz/lock.js +++ b/xtrn/dicewarz/lock.js @@ -1,6 +1,6 @@ function Locked(fileName,timeOut) { - var fname=(game_dir+fileName+".lck"); + var fname=(root+fileName+".lck"); if(file_exists(fname)) { if(!timeOut) return true; @@ -19,7 +19,7 @@ function Locked(fileName,timeOut) } function Lock(fileName) { - var fname=(game_dir+fileName+".lck"); + var fname=(root+fileName+".lck"); var lockfile=new File(fname); lockfile.open('we', false); if(!lockfile.is_open) @@ -34,12 +34,12 @@ function Lock(fileName) function Unlock(fileName) { if(fileName==-1 || !fileName) return; - var fname=(game_dir+fileName+".lck"); + var fname=(root+fileName+".lck"); file_remove(fname); } function UnlockAll() { - var lockList=directory(game_dir + "*.lck"); + var lockList=directory(root + "*.lck"); if(lockList.length) { for(lf in lockList) diff --git a/xtrn/dicewarz/maps.js b/xtrn/dicewarz/maps.js index 4bb8396c48e9166fbec934c78c7d9fa04f486b87..602f5403709db111cadc787b1ee28e7ed0285667 100644 --- a/xtrn/dicewarz/maps.js +++ b/xtrn/dicewarz/maps.js @@ -14,50 +14,48 @@ function NewGame(minp,maxp,n) this.addPlayer=function(userNumber,vote) { - if(userNumber) this.users[userNumber]=this.players.length; + if(userNumber) + this.users[userNumber]=this.players.length; this.players.push(new Player(userNumber,vote)); } this.tallyVotes=function() { var trueVotes=0; - for(v in this.players) - { - if(this.players[v].user>0 && this.players[v].vote==1) - { + for(v in this.players) { + if(this.players[v].user>0 && this.players[v].vote==1) { trueVotes++; } } - if(trueVotes==this.countHumanPlayers()) - { + if(trueVotes==this.countHumanPlayers()) { if(this.countPlayers()>=this.minPlayers) - { return true; - } } - else return false; + else + return false; } this.countHumanPlayers=function() { var count=0; - for(pppp in this.players) - { - if(this.players[pppp].user>0) count++; + for(pppp in this.players) { + if(this.players[pppp].user>0) + count++; } return count; } this.countPlayers=function() { var count=0; - for(pppp in this.players) - { + for(pppp in this.players) { count++; } return count; } this.getVote=function(playerNumber) { - if(this.players[playerNumber].vote==0) return("wait"); - else return("start"); + if(this.players[playerNumber].vote==0) + return("wait"); + else + return("start"); } this.removePlayer=function(playerNumber) { @@ -104,29 +102,21 @@ function Map(c,r,p,gn) nextTurn=this.nextTurn; nextTurnPlayer=this.players[this.turnOrder[nextTurn]].user; - if(this.status!=0 && !this.singlePlayer) - { + if(this.status!=0 && !this.singlePlayer) { if(this.countActiveHumans<2) - { return; - } if(nextTurnPlayer>0 && nextTurnPlayer!=user.number) - { deliverMessage(nextTurnPlayer,this.gameNumber); - } - else - { - while(1) - { - if(nextTurn==this.maxPlayers-1) nextTurn=0; - else nextTurn++; + else { + while(1) { + if(nextTurn==this.maxPlayers-1) + nextTurn=0; + else + nextTurn++; nextTurnPlayer=this.players[this.turnOrder[nextTurn]].user; if(nextTurnPlayer==this.players[this.turnOrder[this.nextTurn]].user) - { break; - } - else if(nextTurnPlayer>0) - { + else if(nextTurnPlayer>0) { deliverMessage(nextTurnPlayer,this.gameNumber); break; } @@ -143,13 +133,10 @@ function Map(c,r,p,gn) { var numEliminated=this.eliminated.length; var humans=this.countActiveHumans(); - if(numEliminated==(this.maxPlayers-1) || humans==0) - { + if(numEliminated==(this.maxPlayers-1) || humans==0) { this.winner=this.lastEliminator; if(this.lastEliminator>0) - { this.assignPoints(); - } this.status=0; return true; } @@ -158,18 +145,18 @@ function Map(c,r,p,gn) this.countActivePlayers= function() { var activePlayers=[]; - for(player in this.players) - { - if(!this.players[player].eliminated) activePlayers.push(player); + for(player in this.players) { + if(!this.players[player].eliminated) + activePlayers.push(player); } return activePlayers; } this.countActiveHumans= function() { count=0; - for(ply in this.players) - { - if(this.players[ply].user>0 && !this.players[ply].eliminated) count++; + for(ply in this.players) { + if(this.players[ply].user>0 && !this.players[ply].eliminated) + count++; } return count; } @@ -178,13 +165,9 @@ function Map(c,r,p,gn) games.loadRankings(); scores[this.winner].wins+=1; if(this.singlePlayer) - { scores[this.winner].score+=settings.winPointsSolo; - } else - { scores[this.winner].score+=settings.winPointsMulti; - } games.storeRankings(); } this.eliminatePlayer= function(playerNum1,playerNum2) @@ -197,60 +180,64 @@ function Map(c,r,p,gn) this.lastEliminator=killer.user; var updaterankings=false; - if(killer.user>0) - { + if(killer.user>0) { games.loadRankings(); - if(this.singlePlayer) scores[killer.user].score+=settings.killPointsSolo; - else scores[killer.user].score+=settings.killPointsMulti; + if(this.singlePlayer) + scores[killer.user].score+=settings.killPointsSolo; + else + scores[killer.user].score+=settings.killPointsMulti; scores[killer.user].kills+=1; updaterankings=true; } - if(dead.user>0) - { + if(dead.user>0) { if(!updaterankings) { games.loadRankings(); updaterankings=true; } scores[dead.user].losses+=1; - if(this.singlePlayer) - { + if(this.singlePlayer) { this.status=0; scores[dead.user].score+=settings.deathPointsSolo; } - else - { + else { var kname= (killer.user<1?this.players[playerNum2].AI.name:system.username(killer.user)); deliverKillMessage(kname,dead.user,this.gameNumber); scores[dead.user].score+=settings.deathPointsMulti; - if(scores[dead.user].score<settings.minScore) scores[dead.user].score=settings.minScore; + if(scores[dead.user].score<settings.minScore) + scores[dead.user].score=settings.minScore; } } - if(updaterankings) games.storeRankings(); - if(this.checkElimination()) games.storeGame(this.gameNumber); + if(updaterankings) + games.storeRankings(); + if(this.checkElimination()) + games.storeGame(this.gameNumber); } this.setEliminated= function() { //RUNS AT STARTUP, STORING GAME ELIMINATION DATA UPON LOADING EACH GAME this.eliminated=[]; - for(elp in this.players) - { - if(this.players[elp].territories.length<=0) - { + for(elp in this.players) { + if(this.players[elp].territories.length<=0) { this.eliminated.push(elp); this.players[elp].eliminated=true; } - else this.lastEliminator=this.players[elp].user; + else + this.lastEliminator=this.players[elp].user; } - if(this.status==0) this.winner=this.lastEliminator; + if(this.status==0) + this.winner=this.lastEliminator; } this.getNextTurn= function() { - if(this.nextTurn==this.maxPlayers-1) this.nextTurn=0; - else this.nextTurn++; + if(this.nextTurn==this.maxPlayers-1) + this.nextTurn=0; + else + this.nextTurn++; nextPlayer=this.turnOrder[this.nextTurn]; - while(this.players[nextPlayer].eliminated) - { - if(this.nextTurn==this.maxPlayers-1) this.nextTurn=0; - else this.nextTurn++; + while(this.players[nextPlayer].eliminated) { + if(this.nextTurn==this.maxPlayers-1) + this.nextTurn=0; + else + this.nextTurn++; nextPlayer=this.turnOrder[this.nextTurn]; } } @@ -262,16 +249,12 @@ function Map(c,r,p,gn) this.displayGrid= function() { //DISPLAYS THE LOCATION DATA FOR EACH COMPANY for(uu in this.used) - { this.grid[uu].displayBorder(border_color); - } } this.setGrid= function() { for(uu in this.used) - { this.grid[uu].setBorder(this.grid); - } } this.redraw= function() { @@ -282,10 +265,8 @@ function Map(c,r,p,gn) } this.displayGame= function() { //DISPLAY EACH PLAYER'S TERRITORIES - for(ply in this.players) - { - for(ter in this.players[ply].territories) - { + for(ply in this.players) { + for(ter in this.players[ply].territories) { territory=this.players[ply].territories[ter]; this.grid[territory].show(); } @@ -304,7 +285,8 @@ function Map(c,r,p,gn) { numDice=this.findConnected(playerNumber); placed=this.placeDice(playerNumber,numDice); - if(this.winner<0) this.checkElimination(); + if(this.winner<0) + this.checkElimination(); this.getNextTurn(); if(this.players[playerNumber].user>0) this.notify(); @@ -312,40 +294,38 @@ function Map(c,r,p,gn) } this.canAttack= function(playerNumber,mapLocation) { //RETURNS TRUE IF PLAYER : playerNumber CAN ATTACK FROM GRID INDEX : mapLocation - if(mapLocation>=0) //IF A LOCATION IS PROVIDED, RETURN AN ARRAY OF NEIGHBORING TERRITORIES THAT CAN BE ATTACKED - { - if(this.grid[mapLocation].player!=playerNumber) return false; + if(mapLocation>=0) { + if(this.grid[mapLocation].player!=playerNumber) + return false; options=[]; - if(this.grid[mapLocation].dice>1) - { + if(this.grid[mapLocation].dice>1) { dirs=this.loadDirectional(mapLocation); - for(dir in dirs) - { + for(dir in dirs) { current=dirs[dir]; - if(this.grid[current]) - { - if(this.grid[current].player!=playerNumber) options.push(current); + if(this.grid[current]) { + if(this.grid[current].player!=playerNumber) + options.push(current); } } } - if(options.length) return options; - else return false; + if(options.length) + return options; + else + return false; } else //OTHERWISE, SIMPLY DETERMINE WHETHER THE PLAYER CAN ATTACK AT ALL, AND RETURN TRUE OR FALSE { - if(this.players[playerNumber].territories.length==this.players[playerNumber].totalDice) return false; - for(terr in this.players[playerNumber].territories) - { + if(this.players[playerNumber].territories.length==this.players[playerNumber].totalDice) + return false; + for(terr in this.players[playerNumber].territories) { currentTerritory=this.players[playerNumber].territories[terr]; - if(this.grid[currentTerritory].dice>1) - { + if(this.grid[currentTerritory].dice>1) { dirs=this.loadDirectional(currentTerritory); - for(dir in dirs) - { + for(dir in dirs) { current=dirs[dir]; - if(this.grid[current]) - { - if(this.grid[current].player!=playerNumber) return true; + if(this.grid[current]) { + if(this.grid[current].player!=playerNumber) + return true; } } } @@ -373,28 +353,21 @@ function Map(c,r,p,gn) var counted=[]; var tocheck=[]; y=10; - for(tttt in terr) - { + for(tttt in terr) { count=1; tocheck.push(terr[tttt]); - while(tocheck.length) - { + while(tocheck.length) { loc=tocheck.shift(); current=this.grid[loc]; - if(!checked[current.location]) - { + if(!checked[current.location]) { dirs=scanProximity(current.location); - for(ddd in dirs) - { + for(ddd in dirs) { dir=dirs[ddd]; - if(this.grid[dir] && !checked[dir]) - { - if(this.grid[dir].player==playerNumber) - { + if(this.grid[dir] && !checked[dir]) { + if(this.grid[dir].player==playerNumber) { tocheck.push(dir); - if(!counted[dir]) - { + if(!counted[dir]) { count++; counted[dir]=true; } @@ -404,7 +377,8 @@ function Map(c,r,p,gn) checked[current.location]=true; } } - if(count>largest_cluster) largest_cluster=count; + if(count>largest_cluster) + largest_cluster=count; } return largest_cluster; } @@ -414,20 +388,17 @@ function Map(c,r,p,gn) var xxx=menuColumn; var yyy=menuRow; - for(var ply=0;ply<this.maxPlayers;ply++) - { + for(var ply=0;ply<this.maxPlayers;ply++) { var playerNumber=this.turnOrder[ply]; this.countDice(playerNumber); var player=this.players[playerNumber]; var name=getUserName(player,playerNumber); - if(player.eliminated) - { + if(player.eliminated) { player.bColor=blackbg; player.fColor="\1n\1k\1h"; } - else if(this.status!=0 && this.hiddenNames && name!=user.alias) - { + else if(this.status!=0 && this.hiddenNames && name!=user.alias) { name="Player " + (playerNumber+1); } @@ -442,17 +413,17 @@ function Map(c,r,p,gn) } this.ShufflePlayers= function() { //Generate TURN ORDER (this.turnOrder[]) - for(pp=0;pp<this.maxPlayers;pp++) - { + for(pp=0;pp<this.maxPlayers;pp++) { var rand=random(this.maxPlayers); - if(this.turnOrder[rand]>=0) pp--; - else this.turnOrder[rand]=pp; + if(this.turnOrder[rand]>=0) + pp--; + else + this.turnOrder[rand]=pp; } } this.generatePlayers= function() { - for(pl=0;pl<this.maxPlayers;pl++) - { + for(pl=0;pl<this.maxPlayers;pl++) { userNumber=this.players[pl].user; this.users[userNumber]=pl; this.players[pl].setColors(pl); @@ -470,33 +441,28 @@ function Map(c,r,p,gn) this.used[locationa]=true; unused.splice(randa,1); - for(ms=1;ms<this.mapSize;ms++) - { + for(ms=1;ms<this.mapSize;ms++) { randb=random(unused.length); locationb=unused[randb]; prox=scanProximity(locationb); - if(this.landNearby(prox, this.used)) - { + if(this.landNearby(prox, this.used)) { this.grid[locationb]=new Territory(locationb); this.used[locationb]=true; unused.splice(randb,1); } - else ms--; + else + ms--; } var territories=[]; for(mt in this.used) - { territories.push(mt); - } - for(ply in this.players) - { - for(tt=0;tt < this.playerTerr; tt++) - { + for(ply in this.players) { + for(tt=0;tt < this.playerTerr; tt++) { rand=random(territories.length); location=territories[rand]; - if(this.grid[location].player>=0) tt--; - else - { + if(this.grid[location].player>=0) + tt--; + else { this.grid[location].assign(ply,this.players[ply]); this.players[ply].territories.push(location); } @@ -507,13 +473,10 @@ function Map(c,r,p,gn) } this.landNearby= function(proximity) { //CHECK IMMEDIATE AREA FOR LAND - for(px in proximity) - { + for(px in proximity) { location=proximity[px]; if(this.used[location]) - { return true; - } } return false; } @@ -524,57 +487,47 @@ function Map(c,r,p,gn) toPlace=numDice; fulldice=false; placed=[]; - for(sd=0;sd<numDice;sd++) - { + for(sd=0;sd<numDice;sd++) { rand=random(this.players[playerNumber].territories.length); terr=this.players[playerNumber].territories[rand]; - if(this.players[playerNumber].totalDice==(this.players[playerNumber].territories.length*this.maxDice)) //IF ALL OF THIS PLAYER'S TERRITORIES HAVE THE MAXIMUM - { //AMOUNT OF DICE PUSH DICE INTO PLAYER'S RESERVE + if(this.players[playerNumber].totalDice==(this.players[playerNumber].territories.length*this.maxDice)) { fulldice=true; reserveCap=(30-this.players[playerNumber].reserve); - if(reserveCap>0) - { - if(reserveCap>=toPlace) this.players[playerNumber].reserve+=toPlace; - else this.players[playerNumber].reserve+=reserveCap; + if(reserveCap>0) { + if(reserveCap>=toPlace) + this.players[playerNumber].reserve+=toPlace; + else + this.players[playerNumber].reserve+=reserveCap; } return placed; } - else if(this.grid[terr].dice<this.maxDice) - { + else if(this.grid[terr].dice<this.maxDice) { this.grid[terr].dice++; placed.push(terr); this.players[playerNumber].totalDice++; toPlace--; } - else - { - if(this.players[playerNumber].territories.length==1) return placed; + else { + if(this.players[playerNumber].territories.length==1) + return placed; sd--; } } - if(this.players[playerNumber].reserve>0) - { - if(this.players[playerNumber].totalDice==(this.players[playerNumber].territories.length*this.maxDice)) //IF ALL OF THIS PLAYER'S TERRITORIES HAVE THE MAXIMUM - { //AMOUNT OF DICE PUSH DICE INTO PLAYER'S RESERVE + if(this.players[playerNumber].reserve>0) { + if(this.players[playerNumber].totalDice==(this.players[playerNumber].territories.length*this.maxDice)) fulldice=true; - } - else - { - while(this.players[playerNumber].reserve>0) - { + else { + while(this.players[playerNumber].reserve>0) { rand=random(this.players[playerNumber].territories.length); terr=this.players[playerNumber].territories[rand]; - if(this.grid[terr].dice<this.maxDice) - { + if(this.grid[terr].dice<this.maxDice) { this.grid[terr].dice++; placed.push(terr); this.players[playerNumber].totalDice++; this.players[playerNumber].reserve--; - if(this.players[playerNumber].totalDice==(this.players[playerNumber].territories.length*this.maxDice)) //IF ALL OF THIS PLAYER'S TERRITORIES HAVE THE MAXIMUM - { + if(this.players[playerNumber].totalDice==(this.players[playerNumber].territories.length*this.maxDice)) return placed; - } } } } @@ -584,8 +537,7 @@ function Map(c,r,p,gn) this.countDice= function(playerNumber) { //COUNT DICE TOTALS FOR EACH PLAYER this.players[playerNumber].totalDice=0; - for(td in this.players[playerNumber].territories) - { + for(td in this.players[playerNumber].territories) { terr=this.players[playerNumber].territories[td]; this.players[playerNumber].totalDice+=this.grid[terr].dice; } @@ -593,9 +545,7 @@ function Map(c,r,p,gn) this.countDiceAll= function() { for(ppp in this.players) - { this.countDice(ppp); - } } this.init= function() { //initIALIZE GAME diff --git a/xtrn/dicewarz/player.js b/xtrn/dicewarz/player.js index 33ba415d2e46128dfa25d6df59c0466cde6d3186..5384de5a07e3a441e348c9a0225621326830110d 100644 --- a/xtrn/dicewarz/player.js +++ b/xtrn/dicewarz/player.js @@ -20,21 +20,16 @@ function Player(userNumber, vote) } this.removeTerritory=function(territory) { - for(rem in this.territories) - { - if(this.territories[rem]==territory) - { + for(rem in this.territories) { + if(this.territories[rem]==territory) this.territories.splice(rem,1); - } } } this.countTerritory=function() { var count=0; - for(tt in this.territories) - { + for(tt in this.territories) count++; - } return count; } } diff --git a/xtrn/dicewarz/territory.js b/xtrn/dicewarz/territory.js index 54b4c2948598af3a704341a2c8190ac067d0b303..c577549c5855d0d54a043fbe817e537f27e3f378 100644 --- a/xtrn/dicewarz/territory.js +++ b/xtrn/dicewarz/territory.js @@ -51,9 +51,6 @@ function Territory(location) } this.show= function() { //DISPLAY THIS TERRITORY ON THE MAP -// ALTERNATE MAP POSITION DISPLAY -// display=(this.bfColor + ""+ blackbg + this.bColor + this.fColor + " " + this.dice + " " + blackbg + this.bfColor + ""); - display=(this.bfColor + "\xFE"+ blackbg + this.bColor + this.fColor + " " + this.dice + " " + blackbg + this.bfColor + "\xFE"); console.gotoxy(this.x-1, this.y); console.putmsg(display);