mirror of
https://github.com/open-goal/jak-project
synced 2026-09-09 12:14:10 -04:00
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: ambient.gc
|
||||
;; name in dgo: ambient
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: mood-tables.gc
|
||||
;; name in dgo: mood-tables
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: mood.gc
|
||||
;; name in dgo: mood
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: weather-part.gc
|
||||
;; name in dgo: weather-part
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: aligner-h.gc
|
||||
;; name in dgo: aligner-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: aligner.gc
|
||||
;; name in dgo: aligner
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: bones-h.gc
|
||||
;; name in dgo: bones-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: bones.gc
|
||||
;; name in dgo: bones
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: joint-h.gc
|
||||
;; name in dgo: joint-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: joint.gc
|
||||
;; name in dgo: joint
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: mspace-h.gc
|
||||
;; name in dgo: mspace-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: cam-combiner.gc
|
||||
;; name in dgo: cam-combiner
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: cam-debug-h.gc
|
||||
;; name in dgo: cam-debug-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: cam-interface.gc
|
||||
;; name in dgo: cam-interface
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: cam-layout.gc
|
||||
;; name in dgo: cam-layout
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: cam-master.gc
|
||||
;; name in dgo: cam-master
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: cam-start.gc
|
||||
;; name in dgo: cam-start
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: cam-states-dbg.gc
|
||||
;; name in dgo: cam-states-dbg
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: cam-states.gc
|
||||
;; name in dgo: cam-states
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: cam-update-h.gc
|
||||
;; name in dgo: cam-update-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: cam-update.gc
|
||||
;; name in dgo: cam-update
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: camera-h.gc
|
||||
;; name in dgo: camera-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: camera.gc
|
||||
;; name in dgo: camera
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: math-camera-h.gc
|
||||
;; name in dgo: math-camera-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: math-camera.gc
|
||||
;; name in dgo: math-camera
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: pov-camera-h.gc
|
||||
;; name in dgo: pov-camera-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: collide-func.gc
|
||||
;; name in dgo: collide-func
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: collide-touch.gc
|
||||
;; name in dgo: collide-touch
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: collide.gc
|
||||
;; name in dgo: collide
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: main-collide.gc
|
||||
;; name in dgo: main-collide
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: art-h.gc
|
||||
;; name in dgo: art-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: res-h.gc
|
||||
;; name in dgo: res-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: res.gc
|
||||
;; name in dgo: res
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: anim-tester.gc
|
||||
;; name in dgo: anim-tester
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: assert-h.gc
|
||||
;; name in dgo: assert-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: assert.gc
|
||||
;; name in dgo: assert
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: debug-h.gc
|
||||
;; name in dgo: debug-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: debug-sphere.gc
|
||||
;; name in dgo: debug-sphere
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: debug.gc
|
||||
;; name in dgo: debug
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: default-menu.gc
|
||||
;; name in dgo: default-menu
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: memory-usage-h.gc
|
||||
;; name in dgo: memory-usage-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: memory-usage.gc
|
||||
;; name in dgo: memory-usage
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: menu.gc
|
||||
;; name in dgo: menu
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: part-tester.gc
|
||||
;; name in dgo: part-tester
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: stats-h.gc
|
||||
;; name in dgo: stats-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: viewer.gc
|
||||
;; name in dgo: viewer
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: dma-bucket.gc
|
||||
;; name in dgo: dma-bucket
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: dma-buffer.gc
|
||||
;; name in dgo: dma-buffer
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: dma-disasm.gc
|
||||
;; name in dgo: dma-disasm
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: dma-h.gc
|
||||
;; name in dgo: dma-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: dma.gc
|
||||
;; name in dgo: dma
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: draw-node-h.gc
|
||||
;; name in dgo: draw-node-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: draw-node.gc
|
||||
;; name in dgo: draw-node
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: drawable-group-h.gc
|
||||
;; name in dgo: drawable-group-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: drawable-group.gc
|
||||
;; name in dgo: drawable-group
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: drawable-tree-h.gc
|
||||
;; name in dgo: drawable-tree-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: drawable-tree.gc
|
||||
;; name in dgo: drawable-tree
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: process-drawable.gc
|
||||
;; name in dgo: process-drawable
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: connect.gc
|
||||
;; name in dgo: connect
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: engines.gc
|
||||
;; name in dgo: engines
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: actor-link-h.gc
|
||||
;; name in dgo: actor-link-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: entity-h.gc
|
||||
;; name in dgo: entity-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: entity-table.gc
|
||||
;; name in dgo: entity-table
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; name: entity.gc
|
||||
;; name in dgo: entity
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user