Merge pull request #5 from water111/w/obj-names

Add empty source files
This commit is contained in:
water111
2020-09-04 16:37:58 -04:00
committed by GitHub
1094 changed files with 11390 additions and 6 deletions
+140 -6
View File
@@ -7,6 +7,7 @@
#include "ObjectFileDB.h"
#include <algorithm>
#include <set>
#include <cstring>
#include <map>
#include "LinkedObjectFileCreation.h"
@@ -24,6 +25,39 @@ std::string ObjectFileRecord::to_unique_name() const {
return name + "-v" + std::to_string(version);
}
std::string ObjectFileData::to_unique_name() const {
if (has_multiple_versions) {
std::string result = record.name + "-";
auto dgo_names_sorted = dgo_names;
std::sort(dgo_names_sorted.begin(), dgo_names_sorted.end());
for (auto x : dgo_names_sorted) {
auto ext = x.substr(x.length() - 4, 4);
if (ext == ".CGO" || ext == ".cgo" || ext == ".DGO" || ext == ".dgo") {
x = x.substr(0, x.length() - 4);
}
result += x + "-";
}
result.pop_back();
return result;
} else {
return record.name;
}
}
ObjectFileData& ObjectFileDB::lookup_record(ObjectFileRecord rec) {
ObjectFileData* result = nullptr;
for (auto& x : obj_files_by_name[rec.name]) {
if (x.record.version == rec.version) {
assert(x.record.hash == rec.hash);
assert(!result);
result = &x;
}
}
assert(result);
return *result;
}
/*!
* Build an object file DB for the given list of DGOs.
*/
@@ -69,6 +103,40 @@ void assert_string_empty_after(const char* str, int size) {
}
} // namespace
namespace {
std::string get_object_file_name(const std::string& original_name, uint8_t* data, int size) {
const char art_group_text[] =
"/src/next/data/art-group6/"; // todo, this may change in other games
const char suffix[] = "-ag.go";
int len = int(strlen(art_group_text));
for (int start = 0; start < size; start++) {
bool failed = false;
for (int i = 0; i < len; i++) {
if (start + i >= size || data[start + i] != art_group_text[i]) {
failed = true;
break;
}
}
if (!failed) {
for (int i = 0; i < int(original_name.length()); i++) {
if (start + len + i >= size || data[start + len + i] != original_name[i]) {
assert(false);
}
}
assert(int(strlen(suffix)) + start + len + int(original_name.length()) < size);
assert(!memcmp(data + start + len + original_name.length(), suffix, strlen(suffix) + 1));
return original_name + "-ag";
}
}
return original_name;
}
} // namespace
constexpr int MAX_CHUNK_SIZE = 0x8000;
/*!
* Load the objects stored in the given DGO into the ObjectFileDB
@@ -141,7 +209,9 @@ void ObjectFileDB::get_objs_from_dgo(const std::string& filename) {
assert(reader.bytes_left() >= obj_header.size);
assert_string_empty_after(obj_header.name, 60);
add_obj_from_dgo(obj_header.name, reader.here(), obj_header.size, dgo_base_name);
auto name = get_object_file_name(obj_header.name, reader.here(), obj_header.size);
add_obj_from_dgo(name, obj_header.name, reader.here(), obj_header.size, dgo_base_name);
reader.ffwd(obj_header.size);
}
@@ -153,39 +223,63 @@ void ObjectFileDB::get_objs_from_dgo(const std::string& filename) {
* Add an object file to the ObjectFileDB
*/
void ObjectFileDB::add_obj_from_dgo(const std::string& obj_name,
const std::string& name_in_dgo,
uint8_t* obj_data,
uint32_t obj_size,
const std::string& dgo_name) {
stats.total_obj_files++;
assert(obj_size > 128);
uint16_t version = *(uint16_t*)(obj_data + 8);
auto hash = crc32(obj_data, obj_size);
bool duplicated = false;
// first, check to see if we already got it...
for (auto& e : obj_files_by_name[obj_name]) {
if (e.data.size() == obj_size && e.record.hash == hash) {
// just to make sure we don't have a hash collision.
assert(!memcmp(obj_data, e.data.data(), obj_size));
// already got it!
e.reference_count++;
auto rec = e.record;
auto& rec = e.record;
assert(name_in_dgo == e.name_in_dgo);
e.dgo_names.push_back(dgo_name);
obj_files_by_dgo[dgo_name].push_back(rec);
return;
duplicated = true;
break;
} else {
e.has_multiple_versions = true;
}
}
if (duplicated) {
return;
}
// nope, have to add a new one.
ObjectFileData data;
data.data.resize(obj_size);
memcpy(data.data.data(), obj_data, obj_size);
data.record.hash = hash;
data.record.name = obj_name;
data.dgo_names.push_back(dgo_name);
if (obj_files_by_name[obj_name].empty()) {
// if this is the first time we've seen this object file name, add it in the order.
obj_file_order.push_back(obj_name);
}
data.record.version = obj_files_by_name[obj_name].size();
data.name_in_dgo = name_in_dgo;
data.obj_version = version;
obj_files_by_dgo[dgo_name].push_back(data.record);
obj_files_by_name[obj_name].emplace_back(std::move(data));
stats.unique_obj_files++;
stats.unique_obj_bytes += obj_size;
if (obj_files_by_name[obj_name].size() > 1) {
for (auto& e : obj_files_by_name[obj_name]) {
e.has_multiple_versions = true;
}
}
}
/*!
@@ -202,8 +296,13 @@ std::string ObjectFileDB::generate_dgo_listing() {
for (const auto& name : dgo_names) {
result += "(\"" + name + "\"\n";
for (auto& obj : obj_files_by_dgo[name]) {
result += " " + obj.name + " :version " + std::to_string(obj.version) + "\n";
for (auto& obj_rec : obj_files_by_dgo[name]) {
auto obj = lookup_record(obj_rec);
std::string extension = ".o";
if (obj.obj_version == 4 || obj.obj_version == 2) {
extension = ".go";
}
result += " (\"" + obj.to_unique_name() + extension + "\" \"" + obj.name_in_dgo + "\")\n";
}
result += " )\n\n";
}
@@ -211,6 +310,41 @@ std::string ObjectFileDB::generate_dgo_listing() {
return result;
}
namespace {
std::string pad_string(const std::string& in, size_t length) {
assert(in.length() < length);
return in + std::string(length - in.length(), ' ');
}
} // namespace
std::string ObjectFileDB::generate_obj_listing() {
std::string result;
std::set<std::string> all_unique_names;
int unique_count = 0;
for (auto& obj_file : obj_file_order) {
for (auto& x : obj_files_by_name.at(obj_file)) {
std::string dgos = "[";
for (auto& y : x.dgo_names) {
assert(y.length() >= 5);
dgos += "\"" + y.substr(0, y.length() - 4) + "\", ";
}
dgos.pop_back();
dgos.pop_back();
dgos += "]";
result += "[\"" + pad_string(x.to_unique_name() + "\", ", 40) + "\"" +
pad_string(x.name_in_dgo + "\", ", 30) + std::to_string(x.obj_version) + ", " +
dgos + ", \"\"],\n";
unique_count++;
all_unique_names.insert(x.to_unique_name());
}
}
// this check is extremely important. It makes sure we don't have any repeat names. This could
// be caused by two files with the same name, in the same DGOs, but different data.
assert(int(all_unique_names.size()) == unique_count);
return result;
}
/*!
* Process all of the linking data of all objects.
*/
+8
View File
@@ -31,6 +31,11 @@ struct ObjectFileData {
std::vector<uint8_t> data; // raw bytes
LinkedObjectFile linked_data; // data including linking annotations
ObjectFileRecord record; // name
std::vector<std::string> dgo_names;
int obj_version = -1;
bool has_multiple_versions = false;
std::string name_in_dgo;
std::string to_unique_name() const;
uint32_t reference_count = 0; // number of times its used.
};
@@ -38,6 +43,7 @@ class ObjectFileDB {
public:
ObjectFileDB(const std::vector<std::string>& _dgos);
std::string generate_dgo_listing();
std::string generate_obj_listing();
void process_link_data();
void process_labels();
void find_code();
@@ -46,10 +52,12 @@ class ObjectFileDB {
void write_object_file_words(const std::string& output_dir, bool dump_v3_only);
void write_disassembly(const std::string& output_dir, bool disassemble_objects_without_functions);
void analyze_functions();
ObjectFileData& lookup_record(ObjectFileRecord rec);
private:
void get_objs_from_dgo(const std::string& filename);
void add_obj_from_dgo(const std::string& obj_name,
const std::string& name_in_dgo,
uint8_t* obj_data,
uint32_t obj_size,
const std::string& dgo_name);
+1
View File
@@ -27,6 +27,7 @@ int main(int argc, char** argv) {
ObjectFileDB db(dgos);
write_text_file(combine_path(out_folder, "dgo.txt"), db.generate_dgo_listing());
write_text_file(combine_path(out_folder, "obj.txt"), db.generate_obj_listing());
db.process_link_data();
db.find_code();
+77
View File
@@ -0,0 +1,77 @@
# Build System
Game Build System. The build system should allow us to
- automatically extract large asset files from the game so we don't have to keep them in this repository
- support modifications (adding new files, modifying files, etc)
- have checks that the resulting data matches the original if expected, assuming no modifications are applied
Intermediate files should go somewhere in `data` and final files should go in `out`.
## 1. C++ Build
All C++ code should be built through `cmake`, including the compiler, decompiler, runtime, and any tools. It's expected to be built in the `build` folder.
## 2. Unpack Assets
This step extracts data from asset files from the game. An asset file is any file that's not a CGO/DGO. All files on the DVD will be in `iso_data/`, and all unpacked data should go in `data/`
## 3. Unpack DGOs
This step extracts data from CGO/DGO files and unpacks it. All unpacked data should go in `data/`
## 4. Pack Assets
This step creates final asset files from data in `data/`. The final files should do in `out`.
## 5. Compile GOAL Code / Data
This step creates all the data for the CGOs/DGOs. The compiler will have a big list of files which it will compile in order. Each `.gc` file contains GOAL code, which is compiled to a GOAL code object (`.o` file) stored in `data/obj`. Each `.gd` file is a "GOAL data description file" which contains a short script to launch the appropriate tool to produce the data object. The objects will also be stored in `data/obj`, but will have a `.go` extension.
## 6. Create CGO/DGOs
This step takes the output from step 5, (stored in `data/obj`) and creates all the DGO/CGO files, which go in `out`. The list of what goes in the DGOs is in `goal_src/build/dgos.txt`.
## 7. Asset Check
There might be some asset files which we expect to be unchanged between the version in `iso_data` and in `out`. At this point we should check if these are actually the same.
## 8. CGO/DGO check
The data objects contained in CGO/DGO files should be the same between the original version and the ported version. We should go through each CGO/DGO file, look at each object, and if it's a data object, make sure it matches.
# What can be worked on now?
## C++ Build
Getting more things working on Windows.
### Compiler
The compiler right now only supports GOOS, the macro language. It may be useful to play around with this. There may be missing features or bugs in the language.
## Unpack Assets
I imagine that each type of asset file will have its own tool to unpack things. We'll need a master "unpacker" tool which runs the correct tool on each file.
This unpacker could take a config file, maybe JSON?, that says what to do for each file:
```
[
{"filename":"MUS/SNOW.MUS", "unpack_tool":"music_unpacker", "destination":"data/music/snow/"... arguments to music_unpacker},
...
]
```
and then would run the correct tool on each file. For starters, we could make a simple unpacking tool named `copy` that just directly copies the asset file into the `data` folder.
We could also look into particular files and start writing unpacking tools.
## Unpack DGOs
Again, there will be a main tool which runs through each DGO/CGO file, finds data objects, then runs an appropriate unpacking tools based on the type of data object (level, texture, art-group,...). I imagine there would a config file (json maybe?) that looks something like this:
```
{"dgo":"MAI.DGO", "objects":[{"tpage1234", "texture-unpacker", ...}, {"spider", "art-group-unpacker", ...}]}
```
My plan for duplicate data objects:
- When there are duplicates, only one will actually be unpacked
- Ones that aren't unpacked will be checked if they are the same as the unpacked one to make sure we don't make a mistake
- The list of which objects should be unpacked vs. checked, and what name the unpacking should get will be determined by the decompiler.
- If there is an object not in the config file, or a missing object, then there is an error
The actual unpacking tools probably can't be developed until I package up the GOAL disassembler into a usable library, and we probably won't be able to understand the data format until later. We could write a very simple `copy` unpacker which just copies the object data directly into `data` and doesn't unpack it at all.
## Pack Assets
Again, there will be a main tool which runs the appropriate packer for each file. We could write this main tool, and a `copy` packer which just copies the exact file in `data/` to `out/`.
## Asset Check
Just a tool with a list of asset files to check, does a comparison and reports an error if there is a difference. We might expect some files to change slightly in the PC version, and these will be excluded from the check.
## CGO/DGO Check
Iterates through objects in the original / rebuilt CGO/DGOs. Code objects are not checked, but data objects are checked. Should also check that the order of objects is the same, and all are present.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: ambient.gc
;; name in dgo: ambient
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: mood-tables.gc
;; name in dgo: mood-tables
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: mood.gc
;; name in dgo: mood
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: weather-part.gc
;; name in dgo: weather-part
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: aligner-h.gc
;; name in dgo: aligner-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: aligner.gc
;; name in dgo: aligner
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: bones-h.gc
;; name in dgo: bones-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: bones.gc
;; name in dgo: bones
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: joint-h.gc
;; name in dgo: joint-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: joint.gc
;; name in dgo: joint
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: mspace-h.gc
;; name in dgo: mspace-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: cam-combiner.gc
;; name in dgo: cam-combiner
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: cam-debug-h.gc
;; name in dgo: cam-debug-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: cam-debug.gc
;; name in dgo: cam-debug
;; dgos: GAME, ENGINE
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: cam-interface-h.gc
;; name in dgo: cam-interface-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: cam-interface.gc
;; name in dgo: cam-interface
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: cam-layout.gc
;; name in dgo: cam-layout
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: cam-master.gc
;; name in dgo: cam-master
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: cam-start.gc
;; name in dgo: cam-start
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: cam-states-dbg.gc
;; name in dgo: cam-states-dbg
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: cam-states.gc
;; name in dgo: cam-states
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: cam-update-h.gc
;; name in dgo: cam-update-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: cam-update.gc
;; name in dgo: cam-update
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: camera-h.gc
;; name in dgo: camera-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: camera.gc
;; name in dgo: camera
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: math-camera-h.gc
;; name in dgo: math-camera-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: math-camera.gc
;; name in dgo: math-camera
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: pov-camera-h.gc
;; name in dgo: pov-camera-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: pov-camera.gc
;; name in dgo: pov-camera
;; dgos: GAME, ENGINE
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide-cache-h.gc
;; name in dgo: collide-cache-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide-cache.gc
;; name in dgo: collide-cache
;; dgos: GAME, ENGINE
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide-edge-grab-h.gc
;; name in dgo: collide-edge-grab-h
;; dgos: GAME, ENGINE
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide-edge-grab.gc
;; name in dgo: collide-edge-grab
;; dgos: GAME, ENGINE
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide-frag-h.gc
;; name in dgo: collide-frag-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide-frag.gc
;; name in dgo: collide-frag
;; dgos: GAME, ENGINE
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide-func-h.gc
;; name in dgo: collide-func-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide-func.gc
;; name in dgo: collide-func
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide-h.gc
;; name in dgo: collide-h
;; dgos: GAME, ENGINE
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide-mesh-h.gc
;; name in dgo: collide-mesh-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide-mesh.gc
;; name in dgo: collide-mesh
;; dgos: GAME, ENGINE
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide-planes.gc
;; name in dgo: collide-planes
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide-probe.gc
;; name in dgo: collide-probe
;; dgos: GAME, ENGINE
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide-reaction-target.gc
;; name in dgo: collide-reaction-target
;; dgos: GAME, ENGINE
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide-shape-h.gc
;; name in dgo: collide-shape-h
;; dgos: GAME, ENGINE
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide-shape-rider.gc
;; name in dgo: collide-shape-rider
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide-shape.gc
;; name in dgo: collide-shape
;; dgos: GAME, ENGINE
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide-target-h.gc
;; name in dgo: collide-target-h
;; dgos: GAME, ENGINE
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide-touch-h.gc
;; name in dgo: collide-touch-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide-touch.gc
;; name in dgo: collide-touch
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collide.gc
;; name in dgo: collide
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: main-collide.gc
;; name in dgo: main-collide
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: art-h.gc
;; name in dgo: art-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: res-h.gc
;; name in dgo: res-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: res.gc
;; name in dgo: res
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: anim-tester.gc
;; name in dgo: anim-tester
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: assert-h.gc
;; name in dgo: assert-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: assert.gc
;; name in dgo: assert
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: debug-h.gc
;; name in dgo: debug-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: debug-sphere.gc
;; name in dgo: debug-sphere
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: debug.gc
;; name in dgo: debug
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: default-menu.gc
;; name in dgo: default-menu
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: memory-usage-h.gc
;; name in dgo: memory-usage-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: memory-usage.gc
;; name in dgo: memory-usage
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: menu.gc
;; name in dgo: menu
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: part-tester.gc
;; name in dgo: part-tester
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: stats-h.gc
;; name in dgo: stats-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: viewer.gc
;; name in dgo: viewer
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: dma-bucket.gc
;; name in dgo: dma-bucket
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: dma-buffer.gc
;; name in dgo: dma-buffer
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: dma-disasm.gc
;; name in dgo: dma-disasm
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: dma-h.gc
;; name in dgo: dma-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: dma.gc
;; name in dgo: dma
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: draw-node-h.gc
;; name in dgo: draw-node-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: draw-node.gc
;; name in dgo: draw-node
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: drawable-actor-h.gc
;; name in dgo: drawable-actor-h
;; dgos: GAME, ENGINE
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: drawable-ambient-h.gc
;; name in dgo: drawable-ambient-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: drawable-group-h.gc
;; name in dgo: drawable-group-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: drawable-group.gc
;; name in dgo: drawable-group
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: drawable-h.gc
;; name in dgo: drawable-h
;; dgos: GAME, ENGINE
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: drawable-inline-array-h.gc
;; name in dgo: drawable-inline-array-h
;; dgos: GAME, ENGINE
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: drawable-inline-array.gc
;; name in dgo: drawable-inline-array
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: drawable-tree-h.gc
;; name in dgo: drawable-tree-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: drawable-tree.gc
;; name in dgo: drawable-tree
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: drawable.gc
;; name in dgo: drawable
;; dgos: GAME, ENGINE
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: process-drawable-h.gc
;; name in dgo: process-drawable-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: process-drawable.gc
;; name in dgo: process-drawable
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: connect.gc
;; name in dgo: connect
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: engines.gc
;; name in dgo: engines
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: actor-link-h.gc
;; name in dgo: actor-link-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: entity-h.gc
;; name in dgo: entity-h
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: entity-table.gc
;; name in dgo: entity-table
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: entity.gc
;; name in dgo: entity
;; dgos: GAME, ENGINE
+7
View File
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: relocate.gc
;; name in dgo: relocate
;; dgos: GAME, ENGINE
@@ -0,0 +1,7 @@
;-*-Lisp-*-
(in-package goal)
;; name: collectables-part.gc
;; name in dgo: collectables-part
;; dgos: GAME, ENGINE

Some files were not shown because too many files have changed in this diff Show More