Registrarse

[RH - Scripting] FR-Pantalla en negro al cambiar valor de script de nivel

Estado
Cerrado para nuevas respuestas.

Yainish

Usuario de platino
Hola a todos, tengo una duda. He hecho un script de nivel que oculta un mini.
Código:
#dynamic 0x800000

'---------------
#org @start
setflag 0x202
hidesprite 0x2
end
(El cual funciona bien)
Después, muestro ese mismo mini en otro script (en una persona)

Código:
#dynamic 0x800000

'---------------
#org @start
lock
faceplayer
compare 0x4032 0x4
if 0x1 goto @snippet1
compare 0x4032 0x2
if 0x1 goto @snippet2
compare 0x4032 0x3
if 0x1 goto @snippet3
checkflag 0x200
if 0x1 goto @snippet4
msgbox @string1 MSG_NORMAL '"[green_fr]Chica: [blue_fr]¡Hola! ¡..."
setvar 0x4032 0x1
release
end

'---------------
#org @snippet1
msgbox @string2 MSG_NORMAL '"[green_fr]Adriana: [blue_fr]¿Qué t..."
release
end

'---------------
#org @snippet2
msgbox @string3 MSG_NORMAL '"[green_fr]Adriana: [blue_fr]Ahora ..."
release
end

'---------------
#org @snippet3
msgbox @string4 MSG_NORMAL '"[green_fr]Adriana: [blue_fr]¡Qué s..."
setvar 0x4032 0x4
release
end

'---------------
#org @snippet4
compare 0x4032 0x0
if 0x1 call @snippet5
msgbox @string5 MSG_NORMAL '"[green_fr]Adriana: [blue_fr]¿Qué t..."
waitmsg
sound 0x4B
setvar 0x8004 0x2
setvar 0x8005 0x2
setvar 0x8006 0x2
setvar 0x8007 0x2
special 0x136
waitstate
setvar 0x4031 0x1
fadescreen 0x1
clearflag 0x202
showsprite 0x2
fadescreen 0x0
msgbox @string6 MSG_NORMAL '"[green_fr]Adriana:[blue_fr] ¡Mira!..."
setvar 0x4032 0x2
release
end

'---------------
#org @snippet5
msgbox @string1 MSG_NORMAL '"[green_fr]Chica: [blue_fr]¡Hola! ¡..."
return


'---------
' Strings
'---------
#org @string1
= [green_fr]Chica: [blue_fr]¡Hola! ¡Mi nombre\nes Adriana!\l[green_fr]Adriana:[blue_fr] ¿Tú cómo te llamas?\l[green_fr][player]:[blue_fr] [player].\l[green_fr]Adriana:[blue_fr] ¡Encantada!

#org @string2
= [green_fr]Adriana: [blue_fr]¿Qué tal?

#org @string3
= [green_fr]Adriana: [blue_fr]Ahora me cuentas qué\ntal.

#org @string4
= [green_fr]Adriana: [blue_fr]¡Qué suerte que te ha\nquerido ayudar! Bueno, pues\laprovecha antes de que se vayan.

#org @string5
= [green_fr]Adriana: [blue_fr]¿Qué tal?\n[green_fr][player]:[blue_fr] Pues esperando a que esos\ldos acaben su partida de Yu-Gi-Oh!\l[green_fr]Adriana: [blue_fr]Pues no creo que\lacaben pronto...

#org @string6
= [green_fr]Adriana:[blue_fr] ¡Mira! ¡Allí ha\naparecido un hombre! Quizás te\lpueda ayudar.
[/SPOILER]
y cambio el valor de la variable configurada en AM para el script de nivel a 1. (En el AM el valor está puesto en 0) Todo bien, pero al entrar a otro mapa y salir se queda la pantalla en negro. ¿Alguien sabe por qué?
(Utilizo la variable 4031)
 
Última edición:

kakarotto

Leyenda de WaH
Un script de nivel lo tienes que configurar de una. Hay algo raro por ahí. Que tipo de script de nivel es? Mas informacion
 

Yainish

