A game inspired by Ultima Online. Currently in the the early phases of development. Made with Clojure and Unity through Arcadia.
I’ll add a video of the gameplay here soon.
- Unity (last tested with
2019.2.17f1
) - git
These steps only need to be done once.
git clone git@github.com:mpereira/felucca.git
- Open the Unity Hub
- Click
Add
- Select the directory for the git repository root
- Click on the project row, the Unity project will load and open
- Go to
Edit > Project Settings > Player
- Make sure that
Resolution and Presentation > Run In Background*
is checked - Make sure that
Other Settings > Configuration > Scripting Backend
isMono
- Make sure that
Other Settings > Configuration > Api Compatibility Level
is.NET 4.0
Arcadia is a git submodule in Felucca.
git submodule init
git submodule update
Now you should see Arcadia Started!
in the Unity Console. Unity is ready to
run some Clojure!
I’m currently using Emacs with the Miracle package for development, following mostly the instructions in the Arcadia wiki.
My workflow looks like the following:
- Press the “Play” button in Unity to start the game
- Run
M-x miracle
in Emacs and selectarcadia:localhost:3722
- Evaluate files with
miracle-load-file
- Evaluate forms by changing to their namespaces with
miracle-eval-namespace
and then callingmiracle-eval-defun
ormiracle-eval-expression-at-point
- Evaluate buffers with
miracle-eval-buffer
ormiracle-load-file
I have some helpers for developing Felucca in my Emacs configuration.
As of [2019-12-30 Mon] connecting to the nREPL using Cider doesn’t work for me. I get error messages like the one below:
MissingMethodException: Cannot find member split matching args
(wrapper dynamic-method) System.Object.CallSite.Target(System.Runtime.CompilerServices.Closure,System.Runtime.CompilerServices.CallSite,object,object)
(wrapper dynamic-method) System.Object.CallSite.Target(System.Runtime.CompilerServices.Closure,System.Runtime.CompilerServices.CallSite,object,object)
user$eval__6884__6889.__interop_split6891 (System.Object , System.Object __temp_1) (at <87f26d80bb03477db7e8b2a5eaa5becd>:0)
user$eval__6884__6889.invokeStatic () (at <87f26d80bb03477db7e8b2a5eaa5becd>:0)
user$eval__6884__6889.invoke () (at <87f26d80bb03477db7e8b2a5eaa5becd>:0)
clojure.lang.Compiler.eval (System.Object form) (at <fb1204dbf0b848beaab1559f81f1b22c>:0)
clojure$core$eval__22334.invokeStatic (System.Object ) (at <75aedcbf6ad14e4293bea1888c10ab1d>:0)
clojure$core$eval__22334.invoke (System.Object ) (at <75aedcbf6ad14e4293bea1888c10ab1d>:0)
clojure.lang.Var.invoke (System.Object arg1) (at <fb1204dbf0b848beaab1559f81f1b22c>:0)
Arcadia.NRepl+EvalFn.invoke () (at Assets/Arcadia/Editor/NRepl.cs:256)
arcadia$internal$callbacks$run_callbacks__4722.invokeStatic (System.Object , System.Object ) (at <87f26d80bb03477db7e8b2a5eaa5becd>:0)
arcadia$internal$callbacks$run_callbacks__4722.invoke (System.Object , System.Object ) (at <87f26d80bb03477db7e8b2a5eaa5becd>:0)
arcadia$internal$editor_callbacks$run_callbacks__4816.invokeStatic () (at <87f26d80bb03477db7e8b2a5eaa5becd>:0)
arcadia$internal$editor_callbacks$run_callbacks__4816.invoke () (at <87f26d80bb03477db7e8b2a5eaa5becd>:0)
clojure.lang.Var.invoke () (at <fb1204dbf0b848beaab1559f81f1b22c>:0)
Arcadia.EditorCallbacks.RunCallbacks () (at Assets/Arcadia/Editor/EditorCallbacks.cs:24)
UnityEditor.EditorApplication.Internal_CallUpdateFunctions () (at /Users/builduser/buildslave/unity/build/Editor/Mono/EditorApplication.cs:303)