You are not logged in.

IC2 Experimental builds (jenkins):
v2.0/2.1/2.2 / 2.3 / 2.5 / 2.6 (For Minecraft 1.6.4/1.7.2/1.7.10 / 1.8.9 / 1.9.4 / 1.10)
IndustrialCraft² recent version: v1.117! (For Minecraft 1.5.2 → topic)

1

Sunday, August 14th 2016, 7:25pm

History of IC2 Experimental: Gource

I made a small IC2 Gource about IC2 Experimental.
Beginning from the first day of IC2 Experimental, ending today.


14:00-15:30 is the 1.8.9 Update.
Check out my mods here.

Speiger

TMT & IC2 Classic Dev

  • "Speiger" is male

Posts: 997

Location: Germany

  • Send private message

2

Monday, August 15th 2016, 6:03am

I saw the video and its a epic way of how the progress is actually going...
But on the other hand if you have some behind the scene knowledge it shows also very drasticly what the errors are...
If you follow the whole video and look into the API area then you will see that it does not even grow, or change a lot... even so the core is constantly growing...

Edit: i wish i could make something like that too but sadly ic2c has no online state at all... For many reasons...

Reoseah

Prayer of Coolant

  • "Reoseah" is male

Posts: 29

Location: Anticreeper bunker

  • Send private message

3

Monday, August 15th 2016, 9:54am

I saw the video and its a epic way of how the progress is actually going...
But on the other hand if you have some behind the scene knowledge it shows also very drasticly what the errors are...
If you follow the whole video and look into the API area then you will see that it does not even grow, or change a lot... even so the core is constantly growing...

Edit: i wish i could make something like that too but sadly ic2c has no online state at all... For many reasons...
IC2 real gameplay have not changed as well and API had got most required things very early. So why API should have change?

But I agree that core package had really overgrown. IC2 Exp devs made whole hell of code... But in my opinion, they build a cage for themselves, instead of making code easily extendible and maintainable.
Or I'm just not enlightened ;3

Anyway, such thing should make anyone's eyes cry with blood, it's one method from IC2 code:

Spoiler Spoiler

