CHAPUZAS DE ÚLTIMA HORA
Interesantísimo artículo en Gamasutra acerca de las «guarradas» de código que varios programadores confiesan haber tenido que realizar debido a que la fecha límite de entrega se les echaba encima y no eran capaces de programar la solución realmente adecuada. Hay algunos buenísimos, como este.
Now, the PS1 has no support for floating point numbers, so we were doing the conversion by basically recompiling the PC code and overloading all floats with fixed point. That actually worked fairly well, but were it fell apart was in collision detection.
The level geometry that was supplied to us worked reasonably well in the PC version of the game, but when converted to fixed point, all kinds of seams, T-Junctions and other problems were nudged into existence by the microscopic differences in values between fixed and floats. This problem would manifest itself by the main character (called «Damp») simply falling through those tiny holes, into the abyss below the level.
We patched the holes we found, tweaking the geometry until Damp no longer fell through. But then the game went into test at the publisher, and suddenly a flood of «falling off the world» bugs were delivered to us. Every day a fresh batch of locations were found with these little holes that Damp could slip through. We would fix that bit of geometry, then the next day they would send us ten more. This went on for several days. The publisher’s test department employed one guy whose only job was to jump around the world for ten hours a day, looking for places he could fall through.
The problem here was that the geometry was bad. It was not tight and seamless geometry. It worked on the PC, but not on the PS1, where the fixed point math vastly magnified the problems. The ideal solution was to fix the geometry to make it seamless.
However, this was a vast task, impossible to do in the time available with our limited resources, so we were relying on the test department to find the problem areas for us.
The problem with that approach was that they never stopped finding them. Every day bought more pain. Every day new variants of the same bug. It seemed like it would never end.
Eventually the penny dropped. The real problem was not that the geometry had small holes in it. The problem was that Damp fell through those holes. With that in mind, I was able to code a very quick and simple fix that looked something like:
IF (Damp will fall through a hole()) THEN
Don’t do it
Traducción Ajare: En el port de un juego de PC a Ps1, el jugador se caía al abismo debajo del mapa del juego, producto de una reconversión guarra de la geometría de los mapas al parecer debido a la falta de unidad de coma flotante de la antigua consola de Sony. Tras pasarse meses tapando «bujeros» uno a uno, no dejaban de salir cientos y cientos de zonas en las que el jugador se caía. Finalmente la solución fue (resumida) a un par de líneas de código:
if (jugador se cae del escenario)
then (que no se caiga)
LOL Tienen el artículo aquí