lx5 Moderador Global
Posts : 2169
| Tema: Como usar el Conditional Direct Map16 Dom Mayo 12, 2019 9:18 pm | |
| La herramienta Lunar Magic tiene muchas funciones medio ocultas que son bastante utiles, una de ellas es el Conditional Direct Map16. Esta funcion te permite cambiar o borrar tiles segun unas banderas/flags en la RAM sin necesidad de meterte con codigo muy complicado, un ejemplo del uso de esta funcion en el juego original son los blocks de colores de los Switch Palace. Limites del Conditional Direct Map16Antes de iniciar a programar o hacer cualquier otra cosa, hay que saber algunas limitaciones de esta funcion.
- Solo se puede usar con los tiles puestos con Direct Map16, no funciona con Standard Objects, Extended Objects ni Tileset Specific Objects.
- La RAM dedicada a esta funcion no esta inicializada.
- Las opciones disponibles son muy pobres y limitadas.
- Si el nivel ya esta cargado y una bandera se acvita, los cambios seran reflejados hasta que se vuelva a cargar el nivel (u otro nivel).
¿Que se ocupa?Para poder usar el Conditional Direct Map16 es necesario saber al menos un poco de ASM y tener idea de como funcionan unas cosas basicas del juego. Tambien es necesario saber utilizar UberASMTool 1.4. Uso del Conditional Direct Map16
- Selecciona algun grupo de tiles colocados por Direct Map16 que se encuentren en el nivel.
- Ve a Edit -> Conditional Direct Map16...
- En la ventana que salio, se configura todo lo referente a la funcion.
- Flag number to check if objects should be displayed. Esta parte nos permite seleccionar cual de las 128 banderas distintas disponibles usaremos para los tiles del Direct Map16 seleccionados. Aqui va un numero hexadecimal, no decimal!
- Always show objects, and if flag is enabled then add 0x100 tiles. Esta casilla es la unica opcion de customizacion que tenemos para el Conditional Direct Map16.
- Si la casilla esta desactivada, los tiles seleccionados no apareceran cuando la bandera este desactivada (sea 0) y los tiles saldran traslucidos en el Lunar Magic, si la bandera esta activa, entonces los tiles seran generados al cargar el nivel y los tiles ya no saldran traslucidos.
[Tienes que estar registrado y conectado para ver esa imagen]Izquierda: Flag 0x70 desactivado. Derecha: Flag 0x70 activado.
- Si la casilla esta activada, entonces cuando la bandera este desactivada (sea 0), los tiles seleccionados apareceran normalmente, pero si la bandera esta activa (es 1), los tiles seleccionados se les sumara 0x100 a su numero de tile. Para no confundir con esto, la casilla funciona como los blocks del Switch Palace: Si el switch palace esta desactivado, usa el tile 0x6A, si esta activo, usa el tile 0x16A.
[Tienes que estar registrado y conectado para ver esa imagen]Izquierda: Flag 0x72 desactivado. Derecha: Flag 0x72 activado.
Remove flag check (converts back to regular Direct Map16 Access). Esta casilla nos permite borrar el chequeo de algun flag de los tiles seleccionadas. Util si seleccionaste alguna tile que no era. Una vez configurada tu seleccion, tu tile ya esta listo para ser programado! Como nota extra, puedes visualizar como se veria(n) los tiles cuando todos los flags del Conditional Direct Map16 estan activos con Ctrl+5 o yendo a View -> Conditional Direct Map16 On Tampoco es necesario seleccionar todos los tiles afectados por un mismo flag al mismo tiempo, puedes seleccionar un par de tiles y configurarlos y despues configuras el resto. Programacion del Conditional Direct Map16Ahora viene la parte mas complicada, la programacion para activar y desactivar las banderas del Conditional Direct Map16. Primero que nada hay que saber como estan acomodadas las banderas. Las banderas van de 0 a 7F y estas designadas en la direcciones RAM desde $7FC060 hasta $7FC06F y cada direccion RAM tiene una bandera asignada a cada bit. RAM | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | $7FC060 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | $7FC061 | F | E | D | C | B | A | 9 | 8 | $7FC062 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | $7FC063 | 1F | 1E | 1D | 1C | 1B | 1A | 19 | 18 | $7FC064 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | $7FC065 | 2F | 2E | 2D | 2C | 2B | 2A | 29 | 28 | $7FC066 | 37 | 36 | 35 | 34 | 33 | 32 | 31 | 30 | $7FC067 | 3F | 3E | 3D | 3C | 3B | 3A | 39 | 38 | $7FC068 | 47 | 46 | 45 | 44 | 43 | 42 | 41 | 40 | $7FC069 | 4F | 4E | 4D | 4C | 4B | 4A | 49 | 48 | $7FC06A | 57 | 56 | 55 | 54 | 53 | 52 | 51 | 50 | $7FC06B | 5F | 5E | 5D | 5C | 5B | 5A | 59 | 58 | $7FC06C | 67 | 66 | 65 | 64 | 63 | 62 | 61 | 60 | $7FC06D | 6F | 6E | 6D | 6C | 6B | 6A | 69 | 68 | $7FC06E | 77 | 76 | 75 | 74 | 73 | 72 | 71 | 70 | $7FC06F | 7F | 7E | 7D | 7C | 7B | 7A | 79 | 78 |
El codigo para poder manipular estos bits debe de ir en el Gamemode 11 o en el label load para niveles. Manipular los bits no va mas alla de checar una direccion RAM y activar o desactivar las banderas segun se desee. Un ejemplo sencillo seria checar si se tienen 3 o mas Yoshi Coins para desactivar la bandera 1E, si no se cumple la condicion, la bandera se quedara activa. - Código:
-
load: LDA $1420 CMP #$03 BCS .Desactiva .Activa LDA $7FC063 ORA.b #%01000000 STA $7FC063 RTL .Desactiva LDA $7FC063 AND.b #%10111111 STA $7FC063 RTL FinEsto es todo lo que hay que saber acerca del Conditional Direct Map16, no es muy complicado de programar y hacer setup, solo hay que tener una ligera idea de cuales condiciones quieres usar para activar o desactivar algunas de las 128 banderas que el Lunar Magic nos da para usar esta funcion. Cualquier duda, queja, pregunta o sugerencia, dejen un post aqui abajo! |
|
Shiny Yellow Yoshi
Posts : 1443
| Tema: Re: Como usar el Conditional Direct Map16 Jue Dic 01, 2022 7:42 pm | |
| tutorial god, unironicamente quede loquito |
|