Start parsing blades scenario files
This commit is contained in:
3
projects/iso-rpg-engine/.gitignore
vendored
3
projects/iso-rpg-engine/.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
export/
|
||||
Data/
|
||||
Data/
|
||||
Blades of Avernum Scenarios/
|
||||
|
@@ -30,7 +30,8 @@
|
||||
<set value="export" name="BUILD_DIR"/>
|
||||
<source path="source"/>
|
||||
<assets path="assets"/>
|
||||
<assets path="Data"/>
|
||||
<assets path="Data" if="debug"/>
|
||||
<assets path="Blades of Avernum Scenarios" if="debug"/>
|
||||
|
||||
<!-- _______________________________ Libraries ______________________________ -->
|
||||
|
||||
|
@@ -13,6 +13,7 @@ import flash.display.BitmapData;
|
||||
|
||||
import kiss.Prelude;
|
||||
import data.blades.ScenData;
|
||||
import data.blades.Scenario;
|
||||
|
||||
@:build(kiss.Kiss.build())
|
||||
class BladesMapState extends FlxState {}
|
||||
|
@@ -8,6 +8,12 @@
|
||||
(method &override :Void create []
|
||||
(super.create)
|
||||
(set data (ScenData.coreData))
|
||||
|
||||
(Scenario.test)
|
||||
|
||||
(let [valleydy (Scenario.fromBasFile "Blades of Avernum Scenarios/Valley of Dying Things/valleydy.bas")]
|
||||
~valleydy)
|
||||
|
||||
(addFloorLayer (groups (collect (range 255)) 32 Keep))
|
||||
(addTerrainLayer (groups (concat
|
||||
(for _ (range 255) -1)
|
||||
|
69
projects/iso-rpg-engine/source/data/blades/Scenario.hx
Normal file
69
projects/iso-rpg-engine/source/data/blades/Scenario.hx
Normal file
@@ -0,0 +1,69 @@
|
||||
package data.blades;
|
||||
|
||||
import kiss.ByteStream;
|
||||
|
||||
import data.blades.TileMap;
|
||||
|
||||
class Scenario {
|
||||
private var outdoorSections:TileArray<TileMap>;
|
||||
private var towns:Array<TileMap>;
|
||||
private var name = "";
|
||||
private var decription = "";
|
||||
|
||||
function new() {
|
||||
|
||||
}
|
||||
|
||||
static var failed:Array<String> = [];
|
||||
static var passed = 0;
|
||||
static function assert(e:Bool, msg="") {
|
||||
if (!e) {
|
||||
failed.push(msg);
|
||||
} else {
|
||||
passed++;
|
||||
};
|
||||
}
|
||||
|
||||
public static function test() {
|
||||
var scen = fromBasFile("Blades of Avernum Scenarios/Valley of Dying Things/valleydy.bas");
|
||||
|
||||
assert(scen.name == "Valley of Dying Things", '${scen.name} is the wrong title');
|
||||
|
||||
trace('$passed assertions passed');
|
||||
if (failed.length > 0) {
|
||||
trace('${failed.length} assertions failed: $failed');
|
||||
Sys.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
public static function fromBasFile(file) {
|
||||
var scen = new Scenario();
|
||||
var stream = ByteStream.fromFile(file);
|
||||
|
||||
function unknownBytes(num:Int) {
|
||||
trace('Warning: ignoring $num unknown bytes');
|
||||
for (_ in 0...num) stream.readByte();
|
||||
}
|
||||
|
||||
function paddingBytes(num) {
|
||||
for (_ in 0...num) stream.readByte();
|
||||
}
|
||||
|
||||
// TODO
|
||||
unknownBytes(11);
|
||||
|
||||
var numTowns = stream.readUInt16();
|
||||
var outdoorWidth = stream.readUInt16();
|
||||
var outdoorHeight = stream.readUInt16();
|
||||
trace(outdoorWidth);
|
||||
trace(outdoorHeight);
|
||||
|
||||
// TODO
|
||||
unknownBytes(5);
|
||||
// TODO scenario title 49 bytes 0-terminated
|
||||
scen.name = stream.readCString();
|
||||
paddingBytes(49 - scen.name.length);
|
||||
|
||||
return scen;
|
||||
}
|
||||
}
|
23
projects/iso-rpg-engine/source/data/blades/TileMap.hx
Normal file
23
projects/iso-rpg-engine/source/data/blades/TileMap.hx
Normal file
@@ -0,0 +1,23 @@
|
||||
package data.blades;
|
||||
|
||||
typedef TileArray<T> = Array<Array<Int>>;
|
||||
|
||||
class TileMap {
|
||||
private var floorCodes:TileArray<Int>;
|
||||
private var terrainCodes:TileArray<Int>;
|
||||
|
||||
private var width = 0;
|
||||
private var height = 0;
|
||||
|
||||
private function tileArray<T>(defaultValue:T) {
|
||||
return [for (x in 0...width) [for (y in 0...height) defaultValue]];
|
||||
}
|
||||
|
||||
public function new(width, height) {
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
|
||||
floorCodes = tileArray(255);
|
||||
terrainCodes = tileArray(0);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user