Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
98924f1
lobby init
GameTortoise Sep 12, 2026
98e9501
baked lighting
GameTortoise Sep 12, 2026
b1ca006
transition to 2d
GameTortoise Sep 12, 2026
35f0a40
reorg
GameTortoise Sep 13, 2026
8515f9c
foldering
GameTortoise Sep 13, 2026
b2d806d
prelim paint editor
GameTortoise Sep 13, 2026
d9d28ca
paint editor
GameTortoise Sep 13, 2026
7e9fd23
black pen only for wheels
GameTortoise Sep 13, 2026
800ec06
wheels from art
GameTortoise Sep 13, 2026
be5df66
car from wheels
GameTortoise Sep 14, 2026
d132b72
Merge pull request #1 from GameTortoise/car-game
GameTortoise Sep 14, 2026
c3eba07
removing friendslop bs
GameTortoise Sep 14, 2026
1a9c286
Merge branch 'dev' of https://github.com/GameTortoise/Motions-In-Moti…
GameTortoise Sep 14, 2026
7be2820
Folders for gamdata & started evd. selec scene
Abhay909 Sep 14, 2026
c7c4215
Added ollies image for evidence 8
Abhay909 Sep 14, 2026
79e159c
Add case data model and sample case
Abhay909 Sep 14, 2026
49d94d2
Create Networking.cs
coopchv Sep 14, 2026
82f84fe
Finished Evidence Selection UI and Basic Functionality 👍
Abhay909 Sep 14, 2026
27915fa
sprite shape graphics and RT car display
GameTortoise Sep 14, 2026
1f36258
RT borders
GameTortoise Sep 14, 2026
81f35d4
RT borders are nice now + courtroom camera
GameTortoise Sep 14, 2026
1d8fe3d
canvas scales w screen size
GameTortoise Sep 14, 2026
b94af19
dotween import
GameTortoise Sep 14, 2026
0ca6cee
all in 1 ss import
GameTortoise Sep 14, 2026
fe44572
Show selected evidence and save selection 👍
Abhay909 Sep 14, 2026
19c82fd
Merge pull request #2 from GameTortoise/plugin-import
GameTortoise Sep 14, 2026
5827b60
new art in
GameTortoise Sep 14, 2026
803c6b7
new art looks good
GameTortoise Sep 15, 2026
d31049a
Added Coopers networking.js
Abhay909 Sep 15, 2026
8177835
Merge branch 'Abhay-evidenceSelectionPage' of https://github.com/Game…
GameTortoise Sep 15, 2026
21ac7b6
Merge branch 'dev' into car-game
Abhay909 Sep 15, 2026
a687724
IM GONNA CUMMMM
GameTortoise Sep 15, 2026
7a75d9a
new frame and restructuring
GameTortoise Sep 15, 2026
ae2f6c7
Merge branch 'dev' into bringing-in-art
GameTortoise Sep 15, 2026
83c6184
Merge pull request #3 from GameTortoise/bringing-in-art
GameTortoise Sep 15, 2026
7a9d7d5
Merge pull request #4 from GameTortoise/car-game
coopchv Sep 15, 2026
ed4bdc4
art import
GameTortoise Sep 15, 2026
1d1ce6c
Merge branch 'dev' into Abhay-evidenceSelectionPage
coopchv Sep 15, 2026
9187af4
Merge pull request #5 from GameTortoise/Abhay-evidenceSelectionPage
coopchv Sep 15, 2026
5b4ef86
Merge branch 'dev' into bringing-in-art
GameTortoise Sep 15, 2026
adb7a84
PARALLAX!
GameTortoise Sep 15, 2026
2378b26
CARS!
GameTortoise Sep 15, 2026
2558e2c
networked cars
GameTortoise Sep 15, 2026
b186bb9
codex fix 1
GameTortoise Sep 15, 2026
91b1e49
fix 2
GameTortoise Sep 15, 2026
5e6f820
FRFR maybe
GameTortoise Sep 15, 2026
9bbc1c3
fix..?
GameTortoise Sep 16, 2026
6bad50e
blind commit deep three pleaseee
GameTortoise Sep 16, 2026
84ae24b
Added case 2
Abhay909 Sep 16, 2026
74df749
I LOOKED AT IT MYSELF AND DIRECTED THE AGENT FROM THERE... DID I CLUT…
GameTortoise Sep 16, 2026
5349e58
9 in the lobby
GameTortoise Sep 16, 2026
e2e4270
Added Random Case selection Scene 👍
Abhay909 Sep 16, 2026
8ba1648
Merge branch 'Abhay-evidenceSelectionPage' into car-game
GameTortoise Sep 16, 2026
8dcfc16
Merge pull request #6 from GameTortoise/car-game
GameTortoise Sep 16, 2026
83e16e5
Added Description Text to Case Selection Scene
Abhay909 Sep 16, 2026
1a0700b
Merge branch 'Abhay-evidenceSelectionPage' of https://github.com/Game…
Abhay909 Sep 16, 2026
1ad868e
steph curry from the moon PLEEEEEEEEEASSSSSSSSEEEEEEEEEE
GameTortoise Sep 16, 2026
1faec78
Case Descirption text update
Abhay909 Sep 16, 2026
d37dfca
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
GameTortoise Sep 16, 2026
4bc8f4a
Merge branch 'Abhay-evidenceSelectionPage' of https://github.com/Game…
GameTortoise Sep 16, 2026
1fdc8fe
if this doesn't work, i shall kill myself
GameTortoise Sep 16, 2026
9159ef9
idk what acuallly happened in this commit lol
Abhay909 Sep 16, 2026
5f025f9
Merge branch 'Abhay-evidenceSelectionPage' of https://github.com/Game…
Abhay909 Sep 16, 2026
1a14da6
Updating constrant count to allow 5x2
Abhay909 Sep 16, 2026
7907d0b
larger car RTs
GameTortoise Sep 16, 2026
c16c617
art import
GameTortoise Sep 16, 2026
015776e
Merge branch 'Abhay-evidenceSelectionPage' of https://github.com/Game…
GameTortoise Sep 16, 2026
78c07aa
goobers in game
GameTortoise Sep 16, 2026
fe1216a
Player vs host evidence selection updates and create ur own evidence
Abhay909 Sep 16, 2026
5e525c2
Merge branch 'Abhay-evidenceSelectionPage' of https://github.com/Game…
GameTortoise Sep 16, 2026
f4bde72
goobers on spawn
GameTortoise Sep 16, 2026
75bbf8b
revert badness and hope for goodness
GameTortoise Sep 16, 2026
b7bd9f1
2p devpanel
GameTortoise Sep 16, 2026
29f0a05
Revert "revert badness and hope for goodness"
GameTortoise Sep 16, 2026
d959f33
host fix?
GameTortoise Sep 16, 2026
28f265c
tutorial buttons
GameTortoise Sep 16, 2026
613ba19
audio
Abhay909 Sep 16, 2026
e8a9986
impors
GameTortoise Sep 16, 2026
db50d3d
Merge branch 'Newbranchfixed' of https://github.com/GameTortoise/Moti…
GameTortoise Sep 16, 2026
65a50dd
title
GameTortoise Sep 16, 2026
382ec38
new splines!
GameTortoise Sep 16, 2026
6f263ec
most things done
GameTortoise Sep 16, 2026
5440b9e
everything theoretically done?
GameTortoise Sep 16, 2026
f4a3783
car scene graphics upgrade (cam)
GameTortoise Sep 16, 2026
98d9a33
mainmenu fix
GameTortoise Sep 16, 2026
8639526
BG import
GameTortoise Sep 16, 2026
fa9b1e3
fontfix
GameTortoise Sep 16, 2026
e2e8d80
patch for test
GameTortoise Sep 16, 2026
89ef723
build
GameTortoise Sep 16, 2026
7b68d56
fixed splines
Abhay909 Sep 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 6 additions & 0 deletions .vsconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"version": "1.0",
"components": [
"Microsoft.VisualStudio.Workload.ManagedGame"
]
}
8 changes: 8 additions & 0 deletions Assets/Audio.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file added Assets/Audio/AcidFastSongforJam0dot2.wav
Binary file not shown.
23 changes: 23 additions & 0 deletions Assets/Audio/AcidFastSongforJam0dot2.wav.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file added Assets/Audio/CamsAmazingSongJAckboxJam0dot3.wav
Binary file not shown.
23 changes: 23 additions & 0 deletions Assets/Audio/CamsAmazingSongJAckboxJam0dot3.wav.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file added Assets/Audio/CongoObjectionBeat0dot4.wav
Binary file not shown.
23 changes: 23 additions & 0 deletions Assets/Audio/CongoObjectionBeat0dot4.wav.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file not shown.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file not shown.
23 changes: 23 additions & 0 deletions Assets/Audio/MakingEvidenceSongJackboxJamv0dot2.wav.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file added Assets/Audio/lobbymenusong0dot7.wav
Binary file not shown.
23 changes: 23 additions & 0 deletions Assets/Audio/lobbymenusong0dot7.wav.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions Assets/Editor.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

