diff --git a/xtrn/dicewarz/dice.doc b/xtrn/dicewarz/dice.doc deleted file mode 100644 index dee7c3fc5dec6205414a24efb018ae792f82007c..0000000000000000000000000000000000000000 --- a/xtrn/dicewarz/dice.doc +++ /dev/null @@ -1,71 +0,0 @@ - ************************************ - ***** BBS DICE WARZ (2008) ****** - ** for use with Synchronet v3.14+ ** - *** by Matt Johnson ************** - ************************************ - -This game was modelled after "Dice Wars" which is a web-interface strategy -game involving dice, similar to Risk. - -The object of the game is to conquer the map by rolling dice against -neighboring tiles. The game can be played by 4 to 7 players, and can -be either 1 human player vs. all computer players, all human vs. human -players, or a mix of humans and computers. - -While the settings can be adjusted, the default maximum dice per tile is 8, -and the default maximum reserve dice is 30. - - ####GAMEPLAY#### - -When it is your turn, you press "T" to start your turn, and then "A" to -begin attacking. Use the arrow keys to move around the map, and the [ENTER] -key to select a territory. It would make sense to not attack a tile when -the odds are against you. You are not required to make an attack at all, -and you can simply press "E" to end your turn immediately if you only wish -to place reinforcements. - -Example: - Attacking tile's dice: 2 (6 + 6) - Defending tile's dice: 8 (6 + 6 + 6 + 6 + 6 + 6 + 6 + 6) - -In this scenario, the highest possible roll you can get as the attacker is -a 12, whereas the highest roll the defender can get is 48. You will most -likely lose, and would be better off attacking somewhere else. - -When rolling dice against another player, all ties go to the defender. - -If you win the dice roll, the defending tile becomes yours, and all but -one of your dice are automatically moved to the tile. The remaining die -is left behind on the tile from which you attacked. - -When you are finished attacking press "E" to end your turn, and you will -be given reinforcement dice equal to the largest number of CONNECTED -tiles you possess. This creates a secondary objective in the game which -is to connect as many of your tiles on board as possible, so as to get -more reinforcements. These are placed randomly on your tiles. - -If all of your tiles have reached the maximum number of dice per tile, -any remaining reinforcements will be added to a reserve, up to a maximum -of 30 dice. These reserve dice will be placed at the end of your turn -along with your regular reinforcements as needed, unless all of your -territories are already full. - -The game is over (for you) when you have either conquered all of the -tiles on the board, or had all of your tiles taken over by other players. - - ####SCORING#### - -1st place: +2 points -2nd place: +1 point -3rd place: no change -4th place: -1 point -5th place: -2 points -6th place: -2 points -7th place: -2 points - - ####THANKS TO#### - -Landis for his coding advice. -Chrispi for his relentless bug detection. - -Now everyone go get killed! diff --git a/xtrn/dicewarz/dice.js b/xtrn/dicewarz/dice.js deleted file mode 100644 index 9c8a21037ff7d9a62dc1492c3b1ee7af25d553e3..0000000000000000000000000000000000000000 --- a/xtrn/dicewarz/dice.js +++ /dev/null @@ -1,1510 +0,0 @@ -/* ********************************** - ****** DICE WARZ (2008) ****** - ** for use with Synchronet v3.14+ ** - *** by Matt Johnson ************* - ********************************** - - SET TAB STOPS TO 4 FOR EDITING - - SEARCH "TODO:" ENTRIES FOR - CODE THAT NEEDS WORK -*/ - - 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"); - var activeGame=""; - -//######################### InitIALIZE PROGRAM VARIABLES ######################### - - const pointsToWin= 100; - const maxGames= 100; - const minPlayers= 3; - const maxPlayers= 7; - const maxDice= 8; - const root= "GAME"; - const scorefile= "DICERANK"; - 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"; - - -//######################### DO NOT CHANGE THIS SECTION ########################## - - var log_list=[]; - if(!file_isdir(game_dir+"logs")) mkdir(game_dir+"logs"); - else log_list=directory(game_dir + "logs/*.log"); - var logfile=new File(game_dir + "logs/dice" + log_list.length + ".log"); - logfile.open('w+',false); - logfile.writeln("######DICE WARZ LOG DATA####### " + system.datestr() +" - "+ system.timestr()); - - - //TODO: MAKE BETTER USER OF THE USER FILES. CAN BE USED FOR REALTIME MULTIPLAYER, AND FOR USER PRESENCE DETECTION - // IN THE EVENT A USER IS BEING NOTIFIED OF HIS OR HER TURN IN A GAME, THE TELEGRAMS WILL BE SUPPRESSED IF THE USER IS ALREADY RUNNING THE PROGRAM - var userFileName=game_dir + user.alias + ".USR"; - var userFile=new File(userFileName); - userFile.open('a'); - userFile.close(); - - //TODO: MAKE REALTIME MULTIPLAYER FEATURES POSSIBLY USING THE EXISTING FILE LOCK SYSTEM OR QUEUES - // var dataQueue= new Queue(dice); - - 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 - const points= [-2,-2,-2,-1,0,1,2]; //POINTS GAINED/LOST FOR WINNING/LOSING - var scores= []; - - var messages= []; //MESSAGES QUEUED FOR DISPLAY UPON RELOADING MAIN MENU - var games= new GameStatusInfo(); - var dice= LoadDice(); - var oldpass= console.ctrlkey_passthru; - - console.ctrlkey_passthru="+ACGKLOPQRTUVWXYZ_"; - bbs.sys_status|=SS_MOFF; - - SplashScreen(); - GameMenu(); - -//########################## MAIN FUNCTIONS ################################### -function ScanProximity(location) -{ - var prox=[]; - var odd=false; - offset=location%columns; - if((offset%2)==1) odd=true; - - if(location>=columns) //if not in the first row - prox[0]=(location-columns); //north - if(location<(columns*(rows-1))) //if not in the last row - prox[1]=(location+columns); //south - - if(odd) - { - if(((location+1)%columns)!=1) //if not in the first column - prox[2]=location-1; //northwest - if(((location+1)%columns)!=0) //if not in the last column - prox[3]=location+1; //northeast - if(location<(columns*(rows-1))) //if not in the last row - { - if(((location+1)%columns)!=1) //if not in the first column - prox[4]=prox[1]-1; //southwest - if(((location+1)%columns)!=0) //if not in the last column - prox[5]=prox[1]+1; //southeast - } - } - else - { - if(location>=columns) //if not in the first row - { - if(((location+1)%columns)!=1) //if not in the first column - prox[2]=prox[0]-1; //northwest - if(((location+1)%columns)!=0) //if not in the last column - prox[3]=prox[0]+1; //northeast - } - if(((location+1)%columns)!=1) //if not in the first column - prox[4]=location-1; //southwest - if(((location+1)%columns)!=0) //if not in the last column - prox[5]=location+1; //southeast - } - return prox; -} -function GetNextGameNumber() -{ - var next=1; - while(games.gameData[next]) { - next++; - } - return next; -} -function CountSparseArray(data) -{ - var count=0; - for(tt in data) - { - count++; - } - if(count==0) return false; - else return count; -} -function ViewInstructions() -{ - console.clear(); - console.printfile(game_dir + instructions); - if(!(user.settings & USER_PAUSE)) console.pause(); - console.aborted=false; -} -function ViewRankings() -{ - scores=games.LoadRankings(); - var scoredata=SortScores(); - console.clear(); - - printf("\1k\1h\xDA"); - printf(PrintPadded("\xC2",31,"\xC4","right")); - printf(PrintPadded("\xC2",9,"\xC4","right")); - printf(PrintPadded("\xC2",12,"\xC4","right")); - printf(PrintPadded("\xC2",14,"\xC4","right")); - printf(PrintPadded("\xBF",13,"\xC4","right")); - - printf("\1k\1h\xB3\1n\1g DICE WARZ RANKINGS \1k\1h\xB3 \1n\1gPOINTS \1k\1h\xB3 \1n\1gSOLO WINS \1k\1h\xB3 \1n\1gSOLO LOSSES \1k\1h\xB3 \1n\1gSOLO WIN % \1k\1h\xB3"); - - printf("\xC3"); - printf(PrintPadded("\xC5",31,"\xC4","right")); - printf(PrintPadded("\xC5",9,"\xC4","right")); - printf(PrintPadded("\xC5",12,"\xC4","right")); - printf(PrintPadded("\xC5",14,"\xC4","right")); - printf(PrintPadded("\xB4",13,"\xC4","right")); - - for(hs in scoredata) - { - thisuser=scoredata[hs]; - if(scores[thisuser].score>0 || scores[thisuser].wins>0) - { - var winPercentage=0; - if(scores[thisuser].wins>0) winPercentage=(scores[thisuser].wins/(scores[thisuser].wins+scores[thisuser].losses))*100; - printf("\1k\1h\xB3"); - printf(PrintPadded("\1y\1h " + system.username(thisuser),30," ","left")); - printf("\1k\1h\xB3"); - printf(PrintPadded("\1w\1h" + scores[thisuser].score + " \1k\1h\xB3",9," ","right")); - printf(PrintPadded("\1w\1h" + scores[thisuser].wins + " \1k\1h\xB3",12," ","right")); - printf(PrintPadded("\1w\1h" + scores[thisuser].losses + " \1k\1h\xB3",14," ","right")); - printf(PrintPadded("\1w\1h" + winPercentage.toFixed(2) + " % \1k\1h\xB3",13," ","right")); - } - } - - printf("\1k\1h\xC0"); - printf(PrintPadded("\xC1",31,"\xC4","right")); - printf(PrintPadded("\xC1",9,"\xC4","right")); - printf(PrintPadded("\xC1",12,"\xC4","right")); - printf(PrintPadded("\xC1",14,"\xC4","right")); - printf(PrintPadded("\xD9",13,"\xC4","right")); - - console.gotoxy(1,24); - console.pause(); - console.aborted=false; -} -function Sort(iiii) -{ - var Sorted=[]; - for(cc in iiii) - { - Sorted.push(cc); - } - Sorted.sort(); - return Sorted; -} -function AttackMessage(txt) -{ - var x=menuColumn; - ClearArea(16,menuColumn,8); - console.gotoxy(x,16); - console.putmsg("\1r\1h Choose a territory"); - console.gotoxy(x,17); - console.putmsg("\1r\1h " + txt); - console.gotoxy(x,18); - console.putmsg("\1r\1h or 'Q' to cancel."); - console.gotoxy(x,20); - console.putmsg("\1r\1h Use the arrow keys"); - console.gotoxy(x,21); - console.putmsg("\1r\1h to move, and \1n\1r[\1hENTER\1n\1r]"); - console.gotoxy(x,22); - console.putmsg("\1r\1h to select a tile."); - - WipeCursor("left"); -} - -/* - //TODO: IMPROVE SCORING METHODS - - SCORES ARE STORED IN A SPARSE ARRAY. COMPRESS THE INDICES OF THE SCORES INTO A SEQUENTIAL LIST - THEN SORT THE LIST HIGHEST SCORE TO LOWEST SCORE AND RETURN A NEW ARRAY OF POINTERS TO SCORE INDICES - I'M SURE THERE'S A BETTER WAY, IT JUST HASN'T OCCURRED TO ME YET -*/ -function CompressScores() -{ - compressed=[]; - for(score in scores) - { - compressed.push(score); - } - return compressed; -} -function SortScores() -{ - var data=CompressScores(); - var numScores=data.length; - for(n=0;n<numScores;n++) - { - for(m = 0; m < (numScores-1); m++) - { - if(scores[data[m]].score < scores[data[m+1]].score) - { - holder = data[m+1]; - data[m+1] = data[m]; - data[m] = holder; - } - } - } - return data; -} -function DeliverMessage(nextTurnPlayer,gameNumber) -{ - var nextUserName=system.username(nextTurnPlayer); - var message="\1r\1hIt is your turn in \1yDice-Warz\1r game #" + gameNumber + "\r\n\r\n"; - var nextUserFileName=game_dir + nextUserName + ".USR"; - if(file_exists(nextUserFileName)) { - var nextUserFile=new File(nextUserFileName); - nextUserFile.open('a',true); - nextUserFile.writeln(message); - nextUserFile.close(); - } - else system.put_telegram(nextTurnPlayer, message); -} - - -//########################GAME MENU FUNCTIONS################################ -function SplashScreen() -{ - console.clear(); - var splash_filename=game_dir + "DICEWARZ.BIN"; - var splash_size=file_size(splash_filename); - splash_size/=2; // Divide by two for attr/char pairs - splash_size/=80; // Divide by 80 cols. Size should now be height (assuming int) - var Splash=new Graphic(80,splash_size); - Splash.load(splash_filename); - Splash.draw(); - - console.gotoxy(1,23); - console.center("\1n\1c[\1hPress any key to continue\1n\1c]"); - while(console.inkey(K_NOECHO|K_NOSPIN)==""); -} -function GameMenu() -{ - if(!(user.settings & USER_PAUSE)) console.pause(); - var gMenu=new Menu( "" ,1,19,GetColor("green"),GetColor("green","high")); - var gmenu_items=[ "~Rankings" , - "~Select Game" , - "~Begin New Game" , - "~Instructions" , - "~Quit to BBS" ]; - gMenu.add(gmenu_items); - games.Init(); - - while(1) - { - //LOOPING MAIN MENU, UPDATES GAME STATUS INFO UPON REFRESH - //TODO: make recently completed games disappear from "your turn" list upon refresh - - games.UpdateGames(); - console.clear(); - console.putmsg("\1r\1hB B S - D I C E - W A R Z ! \1n\1c- Matt Johnson - 2008"); - console.crlf(); - DrawLine("\1n\1w\1h",79); - console.crlf(); - console.gotoxy(1,18); - DrawLine("\1n\1w\1h",79); - - console.gotoxy(1,24); - DrawLine("\1n\1w\1h",79); - gMenu.display(); - - console.gotoxy(1,3); - - Wrap("\1g Games in progress ",games.inProgress); - Wrap("\1g Games needing more players ",games.notFull); - Wrap("\1g Completed Games ",games.completed); - Wrap("\1g You are involved in games ",games.yourGames); - Wrap("\1g It is your turn in games ",games.yourTurn); - Wrap("\1g You are eliminated in games",games.eliminated); - Wrap("\1g You have won games ",games.youWin); - Wrap("\1g Single-player games ",games.singleGames); - - DisplayMessages(); - - WipeCursor("right"); - - var cmd=console.getkey(K_NOSPIN|K_NOECHO|K_NOCRLF|K_UPPER); - switch(cmd) - { - case "R": - ViewRankings(); - break; - case "S": - var choice=ChooseGame(); - if(choice) ProcessSelection(choice); - break; - case "I": - ViewInstructions(); - break; - case "B": - CreateNewGame(); - break; - case "Q": - Quit(0); - break; - default: - break; - } - WipeCursor("right"); - } -} -function ChooseGame() -{ - x=30; y=19 - while(1) - { - console.gotoxy(x,y); - console.cleartoeol(); - 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",maxGames); - 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(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 - { - PutMessage("\1r\1hGame #" + game_num + " is private.",x,y); - continue; - } - } - return game_num; - } - } - 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; - - Lock(gamefile); - var g=games.gameData[gameNumber]; - var fileName=g.fileName; - var lastModified=file_date(fileName); - if(lastModified>g.lastModified) games.gameData[gameNumber]=LoadGame(fileName,gameNumber,lastModified); - - if(g.status>=0) - { - GameLog("Loading game: " + gameNumber); - PlayGame(gameNumber); - } - else - { - GameLog("Viewing game info: " + gameNumber); - ViewGameInfo(gameNumber); - if(g.users[user.number]>=0) - { - var gamePlayer=g.users[user.number]; - if(g.fixedPlayers) AskRemove(gameNumber,gamePlayer); - else ChangeVote(gameNumber,user.number); - } - else JoinGame(gameNumber); - } - Unlock(gamefile); - ClearArea(19,30,4); -} -function ChangeVote(gameNumber,userNumber) -{ - console.gotoxy(30,19); - console.cleartoeol(); - var g=games.gameData[gameNumber]; - var gamePlayer=g.users[userNumber]; - - if(console.noyes("\1n\1gChange your vote?")) - { - console.gotoxy(30,20); - console.cleartoeol(); - AskRemove(gameNumber,gamePlayer); - } - else - { - var vote=g.players[gamePlayer].vote; - if(vote==1) g.players[gamePlayer].vote=0; - else g.players[gamePlayer].vote=1; - if(g.tallyVotes()) - { - g.maxPlayers=g.countPlayers(); - StartGame(gameNumber); - } - games.StoreGame(gameNumber); - } -} -function AskRemove(gameNumber,playerNumber) -{ - g=games.gameData[gameNumber]; - if(console.noyes("\1n\1gRemove yourself from this game?")); - else - { - g.removePlayer(playerNumber); - if(g.countHumanPlayers()==0) - { - file_remove(g.fileName); - } - else games.StoreGame(gameNumber); - } -} -function ViewGameInfo(gameNumber) -{ - g=games.gameData[gameNumber]; - ClearArea(3,1,14) - console.gotoxy(2,4); - console.putmsg("\1g[ \1hGAME: #" + gameNumber + " \1n\1g]\r\n"); - - if(g.maxPlayers>g.minPlayers) - console.putmsg("\1n\1g Minimum Players: \1h" + g.minPlayers + " \1n\1gMaximum: \1h" + g.maxPlayers + "\r\n"); - else - console.putmsg("\1n\1g Players Needed to Start: \1h" + g.maxPlayers + "\r\n"); - - console.putmsg("\1n\1g Players In This Game:\r\n"); - for(playerNumber=0;playerNumber<g.players.length;playerNumber++) - { - player=g.players[playerNumber]; - - console.putmsg("\1g\1h " + GetUserName(player,playerNumber)); - if(player.vote>=0) { - if(player.vote==0) vote="wait"; - else vote="start"; - if(g.maxPlayers>g.minPlayers) - console.putmsg(" \1n\1gvotes to \1h" + vote); - } - console.crlf(); - } - console.crlf(); -} -function StartGame(gameNumber) -{ - g=games.gameData[gameNumber]; - var maxPlayers=g.maxPlayers; - var players=g.players; - games.gameData[gameNumber]=new Map(columns,rows,maxPlayers,gameNumber); - games.gameData[gameNumber].players=players; - games.inProgress.push(gameNumber); - games.gameData[gameNumber].Init(); - games.gameData[gameNumber].singlePlayer=g.singlePlayer; - games.gameData[gameNumber].fileName=g.fileName; - games.gameData[gameNumber].lastModified=time(); - QueueMessage("\1r\1hGame " + gameNumber + " Initialized!",30,20); - games.gameData[gameNumber].Notify(); - games.StoreGame(gameNumber); -} -function JoinGame(gameNumber) -{ - g=games.gameData[gameNumber]; - if(console.noyes("\1n\1gJoin this game?")); - else - { - vote=GetVote(); - g.addPlayer(user.number,vote); - if(g.players.length>=g.minPlayers) - { - if(g.players.length==g.maxPlayers || - g.tallyVotes()) - { - g.maxPlayers=g.players.length; - StartGame(gameNumber); - } - } - else games.StoreGame(gameNumber); - } -} -function CreateNewGame() -{ - var minNumPlayers=-1; - var maxNumPlayers=7; - var numComputerPlayers=-1; - var singlePlayer=false; - var fixedPlayers=false; - var vote=-1; - - var x=30; var y=19 - console.gotoxy(x,y); - console.cleartoeol(); - if(console.yesno("\1n\1gBegin a new game?")) - { - ClearArea(3,1,14); - ClearArea(19,30,5); - var gameNumber=GetNextGameNumber(); - var gnum=gameNumber; - GameLog("creating new game: " + gnum); - if(gameNumber<10) gnum="0" + gnum; - var gamefile=root + gnum; - Lock(gamefile); - } - else - { - console.gotoxy(x,y); - console.cleartoeol(); - return false; - } - while(1) - { - x=2; y=4; - console.gotoxy(x,y); - console.cleartoeol(); - console.putmsg("\1n\1gEnter minimum number of players [\1h" + minPlayers + "\1n\1g-\1h" + maxPlayers + "\1n\1g] or [\1hQ\1n\1g]uit: "); - var num=console.getkeys("Q",maxPlayers); - if(num>=minPlayers && num<=maxPlayers) - { - minNumPlayers=num; - break; - } - else if(num=="Q") return false; - else PutMessage("\1r\1h Please enter a number within the given range.",x,y); - } - if(minNumPlayers<maxPlayers) { - while(1) - { - x=2; y=5; - console.gotoxy(x,y); - console.cleartoeol(); - console.putmsg("\1n\1gEnter maximum number of players [\1h" + minNumPlayers + "\1n\1g-\1h" + maxPlayers + "\1n\1g] or [\1hQ\1n\1g]uit: "); - var num=console.getkeys("Q",maxPlayers); - if(num>=minNumPlayers && num<=maxPlayers) - { - maxNumPlayers=num; - break; - } - else if(num=="Q") return false; - else PutMessage("\1r\1h Please enter a number within the given range.",x,y); - } - } - if(minNumPlayers==maxNumPlayers) fixedPlayers=true; - while(1) - { - x=2; y=6; - console.gotoxy(x,y); - console.cleartoeol(); - 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) - { - numComputerPlayers=cnum; - break; - } - 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(numComputerPlayers+1==maxNumPlayers) { - singlePlayer=true; - GameLog("single player game"); - } - else { - if(fixedPlayers) games.gameData[gameNumber].fixedPlayers=true; - else - { - console.crlf(); - vote=GetVote(); - } - } - games.gameData[gameNumber].addPlayer(user.number, vote); - 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); - - games.StoreGame(gameNumber); - QueueMessage("\1r\1hGame " + gameNumber + " Created!",30,20); - Unlock(gamefile); - return true; -} -function GetFileName(gameNumber) -{ - var num=gameNumber; - if(gameNumber<10) num="0" + gameNumber; - var gamefile=root + num; - return (game_dir + gamefile + ".DAT"); -} -function GetVote() -{ - var vote=0; - 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; - } - GameLog("got user vote: " + vote); - return vote; -} -function GetUserName(playerData,playerNumber) -{ - if(playerData.user>=0) UserName=system.username(playerData.user); - else UserName="Computer " + (playerNumber+1); - return UserName; -} -//###########################GAMEPLAY FUNCTIONS############################# -function SelectTile(gameNumber,playerNumber,attackPosition,startPosition) -{ - var g=games.gameData[gameNumber]; - if(attackPosition>=0) - { - terr=g.grid[attackPosition]; //IF A BOARD POSITION HAS BEEN SUPPLIED TO ATTACK FROM, START THERE - GameLog("attacking position supplied: " + attackPosition); - } - else if(startPosition>=0) - { - terr=g.grid[startPosition]; //IF A BOARD POSITION HAS BEEN SUPPLIED TO START FROM, START THERE - ShowSelected(terr,"\1n\1w\1h"); - GameLog("starting position supplied: " + startPosition); - } - else //OTHERWISE, START WITH THE FIRST PLAYER TERRITORY THAT IS CAPABLE OF ATTACKING - { - GameLog("no starting position supplied"); - var p=g.players[playerNumber]; - for(tile in p.territories) - { - terr=g.grid[p.territories[tile]]; - if(terr.dice>1) - { - ShowSelected(terr,"\1n\1w\1h"); - break; - } - } - } - dir=terr.location; - while(1) - { - var key=console.getkey((K_NOECHO,K_NOCRLF,K_UPPER)); - if(key=="\r" || key==undefined) - { - if(attackPosition>=0) - { - if(terr.player==playerNumber); - else - { - if(terr.location==g.grid[attackPosition].North) return terr; - if(terr.location==g.grid[attackPosition].South) return terr; - if(terr.location==g.grid[attackPosition].Northeast) return terr; - if(terr.location==g.grid[attackPosition].Northwest) return terr; - if(terr.location==g.grid[attackPosition].Southeast) return terr; - if(terr.location==g.grid[attackPosition].Southwest) return terr; - } - } - else if(terr.player==playerNumber && terr.dice>1) return terr; - } - switch(key) - { - case KEY_DOWN: - case '2': - if(g.grid[terr.South]) - dir=terr.South - break; - case KEY_UP: - case '5': - if(g.grid[terr.North]) - dir=terr.North; - break; - case '1': - if(g.grid[terr.Southwest]) - dir=terr.Southwest; - break; - case '4': - if(g.grid[terr.Northwest]) - dir=terr.Northwest; - break; - case '3': - if(g.grid[terr.Southeast]) - dir=terr.Southeast; - break; - case '6': - if(g.grid[terr.Northeast]) - dir=terr.Northeast; - break; - case KEY_LEFT: - if(g.grid[terr.Southwest]) - dir=terr.Southwest; - else if(g.grid[terr.Northwest]) - dir=terr.Northwest; - break; - case KEY_RIGHT: - if(g.grid[terr.Northeast]) - dir=terr.Northeast; - else if(g.grid[terr.Southeast]) - dir=terr.Southeast; - break; - case "Q": - terr.displayBorder(border_color); - return false; - default: - continue; - } - terr.displayBorder(border_color); - terr=g.grid[dir]; - ShowSelected(terr,"\1n\1w\1h"); - } - WipeCursor("left"); -} -function ShowSelected(selection,color) -{ - selection.displaySelected(color); - WipeCursor("left"); -} -function Attack(gameNumber,playerNumber) -{ - ClearArea(16,menuColumn,8); - AttackMessage("from which to Attack,"); - var attackFrom=SelectTile(gameNumber,playerNumber,-1,games.gameData[gameNumber].lastMapPosition); - if(attackFrom==false) return false; - - ClearArea(16,menuColumn,8); - AttackMessage("to Attack,"); - var attackTo=SelectTile(gameNumber,playerNumber,attackFrom.location); - if(attackTo==false) return false; - var tofrom=Battle(attackFrom,attackTo,gameNumber); - if(tofrom=true) games.gameData[gameNumber].lastMapPosition=attackTo.location; - else games.gameData[gameNumber].lastMapPosition=attackFrom.location; - return true; -} -function Battle(attackFrom,attackTo,gameNumber) -{ - var g=games.gameData[gameNumber]; - ClearArea(16,menuColumn,8); - ShowSelected(attackFrom,"\1n\1r\1h"); - ShowSelected(attackTo,"\1n\1r\1h"); - var totals=RollDice(attackFrom.dice,attackTo.dice); - GameLog("attackingfrom: " + attackFrom.dice + " attackingTo: " + attackTo.dice); - - var defender=attackTo.player; - var attacker=attackFrom.player; - var defending=attackTo.location; - var attacking=attackFrom.location; - if(totals[0]>totals[1]) - { - GameLog("transferring ownership of tiles"); - g.players[defender].removeTerritory(defending); //REMOVE TILE FROM DEFENDER'S LIST - g.players[attacker].territories.push(defending); //ADD TILE TO ATTACKER'S LIST - - g.players[defender].totalDice-=(attackTo.dice); - - g.grid[defending].assign(attacker,g.players[attacker]); - g.grid[defending].dice=(attackFrom.dice-1); - if(g.players[defender].territories.length==0) - { - g.EliminatePlayer(defender,g.players[attacker].user); - if(g.CheckElimination()) games.StoreGame(gameNumber); - } - } - g.grid[attacking].dice=1; - attackFrom.show(); - attackFrom.displayBorder(border_color); - attackTo.displayBorder(border_color); - attackTo.show(); -} -function EndTurn(gameNumber,pl) -{ - GameLog("###ENDING TURN"); - var g=games.gameData[gameNumber]; - var placed=g.Reinforce(pl); - ClearArea(16,menuColumn,9); - console.gotoxy(menuColumn,16); - console.putmsg("\1r\1hPlaced " + placed.length + " reinforcements"); - mswait(500); - ClearArea(16,menuColumn,9); - for(place in placed) g.grid[placed[place]].show(); - g.takingTurn=false; - games.StoreGame(gameNumber); -} - -//MAIN GAMEPLAY FUNCTION -function PlayGame(gameNumber) -{ - console.clear(); - var g=games.gameData[gameNumber]; - var userInGame; - var currentPlayer; - g.Redraw(); - - var pMenu=new Menu( "" ,1,1,GetColor("green"),GetColor("green","high")); - var pmenu_items=[ "~Take Turn" , - "~Attack" , - "~End Turn" , - "~Redraw" , - "~Quit" ]; - pMenu.add(pmenu_items); - pMenu.disable("A"); - pMenu.disable("E"); - pMenu.disable("T"); - - if(g.users[user.number]>=0) - { - userInGame=true; - currentPlayer=g.users[user.number]; - } - else - { - currentPlayer=-1; - userInGame=false; - } - ClearArea(16,menuColumn,9); - - while(1) - { - if(g.status==0) - { - pMenu.disable("A"); - pMenu.disable("E"); - pMenu.disable("T"); - pMenu.enable("Q"); - ShowWinner(g); - } - else - { - var turn=g.turnOrder[g.nextTurn]; - var humans=g.CountActiveHumans(); - while(g.players[turn].user<0 && userInGame && g.status==1 && humans>=1) - { - ClearArea(16,menuColumn,8); - //////////////////////////////////// - GameLog("####COMPUTER PLAYER TAKING TURN"); - ClearLine(1,48); - console.gotoxy(2,1); - console.putmsg("\1r\1hPlease wait. Computer player " + (turn+1) + " taking turn."); - mswait(750); - ///////////////////////////////////// - while(g.CanAttack(turn)) - { - if(TakeTurnAI(gameNumber,turn)); - else break; - } - g.takingTurn=true; - EndTurn(gameNumber,turn); - humans=g.CountActiveHumans(); - g.DisplayPlayers(); - turn=g.turnOrder[g.nextTurn]; - } - if(!g.takingTurn) - { - if(turn==currentPlayer) - { - pMenu.enable("T"); - GameLog("it is the current user's turn"); - } - else if(g.status==0) - { - pMenu.disable("A"); - pMenu.disable("E"); - pMenu.disable("T"); - pMenu.enable("Q"); - ShowWinner(g); - } - else - { - ClearArea(16,50,8); - console.gotoxy(51,16); - console.putmsg("\1r\1hIt is " + GetUserName(g.players[turn],turn) + "'s turn"); - var daysOld=g.FindDaysOld(); - var hoursOld=parseInt(daysOld*24); - if(daysOld>0) - { - console.gotoxy(51,17); - console.putmsg("\1r\1hLast turn taken " + hoursOld + " hours ago"); - } - } - } - } - pMenu.displayHorizontal(); - var cmd=console.getkey((K_NOECHO,K_NOCRLF,K_UPPER)); - WipeCursor("right"); - if(pMenu.disabled[cmd]); - else - { - switch(cmd) - { - case "T": - pMenu.disable("T"); - pMenu.disable("Q"); - g.takingTurn=true; - GameLog("######TAKING TURN"); - if(g.CanAttack(currentPlayer,-1)) - { - pMenu.enable("A"); - } - pMenu.enable("E"); - continue; - case "A": - if(Attack(gameNumber,currentPlayer)); - else - { - GameLog("player cancelled attack"); - continue; - } - g.DisplayPlayers(); - break; - case "E": - pMenu.disable("A"); - pMenu.disable("E"); - pMenu.enable("Q"); - g.takingTurn=false; - EndTurn(gameNumber,currentPlayer); - g.DisplayPlayers(); - break; - case "R": - console.clear(); - g.Redraw(); - continue; - case "Q": - return; - break; - default: - WipeCursor("left"); - continue; - } - } - } -} -function TakeTurnAI(gameNumber,playerNumber) -{ - g=games.gameData[gameNumber]; - computerPlayer=g.players[playerNumber]; - targets=[]; - bases=[]; - - for(territory in computerPlayer.territories) - { - GameLog("player " +(playerNumber+1) + " scanning territory for attack options: " + computerPlayer.territories[territory]); - base=computerPlayer.territories[territory]; - if(g.grid[base].dice>1) - { - attackOptions=g.CanAttack(playerNumber,base); - for(option in attackOptions) - { - target=attackOptions[option]; - rand=random(100); - if(rand>10 && g.grid[base].dice>g.grid[target].dice) - { - GameLog(" base:" + base + " > " + target); - targets.push(target); - bases.push(base); - } - if(g.grid[base].dice==g.grid[target].dice) - { - if(rand>50 || g.grid[target].dice==g.maxDice) - { - if(computerPlayer.territories.length>g.grid.length/6 || computerPlayer.reserve>=20) { - GameLog(" base:" + base + " > " + target); - targets.push(target); - bases.push(base); - } - else { - if(g.FindConnected(playerNumber)+computerPlayer.reserve>=8) { - GameLog(" base:" + base + " > " + target); - targets.push(target); - bases.push(base); - } - } - } - } - if(rand>90 && g.grid[base].dice==(g.grid[target].dice-1)) - { - if(computerPlayer.territories.length>g.grid.length/6) { - GameLog(" base:" + base + " >-1 " + target); - targets.push(target); - bases.push(base); - } - } - } - } - } - if(targets.length==0) return false; - if(targets.length==1 || targets.length==2) attackQuantity=targets.length; - else attackQuantity=random(targets.length-2)+2; - GameLog("targets: " + attackQuantity); - for(attackNum=0;attackNum<attackQuantity;attackNum++) - { - GameLog("computer " + (playerNumber+1) + " attacking: " + targets[attackNum] + " from: " + bases[attackNum]); - attackFrom=g.grid[bases[attackNum]]; - attackTo=g.grid[targets[attackNum]]; - if(attackFrom.dice>1 && attackTo.player!=playerNumber) Battle(attackFrom,attackTo,gameNumber); - } - return true; -} -function Quit(err) -{ - console.ctrlkey_passthru=oldpass; - bbs.sys_status&=~SS_MOFF; - file_remove(userFileName); - console.clear(); - - //TODO: CREATE A GAME EXIT ANSI SCREEN - printf("\n\r\1r\1h Thanks for playing!\r\n\r\n"); - mswait(1000); - exit(0); -} -//#######################MAIN GAME CLASS################################### -function GameStatusInfo() -{ - this.inProgress=[]; - this.notFull=[]; - this.completed=[]; - this.youWin=[]; - this.yourGames=[]; - this.yourTurn=[]; - this.eliminated=[]; - this.gameData=[]; - this.singleGames=[]; - - - //TODO: REWORK SCOREFILE CODE....BECAUSE IT SUCKS - this.StoreRankings=function() - { - sfilename=game_dir+scorefile+".DAT"; - var sfile=new File(sfilename); - if(!Locked(scorefile,true)) - { - GameLog("storing rankings in file: " + sfilename); - Lock(scorefile); - sfile.open('w+', false); - for(score in scores) //WHERE SCORE IS USER NUMBER - { - GameLog("storing score: " + scores[score].score + " for user: " + system.username(score)); - sfile.writeln(score); - sfile.writeln(scores[score].score); // scorescoer..score score score... SCORES SCORE SCORE! SCORE - sfile.writeln(scores[score].wins); - sfile.writeln(scores[score].losses); - } - sfile.close(); - Unlock(scorefile); - } - } - this.LoadRankings=function() - { - var reset=true; - while(reset) - { - reset=false; - data=[]; - sfilename=game_dir+scorefile+".DAT"; - var lfile=new File(sfilename); - if(file_exists(sfilename)) - { - GameLog("loading scores from file: " + sfilename); - lfile.open('r',true); - for(sc=0;!(lfile.eof);sc++) - { - plyr=lfile.readln(); - if(plyr==undefined || plyr=="") break; - else - { - player=parseInt(plyr); - var score=parseInt(lfile.readln()); - if(score>=pointsToWin) - { - this.ResetScores(); - reset=true; - } - var wins=parseInt(lfile.readln()); - var losses=parseInt(lfile.readln()); - data[player]={'score':score,'wins':wins,'losses':losses}; - } - } - lfile.close(); - } - else GameLog("score file: " + sfilename + " does not exist"); - } - return data; - } - - - this.ResetScores=function() - { - //TODO: ADD BULLETIN OUTPUT METHOD FOR BULLSEYE BULLETINS & HISTORICAL WINNERS LIST - } - this.LoadGame=function(gamefile,gameNumber,lastModified) - { - humans=0; - var gfile=new File(gamefile); - gfile.open('r',true); - var lgame; - - var status=parseInt(gfile.readln()); - if(status<0) - { - var minp=parseInt(gfile.readln()); - var maxp=parseInt(gfile.readln()); - lgame=new NewGame(minp,maxp,gameNumber); - lgame.lastModified=lastModified; - lgame.fileName=gamefile; - if(minp==maxp) lgame.fixedPlayers=true; - - for(nnn=0;!(gfile.eof) && nnn<maxp;nnn++) - { - userNumber=gfile.readln(); - if(userNumber==undefined || userNumber=="") break; - else - { - userNumber=parseInt(userNumber); - vote=gfile.readln(); - lgame.addPlayer(userNumber,parseInt(vote)); - if(userNumber>0) - { - if(!scores[userNumber]) - { - //INITIALIZE ALL PLAYERS WHO HAVE NO SCORE ENTRY AS ZERO POINTS ZERO WINS - scores[userNumber]={'score':0,'wins':0,'losses':0}; - } - } - } - } - gfile.close(); - return lgame; - } - var np=parseInt(gfile.readln()); - var ms=parseInt(gfile.readln()); - var nt=parseInt(gfile.readln()); - var r=parseInt(gfile.readln()); - var c=parseInt(gfile.readln()); - var pt=parseInt(gfile.readln()); - - lgame=new Map(c,r,np,gameNumber); - lgame.lastModified=lastModified; - lgame.fileName=gamefile; - lgame.mapSize=ms; - lgame.nextTurn=nt; - lgame.status=status; - lgame.playerTerr=pt; - - for(to=0;to<np;to++) - { - ttoo=parseInt(gfile.readln()); - lgame.turnOrder[to]=ttoo; - } - for(pl=0;pl<np;pl++) - { - u=parseInt(gfile.readln()); - res=parseInt(gfile.readln()); - bc=bColors[pl]; - bfc=bfColors[pl]; - fc=fColors[pl]; - - if(u>0) - { - humans++; - if(scores[u]); - else - { - scores[u]={'score':0,'wins':0,'losses':0}; - } - } - - lgame.players[pl]=new Player(u,pt); - lgame.players[pl].setColors(pl); - lgame.users[u]=pl; - lgame.players[pl].reserve=res; - } - if(humans<2) - { - lgame.singlePlayer=true; - GameLog("single player game"); - } - for(sec=0;sec<ms;sec++) - { - spot_player=parseInt(gfile.readln()); - spot_index=parseInt(gfile.readln()); - spot_dice=parseInt(gfile.readln()); - lgame.grid[spot_index]=new Territory(spot_index); - lgame.used[spot_index]=true; - lgame.grid[spot_index].assign(spot_player,lgame.players[spot_player]); - lgame.players[spot_player].territories.push(spot_index); - lgame.grid[spot_index].dice=spot_dice; - } - lgame.SetGrid(); - lgame.SetEliminated(); - lgame.CountDiceAll(); - GameLog("game " + gameNumber + " loaded"); - gfile.close(); - return lgame; - } - this.StoreGame=function(gameNumber) - { - g=this.gameData[gameNumber]; - GameLog("Storing game: " + gameNumber); - var gamefullname=GetFileName(gameNumber); - var gfile=new File(gamefullname); - gfile.open('w+',false); - - gfile.writeln(g.status); - if(g.status<0) - { - gfile.writeln(g.minPlayers); - gfile.writeln(g.maxPlayers); - for(nnn=0;nnn<g.players.length;nnn++) - { - gfile.writeln(g.players[nnn].user); - gfile.writeln(g.players[nnn].vote); - } - gfile.close(); - return; - } - gfile.writeln(g.maxPlayers); - gfile.writeln(g.mapSize); - gfile.writeln(g.nextTurn); - gfile.writeln(g.rows); - 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) - { - p=g.players[ply]; - gfile.writeln(p.user); - gfile.writeln(p.reserve); - } - for(sector in g.used) - { - location=sector; - gfile.writeln(g.grid[location].player); - gfile.writeln(g.grid[location].location); - gfile.writeln(g.grid[location].dice); - } - gfile.close(); - } - this.UpdateGames=function() - { - GameLog("updating game data"); - 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) - { - GameLog("game " + gd + " needs updating"); - this.gameData[gd]=this.LoadGame(fileName,gd,lastModified); - this.FilterData(); - } - } - else - { - GameLog("gamefile " + fileName + " deleted, removing data"); - for(gnf in this.notFull) { - if(this.notFull[gnf]==gd) { - this.notFull.splice(gnf,1); - } - } - for(yg in this.yourGames) { - if(this.yourGames[yg]==gd) { - this.yourGames.splice(yg,1); - } - } - delete this.gameData[gd]; - } - } - this.inProgress=this.SortArray(this.inProgress); - this.notFull=this.SortArray(this.notFull); - this.completed=this.SortArray(this.completed); - this.youWin=this.SortArray(this.youWin); - this.yourGames=this.SortArray(this.yourGames); - this.yourTurn=this.SortArray(this.yourTurn); - this.eliminated=this.SortArray(this.eliminated); - this.singleGames=this.SortArray(this.singleGames); - } - 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]) > parseInt(data[m+1])) - { - holder = data[m+1]; - data[m+1] = data[m]; - data[m] = holder; - } - } - } - return data; - } - this.FilterData=function() - { - this.singleGames=[]; //TODO: FIX SINGLEPLAYER GAME DISPLAY TO SHOW ONLY FOR INVOLVED PLAYER - this.inProgress=[]; - this.notFull=[]; - this.completed=[]; - this.youWin=[]; - this.yourGames=[]; - this.yourTurn=[]; - this.eliminated=[]; - - for(ggg in this.gameData) - { - var gm=this.gameData[ggg]; - 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); - this.yourGames.push(ggg); - if(gm.status==0) - { - this.completed.push(ggg); - if(gm.winner==user.number) this.youWin.push(ggg); - } - else if(gm.status>0) - { - this.inProgress.push(ggg); - if(gm.turnOrder[gm.nextTurn]==playerNumber || gm.singlePlayer) - this.yourTurn.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) - { - this.completed.push(ggg); - if(gm.winner>=0) - { - if(gm.winner==user.number) this.youWin.push(ggg); - } - } - } - } - } - } - this.LoadGames=function() - { - var open_list=directory(game_dir + root + "*.DAT"); // scan for voting topic files - GameLog("today's date: " + time()); - 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; - var gameNumber=parseInt(temp_fname.substring(4,temp_fname.indexOf(".")),10); - GameLog("game " + gameNumber + " last modified: " + daysOld + " ago"); - var lgame=this.LoadGame(open_list[lg],gameNumber,lastModified); - this.gameData[gameNumber]=lgame; - } - } - } - this.DeleteOld=function() - { - for(oldgame in this.gameData) - { - daysOld=(time()-this.gameData[oldgame].lastModified)/daySeconds; - if(this.gameData[oldgame].singlePlayer==true && daysOld>=10) - { - GameLog("removing old singleplayer game: " + this.gameData[oldgame].gameNumber) - file_remove(this.gameData[oldgame].fileName); - delete this.gameData[oldgame]; - } - } - for(completed in this.completed) - { - gm=this.completed[completed]; - daysOld=(time()-this.gameData[gm].lastModified)/daySeconds; - GameLog("game was completed " + daysOld + " days ago"); - if(this.gameData[gm].singlePlayer==true) - { - if(daysOld>=1) - { - GameLog("removing old singleplayer game: " + this.gameData[gm].gameNumber) - file_remove(this.gameData[gm].fileName); - delete this.gameData[gm]; - } - } - else - { - if(daysOld>=4) - { - GameLog("removing old game: " + gm.gameNumber) - file_remove(this.gameData[gm].fileName); - delete this.gameData[gm]; - } - } - } - } - this.SkipPlayers=function() - { - for(inp in this.inProgress) - { - gm=this.gameData[this.inProgress[inp]]; - if(gm) daysOld=(time()-gm.lastModified)/daySeconds; - GameLog("game: " + this.inProgress[inp] + " last turn was: " + daysOld + " ago"); - if(daysOld>=4 && !gm.singlePlayer) - { - nextTurnPlayer=gm.turnOrder[gm.nextTurn]; - GameLog("skipping player: " + system.username(gm.players[nextTurnPlayer].user) + " in game " + this.inProgress[inp]); - gm.Reinforce(nextTurnPlayer); - this.StoreGame(this.inProgress[inp]); - } - } - } - this.Init=function() - { - scores=games.LoadRankings(); - this.LoadGames(); - games.StoreRankings(); - this.FilterData(); - this.DeleteOld(); - this.SkipPlayers(); - } -} -function GameLog(data) -{ - logfile.writeln(data); -} - diff --git a/xtrn/dicewarz/diceroll.js b/xtrn/dicewarz/diceroll.js deleted file mode 100644 index a225cb44d26fd2f8281b499e883ccd75b8d7a92c..0000000000000000000000000000000000000000 --- a/xtrn/dicewarz/diceroll.js +++ /dev/null @@ -1,97 +0,0 @@ -//#########################DICE ROLLING FUNCTIONS############################ -function RollDice(a,b) -{ //MAIN DICE ROLLING FUNCTION - var totals=[0,0]; - var x=menuColumn; var y=16; - ClearArea(y); - - bc=console.ansi(BG_RED); - fc=console.ansi(LIGHTGRAY); - - FancyRoll(a,x,y,fc,bc); - xx=x; - yy=y; - for(aa=0;aa<a;aa++) - { - rand=(random(6)+1); - dice[rand].display(xx,yy,fc,bc); - xx+=4; - totals[0]+=rand; - } - mswait(50); - - y+=4; - bc=console.ansi(BG_LIGHTGRAY); - fc=console.ansi(RED); - - FancyRoll(b,x,y,fc,bc); - xx=x; - yy=y; - for(bb=0;bb<b;bb++) - { - rand=(random(6)+1); - totals[1]+=rand; - dice[rand].display(xx,yy,fc,bc); - xx+=4; - } - console.gotoxy((menuColumn+1),24); - console.cleartoeol(); - printf("\1n\1r\1hAttacker: " + totals[0] + "\1n Defender: " + totals[1]); - return totals; -} -function FancyRoll(qty,x,y,fc,bc) -{ //"ROLLING DICE" DISPLAY - for(roll=0;roll<8;roll++) - { - xx=x; - yy=y; - for(dr=0;dr<qty;dr++) - { - dice[random(6)+1].display(xx,yy,fc,bc); - xx+=4; - } - mswait(40); - } -} -function Die(number) -{ //DICE CLASS - this.number=number; - this.line1=" "; - this.line2=" "; - this.line3=" "; - this.dot="\xFE"; - - if(this.number==2 || this.number==3) - { - this.line1=this.dot+" "; - this.line3=" "+this.dot; - } - if(this.number==4 || this.number==5 || this.number==6) - { - this.line1=this.dot+" "+this.dot; - this.line3=this.dot+" "+this.dot; - } - if(this.number==1 || this.number==3 || this.number==5) - this.line2=" "+this.dot+" "; - if(this.number==6) - this.line2=this.dot+" "+this.dot; - this.display=function(x,y,b,f) - { - console.gotoxy(x,y); y++; - printf(f + b + this.line1); - console.gotoxy(x,y); y++; - printf(f + b + this.line2); - console.gotoxy(x,y); - printf(f + b + this.line3); - printf(blackBG); - } -} -function LoadDice() -{ //INITIALIZE SIX SIDED DICE OBJECTS - dice_=[]; - for(d=1;d<=6;d++) - { - dice_[d]=new Die(d); - } - return dice_; -} diff --git a/xtrn/dicewarz/dicewarz.bin b/xtrn/dicewarz/dicewarz.bin deleted file mode 100644 index ff85d75acc3a4a8c3fa95a86942297b3908c0b37..0000000000000000000000000000000000000000 --- a/xtrn/dicewarz/dicewarz.bin +++ /dev/null @@ -1 +0,0 @@ - �G G G �G G�G �G G G �G G�G �G G G �G G G �G G�G �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p G�G G G G G G�G G G G G G G G G�G G G�G G p p p p p p p p p p p p p p p p p p p p p p p p G G�G �G G�G G G�G �G G�G G G�G G G�G �G G�G �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p �G G�G �G G�G �G G�G �G G�G �G G�G �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p G G G G�G G G G G G�G G G G G p p p p p p p p p p p p p p p p p p p p p �G G�G �G G�G �G G�G �G G�G �G G�G �G G�G �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p G�G G p p p �G G G �G G�G �G G�G �G G G �G G G �G G�G �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p G G G G G G �G G�G G�G G G G G p p p p p p p p p p p p p p p p p p p p p p p p G G�G �G G�G �G G�G G G�G G G�G �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p G G G �G G G G G G �G G G �G G G G G G �G G�G �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p G�G G G�G G G�G G G G G G G G G�G G G�G G p p p p p p p p p p p p p p p p p p p p p p p p G G G G G�G G G G G G�G G G�G G G G �G G�G �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p �p p�p For Synchronet v 3. 14+ - [ HTTP: / / SYNCHRO. NET] B y M a t t J o h n s o n [ 2008] - T h e B R o K E N B u B B L E B B S [ HTTP: / / MDJ. ATH. CX] \ No newline at end of file diff --git a/xtrn/dicewarz/display.js b/xtrn/dicewarz/display.js deleted file mode 100644 index 076b856744305cf372ad29032b98a9655a7497bd..0000000000000000000000000000000000000000 --- a/xtrn/dicewarz/display.js +++ /dev/null @@ -1,158 +0,0 @@ -//##########################DISPLAY FUNCTIONS################################# -function ClearLine(row,toColumn) -{ - console.gotoxy(1,row); - for(col=0;col<toColumn;col++) - { - console.putmsg(" "); - } -} -function ClearArea(fromRow,fromColumn,qty) -{ - xx=fromColumn; - yy=fromRow; - for(ccc=0;ccc<qty;ccc++) - { - console.gotoxy(xx,yy); yy++; - console.cleartoeol(); - } -} -function Wrap(msg,lst) -{ - var coords=console.getxy(); - console.putmsg(msg); - console.gotoxy(30,coords.y); coords.y++; - console.putmsg("\1w\1h: "); - if(!lst.length) - { - console.crlf(); - return; - } - var bb=0; - var delimiter="\1n\1g,"; - for(aa=0;aa<lst.length;aa++) - { - if(bb>=16) - { - var check=console.getxy(); - if(check.x>77) { - console.gotoxy(32,coords.y); coords.y++; - bb=0; - } - } - if(aa==lst.length-1) delimiter=""; - console.putmsg("\1h\1g" + lst[aa] + delimiter); - bb++; - } - console.crlf(); -} -function PrintPadded(string,length,padding,justification) -{ - var padlength=length-console.strlen(string); - var newstring=string; - var padded="\1k"; - for(p=0;p<padlength;p++) padded+=padding; - if(justification=="left") newstring+=(padded); - if(justification=="right") newstring=(padded + newstring); - return(newstring); -} -function DrawLine(color,length,character) -{ - var printchar= "\xC4"; - if(character) printchar=character; - for(i=0;i<length;i++) console.putmsg(color + printchar); -} -function DrawVerticalLine(color/*, side*/) -{ - var ly=1; - var lx=menuColumn-1; - -/* OPTIONAL CODE FOR BOXING IN GAME AREA - - var topside="\xB4"; - var bottomside="\xD9"; - - //PARAMETER FOR DRAWING LEFT-HAND OR RIGHT-HAND SIDE OF BOXED IN AREA - if(side) - { - lx=1; - topside="\xC3"; - bottomside="\xC0"; - } - console.gotoxy(lx,ly); ly++ - console.putmsg(color + "\xB3"); - console.gotoxy(lx,ly); ly++ - console.putmsg(color + topside); -*/ - for(;ly<=24;ly++) - { - console.gotoxy(lx,ly); - console.putmsg(color + "\xBA"); - } -// console.gotoxy(lx,ly); -// console.putmsg(color + bottomside); -} -function WipeCursor(lr) //SEND CURSOR TO BOTTOM RIGHT CORNER OF SCREEN -{ - if(lr=="left") { side=1; row=24; } - else { side=79; row=1; } - console.gotoxy(side,row); -} -function GetColor(color, intensity) -{ //TAKE A STRING AND RETURN THE CORRESPONDING ANSI COLOR CODE - if(intensity=="high") inten="\1h"; - else inten="\1n"; - - if(color=="black") return (inten+"\1k"); - if(color=="grey") return ("\1k\1h"); - if(color=="cyan") return (inten+"\1c"); - if(color=="yellow") return (inten+"\1y"); - if(color=="green") return (inten+"\1g"); - if(color=="white") return (inten+"\1w"); - if(color=="red") return (inten+"\1r"); - if(color=="blue") return (inten+"\1b"); - if(color=="magenta") return (inten+"\1m"); - else return false; -} -function QueueMessage(message,x,y) -{ - messages.push({'msg':message,'x':x,'y':y}); -} -function DisplayMessages() -{ - for(mess in messages) { - var x=messages[mess].x; - var y=messages[mess].y; - var msg=messages[mess].msg; - - console.gotoxy(x,y+1); - console.putmsg(msg); - console.cleartoeol(); - mswait(500); - } - messages=[]; -} -function PutMessage(message,x,y) -{ - console.gotoxy(x,y+1); - console.putmsg(message); - mswait(750); - console.gotoxy(x,y+1); - console.cleartoeol(); -} -function ShowWinner(g) -{ - ClearArea(16,menuColumn,9); - console.gotoxy(51,17); - console.putmsg("\1n\1r\1hThis game was won by: "); - console.gotoxy(53,18); - if(g.winner>=0) - { - console.putmsg("\1n\1r\1h" + system.username(g.winner)); - } - else - { - console.putmsg("\1n\1r\1hcomputer player"); - } - WipeCursor("left"); -} diff --git a/xtrn/dicewarz/lock.js b/xtrn/dicewarz/lock.js deleted file mode 100644 index 9f76f65f0c038010e3ba69bc3e35335e3b07ca23..0000000000000000000000000000000000000000 --- a/xtrn/dicewarz/lock.js +++ /dev/null @@ -1,51 +0,0 @@ -function Locked(fileName,timeOut) -{ - var fname=(game_dir+fileName+".lck"); - if(file_exists(fname)) - { - if(!timeOut) return true; - var max_attempts=20; - for(attempt=0;attempt<max_attempts;attempt++) - { - if(file_exists(fname)) - { - mswait(250); - } - else return false; - } - } - else return false; - return true; -} -function Lock(fileName) -{ - var fname=(game_dir+fileName+".lck"); - var lockfile=new File(fname); - lockfile.open('we', false); - if(!lockfile.is_open) - return false; - else - { - lockfile.close(); - activeGame=fileName; - js.on_exit("Unlock(activeGame)"); - return fileName; - } -} -function Unlock(fileName) -{ - if(fileName==-1 || !fileName) return; - var fname=(game_dir+fileName+".lck"); - file_remove(fname); -} -function UnlockAll() -{ - var lockList=directory(game_dir + "*.lck"); - if(lockList.length) - { - for(lf in lockList) - { - file_remove(lockList[lf]); - } - } -} diff --git a/xtrn/dicewarz/maps.js b/xtrn/dicewarz/maps.js deleted file mode 100644 index 2d1fc8215ffb353f52cd5c407fe1cf661f9a29dd..0000000000000000000000000000000000000000 --- a/xtrn/dicewarz/maps.js +++ /dev/null @@ -1,592 +0,0 @@ -function NewGame(minp,maxp,n) -{ - this.status=-1; - this.minPlayers=minp; - this.maxPlayers=maxp; - this.gameNumber=n; - this.players=[]; - this.users=[]; - this.fixedPlayers=false; - this.singlePlayer=false; - this.lastModified=0; - this.fileName=""; - - this.addPlayer=function(userNumber,vote) - { - GameLog("adding player: " + userNumber + " vote: " + vote); - 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) - { - trueVotes++; - GameLog("player " + v + " voted to start"); - } - } - GameLog("votes to start: " + trueVotes); - GameLog("human players: " + this.countHumanPlayers()); - GameLog("total players: " + this.countPlayers()); - if(trueVotes==this.countHumanPlayers()) - { - GameLog("true votes meets number of humans"); - if(this.countPlayers()>=this.minPlayers) - { - GameLog("number of players meets minimum"); - return true; - } - } - else return false; - } - this.countHumanPlayers=function() - { - var count=0; - 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) - { - count++; - } - return count; - } - this.GetVote=function(playerNumber) - { - if(this.players[playerNumber].vote==0) return("wait"); - else return("start"); - } - this.removePlayer=function(playerNumber) - { - this.players.splice(playerNumber,1); - this.users.splice(user.number,1); - } -} -function Map(c,r,p,gn) -{ - //OBJECT VARIABLES - this.grid=[]; //ROWS * COLUMNS IN LENGTH, TRACKS GRID OCCUPANCY - this.status=1; //GAME STATUS INDICATOR - this.takingTurn=false; - this.singlePlayer=false; - this.eliminated=[]; - this.lastEliminator=-1; - this.lastMapPosition=-1; - this.winner=-1; - this.lastModified=-1; - this.fileName=""; - this.gameNumber=gn; - - this.rows=r; //MAP ROWS - this.columns=c; //MAP COLUMNS - this.maxDice=maxDice; //MAXIMUM DICE PER TERRITORY - this.maxPlayers=p; //NUMBER OF PLAYERS IN GAME - this.nextTurn=0; - - this.playerTerr=-1; //InitIALIZE TERRITORIES PER PLAYER (SET DURING Init BY this.SetMap()) - this.used=[]; //InitIALIZE USED MAP SECTORS (FOR GENERATION OF MAP) - this.turnOrder=[]; //InitIALIZE PLAYER TURN ORDER - this.players=[]; //InitIALIZE PLAYER DATA - this.users=[]; //ATTACH SYSTEM USER NUMBER TO GAME PLAYER NUMBER - - this.total=this.columns*this.rows; //TOTAL NUMBER OF POSSIBLE GRID LOCATIONS - this.mapSize=-1; //InitIALIZE MAP SIZE (NOT THE SAME AS TOTAL) - this.minTerr=6; //MINIMUM FOR RANDOM TERRITORY GENERATION PER PLAYER - this.maxTerr=11; //MAXIMUM FOR RANDOM TERRITORY GENERATION PER PLAYER - - //NOTIFY NEXT PLAYER OF TURN - //TODO: FIGURE OUT WHY THE GAME (OR THE BBS) IS SENDING DUPLICATE TELEGRAM NOTICES FOR THE SAME TURN - this.Notify= function() //NOTIFY NEXT PLAYER OF TURN - { - nextTurn=this.nextTurn; - nextTurnPlayer=this.players[this.turnOrder[nextTurn]].user; - - if(nextTurnPlayer>0 && !this.singlePlayer && nextTurnPlayer!=user.number) - { - DeliverMessage(nextTurnPlayer,this.gameNumber); - GameLog("next player notified of turn: " + system.username(nextTurnPlayer)); - } - 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) - { - GameLog("all other human players eliminated, no other players notified"); - break; - } - else if(nextTurnPlayer>0 && nextTurnPlayer!=user.number && this.status!=0) - { - DeliverMessage(nextTurnPlayer,this.gameNumber); - GameLog("skipped computer notices, next human user notified of turn: " + system.username(nextTurnPlayer)); - break; - } - } - } - } - this.FindDaysOld= function() //DETERMINE THE LAST TIME A GAME FILE WAS MODIFIED (LAST TURN TAKEN) - { - daysOld=(time()-this.lastModified)/daySeconds; - return daysOld; - } - this.CheckElimination= function() - { - GameLog("checking game elimination data"); - var numEliminated=this.eliminated.length; - var humans=this.CountActiveHumans(); - if(numEliminated==(this.maxPlayers-1) || humans==0) - { - this.status=0; - if(this.lastEliminator==(-1)) - { - if(this.singlePlayer) - { - scores[user.number].losses++; - } - GameLog("game over - computer winner"); - return true; - } - else - { //THE GAME IS OVER BECAUSE A HUMAN PLAYER WON - GameLog("game over - player winner"); - this.winner=this.lastEliminator; - this.AssignPoints(); - return true; - } - } - else return false; - } - this.CountActiveHumans= function() - { - count=0; - for(ply in this.players) - { - if(this.players[ply].user>0 && !this.players[ply].eliminated) count++; - } - return count; - } - this.AssignPoints= function() //TODO: REWORK SCORING SYSTEM COMPLETELY - { - scores=games.LoadRankings(); - - if(this.singlePlayer) - { - scores[this.winner].wins+=1; - GameLog("adding win to user " + this.winner); - } - else - { - scores[this.winner].score+=2; - GameLog("giving 2 points to user " + this.winner); - } - games.StoreRankings(); - } - this.EliminatePlayer= function(playerNumber,eliminator) - { - dead=this.players[playerNumber]; - dead.eliminated=true; - this.eliminated.push(playerNumber); - this.lastEliminator=eliminator; - if(dead.user>0) - { - //TODO: SEE SCORING SYSTEM - pointBuffer=7-this.maxPlayers; - pts=points[pointBuffer+(this.eliminated.length-1)]; - - scores=games.LoadRankings(); - scores[dead.user]+=pts; - GameLog("giving " + pts + " points to user " + dead.user + " : actual points stored " + scores[dead.user]); - games.StoreRankings(); - } - GameLog("player " + playerNumber + " eliminated"); - } - 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) - { - this.eliminated.push(elp); - this.players[elp].eliminated=true; - } - else this.lastEliminator=this.players[elp].user; - } - if(this.status==0) this.winner=this.lastEliminator; - } - this.GetNextTurn= function() - { - GameLog("assigning next turn in turn order"); - 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++; - nextPlayer=this.turnOrder[this.nextTurn]; - } - } - this.SetMap= function() - { //SET MAP SIZE - this.playerTerr=this.minTerr+random(this.maxTerr-this.minTerr); - this.mapSize=this.maxPlayers*(this.playerTerr); - } - this.DisplayGrid= function() - { //DISPLAYS THE LOCATION DATA FOR EACH COMPANY - DrawVerticalLine("\1w\1h"); - 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() - { - this.DisplayPlayers(); - this.DisplayGrid(); - this.displayGame(); - WipeCursor("left"); - } - this.displayGame= function() - { //DISPLAY EACH PLAYER'S TERRITORIES - for(ply in this.players) - { - for(ter in this.players[ply].territories) - { - territory=this.players[ply].territories[ter]; - this.grid[territory].show(); - } - } - } - this.getXY= function(place) - { //TAKE A GRID INDEX, AND RETURNS THE CORRESPONDING X AND Y COORDINATES FOR DISPLAY - x=this.map_column; - y=this.map_row; - x+=((place%this.columns)*2); - y+=(parseInt(index/this.columns)); - console.gotoxy(x,y); - return(0); - } - this.Reinforce= function(playerNumber) - { - numDice=this.FindConnected(playerNumber); - placed=this.PlaceDice(playerNumber,numDice); - if(this.winner<0) this.CheckElimination(); - this.GetNextTurn(); - if(!this.singlePlayer) this.Notify(this.gameNumber); - return placed; - } - 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 - { - GameLog("reference location provided: " + mapLocation); - options=[]; - if(this.grid[mapLocation].dice>1) - { - dirs=this.LoadDirectional(mapLocation); - for(dir in dirs) - { - current=dirs[dir]; - if(this.grid[current]) - { - if(this.grid[current].player!=playerNumber) options.push(current); - } - } - } - if(options.length) return options; - } - else //OTHERWISE, SIMPLY DETERMINE WHETHER THE PLAYER CAN ATTACK AT ALL, AND RETURN TRUE OR FALSE - { - GameLog("no reference location provided"); - 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) - { - dirs=this.LoadDirectional(currentTerritory); - for(dir in dirs) - { - current=dirs[dir]; - if(this.grid[current]) - { - if(this.grid[current].player!=playerNumber) return true; - } - } - } - } - } - return false; - } - this.LoadDirectional= function(mapLocation) - { - current=this.grid[mapLocation]; - n=current.North; - s=current.South; - nw=current.Northwest; - ne=current.Northeast; - sw=current.Southwest; - se=current.Southeast; - dirs=[n,s,nw,ne,sw,se]; - return dirs; - } - this.FindConnected= function(playerNumber) - { //SCANS ENTIRE MAP AND RETURNS THE NUMBER EQUAL TO THE PLAYER'S LARGEST CLUSTER OF CONNECTED TILES - largest_cluster=1; - terr=this.players[playerNumber].territories; - var checked=[]; - var counted=[]; - var tocheck=[]; - y=10; - for(tttt in terr) - { - count=1; - tocheck.push(terr[tttt]); - while(tocheck.length) - { - loc=tocheck.shift(); - current=this.grid[loc]; - - if(!checked[current.location]) - { - dirs=ScanProximity(current.location); - for(ddd in dirs) - { - dir=dirs[ddd]; - if(this.grid[dir] && !checked[dir]) - { - if(this.grid[dir].player==playerNumber) - { - tocheck.push(dir); - if(!counted[dir]) - { - count++; - counted[dir]=true; - } - } - } - } - checked[current.location]=true; - } - } - if(count>largest_cluster) largest_cluster=count; - } - return largest_cluster; - } - this.DisplayPlayers= function() - { //DISPLAY PLAYER INFO (RIGHT SIDE) - xxx=menuColumn; - yyy=menuRow; - for(ply=0;ply<this.maxPlayers;ply++) - { - playerNumber=this.turnOrder[ply]; - player=this.players[playerNumber]; - if(player.eliminated) { player.bColor=blackBG; player.fColor="\1n\1k\1h"; } - - console.gotoxy(xxx,yyy); yyy++; - console.putmsg(PrintPadded(player.bColor + player.fColor + " " + GetUserName(player,playerNumber) + ":",36," ", "left")); - console.gotoxy(xxx,yyy); yyy++; - console.putmsg(player.fColor + player.bColor+ " LAND: " + PrintPadded(player.fColor + player.territories.length,3," ", "right")); - console.putmsg(player.fColor + player.bColor+ " DICE: " + PrintPadded(player.fColor + player.totalDice,3," ", "right")); - console.putmsg(player.fColor + player.bColor+ " RSRV: " + PrintPadded(player.fColor + player.reserve,3," ", "right") + " "); - } - console.print(blackBG); - } - this.ShufflePlayers= function() - { //Generate TURN ORDER (this.turnOrder[]) - for(pp=0;pp<this.maxPlayers;pp++) - { - var rand=random(this.maxPlayers); - if(this.turnOrder[rand]>=0) pp--; - else this.turnOrder[rand]=pp; - } - } - this.GeneratePlayers= function() - { - for(pl=0;pl<this.maxPlayers;pl++) - { - userNumber=this.players[pl].user; - this.users[userNumber]=pl; - this.players[pl].setColors(pl); - this.players[pl].starting_territories=this.playerTerr; - } - this.ShufflePlayers(); - } - this.GenerateMap= function() - { //RANDOMLY Generate NEW LAND - var unused=[]; - for(mi=0;mi<this.total;mi++) unused.push(mi); - randa=random(unused.length); - locationa=unused[randa]; - this.grid[locationa]=new Territory(locationa); - this.used[locationa]=true; - unused.splice(randa,1); - - for(ms=1;ms<this.mapSize;ms++) - { - randb=random(unused.length); - locationb=unused[randb]; - prox=ScanProximity(locationb); - if(this.LandNearby(prox, this.used)) - { - this.grid[locationb]=new Territory(locationb); - this.used[locationb]=true; - unused.splice(randb,1); - } - else ms--; - } - var territories=[]; - for(mt in this.used) - { - territories.push(mt); - } - 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 - { - this.grid[location].assign(ply,this.players[ply]); - this.players[ply].territories.push(location); - } - } - this.PlaceDice(ply,this.playerTerr); - } - this.CountDiceAll(); - } - this.LandNearby= function(proximity) - { //CHECK IMMEDIATE AREA FOR LAND - for(px in proximity) - { - location=proximity[px]; - if(this.used[location]) - { - return true; - } - } - return false; - } - this.PlaceDice= function(playerNum, numDice) - { //RANDOMLY PLACE X NUMBER OF DICE ON PLAYER TERRITORIES - playerNumber=parseInt(playerNum); - this.CountDice(playerNumber); - toPlace=numDice; - fulldice=false; - placed=[]; - GameLog("Player " + (playerNumber+1) + " Placing " + numDice + " reinforcements"); - 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 - GameLog("all territories full"); - fulldice=true; - reserveCap=(30-this.players[playerNumber].reserve); - if(reserveCap>0) - { - GameLog("reserve: " + this.players[playerNumber].reserve + " reserve cap: " + reserveCap + " adding: " + toPlace); - if(reserveCap>=toPlace) this.players[playerNumber].reserve+=toPlace; - else this.players[playerNumber].reserve+=reserveCap; - } - return placed; - } - else if(this.grid[terr].dice<this.maxDice) - { - GameLog("dice placed on: " + terr); - this.grid[terr].dice++; - placed.push(terr); - this.players[playerNumber].totalDice++; - toPlace--; - } - else - { - GameLog("territory: " + terr + " full: " + this.grid[terr].dice); - if(this.players[playerNumber].territories.length==1) return placed; - sd--; - } - } - if(this.players[playerNumber].reserve>0) - { - GameLog("placing reserves"); - 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 - GameLog("all territories full"); - fulldice=true; - } - 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) - { - 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 - { - GameLog("all territories full"); - return placed; - } - } - } - } - } - return placed; - } - this.CountDice= function(playerNumber) - { //COUNT DICE TOTALS FOR EACH PLAYER - this.players[playerNumber].totalDice=0; - for(td in this.players[playerNumber].territories) - { - terr=this.players[playerNumber].territories[td]; - this.players[playerNumber].totalDice+=this.grid[terr].dice; - } - } - this.CountDiceAll= function() - { - for(ppp in this.players) - { - this.CountDice(ppp); - } - } - this.Init= function() - { //InitIALIZE GAME - this.SetMap(); - GameLog("map size set"); - this.GeneratePlayers(); - GameLog("players Generated"); - this.GenerateMap(this.columns, this.rows); - GameLog("map Generated"); - this.SetGrid(); - GameLog("grid set"); - } - //END METHODS -} diff --git a/xtrn/dicewarz/menu.js b/xtrn/dicewarz/menu.js deleted file mode 100644 index ea0c6545eb75ee08b21f29f743486d8ee48679fb..0000000000000000000000000000000000000000 --- a/xtrn/dicewarz/menu.js +++ /dev/null @@ -1,91 +0,0 @@ -function Menu(title,x,y,color,hkey_color) -{ //MENU CLASSES - this.title=title; - this.disabled=[]; - this.disabled_color="\1k\1h"; - this.items=[]; - var orig_x=x; - var orig_y=y; - - this.showline=function() - { - var yyyy=orig_y; - console.gotoxy(xxxx,yyyy); yyyy++; - console.cleartoeol(); - DrawLine("\1w\1h",79); console.crlf(); - } - this.display=function() - { - var yyyy=orig_y; - - var clear=5; - var cleared=0; - for(i in this.items) - { - if(!this.disabled[i]) - { - console.gotoxy(orig_x,yyyy); yyyy++; - console.putmsg(this.items[i].text); - console.cleartoeol(); - cleared++; - } - } - for(i=cleared;i<clear;i++) - { - console.gotoxy(orig_x,yyyy); yyyy++; - console.cleartoeol(); - - } - WipeCursor("right"); - } - this.disable=function(item) - { - this.disabled[item]=true; - this.items[item].Init(this.disabled_color,this.disabled_color) - } - this.enable=function(item) - { - this.disabled[item]=false; - this.items[item].Init(color,hkey_color); - } - this.add=function(items) - { - for(i=0;i<items.length;i++) - { - hotkey=this.getHotKey(items[i]); - this.items[hotkey]=new MenuItem(items[i],hotkey,color,hkey_color); - this.items[hotkey].Init(color,hkey_color); - } - } - this.displayTitle=function() - { - printf("\1h\1w" + this.title); - } - this.getHotKey=function(item) - { - keyindex=item.indexOf("~")+1; - return item.charAt(keyindex); - } - this.displayHorizontal=function() - { - ClearLine(1,48); - console.gotoxy(orig_x,orig_y); - for(i in this.items) - { - console.putmsg(this.items[i].text + " "); - } - WipeCursor("left"); - } -} -function MenuItem(item,hotkey,color,hkey_color) -{ //MENU ITEM OBJECT - this.displayColor=color; - this.keyColor=hkey_color; - this.item=item; - - this.hotkey=hotkey; - this.Init=function(color,hkey_color) - { - this.text=this.item.replace(("~" + hotkey) , (color + "[" + hkey_color + hotkey + color + "]")); - } -} \ No newline at end of file diff --git a/xtrn/dicewarz/player.js b/xtrn/dicewarz/player.js deleted file mode 100644 index 9f8526fc8ac9f19e8407068dbb8a51e343dc65b7..0000000000000000000000000000000000000000 --- a/xtrn/dicewarz/player.js +++ /dev/null @@ -1,39 +0,0 @@ -function Player(userNumber, vote) -{ - this.user=userNumber; - this.territories=[]; - this.totalDice=0; - this.bColor=""; - this.bfColor=""; - this.fColor=""; - this.starting_territories=0; - this.reserve=0; - this.eliminated=false; - this.vote=vote; - - this.setColors=function(num) - { - this.bColor=console.ansi(bColors[num]); - this.bfColor=console.ansi(bfColors[num]); - this.fColor=fColors[num]; - } - this.removeTerritory=function(territory) - { - for(rem in this.territories) - { - if(this.territories[rem]==territory) - { - this.territories.splice(rem,1); - } - } - } - this.countTerritory=function() - { - count=0; - for(tt in this.territories) - { - count++; - } - return count; - } -} diff --git a/xtrn/dicewarz/territory.js b/xtrn/dicewarz/territory.js deleted file mode 100644 index b2b2c529e46731e3f95cef52f707fb97869165c0..0000000000000000000000000000000000000000 --- a/xtrn/dicewarz/territory.js +++ /dev/null @@ -1,104 +0,0 @@ -function Territory(location) -{ - this.dice=1; - this.player=-1; - this.bColor=-1; - this.fColor=-1; - this.bfColor=-1; - this.x=-1; - this.y=-1; - this.location=location; - - this.topLeft=">"; - this.topRight="<"; - this.bottomLeft=">"; - this.bottomRight="<"; - - this.North=-1; - this.South=-1; - this.Northwest=-1; - this.Northeast=-1; - this.Southwest=-1; - this.Southeast=-1; - - //OBJECT METHODS - this.setBorder= function(data) - { //CHECK PROXIMITY AND ASSIGN BORDER CHARACTERS - proximity=ScanProximity(this.location); - this.North=proximity[0]; - this.South=proximity[1]; - this.Northwest=proximity[2]; - this.Northeast=proximity[3]; - this.Southwest=proximity[4]; - this.Southeast=proximity[5]; - if(!data[this.North]) - { - if(!data[this.Northwest]) this.topLeft="."; - if(!data[this.Northeast]) this.topRight="."; - } - if(!data[this.South]) - { - if(!data[this.Southwest]) this.bottomLeft="`"; - if(!data[this.Southeast]) this.bottomRight="'"; - } - } - this.assign= function(number,player) - { //GIVE PLAYER OWNERSHIP OF THIS TERRITORY - this.player=number; - this.bColor=player.bColor; - this.bfColor=player.bfColor; - this.fColor=player.fColor; - } - 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); - } - this.displayBorder= function(color) - { //DISPLAY THIS TERRITORY'S BORDER ON THE MAP - console.gotoxy(this.x-2, this.y); - printf(color + "<"); - console.gotoxy(this.x+4, this.y); - printf(color + ">"); - console.gotoxy(this.x-1, this.y-1); - printf(color+this.topLeft); - DrawLine(color,3); - printf(this.topRight); - console.gotoxy(this.x-1, this.y+1); - printf(color+this.bottomLeft) - DrawLine(color,3) - printf(this.bottomRight); - } - this.displaySelected= function(color) - { //DISPLAY THIS TERRITORY'S BORDER ON THE MAP - console.gotoxy(this.x-2, this.y); - printf(color + "<"); - console.gotoxy(this.x+4, this.y); - printf(color + ">"); - console.gotoxy(this.x-1, this.y-1); - printf(color+"."); - DrawLine(color,3); - printf(color+"."); - console.gotoxy(this.x-1, this.y+1); - printf(color+"`") - DrawLine(color,3) - printf(color+"'"); - } - this.getXY= function(loc,sc,sr) - { //ASSIGN DISPLAY COORDINATES FOR MAP - var startX=sc; - var startY=sr; - offset=loc%columns; - if(offset%2==1) startY++; - startX+=(offset*5); - startY+=(parseInt(loc/columns)*2); - this.x=startX; - this.y=startY; - } - - this.getXY(this.location,startColumn,startRow); -}