Interstellar Survival
About the Game
Interstellar Survival is a 2D turn-based tactical game consisted of short, simple levels. The player is restricted to a set amount of movement spaces and attacks per turn for each level, creating the challenge of planning a strategy to reach the goal. There are three attacks that can be used against enemies, each with a different effect to give more options for strategy. Find the key and get to the chest in order to advance to the next level!
Developed during the month of April 2020.
Role in Development
- Designer: David Liu, David Knolls, Nathan Glick
- Programmers: David Liu, Nathan Glick, Huadong Zhang, Nicholas Bazos, Elliot Privateer
This was a dual-project for my Gameplay and Prototyping class. The project was first made by a previous team, then handed off to another team to complete the game. I took part in creating most of the levels using a text file level creator made by Nathan Glick, and fixing bugs that was left from the initial project. I also put together a quick dialogue system for the tutorial, as well as simple managers for audio.
Script Examples
TutorialManager.csDialogue.csMusicManager.csSoundManager.csusing System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class TutorialManager : MonoBehaviour { public ListdialogueSequences; // 1 - Intro asking the player for a tutorial // 2 - Explains movement // 3 - Explains end turn // 4 - Explains enemies and objects // 5 - Explains taking damage and attacking // 6 - Explains restoring health and winning the level public GameObject dialogueLose; public GameObject yesButton; public GameObject noButton; public GameObject promptDisplay; public GameObject endTurnButton; public Text restartText; [HideInInspector] public bool canMove; public bool canAttack = false; private TurnManager tm; private int index; // Start is called before the first frame update void Start() { tm = GameObject.Find("Manager").GetComponent (); index = 0; // Determine if the player already went through the tutorial bool first = GameObject.Find("GameData").GetComponent ().firstPlay; if (!first) SkipTutorial(); else GameObject.Find("GameData").GetComponent ().firstPlay = false; canMove = false; canAttack = false; restartText.text = "Next"; } // Update is called once per frame void Update() { } public void FinishDialogue(int i) { index = i; switch (index) { case 1: promptDisplay.SetActive(true); yesButton.SetActive(true); noButton.SetActive(true); break; case 2: tm.StartPlayerTurn(); canMove = true; break; case 3: endTurnButton.SetActive(true); canMove = true; break; case 4: canMove = true; break; case 5: canMove = true; canAttack = true; break; case 6: canMove = true; break; } } #region Event Receivers public void ConfirmTutorial() { yesButton.SetActive(false); noButton.SetActive(false); promptDisplay.SetActive(false); dialogueSequences[1].SetActive(true); } // Loads the next scene in the build index public void SkipTutorial() { RegularUIManager.instance.NextLevel(); } public void OutOfMoves() { if (index == 2) { canMove = false; dialogueSequences[2].SetActive(true); } } public void StartPlayerTurn() { if (restartText.text != "Restart") // Check for if not game over { if (index == 3) { canMove = false; dialogueSequences[3].SetActive(true); } else if (index == 4) { canMove = false; dialogueSequences[4].SetActive(true); } else if (index == 5) { canMove = false; dialogueSequences[5].SetActive(true); } tm.StartPlayerTurn(); } } public void Lost() { Time.timeScale = 1; restartText.text = "Restart"; dialogueLose.SetActive(true); GameObject.Find("GameData").GetComponent ().firstPlay = true; } #endregion }