├── .gitignore ├── Plugins └── wideXeen │ ├── assets │ └── BACK.RAW.wideXeen.png │ └── src │ └── Rendering │ └── GraphicsRenderer.java ├── README.md ├── doco ├── Readme.txt ├── dev_history │ ├── 000_MON.png │ ├── historical_csharp.png │ ├── loc_chart_v0_1.png │ ├── loc_chart_v0_1_small.png │ ├── openXeen.png │ ├── openXeen10.png │ ├── openXeen11.png │ ├── openXeen12.png │ ├── openXeen13.png │ ├── openXeen14.png │ ├── openXeen15.png │ ├── openXeen16.png │ ├── openXeen2.png │ ├── openXeen3.png │ ├── openXeen4.png │ ├── openXeen5.png │ ├── openXeen6.png │ ├── openXeen7.png │ ├── openXeen8.png │ └── openXeen9.png └── doxygen │ └── doxyfile ├── lib ├── Catalano │ ├── Copyright.txt │ ├── Documentation │ │ └── javadoc │ │ │ ├── Catalano │ │ │ ├── Core │ │ │ │ ├── ArraysUtil.html │ │ │ │ ├── Concurrent │ │ │ │ │ ├── MulticoreExecutor.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ └── MulticoreExecutor.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── DoublePoint.html │ │ │ │ ├── DoubleRange.html │ │ │ │ ├── FloatPoint.html │ │ │ │ ├── FloatRange.html │ │ │ │ ├── IntPoint.html │ │ │ │ ├── IntRange.html │ │ │ │ ├── Stopwatch.html │ │ │ │ ├── Structs │ │ │ │ │ ├── BinaryHeap.html │ │ │ │ │ ├── DoubleArrayList.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── BinaryHeap.html │ │ │ │ │ │ └── DoubleArrayList.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── class-use │ │ │ │ │ ├── ArraysUtil.html │ │ │ │ │ ├── DoublePoint.html │ │ │ │ │ ├── DoubleRange.html │ │ │ │ │ ├── FloatPoint.html │ │ │ │ │ ├── FloatRange.html │ │ │ │ │ ├── IntPoint.html │ │ │ │ │ ├── IntRange.html │ │ │ │ │ └── Stopwatch.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ ├── package-tree.html │ │ │ │ └── package-use.html │ │ │ ├── Fuzzy │ │ │ │ ├── CentroidDefuzzifier.html │ │ │ │ ├── Clause.html │ │ │ │ ├── Database.html │ │ │ │ ├── FuzzyOutput.OutputConstraint.html │ │ │ │ ├── FuzzyOutput.html │ │ │ │ ├── FuzzySet.html │ │ │ │ ├── ICoNorm.html │ │ │ │ ├── IDefuzzifier.html │ │ │ │ ├── IMembershipFunction.html │ │ │ │ ├── INorm.html │ │ │ │ ├── IUnaryOperator.html │ │ │ │ ├── InferenceSystem.html │ │ │ │ ├── LinguisticVariable.html │ │ │ │ ├── MaximumCoNorm.html │ │ │ │ ├── MinimumNorm.html │ │ │ │ ├── NotOperator.html │ │ │ │ ├── PiecewiseLinearFunction.html │ │ │ │ ├── ProductNorm.html │ │ │ │ ├── Rule.html │ │ │ │ ├── Rulebase.html │ │ │ │ ├── SingletonFunction.html │ │ │ │ ├── TrapezoidalFunction.EdgeType.html │ │ │ │ ├── TrapezoidalFunction.html │ │ │ │ ├── class-use │ │ │ │ │ ├── CentroidDefuzzifier.html │ │ │ │ │ ├── Clause.html │ │ │ │ │ ├── Database.html │ │ │ │ │ ├── FuzzyOutput.OutputConstraint.html │ │ │ │ │ ├── FuzzyOutput.html │ │ │ │ │ ├── FuzzySet.html │ │ │ │ │ ├── ICoNorm.html │ │ │ │ │ ├── IDefuzzifier.html │ │ │ │ │ ├── IMembershipFunction.html │ │ │ │ │ ├── INorm.html │ │ │ │ │ ├── IUnaryOperator.html │ │ │ │ │ ├── InferenceSystem.html │ │ │ │ │ ├── LinguisticVariable.html │ │ │ │ │ ├── MaximumCoNorm.html │ │ │ │ │ ├── MinimumNorm.html │ │ │ │ │ ├── NotOperator.html │ │ │ │ │ ├── PiecewiseLinearFunction.html │ │ │ │ │ ├── ProductNorm.html │ │ │ │ │ ├── Rule.html │ │ │ │ │ ├── Rulebase.html │ │ │ │ │ ├── SingletonFunction.html │ │ │ │ │ ├── TrapezoidalFunction.EdgeType.html │ │ │ │ │ └── TrapezoidalFunction.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ ├── package-tree.html │ │ │ │ └── package-use.html │ │ │ ├── Graph │ │ │ │ ├── AdjacencyMatrix.html │ │ │ │ ├── Network │ │ │ │ │ ├── ClosenessCentrality.html │ │ │ │ │ ├── DegreeCentrality.html │ │ │ │ │ ├── EigenvectorCentrality.html │ │ │ │ │ ├── Hits.html │ │ │ │ │ ├── PageRank.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── ClosenessCentrality.html │ │ │ │ │ │ ├── DegreeCentrality.html │ │ │ │ │ │ ├── EigenvectorCentrality.html │ │ │ │ │ │ ├── Hits.html │ │ │ │ │ │ └── PageRank.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── Pathfinding │ │ │ │ │ ├── AStar │ │ │ │ │ │ ├── ANode.html │ │ │ │ │ │ ├── AStar.Heuristic.html │ │ │ │ │ │ ├── AStar.Neighbor.html │ │ │ │ │ │ ├── AStar.html │ │ │ │ │ │ ├── NodeMap.html │ │ │ │ │ │ ├── class-use │ │ │ │ │ │ │ ├── ANode.html │ │ │ │ │ │ │ ├── AStar.Heuristic.html │ │ │ │ │ │ │ ├── AStar.Neighbor.html │ │ │ │ │ │ │ ├── AStar.html │ │ │ │ │ │ │ └── NodeMap.html │ │ │ │ │ │ ├── package-frame.html │ │ │ │ │ │ ├── package-summary.html │ │ │ │ │ │ ├── package-tree.html │ │ │ │ │ │ └── package-use.html │ │ │ │ │ ├── ISearch.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ └── ISearch.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── class-use │ │ │ │ │ └── AdjacencyMatrix.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ ├── package-tree.html │ │ │ │ └── package-use.html │ │ │ ├── IO │ │ │ │ ├── ArffParser.html │ │ │ │ ├── CSVParser.html │ │ │ │ ├── DataParser.html │ │ │ │ ├── Serialization.html │ │ │ │ ├── class-use │ │ │ │ │ ├── ArffParser.html │ │ │ │ │ ├── CSVParser.html │ │ │ │ │ ├── DataParser.html │ │ │ │ │ └── Serialization.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ ├── package-tree.html │ │ │ │ └── package-use.html │ │ │ ├── Imaging │ │ │ │ ├── ActiveContour │ │ │ │ │ └── Ovuscule │ │ │ │ │ │ ├── IOvusculeSnake2D.html │ │ │ │ │ │ ├── Ovuscule.html │ │ │ │ │ │ ├── OvusculeSnake2DKeeper.html │ │ │ │ │ │ ├── OvusculeSnake2DNode.html │ │ │ │ │ │ ├── OvusculeSnake2DScale.html │ │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── IOvusculeSnake2D.html │ │ │ │ │ │ ├── Ovuscule.html │ │ │ │ │ │ ├── OvusculeSnake2DKeeper.html │ │ │ │ │ │ ├── OvusculeSnake2DNode.html │ │ │ │ │ │ └── OvusculeSnake2DScale.html │ │ │ │ │ │ ├── package-frame.html │ │ │ │ │ │ ├── package-summary.html │ │ │ │ │ │ ├── package-tree.html │ │ │ │ │ │ └── package-use.html │ │ │ │ ├── Color.html │ │ │ │ ├── Concurrent │ │ │ │ │ ├── Filters │ │ │ │ │ │ ├── AlphaTrimmedMean.html │ │ │ │ │ │ ├── BernsenThreshold.html │ │ │ │ │ │ ├── Blur.html │ │ │ │ │ │ ├── BradleyLocalThreshold.html │ │ │ │ │ │ ├── Closing.html │ │ │ │ │ │ ├── ColorFiltering.html │ │ │ │ │ │ ├── ConservativeSmoothing.html │ │ │ │ │ │ ├── Convolution.html │ │ │ │ │ │ ├── Desaturation.html │ │ │ │ │ │ ├── DifferenceEdgeDetector.html │ │ │ │ │ │ ├── Dilatation.html │ │ │ │ │ │ ├── Emboss.html │ │ │ │ │ │ ├── Erosion.html │ │ │ │ │ │ ├── Exp.html │ │ │ │ │ │ ├── FastVariance.html │ │ │ │ │ │ ├── Grayscale.Algorithm.html │ │ │ │ │ │ ├── Grayscale.html │ │ │ │ │ │ ├── HSLFiltering.html │ │ │ │ │ │ ├── HysteresisThreshold.html │ │ │ │ │ │ ├── ImageNormalization.html │ │ │ │ │ │ ├── Invert.html │ │ │ │ │ │ ├── Log.html │ │ │ │ │ │ ├── Maximum.html │ │ │ │ │ │ ├── MaximumEntropyThreshold.html │ │ │ │ │ │ ├── Mean.Arithmetic.html │ │ │ │ │ │ ├── Mean.html │ │ │ │ │ │ ├── Median.html │ │ │ │ │ │ ├── Minimum.html │ │ │ │ │ │ ├── MorphologicGradientImage.html │ │ │ │ │ │ ├── NiblackThreshold.html │ │ │ │ │ │ ├── Opening.html │ │ │ │ │ │ ├── OtsuThreshold.html │ │ │ │ │ │ ├── RosinThreshold.html │ │ │ │ │ │ ├── SISThreshold.html │ │ │ │ │ │ ├── SauvolaThreshold.html │ │ │ │ │ │ ├── Sharpen.html │ │ │ │ │ │ ├── SobelEdgeDetector.html │ │ │ │ │ │ ├── Threshold.html │ │ │ │ │ │ ├── Variance.html │ │ │ │ │ │ ├── YCbCrFiltering.html │ │ │ │ │ │ ├── class-use │ │ │ │ │ │ │ ├── AlphaTrimmedMean.html │ │ │ │ │ │ │ ├── BernsenThreshold.html │ │ │ │ │ │ │ ├── Blur.html │ │ │ │ │ │ │ ├── BradleyLocalThreshold.html │ │ │ │ │ │ │ ├── Closing.html │ │ │ │ │ │ │ ├── ColorFiltering.html │ │ │ │ │ │ │ ├── ConservativeSmoothing.html │ │ │ │ │ │ │ ├── Convolution.html │ │ │ │ │ │ │ ├── Desaturation.html │ │ │ │ │ │ │ ├── DifferenceEdgeDetector.html │ │ │ │ │ │ │ ├── Dilatation.html │ │ │ │ │ │ │ ├── Emboss.html │ │ │ │ │ │ │ ├── Erosion.html │ │ │ │ │ │ │ ├── Exp.html │ │ │ │ │ │ │ ├── FastVariance.html │ │ │ │ │ │ │ ├── Grayscale.Algorithm.html │ │ │ │ │ │ │ ├── Grayscale.html │ │ │ │ │ │ │ ├── HSLFiltering.html │ │ │ │ │ │ │ ├── HysteresisThreshold.html │ │ │ │ │ │ │ ├── ImageNormalization.html │ │ │ │ │ │ │ ├── Invert.html │ │ │ │ │ │ │ ├── Log.html │ │ │ │ │ │ │ ├── Maximum.html │ │ │ │ │ │ │ ├── MaximumEntropyThreshold.html │ │ │ │ │ │ │ ├── Mean.Arithmetic.html │ │ │ │ │ │ │ ├── Mean.html │ │ │ │ │ │ │ ├── Median.html │ │ │ │ │ │ │ ├── Minimum.html │ │ │ │ │ │ │ ├── MorphologicGradientImage.html │ │ │ │ │ │ │ ├── NiblackThreshold.html │ │ │ │ │ │ │ ├── Opening.html │ │ │ │ │ │ │ ├── OtsuThreshold.html │ │ │ │ │ │ │ ├── RosinThreshold.html │ │ │ │ │ │ │ ├── SISThreshold.html │ │ │ │ │ │ │ ├── SauvolaThreshold.html │ │ │ │ │ │ │ ├── Sharpen.html │ │ │ │ │ │ │ ├── SobelEdgeDetector.html │ │ │ │ │ │ │ ├── Threshold.html │ │ │ │ │ │ │ ├── Variance.html │ │ │ │ │ │ │ └── YCbCrFiltering.html │ │ │ │ │ │ ├── package-frame.html │ │ │ │ │ │ ├── package-summary.html │ │ │ │ │ │ ├── package-tree.html │ │ │ │ │ │ └── package-use.html │ │ │ │ │ ├── Share.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ └── Share.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── Corners │ │ │ │ │ ├── FREAK │ │ │ │ │ │ ├── FastRetinaKeypoint.html │ │ │ │ │ │ ├── FastRetinaKeypointDescriptor.html │ │ │ │ │ │ ├── FastRetinaKeypointDetector.FastRetinaKeypointDescriptorType.html │ │ │ │ │ │ ├── FastRetinaKeypointDetector.html │ │ │ │ │ │ ├── FastRetinaKeypointPattern.html │ │ │ │ │ │ ├── class-use │ │ │ │ │ │ │ ├── FastRetinaKeypoint.html │ │ │ │ │ │ │ ├── FastRetinaKeypointDescriptor.html │ │ │ │ │ │ │ ├── FastRetinaKeypointDetector.FastRetinaKeypointDescriptorType.html │ │ │ │ │ │ │ ├── FastRetinaKeypointDetector.html │ │ │ │ │ │ │ └── FastRetinaKeypointPattern.html │ │ │ │ │ │ ├── package-frame.html │ │ │ │ │ │ ├── package-summary.html │ │ │ │ │ │ ├── package-tree.html │ │ │ │ │ │ └── package-use.html │ │ │ │ │ ├── Fast12.html │ │ │ │ │ ├── Fast9.html │ │ │ │ │ ├── FastCornersDetector.Algorithm.html │ │ │ │ │ ├── FastCornersDetector.html │ │ │ │ │ ├── FeaturePoint.html │ │ │ │ │ ├── HarrisCornersDetector.HarrisCornerMeasure.html │ │ │ │ │ ├── HarrisCornersDetector.html │ │ │ │ │ ├── ICornersDetector.html │ │ │ │ │ ├── ICornersFeatureDetector.html │ │ │ │ │ ├── SusanCornersDetector.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── Fast12.html │ │ │ │ │ │ ├── Fast9.html │ │ │ │ │ │ ├── FastCornersDetector.Algorithm.html │ │ │ │ │ │ ├── FastCornersDetector.html │ │ │ │ │ │ ├── FeaturePoint.html │ │ │ │ │ │ ├── HarrisCornersDetector.HarrisCornerMeasure.html │ │ │ │ │ │ ├── HarrisCornersDetector.html │ │ │ │ │ │ ├── ICornersDetector.html │ │ │ │ │ │ ├── ICornersFeatureDetector.html │ │ │ │ │ │ └── SusanCornersDetector.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── FastBitmap.ColorSpace.html │ │ │ │ ├── FastBitmap.CoordinateSystem.html │ │ │ │ ├── FastBitmap.html │ │ │ │ ├── FastGraphics.html │ │ │ │ ├── Filters │ │ │ │ │ ├── AdaptiveContrastEnhancement.html │ │ │ │ │ ├── Add.html │ │ │ │ │ ├── AdditiveNoise.html │ │ │ │ │ ├── AlphaTrimmedMean.html │ │ │ │ │ ├── And.html │ │ │ │ │ ├── ArtifactsRemoval.html │ │ │ │ │ ├── Artistic │ │ │ │ │ │ ├── Blend.Algorithm.html │ │ │ │ │ │ ├── Blend.html │ │ │ │ │ │ ├── FakeHDR.html │ │ │ │ │ │ ├── FilmGrain.html │ │ │ │ │ │ ├── HeatMap.html │ │ │ │ │ │ ├── OilPainting.html │ │ │ │ │ │ ├── Opacity.html │ │ │ │ │ │ ├── PencilSketch.html │ │ │ │ │ │ ├── Solarize.html │ │ │ │ │ │ ├── SpecularBloom.AdaptiveThreshold.html │ │ │ │ │ │ ├── SpecularBloom.html │ │ │ │ │ │ ├── class-use │ │ │ │ │ │ │ ├── Blend.Algorithm.html │ │ │ │ │ │ │ ├── Blend.html │ │ │ │ │ │ │ ├── FakeHDR.html │ │ │ │ │ │ │ ├── FilmGrain.html │ │ │ │ │ │ │ ├── HeatMap.html │ │ │ │ │ │ │ ├── OilPainting.html │ │ │ │ │ │ │ ├── Opacity.html │ │ │ │ │ │ │ ├── PencilSketch.html │ │ │ │ │ │ │ ├── Solarize.html │ │ │ │ │ │ │ ├── SpecularBloom.AdaptiveThreshold.html │ │ │ │ │ │ │ └── SpecularBloom.html │ │ │ │ │ │ ├── package-frame.html │ │ │ │ │ │ ├── package-summary.html │ │ │ │ │ │ ├── package-tree.html │ │ │ │ │ │ └── package-use.html │ │ │ │ │ ├── BernsenThreshold.html │ │ │ │ │ ├── BinaryClosing.html │ │ │ │ │ ├── BinaryDilatation.html │ │ │ │ │ ├── BinaryErosion.html │ │ │ │ │ ├── BinaryOpening.html │ │ │ │ │ ├── BlobsFiltering.Filter.html │ │ │ │ │ ├── BlobsFiltering.html │ │ │ │ │ ├── Blur.html │ │ │ │ │ ├── BottomHat.html │ │ │ │ │ ├── BradleyLocalThreshold.html │ │ │ │ │ ├── BrightnessCorrection.html │ │ │ │ │ ├── CannyEdgeDetector.html │ │ │ │ │ ├── Clahe.html │ │ │ │ │ ├── Closing.html │ │ │ │ │ ├── ColorFiltering.html │ │ │ │ │ ├── ConservativeSmoothing.html │ │ │ │ │ ├── ContrastCorrection.html │ │ │ │ │ ├── Convolution.html │ │ │ │ │ ├── CosineTransform.html │ │ │ │ │ ├── Crop.html │ │ │ │ │ ├── Desaturation.html │ │ │ │ │ ├── Difference.html │ │ │ │ │ ├── DifferenceEdgeDetector.html │ │ │ │ │ ├── DifferenceOfGaussian.html │ │ │ │ │ ├── Dilatation.html │ │ │ │ │ ├── DistanceTransform.Distance.html │ │ │ │ │ ├── DistanceTransform.html │ │ │ │ │ ├── Division.html │ │ │ │ │ ├── Emboss.html │ │ │ │ │ ├── Erosion.html │ │ │ │ │ ├── Exp.html │ │ │ │ │ ├── ExtractBiggestBlob.html │ │ │ │ │ ├── ExtractBoundary.Algorithm.html │ │ │ │ │ ├── ExtractBoundary.html │ │ │ │ │ ├── ExtractNormalizedRGBChannel.Channel.html │ │ │ │ │ ├── ExtractNormalizedRGBChannel.html │ │ │ │ │ ├── ExtractRGBChannel.Channel.html │ │ │ │ │ ├── ExtractRGBChannel.html │ │ │ │ │ ├── ExtractYCbCrChannel.Channel.html │ │ │ │ │ ├── ExtractYCbCrChannel.html │ │ │ │ │ ├── FastVariance.html │ │ │ │ │ ├── FillHoles.html │ │ │ │ │ ├── FloodFill.Algorithm.html │ │ │ │ │ ├── FloodFill.html │ │ │ │ │ ├── FourierTransform.html │ │ │ │ │ ├── FrequencyFilter.html │ │ │ │ │ ├── GaborFilter.html │ │ │ │ │ ├── GammaCorrection.html │ │ │ │ │ ├── GaussianBlur.html │ │ │ │ │ ├── GaussianBoxBlur.html │ │ │ │ │ ├── GaussianNoise.html │ │ │ │ │ ├── GradientMap.html │ │ │ │ │ ├── GrayWorld.html │ │ │ │ │ ├── Grayscale.Algorithm.html │ │ │ │ │ ├── Grayscale.html │ │ │ │ │ ├── HSLFiltering.html │ │ │ │ │ ├── HSLLinear.html │ │ │ │ │ ├── HighBoost.html │ │ │ │ │ ├── HistogramEqualization.html │ │ │ │ │ ├── HistogramMatching.html │ │ │ │ │ ├── HistogramShrink.html │ │ │ │ │ ├── HistogramStretch.html │ │ │ │ │ ├── HomogenityEdgeDetector.html │ │ │ │ │ ├── HomomorphicFilter.html │ │ │ │ │ ├── HorizontalIntensityStatistics.html │ │ │ │ │ ├── HorizontalRunLengthSmoothing.html │ │ │ │ │ ├── HysteresisThreshold.html │ │ │ │ │ ├── ImageNormalization.html │ │ │ │ │ ├── ImagePyramids.html │ │ │ │ │ ├── ImageQuantization.html │ │ │ │ │ ├── Intersect.html │ │ │ │ │ ├── Invert.html │ │ │ │ │ ├── IsoDataClassifier.html │ │ │ │ │ ├── IsotropicCompassEdgeDetector.html │ │ │ │ │ ├── KirschCompassEdgeDetector.html │ │ │ │ │ ├── Kuwahara.html │ │ │ │ │ ├── LevelsCurve.html │ │ │ │ │ ├── LevelsLinear.html │ │ │ │ │ ├── Log.html │ │ │ │ │ ├── Maximum.html │ │ │ │ │ ├── MaximumEntropyThreshold.html │ │ │ │ │ ├── Mean.Arithmetic.html │ │ │ │ │ ├── Mean.html │ │ │ │ │ ├── MeanShift.html │ │ │ │ │ ├── Median.html │ │ │ │ │ ├── MedianCut.html │ │ │ │ │ ├── Merge.html │ │ │ │ │ ├── MidPoint.html │ │ │ │ │ ├── Minimum.html │ │ │ │ │ ├── Mirror.html │ │ │ │ │ ├── Mode.html │ │ │ │ │ ├── ModifiedWhitePatch.html │ │ │ │ │ ├── Morph.html │ │ │ │ │ ├── MorphologicGradientImage.html │ │ │ │ │ ├── MoveTowards.html │ │ │ │ │ ├── Multiply.html │ │ │ │ │ ├── Nand.html │ │ │ │ │ ├── NiblackThreshold.html │ │ │ │ │ ├── NickThreshold.html │ │ │ │ │ ├── Nor.html │ │ │ │ │ ├── Opening.html │ │ │ │ │ ├── Or.html │ │ │ │ │ ├── OtsuThreshold.html │ │ │ │ │ ├── Outline.html │ │ │ │ │ ├── PoissonNoise.html │ │ │ │ │ ├── PrewittCompassEdgeDetector.html │ │ │ │ │ ├── RGChromaticity.html │ │ │ │ │ ├── ReplaceColor.html │ │ │ │ │ ├── ReplaceRGBChannel.RGB.html │ │ │ │ │ ├── ReplaceRGBChannel.html │ │ │ │ │ ├── Resize.Algorithm.html │ │ │ │ │ ├── Resize.html │ │ │ │ │ ├── ResizeBicubic.html │ │ │ │ │ ├── ResizeBilinear.html │ │ │ │ │ ├── ResizeNearestNeighbor.html │ │ │ │ │ ├── RobertsCrossEdgeDetector.html │ │ │ │ │ ├── RobinsonCompassEdgeDetector.html │ │ │ │ │ ├── RosinThreshold.html │ │ │ │ │ ├── Rotate.Algorithm.html │ │ │ │ │ ├── Rotate.html │ │ │ │ │ ├── RotateBicubic.html │ │ │ │ │ ├── RotateBilinear.html │ │ │ │ │ ├── RotateChannels.html │ │ │ │ │ ├── RotateNearestNeighbor.html │ │ │ │ │ ├── SISThreshold.html │ │ │ │ │ ├── SaltAndPepperNoise.html │ │ │ │ │ ├── SaturationCorrection.html │ │ │ │ │ ├── SauvolaThreshold.html │ │ │ │ │ ├── ScharrCompassEdgeDetector.html │ │ │ │ │ ├── SeparableConvolution.html │ │ │ │ │ ├── Sepia.html │ │ │ │ │ ├── Sharpen.html │ │ │ │ │ ├── SobelCompassEdgeDetector.html │ │ │ │ │ ├── SobelEdgeDetector.html │ │ │ │ │ ├── StereoAnaglyph.Algorithm.html │ │ │ │ │ ├── StereoAnaglyph.html │ │ │ │ │ ├── Subtract.html │ │ │ │ │ ├── Threshold.html │ │ │ │ │ ├── TopHat.html │ │ │ │ │ ├── UnsharpMasking.html │ │ │ │ │ ├── Variance.html │ │ │ │ │ ├── VerticalIntensityStatistics.html │ │ │ │ │ ├── VerticalRunLengthSmoothing.html │ │ │ │ │ ├── Watershed.html │ │ │ │ │ ├── WaveletTransform.html │ │ │ │ │ ├── WeightedMedian.html │ │ │ │ │ ├── WhitePatch.html │ │ │ │ │ ├── WolfJolionThreshold.html │ │ │ │ │ ├── Xor.html │ │ │ │ │ ├── YCbCrFiltering.html │ │ │ │ │ ├── ZhangSuenThinning.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── AdaptiveContrastEnhancement.html │ │ │ │ │ │ ├── Add.html │ │ │ │ │ │ ├── AdditiveNoise.html │ │ │ │ │ │ ├── AlphaTrimmedMean.html │ │ │ │ │ │ ├── And.html │ │ │ │ │ │ ├── ArtifactsRemoval.html │ │ │ │ │ │ ├── BernsenThreshold.html │ │ │ │ │ │ ├── BinaryClosing.html │ │ │ │ │ │ ├── BinaryDilatation.html │ │ │ │ │ │ ├── BinaryErosion.html │ │ │ │ │ │ ├── BinaryOpening.html │ │ │ │ │ │ ├── BlobsFiltering.Filter.html │ │ │ │ │ │ ├── BlobsFiltering.html │ │ │ │ │ │ ├── Blur.html │ │ │ │ │ │ ├── BottomHat.html │ │ │ │ │ │ ├── BradleyLocalThreshold.html │ │ │ │ │ │ ├── BrightnessCorrection.html │ │ │ │ │ │ ├── CannyEdgeDetector.html │ │ │ │ │ │ ├── Clahe.html │ │ │ │ │ │ ├── Closing.html │ │ │ │ │ │ ├── ColorFiltering.html │ │ │ │ │ │ ├── ConservativeSmoothing.html │ │ │ │ │ │ ├── ContrastCorrection.html │ │ │ │ │ │ ├── Convolution.html │ │ │ │ │ │ ├── CosineTransform.html │ │ │ │ │ │ ├── Crop.html │ │ │ │ │ │ ├── Desaturation.html │ │ │ │ │ │ ├── Difference.html │ │ │ │ │ │ ├── DifferenceEdgeDetector.html │ │ │ │ │ │ ├── DifferenceOfGaussian.html │ │ │ │ │ │ ├── Dilatation.html │ │ │ │ │ │ ├── DistanceTransform.Distance.html │ │ │ │ │ │ ├── DistanceTransform.html │ │ │ │ │ │ ├── Division.html │ │ │ │ │ │ ├── Emboss.html │ │ │ │ │ │ ├── Erosion.html │ │ │ │ │ │ ├── Exp.html │ │ │ │ │ │ ├── ExtractBiggestBlob.html │ │ │ │ │ │ ├── ExtractBoundary.Algorithm.html │ │ │ │ │ │ ├── ExtractBoundary.html │ │ │ │ │ │ ├── ExtractNormalizedRGBChannel.Channel.html │ │ │ │ │ │ ├── ExtractNormalizedRGBChannel.html │ │ │ │ │ │ ├── ExtractRGBChannel.Channel.html │ │ │ │ │ │ ├── ExtractRGBChannel.html │ │ │ │ │ │ ├── ExtractYCbCrChannel.Channel.html │ │ │ │ │ │ ├── ExtractYCbCrChannel.html │ │ │ │ │ │ ├── FastVariance.html │ │ │ │ │ │ ├── FillHoles.html │ │ │ │ │ │ ├── FloodFill.Algorithm.html │ │ │ │ │ │ ├── FloodFill.html │ │ │ │ │ │ ├── FourierTransform.html │ │ │ │ │ │ ├── FrequencyFilter.html │ │ │ │ │ │ ├── GaborFilter.html │ │ │ │ │ │ ├── GammaCorrection.html │ │ │ │ │ │ ├── GaussianBlur.html │ │ │ │ │ │ ├── GaussianBoxBlur.html │ │ │ │ │ │ ├── GaussianNoise.html │ │ │ │ │ │ ├── GradientMap.html │ │ │ │ │ │ ├── GrayWorld.html │ │ │ │ │ │ ├── Grayscale.Algorithm.html │ │ │ │ │ │ ├── Grayscale.html │ │ │ │ │ │ ├── HSLFiltering.html │ │ │ │ │ │ ├── HSLLinear.html │ │ │ │ │ │ ├── HighBoost.html │ │ │ │ │ │ ├── HistogramEqualization.html │ │ │ │ │ │ ├── HistogramMatching.html │ │ │ │ │ │ ├── HistogramShrink.html │ │ │ │ │ │ ├── HistogramStretch.html │ │ │ │ │ │ ├── HomogenityEdgeDetector.html │ │ │ │ │ │ ├── HomomorphicFilter.html │ │ │ │ │ │ ├── HorizontalIntensityStatistics.html │ │ │ │ │ │ ├── HorizontalRunLengthSmoothing.html │ │ │ │ │ │ ├── HysteresisThreshold.html │ │ │ │ │ │ ├── ImageNormalization.html │ │ │ │ │ │ ├── ImagePyramids.html │ │ │ │ │ │ ├── ImageQuantization.html │ │ │ │ │ │ ├── Intersect.html │ │ │ │ │ │ ├── Invert.html │ │ │ │ │ │ ├── IsoDataClassifier.html │ │ │ │ │ │ ├── IsotropicCompassEdgeDetector.html │ │ │ │ │ │ ├── KirschCompassEdgeDetector.html │ │ │ │ │ │ ├── Kuwahara.html │ │ │ │ │ │ ├── LevelsCurve.html │ │ │ │ │ │ ├── LevelsLinear.html │ │ │ │ │ │ ├── Log.html │ │ │ │ │ │ ├── Maximum.html │ │ │ │ │ │ ├── MaximumEntropyThreshold.html │ │ │ │ │ │ ├── Mean.Arithmetic.html │ │ │ │ │ │ ├── Mean.html │ │ │ │ │ │ ├── MeanShift.html │ │ │ │ │ │ ├── Median.html │ │ │ │ │ │ ├── MedianCut.html │ │ │ │ │ │ ├── Merge.html │ │ │ │ │ │ ├── MidPoint.html │ │ │ │ │ │ ├── Minimum.html │ │ │ │ │ │ ├── Mirror.html │ │ │ │ │ │ ├── Mode.html │ │ │ │ │ │ ├── ModifiedWhitePatch.html │ │ │ │ │ │ ├── Morph.html │ │ │ │ │ │ ├── MorphologicGradientImage.html │ │ │ │ │ │ ├── MoveTowards.html │ │ │ │ │ │ ├── Multiply.html │ │ │ │ │ │ ├── Nand.html │ │ │ │ │ │ ├── NiblackThreshold.html │ │ │ │ │ │ ├── NickThreshold.html │ │ │ │ │ │ ├── Nor.html │ │ │ │ │ │ ├── Opening.html │ │ │ │ │ │ ├── Or.html │ │ │ │ │ │ ├── OtsuThreshold.html │ │ │ │ │ │ ├── Outline.html │ │ │ │ │ │ ├── PoissonNoise.html │ │ │ │ │ │ ├── PrewittCompassEdgeDetector.html │ │ │ │ │ │ ├── RGChromaticity.html │ │ │ │ │ │ ├── ReplaceColor.html │ │ │ │ │ │ ├── ReplaceRGBChannel.RGB.html │ │ │ │ │ │ ├── ReplaceRGBChannel.html │ │ │ │ │ │ ├── Resize.Algorithm.html │ │ │ │ │ │ ├── Resize.html │ │ │ │ │ │ ├── ResizeBicubic.html │ │ │ │ │ │ ├── ResizeBilinear.html │ │ │ │ │ │ ├── ResizeNearestNeighbor.html │ │ │ │ │ │ ├── RobertsCrossEdgeDetector.html │ │ │ │ │ │ ├── RobinsonCompassEdgeDetector.html │ │ │ │ │ │ ├── RosinThreshold.html │ │ │ │ │ │ ├── Rotate.Algorithm.html │ │ │ │ │ │ ├── Rotate.html │ │ │ │ │ │ ├── RotateBicubic.html │ │ │ │ │ │ ├── RotateBilinear.html │ │ │ │ │ │ ├── RotateChannels.html │ │ │ │ │ │ ├── RotateNearestNeighbor.html │ │ │ │ │ │ ├── SISThreshold.html │ │ │ │ │ │ ├── SaltAndPepperNoise.html │ │ │ │ │ │ ├── SaturationCorrection.html │ │ │ │ │ │ ├── SauvolaThreshold.html │ │ │ │ │ │ ├── ScharrCompassEdgeDetector.html │ │ │ │ │ │ ├── SeparableConvolution.html │ │ │ │ │ │ ├── Sepia.html │ │ │ │ │ │ ├── Sharpen.html │ │ │ │ │ │ ├── SobelCompassEdgeDetector.html │ │ │ │ │ │ ├── SobelEdgeDetector.html │ │ │ │ │ │ ├── StereoAnaglyph.Algorithm.html │ │ │ │ │ │ ├── StereoAnaglyph.html │ │ │ │ │ │ ├── Subtract.html │ │ │ │ │ │ ├── Threshold.html │ │ │ │ │ │ ├── TopHat.html │ │ │ │ │ │ ├── UnsharpMasking.html │ │ │ │ │ │ ├── Variance.html │ │ │ │ │ │ ├── VerticalIntensityStatistics.html │ │ │ │ │ │ ├── VerticalRunLengthSmoothing.html │ │ │ │ │ │ ├── Watershed.html │ │ │ │ │ │ ├── WaveletTransform.html │ │ │ │ │ │ ├── WeightedMedian.html │ │ │ │ │ │ ├── WhitePatch.html │ │ │ │ │ │ ├── WolfJolionThreshold.html │ │ │ │ │ │ ├── Xor.html │ │ │ │ │ │ ├── YCbCrFiltering.html │ │ │ │ │ │ └── ZhangSuenThinning.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── IBaseInPlace.html │ │ │ │ ├── IExtract.html │ │ │ │ ├── IProcessImage.html │ │ │ │ ├── Shapes │ │ │ │ │ ├── IntPolygon.html │ │ │ │ │ ├── IntRectangle.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── IntPolygon.html │ │ │ │ │ │ └── IntRectangle.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── Tools │ │ │ │ │ ├── Blob.html │ │ │ │ │ ├── BlobDetection.Algorithm.html │ │ │ │ │ ├── BlobDetection.html │ │ │ │ │ ├── ColorConverter.YCbCrColorSpace.html │ │ │ │ │ ├── ColorConverter.html │ │ │ │ │ ├── ColorDifference.html │ │ │ │ │ ├── ColorMoments.html │ │ │ │ │ ├── CompassConvolutionKernel.html │ │ │ │ │ ├── ConvolutionKernel.html │ │ │ │ │ ├── Curve.html │ │ │ │ │ ├── DocumentSkewChecker.html │ │ │ │ │ ├── ExtractBlob.html │ │ │ │ │ ├── FastRadialSymmetryTransform.html │ │ │ │ │ ├── FiltersSequence.html │ │ │ │ │ ├── FlusserSukMoments.html │ │ │ │ │ ├── GradientImage.html │ │ │ │ │ ├── Granulometry.html │ │ │ │ │ ├── GrayLevelCooccurrenceMatrix.Degree.html │ │ │ │ │ ├── GrayLevelCooccurrenceMatrix.html │ │ │ │ │ ├── GrayLevelDifferenceMethod.Degree.html │ │ │ │ │ ├── GrayLevelDifferenceMethod.html │ │ │ │ │ ├── GrayLevelRunLengthMatrix.Degree.html │ │ │ │ │ ├── GrayLevelRunLengthMatrix.html │ │ │ │ │ ├── HaralickDescriptors.html │ │ │ │ │ ├── HistogramOfOrientedGradients.html │ │ │ │ │ ├── HoughLine.html │ │ │ │ │ ├── HoughLineTransformation.html │ │ │ │ │ ├── HuMoments.html │ │ │ │ │ ├── ImageHistogram.html │ │ │ │ │ ├── ImageMoments.html │ │ │ │ │ ├── ImagePadding.html │ │ │ │ │ ├── ImageStatistics.html │ │ │ │ │ ├── IntegralImage.html │ │ │ │ │ ├── Interpolation.html │ │ │ │ │ ├── Kernel.html │ │ │ │ │ ├── LawsTextureEnergy.html │ │ │ │ │ ├── LocalBinaryPattern.html │ │ │ │ │ ├── LocalTernaryPattern.html │ │ │ │ │ ├── MaitraMoments.html │ │ │ │ │ ├── NearestNeighborMatrix.Direction.html │ │ │ │ │ ├── NearestNeighborMatrix.html │ │ │ │ │ ├── ObjectiveFidelity.html │ │ │ │ │ ├── OrthogonalVariantMoments.html │ │ │ │ │ ├── QuadrilateralTransformation.html │ │ │ │ │ ├── RunLengthFeatures.html │ │ │ │ │ ├── ShapeDescriptors.html │ │ │ │ │ ├── VariationLaplacian.html │ │ │ │ │ ├── WeberLocalDescriptor.html │ │ │ │ │ ├── ZernikeMoments.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── Blob.html │ │ │ │ │ │ ├── BlobDetection.Algorithm.html │ │ │ │ │ │ ├── BlobDetection.html │ │ │ │ │ │ ├── ColorConverter.YCbCrColorSpace.html │ │ │ │ │ │ ├── ColorConverter.html │ │ │ │ │ │ ├── ColorDifference.html │ │ │ │ │ │ ├── ColorMoments.html │ │ │ │ │ │ ├── CompassConvolutionKernel.html │ │ │ │ │ │ ├── ConvolutionKernel.html │ │ │ │ │ │ ├── Curve.html │ │ │ │ │ │ ├── DocumentSkewChecker.html │ │ │ │ │ │ ├── ExtractBlob.html │ │ │ │ │ │ ├── FastRadialSymmetryTransform.html │ │ │ │ │ │ ├── FiltersSequence.html │ │ │ │ │ │ ├── FlusserSukMoments.html │ │ │ │ │ │ ├── GradientImage.html │ │ │ │ │ │ ├── Granulometry.html │ │ │ │ │ │ ├── GrayLevelCooccurrenceMatrix.Degree.html │ │ │ │ │ │ ├── GrayLevelCooccurrenceMatrix.html │ │ │ │ │ │ ├── GrayLevelDifferenceMethod.Degree.html │ │ │ │ │ │ ├── GrayLevelDifferenceMethod.html │ │ │ │ │ │ ├── GrayLevelRunLengthMatrix.Degree.html │ │ │ │ │ │ ├── GrayLevelRunLengthMatrix.html │ │ │ │ │ │ ├── HaralickDescriptors.html │ │ │ │ │ │ ├── HistogramOfOrientedGradients.html │ │ │ │ │ │ ├── HoughLine.html │ │ │ │ │ │ ├── HoughLineTransformation.html │ │ │ │ │ │ ├── HuMoments.html │ │ │ │ │ │ ├── ImageHistogram.html │ │ │ │ │ │ ├── ImageMoments.html │ │ │ │ │ │ ├── ImagePadding.html │ │ │ │ │ │ ├── ImageStatistics.html │ │ │ │ │ │ ├── IntegralImage.html │ │ │ │ │ │ ├── Interpolation.html │ │ │ │ │ │ ├── Kernel.html │ │ │ │ │ │ ├── LawsTextureEnergy.html │ │ │ │ │ │ ├── LocalBinaryPattern.html │ │ │ │ │ │ ├── LocalTernaryPattern.html │ │ │ │ │ │ ├── MaitraMoments.html │ │ │ │ │ │ ├── NearestNeighborMatrix.Direction.html │ │ │ │ │ │ ├── NearestNeighborMatrix.html │ │ │ │ │ │ ├── ObjectiveFidelity.html │ │ │ │ │ │ ├── OrthogonalVariantMoments.html │ │ │ │ │ │ ├── QuadrilateralTransformation.html │ │ │ │ │ │ ├── RunLengthFeatures.html │ │ │ │ │ │ ├── ShapeDescriptors.html │ │ │ │ │ │ ├── VariationLaplacian.html │ │ │ │ │ │ ├── WeberLocalDescriptor.html │ │ │ │ │ │ └── ZernikeMoments.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── class-use │ │ │ │ │ ├── Color.html │ │ │ │ │ ├── FastBitmap.ColorSpace.html │ │ │ │ │ ├── FastBitmap.CoordinateSystem.html │ │ │ │ │ ├── FastBitmap.html │ │ │ │ │ ├── FastGraphics.html │ │ │ │ │ ├── IBaseInPlace.html │ │ │ │ │ ├── IExtract.html │ │ │ │ │ └── IProcessImage.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ ├── package-tree.html │ │ │ │ └── package-use.html │ │ │ ├── MachineLearning │ │ │ │ ├── BenchmarkClassifier.html │ │ │ │ ├── Classification │ │ │ │ │ ├── DecisionTrees │ │ │ │ │ │ ├── DecisionTree.SplitRule.html │ │ │ │ │ │ ├── DecisionTree.html │ │ │ │ │ │ ├── Learning │ │ │ │ │ │ │ ├── AdaBoost.html │ │ │ │ │ │ │ ├── GradientBoostingTree.html │ │ │ │ │ │ │ ├── RandomForest.RandomSelection.html │ │ │ │ │ │ │ ├── RandomForest.html │ │ │ │ │ │ │ ├── class-use │ │ │ │ │ │ │ │ ├── AdaBoost.html │ │ │ │ │ │ │ │ ├── GradientBoostingTree.html │ │ │ │ │ │ │ │ ├── RandomForest.RandomSelection.html │ │ │ │ │ │ │ │ └── RandomForest.html │ │ │ │ │ │ │ ├── package-frame.html │ │ │ │ │ │ │ ├── package-summary.html │ │ │ │ │ │ │ ├── package-tree.html │ │ │ │ │ │ │ └── package-use.html │ │ │ │ │ │ ├── class-use │ │ │ │ │ │ │ ├── DecisionTree.SplitRule.html │ │ │ │ │ │ │ └── DecisionTree.html │ │ │ │ │ │ ├── package-frame.html │ │ │ │ │ │ ├── package-summary.html │ │ │ │ │ │ ├── package-tree.html │ │ │ │ │ │ └── package-use.html │ │ │ │ │ ├── IClassifier.html │ │ │ │ │ ├── KNearestNeighbors.html │ │ │ │ │ ├── MulticlassSupportVectorMachine.html │ │ │ │ │ ├── SVM.Strategy.html │ │ │ │ │ ├── SVM.html │ │ │ │ │ ├── SparseMulticlassSupportVectorMachine.html │ │ │ │ │ ├── SparseSupportVectorMachine.html │ │ │ │ │ ├── SupportVectorMachine.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── IClassifier.html │ │ │ │ │ │ ├── KNearestNeighbors.html │ │ │ │ │ │ ├── MulticlassSupportVectorMachine.html │ │ │ │ │ │ ├── SVM.Strategy.html │ │ │ │ │ │ ├── SVM.html │ │ │ │ │ │ ├── SparseMulticlassSupportVectorMachine.html │ │ │ │ │ │ ├── SparseSupportVectorMachine.html │ │ │ │ │ │ └── SupportVectorMachine.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── Codification.html │ │ │ │ ├── ConfusionMatrix.html │ │ │ │ ├── DatasetClassification.html │ │ │ │ ├── DatasetStatistics.html │ │ │ │ ├── DecisionVariable.Type.html │ │ │ │ ├── DecisionVariable.html │ │ │ │ ├── Exploration │ │ │ │ │ ├── BoltzmannExploration.html │ │ │ │ │ ├── EpsilonGreedyExploration.html │ │ │ │ │ ├── IExplorationPolicy.html │ │ │ │ │ ├── QLearning.html │ │ │ │ │ ├── RouletteWheelExploration.html │ │ │ │ │ ├── Sarsa.html │ │ │ │ │ ├── TabuSearchExploration.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── BoltzmannExploration.html │ │ │ │ │ │ ├── EpsilonGreedyExploration.html │ │ │ │ │ │ ├── IExplorationPolicy.html │ │ │ │ │ │ ├── QLearning.html │ │ │ │ │ │ ├── RouletteWheelExploration.html │ │ │ │ │ │ ├── Sarsa.html │ │ │ │ │ │ └── TabuSearchExploration.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── Normalization.html │ │ │ │ ├── Performance │ │ │ │ │ ├── HoldoutValidation.html │ │ │ │ │ ├── IValidation.html │ │ │ │ │ ├── LeaveOneOutCrossValidation.html │ │ │ │ │ ├── SuppliedValidation.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── HoldoutValidation.html │ │ │ │ │ │ ├── IValidation.html │ │ │ │ │ │ ├── LeaveOneOutCrossValidation.html │ │ │ │ │ │ └── SuppliedValidation.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── Regression │ │ │ │ │ ├── IRegression.html │ │ │ │ │ ├── KNearestNeighbors.html │ │ │ │ │ ├── RegressionTrees │ │ │ │ │ │ ├── Learning │ │ │ │ │ │ │ ├── GradientBoostingTree.Loss.html │ │ │ │ │ │ │ ├── GradientBoostingTree.html │ │ │ │ │ │ │ ├── RandomForest.html │ │ │ │ │ │ │ ├── class-use │ │ │ │ │ │ │ │ ├── GradientBoostingTree.Loss.html │ │ │ │ │ │ │ │ ├── GradientBoostingTree.html │ │ │ │ │ │ │ │ └── RandomForest.html │ │ │ │ │ │ │ ├── package-frame.html │ │ │ │ │ │ │ ├── package-summary.html │ │ │ │ │ │ │ ├── package-tree.html │ │ │ │ │ │ │ └── package-use.html │ │ │ │ │ │ ├── RegressionTree.NodeOutput.html │ │ │ │ │ │ ├── RegressionTree.html │ │ │ │ │ │ ├── class-use │ │ │ │ │ │ │ ├── RegressionTree.NodeOutput.html │ │ │ │ │ │ │ └── RegressionTree.html │ │ │ │ │ │ ├── package-frame.html │ │ │ │ │ │ ├── package-summary.html │ │ │ │ │ │ ├── package-tree.html │ │ │ │ │ │ └── package-use.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── IRegression.html │ │ │ │ │ │ └── KNearestNeighbors.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── Standartization.html │ │ │ │ ├── class-use │ │ │ │ │ ├── BenchmarkClassifier.html │ │ │ │ │ ├── Codification.html │ │ │ │ │ ├── ConfusionMatrix.html │ │ │ │ │ ├── DatasetClassification.html │ │ │ │ │ ├── DatasetStatistics.html │ │ │ │ │ ├── DecisionVariable.Type.html │ │ │ │ │ ├── DecisionVariable.html │ │ │ │ │ ├── Normalization.html │ │ │ │ │ └── Standartization.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ ├── package-tree.html │ │ │ │ └── package-use.html │ │ │ ├── Math │ │ │ │ ├── Approximation.html │ │ │ │ ├── ComplexNumber.html │ │ │ │ ├── Constants.html │ │ │ │ ├── Decompositions │ │ │ │ │ ├── CholeskyDecomposition.html │ │ │ │ │ ├── EigenvalueDecomposition.html │ │ │ │ │ ├── LUDecomposition.html │ │ │ │ │ ├── QRDecomposition.html │ │ │ │ │ ├── SingularValueDecomposition.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── CholeskyDecomposition.html │ │ │ │ │ │ ├── EigenvalueDecomposition.html │ │ │ │ │ │ ├── LUDecomposition.html │ │ │ │ │ │ ├── QRDecomposition.html │ │ │ │ │ │ └── SingularValueDecomposition.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── Dissimilarities │ │ │ │ │ ├── DiceDissimilarity.html │ │ │ │ │ ├── Dissimilarity.html │ │ │ │ │ ├── IDissimilarity.html │ │ │ │ │ ├── JaccardDissimilarity.html │ │ │ │ │ ├── KulsinskDissimilarity.html │ │ │ │ │ ├── MatchingDissimilarity.html │ │ │ │ │ ├── RogersTanimotoDissimilarity.html │ │ │ │ │ ├── RusselRaoDissimilarity.html │ │ │ │ │ ├── SokalMichenerDissimilarity.html │ │ │ │ │ ├── SokalSneathDissimilarity.html │ │ │ │ │ ├── YuleDissimilarity.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── DiceDissimilarity.html │ │ │ │ │ │ ├── Dissimilarity.html │ │ │ │ │ │ ├── IDissimilarity.html │ │ │ │ │ │ ├── JaccardDissimilarity.html │ │ │ │ │ │ ├── KulsinskDissimilarity.html │ │ │ │ │ │ ├── MatchingDissimilarity.html │ │ │ │ │ │ ├── RogersTanimotoDissimilarity.html │ │ │ │ │ │ ├── RusselRaoDissimilarity.html │ │ │ │ │ │ ├── SokalMichenerDissimilarity.html │ │ │ │ │ │ ├── SokalSneathDissimilarity.html │ │ │ │ │ │ └── YuleDissimilarity.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── Distances │ │ │ │ │ ├── ArithmeticGeometricDivergence.html │ │ │ │ │ ├── BhattacharyyaDistance.html │ │ │ │ │ ├── BrayCurtisDistance.html │ │ │ │ │ ├── CanberraDistance.html │ │ │ │ │ ├── ChebyshevDistance.html │ │ │ │ │ ├── ChiSquareDistance.html │ │ │ │ │ ├── CorrelationDistance.html │ │ │ │ │ ├── CosineDistance.html │ │ │ │ │ ├── Distance.html │ │ │ │ │ ├── EuclideanDistance.html │ │ │ │ │ ├── HammingDistance.html │ │ │ │ │ ├── IDistance.html │ │ │ │ │ ├── IDivergence.html │ │ │ │ │ ├── IntersectionDistance.html │ │ │ │ │ ├── JDivergence.html │ │ │ │ │ ├── JaccardDistance.html │ │ │ │ │ ├── JensenDifferenceDivergence.html │ │ │ │ │ ├── JensenShannonDivergence.html │ │ │ │ │ ├── KDivergence.html │ │ │ │ │ ├── KullbackLeiblerDivergence.html │ │ │ │ │ ├── KumarJohnsonDivergence.html │ │ │ │ │ ├── ManhattanDistance.html │ │ │ │ │ ├── MinkowskiDistance.html │ │ │ │ │ ├── SquaredEuclideanDistance.html │ │ │ │ │ ├── SymmetricChiSquareDivergence.html │ │ │ │ │ ├── TanejaDivergence.html │ │ │ │ │ ├── TopsoeDivergence.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── ArithmeticGeometricDivergence.html │ │ │ │ │ │ ├── BhattacharyyaDistance.html │ │ │ │ │ │ ├── BrayCurtisDistance.html │ │ │ │ │ │ ├── CanberraDistance.html │ │ │ │ │ │ ├── ChebyshevDistance.html │ │ │ │ │ │ ├── ChiSquareDistance.html │ │ │ │ │ │ ├── CorrelationDistance.html │ │ │ │ │ │ ├── CosineDistance.html │ │ │ │ │ │ ├── Distance.html │ │ │ │ │ │ ├── EuclideanDistance.html │ │ │ │ │ │ ├── HammingDistance.html │ │ │ │ │ │ ├── IDistance.html │ │ │ │ │ │ ├── IDivergence.html │ │ │ │ │ │ ├── IntersectionDistance.html │ │ │ │ │ │ ├── JDivergence.html │ │ │ │ │ │ ├── JaccardDistance.html │ │ │ │ │ │ ├── JensenDifferenceDivergence.html │ │ │ │ │ │ ├── JensenShannonDivergence.html │ │ │ │ │ │ ├── KDivergence.html │ │ │ │ │ │ ├── KullbackLeiblerDivergence.html │ │ │ │ │ │ ├── KumarJohnsonDivergence.html │ │ │ │ │ │ ├── ManhattanDistance.html │ │ │ │ │ │ ├── MinkowskiDistance.html │ │ │ │ │ │ ├── SquaredEuclideanDistance.html │ │ │ │ │ │ ├── SymmetricChiSquareDivergence.html │ │ │ │ │ │ ├── TanejaDivergence.html │ │ │ │ │ │ └── TopsoeDivergence.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── Functions │ │ │ │ │ ├── Bessel.html │ │ │ │ │ ├── Beta.html │ │ │ │ │ ├── Gabor.Config.html │ │ │ │ │ ├── Gabor.html │ │ │ │ │ ├── Gamma.html │ │ │ │ │ ├── Gaussian.html │ │ │ │ │ ├── Normal.html │ │ │ │ │ ├── PerlinNoise.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── Bessel.html │ │ │ │ │ │ ├── Beta.html │ │ │ │ │ │ ├── Gabor.Config.html │ │ │ │ │ │ ├── Gabor.html │ │ │ │ │ │ ├── Gamma.html │ │ │ │ │ │ ├── Gaussian.html │ │ │ │ │ │ ├── Normal.html │ │ │ │ │ │ └── PerlinNoise.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── Geometry │ │ │ │ │ ├── ConvexHullDefects.html │ │ │ │ │ ├── ConvexityDefect.html │ │ │ │ │ ├── FlatAnglesOptimizer.html │ │ │ │ │ ├── GeometryTools.html │ │ │ │ │ ├── GrahamConvexHull.html │ │ │ │ │ ├── IShapeOptimizer.html │ │ │ │ │ ├── KCurvature.html │ │ │ │ │ ├── Line.html │ │ │ │ │ ├── PointsCloud.FurthestPoint.html │ │ │ │ │ ├── PointsCloud.html │ │ │ │ │ ├── QuadrilateralTransformationCalc.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── ConvexHullDefects.html │ │ │ │ │ │ ├── ConvexityDefect.html │ │ │ │ │ │ ├── FlatAnglesOptimizer.html │ │ │ │ │ │ ├── GeometryTools.html │ │ │ │ │ │ ├── GrahamConvexHull.html │ │ │ │ │ │ ├── IShapeOptimizer.html │ │ │ │ │ │ ├── KCurvature.html │ │ │ │ │ │ ├── Line.html │ │ │ │ │ │ ├── PointsCloud.FurthestPoint.html │ │ │ │ │ │ ├── PointsCloud.html │ │ │ │ │ │ └── QuadrilateralTransformationCalc.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── Matrix.html │ │ │ │ ├── Matrix3x3.html │ │ │ │ ├── Random.html │ │ │ │ ├── RandomNumberGenerator.html │ │ │ │ ├── RationalNumber.html │ │ │ │ ├── SparseArray.Entry.html │ │ │ │ ├── SparseArray.html │ │ │ │ ├── Special.html │ │ │ │ ├── TaylorSeries.html │ │ │ │ ├── Tools.html │ │ │ │ ├── Transforms │ │ │ │ │ ├── DiscreteCosineTransform.html │ │ │ │ │ ├── DiscreteHartleyTransform.html │ │ │ │ │ ├── DiscreteSineTransform.html │ │ │ │ │ ├── FourierTransform.Direction.html │ │ │ │ │ ├── FourierTransform.html │ │ │ │ │ ├── HilbertTransform.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── DiscreteCosineTransform.html │ │ │ │ │ │ ├── DiscreteHartleyTransform.html │ │ │ │ │ │ ├── DiscreteSineTransform.html │ │ │ │ │ │ ├── FourierTransform.Direction.html │ │ │ │ │ │ ├── FourierTransform.html │ │ │ │ │ │ └── HilbertTransform.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── UniversalGenerator.html │ │ │ │ ├── Vector3.html │ │ │ │ ├── Vector4.html │ │ │ │ ├── Wavelets │ │ │ │ │ ├── Haar.html │ │ │ │ │ ├── IWavelet.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── Haar.html │ │ │ │ │ │ └── IWavelet.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── class-use │ │ │ │ │ ├── Approximation.html │ │ │ │ │ ├── ComplexNumber.html │ │ │ │ │ ├── Constants.html │ │ │ │ │ ├── Matrix.html │ │ │ │ │ ├── Matrix3x3.html │ │ │ │ │ ├── Random.html │ │ │ │ │ ├── RandomNumberGenerator.html │ │ │ │ │ ├── RationalNumber.html │ │ │ │ │ ├── SparseArray.Entry.html │ │ │ │ │ ├── SparseArray.html │ │ │ │ │ ├── Special.html │ │ │ │ │ ├── TaylorSeries.html │ │ │ │ │ ├── Tools.html │ │ │ │ │ ├── UniversalGenerator.html │ │ │ │ │ ├── Vector3.html │ │ │ │ │ └── Vector4.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ ├── package-tree.html │ │ │ │ └── package-use.html │ │ │ ├── Neuro │ │ │ │ ├── ActivationLayer.html │ │ │ │ ├── ActivationNetwork.html │ │ │ │ ├── ActivationNeuron.html │ │ │ │ ├── BipolarSigmoidFunction.html │ │ │ │ ├── DistanceLayer.html │ │ │ │ ├── DistanceNetwork.html │ │ │ │ ├── DistanceNeuron.html │ │ │ │ ├── IActivationFunction.html │ │ │ │ ├── Layer.html │ │ │ │ ├── Learning │ │ │ │ │ ├── ISupervisedLearning.html │ │ │ │ │ ├── IUnsupervisedLearning.html │ │ │ │ │ ├── PerceptronLearning.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── ISupervisedLearning.html │ │ │ │ │ │ ├── IUnsupervisedLearning.html │ │ │ │ │ │ └── PerceptronLearning.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── Network.html │ │ │ │ ├── Neuron.html │ │ │ │ ├── SigmoidFunction.html │ │ │ │ ├── ThresholdFunction.html │ │ │ │ ├── class-use │ │ │ │ │ ├── ActivationLayer.html │ │ │ │ │ ├── ActivationNetwork.html │ │ │ │ │ ├── ActivationNeuron.html │ │ │ │ │ ├── BipolarSigmoidFunction.html │ │ │ │ │ ├── DistanceLayer.html │ │ │ │ │ ├── DistanceNetwork.html │ │ │ │ │ ├── DistanceNeuron.html │ │ │ │ │ ├── IActivationFunction.html │ │ │ │ │ ├── Layer.html │ │ │ │ │ ├── Network.html │ │ │ │ │ ├── Neuron.html │ │ │ │ │ ├── SigmoidFunction.html │ │ │ │ │ └── ThresholdFunction.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ ├── package-tree.html │ │ │ │ └── package-use.html │ │ │ ├── Signal │ │ │ │ ├── Convolution.Mode.html │ │ │ │ ├── Convolution.html │ │ │ │ ├── class-use │ │ │ │ │ ├── Convolution.Mode.html │ │ │ │ │ └── Convolution.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ ├── package-tree.html │ │ │ │ └── package-use.html │ │ │ ├── Statistics │ │ │ │ ├── ContinuousHistogram.html │ │ │ │ ├── Correlations.html │ │ │ │ ├── DescriptiveStatistics.html │ │ │ │ ├── Distributions │ │ │ │ │ ├── BernoulliDistribution.html │ │ │ │ │ ├── BinomialDistribution.html │ │ │ │ │ ├── CauchyDistribution.html │ │ │ │ │ ├── ChiSquareDistribution.html │ │ │ │ │ ├── ContinuousUniformDistribution.html │ │ │ │ │ ├── DiscreteUniformDistribution.html │ │ │ │ │ ├── EmpiricalDistribution.html │ │ │ │ │ ├── ExponentialDistribution.html │ │ │ │ │ ├── FisherDistribution.html │ │ │ │ │ ├── GammaDistribution.html │ │ │ │ │ ├── IDiscreteDistribution.html │ │ │ │ │ ├── IDistribution.html │ │ │ │ │ ├── InverseGammaDistribution.html │ │ │ │ │ ├── KolmogorovSmirnovDistribution.html │ │ │ │ │ ├── LaplaceDistribution.html │ │ │ │ │ ├── LognormalDistribution.html │ │ │ │ │ ├── NakagamiDistribution.html │ │ │ │ │ ├── NormalDistribution.html │ │ │ │ │ ├── ParetoDistribution.html │ │ │ │ │ ├── RayleighDistribution.html │ │ │ │ │ ├── TStudentDistribution.html │ │ │ │ │ ├── WeibullDistribution.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── BernoulliDistribution.html │ │ │ │ │ │ ├── BinomialDistribution.html │ │ │ │ │ │ ├── CauchyDistribution.html │ │ │ │ │ │ ├── ChiSquareDistribution.html │ │ │ │ │ │ ├── ContinuousUniformDistribution.html │ │ │ │ │ │ ├── DiscreteUniformDistribution.html │ │ │ │ │ │ ├── EmpiricalDistribution.html │ │ │ │ │ │ ├── ExponentialDistribution.html │ │ │ │ │ │ ├── FisherDistribution.html │ │ │ │ │ │ ├── GammaDistribution.html │ │ │ │ │ │ ├── IDiscreteDistribution.html │ │ │ │ │ │ ├── IDistribution.html │ │ │ │ │ │ ├── InverseGammaDistribution.html │ │ │ │ │ │ ├── KolmogorovSmirnovDistribution.html │ │ │ │ │ │ ├── LaplaceDistribution.html │ │ │ │ │ │ ├── LognormalDistribution.html │ │ │ │ │ │ ├── NakagamiDistribution.html │ │ │ │ │ │ ├── NormalDistribution.html │ │ │ │ │ │ ├── ParetoDistribution.html │ │ │ │ │ │ ├── RayleighDistribution.html │ │ │ │ │ │ ├── TStudentDistribution.html │ │ │ │ │ │ └── WeibullDistribution.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── Histogram.html │ │ │ │ ├── HistogramStatistics.html │ │ │ │ ├── Kernels │ │ │ │ │ ├── Anova.html │ │ │ │ │ ├── BSpline.html │ │ │ │ │ ├── Bessel.html │ │ │ │ │ ├── Cauchy.html │ │ │ │ │ ├── ChiSquare.html │ │ │ │ │ ├── Circular.html │ │ │ │ │ ├── Dirichlet.html │ │ │ │ │ ├── Gaussian.html │ │ │ │ │ ├── Hellinger.html │ │ │ │ │ ├── HistogramIntersection.html │ │ │ │ │ ├── Hypersecant.html │ │ │ │ │ ├── IMercerKernel.html │ │ │ │ │ ├── InverseMultiquadric.html │ │ │ │ │ ├── Linear.html │ │ │ │ │ ├── Log.html │ │ │ │ │ ├── Multiquadric.html │ │ │ │ │ ├── NormalizedPolynomial.html │ │ │ │ │ ├── Pearson.html │ │ │ │ │ ├── Polynomial.html │ │ │ │ │ ├── RationalQuadratic.html │ │ │ │ │ ├── Spherical.html │ │ │ │ │ ├── Spline.html │ │ │ │ │ ├── SquaredSinc.html │ │ │ │ │ ├── SymmetricTriangle.html │ │ │ │ │ ├── TStudent.html │ │ │ │ │ ├── Tensor.html │ │ │ │ │ ├── ThinPlateSpline.html │ │ │ │ │ ├── Wave.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── Anova.html │ │ │ │ │ │ ├── BSpline.html │ │ │ │ │ │ ├── Bessel.html │ │ │ │ │ │ ├── Cauchy.html │ │ │ │ │ │ ├── ChiSquare.html │ │ │ │ │ │ ├── Circular.html │ │ │ │ │ │ ├── Dirichlet.html │ │ │ │ │ │ ├── Gaussian.html │ │ │ │ │ │ ├── Hellinger.html │ │ │ │ │ │ ├── HistogramIntersection.html │ │ │ │ │ │ ├── Hypersecant.html │ │ │ │ │ │ ├── IMercerKernel.html │ │ │ │ │ │ ├── InverseMultiquadric.html │ │ │ │ │ │ ├── Linear.html │ │ │ │ │ │ ├── Log.html │ │ │ │ │ │ ├── Multiquadric.html │ │ │ │ │ │ ├── NormalizedPolynomial.html │ │ │ │ │ │ ├── Pearson.html │ │ │ │ │ │ ├── Polynomial.html │ │ │ │ │ │ ├── RationalQuadratic.html │ │ │ │ │ │ ├── Spherical.html │ │ │ │ │ │ ├── Spline.html │ │ │ │ │ │ ├── SquaredSinc.html │ │ │ │ │ │ ├── SymmetricTriangle.html │ │ │ │ │ │ ├── TStudent.html │ │ │ │ │ │ ├── Tensor.html │ │ │ │ │ │ ├── ThinPlateSpline.html │ │ │ │ │ │ └── Wave.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── LinearRegression.html │ │ │ │ ├── Normalizations.html │ │ │ │ ├── Regression │ │ │ │ │ ├── ExponentialRegression.html │ │ │ │ │ ├── ILinear.html │ │ │ │ │ ├── ISimpleRegression.html │ │ │ │ │ ├── LinearRegression.html │ │ │ │ │ ├── LogarithmicRegression.html │ │ │ │ │ ├── PolynomialRegression.html │ │ │ │ │ ├── PowerRegression.html │ │ │ │ │ ├── RegressionAnalysis.html │ │ │ │ │ ├── class-use │ │ │ │ │ │ ├── ExponentialRegression.html │ │ │ │ │ │ ├── ILinear.html │ │ │ │ │ │ ├── ISimpleRegression.html │ │ │ │ │ │ ├── LinearRegression.html │ │ │ │ │ │ ├── LogarithmicRegression.html │ │ │ │ │ │ ├── PolynomialRegression.html │ │ │ │ │ │ ├── PowerRegression.html │ │ │ │ │ │ └── RegressionAnalysis.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ ├── package-tree.html │ │ │ │ │ └── package-use.html │ │ │ │ ├── Tools.html │ │ │ │ ├── class-use │ │ │ │ │ ├── ContinuousHistogram.html │ │ │ │ │ ├── Correlations.html │ │ │ │ │ ├── DescriptiveStatistics.html │ │ │ │ │ ├── Histogram.html │ │ │ │ │ ├── HistogramStatistics.html │ │ │ │ │ ├── LinearRegression.html │ │ │ │ │ ├── Normalizations.html │ │ │ │ │ └── Tools.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ ├── package-tree.html │ │ │ │ └── package-use.html │ │ │ └── Vision │ │ │ │ ├── Detection │ │ │ │ ├── IObjectDetector.html │ │ │ │ ├── class-use │ │ │ │ │ └── IObjectDetector.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ ├── package-tree.html │ │ │ │ └── package-use.html │ │ │ │ ├── ITemporal.html │ │ │ │ ├── SpatioTemporal │ │ │ │ ├── MeanBackgroundDetector.html │ │ │ │ ├── class-use │ │ │ │ │ └── MeanBackgroundDetector.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ ├── package-tree.html │ │ │ │ └── package-use.html │ │ │ │ ├── Temporal │ │ │ │ ├── MeanBackgroundDetector.html │ │ │ │ ├── MedianBackgroundDetector.html │ │ │ │ ├── class-use │ │ │ │ │ ├── MeanBackgroundDetector.html │ │ │ │ │ └── MedianBackgroundDetector.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ ├── package-tree.html │ │ │ │ └── package-use.html │ │ │ │ ├── Tools │ │ │ │ ├── MotionEnergyImage.html │ │ │ │ ├── class-use │ │ │ │ │ └── MotionEnergyImage.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ ├── package-tree.html │ │ │ │ └── package-use.html │ │ │ │ ├── class-use │ │ │ │ └── ITemporal.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ ├── package-tree.html │ │ │ │ └── package-use.html │ │ │ ├── allclasses-frame.html │ │ │ ├── allclasses-noframe.html │ │ │ ├── constant-values.html │ │ │ ├── deprecated-list.html │ │ │ ├── help-doc.html │ │ │ ├── index-files │ │ │ ├── index-1.html │ │ │ ├── index-10.html │ │ │ ├── index-11.html │ │ │ ├── index-12.html │ │ │ ├── index-13.html │ │ │ ├── index-14.html │ │ │ ├── index-15.html │ │ │ ├── index-16.html │ │ │ ├── index-17.html │ │ │ ├── index-18.html │ │ │ ├── index-19.html │ │ │ ├── index-2.html │ │ │ ├── index-20.html │ │ │ ├── index-21.html │ │ │ ├── index-22.html │ │ │ ├── index-23.html │ │ │ ├── index-24.html │ │ │ ├── index-25.html │ │ │ ├── index-26.html │ │ │ ├── index-3.html │ │ │ ├── index-4.html │ │ │ ├── index-5.html │ │ │ ├── index-6.html │ │ │ ├── index-7.html │ │ │ ├── index-8.html │ │ │ └── index-9.html │ │ │ ├── index.html │ │ │ ├── overview-frame.html │ │ │ ├── overview-summary.html │ │ │ ├── overview-tree.html │ │ │ ├── package-list │ │ │ ├── script.js │ │ │ ├── serialized-form.html │ │ │ └── stylesheet.css │ ├── Libs │ │ ├── Catalano.Android.Image.jar │ │ ├── Catalano.Core.jar │ │ ├── Catalano.Fuzzy.jar │ │ ├── Catalano.Graph.jar │ │ ├── Catalano.IO.jar │ │ ├── Catalano.Image.jar │ │ ├── Catalano.MachineLearning.jar │ │ ├── Catalano.Math.jar │ │ ├── Catalano.Neuro.jar │ │ ├── Catalano.Signal.jar │ │ ├── Catalano.Statistics.jar │ │ └── Catalano.Vision.jar │ ├── Release notes.txt │ ├── Resources │ │ └── lut │ │ │ ├── Fire.lut │ │ │ ├── RedHot.lut │ │ │ ├── Spectrum.lut │ │ │ └── Thermal.lut │ └── lgpl-3.0.txt ├── hamcrest-core-1.3.jar ├── joda-time-2.9.3.jar ├── junit-4.12.jar ├── miglayout-core-5.0.jar └── miglayout-swing-5.0.jar ├── license.txt ├── pom.xml └── src ├── main ├── java │ ├── CMDOptions.java │ ├── Game │ │ ├── EntityScript.java │ │ ├── GameEntityBase.java │ │ ├── GlobalSettings.java │ │ ├── IAttackable.java │ │ ├── IGameEntity.java │ │ ├── IMaMGame.java │ │ ├── IScript.java │ │ ├── IUpdateable.java │ │ ├── MaMActions.java │ │ ├── MaMGame.java │ │ ├── Map │ │ │ ├── IoTWorld.java │ │ │ ├── MaMMap.java │ │ │ ├── MaMMazeView.java │ │ │ ├── MaMTile.java │ │ │ ├── MaMWorld.java │ │ │ └── WoXWorld.java │ │ ├── Monsters │ │ │ ├── MaMMonster.java │ │ │ ├── MaMSpawnPoint.java │ │ │ ├── MonsterFactory.java │ │ │ └── MonsterType.java │ │ └── WoxOpcode.java │ ├── GameMechanics │ │ ├── Adventurers │ │ │ ├── Adventurer.java │ │ │ ├── Award.java │ │ │ ├── CharClass.java │ │ │ ├── CharGender.java │ │ │ ├── CharRace.java │ │ │ ├── CharSkill.java │ │ │ ├── ICharCondition.java │ │ │ └── IStatModifier.java │ │ ├── Attacks │ │ │ ├── AttackType.java │ │ │ └── IAttack.java │ │ ├── Combatant.java │ │ ├── Dice.java │ │ ├── Equipment │ │ │ ├── Accessory.java │ │ │ ├── Armour.java │ │ │ ├── IInventoryItem.java │ │ │ ├── InventoryItem.java │ │ │ ├── MiscItem.java │ │ │ └── Weapon.java │ │ ├── Inventory.java │ │ ├── Magic │ │ │ ├── ISpell.java │ │ │ ├── PartyEnchantments │ │ │ │ └── IPartyEnchantment.java │ │ │ ├── Spell.java │ │ │ ├── SpellManager.java │ │ │ └── WoXSpells │ │ │ │ └── SpellAcidSpray.java │ │ ├── Stat.java │ │ └── Stats.java │ ├── META-INF │ │ └── MANIFEST.MF │ ├── Main.java │ ├── Rendering │ │ ├── AnimationSettings.java │ │ ├── GUI │ │ │ ├── GUIGraphicsSet.java │ │ │ ├── PapyrusDialogBase.java │ │ │ └── PapyrusMessageBox.java │ │ ├── IMaMRenderer.java │ │ ├── IMaMSprite.java │ │ ├── IRelativeToLocationOverlay.java │ │ ├── IRelativeToLocationSprite.java │ │ ├── IRenderableGameObject.java │ │ ├── ISScalableGUI.java │ │ ├── ISceneComposition.java │ │ ├── MaM2DInsertionOrderComposition.java │ │ ├── MaM2DMapComposition.java │ │ ├── MaM3DSceneComposition.java │ │ ├── MaM3dScenePos.java │ │ ├── RenderablePos.java │ │ └── SimpleCanvas │ │ │ ├── GraphicsRenderer.java │ │ │ ├── MaMButton.java │ │ │ ├── MaMPanel.java │ │ │ └── OpenXeenFrame.java │ ├── Toolbox │ │ ├── ArrayHelpers.java │ │ ├── BinaryHelpers.java │ │ ├── BlindIndexMaper.java │ │ ├── ColourHelpers.java │ │ ├── Direction.java │ │ ├── FileHelpers.java │ │ ├── GifSequenceWriter.java │ │ ├── Grid.java │ │ ├── HProperties.java │ │ ├── HackMe.java │ │ ├── HumanOrder.java │ │ ├── IHasProperties.java │ │ ├── IImageWorker.java │ │ ├── IReadonlyGrid.java │ │ ├── IValidatable.java │ │ ├── ImageHelpers.java │ │ ├── ImageTransform.java │ │ ├── IntegerImage.java │ │ ├── LRUCache.java │ │ ├── MaMGameException.java │ │ ├── Misc.java │ │ ├── NaturalOrderComparator.java │ │ ├── ParseHelpers.java │ │ ├── PointHelper.java │ │ ├── SwingHelpers.java │ │ ├── Tag.java │ │ └── xBR │ │ │ └── ResizeXBR.java │ └── mamFiles │ │ ├── CCFileCache.java │ │ ├── CCFileFormatException.java │ │ ├── IHasProxy.java │ │ ├── IOT │ │ ├── CompressionLZHuf.java │ │ ├── IoTSpriteFile.java │ │ └── IoTccFileReader.java │ │ ├── MAMFile.java │ │ ├── MAMVocFile.java │ │ ├── MaMBinaryFile.java │ │ ├── MaMCCFileReader.java │ │ ├── MaMMazeFile.java │ │ ├── MaMPallet.java │ │ ├── MaMRawImage.java │ │ ├── MaMScript.java │ │ ├── MaMSprite.java │ │ ├── MaMSurface.java │ │ ├── MaMTextFile.java │ │ ├── MaMThing.java │ │ ├── SpriteHelpers │ │ ├── EnvironmentSet │ │ │ ├── IMaMEnvironmentSet.java │ │ │ ├── IMaMIndoorEnvironmentSet.java │ │ │ ├── IMaMOutdoorEnvironmentSet.java │ │ │ ├── IOT │ │ │ │ ├── IoTEnvironmentSet.java │ │ │ │ ├── IoTIndoorEnvironmentSet.java │ │ │ │ └── IoTOutdoorEnvironmentSet.java │ │ │ └── WOX │ │ │ │ ├── WoXEnvironmentSet.java │ │ │ │ ├── WoXIndoorEnvironmentSet.java │ │ │ │ └── WoXOutdoorEnvironmentSet.java │ │ ├── MaMHudElements.java │ │ ├── RenderPosHelper.java │ │ └── WOX │ │ │ └── WoXHudElements.java │ │ └── WOX │ │ ├── WOXMazeFile.java │ │ ├── WOXPallet.java │ │ ├── WOXSpriteFile.java │ │ ├── WOXSurface.java │ │ ├── WOXccFileReader.java │ │ ├── WoXThing.java │ │ └── WoxScript.java └── resources │ ├── CLOUDS.DAT.BIN │ ├── dark.cc.csv │ ├── dark.cur.csv │ ├── files.wiki │ ├── intro.cc.csv │ ├── mam_papyrus.png │ ├── mm3.cc.csv │ ├── openXeen_de.properties │ ├── openXeen_en.properties │ ├── openXeen_es.properties │ ├── openXeen_fr.properties │ ├── openXeen_ja.properties │ └── xeen.cc.csv └── test ├── AAAAAAA └── CommonTest.java ├── Game └── Map │ └── WoXWorldTest.java ├── Toolbox ├── BinaryHelpersTest.java ├── FileHelpersTest.java ├── HumanOrderTest.java └── TagTest.java ├── java ├── AAAAAAA │ └── CommonTest.java ├── Game │ └── Map │ │ └── WoXWorldTest.java ├── Toolbox │ ├── BinaryHelpersTest.java │ ├── FileHelpersTest.java │ ├── HumanOrderTest.java │ └── TagTest.java └── mamFiles │ └── WOX │ └── WOXccFileReaderTest.java └── mamFiles └── WOX └── WOXccFileReaderTest.java /.gitignore: -------------------------------------------------------------------------------- 1 | # maven 2 | target/ 3 | pom.xml.tag 4 | pom.xml.releaseBackup 5 | pom.xml.versionsBackup 6 | pom.xml.next 7 | release.properties 8 | dependency-reduced-pom.xml 9 | buildNumber.properties 10 | .mvn/timing.properties 11 | 12 | # xeen resource files 13 | *.cc 14 | *.CC 15 | *.cur 16 | *.CUR 17 | 18 | # ide 19 | .idea/ 20 | *.iml 21 | 22 | #xeen cc files in here so they dont commit 23 | game_data/ 24 | 25 | # doxygen 26 | doco/doxygen/html/ -------------------------------------------------------------------------------- /Plugins/wideXeen/assets/BACK.RAW.wideXeen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/Plugins/wideXeen/assets/BACK.RAW.wideXeen.png -------------------------------------------------------------------------------- /Plugins/wideXeen/src/Rendering/GraphicsRenderer.java: -------------------------------------------------------------------------------- 1 | package Rendering; 2 | 3 | 4 | import java.awt.*; 5 | 6 | /** 7 | * Created by duckman on 22/06/2016. 8 | */ 9 | public class GraphicsRenderer extends Rendering.SimpleCanvas.GraphicsRenderer 10 | { 11 | /** 12 | * @param scale The scale to which the scene will be drawn. Will be clamped to 0.1 - 100. 13 | */ 14 | public GraphicsRenderer(double scale) { 15 | super(scale); 16 | } 17 | 18 | @Override 19 | public void refresh(Graphics g, long timeMS) { 20 | super.refresh(g, timeMS); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | --- 2 | OpenXeen 3 | --- 4 | ![Last Screen Shot](doco/dev_history/openXeen16.png?raw=true "Last Screen Shot") 5 | 6 | OpenXeen is a mod for Might and Magic IV & V - World of Xeen (WOX), programmed by duuckman (Dr Warren Creemers). 7 | It is a game engine rewrite in java designed to make MaM gaming more available. 8 | 9 | __News:__ Back from 6 months hiatus on this project. 10 | 11 | Resources: 12 | - Wiki: [here](https://github.com/busyDuckman/OpenXeen/wiki) 13 | - Development Blog: [here](https://github.com/busyDuckman/OpenXeen/wiki/A-Development-BLOG-(in-screenshots)) 14 | - State of openXeen [features](https://github.com/busyDuckman/OpenXeen/wiki/Features) 15 | - Interested in [contributing](https://github.com/busyDuckman/OpenXeen/wiki/Contributing) 16 | - Xeen development related [links](https://github.com/busyDuckman/OpenXeen/wiki/Xeen-related-links) 17 | - My [blog](http://busyducks.com/) 18 | 19 | Unfortunately, MaM is not abandonware - you (still) need to purchase a copy to play the full version of WOX legally. 20 | This mod aims to bundle the shareware version, but I recommend finding a full CD (talkie) version on ebay. 21 | 22 | The game mechanics, and engine, are based on things I would have liked to see done differently: 23 | - Less save/restore loops for potions/barrels/treasure chests. 24 | - Better inventory at stores. 25 | - More money in the later part of the game. 26 | - Monster respawn. 27 | - Bat animation relative to level of danger. 28 | - Item stats just printed/explained. 29 | - Restrictions on when you can save/load games. 30 | - One open map, not divided into regions. 31 | - Bigger 3d view window 32 | 33 | 34 | NB: OpenXeen is programmed in java because I needed a project to "freshen" up 35 | my java skills and learn java 8. No other reason. 36 | 37 | Status: 38 | - Software is not ready for release. 39 | - At the moment it can: 40 | - Parse the cc files and open some graphics and audio files 41 | - Parse some map info 42 | - Create proxies of all files in cc files. 43 | - Display a simple rendering of some xeen components. 44 | NB: First run will take some time, proxy files are being created. 45 | 46 | Acknowledgments: 47 | - xeen.wikia.org - So so much work on the MaM file formats 48 | - Ben - Sharing a passion for reverse engineering xeen 49 | - Elliot Kroo - GifSequenceWriter.java 50 | - Hyllian - xBR algorithm 51 | 52 | And a shout-out to the Xeen community on faceook, [https://www.facebook.com/groups/AdventurersOfXeen/]. 53 | It was great sharing a love of MaM games with you guys. 54 | 55 | -------------------------------------------------------------------------------- /doco/Readme.txt: -------------------------------------------------------------------------------- 1 | 2 | ---- OpenXeen V0.1 ----- 3 | 4 | OpenXeen is a mod for Might and Magic IV & V - World of Xeen (WOX), programmed by duuckman (Dr Warren Creemers). 5 | It is a game engine rewrite in java designed to make MaM gaming more available. 6 | 7 | Unfortunately, MaM is not abandonware - you (still) need to purchase a copy to play the full version of WOX legally. 8 | This mod aims to bundle the shareware version, but I recommend finding a full CD (talkie) version on ebay. 9 | 10 | The game mechanics, and engine, are based on things I would have liked to see done differently: 11 | - Less save/restore loops for potions/barrels/treasure chests. 12 | - Better inventory at stores. 13 | - More money in the later part of the game. 14 | - Monster respawn. 15 | - Bat animation relative to level of danger. 16 | - Item stats just printed/explained. 17 | - Restrictions on when you can save/load games. 18 | - One open map, not divided into regions. 19 | - Bigger 3d view window 20 | 21 | 22 | NB: OpenXeen is programmed in java because I needed a project to "freshen" up 23 | my java skills and learn java 8. No other reason. 24 | 25 | 26 | Acknowledgments: 27 | xeen.wikia.org - So so much work on the MaM file formats 28 | Ben - Sharing a passion for reverse engineering xeen 29 | Elliot Kroo - GifSequenceWriter.java 30 | Hyllian - xBR algorithm 31 | 32 | And a shout-out to the Xeen community on faceook, [https://www.facebook.com/groups/AdventurersOfXeen/]. 33 | It was great sharing a love of MaM games with you guys. -------------------------------------------------------------------------------- /doco/dev_history/000_MON.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/doco/dev_history/000_MON.png -------------------------------------------------------------------------------- /doco/dev_history/historical_csharp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/doco/dev_history/historical_csharp.png -------------------------------------------------------------------------------- /doco/dev_history/loc_chart_v0_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/doco/dev_history/loc_chart_v0_1.png -------------------------------------------------------------------------------- /doco/dev_history/loc_chart_v0_1_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/doco/dev_history/loc_chart_v0_1_small.png -------------------------------------------------------------------------------- /doco/dev_history/openXeen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/doco/dev_history/openXeen.png -------------------------------------------------------------------------------- /doco/dev_history/openXeen10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/doco/dev_history/openXeen10.png -------------------------------------------------------------------------------- /doco/dev_history/openXeen11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/doco/dev_history/openXeen11.png -------------------------------------------------------------------------------- /doco/dev_history/openXeen12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/doco/dev_history/openXeen12.png -------------------------------------------------------------------------------- /doco/dev_history/openXeen13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/doco/dev_history/openXeen13.png -------------------------------------------------------------------------------- /doco/dev_history/openXeen14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/doco/dev_history/openXeen14.png -------------------------------------------------------------------------------- /doco/dev_history/openXeen15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/doco/dev_history/openXeen15.png -------------------------------------------------------------------------------- /doco/dev_history/openXeen16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/doco/dev_history/openXeen16.png -------------------------------------------------------------------------------- /doco/dev_history/openXeen2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/doco/dev_history/openXeen2.png -------------------------------------------------------------------------------- /doco/dev_history/openXeen3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/doco/dev_history/openXeen3.png -------------------------------------------------------------------------------- /doco/dev_history/openXeen4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/doco/dev_history/openXeen4.png -------------------------------------------------------------------------------- /doco/dev_history/openXeen5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/doco/dev_history/openXeen5.png -------------------------------------------------------------------------------- /doco/dev_history/openXeen6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/doco/dev_history/openXeen6.png -------------------------------------------------------------------------------- /doco/dev_history/openXeen7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/doco/dev_history/openXeen7.png -------------------------------------------------------------------------------- /doco/dev_history/openXeen8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/doco/dev_history/openXeen8.png -------------------------------------------------------------------------------- /doco/dev_history/openXeen9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/doco/dev_history/openXeen9.png -------------------------------------------------------------------------------- /lib/Catalano/Copyright.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/Catalano/Copyright.txt -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Core/Concurrent/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Core.Concurrent 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Core.Concurrent

