Un script generalmente es una pieza de código que se ejecuta fuera de su motor central. Por lo general, está contenido en archivos de texto donde desee guardarlos. Luego, el motor lo carga, analiza y ejecuta en tiempo de ejecución.
Lo que generalmente sucede es que, sea cual sea el lenguaje que use (Lua, Angelscript, por ejemplo), este lenguaje generalmente tiene algunas facilidades que permiten al programador del motor exponer las funciones del motor o incluso clases completas a la instancia del "motor de secuencias de comandos" que se está ejecutando actualmente .
Por ejemplo (ejemplo totalmente estúpido, pero solo para entender) su código de juego podría tener una función pública que genere zombis en algún lugar:
void SpawnZombie(int x, int y, int hp /* whatever else */)
{
//...
}
El lenguaje de secuencias de comandos que utiliza ahora le permite exponer esta función al analizador de secuencias de comandos que se está ejecutando. Esto significa que puede abrir un archivo de texto, escribir "SpawnZombie (200,300,1337)" y una vez que su motor ejecute el código, aparecerá un Zombie en esa ubicación.
Las otras respuestas ya enumeran un par de buenos ejemplos de cómo se usa típicamente, pero omiten un punto que encuentro muy importante:
Este tipo de scripts hace que sea muy fácil depurar o probar el juego durante el tiempo de ejecución.
Digamos que quieres descubrir la manera perfecta de colocar un zombie en el mapa para que tenga el máximo efecto de miedo en el jugador una vez que lo descubre. Sin soporte de secuencias de comandos, tendría que salir de la aplicación, cambiar algunos números mágicos en el código, volver a compilar y probarlo.
Con el soporte de secuencias de comandos (siempre que tenga algún método para ingresar texto durante el tiempo de ejecución, por ejemplo, una consola de depuración), simplemente escriba "SpawnZombie (333,444,555)" y vea cómo se ve.
De la misma manera, es posible que puedas generar armas, vehículos, cargar diferentes mapas, cambiar los valores de algunas cosas en el juego, etc., matar enemigos porque no quieres perder el tiempo llegando a la parte que necesita ser probado etc.
Esto te ahorrará toneladas de veces en juegos más complejos.