Historial de desarrollo de Asalto y castigo [en SuperBASIC, para QDOS y SMSQ/E]

Descripción del contenido de la página

Historial de desarrollo de la versión de la aventura de texto Asalto y castigo [en SuperBASIC, para QDOS y SMSQ/E].

Etiquetas:

En la mayoría de los proyectos suelo escribir los cambios más importantes realizados en el código fuente en cada sesión de trabajo. Esto me sirve para rastrear posibles errores o identificar el contenido de las copias de seguridad fechadas. Además la fecha forma siempre parte del número de versión del programa, de modo que el historial de desarrollo sirve también como referencia de las novedades de cada versión.

2011-03-31

Vim

De las versiones del programa original elijo como punto de partida la de Blassic, aunque también uso los listados de las versiones en Sinclair BASIC (un poco más limitada que las otras dos) y en Locomotive BASIC, para consultar posibles dudas.

El código fuente necesita pocas modificaciones para que el intérprete de SuperBASIC lo acepte. Estas son las primeras:

Y algunos cambios estéticos:

2011-04-04

2011-04-05

2011-04-06

2011-04-07

2011-04-08

2011-04-09

La versión actual del analizador fue creada para aceptar textos con cualquier número de espacios en cualquier posición:

deffn parser(command$)

  loc first_letter,last_letter,command_len

  let first_letter=1
  let last_letter=1
  let command$=command$&" "
  let command_len=len(command$)

  let action=false
  let object=false
  let complement=false

  rep find_word

    if first_letter>=command_len:exit find_word
    rep find_first_letter
      if command$(first_letter)<>" "
        exit find_first_letter
      endif
      let first_letter=first_letter+1
    endrep find_first_letter
    let last_letter=first_letter
    rep find_last_letter
      if command$(last_letter+1)=" "
        exit find_last_letter
      endif
      let last_letter=last_letter+1
    endrep find_last_letter

    parse_word command$(first_letter to last_letter)
    let first_letter=last_letter+2

  endrep find_word

  ret syntax_is_fine

enddef

Pero dado que la función iso_input$ impide ya escribir espacios al inicio del texto, o más de dos seguidos en cualquier otro lugar, el análisis del texto puede ser más sencillo y rápido:

deffn parser(command$)

  loc next_space,command_len

  if command$(len(command$))<>" ":let command$=command$&" "
  let command_len=len(command$)

  let action=false
  let object=false
  let complement=false

  rep find_word
    let next_space=" " instr command$
    parse_word command$(1 to next_space-1)
    if next_space=len(command$):exit find_word
    let command$=command$(next_space+1 to)
  endrep find_word

  ret syntax_is_fine

enddef

2011-04-11

2011-04-20

2011-04-21

2011-04-23

2011-04-24

2011-04-25

2011-04-29

2011-05-03

2011-05-13

2011-05-14

2011-05-24

2011-05-27

2011-05-29

2011-07-05

2011-07-09

2011-07-11

2011-07-12

Detectado un fallo de formateo en la impresión de diálogos: el procedimiento speak comprueba si el texto tiene una comilla de cierre y supone que entonces el texto solo necesita la comilla de apertura, pero esto es cierto solo cuando la aclaración está al final del discurso, no en medio (como es el caso de las palabras del valido):

  if r_quote$ instr quote$
    tell l_quote$&quote$
  else
    let last=len(quote$)
    if quote$(last)="." and quote$(last-1)<>"."
      tell l_quote$&quote$(1 to last-1)&r_quote$&"."
    else
      tell l_quote$&quote$&r_quote$
    endif
  endif

La solución es comprobar que además no hay una comilla de cierre:

  if r_quote$ instr quote$ and not l_quote$ instr quote$
    tell l_quote$&quote$
  else

2011-07-13

Sinómimo para «capa»: «lana».

2011-07-17

Error corregido: el mensaje «Tus hombres luchan con denuedo contra los sajones.» quedaba fuera del flujo porque la condición comprobada inmediatamente antes en el procedimiento plot, la de la persecución de los sajones, salía del procedimiento. Ahora el mensaje se comprueba dentro de la condición de la persecución.

Sinónimos adicionales para la acción de «nadar»: «bañarte» y «zambullirte».

2011-08-13

Errata corregida en un comentario del código.

2016-01-20

Errata corregida en un comentario del programa lanzador.

Páginas relacionadas

Asalto y castigo [en SuperBASIC, para QDOS y SMSQ/E]
Versión de la aventura de texto Asalto y castigo en SuperBASIC, para QDOS y SMSQ/E.
Listados de Asalto y castigo [en SuperBASIC, para QDOS y SMSQ/E]
Listados de la aventura de texto Asalto y castigo [en SuperBASIC, para QDOS y SMSQ/E].