;;;;;;;;;;;;;;;; ; PLUGINS ; ;;;;;;;;;;;;;;;; ;CND ISMUSIC C 0 0 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 :cnd_ismusic dc.b 0xc1 0x04 0x00 0x00 0x00 return (:musica_sonando).l ;CND BNEG A 1 2 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 ; BNEG flagno bitno ; Cambia el valor de un bit de un flag, lo invierte :acc_bneg dc.b 0xc1 0x04 0x03 0x00 0x00 ; Viene en {0} el flagno, y en {4} el bitno. {8} y {12} son variables globales jgt {4}.l 32.l 0 ; si el bit es > 32 es absurdo, vuelve sin hacer nada aload :flags.l {0}.l {8}.l copy {8}.l (sp) copy {4}.l (sp) call :bitneg 0x02.b (sp) copy (sp) {8}.l astore :flags.l {0}.l {8}.l return 0 ;CND BSET A 1 2 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 ; BSET flagno bitno ; Pone a 1 el valor de un bit de un flag :acc_bset dc.b 0xc1 0x04 0x03 0x00 0x00 ; Viene en {0} el flagno, y en {4} el bitno. {8} y {12} son variables globales jgt {4}.l 32.l 0 ; si el bit es > 32 es absurdo, vuelve sin hacer nada aload :flags.l {0}.l {8}.l copy {8}.l (sp) copy {4}.l (sp) call :bitset 0x02.b (sp) copy (sp) {8}.l astore :flags.l {0}.l {8}.l return 0 ;CND GETKEY A 1 0 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 ; ^------------------------------------------- Es un condacto ; ^--------------------------------------- Nombre ; ^------------------------------------ A= Accion, C= Condicion ; ^---------------------------------- 0 = nada, 1 = flagno, 2= value, 3=percent, 4=objno, 5=mesno, 6=smesno, 7=prono, 8=locno, 9=locno+, 10=adjective, 11=adverb, 12=preposition, 13=noun, 14=string ; ^-------------------------------- 0 = nada, 1 = flagno, 2= value, 3=percent, 4=objno, 5=mesno, 6=smesno, 7=prono, 8=locno, 9=locno+, 10=adjective, 11=adverb, 12=preposition, 13=noun, 14=string ; ^------------------------------ 0 = aNada, 1 = aDescribir, 2=aEnd, 3=aFinDeTabla, 4=aCondicional :acc_getkey dc.b 0xc1 0x04 0x03 0x00 0x00 copy (:flag049).l (:valor_flag).l bitand (:valor_flag).l 4.l (:valor_flag).l copy 0x00.l (:bandera_tiempo_agotado).l mul (:flag048).l 25.l (:contador_timeout).l copy 40.l (sp) glk 0xD6.l 0x01.b ~ ; glk_request_timer_event(40) :getk_sin_temporizador copy (:glk_winnum_texto).l (sp) glk 0xd2.l 0x01.b ~ ; glk_request_char_event(winnum) :getk_esperar_caracter copy :evento_type.l (sp) glk 0xC0.l 0x01.b ~ ; glk_select() jeq (:evento_type).l 0x02.l :getk_se_pulso.l jeq (:evento_type).l 0x01.l :getk_paso_el_tiempo_getkey.l jeq (:evento_type).l 0x05.l :getk_esperar_hubo_evento_arrange.l jeq (:evento_type).l 0x07.l :getk_esperar_hubo_evento_soundnotify.l jne (:evento_type).l 0x06.l :getk_esperar_caracter.l ; No es redraw :getk_esperar_hubo_evento_arrange call :poner_grafico 0x00.b ~ jump :getk_esperar_caracter.l :getk_esperar_hubo_evento_soundnotify jeq (:evento_val2).l (:canal_efectos).l :getk_esperar_hubo_evento_soundnotify_efectos.l jeq (:evento_val2).l (:canal_musica).l :getk_esperar_hubo_evento_soundnotify_musica.l jump :getk_esperar_caracter.l :getk_esperar_hubo_evento_soundnotify_efectos copy 0.l (:efecto_sonando).l jump :getk_esperar_caracter.l :getk_esperar_hubo_evento_soundnotify_musica copy 0.l (:musica_sonando).l jump :getk_esperar_caracter.l :getk_paso_el_tiempo_getkey jz (:hay_interrupt).l :getk_no_interrupt_proc_getkey .l call :interrupt_proc.l 0x00.b ~ :getk_no_interrupt_proc_getkey jz (:valor_flag).l :getk_esperar_caracter.l ; no hay timeout en los getkey sub (:contador_timeout).l 1.l (:contador_timeout).l jnz (:contador_timeout).l :getk_esperar_caracter.l ; y aqui es donde se trata el timeout copy 0x01.l (:bandera_tiempo_agotado).l copy (:glk_winnum_texto).l (sp) glk 0xd3 0x01.b ~ :getk_se_pulso astore :flags.l {0}.l (:evento_val1).l copy 0x00.l (sp) glk 0xD6.l 0x01.b ~ ; glk_request_timer_event(0) return 0 ;CND ATGE C 8 0 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 :cnd_atge dc.b 0xc1 0x04 0x01 0x00 0x00 jge (:flag038).l {0}.l 1 return 0 ;CND SETEXIT A 2 2 0 ; SETEXIT value value ; el primer value es la direccion {0} y el segundo la localidad correspondiente como destino {4} ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 :acc_setexit dc.b 0xc1 0x04 0x3 0x00 0x00 jgt {0}.l 15 1 ; Si el verbo de direccion es mayor que 15, es decir, no es verbo de direccion, salgo sin hacer nada jlt {0}.l 0 1 ; Idem si es menor que cero copy (:flag038).l {8}.l mul {8}.l 16.l {8}.l ; Guarda en {8} la direccion base de las conexiones de la localidad add {8}.l {0}.l {8}.l ; Incrementa en el valor del verbo de direccion que da el primer parametro para apuntar al la salida en concreto jlt {4}.l 0 1 ; Si el valor no es válido retorna sin salir jge {4}.l (:total_mensajes_localidades).l 1 ; Si el valor es mayor que el numero de localidades salimos tambien sin hacer nada astore :conexiones.l {8}.l {4}.l return 1 ;CND BZERO C 1 2 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 ; BZERO flagno bitno ; Se cumple si el valor de un bit de un flag es 0 :cnd_bzero dc.b 0xc1 0x04 0x03 0x00 0x00 ; Viene en {0} el flagno, y en {4} el bitno. {8} y {12} son variables globales jgt {4}.l 32.l 0 ; si el bit es > 32 es absurdo, vuelve sin cumplirse aload :flags.l {0}.l {8}.l copy {8}.l (sp) copy {4}.l (sp) call :bittest 0x02.b (sp) copy (sp) {8}.l jz {8}.l 1 return 0 ;CND MUL A 1 2 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 ;^---------------------------------------- Nombre ; ^------------------------------------ A= Accion, C= Condicion ; ^---------------------------------- 0 = nada, 1 = flagno, 2= value, 3=percent, 4=objno, 5=mesno, 6=smesno, 7=prono, 8=locno, 9=locno+, 10=adjective, 11=adverb, 12=preposition, 13=noun, 14=string ; ^-------------------------------- 0 = nada, 1 = flagno, 2= value, 3=percent, 4=objno, 5=mesno, 6=smesno, 7=prono, 8=locno, 9=locno+, 10=adjective, 11=adverb, 12=preposition, 13=noun, 14=string ; ^------------------------------ 0 = aNada, 1 = aDescribir, 2=aEnd, 3=aFinDeTabla, 4=aCondicional :acc_mul dc.b 0xc1 0x04 0x03 0x00 0x00 aload :flags.l {0}.l {8}.l mul {8}.l {4}.l {8}.l astore :flags.l {0}.l {8}.l return 1 ;CND TEXTPIC A 2 2 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 ; TEXTPIC value value ; Pinta en la ventana de texto el grafico cuyo recurso esta indicado por el primer valor, y en el modo ; de alineacion que indica el segundo ; :acc_textpic dc.b 0xc1 0x04 0x02 0x00 0x00 jz (:hay_graficos).l 0 jz (:programa_quiere_graficos).l 0 copy 0.l (sp) copy {4}.l (sp) ; la alineacion copy {0}.l (sp) ; el recurso copy (:glk_winnum_texto).l (sp) glk 0x00e1.l 0x04.b ~ ; glk_image_draw(glk_winnum_texto, img, position, val2=0) return 0 ;CND ISNOTMUSIC C 0 0 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 :cnd_isnotmusic dc.b 0xc1 0x04 0x00 0x00 0x00 jz (:musica_sonando).l 1 return 0 ;CND OBJNOTFOUND C 2 9 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 ;objnotfound atrno locno+ ;RUTINAS DE CALCULO DE SI HAY UN OBJETO CON EL ATRIBUTO X EN TAL SITIO ; se recibe como parametro el atributo y el lugar, en ese orden ; devuelve 1 si habia algun objeto o cero en caso contrario ; {0} -> El atributo ; {4} -> La localidad ; {8} -> Recorre los objetos ; {12} -> Apunta a la posicion en la tabla de objetos :cnd_objnotfound dc.b 0xc1 0x04 0x06 0x00 0x00 copy 0x00.l {8}.l :bucle_obfnotfound copy {8}.l (:flag011).l ; Meto en el flag 11 el numero de objeto referenciado mul {8}.l 7.l {12}.l add 2.l {12}.l {12}.l ; Apunto a la localidad del objeto aload :objetos.l {12}.l {16}.l jne {16}.l {4}.l :obfnotfound_siguiente.l ; Si no está en la misma localidad ignoramos el objeto add {12}.l 2.l {12}.l jle {0}.l 31.l :obfnotfound_loflags.l ; si el atributo esta en el primer bloque ya estamos apuntando bien add 1.l {12}.l {12}.l ; en caso contrario apuntamos al siguiente bloque sub {0}.l 32.l {0}.l ; y restamos 32 al atributo para que apunte bien :obfnotfound_loflags aload :objetos.l {12}.l {16}.l copy {16}.l (sp) copy {0}.l (sp) call :bittest.l 0x02.b {16}.l jnz {16}.l 0 ; Salgo habiendo encontrado un objeto, cosa mala :obfnotfound_siguiente add {8}.l 1.l {8}.l jle {8}.l (:numero_ultimo_objeto).l :bucle_obfnotfound.l copy 255.l (:flag011).l return 1 ; Salgo sin encontrar objeto alguno, cosa buena ;CND WHATOX A 1 0 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 ; ^------------------------------------------- Es un condacto ; ^--------------------------------------- Nombre ; ^------------------------------------ A= Accion, C= Condicion ; ^---------------------------------- 0 = nada, 1 = flagno, 2= value, 3=percent, 4=objno, 5=mesno, 6=smesno, 7=prono, 8=locno, 9=locno+, 10=adjective, 11=adverb, 12=preposition, 13=noun, 14=string ; ^-------------------------------- 0 = nada, 1 = flagno, 2= value, 3=percent, 4=objno, 5=mesno, 6=smesno, 7=prono, 8=locno, 9=locno+, 10=adjective, 11=adverb, 12=preposition, 13=noun, 14=string ; ^------------------------------ 0 = aNada, 1 = aDescribir, 2=aEnd, 3=aFinDeTabla, 4=aCondicional :acc_whatox dc.b 0xc1 0x04 0x07 0x00 0x00 jz (:flag034).l :whatox_sin_nombre.l copy -1.l {16}.l copy 0.l {4}.l :whatox_bucle_objetos_llevados jgt {4}.l (:numero_ultimo_objeto).l :whatox_fin_llevados.l copy {4}.l {8}.l mul {8}.l 7.l {8}.l aload :objetos.l {8}.l {12}.l jne {12}.l (:flag034).l :whatox_siguiente_objeto_llevados.l add {8}.l 1.l {8}.l aload :objetos.l {8}.l {12}.l jeq {12}.l 255.l :whatox_no_adjetivo_llevados.l jeq (:flag035).l 255.l :whatox_no_adjetivo_llevados.l jne {12}.l (:flag035).l :whatox_siguiente_objeto_llevados.l :whatox_no_adjetivo_llevados add {8}.l 1.l {8}.l aload :objetos.l {8}.l {12}.l jne {12}.l 254.l :whatox_siguiente_objeto_llevados.l copy {4}.l {16}.l :whatox_siguiente_objeto_llevados add {4}.l 1.l {4}.l jump :whatox_bucle_objetos_llevados.l :whatox_fin_llevados jne {16}.l -1.l :whatox_fin_busqueda.l copy 0.l {4}.l :whatox_bucle_objetos_puestos jgt {4}.l (:numero_ultimo_objeto).l :whatox_fin_puestos.l copy {4}.l {8}.l mul {8}.l 7.l {8}.l aload :objetos.l {8}.l {12}.l jne {12}.l (:flag034).l :whatox_siguiente_objeto_puestos.l add {8}.l 1.l {8}.l aload :objetos.l {8}.l {12}.l jeq {12}.l 255.l :whatox_no_adjetivo_puestos.l jeq (:flag035).l 255.l :whatox_no_adjetivo_puestos.l jne {12}.l (:flag035).l :whatox_siguiente_objeto_puestos.l :whatox_no_adjetivo_puestos add {8}.l 1.l {8}.l aload :objetos.l {8}.l {12}.l jne {12}.l 253.l :whatox_siguiente_objeto_puestos.l copy {4}.l {16}.l :whatox_siguiente_objeto_puestos add {4}.l 1.l {4}.l jump :whatox_bucle_objetos_puestos.l :whatox_fin_puestos jne {16}.l -1.l :whatox_fin_busqueda.l copy 0.l {4}.l :whatox_bucle_objetos_presentes jgt {4}.l (:numero_ultimo_objeto).l :whatox_fin_presentes.l copy {4}.l {8}.l mul {8}.l 7.l {8}.l aload :objetos.l {8}.l {12}.l jne {12}.l (:flag034).l :whatox_siguiente_objeto_presentes.l add {8}.l 1.l {8}.l aload :objetos.l {8}.l {12}.l jeq {12}.l 255.l :whatox_no_adjetivo_presentes.l jeq (:flag035).l 255.l :whatox_no_adjetivo_presentes.l jne {12}.l (:flag035).l :whatox_siguiente_objeto_presentes.l :whatox_no_adjetivo_presentes add {8}.l 1.l {8}.l aload :objetos.l {8}.l {12}.l jne {12}.l (:flag038).l :whatox_siguiente_objeto_presentes.l copy {4}.l {16}.l :whatox_siguiente_objeto_presentes add {4}.l 1.l {4}.l jump :whatox_bucle_objetos_presentes.l :whatox_fin_presentes jne {16}.l -1.l :whatox_fin_busqueda.l copy 0.l {4}.l :whatox_bucle_objetos_cualquiersitio jgt {4}.l (:numero_ultimo_objeto).l :whatox_fin_cualquiersitio.l copy {4}.l {8}.l mul {8}.l 7.l {8}.l aload :objetos.l {8}.l {12}.l jne {12}.l (:flag034).l :whatox_siguiente_objeto_cualquiersitio.l add {8}.l 1.l {8}.l aload :objetos.l {8}.l {12}.l jeq {12}.l 255.l :whatox_no_adjetivo_cualquiersitio.l jeq (:flag035).l 255.l :whatox_no_adjetivo_cualquiersitio.l jne {12}.l (:flag035).l :whatox_siguiente_objeto_cualquiersitio.l :whatox_no_adjetivo_cualquiersitio add {8}.l 1.l {8}.l aload :objetos.l {8}.l {12}.l copy {4}.l {16}.l :whatox_siguiente_objeto_cualquiersitio add {4}.l 1.l {4}.l jump :whatox_bucle_objetos_cualquiersitio.l :whatox_fin_cualquiersitio jeq {16}.l -1.l :whatox_no_encontrado.l :whatox_fin_busqueda astore :flags.l {0}.l {16}.l return 0 :whatox_no_encontrado :whatox_sin_nombre astore :flags.l 255.l {4}.l return 0 ;CND ISSOUND C 0 0 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 :cnd_issound dc.b 0xc1 0x04 0x00 0x00 0x00 return (:efecto_sonando).l ;CND CLEAREXIT A 2 0 0 ; CLEAREXIT value ; siendo value el verbo de direccion correspondiente ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 :acc_clearexit dc.b 0xc1 0x04 0x3 0x00 0x00 jgt {0}.l 15 1 ; Si el verbo de direccion es mayor 1ue 15, es decir, no es verbo de direccion, salgo sin hacer nada jlt {0}.l 0 1 ; Idem si es menor que cero copy (:flag038).l {4}.l mul {4}.l 16.l {4}.l ; Guarda en {8} la direccion base de las conexiones de la localidad add {4}.l {0}.l {4}.l ; Incrementa en el valor del verbo de direccion que da el primer parametro para apuntar al la salida en concreto astore :conexiones.l {4}.l -1.l return 1 ;CND ISNOTSOUND C 0 0 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 :cnd_isnotsound dc.b 0xc1 0x04 0x00 0x00 0x00 jz (:efecto_sonando).l 1 return 0 ;CND BCLEAR A 1 2 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 ; BCLEAR flagno bitno ; Pone a 0 el valor de un bit de un flag :acc_bclear dc.b 0xc1 0x04 0x03 0x00 0x00 ; Viene en {0} el flagno, y en {4} el bitno. {8} y {12} son variables globales jgt {4}.l 32.l 0 ; si el bit es > 32 es absurdo, vuelve sin hacer nada aload :flags.l {0}.l {8}.l copy {8}.l (sp) copy {4}.l (sp) call :bitclear 0x02.b (sp) copy (sp) {8}.l astore :flags.l {0}.l {8}.l return 0 ;CND LE C 1 2 0 ;^---------------------------------------- Nombre ; ^------------------------------------ A= Accion, C= Condicion ; ^---------------------------------- 0 = nada, 1 = flagno, 2= value, 3=percent, 4=objno, 5=mesno, 6=smesno, 7=prono, 8=locno, 9=locno+, 10=adjective, 11=adverb, 12=preposition, 13=noun, 14=string ; ^-------------------------------- 0 = nada, 1 = flagno, 2= value, 3=percent, 4=objno, 5=mesno, 6=smesno, 7=prono, 8=locno, 9=locno+, 10=adjective, 11=adverb, 12=preposition, 13=noun, 14=string ; ^------------------------------ 0 = aNada, 1 = aDescribir, 2=aEnd, 3=aFinDeTabla, 4=aCondicional ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 :cnd_le dc.b 0xc1 0x04 0x03 0x00 0x00 aload :flags.l {0}.l {8}.l jle {8}.l {4}.l 1 return 0 ;CND EXITS A 8 5 0 ; EXITS locno mesno ; Dada una localidad y un mensaje utiliza dicho mensaje como base para dar una lista de las ; salidas del lugar. El mensaje mesno debe ser un texto similar a "Salidas:", el mesno+1 algo ; como "No veo salidas" y a partir del mesno+2 los mensajes correspondientes al verbo 0 de direccion ; luego el verbo 1, etc. Por ejemplo si el verbo 'norte' es el nş 7 en el vocabulario deberá ; ponerse en el mensaje mesno+2+7 el texto "al norte" y si 'subir' es el nş 3 debera ponerse ; en el mensaje mesno+2+3 el texto "arriba". Exits usa los mensajes del sistema 46, 47 y 48 para ; construir una frase valida del tipo: "Salidas visibles: al norte y arriba." ; Si no hay luz el mensaje mesno será mostrado haya o no salidas. ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 :acc_exits dc.b 0xc1 0x04 0x6 0x00 0x00 ; antes de nada vamos a ver si hay luz, porque si no la hay no va a haber salidas visibles. jz (:flag000).l :exits_continua ; hay luz, continua call :light_here.l 0x00.b {16}.l jnz {16}.l :exits_continua ; hay objeto con luz podemos continuar jump :exits_no_hay_salida.l :exits_continua ; vamos a contar cuantas salidas hay mul {0}.l 16.l {0}.l copy 0.l {16}.l ; contador a cero copy 0.l {8}.l ; {8} es el puntero que va moviendos, el contador del bucle :exits_bucle_cuenta aload :conexiones.l {0}.l {12}.l ; carga la conexion jeq {12}.l -1.l :exits_no_es_salida.l add 1.l {16}.l {16}.l ; Encontrada una salida :exits_no_es_salida add 1.l {8}.l {8}.l add 1.l {0}.l {0}.l jlt {8}.l 16.l :exits_bucle_cuenta sub {0}.l 16.l {0}.l ; Vuelvo a dejar el {0}.l apuntando al principio de la lista de conexiones de la localidad ; Ahora tengo en {16} el numero de salidas jz {16}.l :exits_no_hay_salida copy 0.l {8}.l copy {4}.l (sp) call :escribir_mensaje_usuario.l 0x01.b ~ ; "Salidas visibles: " :exits_bucle_escribe aload :conexiones.l {0}.l {12}.l ; carga la conexion jeq {12}.l -1.l :exits_no_es_salida_2.l copy {4}.l {20}.l ; Encontrada una salida add {20}.l 2.l {20}.l add {8}.l {20}.l {20}.l ; Calculo el numero de mensaje copy {20}.l (sp) call :escribir_mensaje_usuario.l 0x01.b ~ ; "al norte" (por ejemplo) jgt {16}.l 2.l :exits_escribir_coma.l jeq {16}.l 2.l :exits_escribir_y.l copy 48.l (sp) call :escribir_mensaje_sistema.l 0x01.b ~ ; "." jump :exits_sigue_bucle.l :exits_escribir_coma copy 46.l (sp) call :escribir_mensaje_sistema.l 0x01.b ~ ; ", " jump :exits_sigue_bucle.l :exits_escribir_y copy 47.l (sp) call :escribir_mensaje_sistema.l 0x01.b ~ ; " y " jump :exits_sigue_bucle.l :exits_sigue_bucle sub {16}.l 1.l {16}.l :exits_no_es_salida_2 add 1.l {8}.l {8}.l add 1.l {0}.l {0}.l jlt {8}.l 16.l :exits_bucle_escribe return 1 :exits_no_hay_salida add {4}.l 1.l {4}.l copy {4}.l (sp) call :escribir_mensaje_usuario.l 0x01.b ~ ; "No hay salidas visibles." return 1 ;LIB Ejemplo ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 ;--------------------------------------------------------- ; Esto es un ejemplo de una librería para superglus ; permite ańadir funciones assembler que luego pueden ; ser utilizadas desde otros condactos, de modo que no ; sera necesario realizar determinadas cosas en cada ; condacto plugin ; ; Nota: Nada asegura que los plugins sean colocados ; en el fichero ULA definitivo de ninguna manera ; en especial, asi que tenedlo en cuenta a la ; hora de hacer librerias ;---------------------------------------------------------- ; Ejemplo de funcion (en este caso la funcion no hace nada) :function_idle dc.b 0xc1 0x00 0x00 return 0 ;---------------------------------------------------------- ;CND DIV A 1 2 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 :acc_div dc.b 0xc1 0x04 0x03 0x00 0x00 aload :flags.l {0}.l {8}.l div {8}.l {4}.l {8}.l astore :flags.l {0}.l {8}.l return 1 ;CND GE C 1 2 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 :cnd_ge dc.b 0xc1 0x04 0x03 0x00 0x00 aload :flags.l {0}.l {8}.l jge {8}.l {4}.l 1 return 0 ;CND ZONE C 8 8 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 :cnd_zone dc.b 0xc1 0x04 0x02 0x00 0x00 jgt {0}.l (:flag038).l 0 jlt {4}.l (:flag038).l 0 return 1 ;CND MOD A 1 2 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 ;^---------------------------------------- Nombre ; ^------------------------------------ A= Accion, C= Condicion ; ^---------------------------------- 0 = nada, 1 = flagno, 2= value, 3=percent, 4=objno, 5=mesno, 6=smesno, 7=prono, 8=locno, 9=locno+, 10=adjective, 11=adverb, 12=preposition, 13=noun, 14=string ; ^-------------------------------- 0 = nada, 1 = flagno, 2= value, 3=percent, 4=objno, 5=mesno, 6=smesno, 7=prono, 8=locno, 9=locno+, 10=adjective, 11=adverb, 12=preposition, 13=noun, 14=string ; ^------------------------------ 0 = aNada, 1 = aDescribir, 2=aEnd, 3=aFinDeTabla, 4=aCondicional :acc_mod dc.b 0xc1 0x04 0x03 0x00 0x00 aload :flags.l {0}.l {8}.l mod {8}.l {4}.l {8}.l astore :flags.l {0}.l {8}.l return 1 ;CND BNOTZERO C 1 2 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 ; BNOTZERO flagno bitno ; Se cumple si el valor de un bit de un flag es 0 :cnd_bnotzero dc.b 0xc1 0x04 0x03 0x00 0x00 ; Viene en {0} el flagno, y en {4} el bitno. {8} y {12} son variables globales jgt {4}.l 32.l 0 ; si el bit es > 32 es absurdo, vuelve sin cumplirse aload :flags.l {0}.l {8}.l copy {8}.l (sp) copy {4}.l (sp) call :bittest 0x02.b (sp) copy (sp) {8}.l return {8}.l ;CND OBJFOUND C 2 9 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 ;objfound atrno locno+ ;RUTINAS DE CALCULO DE SI HAY UN OBJETO CON EL ATRIBUTO X EN TAL SITIO ; se recibe como parametro el atributo y el lugar, en ese orden ; devuelve 1 si habia algun objeto o cero en caso contrario ; {0} -> El atributo ; {4} -> La localidad ; {8} -> Recorre los objetos ; {12} -> Apunta a la posicion en la tabla de objetos :cnd_objfound dc.b 0xc1 0x04 0x06 0x00 0x00 copy 0x00.l {8}.l :bucle_objfound copy {8}.l (:flag011).l ; Meto en el flag 11 el numero de objeto referenciado mul {8}.l 7.l {12}.l add 2.l {12}.l {12}.l ; Apunto a la localidad del objeto aload :objetos.l {12}.l {16}.l jne {16}.l {4}.l :objfound_siguiente.l ; Si no está en la misma localidad ignoramos el objeto add {12}.l 2.l {12}.l jle {0}.l 31.l :objfound_loflags.l ; si el atributo esta en el primer bloque ya estamos apuntando bien add 1.l {12}.l {12}.l ; en caso contrario apuntamos al siguiente bloque sub {0}.l 32.l {0}.l ; y restamos 32 al atributo para que apunte bien :objfound_loflags aload :objetos.l {12}.l {16}.l copy {16}.l (sp) copy {0}.l (sp) call :bittest.l 0x02.b {16}.l jnz {16}.l 1 ; Salgo habiendo encontrado un objeto :objfound_siguiente add {8}.l 1.l {8}.l jle {8}.l (:numero_ultimo_objeto).l :bucle_objfound.l copy 255.l {:flag011}.l ; marco en el flag 12 que no habia objeto return 0 ; Salgo sin encontrar objeto alguno ;CND GETEXIT A 2 2 0 ; getexit value flagno ; el primer value es la direccion y el flag donde se almacena la direccion de destino ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 :acc_getexit dc.b 0xc1 0x04 0x4 0x00 0x00 jgt {0}.l 15 1 ; Si el verbo de direccion es mayor que 15, es decir, no es verbo de direccion, salgo sin hacer nada jlt {0}.l 0 1 ; Idem si es menor que cero copy (:flag038).l {8}.l mul {8}.l 16.l {8}.l ; Guarda en {8} la direccion base de las conexiones de la localidad add {8}.l {0}.l {8}.l ; Incrementa en el valor del verbo de direccion que da el primer parametro para apuntar al la salida en concreto aload :conexiones.l {8}.l {12}.l jlt {12}.l 0.l :getextit_no_exit; Si el valor es <0 no hay salida astore :flags.l {4}.l {12}.l return 1 :getextit_no_exit astore :flags.l {4}.l 255.l return 1 ;CND NOP A 0 0 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 ; ^------------------------------------------- Es un condacto ; ^--------------------------------------- Nombre ; ^------------------------------------ A= Accion, C= Condicion ; ^---------------------------------- 0 = nada, 1 = flagno, 2= value, 3=percent, 4=objno, 5=mesno, 6=smesno, 7=prono, 8=locno, 9=locno+, 10=adjective, 11=adverb, 12=preposition, 13=noun, 14=string ; ^-------------------------------- 0 = nada, 1 = flagno, 2= value, 3=percent, 4=objno, 5=mesno, 6=smesno, 7=prono, 8=locno, 9=locno+, 10=adjective, 11=adverb, 12=preposition, 13=noun, 14=string ; ^------------------------------ 0 = aNada, 1 = aDescribir, 2=aEnd, 3=aFinDeTabla, 4=aCondicional :acc_nop dc.b 0xc1 0x00 0x00 return 0 ;CND RANDOMX A 1 2 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 ;^---------------------------------------- Nombre ; ^------------------------------------ A= Accion, C= Condicion ; ^---------------------------------- 0 = nada, 1 = flagno, 2= value, 3=percent, 4=objno, 5=mesno, 6=smesno, 7=prono, 8=locno, 9=locno+, 10=adjective, 11=adverb, 12=preposition, 13=noun, 14=string ; ^-------------------------------- 0 = nada, 1 = flagno, 2= value, 3=percent, 4=objno, 5=mesno, 6=smesno, 7=prono, 8=locno, 9=locno+, 10=adjective, 11=adverb, 12=preposition, 13=noun, 14=string ; ^------------------------------ 0 = aNada, 1 = aDescribir, 2=aEnd, 3=aFinDeTabla, 4=aCondicional :acc_randomx dc.b 0xc1 0x04 0x03 0x00 0x00 random {4}.l {8}.l astore :flags.l {0}.l {8}.l return 1 ;CND ONEG A 4 2 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 ; ONEG objno atrno ; Cambia el valor del estado de un atributo de un objeto dado, lo invierte :acc_oneg dc.b 0xc1 0x04 0x04 0x00 0x00 ; Viene en {0} el objno, y en {4} el bitno. {8} y {12} son variables globales jgt {4}.l 63.l 0 ; si el bit es > 63 es absurdo, vuelve sin hacer nada mul {0}.l 7.l {8}.l jlt {4}.l 32 :lo_oneg add 1.l {8}.l {8}.l sub {4}.l 32 {4}.l :lo_oneg add 4.l {8}.l {8}.l aload :objetos.l {8}.l {12}.l copy {12}.l (sp) copy {4}.l (sp) call :bitneg 0x02.b (sp) copy (sp) {12}.l astore :objetos.l {8}.l {12}.l return 0 ;CND WHATOX2 A 1 0 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 ; ^------------------------------------------- Es un condacto ; ^--------------------------------------- Nombre ; ^------------------------------------ A= Accion, C= Condicion ; ^---------------------------------- 0 = nada, 1 = flagno, 2= value, 3=percent, 4=objno, 5=mesno, 6=smesno, 7=prono, 8=locno, 9=locno+, 10=adjective, 11=adverb, 12=preposition, 13=noun, 14=string ; ^-------------------------------- 0 = nada, 1 = flagno, 2= value, 3=percent, 4=objno, 5=mesno, 6=smesno, 7=prono, 8=locno, 9=locno+, 10=adjective, 11=adverb, 12=preposition, 13=noun, 14=string ; ^------------------------------ 0 = aNada, 1 = aDescribir, 2=aEnd, 3=aFinDeTabla, 4=aCondicional :acc_whatox2 dc.b 0xc1 0x04 0x07 0x00 0x00 jz (:flag044).l :whatox2_sin_nombre.l copy -1.l {16}.l copy 0.l {4}.l :whatox2_bucle_objetos_llevados jgt {4}.l (:numero_ultimo_objeto).l :whatox2_fin_llevados.l copy {4}.l {8}.l mul {8}.l 7.l {8}.l aload :objetos.l {8}.l {12}.l jne {12}.l (:flag044).l :whatox2_siguiente_objeto_llevados.l add {8}.l 1.l {8}.l aload :objetos.l {8}.l {12}.l jeq {12}.l 255.l :whatox2_no_adjetivo_llevados.l jeq (:flag045).l 255.l :whatox2_no_adjetivo_llevados.l jne {12}.l (:flag045).l :whatox2_siguiente_objeto_llevados.l :whatox2_no_adjetivo_llevados add {8}.l 1.l {8}.l aload :objetos.l {8}.l {12}.l jne {12}.l 254.l :whatox2_siguiente_objeto_llevados.l copy {4}.l {16}.l :whatox2_siguiente_objeto_llevados add {4}.l 1.l {4}.l jump :whatox2_bucle_objetos_llevados.l :whatox2_fin_llevados jne {16}.l -1.l :whatox2_fin_busqueda.l copy 0.l {4}.l :whatox2_bucle_objetos_puestos jgt {4}.l (:numero_ultimo_objeto).l :whatox2_fin_puestos.l copy {4}.l {8}.l mul {8}.l 7.l {8}.l aload :objetos.l {8}.l {12}.l jne {12}.l (:flag044).l :whatox2_siguiente_objeto_puestos.l add {8}.l 1.l {8}.l aload :objetos.l {8}.l {12}.l jeq {12}.l 255.l :whatox2_no_adjetivo_puestos.l jeq (:flag045).l 255.l :whatox2_no_adjetivo_puestos.l jne {12}.l (:flag045).l :whatox2_siguiente_objeto_puestos.l :whatox2_no_adjetivo_puestos add {8}.l 1.l {8}.l aload :objetos.l {8}.l {12}.l jne {12}.l 253.l :whatox2_siguiente_objeto_puestos.l copy {4}.l {16}.l :whatox2_siguiente_objeto_puestos add {4}.l 1.l {4}.l jump :whatox2_bucle_objetos_puestos.l :whatox2_fin_puestos jne {16}.l -1.l :whatox2_fin_busqueda.l copy 0.l {4}.l :whatox2_bucle_objetos_presentes jgt {4}.l (:numero_ultimo_objeto).l :whatox2_fin_presentes.l copy {4}.l {8}.l mul {8}.l 7.l {8}.l aload :objetos.l {8}.l {12}.l jne {12}.l (:flag044).l :whatox2_siguiente_objeto_presentes.l add {8}.l 1.l {8}.l aload :objetos.l {8}.l {12}.l jeq {12}.l 255.l :whatox2_no_adjetivo_presentes.l jeq (:flag045).l 255.l :whatox2_no_adjetivo_presentes.l jne {12}.l (:flag045).l :whatox2_siguiente_objeto_presentes.l :whatox2_no_adjetivo_presentes add {8}.l 1.l {8}.l aload :objetos.l {8}.l {12}.l jne {12}.l (:flag038).l :whatox2_siguiente_objeto_presentes.l copy {4}.l {16}.l :whatox2_siguiente_objeto_presentes add {4}.l 1.l {4}.l jump :whatox2_bucle_objetos_presentes.l :whatox2_fin_presentes jne {16}.l -1.l :whatox2_fin_busqueda.l copy 0.l {4}.l :whatox2_bucle_objetos_cualquiersitio jgt {4}.l (:numero_ultimo_objeto).l :whatox2_fin_cualquiersitio.l copy {4}.l {8}.l mul {8}.l 7.l {8}.l aload :objetos.l {8}.l {12}.l jne {12}.l (:flag044).l :whatox2_siguiente_objeto_cualquiersitio.l add {8}.l 1.l {8}.l aload :objetos.l {8}.l {12}.l jeq {12}.l 255.l :whatox2_no_adjetivo_cualquiersitio.l jeq (:flag045).l 255.l :whatox2_no_adjetivo_cualquiersitio.l jne {12}.l (:flag045).l :whatox2_siguiente_objeto_cualquiersitio.l :whatox2_no_adjetivo_cualquiersitio add {8}.l 1.l {8}.l aload :objetos.l {8}.l {12}.l copy {4}.l {16}.l :whatox2_siguiente_objeto_cualquiersitio add {4}.l 1.l {4}.l jump :whatox2_bucle_objetos_cualquiersitio.l :whatox2_fin_cualquiersitio jeq {16}.l -1.l :whatox2_no_encontrado.l :whatox2_fin_busqueda astore :flags.l {0}.l {16}.l return 0 :whatox2_no_encontrado :whatox2_sin_nombre astore :flags.l 255.l {4}.l return 0 ;CND OBJAT A 9 1 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 ; OBJAT locno+ flagno ; Devuelve el numero de objetos que hay en la localidad dada en el flag :acc_objat dc.b 0xc1 0x04 0x06 0x00 0x00 ; Viene en {0} el locno+, y en {4} el flagno. {8} y {12} son variables globales copy 0.l {8}.l ; inicializo variable del bucle copy 0.l {20}.l ; inicializo contador de objetos :objat_bucle jgt {8}.l (:numero_ultimo_objeto).l :objat_fin_bucle.l mul {8}.l 7.l {12}.l add 2.l {12}.l {12}.l aload :objetos.l {12}.l {16}.l jne {16}.l {0}.l :objat_no_aqui.l add 1.l {20}.l {20}.l :objat_no_aqui add 1.l {8}.l {8}.l jump :objat_bucle.l :objat_fin_bucle astore :flags.l {4}.l {20}.l return 0 ;CND ATLE C 8 0 0 ; Este archivo es (C) Carlos Sánchez, y está sujeto a licencia LGPL v3 :cnd_atle dc.b 0xc1 0x04 0x01 0x00 0x00 jle (:flag038).l {0}.l 1 return 0