yeag
@ -1,3 +1,6 @@
|
|||||||
|
## Added
|
||||||
|
* A new legendary weapon
|
||||||
|
|
||||||
## Changed
|
## Changed
|
||||||
* Updated russian localization
|
* Updated russian localization
|
||||||
* Large deposits (hematite, malachite, bauxite) and caves (sulfur, asbestos) can now be toggled in the config
|
* Large deposits (hematite, malachite, bauxite) and caves (sulfur, asbestos) can now be toggled in the config
|
||||||
@ -10,6 +13,7 @@
|
|||||||
* Reduced legendary 12 lever action's spread multiplier from x1.35 to x1.15
|
* Reduced legendary 12 lever action's spread multiplier from x1.35 to x1.15
|
||||||
* Bullet casings now spawn with randomized angular velocity
|
* Bullet casings now spawn with randomized angular velocity
|
||||||
* Bullet casings now correctly bounce off walls, and change angles when bouncing
|
* Bullet casings now correctly bounce off walls, and change angles when bouncing
|
||||||
|
* Two previously unobtainable legendaries are now in the red room loot pool (about 10x less common than most other items)
|
||||||
|
|
||||||
## Fixed
|
## Fixed
|
||||||
* Fixed an issue where `/ntmreload` would load fluids after recipes, meaning that recipes using newly added fluids would not work correctly, as the fluids don't exist by the time the recipe is loaded
|
* Fixed an issue where `/ntmreload` would load fluids after recipes, meaning that recipes using newly added fluids would not work correctly, as the fluids don't exist by the time the recipe is loaded
|
||||||
@ -21,4 +25,5 @@
|
|||||||
* Fixed RBMKs losing all their flux when reloading the world
|
* Fixed RBMKs losing all their flux when reloading the world
|
||||||
* Fixed issue where DODD fuel item stats would only update when the GUI was open
|
* Fixed issue where DODD fuel item stats would only update when the GUI was open
|
||||||
* Fixed muzzle flashes not being fullbright
|
* Fixed muzzle flashes not being fullbright
|
||||||
* Fixed guns having their name permanently visible over the toolbar
|
* Fixed guns having their name permanently visible over the toolbar
|
||||||
|
* Fixed hangman being absolutely gigantic when dropped
|
||||||
@ -1,6 +1,6 @@
|
|||||||
mod_version=1.0.27
|
mod_version=1.0.27
|
||||||
# Empty build number makes a release type
|
# Empty build number makes a release type
|
||||||
mod_build_number=5243
|
mod_build_number=5257
|
||||||
|
|
||||||
credits=HbMinecraft,\
|
credits=HbMinecraft,\
|
||||||
\ rodolphito (explosion algorithms),\
|
\ rodolphito (explosion algorithms),\
|
||||||
|
|||||||
@ -30,6 +30,7 @@ public class ItemPoolsRedRoom {
|
|||||||
weighted(ModItems.heart_container, 0, 1, 1, 10),
|
weighted(ModItems.heart_container, 0, 1, 1, 10),
|
||||||
weighted(ModItems.black_diamond, 0, 1, 1, 10),
|
weighted(ModItems.black_diamond, 0, 1, 1, 10),
|
||||||
weighted(ModItems.scrumpy, 0, 1, 1, 10),
|
weighted(ModItems.scrumpy, 0, 1, 1, 10),
|
||||||
|
|
||||||
weighted(ModItems.wild_p, 0, 1, 1, 5),
|
weighted(ModItems.wild_p, 0, 1, 1, 5),
|
||||||
weighted(ModItems.card_aos, 0, 1, 1, 5),
|
weighted(ModItems.card_aos, 0, 1, 1, 5),
|
||||||
weighted(ModItems.card_qos, 0, 1, 1, 5),
|
weighted(ModItems.card_qos, 0, 1, 1, 5),
|
||||||
@ -39,6 +40,9 @@ public class ItemPoolsRedRoom {
|
|||||||
weighted(ModItems.flask_infusion, 0, 1, 1, 5),
|
weighted(ModItems.flask_infusion, 0, 1, 1, 5),
|
||||||
weighted(ModBlocks.boxcar, 0, 1, 1, 5),
|
weighted(ModBlocks.boxcar, 0, 1, 1, 5),
|
||||||
weighted(ModItems.book_of_, 0, 1, 1, 5),
|
weighted(ModItems.book_of_, 0, 1, 1, 5),
|
||||||
|
|
||||||
|
weighted(ModItems.gun_hangman, 0, 1, 1, 1),
|
||||||
|
weighted(ModItems.gun_mas36, 0, 1, 1, 1),
|
||||||
};
|
};
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
|||||||
@ -1494,6 +1494,7 @@ public class ModItems {
|
|||||||
public static Item gun_lasrifle;
|
public static Item gun_lasrifle;
|
||||||
public static Item gun_coilgun;
|
public static Item gun_coilgun;
|
||||||
public static Item gun_hangman;
|
public static Item gun_hangman;
|
||||||
|
public static Item gun_mas36;
|
||||||
public static Item gun_bolter;
|
public static Item gun_bolter;
|
||||||
public static Item gun_folly;
|
public static Item gun_folly;
|
||||||
public static Item gun_aberrator;
|
public static Item gun_aberrator;
|
||||||
@ -6481,6 +6482,7 @@ public class ModItems {
|
|||||||
GameRegistry.registerItem(gun_lasrifle, gun_lasrifle.getUnlocalizedName());
|
GameRegistry.registerItem(gun_lasrifle, gun_lasrifle.getUnlocalizedName());
|
||||||
GameRegistry.registerItem(gun_coilgun, gun_coilgun.getUnlocalizedName());
|
GameRegistry.registerItem(gun_coilgun, gun_coilgun.getUnlocalizedName());
|
||||||
GameRegistry.registerItem(gun_hangman, gun_hangman.getUnlocalizedName());
|
GameRegistry.registerItem(gun_hangman, gun_hangman.getUnlocalizedName());
|
||||||
|
GameRegistry.registerItem(gun_mas36, gun_mas36.getUnlocalizedName());
|
||||||
GameRegistry.registerItem(gun_bolter, gun_bolter.getUnlocalizedName());
|
GameRegistry.registerItem(gun_bolter, gun_bolter.getUnlocalizedName());
|
||||||
GameRegistry.registerItem(gun_folly, gun_folly.getUnlocalizedName());
|
GameRegistry.registerItem(gun_folly, gun_folly.getUnlocalizedName());
|
||||||
GameRegistry.registerItem(gun_aberrator, gun_aberrator.getUnlocalizedName());
|
GameRegistry.registerItem(gun_aberrator, gun_aberrator.getUnlocalizedName());
|
||||||
|
|||||||
@ -81,6 +81,7 @@ public class GunFactoryClient {
|
|||||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_lasrifle, new ItemRenderLasrifle());
|
MinecraftForgeClient.registerItemRenderer(ModItems.gun_lasrifle, new ItemRenderLasrifle());
|
||||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_coilgun, new ItemRenderCoilgun());
|
MinecraftForgeClient.registerItemRenderer(ModItems.gun_coilgun, new ItemRenderCoilgun());
|
||||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_hangman, new ItemRenderHangman());
|
MinecraftForgeClient.registerItemRenderer(ModItems.gun_hangman, new ItemRenderHangman());
|
||||||
|
MinecraftForgeClient.registerItemRenderer(ModItems.gun_mas36, new ItemRenderMAS36());
|
||||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_bolter, new ItemRenderBolter());
|
MinecraftForgeClient.registerItemRenderer(ModItems.gun_bolter, new ItemRenderBolter());
|
||||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_folly, new ItemRenderFolly());
|
MinecraftForgeClient.registerItemRenderer(ModItems.gun_folly, new ItemRenderFolly());
|
||||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_aberrator, new ItemRenderAberrator());
|
MinecraftForgeClient.registerItemRenderer(ModItems.gun_aberrator, new ItemRenderAberrator());
|
||||||
@ -239,6 +240,7 @@ public class GunFactoryClient {
|
|||||||
((ItemGunBaseNT) ModItems.gun_lasrifle) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO);
|
((ItemGunBaseNT) ModItems.gun_lasrifle) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO);
|
||||||
((ItemGunBaseNT) ModItems.gun_coilgun) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO);
|
((ItemGunBaseNT) ModItems.gun_coilgun) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO);
|
||||||
((ItemGunBaseNT) ModItems.gun_hangman) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO);
|
((ItemGunBaseNT) ModItems.gun_hangman) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO);
|
||||||
|
((ItemGunBaseNT) ModItems.gun_mas36) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO);
|
||||||
((ItemGunBaseNT) ModItems.gun_bolter) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO);
|
((ItemGunBaseNT) ModItems.gun_bolter) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO);
|
||||||
((ItemGunBaseNT) ModItems.gun_folly) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_AMMO);
|
((ItemGunBaseNT) ModItems.gun_folly) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_AMMO);
|
||||||
((ItemGunBaseNT) ModItems.gun_aberrator) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_AMMO);
|
((ItemGunBaseNT) ModItems.gun_aberrator) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_AMMO);
|
||||||
|
|||||||
@ -374,7 +374,7 @@ public class Orchestras {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public static BiConsumer<ItemStack, LambdaContext> ORCHESTRA_CARBIBE = (stack, ctx) -> {
|
public static BiConsumer<ItemStack, LambdaContext> ORCHESTRA_CARBINE = (stack, ctx) -> {
|
||||||
EntityLivingBase entity = ctx.entity;
|
EntityLivingBase entity = ctx.entity;
|
||||||
if(entity.worldObj.isRemote) return;
|
if(entity.worldObj.isRemote) return;
|
||||||
AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex);
|
AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex);
|
||||||
@ -1306,4 +1306,53 @@ public class Orchestras {
|
|||||||
if(timer == 9) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.75F);
|
if(timer == 9) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 0.75F);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public static BiConsumer<ItemStack, LambdaContext> ORCHESTRA_MAS36 = (stack, ctx) -> {
|
||||||
|
EntityLivingBase entity = ctx.entity;
|
||||||
|
if(entity.worldObj.isRemote) return;
|
||||||
|
AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex);
|
||||||
|
int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex);
|
||||||
|
boolean aiming = ItemGunBaseNT.getIsAiming(stack);
|
||||||
|
|
||||||
|
if(type == AnimType.EQUIP) {
|
||||||
|
if(timer == 10) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.openLatch", 1F, 1F);
|
||||||
|
if(timer == 18) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(type == AnimType.CYCLE) {
|
||||||
|
if(timer == 7) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 0.5F, 1F);
|
||||||
|
if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 0.5F, 1F);
|
||||||
|
if(timer == 12) {
|
||||||
|
SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory);
|
||||||
|
if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity,
|
||||||
|
0.375, aiming ? 0 : -0.125, aiming ? 0 : -0.25D,
|
||||||
|
-0.05, 0.2, -0.025,
|
||||||
|
0.01, -10F + (float) entity.getRNG().nextGaussian() * 10F, (float) entity.getRNG().nextGaussian() * 12.5F, casing.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(type == AnimType.CYCLE_DRY) {
|
||||||
|
if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.75F);
|
||||||
|
if(timer == 7) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 0.5F, 1F);
|
||||||
|
if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 0.5F, 1F);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(type == AnimType.RELOAD) {
|
||||||
|
if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 1F, 1F);
|
||||||
|
if(timer == 20) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.rifleCock", 1F, 1F);
|
||||||
|
if(timer == 36) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 1F, 1F);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(type == AnimType.JAMMED) {
|
||||||
|
if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 0.5F, 1F);
|
||||||
|
if(timer == 12) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 0.5F, 1F);
|
||||||
|
if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 0.5F, 1F);
|
||||||
|
if(timer == 23) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 0.5F, 1F);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(type == AnimType.INSPECT) {
|
||||||
|
if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 0.5F, 1F);
|
||||||
|
if(timer == 17) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 0.5F, 1F);
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -63,7 +63,7 @@ public class XFactory762mm {
|
|||||||
.offset(1, -0.0625 * 2.5, -0.25D)
|
.offset(1, -0.0625 * 2.5, -0.25D)
|
||||||
.setupStandardFire().recoil(LAMBDA_RECOIL_CARBINE))
|
.setupStandardFire().recoil(LAMBDA_RECOIL_CARBINE))
|
||||||
.setupStandardConfiguration()
|
.setupStandardConfiguration()
|
||||||
.anim(LAMBDA_CARBINE_ANIMS).orchestra(Orchestras.ORCHESTRA_CARBIBE)
|
.anim(LAMBDA_CARBINE_ANIMS).orchestra(Orchestras.ORCHESTRA_CARBINE)
|
||||||
).setUnlocalizedName("gun_carbine");
|
).setUnlocalizedName("gun_carbine");
|
||||||
|
|
||||||
ModItems.gun_minigun = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig()
|
ModItems.gun_minigun = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig()
|
||||||
@ -86,6 +86,17 @@ public class XFactory762mm {
|
|||||||
.setupStandardConfiguration()
|
.setupStandardConfiguration()
|
||||||
.anim(LAMBDA_MINIGUN_ANIMS).orchestra(Orchestras.ORCHESTRA_MINIGUN)
|
.anim(LAMBDA_MINIGUN_ANIMS).orchestra(Orchestras.ORCHESTRA_MINIGUN)
|
||||||
).setUnlocalizedName("gun_minigun_lacunae");
|
).setUnlocalizedName("gun_minigun_lacunae");
|
||||||
|
|
||||||
|
ModItems.gun_mas36 = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig()
|
||||||
|
.dura(5_000).draw(20).inspect(31).reloadSequential(true).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE)
|
||||||
|
.rec(new Receiver(0)
|
||||||
|
.dmg(30F).delay(25).dry(25).spread(0.0F).reload(43).jam(43).sound("hbm:weapon.fire.rifleHeavy", 1.0F, 1.0F)
|
||||||
|
.mag(new MagazineFullReload(0, 7).addConfigs(r762_sp, r762_fmj, r762_jhp, r762_ap, r762_du))
|
||||||
|
.offset(1, -0.0625 * 1.5, -0.25D)
|
||||||
|
.setupStandardFire().recoil(LAMBDA_RECOIL_CARBINE))
|
||||||
|
.setupStandardConfiguration()
|
||||||
|
.anim(LAMBDA_MAS36_ANIMS).orchestra(Orchestras.ORCHESTRA_MAS36)
|
||||||
|
).setUnlocalizedName("gun_mas36");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BiConsumer<ItemStack, LambdaContext> LAMBDA_SMOKE = (stack, ctx) -> {
|
public static BiConsumer<ItemStack, LambdaContext> LAMBDA_SMOKE = (stack, ctx) -> {
|
||||||
@ -153,4 +164,45 @@ public class XFactory762mm {
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@SuppressWarnings("incomplete-switch") public static BiFunction<ItemStack, AnimType, BusAnimation> LAMBDA_MAS36_ANIMS = (stack, type) -> {
|
||||||
|
int mag = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, MainRegistry.proxy.me().inventory);
|
||||||
|
double turn = -90;
|
||||||
|
double pullAmount = ItemGunBaseNT.getIsAiming(stack) ? -1F : -1.5D;
|
||||||
|
switch(type) {
|
||||||
|
case EQUIP: return new BusAnimation()
|
||||||
|
.addBus("STOCK", new BusAnimationSequence().setPos(-158, 0, 0).hold(500).addPos(0, 0, 0, 500, IType.SIN_FULL))
|
||||||
|
.addBus("EQUIP", new BusAnimationSequence().setPos(45, 0, 0).addPos(0, 0, 0, 500, IType.SIN_FULL).hold(500).addPos(1, 0, 0, 100, IType.SIN_DOWN).addPos(0, 0, 0, 100, IType.SIN_FULL));
|
||||||
|
case CYCLE: return new BusAnimation()
|
||||||
|
.addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, -0.5, 50, IType.SIN_DOWN).addPos(0, 0, 0, 100, IType.SIN_FULL))
|
||||||
|
.addBus("BOLT_TURN", new BusAnimationSequence().hold(250).addPos(0, 0, turn, 150).hold(700).addPos(0, 0, 0, 150))
|
||||||
|
.addBus("BOLT_PULL", new BusAnimationSequence().hold(350).addPos(0, 0, pullAmount, 250, IType.SIN_UP).hold(250).addPos(0, 0, 0, 200, IType.LINEAR))
|
||||||
|
.addBus("LIFT", new BusAnimationSequence().hold(600).addPos(-3, 0, 0, 150, IType.SIN_DOWN).hold(300).addPos(0, 0, 0, 250, IType.SIN_FULL))
|
||||||
|
.addBus("BULLET", mag <= 1 ? new BusAnimationSequence().setPos(-100, 0, 0) : new BusAnimationSequence().hold(850).addPos(0, 0.1875, 1.5, 200, IType.LINEAR));
|
||||||
|
case CYCLE_DRY: return new BusAnimation()
|
||||||
|
.addBus("BOLT_TURN", new BusAnimationSequence().hold(250).addPos(0, 0, turn, 150).hold(700).addPos(0, 0, 0, 150))
|
||||||
|
.addBus("BOLT_PULL", new BusAnimationSequence().hold(350).addPos(0, 0, pullAmount, 250, IType.SIN_UP).hold(250).addPos(0, 0, 0, 200, IType.LINEAR))
|
||||||
|
.addBus("LIFT", new BusAnimationSequence().hold(600).addPos(-3, 0, 0, 150, IType.SIN_DOWN).hold(300).addPos(0, 0, 0, 250, IType.SIN_FULL))
|
||||||
|
.addBus("BULLET", new BusAnimationSequence().setPos(-100, 0, 0));
|
||||||
|
case RELOAD: return new BusAnimation()
|
||||||
|
.addBus("BOLT_TURN", new BusAnimationSequence().addPos(0, 0, turn, 150).holdUntil(2000).addPos(0, 0, 0, 150))
|
||||||
|
.addBus("BOLT_PULL", new BusAnimationSequence().hold(100).addPos(0, 0, -1.5D, 250, IType.SIN_UP).holdUntil(1800).addPos(0, 0, 0, 200, IType.LINEAR))
|
||||||
|
.addBus("BULLET", new BusAnimationSequence().setPos(-100, 0, 0).holdUntil(1200).setPos(0, 0, 0).hold(600).addPos(0, 0.1875, 1.5, 200, IType.LINEAR))
|
||||||
|
.addBus("LIFT", new BusAnimationSequence().hold(200).addPos(30, 0, 0, 500, IType.SIN_FULL).holdUntil(1200).addPos(0, 0, 0, 500, IType.SIN_FULL))
|
||||||
|
.addBus("SHOW_CLIP", new BusAnimationSequence().setPos(1, 1, 1))
|
||||||
|
.addBus("CLIP", new BusAnimationSequence().setPos(2, -3, 0).hold(250).addPos(0.5, 1, 0, 500, IType.SIN_DOWN).addPos(0, 0, 0, 250, IType.SIN_FULL).hold(400).addPos(-0.5, 0.5, 0, 150).addPos(-3, -3, 0, 250, IType.SIN_UP))
|
||||||
|
.addBus("BULLETS", new BusAnimationSequence().setPos(2, -4, 0).hold(250).addPos(0.5, 1, 0, 500, IType.SIN_DOWN).addPos(0, 0, 0, 250, IType.SIN_FULL).hold(150).addPos(0, -1.5, 0, 250, IType.SIN_DOWN));
|
||||||
|
case JAMMED: return new BusAnimation()
|
||||||
|
.addBus("LIFT", new BusAnimationSequence().hold(250).addPos(-15, 0, 0, 500, IType.SIN_FULL).holdUntil(1650).addPos(0, 0, 0, 500, IType.SIN_FULL))
|
||||||
|
.addBus("BOLT_TURN", new BusAnimationSequence().hold(250).addPos(0, 0, turn, 150).holdUntil(1250).addPos(0, 0, 0, 150))
|
||||||
|
.addBus("BOLT_PULL", new BusAnimationSequence().hold(350).addPos(0, 0, pullAmount, 250, IType.SIN_UP).addPos(0, 0, 0, 200, IType.LINEAR).addPos(0, 0, pullAmount, 250, IType.SIN_UP).addPos(0, 0, 0, 200, IType.LINEAR));
|
||||||
|
case INSPECT: return new BusAnimation()
|
||||||
|
.addBus("LIFT", new BusAnimationSequence().hold(350).addPos(-3, 0, 0, 150, IType.SIN_DOWN).holdUntil(1050).addPos(0, 0, 0, 250, IType.SIN_FULL))
|
||||||
|
.addBus("BOLT_TURN", new BusAnimationSequence().addPos(0, 0, turn, 150).holdUntil(1050).addPos(0, 0, 0, 150))
|
||||||
|
.addBus("BOLT_PULL", new BusAnimationSequence().hold(100).addPos(0, 0, -1D, 250, IType.SIN_UP).hold(500).addPos(0, 0, 0, 200, IType.LINEAR))
|
||||||
|
.addBus("BULLET", mag == 0 ? new BusAnimationSequence().setPos(-100, 0, 0) : new BusAnimationSequence().setPos(0, 0.1875, 1.5).hold(100).addPos(0, 0.125, 0.5, 250, IType.SIN_UP).hold(500).addPos(0, 0.1875, 1.5, 200, IType.LINEAR));
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,7 @@ package com.hbm.lib;
|
|||||||
public class RefStrings {
|
public class RefStrings {
|
||||||
public static final String MODID = "hbm";
|
public static final String MODID = "hbm";
|
||||||
public static final String NAME = "Hbm's Nuclear Tech Mod";
|
public static final String NAME = "Hbm's Nuclear Tech Mod";
|
||||||
public static final String VERSION = "1.0.27 BETA (5243)";
|
public static final String VERSION = "1.0.27 BETA (5257)";
|
||||||
//HBM's Beta Naming Convention:
|
//HBM's Beta Naming Convention:
|
||||||
//V T (X)
|
//V T (X)
|
||||||
//V -> next release version
|
//V -> next release version
|
||||||
|
|||||||
@ -889,6 +889,7 @@ public class ResourceManager {
|
|||||||
public static final IModelCustom folly = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/folly.obj")).asVBO();
|
public static final IModelCustom folly = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/folly.obj")).asVBO();
|
||||||
public static final IModelCustom double_barrel = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/sacred_dragon.obj")).asVBO();
|
public static final IModelCustom double_barrel = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/sacred_dragon.obj")).asVBO();
|
||||||
public static final IModelCustom aberrator = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/aberrator.obj")).asVBO();
|
public static final IModelCustom aberrator = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/aberrator.obj")).asVBO();
|
||||||
|
public static final IModelCustom mas36 = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/mas36.obj")).asVBO();
|
||||||
|
|
||||||
public static final HashMap<String, BusAnimation> python_anim = AnimationLoader.load(new ResourceLocation(RefStrings.MODID, "models/weapons/animations/python.json"));
|
public static final HashMap<String, BusAnimation> python_anim = AnimationLoader.load(new ResourceLocation(RefStrings.MODID, "models/weapons/animations/python.json"));
|
||||||
public static final HashMap<String, BusAnimation> cursed_anim = AnimationLoader.load(new ResourceLocation(RefStrings.MODID, "models/weapons/animations/cursed.json"));
|
public static final HashMap<String, BusAnimation> cursed_anim = AnimationLoader.load(new ResourceLocation(RefStrings.MODID, "models/weapons/animations/cursed.json"));
|
||||||
@ -1039,6 +1040,7 @@ public class ResourceManager {
|
|||||||
public static final ResourceLocation double_barrel_sacred_dragon_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/double_barrel_sacred_dragon.png");
|
public static final ResourceLocation double_barrel_sacred_dragon_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/double_barrel_sacred_dragon.png");
|
||||||
public static final ResourceLocation aberrator_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/aberrator.png");
|
public static final ResourceLocation aberrator_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/aberrator.png");
|
||||||
public static final ResourceLocation eott_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/eott.png");
|
public static final ResourceLocation eott_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/eott.png");
|
||||||
|
public static final ResourceLocation mas36_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/mas36.png");
|
||||||
|
|
||||||
public static final ResourceLocation lance_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/lance.png");
|
public static final ResourceLocation lance_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/lance.png");
|
||||||
|
|
||||||
|
|||||||
@ -148,7 +148,6 @@ public class ParticleSpentCasing extends EntityFX {
|
|||||||
double initMoX = motionX;
|
double initMoX = motionX;
|
||||||
double initMoY = motionY;
|
double initMoY = motionY;
|
||||||
double initMoZ = motionZ;
|
double initMoZ = motionZ;
|
||||||
AxisAlignedBB axisalignedbb = this.boundingBox.copy();
|
|
||||||
|
|
||||||
List list = this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.addCoord(motionX, motionY, motionZ));
|
List list = this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.addCoord(motionX, motionY, motionZ));
|
||||||
|
|
||||||
|
|||||||
@ -29,20 +29,16 @@ public class BusAnimationSequence {
|
|||||||
// swizzle me timbers
|
// swizzle me timbers
|
||||||
public double[] rotMode = new double[] { 0, 1, 2 };
|
public double[] rotMode = new double[] { 0, 1, 2 };
|
||||||
|
|
||||||
|
|
||||||
public BusAnimationSequence() {
|
public BusAnimationSequence() {
|
||||||
// Initialise our keyframe storage, since it's multidimensional
|
// Initialise our keyframe storage, since it's multidimensional
|
||||||
for(int i = 0; i < 9; i++) {
|
for(int i = 0; i < 9; i++) {
|
||||||
transformKeyframes.add(new ArrayList<BusAnimationKeyframe>());
|
transformKeyframes.add(new ArrayList<BusAnimationKeyframe>());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Adds a keyframe to the given dimension
|
// Adds a keyframe to the given dimension
|
||||||
public BusAnimationSequence addKeyframe(Dimension dimension, BusAnimationKeyframe keyframe) {
|
public BusAnimationSequence addKeyframe(Dimension dimension, BusAnimationKeyframe keyframe) {
|
||||||
transformKeyframes.get(dimension.ordinal()).add(keyframe);
|
transformKeyframes.get(dimension.ordinal()).add(keyframe);
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,11 +46,17 @@ public class BusAnimationSequence {
|
|||||||
return addKeyframe(dimension, new BusAnimationKeyframe(value, duration));
|
return addKeyframe(dimension, new BusAnimationKeyframe(value, duration));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Adds a position with a duration of 0 */
|
||||||
|
public BusAnimationSequence setPos(double x, double y, double z) {
|
||||||
|
return addPos(x, y, z, 0, IType.LINEAR);
|
||||||
|
}
|
||||||
|
|
||||||
// Two helper methods for the old hard-coded animations
|
/** Adds a position with the desired duration and lininterp */
|
||||||
public BusAnimationSequence addPos(double x, double y, double z, int duration) {
|
public BusAnimationSequence addPos(double x, double y, double z, int duration) {
|
||||||
return addPos(x, y, z, duration, IType.LINEAR);
|
return addPos(x, y, z, duration, IType.LINEAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Adds a position with the desired duration and interpolation type */
|
||||||
public BusAnimationSequence addPos(double x, double y, double z, int duration, IType type) {
|
public BusAnimationSequence addPos(double x, double y, double z, int duration, IType type) {
|
||||||
addKeyframe(Dimension.TX, new BusAnimationKeyframe(x, duration, type));
|
addKeyframe(Dimension.TX, new BusAnimationKeyframe(x, duration, type));
|
||||||
addKeyframe(Dimension.TY, new BusAnimationKeyframe(y, duration, type));
|
addKeyframe(Dimension.TY, new BusAnimationKeyframe(y, duration, type));
|
||||||
@ -69,6 +71,27 @@ public class BusAnimationSequence {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Repeats the previous keyframe with the same values using lininterp. Effectively makes the animation frame pause for the desired amount of milliseconds. */
|
||||||
|
public BusAnimationSequence hold(int duration) {
|
||||||
|
addKeyframe(Dimension.TX, new BusAnimationKeyframe(getLast(Dimension.TX), duration));
|
||||||
|
addKeyframe(Dimension.TY, new BusAnimationKeyframe(getLast(Dimension.TY), duration));
|
||||||
|
addKeyframe(Dimension.TZ, new BusAnimationKeyframe(getLast(Dimension.TZ), duration));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Repeats the previous keyframe for a duration depending on the previous keyframes. Useful for getting different buses to sync up. */
|
||||||
|
public BusAnimationSequence holdUntil(int end) {
|
||||||
|
int duration = end - getTotalTime();
|
||||||
|
return hold(duration);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Grabs the numerical value for the most recent keyframe on the given dimension */
|
||||||
|
private double getLast(Dimension dim) {
|
||||||
|
List<BusAnimationKeyframe> keyframes = transformKeyframes.get(dim.ordinal());
|
||||||
|
if(keyframes.isEmpty()) return 0D;
|
||||||
|
return keyframes.get(keyframes.size() - 1).value;
|
||||||
|
}
|
||||||
|
|
||||||
//all transformation data is absolute, additive transformations have not yet been implemented
|
//all transformation data is absolute, additive transformations have not yet been implemented
|
||||||
public double[] getTransformation(int millis) {
|
public double[] getTransformation(int millis) {
|
||||||
double[] transform = new double[15];
|
double[] transform = new double[15];
|
||||||
|
|||||||
@ -120,6 +120,12 @@ public class ItemRenderHangman extends ItemRenderWeaponBase {
|
|||||||
GL11.glTranslated(-0.5, 2.5, 0);
|
GL11.glTranslated(-0.5, 2.5, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setupEntity(ItemStack stack) {
|
||||||
|
double scale = 0.0625D;
|
||||||
|
GL11.glScaled(scale, scale, scale);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderOther(ItemStack stack, ItemRenderType type) {
|
public void renderOther(ItemStack stack, ItemRenderType type) {
|
||||||
GL11.glEnable(GL11.GL_LIGHTING);
|
GL11.glEnable(GL11.GL_LIGHTING);
|
||||||
|
|||||||
@ -0,0 +1,161 @@
|
|||||||
|
package com.hbm.render.item.weapon.sedna;
|
||||||
|
|
||||||
|
import java.nio.DoubleBuffer;
|
||||||
|
|
||||||
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
|
import com.hbm.items.weapon.sedna.ItemGunBaseNT;
|
||||||
|
import com.hbm.main.ResourceManager;
|
||||||
|
import com.hbm.render.anim.HbmAnimations;
|
||||||
|
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.renderer.GLAllocation;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
|
public class ItemRenderMAS36 extends ItemRenderWeaponBase {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected float getTurnMagnitude(ItemStack stack) { return ItemGunBaseNT.getIsAiming(stack) ? 2.5F : -0.5F; }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float getViewFOV(ItemStack stack, float fov) {
|
||||||
|
float aimingProgress = ItemGunBaseNT.prevAimingProgress + (ItemGunBaseNT.aimingProgress - ItemGunBaseNT.prevAimingProgress) * interp;
|
||||||
|
return fov * (1 - aimingProgress * 0.33F);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setupFirstPerson(ItemStack stack) {
|
||||||
|
GL11.glTranslated(0, 0, 0.875);
|
||||||
|
|
||||||
|
float offset = 0.8F;
|
||||||
|
standardAimingTransform(stack,
|
||||||
|
-1.5F * offset, -1.25F * offset, 1.75F * offset,
|
||||||
|
0, -4.6825 / 8D, 0.75);
|
||||||
|
/*standardAimingTransform(stack,
|
||||||
|
-1.5F * offset, -1.25F * offset, 1.75F * offset,
|
||||||
|
-0.2, -5.875 / 8D, 1.125);*/
|
||||||
|
}
|
||||||
|
|
||||||
|
private static DoubleBuffer buf = null;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void renderFirstPerson(ItemStack stack) {
|
||||||
|
if(buf == null) buf = GLAllocation.createDirectByteBuffer(8*4).asDoubleBuffer();
|
||||||
|
|
||||||
|
ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem();
|
||||||
|
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.mas36_tex);
|
||||||
|
double scale = 0.375D;
|
||||||
|
GL11.glScaled(scale, scale, scale);
|
||||||
|
|
||||||
|
double[] equip = HbmAnimations.getRelevantTransformation("EQUIP");
|
||||||
|
double[] lift = HbmAnimations.getRelevantTransformation("LIFT");
|
||||||
|
double[] stock = HbmAnimations.getRelevantTransformation("STOCK");
|
||||||
|
double[] recoil = HbmAnimations.getRelevantTransformation("RECOIL");
|
||||||
|
double[] boltTurn = HbmAnimations.getRelevantTransformation("BOLT_TURN");
|
||||||
|
double[] boltPull = HbmAnimations.getRelevantTransformation("BOLT_PULL");
|
||||||
|
double[] bullet = HbmAnimations.getRelevantTransformation("BULLET");
|
||||||
|
double[] showClip = HbmAnimations.getRelevantTransformation("SHOW_CLIP");
|
||||||
|
double[] clip = HbmAnimations.getRelevantTransformation("CLIP");
|
||||||
|
double[] bullets = HbmAnimations.getRelevantTransformation("BULLETS");
|
||||||
|
|
||||||
|
GL11.glTranslated(0, -3, -3);
|
||||||
|
GL11.glRotated(equip[0], 1, 0, 0);
|
||||||
|
GL11.glRotated(lift[0], 1, 0, 0);
|
||||||
|
GL11.glTranslated(0, 3, 3);
|
||||||
|
|
||||||
|
GL11.glTranslated(0, 0, recoil[2]);
|
||||||
|
|
||||||
|
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||||
|
ResourceManager.mas36.renderPart("Gun");
|
||||||
|
|
||||||
|
GL11.glPushMatrix();
|
||||||
|
GL11.glTranslated(0, 0.3125, -2.125);
|
||||||
|
GL11.glRotated(stock[0], 1, 0, 0);
|
||||||
|
GL11.glTranslated(0, -0.3125, 2.125);
|
||||||
|
ResourceManager.mas36.renderPart("Stock");
|
||||||
|
GL11.glPopMatrix();
|
||||||
|
|
||||||
|
GL11.glPushMatrix();
|
||||||
|
GL11.glTranslated(0, 1.125, 0);
|
||||||
|
GL11.glRotated(boltTurn[2], 0, 0, 1);
|
||||||
|
GL11.glTranslated(0, -1.125, 0);
|
||||||
|
GL11.glTranslated(0, 0, boltPull[2]);
|
||||||
|
ResourceManager.mas36.renderPart("Bolt");
|
||||||
|
GL11.glPopMatrix();
|
||||||
|
|
||||||
|
GL11.glPushMatrix();
|
||||||
|
GL11.glTranslated(bullet[0], bullet[1], bullet[2]);
|
||||||
|
ResourceManager.mas36.renderPart("Bullet");
|
||||||
|
GL11.glPopMatrix();
|
||||||
|
|
||||||
|
//ResourceManager.mas36.renderPart("Scope");
|
||||||
|
|
||||||
|
if(showClip[0] != 0) {
|
||||||
|
GL11.glPushMatrix();
|
||||||
|
GL11.glTranslated(clip[0], clip[1], clip[2]);
|
||||||
|
ResourceManager.mas36.renderPart("Clip");
|
||||||
|
GL11.glPopMatrix();
|
||||||
|
GL11.glPushMatrix();
|
||||||
|
if(bullets[0] == 0) GL11.glEnable(GL11.GL_CLIP_PLANE0);
|
||||||
|
buf.put(new double[] { 0, 1, 0, -0.5} );
|
||||||
|
buf.rewind();
|
||||||
|
GL11.glClipPlane(GL11.GL_CLIP_PLANE0, buf);
|
||||||
|
GL11.glTranslated(bullets[0], bullets[1], bullets[2]);
|
||||||
|
ResourceManager.mas36.renderPart("Bullets");
|
||||||
|
GL11.glDisable(GL11.GL_CLIP_PLANE0);
|
||||||
|
GL11.glPopMatrix();
|
||||||
|
}
|
||||||
|
|
||||||
|
double smokeScale = 0.25;
|
||||||
|
|
||||||
|
GL11.glPushMatrix();
|
||||||
|
GL11.glTranslated(0, 1.125, 8);
|
||||||
|
GL11.glRotated(90, 0, 1, 0);
|
||||||
|
GL11.glScaled(smokeScale, smokeScale, smokeScale);
|
||||||
|
this.renderSmokeNodes(gun.getConfig(stack, 0).smokeNodes, 1D);
|
||||||
|
GL11.glPopMatrix();
|
||||||
|
|
||||||
|
GL11.glShadeModel(GL11.GL_FLAT);
|
||||||
|
|
||||||
|
GL11.glPushMatrix();
|
||||||
|
GL11.glTranslated(0, 1, 8);
|
||||||
|
GL11.glRotated(90, 0, 1, 0);
|
||||||
|
GL11.glRotated(90 * gun.shotRand, 1, 0, 0);
|
||||||
|
GL11.glScaled(0.5, 0.5, 0.5);
|
||||||
|
this.renderMuzzleFlash(gun.lastShot[0], 75, 7.5);
|
||||||
|
GL11.glPopMatrix();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setupThirdPerson(ItemStack stack) {
|
||||||
|
super.setupThirdPerson(stack);
|
||||||
|
double scale = 1.5D;
|
||||||
|
GL11.glScaled(scale, scale, scale);
|
||||||
|
GL11.glTranslated(0, 0.5, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setupInv(ItemStack stack) {
|
||||||
|
super.setupInv(stack);
|
||||||
|
double scale = 1.5D;
|
||||||
|
GL11.glScaled(scale, scale, scale);
|
||||||
|
GL11.glRotated(25, 1, 0, 0);
|
||||||
|
GL11.glRotated(45, 0, 1, 0);
|
||||||
|
GL11.glTranslated(-0.5, 0.5, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void renderOther(ItemStack stack, ItemRenderType type) {
|
||||||
|
GL11.glEnable(GL11.GL_LIGHTING);
|
||||||
|
|
||||||
|
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||||
|
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.mas36_tex);
|
||||||
|
ResourceManager.mas36.renderPart("Gun");
|
||||||
|
ResourceManager.mas36.renderPart("Stock");
|
||||||
|
ResourceManager.mas36.renderPart("Bolt");
|
||||||
|
//ResourceManager.mas36.renderPart("Scope");
|
||||||
|
GL11.glTranslated(0, -1, -6);
|
||||||
|
//ResourceManager.mas36.renderPart("Bayonet");
|
||||||
|
GL11.glShadeModel(GL11.GL_FLAT);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2286,6 +2286,7 @@ item.gun_m2.name=üsMG
|
|||||||
item.gun_maresleg.name=Repetierflinte
|
item.gun_maresleg.name=Repetierflinte
|
||||||
item.gun_maresleg_akimbo.name=Repetierflinten
|
item.gun_maresleg_akimbo.name=Repetierflinten
|
||||||
item.gun_maresleg_broken.name=Broken
|
item.gun_maresleg_broken.name=Broken
|
||||||
|
item.gun_mas36.name=Südstern
|
||||||
item.gun_minigun.name=Minigun
|
item.gun_minigun.name=Minigun
|
||||||
item.gun_minigun_lacunae.name=Lacunae
|
item.gun_minigun_lacunae.name=Lacunae
|
||||||
item.gun_mirv.name=M42 Nukleares Katapult "Experimentelles MIRV"
|
item.gun_mirv.name=M42 Nukleares Katapult "Experimentelles MIRV"
|
||||||
|
|||||||
@ -3096,6 +3096,7 @@ item.gun_m2.name=Ma Deuce
|
|||||||
item.gun_maresleg.name=Lever Action Shotgun
|
item.gun_maresleg.name=Lever Action Shotgun
|
||||||
item.gun_maresleg_akimbo.name=Lever Action Shotguns
|
item.gun_maresleg_akimbo.name=Lever Action Shotguns
|
||||||
item.gun_maresleg_broken.name=Broken
|
item.gun_maresleg_broken.name=Broken
|
||||||
|
item.gun_mas36.name=South Star
|
||||||
item.gun_minigun.name=Minigun
|
item.gun_minigun.name=Minigun
|
||||||
item.gun_minigun_lacunae.name=Lacunae
|
item.gun_minigun_lacunae.name=Lacunae
|
||||||
item.gun_mirv.name=M42 Nuclear Catapult "Experimental MIRV"
|
item.gun_mirv.name=M42 Nuclear Catapult "Experimental MIRV"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 255 B |
|
Before Width: | Height: | Size: 255 B |
|
Before Width: | Height: | Size: 264 B |
|
Before Width: | Height: | Size: 246 B |
|
Before Width: | Height: | Size: 246 B |
|
Before Width: | Height: | Size: 246 B |