Files
Brick_RUltimateFiller/compatibility.cs
2025-07-20 17:53:09 -07:00

90 lines
3.2 KiB
C#

function rfb_addAlias(%db, %name) {
// Save so we know to delete any other bricks with this UI name
$rfb_uiNames[%name] = %db;
// overwrite in uiNameTable if inferior bricks exist,
// and insert as an "alias" if not; this ensures load compatibility.
$uiNameTable[%name] = %db;
}
function rfb_addCompatibleUiNames(%db){
rfb_addAlias(%db, %db.uiName);
%l = %db.brickSizeX;
%w = %db.brickSizeY;
%h = %db.brickSizeZ;
%lw = %l @ "x" @ %w;
if(%h==1) {
rfb_addAlias(%db, %lw @ "f"); // actual name, Brick_1x14Plate, Brick_1x15Plate, Brick_8x, Brick_9Pack, Brick_10x, Brick_BlackDragonIV, Brick_BlackDragonIV_Filler, Brick_DemiansBB
rfb_addAlias(%db, %lw @ " Plate"); // Brick_32x64, Brick_Other_Bricks
if(%l%16==0 && %w%16==0)
rfb_addAlias(%db, %lw @ " Base"); // actual name for baseplates, Brick_BlackDragonIV
} else if(%h==2) {
rfb_addAlias(%db, %lw @ "h"); // actual name, Brick_BlackDragonIV, Brick_BlackDragonIV_Filler, Brick_Halfbrick
rfb_addAlias(%db, %lw @ "x2f"); // Brick_RedFill old versions
} else if(%h==3) {
rfb_addAlias(%db, %lw); // actual name, Brick_6xWidth, Brick_8x, Brick_9Pack, Brick_DemiansBB
rfb_addAlias(%db, %lw @ "x1"); // Brick_DemiansBB2, Brick_DemiansBB3, Brick_Dr
rfb_addAlias(%db, %lw @ " Brick"); // Brick_32x64, Brick_Other_Bricks
if(%l%16==0 && %w%16==0)
rfb_addAlias(%db, %lw @ "x1 Base"); // Brick_32x_Base_variations (not actually needed)
} else if(%h%3==0) {
rfb_addAlias(%db, %lw @ "x" @ %h/3); // actual name, Brick_Pit10xHeight, Brick_Sgt_Gary, Brick_Jirue, Brick_4xheight, Brick_BlackDragonIV, Brick_BlackDragonIV_Filler, Brick_DemiansBB, Brick_jbskier13
} else {
rfb_addAlias(%lw @ "x" @ %h @ "f"); // actual name
}
}
// Delete the datablocks of inferior brick packs, and map all compatible UI names
// to RedFill bricks.
function rfb_initCompatibility() {
echo("Brick_RUltimateFiller: Deleting compatible brick datablocks.");
// Record all UINames any RedFill brick has or can replace.
for(%i=0; %i<getDatablockGroupSize(); %i++) {
%db = getDatablock(%i);
if(%db.getClassName()$="fxDtsBrickData") {
if(%db.isRedFill)
rfb_addCompatibleUiNames(%db);
}
}
// Find non-RedFill brick datablocks with compatible UINames.
// %betas[]
%betaCount = 0;
for(%i=0; %i<getDatablockGroupSize(); %i++) {
%db = getDatablock(%i);
if(%db.getClassName()$="fxDtsBrickData") {
if($rfb_uiNames[%db.uiName] && !%db.isRedFill) {
%betas[%betaCount] = %db.getId();
%betaCount++;
echo(" Deleting inferior brick: " @ %db.brickFile @ "(\"" @ %db.uiName @ "\")");
}
}
}
// Delete temp list of compatible UI names
deleteVariables("$rfb_uiNames*");
// Delete the inferior brick datablocks
for(%i=0; %i<%betaCount; %i++) {
%db = %betas[%i];
%db.uiName = "";
%db.brickFile = "";
%db.iconName = "";
%db.collisionShapeName = "";
DatablockGroup.remove(%db);
}
echo(" Deleted " @ %betaCount @ " brick datablocks.");
if(%betaCount>0)
warn("Brick_RUltimateFiller: Consider disabling the inferior brick packs listed above.");
}
package rfb_compatibility {
function verifyBrickUiNames() {
rfb_initCompatibility();
parent::verifyBrickUiNames();
}
};
activatePackage(rfb_compatibility);