constant historia "B1"; constant titular "^(C) 2000 El Presi (Enrique D. Bosch) [kifcu@@64confluencia.net]^ Puede distribuirse libremente bajo licencia GNU GPL^"; ! B1 (C) 2000 El Presi (Enrique D. Bosch) [kifcu@confluencia.net] ! Puede distribuirse libremente bajo licencia GNU GPL ! compilar con Inform para la maquina Z ! recomiendo la versión 6/10E de InformatE aunque con ! la 6/7E también funcionará release 2; ! release provisional para betatesting ! la prácticamente definitiva será la release 3 constant ADMITIR_INFINITIVOS; constant DERECHA 0; constant IZQUIERDA 1; constant AMBAS 2; constant NO 3; replace dibujarlineaestado; replace puntuacionsub; replace local; replace quitarsub; include "EParser"; object mensajeslibreria with antes [; inv: if (ml_n==2) print "Además de la ropa llevas"; else print "No llevas nada, exceptuando la ropa.^"; return true; ]; include "Acciones"; include "Facilitar"; ! PSI profesor ----------------------------------------------------------- objeto profesor "profesor de autoescuela" with nombre 'profesor' 'instructor' 'maestro' 'monitor' 'profe', adjetivos 'autoescuela' 'conduccion', esta_en ciudad carretera, descripcion [; print "Es un profesor de autoescuela."; if (jugador in coche) print " Está sentado a tu lado en el asiento del copiloto."; print "^- ¿Qué miras?"; if (coche.velocidad>0) print ", será mejor que fijes tu vista en la carretera si quieres aprobar el exámen"; " -profiere"; ], entrar [; print "Al mismo tiempo que entras lo hacen también el profesor en el asiento del copiloto "; move self to coche; asiento_cop.ocupado_por='profesor'; ], dondecrees [; print "- ¿Adonde vas?, tienes que hacer el exámen -te susurra el profesor.^"; ], nopensaras [; print "- Aun no ha terminado el exámen -te susurra el profesor.^"; ], hasroto [; print "^- Bueno, chaval, me parece que no te van a aprobar -te dice el profesor con sorna.^"; ], no_abrir_guantera [; print "- Sssh!, deja la guantera y preocúpate de conducir -te susurra el profesor.^"; ], abiert [; "- Antes cierra la puerta -te susurra el profesor, en voz sensiblemente baja."; ], testigos [; "- Eh, vigila los testigos -te susurra el profesor."; ], noluces [; "-Es de día -te susurra el profesor."; ], nocapo [; print "- ¡Oye!, no habras el capó -te advierte el profesor.^"; ], cerrcapo [; "- ¿Por qué abriste el capó antes?, ciérralo -te ordena el profesor."; ], marchain [; "- Intentas arrancar en una marcha inadecuada -te susurra el profesor."; ], ordenes [; nocomprendido: return self.buscarllave(); ], vida [; preguntar,hablar,responder: return self.buscarllave(); orden: if (uno==llave) return self.darllave(); default: self.concentrate(); return true; ], cada_turno [; if ((coche hasnt general) && random(0,0,0,0,1) && (llave in jugador) && (jugador in coche)) "^- Enciende el motor, tenemos que empezar el exámen -te susurra el profesor, muy bajito, para que no lo oiga el examinador."; if ((coche has general) && (coche.velocidad==0) && random(0,0,0,0,1) && (jugador in coche)) { if (coche.ha_sido_detenido) if (localidad==ciudad) if (semaforo.color~='rojo') print "^- Bueno, ¿seguimos?"; else; else print "^- Bueno, ¿seguimos?"; else print "^- Bueno, ¿empezamos?"; print " -propone el profesor.^"; } if ((coche.velocidad>100) && random(0,0,1)) "^- Vigila la velocidad -te susurra el profesor, en voz casi imperceptible."; ], private concentrate [; if (jugador in coche) print "- Concéntrate en la conducción, esto es un exámen -es su única respuesta.^"; else print "¿No crees que ya es hora de empezar el exámen? -es la pregunta que recibes como respuesta del profesor.^"; ], buscarllave [ quedan; np=consultar_desde; quedan=consultar_num_palabras; while (quedan--) if ( siguientepalabra()=='llave' or 'llaves' or 'marcha' ) return self.darllave(); self.concentrate(); return true; ], darllave [; if (llave in self) { move llave to jugador; "- Ah, si, aquí tienes la llave del coche -y el profesor te da la llave."; } else if (llave in jugador) "- Ya te he dado la llave antes."; else "- ¿Por qué has dejado la llave?"; ], has masculino animado; ! PSI examinador ---------------------------------------------------------- objeto examinador "examinador" with nombre 'tipo' 'examinador' 'evaluador', adjetivos 'autoescuela' 'conduccion' 'gordo' 'barba', esta_en ciudad carretera, aparcar false, descripcion [; if (jugador in coche) "De reojo a través del espejo retrovisor ves al examinador, un tipo gordo y con barba postrado en el asiento de atrás. Tiene en su poder una carpetita con unas hojas a las que mira insistentemente al igual que a tu comportamiento al volante."; "Podría ser el tipo gordo que está al lado del profesor."; ], entrar [; print "y el examinador en el asiento de atrás.^"; move self to coche; asiento_atras.ocupado_por='examinador'; ], vida "No obtienes ninguna respuesta de él, simplemente se limita a anotar algo en sus hojas de evaluación como reacción a ti.", susp [; print "^- ¡Qué susto me ha dado!, ya me encargaré de que no se saque el carnet de conducir en esta ciudad -te amenaza el tipo^"; ], result [; if (self.punt<5) "- Ha cometido varias faltas y está suspendido -te auncia el examinador casi con satisfacción."; "- Está aprobado. -te dice el examinador a regañadientes."; ], quien [; "- Pero quien le ha dicho que tiene que aparcar, vamos vuelva a la calle -te recrimina el examinador."; ], cada_turno [; if (self.punt<-4) return self.baje(); if (coche.km>160 && random(0,0,1) && (~~(self.aparcar))) return self.aparque(); if (semaforo has general && semaforo.color=='rojo' && semaforo.paso==3 && (~~(coche.ha_sido_detenido))) { self.punt--; if (random(0,0,0,1)) ciudad.acsem(); } if ((~~(cinturon.cpuesto)) && coche.velocidad>0) self.punt--; if (localizacion==ciudad && coche.velocidad>50) self.punt--; if (localizacion==carretera && coche.velocidad>100) self.punt--; if (random(0,0,0,0,0,1) && (~~(self.orgira)) && coche.velocidad>0 && localizacion==ciudad) self.gira(); if (self.orgiraef) { self.orgiraef=false; self.orgira=false; if (self.ladogira~=coche.girado) self.punt--; } if (self.orgira && (ciudad.curva==self.ladogira || ciudad.curva==AMBAS)) self.orgiraef=true; ], private punt 10, orgira false, orgiraef false, ladogira, gira [; print "^- Gire por la siguiente bocacalle a la "; self.ladogira=random(0,1); if (self.ladogira) print "izquierda"; else print "derecha"; print " -te ordena el examinador.^"; self.orgira=true; ], baje [; banderafin=3; coche.velocidad=0; print "^- Muy bien, ya es suficiente, pare aquí mismo y bajemos del coche. Lo siento pero está suspendido.^"; ], aparque [; print "^- Muy bien, ahora aparque ahi, en ese hueco -te indica el examinador señalándote un hueco en el que aparcar.^"; give hueco general; self.aparcar=true; ], has masculino animado transparente; objeto hojas "hojas de evaluacion" examinador with nombre_f 'hoja' 'carpeta' 'carpetita' 'nota', nombre_fp 'hojas' 'notas' 'anotaciones', adjetivos 'evaluacion' 'examinador' 'evaluador' 'autoescuela' 'conduccion' 'gordo' 'barba' 'tipo', genero G_FEMENINO+G_PLURAL, descripcion "Es la carpeta con las hojas de evaluación en las que el examinador anota compulsivamente todo lo que se le ocurre sobre el exámen. El tipo no te deja ver qué es lo que pone en ellas."; ! Clase Localidad --------------------------------------------------------- class localidad class habitacion with irrelevante 'rueda' 'ruedas' 'luna' 'lunas' 'parabrisas' 'parabris' 'limpia' 'limpiaprabrisas' 'limpiaparabris', curva NO; ! curva: 1->IZQUIERDA, 0->DERECHA, 3->NO, 2->AMBAS ! Localidad Ciudad -------------------------------------------------------- localidad ciudad "En la cuidad" with descripcion [; print "Te encuentras en una avenida de la gran ciudad, llena de calles, coches, peatones, semáforos y todo lo que se suele encontrar en las grandes ciudades.^"; if (jugador in coche) print "^Ahora mismo te encuentras dentro del coche de exámen, a tu lado, en el asiento del copiloto ves al examinador, temeroso (o deseando) que puedas suspender. En el asiento de atras, puedes ver, aunque no muy bien por el retrovisor, al examinador, si, es el tipo que va a decidir si debes tener al fin el tan ansiado permiso o no.^"; else print "^A poca distancia de ti ves a tu profesor de autoescuela, y a un desconocido que muy probablemente sea el examinador (snif). A su lado puedes observar el coche de prácticas, ese arma de múltiples filos que puede servir tanto para transportar personas inocentemente como también puede convertirse en una implacable máquina de matar (esta última frase se debe sin duda a los nervios frente al inminente exámen).^"; return true; ], acsem [; banderafin=3; coche.velocidad=0; "Te has saltado el semáforo en rojo, al hacerlo un coche que venía por tu derecha siguiendo correctamente su semáforo en verde te embiste, os desplaza 12 metros y os hace un ~sandwich~ contra una farola. Ninguno de vosotros consigue sobrevivir."; ], cada_turno [; if (coche.velocidad) { if (self.curva~=NO) self.curva=NO; if (semaforo has general) switch (semaforo.paso) { 1:"^A lo lejos puedes apreciar un semáforo que está de color ",(address) semaforo.color,"."; 2:"^Muy próximo al coche está ya el semáforo que ahora mismo está de color ",(address) semaforo.color,"."; 3:"^Pasas el semáforo en ", (address) semaforo.color,"."; } if (random(coche.velocidad)>20 && random(coche.velocidad)>20) { ! generar bocacalles, print "^En este punto hay "; ! a mayor velocidad self.curva=random(0,1,2); ! mayor frecuencia if (self.curva==AMBAS) ! de bocacalles print "dos bocacalles, cada una a un lado"; else { print "una bocacalle a la "; if (self.curva) print "izquierda"; else print "derecha"; } print ". Puedes seguir recto por la actual calle.^"; coche.girado=NO; } } ]; ! Localidad Carretera ------------------------------------------------------- localidad carretera "En la carretera" with curvasi true, ! activa/desactiva las curvas descripcion "Es una carretera de dos carriles, cada uno para un sentido de marcha; está arropada a ambos lados por pinos altos y frondosos; el arcén es pavimentado de anchura mayor a metro y medio asi que sabes que la velocidad máxima permitida aquí es de 100 km/h. Es de día.", centrifuga 0, cada_turno [; if (coche.velocidad) { if (self.curva~=NO && coche.girado==NO) ! comprobar si hay curvas { ! y si se ha girado banderafin=3; print "^Venía una curva a la "; if (self.curva) print "izquierda"; else print "derecha"; print " pero tú no has girado de modo que os salís de la carretera y os estampais contra un árbol. "; if (coche.velocidad<80) "Por suerte no ibais a demasiada velocidad, asi que os recuperais de algunas heridas en el hospital."; "Ibais a tal velocidad que el accidente resulta mortal para ti y el profesor, el examinador sobrevive pero queda parapléjico."; } if (coche.derrapando) { banderafin=3; "^El coche derrapa y se sale de la carretera dando cuatro vueltas de campana, tú y el examinador morís después de unas horas en el hospital. El profesor entra en estado de coma, puede que salga o puede que no."; } if (self.centrifuga) coche.derrapando=1; if (random(coche.velocidad)>30 && random(coche.velocidad)>30 && self.curvasi) { print "^Viene una curva a la "; ! generar curvas, self.curva=random(0,1); ! a mayor velocidad if (self.curva) print "izquierda"; ! mayor frecuencia else print "derecha"; ! de curvas print ".^"; coche.girado=NO; } } ]; ! Objetos de localidad -------------------------------------------------- class descr with nombre_f 'via', nombre_m 'carril' 'asfalto', nombre_mp 'carriles', adjetivos 'alto' 'altos' 'pavimentada' 'pavimentado' 'publica', descripcion [; <>; ], has estatico; descr carrdesc carretera with nombre_f 'carretera', nombre_m 'arcen' 'pino', nombre_mp 'pinos', adjetivos 'frondoso' 'frondosos'; descr ciudadesc ciudad with nombre_f 'ciudad' 'calle' 'avenida', nombre_fp 'ciudades' 'calles', nombre_m 'acera' 'edificio' 'peaton', nombre_mp 'edificios' 'coches' 'peatones', adjetivos 'gran' 'grandes'; objeto semaforo "semaforo" ciudad with nombre 'semaforo', paso 0, color 'verde', descripcion ! general indica que es visible [; if (self has general) "Es un semáforo normal, con sus tres luces: roja, ambar y verde. Ahora está ", (address) self.color,"."; "Desde donde estás ahora no se observa ningún semáforo."; ], cada_turno [; self.turnosf--; if (~~self.turnosf) { if (self.pos==2) self.pos=0; else self.pos++; self.turnosf=self.&turnosd-->self.pos; self.color=self.&colores-->self.pos; } if (random(0,0,0,0,0,1,1) && ~~self.paso) give self general; if (coche.velocidad) self.paso++; if (self.paso==4) { give self ~general; self.paso=0; } ], private colores 'verde' 'ambar' 'rojo', turnosd 6 1 6, turnosf 6, pos 0, has masculino estatico; objeto bocacalle "bocacalle" ciudad with nombre 'bocacalle', descripcion "Es una calle perpendicular a la que vas en este momento.", has femenino estatico; objeto hueco "hueco" ciudad with nombre_m 'hueco' 'aparcamiento' 'aparcadero' 'parking', nombre_f 'plaza', genero G_MASCULINO, descripcion ! general lo hace visible [; if (self hasnt general) "No veo eso que dices."; "Es el hueco de aparcamiento en la calle, ni muy grande, ni muy pequeño, que te ha señalado el examinador para aparcar."; ], antes [; aparcaren:if (self has general) <>; "No veo eso que dices."; default: if (self hasnt general) "No veo eso que dices."; return false; ], has estatico; objeto ropa "ropa" with nombre 'ropa', esta_en ciudad carretera, antes "Deja la ropa tranquila y piensa en el exámen.", has estatico femenino; ! Coche ----------------------------------------------------------------- objeto coche "coche" with nombre 'coche' 'cochecito' 'bolido' 'automovil' 'utilitario' 'carro' 'carrito' 'arma' 'maquina', adjetivos 'practicas' 'multiple' 'multiples' 'filo' 'filos' 'implacable' 'matar', suma_al_alcance capo maletero, esta_en ciudad carretera, descripcion [; print "Es un cochecito. Tiene el motor"; if (self has general) print " encendido."; else print " apagado."; if (self.velocidad==0) print " Está parado."; else print " Se está moviendo a ",self.velocidad, " km/h."; if (self has abierto) print " Tiene la puerta del conductor abierta."; else print " Tiene todas la puertas cerradas."; print "^"; return true; ], velocidad 0, km 0, ! kilómetros recorridos ha_sido_detenido 0, ! booleano que indica a los psis que se ha parado girado NO, ! indica si se ha girado el volante derrapando 0, ! booleano que indica si el coche está derrapando gasolina 450, ! gasolina inicialmente para unos 450 kms temp 0, ! 0: frío, 1: normal, más: se calienta testigos 0 0 1 0 0, ! aceite batería frenomano luzlarga intermitente frenado_reciente 0, ! indica una frenada reciente reaccionar_antes [; salir: profesor.dondecrees(); return true; ], antes [; ir: if (uno==obj_arriba) { print "Normalmente... ¡los coches no vuelan!^"; return 2; } if (uno==obj_abajo) { print "Oye, ¡que no eres un topo!^"; return 2; } print "Normalmente cuando conduces no piensas que vas a ir a algún punto cardinal.^ ¡Eso sólo se piensa en aventuras conversacionales! ;-)^"; return 2; coger: "Si claro.., lo cojes y te lo metes en el bolsillo...., ja, ja."; conducir: if (self.nojugador()) return true; if (self.velocidad) "Es lo que haces."; if (self has general) <>; "No está en marcha."; arrancar,iniciar: if (self has general) <>; <>; ponerenmarcha,encender,activar: if (self.nojugador()) return true; if (~~(llave in contacto)) "La llave no está en el contacto."; if (capo has abierto) return profesor.cerrcapo(); if (coche has abierto) return profesor.abiert(); if (self has general) ! general indica que "Ya está en marcha."; ! el motor esta en marcha if (marcha.num>0 && (pedalem hasnt general)) "Intentas poner en marcha el motor, pero al hacerlo el coche avanza unos centrímetros y el motor se para."; give self general; "Pones en marcha el motor del coche, hace un ruido característico de un motor diésel, un tococococo mezclado con un brrrrrrrrr; al mismo tiempo el coche empieza a vibrar un poco."; apagar,desactivar: if (self.nojugador()) return true; if (self hasnt general) "No está en marcha."; profesor.nopensaras(); return true; parar: if (self.nojugador()) return true; if (self.velocidad) { pararreloj(pedalem); carretera.centrifuga=0; self.derrapando=0; carretera.curvasi=1; self.ha_sido_detenido=1; marcha.num=0; self.frenado_reciente=1; if (self.velocidad==1) { self.velocidad=0; return true; } self.velocidad=0; "Frenas bastante, hasta parar el coche por completo."; } "Ya está parado"; mover: ! mover es pasar de parado a movimiento if (self.nojugador()) return true; if (self hasnt general) "¡El motor no está en marcha!"; if (freno_mano.activado) return profesor.testigos(); if (self.velocidad==0) { if (marcha.num>1) return profesor.marchain(); if (self.ha_sido_detenido) self.ha_sido_detenido=false; if (semaforo.paso==4) semaforo.paso==3; self.velocidad=10; if (marcha.num~=1) { marcha.num=1; if (pedalem hasnt general) print "Apretas a fondo el embrague, m"; else print "M"; print "etes la primera, a"; } else print "A"; give pedalem ~general; "prietas el acelerador al tiempo que sueltas poco a poco el embrague, el coche empieza a moverse."; } "Ya has emprendido la marcha."; acelerar: if (self.nojugador()) return true; if (self hasnt general) "¡El motor no está en marcha!"; if (self.velocidad==0) <>; if (pedalem has general) "Aceleras y notas como el motor ruge, pero parece como si las ruedas no le hicieran caso y siguieran su marcha sin acelerar un ápice."; self.velocidad=self.velocidad+10; if (~~marcha.comprobar(true)) { self.velocidad=self.velocidad-10; "El motor ya va bastante acelerado pero el coche no aumenta de velocidad."; } print "Continúas acelerado, "; if (self.velocidad==160) { self.velocidad=152; print "pero al llegar a 152 km/h, el régimen de vueltas para el pequeño diésel es demasiado y el limitador parece que no ha funcionado correctamente, asi que el 60 CV se gripa y se queda más tieso que el carrito de Tracy en la Interestatal 0.^"; profesor.hasroto(); banderafin=3; return true; } "sientes el gustillo de tomar más y más velocidad con el cochecito."; frenar: if (self.nojugador()) return true; if (self.velocidad==0) "El coche ya está parado."; if (self.velocidad==10) <>; print "Frenas un poco"; self.velocidad=self.velocidad-10; if (~~marcha.comprobar(false)) { print "y el coche se queda calado y luego se para."; self.velocidad=1; ; give self ~general; return true; } self.frenado_reciente=1; print ", te ves ligeramente impulsado hacia adelante y el coche ya no corre tanto."; print "^"; return true; girar: <>; girarizquierda: if (self.nojugador()) return true; if (self.velocidad) { if (localizacion.curva==NO or DERECHA) return self.salirse(); self.girado=IZQUIERDA; switch (localizacion) { ciudad: if (self.centrifuga()) return true; print "Giras a la izquierda, te metes por la calle existente en ese lado."; carretera: print "Giras a la izquierda siguiendo la curva."; self.centrifuga(); } print "^"; return true; } return self.girarss(); girarderecha: if (self.nojugador()) return true; if (self.velocidad) { if (localizacion.curva==NO or IZQUIERDA) return self.salirse(); self.girado=DERECHA; switch (localizacion) { ciudad: if (self.centrifuga()) return true; print "Giras a la derecha, te metes por la calle existente en ese lado."; carretera: print "Giras a la derecha siguiendo la curva."; self.centrifuga(); } print "^"; return true; } return self.girarss(); contravolantear: if (self.nojugador()) return true; if (self.velocidad) if (self.derrapando) { carretera.centrifuga=0; self.derrapando=0; carretera.curvasi=1; "Contravolanteas y consigues corregir el derrapaje y mantener el coche dentro del asfalto, se nota que sabes conducir, aunque no sé si el examinador lo verá del mismo modo después de esta peligrosa maniobra."; } else "Ahora mismo no hay motivo para contravolantear."; else "Estando parado no sé como quieres hacer ese contravolanteo."; buscaren: <>; embragar: <>; desembragar: <>; aparcar: if (self.nojugador()) return true; if (self.velocidad) "Antes de intentar aparcar tendrás que parar, ¿no?"; if (~~examinador.aparcar) return examinador.quien(); banderafin=3; print "^Haces marcha atrás y aparcas impecablemente en el hueco en cuestión.^^"; return examinador.result(); ], despues [; abrir: "Abres la puerta del coche."; cerrar: "Cierras la puerta del coche."; meterse: print "Entras en el coche.^^"; asiento_cond.ocupado_por='ti'; profesor.entrar(); examinador.entrar(); return true; ], cada_turno ! la gasolina disminuye en mayor proporción cuanto más [x; ! velocidad, como en la realidad, creo x=self.velocidad/36; ! el kilometraje aumenta en función de la self.km=self.km+x; ! velocidad, claro self.gasolina=self.gasolina-(x+self.velocidad/60); if (self.gasolina==0) self.sacabo(); if (self.km>10) self.temp=1; if (self.km>120) self.temp=2; self.frenado_reciente=0; ], nojugador [; if (~~(jugador in coche)) "No estás en el coche."; return false; ], bloqruedas [; banderafin=3; self.velocidad=0; print "^Las ruedas quedan bloqueadas de repente, el coche derrapa, hace un trompo, se sale de la carretera, baja por un plén "; if (self.velocidad<100) { print "y se estampa contra un muro. Gracias a que no ibais a una velocidad excesivamente alta, conseguis sobrevivir con algunas contusiones. Tendrías mucha suerte si te dejaran conducir un coche alguna otra vez.^"; return; } print "dando vueltas de campana a la nada despreciable velocidad de ", self.velocidad," km/h y finalmente se pega contra un muro. Nadie sobrevive."; ], private ! ------ Rutinas internas del coche ------------------ girarss [; "Giras pero no sirve de nada porque estás parado."; ], salirse [; banderafin=3; self.velocidad=0; print "^Has girado donde no debías, te sales de la "; if (self.velocidad<90 || localizacion==ciudad) { print "vía pública pero por suerte puedes parar a tiempo, el profe de la autoescuela y tú estáis bien pero ¡pa'haberos matao!^^"; examinador.susp(); } else print "carretera y caes a un lago, el coche se hunde y hasta que no está totalmente anegado no podeis salir, por efecto de la presión. Tú y el profesor conseguís aflorar por la superfície pero el examinador no lo logra. Técnicamente no ha llegado a suspenderte, pero me temo que no van a dejar examinarte nunca más.^"; return true; ], centrifuga [; if (localizacion==ciudad) { if (self.velocidad>40) { banderafin=3; self.velocidad=0; print "^Vas a girar en la siguiente calle pero la velocidad que llevas es demasiado alta para el giro de tan poco radio que pretendías realizar asi que el coche se te va haciendo un subviraje, invades la acera y empotras un poco el morro del coche en el escaparate de una tienda de lámparas. Un peatón que vagaba por alli mira atónito que de haber dado un paso más hubiera sido arrollado por el automóvil, ¡podías haberle matado!^^"; examinador.susp(); return true; } return false; } switch (self.velocidad) { 110,120:print " Al dar la curva notas ligeramente pero un poco más de lo normal que por la inercia, los pasajeros y el mismo coche tienden a irse hacia fuera de la curva."; 130,140:print " Ahora la fuerza centrífuga es ya considerable en las curvas, pero es divertido como chirrían un poco los neumáticos."; 150:print " Debido a la velocidad, al girar en la curva el tren trasero empieza a derrapar, ¡a 150 km/h que vas!, me parece que esta es la ocasión idónea para mostrar tus dotes de conducción."; carretera.curvasi=0; carretera.centrifuga=1; } ], sacabo [; give self ~general; self.velocidad=0; print "^Se ha acabado la gasolina y os quedais tirados por ahi, como la culpa de esto no es estrictamente tuya, si estás suspendido o no ahora mismo es una incógnita.^"; banderafin=3; ], has masculino recipiente transparente entrable abrible ~abierto ~general; ! Cosas del coche --------------------------------------------------------- class objeto_coche with adjetivos 'coche' 'cochecito' 'bolido' 'automovil' 'utilitario' 'carro' 'carrito' 'arma' 'maquina' 'practicas' 'multiple' 'multiples' 'filo' 'filos' 'implacable' 'matar'; objeto_coche capo "capó" with nombre 'capo' 'morro', suma_al_alcance motor, antes [; coger: "Como puñetas quieres coger el capó que forma parte del coche."; examinar: if (jugador in coche) "Desde dentro del coche el capó se ve como algo estampable contra cualquier cosa."; if (self hasnt abierto) "El capó está cerrado, pero supones que alberga el motor."; "Como puedes suponer, dentro del capó está alojado el motor."; abrir: if (jugador in coche) "En este coche, el capó no puede abrirse desde dentro del habitáculo."; ], despues [; abrir: profesor.nocapo(); ], has recipiente ~abierto abrible; objeto_coche motor "motor" with nombre 'motor' 'propulsor', descripcion [; if (jugador in coche) "Desde dentro del coche no puedes ver el motor."; if (capo hasnt abierto) "El motor debe estar dentro del capó, que está cerrado."; "Es un motor diésel de 1800 centímetros cúbicos que debe rendir no más allá de los 60 CV."; ], antes [; arrancar,ponerenmarcha,encender,iniciar,activar: <>; apagar,parar,cortar,desactivar: <>; acelerar: <>; coger,quitar,sacar: "No me hagas reir, quieres decir que piensas desmontar el motor y llevártelo."; ], has masculino; objeto_coche maletero "maletero" with nombre 'maletero' 'portaequipajes', adjetivos 'atrancado' 'puerta' 'porton' 'trasero', con_llave llave, descripcion [; if (jugador in coche) "Desde el asiento delantero del coche no puedes ver el maletero."; print "Es el pequeño maletero trasero del coche. Está cerrado"; if (self has general) " y atrancado."; "."; ], antes [; abrir,quitarcerrojo: if (jugador in coche) "En este coche, el maletero no puede abrirse desde dentro del habitáculo."; if (self has general) "Está atrancado."; return false; ], despues [; quitarcerrojo: ! general indica que se ha descubierto give self general; ! que está atrancado give self cerrojoechado; "Intentas abrirlo pero ni con la llave se puede, parece que está atrancado."; ], has estatico masculino abrible ~abierto cerrojo cerrojoechado ~general; objeto_coche contacto "contacto" coche with nombre_m 'contacto', nombre_f 'ignicion', genero G_MASCULINO, descripcion [; if (coche.nojugador()) return true; print "Es el contacto"; if (llave in self) ", con su llave dentro."; ". No tiene la llave puesta."; ], antes [; arrancar,ponerenmarcha,encender,iniciar,activar: <>; apagar,desactivar,cortar,quitar: <>; ], has transparente recipiente abierto estatico; objeto_coche llave "llave" profesor with nombre_f 'llave' 'llavero', nombre_fp 'llaves', genero G_FEMENINO, adjetivos 'contacto' 'cutre', descripcion [; print "Es la llave del coche, esta no es de las que llevan control remoto. Va con un llavero cutre que lleva escrito a mano el número 187."; if (self in contacto) print " Está dentro del contacto."; print "^"; return true; ], antes [; girar: if (coche.nojugador()) return true; if (self.encontacto) if (coche hasnt general) <>; else <>; return true; arrancar,ponerenmarcha,encender,iniciar,activar: if (coche.nojugador()) return true; if (self.encontacto()) <>; return true; desactivar,apagar,cortar: if (coche.nojugador()) return true; if (self.encontacto()) <>; return true; quitar: <>; sacar: if (coche.nojugador()) return true; if (self.encontacto()) if (coche has general) <>; else; else ""; if (otro==llave) otro=contacto; return false; ], encontacto [; if (self in contacto) return true; print "La llave no está en el contacto."; return false; ]; class pedal class objeto_coche, with nombre 'pedal', descripcion [; if (coche.nojugador()) return true; print "Es el ",(string) self.nombre_corto,", el de", (string) self.lugar,"."; self.anydesc(); ], private anydesc [; print "^"; ], has masculino estatico; pedal pedalac coche with nombre_corto "pedal del acelerador", nombre 'acelerador', adjetivos 'derecha', lugar " más a la derecha", antes [; pisar,empujar,activar: <>; ]; pedal pedalfr coche with nombre_corto "pedal del freno", nombre 'freno', adjetivos 'medio' 'centro', lugar "l medio", antes [; pisar,empujar,activar: <>; ]; pedal pedalem coche with nombre_corto "pedal del embrague", nombre 'embrague', adjetivos 'izquierda', lugar " más a la izquierda", antes [; pisar,empujar,activar,embragar,poner: if (coche.nojugador()) return true; give self general; ! general indica si esta pulsado print "Aprietas el embrague a fondo"; if (coche.velocidad) { arrancarreloj(self,6); ", notas ligeramente como el motor deja de dar potencia a las ruedas, por el momento el coche se mueve por inercia."; } print ".^"; return true; soltar,dejar,desactivar,desembragar,quitar: if (coche.nojugador()) return true; give self ~general; pararreloj(self); print "Sueltas el pedal del embrague"; if (coche.velocidad) " y notas como el motor vuelve a propulsar las ruedas."; if (marcha.num) { if (coche.velocidad) { coche.velocidad=1; ; } give coche ~general; " y el coche se cala."; } print ".^"; return true; ], tiempo_restante, tiempo_agotado [; print "^Has tenido el embrague pisado demasiado tiempo de modo que el coche ha perdido la velocidad que llevaba y se para.^"; coche.velocidad=1; <>; ], private anydesc [; print " En estos momentos "; if (self has general) print "lo mantienes pisado."; else print "no está apretado."; print "^"; ]; objeto_coche volante "volante" coche with nombre 'volante', descripcion [; if (coche.nojugador()) return true; "Es un volante normal y corriente."; ], antes [; conducir: if (coche.nojugador()) return true; "El coche se conduce girando el volante, entre otras cosas como ya sabrás."; girar: if (coche.nojugador()) return true; "Pero no dices hacia donde."; girarizquierda: <>; girarderecha: <>; ], has masculino estatico; objeto_coche salpicadero "salpicadero" coche with nombre_m 'salpicadero' 'cuadro' 'mando' 'control' 'testigo' 'deposito' 'kilometraje' 'velocimetro' 'cuentakilometros' 'cuentarevoluciones' 'cuentarrevoluciones' 'panel', nombre_mp 'mandos' 'controles' 'testigos' 'kilometros', nombre_f 'gasolina' 'temperatura' 'velocidad', genero G_MASCULINO, descripcion [; if (coche.nojugador()) return true; print "El salpicadero está formado por los controles básicos:^ Testigos: ",(estado_testigos) 1, "Gasolina: ",(nivel) coche.gasolina, "Temperatura: ",(calor) coche.temp, "Velocidad: ",coche.velocidad," km/h.^ Kilometraje del coche: ",coche.km+8842," kms.^ No tiene cuentarrevoluciones.^"; return true; ], has estatico; objeto_coche puertacoche "puerta del coche" with nombre 'puerta' 'portezuela', esta_en coche carretera ciudad, descripcion [; print "Es la puerta del coche. "; if (coche has abierto) "Está abierta."; "Está cerrada."; ], antes [; abrir: <>; cerrar: <>; meterse: <>; salirse: <>; ], has femenina estatica; objeto_coche guantera "guatera" coche with nombre_f 'guantera', nombre_m 'portaobjetos' 'receptaculo', genero G_FEMENINO, descripcion "Es un receptáculo para meter unos cuantos trastos.", antes [; abrir: if (coche.nojugador()) return true; profesor.no_abrir_guantera(); return true; ], has estatica recipiente abrible ~abierta; objeto_coche cambio_marchas "palanca de cambio de marchas" coche with nombre_f 'palanca' 'caja', nombre_m 'cambio' 'pomo', adjetivos 'marcha' 'marchas' 'cambios', genero G_FEMENINO, descripcion [; if (coche.nojugador()) return true; print "Es la palanca de un cambio de marchas manual, este es su esquema grabado en el pomo:^^"; font off; print " 1 3 5 ^ | | | ^ ---|--|--| ^ | | | ^ R 2 4^^"; font on; print "Ahora mismo vas en ", (ordinalm) marcha.num,".^"; return true; ], antes [; usar: <>; ], has estatico; objeto_coche freno_mano "palanca del freno de mano" coche with nombre_f 'palanca', nombre_m 'freno', adjetivos 'mano' 'estacionamiento', genero G_FEMENINO, descripcion [; if (coche.nojugador()) return true; print "Es la palanca del freno de mano. Está "; if (~~self.activado) print "des"; print "activada.^"; return true; ], activado 1, antes [; activar,poner,encender: if (coche.nojugador()) return true; if (self.activado) "El freno de mano ya está accionado."; self.activado=1; coche.&testigos-->2=1; print "Activas el freno de mano. "; if (~~coche.velocidad) return true; if (coche.velocidad<60 || localizacion==ciudad) { print "El coche se detiene bastante bruscamente con un chirrido de las ruedas.^"; coche.velocidad=1; <>; } coche.bloqruedas(); return true; apagar,desactivar,quitar: if (coche.nojugador()) return true; if (~~self.activado) "El freno de mano no estaba activado."; self.activado=0; coche.&testigos-->2=0; "Desactivas el freno de mano."; ], has estatico; class asiento class objeto_coche, with nombre 'asiento', ocupado_por 'nadie', descripcion [; print "Es el asiento de",(string) self.posicion," del coche. Ahora "; if (self.ocupado_por=='nadie') print "no está ocupado.^"; else print "está ocupado por ",(address) self.ocupado_por,".^"; return true; ], has masculino estatico; asiento asiento_cond "asiento del conductor" coche with adjetivos 'conductor' 'delantero' 'delante' 'mi' 'mio' 'examinado', posicion "l conductor"; asiento asiento_cop "asiento del copiloto" coche with adjetivos 'copiloto' 'delantero' 'delante' 'profesor', posicion "l copiloto"; asiento asiento_atras "asiento de atrás" coche with adjetivos 'atras' 'trasero' 'examinador', posicion " atrás"; objeto_coche asientos "asientos" coche with nombre 'asientos', genero G_MASCULINO+G_PLURAL, descripcion "Este coche tiene tres asientos, dos para conductor y copiloto en la parte delantera y uno de tres plazas detrás para más pasajeros.", has estatico; class retrovisor class objeto_coche, with nombre 'espejo' 'retrovisor', funcionalidad [; if (~~(jugador in coche)) "Desde donde estás no se ve bien por los retrovisores."; if (coche.velocidad==0) "se ven pasar coches a toda velocidad."; if (coche.frenado_reciente) "se ve un coche que se acerca."; "se ve un coche a cierta distancia."; ], has masculino estatico; retrovisor espejo_izq "espejo retrovisor de la izquierda" coche with adjetivos 'izquierda' 'izquierdo' 'exterior', descripcion [; print "Es el espejo retrovisor izquierdo. Está al inicio de la ventana, en la parte exterior del coche. A través del espejo "; self.funcionalidad(); return true; ]; retrovisor espejo_der "espejo retrovisor de la derecha" coche with adjetivos 'derecha' 'derecho' 'exterior', descripcion [; print "Es el espejo retrovisor derecho. Está al inicio de la ventana, en la parte exterior del coche."; self.funcionalidad(); return true; ]; retrovisor espejo_centro "espejo retrovisor del centro" coche with adjetivos 'centro' 'central' 'superior' 'interior', descripcion [; print "Es el espejo retrovisor que se encuentra dentro del habitáculo, en la parte central superior del parabrisas."; self.funcionalidad(); return true; ]; retrovisor espejo_prof "espejo retrovisor del profesor" coche with adjetivos 'profesor' 'exterior' 'pequeno', descripcion "Es un pequeño espejo retrovisor que llevan los coches de autoescuela en la parte derecha exterior orientados para que el profesor pueda también enterarse de lo que viene por detrás. No puedes ver nada de interés a través de ese espejo."; objeto_coche luces "luces" coche with nombre_f 'luz', nombre_fp 'luces', nombre_m 'faro', nombre_mp 'faros', genero G_FEMENINO+G_PLURAL, adjetivos 'halogeno' 'halogena' 'halogenos' 'halogenas', descripcion "Son los faros halogenos del coche.", antes [; encender: if (coche.nojugador()) return true; return profesor.noluces(); ], has estatico conmutable ~encendido; class intermitente class objeto_coche, with nombre_m 'intermitente', nombre_mp 'intermitentes', adjetivos 'luces' 'direccionales', genero G_MASCULINO+G_PLURAL, descripcion "Son las luces intermitentes de color amarillo auto.", antes [; encender: if (coche.nojugador()) return true; tate_callao=1; switch (uno) { int_izq: ; ; int_der: ; ; int_dob: ; ; } tate_callao=0; return false; ], despues [; encender: coche.&testigos-->4=true; apagar: coche.&testigos-->4=false; ], has estatico conmutable ~encendido; intermitente int_izq "intermitentes izquierdos" coche with adjetivos 'izquierdo' 'izquierda'; intermitente int_der "intermitentes derechos" coche with adjetivos 'derecho' 'derecha'; intermitente int_dob "intermitentes dobles (luz de emergencia)" coche with adjetivos 'doble' 'luz' 'emergencia'; objeto_coche cinturon "cinturón de seguridad" coche with nombre 'cinturon' 'cinto' 'cintu', adjetivos 'seguridad', descripcion [; if (coche.nojugador()) return true; print "Es un cinturón de seguridad de tres puntos de anclaje, como el que llevan millones de automóviles."; if (self.cpuesto) " Ahora mismo lo llevas puesto."; print "^"; return true; ], cpuesto false, antes [; poner,abrochar,ponerte,activar: if (coche.nojugador()) return true; if (self.cpuesto) "Ya lo llevas puesto.^"; self.cpuesto=true; "Te pones el cinturón de seguridad."; quitar,desabrochar,quitarte,desactivar: if (coche.nojugador()) return true; if (~~self.cpuesto) "No lo llevas puesto.^"; self.cpuesto=false; "Te quitas el cinturón de seguridad."; ], has masculino estatico; objeto_coche habitaculo "habitáculo" with nombre 'habitaculo' 'interior', esta_en ciudad carretera, descripcion "Ves el interior del habitáculo del coche, hay lo que suele haber en los coches: un volante, unos asientos, algunas palancas, etc."; ! Marcha -------------------------------------------------------------------- objeto_coche marcha "marcha" ! objeto pseudo-inmaterial, sirve tanto with ! para verbos como 'iniciar marcha' nombre_f 'marcha', ! como para el cambio de marchas nombre_fp 'marchas', nombre_m 'numero', genero G_FEMENINO, num 0, ! número de marcha esta_en coche, descripcion [; if (coche.nojugador()) return true; print "Vas en ",(ordinalm) self.num,".^"; ], antes [; iniciar,arrancar: <>; frenar: <>; parar,cortar: <>; cambiar,metersolo,meterord: if (coche.nojugador()) return true; "Para cambiar de marcha debes subir o bajar el número de marcha. [Ya tengo previsto hacer que entienda cosas como: meter primera, meter tercera marcha, meter la marcha atrás]."; subir: if (coche.nojugador()) return true; if (self.rascar()) return true; if (self.num==5) "Ya vas en quinta, la marcha más larga."; self.num++; if (self.comprobar) "Subes una marcha, ahora vas en ",(ordinalm) self.num,"."; coche.velocidad=1; ; give coche ~general; "Subes una marcha y el coche se te queda calado y se para."; bajar: if (coche.nojugador()) return true; if (self.rascar()) return true; if (self.num==0) "Ya vas en punto muerto."; self.num--; if (self.comprobar) { print "Bajas una marcha, ahora vas en ",(ordinalm) self.num,".^"; return true; } print "^Bajas una marcha y el coche ahora queda tan revolucionado que el régimen de vueltas para el pequeño diésel es demasiado, asi que el 60 CV se gripa y se queda más tieso que el carrito de Tracy en la Interestatal 0.^"; profesor.hasroto(); banderafin=3; return true; ], comprobar ! comprueba si la marcha es adecuada a la velocidad [; switch (self.num) { 1:if (coche.velocidad>20) return false; return true; 2:if (coche.velocidad>40 || coche.velocidad<10) return false; return true; 3:if (coche.velocidad>70 || coche.velocidad<30) return false; return true; 4:if (coche.velocidad>100 || coche.velocidad<50) return false; return true; 5:if (coche.velocidad<70) return false; return true; } ], private rascar [; if (pedalem hasnt general && coche has general) "Vas cambiar de marcha pero la caja de cambios hace un ruido muy feo al intentarlo."; return false; ], has estatico; ! Izquierda y derecha ----------------------------------------------------- objeto izq with nombre 'izquierda', esta_en carretera ciudad, antes [; girar: <>; default: "No veo eso que dices."; ], has oculto femenino; objeto der with nombre 'derecha', esta_en carretera ciudad, antes [; girar: <>; default: "No veo eso que dices."; ], has oculto femenino; objeto cambio with esta_en ciudad carretera, cada_turno [; if (random(0,0,0,1) && localizacion==ciudad && coche.km>30 && (~~(self.novolver))) { style bold; print "^^Has recorrido ya algunos kilómetros asi que sales de la urbe, sobrepasas sus afueras.^^"; style roman; self.novolver=true; jugadorA(carretera,1); localizacion=carretera; jugadorA(coche); } if (localizacion==carretera && coche.km>120 && (~~(self.avisado))) { self.avisado=true; "^En la carretera ves una señal de población próxima, a unos 20 kms."; } if (random(0,0,0,1) && localizacion==carretera && coche.km>130) { style bold; print "^^Después de un ratito en conducción por carretera vuelves a la gran ciudad.^^"; style roman; jugadorA(ciudad,1); localizacion=ciudad; jugadorA(coche); } ], private avisado false, novolver false; ! Funciones -------------------------------------------------------------- [ dibujarlineaestado ancho anchomenos; @split_window 1; @set_window 1; @set_cursor 1 1; ancho=0->33; style reverse; spaces(ancho); @set_cursor 1 1; print " B1"; anchomenos=ancho-35; @set_cursor 1 anchomenos; print "Velocidad: ",coche.velocidad," km/h ",(ordinalm) marcha.num; style roman; @set_window 0; ]; [ puntuacionsub; print "Has recorrido ",coche.km," kilómetros.^"; ]; [ mensajemuerte; print "S'acabó, por ahora, porque este juego no es muy lineal, asi que puedes volver a jugar si quieres^^"; ]; [ ordinalm n; switch (n) { 0:print "punto muerto"; return; 1:print "primera"; 2:print "segunda"; 3:print "tercera"; 4:print "cuarta"; 5:print "quinta"; } print " marcha"; ]; [ nivel n; if (n>106) "mucha."; if (n>53) "media."; if (n>5) "poca."; "¡usando la reserva!"; ]; [ calor n; switch (n) { 0:"el coche está aun frío."; 1:"normal."; 2:"alta."; 3:"¡muy alta!"; } ]; [ estado_testigos a; if (coche.&testigos-->0) { print "^ Problema de aceite."; a=0; } if (coche.&testigos-->1) { print "^ Batería baja."; a=0; } if (coche.&testigos-->2) { print "^ Freno de mano puesto."; a=0; } if (coche.&testigos-->3) { print "^ Luz larga encendida."; a=0; } if (coche.&testigos-->4) { print "^ Algún intermitente encendido."; a=0; } if (a) "todos apagados."; print "^"; ]; [ local; ]; [ inicializar; introduccion(); localizacion=ciudad; print "^"; ]; [ introduccion a; print "^B1, el título de esta breve-aventura hace referencia al permiso de conducción de vehículos a motor de hasta 3500 kg, pues si, esta aventura te integra en el coche de autoescuela, después de haber pasado exámenes teóricos y un montón de prácticas, llegó el momento de la verdad, el día del exámen práctico. Tu ardua misión consistirá en aprobar dicho exámen tan temido, ya me contareis si habeis aprobado a la primera o a la segunda o a la tercera, o quien sabe... :-)^^ Una sugerencia: Haced lo que harías si estuvierais conduciendo.^^ Pulsa cualquier tecla para seguir.^"; @read_char 1 0 0 a; @erase_window -1; ]; verboirregular "poner" with imperativo "pon"; include "Gramatica"; ! Gramática propia -------------------------------------------------------- ! como alguien me diga que "no entiende una mierda" le hago una sepultura ! con toda esta gramática: ;-))) verb 'arranca' * -> arrancar * noun -> arrancar; [ arrancarsub; if (uno==nothing) <>; if (objetoesintocable(uno)) return; print "¿Para qué quieres arrancar eso?^"; ]; extend 'pon' first * 'en' 'marcha' -> ponerenmarcha * 'en' 'marcha' noun -> ponerenmarcha * noun 'en' 'marcha' -> ponerenmarcha * noun -> poner; [ ponerenmarchasub; if (uno==nothing) <>; if (objetoesintocable(uno)) return; print "Eso no tiene mucho sentido ponerlo en marcha.^"; ]; [ ponersub; print "No tiene sentido poner eso.^"; ]; extend 'enciende' first * noun -> encender; verb 'inicia' 'emprende' * noun -> iniciar; [ iniciarsub; if (uno==nothing) <>; if (objetoesintocable(uno)) return; "Eso no puede iniciarse."; ]; verb 'conduce' * -> conducir * noun -> conducir; [ conducirsub; if (uno==nothing) <>; if (objetoesintocable(uno)) return; "Eso no se puede conducir."; ]; verboirregular "conducir" with imperativo 'conduce'; extend 'mueve' first * noun -> mover; [ moversub; print "Eso no lo puedes mover.^"; ]; verb 'acelera' * -> acelerar * noun -> acelerar; [ acelerarsub; if (uno==nothing) <>; if (objetoesintocable(uno)) return; "Eso no se puede acelerar."; ]; verb 'pisa' 'presiona' * noun -> pisar; extend 'pulsa' first * noun -> pisar; extend 'aprieta' first * noun -> pisar; [ pisarsub; if (objetoesintocable(uno)) return; print "No entiendo porqué quieres presionar eso.^"; ]; verb 'para' 'deten' * -> parar * noun -> parar; verboirregular "detener" with imperativo 'deten'; [ pararsub; if (uno==nothing) <>; if (objetoesintocable(uno)) return; "No tiene sentido parar eso."; ]; verb 'frena' 'aminora' 'reduce' * -> frenar * noun -> frenar; [ frenarsub; if (uno==nothing) <>; if (objetoesintocable(uno)) return; "No tiene sentido frenar eso."; ]; extend 'gira' * 'a'/'hacia' noun -> girar * noun 'izquierda' -> girarizquierda * noun 'a'/'hacia' 'izquierda' -> girarizquierda * noun 'a'/'hacia' 'la' 'izquierda' -> girarizquierda * noun 'derecha' -> girarderecha * noun 'a'/'hacia' 'derecha' -> girarderecha * noun 'a'/'hacia' 'la' 'derecha' -> girarderecha * 'izquierda' noun -> girarizquierda * 'a'/'hacia' 'izquierda' noun -> girarizquierda * 'a'/'hacia' 'la' 'izquierda' noun -> girarizquierda * 'derecha' noun -> girarderecha * 'a'/'hacia' 'derecha' noun -> girarderecha * 'a'/'hacia' 'la' 'derecha' noun -> girarderecha; extend 'tuerce' * 'a'/'hacia' noun -> girar * noun 'izquierda' -> girarizquierda * noun 'a'/'hacia' 'izquierda' -> girarizquierda * noun 'a'/'hacia' 'la' 'izquierda' -> girarizquierda * noun 'derecha' -> girarderecha * noun 'a'/'hacia' 'derecha' -> girarderecha * noun 'a'/'hacia' 'la' 'derecha' -> girarderecha * 'izquierda' noun -> girarizquierda * 'a'/'hacia' 'izquierda' noun -> girarizquierda * 'a'/'hacia' 'la' 'izquierda' noun -> girarizquierda * 'derecha' noun -> girarderecha * 'a'/'hacia' 'derecha' noun -> girarderecha * 'a'/'hacia' 'la' 'derecha' noun -> girarderecha; [ girarizquierdasub; print "Eso no puedes girarlo a la izquierda.^"; ]; [ girarderechasub; print "Eso no puedes girarlo a la derecha.^"; ]; verb 'contravolantea' * -> contravolantear * noun -> contravolantear; verb 'haz' * 'contravolante' -> contravolantear * 'contravolante' noun -> contravolantear * 'contravolante' 'con' noun -> contravolantear * 'contravolanteo' -> contravolantear * 'contravolanteo' noun -> contravolantear * 'contravolenteo' 'con' noun -> contravolantear * 'con' 'el' 'control' 'de' noun -> controlar * noun -> usar; verboirregular "hacer" with imperativo 'haz'; [ contravolantearsub; if (uno==nothing) <>; if (objetoesintocable(uno)) return; print "¿Como vas a usar esa técnica de conducción con eso?^"; ]; verb 'controla' * noun -> controlar; [ controlarsub; print "Tu sabrás si controlas eso.^"; ]; extend 'sal' first * 'por' noun -> salirse; verb 'activa' * noun -> activar; verb 'acciona' * noun -> activar; [ activarsub; print "Eso no puedes activarlo.^"; ]; verb 'desactiva' * noun -> desactivar; verb 'desacciona' * noun -> desactivar; [ desactivarsub; print "Eso no puedes desactivarlo.^"; ]; extend 'quita' first * noun -> quitar; [ quitarsub; print "Eso no puedes quitarlo.^"; ]; extend 'puntuacion' replace * -> punt; [ puntsub; print "No conozco ese verbo.^"; ]; verb 'abrocha' 'abrochate' 'abrocharte' 'abrocharme' * noun -> abrochar; [ abrocharsub; print "Eso no se puede abrochar.^"; ]; verb 'desabrocha' * noun -> desabrochar; [ desabrocharsub; print "Eso no se puede desabrochar.^"; ]; extend 'ponte' first * noun -> ponerte; verb 'ponme' 'ponerme' * noun -> ponerte; [ ponertesub; print "No te puedes poner eso.^"; ]; extend 'quitate' first * noun -> quitarte; verb 'quitame' 'quitarme' * noun -> quitarte; [ quitartesub; print "No te puedes quitar eso.^"; ]; extend 'suelta' * noun -> soltar; verb 'libera' * noun -> soltar; [ soltarsub; print "Eso no tiene sentido soltarlo.^"; ]; verb 'embraga' * -> embragar * noun -> embragar; [ embragarsub; if (uno==nothing) <>; if (objetoesintocable(uno)) return; "No tiene sentido embragar eso."; ]; verb 'desembraga' * -> desembragar * noun -> desembragar; [ desembragarsub; if (uno==nothing) <>; if (objetoesintocable(uno)) return; "No tiene sentido desembragar eso."; ]; extend 'cambia' first * 'de' noun -> cambiar * noun -> cambiar; [ cambiarsub; if (objetoesintocable(uno)) return; "No tiene sentido cambiar eso."; ]; extend 'sube' first * 'de' noun -> subir * noun -> subir; extend 'baja' first * 'de' noun -> bajar * noun -> bajar; verb 'usa' * noun -> usar; [ usarsub; "Tendrás que especificar mejor cómo quieres hacer o usar eso."; ]; extend 'mete' first * 'primera' -> meterord * 'segunda' -> meterord * 'tercera' -> meterord * 'cuarta' -> meterord * 'quinta' -> meterord * 'primera' noun -> meterord * 'segunda' noun -> meterord * 'tercera' noun -> meterord * 'cuarta' noun -> meterord * 'quinta' noun -> meterord !* noun 'primera' -> meterord ! PROBLEMA: compilando con debugger !* noun 'segunda' -> meterord ! con opcion necesaria MAX_VERBS>140 !* noun 'tercera' -> meterord ! si descomento estas líneas !* noun 'cuarta' -> meterord ! peta el compilador (da violancion !* noun 'quinta' -> meterord ! de segmento [en Linux]) !* 'punto' 'muerto' -> meterord * noun -> metersolo; [ meterordsub; if (uno==nothing) <>; "No entiendo lo que quieres meter."; ]; [ metersolosub; print "A lo mejor quieres meter eso en algún sitio, pero no dices dónde.^"; ]; verb 'aparca' * -> aparcar * 'en' noun -> aparcaren * noun -> aparcar; [ aparcarsub; if (uno==nothing) <>; if (objetoesintocable(uno)) return; "Eso no se puede aparcar."; ]; [ aparcarensub; print "Ahí no puedes aparcar.^"; ]; extend 'saca' first * noun 'de' noun -> sacar; verb 'desnuda' * -> desnudar; [ desnudarsub; ; ];