Usuario de platino
Un script de nivel lo tienes que configurar de una. Hay algo raro por ahí. Que tipo de script de nivel es? Mas informacion
Es un script de nivel de tipo 4 que tiene la variable 4031 y en valor 0. Cuando cambio ese valor por 1 en otro script se queda en negro al refrescar la pantalla.
pon tambien ese script, para ayudarte.en que base trabajas?
Trabajo en fire red.
Ya he puesto el script en el post original.
 
Última edición:

Bugrhak

A long time ago I used to call myself "Subzero".
Vamos a ver.
WARNING Hace más de un año que no toco un rom y no scripteo por lo tanto si no doy con la solución, te pido disculpas.

El sctipt de nivel de tipo 04 es muy similar al 02.
Concretamente estos dos tipos de scripts se ejecutan al entrar al mapa. Sólo que el 04 se ejecuta antes de que se carguen cosas como gráficos (es decir, cuando la pantalla aún está en negro).
Y el de tipo 02, se ejecuta cuando el mapa ya se ha cargado, por así decirlo.

La cosa es que estos dos tipos de scripts dependen de una condición específica para que se ejecuten, o por el contrario, para que dejen de ejecutarse.

Es ahí donde creo que la estas cagando ampliamente.
Has dicho que has configurado el AM para que el script oculte el mini siempre y cuando la variable 0x4031 tenga el valor 0x0.

El chiste es que el script que oculta al mini se está ejecutando constantemente en forma de bucle infinito puesto que en el mismo script en cuestión no haces nada para que se rompa ese bucle.

¿Quieres una pista?

Con un setvar a la variable 0x4031 sería suficiente.

¿Por qué el setvar?

Para que quede 100% claro, el script se ejecuta SIEMPRE que la variable 0x4031 tenga el valor 0x0. Si le cambias el valor a la variable, listo.

Entonces, el script luego de la correción del error debería quedar así:

Código:
#dynamic 0x800000

'---------------
#org @start
setflag 0x202
hidesprite 0x2
setvar 0x4031 0x1 "con esto rompemos el bucle infinito y el script sólo se ejecutará una vez
end
En fin, cero que eso es todo.
 
Última edición:

Yainish

Usuario de platino
Vamos a ver.
WARNING Hace más de un año que no toco un rom y no scripteo por lo tanto si no doy con la solución, te pido disculpas.

El sctipt de nivel de tipo 04 es muy similar al 02.
Concretamente estos dos tipos de scripts se ejecutan al entrar al mapa. Sólo que el 04 se ejecuta antes de que se carguen cosas como gráficos (es decir, cuando la pantalla aún está en negro).
Y el de tipo 02, se ejecuta cuando el mapa ya se ha cargado, por así decirlo.

La cosa es que estos dos tipos de scripts dependen de una condición específica para que se ejecuten, o por el contrario, para que dejen de ejecutarse.

Es ahí donde creo que la estas cagando ampliamente.
Has dicho que has configurado el AM para que el script oculte el mini siempre y cuando la variable 0x4031 tenga el valor 0x0.

El chiste es que el script que oculta al mini se está ejecutando constantemente en forma de bucle infinito puesto que en el mismo script en cuestión no haces nada para que se rompa ese bucle.

¿Quieres una pista?

Con un setvar a la variable 0x4031 sería suficiente.

¿Por qué el setvar?

Para que quede 100% claro, el script se ejecuta SIEMPRE que la variable 0x4031 tenga el valor 0x0. Si le cambias el valor a la variable, listo.

Entonces, el script luego de la correción del error debería quedar así:

Código:
#dynamic 0x800000

'---------------
#org @start
setflag 0x202
hidesprite 0x2
setvar 0x4031 0x1 "con esto rompemos el bucle infinito y el script sólo se ejecutará una vez
end
En fin, cero que eso es todo.
Eso sería para hacer que solo se ejecutase una vez, pero lo que yo quiero es que por mucho que tu cambies de mapa se ejecute siempre hasta cierto evento, tras el cual dejaría de ejecutarse.
 

Jon.

Usuario mítico
Y por que no pones al mini oculto en alguna parte del mapa y despues lo moves con un moveprite a donde lo necesites? Y al acabar el script vuelve a su lugar.

O usar un scr
 

Inferno

Miembro insignia
Miembro insignia
La pantalla se suele quedar en negro por dos cosas principalmente.

