Pum
Puntuación de reacción
162

Mensajes de perfil Última actividad Publicaciones Acerca

  • En general recuerdo que te conteste las razones de cada uno. Por ejemplo eso de que al fallar dice "but failed" 3 veces lo puedes controlar tu, lo mismo que la repeticion de la animacion.

    Eso de que falla mucho no tiene nada que ver con lo que hicimos, quizas por ahi moviste otra cosa.

    Hay muchas rutinas que tienen que modificarse para funcionar correctamente, no solo mirror coat, tambien counter, kings rock, rage, etc...
    Segun yo te conteste las posibles soluciones, revisa.

    Quizas el problema de que se reprodusca el movimiento del oponente esta ligado al switchturn. Eso que dice del enemigo se soluciona a prueba y error. No me mandes la tarea hasta que logres un ressultado que consideres optimo.
    Fuck!! que haria sin ti, de nuevo olvide las clases jajaja

    Si, deja veo cual sigue y la hago.
    Parte 5:

    La rutina se veria asi:

    org 03:5334
    call @extension



    org 03:7AC0//$FAC0 (solo pongo el offset como referencia) (inicia espacio en blanco)
    @extension

    ld a,[$D002]//CurItem
    cp a,$80//aqui va el ID del obejeto que es tu piedra
    jr nz,@next//nz signicica que si el ID NO coincide hace un brinco
    ld a,$0//pone en a el numero que le vamos a restar, en este caso 0...
    ret//...y termina


    @next
    ld a,[$D009]//wd10c ; cantidad de objetos a elimianr
    ret//termina

    En el assembler presionas crtl + g y escribes la direccion (03:5334 o $FAC0 cualquiera sirve), das clic derecho en la linea azul, seleccionas "code editor" y pegas la rutina que te puse, das ok y no deberia darte ningun tipo de error.

    PD: No olvides cambiar el ID del item por el de tu objeto. Has la primera prueba y esperemos que funcione.
    Parte 4:

    Es importante que de ahora en adelante guardes las rutinas.

    ld a, [wd10c] es una instruccion de 3 bytes, lo que la hace perfecta para ahi iniciar el parche debido a cualquier extension de rutina generalmente inician con un call (llamada) o un jp (salto).

    ld a, [wd10c] inicia en .asm_d327 o lo que es lo mismo $D327 en crystal. Para gold inicia en $D334 o lo que es lo mismo 03:5334. Este sistema de punteros inicia con el Banco: pointer inverso, lo que normalmente en Apoint verias como 033453, en ASM lo veras como 03:5334.

    Buscamos espacio en blanco, como yo ya tengo algunas rutinas ampliadas mi espacio en blanco inicia en $FAC0 osea 03:7AC0, pero tu lo puedes poner donde quieras. Lo convertimos al formato anterior y le agregamos la palabra "org" y un espacio:

    org 03:7AC0
    Parte 3:

    La parte donde se lleva a cabo la resta es la siguiente:

    .asm_d327
    ld a, [wd10c]
    ld b, a
    ld a, [hl]
    sub b

    En wd10c (valor en la RAM) se guarda el numero de objetos que vamos a restar, que en el caso de que un objeto sea usado siempre sera 1. Dicho valor se guarda en el registro a (ld a, [wd10c]) y despues se pasa a b (ld b, a), se toma el numero de objetos totales de hl y se pasan a a(ld a, [hl]) y se le resta b (sub b) el cual puede ser interpretado tambien como sub a,b.

    Para evitar que esto suceda antes de aplicar toda esta rutina tendrias que comprobar si el CurItem es el objeto que NO quieres que desaparesca y convertir wd10c en 0, asi al hacer la resta no afectara en nada.

    Crearemos una rutina teorica de lo que te planteo y si por alguna razon no funciona probaremos otro método. Para todo esto tendras que abrir tu Rom de Gold en el GbAsmEdit y guardar la rutina que te pase en un bloc de notas.
    Parte 2:
    Functiond2ff: ; d2ff
    ld d, h
    ld e, l
    ld a, [hli]
    ld c, a
    ld a, [wd107]
    cp c
    jr nc, .asm_d318
    ld c, a
    ld b, $0
    add hl, bc
    add hl, bc
    ld a, [CurItem]
    cp [hl]
    inc hl
    jr z, .asm_d327
    ld h, d
    ld l, e
    inc hl

    .asm_d318
    ld a, [CurItem]
    ld b, a
    .asm_d31c
    ld a, [hli]
    cp b
    jr z, .asm_d327
    cp $ff
    jr z, .asm_d347
    inc hl
    jr .asm_d31c

    .asm_d327
    ld a, [wd10c]
    ld b, a
    ld a, [hl]
    sub b
    jr c, .asm_d347
    ld [hl], a
    ld [wd10d], a
    and a
    jr nz, .asm_d345
    dec hl
    ld b, h
    ld c, l
    inc hl
    inc hl
    .asm_d33b
    ld a, [hli]
    ld [bc], a
    inc bc
    cp $ff
    jr nz, .asm_d33b
    ld h, d
    ld l, e
    dec [hl]

    .asm_d345
    scf
    ret

    .asm_d347
    and a
    ret
    ; d349
    Parte 1:

    Regrese, te voy explicando.

    La funcion Functionf795 eventualmente llama a la rutina TossItem que a su vez llama a Functiond2ff, que es la que nos interesa modificar. Cuando no encuentres una rutina con el buscador de GitHub todo se encuentra en main.asm. Siempre estare hablando con las etiquetas y offsets de Crystal, pero cuando veas que uso el signo $ significa que hablo de offsets de Gold. Aqui la rutina que nos interesa:
    Sip, esa es la rutina. Ya encontre la rutina especifica para que hagas la exclusion y efectivamente todo inicia en Functionf795.

    Vuelvo en una hora y te explico paso a paso como se hace.
    Si.

    Supongo que la rutina que hace el -1 es generica, solo tendrias que hacer una rutina de exclusion, donde si el objeto a utilizar es de un ID determinado no haga el -1.

    Mirate como funcionan las piedras evolutivas en PokeCrystal, intenta ver en que parte del codigo se hace el -1.
    Si, es por eso. No importa que lo pongas como objeto clave ya que la rutina que interpreta, la de la evolution estone, siempre termina por hacer un -1 al item.

    Solucion: Mateo tiene un video donde creo una piedra en el overworld que evoluciona a Eevee en leafeon y la activa mediante script, tu podrias hacer los mismo.
    El problema esta en los datos del objeto no? Otra cosa, si este nuevo objeto es un invento tuyo que se supone que hace?
    Vacaciones mi amigo!!

    Regrese ayer y vi tu mensaje, pero no tuve tiempo de responter.

    Al final lograste resolver al 100% el efecto?

    Muchos de los detalles de los nuevos movimientos se los das tu, pero me parece que un ataque asi es opcional poner los 3 statupfailtext, sin embargo si solo pones uno no te notifica al 100% lo que pasa.
    Oye Pum, ¿Recuerdas que necesitabas midis de un juego de DS pero salían .wavs?, conseguí información al respecto.
    Parte 4:

    Un favor, intenta probar el comando sin effectchance, es que según yo ese comando no debe existir en estos efectos que bajan stats o en caso de existir se deben poner justo despues del segundo switchturn.
    Parte 3:

    Todos los comandos que hace "stat-down" siempre actuan sobre el oponente, asi que si queremos que actuen sobre el usuario debemos usar switchturn, que como su nombre lo indica cambia el jugador en turno. Por obviedad en algun momento se tiene que volver a hacer switchturn para regresar al turno normal.

    effect0x0a, effect0x92 y effect0x0c son opcionales y generalmente se usan en efectos que no hacen daño como Dragon Dance o Cosmic Power. Lo que hacen estos comandos es que si estas detrás de un sustituto expone al pokemon unos segundos para mostrar la animacion. Creo que por defecto hittarget ya los incluye, por eso no se usan en este caso.

    Si 0x8C y 0x8F no muestran bien el texto intenta con 0x8D y 0x8E.

    Tip: En nuevas generaciones KingsRock funciona diferente a esta generacion, por lo que te aconsejo que dejes siempre un espacio en blanco despues de cada FF por si luego necesitas añadirlo.
    Parte 2:

    Deberia ser así:

    db $02//checkobedience
    db $03//usedmovetext
    db $04//doturn
    db $05//critical
    db $06//damagestats
    db $62//damagecalc
    db $07//stab
    db $08//damagevariation
    db $09//checkhit
    db $90//effectchance
    db $AB//hittarget

    db $93//switchturn
    db $7F//defensedown
    db $0A//effect0x0a
    db $92//effect0x92
    db $0C//effect0x0c
    db $8C//statmessageuser//db $8D//statmessagetarget
    db $8F//statdownfailtext//db $8E//statupfailtext
    db $82//specialdefensedown
    db $8C//statmessageuser//db $8D//statmessagetarget
    db $8F//statdownfailtext//db $8E//statupfailtext
    db $80//speeddown
    db $8C//statmessageuser//db $8D//statmessagetarget
    db $8F//statdownfailtext//db $8E//statupfailtext
    db $93//switchturn

    db $0D//resulttext
    db $0E//checkfaint
    db $0F//criticaltext
    db $10//supereffectivetext
    db $11//checkdestinybond
    db $12//buildopponentrage
    db $4D//kingsrock
    db $FF//endmove
    Parte 1: (Maldito limite de caracteres)

    Ok, te explico. Vas por buen camino.

    Primero, no importa lo que diga el texto, si sube o baja, si del oponente o de tu pokemon la mejor manera de comprobar eso es verlo en la ram. Si usas Vboy en "tools-memory view" puedes ver la ram en tiempo real, solo ve a $CBAA y ahi comienzan los stats, primero de tu pokemon y despues los del rival; 7 significa sin cambios, 6 significa -1 nivel de algun stat y asi sucesivamente.
    ¿Es la misma versión exacta de ese mismo emulador? Si no, no sé qué puede pasar salvo que la midi no sea del todo compatible por razones que no conozco.
    Lo del loop me ha pasado alguna vez probando midis que no estaban hechas específicamente para el Ulterra, tuve que añadir una nota en blanco al final de los canales adelantados para que se sincronizase.
    Fuck, otra vez he tardado la vida en responder.
    El tercer canal es diferente al resto pero no suelo trastear mucho con él y suele ir bien, así que no te ofusques mucho. Eso sí, ahí va siempre la base del tema, nunca una melodía principal.

    Lo de cómo suena en el emulador, cada emulador (incluso entre versiones de VBA) reproduce la música de forma ligeramente diferente, así que en algunos sonará mejor que en otros.
  • Cargando…
  • Cargando…
  • Cargando…
Arriba