A mystery-detective game made in a 9-member team as part of Studio Centauri, the game development society of IIT Kanpur. The game was developed for BYOG Game Jam 2021, a 3-day game jam organized by Gamedev.in, a community of Indian game developers. The theme of the game jam that we used was “2 views”.
Who Done It? is a detective game where you dig into a murder case with differing points of view. There are 2 major witnesses to the murder, both of whom tell a different story. You have to look for clues, listen to witness testimonies for said clues, and piece-together what truly happened that fateful night!
Work done as part of the development process included:
// ClickManager.cs void Update() { if (Input.GetMouseButtonDown(0) && canClick) { Ray mRay = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(mRay, out hit, maxDistance, layerMask)) { Debug.Log(hit.collider.gameObject.name + " " + hit.point); if (hit.collider.gameObject.tag == "Ground") { player.GetComponent<PlayerMovement>().MovePlayer(hit.point); } else if (hit.collider.gameObject.tag == "Witness") { player.GetComponent<PlayerMovement>().MoveToTarget(hit.point); canClick = false; dialogueNPC = hit.collider.gameObject; } else if (hit.collider.gameObject.tag == "clue") { canClick = false; clueObject = hit.collider.transform.gameObject; Vector3 point = hit.point; point.y = 0; player.GetComponent<PlayerMovement>().MoveToTarget(point, true); } } } }
// CameraMovement.cs void FollowTarget() { Vector3 direction = lookObject.transform.position - player.transform.position; direction.Normalize(); Vector3 desiredForward = Vector3.Lerp(transform.forward, direction, moveFactor); Vector3 up = Vector3.up; Vector3 forward = desiredForward; Vector3 right = Vector3.Cross(up, forward); up = Vector3.Cross(forward, right); Vector3 desiredPos = player.transform.position + forward * dialogueOffset.z + up * dialogueOffset.y + right * dialogueOffset.x; transform.position = Vector3.Lerp(transform.position, desiredPos, moveFactor / 2.0f); transform.forward = Vector3.Lerp(transform.forward, (lookObject.transform.position - transform.position).normalized, moveFactor); } void SetupAR() { Vector2 currentRes = new Vector2(Screen.width, Screen.height); Vector2 targetRes = currentRes; if ((dialogueAR.x / dialogueAR.y) > (currentRes.x / currentRes.y)) { targetRes.y = (targetRes.x / dialogueAR.x) * dialogueAR.y; } else { targetRes.x = (targetRes.y / dialogueAR.y) * dialogueAR.x; } Vector2 offset = ((currentRes - targetRes) / currentRes) / 2.0f; offset = Vector2.Lerp(new Vector2(Camera.main.rect.x, Camera.main.rect.y), offset, moveFactor); targetRes /= currentRes; targetRes = Vector2.Lerp(new Vector2(Camera.main.rect.width, Camera.main.rect.height), targetRes, moveFactor); Camera.main.rect = new Rect(offset.x, offset.y, targetRes.x, targetRes.y); }