1) Estás usando comandos inválidos para el tipo de script de nivel que estás utilizando.

2) Algo falla en el funcionamiento del script.

En este caso creo que el problema principal es que no estás aplicando correctamente el script de nivel.

Como veo que lo que quieres es que el script no se acabe sino que sea infinito pero controlable, se debe hacer lo siguiente, controlarlo a través de una variable/flag alterna, es decir, una que no esté ligada al inicio y final del script (la que se configura en AM).

Algo de estilo estilo debería funcionar:
Código:
#dynamic 0x800000

#org @start
compare 0x40FF 0x0
if 0x1 goto @activo
clearflag 0x2FF
showsprite 0x2
end

#org @activo
setflag 0x2FF
hidesprite 0x2
end

Código:
#dynamic 0x800000

#org @start
lock
faceplayer
msgbox @msg 0x5
compare 0x800D 0x0
if 0x1 goto @RespuestaNo
setvar 0x40FF 0x1
release
end

#org @RespuestaNo
setvar 0x40FF 0x0
release
end

#org @msg
= ¿Quieres que vuelva el NPC?
 

kakarotto

Leyenda de WaH
Sólo un pequeño dato debido a un mini error de @Inferno
Código:
#dynamic 0x800000

#org @start
lock
faceplayer
msgbox @msg 0x5
compare 0x800D 0x0
if 0x1 goto @RespuestaNo
setvar 0x40FF 0x1
release
end

#org @RespuestaNo
release
end

#org @msg
= ¿Quieres que vuelva el NPC?
seteaste el valor de la variable cuando realmente si no lo haces no pasa nada,ya que siempre en este caso sera 0x0 pero es una tontería realmente jeje
 

Yainish

Usuario de platino
La pantalla se suele quedar en negro por dos cosas principalmente.



1) Estás usando comandos inválidos para el tipo de script de nivel que estás utilizando.



2) Algo falla en el funcionamiento del script.



En este caso creo que el problema principal es que no estás aplicando correctamente el script de nivel.



Como veo que lo que quieres es que el script no se acabe sino que sea infinito pero controlable, se debe hacer lo siguiente, controlarlo a través de una variable/flag alterna, es decir, una que no esté ligada al inicio y final del script (la que se configura en AM).



Algo de estilo estilo debería funcionar:

Código:
#dynamic 0x800000



#org @start

compare 0x40FF 0x0

if 0x1 goto @activo

clearflag 0x2FF

showsprite 0x2

end



#org @activo

setflag 0x2FF

hidesprite 0x2

end



Código:
#dynamic 0x800000



#org @start

lock

faceplayer

msgbox @msg 0x5

compare 0x800D 0x0

if 0x1 goto @RespuestaNo

setvar 0x40FF 0x1

release

end



#org @RespuestaNo

setvar 0x40FF 0x0

release

end



#org @msg

= ¿Quieres que vuelva el NPC?
¿Y no haría falta un fadescreen en el segundo script?
 

Bugrhak

A long time ago I used to call myself "Subzero".
¿Y no haría falta un fadescreen en el segundo script?
De hecho no, dado que es un script "Yes/No" y poco más.
El fadescreen lo usarías para refrescar la pantalla para que x cambio se haga visible.
En el caso del segundo script que hizo @Inferno no es necesario.
 

Inferno

Miembro insignia
Miembro insignia
seteaste el valor de la variable cuando realmente si no lo haces no pasa nada,ya que siempre en este caso sera 0x0 pero es una tontería realmente jeje
En este caso es necesario devolverle el valor 0 a la variable, ya que ese NPC es utilizado como un interruptor, según la respuesta que le vayamos dando el mini aparece o desaparece. Si le quitas esa parte el mini, una vez que desaparece, no volvería a aparecer nunca.


¿Y no haría falta un fadescreen en el segundo script?
Si quieres refrescar la pantalla en ese mismo instante el fadescreen puedes ponerlo, pero no te servirá, tendrás que cambiar de mapa.
Lo que puedes hacer es un warpmuted entre el fadescreen o utilizar esto:
Código:
callasm 0x8055149
Si se usa esta rutina en teoría no hay necesidad de llamar a un warp para refrescar.
 
Estado
Cerrado para nuevas respuestas.
Arriba