public static EnumFacing intersects(Vec3d origin, Vec3d direction, AxisAlignedBB bbox)
{
double[] ray = getRay(origin, direction);
if ((direction.xCoord < 0.0D) && (direction.yCoord < 0.0D) && (direction.zCoord < 0.0D))
{
if (origin.xCoord < bbox.minX) {
return null;
}
if (origin.yCoord < bbox.minY) {
return null;
}
if (origin.zCoord < bbox.minZ) {
return null;
}
if (side(ray, getEdgeRay(Edge.EF, bbox)) > 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.EH, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.DH, bbox)) > 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.DC, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.BC, bbox)) > 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.BF, bbox)) < 0.0D) {
return null;
}
if ((side(ray, getEdgeRay(Edge.HG, bbox)) > 0.0D) && (side(ray, getEdgeRay(Edge.FG, bbox)) < 0.0D)) {
return EnumFacing.SOUTH;
}
if (side(ray, getEdgeRay(Edge.CG, bbox)) < 0.0D) {
return EnumFacing.UP;
}
return EnumFacing.EAST;
}
if ((direction.xCoord < 0.0D) && (direction.yCoord < 0.0D) && (direction.zCoord >= 0.0D))
{
if (origin.xCoord < bbox.minX) {
return null;
}
if (origin.yCoord < bbox.minY) {
return null;
}
if (origin.zCoord > bbox.maxZ) {
return null;
}
if (side(ray, getEdgeRay(Edge.HG, bbox)) > 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.DH, bbox)) > 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.AD, bbox)) > 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.AB, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.BF, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.FG, bbox)) < 0.0D) {
return null;
}
if ((side(ray, getEdgeRay(Edge.DC, bbox)) > 0.0D) && (side(ray, getEdgeRay(Edge.CG, bbox)) > 0.0D)) {
return EnumFacing.EAST;
}
if (side(ray, getEdgeRay(Edge.BC, bbox)) < 0.0D) {
return EnumFacing.UP;
}
return EnumFacing.NORTH;
}
if ((direction.xCoord < 0.0D) && (direction.yCoord >= 0.0D) && (direction.zCoord < 0.0D))
{
if (origin.xCoord < bbox.minX) {
return null;
}
if (origin.yCoord > bbox.maxY) {
return null;
}
if (origin.zCoord < bbox.minZ) {
return null;
}
if (side(ray, getEdgeRay(Edge.FG, bbox)) > 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.EF, bbox)) > 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.AE, bbox)) > 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.AD, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.DC, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.CG, bbox)) < 0.0D) {
return null;
}
if ((side(ray, getEdgeRay(Edge.EH, bbox)) > 0.0D) && (side(ray, getEdgeRay(Edge.HG, bbox)) > 0.0D)) {
return EnumFacing.SOUTH;
}
if (side(ray, getEdgeRay(Edge.DH, bbox)) < 0.0D) {
return EnumFacing.EAST;
}
return EnumFacing.DOWN;
}
if ((direction.xCoord < 0.0D) && (direction.yCoord >= 0.0D) && (direction.zCoord >= 0.0D))
{
if (origin.xCoord < bbox.minX) {
return null;
}
if (origin.yCoord > bbox.maxY) {
return null;
}
if (origin.zCoord > bbox.maxZ) {
return null;
}
if (side(ray, getEdgeRay(Edge.EH, bbox)) > 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.AE, bbox)) > 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.AB, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.BC, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.CG, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.HG, bbox)) > 0.0D) {
return null;
}
if ((side(ray, getEdgeRay(Edge.AD, bbox)) > 0.0D) && (side(ray, getEdgeRay(Edge.DH, bbox)) > 0.0D)) {
return EnumFacing.DOWN;
}
if (side(ray, getEdgeRay(Edge.DC, bbox)) < 0.0D) {
return EnumFacing.NORTH;
}
return EnumFacing.EAST;
}
if ((direction.xCoord >= 0.0D) && (direction.yCoord < 0.0D) && (direction.zCoord < 0.0D))
{
if (origin.xCoord > bbox.maxX) {
return null;
}
if (origin.yCoord < bbox.minY) {
return null;
}
if (origin.zCoord < bbox.minZ) {
return null;
}
if (side(ray, getEdgeRay(Edge.AB, bbox)) > 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.AE, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.EH, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.HG, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.CG, bbox)) > 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.BC, bbox)) > 0.0D) {
return null;
}
if ((side(ray, getEdgeRay(Edge.EF, bbox)) > 0.0D) && (side(ray, getEdgeRay(Edge.BF, bbox)) < 0.0D)) {
return EnumFacing.WEST;
}
if (side(ray, getEdgeRay(Edge.FG, bbox)) < 0.0D) {
return EnumFacing.SOUTH;
}
return EnumFacing.UP;
}
if ((direction.xCoord >= 0.0D) && (direction.yCoord < 0.0D) && (direction.zCoord >= 0.0D))
{
if (origin.xCoord > bbox.maxX) {
return null;
}
if (origin.yCoord < bbox.minY) {
return null;
}
if (origin.zCoord > bbox.maxZ) {
return null;
}
if (side(ray, getEdgeRay(Edge.DC, bbox)) > 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.AD, bbox)) > 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.AE, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.EF, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.FG, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.CG, bbox)) > 0.0D) {
return null;
}
if ((side(ray, getEdgeRay(Edge.AB, bbox)) > 0.0D) && (side(ray, getEdgeRay(Edge.BC, bbox)) > 0.0D)) {
return EnumFacing.NORTH;
}
if (side(ray, getEdgeRay(Edge.BF, bbox)) < 0.0D) {
return EnumFacing.WEST;
}
return EnumFacing.UP;
}
if ((direction.xCoord >= 0.0D) && (direction.yCoord >= 0.0D) && (direction.zCoord < 0.0D))
{
if (origin.xCoord > bbox.maxX) {
return null;
}
if (origin.yCoord > bbox.maxY) {
return null;
}
if (origin.zCoord < bbox.minZ) {
return null;
}
if (side(ray, getEdgeRay(Edge.BF, bbox)) > 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.AB, bbox)) > 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.AD, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.DH, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.HG, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.FG, bbox)) > 0.0D) {
return null;
}
if ((side(ray, getEdgeRay(Edge.AE, bbox)) > 0.0D) && (side(ray, getEdgeRay(Edge.EF, bbox)) > 0.0D)) {
return EnumFacing.WEST;
}
if (side(ray, getEdgeRay(Edge.EH, bbox)) < 0.0D) {
return EnumFacing.DOWN;
}
return EnumFacing.SOUTH;
}
if (origin.xCoord > bbox.maxX) {
return null;
}
if (origin.yCoord > bbox.maxY) {
return null;
}
if (origin.zCoord > bbox.maxZ) {
return null;
}
if (side(ray, getEdgeRay(Edge.EF, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.EH, bbox)) > 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.DH, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.DC, bbox)) > 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.BC, bbox)) < 0.0D) {
return null;
}
if (side(ray, getEdgeRay(Edge.BF, bbox)) > 0.0D) {
return null;
}
if ((side(ray, getEdgeRay(Edge.AB, bbox)) < 0.0D) && (side(ray, getEdgeRay(Edge.AE, bbox)) > 0.0D)) {
return EnumFacing.WEST;
}
if (side(ray, getEdgeRay(Edge.AD, bbox)) < 0.0D) {
return EnumFacing.NORTH;
}
return EnumFacing.DOWN; }



What would be really exciting is graph of dependencies in IC2 code.
His Superior Darkness Earl Cat blesses everybody who reads this with aroma of catnip and bergamot. :Industrial Diamond:

This post has been edited 1 times, last edit by "Reoseah" (Aug 15th 2016, 10:41am)


Speiger

TMT & IC2 Classic Dev

  • "Speiger" is male

Posts: 997

Location: Germany

  • Send private message

4

Monday, August 15th 2016, 10:14am

It real gameplay have not changed as well and API had got most required things very early. So why API should have change?

But I agree that core package had really overgrown. IC2 Exp devs made whole hell of code... But in my opinion, they build a cage for themselves, instead of making code easily extendible and maintainable.
Or I'm just not enlightened ;3


Yeah a mod has not to provide an api... But when its a so old and big mod (and even now) other mod supported mod its api should be solid...
Also look at any TileEntity that has a gui and look if they call their gui class xD (they wont. All gui & container classes that are not bound to Dynamic gui are now junk)

Anyway, such thing should make anyone's eyes cry with blood, it's one method from IC2 code:


Yeah classic even had that too in 1.6.4 & 1.7.10. I tried to remove it and it caused so many issues that i decided to put it back in... (in 1.9 its removed because of the full rewrite)