summaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--README.md101
1 files changed, 101 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 00000000..812b9c83
--- /dev/null
+++ b/README.md
@@ -0,0 +1,101 @@
+# Intro
+
+The aim of this project is to reverse GTA III for PC by replacing
+parts of the game [one by one](https://en.wikipedia.org/wiki/Ship_of_Theseus)
+such that we have a working game at all times.
+
+# Strategy
+
+A good approach is to start at the fringes of the code base,
+i.e. classes that don't depend on code that we don't have reversed yet.
+If a function uses only few unreversed functions that would be inconvenient
+to reverse at the time, calling the original functions is acceptable.
+
+# Progress
+
+This is a list of some things that have been reversed to some non-trivial extent.
+Not everything is listed, check the code.
+
+```
+CPool
+CTxdStore
+CVector
+CVector2D
+CMatrix
+CModelInfo
+CBaseModelInfo
+CSimpleModelInfo
+CTimeModelInfo
+CClumpModelInfo
+CPedModelInfo
+CVehicleModelInfo
+CVisibilityPlugins
+CRenderer
+CEntity
+CPhysical
+CCollision
+CCullZones
+CTheZones
+CPathFind
+```
+
+# Low hanging fruit
+
+There are a couple of things that have been reversed for other projects
+already that could probably be put into this project without too much effort.
+Again, the list is not complete:
+
+* Animation (https://github.com/aap/iii_anim)
+* File Loader (https://github.com/aap/librwgta/tree/master/tools/IIItest)
+* ...
+
+# Coding style
+
+I started writing in [Plan 9 style](http://man.cat-v.org/plan_9/6/style),
+but realize that this is not the most popular style, so I'm willing to compromise.
+Try not to deviate too much so the code will look similar across the whole project.
+
+To give examples, these two styles (or anything in between) are fine:
+
+```
+type
+functionname(args)
+{
+ if(a == b){
+ s1;
+ s2;
+ }
+ if(x != y)
+ s3;
+}
+
+type functionname(args)
+{
+ if (a == b) {
+ s1;
+ s2;
+ }
+ if (x != y)
+ s3;
+}
+```
+
+This one (or anything more extreme) is heavily discouraged:
+
+```
+type functionname ( args )
+{
+ if ( a == b )
+ {
+ s1;
+ s2;
+ }
+ if ( x != y )
+ {
+ s3;
+ }
+}
+```
+
+Indentation is done with TABS.
+