14 |
15 |

Classes

16 | 19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Core/Structs/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Core.Structs 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Core.Structs

14 |
15 |

Classes

16 | 20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Core/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Core 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Core

14 |
15 |

Classes

16 | 26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Fuzzy/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Fuzzy 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Fuzzy

14 |
15 |

Interfaces

16 | 23 |

Classes

24 | 42 |

Enums

43 | 46 |
47 | 48 | 49 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Graph/Network/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Graph.Network 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Graph.Network

14 |
15 |

Classes

16 | 23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Graph/Pathfinding/AStar/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Graph.Pathfinding.AStar 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Graph.Pathfinding.AStar

14 |
15 |

Classes

16 | 21 |

Enums

22 | 26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Graph/Pathfinding/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Graph.Pathfinding 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Graph.Pathfinding

14 |
15 |

Interfaces

16 | 19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Graph/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Graph 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Graph

14 |
15 |

Classes

16 | 19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/IO/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.IO 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.IO

14 |
15 |

Classes

16 | 22 |
23 | 24 | 25 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Imaging/ActiveContour/Ovuscule/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Imaging.ActiveContour.Ovuscule 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Imaging.ActiveContour.Ovuscule

14 |
15 |

Interfaces

16 | 19 |

Classes

20 | 26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Imaging/Concurrent/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Imaging.Concurrent 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Imaging.Concurrent