152 changes: 152 additions & 0 deletions Assets/Editor/CourtProjectBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
using System;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.U2D;
using TMPro;

public static class CourtProjectBuilder
{
private static T Asset<T>(string path) where T : UnityEngine.Object => AssetDatabase.LoadAssetAtPath<T>(path);
private static Sprite Sprite(string path) => AssetDatabase.LoadAllAssetsAtPath(path).OfType<Sprite>().First();
[MenuItem("Court/Build Court Assets and Validate")]
public static void Build()
{
Directory.CreateDirectory("Assets/Resources");
var assets = Asset<CourtAssets>("Assets/Resources/CourtAssets.asset");
if (assets == null) { assets = ScriptableObject.CreateInstance<CourtAssets>(); AssetDatabase.CreateAsset(assets,"Assets/Resources/CourtAssets.asset"); }
assets.hideFlags |= HideFlags.DontUnloadUnusedAsset;
assets.cases = AssetDatabase.FindAssets("t:CaseData",new[]{"Assets/GameData"}).Select(AssetDatabase.GUIDToAssetPath).OrderBy(p=>p).Select(Asset<CaseData>).ToArray();
assets.paper = Sprite("Assets/Sprites/white-crumpled-paper-texture-background_1373-162.png");
assets.wood = Sprite("Assets/Sprites/wood_table_worn_diff_4k.jpg");
assets.goobers = AssetDatabase.FindAssets("t:Texture2D",new[]{"Assets/Sprites/Goobers"}).Select(AssetDatabase.GUIDToAssetPath).OrderBy(p=>p).Select(Sprite).ToArray();
assets.bodyFont = Asset<TMP_FontAsset>("Assets/Fonts/Embolism Spark.asset");
assets.titleFont = Asset<TMP_FontAsset>("Assets/Fonts/Rockybilly.asset");
assets.legacyFont = Asset<Font>("Assets/Fonts/Embolism Spark.ttf");
assets.opening = Asset<AudioClip>("Assets/Audio/CamsAmazingSongJAckboxJam0dot3.wav");
assets.middle = Asset<AudioClip>("Assets/Audio/MainGameLoopSongGameJamLaywerSongButCouldBeSwitchedForEvidenceSong.wav");
assets.finale = Asset<AudioClip>("Assets/Audio/AcidFastSongforJam0dot2.wav");
assets.objection = Asset<AudioClip>("Assets/Audio/CongoObjectionBeat0dot4.wav");
assets.lobby = Asset<AudioClip>("Assets/Audio/lobbymenusong0dot7.wav");
assets.evidenceCard = Asset<GameObject>("Assets/Prefabs/EvidenceCard.prefab");
assets.playerPrefab = Asset<GameObject>("Assets/Prefabs/FreeCamPlayer.prefab");
var original = EditorSceneManager.GetSceneManagerSetup();
try
{
var evidenceScene = EditorSceneManager.OpenScene("Assets/Scenes/evidenceSelection.unity");
var board = UnityEngine.Object.FindAnyObjectByType<EvidenceSelectionUI>();
var canvas = board.evidenceContainer.GetComponentInParent<Canvas>();
assets.evidenceBackground = GameObject.Find("BG").GetComponent<SpriteRenderer>().sprite;
// Reuse the actual evidence scene canvas, preserving its grid, title and layout.
var copy = UnityEngine.Object.Instantiate(canvas.gameObject);
var copyBoard = copy.AddComponent<EvidenceSelectionUI>();
copyBoard.evidenceContainer = copy.GetComponentsInChildren<Transform>(true).First(t=>t.name == board.evidenceContainer.name);
copyBoard.evidenceCardPrefab = assets.evidenceCard;
copyBoard.stickyNoteSprites = board.stickyNoteSprites;
copyBoard.enabled = false;
assets.evidenceCanvas = PrefabUtility.SaveAsPrefabAsset(copy,"Assets/Prefabs/CourtEvidenceCanvas.prefab");
UnityEngine.Object.DestroyImmediate(copy);
EditorSceneManager.OpenScene("Assets/Scenes/CaseSelection.unity");
if (UnityEngine.Object.FindAnyObjectByType<PurrNet.NetworkManager>() == null)
PrefabUtility.InstantiatePrefab(Asset<GameObject>("Assets/Externals/GameJam/Prefabs/SessionManager Jam.prefab"));
if (UnityEngine.Object.FindAnyObjectByType<PurrNet.PlayerSpawner>() == null)
{
var spawner = new GameObject("Court Player Spawner").AddComponent<EvidencePlayerSpawner>();
var serialized = new SerializedObject(spawner);
serialized.FindProperty("_playerPrefab").objectReferenceValue = assets.playerPrefab;
serialized.ApplyModifiedPropertiesWithoutUndo();
}
EditorSceneManager.MarkSceneDirty(UnityEngine.SceneManagement.SceneManager.GetActiveScene());
EditorSceneManager.SaveOpenScenes();
EditorSceneManager.OpenScene("Assets/Scenes/MainGame.unity");
var terrainShapes = UnityEngine.Object.FindObjectsByType<SpriteShapeController>(FindObjectsSortMode.None);
if (terrainShapes.Length != 2) throw new Exception("Expected two terrain tracks.");
foreach (var shape in terrainShapes)
{
if (shape.transform.Find("FinishLine") != null) continue;
var cars = UnityEngine.Object.FindObjectsByType<CarDrawingWheelInstaller>(FindObjectsSortMode.None);
var car = cars.OrderBy(c=>Vector3.Distance(c.transform.position,shape.transform.position)).First();
// Finish at the far end of the authored terrain, opposite the starting chassis.
var points = Enumerable.Range(0,shape.spline.GetPointCount()).Select(i=>shape.transform.TransformPoint(shape.spline.GetPosition(i))).ToArray();
float min = points.Min(p=>p.x), max = points.Max(p=>p.x);
float x = Mathf.Abs(car.transform.position.x-min) > Mathf.Abs(car.transform.position.x-max) ? min + .5f : max - .5f;
var line = new GameObject("FinishLine",typeof(BoxCollider2D),typeof(CourtFinishLine));
line.transform.SetParent(shape.transform,true);
line.transform.position = new Vector3(x,points.Max(p=>p.y),shape.transform.position.z);
var collider = line.GetComponent<BoxCollider2D>(); collider.isTrigger = true; collider.size = new Vector2(1,40);
}
EditorSceneManager.MarkSceneDirty(UnityEngine.SceneManagement.SceneManager.GetActiveScene());
EditorSceneManager.SaveOpenScenes();
var scenes = EditorBuildSettings.scenes.ToList();
if (!scenes.Any(s=>s.path.EndsWith("CaseSelection.unity"))) scenes.Insert(1,new EditorBuildSettingsScene("Assets/Scenes/CaseSelection.unity",true));
EditorBuildSettings.scenes = scenes.ToArray();
assets.hideFlags &= ~HideFlags.DontUnloadUnusedAsset;
EditorUtility.SetDirty(assets); AssetDatabase.SaveAssets();
Validate();
}
catch (Exception error) { Debug.LogException(error); throw; }
finally { if (original.Any(s => s.isLoaded && s.isActive)) EditorSceneManager.RestoreSceneManagerSetup(original); }
}
public static void Validate()
{
var assets = CourtAssets.Load();
if (assets == null || assets.cases.Length == 0 || assets.cases.Any(c=>c.evidence.Count < 2) ||
assets.evidenceCanvas == null || assets.evidenceCard == null || assets.objection == null ||
assets.bodyFont == null || assets.titleFont == null || assets.paper == null || assets.wood == null)
throw new Exception("Court assets are incomplete.");
if (TrialRules.Role(0) != PlayerType.Judge || TrialRules.Role(1) != PlayerType.Prosecutor || TrialRules.Role(2) != PlayerType.Defendant)
throw new Exception("Role assignment failed.");
float[] boundaries = {0,240,480,720,960,1020,1080,1140};
for (int i=0;i<boundaries.Length;i++)
{
if (TrialRules.Turn(boundaries[i]) != i || TrialRules.Turn(TrialRules.TurnEnd(i)-.01f) != i ||
TrialRules.Team(i) != (i%2==0?PlayerType.Prosecutor:PlayerType.Defendant)) throw new Exception("Turn schedule failed.");
}
if (TrialRules.TurnEnd(7) != 1200) throw new Exception("Trial length failed.");
for (int i=0;i<10;i++)
if (TrialRules.OwnsEvidence(PlayerType.Prosecutor,i) == TrialRules.OwnsEvidence(PlayerType.Defendant,i)) throw new Exception("Evidence partition failed.");
Debug.Log("COURT VALIDATION PASSED");
}
[MenuItem("Court/Build WebGL Submission")]
public static void BuildWebGL()
{
Validate();
PlayerSettings.productName = "Motions in Motions";
PlayerSettings.WebGL.compressionFormat = WebGLCompressionFormat.Gzip;
PlayerSettings.WebGL.decompressionFallback = true;
PlayerSettings.runInBackground = true;
var report = BuildPipeline.BuildPlayer(EditorBuildSettings.scenes.Where(s=>s.enabled).Select(s=>s.path).ToArray(), "Builds/CourtWebGL", BuildTarget.WebGL, BuildOptions.None);
if (report.summary.result != UnityEditor.Build.Reporting.BuildResult.Succeeded) throw new Exception("WebGL build failed: " + report.summary.result);
}
public static void BuildSmoke()
{
var original = EditorSceneManager.GetSceneManagerSetup();
try
{
EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single);
var source = Asset<GameObject>("Assets/Externals/GameJam/Prefabs/SessionManager Jam.prefab").GetComponent<PurrNet.NetworkManager>();
var root = new GameObject("Smoke Network Manager");
var manager = root.AddComponent<PurrNet.NetworkManager>();
EditorUtility.CopySerialized(source, manager);
var transport = root.AddComponent<PurrNet.Transports.WebTransport>();
transport.serverPort = 15091; transport.address = "127.0.0.1"; transport.enableSSL = false;
manager.transport = transport;
manager.startServerFlags = 0; manager.startClientFlags = 0;
root.AddComponent<CourtSmoke>();
EditorSceneManager.SaveScene(UnityEngine.SceneManagement.SceneManager.GetActiveScene(), "Assets/CourtSmoke.unity");
var paths = new[]{"Assets/CourtSmoke.unity","Assets/Scenes/CaseSelection.unity","Assets/Scenes/MainGame.unity"};
var report = BuildPipeline.BuildPlayer(paths, "Builds/CourtSmoke/CourtSmoke.exe", BuildTarget.StandaloneWindows64, BuildOptions.Development);
if(report.summary.result != UnityEditor.Build.Reporting.BuildResult.Succeeded) throw new Exception("Smoke player build failed.");
}
catch (Exception error) { Debug.LogException(error); throw; }
finally { if (original.Any(s => s.isLoaded && s.isActive)) EditorSceneManager.RestoreSceneManagerSetup(original); }
}
public static void BuildFinalSmoke()
{
Build();
BuildSmoke();
}
}
2 changes: 2 additions & 0 deletions Assets/Editor/CourtProjectBuilder.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading