constant historia "Con Rumbo"; constant titular "^(C) 2000, 2001 El Presi (Enrique D. Bosch)^ Puede distribuirse libremente bajo licencia GNU GPL^"; ! compilar con Inform e InformatE 6/7E o 6/10E ! preferiblemente para Glulx con DICT_WORD_SIZE=16 y MAX_EXPRESSION_NODES=105 ! también compilará para Z pero truncando algunas palabras release 5; ! incorpora el nombrado y descripción de objetos ! en tiempo de ejecución (fijo) constant ADMITIR_INFINITIVOS; constant ADMITIR_COMANDO_SALIDAS; constant NO_LUGARES; constant NADA 0; ! constantes de genero y número para el diccionario constant SING_MASC 1; constant PLUR_MASC 2; constant SING_FEME 3; constant PLUR_FEME 4; global s_ini; ! valor de inicio de la semilla global blanco_primero=true; ! linea en blanco (misc 10) por primera vez replace esperarsub; replace dibujarlineaestado; replace modom1sub; ! evitamos que el jugador pueda cambiar replace modom2sub; ! el modo mirar replace modom3sub; include "aleat"; ! se utiliza el módulo aleat.h (v 1.2) generador aleatorio; include "EParser"; object mensajeslibreria with antes [; miscelanea: if (ml_n==10) if (blanco_primero) { blanco_primero=false; "Te informo de que tienes 32768 localidades para explorar."; } else "Te recuerdo que tienes 32768 localidades para explorar."; ]; include "Acciones"; include "Facilitar"; constant TAM_MAP=32; ! mapa de 32x32x32 (32768 localidades en total) constant TAM_MAPC=1024; ! TAM_MAP al cuadrado include "BajoNivel"; include "barra"; objeto_barra_estado barra_estado with texto "Con Rumbo (2a parte de ~Sin Rumbo~ la peor nano-aventura de la 1a nano-comp)"; [ dibujarlineaestado; barra_estado.dibujar(); ]; habitacion estancia " " private x TAM_MAP/2, y TAM_MAP/2, z TAM_MAP/2, limpiar_objetos [ i; for (i=0: i<=4: i++) { (objetos-->i).&adjetivos-->0='.'; (objetos-->i).&adjetivos-->1='.'; } ], with compr_semilla ! crear semilla a partir de las coordenadas de localidad [ despl; aleatorio.csemilla(despl+self.x+self.y*TAM_MAP+self.z*TAM_MAPC); ], al_n [; if (self.y==0) return muro; move descripcionmuro to muro; self.y--; self.limpiar_objetos(); return estancia; ], al_ne [; if (self.y==0 || self.x==31) return muro; move descripcionmuro to muro; self.y--; self.x++; self.limpiar_objetos(); return estancia; ], al_e [; if (self.x==31) return muro; move descripcionmuro to muro; self.x++; self.limpiar_objetos(); return estancia; ], al_se [; if (self.y==31 || self.x==31) return muro; move descripcionmuro to muro; self.y++; self.x++; self.limpiar_objetos(); return estancia; ], al_s [; if (self.y==31) return muro; move descripcionmuro to muro; self.y++; self.limpiar_objetos(); return estancia; ], al_so [; if (self.y==31 || self.x==0) return muro; move descripcionmuro to muro; self.y++; self.x--; self.limpiar_objetos(); return estancia; ], al_o [; if (self.x==0) return muro; move descripcionmuro to muro; self.x--; self.limpiar_objetos(); return estancia; ], al_no [; if (self.y==0 || self.x==0) return muro; move descripcionmuro to muro; self.y--; self.x--; self.limpiar_objetos(); return estancia; ], arriba [; if (self.z==31) return muro; move descripcionmuro to muro; self.z++; self.limpiar_objetos(); return estancia; ], abajo [; if (self.z==0) return muro; move descripcionmuro to muro; self.z--; self.limpiar_objetos(); return estancia; ], descripcion [i; self.compr_semilla(s_ini); print "Estás en ", (address) diccionario.un__()," ", (address) diccionario.ex_nombre()," ", (address) diccionario.ex_adjetivo(0)," ", (address) diccionario.lleno(), " de ", ! ------------ (address) diccionario.ex_nombre_plural(1), " que ", (address) diccionario.ex_verbo()," ", (address) diccionario.los()," ", ! ------------ (address) diccionario.ex_nombre_plural(2), " y ", (address) diccionario.ex_verbo_con(), " con ", (address) diccionario.los()," ", ! ------------ (address) diccionario.ex_nombre_plural(3), " de ", (address) diccionario.los()," ", ! ------------ (address) diccionario.ex_nombre_plural(4)," ", (address) diccionario.ex_adjetivo(4), " y ", (address) diccionario.ex_adjetivo(5), ".^^"; for (i=0: i<=4: i++) (objetos-->i).generar(); <>; ]; objeto descripcionestancia "estancia" estancia with nombre 'estancia' 'localidad' 'localizacion', descripcion [; <>; ], has escenario femenino; class objeto_general with nombre_corto [; print (address) self.nombre; return true; ], nombre '.', adjetivos '.' '.' '.' '.' '.', genero, esta_en estancia, generar [; estancia.compr_semilla(s_ini+self); diccionario.ex_adjetivo(6,self,1); diccionario.ex_adjetivo(7,self,0); ], descripcion [; print (mi_Es) self," ", (un) self," ", (address) self.&adjetivos-->0 ," y ", (address) self.&adjetivos-->1 ,".^"; ], has escenario; objeto_general objeto0; ! objetos de localidad a los que luego se les objeto_general objeto1; ! "bautizará" en tiempo de ejecución objeto_general objeto2; objeto_general objeto3; objeto_general objeto4; array objetos --> 5; ! array que contendrá cada uno de los objetos habitacion muro " " with descripcion [; print "Intentas ir hacia alli pero de repente chocas con algo, p"; descripcionmuro.texto(); move descripcionmuro to estancia; jugadorA(estancia,1); return true; ]; objeto descripcionmuro "muro" with nombre_m 'muro', nombre_f 'tapia' 'pared', adjetivos 'invisible' 'solido' 'solida' 'impenetrable', genero G_MASCULINO, descripcion [; print "P"; self.texto(); return true; ], texto [; print "arece una especie de muro sólido e invisible.^"; ], antes [; tocar: <>; trepar,saltarsobre: "Parece demasiado alto (aunque no lo ves)."; ], has escenario; objeto diccionario private nombres_sing_masc 'coche' 'teclado' 'hermano' 'ratón' 'elenco' 'coeficiente' 'trabajo' 'enano' 'hombre' 'metro' 'morro' 'campeonato' 'epítome' 'orlón' 'gulag' 'seso' 'giróstato' 'leviatán' 'equipo' 'melón', nombres_sing_feme 'estancia' 'casa' 'habitación' 'choza' 'librería' 'intención' 'humillación' 'ciudad' 'pleca' 'marraqueta' 'armería' 'explotación' 'posición' 'pera' 'estrofa' 'mesa' 'melena' 'proletaria' 'tarántula' 'violetera', nombres_plur_masc 'soles' 'ojos' 'muebles' 'garajes' 'espejos' 'inviernos' 'relámpagos' 'humanos' 'hierros' 'helicópteros' 'óvulos' 'soldadores' 'jirones' 'electrófonos' 'cuidados' 'cuerpos' 'otoscopios' 'estipes' 'monumentos' 'ciervos' 'maratones' 'cielos', nombres_plur_feme 'luces' 'teclas' 'linternas' 'manos' 'miradas' 'legumbres' 'libertades' 'noches' 'lágrimas' 'rancheras' 'terminales' 'camisolas' 'lunas' 'pamelas' 'jaquecas' 'rodelas' 'libélulas' 'monarquías' 'serpentinas' 'morsas', adjetivos_sing_neut 'azul' 'grande' 'capitalista' 'vulgar' 'ignorante' 'optimista' 'oportunista' 'beligerante' 'budista' 'dorsal' 'redimible' 'negociable' 'inenarrable' 'puertocarrense' 'policial' 'teñible' 'reversible' 'gris' 'soluble', adjetivos_sing_masc 'rojo' 'tramposo' 'gordo' 'feo' 'bajo' 'temido' 'entero' 'relajado' 'horroroso' 'caracteristico' 'bruñidor' 'soso' 'quántico' 'sesgado' 'cuerdo' 'hipocloroso' 'granado' 'grandullón' 'regateador', adjetivos_sing_feme 'entretenida' 'grasienta' 'estupenda' 'esmerada' 'genérica' 'lejana' 'arcana' 'desorganizadora' 'vinícola' 'gratuita' 'tentativa' 'oclusiva' 'perfilada' 'negativa' 'periscópica' 'engominada' 'táctica' 'sospechosa' 'teatrera' 'astuta', adjetivos_plur_neut 'enormes' 'inteligentes' 'sublimes' 'sociables' 'ininteligibles' 'solubles' 'sofocantes' 'inembargables' 'pacientes' 'intocables' 'elaborables' 'idealistas' 'ganables' 'marginalistas' 'sacramentales' 'procesales' 'trocantes' 'periciales' 'verdes', adjetivos_plur_masc 'rubios' 'marchosos' 'excelentes' 'birriosos' 'ociosos' 'finos' 'estruendosos' 'recelosos' 'madrineros' 'noctámbulos' 'marcados' 'caóticos' 'milagrosos' 'sarnosos' 'satánicos' 'granulosos' 'divertidos' 'reactivos' 'pacificadores', adjetivos_plur_feme 'sabiondas' 'groseras' 'auténticas' 'envidiosas' 'diminutas' 'esponjosas' 'graciosas' 'grecolatinas' 'sanguíneas' 'estigmáticas' 'diurnas' 'ibéricas' 'indirectas' 'pecosas' 'pentasílabas' 'descalzas' 'serigrafiadas' 'talladas' 'renegadas', verbos 'hacen' 'cogen' 'saben' 'miran a' 'escogen' 'relucen' 'reflejan' 'escriben' 'ejecutan' 'importan' 'descorazonan' 'preservan' 'evacuan' 'laten' 'rescaldan' 'coleccionan' 'magnifican' 'retejan' 'rebuscan' 'multan' 'diagnostican', verbos_con 'juegan' 'beben' 'duermen' 'se pelean' 'se aburren' 'desfilan' 'conspiran' 'resuenan' 'se comunican' 'se diluyen' 'disfrutan' 'se suben' 'proscriben' 'se revelan' 'puntuan' 'se maravillan' 'saltan' 'engatusan', anterior NADA, futuro NADA, adj_ant -1, ex_nombre_sing_masc [; return self.&nombres_sing_masc-->(aleatorio.randomsem(1,self.#nombres_sing_masc/WORDSIZE)-1); ], ex_nombre_sing_feme [; return self.&nombres_sing_feme-->(aleatorio.randomsem(1,self.#nombres_sing_feme/WORDSIZE)-1); ], ex_nombre_plur_masc [; return self.&nombres_plur_masc-->(aleatorio.randomsem(1,self.#nombres_plur_masc/WORDSIZE)-1); ], ex_nombre_plur_feme [; return self.&nombres_plur_feme-->(aleatorio.randomsem(1,self.#nombres_plur_feme/WORDSIZE)-1); ], ex_adjetivo_sing_masc [; return self.&adjetivos_sing_masc-->(aleatorio.randomsem(1,self.#adjetivos_sing_masc/WORDSIZE)-1); ], ex_adjetivo_sing_feme [; return self.&adjetivos_sing_feme-->(aleatorio.randomsem(1,self.#adjetivos_sing_feme/WORDSIZE)-1); ], ex_adjetivo_plur_masc [; return self.&adjetivos_plur_masc-->(aleatorio.randomsem(1,self.#adjetivos_plur_masc/WORDSIZE)-1); ], ex_adjetivo_plur_feme [; return self.&adjetivos_plur_feme-->(aleatorio.randomsem(1,self.#adjetivos_plur_feme/WORDSIZE)-1); ], ex_adjetivo_sing_neut [; return self.&adjetivos_sing_neut-->(aleatorio.randomsem(1,self.#adjetivos_sing_neut/WORDSIZE)-1); ], ex_adjetivo_plur_neut [; return self.&adjetivos_plur_neut-->(aleatorio.randomsem(1,self.#adjetivos_plur_neut/WORDSIZE)-1); ], with ! extrae "un" o "una" y sienta el genero del un__ ! nombre al que acompañará [; if (aleatorio.randomsem(0,1)) { self.futuro=SING_MASC; return 'un'; } self.futuro=SING_FEME; return 'una'; ], ! extrae nombre, teniendo en ex_nombre ! cuenta la concordancia de género [ a g; self.anterior=self.futuro; self.futuro=NADA; switch (self.anterior) { SING_MASC: a=self.ex_nombre_sing_masc(); g=G_MASCULINO; SING_FEME: a=self.ex_nombre_sing_feme(); g=G_FEMENINO; } objeto0.nombre=a; objeto0.genero=g; return a; ], ex_nombre_plural [ x a g; g=G_PLURAL; if (self.futuro~=NADA) { self.anterior=self.futuro; self.futuro=NADA; switch (self.anterior) { PLUR_MASC: a=self.ex_nombre_plur_masc(); g=g+G_MASCULINO; PLUR_FEME: a=self.ex_nombre_plur_feme(); g=g+G_FEMENINO; } } else if (aleatorio.randomsem(0,1)) { self.anterior=PLUR_MASC; a=self.ex_nombre_plur_masc(); g=g+G_MASCULINO; } else { self.anterior=PLUR_FEME; a=self.ex_nombre_plur_feme(); g=g+G_FEMENINO; } (objetos-->x).nombre=a; (objetos-->x).genero=g; return a; ], los [; if (aleatorio.randomsem(0,1)) { self.futuro=PLUR_MASC; return 'los'; } self.futuro=PLUR_FEME; return 'las'; ], ex_adjetivo [ x y v a; if (x==6 or 7) { do { switch (y.genero) { 0: a=self.ex_adjetivo_sing_masc(); 1: a=self.ex_adjetivo_sing_feme(); 3: a=self.ex_adjetivo_plur_masc(); 4: a=self.ex_adjetivo_plur_feme(); } } until (a~=self.adj_ant); if (v) self.adj_ant=a; else self.adj_ant=-1; y.&adjetivos-->(x-6)=a; return a; } if (self.anterior==NADA) switch (aleatorio.randomsem(1,6)) { 1: a=self.ex_adjetivo_sing_masc(); 2: a=self.ex_adjetivo_sing_feme(); 3: a=self.ex_adjetivo_plur_masc(); 4: a=self.ex_adjetivo_plur_feme(); 5: a=self.ex_adjetivo_sing_neut(); 6: a=self.ex_adjetivo_plur_neut(); } else if (aleatorio.randomsem(0,1)) switch(self.anterior) { SING_MASC: a=self.ex_adjetivo_sing_masc(); SING_FEME: a=self.ex_adjetivo_sing_feme(); PLUR_MASC: a=self.ex_adjetivo_plur_masc(); PLUR_FEME: a=self.ex_adjetivo_plur_feme(); } else switch(self.anterior) { SING_MASC,SING_FEME: a=self.ex_adjetivo_sing_neut(); PLUR_MASC,PLUR_FEME: a=self.ex_adjetivo_plur_neut(); } if (x==5) { objeto4.&adjetivos-->3=a; objeto4.&adjetivos-->4='y'; } else (objetos-->x).&adjetivos-->2=a; return a; ], ex_verbo [; return self.&verbos-->(aleatorio.randomsem(1,self.#verbos/WORDSIZE)-1); ], ex_verbo_con [; return self.&verbos_con-->(aleatorio.randomsem(1,self.#verbos_con/WORDSIZE)-1); ], lleno [; switch (self.anterior) { SING_MASC: return 'lleno'; SING_FEME: return 'llena'; PLUR_MASC: return 'llenos'; PLUR_FEME: return 'llenas'; } ], has escenario; [ inicializar; ! semilla inicial aleatoria, con el random "de la maquina" ! si se pone un número fijo, las descripciones serán ! siempre las mismas en cada ejecución s_ini=random(32767); localizacion=estancia; objetos-->0=objeto0; ! inicializando array de objetos objetos-->1=objeto1; objetos-->2=objeto2; objetos-->3=objeto3; objetos-->4=objeto4; modomirar=2; ! modo mirar largo (2) style_bold(); print "^^Rumbo"; style_roman(); print " (m) fig. Camino que uno se propone seguir en lo que intenta.^^^"; style_bold(); print "GLL"; style_roman(); print ": Generador de Locas Localidades, influenciado por RACTER y ALIEN^^^"; style_bold(); print "Aleat.h"; style_roman(); print ": Módulo de generador de números pseudoaleatorios para Inform, con características como acceso a semilla y otros parámetros y posibilidad de múltiples secuencias simultáneas."; esperartecla("^^^^^ [Pulsa cualquier tecla para seguir]"); borrarpantalla(); print "^"; ]; [ mi_Es obj; if (obj.genero==3 or 4) print "Son"; else print "Es"; ]; [ style_bold; #ifdef TARGET_ZCODE; style bold; #ifnot; glk($0086, 3); #endif; ]; [ style_roman; #ifdef TARGET_ZCODE; style roman; #ifnot; glk($0086, 0); #endif; ]; [ modom1sub; "No conozco ese verbo."; ]; [ modom2sub; modom1sub(); ]; [ modom3sub; modom1sub(); ]; [ esperarsub; print "¿A qué esperas teniendo 32768 localidades para explorar?^"; ]; include "Gramatica";