14 |
15 |

Classes

16 | 19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Imaging/Corners/FREAK/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Imaging.Corners.FREAK 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Imaging.Corners.FREAK

14 |
15 |

Classes

16 | 22 |

Enums

23 | 26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Imaging/Corners/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Imaging.Corners 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Imaging.Corners

14 |
15 |

Interfaces

16 | 20 |

Classes

21 | 29 |

Enums

30 | 34 |
35 | 36 | 37 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Imaging/Filters/Artistic/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Imaging.Filters.Artistic 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Imaging.Filters.Artistic

14 |
15 |

Classes

16 | 27 |

Enums

28 | 32 |
33 | 34 | 35 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Imaging/Shapes/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Imaging.Shapes 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Imaging.Shapes

14 |
15 |

Classes

16 | 20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Imaging/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Imaging 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Imaging

14 |
15 |

Interfaces

16 | 21 |

Classes

22 | 27 |

Enums

28 | 32 |
33 | 34 | 35 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/MachineLearning/Classification/DecisionTrees/Learning/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.MachineLearning.Classification.DecisionTrees.Learning 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.MachineLearning.Classification.DecisionTrees.Learning

14 |
15 |

Classes

16 | 21 |

Enums

22 | 25 |
26 | 27 | 28 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/MachineLearning/Classification/DecisionTrees/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.MachineLearning.Classification.DecisionTrees 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.MachineLearning.Classification.DecisionTrees

