Advertisement
warriortimmy

Main Module

Mar 12th, 2011
630
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 141.42 KB | None | 0 0
  1. =begin
  2.  
  3.   *** SCRIPT CREADO POR NEWOLD, FEBRERO-MARZO 2011, TRIPLE TRIAD 1.0 ***
  4.  
  5. =end
  6.  
  7. class TripleTriad
  8.   include Newold::CARDS # Incluye la lista de cartas definidas
  9.   include Newold::IA # Incluye la IA que usará el enemigo
  10.   include Newold::Tutorial # Incluye el tutorial
  11.   # ---------------------------------------------------------------------------
  12.   def initialize(enemy,mapid,tutorial = false,music=nil)
  13.     @enemyid = enemy # Id del enemigo con el que te enfrentas
  14.     @mapid = mapid # Id del mapa en el que te encuentras
  15.     @tutorial = tutorial
  16.     @forcemusic = music
  17.     if $deck['stats'][@enemyid] == nil
  18.       $deck['stats'][@enemyid] = {}
  19.       $deck['stats'][@enemyid]['games'] = 0
  20.       $deck['stats'][@enemyid]['wingames'] = 0
  21.       $deck['stats'][@enemyid]['lostgames'] = 0
  22.       $deck['stats'][@enemyid]['drawgames'] = 0
  23.     end
  24.     # *************************************************************************
  25.     #    INICIO DEL APARTADO DE CONFIGURACIÓN
  26.     # *************************************************************************
  27.     # ------------------------------------------------------------------
  28.     # Textos que se reproducen en el juego
  29.     # ------------------------------------------------------------------
  30.     @textos = [
  31.       ["Reglas","Igual","Suma","Pared","Pared + Suma","Pared + Igual",
  32.       "Combo","Elemental"],
  33.       ["Modo de juego","Abierto","Hasta la Muerte"],
  34.       ["Selección de cartas","Aleatorio","Manual"],
  35.       ["Método de pago","Una","Directo","Diferencia","Todas","Ninguna"],
  36.       ["Otras Frases","Has  Ganado","Tú Pierdes","Empezar Partida",
  37.       "Abandonar", "Empate","¿Jugar con las cartas seleccionadas?","Sí","No",
  38.       "Elige","carta","¿Quiéres esta/s carta/s?","Obtienes","Pierdes",
  39.       "la","siguiente","carta","Fin de la partida...",
  40.       "No has perdido ni ganado ninguna carta...","Página","de",
  41.       "Usa las teclas de dirección para seleccionar las cartas",
  42.       "Usa los botones L y R para cambiar de página",
  43.       "El rival está pensando...","Carta única",
  44.       "Ya tienes esta carta en tu colección","Falta esta carta en tu colección"]
  45.     ]
  46.  
  47.     # ------------------------------------------------------------------
  48.     # Consiguración referente a los sonidos
  49.     # ------------------------------------------------------------------
  50.     # Música que se reproduce durante el juego (Ubicación)
  51.     # (La música se eligirá aleatoriamente de esta lista)
  52.     @listsongs = [
  53.       "CardsGame/music/Hero's Come Back",
  54.       "CardsGame/music/Naruto Shippuden Ending 1 Full",
  55.       "CardsGame/music/Original Triple Triad"
  56.     ]
  57.     # Sonido que se produce al mover una carta
  58.     @soundmovecard = "CardsGame/sound/fx12"
  59.     # Sonido que se produce depositar una carta en
  60.     # el tablero
  61.     @soundmovecardoverdeck = "CardsGame/sound/fx13"
  62.     # Sonido que se produce al mover el cursor
  63.     @soundcursor = "CardsGame/sound/cursor1"
  64.     # Sonidos que se produce al mover el selector de
  65.     # turnos
  66.     @soundselectioninitialturnbegin = "CardsGame/sound/fx1"
  67.     @soundselectioninitialturnend = "CardsGame/sound/fx3"
  68.     # Sonido que se produce al cancelar
  69.     @soundcancel = "CardsGame/sound/fx4"
  70.     # Sonido que se produce al situar una carta en una casilla
  71.     # elemental siendo ésta de distinto elemento al de la carta
  72.     # (La carta se downgradea 1 punto en sus ataques (ATK - 1))
  73.     @sounddowngradecard = "CardsGame/sound/fx5"
  74.     # Sonido que se produce al situar una carta en una casilla
  75.     # elemental siendo ésta del mismo elemento al de la carta
  76.     # (La carta se upgradea 1 punto en sus ataques (ATK + 1))
  77.     @soundupgradecard = "CardsGame/sound/fx6"
  78.     # sonido que se produe al capturar las cartas en el tablero
  79.     @soundgaincards = "CardsGame/sound/fx8"
  80.     # Sonido que se produce al conseguir una pared en una jugada
  81.     @soundpared = "CardsGame/sound/fx7"
  82.     # Sonido que se produce al conseguir capturar cartas con una suma
  83.     @soundsuma = "CardsGame/sound/fx9"
  84.     # Sonido que se produce al conseguir capturar cartas con un igual
  85.     @soundigual = "CardsGame/sound/fx10"
  86.     # Sonido que se produce al conseguir un Combo
  87.     @soundcombo = "CardsGame/sound/fx14"
  88.     # Sonido que se produce al acabar una partida en empate estando
  89.     # la regla hasta la muerte activa (Empieza inmediatamente
  90.     # otra partida con las cartas actuales de los jugadores
  91.     # hasta que alguien gane o pierda)
  92.     @soundhastalamuerte = "CardsGame/sound/fx11"
  93.     # Música que se reproduce al terminar la partida
  94.     @endmusic = "CardsGame/music/victory"
  95.     # ------------------------------------------------------------------
  96.     # Consiguración referente a las imágenes
  97.     # ------------------------------------------------------------------
  98.     # Ruta Imagen del cursor
  99.     @cursorbitmap = "CardsGame/cursor/1"
  100.     # Ruta Imagen de la ventana de selección de cartas manualmente
  101.     @winselectioncardsbitmapmanual = "CardsGame/background/win0"
  102.     # Ruta Imagen para otras ventanas
  103.     @winselectioncardsbitmap = "CardsGame/background/win1"
  104.     # Ruta Imagen de la ventana de ayuda (Selección de cartas & Ayuda final)
  105.     @winhelpcardsbitmap1 = "CardsGame/background/winhelp1"
  106.     # Ruta Imagen de la ventana de ayuda (Fase de pago y juego normal)
  107.     @winhelpcardsbitmap2 = "CardsGame/background/winhelp2"
  108.     # Ruta imagen del selector en la ventana de selección
  109.     # de cartas manualmente
  110.     @winselectioncardsselectorbitmap = "CardsGame/cursor/selector1"
  111.     # Ruta imágenes para los colores de las cartas
  112.     # (carta Enemiga o del jugador)
  113.     @playercolorcardbitmap = "CardsGame/cards/playerb"
  114.     @enemycolorcardbitmap = "CardsGame/cards/enemyb"
  115.     # Ruta que contiene la imagen de sombra de las cartas
  116.     @cardshadow = "CardsGame/cards/sombra"
  117.     # Ruta a la imagen de carta volteada
  118.     @reversecard = 'CardsGame/cards/0a'
  119.     # Ruta que contiene las cartas del juegos
  120.     @foldercards = "CardsGame/cards/"
  121.     # Imagen de fondo del tablero
  122.     @backgroundimage1 = 'CardsGame/background/tablero1'
  123.     # Imagen de fondo al terminar la partida
  124.     @backgroundimage2 = 'CardsGame/background/fondo'
  125.     # Imágenes para el selector de turnos
  126.     @turnimagedown = 'CardsGame/cursor/indicador1' # Abajo
  127.     @turnimageleft = 'CardsGame/cursor/indicador2' # Izquierda
  128.     @turnimageright = 'CardsGame/cursor/indicador3' # Derecha
  129.     # ------------------------------------------------------------------
  130.     # Consiguración referente a las reglas
  131.     # ------------------------------------------------------------------
  132.     # Activar esto para usar el nuevo sistema de animaciones
  133.     # (No usar el viejo modo porque está obsoleto)
  134.     @usenewsystemani = true # DEJAR EN TRUE
  135.     # La regla Plus wall (Suma + pared) no está incluida en el
  136.     # Juego original Trile Triad,
  137.     # Desactiva esta variable (false) para no usar esta regla
  138.     @usepluswall = true
  139.     # En el juego original la regla de combo solo se activa con las
  140.     # reglas suma e igual. Desactiva esta variable (false) para
  141.     # que la regla pared no ejecute ningún combo.
  142.     # (wall / same wall / plus wall  //
  143.     #  pared / pared + igual / pared + suma)
  144.     @usecombowithwall = true
  145.     # En el juego original la regla combo siempre está activa cuando
  146.     # la regla igual o la regla suma están activas. Activa esta variable
  147.     # para que esto sea así aquí también
  148.     @activatecombowithplusorsame = true
  149.     # Con esta variable activa (true) para comprobar las reglas suma e
  150.     # igual se tendrá en cuenta cualquier color de las cartas que rodean
  151.     # a la carta jugada.
  152.     # Si se desactiva (false) solo se tendrá en cuenta las cartas de
  153.     # diferente color alrededor de la carta jugada. (false = Modo original)
  154.     @checkallcards = false
  155.     # ------------------------------------------------------------------
  156.     # Configuración de las reglas por defecto (se aplican estas reglas
  157.     # si el enemigo no tiene definido un conjunto de reglas)
  158.     # ------------------------------------------------------------------
  159.     # Nivel de difultad del enemigo (1-10) (más nivel = más difícil)
  160.     @defaultenemylevel = 4
  161.     # true =    Activar Regla
  162.     # false =   Desactivar Regla
  163.     # (rand(2) == 0 ? true : false) = Elegir aleatoriamente entre true / false
  164.     @defaultreglacombo = false
  165.     @defaultreglaigual = true
  166.     @defaultreglasuma = true
  167.     @defaultreglapared = false
  168.     @defaultreglaelemental = (rand(2) == 0 ? true : false)
  169.     @defaultreglaabierto = true
  170.     @defaultreglarandom = false
  171.     @defaultreglahastalamuerte = (rand(2) == 0 ? true : false)
  172.     # Método de pago
  173.     # (0 = Una, 1 = Directo, 2 = Diferencia, 3 = Todas,
  174.     #  4 = Ninguna y rand(5) para elegir aleatoriamente entre los 5 tipos)
  175.     @defaultreglapago = 1 # 0 por defecto (Una carta)
  176.     # ------------------------------------------------------------------
  177.     # Otras configuraciones
  178.     # ------------------------------------------------------------------
  179.     # Hace que las animaciones al voltear las cartas sean más rápidas
  180.     # (En fastmode, la cartas voltean sin mostrar el reverso, cuando se
  181.     # desactiva, las cartas muestran el reverso dando una vuelta completa,
  182.     # por lo que la animación tarda el doble de lo que tarda en fastmode, pero
  183.     # también es más bonita)
  184.     @fastmode = false # En la versión VX, esta opción siempre estará desactivada
  185.                       # ya que las animaciones aquí son mucho más rápidas que en XP
  186.     # ------------------------------------------------------------------
  187.     # *************************************************************************
  188.     #    FIN DEL APARTADO DE CONFIGURACIÓN
  189.     # *************************************************************************
  190.   end
  191.   # ---------------------------------------------------------------------------
  192.   def main
  193.     Graphics.freeze
  194.     # ----------------------------------------------
  195.     @initializing = true
  196.     @index = 0
  197.     @indexboardx = 0
  198.     @indexboardy = 0
  199.     @page = 0
  200.     @frameglobal = 0
  201.     @lastcursorx = 0
  202.     @lastcursory = 0
  203.     @anicursor1 = 0
  204.     @anicursor2 = 0
  205.     @fastmode = false
  206.     # ----------------------------------------------
  207.     # Animación del Cursor
  208.     # ----------------------------------------------
  209.     @aniglobal = [-1,-1,0,0,0,0,0,1,1,1,0,0,0,-1]
  210.     @aniglobal.concat(@aniglobal.reverse)
  211.     # ----------------------------------------------
  212.     # Animación para mover las cartas en la selección manual
  213.     # ----------------------------------------------
  214.     @animatecardselection = [[3,-7],[3,-7],[3,-14],[6,-14],[10,-14],[10,-7],
  215.     [10,-7],[15,-7],[15,-7],[15,0],[20,0],[16,0],[14,7],[12,7],[0,0],[0,14],
  216.     [0,14],[0,14],[0,14],[0,20],[0,20],[0,25],[0,25],[0,30],[0,40],[0,50],
  217.     [0,50],[0,50]]
  218.     @playerdeck = [] # mazo de cartas del jugador
  219.     @enemydeck = []  # Mazo de cartas del enemigo
  220.     # Mazo de cartas en el tablero
  221.     @boarddeck = [Array.new(3),Array.new(3),Array.new(3)]
  222.     # Array que controla las casillas del tablero elementales
  223.     @boardelemental = [Array.new(3),Array.new(3),Array.new(3)]
  224.     # Array que controla las imágenes elementales del tablero
  225.     @boardelementalima = [Array.new(3),Array.new(3),Array.new(3)]
  226.     # -----------------------------------------------------
  227.     # lista de elementalese imágenes elementales
  228.     # -----------------------------------------------------
  229.     @elementallist = []
  230.     @elementalimagelist = {}
  231.     $deck['elementallist'].each do  |key,value|
  232.       @elementallist.push(key)
  233.       @elementalimagelist[key] = value[0]
  234.     end
  235.     # -----------------------------------------------------
  236.     # Almacenar la música y sonidos sonando actualmente
  237.     # -----------------------------------------------------
  238.     #$game_system.bgm_memorize
  239.    # $game_system.bgs_memorize
  240.     # -----------------------------------------------------
  241.     # Parar la música y sonidos sonando actualmente
  242.     # -----------------------------------------------------
  243.     Audio.bgs_stop
  244.     Audio.bgm_stop
  245.     # -----------------------------------------------------
  246.     # Musica que se reproduce mientras se juega al triple triad
  247.     if @forcemusic == nil
  248.       Audio.bgm_play(@listsongs[rand(@listsongs.size)],85)
  249.     else
  250.       Audio.bgm_play(@forcemusic,85)
  251.     end
  252.     getplayercards
  253.     @tablero = Sprite.new
  254.     # Imagen del tablero
  255.     @tablero.bitmap = Bitmap.new(@backgroundimage1)
  256.     @tablero.z = -2
  257.     @cursor = Sprite.new
  258.     @cursor.z = 1010
  259.     @cursor2 = Sprite.new
  260.     @cursor2.z = 1010
  261.     @selector1 = Sprite.new
  262.     @selector1.opacity = 110
  263.     @selector1.blend_type = 2
  264.     @selector1.z = 1000
  265.     @selector2 = Sprite.new
  266.     @selector2.z = 1000
  267.     @numbercardsplayer = Sprite.new
  268.     @numbercardsplayer.bitmap = Bitmap.new(58,72)
  269.     @numbercardsplayer.x = 546
  270.     @numbercardsplayer.y = 413
  271.     @numbercardsplayer.z = 1000
  272.     @numbercardsenemy = Sprite.new
  273.     @numbercardsenemy.bitmap = Bitmap.new(58,72)
  274.     @numbercardsenemy.x = 37
  275.     @numbercardsenemy.y = 413
  276.     @numbercardsenemy.z = 1000
  277.     # Imágenes usadas en el selector de turnos
  278.     @anicursor2image = Bitmap.new(@turnimagedown)
  279.     @anicursor2image2 = Bitmap.new(@turnimageleft)
  280.     @anicursor2image3 = Bitmap.new(@turnimageright)
  281.     @selector2frame = 0
  282.     @cardpreview = Sprite.new
  283.     @cardpreview.z = 10
  284.     @totalcards = @data.size
  285.     @maxpages = (@totalcards / 17) + (@totalcards % 17 != 0 ? 1 : 0)
  286.     # Hash que guardará las imágenes de las cartas para evitar lag
  287.     @previewimas = {}
  288.     # -----------------------------------------------------
  289.     # Fase 1:
  290.     # Selección de reglas y cartas del enemigo
  291.     # -----------------------------------------------------
  292.     # Selección de reglas
  293.     getrules if !@tutorial
  294.     # Mostrar la ventana de confirmación con las reglas
  295.     # para empezar la partida
  296.     drawwin0 if !@tutorial
  297.     if !@endgame and !@tutorial
  298.       # Si la regla Elemental está activada, actualizar
  299.       # tablero con casillas elementales
  300.       iselementalgame?
  301.       Graphics.transition
  302.       # Conseguir las cartas que va a jugar el enemigo
  303.       getenemycards
  304.       # Voltear Las cartas del enemigo inicialmente
  305.       flipcardsback(0,@enemydeck,false,true)
  306.       # -----------------------------------------------------
  307.       # Selección de las cartas con las que se va a jugar.
  308.       # Si la regla @reglarandom está activada, las cartas
  309.       # se seleccionarán aleatoriamente para el jugador.
  310.       # Si está desactivada el jugador podrá elegir que
  311.       # cartas jugar en esta partida
  312.       # -----------------------------------------------------
  313.       if @reglarandom == false
  314.         # Selección de cartas manualmente
  315.         drawwin1
  316.         # Comprobar que se quiere jugar con las cartas seleccionadas
  317.         drawwin2(@textos[4][6])
  318.         while @index_window == 1
  319.           @playerdeck.each do |item|
  320.             item[0].dispose
  321.           end
  322.           @playerdeck = []
  323.           getplayercards
  324.           @begingame = false
  325.           @cursor.visible = true
  326.           drawwin1 # Selección de cartas manualmente
  327.           drawwin2(@textos[4][6]) # Comprobar si se quiere jugar con esas cartas
  328.         end
  329.         opendeckenemy?
  330.       else
  331.         getplayerdeck
  332.         # Comprobar si se aplica o no la regla abierto
  333.         opendeckenemy?(false)
  334.         soundcount = 0
  335.         while nowmovingini
  336.           animatedeckini
  337.           Audio.se_play(@soundmovecard,85) if soundcount % 2 == 0
  338.           soundcount += 1
  339.           Graphics.update
  340.         end
  341.         animatedeckini
  342.         Graphics.update
  343.       end
  344.       # -----------------------------------------------------
  345.       # Actualizar las estádisticas del jugador y el enemigo
  346.       # -----------------------------------------------------
  347.       $deck['stats'][@enemyid]['games'] += 1
  348.       $deck['stats']['player']['games'] += 1
  349.       # -----------------------------------------------------
  350.       # Dibujar la cantidad de cartas para cada jugador
  351.       # -----------------------------------------------------
  352.       checknumbercardsindeck
  353.       # -----------------------------------------------------
  354.       # Establecer turno Inicial:
  355.       # -----------------------------------------------------
  356.        getfirstturn
  357.        draw_text_action
  358.       # -----------------------------------------------------
  359.       # Dibujar la ayuda In-Game
  360.       # -----------------------------------------------------
  361.       draw_help_in_game
  362.       # -----------------------------------------------------
  363.       # Establecer otras variables iniciales:
  364.       # -----------------------------------------------------
  365.       @initializing = false
  366.       @noselection = nil
  367.       @simulation = false
  368.       # -----------------------------------------------------
  369.       # Arrays para reconstruir los decks del jugador y la
  370.       # máquina al acabar la partida (Toma la id única)
  371.       # Si el método de pago es 'directo' cada jugador
  372.       # recibirá las cartas de su color tras la partida, y si
  373.       # es 'todas' el ganador se quedará con todas las cartas
  374.       # -----------------------------------------------------
  375.       @playerreconstructor = [] # Modo antiguo
  376.       @enemyreconstructor = [] # Modo antiguo
  377.       @newplayerdeckbackup = [] # Modo actual
  378.       @newenemydeckbackup = [] # Modo actual
  379.       @playerdeck.each do |item| # Modo antiguo
  380.         id = item[2][0]
  381.         @playerreconstructor.push(id)
  382.         @newplayerdeckbackup.push(item.dup)
  383.       end
  384.       @enemydeck.each do |item| # Modo antiguo
  385.         id = item[2][0]
  386.         @enemyreconstructor.push(id)
  387.         @newenemydeckbackup.push(item.dup)
  388.       end
  389.       for i in 0...@newplayerdeckbackup.size # Modo actual
  390.         s = Sprite.new
  391.         s.z = @newplayerdeckbackup[i][0].z
  392.         s.x = -600
  393.         s.y = -600
  394.         s.bitmap = @newplayerdeckbackup[i][0].bitmap.dup
  395.         @newplayerdeckbackup[i][0] = s
  396.       end
  397.       for i in 0...@newenemydeckbackup.size # Modo actual
  398.         s = Sprite.new
  399.         s.z = @newenemydeckbackup[i][0].z
  400.         s.x = -600
  401.         s.y = -600
  402.         s.bitmap = @newenemydeckbackup[i][0].bitmap.dup
  403.         @newenemydeckbackup[i][0] = s
  404.       end
  405.       # -----------------------------------------------------
  406.       # Comienzo del loop principal del juego
  407.       # -----------------------------------------------------
  408.       loop do
  409.         Graphics.update
  410.         Input.update
  411.         @frameglobal += 1
  412.         if @frameglobal >= 100
  413.           @frameglobal = 0
  414.           Graphics.frame_reset
  415.         end
  416.         animateselector2 if @frameglobal % 3 == 0
  417.         animatecursor1
  418.         animatetextaction if @fase != -1
  419.         # Comprobar turno
  420.         case @fase
  421.         when -2 # Salir del Triple Triad
  422.           $scene = Scene_Map.new
  423.           break
  424.         when -1: # Partida acabada
  425.           if (@playercardsgainingame != @enemycardsgainingame and
  426.             @reglapago < 4) or @reglapago == 1
  427.             begin_fase_pago
  428.           else
  429.             $scene = Scene_Map.new
  430.             break
  431.           end
  432.         when 0: # Turno Jugador (Fase 1)
  433.           update_fase0
  434.         when 2: # Turno Jugador (Fase 2)
  435.           update_fase2
  436.           animatecursor2
  437.         when 3:
  438.           update_fase3
  439.         when 1: # Turno Enemigo
  440.           update_fase1
  441.         when 10: # Cuando ganas y el método de pago es 1 o diferencia, se activa
  442.           update_fase_pago
  443.         when 100
  444.           $scene = Scene_Map.new
  445.           break
  446.         end
  447.         if @newgame
  448.           @newgame = nil
  449.         end
  450.       end
  451.     end
  452.     if @tutorial
  453.       showtutorial
  454.       $scene = Scene_Map.new
  455.     end
  456.     Audio.bgm_stop
  457.     Graphics.freeze
  458.     dispose
  459.     # -----------------------------------------------------
  460.     # Restaurar la música y sonidos almacenados
  461.     # -----------------------------------------------------
  462.     #$game_system.bgm_restore
  463.     #$game_system.bgs_restore
  464.     # -----------------------------------------------------
  465.     Graphics.transition(10)
  466.     # Eliminando datos inservibles en la lista de cartas del jugador
  467.     #for i in 0...$deck['player'].size
  468.       #if $deck['player'][i] == []
  469.         #$deck['player'][i] = nil
  470.       #end
  471.     #end
  472.   end
  473.   # ---------------------------------------------------------------------------
  474.   def flipcardsback(dir,cards,animatemode = true,nowin = false)
  475.     # Hace que las cartas indicadas (cards) volteen mostrando el dorso
  476.     flipcardsbacknew
  477.   end
  478.   # ---------------------------------------------------------------------------
  479.   def flipcardsfront(dir,cards, animatemode = true,nowin = false)
  480.     # Hace que las cartas volteadas indicadas (cards)
  481.     # volteen mostrando la imagen de la carta
  482.     flipcardsfrontnew
  483.   end
  484.   # ---------------------------------------------------------------------------
  485.   def flipcardsbacknew(backreverse = false)
  486.     # Método para voltear las cartas
  487.     # backreverse = false => Las cartas voltean mostrando el dorso
  488.     # backreverse = true => Las cartas voltean mostrando la imagen de la carta
  489.     return if @animatecardsflip == nil
  490.     return if @animatecardsflip.size == 0
  491.     ima0 = @previewimas[@reversecard]
  492.     shadow = Bitmap.new(@cardshadow)
  493.     imas = []
  494.     realx = @indexboardx
  495.     realy = @indexboardy
  496.     if @fase != -1
  497.       if @boarddeck[realx][realy] != nil and
  498.         @boarddeck[realx][realy] != -1 and backreverse
  499.         @boarddeck[realx][realy][2][5] == 0 ?
  500.             imatop = Bitmap.new(@playercolorcardbitmap) :
  501.             imatop = Bitmap.new(@enemycolorcardbitmap)
  502.       elsif @boarddeck[realx][realy] != nil and
  503.             @boarddeck[realx][realy] != -1 and !backreverse  
  504.          @boarddeck[realx][realy][2][5] == 0 ?
  505.             imatop = Bitmap.new(@enemycolorcardbitmap) :
  506.             imatop = Bitmap.new(@playercolorcardbitmap)  
  507.       else
  508.         imatop = Bitmap.new(@playercolorcardbitmap)    
  509.       end
  510.     else
  511.       imatopplayer = Bitmap.new(@enemycolorcardbitmap)
  512.       imatopenemy = Bitmap.new(@playercolorcardbitmap)
  513.     end
  514.     case @animatecardsflip.size
  515.     when 1
  516.       suavize = 2
  517.     when 2
  518.       suavize = 1
  519.     else
  520.       suavize = 0
  521.     end
  522.     suavize = 2
  523.     for i in 0...@animatecardsflip.size
  524.       if @fase == -1 and !backreverse
  525.         @animatecardsflip[i][0][2][5] == 0 ?
  526.         imatop = Bitmap.new(@enemycolorcardbitmap) :
  527.         imatop = Bitmap.new(@playercolorcardbitmap)
  528.       elsif @fase == -1 and backreverse
  529.         @animatecardsflip[i][0][2][5] == 0 ?
  530.         imatop = Bitmap.new(@playercolorcardbitmap) :
  531.         imatop = Bitmap.new(@enemycolorcardbitmap)
  532.       end
  533.       card = @animatecardsflip[i][0] # real card = card[2], card[0] = Sprite
  534.       x = @animatecardsflip[i][1]
  535.       y = @animatecardsflip[i][2]
  536.       if @animatecardsflip[i][3] != nil
  537.         realx = @animatecardsflip[i][3]
  538.         realy = @animatecardsflip[i][4]
  539.       end
  540.       realbitmap = Bitmap.new("#{@foldercards}#{card[2][7]}")#@previewimas["#{@foldercards}#{card[2][7]}"].dup
  541.       im = Bitmap.new(133,164)
  542.       im.blt(0,0,realbitmap,Rect.new(0,0,133,164))
  543.       bitmap = im
  544.       s1 = Sprite.new
  545.       s1.bitmap = bitmap
  546.       s1.x = card[0].x - 16
  547.       s1.y = card[0].y - 24
  548.       s1.z = 3000
  549.       s1.zoom_x = s1.zoom_y = 1.00
  550.       im = Bitmap.new(133,164)
  551.       im.blt(0,0,imatop,Rect.new(0,0,133,164))
  552.       bitmap = im
  553.       s2 = Sprite.new
  554.       s2.bitmap = bitmap
  555.       s2.x = card[0].x - 16
  556.       s2.y = card[0].y - 24
  557.       s2.z = 3000
  558.       s2.zoom_x = s2.zoom_y = 1.00
  559.       s3 = Sprite.new
  560.       s3.bitmap = Bitmap.new(@cardpreview.bitmap.width,@cardpreview.bitmap.height)
  561.       s3.bitmap.stretch_blt(s3.bitmap.rect,shadow,shadow.rect)
  562.       s3.x = card[0].x + 4
  563.       s3.y = card[0].y + 10
  564.       s3.z = 2999
  565.       if realx == x
  566.         if realy > y
  567.           type = 0 # Posición arriba
  568.           modx = 5
  569.           mody = -4
  570.         else
  571.           type = 3 # Posición abajo
  572.           modx = 5
  573.           mody = 4
  574.         end
  575.       elsif realy == y
  576.         if realx > x
  577.           type = 1 # Posición izquierda
  578.           modx = 5
  579.           mody = 20
  580.         else
  581.           type = 2 # Posición derecha
  582.           modx = -5
  583.           mody = 20
  584.         end
  585.       else
  586.         type = 2
  587.         modx = -5
  588.         mody = 20
  589.       end
  590.       imas.push([realbitmap,s1,s2,type,modx,mody,s3])
  591.     end
  592.     imas.each do |item|
  593.       item[1].x += item[4]
  594.       item[1].y += item[5]
  595.       item[2].x += item[4]
  596.       item[2].y += item[5]
  597.     end
  598.     zoomer = 0.16
  599.     if backreverse
  600.       s1.zoom_x += zoomer
  601.       s1.zoom_y += zoomer
  602.       s2.zoom_x += zoomer
  603.       s2.zoom_y += zoomer
  604.     end
  605.     for i in 0...3
  606.       #break if @fastmode and backreverse
  607.       cnt = 0
  608.       imas.each do |item|
  609.         if @fase == -1
  610.           @animatecardsflip[cnt][0][2][5] == 0 ?
  611.             imatop = imatopenemy : imatop = imatopplayer
  612.           cnt += 1
  613.         end
  614.         bitmap = (!backreverse ? item[0] : ima0)
  615.         type = item[3]
  616.         s1 = item[1]
  617.         s2 = item[2]
  618.         s1.bitmap.clear
  619.         s2.bitmap.clear
  620.         s3 = item[6]
  621.         s3.opacity -= 44
  622.         case type
  623.         when 0
  624.           x = (6 -i) * 133
  625.           y = 164
  626.           x -= 3 if i == 0
  627.         when 1
  628.           x = (6 -i) * 133
  629.           y = 0
  630.           x -= 3 if i == 0
  631.         when 2
  632.           x = 133 + (133 * i)
  633.           y = 0
  634.           x -= 3 if i == 2
  635.         when 3
  636.           x = 133 + (133 * i)
  637.           y = 164
  638.           x -= 3 if i == 2
  639.         end
  640.         s1.bitmap.blt(0,0,bitmap,Rect.new(x,y,133,164))
  641.         s2.bitmap.blt(0,0,imatop,Rect.new(x,y,133,164)) if !backreverse
  642.       end
  643.       if @initializing
  644.         movecardpreview
  645.         s1.y = s2.y = @cardpreview.y - 24
  646.       end
  647.       animatetextaction if @forzechain
  648.       if !backreverse
  649.         s1.zoom_x += zoomer / 6
  650.         s1.zoom_y += zoomer / 6
  651.         s2.zoom_x += zoomer / 6
  652.         s2.zoom_y += zoomer / 6
  653.       else
  654.         s1.zoom_x -= zoomer / 6
  655.         s1.zoom_y -= zoomer / 6
  656.         s2.zoom_x -= zoomer / 6
  657.         s2.zoom_y -= zoomer / 6
  658.       end
  659.       Graphics.update
  660.       Graphics.update
  661.       animatetextaction if @forzechain and suavize > 0
  662.       Graphics.update if suavize > 0
  663.     end
  664.     for i in 0...3
  665.       #break if @fastmode and !backreverse
  666.       cnt = 0
  667.       imas.each do |item|
  668.         if @fase == -1
  669.           @animatecardsflip[cnt][0][2][5] == 0 ?
  670.             imatop = imatopenemy : imatop = imatopplayer
  671.           cnt += 1
  672.         end
  673.         bitmap = (!backreverse ? ima0 : item[0])
  674.         type = item[3]
  675.         s1 = item[1]
  676.         s2 = item[2]
  677.         s1.bitmap.clear
  678.         s2.bitmap.clear
  679.         s3 = item[6]
  680.         s3.opacity -= 44
  681.         case type
  682.         when 0
  683.           x = (133 * 3) - (133 * i)
  684.           y = 164
  685.           x -= 3 if i == 0
  686.         when 1
  687.           x = (133 * 3) - (133 * i)
  688.           y = 0
  689.           x -= 3 if i == 0
  690.         when 2
  691.           x = (133 * 4) + (133 * i)
  692.           y = 0
  693.           x -= 3 if i == 2
  694.         when 3
  695.           x = (133 * 4) + (133 * i)
  696.           y = 164
  697.           x -= 3 if i == 2
  698.         end
  699.         s1.bitmap.blt(0,0,bitmap,Rect.new(x,y,133,164))
  700.         s2.bitmap.blt(0,0,imatop,Rect.new(x,y,133,164)) if backreverse
  701.       end
  702.       if @initializing
  703.         movecardpreview
  704.         s1.y = s2.y = @cardpreview.y - 24
  705.       end
  706.       animatetextaction if @forzechain
  707.       if !backreverse
  708.         s1.zoom_x += zoomer / 6
  709.         s1.zoom_y += zoomer / 6
  710.         s2.zoom_x += zoomer / 6
  711.         s2.zoom_y += zoomer / 6
  712.       else
  713.         s1.zoom_x -= zoomer / 6
  714.         s1.zoom_y -= zoomer / 6
  715.         s2.zoom_x -= zoomer / 6
  716.         s2.zoom_y -= zoomer / 6
  717.       end
  718.       Graphics.update
  719.       Graphics.update
  720.       animatetextaction if @forzechain and suavize > 1
  721.       Graphics.update if suavize > 1
  722.     end
  723.     imas.each do |item|
  724.       item[1].x -= item[4]
  725.       item[1].y -= item[5]
  726.       item[2].x -= item[4]
  727.       item[2].y -= item[5]
  728.     end
  729.     cnt = 0
  730.     imas.each do |item|
  731.       if @fase == -1
  732.         @animatecardsflip[cnt][0][2][5] == 0 ?
  733.           imatop = imatopenemy : imatop = imatopplayer
  734.         cnt += 1
  735.       end
  736.       bitmap = (!backreverse ? ima0 : item[0])
  737.       type = item[3]
  738.       s1 = item[1]
  739.       s2 = item[2]
  740.       s1.bitmap.clear
  741.       s2.bitmap.clear
  742.       s1.bitmap.blt(0,0,bitmap,Rect.new(0,0,133,164))
  743.       s2.bitmap.blt(0,0,imatop,Rect.new(0,0,133,164)) if backreverse
  744.       animatetextaction if @forzechain
  745.     end
  746.     Graphics.update
  747.     Audio.se_play(@soundmovecardoverdeck,85) if backreverse
  748.     imas.each do |item|
  749.       item[0].dispose
  750.       item[1].dispose
  751.       item[2].dispose
  752.       item[6].dispose
  753.     end
  754.   end
  755.   # ---------------------------------------------------------------------------
  756.   def flipcardsfrontnew
  757.     # Hace que las cartas volteadas indicadas (cards)
  758.     # volteen mostrando la imagen de la carta
  759.     flipcardsbacknew(true)
  760.     @animatecardsflip = []
  761.   end
  762.   # ---------------------------------------------------------------------------
  763.   def drawwin0
  764.     # Dibuja la venta que muestra las reglas del juego activas
  765.     texto0 = "#{@textos[0][0]}:"
  766.     texto1 = ""
  767.     texto1 += "  * #{@textos[1][2]}" if @reglahastalamuerte
  768.     texto2 = "  * #{@textos[2][0]}: " +
  769.               (@reglarandom ? @textos[2][1] : @textos[2][2])
  770.     texto3 = ""
  771.     texto3 += (texto3 != "" ? ", " : "") + "#{@textos[0][1]}" if @reglaigual
  772.     texto3 += (texto3 != "" ? ", " : "") + "#{@textos[0][2]}" if @reglasuma
  773.     texto3 += (texto3 != "" ? ", " : "") + "#{@textos[0][3]}" if @reglapared
  774.     texto3 += (texto3 != "" ? ", " : "") + "#{@textos[0][6]}" if @reglacombo
  775.     texto3 += (texto3 != "" ? ", " : "") + "#{@textos[1][1]}" if @reglaabierto
  776.     texto3 = "  * #{texto3}" if texto3 != ""
  777.     texto4 = ""
  778.     texto4 += "  * #{@textos[0][7]}" if @reglaelemental
  779.     texto5 = "  * #{@textos[3][0]}: " +
  780.             (case @reglapago
  781.             when 0:
  782.               "#{@textos[3][1]}"
  783.             when 1:
  784.               "#{@textos[3][2]}"
  785.             when 2:
  786.               "#{@textos[3][3]}"
  787.             when 3:
  788.               "#{@textos[3][4]}"
  789.             when 4:
  790.               "#{@textos[3][5]}"
  791.             end)
  792.     texto6 = "#{@textos[4][3]}"
  793.     texto7 = "#{@textos[4][4]}"
  794.     win = Bitmap.new(1,1)
  795.     win.font.size = 20
  796.     h = (@noselection == nil ? 110 : 55)
  797.     h += 22 if texto1 != ""
  798.     h += 22 if texto2 != ""
  799.     h += 22 if texto3 != ""
  800.     h += 22 if texto4 != ""
  801.     h += 22 if texto5 != ""
  802.     w = 0
  803.     w = 40 + win.text_size(texto1).width if w < 40 + win.text_size(texto1).width
  804.     w = 40 + win.text_size(texto2).width if w < 40 + win.text_size(texto2).width
  805.     w = 40 + win.text_size(texto3).width if w < 40 + win.text_size(texto3).width
  806.     w = 40 + win.text_size(texto4).width if w < 40 + win.text_size(texto4).width
  807.     w = 40 + win.text_size(texto5).width if w < 40 + win.text_size(texto5).width
  808.     if @noselection == nil
  809.       w = 80 + win.text_size(texto6).width if w < 80 + win.text_size(texto6).width
  810.       w = 80 + win.text_size(texto7).width if w < 80 + win.text_size(texto7).width
  811.     end
  812.     @win0 = Sprite.new
  813.     @win0.bitmap = Bitmap.new(w,h)
  814.     @win0.bitmap.font.size = 20
  815.     win = Bitmap.new(@winselectioncardsbitmap)
  816.     @win0.bitmap.stretch_blt(@win0.bitmap.rect,win,win.rect)
  817.     @win0.x = 320 - (@win0.bitmap.width / 2)
  818.     @win0.y = 240 - (@win0.bitmap.height / 2)
  819.     @win0.z = 20000 if @noselection
  820.     mod_pos = [[1,0],[-1,0],[0,-1],[0,1]]
  821.     @win0.bitmap.font.color = Color.new(0,0,0,255)
  822.     for i in 0...mod_pos.size
  823.       x = 15
  824.       y = 15
  825.       x1 = x + mod_pos[i][0]
  826.       y1 = y + mod_pos[i][1]
  827.       @win0.bitmap.draw_text(x1,y1,w-30,20,texto0)
  828.       y += 30
  829.       y1 = y + mod_pos[i][1]
  830.       @win0.bitmap.draw_text(x1,y1,w-30,20,texto1)
  831.       y += 20 if texto1 != ""
  832.       y1 = y + mod_pos[i][1]
  833.       @win0.bitmap.draw_text(x1,y1,w-30,20,texto2)
  834.       y += 20 if texto2 != ""
  835.       y1 = y + mod_pos[i][1]
  836.       @win0.bitmap.draw_text(x1,y1,w-30,20,texto3)
  837.       y += 20 if texto3 != ""
  838.       y1 = y + mod_pos[i][1]
  839.       @win0.bitmap.draw_text(x1,y1,w-30,20,texto4)
  840.       y += 20 if texto4 != ""
  841.       y1 = y + mod_pos[i][1]
  842.       @win0.bitmap.draw_text(x1,y1,w-30,20,texto5)
  843.       if @noselection == nil
  844.         y += 30
  845.         y1 = y + mod_pos[i][1]
  846.         @win0.bitmap.draw_text(x1+40,y1,w-30,20,texto6)
  847.         y += 20
  848.         y1 = y + mod_pos[i][1]
  849.         @win0.bitmap.draw_text(x1+40,y1,w-30,20,texto7)
  850.       end
  851.     end
  852.     @win0.bitmap.font.color = Color.new(255,255,255,255)
  853.     x = 15
  854.     y = 15
  855.     @win0.bitmap.draw_text(x,y,w-30,20,texto0)
  856.     y += 30
  857.     @win0.bitmap.draw_text(x,y,w-30,20,texto1)
  858.     y += 20 if texto1 != ""
  859.     @win0.bitmap.draw_text(x,y,w-30,20,texto2)
  860.     y += 20 if texto2 != ""
  861.     @win0.bitmap.draw_text(x,y,w-30,20,texto3)
  862.     y += 20 if texto3 != ""
  863.     @win0.bitmap.draw_text(x,y,w-30,20,texto4)
  864.     y += 20 if texto4 != ""
  865.     @win0.bitmap.draw_text(x,y,w-30,20,texto5)
  866.     if @noselection == nil
  867.       y += 30
  868.       @win0.bitmap.draw_text(x+40,y,w-30,20,texto6)
  869.       y += 20
  870.       @win0.bitmap.draw_text(x+40,y,w-30,20,texto7)
  871.       @cursor.bitmap = Bitmap.new(@cursorbitmap)
  872.       @cursor.x = @win0.x + 20
  873.       @cursor.y = @win0.y + y - 18
  874.       Graphics.transition
  875.       index = 0
  876.       loop do
  877.         Graphics.update
  878.         Input.update
  879.         animatecursor1
  880.         if Input.trigger?(Input::C) and index == 0
  881.           Audio.se_play(@soundcursor,85)
  882.           if @reglarandom
  883.             @cursor.visible = false
  884.           end
  885.           @win0.dispose
  886.           break
  887.         end
  888.         if Input.trigger?(Input::B) or
  889.           (Input.trigger?(Input::C) and index == 1)
  890.           Audio.se_play(@soundcancel,85)
  891.           if index == 0 and Input.trigger?(Input::B)
  892.             index = 1
  893.             for i in 0...2
  894.               @cursor.y += 10
  895.               animatecursor1
  896.               Graphics.update
  897.             end
  898.           end
  899.           Graphics.freeze
  900.           @endgame = true
  901.           @win0.dispose
  902.           @cursor.visible = false
  903.           $scene = Scene_Map.new
  904.           Graphics.transition(5)
  905.           break
  906.         end
  907.         if Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN)
  908.           Audio.se_play(@soundcursor,85)
  909.           if Input.repeat?(Input::UP)
  910.             index == 0 ? index = 1 : index = 0
  911.           end
  912.           if Input.repeat?(Input::DOWN)
  913.             index == 0 ? index = 1 : index = 0
  914.           end
  915.           for i in 0...2
  916.             index == 0 ? @cursor.y -= 10 : @cursor.y += 10
  917.             animatecursor1
  918.             Graphics.update
  919.           end
  920.         end
  921.       end
  922.     end
  923.   end
  924.   # ---------------------------------------------------------------------------
  925.   def drawwin1
  926.     # Dibuja la ventana de selección de cartas manual
  927.     @win = Sprite.new
  928.     @win.bitmap = Bitmap.new(@winselectioncardsbitmapmanual)
  929.     @win.x = 0
  930.     @win.y = 0
  931.     v = Viewport.new(112,61,261,@win.bitmap.height)
  932.     @data_win = Sprite.new(v)
  933.     @data_win.bitmap = Bitmap.new(@win.bitmap.width,@win.bitmap.height)
  934.     @data_win.bitmap.font.size = 18
  935.     drawcontentwin1
  936.     @cursor.bitmap = Bitmap.new(@cursorbitmap)
  937.     @cursor.x = 82
  938.     @cursor.y = 74
  939.     @selector1.bitmap = Bitmap.new(@winselectioncardsselectorbitmap)
  940.     @selector1.x = 118
  941.     @selector1.y = @cursor.y  - 2
  942.     createcardpreview
  943.     @pagenumber = Sprite.new
  944.     @pagenumber.bitmap = Bitmap.new(201,22)
  945.     @pagenumber.bitmap.font.size = 20
  946.     @pagenumber.x = 142
  947.     @pagenumber.y = 414
  948.     drawpageinwin1
  949.     @help = Sprite.new
  950.     @help.bitmap = Bitmap.new(@winhelpcardsbitmap1)
  951.     @help.x = 8
  952.     @help.y = 6
  953.     draw_help_manual_selection_cards
  954.     maxsound = 5
  955.     playsoundcnt = 0
  956.     n = 0
  957.     loop do
  958.       Graphics.update
  959.       Input.update
  960.       break if @begingame
  961.       updatemovewin1
  962.       animatecursor1
  963.       animatecontentwin1
  964.       animatedeckini
  965.       movecardpreview
  966.       if playsoundcnt % 2 == 0 and maxsound > 0
  967.         Audio.se_play(@soundmovecard,85)
  968.         maxsound -= 1
  969.       end
  970.       playsoundcnt += 1
  971.       n += 1
  972.       if n == 300
  973.         n = 0
  974.         Graphics.frame_reset
  975.       end
  976.     end
  977.     @win.dispose
  978.     @pagenumber.dispose
  979.     @data_win.viewport.dispose
  980.     @data_win.dispose
  981.     @help.dispose
  982.   end
  983.   # ---------------------------------------------------------------------------
  984.   def drawpageinwin1
  985.     # Dibuja el número de página en la ventana de selección de cartas manual
  986.     @pagenumber.bitmap.clear
  987.     data_pos = [[1,0],[0,2],[0,1],[-1,0],[0,-1]]
  988.     color1 = Color.new(0,0,0,255)
  989.     color2 = Color.new(219,158,12,255)
  990.     texto1 = @textos[4][19] # Página...
  991.     texto2 = @textos[4][20] # De...
  992.     page = @page + 1
  993.     if @maxpages > 1
  994.       text = "#{texto1} #{page} #{texto2} #{@maxpages}"
  995.     else
  996.      text = "#{texto1} #{page}"
  997.     end
  998.     @pagenumber.bitmap.font.color = color1
  999.     for i in 0...data_pos.size
  1000.       x = 0 + data_pos[i][0]
  1001.       y = 0 + data_pos[i][1]
  1002.       @pagenumber.bitmap.draw_text(x,y,201,22,text,1)
  1003.     end
  1004.     @pagenumber.bitmap.font.color = color2
  1005.     @pagenumber.bitmap.draw_text(0,0,201,22,text,1)
  1006.   end
  1007.   # ---------------------------------------------------------------------------
  1008.   def draw_help_manual_selection_cards
  1009.     # Dibuja la ayuda cuando la ventana de selección de cartas manual está activa
  1010.     text1 = @textos[4][21]
  1011.     text2 = @textos[4][22]
  1012.     data_pos = [[1,0],[-1,0],[0,1],[0,-1],[0,2]]
  1013.     color1 = Color.new(0,0,0,255)
  1014.     color2 = Color.new(255,255,255,255)
  1015.     @help.bitmap.font.size = 18
  1016.     @help.bitmap.font.color = color1
  1017.     for i in 0...data_pos.size
  1018.       x = 12 + data_pos[i][0]
  1019.       y = 6  + data_pos[i][1]
  1020.       @help.bitmap.draw_text(x,y,386,20,text1,1)
  1021.       @help.bitmap.draw_text(x,y+20,386,20,text2,1)
  1022.     end
  1023.     @help.bitmap.font.color = color2
  1024.     @help.bitmap.draw_text(12,6,386,20,text1,1)
  1025.     @help.bitmap.draw_text(12,26,386,20,text2,1)
  1026.   end
  1027.   # ---------------------------------------------------------------------------
  1028.   def drawcontentwin1(individual = false,last_index = -1)
  1029.     # Dibuja el contenido de la ventana de selección de cartas manual
  1030.     @data_win.bitmap.clear if !individual
  1031.     x = 10
  1032.     y = 10
  1033.     pos_mod = [[1,0],[-1,0],[0,1],[0,-1]]
  1034.     n1 = @page * 17
  1035.     n2 = n1 + 17
  1036.     for i in n1...n2
  1037.       return if i >= @data.size
  1038.       if individual and i != @index and i != last_index
  1039.         y += 20
  1040.         next
  1041.       end
  1042.       item = @data[i]
  1043.       if item == nil or item == []
  1044.         return
  1045.       end
  1046.       cards = item[1]
  1047.       current_card = item[0] + 1
  1048.       cards_in_use = item[2]
  1049.       n = cards.size
  1050.       name = cards[0][1]
  1051.       @data_win.bitmap.font.color = Color.new(0,0,0,255)
  1052.       if i == @index
  1053.         mod_x = 6
  1054.         if cards.size - cards_in_use > 0
  1055.           textcolor = Color.new(169,192,237,255)
  1056.         else
  1057.           textcolor = Color.new(158,158,158,255)
  1058.         end
  1059.         @data_win.bitmap.fill_rect(x,y,246,20,Color.new(0,0,0,0))
  1060.       elsif i == last_index
  1061.         mod_x = 0
  1062.         if cards.size - cards_in_use > 0
  1063.           textcolor = Color.new(255,255,255,255)
  1064.         else
  1065.           textcolor = Color.new(158,158,158,255)
  1066.         end
  1067.         @data_win.bitmap.fill_rect(x,y,246,20,Color.new(0,0,0,0))
  1068.       else
  1069.         mod_x = 0
  1070.         if cards.size - cards_in_use > 0
  1071.           textcolor = Color.new(255,255,255,255)
  1072.         else
  1073.           textcolor = Color.new(158,158,158,255)
  1074.         end
  1075.       end
  1076.       for z in 0...pos_mod.size
  1077.         x1 = x + pos_mod[z][0]
  1078.         y1 = y + pos_mod[z][1]
  1079.         @data_win.bitmap.draw_text(x1+mod_x,y1,208,20,"#{name.capitalize}")
  1080.         @data_win.bitmap.draw_text(x1+200,y1,38,20,"#{current_card}/#{n}",2)
  1081.       end
  1082.       @data_win.bitmap.font.color = textcolor
  1083.       @data_win.bitmap.draw_text(x+mod_x,y,208,20,"#{name.capitalize}")
  1084.       @data_win.bitmap.draw_text(x+200,y,38,20,"#{current_card}/#{n}",2)
  1085.       y += 20
  1086.     end
  1087.   end
  1088.   # ---------------------------------------------------------------------------
  1089.   def drawwin2(text)
  1090.     # Dibuja una ventana de selección Sí / No
  1091.     texto1 = text # Título
  1092.     texto2 = @textos[4][7] # Sí
  1093.     texto3 = @textos[4][8] # No
  1094.     win = Bitmap.new(1,1)
  1095.     win.font.size = 22
  1096.     h = 100
  1097.     w = 20 + win.text_size(texto1).width
  1098.     @win2 = Sprite.new
  1099.     @win2.bitmap = Bitmap.new(w,h)
  1100.     @win2.bitmap.font.size = 22
  1101.     win = Bitmap.new(@winselectioncardsbitmap)
  1102.     @win2.bitmap.stretch_blt(@win2.bitmap.rect,win,win.rect)
  1103.     @win2.x = 320 - (@win2.bitmap.width / 2)
  1104.     @win2.y = 240 - (@win2.bitmap.height / 2)
  1105.     @win2.z = 20000
  1106.     mod_pos = [[1,0],[-1,0],[0,-1],[0,1],[2,0],[-2,0],[0,-2],[0,2]]
  1107.     @win2.bitmap.font.color = Color.new(0,0,0,255)
  1108.     for i in 0...mod_pos.size
  1109.       x = 15
  1110.       y = 15
  1111.       x1 = x + mod_pos[i][0]
  1112.       y1 = y + mod_pos[i][1]
  1113.       @win2.bitmap.draw_text(x1,y1,w-30,22,texto1)
  1114.       y += 30
  1115.       y1 = y + mod_pos[i][1]
  1116.       @win2.bitmap.draw_text(x1+40,y1,w-30,22,texto2)
  1117.       y += 20
  1118.       y1 = y + mod_pos[i][1]
  1119.       @win2.bitmap.draw_text(x1+40,y1,w-30,22,texto3)
  1120.     end
  1121.     @win2.bitmap.font.color = Color.new(255,255,255,255)
  1122.     x = 15
  1123.     y = 15
  1124.     @win2.bitmap.draw_text(x,y,w-30,22,texto1)
  1125.     y += 30
  1126.     @win2.bitmap.draw_text(x+40,y,w-30,22,texto2)
  1127.     y += 20
  1128.     @win2.bitmap.draw_text(x+40,y,w-30,22,texto3)
  1129.     @index_window = 0
  1130.     @cursor.bitmap = Bitmap.new(@cursorbitmap)
  1131.     @cursor.x = @win2.x + 20
  1132.     @cursor.y = @win2.y + y - 18
  1133.     @cursor.visible = true
  1134.     bakcursor = @cursor.z
  1135.     @cursor.z = 200000
  1136.     n = 0
  1137.     loop do
  1138.       Graphics.update
  1139.       Input.update
  1140.       animatecursor1
  1141.       if Input.trigger?(Input::B) or Input.trigger?(Input::C)
  1142.         Audio.se_play(@soundcancel,85)
  1143.         if @index_window == 0 and Input.trigger?(Input::B)
  1144.           @index_window = 1
  1145.           for i in 0...2
  1146.             @cursor.y += 10
  1147.             animatecursor1
  1148.             Graphics.update
  1149.           end
  1150.         end
  1151.         Graphics.freeze
  1152.         @win2.dispose
  1153.         @cursor.visible = false
  1154.         Graphics.transition(5)
  1155.         @index = 0 + (@page * 17)
  1156.         break
  1157.       end
  1158.       if Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN)
  1159.         Audio.se_play(@soundcursor,85)
  1160.         if Input.repeat?(Input::UP)
  1161.           @index_window == 0 ? @index_window = 1 : @index_window = 0
  1162.         end
  1163.         if Input.repeat?(Input::DOWN)
  1164.           @index_window == 0 ? @index_window = 1 : @index_window = 0
  1165.         end
  1166.         for i in 0...2
  1167.           @index_window == 0 ? @cursor.y -= 10 : @cursor.y += 10
  1168.           animatecursor1
  1169.           Graphics.update
  1170.         end
  1171.       end
  1172.       n += 1
  1173.       if n == 300
  1174.         n = 0
  1175.         Graphics.frame_reset
  1176.       end
  1177.     end
  1178.     @cursor.z = bakcursor
  1179.   end
  1180.   # ---------------------------------------------------------------------------
  1181.   def animatetextaction
  1182.     # Mueve el texto que se dibuja al realizar un Combo, Suma, Pared...
  1183.     if @textaction != nil
  1184.       @textaction.x -= 35
  1185.     end
  1186.   end
  1187.   # ---------------------------------------------------------------------------      
  1188.   def animatecontentwin1
  1189.     # Movimiento del texto en la ventana de selección de cartas manual
  1190.     # cuando se cambia de página
  1191.     @data_win.ox += 16 if @data_win.ox < 0
  1192.     @data_win.ox -= 16 if @data_win.ox > 0
  1193.   end
  1194.   # ---------------------------------------------------------------------------
  1195.   def createcardpreview(nomove = false,backmode = false,cardfix = nil,
  1196.     forcecreate = false,forcecolor = nil)
  1197.     # Método para dibujar las diferentes cartas (le añade los valores
  1198.     # de ataque y el color que indica quién es el propietario actual)
  1199.     if @data != nil
  1200.       if @data[@index] == nil and !forcecreate
  1201.         @cardpreview.bitmap.clear
  1202.         return
  1203.       end
  1204.     end
  1205.     if @previewimas[@playercolorcardbitmap] == nil
  1206.       @previewimas[@playercolorcardbitmap] = Bitmap.new(@playercolorcardbitmap)
  1207.     end
  1208.     if @previewimas[@enemycolorcardbitmap] == nil
  1209.       @previewimas[@enemycolorcardbitmap] = Bitmap.new(@enemycolorcardbitmap)
  1210.     end
  1211.     if @previewimas[@reversecard] == nil
  1212.       @previewimas[@reversecard] = Bitmap.new(@reversecard)
  1213.     end
  1214.     if nomove
  1215.       @cardpreview.visible = false
  1216.       flipcardsback(1,[@cardpreview])
  1217.       @cardpreview.visible = true
  1218.     end
  1219.     if !backmode
  1220.       if cardfix == nil
  1221.         card_list = @data[@index][1]
  1222.         current_card = @data[@index][0]
  1223.         name = card_list[current_card][1]
  1224.         ima0 = @previewimas[@reversecard]
  1225.         @previewimas[@reversecard]
  1226.         im = Bitmap.new(91,128)
  1227.         im.stretch_blt(im.rect,ima0,Rect.new(16,25,91,128))
  1228.         ima0 = im
  1229.         im = Bitmap.new("#{@foldercards}#{card_list[current_card][7]}")
  1230.         if @previewimas["#{@foldercards}#{card_list[current_card][7]}"] == nil
  1231.           @previewimas["#{@foldercards}#{card_list[current_card][7]}"] = im.dup
  1232.         else
  1233.           im = @previewimas["#{@foldercards}#{card_list[current_card][7]}"].dup
  1234.         end
  1235.         ima = Bitmap.new(91,128)
  1236.         ima.stretch_blt(ima.rect,im,Rect.new(16,25,91,128))
  1237.         # Color para la carta ..............................
  1238.         if forcecolor == nil
  1239.           card_list[current_card][5] == 0 ?
  1240.           ima1 = @previewimas[@playercolorcardbitmap].dup :
  1241.           ima1 = @previewimas[@enemycolorcardbitmap].dup rescue ima1 = Bitmap.new(@playercolorcardbitmap)
  1242.         else
  1243.           forcecolor == 0 ?
  1244.           ima1 = @previewimas[@playercolorcardbitmap].dup :
  1245.           ima1 = @previewimas[@enemycolorcardbitmap].dup rescue ima1 = Bitmap.new(@playercolorcardbitmap)
  1246.         end
  1247.         im = Bitmap.new(91,128)
  1248.         im.stretch_blt(im.rect,ima1,Rect.new(16,25,91,128))
  1249.         ima1 = im
  1250.         # ..................................................
  1251.       else
  1252.         name = cardfix[1]
  1253.         ima0 = @previewimas[@reversecard]
  1254.         im = Bitmap.new(91,128)
  1255.         im.stretch_blt(im.rect,ima0,Rect.new(16,25,91,128))
  1256.         ima0 = im
  1257.         im = Bitmap.new("#{@foldercards}#{cardfix[7]}")
  1258.         if @previewimas["#{@foldercards}#{cardfix[7]}"] == nil
  1259.           @previewimas["#{@foldercards}#{cardfix[7]}"] = im.dup
  1260.         else
  1261.           im = @previewimas["#{@foldercards}#{cardfix[7]}"].dup
  1262.         end
  1263.         ima = Bitmap.new(91,128)
  1264.         ima.stretch_blt(ima.rect,im,Rect.new(16,25,91,128))
  1265.         # Color para la carta ..............................
  1266.         if forcecolor == nil
  1267.           cardfix[5] == 0 ?
  1268.           ima1 = @previewimas[@playercolorcardbitmap].dup :
  1269.           ima1 = @previewimas[@enemycolorcardbitmap].dup
  1270.         else
  1271.           forcecolor == 0 ?
  1272.           ima1 = @previewimas[@playercolorcardbitmap].dup :
  1273.           ima1 = @previewimas[@enemycolorcardbitmap].dup
  1274.         end
  1275.         im = Bitmap.new(91,128)
  1276.         im.stretch_blt(im.rect,ima1,Rect.new(16,25,91,128))
  1277.         ima1 = im
  1278.         # ..................................................
  1279.       end
  1280.     else
  1281.       ima0 = @previewimas[@reversecard]
  1282.       im = Bitmap.new(91,128)
  1283.       im.stretch_blt(im.rect,ima0,Rect.new(16,25,91,128))
  1284.       ima0 = im
  1285.     end
  1286.     @cardpreview.bitmap = Bitmap.new(91,128)
  1287.     if !backmode
  1288.       @cardpreview.bitmap.blt(0,0,ima,ima.rect)
  1289.       @cardpreview.bitmap.stretch_blt(Rect.new(-2,0,93,128),ima1,ima1.rect)
  1290.     else
  1291.       @cardpreview.bitmap.blt(0,0,ima0,ima0.rect)
  1292.     end
  1293.     if !nomove
  1294.       @cardpreview.x = 378
  1295.       @cardpreview.y = 570
  1296.       @cardpreview.opacity = 20
  1297.     end
  1298.     # Añadir los valores de ataque y el nombre
  1299.     # en la carta en la posición indicada
  1300.     if !backmode
  1301.       if cardfix == nil
  1302.         pos = card_list[current_card][8]
  1303.         atks = card_list[current_card][3]
  1304.       else
  1305.         pos = cardfix[8]
  1306.         atks = cardfix[3]
  1307.       end
  1308.       pos_mod = [[1,0],[-1,0],[0,1],[0,-1],[2,0],[-2,0],[0,2],[0,-2]]
  1309.       atk_arr = (atks[0] == 10 ? "A" : atks[0])
  1310.       atk_izq = (atks[1] == 10 ? "A" : atks[1])
  1311.       atk_der = (atks[2] == 10 ? "A" : atks[2])
  1312.       atk_aba = (atks[3] == 10 ? "A" : atks[3])
  1313.       case pos
  1314.       when 0 # Arriba Izquierda
  1315.         x = -15
  1316.         y = 6
  1317.       when 1 # Arriba Derecha
  1318.         x = 28
  1319.         y = 6
  1320.       when 2 # Inferior Izquierda
  1321.         x = -15
  1322.         y = 70
  1323.       when 3 # Inferior Derecha
  1324.         x = 28
  1325.         y = 70
  1326.       end
  1327.       @cardpreview.bitmap.font.color = Color.new(0,0,0,255)
  1328.       for i in 0...pos_mod.size
  1329.         x1 = x + pos_mod[i][0]
  1330.         y1 = y + pos_mod[i][1]
  1331.         @cardpreview.bitmap.font.size = 20
  1332.         # Posición Ataque Arriba
  1333.         @cardpreview.bitmap.draw_text(x1,y1,80,20,"#{atk_arr}",1)
  1334.         # Posición Ataque Izquierda / Derecha
  1335.         @cardpreview.bitmap.draw_text(x1,y1+15,80,20,"#{atk_izq} #{atk_der}",1)
  1336.         # Posición Ataque Abajo
  1337.         @cardpreview.bitmap.draw_text(x1,y1+30,80,20,"#{atk_aba}",1)
  1338.         # nombre de la carta
  1339.         @cardpreview.bitmap.font.size = 13
  1340.         #@cardpreview.bitmap.draw_text(5+pos_mod[i][0],112+pos_mod[i][1],
  1341.         #61,20,"#{name}",1)
  1342.       end
  1343.       @cardpreview.bitmap.font.color = Color.new(255,255,255,255)
  1344.       @cardpreview.bitmap.font.size = 20
  1345.       # Posición Ataque Arriba
  1346.       @cardpreview.bitmap.draw_text(x,y,80,20,"#{atk_arr}",1)
  1347.       # Posición Ataque Izquierda / Derecha
  1348.       @cardpreview.bitmap.draw_text(x,y+15,80,20,"#{atk_izq} #{atk_der}",1)
  1349.       # Posición Ataque Abajo
  1350.       @cardpreview.bitmap.draw_text(x,y+30,80,20,"#{atk_aba}",1)
  1351.       # nombre de la carta
  1352.       @cardpreview.bitmap.font.size = 13
  1353.       #@cardpreview.bitmap.draw_text(5,112,61,20,"#{name}",1)
  1354.     end
  1355.     if nomove
  1356.       @cardpreview.visible = false
  1357.       flipcardsfront(1,[@cardpreview])
  1358.       @cardpreview.visible = true
  1359.     end
  1360.   end
  1361.   # ---------------------------------------------------------------------------
  1362.   def drawonlycardscolor(card,color)
  1363.     # Dibuja solo el color del propietario de la carta indicada a la misma
  1364.     color == 0 ?
  1365.     ima1 = @previewimas[@playercolorcardbitmap].dup :
  1366.     ima1 = @previewimas[@enemycolorcardbitmap].dup
  1367.     im = Bitmap.new(91,128)
  1368.     im.stretch_blt(im.rect,ima1,Rect.new(16,25,91,128))
  1369.     ima1 = im
  1370.     card.bitmap.stretch_blt(Rect.new(-2,0,93,128),ima1,ima1.rect)
  1371.   end
  1372.   # ---------------------------------------------------------------------------
  1373.   def drawelementalvals
  1374.     # Método que se encarga de dibujar el modificador de ataque a una carta
  1375.     # cuando esta es depositada en el tablero y la regla elemental está activa
  1376.     for x in 0...3
  1377.       for y in 0...3
  1378.         card = @boarddeck[x][y]
  1379.         next if @boardelemental[x][y] == nil
  1380.         next if card == nil or card == -1
  1381.         card_element = card[2][2]
  1382.         pos_mod = [[1,0],[-1,0],[0,1],[0,-1],[2,0],[-2,0],[0,2],[0,-2]]
  1383.         if @boardelemental[x][y] == card_element
  1384.           plus_atk = "+1"
  1385.         else
  1386.           plus_atk = "-1"
  1387.         end
  1388.         card[0].bitmap.font.size = 44
  1389.         card[0].bitmap.font.color = Color.new(0,0,0,255)
  1390.         card[0].bitmap.font.italic = true
  1391.         for i in 0...pos_mod.size
  1392.           x1 = 0 + pos_mod[i][0]
  1393.           y1 = 35 + pos_mod[i][1]
  1394.           card[0].bitmap.draw_text(x1,y1,91,128,"#{plus_atk}",1)
  1395.         end
  1396.         if @boardelemental[x][y] == card_element
  1397.           card[0].bitmap.font.color = Color.new(0,180,0,255)
  1398.         else
  1399.           card[0].bitmap.font.color = Color.new(200,0,0,255)
  1400.         end
  1401.         card[0].bitmap.draw_text(0,35,91,128,"#{plus_atk}",1)
  1402.         card[0].bitmap.font.italic = false
  1403.       end
  1404.     end
  1405.   end
  1406.   # ---------------------------------------------------------------------------
  1407.   def movecardpreview
  1408.     # Mueve la carta de previsualización que se muestra en la ventana de
  1409.     # selección de cartas manual de abajo a arriba
  1410.     @cardpreview.y -= 40
  1411.     @cardpreview.y = 160 if @cardpreview.y < 160
  1412.     @cardpreview.opacity += 27
  1413.   end
  1414.   # ---------------------------------------------------------------------------
  1415.   def getplayercards
  1416.     # Método que devuelve las cartas en posesión del jugador
  1417.     @data = []
  1418.     $deck['player'].each do |cards|
  1419.       if cards != nil and cards.size > 0
  1420.         # [Index Carta Actual,Lista de cartas,Cartas en uso,Nombre de la Carta]
  1421.         @data.push([0,cards.dup,0,cards[0][1]])
  1422.       end
  1423.     end
  1424.   end
  1425.   # ---------------------------------------------------------------------------
  1426.   def updatemovewin1
  1427.     # Update Selección Manual de cartas iniciales para el jugador
  1428.     # Mostrar las reglas activas
  1429.     if @limitframehere == nil
  1430.       @limitframehere = 0
  1431.     end
  1432.     if @fase == 3
  1433.       update_fase3
  1434.       return
  1435.     end
  1436.     if Input.trigger?(Input::Y) or Input.trigger?(Input::Z)
  1437.       @backupfase = @fase
  1438.       @noselection = true
  1439.       drawwin0
  1440.       @noselection = nil
  1441.       @blackbackground = Sprite.new
  1442.       @blackbackground.bitmap = Bitmap.new(640,480)
  1443.       @blackbackground.bitmap.fill_rect(0,0,640,480,Color.new(0,0,0,180))
  1444.       @blackbackground.z = 15000
  1445.       @fase = 3
  1446.       return
  1447.     end
  1448.     last_index = @index
  1449.     # Abajo
  1450.     if Input.press?(Input::DOWN) and @limitframehere == 0
  1451.       Audio.se_play(@soundcursor,92)
  1452.       if @cursor.y < 394
  1453.         @index += 1
  1454.         if @data[@index] != nil
  1455.           Audio.se_play(@soundmovecard,85)
  1456.         end
  1457.         for i in 0...2
  1458.           @cursor.y += 9
  1459.           @selector1.y = @cursor.y  - 2
  1460.           movecardpreview
  1461.           animatedeckini
  1462.           Graphics.update
  1463.         end
  1464.         @cursor.y += 2
  1465.         @selector1.y = @cursor.y  - 2
  1466.       else
  1467.         @index -= 16
  1468.         if @data[@index] != nil
  1469.           Audio.se_play(@soundmovecard,85)
  1470.         end
  1471.         for i in 0...4
  1472.           @cursor.y -= 80
  1473.           @selector1.y = @cursor.y  - 2
  1474.           movecardpreview
  1475.           animatedeckini
  1476.           Graphics.update
  1477.         end
  1478.       end
  1479.       drawcontentwin1(true,last_index)
  1480.       createcardpreview
  1481.       @limitframehere = 2
  1482.       return
  1483.     end
  1484.     # Arriba
  1485.     if Input.press?(Input::UP) and @limitframehere == 0
  1486.       Audio.se_play(@soundcursor,85)
  1487.       if @cursor.y > 74
  1488.         @index -= 1
  1489.         if @data[@index] != nil
  1490.           Audio.se_play(@soundmovecard,85)
  1491.         end
  1492.         for i in 0...2
  1493.           @cursor.y -= 9
  1494.           @selector1.y = @cursor.y  - 2
  1495.           movecardpreview
  1496.           animatedeckini
  1497.           Graphics.update
  1498.         end
  1499.         @cursor.y -= 2
  1500.         @selector1.y = @cursor.y  - 2
  1501.       else
  1502.         @index += 16
  1503.         if @data[@index] != nil
  1504.           Audio.se_play(@soundmovecard,85)
  1505.         end
  1506.         for i in 0...4
  1507.           @cursor.y += 80
  1508.           @selector1.y = @cursor.y  - 2
  1509.           movecardpreview
  1510.           animatedeckini
  1511.           Graphics.update
  1512.         end
  1513.       end
  1514.       drawcontentwin1(true,last_index)
  1515.       createcardpreview
  1516.       @limitframehere = 2
  1517.       return
  1518.     end
  1519.     @limitframehere -= 1 if @limitframehere > 0
  1520.     # Derecha
  1521.     if Input.repeat?(Input::RIGHT)
  1522.       return if @data[@index] == nil
  1523.       card_list = @data[@index][1]
  1524.       return if card_list.size <= 1
  1525.       @data[@index][0] = @data[@index][0] + 1
  1526.       if @data[@index][0] >= @data[@index][1].size
  1527.         @data[@index][0] = 0
  1528.       end
  1529.       Audio.se_play(@soundmovecard,85)
  1530.       drawcontentwin1(true,last_index)
  1531.       ima = @cardpreview
  1532.       card = @data[@index][1][@data[@index][0]].dup
  1533.       @animatecardsflip = [[[ima,0,card,0],-1,0]]
  1534.       bak_fast_mode = @fastmode
  1535.       @fastmode = false
  1536.       createcardpreview(true)
  1537.       flipcardsfrontnew
  1538.       @fastmode = bak_fast_mode
  1539.       return
  1540.     end
  1541.     # Izquierda
  1542.     if Input.repeat?(Input::LEFT)
  1543.       return if @data[@index] == nil
  1544.       card_list = @data[@index][1]
  1545.       return if card_list.size <= 1
  1546.       @data[@index][0] = @data[@index][0] - 1
  1547.       if @data[@index][0] < 0
  1548.         @data[@index][0] = @data[@index][1].size - 1
  1549.       end
  1550.       Audio.se_play(@soundmovecard,85)
  1551.       drawcontentwin1(true,last_index)
  1552.       ima = @cardpreview
  1553.       card = @data[@index][1][@data[@index][0]].dup
  1554.       @animatecardsflip = [[[ima,0,card,0],1,0]]
  1555.       bak_fast_mode = @fastmode
  1556.       @fastmode = false
  1557.       createcardpreview(true)
  1558.       flipcardsfrontnew
  1559.       @fastmode = bak_fast_mode
  1560.       return
  1561.     end
  1562.     # Aceptar (Seleccionar carta)
  1563.     if Input.trigger?(Input::C)
  1564.       return if @playerdeck.size == 5
  1565.       return if @data[@index] == nil
  1566.       return if @data[@index][1].size - @data[@index][2] <= 0
  1567.       Audio.se_play(@soundmovecard,100)
  1568.       @cardpreview.y = 160
  1569.       ima = Sprite.new
  1570.       ima.x = @cardpreview.x
  1571.       ima.y = @cardpreview.y
  1572.       ima.bitmap = @cardpreview.bitmap.dup
  1573.       ima.z = @playerdeck.size + 1
  1574.       card = @data[@index][1][@data[@index][0]].dup
  1575.       # [Copia de la imagen de la carta,frame de animación,carta,plus atk]....
  1576.       @playerdeck.push([ima,0,card,0])
  1577.       # .............................................................
  1578.       @data[@index][1].delete_at(@data[@index][0])
  1579.       @data[@index][0] = 0
  1580.       if @data[@index][1].size == 0
  1581.         @data.delete_at(@index)
  1582.         drawcontentwin1
  1583.       end
  1584.       rebuilddatawin1
  1585.       createcardpreview
  1586.       drawcontentwin1(true,last_index)
  1587.       if @playerdeck.size == 5
  1588.         @cursor.visible = false
  1589.         @selector1.visible = false
  1590.         @pagenumber.visible = false
  1591.         @help.visible = false
  1592.         while nowmovingini
  1593.           animatedeckini
  1594.           Graphics.update
  1595.           @win.opacity = @data_win.opacity -= 20
  1596.         end
  1597.         animatedeckini
  1598.         Graphics.update
  1599.         @cardpreview.bitmap.clear
  1600.         @win.visible = false
  1601.         @data_win.visible = false
  1602.         @begingame = true
  1603.       end
  1604.       return
  1605.     end
  1606.     # R (Desplazamiento página a la derecha)
  1607.     if Input.trigger?(Input::R)
  1608.       return if @maxpages == 1
  1609.       Audio.se_play(@soundcursor,85)
  1610.       @page += 1
  1611.       if @page == @maxpages
  1612.         @page = 0
  1613.         @index -= (17 * (@maxpages-1))
  1614.       else
  1615.         @index += 17
  1616.       end
  1617.       @data_win.ox = -112
  1618.       drawcontentwin1
  1619.       createcardpreview
  1620.       drawpageinwin1
  1621.       return
  1622.     end
  1623.     # L (Desplazamiento página a la izquierda)
  1624.     if Input.trigger?(Input::L)
  1625.       return if @maxpages == 1
  1626.       Audio.se_play(@soundcursor,85)
  1627.       @page -= 1
  1628.       if @page == -1
  1629.         @page = @maxpages-1
  1630.         @index += (17 * (@maxpages-1))
  1631.       else
  1632.         @index -= 17
  1633.       end
  1634.       @data_win.ox = 112
  1635.       drawcontentwin1
  1636.       createcardpreview
  1637.       drawpageinwin1
  1638.       return
  1639.     end
  1640.   end
  1641.   # ---------------------------------------------------------------------------
  1642.   def rebuilddatawin1
  1643.     # Al seleccionar las cartas manualmente antes de jugar aparece una ventana
  1644.     # de confirmación, si se decide cambiar las cartas seleccionadas, este
  1645.     # método se encarga de reconstruir la ventana de selección de cartas manual
  1646.     data = []
  1647.     @data.each do |item|
  1648.       if item[1] != []
  1649.         data.push(item)
  1650.       end
  1651.     end
  1652.     @data = data
  1653.     @totalcards = @data.size
  1654.     @maxpages = (@totalcards / 17) + (@totalcards % 17 != 0 ? 1 : 0)
  1655.     if @page == @maxpages
  1656.       @page -= 1
  1657.       @index -= 17
  1658.       drawcontentwin1
  1659.     end
  1660.     drawpageinwin1
  1661.   end
  1662.   # ---------------------------------------------------------------------------
  1663.   def nowmovingini
  1664.     # Este método se encarga de que las cartas no se muevan tras posicionarse
  1665.     # en el lugar donde deberían estar
  1666.     for i in 0...@playerdeck.size
  1667.       ima = @playerdeck[i][0]
  1668.       frame = @playerdeck[i][1]
  1669.       return true if frame <= @animatecardselection.size - 1 or
  1670.                      ima.y > 36 + (i * 74)
  1671.     end
  1672.     return false
  1673.   end
  1674.   # ---------------------------------------------------------------------------
  1675.   def animatecursor1
  1676.     # Animación del cursor 1
  1677.     return if @fase == 2
  1678.     @anicursor1 = 0 if @anicursor1 == @aniglobal.size
  1679.     @cursor.x += @aniglobal[@anicursor1]
  1680.     @anicursor1 += 1
  1681.     # Animar selector
  1682.     case @aniglobal[@anicursor1]
  1683.     when -1:
  1684.       @selector1.opacity -= 10
  1685.     when 1:
  1686.       @selector1.opacity += 10
  1687.     end
  1688.     if @begingame
  1689.       @selector1.visible = false
  1690.     else
  1691.       @data[@index] == nil ?
  1692.         @selector1.visible = false : @selector1.visible = true
  1693.     end
  1694.   end
  1695.   # ---------------------------------------------------------------------------
  1696.   def animatecursor2
  1697.     # Animación del cursor 2
  1698.     @anicursor2 = 0 if @anicursor2 == @aniglobal.size
  1699.     @cursor2.x += @aniglobal[@anicursor2]
  1700.     @anicursor2 += 1
  1701.   end
  1702.   # ---------------------------------------------------------------------------
  1703.   def animatedeckini(frame = 2)
  1704.     # Método que se encarga de posicionar las cartas en sus lugares correctos
  1705.     for i in 0...@playerdeck.size
  1706.       item = @playerdeck[i]
  1707.       ima = item[0]
  1708.       frame = item[1] + 1
  1709.       item[1] = frame
  1710.       if frame <= @animatecardselection.size - 1 and ima.y < 460
  1711.         ima.x += @animatecardselection[frame][0]
  1712.         ima.y += @animatecardselection[frame][1]
  1713.       else
  1714.         item[1] = @animatecardselection.size
  1715.         if ima.y > (36 + (i * 74)) + ((5-@playerdeck.size) * 74)
  1716.           ima.y -= 21
  1717.         else
  1718.           ima.y += frame
  1719.           if ima.y > (36 + (i * 74)) + ((5-@playerdeck.size) * 74)
  1720.             ima.y = (36 + (i * 74)) + ((5-@playerdeck.size) * 74)
  1721.           end
  1722.         end
  1723.       end
  1724.     end
  1725.     for i in 0...@enemydeck.size
  1726.       item = @enemydeck[i]
  1727.       ima = item[0]
  1728.       if ima.y > (36 + (i * 74)) + ((5-@enemydeck.size) * 74)
  1729.         ima.y -= 21
  1730.       else
  1731.         ima.y += frame
  1732.         if ima.y > (36 + (i * 74)) + ((5-@enemydeck.size) * 74)
  1733.           ima.y = (36 + (i * 74)) + ((5-@enemydeck.size) * 74)
  1734.         end
  1735.       end
  1736.     end
  1737.   end
  1738.   # ---------------------------------------------------------------------------
  1739.   def movecardstodecks
  1740.     # Método que se encarga de mover una carta desde su posición en el tablero
  1741.     # hasta su posición original en su respectivo mazo de cartas
  1742.     deck1 = []
  1743.     deck2 = []
  1744.     for i in 0...5
  1745.       item = @playerdeck[i]
  1746.       item[1] = @animatecardselection.size
  1747.       item[3] = 0
  1748.       createcardpreview(false,false,item[2],true)
  1749.       item[0].bitmap = @cardpreview.bitmap.dup
  1750.       createcardpreview(false,false,item[2],true)
  1751.       ima = item[0]
  1752.       ima.z = i
  1753.       x = (527-ima.x) / 16
  1754.       y = 36 + (i * 74)
  1755.       deck1.push([x,(y-ima.y)/16,527,y])
  1756.       item = @enemydeck[i]
  1757.       item[3] = 0
  1758.       createcardpreview(false,false,item[2],true)
  1759.       item[0].bitmap = @cardpreview.bitmap.dup
  1760.       ima = item[0]
  1761.       ima.z = i
  1762.       x = (ima.x-20) / 16
  1763.       y = 36 + (i * 74)
  1764.       deck2.push([x,(y-ima.y)/16,20,y])
  1765.     end
  1766.     for n in 0...16
  1767.       Audio.se_play(@soundmovecard,85) if n % 3 == 0
  1768.       for i in 0...5
  1769.         item1 = @playerdeck[i]
  1770.         item2 = @enemydeck[i]
  1771.         ima1 = item1[0]
  1772.         ima2 = item2[0]
  1773.         ima1.x += deck1[i][0]
  1774.         ima2.x -= deck2[i][0]
  1775.         ima1.y += deck1[i][1]
  1776.         ima2.y += deck2[i][1]
  1777.       end
  1778.       animatetextaction
  1779.       Graphics.update
  1780.     end
  1781.     for i in 0...5
  1782.       item1 = @playerdeck[i]
  1783.       item2 = @enemydeck[i]
  1784.       ima1 = item1[0]
  1785.       ima2 = item2[0]
  1786.       ima1.x = deck1[i][2]
  1787.       ima2.x = deck2[i][2]
  1788.       ima1.y = deck1[i][3]
  1789.       ima2.y = deck2[i][3]
  1790.     end
  1791.     animatetextaction
  1792.     Graphics.update
  1793.   end
  1794.   # ---------------------------------------------------------------------------
  1795.   def animateselector2
  1796.     return if @selector2.bitmap == nil
  1797.     @selector2.bitmap.clear
  1798.     @selector2frame += 1
  1799.     @selector2frame = 0 if @selector2frame == 9
  1800.     @selector2.bitmap.blt(0,0,@anicursor2image,
  1801.     Rect.new(@selector2frame*39,0,39,18))
  1802.   end
  1803.   # ---------------------------------------------------------------------------
  1804.   def opendeckenemy?(animatemode = true)
  1805.     # ------------------------------------------------
  1806.     # Da la vuelta a todas las cartas del enemigo
  1807.     # Si la regla @reglaabierto está activada
  1808.     # ------------------------------------------------
  1809.     if @reglaabierto
  1810.       # ------------------------------------------------
  1811.       Audio.se_play(@soundmovecard,100)
  1812.       bitmapsnew = []
  1813.       @animatecardsflip = []
  1814.       @enemydeck.each do |item|
  1815.         card = item[2]
  1816.         createcardpreview(false,false,card,true)
  1817.         item[0].bitmap = @cardpreview.bitmap.dup
  1818.         item[0].visible = false
  1819.         bitmapsnew.push(item[0])
  1820.         @animatecardsflip.push([item,1,0])
  1821.         drawonlycardscolor(item[0],1)
  1822.       end
  1823.       @cardpreview.y = 560
  1824.       @cardpreview.visible = false
  1825.       @fase = -1
  1826.       @initializing = false
  1827.       flipcardsfrontnew
  1828.       @initializing = true
  1829.       bitmapsnew.each do |ima|
  1830.         #ima.dispose
  1831.       end
  1832.       @enemydeck.each do |item|
  1833.         item[0].visible = true
  1834.       end
  1835.       # ------------------------------------------------
  1836.     end
  1837.     # ------------------------------------------------
  1838.   end
  1839.   # ---------------------------------------------------------------------------
  1840.   def getenemycards
  1841.     # Construye el mazo de cartas que usará el enemigo en la batalla
  1842.     enemycards = $deck['enemy'][@enemyid].dup
  1843.     enemycards = enemycards.rsort # Desordenar lista
  1844.     stolencards = []
  1845.     owncards = []
  1846.     maxcards = 5
  1847.     allcardsinuse = false
  1848.     backmode = true
  1849.     # Separar cartas robadas de cartas propias
  1850.     enemycards.each do |cards|
  1851.       next if cards == nil
  1852.       cards.each do |card|
  1853.         if card[6] == 0
  1854.           stolencards.push(card.dup)
  1855.         else
  1856.           owncards.push(card.dup)
  1857.         end
  1858.       end
  1859.     end
  1860.     # Recorrer cada carta robada y comprobar si se va a jugar con ella
  1861.     for i in 0...stolencards.size
  1862.       card = stolencards[i]
  1863.       cardid = i
  1864.       atk_perc = ((card[3][0] + card[3][1] + card[3][2] + card[3][3]) * 2) +
  1865.                (card[4] == 1 ? 20 : 0)
  1866.       # atk será el porcentaje para usar esa carta en la batalla
  1867.       if rand(101) <= atk_perc
  1868.         createcardpreview(false,backmode,card,true)
  1869.         ima = Sprite.new
  1870.         ima.x = 20
  1871.         ima.y = 36 + (@enemydeck.size * 74) + (480 + (20 * @enemydeck.size))
  1872.         ima.bitmap = @cardpreview.bitmap.dup
  1873.         ima.z = @enemydeck.size
  1874.         # [Copia de la imagen de la carta,frame de animación,carta,plus atk]....
  1875.         @enemydeck.push([ima,0,card,0])
  1876.         #owncards.delete_at(cardid)
  1877.         if @enemydeck.size == 5
  1878.           allcardsinuse = true
  1879.           break
  1880.         end
  1881.       end
  1882.     end
  1883.     # Seleccionar aleatoriamente las demás cartas a jugar
  1884.     if allcardsinuse == false
  1885.       n = 5-@enemydeck.size
  1886.       for i in 0...n
  1887.         cardid = rand(owncards.size)
  1888.         card = owncards[cardid]
  1889.         createcardpreview(false,backmode,card,true)
  1890.         ima = Sprite.new
  1891.         ima.x = 20
  1892.         ima.y = 36 + (@enemydeck.size * 74) + (480 + (74 * @enemydeck.size))
  1893.         ima.bitmap = @cardpreview.bitmap.dup
  1894.         ima.z = @enemydeck.size
  1895.         # [Copia de la imagen de la carta,frame de animación,carta,plus atk]....
  1896.         @enemydeck.push([ima,0,card,0])
  1897.         owncards.delete_at(cardid)
  1898.         # .............................................................
  1899.       end
  1900.     end
  1901.   end
  1902.   # ---------------------------------------------------------------------------
  1903.   def getplayerdeck
  1904.     # Construye el mazo de cartas que usará el jugador cuando la regla Random
  1905.     # está activa
  1906.     playercards = $deck['player'].dup
  1907.     owncards = []
  1908.     maxcards = 5
  1909.     backmode = false
  1910.     # Crear un array con todas las cartas
  1911.     playercards.each do |cards|
  1912.       next if cards == nil
  1913.       cards.each do |card|
  1914.         owncards.push(card.dup)
  1915.       end
  1916.     end
  1917.     # Seleccionar aleatoriamente las cartas a jugar
  1918.     for i in 0...5
  1919.       cardid = rand(owncards.size)
  1920.       card = owncards[cardid]
  1921.       createcardpreview(false,backmode,card)
  1922.       ima = Sprite.new
  1923.       ima.x = 527
  1924.       ima.y = 36 + (@playerdeck.size * 74) + (480 + (74 * @playerdeck.size))
  1925.       ima.bitmap = @cardpreview.bitmap.dup
  1926.       ima.z = @playerdeck.size
  1927.       # [Copia de la imagen de la carta,frame de animación,carta,plus atk]....
  1928.       @playerdeck.push([ima,0,card,0])
  1929.       owncards.delete_at(cardid)
  1930.       # .............................................................
  1931.     end
  1932.   end
  1933.   # ---------------------------------------------------------------------------
  1934.   def getfirstturn(newgame = false)
  1935.     # Método que se encarga de establecer quién empezará jugando (Enemigo o Jugador)
  1936.     @index = 0
  1937.     @indexboardx = @indexboardy = 1
  1938.     bitmap1 = @anicursor2image2
  1939.     bitmap2 = @anicursor2image3
  1940.     @selector2.bitmap = Bitmap.new(18,39)
  1941.     @selector2.zoom_x = 2.3
  1942.     @selector2.zoom_y = 1.5
  1943.     @selector2.x = 290
  1944.     @selector2.y = 218
  1945.     turn = rand(2)
  1946.     frame = 0
  1947.     maxframes = 9
  1948.     maxloop = 15 + rand(15)
  1949.     maxloop += 1 if turn == 1 and maxloop % 2 == 0
  1950.     for i in 0...(maxloop)
  1951.       (i % 2 == 0 ? bitmap = bitmap1 : bitmap = bitmap2)
  1952.       @selector2.bitmap.clear
  1953.       @selector2.bitmap.blt(0,0,bitmap,Rect.new(0,frame*39,18,39))
  1954.       frame += 1 if i % 3 == 0
  1955.       frame = 0 if frame == maxframes
  1956.       Audio.se_play(@soundselectioninitialturnbegin,100) if i % 3 == 0
  1957.       Graphics.update
  1958.     end
  1959.     for i in 0...12
  1960.       (turn == 1 ? bitmap = bitmap1 : bitmap = bitmap2)
  1961.       @selector2.bitmap.clear
  1962.       @selector2.bitmap.blt(0,0,bitmap,Rect.new(0,frame*39,18,39))
  1963.       frame += 1 if i % 3 == 0
  1964.       frame = 0 if frame == maxframes
  1965.       Graphics.update
  1966.     end
  1967.     @selector2.bitmap = Bitmap.new(39,18)
  1968.     @selector2.bitmap.blt(0,0,@anicursor2image,
  1969.     Rect.new(@selector2frame*39,0,39,18))
  1970.     Audio.se_play(@soundselectioninitialturnend,100)
  1971.     for i in 0...10
  1972.       if turn == 0 # Turno del jugador
  1973.         @selector2.x += 26
  1974.       else # Turno Enemigo
  1975.         @selector2.x -= 25
  1976.       end
  1977.       @selector2.y -= (i * 10 + 19) - (5/3)
  1978.       @selector2.y = 17 if @selector2.y < 17
  1979.       @selector2.zoom_x -= 0.13
  1980.       @selector2.zoom_y -= 0.05
  1981.       @frameglobal += 1
  1982.       animateselector2 if @frameglobal % 3 == 0
  1983.       Graphics.update
  1984.     end
  1985.     for i in 0...2
  1986.       @frameglobal += 1
  1987.       animateselector2 if @frameglobal % 3 == 0
  1988.       Graphics.update
  1989.       @frameglobal += 1
  1990.       animateselector2 if @frameglobal % 3 == 0
  1991.       Graphics.update
  1992.     end
  1993.     if turn == 1
  1994.       @selector2.x += 6
  1995.       @fase = 1
  1996.     else
  1997.       @fase = 0
  1998.       poscursoroverplayerdeck if !newgame
  1999.     end
  2000.   end
  2001.   # ---------------------------------------------------------------------------
  2002.   def update_fase0
  2003.     # Turno Jugador (Seleccionar que carta se va a jugar)
  2004.     # (Fase 3 - Mostrar las reglas activa si se pulsa Y o Z)
  2005.     if Input.trigger?(Input::Y) or Input.trigger?(Input::Z)
  2006.       @backupfase = @fase
  2007.       @noselection = true
  2008.       drawwin0
  2009.       @noselection = nil
  2010.       @blackbackground = Sprite.new
  2011.       @blackbackground.bitmap = Bitmap.new(640,480)
  2012.       @blackbackground.bitmap.fill_rect(0,0,640,480,Color.new(0,0,0,180))
  2013.       @blackbackground.z = 15000
  2014.       @fase = 3
  2015.       return
  2016.     end
  2017.     if Input.press?(Input::DOWN)
  2018.       Audio.se_play(@soundmovecard,85)
  2019.       Audio.se_play(@soundcursor,85)
  2020.       lastindex = @index
  2021.       @playerdeck[lastindex][0].z = lastindex
  2022.       @index += 1
  2023.       @index = 0 if @index >= @playerdeck.size
  2024.       @playerdeck[@index][0].z = 10
  2025.       newy = 95 + (@index * 74) + ((5-@playerdeck.size)* 74)
  2026.       sum = ((newy - @cursor.y) / 2)
  2027.       for i in 0...2
  2028.         @playerdeck[lastindex][0].x += 17
  2029.         @playerdeck[@index][0].x -= 17
  2030.         @playerdeck[lastindex][0].y -= 6
  2031.         @playerdeck[@index][0].y += 6
  2032.         @cursor.y += sum
  2033.         @frameglobal += 1
  2034.         animateselector2 if @frameglobal % 3 == 0
  2035.         animatecursor1
  2036.         Graphics.update
  2037.       end
  2038.       @cursor.y = newy
  2039.       @frameglobal += 1
  2040.       animateselector2 if @frameglobal % 3 == 0
  2041.       animatecursor1
  2042.       draw_help_in_game
  2043.       Graphics.update
  2044.       return
  2045.     end
  2046.     if Input.press?(Input::UP)
  2047.       Audio.se_play(@soundmovecard,85)
  2048.       Audio.se_play(@soundcursor,85)
  2049.       lastindex = @index
  2050.       @playerdeck[lastindex][0].z = lastindex
  2051.       @index -= 1
  2052.       @index = @playerdeck.size - 1 if @index < 0
  2053.       @playerdeck[@index][0].z = 10
  2054.       newy = 95 + (@index * 74) + ((5-@playerdeck.size)* 74)
  2055.       sum = ((newy - @cursor.y) / 2)
  2056.       for i in 0...2
  2057.         @playerdeck[lastindex][0].x += 17
  2058.         @playerdeck[@index][0].x -= 17
  2059.         @playerdeck[lastindex][0].y -= 6
  2060.         @playerdeck[@index][0].y += 6
  2061.         @cursor.y += sum
  2062.         @frameglobal += 1
  2063.         animateselector2 if @frameglobal % 3 == 0
  2064.         animatecursor1
  2065.         Graphics.update
  2066.       end
  2067.       @cursor.y = newy
  2068.       @frameglobal += 1
  2069.       animateselector2 if @frameglobal % 3 == 0
  2070.       animatecursor1
  2071.       draw_help_in_game
  2072.       Graphics.update
  2073.       return
  2074.     end
  2075.     if Input.trigger?(Input::C)
  2076.       Audio.se_play(@soundcursor,85)
  2077.       @indexboardx = 1
  2078.       @indexboardy = 1
  2079.       @cursor2.x = @cursor.x
  2080.       @cursor2.y = @cursor.y
  2081.       @cursor.opacity = 160
  2082.       @cursor2.visible = true
  2083.       desx = ((177 + (@indexboardx * 98))  - @cursor2.x) / 3
  2084.       desy = ((77  + (@indexboardy * 132)) - @cursor2.y) / 3
  2085.       for i in 0...3
  2086.         @cursor2.x += desx
  2087.         @cursor2.y += desy
  2088.         animatetextaction
  2089.         Graphics.update
  2090.       end
  2091.       @cursor2.x = 177 + (@indexboardx * 98)
  2092.       @cursor2.y = 77  + (@indexboardy * 132)
  2093.       animatetextaction
  2094.       Graphics.update
  2095.       @fase = 2
  2096.     end
  2097.   end
  2098.   # ---------------------------------------------------------------------------
  2099.   def update_fase2
  2100.     # Turno Jugador (Seleccionar en que parte del tablero se va a posicionar
  2101.     # la carta seleccionada)
  2102.     # (Fase 3 - Mostrar las reglas activa si se pulsa Y o Z)
  2103.     if Input.trigger?(Input::Y) or Input.trigger?(Input::Z)
  2104.       @backupfase = @fase
  2105.       @noselection = true
  2106.       drawwin0
  2107.       @noselection = nil
  2108.       @blackbackground = Sprite.new
  2109.       @blackbackground.bitmap = Bitmap.new(640,480)
  2110.       @blackbackground.bitmap.fill_rect(0,0,640,480,Color.new(0,0,0,180))
  2111.       @blackbackground.z = 15000
  2112.       @fase = 3
  2113.       return
  2114.     end
  2115.     lastx = @indexboardx
  2116.     lasty = @indexboardy
  2117.     if Input.press?(Input::DOWN)  or Input.press?(Input::UP) or
  2118.        Input.press?(Input::RIGHT) or Input.press?(Input::LEFT)
  2119.       if Input.press?(Input::DOWN)
  2120.         @indexboardy += 1 if @indexboardy < 2
  2121.       end
  2122.       if Input.press?(Input::UP)
  2123.         @indexboardy -= 1 if @indexboardy > 0
  2124.       end
  2125.       if Input.press?(Input::LEFT)
  2126.         @indexboardx -= 1 if @indexboardx > 0
  2127.       end
  2128.       if Input.press?(Input::RIGHT)
  2129.         @indexboardx += 1 if @indexboardx < 2
  2130.       end
  2131.       if lastx != @indexboardx or lasty != @indexboardy
  2132.         Audio.se_play(@soundcursor,85)
  2133.         desx = ((177 + (@indexboardx * 98))  - @cursor2.x) / 2
  2134.         desy = ((77 +  (@indexboardy * 132)) - @cursor2.y) / 2
  2135.         for i in 0...2
  2136.           @cursor2.x += desx
  2137.           @cursor2.y += desy
  2138.           animatecursor1
  2139.           animatecursor2
  2140.           @frameglobal += 1
  2141.           animateselector2 if @frameglobal % 3 == 0
  2142.           Graphics.update
  2143.         end
  2144.         @cursor2.x = 177 + (@indexboardx * 98)
  2145.         @cursor2.y = 77  + (@indexboardy * 132)
  2146.         animatecursor1
  2147.         animatecursor2
  2148.         @frameglobal += 1
  2149.         animateselector2 if @frameglobal % 3 == 0
  2150.         animatetextaction
  2151.         Graphics.update
  2152.       end
  2153.       return
  2154.     end
  2155.     if Input.trigger?(Input::B) # Cancelar
  2156.       Audio.se_play(@soundcancel,100)
  2157.       desx = (@cursor.x  - @cursor2.x) / (8 - @index)
  2158.       desy = (@cursor.y  - @cursor2.y) / (8 - @index)
  2159.       for i in 0...(8 - @index)
  2160.         @cursor2.x += desx
  2161.         @cursor2.y += desy
  2162.         animatecursor1
  2163.         animatecursor2
  2164.         @frameglobal += 1
  2165.         animateselector2 if @frameglobal % 3 == 0
  2166.         animatetextaction
  2167.         Graphics.update
  2168.       end
  2169.       @cursor2.visible = false
  2170.       @cursor.opacity = 255
  2171.       @fase = 0
  2172.       return
  2173.     end
  2174.     if Input.trigger?(Input::C) # Seleccionar
  2175.       return if @boarddeck[@indexboardx][@indexboardy] != nil
  2176.       Audio.se_play(@soundcursor,85)
  2177.       @cursor.visible = false
  2178.       @cursor2.visible = false
  2179.       movecardtoboard(0)
  2180.       checkplay(0)
  2181.       if @endgame != true and !@newgame
  2182.         changeselector(0)
  2183.         @fase = 1
  2184.         draw_help_in_game
  2185.       end
  2186.       return
  2187.     end
  2188.   end
  2189.   # ---------------------------------------------------------------------------
  2190.   def update_fase3
  2191.     # Turno Jugador (Fase 3: Mostrando las reglas)
  2192.     if !Input.press?(Input::Y) and !Input.press?(Input::Z)
  2193.       @win0.dispose
  2194.       @blackbackground.dispose
  2195.       @fase = @backupfase
  2196.     end
  2197.   end
  2198.   # ---------------------------------------------------------------------------
  2199.   def update_fase1
  2200.     # Turno enemigo
  2201.     # ---------------------------------------------------
  2202.     # IA
  2203.     # ---------------------------------------------------
  2204.     level = rand(101)
  2205.     @indexani = nil
  2206.     if level <= (@enemylevel * 10)
  2207.       # Jugada simulada
  2208.       # .............................................................
  2209.       # Cálculo obsoleto para calcular el número de simulaciones
  2210.       # .............................................................
  2211.       #simulationnumber = [0,1,3,4,7,10,15,20,25,30,100]
  2212.       #maxsimulations = simulationnumber[@enemylevel] + @enemylevel
  2213.       # .............................................................
  2214.       # .............................................................
  2215.       # Cálculo actual de simulaciones
  2216.       # .............................................................
  2217.       l = @enemylevel
  2218.       maxsimulations = (l*l*3) - (2*l) # 1 mín, 280 máx
  2219.       # .............................................................
  2220.       if @enemydeck.size == 1
  2221.         @index = rand(@enemydeck.size)
  2222.         casillasjugables = checkcasillasjugables
  2223.         casilla = casillasjugables[rand(casillasjugables.size)]
  2224.         @indexboardx = casilla[0]
  2225.         @indexboardy = casilla[1]
  2226.       else
  2227.         maxsimulations = (@enemylevel * @enemylevel) + @enemylevel
  2228.         # ------------------------------------
  2229.         # Comenzar simulaciones
  2230.         @simulation = true
  2231.         ia(maxsimulations)
  2232.         @simulation = false
  2233.         # Finalizar simulación
  2234.         # ------------------------------------
  2235.       end
  2236.     else
  2237.       # Jugada aleatoria
  2238.       @index = rand(@enemydeck.size)
  2239.       casillasjugables = checkcasillasjugables
  2240.       casilla = casillasjugables[rand(casillasjugables.size)]
  2241.       @indexboardx = casilla[0]
  2242.       @indexboardy = casilla[1]
  2243.     end
  2244.     # ---------------------------------------------------
  2245.     # Animar deck
  2246.     # ---------------------------------------------------
  2247.     if @indexani == nil
  2248.       index = 0
  2249.       for i in 0...@enemydeck.size
  2250.         card = @enemydeck[i]
  2251.         card[0].x += 17
  2252.         card[0].y += 6
  2253.         card[0].z = 10
  2254.         Graphics.update
  2255.         waitsec(0.1)
  2256.         m = rand(10)
  2257.         n = rand(100)
  2258.         while n > 20 - m
  2259.           n = rand(100)
  2260.           animatetextaction
  2261.           @frameglobal += 1
  2262.           @frameglobal = 0 if @frameglobal >= 100
  2263.           animateselector2 if @frameglobal % 3 == 0
  2264.           Graphics.update
  2265.         end
  2266.         card[0].x -= 17
  2267.         card[0].y -= 6
  2268.         card[0].z = i
  2269.         index += 1
  2270.       end
  2271.       @indexani = index
  2272.     end
  2273.     index = @indexani
  2274.     while index != @index
  2275.       @index > index ? index += 1 : index -= 1
  2276.       card = @enemydeck[index]
  2277.       card[0].x += 17
  2278.       card[0].y += 6
  2279.       card[0].z = 10
  2280.       animatetextaction
  2281.       @frameglobal += 1
  2282.       @frameglobal = 0 if @frameglobal >= 100
  2283.       animateselector2 if @frameglobal % 3 == 0
  2284.       Graphics.update
  2285.       waitsec(0.1)
  2286.       card[0].x -= 17
  2287.       card[0].y -= 6
  2288.       card[0].z = index
  2289.     end
  2290.     waitsec(0.1)
  2291.     # ---------------------------------------------------
  2292.     # Finalizar el turno enemigo
  2293.     # ---------------------------------------------------
  2294.     Audio.se_play(@soundcursor,85)
  2295.     movecardtoboard(1)
  2296.     checkplay(1)
  2297.     if @endgame != true and !@newgame
  2298.       changeselector(1)
  2299.       @fase = 0
  2300.       poscursoroverplayerdeck
  2301.       draw_help_in_game
  2302.     end
  2303.     # ---------------------------------------------------
  2304.   end
  2305.   # ---------------------------------------------------------------------------
  2306.   def checkcasillasjugables
  2307.     # indica al enemigo que casillas están libres en el tablero
  2308.     casillasjugables = []
  2309.     for x in 0...3
  2310.       for y in 0...3
  2311.         if @boarddeck[x][y] == nil
  2312.           casillasjugables.push([x,y])
  2313.         end
  2314.       end
  2315.     end
  2316.     return casillasjugables
  2317.   end
  2318.   # ---------------------------------------------------------------------------
  2319.   def checkplay(type)
  2320.     # inicia la comprobación de reglas tras ser depositada una carta en el
  2321.     # tablero
  2322.     card = @boarddeck[@indexboardx][@indexboardy]
  2323.     atacante = card[2][5] # 0 = Jugador   1 = Enemigo
  2324.     power_atk = card[2][3].dup # Valores de ataque
  2325.     plus_atk = card[3] # Plus de ataque de la carta (según elemental)
  2326.     for i in 0...4
  2327.       power_atk[i] += plus_atk
  2328.       power_atk[i] = 1  if power_atk[i] < 1
  2329.       power_atk[i] = 10 if power_atk[i] > 10
  2330.     end
  2331.     @gaincards = []
  2332.     @chaincards = []
  2333.     @animatecardsflip = []
  2334.     cardsbattle = getcardsvs(atacante)
  2335.     check_atk(power_atk,atacante,cardsbattle) if cardsbattle.size > 0
  2336.     check_battle_result(atacante)
  2337.     @forzechain = true
  2338.     firstchain = true
  2339.     # ********************************************************************
  2340.     # Inicio Combo System
  2341.     # ********************************************************************
  2342.     while @chaincards.size > 0 and @reglacombo
  2343.       cards = @chaincards.dup
  2344.       @chaincards = []
  2345.       @gaincards = []
  2346.       combosoundoandtextoneonly = false
  2347.       cards.each do |item|
  2348.         card = item[0]
  2349.         x = item[1]
  2350.         y = item[2]
  2351.         @indexboardx = x
  2352.         @indexboardy = y
  2353.         cardsbattle = getcardsvs(atacante)
  2354.         power_atk = card[2][3].dup # Valores de ataque
  2355.         plus_atk = card[3] # Plus de ataque de la carta (según elemental)
  2356.         for i in 0...4
  2357.           power_atk[i] += plus_atk
  2358.           power_atk[i] = 1  if power_atk[i] < 1
  2359.           power_atk[i] = 10 if power_atk[i] > 10
  2360.         end
  2361.         checknormalatk(power_atk,cardsbattle)
  2362.       end
  2363.       if @gaincards.size > 0
  2364.         if !combosoundoandtextoneonly and !@simulation
  2365.           text = "#{@textos[0][6]}!"
  2366.           if firstchain
  2367.             Audio.se_play(@soundcombo,100)
  2368.             draw_text_action(text)
  2369.             firstchain = false
  2370.           else
  2371.             animatetextaction
  2372.             Audio.se_play(@soundcombo,100)
  2373.             draw_text_action(text)
  2374.           end
  2375.           combosoundoandtextoneonly = true
  2376.         end
  2377.         check_battle_result(atacante)
  2378.       else
  2379.         break
  2380.       end
  2381.       checknumbercardsindeck
  2382.     end
  2383.     @forzechain = false
  2384.     # ********************************************************************
  2385.     # Fin Combo System
  2386.     # ********************************************************************
  2387.     checknumbercardsindeck
  2388.     checkendgame
  2389.     return
  2390.   end
  2391.   # ---------------------------------------------------------------------------
  2392.   def getcardsvs(atacante)
  2393.     # Devuelve un array con las cartas a las que van a afectar las reglas
  2394.     cardsbattle = []
  2395.     if @indexboardx-1 >= 0
  2396.       x = @indexboardx-1
  2397.       y = @indexboardy
  2398.       if @boarddeck[x][y] != nil and @boarddeck[x][y] != -1
  2399.         own = @boarddeck[x][y][2][5]
  2400.         cardsbattle.push([@boarddeck[x][y],x,y]) if own != atacante
  2401.       end
  2402.     end
  2403.     if @indexboardx+1 <= 2
  2404.       x = @indexboardx+1
  2405.       y = @indexboardy
  2406.       if @boarddeck[x][y] != nil and @boarddeck[x][y] != -1
  2407.         own = @boarddeck[x][y][2][5]
  2408.         cardsbattle.push([@boarddeck[x][y],x,y]) if own != atacante
  2409.       end
  2410.     end
  2411.     if @indexboardy-1 >= 0
  2412.       x = @indexboardx
  2413.       y = @indexboardy-1
  2414.       if @boarddeck[x][y] != nil and @boarddeck[x][y] != -1
  2415.         own = @boarddeck[x][y][2][5]
  2416.         cardsbattle.push([@boarddeck[x][y],x,y]) if own != atacante
  2417.       end
  2418.     end
  2419.     if @indexboardy+1 <= 2
  2420.       x = @indexboardx
  2421.       y = @indexboardy+1
  2422.       if @boarddeck[x][y] != nil and @boarddeck[x][y] != -1
  2423.         own = @boarddeck[x][y][2][5]
  2424.         cardsbattle.push([@boarddeck[x][y],x,y]) if own != atacante
  2425.       end
  2426.     end
  2427.     return cardsbattle
  2428.   end
  2429.   # ---------------------------------------------------------------------------
  2430.   def check_atk(power_atk,atacante,cardsbattle)
  2431.     # Comprueba las diferentes reglas para ver si alguna/s de las cartas
  2432.     # afectadas pierde contra la carta atacante
  2433.     checkreglapared(power_atk,atacante)  if @reglapared
  2434.     checkreglaigual(power_atk,atacante)  if @reglaigual
  2435.     checkreglasuma(power_atk,atacante)   if @reglasuma
  2436.     checknormalatk(power_atk,cardsbattle)
  2437.   end
  2438.   # ---------------------------------------------------------------------------
  2439.   def check_battle_result(atacante)
  2440.     # Muestra un mensaje si alguna regla surtió efecto (pared, suma o igual)
  2441.     if !@simulation
  2442.       if @pared and @gaincards.size > 0
  2443.         if @samewall
  2444.           text = "#{@textos[0][5]}!"
  2445.           Audio.se_play(@soundpared,100)
  2446.         elsif @pluswall
  2447.           text = "#{@textos[0][4]}!"
  2448.           Audio.se_play(@soundpared,100)
  2449.         else
  2450.           text = nil
  2451.         end
  2452.         draw_text_action(text) if text != nil
  2453.       elsif @igual and @gaincards.size > 0
  2454.         text = "#{@textos[0][1]}!"
  2455.         Audio.se_play(@soundigual,100)
  2456.         draw_text_action(text)
  2457.       elsif @suma and @gaincards.size > 0
  2458.         text = "#{@textos[0][2]}!"
  2459.         Audio.se_play(@soundsuma,100)
  2460.         draw_text_action(text)
  2461.       end
  2462.     end
  2463.     # Si alguna carta se vio afectada, el método verifycheck se encargará
  2464.     # de cambiar la posesión de esa carta a su nuevo dueño, el atacante
  2465.     if @gaincards.size > 0
  2466.       Audio.se_play(@soundgaincards,100) if !@simulation
  2467.       verifycheck(atacante,@gaincards)
  2468.     end
  2469.     @pared = false
  2470.     @igual = false
  2471.     @suma = false
  2472.   end
  2473.   # ---------------------------------------------------------------------------
  2474.   def checkreglapared(atk,atacante)
  2475.     # La regla pared no toma en cuenta el modificador elemental
  2476.     @samewall = false
  2477.     @pluswall = false
  2478.     return if (@indexboardx == 1 and @indexboardy == 1)
  2479.     x = @indexboardx
  2480.     y = @indexboardy
  2481.     atk = @boarddeck[x][y][2][3]
  2482.     jugadas = {
  2483.     # pos => [[lugares con valor 10],[cartas enfrentadas]]
  2484.       '00' => [[0,1],[[[x+1,y],[2,1]],[[x,y+1],[3,0]]]],
  2485.       '01' => [[1],[[[x+1,y],[2,1]],[[x,y+1],[3,0]],[[x,y-1],[0,3]]]],
  2486.       '02' => [[1,3],[[[x+1,y],[2,1]],[[x,y-1],[0,3]]]],
  2487.       '10' => [[0],[[[x+1,y],[2,1]],[[x-1,y],[1,2]],[[x,y+1],[3,0]]]],
  2488.       '12' => [[3],[[[x+1,y],[2,1]],[[x-1,y],[1,2]],[[x,y-1],[0,3]]]],
  2489.       '20' => [[0,2],[[[x-1,y],[1,2]],[[x,y+1],[3,0]]]],
  2490.       '21' => [[2],[[[x-1,y],[1,2]],[[x,y-1],[0,3]],[[x,y+1],[3,0]]]],
  2491.       '22' => [[2,3],[[[x-1,y],[1,2]],[[x,y-1],[0,3]]]]
  2492.     }
  2493.     id = "#{x}#{y}"
  2494.     jugada = jugadas[id]
  2495.     jugada[1].each do |card|
  2496.       x = card[0][0]
  2497.       y = card[0][1]
  2498.       atkv = card[1][0]
  2499.       defv = card[1][1]
  2500.       next if @boarddeck[x][y] == nil or @boarddeck[x][y] == -1
  2501.       def_real = @boarddeck[x][y][2][3][defv] #+ @boarddeck[x][y][3]
  2502.       def_real = 10 if def_real > 10
  2503.       def_real = 1  if def_real < 1
  2504.       next if @boarddeck[x][y] == nil or @boarddeck[x][y] == -1
  2505.       next if @boarddeck[x][y][2][5] == atacante
  2506.       jugada[0].each do |value|
  2507.         if atk[value] == 10 and def_real == atk[atkv]
  2508.           if !@gaincards.include?(@boarddeck[x][y])
  2509.             @gaincards.push(@boarddeck[x][y])
  2510.           end
  2511.           if @usecombowithwall
  2512.             if !@chaincards.include?([@boarddeck[x][y],x,y])
  2513.               @chaincards.push([@boarddeck[x][y],x,y])
  2514.             end
  2515.             includeanimate = false
  2516.             @animatecardsflip.each do |item|
  2517.               arr = item[0]
  2518.               if arr == @boarddeck[x][y]
  2519.                 includeanimate = true
  2520.                 break
  2521.               end
  2522.             end
  2523.             if !includeanimate
  2524.               @animatecardsflip.push([@boarddeck[x][y],x,y,
  2525.               @indexboardx,@indexboardy])
  2526.             end
  2527.           end
  2528.           @pared = true
  2529.           @samewall = true
  2530.         elsif (atk[value] + 10) == (def_real + atk[atkv]) and @usepluswall
  2531.           if !@gaincards.include?(@boarddeck[x][y])
  2532.             @gaincards.push(@boarddeck[x][y])
  2533.           end
  2534.           if @usecombowithwall
  2535.             if !@chaincards.include?(@boarddeck[x][y])
  2536.               @chaincards.push([@boarddeck[x][y],x,y])
  2537.             end
  2538.             includeanimate = false
  2539.             @animatecardsflip.each do |item|
  2540.               arr = item[0]
  2541.               if arr == @boarddeck[x][y]
  2542.                 includeanimate = true
  2543.                 break
  2544.               end
  2545.             end
  2546.             if !includeanimate
  2547.               @animatecardsflip.push([@boarddeck[x][y],x,y,
  2548.               @indexboardx,@indexboardy])
  2549.             end
  2550.           end
  2551.           @pared = true
  2552.           @pluswall = true
  2553.         end
  2554.       end
  2555.     end
  2556.   end
  2557.   # ---------------------------------------------------------------------------
  2558.   def checkreglaigual(atk,atacante)
  2559.     # La regla igual no toma en cuenta el modificador elemental
  2560.     x = @indexboardx
  2561.     y = @indexboardy
  2562.     atk = @boarddeck[x][y][2][3]
  2563.     jugadas = [
  2564.       #  [carta1,carta2,check1,check2]
  2565.       [[x,y-1],[x+1,y],[0,3],[2,1]],
  2566.       [[x,y-1],[x,y+1],[0,3],[3,0]],
  2567.       [[x,y-1],[x-1,y],[0,3],[1,2]],
  2568.       [[x+1,y],[x,y+1],[2,1],[3,0]],
  2569.       [[x+1,y],[x-1,y],[2,1],[1,2]],
  2570.       [[x-1,y],[x,y+1],[1,2],[3,0]]
  2571.     ]
  2572.     jugadas.each do |jugada|
  2573.       x1 = jugada[0][0]
  2574.       y1 = jugada[0][1]
  2575.       x2 = jugada[1][0]
  2576.       y2 = jugada[1][1]
  2577.       check1a = jugada[2][0]
  2578.       check1b = jugada[2][1]
  2579.       check2a = jugada[3][0]
  2580.       check2b = jugada[3][1]
  2581.       next if x1 < 0 or x1 > 2 or x2 < 0 or x2 > 2 or
  2582.               y1 < 0 or y1 > 2 or y2 < 0 or y2 > 2
  2583.       if @boarddeck[x1][y1] != nil and @boarddeck[x1][y1] != -1 and
  2584.          @boarddeck[x2][y2] != nil and @boarddeck[x2][y2] != -1
  2585.          if (@boarddeck[x1][y1][2][5] != atacante and
  2586.             @boarddeck[x2][y2][2][5] != atacante and !@checkallcards) or
  2587.             @checkallcards
  2588.             def1 = @boarddeck[x1][y1][2][3][check1b] #+ @boarddeck[x1][y1][3]
  2589.             def2 = @boarddeck[x2][y2][2][3][check2b] #+ @boarddeck[x2][y2][3]
  2590.             def1 = 10 if def1 > 10
  2591.             def1 = 1 if def1 < 1
  2592.             def2 = 10 if def2 > 10
  2593.             def2 = 1 if def2 < 1
  2594.             if def1 == atk[check1a] and
  2595.                def2 == atk[check2a]
  2596.                if @boarddeck[x1][y1][2][5] != atacante
  2597.                  if !@gaincards.include?(@boarddeck[x1][y1])
  2598.                   @gaincards.push(@boarddeck[x1][y1])
  2599.                  end
  2600.                  if !@chaincards.include?([@boarddeck[x1][y1],x1,y1])
  2601.                   @chaincards.push([@boarddeck[x1][y1],x1,y1])
  2602.                  end
  2603.                end
  2604.                if @boarddeck[x2][y2][2][5] != atacante
  2605.                  if !@gaincards.include?(@boarddeck[x2][y2])
  2606.                   @gaincards.push(@boarddeck[x2][y2])
  2607.                  end
  2608.                  if !@chaincards.include?([@boarddeck[x2][y2],x2,y2])
  2609.                   @chaincards.push([@boarddeck[x2][y2],x2,y2])
  2610.                  end
  2611.                end
  2612.               includeanimate = false
  2613.                @animatecardsflip.each do |item|
  2614.                  arr = item[0]
  2615.                  if arr == @boarddeck[x1][y1]
  2616.                     includeanimate = true
  2617.                     break
  2618.                  end
  2619.                end
  2620.                if !includeanimate and @boarddeck[x1][y1][2][5] != atacante
  2621.                   @animatecardsflip.push([@boarddeck[x1][y1],x1,y1,
  2622.                   @indexboardx,@indexboardy])
  2623.                end
  2624.                includeanimate = false
  2625.                @animatecardsflip.each do |item|
  2626.                  arr = item[0]
  2627.                  if arr == @boarddeck[x2][y2]
  2628.                    includeanimate = true
  2629.                    break
  2630.                  end
  2631.                end
  2632.                if !includeanimate and @boarddeck[x2][y2][2][5] != atacante
  2633.                  @animatecardsflip.push([@boarddeck[x2][y2],x2,y2,
  2634.                  @indexboardx,@indexboardy])
  2635.                end
  2636.                @igual = true
  2637.             end
  2638.          end
  2639.       end  
  2640.     end
  2641.   end
  2642.   # ---------------------------------------------------------------------------
  2643.   def checkreglasuma(atk,atacante)
  2644.     # La regla suma no toma en cuenta el modificador elemental
  2645.     x = @indexboardx
  2646.     y = @indexboardy
  2647.     atk = @boarddeck[x][y][2][3]
  2648.     jugadas = [
  2649.       #  [carta1,carta2,checkatk1,checkatk2]
  2650.       [[x,y-1],[x+1,y],[0,3],[2,1]],
  2651.       [[x,y-1],[x,y+1],[0,3],[3,0]],
  2652.       [[x,y-1],[x-1,y],[0,3],[1,2]],
  2653.       [[x+1,y],[x,y+1],[2,1],[3,0]],
  2654.       [[x+1,y],[x-1,y],[2,1],[1,2]],
  2655.       [[x-1,y],[x,y+1],[1,2],[3,0]]
  2656.     ]
  2657.     jugadas.each do |jugada|
  2658.       x1 = jugada[0][0]
  2659.       y1 = jugada[0][1]
  2660.       x2 = jugada[1][0]
  2661.       y2 = jugada[1][1]
  2662.       check1a = jugada[2][0]
  2663.       check1b = jugada[2][1]
  2664.       check2a = jugada[3][0]
  2665.       check2b = jugada[3][1]
  2666.       next if x1 < 0 or x1 > 2 or x2 < 0 or x2 > 2 or
  2667.               y1 < 0 or y1 > 2 or y2 < 0 or y2 > 2
  2668.       if @boarddeck[x1][y1] != nil and @boarddeck[x1][y1] != -1 and
  2669.          @boarddeck[x2][y2] != nil and @boarddeck[x2][y2] != -1
  2670.          if (@boarddeck[x1][y1][2][5] != atacante and
  2671.             @boarddeck[x2][y2][2][5] != atacante and !@checkallcards) or
  2672.             @checkallcards
  2673.             def1 = @boarddeck[x1][y1][2][3][check1b] #+ @boarddeck[x1][y1][3]
  2674.             def2 = @boarddeck[x2][y2][2][3][check2b] #+ @boarddeck[x2][y2][3]
  2675.             def1 = 10 if def1 > 10
  2676.             def1 = 1 if def1 < 1
  2677.             def2 = 10 if def2 > 10
  2678.             def2 = 1 if def2 < 1
  2679.             if def1 + atk[check1a] == def2 + atk[check2a]
  2680.                if @boarddeck[x1][y1][2][5] != atacante
  2681.                  if !@gaincards.include?(@boarddeck[x1][y1])
  2682.                   @gaincards.push(@boarddeck[x1][y1])
  2683.                  end
  2684.                  if !@chaincards.include?([@boarddeck[x1][y1],x1,y1])
  2685.                   @chaincards.push([@boarddeck[x1][y1],x1,y1])
  2686.                  end
  2687.                end
  2688.                if @boarddeck[x2][y2][2][5] != atacante
  2689.                  if !@gaincards.include?(@boarddeck[x2][y2])
  2690.                   @gaincards.push(@boarddeck[x2][y2])
  2691.                  end
  2692.                  if !@chaincards.include?([@boarddeck[x2][y2],x2,y2])
  2693.                   @chaincards.push([@boarddeck[x2][y2],x2,y2])
  2694.                  end
  2695.                end
  2696.                includeanimate = false
  2697.                @animatecardsflip.each do |item|
  2698.                  arr = item[0]
  2699.                  if arr == @boarddeck[x1][y1]
  2700.                     includeanimate = true
  2701.                     break
  2702.                  end
  2703.                end
  2704.                if !includeanimate and @boarddeck[x1][y1][2][5] != atacante
  2705.                   @animatecardsflip.push([@boarddeck[x1][y1],x1,y1,
  2706.                   @indexboardx,@indexboardy])
  2707.                end
  2708.                includeanimate = false
  2709.                @animatecardsflip.each do |item|
  2710.                  arr = item[0]
  2711.                  if arr == @boarddeck[x2][y2]
  2712.                    includeanimate = true
  2713.                    break
  2714.                  end
  2715.                end
  2716.                if !includeanimate and @boarddeck[x2][y2][2][5] != atacante
  2717.                  @animatecardsflip.push([@boarddeck[x2][y2],x2,y2,
  2718.                  @indexboardx,@indexboardy])
  2719.                end
  2720.                @suma = true
  2721.             end
  2722.          end
  2723.       end  
  2724.     end
  2725.   end
  2726.   # ---------------------------------------------------------------------------
  2727.   def checknormalatk(atk,cards)
  2728.     # Ataque normal: toma en cuenta valores ataque y el modificador elemental
  2729.     cards.each do |card|
  2730.       power_atk = card[0][2][3].dup
  2731.       plus_atk = card[0][3] # Plus de ataque de la carta (según elemental)
  2732.       for i in 0...4
  2733.         power_atk[i] += plus_atk
  2734.         power_atk[i] = 1  if power_atk[i] < 1
  2735.         power_atk[i] = 10 if power_atk[i] > 10
  2736.       end
  2737.       if (card[1] == @indexboardx-1 and card[2] == @indexboardy and
  2738.         atk[1] > power_atk[2]) or
  2739.         (card[1] == @indexboardx+1 and card[2] == @indexboardy and
  2740.         atk[2] > power_atk[1]) or
  2741.         (card[1] == @indexboardx and card[2] == @indexboardy-1 and
  2742.         atk[0] > power_atk[3]) or
  2743.         (card[1] == @indexboardx and card[2] == @indexboardy+1 and
  2744.         atk[3] > power_atk[0])
  2745.         @gaincards.push(card[0]) if !@gaincards.include?(card[0])
  2746.         x = (card[1] != @indexboardx ? card[1] : @indexboardx)
  2747.         y = (card[2] != @indexboardy ? card[2] : @indexboardy)
  2748.         if @forzechain
  2749.           if !@chaincards.include?([card[0],x,y])
  2750.             @chaincards.push([card[0],x,y])
  2751.           end
  2752.         end
  2753.         includeanimate = false
  2754.         @animatecardsflip.each do |item|
  2755.           arr = item[0]
  2756.           if arr == card[0]
  2757.             includeanimate = true
  2758.             break
  2759.           end
  2760.         end
  2761.         if !includeanimate
  2762.           @animatecardsflip.push([card[0],x,y,@indexboardx,@indexboardy])
  2763.         end
  2764.       end
  2765.     end
  2766.   end
  2767.   # ---------------------------------------------------------------------------
  2768.   def verifycheck(atacante,cards)
  2769.     # Método que se encarga de cambiar las cartas de propietario, las voltea
  2770.     # y les cambia elcolor
  2771.     imas = []
  2772.     cards.each do |item|
  2773.       item[2][5] = atacante
  2774.       id = item[2][0]
  2775.       @newplayerdeckbackup.each do |item2|
  2776.         id2 = item2[2][0]
  2777.         if id2 == id
  2778.           item2[2][5] = atacante
  2779.           break
  2780.         end
  2781.       end
  2782.       @newenemydeckbackup.each do |item2|
  2783.         id2 = item2[2][0]
  2784.         if id2 == id
  2785.           item2[2][5] = atacante
  2786.           break
  2787.         end
  2788.       end
  2789.       if !@simulation
  2790.         imas.push(item[0])
  2791.         item[0].visible = false
  2792.       end
  2793.     end
  2794.     if !@simulation
  2795.       Audio.se_play(@soundselectioninitialturnbegin,100)
  2796.       flipcardsback(1,imas,true,true)
  2797.       bitmapsnew = []
  2798.       cards.each do |item|
  2799.         card = item[2]
  2800.         drawonlycardscolor(item[0],atacante)
  2801.         bitmapsnew.push(item[0])
  2802.       end
  2803.       flipcardsfront(1,bitmapsnew,true,true)
  2804.       cards.each do |item|
  2805.         item[0].visible = true
  2806.       end
  2807.       drawelementalvals if @reglaelemental
  2808.     end
  2809.   end
  2810.   # ---------------------------------------------------------------------------
  2811.   def checkendgame
  2812.     # Método que se encarga de comprobar el estado actual del juego y
  2813.     # actua en consecuencia
  2814.     n = 0
  2815.     for x in 0...3
  2816.       for y in 0...3
  2817.         n += 1 if @boarddeck[x][y] != nil
  2818.       end
  2819.     end
  2820.     @newgame = false
  2821.     if n == 9 and !@simulation
  2822.       @helpingame.visible = false
  2823.       if @reglapago == 1
  2824.         text = @textos[4][17]
  2825.         @fase = -1
  2826.         @endgame = true
  2827.       elsif @playercardsgainingame == @enemycardsgainingame and @reglahastalamuerte
  2828.         Audio.se_play(@soundhastalamuerte,100)
  2829.         text = @textos[1][2]
  2830.         @newgame = true
  2831.       elsif @playercardsgainingame > @enemycardsgainingame
  2832.         text = @textos[4][1]
  2833.         @fase = -1
  2834.         @endgame = true
  2835.       elsif @playercardsgainingame == @enemycardsgainingame
  2836.         text = @textos[4][5]
  2837.         @fase = -1
  2838.         @endgame = true
  2839.         $deck['stats'][@enemyid]['drawgames'] += 1
  2840.         $deck['stats']['player']['drawgames'] += 1
  2841.       else
  2842.         text = @textos[4][2]
  2843.         @fase = -1
  2844.         @endgame = true
  2845.       end
  2846.       if @fase == -1
  2847.         Audio.bgm_play(@endmusic,85)
  2848.       end
  2849.       draw_text_action(text)
  2850.       waitsec(0.5)
  2851.       if @newgame
  2852.         @helpingame.visible = true
  2853.         beginnewgame
  2854.       end
  2855.     end
  2856.   end
  2857.   # ---------------------------------------------------------------------------
  2858.   def beginnewgame
  2859.     # Con la regla hasta la muerte activa y habiendo quedando el juego
  2860.     # en empate, este método se encarga de empezar un nuevo juego
  2861.     # Cada jugador empezará a jugar con las cartas de su color que tenía
  2862.     # al acabar la partida anterior
  2863.     for x in 0...3
  2864.       for y in 0...3
  2865.         if @boarddeck[x][y] != nil and @boarddeck[x][y] != -1
  2866.           own = @boarddeck[x][y][2][5]
  2867.           if own == 0
  2868.             @playerdeck.push(@boarddeck[x][y])
  2869.           else
  2870.             @enemydeck.push(@boarddeck[x][y])
  2871.           end
  2872.         end
  2873.       end
  2874.     end
  2875.     @boarddeck = [Array.new(3),Array.new(3),Array.new(3)]
  2876.     movecardstodecks # Mueve las cartas del tablero a los  mazos
  2877.                      # de cartas del jugadr y el enemigo
  2878.     getfirstturn # Establece el primer turno
  2879.     draw_help_in_game # Updatea la ayuda
  2880.   end
  2881.   # ---------------------------------------------------------------------------
  2882.   def changeselector(type)
  2883.     # Cambia el selector de turnos a la posición del jugador que tenga el turno
  2884.     x1 = 46
  2885.     x2 = 556
  2886.     desx = (type == 0 ? -51 : 51)
  2887.     Audio.se_play(@soundselectioninitialturnbegin,100)
  2888.     for i in 0...10
  2889.       @selector2.x += desx
  2890.       animatetextaction
  2891.       Graphics.update
  2892.     end
  2893.     @selector2.x = (type == 0 ? x1 : x2)
  2894.   end
  2895.   # ---------------------------------------------------------------------------
  2896.   def checknumbercardsindeck
  2897.     # método que se encarga de mostrar el número de cartas en posesión de cada
  2898.     # jugador durante la partida (el número de cartas de su color)
  2899.     @numbercardsplayer.bitmap.clear
  2900.     @numbercardsenemy.bitmap.clear
  2901.     playercardsinboard = 0
  2902.     enemycardsinboard = 0
  2903.     for x in 0...3
  2904.       for y in 0...3
  2905.         if @boarddeck[x][y] != nil and @boarddeck[x][y] != -1
  2906.           if @boarddeck[x][y][2][5] == 0
  2907.             playercardsinboard += 1
  2908.           else
  2909.             enemycardsinboard += 1
  2910.           end
  2911.         end
  2912.       end
  2913.     end
  2914.     n1 = (@playerdeck.size + playercardsinboard).to_s
  2915.     n2 = (@enemydeck.size + enemycardsinboard).to_s
  2916.     data_pos = [[1,0],[-1,0],[0,1],[0,-1],[2,0],[-2,0],[0,2],[0,-2]]
  2917.     @numbercardsplayer.bitmap.font.size = 64
  2918.     @numbercardsenemy.bitmap.font.size = 64
  2919.     @numbercardsplayer.bitmap.font.color = Color.new(0,0,0,255)
  2920.     @numbercardsenemy.bitmap.font.color = Color.new(0,0,0,255)
  2921.     for i in 0...data_pos.size
  2922.       x = 0 + data_pos[i][0]
  2923.       y = 0 + data_pos[i][1]
  2924.       @numbercardsplayer.bitmap.draw_text(x,y,58,72,n1,1)
  2925.       @numbercardsenemy.bitmap.draw_text(x,y,58,72,n2,1)
  2926.     end
  2927.     @numbercardsplayer.bitmap.font.color = Color.new(255,255,255,255)
  2928.     @numbercardsenemy.bitmap.font.color = Color.new(255,255,255,255)
  2929.     @numbercardsplayer.bitmap.draw_text(0,0,58,72,n1,1)
  2930.     @numbercardsenemy.bitmap.draw_text(0,0,58,72,n2,1)
  2931.     @playercardsgainingame = n1.to_i
  2932.     @enemycardsgainingame = n2.to_i
  2933.   end
  2934.   # ---------------------------------------------------------------------------
  2935.   def poscursoroverplayerdeck
  2936.     # Se encarga de posicionar el cursor sobre el mazo de cartas del jugador
  2937.     # cuando es su turno
  2938.     @index = 0
  2939.     for i in 0...2
  2940.       @playerdeck[0][0].x -= 17
  2941.       @playerdeck[0][0].y += 6
  2942.       @frameglobal += 1
  2943.       animateselector2 if @frameglobal % 3 == 0
  2944.       animatetextaction
  2945.       Graphics.update
  2946.     end
  2947.     @playerdeck[0][0].x += 1
  2948.     @playerdeck[0][0].z = 10
  2949.     @cursor.bitmap = Bitmap.new(@cursorbitmap)
  2950.     @cursor.visible = true
  2951.     @cursor.x = 465
  2952.     @cursor.y = 95 + ((5-@playerdeck.size)* 74)
  2953.     @cursor2.bitmap = @cursor.bitmap
  2954.     @cursor2.visible = false
  2955.     @cursor.opacity = 255
  2956.   end
  2957.   # ---------------------------------------------------------------------------
  2958.   def movecardtoboard(type)
  2959.     # Método que se encarga de mover una carta desde su posición original
  2960.     # hasta el lugar designado en el tablero
  2961.     type == 0 ? deck = @playerdeck : deck = @enemydeck
  2962.     @cardpreview.bitmap = deck[@index][0].bitmap
  2963.     @cardpreview.x = deck[@index][0].x
  2964.     @cardpreview.y = deck[@index][0].y
  2965.     @cardpreview.z = 100
  2966.     @cardpreview.opacity = 255
  2967.     @cardpreview.visible = true
  2968.     x = 10
  2969.     @cardpreview.zoom_x = @cardpreview.zoom_y = 1.0
  2970.     card = deck[@index].dup
  2971.     s = Sprite.new
  2972.     s.bitmap = deck[@index][0].bitmap.dup
  2973.     s.visible = false
  2974.     card[0] = s
  2975.     deck[@index][0].dispose
  2976.     deck.delete_at(@index)
  2977.     Audio.se_play(@soundmovecard,85)
  2978.     for i in 0...9
  2979.       @cardpreview.x -= (type == 0 ? x : -x)
  2980.       @cardpreview.y -= 60 + ((5-deck.size)*15) + (@index * 15)
  2981.       @cardpreview.zoom_x += 0.14
  2982.       @cardpreview.zoom_y = @cardpreview.zoom_x
  2983.       @frameglobal += 1
  2984.       @frameglobal = 0 if @frameglobal >= 100
  2985.       animateselector2 if @frameglobal % 3 == 0
  2986.       animatedeckini(1)
  2987.       Graphics.update
  2988.       @frameglobal += 1
  2989.       @frameglobal = 0 if @frameglobal >= 100
  2990.       animateselector2 if @frameglobal % 3 == 0
  2991.       animatetextaction
  2992.       Graphics.update
  2993.     end
  2994.     if (type != 0 and @reglaabierto == false) or @reglaelemental
  2995.       x = @cardpreview.x
  2996.       y = @cardpreview.y
  2997.       createcardpreview(false,false,card[2],true)
  2998.       @cardpreview.x = x
  2999.       @cardpreview.y = y
  3000.       @cardpreview.opacity = 255
  3001.       card[0].bitmap = @cardpreview.bitmap.dup
  3002.     end
  3003.     desx = 179 + (@indexboardx * 98)
  3004.     desy = 47  + (@indexboardy * 132)
  3005.     movx = (desx-@cardpreview.x) / 16
  3006.     movy = (desy-@cardpreview.y) / 16
  3007.     s = Sprite.new
  3008.     s.bitmap = Bitmap.new(@cardpreview.bitmap.width,@cardpreview.bitmap.height)
  3009.     shadow = Bitmap.new(@cardshadow)
  3010.     s.bitmap.stretch_blt(s.bitmap.rect,shadow,shadow.rect)
  3011.     s.zoom_x = s.zoom_y = 0.2
  3012.     s.x = desx + (type == 0 ? 208 : -98)
  3013.     s.y = desy + (type == 0 ? 132 : -132)
  3014.     s.opacity = 20
  3015.     s.z = 99
  3016.     for i in 0...16
  3017.       @cardpreview.x += movx
  3018.       @cardpreview.y += movy
  3019.       @cardpreview.zoom_x -= 0.0875
  3020.       @cardpreview.zoom_y = @cardpreview.zoom_x
  3021.       if @cardpreview.zoom_x < 1
  3022.         @cardpreview.zoom_x = @cardpreview.zoom_y = 1.0
  3023.       end
  3024.       if i % 2 == 0
  3025.         s.zoom_x += 0.1
  3026.         s.zoom_y += 0.1
  3027.       end
  3028.       s.x += (type == 0 ? -13 : 6)
  3029.       s.y += (type == 0 ? -8 : 8)
  3030.       s.opacity += 14
  3031.       @frameglobal += 1
  3032.       @frameglobal = 0 if @frameglobal >= 100
  3033.       animateselector2 if @frameglobal % 3 == 0
  3034.       animatetextaction
  3035.       Graphics.update
  3036.     end
  3037.     @cardpreview.x = desx
  3038.     @cardpreview.y = desy
  3039.     animatetextaction
  3040.     Graphics.update
  3041.     Audio.se_play(@soundmovecardoverdeck,85)
  3042.     if @reglaelemental
  3043.       card_element = card[2][2]
  3044.       if @reglaelemental and @boardelemental[@indexboardx][@indexboardy] != nil
  3045.         if @boardelemental[@indexboardx][@indexboardy] == card_element
  3046.           card[3] = 1
  3047.           r = 0
  3048.           g = 20
  3049.           Audio.se_play(@sounddowngradecard,100)
  3050.         else
  3051.           card[3] = -1
  3052.           r = 20
  3053.           g = 0
  3054.           Audio.se_play(@soundupgradecard,100)
  3055.         end
  3056.         for i in 0...10
  3057.           tone = Tone.new(r+(r*i),g+(g*i),0,160)
  3058.           @cardpreview.tone = tone
  3059.           @frameglobal += 1
  3060.           @frameglobal = 0 if @frameglobal >= 100
  3061.           animateselector2 if @frameglobal % 3 == 0
  3062.           animatetextaction
  3063.           Graphics.update
  3064.         end
  3065.         @cardpreview.tone = Tone.new(0,0,0,0)
  3066.       end
  3067.     end
  3068.     @boarddeck[@indexboardx][@indexboardy] = card
  3069.     drawelementalvals if @reglaelemental
  3070.     @cardpreview.visible = false
  3071.     card[0].x = @cardpreview.x
  3072.     card[0].y = @cardpreview.y
  3073.     card[0].visible = true
  3074.     s.dispose
  3075.   end
  3076.   # ---------------------------------------------------------------------------
  3077.   def iselementalgame?
  3078.     # Si la regla elemental está activa, este método distribuirá aleatoriamente
  3079.     # elementos por las casillas del tablero
  3080.     perc = 100 # Porcentaje de que la casilla sea elemental
  3081.     # El porcentaje de que una casilla sea elemental
  3082.     # será el porcentaje real (perc) menos el porcentaje
  3083.     # resto (perc_rest) por el número de casillas elementales
  3084.     # (Mínimo : 1 Casilla Elemental   Máximo: 9 Casillas Elementales)
  3085.     perc_rest = rand(25)
  3086.     casillaselementales = 0
  3087.     if @reglaelemental
  3088.       for i in 0...9
  3089.         n = rand(100)
  3090.         if n <= perc
  3091.           x = rand(3)
  3092.           y = rand(3)
  3093.           while @boardelemental[x][y] != nil
  3094.             x = rand(3)
  3095.             y = rand(3)
  3096.           end
  3097.           @boardelemental[x][y] = @elementallist[rand(@elementallist.size)]
  3098.           casillaselementales += 1
  3099.           perc -= (perc_rest * casillaselementales)
  3100.         end
  3101.       end
  3102.     end
  3103.     for x in 0...3
  3104.       for y in 0...3
  3105.         if @boardelemental[x][y] != nil
  3106.           imaname = @elementalimagelist[@boardelemental[x][y]]
  3107.           s = Sprite.new
  3108.           s.bitmap = Bitmap.new(imaname)
  3109.           s.x = 203 + (x * 98)
  3110.           s.y = 90 + (y * 132)
  3111.           s.z = -1
  3112.           @boardelementalima[x][y] = s
  3113.         end
  3114.       end
  3115.     end
  3116.   end
  3117.   # ---------------------------------------------------------------------------
  3118.   def draw_help_in_game
  3119.     # Dibuja la ayuda mientars se está jugando
  3120.     if @helpingame == nil
  3121.       @helpingame = Sprite.new
  3122.       @helpingame.x = 220
  3123.       @helpingame.y = 426
  3124.       @helpingame.z = 10000
  3125.     end
  3126.     @helpingame.bitmap = Bitmap.new(@winhelpcardsbitmap2)
  3127.     @helpingame.bitmap.font.size = 21
  3128.     text = ""
  3129.     case @fase
  3130.     when 0 # Turno del jugador
  3131.       if @playerdeck[@index] == nil
  3132.         if @playerdeck[0] == nil
  3133.           return
  3134.         else
  3135.           data = @playerdeck[0][2]
  3136.         end
  3137.       else
  3138.         data = @playerdeck[@index][2]
  3139.       end
  3140.       name = data[1]
  3141.       uniq = data[4]
  3142.       text = name.to_s
  3143.       color = (uniq == 1 ? 2 : 1)
  3144.     when 1 # Turno del Enemigo
  3145.       text = @textos[4][23]
  3146.       color = 1
  3147.     end
  3148.     color1 = Color.new(0,0,0,255)
  3149.     color2 = Color.new(255,255,255,255)
  3150.     color3 = Color.new(229,197,46,255)
  3151.     data_pos = [[1,0],[-1,0],[0,1],[0,-1],[0,2]]
  3152.     @helpingame.bitmap.font.color = color1
  3153.     for i in 0...data_pos.size
  3154.       x = 4 + data_pos[i][0]
  3155.       y = 17 + data_pos[i][1]
  3156.       @helpingame.bitmap.draw_text(x,y,226,20,text,1)
  3157.     end
  3158.     @helpingame.bitmap.font.color = (color == 1 ? color2 : color3)
  3159.     @helpingame.bitmap.draw_text(4,17,226,23,text,1)
  3160.   end
  3161.   # ---------------------------------------------------------------------------
  3162.   def draw_text_action(text = "",noanimate = false)
  3163.     # Dibuja un texto animado (Generalmente dibuja las palabras Combo,Suma...)
  3164.     return if text == nil or text == ""
  3165.     b = Bitmap.new(1,1)
  3166.     b.font.size = 68
  3167.     w = b.text_size(text).width + 3
  3168.     h = b.text_size(text).height + 3
  3169.     text = text.split(" ")
  3170.     w += text.size * 10
  3171.     w_real = w
  3172.     if @textaction != nil
  3173.       @textaction.bitmap.clear
  3174.     end
  3175.     @textaction = Sprite.new
  3176.     @textaction.bitmap = Bitmap.new(w,h)
  3177.     @textaction.bitmap.font.size = 68
  3178.     @textaction.x = 640
  3179.     @textaction.y = 240 - (h/2)
  3180.     @textaction.z = 10000
  3181.     x = 0
  3182.     y = 0
  3183.     data_pos1 = [[1,0],[-1,0],[0,-1],[0,1],[2,0],[-2,0],[0,-2],[0,2]]
  3184.     data_pos2 = [[3,0],[-3,0],[0,-3],[0,3],[4,3],[-4,3],[3,-4],[3,4]]
  3185.     text.each do |word|
  3186.       text1 = word[0,1].upcase
  3187.       text2 = word[1,word.size].downcase
  3188.       w = @textaction.bitmap.text_size(text1).width
  3189.       @textaction.bitmap.font.italic = false
  3190.       @textaction.bitmap.font.color = Color.new(0,0,0,255)
  3191.       for i in 0...data_pos2.size
  3192.         x1 = x + data_pos2[i][0]
  3193.         y1 = y + data_pos2[i][1]
  3194.         @textaction.bitmap.draw_text(x1,y1,w,h,text1,1)
  3195.       end
  3196.       @textaction.bitmap.font.color = Color.new(255,255,255,255)
  3197.       for i in 0...data_pos1.size
  3198.         x1 = x + data_pos1[i][0]
  3199.         y1 = y + data_pos1[i][1]
  3200.         @textaction.bitmap.draw_text(x1,y1,w,h,text1,1)
  3201.       end
  3202.       r = rand(100) + 70
  3203.       g = rand(100) + 70
  3204.       b = rand(100) + 70
  3205.       @textaction.bitmap.font.color = Color.new(r,g,b,255)
  3206.       @textaction.bitmap.draw_text(x,y,w,h,text1,1)
  3207.       x += w
  3208.       if word.size == 1
  3209.         x += 10
  3210.         next
  3211.       end
  3212.       @textaction.bitmap.font.italic = true
  3213.       w = @textaction.bitmap.text_size(text2).width
  3214.       h = @textaction.bitmap.text_size(text2).height
  3215.       @textaction.bitmap.font.color = Color.new(0,0,0,255)
  3216.       for i in 0...data_pos2.size
  3217.         x1 = x + data_pos2[i][0]
  3218.         y1 = y + data_pos2[i][1]
  3219.         @textaction.bitmap.draw_text(x1,y1,w,h,text2,0)
  3220.       end
  3221.       @textaction.bitmap.font.color = Color.new(255,255,255,255)
  3222.       for i in 0...data_pos1.size
  3223.         x1 = x + data_pos1[i][0]
  3224.         y1 = y + data_pos1[i][1]
  3225.         @textaction.bitmap.draw_text(x1,y1,w,h,text2,0)
  3226.       end
  3227.       @textaction.bitmap.font.color = Color.new(112,128,154,255)
  3228.       @textaction.bitmap.draw_text(x,y,w,h,text2,0)
  3229.       x += w + 10
  3230.    end
  3231.    des = (((320 - (w_real/2)) - 40) - 640) / 9
  3232.    if !noanimate
  3233.      for i in 0...9
  3234.        @textaction.x += des
  3235.        @frameglobal += 1
  3236.        @frameglobal = 0 if @frameglobal >= 100
  3237.        animateselector2 if @frameglobal % 3 == 0
  3238.        Graphics.update
  3239.      end
  3240.      @textaction.x = 320 - (w_real/2)
  3241.      Graphics.update
  3242.      waitsec(0.2)
  3243.    else
  3244.      @textaction.x = 320 - (w_real/2)
  3245.      waitsec(0.1)
  3246.    end
  3247.   end
  3248.   # ---------------------------------------------------------------------------
  3249.   def begin_fase_pago
  3250.     # Al terminar la partida este método se encarga de establecer al ganador,
  3251.     # el número de cartas ganadas, las cartas ganadas (en caso de que el
  3252.     # ganador sea el enemigo o la cantidad de cartas ganadas sea 5)
  3253.     Graphics.freeze
  3254.     # Ocultar algunos gráficos
  3255.     @numbercardsplayer.visible = false
  3256.     @numbercardsenemy.visible = false
  3257.     @cursor.visible = false
  3258.     @selector2.visible = false
  3259.     if @textaction != nil
  3260.       @textaction.visible = false
  3261.     end
  3262.     if @reglaelemental
  3263.       for x in 0...3
  3264.         for y in 0...3
  3265.           if @boardelementalima[x][y].is_a?(Sprite)
  3266.             @boardelementalima[x][y].visible = false
  3267.           end
  3268.         end
  3269.       end
  3270.     end
  3271.     # reconstruir los decks
  3272.     # ** Nuevo Modo **
  3273.     for x in 0...3
  3274.       for y in 0...3
  3275.         card =  @boarddeck[x][y]
  3276.         next if card == nil or card == -1
  3277.         card[0].dispose
  3278.       end
  3279.     end
  3280.     @playerdeck.each do |item|
  3281.       item[0].dispose
  3282.     end
  3283.     @enemydeck.each do |item|
  3284.       item[0].dispose
  3285.     end
  3286.     @playerdeck = @newplayerdeckbackup.dup
  3287.     @enemydeck = @newenemydeckbackup.dup
  3288.     # ** Fin Nuevo Modo **
  3289.     # Posicionar las cartas antes de animar
  3290.     for i in 0...@playerdeck.size
  3291.       item = @playerdeck[i]
  3292.       item[0].x = 575
  3293.       item[0].y = 269
  3294.       item[0].z = 5-i
  3295.       # Reconstruir la carta original y su color # modo antiguo
  3296.       #createcardpreview(false,false,item[2],true,0)
  3297.       #item[0].bitmap = @cardpreview.bitmap.dup
  3298.     end
  3299.     for i in 0...@enemydeck.size
  3300.       item = @enemydeck[i]
  3301.       item[0].x = -43
  3302.       item[0].y = 95
  3303.       item[0].z = 5-i
  3304.       # Reconstruir la carta original y su color # modo antiguo
  3305.       createcardpreview(false,false,item[2],true,1)
  3306.       item[0].bitmap = @cardpreview.bitmap.dup
  3307.     end
  3308.     # Poner el nuevo fondo
  3309.     @tablero.bitmap = Bitmap.new(@backgroundimage2)
  3310.     # Ejecutar transision
  3311.     Graphics.transition(20)
  3312.     # animar cartas
  3313.     maxX = []
  3314.     for i in 0...5
  3315.       maxX[i] = 51 + (i * 111)
  3316.     end
  3317.     for n in 0...8
  3318.       for i in 0...5
  3319.         next if @playerdeck[i] == nil
  3320.         @playerdeck[i][0].x -= maxX[i] / 8
  3321.         next if @enemydeck[i] == nil
  3322.         @enemydeck[i][0].x += maxX[i] / 8
  3323.       end
  3324.       Graphics.update
  3325.     end
  3326.     for i in 0...5
  3327.       next if @playerdeck[i] == nil
  3328.       @playerdeck[i][0].x -= 40
  3329.       next if @enemydeck[i] == nil
  3330.       @enemydeck[i][0].x += 40
  3331.       Graphics.update
  3332.     end
  3333.     # Re-ordenar los decks para que coincidan con la posición de las cartas
  3334.     @playerdeck = @playerdeck.reverse
  3335.     # Determinar quien es el vencedor
  3336.     if @playercardsgainingame > @enemycardsgainingame
  3337.       @winner = 0
  3338.     else
  3339.       @winner = 1
  3340.     end
  3341.     # Actualizar estadísticas del enemigo (1 de 2)
  3342.     if @playercardsgainingame == @enemycardsgainingame
  3343.       $deck['stats'][@enemyid]['drawgames'] += 1
  3344.       $deck['stats']['player']['drawgames'] += 1
  3345.     elsif @winner == 0
  3346.       $deck['stats'][@enemyid]['lostgames'] += 1
  3347.       $deck['stats']['player']['wingames'] += 1
  3348.     else
  3349.       $deck['stats'][@enemyid]['wingames'] += 1
  3350.       $deck['stats']['player']['lostgames'] += 1
  3351.     end
  3352.     # Determinar que hacer en función del método de pago activo
  3353.     if @reglapago == 0 or @reglapago == 2 or @reglapago == 3
  3354.       # Determinar Cuántas cartas tienes que coger del rival
  3355.       if @reglapago == 0 # Una sola carta
  3356.         @maxgetcards = 1
  3357.       elsif @reglapago == 3 # Todas las cartas para el ganador
  3358.         @maxgetcards = 5
  3359.       else # Diferencia
  3360.         if @winner == 0
  3361.           # El jugador ha ganado
  3362.           @maxgetcards = @playercardsgainingame - @enemycardsgainingame
  3363.         else
  3364.           # El enemigo ha ganado
  3365.           @maxgetcards = @enemycardsgainingame - @playercardsgainingame
  3366.         end
  3367.       end
  3368.       @maxgetcards = 5 if @maxgetcards > 5
  3369.       @maxgetcards = 1 if @maxgetcards < 1
  3370.       if @winner == 1 # Enemigo = Ganador
  3371.         # Determinar que cartas se va a quedar el enemigo
  3372.         # (Siempre se quedará las mejores al menos que tenga definidas
  3373.         # una o más cartas preferidas, en cuyo caso primero se quedaría
  3374.         # con estas si estuvieran presentes y después escogería el resto
  3375.         # de entre las disponibles)
  3376.         @enemydeck.each do |item|
  3377.           item[2][5] = 1 # Cambia el color de las cartas a color enemigo
  3378.         end
  3379.         @playerdeck.each do |item|
  3380.           item[2][5] = 0 # Cambia el color de las cartas a color jugador
  3381.         end
  3382.         cards = []
  3383.         n = @maxgetcards
  3384.         deckbackup = @playerdeck.dup
  3385.         # loop para determinar que carta es mejor basado en sus ataques
  3386.         while n > 0
  3387.           bestcard = []
  3388.           for i in 0...deckbackup.size
  3389.             item = deckbackup[i]
  3390.             # Comprobar si la carta es una de sus preferidas.
  3391.             itemid = item[2][0].split('_')[0]
  3392.             breakloop = false
  3393.             if @preferredenemycards != nil and @preferredenemycards != []
  3394.               @preferredenemycards.each do |preferredcardid|
  3395.                 if preferredcardid.to_i == itemid.to_i
  3396.                   bestcard = [0,item]
  3397.                   breakloop = true
  3398.                   break
  3399.                 end
  3400.               end
  3401.             end
  3402.             break if breakloop
  3403.             # Si la carta no es una de sus preferidas mirar su ataque para
  3404.             # saber si se va a quedar con ella o no.
  3405.             atk = ((item[2][3][0] + item[2][3][1] + item[2][3][2] +
  3406.                   item[2][3][3]) * 2) + (item[2][4] == 1 ? 20 : 0)
  3407.             if bestcard == []
  3408.               bestcard = [atk,item]
  3409.             else
  3410.               if bestcard[0] < atk
  3411.                 bestcard = [atk,item]
  3412.               end
  3413.             end
  3414.           end
  3415.           cards.push(bestcard[1])
  3416.           deckbackup.delete(bestcard[1])
  3417.           n -= 1
  3418.         end
  3419.         cards.each do |item|
  3420.           item[2][5] = 1 # Cambiar el color a color del enemigo
  3421.         end
  3422.         getcardsbycolor # Efectiar pago
  3423.         waitsec(0.2)
  3424.       elsif @maxgetcards == 5 # Ganador = Jugador > Todas las cartas
  3425.         @fase = 100
  3426.         @enemydeck.each do |item|
  3427.           item[2][5] = 0 # Cambia el color de las cartas a color jugador
  3428.         end
  3429.         @playerdeck.each do |item|
  3430.           item[2][5] = 0 # Cambia el color de las cartas a color jugador
  3431.         end
  3432.         getcardsbycolor # Efectiar pago
  3433.         waitsec(0.2)
  3434.         @fase = 100
  3435.       else # Ganador = Jugador > n cartas (n = @maxgetcards), Selección Manual
  3436.         # Empezar el loop para que el jugador coja las cartas que quiera
  3437.         @backupmaxgetcards = @maxgetcards
  3438.         @cursor.visible = true
  3439.         @cursor.opacity = 255
  3440.         @cursor.x = 25
  3441.         @cursor.y = 119
  3442.         @index = 0
  3443.         @fase = 10
  3444.         draw_last_help
  3445.         draw_last_help_complement
  3446.       end
  3447.     elsif @reglapago == 1 # Aplicar la regla directo
  3448.       sum1 = 0
  3449.       sum2 = 0
  3450.       for x in 0...3
  3451.         for y in 0...3
  3452.           card =  @boarddeck[x][y]
  3453.           next if card == nil or card == -1
  3454.           cardid = card[2][0]
  3455.           cardcolor = card[2][5]
  3456.           cardcolor == 0 ? sum1 += 1 : sum2 += 1
  3457.           for i in 0...@playerdeck.size
  3458.             itemid = @playerdeck[i][2][0]
  3459.             @playerdeck[i][2][5] == cardcolor if itemid == cardid
  3460.           end
  3461.           for i in 0...@enemydeck.size
  3462.             itemid = @enemydeck[i][2][0]
  3463.             @enemydeck[i][2][5] == cardcolor if itemid == cardid
  3464.           end
  3465.         end
  3466.       end
  3467.       getcardsbycolor # Efectuar pago
  3468.       waitsec(0.2)
  3469.       @fase = 100
  3470.     end
  3471.   end
  3472.   # ---------------------------------------------------------------------------
  3473.   def getcardsbycolor
  3474.     # Según las cartas elegidas por el ganador, éste método se encarga de
  3475.     # animarlas volteándolas y cambiándole el color
  3476.     cards = []
  3477.     @fastmode = false
  3478.     @indexboardx = @indexboardy = 0
  3479.     @boarddeck[0][0] = nil
  3480.     @animatecardsflip = []
  3481.     for i in 0...5
  3482.       next if @playerdeck[i] == nil or @enemydeck[i] == nil
  3483.       cardcolor1 = @playerdeck[i][2][5]
  3484.       cardcolor2 = @enemydeck[i][2][5]
  3485.       if cardcolor1 == 1 or cardcolor2 == 0
  3486.         Audio.se_play(@soundmovecard,85)
  3487.         if cardcolor1 == 1
  3488.           @playerdeck[i][0].y = 249
  3489.           @playerdeck[i][0].opacity = 255
  3490.           cards.push([@playerdeck[i],1,0])
  3491.         else
  3492.           @playerdeck[i][0].opacity = 120
  3493.         end
  3494.         if cardcolor2 == 0
  3495.           @enemydeck[i][0].y = 75
  3496.           @enemydeck[i][0].opacity = 255
  3497.           cards.push([@enemydeck[i],0,0])
  3498.         else
  3499.           @enemydeck[i][0].opacity = 120
  3500.         end
  3501.       end
  3502.     end
  3503.     for i in 0...5
  3504.       next if @playerdeck[i] == nil or @enemydeck[i] == nil
  3505.       @enemydeck[i][0].opacity = 120 if @enemydeck[i][0].y != 75
  3506.       @playerdeck[i][0].opacity = 120 if @playerdeck[i][0].y != 249
  3507.     end
  3508.     for i in 0...cards.size
  3509.       cards[i][0][0].visible = false
  3510.       @animatecardsflip.push([cards[i][0],1,0])
  3511.     end
  3512.     Audio.se_play(@soundgaincards,85)
  3513.     flipcardsbacknew
  3514.     for i in 0...cards.size
  3515.       drawonlycardscolor(cards[i][0][0],cards[i][1])
  3516.       cards[i][0][2][5] = cards[i][1]
  3517.     end
  3518.     flipcardsfrontnew
  3519.     for i in 0...cards.size
  3520.       cards[i][0][0].visible = true
  3521.     end
  3522.     draw_last_window
  3523.   end
  3524.   # ---------------------------------------------------------------------------
  3525.   def draw_last_help
  3526.     # Dibjula la ayuda en la fase final (selección de cartas del ganador)
  3527.     if @lastwin != nil
  3528.       @lastwin.bitmap.clear
  3529.     else
  3530.       @lastwin = Sprite.new
  3531.       @lastwin.y = 5
  3532.     end
  3533.     text1 = @textos[4][9]
  3534.     text2 = @textos[4][10]
  3535.     text3 = @maxgetcards != 1 ? 's' : ''
  3536.     text = "#{text1} #{@maxgetcards} #{text2}#{text3}"
  3537.     bitmap = Bitmap.new(1,1)
  3538.     bitmap.font.size = 22
  3539.     w = bitmap.text_size(text).width + 60
  3540.     @lastwin.bitmap = Bitmap.new(w,46)
  3541.     win = Bitmap.new(@winhelpcardsbitmap2)
  3542.     mod_pos = [[1,0],[-1,0],[0,-1],[0,1],[2,0],[-2,0],[0,-2],[0,2]]
  3543.     @lastwin.bitmap.font.size = 22
  3544.     @lastwin.bitmap.stretch_blt(@lastwin.bitmap.rect,win,win.rect)
  3545.     @lastwin.bitmap.font.color = Color.new(0,0,0,255)
  3546.     for i in 0...mod_pos.size
  3547.       x = 0 + mod_pos[i][0]
  3548.       y = 0 + mod_pos[i][1]
  3549.       @lastwin.bitmap.draw_text(x,y,w,46,text,1)
  3550.     end
  3551.     @lastwin.bitmap.font.color = Color.new(255,255,255,255)
  3552.     @lastwin.bitmap.draw_text(0,0,w,46,text,1)
  3553.     @lastwin.x = 320 - (@lastwin.bitmap.width / 2)
  3554.     @lastwin.visible = true
  3555.   end
  3556.   # ---------------------------------------------------------------------------
  3557.   def draw_last_help_complement
  3558.     # Complemento para la ayuda anterior (draw_last_help) Se encarga de dibujar
  3559.     # una segunda ayuda (Abajo del todo) Indicando al jugador si la carta
  3560.     # que tiene seleccionada ya está en su colección o no
  3561.     # ---------
  3562.     if @last_help_complement == nil
  3563.       @last_help_complement = Sprite.new
  3564.       @last_help_complement.x = 115
  3565.       @last_help_complement.y = 420
  3566.       @last_help_complement.z = 10000
  3567.     end
  3568.     # ---------
  3569.     color1 = Color.new(0,0,0,255)
  3570.     color2 = Color.new(255,255,255,255)
  3571.     color3 = Color.new(229,197,46,255)
  3572.     color4 = Color.new(244,72,72,255)
  3573.     color5 = Color.new(80,227,8,255)
  3574.     data_pos = [[1,0],[-1,0],[0,1],[0,-1],[0,2]]
  3575.     # ---------
  3576.     text1 = @textos[4][24] # Carta única
  3577.     text2 = @textos[4][25] # Ya posees la carta
  3578.     text3 = @textos[4][26] # Aún no posees la carta
  3579.     data = @enemydeck[@index][2]
  3580.     name = data[1]
  3581.     uniq = data[4]
  3582.     if uniq == 1
  3583.       texto1 = "#{name} (#{text1})"
  3584.       colora = color3
  3585.     else
  3586.       texto1 = "#{name}"
  3587.       colora = color2
  3588.     end
  3589.     if check_card_in_deck_player
  3590.       texto2 = " «#{text2}»"
  3591.       colorb = color5
  3592.     else
  3593.       texto2 = " «#{text3}»"
  3594.       colorb = color4
  3595.     end
  3596.     # ---------
  3597.     @last_help_complement.bitmap = Bitmap.new(@winhelpcardsbitmap1)
  3598.     @last_help_complement.bitmap.font.size = 19
  3599.     @last_help_complement.bitmap.font.color = color1
  3600.     for i in 0...data_pos.size
  3601.       x = 7 + data_pos[i][0]
  3602.       y = 5 + data_pos[i][1]
  3603.       @last_help_complement.bitmap.draw_text(x,y,399,20,texto1)
  3604.       @last_help_complement.bitmap.draw_text(x+3,y+20,399,20,texto2)
  3605.     end
  3606.     @last_help_complement.bitmap.font.color = colora
  3607.     @last_help_complement.bitmap.draw_text(7,5,399,23,texto1)
  3608.     @last_help_complement.bitmap.font.color = colorb
  3609.     @last_help_complement.bitmap.draw_text(10,25,399,23,texto2)
  3610.     # ---------
  3611.   end
  3612.   # ---------------------------------------------------------------------------
  3613.   def check_card_in_deck_player
  3614.     # Comprueba si la carta seleccionada del enemigo está ya incluida en la
  3615.     # colección del jugador (usado por draw_last_help_complement)
  3616.     data = @enemydeck[@index][2]
  3617.     id = (@enemydeck[@index][2][0].split("_"))[0].to_i
  3618.     if $deck['player'][id] != nil
  3619.       if $deck['player'][id] != []
  3620.         return true
  3621.       else
  3622.         return false
  3623.       end
  3624.     end
  3625.     return false
  3626.   end
  3627.   # ---------------------------------------------------------------------------
  3628.   def draw_last_window
  3629.     # ventana que muestra las cartas que gana y pierde el jugador tras terminar
  3630.     # la fase de pago y updatea los mazos de cartas relaes del jugador
  3631.     # y el enemigo con las cartas perdidas y ganadas
  3632.     Graphics.freeze
  3633.     win = Bitmap.new(@winselectioncardsbitmap)
  3634.     win1 = Sprite.new
  3635.     win1.z = 2000
  3636.     textplayer = ""
  3637.     textenemy = ""
  3638.     cntcardsplayer = 0
  3639.     cntcardsenemy = 0
  3640.     Audio.bgm_fade(3000)
  3641.     for i in 0...5
  3642.       if @playerdeck[i][2][5] != 0
  3643.         text = @playerdeck[i][2][1].to_s
  3644.         textenemy += (textenemy == "" ? text : ", #{text}")
  3645.         cntcardsenemy += 1
  3646.         # Añadir esta carta al deck del enemigo para futuras partidas
  3647.         addcardtoenemydeck(@playerdeck[i][2])
  3648.       else
  3649.         # Añadir esta carta al deck del jugador para usarla posteriormente
  3650.         addcardtoplayerdeck(@playerdeck[i][2],true)
  3651.       end
  3652.       if @enemydeck[i][2][5] != 1
  3653.         text = @enemydeck[i][2][1].to_s
  3654.         textplayer += (textplayer == "" ? text : ", #{text}")
  3655.         cntcardsplayer += 1
  3656.         # Añadir esta carta al deck del jugador para usarla posteriormente
  3657.         addcardtoplayerdeck(@enemydeck[i][2])
  3658.       else
  3659.         # Añadir esta carta al deck del enemigo para futuras partidas
  3660.         addcardtoenemydeck(@enemydeck[i][2],true)
  3661.       end
  3662.     end
  3663.     s1 = cntcardsplayer != 1 ? 's' : ''
  3664.     s2 = cntcardsenemy != 1 ? 's' : ''
  3665.     t = @textos[4]
  3666.     if textplayer != ""
  3667.       title1 = "#{t[12]} #{t[14]}#{s1} #{t[15]}#{s1} #{t[16]}#{s1}:"
  3668.     else
  3669.       title1 = ""
  3670.     end
  3671.     if textenemy != ""
  3672.       title2 = "#{t[13]} #{t[14]}#{s2} #{t[15]}#{s2} #{t[16]}#{s2}:"
  3673.     else
  3674.       title2 = ""
  3675.     end
  3676.     if title1 == "" and title2 == ""
  3677.       title1 = @textos[4][18]
  3678.     end
  3679.     win2 = Bitmap.new(1,1)
  3680.     win2.font.size = 20
  3681.     w = win2.text_size(textplayer).width
  3682.     w = win2.text_size(textenemy).width if win2.text_size(textenemy).width > w
  3683.     w = win2.text_size(title1).width if win2.text_size(title1).width > w
  3684.     w = win2.text_size(title2).width if win2.text_size(title2).width > w
  3685.     w += 40
  3686.     w = 620 if w > 620
  3687.     h = 50 - (title1 == "" ? 10 : 0) - (title2 == "" ? 10 : 0)
  3688.     h += 22 if title1 != ""
  3689.     h += 22 if textplayer != ""
  3690.     h += 22 if title2 != ""
  3691.     win1.bitmap = Bitmap.new(w,h)
  3692.     win1.bitmap.stretch_blt(win1.bitmap.rect,win,win.rect)
  3693.     win1.x = 320 - (w/2)
  3694.     win1.y = 240 - (h/2)
  3695.     win1.bitmap.font.color = Color.new(255,255,255,255)
  3696.     win1.bitmap.draw_text(10,10,w-15,22,title1,1)
  3697.     nh = (title1 != "" ? 60 : 10)
  3698.     win1.bitmap.draw_text(10,nh,w-15,22,title2,1)
  3699.     win1.bitmap.font.color = Color.new(212,174,22,255)
  3700.     win1.bitmap.draw_text(10,33,w-15,22,textplayer,1)
  3701.     nh = (title1 != "" ? 83 : 33)
  3702.     win1.bitmap.draw_text(10,nh,w-15,22,textenemy,1)
  3703.     Graphics.update
  3704.     Graphics.transition(10)
  3705.     Graphics.update
  3706.     #waitsec(4.0)
  3707.     for i in 0...60
  3708.       Graphics.update
  3709.     end
  3710.     if @lastwin != nil
  3711.       @lastwin.visible = false
  3712.     end
  3713.     Graphics.freeze
  3714.     win1.dispose
  3715.     Graphics.transition(4)
  3716.     @fase = -2
  3717.     @endgame= true
  3718.   end
  3719.   # ---------------------------------------------------------------------------
  3720.   def update_fase_pago
  3721.     # Update para la selección de cartas que te vas a quedar tras terminar
  3722.     # una partida (selección manual de la/s carta/s enemiga/s que vas a quedarte)
  3723.     if @maxgetcards == 0
  3724.       @lastwin.visible = false
  3725.       @last_help_complement.visible = false
  3726.       @enemydeck.each do |item|
  3727.         if item[0].y != 75
  3728.           item[0].opacity = 120
  3729.         end
  3730.       end
  3731.       backupindex = @index
  3732.       drawwin2(@textos[4][11])
  3733.       @index = backupindex
  3734.       if @index_window == 1
  3735.         @maxgetcards = @backupmaxgetcards
  3736.         Audio.se_play(@soundmovecard,85)
  3737.         @enemydeck.each do |item|
  3738.           if item[0].y == 75
  3739.             item[0].y = 95
  3740.             item[0].x += 10
  3741.           end
  3742.           item[0].opacity = 255
  3743.         end
  3744.         @cursor.visible = true
  3745.         @cursor.y = 119
  3746.         @cursor.x = 25 + (113 * @index)
  3747.         draw_last_help
  3748.         @lastwin.visible = true
  3749.         @last_help_complement.visible = true
  3750.         return
  3751.       else
  3752.         @playerdeck.each do |item|
  3753.           item[2][5] = 0
  3754.         end
  3755.         @enemydeck.each do |item|
  3756.           item[0].y == 75 ? item[2][5] = 0 : item[2][5] = 1
  3757.         end
  3758.         getcardsbycolor
  3759.         @endgame = true
  3760.       end
  3761.       return
  3762.     end
  3763.     if Input.trigger?(Input::C)
  3764.       Audio.se_play(@soundmovecard,85)
  3765.       card = @enemydeck[@index]
  3766.       return if card == [] or card == nil
  3767.       if card[0].y == 95
  3768.         card[0].y = 75
  3769.         card[0].x -= 10
  3770.         @maxgetcards -= 1
  3771.       else
  3772.         card[0].y = 95
  3773.         card[0].x += 10
  3774.         @maxgetcards += 1
  3775.       end
  3776.       draw_last_help
  3777.       return
  3778.     end
  3779.     if Input.repeat?(Input::RIGHT)
  3780.       Audio.se_play(@soundcursor,85)
  3781.       @index += 1
  3782.       @index = 0 if @index == @enemydeck.size
  3783.       @cursor.x = 25 + (113 * @index)
  3784.       @anicursor1 = 0
  3785.       draw_last_help_complement
  3786.       Graphics.update
  3787.       return
  3788.     end
  3789.     if Input.repeat?(Input::LEFT)
  3790.       Audio.se_play(@soundcursor,85)
  3791.       @index -= 1
  3792.       @index = @enemydeck.size - 1 if @index == -1
  3793.       @cursor.x = 25 + (113 * @index)
  3794.       @anicursor1 = 0
  3795.       draw_last_help_complement
  3796.       Graphics.update
  3797.       return
  3798.     end
  3799.   end
  3800.   # ---------------------------------------------------------------------------
  3801.   def waitsec(time)
  3802.     # Comando para congelar la pantalla 'time' segundos (puede ser decimal)
  3803.     sleep(time)
  3804.   end
  3805.   # ---------------------------------------------------------------------------
  3806.   def getrules
  3807.     # Establece que reglas estarán activas durante la partida en curso
  3808.     if $deck['emenyIA'][@enemyid] != nil # Enemigo con reglas específicas
  3809.       @enemylevel = $deck['emenyIA'][@enemyid][0]
  3810.       @reglacombo = $deck['emenyIA'][@enemyid][1]
  3811.       @reglaigual = $deck['emenyIA'][@enemyid][2]
  3812.       @reglasuma = $deck['emenyIA'][@enemyid][3]
  3813.       @reglapared = $deck['emenyIA'][@enemyid][4]
  3814.       @reglaelemental = $deck['emenyIA'][@enemyid][5]
  3815.       @reglaabierto = $deck['emenyIA'][@enemyid][6]
  3816.       @reglarandom = $deck['emenyIA'][@enemyid][7]
  3817.       @reglahastalamuerte = $deck['emenyIA'][@enemyid][8]
  3818.       @reglapago = $deck['emenyIA'][@enemyid][9]
  3819.       usepluswall = $deck['emenyIA'][@enemyid][10]
  3820.       usecombowithwall = $deck['emenyIA'][@enemyid][11]
  3821.       checkallcards = $deck['emenyIA'][@enemyid][12]
  3822.       preferredenemycards = $deck['emenyIA'][@enemyid][13]
  3823.     elsif $deck['maprule'][@mapid] != nil # Mapa con reglas específicas
  3824.       @enemylevel = $deck['maprule'][@mapid][0]
  3825.       @reglacombo = $deck['maprule'][@mapid][1]
  3826.       @reglaigual = $deck['maprule'][@mapid][2]
  3827.       @reglasuma = $deck['maprule'][@mapid][3]
  3828.       @reglapared = $deck['maprule'][@mapid][4]
  3829.       @reglaelemental = $deck['maprule'][@mapid][5]
  3830.       @reglaabierto = $deck['maprule'][@mapid][6]
  3831.       @reglarandom = $deck['maprule'][@mapid][7]
  3832.       @reglahastalamuerte = $deck['maprule'][@mapid][8]
  3833.       @reglapago = $deck['maprule'][@mapid][9]
  3834.       usepluswall = $deck['maprule'][@enemyid][10]
  3835.       usecombowithwall = $deck['maprule'][@enemyid][11]
  3836.       checkallcards = $deck['maprule'][@enemyid][12]
  3837.     else # Reglas por defecto
  3838.       @enemylevel = @defaultenemylevel
  3839.       @reglacombo = @defaultcombo
  3840.       @reglaigual = @defaultreglaigual
  3841.       @reglasuma = @defaultreglasuma
  3842.       @reglapared = @defaultreglapared
  3843.       @reglaelemental = @defaultreglaelementa
  3844.       @reglaabierto = @defaultreglaabierto
  3845.       @reglarandom = @defaultreglarandom
  3846.       @reglahastalamuerte = @defaultreglahastalamuerte
  3847.       @reglapago = @defaultreglapago
  3848.       usepluswall = -1
  3849.       usecombowithwall = -1
  3850.       checkallcards = -1
  3851.     end
  3852.     # Convirtiendo las reglas nil en true o false aleatoriamente
  3853.     # Añadiendo un valor aleatorio al nivel si este es nil
  3854.     @reglacombo = (rand(2) == 0 ? true : false) if @reglacombo == nil
  3855.     @reglaigual = (rand(2) == 0 ? true : false) if @reglaigual == nil
  3856.     @reglasuma = (rand(2) == 0 ? true : false) if @reglasuma == nil
  3857.     @reglapared = (rand(2) == 0 ? true : false) if @reglapared == nil
  3858.     @reglaelemental = (rand(2) == 0 ? true : false) if @reglaelemental == nil
  3859.     @reglaabierto = (rand(2) == 0 ? true : false) if @reglaabierto == nil
  3860.     @reglarandom = (rand(2) == 0 ? true : false) if @reglarandom == nil
  3861.     @reglahastalamuerte = (rand(2) == 0 ? true : false) if @reglahastalamuerte == nil
  3862.     # Añadiendo un valor aleatorio al nivel si este es nil
  3863.     if @enemylevel == nil
  3864.       @enemylevel = rand(10) + 1
  3865.     end
  3866.     # Añadiendo valores por defecto a las reglas -1
  3867.     @enemylevel = @defaultenemylevel if @enemylevel == -1
  3868.     @reglacombo = @defaultcombo if @reglacombo == -1
  3869.     @reglaigual = @defaultreglaigual if @reglaigual == -1
  3870.     @reglasuma = @defaultreglasuma if @reglasuma == -1
  3871.     @reglapared = @defaultreglapared if @reglapared == -1
  3872.     @reglaelemental = @defaultreglaelementa if @reglaelemental == -1
  3873.     @reglaabierto = @defaultreglaabierto if @reglaabierto == -1
  3874.     @reglarandom = @defaultreglarandom if @reglarandom == -1
  3875.     @reglahastalamuerte = @defaultreglahastalamuerte if @reglahastalamuerte == -1
  3876.     @reglapago = @defaultreglapago if @reglapago == -1
  3877.     # Comprobar las reglas especiales
  3878.     if usepluswall == nil
  3879.       @usepluswall = (rand(2) == 0 ? true : false)
  3880.     elsif usepluswall != -1
  3881.       @usepluswall = usepluswall
  3882.     end
  3883.     if usecombowithwall == nil
  3884.       @usecombowithwall = (rand(2) == 0 ? true : false)
  3885.     elsif usecombowithwall != -1
  3886.       @usecombowithwall = usecombowithwall
  3887.     end
  3888.     if checkallcards == nil
  3889.       @checkallcards = (rand(2) == 0 ? true : false)
  3890.     elsif checkallcards != -1
  3891.       @checkallcards = checkallcards
  3892.     end
  3893.     # Asignando una regla aleatoria de pago si esta es nil
  3894.     @reglapago = rand(5) if @reglapago == nil
  3895.     # Asegurar que los valores de las reglas sean correctos
  3896.     if @activatecombowithplusorsame
  3897.       @reglacombo = true if @reglaigual or @reglasuma
  3898.     end
  3899.     @enemylevel = 1 if @enemylevel == nil
  3900.     @enemylevel = 1 if @enemylevel < 1
  3901.     @enemylevel = 10 if @enemylevel > 10
  3902.     @reglapago = 0 if @reglapago < 0 or @reglapago > 4
  3903.     # Si la regla pago es directo queda inhabilitada la regla hasta la muerte
  3904.     @reglahastalamuerte = false if @reglapago == 1
  3905.     # Añadiendo las preferencias de cartas que quiere obtener el enemigo
  3906.     @preferredenemycards = preferredenemycards
  3907.   end
  3908.   # ---------------------------------------------------------------------------
  3909.   def addcardtoplayerdeck(card,pushmode = false)
  3910.     # Añade la carta dada (card) al mazo de cartas del jugador.
  3911.     # Si ésta ya existe, primero la borra del mazo de cartas del jugador.
  3912.     # Añade la carta al principio del array, así cuando se entra a jugar
  3913.     # otra vez la carta aparecerá primera en caso de tenr varias del mismo tipo.
  3914.     deletecardfromdeckenemy(card)
  3915.     deletecardfromdeckplayer(card)
  3916.     cardid = card[0]
  3917.     realidindeck = cardid.split("_")[0].to_i
  3918.     cardplayer = $deck['player'][realidindeck]
  3919.     if cardplayer != nil
  3920.       if !pushmode
  3921.         arr = []
  3922.         arr.push(card)
  3923.         for i in 0...cardplayer.size
  3924.           item = cardplayer[i]
  3925.           id = item[2][0]
  3926.           next if id == cardid
  3927.           arr.push(item)
  3928.         end
  3929.         $deck['player'][realidindeck] = arr
  3930.         return
  3931.       else
  3932.         arr = []
  3933.         arr.push(card)
  3934.         for i in 0...cardplayer.size
  3935.           item = cardplayer[i]
  3936.           arr.push(item) if item != nil and item != []
  3937.         end
  3938.         $deck['player'][realidindeck] = arr
  3939.         return
  3940.       end
  3941.     end
  3942.     $deck['player'][realidindeck] = []
  3943.     $deck['player'][realidindeck].push(card)
  3944.   end
  3945.   # ---------------------------------------------------------------------------
  3946.   def addcardtoenemydeck(card,pushmode = false)
  3947.      # Añade la carta dada (card) al mazo de cartas del enemigo.
  3948.     # Si ésta ya existe, primero la borra del mazo de cartas del enemigo.
  3949.     # Añade la carta al principio del array, así cuando se entra a jugar
  3950.     # otra vez la carta aparecerá primera en caso de tenr varias del mismo tipo.
  3951.     deletecardfromdeckplayer(card)
  3952.     deletecardfromdeckenemy(card)
  3953.     cardid = card[0]
  3954.     realidindeck = cardid.split("_")[0].to_i
  3955.     cardplayer = $deck['enemy'][@enemyid][realidindeck]
  3956.     if cardplayer != nil
  3957.       if !pushmode
  3958.         arr = []
  3959.         arr.push(card)
  3960.         for i in 0...cardplayer.size
  3961.           item = cardplayer[i]
  3962.           id = item[2][0]
  3963.           next if id == cardid
  3964.           arr.push(item)
  3965.         end
  3966.         $deck['enemy'][@enemyid][realidindeck] = arr
  3967.         return
  3968.       else
  3969.         $deck['enemy'][@enemyid][realidindeck].push(card)
  3970.         return
  3971.       end
  3972.     end
  3973.     $deck['enemy'][@enemyid][realidindeck] = []
  3974.     $deck['enemy'][@enemyid][realidindeck].push(card)
  3975.   end
  3976.   # ---------------------------------------------------------------------------
  3977.   def deletecardfromdeckplayer(card)
  3978.     # Borra la carta dada del mazo de cartas del jugador
  3979.     cardid = card[0]
  3980.     realidindeck = cardid.split("_")[0].to_i
  3981.     if $deck['player'][realidindeck] != nil
  3982.       $deck['player'][realidindeck].each do |item|
  3983.         id = item[0]
  3984.         if id == cardid
  3985.           $deck['player'][realidindeck].delete(item)
  3986.           return
  3987.         end
  3988.       end
  3989.     end
  3990.   end
  3991.   # ---------------------------------------------------------------------------
  3992.   def deletecardfromdeckenemy(card)
  3993.     # Borra la carta dada del mazo de cartas del enemigo
  3994.     cardid = card[0]
  3995.     realidindeck = cardid.split("_")[0].to_i
  3996.     if $deck['enemy'][@enemyid][realidindeck] != nil
  3997.       $deck['enemy'][@enemyid][realidindeck].each do |item|
  3998.         id = item[0]
  3999.         if id == cardid
  4000.           $deck['enemy'][@enemyid][realidindeck].delete(item)
  4001.           return
  4002.         end
  4003.       end
  4004.     end
  4005.   end
  4006.  # ---------------------------------------------------------------------------
  4007.   def dispose
  4008.     # Borra todos los sprites usados en el script
  4009.     @tablero.dispose
  4010.     @cursor.dispose
  4011.     @cursor2.dispose
  4012.     @selector1.dispose
  4013.     @selector2.dispose
  4014.     @anicursor2image.dispose
  4015.     @cardpreview.dispose
  4016.     @anicursor2image2.dispose
  4017.     @anicursor2image2.dispose
  4018.     @numbercardsplayer.dispose
  4019.     @numbercardsenemy.dispose
  4020.     @helpingame.dispose if @helpingame != nil
  4021.     @last_help_complement.dispose if @last_help_complement != nil
  4022.     if @textaction != nil
  4023.       @textaction.dispose
  4024.     end
  4025.     @playerdeck.each do |item|
  4026.       item[0].dispose
  4027.     end
  4028.     @enemydeck.each do |item|
  4029.       item[0].dispose
  4030.     end
  4031.     for x in 0...3
  4032.       for y in 0...3
  4033.         if @boarddeck[x][y].is_a?(Array)
  4034.           @boarddeck[x][y][0].dispose
  4035.         end
  4036.         if @boardelementalima[x][y].is_a?(Sprite)
  4037.           @boardelementalima[x][y].dispose
  4038.         end
  4039.       end
  4040.     end
  4041.     @previewimas.each do |item|
  4042.       item.each do |i|
  4043.         if i.is_a?(Bitmap) or i.is_a?(Sprite)
  4044.           i.dispose
  4045.         end
  4046.       end
  4047.     end
  4048.   end
  4049.   # ---------------------------------------------------------------------------
  4050. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement