Poke Poker - Mini game for game corner

Started by Aioross August 24th, 2020 6:15 PM
  • 7666 views
  • 10 replies
Seen April 2nd, 2023
Posted November 18th, 2021
58 posts
5.9 Years
This is a Poker mini game meant for the game corner.



Script:
Spoiler:

######################################INSTRUCTIONS####################################
###  1. in your event call Pokepoker.new(X,Y) script command
###       X is the fee to enter the game
###       Y is the value of the blind
###     example -  Pokepoker.new(500,10) will start a game where everyone will have
###     500 chips at the start and a blind value of 10 chips
###  2. if you want npc names to never change set @randomnpcnames in line 15 to false
###  3. set @chipsvariable in line 14 to the number of an empty game variable
######################################################################################

class Pokepoker
 
  def initialize(fee,blindvalue)
    @chipsvariable = 140
    @randomnpcnames = true
    @deck = [
    [1,"Two of Spades",2,"Spades"],
    [2,"Three of Spades",3,"Spades"],
    [3,"Four of Spades",4,"Spades"],
    [4,"Five of Spades",5,"Spades"],
    [5,"Six of Spades",6,"Spades"],
    [6,"Seven of Spades",7,"Spades"],
    [7,"Eight of Spades",8,"Spades"],
    [8,"Nine of Spades",9,"Spades"],
    [9,"Ten of Spades",10,"Spades"],
    [10,"Jack of Spades",11,"Spades"],
    [11,"Queen of Spades",12,"Spades"],
    [12,"King of Spades",13,"Spades"],
    [13,"Ace of Spades",14,"Spades"],
    [14,"Two of Clubs",2,"Clubs"],
    [15,"Three of Clubs",3,"Clubs"],
    [16,"Four of Clubs",4,"Clubs"],
    [17,"Five of Clubs",5,"Clubs"],
    [18,"Six of Clubs",6,"Clubs"],
    [19,"Seven of Clubs",7,"Clubs"],
    [20,"Eight of Clubs",8,"Clubs"],
    [21,"Nine of Clubs",9,"Clubs"],
    [22,"Ten of Clubs",10,"Clubs"],
    [23,"Jack of Clubs",11,"Clubs"],
    [24,"Queen of Clubs",12,"Clubs"],
    [25,"King of Clubs",13,"Clubs"],
    [26,"Ace of Clubs",14,"Clubs"],
    [27,"Two of Diamonds",2,"Diamonds"],
    [28,"Three of Diamonds",3,"Diamonds"],
    [29,"Four of Diamonds",4,"Diamonds"],
    [30,"Five of Diamonds",5,"Diamonds"],
    [31,"Six of Diamonds",6,"Diamonds"],
    [32,"Seven of Diamonds",7,"Diamonds"],
    [33,"Eight of Diamonds",8,"Diamonds"],
    [34,"Nine of Diamonds",9,"Diamonds"],
    [35,"Ten of Diamonds",10,"Diamonds"],
    [36,"Jack of Diamonds",11,"Diamonds"],
    [37,"Queen of Diamonds",12,"Diamonds"],
    [38,"King of Diamonds",13,"Diamonds"],
    [39,"Ace of Diamonds",14,"Diamonds"] ,
    [40,"Two of Hearts",2,"Hearts"],
    [41,"Three of Hearts",3,"Hearts"],
    [42,"Four of Hearts",4,"Hearts"],
    [43,"Five of Hearts",5,"Hearts"],
    [44,"Six of Hearts",6,"Hearts"],
    [45,"Seven of Hearts",7,"Hearts"],
    [46,"Eight of Hearts",8,"Hearts"],
    [47,"Nine of Hearts",9,"Hearts"],
    [48,"Ten of Hearts",10,"Hearts"],
    [49,"Jack of Hearts",11,"Hearts"],
    [50,"Queen of Hearts",12,"Hearts"],
    [51,"King of Hearts",13,"Hearts"],
    [52,"Ace of Hearts",14,"Hearts"]      
    ]
    @pot = 0
    @playersup = 0 
    @comcard1 = 0
    @comcard2 = 0
    @comcard3 = 0
    @comcard4 = 0
    @comcard5 = 0
    @roundover = 0
    @noraise = 5
    @playing = 0 ###highlight whos playing
    @call = 0 #value to call
    @skips = 1 #value to check if round is over
    @deckp = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,
    27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52]
    @blind = 0
    @blindvalue = blindvalue
    @round = 1
    @gameover = 0
    @previousbet = 0
    @fee = fee
    @players = [[0,1,1,$Trainer.name],
                [0,1,1,"Jack"],
                [0,1,1,"Sue"],
                [0,1,1,"Chad"]]  ### #1- chips  #2- is up for round? #3- out of chips? #4- name
                
    ### if randomnpcnames is true it will randomize the player names                
    if @randomnpcnames == true
      @randomnames = ["Jack","Sue","Chad","Ted","Barney","Lily","Robin","Marshall","Jim","Jack","Tom","Sarah","Anna"]
      @randomnames.shuffle!                      
      @players[1][3] = @randomnames[0]
      @players[2][3] = @randomnames[1]
      @players[3][3] = @randomnames[2]
    end
    @players[0][0] += @fee
    @players[1][0] += @fee
    @players[2][0] += @fee
    @players[3][0] += @fee
    @player1card1 = 0
    @player1card2 = 0
    @player2card1 = 0
    @player2card2 = 0
    @player3card1 = 0
    @player3card2 = 0
    @player4card1 = 0
    @player4card2 = 0
    @decision = 0
    @raisevalue = 0
    @player1srr = 0
    @player2srr = 0
    @player3srr = 0
    @player4srr = 0     
    @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)  ## viewport for background table
    @viewport.z=1
    @viewport2=Viewport.new(0,0,Graphics.width,Graphics.height) ##viewport for stuff that goes on table
    @viewport2.z=2
    @viewport3=Viewport.new(0,0,Graphics.width,Graphics.height) ##viewport for written stuff
    @viewport3.z=3
    @viewport4=Viewport.new(0,0,Graphics.width,Graphics.height) ##viewport for the bet / raise
    @viewport4.z=4    
    @viewport5=Viewport.new(0,0,Graphics.width,Graphics.height) ##viewport for select arrow
    @viewport5.z=5
    @sprites={}
    @sprites["background"] = Sprite.new(@viewport)   
    @sprites["background"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/pokerbg") ###table sprite
    @sprites["player1border"] = Sprite.new(@viewport2)
    @sprites["player1border"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/names")
    @sprites["player1border"].x = 16
    @sprites["player1border"].y = 254
    @sprites["player2border"] = Sprite.new(@viewport2)
    @sprites["player2border"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/names")
    @sprites["player2border"].x = 16
    @sprites["player2border"].y = 16
    @sprites["player3border"] = Sprite.new(@viewport2)
    @sprites["player3border"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/names")
    @sprites["player3border"].x = 370
    @sprites["player3border"].y = 16    
    @sprites["player4border"] = Sprite.new(@viewport2)
    @sprites["player4border"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/names")
    @sprites["player4border"].x = 370
    @sprites["player4border"].y = 254
    @sprites["player1chips"] = Sprite.new(@viewport2)
    @sprites["player1chips"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/chipscounter")
    @sprites["player1chips"].x = 16
    @sprites["player1chips"].y = 210
    @sprites["player2chips"] = Sprite.new(@viewport2)
    @sprites["player2chips"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/chipscounter")
    @sprites["player2chips"].x = 16
    @sprites["player2chips"].y = 60
    @sprites["player3chips"] = Sprite.new(@viewport2)
    @sprites["player3chips"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/chipscounter")
    @sprites["player3chips"].x = 432
    @sprites["player3chips"].y = 60   
    @sprites["player4chips"] = Sprite.new(@viewport2)
    @sprites["player4chips"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/chipscounter")
    @sprites["player4chips"].x = 432
    @sprites["player4chips"].y = 210    
    @sprites["roundcounter"] = Sprite.new(@viewport2)
    @sprites["roundcounter"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/roundcounter")
    @sprites["roundcounter"].x = 203
    @sprites["roundcounter"].y = 6 
    @sprites["potcounter"] = Sprite.new(@viewport2)
    @sprites["potcounter"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/potcounter")
    @sprites["potcounter"].x = 214
    @sprites["potcounter"].y = 234
    @sprites["p1name"] = Sprite.new(@viewport3)
    @sprites["p1name"].bitmap = Bitmap.new(114,24)
    @sprites["p1name"].x = 22
    @sprites["p1name"].y = 260
    textarray = [[@players[0][3],57,0,2,Color.new(0,0,0),Color.new(255,255,255),false]]
    pbDrawTextPositions(@sprites["p1name"].bitmap,textarray)
    @sprites["p2name"] = Sprite.new(@viewport3)
    @sprites["p2name"].bitmap = Bitmap.new(114,24)
    @sprites["p2name"].x = 22
    @sprites["p2name"].y = 22
    textarray = [[@players[1][3],57,0,2,Color.new(0,0,0),Color.new(255,255,255),false]]
    pbDrawTextPositions(@sprites["p2name"].bitmap,textarray)
    @sprites["p3name"] = Sprite.new(@viewport3)
    @sprites["p3name"].bitmap = Bitmap.new(114,24)
    @sprites["p3name"].x = 376
    @sprites["p3name"].y = 22
    textarray = [[@players[2][3],57,0,2,Color.new(0,0,0),Color.new(255,255,255),false]]
    pbDrawTextPositions(@sprites["p3name"].bitmap,textarray)
    @sprites["p4name"] = Sprite.new(@viewport3)
    @sprites["p4name"].bitmap = Bitmap.new(114,24)
    @sprites["p4name"].x = 376
    @sprites["p4name"].y = 260
    textarray = [[@players[3][3],57,0,2,Color.new(0,0,0),Color.new(255,255,255),false]]
    pbDrawTextPositions(@sprites["p4name"].bitmap,textarray)
    @sprites["p1chips"] = Sprite.new(@viewport3)
    @sprites["p1chips"].bitmap = Bitmap.new(52,24)
    @sprites["p1chips"].x = 22
    @sprites["p1chips"].y = 216
    textarray = [[@players[0][0].to_s,26,0,2,Color.new(0,0,0),Color.new(240,240,200),false]]
    pbDrawTextPositions(@sprites["p1chips"].bitmap,textarray)    
    @sprites["p2chips"] = Sprite.new(@viewport3)
    @sprites["p2chips"].bitmap = Bitmap.new(52,24)
    @sprites["p2chips"].x = 22
    @sprites["p2chips"].y = 66
    textarray = [[@players[1][0].to_s,26,0,2,Color.new(0,0,0),Color.new(240,240,200),false]]
    pbDrawTextPositions(@sprites["p2chips"].bitmap,textarray)        
    @sprites["p3chips"] = Sprite.new(@viewport3)
    @sprites["p3chips"].bitmap = Bitmap.new(52,24)
    @sprites["p3chips"].x = 438
    @sprites["p3chips"].y = 66
    textarray = [[@players[2][0].to_s,26,0,2,Color.new(0,0,0),Color.new(240,240,200),false]]
    pbDrawTextPositions(@sprites["p3chips"].bitmap,textarray)            
    @sprites["p4chips"] = Sprite.new(@viewport3)
    @sprites["p4chips"].bitmap = Bitmap.new(52,24)
    @sprites["p4chips"].x = 438
    @sprites["p4chips"].y = 216
    textarray = [[@players[3][0].to_s,26,0,2,Color.new(0,0,0),Color.new(240,240,200),false]]
    pbDrawTextPositions(@sprites["p4chips"].bitmap,textarray)                
    @sprites["potvalue"] = Sprite.new(@viewport3)
    @sprites["potvalue"].bitmap = Bitmap.new(52,24)
    @sprites["potvalue"].x = 230
    @sprites["potvalue"].y = 250
    textarray = [[@pot.to_s,26,0,2,Color.new(255,255,255),Color.new(248,240,160),false]]
    pbDrawTextPositions(@sprites["potvalue"].bitmap,textarray)
    @sprites["bet"] = Sprite.new(@viewport4)
    @sprites["bet"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/betborder")
    @sprites["bet"].x = 304
    @sprites["bet"].y = 237
    @sprites["bet"].opacity = 0
    @sprites["betvalue"] = Sprite.new(@viewport5)
    @sprites["betvalue"].bitmap = Bitmap.new(52,24)
    @sprites["betvalue"].x = 310
    @sprites["betvalue"].y = 243
    textarray = [[@raisevalue.to_s,26,0,2,Color.new(0,0,0),Color.new(240,240,200),false]]
    pbDrawTextPositions(@sprites["betvalue"].bitmap,textarray)    
    @sprites["betvalue"].opacity = 0
    @select = 1
    @sprites["p1_1"] = Sprite.new(@viewport2)
    @sprites["p1_1"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")
    @sprites["p1_1"].x = 84
    @sprites["p1_1"].y = 204
    @sprites["p1_1"].opacity = 0
    @sprites["p1_2"] = Sprite.new(@viewport2)
    @sprites["p1_2"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")
    @sprites["p1_2"].x = 124
    @sprites["p1_2"].y = 204
    @sprites["p1_2"].opacity = 0
    @sprites["p2_1"] = Sprite.new(@viewport2)
    @sprites["p2_1"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")
    @sprites["p2_1"].x = 84
    @sprites["p2_1"].y = 54
    @sprites["p2_1"].opacity = 0
    @sprites["p2_2"] = Sprite.new(@viewport2)
    @sprites["p2_2"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")
    @sprites["p2_2"].x = 124
    @sprites["p2_2"].y = 54
    @sprites["p2_2"].opacity = 0
    @sprites["p3_1"] = Sprite.new(@viewport2)
    @sprites["p3_1"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")
    @sprites["p3_1"].x = 356
    @sprites["p3_1"].y = 54
    @sprites["p3_1"].opacity = 0
    @sprites["p3_2"] = Sprite.new(@viewport2)
    @sprites["p3_2"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")
    @sprites["p3_2"].x = 396
    @sprites["p3_2"].y = 54
    @sprites["p3_2"].opacity = 0
    @sprites["p4_1"] = Sprite.new(@viewport2)
    @sprites["p4_1"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")
    @sprites["p4_1"].x = 356
    @sprites["p4_1"].y = 204
    @sprites["p4_1"].opacity = 0
    @sprites["p4_2"] = Sprite.new(@viewport2)
    @sprites["p4_2"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")
    @sprites["p4_2"].x = 396
    @sprites["p4_2"].y = 204
    @sprites["p4_2"].opacity = 0
    @sprites["c1"] = Sprite.new(@viewport2)
    @sprites["c1"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")
    @sprites["c1"].x = 160
    @sprites["c1"].y = 129
    @sprites["c1"].opacity = 0
    @sprites["c2"] = Sprite.new(@viewport2)
    @sprites["c2"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")
    @sprites["c2"].x = 200
    @sprites["c2"].y = 129
    @sprites["c2"].opacity = 0
    @sprites["c3"] = Sprite.new(@viewport2)
    @sprites["c3"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")
    @sprites["c3"].x = 240
    @sprites["c3"].y = 129
    @sprites["c3"].opacity = 0
    @sprites["c4"] = Sprite.new(@viewport2)
    @sprites["c4"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")
    @sprites["c4"].x = 280
    @sprites["c4"].y = 129
    @sprites["c4"].opacity = 0
    @sprites["c5"] = Sprite.new(@viewport2)
    @sprites["c5"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")
    @sprites["c5"].x = 320
    @sprites["c5"].y = 129
    @sprites["c5"].opacity = 0
    @sprites["sq1"] = Sprite.new(@viewport2)
    @sprites["sq1"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/redsq")
    @sprites["sq1"].x = 210
    @sprites["sq1"].y = 46
    @sprites["sq2"] = Sprite.new(@viewport2)
    @sprites["sq2"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/redsq")
    @sprites["sq2"].x = 234
    @sprites["sq2"].y = 46
    @sprites["sq3"] = Sprite.new(@viewport2)
    @sprites["sq3"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/redsq")
    @sprites["sq3"].x = 258
    @sprites["sq3"].y = 46
    @sprites["sq4"] = Sprite.new(@viewport2)
    @sprites["sq4"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/redsq")
    @sprites["sq4"].x = 282
    @sprites["sq4"].y = 46
    @sprites["betui"] = Sprite.new(@viewport4)
    @sprites["betui"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/betui")
    @sprites["betui"].x = 370
    @sprites["betui"].y = 66
    @sprites["betui"].opacity = 0
    @sprites["selectarrow"] = Sprite.new(@viewport5)
    @sprites["selectarrow"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/selectarrow")
    @sprites["selectarrow"].x = 384
    @sprites["selectarrow"].y = 86
    @sprites["selectarrow"].opacity = 0    
    pbpokepokerstart
  end 
  
  ### anounces round number
  def roundannouncement
    if @round == 1
      @sprites["round"] = Sprite.new(@viewport3)
      @sprites["round"].bitmap = Bitmap.new(94,24)
      @sprites["round"].x = 209
      @sprites["round"].y = 12
      @sprites["round"].opacity = 0
      roundtext = "Round " + @round.to_s
      textarray = [[roundtext,47,0,2,Color.new(0,0,0),Color.new(255,255,255),false]]
      pbDrawTextPositions(@sprites["round"].bitmap,textarray)
      10.times do
        @sprites["round"].opacity += 25.5
        pbWait(1)
      end
    else
      10.times do
        @sprites["round"].opacity -= 25.5
        pbWait(1)
      end
      @sprites["round"].bitmap.clear
      @sprites["round"].opacity = 0
      roundtext = "Round " + @round.to_s
      textarray = [[roundtext,47,0,2,Color.new(0,0,0),Color.new(255,255,255),false]]
      pbDrawTextPositions(@sprites["round"].bitmap,textarray)
      10.times do
        @sprites["round"].opacity += 25.5
        pbWait(1)
      end      
    end
    Kernel.pbMessage("Round #{@round} has started.")
  end
 
  ### 2 cards to each player whos in game [i][2] == 1
  ### defines card values (even the face down cards)
  ### reveals player cards
  ### turns on 1st greensq to signal pre flop phase
 def drawcards
    @sprites["sq1"].bitmap.clear
    @sprites["sq1"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/greensq")
   if @players[0][2] > 0
    @sprites["p1_1"].opacity = 255
    pbWait(8)
    @sprites["p1_2"].opacity = 255
    pbWait(16)
  end
  if @players[1][2] > 0
    @sprites["p2_1"].opacity = 255
    pbWait(8)
    @sprites["p2_2"].opacity = 255
    pbWait(16)
  end
  if @players[2][2] > 0
    @sprites["p3_1"].opacity = 255
    pbWait(8)
    @sprites["p3_2"].opacity = 255
    pbWait(16)
  end
  if @players[3][2] > 0
    @sprites["p4_1"].opacity = 255
    pbWait(8)
    @sprites["p4_2"].opacity = 255
    pbWait(16)
  end 
    pbWait(20)
    #player 1cards
    if @players[0][2] > 0
    randomcard = rand(@deckp.length)
    randomcardvalue = @deckp[randomcard]
    @deckp.delete_at(randomcard)
    @player1card1 = @deck[randomcardvalue-1]
    randomcard = rand(@deckp.length)
    randomcardvalue = @deckp[randomcard]
    @deckp.delete_at(randomcard)
    @player1card2 = @deck[randomcardvalue-1]
    end
    ##player2 cards
    if @players[1][2] > 0
    randomcard = rand(@deckp.length)
    randomcardvalue = @deckp[randomcard]
    @deckp.delete_at(randomcard)
    @player2card1 = @deck[randomcardvalue-1]
    randomcard = rand(@deckp.length)
    randomcardvalue = @deckp[randomcard]
    @deckp.delete_at(randomcard)
    @player2card2 = @deck[randomcardvalue-1]
    end
    ##player3cards
    if @players[2][2] > 0
    randomcard = rand(@deckp.length)
    randomcardvalue = @deckp[randomcard]
    @deckp.delete_at(randomcard)
    @player3card1 = @deck[randomcardvalue-1]
    randomcard = rand(@deckp.length)
    randomcardvalue = @deckp[randomcard]
    @deckp.delete_at(randomcard)
    @player3card2 = @deck[randomcardvalue-1]
    end
    #player 4 cards
    if @players[3][2] > 0
    randomcard = rand(@deckp.length)
    randomcardvalue = @deckp[randomcard]
    @deckp.delete_at(randomcard)
    @player4card1 = @deck[randomcardvalue-1]
    randomcard = rand(@deckp.length)
    randomcardvalue = @deckp[randomcard]
    @deckp.delete_at(randomcard)
    @player4card2 = @deck[randomcardvalue-1]
    end
    #### com cards
    randomcard = rand(@deckp.length)
    randomcardvalue = @deckp[randomcard]
    @deckp.delete_at(randomcard)
    @comcard1 = @deck[randomcardvalue-1]
    randomcard = rand(@deckp.length)
    randomcardvalue = @deckp[randomcard]
    @deckp.delete_at(randomcard)
    @comcard2 = @deck[randomcardvalue-1]
    randomcard = rand(@deckp.length)
    randomcardvalue = @deckp[randomcard]
    @deckp.delete_at(randomcard)
    @comcard3 = @deck[randomcardvalue-1]
    randomcard = rand(@deckp.length)
    randomcardvalue = @deckp[randomcard]
    @deckp.delete_at(randomcard)
    @comcard4 = @deck[randomcardvalue-1] 
    randomcard = rand(@deckp.length)
    randomcardvalue = @deckp[randomcard]
    @deckp.delete_at(randomcard)
    @comcard5 = @deck[randomcardvalue-1]      
    ###chooses a random number from @deckp and assigns the respective card value
    ###the chosen number is the nremoved from @deckp in order to avoid repeated cards
    @sprites["p1_1"].opacity = 0
    @sprites["p1_1"].bitmap.clear
    @sprites["p1_1"].bitmap = Bitmap.new(sprintf("Graphics/Pictures/Pokepoker/card%d",@player1card1[0]))
    pbWait(8)
    @sprites["p1_1"].opacity = 255
    pbWait(8)
    @sprites["p1_2"].opacity = 0
    @sprites["p1_2"].bitmap.clear
    @sprites["p1_2"].bitmap = Bitmap.new(sprintf("Graphics/Pictures/Pokepoker/card%d",@player1card2[0]))
    pbWait(8)
    @sprites["p1_2"].opacity = 255
    pbWait(8)
  end ## drawcards
 
  ## auxiliary function that handles the whole call raise fold shenanigans
  ## it also sets the @playing that will control who plays next, it will
  ## select the 1st available player to left - pre flop only
  def fsubround
    @previousbet = @blindvalue if @previousbet == 0   ##in pre flop (fsubround) previous bet is blind value
    while @players[@playing%4][1] == 0                ## selects who plays next (skips if player folded)
      @playing += 1
    end
    
    if @playing >= 4      ##if its higher then 3, 4=0, 5=1, 6=2, 7=3
      @playing -= 4
    end
    
    case @playing
    when 0 #player turn
      action = 0                 ##action loop is to make betscene compatible with cancel
      while action == 0
      cmds = [_INTL("Call"),_INTL("Raise"),_INTL("Fold"),_INTL("Quit Game")]
      cmd = Kernel.pbMessage(_INTL("What will you do?"),cmds)
        if cmd == 0
          Kernel.pbMessage("#{@players[0][3]} calls.")
          if @player1bet != @previousbet    ##if there was changes to player coins with this call
            @players[0][0]-= (@previousbet - @player1bet)  ##update player coins
            updatechips(0)  ##update chips bitmap
            @pot += (@previousbet - @player1bet) ##update pot value
            updatepot  ##update pot bitmap
          end
          @noraise -= 1  ##@noraise keeps track of when there's 4 (assigned by playersup) calls to move to next phase
          @player1bet += (@previousbet - @player1bet) ##adds the changed amount to the player1bet 
          action = 1   ##breaks action loop -> next player turn
        elsif cmd == 1
          pbPlayDecisionSE()
          betscene
          if @raisevalue > 0  ##there's a raise
            raise = @raisevalue  
            @pot += (@previousbet - @player1bet + raise) 
            updatepot
            @players[0][0]-= (@previousbet - @player1bet + raise) ##reduces player chips
            updatechips(0)
            @noraise = @playersup  ##since there was a raise the @noraise counter is reseted with @playersup
            @player1bet += (@previousbet - @player1bet + raise) ##increases bet, accounts for the diference player would pay to call
            @previousbet += raise ##increases player bet
            @player1srr += 1      ##signals that there was a raise this sub round -> used for npc ai     
            action = 1
          end
        elsif cmd == 2
          Kernel.pbMessage("#{@players[0][3]} folds.")
          @players[0][1]=0     ## signals the fold, won't take action this round
          @noraise -=1         
          @playersup-=1        ## reduces 1 from playersup, requiring 1 less call to skip to next sub round
          updatefold(0)
          action = 1
        elsif cmd == 3
          Kernel.pbMessage("Oh, it seems #{@players[0][3]} wishes to quit the game.")
          Kernel.pbMessage("You may leave the table after this round, come back anytime.")
          @gameover = 1      ##will break scene loop and exit game on next chance
          @players[0][1] = 0 
          @noraise -=1
          @playersup -=1
          action = 1
          $game_variables[@chipsvariable] = @players[0][0]          ##reward
        end
          @playing=3 if @players[3][1]==1   ##if 1st and 2nd players to the left aren't up it's the 3rd player turn next
          @playing=2 if @players[2][1]==1   ##if 1st player to the left isn't up it's 2nd player turn next
          @playing=1 if @players[1][1]==1   ##if player to the left is up, its his turn next, overwrites previous decisions
      end
          
      when 1 #player2turn
        @decision = npcmove(1)      ##npcmove(X) decides the npc action
        case @decision
        when 1
          Kernel.pbMessage("#{@players[1][3]} calls.")  ##in pre flop u can't check, only call.
          if @player2bet != @previousbet
            @players[1][0]-= (@previousbet - @player2bet)
            updatechips(1)
            @pot += (@previousbet - @player2bet)
            updatepot
          end
        @noraise -=1
        @player2bet += (@previousbet - @player2bet)
        when 2
          rscore = goodcard(1)          ##goodcard(X) judges how good npc hand is, stores 1 2 or 3 in rscore
          b = rand(100)+1
          r1 = 0
          r2 = 0
          lowestchip = []
          for i in 0...4
            respectivebet = @player1bet if i == 0
            respectivebet = @player2bet if i == 1
            respectivebet = @player3bet if i == 2
            respectivebet = @player4bet if i == 3
            @players[i][1] == 1 ? lowestchip.push(@players[i][0]) : lowestchip.push(99999)
            lowestchip[i] -= (@previousbet - respectivebet)
          end
          lowestchip.sort!
          ## this determines the lowest effective money any player has to not overbet lowestchip[0]
          ## it reduces the money players would need to call from their effective money to ensure
          ## no one will get negative chips from calling
          r1 = 1 if (@previousbet*3) <= lowestchip[0]   
          r2 = 1 if (@previousbet*4) <= lowestchip[0]
          ## there's 3 types of raise, minimum, medium and high, if r1 = 1 it's okay to make medium bet
          ## if r2 = 1 its okay to make high bet
          case rscore
          ### these chunks decide how high the npc will bet
          when 0
            if b<=100 && b>95 && r2 == 1
              @raisevalue = (4*@previousbet)
            elsif  b<=95 && b>80 && r1 == 1
              @raisevalue = (3*@previousbet)
            elsif b<=100 && b>95 && r2 == 0 && r1 == 1
              @raisevalue = (3*@previousbet)
            elsif b<=95 && b>80 && r1 == 0
              @raisevalue = (2*@previousbet)
            elsif b<=80
              @raisevalue = (2*@previousbet)
            else
              @raisevalue = (2*@previousbet)
            end          
          when 1
            if b<=100 && b>95 && r2 == 1
              @raisevalue = (4*@previousbet)
            elsif  b<=95 && b>75 && r1 == 1
              @raisevalue = (3*@previousbet)
            elsif b<=100 && b>95 && r2 == 0 && r1 == 1
              @raisevalue = (3*@previousbet)
            elsif b<=95 && b>75 && r1 == 0
              @raisevalue = (2*@previousbet)
            elsif b<=75
              @raisevalue = (2*@previousbet)
            else
              @raisevalue = (2*@previousbet)
            end              
          when 2
            if b<=100 && b>90 && r2 == 1
              @raisevalue = (4*@previousbet)
            elsif  b<=90 && b>65 && r1 == 1
              @raisevalue = (3*@previousbet)
            elsif b<=100 && b>90 && r2 == 0 && r1 == 1
              @raisevalue = (3*@previousbet)
            elsif b<=90 && b>65 && r1 == 0
              @raisevalue = (2*@previousbet)
            elsif b<=65
              @raisevalue = (2*@previousbet)
            else
              @raisevalue = (2*@previousbet)
            end              
          end
          sbet = @previousbet*3
          if (@previousbet - @player2bet + sbet) > @players[1][0]
            @raisevalue = (2*@previousbet)            
          end
          if @raisevalue > lowestchip[0]                                                     
            @raisevalue = (2*@previousbet) 
          end
          ### the last 7 lines are a double check, if npc was gonna bet more then
          ### other plays can call it would default to the min raise which is defined elsewhere
          ### to be a safe thing to do - other players can call without geting negative chips
          ### the final 3 is an extra layer of security vs raising too much
          raise = @raisevalue
          Kernel.pbMessage("#{@players[1][3]} raises #{@raisevalue} chips.")
          @pot += (@previousbet - @player2bet + raise)
          updatepot
          @players[1][0]-= (@previousbet - @player2bet + raise)
          updatechips(1)
          @noraise = @playersup
          @player2bet += (@previousbet - @player2bet + raise)
          @previousbet += raise
          @player2srr += 1
        when 3
          Kernel.pbMessage("#{@players[1][3]} folds.")
          @players[1][1]=0
          @noraise -=1
          @playersup-=1
          updatefold(1)
        end
          @playing=0 if @players[0][1]==1
          @playing=3 if @players[3][1]==1
          @playing=2 if @players[2][1]==1
      when 2 #player3turn
        @decision = npcmove(2)
        case @decision
        when 1
          Kernel.pbMessage("#{@players[2][3]} calls.")
          if @player3bet != @previousbet
            @players[2][0]-= (@previousbet - @player3bet)
            updatechips(2)
            @pot += (@previousbet - @player3bet)
            updatepot
          end
        @noraise -=1
        @player3bet += (@previousbet - @player3bet)
        when 2
          rscore = goodcard(2)
          b = rand(100)+1
          r1 = 0
          r2 = 0
          lowestchip = []
          for i in 0...4
            respectivebet = @player1bet if i == 0
            respectivebet = @player2bet if i == 1
            respectivebet = @player3bet if i == 2
            respectivebet = @player4bet if i == 3
            @players[i][1] == 1 ? lowestchip.push(@players[i][0]) : lowestchip.push(99999)
            lowestchip[i] -= (@previousbet - respectivebet)
          end
          lowestchip.sort!
          r1 = 1 if (@previousbet*3) <= lowestchip[0]
          r2 = 1 if (@previousbet*4) <= lowestchip[0]
          case rscore
          when 0
            if b<=100 && b>95 && r2 == 1
              @raisevalue = (4*@previousbet)
            elsif  b<=95 && b>80 && r1 == 1
              @raisevalue = (3*@previousbet)
            elsif b<=100 && b>95 && r2 == 0 && r1 == 1
              @raisevalue = (3*@previousbet)
            elsif b<=95 && b>80 && r1 == 0
              @raisevalue = (2*@previousbet)
            elsif b<=80
              @raisevalue = (2*@previousbet)
            else
              @raisevalue = (2*@previousbet)
            end          
          when 1
            if b<=100 && b>95 && r2 == 1
              @raisevalue = (4*@previousbet)
            elsif  b<=95 && b>75 && r1 == 1
              @raisevalue = (3*@previousbet)
            elsif b<=100 && b>95 && r2 == 0 && r1 == 1
              @raisevalue = (3*@previousbet)
            elsif b<=95 && b>75 && r1 == 0
              @raisevalue = (2*@previousbet)
            elsif b<=75
              @raisevalue = (2*@previousbet)
            else
              @raisevalue = (2*@previousbet)
            end              
          when 2
            if b<=100 && b>90 && r2 == 1
              @raisevalue = (4*@previousbet)
            elsif  b<=90 && b>65 && r1 == 1
              @raisevalue = (3*@previousbet)
            elsif b<=100 && b>90 && r2 == 0 && r1 == 1
              @raisevalue = (3*@previousbet)
            elsif b<=90 && b>65 && r1 == 0
              @raisevalue = (2*@previousbet)
            elsif b<=65
              @raisevalue = (2*@previousbet)
            else
              @raisevalue = (2*@previousbet)
            end              
          end
          sbet = @previousbet*3
          if (@previousbet - @player3bet + sbet) > @players[2][0]
            @raisevalue = (2*@previousbet)            
          end
          if @raisevalue > lowestchip[0]                                                     
            @raisevalue = (2*@previousbet) 
          end          
          raise = @raisevalue
          Kernel.pbMessage("#{@players[2][3]} raises #{@raisevalue} chips.")          
          @pot += (@previousbet - @player3bet + raise)
          updatepot
          @players[2][0]-= (@previousbet - @player3bet + raise)
          updatechips(2)
          @noraise = @playersup
          @player3bet += (@previousbet - @player3bet + raise)
          @previousbet += raise
          @player3srr += 1
        when 3
          Kernel.pbMessage("#{@players[2][3]} folds.")
          @players[2][1]=0
          @noraise -=1
          @playersup-=1
          updatefold(2)
        end
        @playing=1 if @players[1][1]==1
        @playing=0 if @players[0][1]==1
        @playing=3 if @players[3][1]==1        
        
      when 3 #player4turn
        @decision = npcmove(3)
        case @decision
        when 1
          Kernel.pbMessage("#{@players[3][3]} calls.")
          if @player4bet != @previousbet
            @players[3][0]-= (@previousbet - @player4bet)
            updatechips(3)
            @pot += (@previousbet - @player4bet)
            updatepot
          end
        @noraise -=1
        @player4bet += (@previousbet - @player4bet)
        when 2 
          rscore = goodcard(3)
          b = rand(100)+1
          r1 = 0
          r2 = 0
          lowestchip = []
          for i in 0...4
            respectivebet = @player1bet if i == 0
            respectivebet = @player2bet if i == 1
            respectivebet = @player3bet if i == 2
            respectivebet = @player4bet if i == 3
            @players[i][1] == 1 ? lowestchip.push(@players[i][0]) : lowestchip.push(99999)
            lowestchip[i] -= (@previousbet - respectivebet)
          end
          lowestchip.sort!
          r1 = 1 if (@previousbet*3) <= lowestchip[0]
          r2 = 1 if (@previousbet*4) <= lowestchip[0]
          case rscore
          when 0
            if b<=100 && b>95 && r2 == 1
              @raisevalue = (4*@previousbet)
            elsif  b<=95 && b>80 && r1 == 1
              @raisevalue = (3*@previousbet)
            elsif b<=100 && b>95 && r2 == 0 && r1 == 1
              @raisevalue = (3*@previousbet)
            elsif b<=95 && b>80 && r1 == 0
              @raisevalue = (2*@previousbet)
            elsif b<=80
              @raisevalue = (2*@previousbet)
            else
              @raisevalue = (2*@previousbet)
            end          
          when 1
            if b<=100 && b>95 && r2 == 1
              @raisevalue = (4*@previousbet)
            elsif  b<=95 && b>75 && r1 == 1
              @raisevalue = (3*@previousbet)
            elsif b<=100 && b>95 && r2 == 0 && r1 == 1
              @raisevalue = (3*@previousbet)
            elsif b<=95 && b>75 && r1 == 0
              @raisevalue = (2*@previousbet)
            elsif b<=75
              @raisevalue = (2*@previousbet)
            else
              @raisevalue = (2*@previousbet)
            end              
          when 2
            if b<=100 && b>90 && r2 == 1
              @raisevalue = (4*@previousbet)
            elsif  b<=90 && b>65 && r1 == 1
              @raisevalue = (3*@previousbet)
            elsif b<=100 && b>90 && r2 == 0 && r1 == 1
              @raisevalue = (3*@previousbet)
            elsif b<=90 && b>65 && r1 == 0
              @raisevalue = (2*@previousbet)
            elsif b<=65
              @raisevalue = (2*@previousbet)
            else
              @raisevalue = (2*@previousbet)
            end              
          end
          sbet = @previousbet*3
          if (@previousbet - @player4bet + sbet) > @players[3][0]
            @raisevalue = (2*@previousbet)            
          end
          if @raisevalue > lowestchip[0]                                                     
            @raisevalue = (2*@previousbet) 
          end
          raise = @raisevalue
          Kernel.pbMessage("#{@players[3][3]} raises #{@raisevalue} chips.")                    
          @pot += (@previousbet - @player4bet + raise)
          updatepot
          @players[3][0]-= (@previousbet - @player4bet + raise)
          updatechips(3)
          @noraise = @playersup
          @player4bet += (@previousbet - @player4bet + raise)
          @previousbet += raise                    
          @player4srr += 1
        when 3
          Kernel.pbMessage("#{@players[3][3]} folds.")
          @players[3][1]=0
          @noraise -=1
          @playersup-=1
          updatefold(3)
        end
        @playing=2 if @players[2][1]==1
        @playing=1 if @players[1][1]==1
        @playing=0 if @players[0][1]==1        
      end
  end

  def osubround     ##fsubround -> pre flop / osubround -> others
    while @players[@playing%4][1] == 0
      @playing += 1
    end 
    if @playing >= 4
      @playing -= 4
    end
    case @playing
    when 0
      action = 0
      while action == 0
      if @previousbet == 0 ##turns call into check and raise into bet 
        cmds = [_INTL("Check"),_INTL("Bet"),_INTL("Fold"),_INTL("Quit Game")]
      else
        cmds = [_INTL("Call"),_INTL("Raise"),_INTL("Fold"),_INTL("Quit Game")]
      end
      cmd = Kernel.pbMessage(_INTL("What will you do?"),cmds)
        if cmd == 0
          @previousbet == 0 ? Kernel.pbMessage("#{@players[0][3]} checks.") : Kernel.pbMessage("#{@players[0][3]} calls.")
          if @player1bet != @previousbet
            @players[0][0]-= (@previousbet - @player1bet)
            updatechips(0)
            @pot += (@previousbet - @player1bet)
            updatepot
            @player1bet += (@previousbet - @player1bet)
          end
          @noraise -= 1
          action = 1
        elsif cmd == 1
          pbPlayDecisionSE()
          betscene
          if @raisevalue > 0
            raise = @raisevalue
            @pot += (@previousbet - @player1bet + raise)
            updatepot
            @players[0][0]-= (@previousbet - @player1bet + raise)
            updatechips(0)
            @noraise = @playersup
            @player1bet += (@previousbet - @player1bet + raise)
            @previousbet += raise
            @player1srr += 1            
            action = 1
          end          
        elsif cmd == 2
          Kernel.pbMessage("#{@players[0][3]} folds.")
          @players[0][1]=0
          @noraise -=1
          @playersup-=1
          updatefold(0)
          action = 1
        elsif cmd == 3
          Kernel.pbMessage("Oh, it seems #{@players[0][3]} wishes to quit the game.")
          Kernel.pbMessage("You may leave the table after this round, come back anytime.")          
          @gameover = 1
          @players[0][1] = 0
          @noraise -=1
          @playersup -=1
          $game_variables[@chipsvariable] = @players[0][0]    ##reward
          action = 1
        end
          @playing=3 if @players[3][1]==1
          @playing=2 if @players[2][1]==1
          @playing=1 if @players[1][1]==1      
      end
    when 1
      @decision = npcmove(1)
      case @decision
      when 1
        @previousbet == 0 ? Kernel.pbMessage("#{@players[1][3]} checks.") : Kernel.pbMessage("#{@players[1][3]} calls.")
        if @player2bet != @previousbet
          @players[1][0]-= (@previousbet - @player2bet)
          updatechips(1)
          @pot += (@previousbet - @player2bet)
          updatepot
          @player2bet += (@previousbet - @player2bet)
        end
        @noraise -=1
      when 2
          rscore = goodcard(1)
          b = rand(100)+1
          r1 = 0
          r2 = 0
          lowestchip = []
          for i in 0...4
            respectivebet = @player1bet if i == 0
            respectivebet = @player2bet if i == 1
            respectivebet = @player3bet if i == 2
            respectivebet = @player4bet if i == 3
            @players[i][1] == 1 ? lowestchip.push(@players[i][0]) : lowestchip.push(99999)
            lowestchip[i] -= (@previousbet - respectivebet)
          end
          lowestchip.sort!
          if @previousbet == 0
            r1 = 1 if (@blindvalue*3) <= lowestchip[0]
            r2 = 1 if (@blindvalue*5) <= lowestchip[0]
          else
            r1 = 1 if (@previousbet*3) <= lowestchip[0]
            r2 = 1 if (@previousbet*4) <= lowestchip[0]
          end
          case rscore
          when 0
            if b<=100 && b>95 && r2 == 1
              @previousbet == 0 ? @raisevalue = (5*@blindvalue) : @raisevalue = (4*@previousbet)
            elsif  b<=95 && b>80 && r1 == 1
              @previousbet == 0 ? @raisevalue = (3*@blindvalue) : @raisevalue = (3*@previousbet)
            elsif b<=100 && b>95 && r2 == 0 && r1 == 1
              @previousbet == 0 ? @raisevalue = (3*@blindvalue) : @raisevalue = (3*@previousbet)
            elsif b<=95 && b>80 && r1 == 0
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            elsif b<=80
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            else
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            end          
          when 1
            if b<=100 && b>95 && r2 == 1
              @previousbet == 0 ? @raisevalue = (5*@blindvalue) : @raisevalue = (4*@previousbet)
            elsif  b<=95 && b>75 && r1 == 1
              @previousbet == 0 ? @raisevalue = (3*@blindvalue) : @raisevalue = (3*@previousbet)
            elsif b<=100 && b>95 && r2 == 0 && r1 == 1
              @previousbet == 0 ? @raisevalue = (3*@blindvalue) : @raisevalue = (3*@previousbet)
            elsif b<=95 && b>75 && r1 == 0
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            elsif b<=75
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            else
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            end              
          when 2
            if b<=100 && b>90 && r2 == 1
              @previousbet == 0 ? @raisevalue = (5*@blindvalue) : @raisevalue = (4*@previousbet)
            elsif  b<=90 && b>65 && r1 == 1
              @previousbet == 0 ? @raisevalue = (3*@blindvalue) : @raisevalue = (3*@previousbet)
            elsif b<=100 && b>90 && r2 == 0 && r1 == 1
              @previousbet == 0 ? @raisevalue = (3*@blindvalue) : @raisevalue = (3*@previousbet)
            elsif b<=90 && b>65 && r1 == 0
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            elsif b<=65
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            else
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            end
          end
          @previousbet == 0 ? sbet = @blindvalue*2 : sbet = @previousbet*3
          if (@previousbet - @player2bet + sbet) > @players[1][0]
            @previousbet == 0 ? @raisevalue = (@blindvalue) : @raisevalue = (2*@previousbet)            
          end
          if @raisevalue > lowestchip[0]                                                     
            @previousbet == 0 ? @raisevalue = (@blindvalue) : @raisevalue = (2*@previousbet) 
          end
          raise = @raisevalue
          if @previousbet == 0
            Kernel.pbMessage("#{@players[1][3]} bets #{@raisevalue} chips.")
          else
            Kernel.pbMessage("#{@players[1][3]} raises #{@raisevalue} chips.")
          end
          @pot += (@previousbet - @player2bet + raise)
          updatepot
          @players[1][0]-= (@previousbet - @player2bet + raise)
          updatechips(1)
          @noraise = @playersup
          @player2bet += (@previousbet - @player2bet + raise)
          @previousbet += raise
          @player2srr += 1
      when 3
        Kernel.pbMessage("#{@players[1][3]} folds.")
        @players[1][1]=0
        @noraise -=1
        @playersup-=1 
        updatefold(1)
      end
        @playing=0 if @players[0][1]==1
        @playing=3 if @players[3][1]==1
        @playing=2 if @players[2][1]==1
    when 2
      @decision = npcmove(2)
      case @decision
      when 1
        @previousbet == 0 ? Kernel.pbMessage("#{@players[2][3]} checks.") : Kernel.pbMessage("#{@players[2][3]} calls.")
        if @player3bet != @previousbet
          @players[2][0]-= (@previousbet - @player3bet)
          updatechips(2)
          @pot += (@previousbet - @player3bet)
          updatepot
          @player3bet += (@previousbet - @player3bet)
        end
        @noraise -=1 
      when 2
          rscore = goodcard(2)
          b = rand(100)+1
          r1 = 0
          r2 = 0
          lowestchip = []
          for i in 0...4
            respectivebet = @player1bet if i == 0
            respectivebet = @player2bet if i == 1
            respectivebet = @player3bet if i == 2
            respectivebet = @player4bet if i == 3
            @players[i][1] == 1 ? lowestchip.push(@players[i][0]) : lowestchip.push(99999)
            lowestchip[i] -= (@previousbet - respectivebet)
          end
          lowestchip.sort!
          if @previousbet == 0
            r1 = 1 if (@blindvalue*3) <= lowestchip[0]
            r2 = 1 if (@blindvalue*5) <= lowestchip[0]
          else
            r1 = 1 if (@previousbet*3) <= lowestchip[0]
            r2 = 1 if (@previousbet*4) <= lowestchip[0]
          end
          case rscore
          when 0
            if b<=100 && b>95 && r2 == 1
              @previousbet == 0 ? @raisevalue = (5*@blindvalue) : @raisevalue = (4*@previousbet)
            elsif  b<=95 && b>80 && r1 == 1
              @previousbet == 0 ? @raisevalue = (3*@blindvalue) : @raisevalue = (3*@previousbet)
            elsif b<=100 && b>95 && r2 == 0 && r1 == 1
              @previousbet == 0 ? @raisevalue = (3*@blindvalue) : @raisevalue = (3*@previousbet)
            elsif b<=95 && b>80 && r1 == 0
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            elsif b<=80
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            else
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            end          
          when 1
            if b<=100 && b>95 && r2 == 1
              @previousbet == 0 ? @raisevalue = (5*@blindvalue) : @raisevalue = (4*@previousbet)
            elsif  b<=95 && b>75 && r1 == 1
              @previousbet == 0 ? @raisevalue = (3*@blindvalue) : @raisevalue = (3*@previousbet)
            elsif b<=100 && b>95 && r2 == 0 && r1 == 1
              @previousbet == 0 ? @raisevalue = (3*@blindvalue) : @raisevalue = (3*@previousbet)
            elsif b<=95 && b>75 && r1 == 0
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            elsif b<=75
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            else
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            end              
          when 2
            if b<=100 && b>90 && r2 == 1
              @previousbet == 0 ? @raisevalue = (5*@blindvalue) : @raisevalue = (4*@previousbet)
            elsif  b<=90 && b>65 && r1 == 1
              @previousbet == 0 ? @raisevalue = (3*@blindvalue) : @raisevalue = (3*@previousbet)
            elsif b<=100 && b>90 && r2 == 0 && r1 == 1
              @previousbet == 0 ? @raisevalue = (3*@blindvalue) : @raisevalue = (3*@previousbet)
            elsif b<=90 && b>65 && r1 == 0
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            elsif b<=65
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            else
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            end              
          end
          @previousbet == 0 ? sbet = @blindvalue*2 : sbet = @previousbet*3
          if (@previousbet - @player3bet + sbet) > @players[2][0]
            @previousbet == 0 ? @raisevalue = (@blindvalue) : @raisevalue = (2*@previousbet)            
          end
          if @raisevalue > lowestchip[0]                                                     
            @previousbet == 0 ? @raisevalue = (@blindvalue) : @raisevalue = (2*@previousbet) 
          end          
          raise = @raisevalue
          if @previousbet == 0
            Kernel.pbMessage("#{@players[2][3]} bets #{@raisevalue} chips.")
          else
            Kernel.pbMessage("#{@players[2][3]} raises #{@raisevalue} chips.")
          end
          @pot += (@previousbet - @player3bet + raise)
          updatepot
          @players[2][0]-= (@previousbet - @player3bet + raise)
          updatechips(2)
          @noraise = @playersup
          @player3bet += (@previousbet - @player3bet + raise)
          @previousbet += raise
          @player3srr += 1          
      when 3
        Kernel.pbMessage("#{@players[2][3]} folds.")
        @players[2][1] = 0
        @noraise -=1
        @playersup-=1
        updatefold(2)
      end
        @playing=1 if @players[1][1]==1
        @playing=0 if @players[0][1]==1
        @playing=3 if @players[3][1]==1   
    when 3
      @decision = npcmove(3)
      case @decision
      when 1
        @previousbet == 0 ? Kernel.pbMessage("#{@players[3][3]} checks.") : Kernel.pbMessage("#{@players[3][3]} calls.")
        if @player4bet != @previousbet
          @players[3][0]-= (@previousbet - @player4bet)
          updatechips(3)
          @pot += (@previousbet - @player4bet)
          updatepot
          @player4bet += (@previousbet - @player4bet)
        end
        @noraise -=1        
      when 2
          rscore = goodcard(3)
          b = rand(100)+1
          r1 = 0
          r2 = 0
          lowestchip = []
          for i in 0...4
            respectivebet = @player1bet if i == 0
            respectivebet = @player2bet if i == 1
            respectivebet = @player3bet if i == 2
            respectivebet = @player4bet if i == 3
            @players[i][1] == 1 ? lowestchip.push(@players[i][0]) : lowestchip.push(99999)
            lowestchip[i] -= (@previousbet - respectivebet)
          end
          lowestchip.sort!
          if @previousbet == 0
            r1 = 1 if (@blindvalue*3) <= lowestchip[0]
            r2 = 1 if (@blindvalue*5) <= lowestchip[0]
          else
            r1 = 1 if (@previousbet*3) <= lowestchip[0]
            r2 = 1 if (@previousbet*4) <= lowestchip[0]
          end
          case rscore
          when 0
            if b<=100 && b>95 && r2 == 1
              @previousbet == 0 ? @raisevalue = (5*@blindvalue) : @raisevalue = (4*@previousbet)
            elsif  b<=95 && b>80 && r1 == 1
              @previousbet == 0 ? @raisevalue = (3*@blindvalue) : @raisevalue = (3*@previousbet)
            elsif b<=100 && b>95 && r2 == 0 && r1 == 1
              @previousbet == 0 ? @raisevalue = (3*@blindvalue) : @raisevalue = (3*@previousbet)
            elsif b<=95 && b>80 && r1 == 0
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            elsif b<=80
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            else
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            end          
          when 1
            if b<=100 && b>95 && r2 == 1
              @previousbet == 0 ? @raisevalue = (5*@blindvalue) : @raisevalue = (4*@previousbet)
            elsif  b<=95 && b>75 && r1 == 1
              @previousbet == 0 ? @raisevalue = (3*@blindvalue) : @raisevalue = (3*@previousbet)
            elsif b<=100 && b>95 && r2 == 0 && r1 == 1
              @previousbet == 0 ? @raisevalue = (3*@blindvalue) : @raisevalue = (3*@previousbet)
            elsif b<=95 && b>75 && r1 == 0
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            elsif b<=75
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            else
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            end              
          when 2
            if b<=100 && b>90 && r2 == 1
              @previousbet == 0 ? @raisevalue = (5*@blindvalue) : @raisevalue = (4*@previousbet)
            elsif  b<=90 && b>65 && r1 == 1
              @previousbet == 0 ? @raisevalue = (3*@blindvalue) : @raisevalue = (3*@previousbet)
            elsif b<=100 && b>90 && r2 == 0 && r1 == 1
              @previousbet == 0 ? @raisevalue = (3*@blindvalue) : @raisevalue = (3*@previousbet)
            elsif b<=90 && b>65 && r1 == 0
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            elsif b<=65
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            else
              @previousbet == 0 ? @raisevalue = (2*@blindvalue) : @raisevalue = (2*@previousbet)
            end              
          end
          @previousbet == 0 ? sbet = @blindvalue*2 : sbet = @previousbet*3
          if (@previousbet - @player4bet + sbet) > @players[3][0]
            @previousbet == 0 ? @raisevalue = (@blindvalue) : @raisevalue = (2*@previousbet)            
          end          
          if @raisevalue > lowestchip[0]                                                     
            @previousbet == 0 ? @raisevalue = (@blindvalue) : @raisevalue = (2*@previousbet) 
          end          
          raise = @raisevalue
          if @previousbet == 0
            Kernel.pbMessage("#{@players[3][3]} bets #{@raisevalue} chips.")
          else
            Kernel.pbMessage("#{@players[3][3]} raises #{@raisevalue} chips.")
          end
          @pot += (@previousbet - @player4bet + raise)
          updatepot
          @players[3][0]-= (@previousbet - @player4bet + raise)
          updatechips(3)
          @noraise = @playersup
          @player4bet += (@previousbet - @player4bet + raise)
          @previousbet += raise        
          @player4srr += 1          
      when 3
        Kernel.pbMessage("#{@players[3][3]} folds.")
        @players[3][1] = 0
        @noraise -= 1
        @playersup -= 1
        updatefold(3)
      end
        @playing=2 if @players[2][1]==1
        @playing=1 if @players[1][1]==1
        @playing=0 if @players[0][1]==1        
    end
        
  end
  
  
 ## small blind players starts by posting it and increases blind so next player 
 ## posts it in the next round
 ## noraise is defined in subround auxiliary function, when there'sX (players up)
 ## calls or folds in a row it will break the loop and show the 1st 3 community cards
 ## then it will go in the subround and show the 4th comunity card once its over, then
 ## the last community card, after that @roundover == 1 and breaks the loop
 ## then roundwinner function is called in the main function and player hands are rated
 
  def playround
    @totalraises = 0          ##used for npc AI
    @player1bet = 0
    @player2bet = 0
    @player3bet = 0
    @player4bet = 0
    @comcards = 0
    @playersup = 0
    @playersup += 1 if @players[0][0]>0
    @playersup += 1 if @players[1][0]>0
    @playersup += 1 if @players[2][0]>0
    @playersup += 1 if @players[3][0]>0

    while @players[@blind%4][1] == 0   ##selects next player to post the blind, must be in game [i][1] == 1
      @blind += 1
    end
    
    case @blind%4
     when 0
      Kernel.pbMessage("#{@players[0][3]} posts the blind.")
      @players[0][0] -= @blindvalue        ##deducts blind value from players chips
      updatechips(0)
      @pot += @blindvalue
      updatepot
      @skips = 1                           ##fossil variable no longer used, remove it all one of these days
      @call = @blindvalue                  ## ^  
      @player1bet = @blindvalue
     when 1
      Kernel.pbMessage("#{@players[1][3]} posts the blind.")
      @players[1][0] -= @blindvalue
      updatechips(1)
      @pot += @blindvalue
      updatepot
      @skips = 1
      @call = @blindvalue
      @player2bet = @blindvalue
     when 2
      Kernel.pbMessage("#{@players[2][3]} posts the blind.")
      @players[2][0] -= @blindvalue
      updatechips(2)
      @pot += @blindvalue
      updatepot      
      @skips = 1
      @call = @blindvalue
      @player3bet = @blindvalue
     when 3
      Kernel.pbMessage("#{@players[3][3]} posts the blind.")
      @players[3][0] -= @blindvalue
      updatechips(3)
      @pot += @blindvalue
      updatepot      
      @skips = 1
      @call = @blindvalue     
      @player4bet = @blindvalue
    end  ##case   
    @blind +=1            ##control who pays next blind
    @playing = @blind%4   ##controls who plays exactly next
    @noraise = @playersup+1
    while @roundover != 1    ##round loop  - breaks when 4th subround is over
      while @noraise != 1    ##subround loop - breaks when there's #playersup calls in a row
        @comcards == 0 ? fsubround : osubround  ##comcards=0 is the pre flop
      end
      ### resets subround stuff, calculates totalraises before reseting them for npc AI use
      @previousbet = 0
      @totalraises += (@player1srr + @player2srr + @player3srr + @player4srr)
      @player1bet = 0
      @player2bet = 0
      @player3bet = 0
      @player4bet = 0
      @player1srr = 0
      @player2srr = 0
      @player3srr = 0
      @player4srr = 0  

      if @comcards == 3   ##breaks the round loop, round is over
        @roundover == 1             
        break
      end
  
      
      if @comcards == 2  ##shows last card
        
        @sprites["c5"].bitmap.clear
        @sprites["c5"].bitmap = Bitmap.new(sprintf("Graphics/Pictures/Pokepoker/card%d",@comcard5[0]))
        @sprites["c5"].opacity = 255
        pbWait(16)
        @sprites["sq4"].bitmap.clear
        @sprites["sq4"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/greensq")
        
        @comcards += 1
        @noraise = @playersup+1        
      end
      

      if @comcards == 1   ##shows 4th card
        
        @sprites["c4"].bitmap.clear
        @sprites["c4"].bitmap = Bitmap.new(sprintf("Graphics/Pictures/Pokepoker/card%d",@comcard4[0]))
        @sprites["c4"].opacity = 255
        pbWait(16)
        @sprites["sq3"].bitmap.clear
        @sprites["sq3"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/greensq")
        
        @comcards += 1
        @noraise = @playersup+1
      end
      
      
      if @comcards == 0  ##shows 3 1st cards

        
        @sprites["c1"].bitmap.clear
        @sprites["c1"].bitmap = Bitmap.new(sprintf("Graphics/Pictures/Pokepoker/card%d",@comcard1[0]))
        @sprites["c1"].opacity = 255
        pbWait(16)
        @sprites["c2"].bitmap.clear
        @sprites["c2"].bitmap = Bitmap.new(sprintf("Graphics/Pictures/Pokepoker/card%d",@comcard2[0]))
        @sprites["c2"].opacity = 255
        pbWait(16)
        @sprites["c3"].bitmap.clear
        @sprites["c3"].bitmap = Bitmap.new(sprintf("Graphics/Pictures/Pokepoker/card%d",@comcard3[0]))
        @sprites["c3"].opacity = 255
        pbWait(16)
        @sprites["sq2"].bitmap.clear
        @sprites["sq2"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/greensq")
        
        @comcards += 1
        @noraise = @playersup+1
      end #comcards == 0
      end #2nd while
    end ###playround
    
  def roundwinner
    @p1score = 0
    @p2score = 0
    @p3score = 0
    @p4score = 0
    #### reveals the cards of every player who's still in round @players[i][1]==1
    if @players[1][1]==1 ##p2 still in round
      @sprites["p2_1"].opacity = 0
      @sprites["p2_1"].bitmap.clear
      @sprites["p2_1"].bitmap = Bitmap.new(sprintf("Graphics/Pictures/Pokepoker/card%d",@player2card1[0]))
      pbWait(8)
      @sprites["p2_1"].opacity = 255
      pbWait(8)
      @sprites["p2_2"].opacity = 0
      @sprites["p2_2"].bitmap.clear
      @sprites["p2_2"].bitmap = Bitmap.new(sprintf("Graphics/Pictures/Pokepoker/card%d",@player2card2[0]))
      pbWait(8)
      @sprites["p2_2"].opacity = 255
      pbWait(8)
    end
    if @players[2][1]==1 ##p3 still in round
      @sprites["p3_1"].opacity = 0
      @sprites["p3_1"].bitmap.clear
      @sprites["p3_1"].bitmap = Bitmap.new(sprintf("Graphics/Pictures/Pokepoker/card%d",@player3card1[0]))
      pbWait(8)
      @sprites["p3_1"].opacity = 255
      pbWait(8)
      @sprites["p3_2"].opacity = 0
      @sprites["p3_2"].bitmap.clear
      @sprites["p3_2"].bitmap = Bitmap.new(sprintf("Graphics/Pictures/Pokepoker/card%d",@player3card2[0]))
      pbWait(8)
      @sprites["p3_2"].opacity = 255      
    end
    if @players[3][1]==1 ##p4 still in round
      @sprites["p4_1"].opacity = 0
      @sprites["p4_1"].bitmap.clear
      @sprites["p4_1"].bitmap = Bitmap.new(sprintf("Graphics/Pictures/Pokepoker/card%d",@player4card1[0]))
      pbWait(8)
      @sprites["p4_1"].opacity = 255
      pbWait(8)
      @sprites["p4_2"].opacity = 0
      @sprites["p4_2"].bitmap.clear
      @sprites["p4_2"].bitmap = Bitmap.new(sprintf("Graphics/Pictures/Pokepoker/card%d",@player4card2[0]))
      pbWait(8)
      @sprites["p4_2"].opacity = 255    
    end
    
    ### this next chunks runs the handrate function for all players who didnt fold this round, 
    ### then stores in playerscores array the playernumber and its respective score and sorts
    ### the array from the highest score to the lowest
    
    
      @playerscores = [
      [0,0],
      [0,0],
      [0,0],
      [0,0]
      ]
    
      if @players[0][1] == 1
        @p1score = handrate(@player1card1,@player1card2,@comcard1,@comcard2,@comcard3,@comcard4,@comcard5)
        @playerscores[0][0] = 1
        @playerscores[0][1] = @p1score
      end
      if @players[1][1] == 1
        @p2score = handrate(@player2card1,@player2card2,@comcard1,@comcard2,@comcard3,@comcard4,@comcard5)
        @playerscores[1][0] = 2
        @playerscores[1][1] = @p2score
      end
      if @players[2][1] == 1
        @p3score = handrate(@player3card1,@player3card2,@comcard1,@comcard2,@comcard3,@comcard4,@comcard5)
        @playerscores[2][0] = 3
        @playerscores[2][1] = @p3score
      end
      if @players[3][1] == 1
        @p4score = handrate(@player4card1,@player4card2,@comcard1,@comcard2,@comcard3,@comcard4,@comcard5)
        @playerscores[3][0] = 4
        @playerscores[3][1] = @p4score
      end
      
      @playerscores.sort! {|a,b| b[1] <=> a[1]}   ##sorts the array by score, 1st one won, if 1st=2nd then both won, etc
      
      wsequence = sequenceannounce(@playerscores[0][1])

      ### the very very unlikely case all 4 scores are equal - 4 players tied
      if (@playerscores[0][1] == @playerscores[1][1]) && (@playerscores[0][1] == @playerscores[2][1]) && (@playerscores[0][1] == @playerscores[3][1])
        Kernel.pbMessage("Did this just happen?")
        Kernel.pbMessage("Every player tied with #{wsequence}!")
        Kernel.pbMessage("The pot is split by everyone.")
        @players[0][0] += (@pot/4)
        @players[1][0] += (@pot/4)
        @players[2][0] += (@pot/4)
        @players[3][0] += (@pot/4)
        updatechips(@playerscores[0][0]-1)
        updatechips(@playerscores[1][0]-1)
        updatechips(@playerscores[2][0]-1)
        updatechips(@playerscores[3][0]-1)
      ### the very unlikely case 3 players tie
      elsif (@playerscores[0][1] == @playerscores[1][1]) && (@playerscores[0][1] == @playerscores[2][1])
        Kernel.pbMessage("Now that's something you don't see every day, a three-way tie!")
        Kernel.pbMessage("They all got #{wsequence}!")
        Kernel.pbMessage("#{@players[(@playerscores[0][0])-1][3]}, #{@players[(@playerscores[1][0])-1][3]} and #{@players[(@playerscores[2][0])-1][3]} split the pot.")
        @players[(@playerscores[0][0])-1][0] += (@pot/3)
        @players[(@playerscores[1][0])-1][0] += (@pot/3)
        @players[(@playerscores[2][0])-1][0] += (@pot/3)
        updatechips(@playerscores[0][0]-1)
        updatechips(@playerscores[1][0]-1)
        updatechips(@playerscores[2][0]-1)
      ### the unlikely case 2 players tie
      elsif (@playerscores[0][1] == @playerscores[1][1])
        Kernel.pbMessage("What a surprise, we have a tie between #{@players[(@playerscores[0][0])-1][3]} and #{@players[(@playerscores[1][0])-1][3]}!")
        Kernel.pbMessage("Both of them got #{wsequence}!")
        Kernel.pbMessage("Each player gets half of the pot.")
        @players[(@playerscores[0][0])-1][0] += (@pot/2)
        @players[(@playerscores[1][0])-1][0] += (@pot/2)
        updatechips(@playerscores[0][0]-1)
        updatechips(@playerscores[1][0]-1)        
      else ### pot goes to the winner
        Kernel.pbMessage("#{@players[(@playerscores[0][0])-1][3]} wins the pot with #{wsequence}!")
        @players[(@playerscores[0][0])-1][0] += @pot
        updatechips(@playerscores[0][0]-1)
      end

      @round +=1          ##increases round, resets deck and round related stuff, updates pot
      @deckp = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,
      27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52]      
      @roundover = 0
      @pot = 0
      updatepot

      @players[0][2] = 0 if @players[0][0] < @blindvalue   ##any player who can't pay the bind is removed from game [i][2]=0
      @players[1][2] = 0 if @players[1][0] < @blindvalue
      @players[2][2] = 0 if @players[2][0] < @blindvalue
      @players[3][2] = 0 if @players[3][0] < @blindvalue
      
      @players[0][2] == 0 ? @players[0][1] = 0 : @players[0][1] = 1    ##if [i][2] == 0 then [i][1] == 0 too just in case of bugs, else (case of fold)
      @players[1][2] == 0 ? @players[1][1] = 0 : @players[1][1] = 1    ## but still ingame, it resets teh [i][1] to 1 so the player can play next round
      @players[2][2] == 0 ? @players[2][1] = 0 : @players[2][1] = 1
      @players[3][2] == 0 ? @players[3][1] = 0 : @players[3][1] = 1
      
      @sprites["p1_1"].opacity = 0
      @sprites["p1_1"].bitmap.clear
      @sprites["p1_1"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")
      @sprites["p1_2"].opacity = 0
      @sprites["p1_2"].bitmap.clear
      @sprites["p1_2"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")      
      @sprites["p2_1"].opacity = 0
      @sprites["p2_1"].bitmap.clear
      @sprites["p2_1"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")      
      @sprites["p2_2"].opacity = 0
      @sprites["p2_2"].bitmap.clear
      @sprites["p2_2"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")      
      @sprites["p3_1"].opacity = 0
      @sprites["p3_1"].bitmap.clear
      @sprites["p3_1"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard") 
      @sprites["p3_2"].opacity = 0
      @sprites["p3_2"].bitmap.clear
      @sprites["p3_2"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")      
      @sprites["p4_1"].opacity = 0
      @sprites["p4_1"].bitmap.clear
      @sprites["p4_1"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")            
      @sprites["p4_2"].opacity = 0
      @sprites["p4_2"].bitmap.clear
      @sprites["p4_2"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")            
      @sprites["c1"].opacity = 0
      @sprites["c1"].bitmap.clear
      @sprites["c1"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")            
      @sprites["c2"].opacity = 0
      @sprites["c2"].bitmap.clear
      @sprites["c2"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")                  
      @sprites["c3"].opacity = 0
      @sprites["c3"].bitmap.clear
      @sprites["c3"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")                  
      @sprites["c4"].opacity = 0
      @sprites["c4"].bitmap.clear
      @sprites["c4"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")                  
      @sprites["c5"].opacity = 0
      @sprites["c5"].bitmap.clear
      @sprites["c5"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/backcard")                  
      
      if @players[0][2] == 0   ##player can't pay the blind, is out of the game - game over
        Kernel.pbMessage("You're out of chips, better luck next time.")
        @gameover = 1
      end
      
      updatequitters if @players[0][2] == 1   
      
      if (@players[1][2] == 0) && (@players[2][2] == 0) && (@players[3][2] == 0) ##only player is remaining - victory
        Kernel.pbMessage("You are the only player remaining, congratulations on your victory!")
        @gameover = 1
        $game_variables[@chipsvariable] = @players[0][0]  ##reward
        ### add the playercoins to a game variable to add the coins after game in the event
      end
        @sprites["sq1"].bitmap.clear
        @sprites["sq1"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/redsq")
        @sprites["sq2"].bitmap.clear
        @sprites["sq2"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/redsq")
        @sprites["sq3"].bitmap.clear
        @sprites["sq3"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/redsq")
        @sprites["sq4"].bitmap.clear
        @sprites["sq4"].bitmap = Bitmap.new("Graphics/Pictures/Pokepoker/redsq")   
  end
  
  def handrate(hand1,hand2,hand3,hand4,hand5,hand6,hand7)
    ##################################
    ## check for royal straight flush
    ##################################    
    
    ### these var will store the amount of elements needed for a royal straight flush
    ### if they reach 5 means the 5 cards required are present
    hroyalf = 0
    droyalf = 0
    sroyalf = 0
    croyalf = 0
    @hand = [
    hand1,
    hand2,
    hand3,
    hand4,
    hand5,
    hand6,
    hand7
    ]    
#    @hand = [
#    [45,"Seven of Hearts",4,"Spades"],
#    [5,"Six of Spades",10,"Clubs"],
#    [47,"Nine of Hearts",10,"Diamonds"],
#    [49,"Jack of Hearts",8,"Hearts"],
#    [41,"Three of Hearts",9,"Hearts"],
#    [6,"Seven of Spades",3,"Spades"],
#    [44,"Six of Hearts",14,"Hearts"]
#    ]
    @tiebreakerhand = []
    for i in 0...7
      @tiebreakerhand.push(@hand[i][2])
    end
    @tiebreakerhand.sort! { |a, b| b <=> a }

    ####### checks every card in @hand, adds +1 to the roayl flush counters - hroalf, droyalf  
    for i in 0...7
      hroyalf += 1 if @hand[i][2] == 10  && @hand[i][3] == "Hearts"
      hroyalf += 1 if @hand[i][2] == 11  && @hand[i][3] == "Hearts"
      hroyalf += 1 if @hand[i][2] == 12  && @hand[i][3] == "Hearts"
      hroyalf += 1 if @hand[i][2] == 13  && @hand[i][3] == "Hearts"
      hroyalf += 1 if @hand[i][2] == 14  && @hand[i][3] == "Hearts"
      droyalf += 1 if @hand[i][2] == 10  && @hand[i][3] == "Diamonds"
      droyalf += 1 if @hand[i][2] == 11  && @hand[i][3] == "Diamonds"
      droyalf += 1 if @hand[i][2] == 12  && @hand[i][3] == "Diamonds"
      droyalf += 1 if @hand[i][2] == 13  && @hand[i][3] == "Diamonds"
      droyalf += 1 if @hand[i][2] == 14  && @hand[i][3] == "Diamonds"
      sroyalf += 1 if @hand[i][2] == 10  && @hand[i][3] == "Spades"
      sroyalf += 1 if @hand[i][2] == 11  && @hand[i][3] == "Spades"
      sroyalf += 1 if @hand[i][2] == 12  && @hand[i][3] == "Spades"
      sroyalf += 1 if @hand[i][2] == 13  && @hand[i][3] == "Spades"
      sroyalf += 1 if @hand[i][2] == 14  && @hand[i][3] == "Spades"
      croyalf += 1 if @hand[i][2] == 10  && @hand[i][3] == "Clubs"
      croyalf += 1 if @hand[i][2] == 11  && @hand[i][3] == "Clubs"
      croyalf += 1 if @hand[i][2] == 12  && @hand[i][3] == "Clubs"
      croyalf += 1 if @hand[i][2] == 13  && @hand[i][3] == "Clubs"
      croyalf += 1 if @hand[i][2] == 14  && @hand[i][3] == "Clubs"
    end
    
    ####### if any of the counters reaches 5 it will return 1000 - the highest 
    ####### value possible
    
    if hroyalf == 5 || droyalf == 5 || sroyalf == 5 || croyalf == 5
      return 40000
    end
    ###########################
    ## check for straight flush
    ###########################
    
    #### each array represents a suit
    
    @hstflush = []
    @dstflush = []
    @sstflush = []
    @cstflush = []
    
    ### this will sort the hand and fill each array suit with the cards values
    
    for i in 0...7
      @hstflush.push(@hand[i][2]) if @hand[i][3] == "Hearts"
      @dstflush.push(@hand[i][2]) if @hand[i][3] == "Diamonds"
      @sstflush.push(@hand[i][2]) if @hand[i][3] == "Spades"
      @cstflush.push(@hand[i][2]) if @hand[i][3] == "Clubs"
    end
    
    ### if the suit array is 5 or bigger then there's 5 cards of the same suit
    ### it will then sort the array from highest to lowest and check for each value
    ### if the value -1, -2, -3 and -4 is present, it will return 2400 + array[i] which is
    ### the highest value of the sequence for tie breaker purposes
    ### the 1st if checks for ace through 5 straight flush, if an ace (14) is present
    ### will check for presence of the values 2 3 4 and 5
    
    if @hstflush.length >= 5
      @hstflush.sort! { |a, b| b <=> a }
      for i in [email protected]
        if @hstflush[i]== 14
          if @hstflush.include?(2) &&  @hstflush.include?(3) &&  @hstflush.include?(4) &&  @hstflush.include?(5)
            return 39000 + 5
          end
        end
        if @hstflush.include?((@hstflush[i])-1) && @hstflush.include?((@hstflush[i])-2) && @hstflush.include?((@hstflush[i])-3) && @hstflush.include?((@hstflush[i])-4)
          return 39000 + @hstflush[i]
        end
      end
    end
    if @dstflush.length >= 5
      @dstflush.sort! { |a, b| b <=> a }
      for i in [email protected]
        if @dstflush[i]== 14
          if @dstflush.include?(2) &&  @dstflush.include?(3) &&  @dstflush.include?(4) &&  @dstflush.include?(5)
            return 39000 + 5
          end
        end
        if @dstflush.include?((@dstflush[i])-1) && @dstflush.include?((@dstflush[i])-2) && @dstflush.include?((@dstflush[i])-3) && @dstflush.include?((@dstflush[i])-4)
          return 39000 + @dstflush[i]
        end
      end
    end    
    if @sstflush.length >= 5
      @sstflush.sort! { |a, b| b <=> a }
      for i in [email protected]
        if @sstflush[i]== 14
          if @sstflush.include?(2) &&  @sstflush.include?(3) &&  @sstflush.include?(4) &&  @sstflush.include?(5)
            return 39000 + 5
          end
        end
        if @sstflush.include?((@sstflush[i])-1) && @sstflush.include?((@sstflush[i])-2) && @sstflush.include?((@sstflush[i])-3) && @sstflush.include?((@sstflush[i])-4)
          return 39000 + @sstflush[i]
        end
      end
    end    
    if @cstflush.length >= 5
      @cstflush.sort! { |a, b| b <=> a }
      for i in [email protected]
        if @cstflush[i]== 14
          if @cstflush.include?(2) &&  @cstflush.include?(3) &&  @cstflush.include?(4) &&  @cstflush.include?(5)
            return 39000 + 5
          end
        end
        if @cstflush.include?((@cstflush[i])-1) && @cstflush.include?((@cstflush[i])-2) && @cstflush.include?((@cstflush[i])-3) && @cstflush.include?((@cstflush[i])-4)
          return 39000 + @cstflush[i]
        end
      end
    end  

    ###########################
    ## check for 4 of a kind
    ###########################    
    ### stores the value of every card in the four of a kind array
    ### then sorts the array by descending value
    ### if there's 4 equal cards then they will be adjacent so it checks
    ### i+1 i+2 and i+3, if all they're all of equal 
    ### value returns 2100 (4 of a kind value) + array[i] (the card value)
    @fourofakind = []
    for i in 0...7
      @fourofakind.push(@hand[i][2])
    end
    
    @fourofakind.sort! { |a, b| b <=> a }
    
    for i in [email protected]
      if (@fourofakind[i] == @fourofakind[i+1]) && (@fourofakind[i] == @fourofakind[i+2]) && (@fourofakind[i] == @fourofakind[i+3])
        @tiebreakerhand.delete(@fourofakind[i])
        return 38000 + (@fourofakind[i]*14) + @tiebreakerhand[0]
      end
    end
    
    ###########################
    ## check for full house
    ###########################  
    #### stores hands values by descending order in fullhouse array
    #### if theres 3 values in a row (at this point it already checked for 4 of a kind)
    #### returns the highest trio, it then checks for the highest pair
    #### it returns 1800 + 14x trio value + pair, it could go up to a max of 210
    #### so the value of four a kind is 2100 and this one's base is 1800 to make up for that
    @fullhouse = []
    trio = 0
    pair = 0
    for i in 0...7
      @fullhouse.push(@hand[i][2])
    end
    @fullhouse.sort! { |a, b| b <=> a }
    for i in [email protected]
      if (@fullhouse[i] == @fullhouse[i+1]) && (@fullhouse[i] == @fullhouse[i+2]) && trio == 0
        trio = @fullhouse[i]
      end
      if (@fullhouse[i] == @fullhouse[i+1]) && pair == 0 && (@fullhouse[i] != trio)
        pair = @fullhouse[i]
      end
    end    
    if pair > 0 && trio > 0
      return 37000+(14*trio)+pair
    end
    
    
    ###########################
    ## check for flush
    ###########################  
    ### distributes hand cards to its respective suit array and sorts descending
    ### if any suit array length is 5 or greater returns the 5 highest cards
    
    @hflush = []
    @dflush = []
    @sflush = []
    @cflush = []
    
    for i in 0...7
      @hflush.push(@hand[i][2]) if @hand[i][3] == "Hearts"
      @dflush.push(@hand[i][2]) if @hand[i][3] == "Diamonds"
      @sflush.push(@hand[i][2]) if @hand[i][3] == "Spades"
      @cflush.push(@hand[i][2]) if @hand[i][3] == "Clubs"
    end
    
    if @hflush.length >= 5
      @hflush.sort! { |a, b| b <=> a }
      return 36000 + @hflush[0] + @hflush[1] + @hflush[2] + @hflush[3] + @hflush[4]
    end
    if @dflush.length >= 5
      @dflush.sort! { |a, b| b <=> a }
      return 36000 + @dflush[0] + @dflush[1] + @dflush[2] + @dflush[3] + @dflush[4]
    end
    if @sflush.length >= 5
      @sflush.sort! { |a, b| b <=> a }
      return 36000 + @sflush[0] + @sflush[1] + @sflush[2] + @sflush[3] + @sflush[4]
    end
    if @cflush.length >= 5
      @cflush.sort! { |a, b| b <=> a }
      return 36000 + @cflush[0] + @cflush[1] + @cflush[2] + @cflush[3] + @cflush[4]
    end    
  
  
    ###########################
    ## check for straight
    ###########################  
    ### stores value of cards in straight array, sorts descending
    ### for each value, checks if @straight includes i+1,..i+4 
    @straight = []
    
    for i in 0...7
      @straight.push(@hand[i][2])
    end
    @straight.sort! { |a, b| b <=> a }
    for i in [email protected]
      if @straight[i] == 14
        if @straight.include?(2) && @straight.include?(3) && @straight.include?(4) && @straight.include?(5)
          return 35000 + 1
        end
      end
      if @straight.include?(@straight[i]+1) && @straight.include?(@straight[i]+2) && @straight.include?(@straight[i]+3) && @straight.include?(@straight[i]+4)
        return 35000 + @straight[i]
      end
    end
    
    ###########################
    ## check for 3 of a kind
    ###########################  
    ### stores value of cards in threekind array and sorts descending
    ### for each value, checks if the 2 next values are equal to it
    ### note that by the time this chunk is run if there was a 4 of a kind /
    ### fullhouse, etc it will have already returned so this part only needs 
    ### to check presence of a trio
    
    @threekind = []
    
    for i in 0...7
      @threekind.push(@hand[i][2])
    end
    
    @threekind.sort! { |a, b| b <=> a }
    
    for i in [email protected]
      if (@threekind[i] == @threekind[i+1]) && (@threekind[i] == @threekind[i+2])
        @tiebreakerhand.delete(@threekind[i])
        return 30000 + (@threekind[i]*140) + (14*@tiebreakerhand[0]) + @tiebreakerhand[1]
      end
    end
   
    
    ###########################
    ## check for 2 pairs
    ###########################  
    ### stores value of cards in doublepair array and sorts descending
    ### for each value, checks if the next values is equal to it
    ### it will store the first pair in pair1 and the second pair in pair2
    ### when paircount == 2 it will stop looking for pairs
    ### returns 600 + 14x 1st pair value + 2nd pair for tiebreaker purposes
    ### range for double pairs in score is 600 - 810
    ### if paircount == 1 it will return 300 + pair1 
    ### if paircount == 0 then it means the player got no "special hand"
    ### and it will return the highest card
    
    pair1 = 0
    pair2 = 0
    paircount = 0
    @doublepair = []
    
    for i in 0...7
      @doublepair.push(@hand[i][2])
    end

    @doublepair.sort! { |a, b| b <=> a }
    
    for i in [email protected]
      if (@doublepair[i] == @doublepair[i+1]) && paircount <2
        if pair1 == 0
          pair1 = @doublepair[i]
          paircount += 1
        end
        if pair2 == 0 && (@doublepair[i] != pair1)
          pair2 = @doublepair[i]
          paircount += 1
        end
      end
    end
    if paircount == 2
      @tiebreakerhand.delete(pair1)
      @tiebreakerhand.delete(pair2)
      return 25000 + (140*pair1) + (14*pair2) + @tiebreakerhand[0]
    end
    
    if paircount == 1
      @tiebreakerhand.delete(pair1)
      return 300 + (pair1*1400) + (@tiebreakerhand[0]*140) + (@tiebreakerhand[1]*14) + @tiebreakerhand[2]
    end
    
    if paircount == 0
      if (@hand[0][2]) > (@hand[1][2])
        return 14*@hand[0][2] + @hand[1][2]
      else
        return 14*@hand[1][2] + @hand[0][2]
      end
    end
        
  end #function

  def updatepot
    10.times do
      @sprites["potvalue"].opacity -= 25.5
      pbWait(1)
    end
    pbWait(8)
    @sprites["potvalue"].bitmap.clear
    textarray = [[@pot.to_s,26,0,2,Color.new(255,255,255),Color.new(248,240,160),false]]
    pbDrawTextPositions(@sprites["potvalue"].bitmap,textarray)
    10.times do
      @sprites["potvalue"].opacity += 25.5
      pbWait(1)
    end
  end
  
  def updatechips(player)
    case player
    when 0
      #update p1
      10.times do
        @sprites["p1chips"].opacity -= 25.5
        pbWait(1)
      end
      pbWait(8)
      @sprites["p1chips"].bitmap.clear
      textarray = [[@players[0][0].to_s,26,0,2,Color.new(0,0,0),Color.new(240,240,240),false]]
      pbDrawTextPositions(@sprites["p1chips"].bitmap,textarray)
      10.times do
        @sprites["p1chips"].opacity += 25.5
        pbWait(1)
      end
    when 1
      #update p2
      10.times do
        @sprites["p2chips"].opacity -= 25.5
        pbWait(1)
      end
      pbWait(8)
      @sprites["p2chips"].bitmap.clear
      textarray = [[@players[1][0].to_s,26,0,2,Color.new(0,0,0),Color.new(240,240,240),false]]
      pbDrawTextPositions(@sprites["p2chips"].bitmap,textarray)
      10.times do
        @sprites["p2chips"].opacity += 25.5
        pbWait(1)
      end
    when 2
      #update p3
      10.times do
        @sprites["p3chips"].opacity -= 25.5
        pbWait(1)
      end
      pbWait(8)
      @sprites["p3chips"].bitmap.clear
      textarray = [[@players[2][0].to_s,26,0,2,Color.new(0,0,0),Color.new(240,240,240),false]]
      pbDrawTextPositions(@sprites["p3chips"].bitmap,textarray)
      10.times do
        @sprites["p3chips"].opacity += 25.5
        pbWait(1)
      end
    when 3
      #update p4
      10.times do
        @sprites["p4chips"].opacity -= 25.5
        pbWait(1)
      end
      pbWait(8)
      @sprites["p4chips"].bitmap.clear
      textarray = [[@players[3][0].to_s,26,0,2,Color.new(0,0,0),Color.new(240,240,240),false]]
      pbDrawTextPositions(@sprites["p4chips"].bitmap,textarray)
      10.times do
        @sprites["p4chips"].opacity += 25.5
        pbWait(1)
      end      
    end
  end
  
  def npcmove(npc)
    lowestchip = []
    for i in 0...4
      respectivebet = @player1bet if i == 0
      respectivebet = @player2bet if i == 1
      respectivebet = @player3bet if i == 2
      respectivebet = @player4bet if i == 3
      @players[i][1] == 1 ? lowestchip.push(@players[i][0]) : lowestchip.push(99999)  ##pushes high number that doesnt matter / else it bugs
      lowestchip[i] -= (@previousbet - respectivebet)  ##this is to avoid players calling and geting negative chips
    end
    lowestchip.sort!
    case npc
    when 1
      pcoins = @players[1][0] - (@previousbet - @player2bet)
      pbet = @player2bet
      subroundraise = @player2srr  ##subround raises, to avoid raisefest npcs only raise once per sub round
    when 2
      pcoins = @players[2][0] - (@previousbet - @player3bet)
      pbet = @player3bet
      subroundraise = @player3srr
    when 3
      pcoins = @players[3][0] - (@previousbet - @player4bet)
      pbet = @player4bet
      subroundraise = @player4srr
    end
    
    return 1 if (@players[0][1] + @players[1][1] + @players[2][1] + @players[3][1]) == 1  ##doesnt raise or fold if 1 player up only
      
    fold = 95
    raisem = 15
    a=rand(100)+1
    
    c = @player1srr + @player2srr + @player3srr + @player4srr 
    
    c < 2 ? raisem -= 5*c : raisem -= 10*c    ##drops chance of raise if there was 1raise this subround, drops dramatically if there was 2 or more
    raisem -= @totalraises if @totalraises > 4 ##if there was more then 4 raises this ROUND, drops slightly and proportionately the chance for more raises
    
    if @previousbet == 0  ##check doesnt cost money, never fold
      fold = 101
    end
    if goodcard(npc) > 0   ##good hand, dont fold
      fold = 101
      raisem += 15 if goodcard(npc) == 1 ##good hand, more chances to raise
      raisem += 30 if goodcard(npc) == 2 ##rly good hand, more chances to raise
    end
    
    raisem -= @totalraises  ##adjust raise threshold for rng
    
    if subroundraise == 1   ##won't raise because already raised this subround
      raisem -= 45
    end
    
    if @previousbet == 0 && (pcoins < @blindvalue)  ##doesnt have money to bet
      raisem -= 45
    end
    
    if @previousbet > 0 && (pcoins < (@previousbet*2)) ##doesnt have money to raise
      raisem -= 45
    end
    
    if @comcards == 0 && ((@previousbet*2) > lowestchip[0]) ##lowest chips player cant call min raise
      raisem -= 45
    end
    
    if @comcards > 0 && (@blindvalue > lowestchip[0]) ##loest chips player cant call min bet
      raisem -= 45
    end
    return 3 if a > fold
    return 2 if a<raisem
    return 1  ##calls / check if doesnt fold or raise
  end #function
  
  def goodcard(npc)
    score = 0
    case npc
    when 1
      score = handrate(@player2card1,@player2card2,@comcard1,@comcard2,@comcard3,@comcard4,@comcard5)
    when 2
      score = handrate(@player3card1,@player3card2,@comcard1,@comcard2,@comcard3,@comcard4,@comcard5)
    when 3
      score = handrate(@player4card1,@player4card2,@comcard1,@comcard2,@comcard3,@comcard4,@comcard5)
    end
    return 0 if score < 300    ##high card
    return 1 if score < 25000  ##1 pair
    return 2 if score > 25000  ##2 pair -> won't go any further, we don't want cheater npcs
  end
  
  def betscene
    @raisevalue = 0        #### fixes bug with the display of bet value
    @sprites["betvalue"].bitmap.clear
    textarray = [[@raisevalue.to_s,26,0,2,Color.new(0,0,0),Color.new(240,240,200),false]]
    pbDrawTextPositions(@sprites["betvalue"].bitmap,textarray)
    updateselect
    @raisevalue = 0
    @betplaced = 0
    @select = 1
    @sprites["betui"].opacity = 255
    @sprites["selectarrow"].opacity = 255
    @sprites["betvalue"].opacity = 255
    @sprites["bet"].opacity = 255
    lowestchip = []
    
    for i in 0...4
      respectivebet = @player1bet if i == 0
      respectivebet = @player2bet if i == 1
      respectivebet = @player3bet if i == 2
      respectivebet = @player4bet if i == 3
      @players[i][1] == 1 ? lowestchip.push(@players[i][0]) : lowestchip.push(99999)
      lowestchip[i]-= (@previousbet - respectivebet)
    end
    lowestchip.sort!
    
    loop do
      Graphics.update
      Input.update
      if Input.trigger?(Input::B)  ##cancels raise / bet scene
        #pbPlayCancelSE()
        @raisevalue = 0
        break
      end
      if Input.trigger?(Input::UP)
        pbPlayCursorSE()
        @select == 1 ? @select = 6 : @select -= 1
        updateselect
      end      
      if Input.trigger?(Input::DOWN)
        pbPlayCursorSE()
        @select == 6 ? @select = 1 : @select += 1
        updateselect
      end
      if Input.trigger?(Input::C)
        case @select
        when 1
          if lowestchip[0] < 5 + @raisevalue
            pbPlayBuzzerSE()
            Kernel.pbMessage("Some players can't call that amount.")
          else
          pbPlayDecisionSE()  
          @raisevalue += 5
          updatebet
          end
        when 2
          if lowestchip[0] < 10 + @raisevalue
            pbPlayBuzzerSE()
            Kernel.pbMessage("Some players can't call that amount.")
          else
          pbPlayDecisionSE()  
          @raisevalue += 10
          updatebet
          end
        when 3
          if lowestchip[0] < 50 + @raisevalue
            pbPlayBuzzerSE()
            Kernel.pbMessage("Some players can't call that amount.")
          else
          pbPlayDecisionSE()
          @raisevalue += 50
          updatebet
          end
        when 4
          if lowestchip[0] < 100 + @raisevalue
            pbPlayBuzzerSE()
            Kernel.pbMessage("Some players can't call that amount.")
          else
          pbPlayDecisionSE()
          @raisevalue += 100
          updatebet
          end
        when 5
          allin = []
          for i in 0...4
            respectivebet = @player1bet if i == 0
            respectivebet = @player2bet if i == 1
            respectivebet = @player3bet if i == 2
            respectivebet = @player4bet if i == 3
            @players[i][1] == 1 ? allin.push(@players[i][0]) : allin.push(99999)
            allin[i]-= (@previousbet - respectivebet)
          end
          allin.sort!
          pbPlayDecisionSE()
          @raisevalue = allin[0]
          updatebet
        when 6
          if (@raisevalue<@blindvalue) && @previousbet == 0
            pbPlayBuzzerSE()
            Kernel.pbMessage("You must bet at least the value of the blind.")
          elsif (@raisevalue < (@previousbet*2))
            pbPlayBuzzerSE()
            Kernel.pbMessage("You must raise at least twice the previous bet.")
          elsif (@previousbet - @player1bet + @raisevalue > @players[0][0])
            pbPlayBuzzerSE()
            Kernel.pbMessage("You don't have that amount.")
          elsif (@raisevalue > lowestchip[0])
            pbPlayBuzzerSE()
            Kernel.pbMessage("Some players can't call that amount.")
          else
            if @previousbet == 0
              pbPlayDecisionSE()
              Kernel.pbMessage("#{@players[0][3]} bets #{@raisevalue} chips.")
              @betplaced = 1      ##breaks the bet / raise scene loop
            else
              pbPlayDecisionSE()
              Kernel.pbMessage("#{@players[0][3]} raises #{@raisevalue} chips.")
              @betplaced = 1
            end   ##@previousbet == 0
          end ## if @raisevalue < @blindvalue
          
        end ## case 1 - 6
      end ## if input C
      break if @betplaced == 1
    end  ## loop do
    @sprites["betui"].opacity = 0
    @sprites["selectarrow"].opacity = 0
    @select = 1 ##fixes bug with display of arrow next time betscene is accessed
    @sprites["betvalue"].opacity = 0    
    @sprites["bet"].opacity = 0    
  end ## function
  
  def updateselect
    case @select
    when 1
      @sprites["selectarrow"].x = 384
      @sprites["selectarrow"].y = 86      
    when 2
      @sprites["selectarrow"].x = 384
      @sprites["selectarrow"].y = 118      
    when 3
      @sprites["selectarrow"].x = 384
      @sprites["selectarrow"].y = 150           
    when 4
      @sprites["selectarrow"].x = 384
      @sprites["selectarrow"].y = 182            
    when 5
      @sprites["selectarrow"].x = 384
      @sprites["selectarrow"].y = 214            
    when 6
      @sprites["selectarrow"].x = 384
      @sprites["selectarrow"].y = 246
    end
  end
  
  def updatebet
    10.times do
      @sprites["betvalue"].opacity -= 25.5
      pbWait(1)
    end
    @sprites["betvalue"].bitmap.clear
    textarray = [[@raisevalue.to_s,26,0,2,Color.new(0,0,0),Color.new(240,240,200),false]]
    pbDrawTextPositions(@sprites["betvalue"].bitmap,textarray)
    10.times do
      @sprites["betvalue"].opacity += 25.5
      pbWait(1)
    end
  end
  
  def updatefold(arg)
    case arg
    when 0
      @sprites["p1_1"].opacity = 0
      @sprites["p1_2"].opacity = 0
    when 1
      @sprites["p2_1"].opacity = 0
      @sprites["p2_2"].opacity = 0
    when 2
      @sprites["p3_1"].opacity = 0
      @sprites["p3_2"].opacity = 0
    when 3
      @sprites["p4_1"].opacity = 0
      @sprites["p4_2"].opacity = 0
    end
  end
  
  def updatequitters
    if @players[1][2] == 0 && @sprites["p2name"].opacity == 255
      Kernel.pbMessage("#{@players[1][3]} quits the game.")
      10.times do
        @sprites["p2name"].opacity -= 25.5
        pbWait(1)
      end
      @sprites["p2name"].bitmap.clear
      textarray = [[@players[1][3],57,0,2,Color.new(255,0,0),Color.new(255,255,255),false]]
      pbDrawTextPositions(@sprites["p2name"].bitmap,textarray)
      10.times do
        @sprites["p2name"].opacity += 25.5
        pbWait(1)
      end
    end
    if @players[2][2] == 0 && @sprites["p3name"].opacity == 255
      Kernel.pbMessage("#{@players[2][3]} quits the game.")
      10.times do
        @sprites["p3name"].opacity -= 25.5
        pbWait(1)
      end
      @sprites["p3name"].bitmap.clear
      textarray = [[@players[2][3],57,0,2,Color.new(255,0,0),Color.new(255,255,255),false]]
      pbDrawTextPositions(@sprites["p3name"].bitmap,textarray)
      10.times do
        @sprites["p3name"].opacity += 25.5
        pbWait(1)
      end      
    end
    if @players[3][2] == 0 && @sprites["p4name"].opacity == 255
      Kernel.pbMessage("#{@players[3][3]} quits the game.")
      10.times do
        @sprites["p4name"].opacity -= 25.5
        pbWait(1)
      end
      @sprites["p4name"].bitmap.clear
      textarray = [[@players[3][3],57,0,2,Color.new(255,0,0),Color.new(255,255,255),false]]
      pbDrawTextPositions(@sprites["p4name"].bitmap,textarray)
      10.times do
        @sprites["p4name"].opacity += 25.5
        pbWait(1)
      end      
    end    
  end
  
  def sequenceannounce(score)
    return "a Royal Straight Flush" if score == 40000
    return "a Straight Flush" if score >= 39000
    return "a 4 of a Kind" if score >= 38000
    return "a Full House" if score >= 37000
    return "a Flush" if score >= 36000
    return "a Straight" if score >= 35000
    return "a 3 of a Kind" if score >= 30000
    return "2 Pairs" if score >= 25000
    return "a Pair" if score >= 300
    return "a High Card" 
  end
  
  def pokerdispose ###dispose all graphics
    pbDisposeSpriteHash(@sprites)
    @viewport.dispose
    @viewport2.dispose
    @viewport3.dispose
    @viewport4.dispose
    @viewport5.dispose
  end
  
  
  def pbpokepokerstart
    loop do
      Graphics.update
      Input.update
      Kernel.pbMessage("Welcome to Poke Poker!")
      Kernel.pbMessage("We have at the table #{@players[0][3]}, #{@players[1][3]}, #{@players[2][3]} and #{@players[3][3]}.")
      Kernel.pbMessage("Each player starts with #{@fee} chips, the value of the blind is #{@blindvalue} chips.")
      Kernel.pbMessage("Happy gaming and may the odds be ever in your favor!")
      while @gameover == 0
        roundannouncement
        drawcards
        playround
        roundwinner
      end
      break
    end
    pokerdispose
  end
end #classpokepoker


Required graphics:
http://www.mediafire.com/file/pcxhcsx3noqaqlc/Pokepoker.rar/file

Instructions:
1. Unzip Pokepoker.rar and place it in your /Graphics/Pictures/ folder, its files directory should be:
.../Graphics/Pictures/Pokepoker/...
2. Make a new page in your script section above main below compiler and paste the script.
3. If you don't want NPC names to be random, set @randomnpcnames = true to false in line 15, if you want to add / remove / edit the names available to the npcs, change the array @randomnames in line 97.
4. Change @chipsvariable in line 14 to the number of an empty game variable of yours, do not use a variable you're using for something else or it will be overwritten.
5. Add the event on your game:
The event can be heavily customized, I will give an example of how it could look like:

First you need to check if the player has enough coins, let's say you want the player to start with 500 chips, then it needs to have 500 coins, you can alter the ratio, like 1 coin = 2 chips, it's up to you.
If the player has enough coins, you deduct them and start the pokepoker game with this event:
Pokepoker.new(X,Y)
In this example I have used 500 coins so I changed X to 500, Y is the value of the blind, the minimum bet one player needs to pay every round, in this example I set it to 10.
After the game you need to update players coins. In this example I have a fancy message in case the player lost everything but it isn't required.


Credits: Aioros for the scripting, AmirX3 for the graphics (and coming up with the idea).
And a word of appreciation for the people who gave me a little hand here and there in thundaga discord! :)
He/Him
Hoenn
Seen July 22nd, 2023
Posted July 22nd, 2023
905 posts
3.8 Years
This looks neat!
Seen April 2nd, 2023
Posted November 18th, 2021
58 posts
5.9 Years
I have a suggestion for this since it's Pokemon but maybe customize the deck graphics to have Pokemon icons on the cards?
I tried to make it as customizable as possible, the entry fee, the blind value, minor stuff like static or dynamic opponent names so you could do something like play Poker in a machine in game corner kinda like online poker, or just do it in a physical table in game corner against same 4 people, and the graphics can be as easily replaced in pokepoker folder (it needs to respect the cards array value / suit combo and have suit replaced if you want to replace suit name).
Seen August 24th, 2023
Posted August 24th, 2023
5 posts
51 Days
I find this version of poker to be quite captivating and innovative. As a fan of diverse gambling experiences, especially poker, this mini-game adds an exciting twist to the mix. Personally, I'm drawn to online platforms that allow me to play against real opponents, adding an element of unpredictability and challenge. For those who share my preference, I'd like to recommend the service https://leafletcasino.com/casino-bonus/10-free-no-deposit-casino-bonus/. They provide a fresh review of the best Canadian online casinos with $10 free no deposit bonus in 2023. Such resources allow you to make informed decisions when choosing top-notch gaming platforms, where you can find many poker games. Happy gambling and may your choices lead to exhilarating victories!