14 |
15 |

Classes

16 | 19 |

Enums

20 | 23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/MachineLearning/Classification/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.MachineLearning.Classification 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.MachineLearning.Classification

14 |
15 |

Interfaces

16 | 19 |

Classes

20 | 28 |

Enums

29 | 32 |
33 | 34 | 35 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/MachineLearning/Exploration/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.MachineLearning.Exploration 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.MachineLearning.Exploration

14 |
15 |

Interfaces

16 | 19 |

Classes

20 | 28 |
29 | 30 | 31 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/MachineLearning/Performance/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.MachineLearning.Performance 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.MachineLearning.Performance

14 |
15 |

Interfaces

16 | 19 |

Classes

20 | 25 |
26 | 27 | 28 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/MachineLearning/Regression/RegressionTrees/Learning/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.MachineLearning.Regression.RegressionTrees.Learning 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.MachineLearning.Regression.RegressionTrees.Learning

14 |
15 |

Classes

16 | 20 |

Enums

21 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/MachineLearning/Regression/RegressionTrees/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.MachineLearning.Regression.RegressionTrees 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.MachineLearning.Regression.RegressionTrees

14 |
15 |

Interfaces

16 | 19 |

Classes

20 | 23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/MachineLearning/Regression/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.MachineLearning.Regression 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.MachineLearning.Regression

14 |
15 |

Interfaces

16 | 19 |

Classes

20 | 23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/MachineLearning/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.MachineLearning 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.MachineLearning

14 |
15 |

Classes

16 | 26 |

Enums

27 | 30 |
31 | 32 | 33 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Math/Decompositions/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Math.Decompositions 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Math.Decompositions

14 |
15 |

Classes

16 | 23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Math/Dissimilarities/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Math.Dissimilarities 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Math.Dissimilarities

14 |
15 |

Interfaces

16 | 19 |

Classes

20 | 32 |
33 | 34 | 35 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Math/Functions/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Math.Functions 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Math.Functions

14 |
15 |

Classes

16 | 25 |

Enums

26 | 29 |
30 | 31 | 32 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Math/Geometry/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Math.Geometry 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Math.Geometry

14 |
15 |

Interfaces

16 | 19 |

Classes

20 | 32 |
33 | 34 | 35 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Math/Transforms/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Math.Transforms 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Math.Transforms

14 |
15 |

Classes

16 | 23 |

Enums

24 | 27 |
28 | 29 | 30 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Math/Wavelets/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Math.Wavelets 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Math.Wavelets

14 |
15 |

Interfaces

16 | 19 |

Classes

20 | 23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Math/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Math 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Math

14 |
15 |

Interfaces

16 | 19 |

Classes

20 | 36 |
37 | 38 | 39 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Neuro/Learning/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Neuro.Learning 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Neuro.Learning

14 |
15 |

Interfaces

16 | 20 |

Classes

21 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Neuro/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Neuro 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Neuro

14 |
15 |

Interfaces

16 | 19 |

Classes

20 | 34 |
35 | 36 | 37 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Signal/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Signal 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Signal

14 |
15 |

Classes

16 | 19 |

Enums

20 | 23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Statistics/Distributions/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Statistics.Distributions 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Statistics.Distributions

14 |
15 |

Interfaces

16 | 20 |

Classes

21 | 43 |
44 | 45 | 46 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Statistics/Kernels/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Statistics.Kernels 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Statistics.Kernels

14 |
15 |

Interfaces

16 | 19 |

Classes

20 | 49 |
50 | 51 | 52 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Statistics/Regression/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Statistics.Regression 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Statistics.Regression

14 |
15 |

Interfaces

16 | 20 |

Classes

21 | 29 |
30 | 31 | 32 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Statistics/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Statistics 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Statistics

14 |
15 |

Classes

16 | 26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Vision/Detection/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Vision.Detection 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Vision.Detection

14 |
15 |

Interfaces

16 | 19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Vision/SpatioTemporal/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Vision.SpatioTemporal 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Vision.SpatioTemporal

14 |
15 |

Classes

16 | 19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Vision/Temporal/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Vision.Temporal 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Vision.Temporal

14 |
15 |

Classes

16 | 20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Vision/Tools/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Vision.Tools 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Vision.Tools

14 |
15 |

Classes

16 | 19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/Catalano/Vision/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Catalano.Vision 8 | 9 | 10 | 11 | 12 | 13 |

Catalano.Vision

14 |
15 |

Interfaces

16 | 19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/deprecated-list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Deprecated List 8 | 9 | 10 | 11 | 12 | 13 | 23 | 26 | 27 |
28 | 29 | 30 |
Skip navigation links
31 | 32 | 33 | 34 | 44 |
45 | 72 | 73 |
74 |

Deprecated API

75 |

Contents

76 |
77 | 78 |
79 | 80 | 81 |
Skip navigation links
82 | 83 | 84 | 85 | 95 |
96 | 123 | 124 | 125 | 126 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Generated Documentation (Untitled) 8 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | <noscript> 69 | <div>JavaScript is disabled on your browser.</div> 70 | </noscript> 71 | <h2>Frame Alert</h2> 72 | <p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="overview-summary.html">Non-frame version</a>.</p> 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/package-list: -------------------------------------------------------------------------------- 1 | Catalano.Core 2 | Catalano.Core.Concurrent 3 | Catalano.Core.Structs 4 | Catalano.Fuzzy 5 | Catalano.Graph 6 | Catalano.Graph.Network 7 | Catalano.Graph.Pathfinding 8 | Catalano.Graph.Pathfinding.AStar 9 | Catalano.IO 10 | Catalano.Imaging 11 | Catalano.Imaging.ActiveContour.Ovuscule 12 | Catalano.Imaging.Concurrent 13 | Catalano.Imaging.Concurrent.Filters 14 | Catalano.Imaging.Corners 15 | Catalano.Imaging.Corners.FREAK 16 | Catalano.Imaging.Filters 17 | Catalano.Imaging.Filters.Artistic 18 | Catalano.Imaging.Shapes 19 | Catalano.Imaging.Tools 20 | Catalano.MachineLearning 21 | Catalano.MachineLearning.Classification 22 | Catalano.MachineLearning.Classification.DecisionTrees 23 | Catalano.MachineLearning.Classification.DecisionTrees.Learning 24 | Catalano.MachineLearning.Exploration 25 | Catalano.MachineLearning.Performance 26 | Catalano.MachineLearning.Regression 27 | Catalano.MachineLearning.Regression.RegressionTrees 28 | Catalano.MachineLearning.Regression.RegressionTrees.Learning 29 | Catalano.Math 30 | Catalano.Math.Decompositions 31 | Catalano.Math.Dissimilarities 32 | Catalano.Math.Distances 33 | Catalano.Math.Functions 34 | Catalano.Math.Geometry 35 | Catalano.Math.Transforms 36 | Catalano.Math.Wavelets 37 | Catalano.Neuro 38 | Catalano.Neuro.Learning 39 | Catalano.Signal 40 | Catalano.Statistics 41 | Catalano.Statistics.Distributions 42 | Catalano.Statistics.Kernels 43 | Catalano.Statistics.Regression 44 | Catalano.Vision 45 | Catalano.Vision.Detection 46 | Catalano.Vision.SpatioTemporal 47 | Catalano.Vision.Temporal 48 | Catalano.Vision.Tools 49 | -------------------------------------------------------------------------------- /lib/Catalano/Documentation/javadoc/script.js: -------------------------------------------------------------------------------- 1 | function show(type) 2 | { 3 | count = 0; 4 | for (var key in methods) { 5 | var row = document.getElementById(key); 6 | if ((methods[key] & type) != 0) { 7 | row.style.display = ''; 8 | row.className = (count++ % 2) ? rowColor : altColor; 9 | } 10 | else 11 | row.style.display = 'none'; 12 | } 13 | updateTabs(type); 14 | } 15 | 16 | function updateTabs(type) 17 | { 18 | for (var value in tabs) { 19 | var sNode = document.getElementById(tabs[value][0]); 20 | var spanNode = sNode.firstChild; 21 | if (value == type) { 22 | sNode.className = activeTableTab; 23 | spanNode.innerHTML = tabs[value][1]; 24 | } 25 | else { 26 | sNode.className = tableTab; 27 | spanNode.innerHTML = "" + tabs[value][1] + ""; 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /lib/Catalano/Libs/Catalano.Android.Image.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/Catalano/Libs/Catalano.Android.Image.jar -------------------------------------------------------------------------------- /lib/Catalano/Libs/Catalano.Core.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/Catalano/Libs/Catalano.Core.jar -------------------------------------------------------------------------------- /lib/Catalano/Libs/Catalano.Fuzzy.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/Catalano/Libs/Catalano.Fuzzy.jar -------------------------------------------------------------------------------- /lib/Catalano/Libs/Catalano.Graph.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/Catalano/Libs/Catalano.Graph.jar -------------------------------------------------------------------------------- /lib/Catalano/Libs/Catalano.IO.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/Catalano/Libs/Catalano.IO.jar -------------------------------------------------------------------------------- /lib/Catalano/Libs/Catalano.Image.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/Catalano/Libs/Catalano.Image.jar -------------------------------------------------------------------------------- /lib/Catalano/Libs/Catalano.MachineLearning.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/Catalano/Libs/Catalano.MachineLearning.jar -------------------------------------------------------------------------------- /lib/Catalano/Libs/Catalano.Math.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/Catalano/Libs/Catalano.Math.jar -------------------------------------------------------------------------------- /lib/Catalano/Libs/Catalano.Neuro.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/Catalano/Libs/Catalano.Neuro.jar -------------------------------------------------------------------------------- /lib/Catalano/Libs/Catalano.Signal.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/Catalano/Libs/Catalano.Signal.jar -------------------------------------------------------------------------------- /lib/Catalano/Libs/Catalano.Statistics.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/Catalano/Libs/Catalano.Statistics.jar -------------------------------------------------------------------------------- /lib/Catalano/Libs/Catalano.Vision.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/Catalano/Libs/Catalano.Vision.jar -------------------------------------------------------------------------------- /lib/Catalano/Resources/lut/Fire.lut: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/Catalano/Resources/lut/Fire.lut -------------------------------------------------------------------------------- /lib/Catalano/Resources/lut/RedHot.lut: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/Catalano/Resources/lut/RedHot.lut -------------------------------------------------------------------------------- /lib/Catalano/Resources/lut/Spectrum.lut: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/Catalano/Resources/lut/Spectrum.lut -------------------------------------------------------------------------------- /lib/Catalano/Resources/lut/Thermal.lut: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/Catalano/Resources/lut/Thermal.lut -------------------------------------------------------------------------------- /lib/hamcrest-core-1.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/hamcrest-core-1.3.jar -------------------------------------------------------------------------------- /lib/joda-time-2.9.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/joda-time-2.9.3.jar -------------------------------------------------------------------------------- /lib/junit-4.12.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/junit-4.12.jar -------------------------------------------------------------------------------- /lib/miglayout-core-5.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/miglayout-core-5.0.jar -------------------------------------------------------------------------------- /lib/miglayout-swing-5.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/lib/miglayout-swing-5.0.jar -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | 5 | com.busyducks.OpenXeen 6 | OpenXeen 7 | 0.3 8 | jar 9 | 10 | OpenXeen 11 | https://github.com/busyDuckman/OpenXeen 12 | 13 | 14 | 15 | 16 | 17 | 18 | org.apache.maven.plugins 19 | maven-compiler-plugin 20 | 3.6.1 21 | 22 | 1.8 23 | 1.8 24 | 25 | 26 | 27 | 28 | org.apache.maven.plugins 29 | maven-jar-plugin 30 | 31 | 32 | 33 | true 34 | true 35 | 36 | 37 | 38 | 39 | 40 | 41 | org.apache.maven.plugins 42 | maven-surefire-plugin 43 | 2.19 44 | true 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | junit 53 | junit 54 | 4.12 55 | test 56 | 57 | 58 | 59 | org.hamcrest 60 | hamcrest-core 61 | 1.3 62 | 63 | 64 | 65 | joda-time 66 | joda-time 67 | 2.9.9 68 | 69 | 70 | 71 | com.google.guava 72 | guava 73 | 21.0 74 | 75 | 76 | 77 | com.miglayout 78 | miglayout-core 79 | 5.0 80 | 81 | 82 | 83 | com.miglayout 84 | miglayout-swing 85 | 5.0 86 | 87 | 88 | 89 | commons-cli 90 | commons-cli 91 | 1.4 92 | 93 | 94 | 95 | commons-io 96 | commons-io 97 | 2.5 98 | 99 | 100 | 101 | org.luaj 102 | luaj-jse 103 | 3.0.1 104 | 105 | 106 | 107 | catalano 108 | catalano.core 109 | 1.4.0 110 | system 111 | ${basedir}/lib/Catalano/Libs/Catalano.Core.jar 112 | 113 | 114 | 115 | catalano 116 | catalano.image 117 | 1.4.0 118 | system 119 | ${basedir}/lib/Catalano/Libs/Catalano.Image.jar 120 | 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /src/main/java/CMDOptions.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by duckman on 19/05/17. 3 | */ 4 | 5 | import org.apache.commons.cli.CommandLine; 6 | import org.apache.commons.cli.Option; 7 | import org.apache.commons.cli.Options; 8 | 9 | import java.util.Arrays; 10 | import java.util.Comparator; 11 | import java.util.OptionalInt; 12 | import java.util.stream.IntStream; 13 | 14 | import static Toolbox.Misc.ifNull; 15 | 16 | /** 17 | * A helper for working with commons CLI. 18 | * 19 | * Items in this enum will be printed in the same order they are defined. 20 | */ 21 | public enum CMDOptions { 22 | GAME_MM3 ("mm3", false, "Runs M&M III, Isles of Terra"), 23 | GAME_MM4 ("mm4", false, "Runs M&M IV, Clouds of Xeen"), 24 | GAME_MM5 ("mm5", false, "Runs M&M V, Darkside of Xeen"), 25 | GAME_WOX ("wox", false, "Runs M&M IV + V, World of Xeen"), 26 | 27 | DIR ("dir", true, "Source directory for M&M game"), 28 | REBUILD_PROXY ("rebuild_proxy", "p", false, "Extracts all data in the original ccFiles to a proxy file."), 29 | 30 | DEBUG ("debug", "d", false, "Runs application in debug mode (recommended for developers)"), 31 | NO_CACHE ("no_cache", false, "Disable caching of files (for debugging/editing)."), 32 | NO_HUD ("no_hud", false, "Disables rendering of the user interface, showing just the world."); 33 | 34 | String name; 35 | String shortName; 36 | String desc; 37 | boolean hasArg; 38 | Option option; 39 | 40 | CMDOptions(String name, String shortName, boolean hasArg, String desc) { 41 | this.name = name; 42 | this.shortName = shortName; 43 | this.hasArg = hasArg; 44 | this.desc = desc; 45 | 46 | if(this.shortName == null) { 47 | this.option = new Option(name, hasArg, desc); 48 | } 49 | else { 50 | this.option = new Option(shortName, name, hasArg, desc); 51 | } 52 | } 53 | 54 | CMDOptions(String name, boolean hasArg, String desc) { 55 | this(name, null, hasArg, desc); 56 | } 57 | 58 | public boolean isSet(CommandLine cmd) { 59 | return ((name != null) && cmd.hasOption(name)) || ((shortName != null) && cmd.hasOption(shortName)); 60 | } 61 | 62 | public String getArg(CommandLine cmd) { 63 | if ((name != null) && cmd.hasOption(name)) { 64 | return cmd.getOptionValue(name); 65 | } 66 | 67 | if ((shortName != null) && cmd.hasOption(shortName)) { 68 | return cmd.getOptionValue(shortName); 69 | } 70 | 71 | return null; 72 | } 73 | 74 | public static Options getOptions() { 75 | Options options = new Options(); 76 | Arrays.stream(CMDOptions.values()) 77 | .sorted(Comparator.comparingInt(Enum::ordinal)) 78 | .forEach(C -> options.addOption(C.option)); 79 | return options; 80 | } 81 | 82 | public static int compare(Option a, Option b) { 83 | // This is not the logical and direct way of approaching the problem, but java. 84 | Option[] options = Arrays.stream(CMDOptions.values()).map(C -> C.option).toArray(Option[]::new); 85 | OptionalInt aPos = IntStream.range(0, options.length).filter(I -> options[I].equals(a)).findFirst(); 86 | OptionalInt bPos = IntStream.range(0, options.length).filter(I -> options[I].equals(b)).findFirst(); 87 | 88 | if(aPos.isPresent() && bPos.isPresent()) { 89 | return Integer.compare(aPos.getAsInt(), bPos.getAsInt()); 90 | } 91 | 92 | else return ifNull(a.getLongOpt(),"").compareTo(ifNull(b.getLongOpt(), "")); 93 | } 94 | } -------------------------------------------------------------------------------- /src/main/java/Game/EntityScript.java: -------------------------------------------------------------------------------- 1 | package Game; 2 | 3 | import Game.Map.MaMWorld; 4 | 5 | /** 6 | * Created by duckman on 4/09/2016. 7 | */ 8 | public class EntityScript implements IScript 9 | { 10 | String script; 11 | 12 | @Override 13 | public String getScript() { 14 | return script; 15 | } 16 | 17 | @Override 18 | public void setScript(String script) { 19 | this.script = script; 20 | } 21 | 22 | @Override 23 | public void run(MaMGame game, IGameEntity owner) { 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/Game/GameEntityBase.java: -------------------------------------------------------------------------------- 1 | package Game; 2 | 3 | import Game.Map.MaMWorld; 4 | import Rendering.IRelativeToLocationSprite; 5 | import Toolbox.Direction; 6 | import mamFiles.MaMMazeFile; 7 | 8 | import java.awt.*; 9 | 10 | /** 11 | * Created by duckman on 11/08/2016. 12 | */ 13 | public abstract class GameEntityBase implements IGameEntity 14 | { 15 | /** 16 | * id is reserved for the implementer to make use of. 17 | */ 18 | protected int id; 19 | 20 | /** 21 | * Name as per screen view (attack/talk dialog etc). 22 | */ 23 | protected String Name; 24 | protected boolean visible; 25 | protected Direction heading; 26 | protected Point location; 27 | 28 | 29 | /** 30 | * NULL if entity not bound to any maze (adventurer) 31 | */ 32 | protected MaMMazeFile parentMaze; 33 | 34 | public GameEntityBase(int id, String name, Point location, MaMMazeFile parentMaze) { 35 | this(id, name, Direction.UP, location, parentMaze); 36 | } 37 | 38 | public GameEntityBase(int id, String name, Direction heading, Point location, MaMMazeFile parentMaze) { 39 | this(id, name, true, heading,location, parentMaze); 40 | } 41 | 42 | public GameEntityBase(int id, String name, boolean visible, Direction heading, Point location, MaMMazeFile parentMaze) { 43 | 44 | this.id = id; 45 | Name = name; 46 | this.visible = visible; 47 | this.heading = heading; 48 | this.location = location; 49 | this.parentMaze = parentMaze; 50 | } 51 | 52 | @Override 53 | public Point getLocationMapSpace() { 54 | return location; 55 | } 56 | 57 | @Override 58 | public Direction getHeading() { 59 | return heading; 60 | } 61 | 62 | @Override 63 | public boolean isVisible() { 64 | return visible; 65 | } 66 | 67 | public int getId() { 68 | return id; 69 | } 70 | 71 | public String getName() { 72 | return Name; 73 | } 74 | 75 | public void setVisible(boolean visible) { 76 | this.visible = visible; 77 | } 78 | 79 | public void setHeading(Direction heading) { 80 | this.heading = heading; 81 | } 82 | 83 | public void setLocation(Point location) { 84 | this.location = location; 85 | } 86 | 87 | @Override 88 | public abstract IRelativeToLocationSprite getSprite(); 89 | 90 | /** 91 | * Gets the parentMaze. 92 | * 93 | * NULL if entity not bound to any maze (adventurer) 94 | * 95 | * @return the parentMaze. 96 | */ 97 | @Override 98 | public MaMMazeFile getParentMaze() { 99 | return parentMaze; 100 | } 101 | 102 | 103 | @Override 104 | public abstract void update(MaMGame game); 105 | 106 | 107 | } 108 | -------------------------------------------------------------------------------- /src/main/java/Game/GlobalSettings.java: -------------------------------------------------------------------------------- 1 | package Game; 2 | 3 | import Toolbox.FileHelpers; 4 | 5 | import java.io.File; 6 | import java.util.Locale; 7 | import java.util.ResourceBundle; 8 | 9 | /** 10 | * Created by duckman on 18/06/2016. 11 | */ 12 | public enum GlobalSettings 13 | { 14 | INSTANCE; 15 | 16 | boolean debugMode = true; 17 | boolean rebuildProxies = false; 18 | private boolean disableHUD = false; 19 | private boolean discoverFileNames = false; 20 | private volatile ResourceBundle localText = null; 21 | private double renderingScale = 2.0; 22 | private String gameDir = ""; 23 | 24 | public boolean debugMode() { 25 | return debugMode; 26 | } 27 | 28 | public void setDebugMode(boolean debugMode) { 29 | this.debugMode = debugMode; 30 | } 31 | 32 | /** 33 | * True if ccFiles should save proxie files when loaded. 34 | */ 35 | public boolean rebuildProxies() { 36 | return rebuildProxies; 37 | } 38 | public void setRebuildProxies(boolean rebuildProxies) { 39 | this.rebuildProxies = rebuildProxies; 40 | } 41 | 42 | public void setDisableHUD(boolean disableHUD) { 43 | this.disableHUD = disableHUD; 44 | } 45 | 46 | public boolean isHUDDisabled() { 47 | return disableHUD; 48 | } 49 | 50 | public boolean discoverFileNames() { 51 | return discoverFileNames; 52 | } 53 | 54 | public ResourceBundle getLocalText() { 55 | if(localText == null) { 56 | localText = ResourceBundle.getBundle("openXeen", Locale.ENGLISH); 57 | } 58 | return localText; 59 | } 60 | 61 | public double getRenderingScale() { 62 | return renderingScale; 63 | } 64 | 65 | public String getGameDir() { 66 | return (gameDir == null) ? "" : gameDir; 67 | } 68 | 69 | public String relativeToGameDir(String relativePath) { 70 | return FileHelpers.join(getGameDir(), relativePath); 71 | } 72 | 73 | public String migDebugText() { 74 | return ""; //debugMode() ? ", debug 20" : ""; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/main/java/Game/IAttackable.java: -------------------------------------------------------------------------------- 1 | package Game; 2 | 3 | import GameMechanics.Attacks.IAttack; 4 | 5 | /** 6 | * Created by duckman on 3/07/2016. 7 | */ 8 | public interface IAttackable 9 | { 10 | public void copThis(IAttack attack); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/Game/IMaMGame.java: -------------------------------------------------------------------------------- 1 | package Game; 2 | 3 | import Game.Map.MaMWorld; 4 | import GameMechanics.Magic.PartyEnchantments.IPartyEnchantment; 5 | import Rendering.ISceneComposition; 6 | import Rendering.MaM2DMapComposition; 7 | import Rendering.MaM3DSceneComposition; 8 | import org.joda.time.DateTime; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * Created by duckman on 24/05/2016. 14 | */ 15 | public interface IMaMGame extends AutoCloseable 16 | { 17 | //------------------------------------------------------------------------------------------------- 18 | // Internal classes 19 | //------------------------------------------------------------------------------------------------- 20 | enum MaMGameStates 21 | { 22 | Explore, 23 | Combat 24 | } 25 | 26 | 27 | 28 | //------------------------------------------------------------------------------------------------- 29 | // Interface 30 | //------------------------------------------------------------------------------------------------- 31 | int getGold(); 32 | int getFood(); 33 | DateTime getDateTime(); 34 | 35 | MaMGameStates getGameState(); 36 | 37 | MaMWorld getWorld(); 38 | void doAction(MaMActions action); 39 | 40 | MaM3DSceneComposition render(); 41 | MaM2DMapComposition renderMap(int mapX, int mapY, int mapWidth, int mapHeight); 42 | MaM2DMapComposition renderWizardEyeView(int width, int height); 43 | ISceneComposition renderHUDForWorld(); 44 | 45 | /** 46 | * Renders the player characters and their 47 | */ 48 | ISceneComposition renderParty(); 49 | 50 | /** 51 | * 0 = no danger; to 1.0 = full danger. 52 | * 2.0 = holy shit. 53 | */ 54 | double getDangerLevel(); 55 | 56 | /** 57 | * Space for no compass 58 | */ 59 | char getCompassValue(); 60 | 61 | /** 62 | * Is the party facing a secret door. 63 | */ 64 | boolean getSecretDoor(); 65 | 66 | List getActivePartyEnchantments(); 67 | 68 | 69 | 70 | 71 | 72 | } 73 | -------------------------------------------------------------------------------- /src/main/java/Game/IScript.java: -------------------------------------------------------------------------------- 1 | package Game; 2 | 3 | import Game.Map.MaMWorld; 4 | 5 | 6 | /** 7 | * Created by duckman on 4/09/2016. 8 | */ 9 | public interface IScript 10 | { 11 | String getScript(); 12 | void setScript(String script); 13 | void run(MaMGame game, T owner); 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/Game/IUpdateable.java: -------------------------------------------------------------------------------- 1 | package Game; 2 | 3 | import Game.Map.MaMWorld; 4 | 5 | /** 6 | * Created by duckman on 3/07/2016. 7 | */ 8 | public interface IUpdateable 9 | { 10 | /** 11 | * Update the state of the object, it can see the world. 12 | */ 13 | void update(MaMGame game); 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/Game/MaMActions.java: -------------------------------------------------------------------------------- 1 | package Game; 2 | 3 | /** 4 | * Created by duckman on 24/05/2016. 5 | */ 6 | public enum MaMActions 7 | { 8 | WalkForward(true, false), 9 | WalkBackWard(true, false), 10 | WalkLeft(true, false), 11 | WalkRight(true, false), 12 | TurnLeft(true, true), 13 | TurnRight(true, true), 14 | Inspect(true, false), 15 | Shoot(true, false), 16 | Bash(true, false), 17 | Run(true, false), 18 | Spell(true, true), 19 | MelleAttack(false, true), 20 | MelleShield(true, true), 21 | Sleep(true, false); 22 | 23 | boolean duringExplore; 24 | boolean duringCombat; 25 | 26 | MaMActions(boolean duringExplore, boolean duringCombat) { 27 | this.duringExplore = duringExplore; 28 | this.duringCombat = duringCombat; 29 | } 30 | } -------------------------------------------------------------------------------- /src/main/java/Game/Map/MaMMap.java: -------------------------------------------------------------------------------- 1 | package Game.Map; 2 | 3 | /** 4 | * Created by duckman on 15/05/2016. 5 | * 6 | */ 7 | /* 8 | public class MaMMap 9 | { 10 | } 11 | */ 12 | -------------------------------------------------------------------------------- /src/main/java/Game/Map/MaMTile.java: -------------------------------------------------------------------------------- 1 | package Game.Map; 2 | 3 | /** 4 | * Created by duckman on 15/05/2016. 5 | */ 6 | public class MaMTile 7 | { 8 | private final int idxBase; 9 | private final int idxMiddle; 10 | /** 11 | * idxTop by the wiki doco (MAZExxxx.DAT File Format). 12 | * Holds a map icon to display. 13 | * Assumably relating to the object on this tile.... 14 | * but the 3d viewable object comes from the mon file 15 | */ 16 | private final int indexMapOverlayIcon; 17 | private final int idxOverlay; 18 | //int surface; 19 | private boolean seen; 20 | private boolean visited; 21 | private boolean[] flags; 22 | 23 | public MaMTile(int idxBase, int idxMiddle, int indexMapOverlayIcon, int idxOverlay) 24 | { 25 | this.idxBase = idxBase; 26 | this.idxMiddle = idxMiddle; 27 | this.indexMapOverlayIcon = indexMapOverlayIcon; 28 | this.idxOverlay = idxOverlay; 29 | this.seen = false; 30 | this.visited = false; 31 | flags = new boolean[0]; 32 | } 33 | 34 | public void setSeen(boolean seen) { 35 | this.seen = seen; 36 | } 37 | 38 | public void setVisited(boolean visited) { 39 | this.visited = visited; 40 | } 41 | 42 | public int getIndexBase() { 43 | return idxBase; 44 | } 45 | 46 | public int getIndexMiddle() { 47 | return idxMiddle; 48 | } 49 | 50 | public int getIndexMapOverlayIcon() { 51 | return indexMapOverlayIcon; 52 | } 53 | 54 | public int getIndexOverlay() { 55 | return idxOverlay; 56 | } 57 | 58 | public boolean isSeen() { 59 | return seen; 60 | } 61 | 62 | public boolean isVisited() { 63 | return visited; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/main/java/Game/Monsters/MaMSpawnPoint.java: -------------------------------------------------------------------------------- 1 | package Game.Monsters; 2 | 3 | import Game.GameEntityBase; 4 | import Game.MaMGame; 5 | import Game.Map.MaMWorld; 6 | import Rendering.IRelativeToLocationSprite; 7 | import Toolbox.Direction; 8 | import mamFiles.MaMMazeFile; 9 | 10 | import java.awt.*; 11 | 12 | /** 13 | * Created by duckman on 12/08/2016. 14 | */ 15 | public class MaMSpawnPoint extends GameEntityBase 16 | { 17 | long monstersSpawned; 18 | 19 | 20 | public MaMSpawnPoint(int id, String name, MaMMazeFile maze, Point location) { 21 | this(id, name, Direction.UP, maze, location); 22 | } 23 | 24 | public MaMSpawnPoint(int id, String name, Direction heading, MaMMazeFile maze, Point location) { 25 | this(id, name, false, heading, maze, location); 26 | } 27 | 28 | public MaMSpawnPoint(int id, String name, boolean visible, Direction heading, MaMMazeFile maze, Point location) { 29 | super(id, name, visible, heading, location, maze); 30 | monstersSpawned = 0; 31 | } 32 | 33 | @Override 34 | public IRelativeToLocationSprite getSprite() { 35 | return null; 36 | } 37 | 38 | @Override 39 | public void update(MaMGame game) { 40 | if(monstersSpawned == 0) { 41 | spawnMonster(game.getWorld()); 42 | } 43 | } 44 | 45 | private void spawnMonster(MaMWorld world) { 46 | //MaMMonster mon = new MaMMonster( 47 | //world.addMonster( 48 | //TODO: 49 | } 50 | 51 | 52 | } 53 | -------------------------------------------------------------------------------- /src/main/java/Game/Monsters/MonsterType.java: -------------------------------------------------------------------------------- 1 | package Game.Monsters; 2 | 3 | /** 4 | * Created by duckman on 18/08/2016. 5 | */ 6 | public enum MonsterType { 7 | Humanoid, Dragon, Insect, Animal, Unique, Golem, Undead 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Adventurers/Award.java: -------------------------------------------------------------------------------- 1 | package GameMechanics.Adventurers; 2 | 3 | /** 4 | * Created by duckman on 31/05/2016. 5 | */ 6 | public class Award { 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Adventurers/CharClass.java: -------------------------------------------------------------------------------- 1 | package GameMechanics.Adventurers; 2 | 3 | /** 4 | * Created by duckman on 31/05/2016. 5 | */ 6 | public enum CharClass 7 | { 8 | Cleric, Sorcerer, ALL, ANY, Paladin, Archer, Ranger, Druid, Dwarf, Knight, Robber; 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Adventurers/CharGender.java: -------------------------------------------------------------------------------- 1 | package GameMechanics.Adventurers; 2 | 3 | /** 4 | * Created by duckman on 31/05/2016. 5 | */ 6 | public enum CharGender 7 | { 8 | //Gender has no effect other than changing sentence structure. 9 | 10 | Male(0,"Male", "his"), Female(1, "Female", "her"); 11 | 12 | CharGender(int id, String desc, String hisHer) 13 | { 14 | this.id = id; 15 | this.desc = desc; 16 | this.hisHer = hisHer; 17 | } 18 | 19 | int id; String desc; String hisHer; 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Adventurers/CharRace.java: -------------------------------------------------------------------------------- 1 | package GameMechanics.Adventurers; 2 | 3 | import GameMechanics.Stat; 4 | import org.joda.time.DateTime; 5 | 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | /** 10 | * Created by duckman on 31/05/2016. 11 | */ 12 | public enum CharRace 13 | { 14 | ORC ("Orc", new RaceModifier[] {new RaceModifier()}), 15 | HALF_ORC ("Orc", new RaceModifier[] {new RaceModifier()}), 16 | ELF ("Orc", new RaceModifier[] {new RaceModifier()}), 17 | HALF_ELF ("Orc", new RaceModifier[] {new RaceModifier()}), 18 | HUMAN ("Orc", new RaceModifier[] {new RaceModifier()}), 19 | DWARF ("Orc", new RaceModifier[] {new RaceModifier()}), 20 | HAUFLIN ("Orc", new RaceModifier[] {new RaceModifier()}); 21 | 22 | public static class RaceModifier implements IStatModifier 23 | { 24 | String name; 25 | @Override public DateTime getExpireTime() { return null; } 26 | @Override public String getName() { return name; } 27 | 28 | @Override 29 | public Stat applyTo(Stat stat) { 30 | return null; 31 | } 32 | 33 | @Override 34 | public boolean affects(Stat stat) { 35 | return false; 36 | } 37 | } 38 | 39 | String name; 40 | IStatModifier[] modifiers; 41 | 42 | CharRace(String name, IStatModifier[] modifiers) { 43 | this.name = name; 44 | this.modifiers = modifiers; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Adventurers/CharSkill.java: -------------------------------------------------------------------------------- 1 | package GameMechanics.Adventurers; 2 | 3 | /** 4 | * Created by duckman on 31/05/2016. 5 | */ 6 | public class CharSkill { 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Adventurers/ICharCondition.java: -------------------------------------------------------------------------------- 1 | package GameMechanics.Adventurers; 2 | 3 | /** 4 | * Created by duckman on 1/06/2016. 5 | */ 6 | public interface ICharCondition extends IStatModifier 7 | { 8 | //drunk, poison, asleep, dead, etc 9 | int getBasePriceToCure(); 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Adventurers/IStatModifier.java: -------------------------------------------------------------------------------- 1 | package GameMechanics.Adventurers; 2 | 3 | import GameMechanics.Stat; 4 | import org.joda.time.DateTime; 5 | 6 | /** 7 | * Created by duckman on 10/06/2016. 8 | */ 9 | public interface IStatModifier 10 | { 11 | DateTime getExpireTime(); 12 | String getName(); 13 | 14 | Stat applyTo(Stat stat); 15 | boolean affects(Stat stat); 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Attacks/AttackType.java: -------------------------------------------------------------------------------- 1 | package GameMechanics.Attacks; 2 | 3 | /** 4 | * Created by duckman on 18/08/2016. 5 | */ 6 | public enum AttackType 7 | { 8 | Disease, None, Poison, BreakWeapon, Energy, Fire, 9 | Weakness, Sleep, Confuse, KnockUnconscious, Magic, Stone, ERADICATE, 10 | Electric, Age, Paralyze, Cold, DrainSP, CursePlayer, CurseItems, Kill, Insane, None_11, Physical 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Attacks/IAttack.java: -------------------------------------------------------------------------------- 1 | package GameMechanics.Attacks; 2 | 3 | /** 4 | * Created by duckman on 3/07/2016. 5 | */ 6 | public interface IAttack { 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Equipment/Accessory.java: -------------------------------------------------------------------------------- 1 | package GameMechanics.Equipment; 2 | 3 | /** 4 | * Created by duckman on 31/05/2016. 5 | */ 6 | public class Accessory //extends InventoryItem 7 | { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Equipment/Armour.java: -------------------------------------------------------------------------------- 1 | package GameMechanics.Equipment; 2 | 3 | /** 4 | * Created by duckman on 31/05/2016. 5 | */ 6 | public class Armour { 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Equipment/IInventoryItem.java: -------------------------------------------------------------------------------- 1 | package GameMechanics.Equipment; 2 | 3 | /** 4 | * Created by duckman on 31/05/2016. 5 | */ 6 | public interface IInventoryItem 7 | { 8 | String getName(); 9 | int getValue(); 10 | boolean isBroken(); 11 | int getCurseLevel(); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Equipment/InventoryItem.java: -------------------------------------------------------------------------------- 1 | package GameMechanics.Equipment; 2 | 3 | /** 4 | * Created by duckman on 31/05/2016. 5 | */ 6 | public abstract class InventoryItem implements IInventoryItem 7 | { 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Equipment/MiscItem.java: -------------------------------------------------------------------------------- 1 | package GameMechanics.Equipment; 2 | 3 | /** 4 | * Created by duckman on 31/05/2016. 5 | */ 6 | public class MiscItem { 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Equipment/Weapon.java: -------------------------------------------------------------------------------- 1 | package GameMechanics.Equipment; 2 | 3 | /** 4 | * Created by duckman on 31/05/2016. 5 | */ 6 | public class Weapon { 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Inventory.java: -------------------------------------------------------------------------------- 1 | package GameMechanics; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /** 7 | * Created by duckman on 31/05/2016. 8 | */ 9 | public class Inventory extends ArrayList 10 | { 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Magic/ISpell.java: -------------------------------------------------------------------------------- 1 | package GameMechanics.Magic; 2 | 3 | import GameMechanics.Adventurers.Adventurer; 4 | import Game.Map.MaMWorld; 5 | 6 | /** 7 | * Created by duckman on 31/05/2016. 8 | */ 9 | public interface ISpell 10 | { 11 | enum CastableState{CanCast, WrongClass, 12 | NotIndoors,NotOutDoors, NotFromHere, 13 | OnlyBattle, NotInBattle, NotSafe, NoSP, NoGems, 14 | TooManyTimesADay, 15 | OtherProblem} 16 | 17 | int getSpellPointsRequired(MaMWorld world, Adventurer caster); 18 | int getGemsRequired(MaMWorld world, Adventurer caster); 19 | CastableState canCast(MaMWorld world, Adventurer caster); 20 | String getDescription(); 21 | void cast(MaMWorld world, Adventurer caster); 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Magic/PartyEnchantments/IPartyEnchantment.java: -------------------------------------------------------------------------------- 1 | package GameMechanics.Magic.PartyEnchantments; 2 | 3 | import GameMechanics.Adventurers.IStatModifier; 4 | import org.joda.time.DateTime; 5 | 6 | /** 7 | * Created by duckman on 10/06/2016. 8 | */ 9 | public interface IPartyEnchantment extends IStatModifier 10 | { 11 | 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Magic/Spell.java: -------------------------------------------------------------------------------- 1 | package GameMechanics.Magic; 2 | 3 | import GameMechanics.Adventurers.Adventurer; 4 | import Game.Map.MaMWorld; 5 | 6 | /** 7 | * Created by duckman on 31/05/2016. 8 | */ 9 | public abstract class Spell implements ISpell 10 | { 11 | @FunctionalInterface 12 | interface CastSpell { 13 | public int apply(MaMWorld world, Adventurer caster); 14 | } 15 | 16 | int spellPointsRequired; 17 | int gemsRequired; 18 | 19 | public Spell() 20 | { 21 | } 22 | 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Magic/SpellManager.java: -------------------------------------------------------------------------------- 1 | package GameMechanics.Magic; 2 | 3 | import java.lang.reflect.Method; 4 | import java.util.Arrays; 5 | import java.util.stream.Collectors; 6 | 7 | /** 8 | * Created by duckman on 31/05/2016. 9 | */ 10 | public class SpellManager 11 | { 12 | protected ISpell[] AllSpells; 13 | //AcidSpray("Acid Spray", castAcidSpray); 14 | 15 | //Spells(String name, Spell ) { 16 | //} 17 | 18 | public static String normaliseSpellName(String name) 19 | { 20 | if(name == null) 21 | { 22 | return ""; 23 | } 24 | 25 | return name.chars() 26 | .mapToObj(i -> (char)i) 27 | .filter(Character::isLetterOrDigit) 28 | .map(Object::toString) 29 | .collect(Collectors.joining()) 30 | .toUpperCase(); 31 | 32 | } 33 | } 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Magic/WoXSpells/SpellAcidSpray.java: -------------------------------------------------------------------------------- 1 | package GameMechanics.Magic.WoXSpells; 2 | 3 | import GameMechanics.Adventurers.Adventurer; 4 | import Game.Map.MaMWorld; 5 | import GameMechanics.Magic.Spell; 6 | 7 | /** 8 | * Created by duckman on 31/05/2016. 9 | */ 10 | public class SpellAcidSpray extends Spell 11 | { 12 | @Override 13 | public int getSpellPointsRequired(MaMWorld world, Adventurer caster) { 14 | return 0; 15 | } 16 | 17 | @Override 18 | public int getGemsRequired(MaMWorld world, Adventurer caster) { 19 | return 0; 20 | } 21 | 22 | @Override 23 | public CastableState canCast(MaMWorld world, Adventurer caster) { 24 | return null; 25 | } 26 | 27 | @Override 28 | public String getDescription() { 29 | return null; 30 | } 31 | 32 | @Override 33 | public void cast(MaMWorld world, Adventurer caster) { 34 | 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/GameMechanics/Stat.java: -------------------------------------------------------------------------------- 1 | package GameMechanics; 2 | 3 | import Game.GlobalSettings; 4 | import GameMechanics.Adventurers.IStatModifier; 5 | 6 | /** 7 | * Created by duckman on 31/05/2016. 8 | * Any stat, adventurer or monster. 9 | */ 10 | public class Stat 11 | { 12 | int baseLevel; 13 | int temporaryLevel; 14 | String key; 15 | 16 | public Stat(String key, int min, int max) { 17 | 18 | } 19 | 20 | public String getName() 21 | { 22 | return GlobalSettings.INSTANCE.getLocalText().getString(key); 23 | } 24 | 25 | public String describe() 26 | { 27 | return null; 28 | } //TODO 29 | 30 | public void resetTemporyLevel() {temporaryLevel = baseLevel;} 31 | 32 | public void applyModifier(IStatModifier mod) 33 | { 34 | Stat stat = mod.applyTo(this); 35 | this.baseLevel = stat.baseLevel; 36 | this.temporaryLevel = stat.temporaryLevel; 37 | } 38 | 39 | public int getBaseLevel() { 40 | return baseLevel; 41 | } 42 | 43 | public int getTemporaryLevel() { 44 | return temporaryLevel; 45 | } 46 | 47 | 48 | public void set(int value) { 49 | baseLevel = value; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Main-Class: Main 3 | 4 | -------------------------------------------------------------------------------- /src/main/java/Rendering/AnimationSettings.java: -------------------------------------------------------------------------------- 1 | package Rendering; 2 | 3 | import Toolbox.HProperties; 4 | import Toolbox.IHasProperties; 5 | 6 | public class AnimationSettings implements IHasProperties 7 | { 8 | int numberOfFrames; 9 | int milliSecondsPerFrame; 10 | boolean pingPongAnimation; 11 | boolean repeatAnimation; 12 | 13 | public AnimationSettings( 14 | int numberOfFrames, 15 | int msPerFrame, 16 | boolean pingPongAnimation, 17 | boolean repeatAnimation) 18 | { 19 | this.numberOfFrames = numberOfFrames; 20 | this.milliSecondsPerFrame = msPerFrame; 21 | this.pingPongAnimation = pingPongAnimation; 22 | this.repeatAnimation = repeatAnimation; 23 | } 24 | 25 | public int getNumberOfFrames() { 26 | return numberOfFrames; 27 | } 28 | 29 | public double getMilliSecondsPerFrame() { 30 | return milliSecondsPerFrame; 31 | } 32 | 33 | public boolean isPingPongAnimation() { 34 | return pingPongAnimation; 35 | } 36 | 37 | public boolean isRepeatAnimation() { 38 | return repeatAnimation; 39 | } 40 | 41 | public final int resolveFrameNumber(long timeMS) 42 | { 43 | int totalDuration = milliSecondsPerFrame * numberOfFrames; 44 | int msIntoAnimation = (int)(timeMS % totalDuration); 45 | int frameNumber = msIntoAnimation / milliSecondsPerFrame; 46 | return frameNumber; 47 | } 48 | 49 | //------------------------------------------------------------------------------------------------------------------ 50 | // IHasProperties 51 | //------------------------------------------------------------------------------------------------------------------ 52 | @Override 53 | public boolean getProperties(HProperties p) 54 | { 55 | this.numberOfFrames = Integer.parseInt(p.getProperty("AnimationSettings.numberOfFrames")); 56 | this.milliSecondsPerFrame = Integer.parseInt(p.getProperty("AnimationSettings.milliSecondsPerFrame")); 57 | this.pingPongAnimation = Boolean.parseBoolean(p.getProperty("AnimationSettings.pingPongAnimation")); 58 | this.repeatAnimation = Boolean.parseBoolean(p.getProperty("AnimationSettings.repeatAnimation")); 59 | return true; 60 | } 61 | 62 | @Override 63 | public boolean setProperties(HProperties p) { 64 | p.setProperty("AnimationSettings.numberOfFrames", String.valueOf(this.numberOfFrames)); 65 | p.setProperty("AnimationSettings.milliSecondsPerFrame", String.valueOf(this.milliSecondsPerFrame)); 66 | p.setProperty("AnimationSettings.pingPongAnimation", String.valueOf(this.pingPongAnimation)); 67 | p.setProperty("AnimationSettings.repeatAnimation", String.valueOf(this.repeatAnimation)); 68 | return true; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/main/java/Rendering/IMaMRenderer.java: -------------------------------------------------------------------------------- 1 | package Rendering; 2 | 3 | import Game.IMaMGame; 4 | 5 | /** 6 | * Created by duckman on 15/05/2016. 7 | */ 8 | public interface IMaMRenderer 9 | { 10 | void setGame(IMaMGame game); 11 | IMaMGame getGame(); 12 | void refresh(NATIVE_CANVAS g, long timeMS); 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/Rendering/IMaMSprite.java: -------------------------------------------------------------------------------- 1 | package Rendering; 2 | 3 | import mamFiles.CCFileFormatException; 4 | import mamFiles.IHasProxy; 5 | import mamFiles.MAMFile; 6 | import mamFiles.MaMPallet; 7 | 8 | import java.awt.image.BufferedImage; 9 | 10 | /** 11 | * Created by duckman on 19/05/2016. 12 | */ 13 | public interface IMaMSprite extends IRenderableGameObject 14 | { 15 | MaMPallet getPallet(); 16 | 17 | int getWidth(); 18 | 19 | int getHeight(); 20 | 21 | //Now in IRenderableGameObject as a default 22 | //BufferedImage[] getRenderedFrames(); 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/Rendering/IRelativeToLocationOverlay.java: -------------------------------------------------------------------------------- 1 | package Rendering; 2 | 3 | import Toolbox.Direction; 4 | 5 | import java.awt.*; 6 | import java.awt.image.BufferedImage; 7 | 8 | /** 9 | * Created by duckman on 3/07/2016. 10 | * 11 | * This handels things that are flat painted over the whole scene, but respond to the 12 | * Currently that's the surfaces. But this may come to include the sky. 13 | * 14 | * Note: No 'rendering position' is returned. The setup is to return a 15 | * IRenderableGameObject that is large enough to encompass the entire 16 | * area being layered over. This is wasteful in memory, but should 17 | * make game modding sane. 18 | */ 19 | public interface IRelativeToLocationOverlay extends IRenderableGameObject 20 | { 21 | /** 22 | * Returns a overlay of this surface on the ground/sky. 23 | * @param mapPosRelative The relative map position of the tile to be filled with this surface. 24 | * NB: null returns full ground over. 25 | * @param viewDir The direction the viewer is looking. This allows a directional object to 26 | * show the correct side to the viewport. 27 | */ 28 | IRenderableGameObject getSurfaceOverlay(Point mapPosRelative, Direction viewDir); 29 | 30 | @Override 31 | default BufferedImage getImage(int frame) { 32 | return getSurfaceOverlay(new Point(0,0), Direction.UP).getImage(frame); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/Rendering/IRelativeToLocationSprite.java: -------------------------------------------------------------------------------- 1 | package Rendering; 2 | 3 | import Toolbox.Direction; 4 | import java.awt.*; 5 | import java.awt.image.BufferedImage; 6 | 7 | /** 8 | * Created by duckman on 19/05/2016. 9 | * 10 | * TODO: Next code cleanup, this should not implement IRenderableGameObject. 11 | * Conceptually it delivers the IRenderableGameObject required. 12 | * Implementing IRenderableGameObject, generates legacy code that will never be used. 13 | * 14 | */ 15 | public interface IRelativeToLocationSprite extends IRenderableGameObject 16 | { 17 | /** 18 | * Returns "view" of this sprite. 19 | * The view includes perspective, but not scaling or positioning. 20 | * @param mapPosRelative The relative map position of the tile to be filled with this surface. 21 | * @param viewDir The direction the viewer is looking. This allows a directional object to 22 | * show the correct side to the viewport. 23 | */ 24 | IRenderableGameObject getView(Point mapPosRelative, Direction viewDir); 25 | 26 | @Override 27 | default BufferedImage getImage(int frame) { 28 | return getView(new Point(0,0), Direction.UP).getImage(frame); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/Rendering/ISScalableGUI.java: -------------------------------------------------------------------------------- 1 | package Rendering; 2 | 3 | import java.awt.*; 4 | 5 | /** 6 | * Created by duckman on 3/06/17. 7 | * 8 | * A control that can be resized by a constant factor. 9 | */ 10 | public interface ISScalableGUI 11 | { 12 | double getScale(); 13 | void setScale(double scale); 14 | 15 | /** 16 | * Use this to allow the control to scale relative to a parent container. 17 | * Otherwise the original size will be lost to accumulated arithmetic errors. 18 | */ 19 | Rectangle getUnscaledBounds(); 20 | 21 | /** 22 | * Use this to allow the control to scale relative to a parent container. 23 | * Otherwise the original size will be lost to accumulated arithmetic errors. 24 | */ 25 | void setUnscaledBounds(Rectangle r); 26 | 27 | default Rectangle getScaledBounds() { 28 | Rectangle r = getUnscaledBounds(); 29 | double scale = getScale(); 30 | int x = (int)(r.x * scale); 31 | int y = (int)(r.y * scale); 32 | int w = (int)(r.width * scale); 33 | int h = (int)(r.height * scale); 34 | 35 | return new Rectangle(x, y, w, h); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/Rendering/ISceneComposition.java: -------------------------------------------------------------------------------- 1 | package Rendering; 2 | 3 | import Toolbox.MaMGameException; 4 | import javafx.util.Pair; 5 | 6 | import java.awt.*; 7 | import java.awt.image.BufferedImage; 8 | import java.util.List; 9 | import java.util.function.Function; 10 | 11 | /** 12 | * Created by duckman on 5/06/2016. 13 | */ 14 | public interface ISceneComposition 15 | { 16 | void depthSort(); 17 | 18 | List> getRenderables(); 19 | 20 | void addRenderable(RenderablePos pos, IRenderableGameObject obj) throws MaMGameException; 21 | 22 | default void render2Graphics(Graphics g, 23 | long timeMS, 24 | int x, int y, 25 | double scale) 26 | { 27 | depthSort(); 28 | for (Pair renderable : getRenderables()) 29 | { 30 | AnimationSettings anim = renderable.getValue().getAnimationSettings(); 31 | 32 | BufferedImage frame; 33 | if(anim != null) 34 | { 35 | int frameNum = anim.resolveFrameNumber(timeMS); 36 | frame = renderable.getValue().getImage(frameNum % anim.getNumberOfFrames()); 37 | } 38 | else 39 | { 40 | frame = renderable.getValue().getImage(0); 41 | } 42 | if(frame == null) 43 | { 44 | System.out.println("Sprite is corrupted?"); 45 | continue; 46 | } 47 | 48 | Rectangle bounds = renderable.getKey().getImageBoundsAfterOffset(0, 0, 49 | frame.getWidth(), 50 | frame.getHeight()); 51 | bounds = scaleRectangleNoTearing(bounds, scale); 52 | 53 | g.drawImage(frame, (int)x+bounds.x, (int)y+bounds.y, bounds.width, bounds.height, null); 54 | } 55 | } 56 | 57 | /** 58 | * So... 59 | * If a sprite is rendered so its edge in world space is (X + W) 60 | * Then its edge in view space is (X*scale + W*scale). 61 | * BUT: Consider the Sprite adjacent o it (X2 + W2), such that X2 = (X + W)+1; 62 | * 63 | * Problem: X2*scale != (X*scale + W*scale)+1. 64 | * This causes occasional tears when scaling sprites in a non integral fashion. 65 | * 66 | * I'm 90% sure scaling rectangles by outer dimensions fixes this, if not 67 | * the other code here can be used instead. 68 | */ 69 | static Rectangle scaleRectangleNoTearing(Rectangle r, double scale) { 70 | int x = (int)Math.round(r.x * scale); 71 | int y = (int)Math.round(r.y * scale); 72 | int right = (int)Math.round((r.x+r.width) * scale); 73 | int bottom = (int)Math.round((r.y+r.height) * scale); 74 | return new Rectangle(x, y, right-x, bottom-y); 75 | } 76 | 77 | } 78 | -------------------------------------------------------------------------------- /src/main/java/Rendering/MaM2DInsertionOrderComposition.java: -------------------------------------------------------------------------------- 1 | package Rendering; 2 | 3 | import javafx.util.Pair; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | /** 9 | * Created by duckman on 10/06/2016. 10 | */ 11 | public class MaM2DInsertionOrderComposition implements ISceneComposition 12 | { 13 | protected List> renderables; 14 | 15 | public MaM2DInsertionOrderComposition() 16 | { 17 | renderables = new ArrayList<>(); 18 | } 19 | 20 | @Override 21 | public synchronized void depthSort() 22 | { 23 | } 24 | 25 | @Override 26 | public synchronized List> getRenderables() 27 | { 28 | return renderables; 29 | } 30 | 31 | @Override 32 | public synchronized void addRenderable(RenderablePos pos, IRenderableGameObject obj) 33 | { 34 | renderables.add(new Pair<>(pos, obj)); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/Rendering/MaM2DMapComposition.java: -------------------------------------------------------------------------------- 1 | package Rendering; 2 | 3 | import javafx.util.Pair; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | /** 9 | * Created by duckman on 5/06/2016. 10 | * 11 | * Used for mini-map and larger world maps. 12 | */ 13 | public class MaM2DMapComposition implements ISceneComposition 14 | { 15 | protected List> renderables; 16 | protected boolean sorted = false; 17 | 18 | public MaM2DMapComposition() 19 | { 20 | renderables = new ArrayList<>(); 21 | sorted = false; 22 | } 23 | 24 | @Override 25 | public synchronized void depthSort() 26 | { 27 | if(!sorted) 28 | { 29 | //depth sort by depth, then y, then x, because the wall tiles overlap floor tiles. 30 | renderables.sort((p1, p2) -> { 31 | RenderablePos rp1 = p1.getKey(); 32 | RenderablePos rp2 = p2.getKey(); 33 | int c = Integer.compare(rp1.getDepth(), rp2.getDepth()); 34 | if(c == 0) 35 | { 36 | c = Integer.compare(rp1.getyPos(), rp2.getyPos()); 37 | if(c == 0) 38 | { 39 | c = Integer.compare(rp1.getxPos(), rp2.getxPos()); 40 | } 41 | } 42 | return c; 43 | } 44 | ); 45 | sorted = true; 46 | } 47 | } 48 | 49 | @Override 50 | public synchronized List> getRenderables() { 51 | depthSort(); //ensure we are sorted 52 | return renderables; 53 | } 54 | 55 | @Override 56 | public synchronized void addRenderable(RenderablePos pos, IRenderableGameObject obj) 57 | { 58 | sorted = false; 59 | renderables.add(new Pair<>(pos, obj)); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/main/java/Rendering/SimpleCanvas/MaMButton.java: -------------------------------------------------------------------------------- 1 | package Rendering.SimpleCanvas; 2 | 3 | import Rendering.IRenderableGameObject; 4 | 5 | import javax.swing.*; 6 | import java.awt.*; 7 | 8 | /** 9 | * Created by duckman on 6/06/17. 10 | * 11 | * Tweaking JButton for graphics. 12 | */ 13 | public class MaMButton extends JButton { 14 | Rendering.IRenderableGameObject btnFrames; 15 | String tag; 16 | 17 | public MaMButton(String tag, IRenderableGameObject btnFrames) { 18 | this(tag, btnFrames, null); 19 | } 20 | 21 | public MaMButton(String tag, IRenderableGameObject btnFrames, String text) { 22 | super((text == null) ? "" : text); 23 | this.btnFrames = btnFrames; 24 | this.setFocusPainted(false); 25 | this.setFocusable(false); 26 | 27 | this.setFocusPainted(false); 28 | this.setFocusable(false); 29 | this.setBackground(new Color(255, 255, 255, 0)); 30 | this.setMargin(new Insets(0, 0, 0, 0)); 31 | this.tag = tag; 32 | } 33 | 34 | @Override 35 | public void paint(Graphics g) { 36 | //super.paint(g); 37 | if(btnFrames != null) { 38 | g.drawImage(btnFrames.getRenderedFrames()[0], 0, 0, this.getWidth(), this.getHeight(), null); 39 | } 40 | super.paint(g); 41 | 42 | if(hasFocus()) { 43 | super.paint(g); 44 | } 45 | if(isSelected()) { 46 | super.paint(g); 47 | } 48 | 49 | //getIcon().paintIcon(this, g, 0, 0); 50 | } 51 | }; -------------------------------------------------------------------------------- /src/main/java/Toolbox/ArrayHelpers.java: -------------------------------------------------------------------------------- 1 | package Toolbox; 2 | 3 | import java.awt.*; 4 | import java.awt.image.BufferedImage; 5 | import java.util.*; 6 | import java.util.List; 7 | 8 | /** 9 | * Created by duckman on 22/05/2016. 10 | */ 11 | public class ArrayHelpers 12 | { 13 | 14 | public static Color[] toColorArray(List cols) 15 | { 16 | Color[] c = new Color[cols.size()]; 17 | return cols.toArray(c); 18 | } 19 | 20 | public static BufferedImage[] toBufferedImageArray(List images) 21 | { 22 | BufferedImage[] array = new BufferedImage[images.size()]; 23 | return images.toArray(array); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/Toolbox/BlindIndexMaper.java: -------------------------------------------------------------------------------- 1 | package Toolbox; 2 | 3 | import java.util.AbstractMap; 4 | import java.util.HashMap; 5 | import java.util.Map; 6 | import java.util.Set; 7 | import java.util.function.Function; 8 | 9 | /** 10 | * Created by duckman on 19/06/2016. 11 | * 12 | * I repeatedly have a problem of finding all objects that are enumerated by a number. 13 | * Eg incremental file in a directory; 14 | * 15 | */ 16 | public class BlindIndexMaper 17 | { 18 | public static MapfindMapping(Function getItem, int minRange, int maxRange, int maxFailsInARow) 19 | { 20 | Map map = new HashMap<>(); 21 | int missCount=0; 22 | 23 | //sanitise inputs 24 | maxFailsInARow = Math.max(0, maxFailsInARow); 25 | if(maxRange < minRange) 26 | { 27 | int temp = maxRange; 28 | maxRange = minRange; 29 | minRange = temp; 30 | } 31 | 32 | //explore for items 33 | for (int i = minRange; (i <= maxRange)&&(missCount<=maxFailsInARow); i++) 34 | { 35 | T obj = null; 36 | try 37 | { 38 | obj = getItem.apply(i); 39 | } 40 | catch (Exception ex) 41 | { 42 | //don't care, obj is still null 43 | } 44 | 45 | if(obj != null) 46 | { 47 | map.put(i, obj); 48 | 49 | //reset miss count 50 | missCount = 0; 51 | } 52 | else if(maxFailsInARow > 0) //maxFailsInARow == 0 means stop on first error. 53 | { 54 | missCount++; 55 | } 56 | } 57 | return map; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/main/java/Toolbox/ColourHelpers.java: -------------------------------------------------------------------------------- 1 | package Toolbox; 2 | 3 | import java.awt.*; 4 | import java.text.ParseException; 5 | 6 | /** 7 | * Created by duckman on 21/05/2016. 8 | */ 9 | public class ColourHelpers 10 | { 11 | public static String RGB2String(Color c) 12 | { 13 | return c.getRed() + ", " + c.getGreen() + ", " + c.getBlue(); 14 | } 15 | 16 | public static Color String2RGB(String s) throws Exception { 17 | try 18 | { 19 | if(s != null) 20 | { 21 | String[] tokens = s.split("\\,"); 22 | if(tokens.length == 3) 23 | { 24 | int r = Integer.parseInt(tokens[0]); 25 | int g = Integer.parseInt(tokens[1]); 26 | int b = Integer.parseInt(tokens[2]); 27 | 28 | return new Color(r,g,b); 29 | } 30 | } 31 | } 32 | catch(Exception ex) 33 | { 34 | } 35 | 36 | throw new Exception("Unable to parse colour"); 37 | } 38 | 39 | 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/Toolbox/Direction.java: -------------------------------------------------------------------------------- 1 | package Toolbox; 2 | 3 | import java.awt.*; 4 | 5 | public enum Direction 6 | { 7 | UP(0, -1) { 8 | @Override 9 | public Direction turnLeft() { 10 | return LEFT; 11 | }}, 12 | RIGHT(1, 0) { 13 | @Override 14 | public Direction turnLeft() { 15 | return UP; 16 | }}, 17 | DOWN(0, 1) { 18 | @Override 19 | public Direction turnLeft() { 20 | return RIGHT; 21 | }}, 22 | LEFT(-1, 0) { 23 | @Override 24 | public Direction turnLeft() { 25 | return DOWN; 26 | }}; 27 | 28 | Point vector; 29 | Direction(int x, int y) 30 | { 31 | vector = new Point(x, y); 32 | } 33 | 34 | public Point getVector() { 35 | return vector; 36 | } 37 | 38 | public abstract Direction turnLeft(); 39 | 40 | //something about this is so wrong, its right. 41 | public final Direction turnRight() {return turnLeft().turnLeft().turnLeft();} 42 | public final Direction turnAround() {return turnLeft().turnLeft();} 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/Toolbox/Grid.java: -------------------------------------------------------------------------------- 1 | package Toolbox; 2 | 3 | import mamFiles.MaMSprite; 4 | 5 | import java.awt.Point; 6 | import java.util.Arrays; 7 | import java.util.Collection; 8 | import java.util.Map; 9 | import java.util.Set; 10 | import java.util.function.Function; 11 | import java.util.function.Supplier; 12 | 13 | /** 14 | * Created by duckman on 15/05/2016. 15 | */ 16 | public class Grid implements IReadonlyGrid { 17 | int numXValues, numYValues; 18 | T[] values; // T[y*numXValues+x] 19 | 20 | public Grid(int xValues, int yValues, Function getValue) 21 | { 22 | this.numXValues = Math.max(xValues, 0); 23 | this.numYValues = Math.max(yValues, 0); 24 | //T foo = Crea T::new; 25 | //this.values = new T[numYValues][]; 26 | this.values = (T[])new Object[size()];// s. [numYValues][]; 27 | setAll(getValue); 28 | } 29 | 30 | public Grid(int xValues, int yValues) 31 | { 32 | this.numXValues = Math.max(xValues, 0); 33 | this.numYValues = Math.max(yValues, 0); 34 | //T foo = Crea T::new; 35 | //this.values = new T[numYValues][]; 36 | this.values = (T[])new Object[size()]; 37 | for (int i = 0; i < values.length; i++) { 38 | values[i] = null; 39 | } 40 | } 41 | 42 | @Override 43 | public T get(int x, int y) 44 | { 45 | return values[y*numXValues + x]; 46 | } 47 | 48 | @Override 49 | public boolean isValidLocation(int x, int y) 50 | { 51 | return (x >=0) && (x < numXValues) && (y >= 0) && (y < numYValues); 52 | } 53 | 54 | @Override 55 | public T get(Point pos) 56 | { 57 | return values[pos.y*numXValues + pos.x]; 58 | } 59 | 60 | @Override 61 | public int getWidth() { 62 | return numXValues; 63 | } 64 | 65 | @Override 66 | public int getHeight() { 67 | return numYValues; 68 | } 69 | 70 | /** 71 | * Total size of grid (width * height) 72 | */ 73 | @Override 74 | public int size() 75 | { 76 | return numXValues * numYValues; 77 | } 78 | 79 | public void set(int x, int y, T value) 80 | { 81 | values[y*numXValues + x] = value; 82 | } 83 | 84 | public void set(Point pos, T value) 85 | { 86 | values[pos.y*numXValues + pos.x] = value; 87 | } 88 | 89 | public void setAll(Function getValue) 90 | { 91 | for(int y=0; y 26 | //{ 27 | // @Override 28 | // public int compare(String a, String b) { 29 | // char ca = a.charAt(0); 30 | // char cb = b.charAt(0); 31 | // 32 | // if(Character.isLetter(ca 33 | // 34 | // return 0; 35 | // } 36 | // 37 | // enum TokenType 38 | // { 39 | // LETTER(8), 40 | // NUMBER(5), 41 | // DOT(3), 42 | // PUNCTUATION(4), 43 | // WHITE_SPACE(2), 44 | // MISC(9); 45 | // 46 | // int priority; 47 | // 48 | // TokenType(int priority) { 49 | // this.priority = priority; 50 | // } 51 | // 52 | // public int compare(TokenType a, TokenType b) { return Integer.compare(a.priority, b.priority); } 53 | // 54 | // public static TokenType fromChar(char c) 55 | // { 56 | // if(Character.isLetter(return c) 57 | // } 58 | // } 59 | // 60 | // 61 | // 62 | // 63 | // 64 | //// @Override 65 | //// public boolean equals(Object obj) { 66 | //// return false; 67 | //// } 68 | //} 69 | -------------------------------------------------------------------------------- /src/main/java/Toolbox/IHasProperties.java: -------------------------------------------------------------------------------- 1 | package Toolbox; 2 | 3 | import java.io.*; 4 | import java.util.*; 5 | 6 | /** 7 | * Created by duckman on 28/05/2016. 8 | */ 9 | public interface IHasProperties 10 | { 11 | boolean getProperties(HProperties p); 12 | boolean setProperties(HProperties p); 13 | 14 | default boolean saveProperties(String path, String comment) 15 | { 16 | try(OutputStream os = new FileOutputStream(path)) 17 | { 18 | //yes its cool that I can do this in java, but its not cool that I have to. 19 | HProperties p = new HProperties(){ 20 | @Override 21 | public synchronized Enumeration keys() { 22 | TreeSet ts = new TreeSet<>(new NaturalOrderComparator()); 23 | ts.addAll(super.keySet()); 24 | return Collections.enumeration(ts); 25 | } 26 | }; 27 | 28 | if(setProperties(p)) 29 | { 30 | p.store(os, comment); 31 | return true; 32 | } 33 | } catch (FileNotFoundException e) { 34 | e.printStackTrace(); 35 | } catch (IOException e) { 36 | e.printStackTrace(); 37 | } 38 | 39 | return false; 40 | } 41 | 42 | default boolean loadProperties(String path) 43 | { 44 | HProperties prop = new HProperties(); 45 | try(InputStream is = new FileInputStream(path)) 46 | { 47 | prop.load(is); 48 | return getProperties(prop); 49 | } catch (FileNotFoundException e) { 50 | e.printStackTrace(); 51 | } catch (IOException e) { 52 | e.printStackTrace(); 53 | } 54 | 55 | return false; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/Toolbox/IImageWorker.java: -------------------------------------------------------------------------------- 1 | package Toolbox; 2 | 3 | import java.awt.image.BufferedImage; 4 | 5 | /** 6 | * Created by duckman on 1/08/2016. 7 | */ 8 | //@FunctionalInterface 9 | public interface IImageWorker extends IHasProperties 10 | { 11 | BufferedImage apply(BufferedImage image); 12 | 13 | static IImageWorker NO_OPERATION = new IImageWorker() { 14 | @Override 15 | public boolean getProperties(HProperties p) { return true;} 16 | 17 | @Override 18 | public boolean setProperties(HProperties p) { return true; } 19 | 20 | @Override 21 | public BufferedImage apply(BufferedImage image) { return image; } 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/Toolbox/IReadonlyGrid.java: -------------------------------------------------------------------------------- 1 | package Toolbox; 2 | 3 | import java.awt.*; 4 | 5 | /** 6 | * Created by duckman on 1/07/2016. 7 | */ 8 | public interface IReadonlyGrid { 9 | T get(int x, int y); 10 | 11 | boolean isValidLocation(int x, int y); 12 | 13 | T get(Point pos); 14 | 15 | int getWidth(); 16 | 17 | int getHeight(); 18 | 19 | default int size() {return getWidth() * getHeight();} 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/Toolbox/IValidatable.java: -------------------------------------------------------------------------------- 1 | package Toolbox; 2 | 3 | import java.io.InvalidClassException; 4 | 5 | /** 6 | * Created by duckman on 8/05/2016. 7 | */ 8 | public interface IValidatable 9 | { 10 | boolean isValid(); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/Toolbox/LRUCache.java: -------------------------------------------------------------------------------- 1 | package Toolbox; 2 | import java.util.LinkedHashMap; 3 | import java.util.Map.Entry; 4 | 5 | /** 6 | * Created by duckman on 11/06/2016. 7 | * This is that standard LRU trick. 8 | * 9 | * Not sure, but I think this code originates from the sun javadocs. 10 | */ 11 | public class LRUCache < K, V > extends LinkedHashMap < K, V > { 12 | private int capacity; 13 | 14 | public LRUCache(int capacity) { 15 | super(capacity+1, 1.0f, true); 16 | this.capacity = capacity; 17 | } 18 | 19 | protected boolean removeEldestEntry(Entry entry) { 20 | return (size() > this.capacity); 21 | } 22 | } -------------------------------------------------------------------------------- /src/main/java/Toolbox/MaMGameException.java: -------------------------------------------------------------------------------- 1 | package Toolbox; 2 | 3 | import mamFiles.CCFileFormatException; 4 | import mamFiles.MaMCCFileReader; 5 | 6 | /** 7 | * Created by duckman on 26/06/2016. 8 | */ 9 | public class MaMGameException extends Exception { 10 | public MaMGameException(String message) { 11 | super(message); 12 | } 13 | 14 | public MaMGameException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 15 | super(message, cause, enableSuppression, writableStackTrace); 16 | } 17 | 18 | public MaMGameException(String message, Throwable cause) { 19 | super(message, cause); 20 | } 21 | 22 | public MaMGameException(Throwable cause) { 23 | super(cause); 24 | } 25 | 26 | public static void assertFalse(boolean test, String desc) throws MaMGameException 27 | { 28 | if(test) 29 | { 30 | throw new MaMGameException("assertFalse failed: " + desc); 31 | } 32 | } 33 | 34 | public static void assertTrue(boolean test, String desc) throws MaMGameException 35 | { 36 | if(!test) 37 | { 38 | throw new MaMGameException("assertTrue failed: " + desc); 39 | } 40 | } 41 | 42 | public static CCFileFormatException fromMissingFile(String file, MaMCCFileReader reader) { 43 | return new CCFileFormatException("Missing file \"" + file + "\" in \"" + reader.getFilePath() + "\""); 44 | } 45 | 46 | public static void throwFeatureNotReady() throws CCFileFormatException 47 | { 48 | throwFeatureNotReady(null); 49 | } 50 | 51 | public static void throwFeatureNotReady(String message) throws CCFileFormatException 52 | { 53 | throw new CCFileFormatException("MaM Feature not developed yet: " + ((message != null) ? message : "(N/A)")); 54 | } 55 | 56 | public static void notSupposedToBeHere() throws CCFileFormatException 57 | { 58 | throw new CCFileFormatException("Code execution reached somewhere it was not supposed to."); 59 | } 60 | 61 | protected static String makeSafe(Object obj) 62 | { 63 | return (obj==null) ? "NULL" : ((obj instanceof String) ? (String)obj : makeSafe(obj.toString())); 64 | } 65 | 66 | /** 67 | * This is a stub to allow try blocks to compile even though I had to 68 | * temporarily comment out the one line of code that needed the block. 69 | */ 70 | public static void stub() throws CCFileFormatException 71 | { 72 | 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/main/java/Toolbox/Misc.java: -------------------------------------------------------------------------------- 1 | package Toolbox; 2 | 3 | import java.util.Arrays; 4 | 5 | /** 6 | * Created by duckman on 19/06/2016. 7 | */ 8 | public class Misc 9 | { 10 | /** 11 | * I like 12 | * name = ifNull(someFunctionCall(), "bob") 13 | * not 14 | * name = someFunctionCall(); 15 | * name = (name != null) ? name : "bob"; 16 | */ 17 | public static T ifNull(T what, T ifNull) 18 | { 19 | return (what == null) ? ifNull : what; 20 | } 21 | 22 | public enum PadType 23 | { 24 | PAD_BEFORE, CENTRE_TEXT, PAD_AFTER; 25 | } 26 | 27 | public static String padZeros(int number, int places) 28 | { 29 | return pad(""+number, places, '0', PadType.PAD_BEFORE); 30 | } 31 | 32 | public static String pad(String s, int places, char padChar, PadType padType) 33 | { 34 | if(s == null) 35 | { 36 | return repeat(padChar, places); 37 | } 38 | if(s.length() >= places) 39 | { 40 | return s; 41 | } 42 | 43 | int padSize = places - s.length(); 44 | 45 | switch(padType) 46 | { 47 | case PAD_BEFORE: 48 | return repeat(padChar, padSize) + s; 49 | case CENTRE_TEXT: 50 | return repeat(padChar, padSize/2) + s + repeat(padChar, padSize-(padSize/2)); 51 | case PAD_AFTER: 52 | return s + repeat(padChar, padSize); 53 | } 54 | return s; 55 | } 56 | 57 | public static String repeat(char c, int n) 58 | { 59 | if(n < 0) { 60 | return null; 61 | } 62 | if(n == 0) { 63 | return ""; 64 | } 65 | 66 | char[] reps = new char[n]; 67 | Arrays.fill(reps, c); 68 | return new String(reps); 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/main/java/Toolbox/PointHelper.java: -------------------------------------------------------------------------------- 1 | package Toolbox; 2 | 3 | import java.awt.*; 4 | 5 | /** 6 | * Created by duckman on 29/06/2016. 7 | * 8 | * Stuff the Point class seems to lack. 9 | * narf. 10 | */ 11 | 12 | public final class PointHelper 13 | { 14 | public static Point add(Point a, Point b) 15 | { 16 | return new Point(a.x + b.x, a.y + b.y); 17 | } 18 | 19 | public static Point sub(Point minuend, Point subtrahend) 20 | { 21 | return new Point(minuend.x - subtrahend.x, minuend.y - subtrahend.y); 22 | } 23 | 24 | public static Point multiply(Point a, int v) 25 | { 26 | return new Point(a.x * v, a.y * v); 27 | } 28 | 29 | public static Point navigate(Point pos, Direction dir, int dist) 30 | { 31 | Point p = add(pos, multiply(dir.getVector(), dist)); 32 | return p; 33 | } 34 | 35 | public static double length(Point a) 36 | { 37 | return Math.sqrt((a.x*a.x)+(a.y*a.y)); 38 | } 39 | 40 | public static double dist(Point a, Point b) 41 | { 42 | return length(sub(a, b)); 43 | } 44 | 45 | public static String point2String(Point p) { 46 | return "[" + p.x + ", " + p.y + "]"; 47 | } 48 | 49 | public static boolean equalsXY(Point p, int x, int y) 50 | { 51 | return (p.x == x) && (p.y == y); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/Toolbox/SwingHelpers.java: -------------------------------------------------------------------------------- 1 | package Toolbox; 2 | 3 | import javax.swing.*; 4 | import java.awt.*; 5 | 6 | /** 7 | * Created by duckman on 4/06/17. 8 | */ 9 | public class SwingHelpers 10 | { 11 | public static void setToSize(JComponent component , Dimension size) { 12 | component.setPreferredSize(size); 13 | component.setMinimumSize(size); 14 | component.setMaximumSize(size); 15 | } 16 | 17 | public static void setToSize(JComponent component, int width, int height) { 18 | setToSize(component, new Dimension(width, height)); 19 | } 20 | 21 | public static JPanel makeClearPanel(LayoutManager layout) { 22 | JPanel pnl = new JPanel(layout); 23 | pnl.setBackground(new Color(255, 255, 255, 0)); 24 | return pnl; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/Toolbox/Tag.java: -------------------------------------------------------------------------------- 1 | package Toolbox; 2 | 3 | /** 4 | * Created by duckman on 1/07/2016. 5 | * 6 | * This is perhaps an unorthodox class. 7 | * I created it to work around some awkwardness in java collection. 8 | * After all, one good awkwardness deserves another. 9 | * 10 | * Concept by example 11 | * A Tag acts just like an Integer. 12 | * 13 | * Tag myNum = new Tag<>(2, "two"); 14 | * if(myNum == 2) 15 | * { 16 | * System.out.printline("It worked 2 = " + myNum.getTag()); 17 | * } 18 | * 19 | */ 20 | public final class Tag 21 | { 22 | private final K key; 23 | private final T tag; 24 | 25 | public Tag(K key, T tag) { 26 | this.key = key; 27 | this.tag = tag; 28 | } 29 | 30 | public final K getKey() { 31 | return key; 32 | } 33 | 34 | public final T getTag() { 35 | return tag; 36 | } 37 | 38 | @Override 39 | public final boolean equals(Object obj) { 40 | if (this == obj) return true; 41 | if (obj == null) return false; 42 | 43 | if(getClass() == obj.getClass()) 44 | { 45 | return key.equals(((Tag) obj).key); 46 | } 47 | else 48 | { 49 | return (key.equals(obj)); 50 | } 51 | } 52 | 53 | @Override 54 | public final int hashCode() { 55 | return key.hashCode(); 56 | } 57 | 58 | @Override 59 | public final String toString() { 60 | return key.toString(); 61 | } 62 | 63 | 64 | } 65 | -------------------------------------------------------------------------------- /src/main/java/mamFiles/IHasProxy.java: -------------------------------------------------------------------------------- 1 | package mamFiles; 2 | 3 | /** 4 | * Created by duckman on 21/05/2016. 5 | * 6 | * Indicates and object can be saved to a file type. 7 | * Implies it can be created from the file too, but FFS Java 8 | */ 9 | public interface IHasProxy 10 | { 11 | String suggestProxyFileName(); 12 | 13 | boolean saveProxy(String path) throws CCFileFormatException; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/mamFiles/MAMFile.java: -------------------------------------------------------------------------------- 1 | package mamFiles; 2 | 3 | import Rendering.IRenderableGameObject; 4 | import Toolbox.HProperties; 5 | import Toolbox.IHasProperties; 6 | 7 | /** 8 | * Created by duckman on 7/05/2016. 9 | * 10 | * There is an odd concept here: The MaMFile does not store its actual name or file ID. 11 | * Why: 12 | * - I don't know if earlier MaM games have this concept. 13 | * - File is a misnomer... Its a game object. 14 | * - Some MAMFiles are transformed into something that is different (adding transparency to a pallate) 15 | * - The hash system used in the xeen TOC won't scale up. 16 | */ 17 | public abstract class MAMFile implements IHasProxy, IHasProperties 18 | { 19 | /** 20 | * Not the name as per the cc file. This is a description. 21 | * It does not need to be unique. 22 | */ 23 | protected String name; 24 | 25 | /** 26 | * This is a string unique to every MaM File. 27 | */ 28 | protected transient final String key; 29 | 30 | public MAMFile(String name, String key) 31 | { 32 | this.name = name; 33 | this.key = key.intern(); //allow for key to be used in instancemap etc 34 | } 35 | 36 | public String getName() { 37 | return name; 38 | } 39 | 40 | /** 41 | * This is a string unique to every MaM File. 42 | */ 43 | public String getKey() { 44 | return key; 45 | } 46 | 47 | public static String generateKeyFromCCFile(int id, MaMCCFileReader reader) 48 | { 49 | // "C 1234@c:\games\xeen\dark.cc" 50 | return "C " + id + "@" + reader.filePath; 51 | } 52 | 53 | //TODO: 1 path != 1 resource, add name of object type or something 54 | public static String generateKeyFromPath(String path) 55 | { 56 | // "P c:\games\xeen\dark_cc_proxy\SKY_files\sky.sky" 57 | return "P " + path; 58 | } 59 | 60 | /** 61 | * NB a unique key may well not be assosiated with an object bound for the cache. 62 | * Its more about objects that are modified versions of something else. 63 | */ 64 | private static transient volatile long __id = 0; 65 | public synchronized static String generateUniqueKey(String itemName) 66 | { 67 | __id++; 68 | // U[133721@MMM4PAL "set transparency"] 69 | return "U " + __id + "@" + itemName; 70 | } 71 | 72 | public static String generateKeyFromJoin(String key, MAMFile with) { 73 | return "J " + key + "@WITH " + with.key; 74 | } 75 | 76 | public static String generateKeyFromWrapper(String wrapperName, MAMFile file) { 77 | return "W " + file.key + "@IN " + wrapperName; 78 | } 79 | 80 | //------------------------------------------------------------------------------------------------------------------ 81 | // IHasProperties 82 | //------------------------------------------------------------------------------------------------------------------ 83 | @Override 84 | public boolean setProperties(HProperties p) 85 | { 86 | //NB: key is not saved 87 | p.setProperty("MAMFile.name", name); 88 | return true; 89 | } 90 | 91 | @Override 92 | public boolean getProperties(HProperties p) 93 | { 94 | this.name = p.getProperty("MAMFile.name"); 95 | return false; 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /src/main/java/mamFiles/MAMVocFile.java: -------------------------------------------------------------------------------- 1 | package mamFiles; 2 | 3 | import Toolbox.FileHelpers; 4 | 5 | import javax.sound.sampled.AudioInputStream; 6 | import javax.sound.sampled.AudioSystem; 7 | import javax.sound.sampled.Clip; 8 | import java.io.IOException; 9 | 10 | /** 11 | * Created by duckman on 22/05/2016. 12 | */ 13 | public class MAMVocFile extends MAMFile 14 | { 15 | byte[] vocFileData; 16 | 17 | //TODO: put this in config file. 18 | static String pathtoFFMpeg = "x:\\utils\\"; 19 | 20 | public MAMVocFile(String name, String key, byte[] data) 21 | { 22 | super(name, key); 23 | vocFileData = data; 24 | } 25 | 26 | public boolean convertToWav(String vocFile) 27 | { 28 | String wavFile = FileHelpers.changeExtesion(vocFile, "wav"); 29 | 30 | if(!FileHelpers.fileExists(wavFile)) 31 | { 32 | try { 33 | String exeFile = FileHelpers.join(pathtoFFMpeg, "ffmpeg.exe"); 34 | if(FileHelpers.fileExists(exeFile)) 35 | { 36 | 37 | ProcessBuilder builder = new ProcessBuilder(exeFile, "-i", vocFile, wavFile); 38 | builder.redirectErrorStream(true); 39 | final Process process = builder.start(); 40 | int r = process.waitFor(); 41 | 42 | return (r == 0) && (FileHelpers.fileExists(wavFile)); 43 | } 44 | 45 | } catch (IOException e) { 46 | e.printStackTrace(); 47 | } catch (InterruptedException e) { 48 | e.printStackTrace(); 49 | } 50 | return false; 51 | } 52 | else 53 | { 54 | return true; 55 | } 56 | } 57 | 58 | public void play() 59 | { 60 | /* URL url = new URL( 61 | "http://pscode.org/media/leftright.wav"); 62 | Clip clip = AudioSystem.getClip(); 63 | // getAudioInputStream() also accepts a File or InputStream 64 | AudioInputStream ais = AudioSystem. 65 | getAudioInputStream( ,url ); 66 | clip.open(ais); 67 | clip.start(); 68 | 69 | */ 70 | } 71 | 72 | 73 | @Override 74 | public String suggestProxyFileName() { 75 | return name+".wav"; 76 | } 77 | 78 | @Override 79 | public boolean saveProxy(String path) 80 | { 81 | String vocFile = FileHelpers.changeExtesion(path, "voc"); 82 | FileHelpers.saveBytes(vocFile, vocFileData); 83 | return convertToWav(vocFile); 84 | } 85 | 86 | public MAMVocFile fromVocFile(String path) 87 | { 88 | return new MAMVocFile(FileHelpers.getFileNameTillFirstDot(path), 89 | MAMFile.generateKeyFromPath(path), 90 | FileHelpers.readAllBytes(path)); 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /src/main/java/mamFiles/MaMBinaryFile.java: -------------------------------------------------------------------------------- 1 | package mamFiles; 2 | 3 | import Toolbox.FileHelpers; 4 | 5 | /** 6 | * Created by duckman on 21/05/2016. 7 | */ 8 | public class MaMBinaryFile extends MAMFile 9 | { 10 | byte[] data; 11 | 12 | public MaMBinaryFile(String name, String key, byte[] data) 13 | { 14 | super(name, key); 15 | this.data = data; 16 | } 17 | 18 | public byte[] getData() { 19 | return data; 20 | } 21 | 22 | @Override 23 | public String suggestProxyFileName() { 24 | return name + ".BIN"; 25 | } 26 | 27 | @Override 28 | public boolean saveProxy(String path) { 29 | return FileHelpers.saveBytes(path, this.data); 30 | } 31 | 32 | public MaMBinaryFile fromBinFile(String path) 33 | { 34 | byte[] data = FileHelpers.readAllBytes(path); 35 | return new MaMBinaryFile(FileHelpers.getFileNameTillFirstDot(path), 36 | MAMFile.generateKeyFromPath(path), 37 | data); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/mamFiles/MaMMazeFile.java: -------------------------------------------------------------------------------- 1 | package mamFiles; 2 | 3 | import Game.IScript; 4 | import Game.Map.MaMMazeView; 5 | import Game.Map.MaMTile; 6 | import Toolbox.Grid; 7 | import mamFiles.CCFileFormatException; 8 | import mamFiles.MAMFile; 9 | import mamFiles.SpriteHelpers.EnvironmentSet.IMaMEnvironmentSet; 10 | 11 | import java.awt.*; 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | /** 16 | * Created by duckman on 1/06/2016. 17 | */ 18 | public abstract class MaMMazeFile extends MAMFile 19 | { 20 | protected String name; 21 | protected int mazeID; 22 | protected Grid map; 23 | /** 24 | * -1 = nno map 25 | * Use as per joiningMaps[Direction.Left.ordinal()] 26 | */ 27 | protected int[] joiningMaps; 28 | protected List cantCastList; 29 | protected boolean canRest; 30 | protected boolean canSave; 31 | protected boolean[] miscFlags; 32 | protected boolean isDark; 33 | protected boolean isOutdoors; 34 | //private MaMSprite tilesSprite; 35 | protected int floorType; 36 | protected int wallNoPass; 37 | protected int surfNoPass; 38 | protected int unlockDoor; 39 | protected int unlockBox; 40 | protected int bashDoor; 41 | protected int bashGrate; 42 | protected int bashWall; 43 | protected int chanceToRun; 44 | protected int trapDamage; 45 | protected int wallKind; 46 | protected int tavernTips; 47 | protected Point runPos; 48 | 49 | protected IMaMEnvironmentSet environmentSet; 50 | 51 | protected MaMMazeView parentView; 52 | //protected Point worldSpacePos; 53 | 54 | MaMScript eventScript; 55 | 56 | public MaMMazeFile(String name, String key) throws CCFileFormatException { 57 | super(name, key); 58 | 59 | cantCastList = new ArrayList<>(); 60 | eventScript = new MaMScript(name+"_events", key+"_events", ""); 61 | } 62 | 63 | @Override 64 | public String suggestProxyFileName() { 65 | return null; 66 | } 67 | 68 | @Override 69 | public boolean saveProxy(String path) throws CCFileFormatException { 70 | return false; 71 | } 72 | 73 | public int getMazeID() { 74 | return mazeID; 75 | } 76 | 77 | public Grid getMap() { 78 | return map; 79 | } 80 | 81 | public int[] getJoiningMaps() { 82 | return joiningMaps; 83 | } 84 | 85 | public List getCantCastList() { 86 | return cantCastList; 87 | } 88 | 89 | public boolean canRest() { 90 | return canRest; 91 | } 92 | 93 | public boolean canSave() { 94 | return canSave; 95 | } 96 | 97 | public boolean[] getMiscFlags() { 98 | return miscFlags; 99 | } 100 | 101 | public boolean isDark() { 102 | return isDark; 103 | } 104 | 105 | public boolean isOutdoors() { 106 | return isOutdoors; 107 | } 108 | 109 | public IMaMEnvironmentSet getEnvironmentSet() { 110 | return environmentSet; 111 | } 112 | 113 | @Override 114 | public String getName() { 115 | return name; 116 | } 117 | 118 | public void setName(String name) { 119 | this.name = name; 120 | } 121 | 122 | public MaMScript getEventScript() { 123 | return eventScript; 124 | } 125 | 126 | public void setEventScript(MaMScript eventScript) { 127 | this.eventScript = eventScript; 128 | } 129 | } 130 | -------------------------------------------------------------------------------- /src/main/java/mamFiles/MaMSurface.java: -------------------------------------------------------------------------------- 1 | package mamFiles; 2 | 3 | import Rendering.AnimationSettings; 4 | import Rendering.IRenderableGameObject; 5 | import Toolbox.Direction; 6 | import Toolbox.HProperties; 7 | 8 | import java.awt.*; 9 | import java.awt.image.BufferedImage; 10 | 11 | /** 12 | * Created by duckman on 19/05/2016. 13 | * 14 | * More info [http://xeen.wikia.com/wiki/SRF_File_Format] 15 | * Bigger picture [http://xeen.wikia.com/wiki/MAZExxxx.DAT_File_Format] 16 | * 17 | * This surface class is kept abstract. WoXSurface deals with paint by area 18 | * surfaces, I also envision perspective transform surfaces being a possibility. 19 | */ 20 | public abstract class MaMSurface extends MAMFile implements Rendering.IRelativeToLocationOverlay 21 | { 22 | protected final static int[] viewWidthLut = {3,5,7,7}; 23 | protected final static int[] ySumLut = {0,3,8,15}; 24 | 25 | /** 26 | * The entire ground. 27 | */ 28 | IRenderableGameObject groundSurface; 29 | 30 | /** 31 | * @param mamStyleSprite A sprite, with 25 frames 32 | */ 33 | public MaMSurface(MaMSprite mamStyleSprite, String key) 34 | { 35 | super(mamStyleSprite.name, key); 36 | } 37 | 38 | protected abstract BufferedImage compileToOneImage(MaMSprite mamStyleSprite); 39 | 40 | 41 | 42 | 43 | // @Override 44 | // public BufferedImage getImage(Point mapPosRelative, int frame) 45 | // { 46 | // int x = mapPosRelative.x; 47 | // int y = mapPosRelative.y; 48 | // if((y>=0)&&(y= -divergence)&&(x <= divergence)) 52 | // { 53 | // int relativeFrame = ySumLut[y]+x+divergence; 54 | // return this.sprite.getRenderedFrames()[relativeFrame]; 55 | // } 56 | // } 57 | // 58 | // //bad location 59 | // return null; 60 | // } 61 | 62 | // @Override 63 | // public BufferedImage getImage(int frame) { 64 | // return sprite.getRenderedFrames()[frame]; 65 | // } 66 | 67 | @Override 68 | public AnimationSettings getAnimationSettings() { 69 | return null; 70 | } 71 | 72 | 73 | @Override 74 | public String suggestProxyFileName() { 75 | return name + ".png"; 76 | } 77 | 78 | @Override 79 | public boolean saveProxy(String path) throws CCFileFormatException { 80 | return groundSurface.asIHasProxyObject().saveProxy(path); 81 | } 82 | 83 | // public MaMSurface fromPng(String path) throws CCFileFormatException { 84 | // MaMSprite sprite = WOXSpriteFile.fromPNGFile(path); 85 | // return new MaMSurface(sprite, MAMFile.generateKeyFromPath(path)); 86 | // } 87 | 88 | 89 | @Override 90 | public boolean setProperties(HProperties p) { 91 | //TODO: sprite key and this key are saved to the same property 92 | p = p.push("Sprite"); 93 | groundSurface.asIHasPropertiesObject().setProperties(p); 94 | p = p.pop(); 95 | return super.setProperties(p); 96 | } 97 | 98 | @Override 99 | public boolean getProperties(HProperties p) { 100 | p = p.push("Sprite"); 101 | groundSurface.asIHasPropertiesObject().getProperties(p); 102 | p = p.pop(); 103 | return super.getProperties(p); 104 | } 105 | 106 | public IRenderableGameObject getSurfaceOverlay(Point point) { 107 | return this.getSurfaceOverlay(point, Direction.UP); 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /src/main/java/mamFiles/MaMTextFile.java: -------------------------------------------------------------------------------- 1 | package mamFiles; 2 | 3 | import Toolbox.FileHelpers; 4 | import Toolbox.ImageHelpers; 5 | import mamFiles.MAMFile; 6 | 7 | /** 8 | * Created by duckman on 21/05/2016. 9 | */ 10 | public class MaMTextFile extends MAMFile 11 | { 12 | String text; 13 | 14 | public MaMTextFile(String name, String key, byte[] data) 15 | { 16 | super(name, key); 17 | text = new String(data); 18 | } 19 | 20 | public MaMTextFile(String name, String key, String data) 21 | { 22 | super(name, key); 23 | text = new String(data.toCharArray()); 24 | } 25 | 26 | public String getText() { 27 | return text; 28 | } 29 | 30 | @Override 31 | public String suggestProxyFileName() { 32 | return name+".txt"; 33 | } 34 | 35 | @Override 36 | public boolean saveProxy(String path) { 37 | return FileHelpers.saveText(text, path); 38 | } 39 | 40 | public static MaMTextFile fromTextFile(String path) 41 | { 42 | return new MaMTextFile(FileHelpers.getFileNameTillFirstDot(path), 43 | MAMFile.generateKeyFromPath(path), 44 | FileHelpers.readAllText(path)); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/mamFiles/SpriteHelpers/EnvironmentSet/IMaMEnvironmentSet.java: -------------------------------------------------------------------------------- 1 | package mamFiles.SpriteHelpers.EnvironmentSet; 2 | 3 | import Rendering.IRenderableGameObject; 4 | import mamFiles.CCFileFormatException; 5 | import mamFiles.MaMSurface; 6 | import mamFiles.MaMThing; 7 | 8 | /** 9 | * Created by duckman on 16/06/2016. 10 | */ 11 | public interface IMaMEnvironmentSet 12 | { 13 | MaMThing getObject(int objectIndex); 14 | 15 | IRenderableGameObject getSky(); 16 | IRenderableGameObject getGround(); 17 | 18 | MaMSurface getSurface(int surfaceIndex) throws CCFileFormatException; 19 | 20 | IRenderableGameObject getMapTile(int groundIndex); 21 | IRenderableGameObject getMapObject(int objectIndex); 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/mamFiles/SpriteHelpers/EnvironmentSet/IMaMIndoorEnvironmentSet.java: -------------------------------------------------------------------------------- 1 | package mamFiles.SpriteHelpers.EnvironmentSet; 2 | 3 | import Rendering.IRenderableGameObject; 4 | import mamFiles.SpriteHelpers.EnvironmentSet.IMaMEnvironmentSet; 5 | 6 | import java.awt.*; 7 | 8 | /** 9 | * Created by duckman on 15/06/2016. 10 | * 11 | * Wrangles the jungle of sprites relating to the current environment. 12 | */ 13 | public interface IMaMIndoorEnvironmentSet extends IMaMEnvironmentSet 14 | { 15 | IRenderableGameObject getSideWall(int wallindex, Point mapPositionRelativeToLocation); 16 | IRenderableGameObject getFrontWall(int wallIndex, int mipMapLevel); 17 | 18 | IRenderableGameObject getMapWall(int wallIndex); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/mamFiles/SpriteHelpers/EnvironmentSet/IMaMOutdoorEnvironmentSet.java: -------------------------------------------------------------------------------- 1 | package mamFiles.SpriteHelpers.EnvironmentSet; 2 | 3 | import Rendering.IRenderableGameObject; 4 | 5 | /** 6 | * Created by duckman on 16/06/2016. 7 | */ 8 | public interface IMaMOutdoorEnvironmentSet extends IMaMEnvironmentSet 9 | { 10 | IRenderableGameObject getEnviron(int environIndex, int mipMapLevel); 11 | 12 | IRenderableGameObject getMapEnviron(int environIndex); 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/mamFiles/SpriteHelpers/EnvironmentSet/IOT/IoTEnvironmentSet.java: -------------------------------------------------------------------------------- 1 | package mamFiles.SpriteHelpers.EnvironmentSet.IOT; 2 | 3 | import Rendering.IRenderableGameObject; 4 | import mamFiles.CCFileFormatException; 5 | import mamFiles.MaMSurface; 6 | import mamFiles.MaMThing; 7 | import mamFiles.SpriteHelpers.EnvironmentSet.IMaMEnvironmentSet; 8 | 9 | /** 10 | * Created by duckman on 16/07/2016. 11 | */ 12 | public abstract class IoTEnvironmentSet implements IMaMEnvironmentSet 13 | { 14 | public IoTEnvironmentSet() { 15 | } 16 | 17 | @Override 18 | public MaMThing getObject(int objectIndex) { 19 | return null; 20 | } 21 | 22 | @Override 23 | public IRenderableGameObject getSky() { 24 | return null; 25 | } 26 | 27 | @Override 28 | public IRenderableGameObject getGround() { 29 | return null; 30 | } 31 | 32 | @Override 33 | public MaMSurface getSurface(int surfaceIndex) throws CCFileFormatException { 34 | return null; 35 | } 36 | 37 | @Override 38 | public IRenderableGameObject getMapTile(int groundIndex) { 39 | return null; 40 | } 41 | 42 | @Override 43 | public IRenderableGameObject getMapObject(int objectIndex) { 44 | return null; 45 | } 46 | } 47 | 48 | -------------------------------------------------------------------------------- /src/main/java/mamFiles/SpriteHelpers/EnvironmentSet/IOT/IoTIndoorEnvironmentSet.java: -------------------------------------------------------------------------------- 1 | package mamFiles.SpriteHelpers.EnvironmentSet.IOT; 2 | 3 | import Rendering.IRenderableGameObject; 4 | import mamFiles.SpriteHelpers.EnvironmentSet.IMaMIndoorEnvironmentSet; 5 | 6 | import java.awt.*; 7 | 8 | public class IoTIndoorEnvironmentSet extends IoTEnvironmentSet implements IMaMIndoorEnvironmentSet 9 | { 10 | public IoTIndoorEnvironmentSet() 11 | { 12 | super(); 13 | } 14 | 15 | @Override 16 | public IRenderableGameObject getSideWall(int wallindex, Point mapPositionRelativeToLocation) { 17 | return null; 18 | } 19 | 20 | @Override 21 | public IRenderableGameObject getFrontWall(int wallIndex, int mipMapLevel) { 22 | return null; 23 | } 24 | 25 | @Override 26 | public IRenderableGameObject getMapWall(int wallIndex) { 27 | return null; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/mamFiles/SpriteHelpers/EnvironmentSet/IOT/IoTOutdoorEnvironmentSet.java: -------------------------------------------------------------------------------- 1 | package mamFiles.SpriteHelpers.EnvironmentSet.IOT; 2 | 3 | import Rendering.IRenderableGameObject; 4 | import mamFiles.SpriteHelpers.EnvironmentSet.IMaMOutdoorEnvironmentSet; 5 | 6 | public class IoTOutdoorEnvironmentSet extends IoTEnvironmentSet implements IMaMOutdoorEnvironmentSet{ 7 | public IoTOutdoorEnvironmentSet() { 8 | super(); 9 | } 10 | 11 | @Override 12 | public IRenderableGameObject getEnviron(int environIndex, int mipMapLevel) { 13 | return null; 14 | } 15 | 16 | @Override 17 | public IRenderableGameObject getMapEnviron(int environIndex) { 18 | return null; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/mamFiles/SpriteHelpers/MaMHudElements.java: -------------------------------------------------------------------------------- 1 | package mamFiles.SpriteHelpers; 2 | 3 | /** 4 | * Created by duckman on 15/06/2016. 5 | * 6 | * Wrangles all the HUD elements 7 | * -Buttons 8 | * -Hud main graphic 9 | * -Indicators (bat etc) 10 | * -Faces 11 | * -Health bars 12 | * -NPC dialogs 13 | * 14 | * Does not do 15 | * -Mini map (see MaMEnvironmentSet) 16 | * -Inventory pages 17 | * -Shop keep pages 18 | * -Cut scenes 19 | */ 20 | public class MaMHudElements 21 | { 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/mamFiles/SpriteHelpers/WOX/WoXHudElements.java: -------------------------------------------------------------------------------- 1 | package mamFiles.SpriteHelpers.WOX; 2 | 3 | import mamFiles.SpriteHelpers.MaMHudElements; 4 | 5 | /** 6 | * Created by duckman on 15/06/2016. 7 | */ 8 | public class WoXHudElements extends MaMHudElements 9 | { 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/mamFiles/WOX/WOXPallet.java: -------------------------------------------------------------------------------- 1 | package mamFiles.WOX; 2 | 3 | import mamFiles.MaMPallet; 4 | 5 | /** 6 | * Created by duckman on 10/05/2016. 7 | * 8 | * All this class does is establish the PAL is 256 colors with rgb components in the range 0-63 9 | */ 10 | public class WOXPallet extends MaMPallet 11 | { 12 | public WOXPallet(String name, String key, byte[] data) 13 | { 14 | super(name, key, data, 256, 2); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/mamFiles/WOX/WoXThing.java: -------------------------------------------------------------------------------- 1 | package mamFiles.WOX; 2 | 3 | import mamFiles.*; 4 | 5 | /** 6 | * Created by duckman on 4/07/2016. 7 | */ 8 | public class WoXThing extends MaMThing 9 | { 10 | public WoXThing(String name, String key, byte[] data, MaMPallet pal) throws CCFileFormatException { 11 | this(new WOXSpriteFile(name, MAMFile.generateUniqueKey(key), data, pal), key); 12 | } 13 | 14 | public WoXThing(MaMSprite mamStyleSprite, String key) throws CCFileFormatException { 15 | super(mamStyleSprite, key); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/resources/CLOUDS.DAT.BIN: -------------------------------------------------------------------------------- 1 |    2 |  3 |         -------------------------------------------------------------------------------- /src/main/resources/mam_papyrus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/src/main/resources/mam_papyrus.png -------------------------------------------------------------------------------- /src/main/resources/openXeen_de.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/src/main/resources/openXeen_de.properties -------------------------------------------------------------------------------- /src/main/resources/openXeen_es.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/src/main/resources/openXeen_es.properties -------------------------------------------------------------------------------- /src/main/resources/openXeen_fr.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/src/main/resources/openXeen_fr.properties -------------------------------------------------------------------------------- /src/main/resources/openXeen_ja.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/busyDuckman/OpenXeen/ffb78839bcdd49d8fa1fd7002b5b0f5e2146ce57/src/main/resources/openXeen_ja.properties -------------------------------------------------------------------------------- /src/test/AAAAAAA/CommonTest.java: -------------------------------------------------------------------------------- 1 | package AAAAAAA; 2 | 3 | import org.junit.Assert; 4 | 5 | /** 6 | * Created by duckman on 13/06/2016. 7 | * 8 | * I know all the arguments not to do this. But... I don't care. 9 | * I just refuse to create myself a nasty mess of copy pasted code. 10 | * 11 | * NB: Class name is awkward, because of the ending the class name in Test stuff. 12 | */ 13 | public abstract class CommonTest extends org.junit.runners.model.TestClass 14 | { 15 | public CommonTest(Class clazz) { 16 | super(clazz); 17 | } 18 | 19 | @FunctionalInterface 20 | public interface IThrowException// 21 | { 22 | void doStuff() throws Exception; 23 | } 24 | public static void assertThrown(IThrowException test, Class expected) 25 | { 26 | try { 27 | test.doStuff(); 28 | Assert.fail("Expecting an exception."); 29 | } 30 | catch (Exception ex) { 31 | Assert.assertTrue(expected.isAssignableFrom(ex.getClass())); 32 | } 33 | 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/test/Game/Map/WoXWorldTest.java: -------------------------------------------------------------------------------- 1 | package Game.Map; 2 | 3 | import AAAAAAA.CommonTest; 4 | import mamFiles.CCFileFormatException; 5 | import org.junit.Assert; 6 | import org.junit.Test; 7 | 8 | /** 9 | * Created by duckman on 13/06/2016. 10 | */ 11 | public class WoXWorldTest extends CommonTest { 12 | public WoXWorldTest() { 13 | super(WoXWorldTest.class); 14 | } 15 | 16 | @Test 17 | public void makeMazeFileName() throws Exception { 18 | assertThrown(() ->WoXWorld.makeMazeFileName("foo", "bar", -1), CCFileFormatException.class); 19 | assertThrown(() ->WoXWorld.makeMazeFileName("foo", "bar", 1000), CCFileFormatException.class); 20 | Assert.assertEquals("foo0000.bar", WoXWorld.makeMazeFileName("foo", "bar", 0)); 21 | Assert.assertEquals("foo0003.bar", WoXWorld.makeMazeFileName("foo", "bar", 3)); 22 | Assert.assertEquals("foo0099.bar", WoXWorld.makeMazeFileName("foo", "bar", 99)); 23 | Assert.assertEquals("fooX100.bar", WoXWorld.makeMazeFileName("foo", "bar", 100)); 24 | Assert.assertEquals("fooX999.bar", WoXWorld.makeMazeFileName("foo", "bar", 999)); 25 | Assert.assertEquals("0003.bar", WoXWorld.makeMazeFileName(null, "bar", 3)); 26 | Assert.assertEquals("foo0003", WoXWorld.makeMazeFileName("foo", null, 3)); 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /src/test/Toolbox/HumanOrderTest.java: -------------------------------------------------------------------------------- 1 | //package Toolbox; 2 | // 3 | //import org.junit.Assert; 4 | //import org.junit.Before; 5 | //import org.junit.Test; 6 | // 7 | //import java.util.ArrayList; 8 | //import java.util.Arrays; 9 | //import java.util.Collections; 10 | //import java.util.List; 11 | // 12 | //import static org.junit.Assert.*; 13 | // 14 | ///** 15 | // * Created by duckman on 4/06/2016. 16 | // */ 17 | //public class HumanOrderTest 18 | //{ 19 | // String[] expectedSet; 20 | // 21 | // @Before 22 | // public void setUp() throws Exception 23 | // { 24 | // expectedSet = new String[] { 25 | // "", 26 | // " ", 27 | // "/*", 28 | // "_a", 29 | // "0", 30 | // "1", 31 | // "a", 32 | // "bar-0", 33 | // "bar-00000", 34 | // "bar-001", 35 | // "bar-002", 36 | // "bar-03", 37 | // "bar-0005", 38 | // "c;", 39 | // "cat.dog", 40 | // "catapult.dog", 41 | // "foo -6", 42 | // "foo -5", 43 | // "foo -4", 44 | // "foo-1", 45 | // "foo-2", 46 | // "foo-3", 47 | // "goldy -2.1", 48 | // "goldy -2.0", 49 | // "goldy -1.9", 50 | // "Heading 1.9.9", 51 | // "Heading 1.9.10", 52 | // "Heading 1.9.11", 53 | // "Heading 2", 54 | // "Heading 2.", 55 | // "Heading 2.0", 56 | // "Heading 2.0.1", 57 | // "spoon-1.9", 58 | // "spoon-2.0", 59 | // "Tee", 60 | // "tee", 61 | // "Teeth", 62 | // "Two", 63 | // "two" 64 | // }; 65 | // } 66 | // 67 | // @Test 68 | // public void compare() throws Exception 69 | // { 70 | // //Arrays.stream(expectedSet). 71 | // List testSet = Arrays.asList(expectedSet); 72 | // Collections.reverse(testSet); 73 | // 74 | // Collections.sort(testSet, new HumanOrder()); 75 | // Assert.assertTrue(Arrays.equals(testSet.toArray(), expectedSet)); 76 | // 77 | // Collections.shuffle(testSet); 78 | // Collections.sort(testSet, new HumanOrder()); 79 | // Assert.assertTrue(Arrays.equals(testSet.toArray(), expectedSet)); 80 | // } 81 | // 82 | // @Test 83 | // public void equals() throws Exception { 84 | // 85 | // } 86 | // 87 | //} -------------------------------------------------------------------------------- /src/test/Toolbox/TagTest.java: -------------------------------------------------------------------------------- 1 | package Toolbox; 2 | 3 | import org.joda.time.DateTime; 4 | import org.junit.Assert; 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | 8 | import static org.junit.Assert.*; 9 | 10 | /** 11 | * Created by duckman on 1/07/2016. 12 | */ 13 | public class TagTest { 14 | Tag intTag; 15 | Tag stringTag; 16 | Tag dateTag; 17 | 18 | @Before 19 | public void setUp() throws Exception { 20 | intTag = new Tag<>(2, "two"); 21 | stringTag = new Tag<>("VI", 6); 22 | dateTag = new Tag<>(new DateTime(2005, 3, 26, 12, 0, 0, 0), "some day"); 23 | } 24 | 25 | @Test 26 | public void getKey() throws Exception { 27 | Assert.assertEquals((Object)2, intTag.getKey()); 28 | } 29 | 30 | @Test 31 | public void hashCodeTest() throws Exception { 32 | Assert.assertEquals(stringTag.hashCode(), "VI".hashCode()); 33 | } 34 | 35 | @Test 36 | public void equalsTest() throws Exception { 37 | Assert.assertEquals(dateTag.getKey(), new DateTime(2005, 3, 26, 12, 0, 0, 0)); 38 | Assert.assertEquals(dateTag.getTag().length(), 8); 39 | Assert.assertTrue(dateTag.equals(new DateTime(2005, 3, 26, 12, 0, 0, 0))); 40 | Assert.assertTrue(intTag.equals(2)); 41 | } 42 | 43 | @Test 44 | public void toStringTest() throws Exception { 45 | Assert.assertEquals(dateTag.toString(), new DateTime(2005, 3, 26, 12, 0, 0, 0).toString()); 46 | } 47 | 48 | } -------------------------------------------------------------------------------- /src/test/java/AAAAAAA/CommonTest.java: -------------------------------------------------------------------------------- 1 | package AAAAAAA; 2 | 3 | import org.junit.Assert; 4 | 5 | /** 6 | * Created by duckman on 13/06/2016. 7 | * 8 | * I know all the arguments not to do this. But... I don't care. 9 | * I just refuse to create myself a nasty mess of copy pasted code. 10 | * 11 | * NB: Class name is awkward, because of the ending the class name in Test stuff. 12 | */ 13 | public abstract class CommonTest extends org.junit.runners.model.TestClass 14 | { 15 | public CommonTest(Class clazz) { 16 | super(clazz); 17 | } 18 | 19 | @FunctionalInterface 20 | public interface IThrowException// 21 | { 22 | void doStuff() throws Exception; 23 | } 24 | public static void assertThrown(IThrowException test, Class expected) 25 | { 26 | try { 27 | test.doStuff(); 28 | Assert.fail("Expecting an exception."); 29 | } 30 | catch (Exception ex) { 31 | Assert.assertTrue(expected.isAssignableFrom(ex.getClass())); 32 | } 33 | 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/test/java/Game/Map/WoXWorldTest.java: -------------------------------------------------------------------------------- 1 | package Game.Map; 2 | 3 | import AAAAAAA.CommonTest; 4 | import mamFiles.CCFileFormatException; 5 | import org.junit.Assert; 6 | import org.junit.Test; 7 | 8 | /** 9 | * Created by duckman on 13/06/2016. 10 | */ 11 | public class WoXWorldTest extends CommonTest { 12 | public WoXWorldTest() { 13 | super(WoXWorldTest.class); 14 | } 15 | 16 | @Test 17 | public void makeMazeFileName() throws Exception { 18 | assertThrown(() ->WoXWorld.makeMazeFileName("foo", "bar", -1), CCFileFormatException.class); 19 | assertThrown(() ->WoXWorld.makeMazeFileName("foo", "bar", 1000), CCFileFormatException.class); 20 | Assert.assertEquals("foo0000.bar", WoXWorld.makeMazeFileName("foo", "bar", 0)); 21 | Assert.assertEquals("foo0003.bar", WoXWorld.makeMazeFileName("foo", "bar", 3)); 22 | Assert.assertEquals("foo0099.bar", WoXWorld.makeMazeFileName("foo", "bar", 99)); 23 | Assert.assertEquals("fooX100.bar", WoXWorld.makeMazeFileName("foo", "bar", 100)); 24 | Assert.assertEquals("fooX999.bar", WoXWorld.makeMazeFileName("foo", "bar", 999)); 25 | Assert.assertEquals("0003.bar", WoXWorld.makeMazeFileName(null, "bar", 3)); 26 | Assert.assertEquals("foo0003", WoXWorld.makeMazeFileName("foo", null, 3)); 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /src/test/java/Toolbox/HumanOrderTest.java: -------------------------------------------------------------------------------- 1 | //package Toolbox; 2 | // 3 | //import org.junit.Assert; 4 | //import org.junit.Before; 5 | //import org.junit.Test; 6 | // 7 | //import java.util.ArrayList; 8 | //import java.util.Arrays; 9 | //import java.util.Collections; 10 | //import java.util.List; 11 | // 12 | //import static org.junit.Assert.*; 13 | // 14 | ///** 15 | // * Created by duckman on 4/06/2016. 16 | // */ 17 | //public class HumanOrderTest 18 | //{ 19 | // String[] expectedSet; 20 | // 21 | // @Before 22 | // public void setUp() throws Exception 23 | // { 24 | // expectedSet = new String[] { 25 | // "", 26 | // " ", 27 | // "/*", 28 | // "_a", 29 | // "0", 30 | // "1", 31 | // "a", 32 | // "bar-0", 33 | // "bar-00000", 34 | // "bar-001", 35 | // "bar-002", 36 | // "bar-03", 37 | // "bar-0005", 38 | // "c;", 39 | // "cat.dog", 40 | // "catapult.dog", 41 | // "foo -6", 42 | // "foo -5", 43 | // "foo -4", 44 | // "foo-1", 45 | // "foo-2", 46 | // "foo-3", 47 | // "goldy -2.1", 48 | // "goldy -2.0", 49 | // "goldy -1.9", 50 | // "Heading 1.9.9", 51 | // "Heading 1.9.10", 52 | // "Heading 1.9.11", 53 | // "Heading 2", 54 | // "Heading 2.", 55 | // "Heading 2.0", 56 | // "Heading 2.0.1", 57 | // "spoon-1.9", 58 | // "spoon-2.0", 59 | // "Tee", 60 | // "tee", 61 | // "Teeth", 62 | // "Two", 63 | // "two" 64 | // }; 65 | // } 66 | // 67 | // @Test 68 | // public void compare() throws Exception 69 | // { 70 | // //Arrays.stream(expectedSet). 71 | // List testSet = Arrays.asList(expectedSet); 72 | // Collections.reverse(testSet); 73 | // 74 | // Collections.sort(testSet, new HumanOrder()); 75 | // Assert.assertTrue(Arrays.equals(testSet.toArray(), expectedSet)); 76 | // 77 | // Collections.shuffle(testSet); 78 | // Collections.sort(testSet, new HumanOrder()); 79 | // Assert.assertTrue(Arrays.equals(testSet.toArray(), expectedSet)); 80 | // } 81 | // 82 | // @Test 83 | // public void equals() throws Exception { 84 | // 85 | // } 86 | // 87 | //} -------------------------------------------------------------------------------- /src/test/java/Toolbox/TagTest.java: -------------------------------------------------------------------------------- 1 | package Toolbox; 2 | 3 | import org.joda.time.DateTime; 4 | import org.junit.Assert; 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | 8 | import static org.junit.Assert.*; 9 | 10 | /** 11 | * Created by duckman on 1/07/2016. 12 | */ 13 | public class TagTest { 14 | Tag intTag; 15 | Tag stringTag; 16 | Tag dateTag; 17 | 18 | @Before 19 | public void setUp() throws Exception { 20 | intTag = new Tag<>(2, "two"); 21 | stringTag = new Tag<>("VI", 6); 22 | dateTag = new Tag<>(new DateTime(2005, 3, 26, 12, 0, 0, 0), "some day"); 23 | } 24 | 25 | @Test 26 | public void getKey() throws Exception { 27 | Assert.assertEquals((Object)2, intTag.getKey()); 28 | } 29 | 30 | @Test 31 | public void hashCodeTest() throws Exception { 32 | Assert.assertEquals(stringTag.hashCode(), "VI".hashCode()); 33 | } 34 | 35 | @Test 36 | public void equalsTest() throws Exception { 37 | Assert.assertEquals(dateTag.getKey(), new DateTime(2005, 3, 26, 12, 0, 0, 0)); 38 | Assert.assertEquals(dateTag.getTag().length(), 8); 39 | Assert.assertTrue(dateTag.equals(new DateTime(2005, 3, 26, 12, 0, 0, 0))); 40 | Assert.assertTrue(intTag.equals(2)); 41 | } 42 | 43 | @Test 44 | public void toStringTest() throws Exception { 45 | Assert.assertEquals(dateTag.toString(), new DateTime(2005, 3, 26, 12, 0, 0, 0).toString()); 46 | } 47 | 48 | } -------------------------------------------------------------------------------- /src/test/java/mamFiles/WOX/WOXccFileReaderTest.java: -------------------------------------------------------------------------------- 1 | package mamFiles.WOX; 2 | 3 | import mamFiles.MaMCCFileReader; 4 | import org.junit.After; 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | 8 | import static org.junit.Assert.*; 9 | 10 | /** 11 | * Created by duckman on 8/05/2016. 12 | */ 13 | public class WOXccFileReaderTest 14 | { 15 | @Before 16 | public void setUp() throws Exception { 17 | 18 | } 19 | 20 | @After 21 | public void tearDown() throws Exception { 22 | 23 | } 24 | 25 | @Test 26 | public void hashFileName() throws Exception 27 | { 28 | //actual files, with is known hash values 29 | //TODO: restore tests 30 | // assertEquals(MaMCCFileReader.hashFileName("AAZE0002.TXT"), 0x7CA1); 31 | // assertEquals(MaMCCFileReader.hashFileName("GROUP.VGA"), 0xFF8E); 32 | // assertEquals(MaMCCFileReader.hashFileName("POW10.ICN"), 0x0062); 33 | } 34 | 35 | } -------------------------------------------------------------------------------- /src/test/mamFiles/WOX/WOXccFileReaderTest.java: -------------------------------------------------------------------------------- 1 | package mamFiles.WOX; 2 | 3 | import mamFiles.MaMCCFileReader; 4 | import org.junit.After; 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | 8 | import static org.junit.Assert.*; 9 | 10 | /** 11 | * Created by duckman on 8/05/2016. 12 | */ 13 | public class WOXccFileReaderTest 14 | { 15 | @Before 16 | public void setUp() throws Exception { 17 | 18 | } 19 | 20 | @After 21 | public void tearDown() throws Exception { 22 | 23 | } 24 | 25 | @Test 26 | public void hashFileName() throws Exception 27 | { 28 | //actual files, with is known hash values 29 | //TODO: restore tests 30 | // assertEquals(MaMCCFileReader.hashFileName("AAZE0002.TXT"), 0x7CA1); 31 | // assertEquals(MaMCCFileReader.hashFileName("GROUP.VGA"), 0xFF8E); 32 | // assertEquals(MaMCCFileReader.hashFileName("POW10.ICN"), 0x0062); 33 | } 34 | 35 | } --------------------------------------------------------------------------------