Generated using https://www.toptal.com/developers/gitignore/api/sbt,playframework and also ignored the game sprites / other UI imagesmain
@@ -0,0 +1,665 @@ | |||
<classpath> | |||
<classpathentry kind="src" path="app"/> | |||
<classpathentry kind="src" path="conf"/> | |||
<classpathentry kind="src" path="target\scala-2.13\twirl\main"/> | |||
<classpathentry kind="src" path="target\scala-2.13\routes\main"/> | |||
<classpathentry excluding="resources\" kind="src" path="test"/> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\net\sourceforge\htmlunit\htmlunit-core-js\2.36.0\htmlunit-core-js-2.36.0-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\net\sourceforge\htmlunit\htmlunit-core-js\2.36.0\htmlunit-core-js-2.36.0.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\net\sourceforge\htmlunit\htmlunit-core-js\2.36.0\htmlunit-core-js-2.36.0-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\scala-sbt\test-interface\1.0\test-interface-1.0-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\scala-sbt\test-interface\1.0\test-interface-1.0.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\scala-sbt\test-interface\1.0\test-interface-1.0-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-ahc-ws_2.13\2.8.1\play-ahc-ws_2.13-2.8.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-ahc-ws_2.13\2.8.1\play-ahc-ws_2.13-2.8.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-ahc-ws_2.13\2.8.1\play-ahc-ws_2.13-2.8.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\errorprone\error_prone_annotations\2.3.2\error_prone_annotations-2.3.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\errorprone\error_prone_annotations\2.3.2\error_prone_annotations-2.3.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\errorprone\error_prone_annotations\2.3.2\error_prone_annotations-2.3.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\commons-codec\commons-codec\1.6\commons-codec-1.6-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\commons-codec\commons-codec\1.6\commons-codec-1.6.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\commons-codec\commons-codec\1.6\commons-codec-1.6-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\apache\commons\commons-lang3\3.9\commons-lang3-3.9-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\apache\commons\commons-lang3\3.9\commons-lang3-3.9.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\apache\commons\commons-lang3\3.9\commons-lang3-3.9-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\javax\inject\javax.inject\1\javax.inject-1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\javax\inject\javax.inject\1\javax.inject-1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\javax\inject\javax.inject\1\javax.inject-1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\scala-lang\modules\scala-xml_2.13\1.2.0\scala-xml_2.13-1.2.0-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\scala-lang\modules\scala-xml_2.13\1.2.0\scala-xml_2.13-1.2.0.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\scala-lang\modules\scala-xml_2.13\1.2.0\scala-xml_2.13-1.2.0-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\springframework\spring-core\5.2.2.RELEASE\spring-core-5.2.2.RELEASE-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\springframework\spring-core\5.2.2.RELEASE\spring-core-5.2.2.RELEASE.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\springframework\spring-core\5.2.2.RELEASE\spring-core-5.2.2.RELEASE-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\seleniumhq\selenium\selenium-firefox-driver\3.141.59\selenium-firefox-driver-3.141.59-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\seleniumhq\selenium\selenium-firefox-driver\3.141.59\selenium-firefox-driver-3.141.59.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\seleniumhq\selenium\selenium-firefox-driver\3.141.59\selenium-firefox-driver-3.141.59-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\config\1.4.0\config-1.4.0-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\config\1.4.0\config-1.4.0.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\config\1.4.0\config-1.4.0-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-ws_2.13\2.8.1\play-ws_2.13-2.8.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-ws_2.13\2.8.1\play-ws_2.13-2.8.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-ws_2.13\2.8.1\play-ws_2.13-2.8.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\checkerframework\checker-qual\2.8.1\checker-qual-2.8.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\checkerframework\checker-qual\2.8.1\checker-qual-2.8.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\checkerframework\checker-qual\2.8.1\checker-qual-2.8.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\io\jsonwebtoken\jjwt\0.9.1\jjwt-0.9.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\io\jsonwebtoken\jjwt\0.9.1\jjwt-0.9.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\io\jsonwebtoken\jjwt\0.9.1\jjwt-0.9.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\scala-lang\modules\scala-java8-compat_2.13\0.9.0\scala-java8-compat_2.13-0.9.0-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\scala-lang\modules\scala-java8-compat_2.13\0.9.0\scala-java8-compat_2.13-0.9.0.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\scala-lang\modules\scala-java8-compat_2.13\0.9.0\scala-java8-compat_2.13-0.9.0-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\hibernate\validator\hibernate-validator\6.1.0.Final\hibernate-validator-6.1.0.Final-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\hibernate\validator\hibernate-validator\6.1.0.Final\hibernate-validator-6.1.0.Final.jar"/> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\websocket\websocket-api\9.4.20.v20190813\websocket-api-9.4.20.v20190813-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\websocket\websocket-api\9.4.20.v20190813\websocket-api-9.4.20.v20190813.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\websocket\websocket-api\9.4.20.v20190813\websocket-api-9.4.20.v20190813-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\net\bytebuddy\byte-buddy\1.8.15\byte-buddy-1.8.15-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\net\bytebuddy\byte-buddy\1.8.15\byte-buddy-1.8.15.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\net\bytebuddy\byte-buddy\1.8.15\byte-buddy-1.8.15-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\apache\httpcomponents\httpmime\4.5.9\httpmime-4.5.9-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\apache\httpcomponents\httpmime\4.5.9\httpmime-4.5.9.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\apache\httpcomponents\httpmime\4.5.9\httpmime-4.5.9-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-akka-http-server_2.13\2.8.1\play-akka-http-server_2.13-2.8.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-akka-http-server_2.13\2.8.1\play-akka-http-server_2.13-2.8.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-akka-http-server_2.13\2.8.1\play-akka-http-server_2.13-2.8.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry kind="con" path="org.scala-ide.sdt.launching.SCALA_CONTAINER"></classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-exceptions\2.8.1\play-exceptions-2.8.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-exceptions\2.8.1\play-exceptions-2.8.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-exceptions\2.8.1\play-exceptions-2.8.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\twirl-api_2.13\1.5.0\twirl-api_2.13-1.5.0-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\twirl-api_2.13\1.5.0\twirl-api_2.13-1.5.0.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\twirl-api_2.13\1.5.0\twirl-api_2.13-1.5.0-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\webjars\webjars-play_2.13\2.8.0\webjars-play_2.13-2.8.0-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\webjars\webjars-play_2.13\2.8.0\webjars-play_2.13-2.8.0.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\webjars\webjars-play_2.13\2.8.0\webjars-play_2.13-2.8.0-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\apache\commons\commons-text\1.7\commons-text-1.7-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\apache\commons\commons-text\1.7\commons-text-1.7.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\apache\commons\commons-text\1.7\commons-text-1.7-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\net\jodah\typetools\0.5.0\typetools-0.5.0-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\net\jodah\typetools\0.5.0\typetools-0.5.0.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\net\jodah\typetools\0.5.0\typetools-0.5.0-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\novocode\junit-interface\0.11\junit-interface-0.11-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\novocode\junit-interface\0.11\junit-interface-0.11.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\novocode\junit-interface\0.11\junit-interface-0.11-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\scala-lang\modules\scala-parser-combinators_2.13\1.1.2\scala-parser-combinators_2.13-1.1.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\scala-lang\modules\scala-parser-combinators_2.13\1.1.2\scala-parser-combinators_2.13-1.1.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\scala-lang\modules\scala-parser-combinators_2.13\1.1.2\scala-parser-combinators_2.13-1.1.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\commons-io\commons-io\2.1\commons-io-2.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\commons-io\commons-io\2.1\commons-io-2.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\commons-io\commons-io\2.1\commons-io-2.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\jakarta\activation\jakarta.activation-api\1.2.1\jakarta.activation-api-1.2.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\jakarta\activation\jakarta.activation-api\1.2.1\jakarta.activation-api-1.2.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\jakarta\activation\jakarta.activation-api\1.2.1\jakarta.activation-api-1.2.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\classmate\1.3.4\classmate-1.3.4-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\classmate\1.3.4\classmate-1.3.4-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\jetty-io\9.4.20.v20190813\jetty-io-9.4.20.v20190813-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\jetty-io\9.4.20.v20190813\jetty-io-9.4.20.v20190813.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\jetty-io\9.4.20.v20190813\jetty-io-9.4.20.v20190813-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\module\jackson-module-paranamer\2.10.2\jackson-module-paranamer-2.10.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\module\jackson-module-paranamer\2.10.2\jackson-module-paranamer-2.10.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\module\jackson-module-paranamer\2.10.2\jackson-module-paranamer-2.10.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\core\jackson-databind\2.10.3\jackson-databind-2.10.3-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\core\jackson-databind\2.10.3\jackson-databind-2.10.3.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\core\jackson-databind\2.10.3\jackson-databind-2.10.3-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-stream_2.13\2.6.3\akka-stream_2.13-2.6.3-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-stream_2.13\2.6.3\akka-stream_2.13-2.6.3.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-stream_2.13\2.6.3\akka-stream_2.13-2.6.3-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-ahc-ws-standalone_2.13\2.1.2\play-ahc-ws-standalone_2.13-2.1.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-ahc-ws-standalone_2.13\2.1.2\play-ahc-ws-standalone_2.13-2.1.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-ahc-ws-standalone_2.13\2.1.2\play-ahc-ws-standalone_2.13-2.1.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.10.3\jackson-dataformat-yaml-2.10.3-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.10.3\jackson-dataformat-yaml-2.10.3.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.10.3\jackson-dataformat-yaml-2.10.3-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\net\sourceforge\htmlunit\neko-htmlunit\2.36.0\neko-htmlunit-2.36.0-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\net\sourceforge\htmlunit\neko-htmlunit\2.36.0\neko-htmlunit-2.36.0.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\net\sourceforge\htmlunit\neko-htmlunit\2.36.0\neko-htmlunit-2.36.0-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\hamcrest\hamcrest\2.1\hamcrest-2.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\hamcrest\hamcrest\2.1\hamcrest-2.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\hamcrest\hamcrest\2.1\hamcrest-2.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\net\sourceforge\htmlunit\htmlunit\2.36.0\htmlunit-2.36.0-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\net\sourceforge\htmlunit\htmlunit\2.36.0\htmlunit-2.36.0.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\net\sourceforge\htmlunit\htmlunit\2.36.0\htmlunit-2.36.0-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play_2.13\2.8.1\play_2.13-2.8.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play_2.13\2.8.1\play_2.13-2.8.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play_2.13\2.8.1\play_2.13-2.8.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-http-core_2.13\10.1.11\akka-http-core_2.13-10.1.11-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-http-core_2.13\10.1.11\akka-http-core_2.13-10.1.11.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-http-core_2.13\10.1.11\akka-http-core_2.13-10.1.11-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-streams_2.13\2.8.1\play-streams_2.13-2.8.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-streams_2.13\2.8.1\play-streams_2.13-2.8.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-streams_2.13\2.8.1\play-streams_2.13-2.8.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\module\jackson-module-parameter-names\2.10.2\jackson-module-parameter-names-2.10.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\module\jackson-module-parameter-names\2.10.2\jackson-module-parameter-names-2.10.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\module\jackson-module-parameter-names\2.10.2\jackson-module-parameter-names-2.10.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-ws-standalone-xml_2.13\2.1.2\play-ws-standalone-xml_2.13-2.1.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-ws-standalone-xml_2.13\2.1.2\play-ws-standalone-xml_2.13-2.1.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-ws-standalone-xml_2.13\2.1.2\play-ws-standalone-xml_2.13-2.1.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\io\github\classgraph\classgraph\4.8.53\classgraph-4.8.53-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\io\github\classgraph\classgraph\4.8.53\classgraph-4.8.53.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\io\github\classgraph\classgraph\4.8.53\classgraph-4.8.53-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\apache\httpcomponents\httpcore\4.4.11\httpcore-4.4.11-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\apache\httpcomponents\httpcore\4.4.11\httpcore-4.4.11.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\apache\httpcomponents\httpcore\4.4.11\httpcore-4.4.11-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\squareup\okio\okio\1.14.0\okio-1.14.0-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\squareup\okio\okio\1.14.0\okio-1.14.0.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\squareup\okio\okio\1.14.0\okio-1.14.0-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\filters-helpers_2.13\2.8.1\filters-helpers_2.13-2.8.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\filters-helpers_2.13\2.8.1\filters-helpers_2.13-2.8.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\filters-helpers_2.13\2.8.1\filters-helpers_2.13-2.8.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\commons-net\commons-net\3.6\commons-net-3.6-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\commons-net\commons-net\3.6\commons-net-3.6.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\commons-net\commons-net\3.6\commons-net-3.6-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\fluentlenium\fluentlenium-core\3.7.1\fluentlenium-core-3.7.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\fluentlenium\fluentlenium-core\3.7.1\fluentlenium-core-3.7.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\fluentlenium\fluentlenium-core\3.7.1\fluentlenium-core-3.7.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-protobuf-v3_2.13\2.6.3\akka-protobuf-v3_2.13-2.6.3-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-protobuf-v3_2.13\2.6.3\akka-protobuf-v3_2.13-2.6.3.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-protobuf-v3_2.13\2.6.3\akka-protobuf-v3_2.13-2.6.3-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar"/> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\webjars\jquery\1.11.1\jquery-1.11.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\webjars\jquery\1.11.1\jquery-1.11.1.jar"/> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\commons-logging\commons-logging\1.2\commons-logging-1.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\commons-logging\commons-logging\1.2\commons-logging-1.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\commons-logging\commons-logging\1.2\commons-logging-1.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\apache\httpcomponents\httpclient\4.5.9\httpclient-4.5.9-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\apache\httpcomponents\httpclient\4.5.9\httpclient-4.5.9.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\apache\httpcomponents\httpclient\4.5.9\httpclient-4.5.9-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\xerces\xercesImpl\2.12.0\xercesImpl-2.12.0-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\xerces\xercesImpl\2.12.0\xercesImpl-2.12.0.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\xerces\xercesImpl\2.12.0\xercesImpl-2.12.0-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\joda-time\joda-time\2.10.5\joda-time-2.10.5-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\joda-time\joda-time\2.10.5\joda-time-2.10.5.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\joda-time\joda-time\2.10.5\joda-time-2.10.5-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.10.2\jackson-datatype-jdk8-2.10.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.10.2\jackson-datatype-jdk8-2.10.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.10.2\jackson-datatype-jdk8-2.10.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\xml-apis\xml-apis\1.4.01\xml-apis-1.4.01-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\xml-apis\xml-apis\1.4.01\xml-apis-1.4.01.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\xml-apis\xml-apis\1.4.01\xml-apis-1.4.01-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-ws-standalone_2.13\2.1.2\play-ws-standalone_2.13-2.1.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-ws-standalone_2.13\2.1.2\play-ws-standalone_2.13-2.1.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-ws-standalone_2.13\2.1.2\play-ws-standalone_2.13-2.1.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\seleniumhq\selenium\htmlunit-driver\2.36.0\htmlunit-driver-2.36.0-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\seleniumhq\selenium\htmlunit-driver\2.36.0\htmlunit-driver-2.36.0.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\seleniumhq\selenium\htmlunit-driver\2.36.0\htmlunit-driver-2.36.0-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\webjars\requirejs\2.3.6\requirejs-2.3.6.jar"/> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\xalan\xalan\2.7.2\xalan-2.7.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\xalan\xalan\2.7.2\xalan-2.7.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\xalan\xalan\2.7.2\xalan-2.7.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\shaded-asynchttpclient\2.1.2\shaded-asynchttpclient-2.1.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\shaded-asynchttpclient\2.1.2\shaded-asynchttpclient-2.1.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\shaded-asynchttpclient\2.1.2\shaded-asynchttpclient-2.1.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-server_2.13\2.8.1\play-server_2.13-2.8.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-server_2.13\2.8.1\play-server_2.13-2.8.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-server_2.13\2.8.1\play-server_2.13-2.8.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\protobuf\protobuf-java\3.10.0\protobuf-java-3.10.0-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\protobuf\protobuf-java\3.10.0\protobuf-java-3.10.0.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\protobuf\protobuf-java\3.10.0\protobuf-java-3.10.0-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-guice_2.13\2.8.1\play-guice_2.13-2.8.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-guice_2.13\2.8.1\play-guice_2.13-2.8.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-guice_2.13\2.8.1\play-guice_2.13-2.8.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\aopalliance\aopalliance\1.0\aopalliance-1.0-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\aopalliance\aopalliance\1.0\aopalliance-1.0.jar"/> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\jakarta\transaction\jakarta.transaction-api\1.3.3\jakarta.transaction-api-1.3.3-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\jakarta\transaction\jakarta.transaction-api\1.3.3\jakarta.transaction-api-1.3.3.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\jakarta\transaction\jakarta.transaction-api\1.3.3\jakarta.transaction-api-1.3.3-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-slf4j_2.13\2.6.3\akka-slf4j_2.13-2.6.3-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-slf4j_2.13\2.6.3\akka-slf4j_2.13-2.6.3.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-slf4j_2.13\2.6.3\akka-slf4j_2.13-2.6.3-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-java-forms_2.13\2.8.1\play-java-forms_2.13-2.8.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-java-forms_2.13\2.8.1\play-java-forms_2.13-2.8.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-java-forms_2.13\2.8.1\play-java-forms_2.13-2.8.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\j2objc\j2objc-annotations\1.3\j2objc-annotations-1.3-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\j2objc\j2objc-annotations\1.3\j2objc-annotations-1.3.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\j2objc\j2objc-annotations\1.3\j2objc-annotations-1.3-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\awaitility\awaitility\4.0.1\awaitility-4.0.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\awaitility\awaitility\4.0.1\awaitility-4.0.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\awaitility\awaitility\4.0.1\awaitility-4.0.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\guava\guava\28.1-jre\guava-28.1-jre-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\guava\guava\28.1-jre\guava-28.1-jre.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\guava\guava\28.1-jre\guava-28.1-jre-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\seleniumhq\selenium\selenium-support\3.141.59\selenium-support-3.141.59-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\seleniumhq\selenium\selenium-support\3.141.59\selenium-support-3.141.59.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\seleniumhq\selenium\selenium-support\3.141.59\selenium-support-3.141.59-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\seleniumhq\selenium\selenium-remote-driver\3.141.59\selenium-remote-driver-3.141.59-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\seleniumhq\selenium\selenium-remote-driver\3.141.59\selenium-remote-driver-3.141.59.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\seleniumhq\selenium\selenium-remote-driver\3.141.59\selenium-remote-driver-3.141.59-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\shaded-oauth\2.1.2\shaded-oauth-2.1.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\shaded-oauth\2.1.2\shaded-oauth-2.1.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\shaded-oauth\2.1.2\shaded-oauth-2.1.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\webjars\bootstrap\2.3.2\bootstrap-2.3.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\webjars\bootstrap\2.3.2\bootstrap-2.3.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\webjars\bootstrap\2.3.2\bootstrap-2.3.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\websocket\websocket-common\9.4.20.v20190813\websocket-common-9.4.20.v20190813-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\websocket\websocket-common\9.4.20.v20190813\websocket-common-9.4.20.v20190813.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\websocket\websocket-common\9.4.20.v20190813\websocket-common-9.4.20.v20190813-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\assertj\assertj-core\3.14.0\assertj-core-3.14.0-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\assertj\assertj-core\3.14.0\assertj-core-3.14.0.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\assertj\assertj-core\3.14.0\assertj-core-3.14.0-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\xalan\serializer\2.7.2\serializer-2.7.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\xalan\serializer\2.7.2\serializer-2.7.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\xalan\serializer\2.7.2\serializer-2.7.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\net\sourceforge\htmlunit\htmlunit-cssparser\1.5.0\htmlunit-cssparser-1.5.0-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\net\sourceforge\htmlunit\htmlunit-cssparser\1.5.0\htmlunit-cssparser-1.5.0.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\net\sourceforge\htmlunit\htmlunit-cssparser\1.5.0\htmlunit-cssparser-1.5.0-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\inject\guice\4.2.2\guice-4.2.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\inject\guice\4.2.2\guice-4.2.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\inject\guice\4.2.2\guice-4.2.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\jetty-util\9.4.20.v20190813\jetty-util-9.4.20.v20190813-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\jetty-util\9.4.20.v20190813\jetty-util-9.4.20.v20190813.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\jetty-util\9.4.20.v20190813\jetty-util-9.4.20.v20190813-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\core\jackson-annotations\2.10.3\jackson-annotations-2.10.3-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\core\jackson-annotations\2.10.3\jackson-annotations-2.10.3.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\core\jackson-annotations\2.10.3\jackson-annotations-2.10.3-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\websocket\websocket-client\9.4.20.v20190813\websocket-client-9.4.20.v20190813-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\websocket\websocket-client\9.4.20.v20190813\websocket-client-9.4.20.v20190813.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\websocket\websocket-client\9.4.20.v20190813\websocket-client-9.4.20.v20190813-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\slf4j\jcl-over-slf4j\1.7.29\jcl-over-slf4j-1.7.29-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\slf4j\jcl-over-slf4j\1.7.29\jcl-over-slf4j-1.7.29.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\slf4j\jcl-over-slf4j\1.7.29\jcl-over-slf4j-1.7.29-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\module\jackson-module-scala_2.13\2.10.2\jackson-module-scala_2.13-2.10.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\module\jackson-module-scala_2.13\2.10.2\jackson-module-scala_2.13-2.10.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\module\jackson-module-scala_2.13\2.10.2\jackson-module-scala_2.13-2.10.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-serialization-jackson_2.13\2.6.3\akka-serialization-jackson_2.13-2.6.3-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-serialization-jackson_2.13\2.6.3\akka-serialization-jackson_2.13-2.6.3.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-serialization-jackson_2.13\2.6.3\akka-serialization-jackson_2.13-2.6.3-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\seleniumhq\selenium\selenium-api\3.141.59\selenium-api-3.141.59-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\seleniumhq\selenium\selenium-api\3.141.59\selenium-api-3.141.59.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\seleniumhq\selenium\selenium-api\3.141.59\selenium-api-3.141.59-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\cachecontrol_2.13\2.0.0\cachecontrol_2.13-2.0.0-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\cachecontrol_2.13\2.0.0\cachecontrol_2.13-2.0.0.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\cachecontrol_2.13\2.0.0\cachecontrol_2.13-2.0.0-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\jetty-http\9.4.20.v20190813\jetty-http-9.4.20.v20190813-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\jetty-http\9.4.20.v20190813\jetty-http-9.4.20.v20190813.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\jetty-http\9.4.20.v20190813\jetty-http-9.4.20.v20190813-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\ssl-config-core_2.13\0.4.1\ssl-config-core_2.13-0.4.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\ssl-config-core_2.13\0.4.1\ssl-config-core_2.13-0.4.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\ssl-config-core_2.13\0.4.1\ssl-config-core_2.13-0.4.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-test_2.13\2.8.1\play-test_2.13-2.8.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-test_2.13\2.8.1\play-test_2.13-2.8.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-test_2.13\2.8.1\play-test_2.13-2.8.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-logback_2.13\2.8.1\play-logback_2.13-2.8.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-logback_2.13\2.8.1\play-logback_2.13-2.8.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-logback_2.13\2.8.1\play-logback_2.13-2.8.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\junit\junit\4.13.2\junit-4.13.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\junit\junit\4.13.2\junit-4.13.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\junit\junit\4.13.2\junit-4.13.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\apache\commons\commons-exec\1.3\commons-exec-1.3-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\apache\commons\commons-exec\1.3\commons-exec-1.3.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\apache\commons\commons-exec\1.3\commons-exec-1.3-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\inject\extensions\guice-assistedinject\4.2.2\guice-assistedinject-4.2.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\inject\extensions\guice-assistedinject\4.2.2\guice-assistedinject-4.2.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\google\inject\extensions\guice-assistedinject\4.2.2\guice-assistedinject-4.2.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\springframework\spring-context\5.2.2.RELEASE\spring-context-5.2.2.RELEASE-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\springframework\spring-context\5.2.2.RELEASE\spring-context-5.2.2.RELEASE.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\springframework\spring-context\5.2.2.RELEASE\spring-context-5.2.2.RELEASE-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\jetty-xml\9.4.20.v20190813\jetty-xml-9.4.20.v20190813-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\jetty-xml\9.4.20.v20190813\jetty-xml-9.4.20.v20190813.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\jetty-xml\9.4.20.v20190813\jetty-xml-9.4.20.v20190813-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-functional_2.13\2.8.1\play-functional_2.13-2.8.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-functional_2.13\2.8.1\play-functional_2.13-2.8.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-functional_2.13\2.8.1\play-functional_2.13-2.8.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\build-link\2.8.1\build-link-2.8.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\build-link\2.8.1\build-link-2.8.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\build-link\2.8.1\build-link-2.8.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\javax\cache\cache-api\1.1.1\cache-api-1.1.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\javax\cache\cache-api\1.1.1\cache-api-1.1.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\javax\cache\cache-api\1.1.1\cache-api-1.1.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\atteo\classindex\classindex\3.4\classindex-3.4-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\atteo\classindex\classindex\3.4\classindex-3.4.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\atteo\classindex\classindex\3.4\classindex-3.4-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.10.2\jackson-dataformat-cbor-2.10.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.10.2\jackson-dataformat-cbor-2.10.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.10.2\jackson-dataformat-cbor-2.10.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\slf4j\jul-to-slf4j\1.7.29\jul-to-slf4j-1.7.29-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\slf4j\jul-to-slf4j\1.7.29\jul-to-slf4j-1.7.29.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\slf4j\jul-to-slf4j\1.7.29\jul-to-slf4j-1.7.29-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.10.2\jackson-datatype-jsr310-2.10.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.10.2\jackson-datatype-jsr310-2.10.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.10.2\jackson-datatype-jsr310-2.10.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\thoughtworks\paranamer\paranamer\2.8\paranamer-2.8-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\thoughtworks\paranamer\paranamer\2.8\paranamer-2.8.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\thoughtworks\paranamer\paranamer\2.8\paranamer-2.8-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-ws-standalone-json_2.13\2.1.2\play-ws-standalone-json_2.13-2.1.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-ws-standalone-json_2.13\2.1.2\play-ws-standalone-json_2.13-2.1.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-ws-standalone-json_2.13\2.1.2\play-ws-standalone-json_2.13-2.1.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-actor_2.13\2.6.3\akka-actor_2.13-2.6.3-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-actor_2.13\2.6.3\akka-actor_2.13-2.6.3.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-actor_2.13\2.6.3\akka-actor_2.13-2.6.3-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\webjars\webjars-locator\0.38\webjars-locator-0.38-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\webjars\webjars-locator\0.38\webjars-locator-0.38.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\webjars\webjars-locator\0.38\webjars-locator-0.38-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\webjars\webjars-locator-core\0.43\webjars-locator-core-0.43-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\webjars\webjars-locator-core\0.43\webjars-locator-core-0.43.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\webjars\webjars-locator-core\0.43\webjars-locator-core-0.43-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-actor-typed_2.13\2.6.3\akka-actor-typed_2.13-2.6.3-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-actor-typed_2.13\2.6.3\akka-actor-typed_2.13-2.6.3.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-actor-typed_2.13\2.6.3\akka-actor-typed_2.13-2.6.3-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\jakarta\xml\bind\jakarta.xml.bind-api\2.3.2\jakarta.xml.bind-api-2.3.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\jakarta\xml\bind\jakarta.xml.bind-api\2.3.2\jakarta.xml.bind-api-2.3.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\jakarta\xml\bind\jakarta.xml.bind-api\2.3.2\jakarta.xml.bind-api-2.3.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\core\jackson-core\2.10.3\jackson-core-2.10.3-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\core\jackson-core\2.10.3\jackson-core-2.10.3.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\fasterxml\jackson\core\jackson-core\2.10.3\jackson-core-2.10.3-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-java_2.13\2.8.1\play-java_2.13-2.8.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-java_2.13\2.8.1\play-java_2.13-2.8.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-java_2.13\2.8.1\play-java_2.13-2.8.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-json_2.13\2.8.1\play-json_2.13-2.8.1-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-json_2.13\2.8.1\play-json_2.13-2.8.1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\play\play-json_2.13\2.8.1\play-json_2.13-2.8.1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\webjars\flot\0.8.3\flot-0.8.3-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\webjars\flot\0.8.3\flot-0.8.3.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\webjars\flot\0.8.3\flot-0.8.3-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-parsing_2.13\10.1.11\akka-parsing_2.13-10.1.11-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-parsing_2.13\10.1.11\akka-parsing_2.13-10.1.11.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\typesafe\akka\akka-parsing_2.13\10.1.11\akka-parsing_2.13-10.1.11-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\webjars\explorercanvas\r3-1\explorercanvas-r3-1.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\webjars\explorercanvas\r3-1\explorercanvas-r3-1-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\codehaus\mojo\animal-sniffer-annotations\1.18\animal-sniffer-annotations-1.18-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\codehaus\mojo\animal-sniffer-annotations\1.18\animal-sniffer-annotations-1.18.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\codehaus\mojo\animal-sniffer-annotations\1.18\animal-sniffer-annotations-1.18-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\yaml\snakeyaml\1.24\snakeyaml-1.24-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\yaml\snakeyaml\1.24\snakeyaml-1.24.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\yaml\snakeyaml\1.24\snakeyaml-1.24-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\brotli\dec\0.1.2\dec-0.1.2-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\brotli\dec\0.1.2\dec-0.1.2.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\brotli\dec\0.1.2\dec-0.1.2-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\springframework\spring-beans\5.2.2.RELEASE\spring-beans-5.2.2.RELEASE-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\springframework\spring-beans\5.2.2.RELEASE\spring-beans-5.2.2.RELEASE.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\springframework\spring-beans\5.2.2.RELEASE\spring-beans-5.2.2.RELEASE-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\jetty-client\9.4.20.v20190813\jetty-client-9.4.20.v20190813-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\jetty-client\9.4.20.v20190813\jetty-client-9.4.20.v20190813.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\eclipse\jetty\jetty-client\9.4.20.v20190813\jetty-client-9.4.20.v20190813-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry sourcepath=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\squareup\okhttp3\okhttp\3.11.0\okhttp-3.11.0-sources.jar" kind="lib" path=".\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\squareup\okhttp3\okhttp\3.11.0\okhttp-3.11.0.jar"> | |||
<attributes> | |||
<attribute name="javadoc_location" value="jar:file:.\null\Coursier\cache\v1\https\repo1.maven.org\maven2\com\squareup\okhttp3\okhttp\3.11.0\okhttp-3.11.0-javadoc.jar!/"/> | |||
</attributes> | |||
</classpathentry> | |||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> | |||
<classpathentry kind="output" path="bin"/> | |||
</classpath> |
@@ -0,0 +1,36 @@ | |||
### PlayFramework ### | |||
# Ignore Play! working directory # | |||
bin/ | |||
/db | |||
.eclipse | |||
/lib/ | |||
/logs/ | |||
/modules | |||
/project/project | |||
/project/target | |||
/target | |||
tmp/ | |||
test-result | |||
server.pid | |||
*.eml | |||
/dist/ | |||
.cache | |||
### SBT ### | |||
# Simple Build Tool | |||
# http://www.scala-sbt.org/release/docs/Getting-Started/Directories.html#configuring-version-control | |||
dist/* | |||
target/ | |||
lib_managed/ | |||
src_managed/ | |||
project/boot/ | |||
project/plugins/project/ | |||
.history | |||
.lib/ | |||
### SBT Patch ### | |||
.bsp/ | |||
## Assets | |||
app/assets/game/extra/ |
@@ -0,0 +1,13 @@ | |||
<projectDescription> | |||
<name>ITSD Card Game</name> | |||
<buildSpec> | |||
<buildCommand> | |||
<name>org.scala-ide.sdt.core.scalabuilder</name> | |||
</buildCommand> | |||
</buildSpec> | |||
<natures> | |||
<nature>org.scala-ide.sdt.core.scalanature</nature> | |||
<nature>org.eclipse.jdt.core.javanature</nature> | |||
</natures> | |||
<linkedResources> </linkedResources> | |||
</projectDescription> |
@@ -0,0 +1,3 @@ | |||
#Generated by sbteclipse | |||
#Thu Feb 02 17:37:38 GMT 2023 | |||
encoding/<project>=UTF-8 |
@@ -0,0 +1,6 @@ | |||
#Generated by sbteclipse | |||
#Thu Feb 02 17:37:38 GMT 2023 | |||
scala.compiler.useProjectSettings=true | |||
unchecked=true | |||
scala.compiler.additionalParams=-encoding utf8 | |||
deprecation=true |
@@ -0,0 +1,116 @@ | |||
CC0 1.0 Universal | |||
Statement of Purpose | |||
The laws of most jurisdictions throughout the world automatically confer | |||
exclusive Copyright and Related Rights (defined below) upon the creator and | |||
subsequent owner(s) (each and all, an "owner") of an original work of | |||
authorship and/or a database (each, a "Work"). | |||
Certain owners wish to permanently relinquish those rights to a Work for the | |||
purpose of contributing to a commons of creative, cultural and scientific | |||
works ("Commons") that the public can reliably and without fear of later | |||
claims of infringement build upon, modify, incorporate in other works, reuse | |||
and redistribute as freely as possible in any form whatsoever and for any | |||
purposes, including without limitation commercial purposes. These owners may | |||
contribute to the Commons to promote the ideal of a free culture and the | |||
further production of creative, cultural and scientific works, or to gain | |||
reputation or greater distribution for their Work in part through the use and | |||
efforts of others. | |||
For these and/or other purposes and motivations, and without any expectation | |||
of additional consideration or compensation, the person associating CC0 with a | |||
Work (the "Affirmer"), to the extent that he or she is an owner of Copyright | |||
and Related Rights in the Work, voluntarily elects to apply CC0 to the Work | |||
and publicly distribute the Work under its terms, with knowledge of his or her | |||
Copyright and Related Rights in the Work and the meaning and intended legal | |||
effect of CC0 on those rights. | |||
1. Copyright and Related Rights. A Work made available under CC0 may be | |||
protected by copyright and related or neighboring rights ("Copyright and | |||
Related Rights"). Copyright and Related Rights include, but are not limited | |||
to, the following: | |||
i. the right to reproduce, adapt, distribute, perform, display, communicate, | |||
and translate a Work; | |||
ii. moral rights retained by the original author(s) and/or performer(s); | |||
iii. publicity and privacy rights pertaining to a person's image or likeness | |||
depicted in a Work; | |||
iv. rights protecting against unfair competition in regards to a Work, | |||
subject to the limitations in paragraph 4(a), below; | |||
v. rights protecting the extraction, dissemination, use and reuse of data in | |||
a Work; | |||
vi. database rights (such as those arising under Directive 96/9/EC of the | |||
European Parliament and of the Council of 11 March 1996 on the legal | |||
protection of databases, and under any national implementation thereof, | |||
including any amended or successor version of such directive); and | |||
vii. other similar, equivalent or corresponding rights throughout the world | |||
based on applicable law or treaty, and any national implementations thereof. | |||
2. Waiver. To the greatest extent permitted by, but not in contravention of, | |||
applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and | |||
unconditionally waives, abandons, and surrenders all of Affirmer's Copyright | |||
and Related Rights and associated claims and causes of action, whether now | |||
known or unknown (including existing as well as future claims and causes of | |||
action), in the Work (i) in all territories worldwide, (ii) for the maximum | |||
duration provided by applicable law or treaty (including future time | |||
extensions), (iii) in any current or future medium and for any number of | |||
copies, and (iv) for any purpose whatsoever, including without limitation | |||
commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes | |||
the Waiver for the benefit of each member of the public at large and to the | |||
detriment of Affirmer's heirs and successors, fully intending that such Waiver | |||
shall not be subject to revocation, rescission, cancellation, termination, or | |||
any other legal or equitable action to disrupt the quiet enjoyment of the Work | |||
by the public as contemplated by Affirmer's express Statement of Purpose. | |||
3. Public License Fallback. Should any part of the Waiver for any reason be | |||
judged legally invalid or ineffective under applicable law, then the Waiver | |||
shall be preserved to the maximum extent permitted taking into account | |||
Affirmer's express Statement of Purpose. In addition, to the extent the Waiver | |||
is so judged Affirmer hereby grants to each affected person a royalty-free, | |||
non transferable, non sublicensable, non exclusive, irrevocable and | |||
unconditional license to exercise Affirmer's Copyright and Related Rights in | |||
the Work (i) in all territories worldwide, (ii) for the maximum duration | |||
provided by applicable law or treaty (including future time extensions), (iii) | |||
in any current or future medium and for any number of copies, and (iv) for any | |||
purpose whatsoever, including without limitation commercial, advertising or | |||
promotional purposes (the "License"). The License shall be deemed effective as | |||
of the date CC0 was applied by Affirmer to the Work. Should any part of the | |||
License for any reason be judged legally invalid or ineffective under | |||
applicable law, such partial invalidity or ineffectiveness shall not | |||
invalidate the remainder of the License, and in such case Affirmer hereby | |||
affirms that he or she will not (i) exercise any of his or her remaining | |||
Copyright and Related Rights in the Work or (ii) assert any associated claims | |||
and causes of action with respect to the Work, in either case contrary to | |||
Affirmer's express Statement of Purpose. | |||
4. Limitations and Disclaimers. | |||
a. No trademark or patent rights held by Affirmer are waived, abandoned, | |||
surrendered, licensed or otherwise affected by this document. | |||
b. Affirmer offers the Work as-is and makes no representations or warranties | |||
of any kind concerning the Work, express, implied, statutory or otherwise, | |||
including without limitation warranties of title, merchantability, fitness | |||
for a particular purpose, non infringement, or the absence of latent or | |||
other defects, accuracy, or the present or absence of errors, whether or not | |||
discoverable, all to the greatest extent permissible under applicable law. | |||
c. Affirmer disclaims responsibility for clearing rights of other persons | |||
that may apply to the Work or any use thereof, including without limitation | |||
any person's Copyright and Related Rights in the Work. Further, Affirmer | |||
disclaims responsibility for obtaining any necessary consents, permissions | |||
or other rights required for any use of the Work. | |||
d. Affirmer understands and acknowledges that Creative Commons is not a | |||
party to this document and has no duty or obligation with respect to this | |||
CC0 or use of the Work. | |||
For more information, please see | |||
<http://creativecommons.org/publicdomain/zero/1.0/> |
@@ -0,0 +1,8 @@ | |||
Written by Lightbend <info@lightbend.com> | |||
To the extent possible under law, the author(s) have dedicated all copyright and | |||
related and neighboring rights to this software to the public domain worldwide. | |||
This software is distributed without any warranty. | |||
You should have received a copy of the CC0 Public Domain Dedication along with | |||
this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>. |
@@ -0,0 +1,2 @@ | |||
# ITSDTeamProject-0 | |||
@@ -0,0 +1,121 @@ | |||
package actors; | |||
import java.util.HashMap; | |||
import java.util.Map; | |||
import java.util.Set; | |||
import com.fasterxml.jackson.databind.JsonNode; | |||
import com.fasterxml.jackson.databind.ObjectMapper; | |||
import com.fasterxml.jackson.databind.node.ObjectNode; | |||
import akka.actor.AbstractActor; | |||
import akka.actor.ActorRef; | |||
import events.CardClicked; | |||
import events.EndTurnClicked; | |||
import events.EventProcessor; | |||
import events.Heartbeat; | |||
import events.Initalize; | |||
import events.OtherClicked; | |||
import events.TileClicked; | |||
import events.UnitMoving; | |||
import events.UnitStopped; | |||
import play.libs.Json; | |||
import structures.GameState; | |||
import utils.ImageListForPreLoad; | |||
import play.libs.Json; | |||
/** | |||
* The game actor is an Akka Actor that receives events from the user front-end UI (e.g. when | |||
* the user clicks on the board) via a websocket connection. When an event arrives, the | |||
* processMessage() method is called, which can be used to react to the event. The Game actor | |||
* also includes an ActorRef object which can be used to issue commands to the UI to change | |||
* what the user sees. The GameActor is created when the user browser creates a websocket | |||
* connection to back-end services (on load of the game web page). | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class GameActor extends AbstractActor { | |||
private ObjectMapper mapper = new ObjectMapper(); // Jackson Java Object Serializer, is used to turn java objects to Strings | |||
private ActorRef out; // The ActorRef can be used to send messages to the front-end UI | |||
private Map<String,EventProcessor> eventProcessors; // Classes used to process each type of event | |||
private GameState gameState; // A class that can be used to hold game state information | |||
/** | |||
* Constructor for the GameActor. This is called by the GameController when the websocket | |||
* connection to the front-end is established. | |||
* @param out | |||
*/ | |||
@SuppressWarnings("deprecation") | |||
public GameActor(ActorRef out) { | |||
this.out = out; // save this, so we can send commands to the front-end later | |||
// create class instances to respond to the various events that we might recieve | |||
eventProcessors = new HashMap<String,EventProcessor>(); | |||
eventProcessors.put("initalize", new Initalize()); | |||
eventProcessors.put("heartbeat", new Heartbeat()); | |||
eventProcessors.put("unitMoving", new UnitMoving()); | |||
eventProcessors.put("unitstopped", new UnitStopped()); | |||
eventProcessors.put("tileclicked", new TileClicked()); | |||
eventProcessors.put("cardclicked", new CardClicked()); | |||
eventProcessors.put("endturnclicked", new EndTurnClicked()); | |||
eventProcessors.put("otherclicked", new OtherClicked()); | |||
// Initalize a new game state object | |||
gameState = new GameState(); | |||
// Get the list of image files to pre-load the UI with | |||
Set<String> images = ImageListForPreLoad.getImageListForPreLoad(); | |||
try { | |||
ObjectNode readyMessage = Json.newObject(); | |||
readyMessage.put("messagetype", "actorReady"); | |||
readyMessage.put("preloadImages", mapper.readTree(mapper.writeValueAsString(images))); | |||
out.tell(readyMessage, out); | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
/** | |||
* This method simply farms out the processing of the json messages from the front-end to the | |||
* processMessage method | |||
* @return | |||
*/ | |||
public Receive createReceive() { | |||
return receiveBuilder() | |||
.match(JsonNode.class, message -> { | |||
System.out.println(message); | |||
processMessage(message.get("messagetype").asText(), message); | |||
}).build(); | |||
} | |||
/** | |||
* This looks up an event processor for the specified message type. | |||
* Note that this processing is asynchronous. | |||
* @param messageType | |||
* @param message | |||
* @return | |||
* @throws Exception | |||
*/ | |||
@SuppressWarnings({"deprecation"}) | |||
public void processMessage(String messageType, JsonNode message) throws Exception{ | |||
EventProcessor processor = eventProcessors.get(messageType); | |||
if (processor==null) { | |||
// Unknown event type received | |||
System.err.println("GameActor: Recieved unknown event type "+messageType); | |||
} else { | |||
processor.processEvent(out, gameState, message); // process the event | |||
} | |||
} | |||
public void reportError(String errorText) { | |||
ObjectNode returnMessage = Json.newObject(); | |||
returnMessage.put("messagetype", "ERR"); | |||
returnMessage.put("error", errorText); | |||
out.tell(returnMessage, out); | |||
} | |||
} |
@@ -0,0 +1,417 @@ | |||
package commands; | |||
import com.fasterxml.jackson.databind.ObjectMapper; | |||
import com.fasterxml.jackson.databind.node.ObjectNode; | |||
import akka.actor.ActorRef; | |||
import play.libs.Json; | |||
import structures.basic.Card; | |||
import structures.basic.EffectAnimation; | |||
import structures.basic.Player; | |||
import structures.basic.Tile; | |||
import structures.basic.Unit; | |||
import structures.basic.UnitAnimation; | |||
import structures.basic.UnitAnimationType; | |||
/** | |||
* This is a utility class that simply provides short-cut methods for | |||
* running the basic command set for the game. | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class BasicCommands { | |||
private static ObjectMapper mapper = new ObjectMapper(); // Jackson Java Object Serializer, is used to turn java objects to Strings | |||
// An alternative class with a 'tell' implementation can be given if writing unit tests | |||
// and need to have a null ActorRef. This should be null during normal operation. | |||
public static DummyTell altTell = null; | |||
/** | |||
* You can consider the contents of the user’s browser window a canvas that can be drawn upon. drawTile will draw | |||
* the image of a board tile on the board. This command takes as input a Tile object and a visualisation mode (an | |||
* integer) that specifies which version of the tile to render (each tile has multiple versions, e.g. normal vs. | |||
* highlighted). This command can be used multiple times to change the visualisation mode for a tile. | |||
* @param out | |||
* @param tile | |||
* @param mode | |||
*/ | |||
@SuppressWarnings({"deprecation"}) | |||
public static void drawTile(ActorRef out, Tile tile, int mode) { | |||
try { | |||
ObjectNode returnMessage = Json.newObject(); | |||
returnMessage.put("messagetype", "drawTile"); | |||
returnMessage.put("tile", mapper.readTree(mapper.writeValueAsString(tile))); | |||
returnMessage.put("mode", mode); | |||
if (altTell!=null) altTell.tell(returnMessage); | |||
else out.tell(returnMessage, out); | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
/** | |||
* drawUnit will draw the sprite for a unit (a picture of that unit with its attack and health values) on the board. | |||
* This command takes as input a target Tile (a ‘square’ of the main game grid) to place the unit’s sprite upon, | |||
* and the instance of the Unit (which holds the needed information about how to draw that unit). | |||
* @param out | |||
* @param unit | |||
* @param tile | |||
*/ | |||
@SuppressWarnings({"deprecation"}) | |||
public static void drawUnit(ActorRef out, Unit unit, Tile tile) { | |||
try { | |||
ObjectNode returnMessage = Json.newObject(); | |||
returnMessage.put("messagetype", "drawUnit"); | |||
returnMessage.put("tile", mapper.readTree(mapper.writeValueAsString(tile))); | |||
returnMessage.put("unit", mapper.readTree(mapper.writeValueAsString(unit))); | |||
if (altTell!=null) altTell.tell(returnMessage); | |||
else out.tell(returnMessage, out); | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
/** | |||
* This command changes the visualised attack value just under a unit’s sprite to a value between 0 | |||
* and 20. The command takes in a unit instance. The associated values are read from the unit object. | |||
* @param out | |||
* @param unit | |||
* @param attack | |||
*/ | |||
@SuppressWarnings({"deprecation"}) | |||
public static void setUnitAttack(ActorRef out, Unit unit, int attack) { | |||
try { | |||
ObjectNode returnMessage = Json.newObject(); | |||
returnMessage.put("messagetype", "setUnitAttack"); | |||
returnMessage.put("unit", mapper.readTree(mapper.writeValueAsString(unit))); | |||
returnMessage.put("attack", attack); | |||
if (altTell!=null) altTell.tell(returnMessage); | |||
else out.tell(returnMessage, out); | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
/** | |||
* This command changes the visualised health value just under a unit’s sprite to a value between 0 | |||
* and 20. The command takes in a unit instance. The associated values are read from the unit object. | |||
* @param out | |||
* @param unit | |||
* @param health | |||
*/ | |||
@SuppressWarnings({"deprecation"}) | |||
public static void setUnitHealth(ActorRef out, Unit unit, int health) { | |||
try { | |||
ObjectNode returnMessage = Json.newObject(); | |||
returnMessage.put("messagetype", "setUnitHealth"); | |||
returnMessage.put("unit", mapper.readTree(mapper.writeValueAsString(unit))); | |||
returnMessage.put("health", health); | |||
if (altTell!=null) altTell.tell(returnMessage); | |||
else out.tell(returnMessage, out); | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
/** | |||
* This command moves a unit sprite from one tile to another. It takes in the unit’s object and the target Tile. | |||
* Note that this command will start the movement, it may take multiple seconds for the movement to complete. | |||
* @param out | |||
* @param unit | |||
* @param tile | |||
*/ | |||
@SuppressWarnings({"deprecation"}) | |||
public static void moveUnitToTile(ActorRef out, Unit unit, Tile tile) { | |||
try { | |||
ObjectNode returnMessage = Json.newObject(); | |||
returnMessage.put("messagetype", "moveUnitToTile"); | |||
returnMessage.put("unit", mapper.readTree(mapper.writeValueAsString(unit))); | |||
returnMessage.put("tile", mapper.readTree(mapper.writeValueAsString(tile))); | |||
if (altTell!=null) altTell.tell(returnMessage); | |||
else out.tell(returnMessage, out); | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
/** | |||
* This command moves a unit sprite from one tile to another. It takes in the unit’s object and the target Tile. | |||
* Note that this command will start the movement, it may take multiple seconds for the movement to complete. | |||
* yfirst sets whether the move should move the unit vertically first before moving horizontally | |||
* @param out | |||
* @param yfirst | |||
* @param unit | |||
* @param tile | |||
*/ | |||
@SuppressWarnings({"deprecation"}) | |||
public static void moveUnitToTile(ActorRef out, Unit unit, Tile tile, boolean yfirst) { | |||
try { | |||
ObjectNode returnMessage = Json.newObject(); | |||
returnMessage.put("messagetype", "moveUnitToTile"); | |||
returnMessage.put("yfirst", yfirst); | |||
returnMessage.put("unit", mapper.readTree(mapper.writeValueAsString(unit))); | |||
returnMessage.put("tile", mapper.readTree(mapper.writeValueAsString(tile))); | |||
if (altTell!=null) altTell.tell(returnMessage); | |||
else out.tell(returnMessage, out); | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
/** | |||
* This command makes a unit play a specified animation. It takes in the unit object which | |||
* contains all of the data needed to play the animations, and a UnitAnimation that specifies | |||
* which animation to switch to. | |||
* | |||
* This method now returns an estimate for the number of milliseconds until the animation completes | |||
* playing in the browser. Ignore this if it is a looping animation. | |||
* @param out | |||
* @param unit | |||
* @param animation | |||
*/ | |||
@SuppressWarnings({"deprecation"}) | |||
public static int playUnitAnimation(ActorRef out, Unit unit, UnitAnimationType animationToPlay) { | |||
try { | |||
unit.setAnimation(animationToPlay); | |||
ObjectNode returnMessage = Json.newObject(); | |||
returnMessage.put("messagetype", "playUnitAnimation"); | |||
returnMessage.put("unit", mapper.readTree(mapper.writeValueAsString(unit))); | |||
returnMessage.put("animation", animationToPlay.toString()); | |||
if (altTell!=null) altTell.tell(returnMessage); | |||
else out.tell(returnMessage, out); | |||
// estimate the time needed for the animation to play | |||
UnitAnimation animation = null; | |||
if (animationToPlay.equals(UnitAnimationType.idle)) animation = unit.getAnimations().getIdle(); | |||
if (animationToPlay.equals(UnitAnimationType.attack)) animation = unit.getAnimations().getAttack(); | |||
if (animationToPlay.equals(UnitAnimationType.channel)) animation = unit.getAnimations().getChannel(); | |||
if (animationToPlay.equals(UnitAnimationType.death)) animation = unit.getAnimations().getDeath(); | |||
if (animationToPlay.equals(UnitAnimationType.hit)) animation = unit.getAnimations().getHit(); | |||
if (animationToPlay.equals(UnitAnimationType.move)) animation = unit.getAnimations().getMove(); | |||
if (animation==null) return 0; | |||
return ((1000*(animation.getFrameStartEndIndices()[1]-animation.getFrameStartEndIndices()[0]))/animation.getFps())+50; | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
return 0; | |||
} | |||
} | |||
/** | |||
* This will delete a unit instance from the board. It takes as input the unit object of the unit. | |||
* @param out | |||
* @param unit | |||
*/ | |||
@SuppressWarnings({"deprecation"}) | |||
public static void deleteUnit(ActorRef out, Unit unit) { | |||
try { | |||
ObjectNode returnMessage = Json.newObject(); | |||
returnMessage.put("messagetype", "deleteUnit"); | |||
returnMessage.put("unit", mapper.readTree(mapper.writeValueAsString(unit))); | |||
if (altTell!=null) altTell.tell(returnMessage); | |||
else out.tell(returnMessage, out); | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
/** | |||
* This command changes the visualised health value in the player’s information card to a value between 0 | |||
* and 20. The command takes in a basic player instance. The associated values are read from the basic player | |||
* object. | |||
* @param out | |||
* @param player | |||
*/ | |||
@SuppressWarnings({"deprecation"}) | |||
public static void setPlayer1Health(ActorRef out, Player player) { | |||
try { | |||
ObjectNode returnMessage = Json.newObject(); | |||
returnMessage.put("messagetype", "setPlayer1Health"); | |||
returnMessage.put("player", mapper.readTree(mapper.writeValueAsString(player))); | |||
if (altTell!=null) altTell.tell(returnMessage); | |||
else out.tell(returnMessage, out); | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
/** | |||
* This command changes the visualised health value in the player’s information card to a value between 0 | |||
* and 20. The command takes in a basic player instance. The associated values are read from the basic player | |||
* object. | |||
* @param out | |||
* @param player | |||
*/ | |||
@SuppressWarnings({"deprecation"}) | |||
public static void setPlayer2Health(ActorRef out, Player player) { | |||
try { | |||
ObjectNode returnMessage = Json.newObject(); | |||
returnMessage.put("messagetype", "setPlayer2Health"); | |||
returnMessage.put("player", mapper.readTree(mapper.writeValueAsString(player))); | |||
if (altTell!=null) altTell.tell(returnMessage); | |||
else out.tell(returnMessage, out); | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
/** | |||
* This command changes the visualised mana value in the player’s information card to a value between 0 | |||
* and 9. The command takes in a basic player instance. The associated values are read from the basic player | |||
* object. | |||
* @param out | |||
* @param player | |||
*/ | |||
@SuppressWarnings({"deprecation"}) | |||
public static void setPlayer1Mana(ActorRef out, Player player) { | |||
try { | |||
ObjectNode returnMessage = Json.newObject(); | |||
returnMessage.put("messagetype", "setPlayer1Mana"); | |||
returnMessage.put("player", mapper.readTree(mapper.writeValueAsString(player))); | |||
if (altTell!=null) altTell.tell(returnMessage); | |||
else out.tell(returnMessage, out); | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
/** | |||
* This command changes the visualised mana value in the player’s information card to a value between 0 | |||
* and 9. The command takes in a basic player instance. The associated values are read from the basic player | |||
* object. | |||
* @param out | |||
* @param player | |||
*/ | |||
@SuppressWarnings({"deprecation"}) | |||
public static void setPlayer2Mana(ActorRef out, Player player) { | |||
try { | |||
ObjectNode returnMessage = Json.newObject(); | |||
returnMessage.put("messagetype", "setPlayer2Mana"); | |||
returnMessage.put("player", mapper.readTree(mapper.writeValueAsString(player))); | |||
if (altTell!=null) altTell.tell(returnMessage); | |||
else out.tell(returnMessage, out); | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
/** | |||
* This command renders a card in the player’s hand. It takes as input a hand position (a value between 1-6), a | |||
* Card (which is an object containing basic information needed to visualise that card) and a visualisation mode | |||
* (similarly to a tile). This command can be issued multiple times to change the visualisation mode of a card. | |||
* @param out | |||
* @param card | |||
* @param position | |||
* @param mode | |||
*/ | |||
@SuppressWarnings({"deprecation"}) | |||
public static void drawCard(ActorRef out, Card card, int position, int mode) { | |||
try { | |||
ObjectNode returnMessage = Json.newObject(); | |||
returnMessage.put("messagetype", "drawCard"); | |||
returnMessage.put("card", mapper.readTree(mapper.writeValueAsString(card))); | |||
returnMessage.put("position", position); | |||
returnMessage.put("mode", mode); | |||
if (altTell!=null) altTell.tell(returnMessage); | |||
else out.tell(returnMessage, out); | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
/** | |||
* This command deletes a card in the player’s hand. It takes as input a hand position (a value between 1-6). | |||
* @param out | |||
* @param position | |||
*/ | |||
public static void deleteCard(ActorRef out, int position) { | |||
try { | |||
ObjectNode returnMessage = Json.newObject(); | |||
returnMessage.put("messagetype", "deleteCard"); | |||
returnMessage.put("position", position); | |||
if (altTell!=null) altTell.tell(returnMessage); | |||
else out.tell(returnMessage, out); | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
/** | |||
* Plays a specified EffectAnimation (such as an explosion) centred on a particular Tile. It takes as input an | |||
* EffectAnimation (an object with information about rendering the effect) and a target Tile. | |||
* | |||
* This method has been updated to provide an estimate of the time until the animation will finish playing | |||
* @param out | |||
* @param effect | |||
* @param tile | |||
*/ | |||
@SuppressWarnings({"deprecation"}) | |||
public static int playEffectAnimation(ActorRef out, EffectAnimation effect, Tile tile) { | |||
try { | |||
ObjectNode returnMessage = Json.newObject(); | |||
returnMessage.put("messagetype", "playEffectAnimation"); | |||
returnMessage.put("effect", mapper.readTree(mapper.writeValueAsString(effect))); | |||
returnMessage.put("tile", mapper.readTree(mapper.writeValueAsString(tile))); | |||
if (altTell!=null) altTell.tell(returnMessage); | |||
else out.tell(returnMessage, out); | |||
return ((1000*effect.getAnimationTextures().size())/effect.getFps())+50; | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
return 0; | |||
} | |||
} | |||
/** | |||
* This command creates a notification box next to the portrait for the player 1 which contains | |||
* the specified text. It will be displayed for a number of seconds before being removed. | |||
* object. | |||
* @param out | |||
* @param text | |||
* @param displayTimeSeconds | |||
*/ | |||
public static void addPlayer1Notification(ActorRef out, String text, int displayTimeSeconds) { | |||
try { | |||
ObjectNode returnMessage = Json.newObject(); | |||
returnMessage.put("messagetype", "addPlayer1Notification"); | |||
returnMessage.put("text", text); | |||
returnMessage.put("seconds", displayTimeSeconds); | |||
if (altTell!=null) altTell.tell(returnMessage); | |||
else out.tell(returnMessage, out); | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
/** | |||
* Plays a projectile fire animation between two tiles | |||
* @param out | |||
* @param effect | |||
* @param tile | |||
*/ | |||
@SuppressWarnings({"deprecation"}) | |||
public static void playProjectileAnimation(ActorRef out, EffectAnimation effect, int mode, Tile startTile, Tile targetTile) { | |||
try { | |||
ObjectNode returnMessage = Json.newObject(); | |||
returnMessage.put("messagetype", "drawProjectile"); | |||
returnMessage.put("effect", mapper.readTree(mapper.writeValueAsString(effect))); | |||
returnMessage.put("tile", mapper.readTree(mapper.writeValueAsString(startTile))); | |||
returnMessage.put("targetTile", mapper.readTree(mapper.writeValueAsString(targetTile))); | |||
returnMessage.put("mode", mapper.readTree(mapper.writeValueAsString(mode))); | |||
if (altTell!=null) altTell.tell(returnMessage); | |||
else out.tell(returnMessage, out); | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
} |
@@ -0,0 +1,14 @@ | |||
package commands; | |||
import static org.junit.Assert.assertNotNull; | |||
import com.fasterxml.jackson.databind.node.ObjectNode; | |||
public class CheckMessageIsNotNullOnTell implements DummyTell { | |||
@Override | |||
public void tell(ObjectNode message) { | |||
assertNotNull(message); | |||
} | |||
} |
@@ -0,0 +1,19 @@ | |||
package commands; | |||
import com.fasterxml.jackson.databind.node.ObjectNode; | |||
public interface DummyTell { | |||
/** | |||
* This is a method that can be used to replace the normal tell logic | |||
* when sending commands to avoid issues when building unit tests where | |||
* ActorRef is null | |||
* | |||
* If writing a unit test you can add a class that implements this interface | |||
* and set BasicCommands.altTell = <your class> to avoid calling ActorRef.tell | |||
* and call altTell.tell instead. | |||
* @param message | |||
*/ | |||
public void tell(ObjectNode message); | |||
} |
@@ -0,0 +1,60 @@ | |||
package controllers; | |||
import javax.inject.Inject; | |||
import actors.GameActor; | |||
import akka.actor.ActorRef; | |||
import akka.actor.ActorSystem; | |||
import akka.actor.Props; | |||
import akka.stream.Materializer; | |||
import play.data.Form; | |||
import play.data.FormFactory; | |||
import play.libs.streams.ActorFlow; | |||
import play.mvc.Controller; | |||
import play.mvc.Http; | |||
import play.mvc.Result; | |||
import play.mvc.WebSocket; | |||
import structures.User; | |||
/** | |||
* This is the Controller class for the game. | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class GameScreenController extends Controller { | |||
private final ActorSystem actorSystem; | |||
private final Materializer materializer; | |||
Form<User> userForm = null; | |||
@Inject | |||
public GameScreenController(FormFactory formFactory, ActorSystem actorSystem, Materializer materializer) { | |||
this.actorSystem = actorSystem; | |||
this.materializer = materializer; | |||
userForm = formFactory.form(User.class); | |||
} | |||
/** | |||
* This responds to the request for creation of the Websocket | |||
* @return | |||
*/ | |||
public WebSocket socket() { | |||
return WebSocket.Json.accept( | |||
request -> ActorFlow.actorRef(this::createGameActor, actorSystem, materializer)); | |||
} | |||
/** | |||
* This method responds to the original request for the /game screen | |||
* @param request | |||
* @return | |||
*/ | |||
public Result index(Http.Request request) { | |||
return ok(views.html.gamescreen.render(request, null)); | |||
} | |||
public Props createGameActor(ActorRef out) { | |||
return Props.create(GameActor.class, out); // calls the constructor for Game Actor | |||
} | |||
} |
@@ -0,0 +1,242 @@ | |||
package demo; | |||
import akka.actor.ActorRef; | |||
import commands.BasicCommands; | |||
import structures.basic.Card; | |||
import structures.basic.EffectAnimation; | |||
import structures.basic.Player; | |||
import structures.basic.Tile; | |||
import structures.basic.Unit; | |||
import structures.basic.UnitAnimationType; | |||
import utils.BasicObjectBuilders; | |||
import utils.OrderedCardLoader; | |||
import utils.StaticConfFiles; | |||
/** | |||
* This class contains an illustration of calling all of the commands provided | |||
* in the ITSD Card Game Template | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class CommandDemo { | |||
/** | |||
* This is a demo of the various commands that can be executed | |||
* | |||
* WARNING: This is a very long-running method, as it has a lot | |||
* thread sleeps in it. The back-end will not respond to commands | |||
* while this method is processing, e.g. if you refresh the game | |||
* page or try to kill the server you will get a long delay before | |||
* anything happens. | |||
*/ | |||
public static void executeDemo(ActorRef out) { | |||
BasicCommands.addPlayer1Notification(out, "Command Demo", 2); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} // these cause processing to wait for a number of milliseconds. | |||
// addPlayer1Notification | |||
BasicCommands.addPlayer1Notification(out, "addPlayer1Notification", 2); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
//-------------------------------------------------------- | |||
// Basic Draw Commands | |||
// ------------------------------------------------------- | |||
// drawTile | |||
BasicCommands.addPlayer1Notification(out, "drawTile[3,2]", 2); | |||
Tile tile = BasicObjectBuilders.loadTile(3, 2); | |||
BasicCommands.drawTile(out, tile, 0); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
// drawUnit | |||
BasicCommands.addPlayer1Notification(out, "drawUnit", 2); | |||
Unit unit = BasicObjectBuilders.loadUnit(StaticConfFiles.humanAvatar, 0, Unit.class); | |||
unit.setPositionByTile(tile); | |||
BasicCommands.drawUnit(out, unit, tile); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
// setUnitAttack | |||
BasicCommands.addPlayer1Notification(out, "setUnitAttack", 2); | |||
BasicCommands.setUnitAttack(out, unit, 2); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
// setUnitHealth | |||
BasicCommands.addPlayer1Notification(out, "setUnitHealth", 2); | |||
BasicCommands.setUnitHealth(out, unit, 2); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
//-------------------------------------------------------- | |||
// Playing Unit Animations | |||
// ------------------------------------------------------- | |||
// playUnitAnimation [Move] | |||
BasicCommands.addPlayer1Notification(out, "playUnitAnimation [Move]", 2); | |||
BasicCommands.playUnitAnimation(out, unit, UnitAnimationType.move); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
// playUnitAnimation [Attack] | |||
BasicCommands.addPlayer1Notification(out, "playUnitAnimation [Attack]", 2); | |||
BasicCommands.playUnitAnimation(out, unit, UnitAnimationType.attack); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
// playUnitAnimation [Death] | |||
BasicCommands.addPlayer1Notification(out, "playUnitAnimation [Death]", 3); | |||
BasicCommands.playUnitAnimation(out, unit, UnitAnimationType.death); | |||
try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();} | |||
//-------------------------------------------------------- | |||
// Deleting a Unit | |||
//------------------------------------------------------- | |||
// deleteUnit | |||
BasicCommands.addPlayer1Notification(out, "deleteUnit", 2); | |||
BasicCommands.deleteUnit(out, unit); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
//-------------------------------------------------------- | |||
// Movement | |||
//------------------------------------------------------- | |||
// drawTile | |||
BasicCommands.addPlayer1Notification(out, "drawTile[3,2] Highlight", 2); | |||
BasicCommands.drawTile(out, tile, 1); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
// drawTile | |||
BasicCommands.addPlayer1Notification(out, "drawTile[3,2] Red Highlight", 2); | |||
BasicCommands.drawTile(out, tile, 2); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
// drawTile | |||
BasicCommands.addPlayer1Notification(out, "drawTile[3,2]", 2); | |||
BasicCommands.drawTile(out, tile, 0); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
// drawTile | |||
BasicCommands.addPlayer1Notification(out, "drawTile[4,2]", 2); | |||
Tile tile3 = BasicObjectBuilders.loadTile(4, 2); | |||
BasicCommands.drawTile(out, tile3, 0); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
// drawTile | |||
BasicCommands.addPlayer1Notification(out, "drawTile[5,2]", 2); | |||
Tile tile4 = BasicObjectBuilders.loadTile(5, 2); | |||
BasicCommands.drawTile(out, tile4, 0); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
// drawTile | |||
BasicCommands.addPlayer1Notification(out, "drawTile[5,3]", 2); | |||
Tile tile5 = BasicObjectBuilders.loadTile(5, 3); | |||
BasicCommands.drawTile(out, tile5, 0); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
BasicCommands.addPlayer1Notification(out, "drawUnit", 1); | |||
Unit unit2 = BasicObjectBuilders.loadUnit(StaticConfFiles.wraithling, 1, Unit.class); | |||
unit2.setPositionByTile(tile); | |||
BasicCommands.drawUnit(out, unit2, tile); | |||
try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} | |||
BasicCommands.addPlayer1Notification(out, "moveUnitToTile", 3); | |||
BasicCommands.moveUnitToTile(out, unit2, tile5); | |||
try {Thread.sleep(4000);} catch (InterruptedException e) {e.printStackTrace();} | |||
BasicCommands.addPlayer1Notification(out, "moveUnitToTile (y-axis first)", 3); | |||
BasicCommands.moveUnitToTile(out, unit2, tile, true); | |||
try {Thread.sleep(4000);} catch (InterruptedException e) {e.printStackTrace();} | |||
BasicCommands.addPlayer1Notification(out, "deleteUnit", 2); | |||
BasicCommands.deleteUnit(out, unit2); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
//-------------------------------------------------------- | |||
// Player Display Data | |||
//------------------------------------------------------- | |||
// Player Cards | |||
BasicCommands.addPlayer1Notification(out, "Player Test", 2); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
// setPlayer1Health | |||
BasicCommands.addPlayer1Notification(out, "setPlayer1Health", 2); | |||
Player humanPlayer = new Player(20, 0); | |||
BasicCommands.setPlayer1Health(out, humanPlayer); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
// setPlayer1Health | |||
BasicCommands.addPlayer1Notification(out, "setPlayer2Health", 2); | |||
Player aiPlayer = new Player(20, 0); | |||
BasicCommands.setPlayer2Health(out, aiPlayer); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
// Mana | |||
for (int m = 0; m<10; m++) { | |||
BasicCommands.addPlayer1Notification(out, "setPlayer1Mana ("+m+")", 1); | |||
humanPlayer.setMana(m); | |||
BasicCommands.setPlayer1Mana(out, humanPlayer); | |||
try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} | |||
} | |||
// Mana | |||
for (int m = 0; m<10; m++) { | |||
BasicCommands.addPlayer1Notification(out, "setPlayer2Mana ("+m+")", 1); | |||
aiPlayer.setMana(m); | |||
BasicCommands.setPlayer2Mana(out, aiPlayer); | |||
try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} | |||
} | |||
//-------------------------------------------------------- | |||
// Rendering Cards | |||
//------------------------------------------------------- | |||
// Unhighlighted | |||
int handPosition = 1; | |||
for (Card card : OrderedCardLoader.getPlayer1Cards(1)) { | |||
BasicCommands.drawCard(out, card, handPosition, 0); | |||
try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} | |||
handPosition++; | |||
if (handPosition>6) break; | |||
} | |||
// highlighted | |||
handPosition = 1; | |||
for (Card card : OrderedCardLoader.getPlayer1Cards(1)) { | |||
BasicCommands.drawCard(out, card, handPosition, 1); | |||
try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} | |||
handPosition++; | |||
if (handPosition>6) break; | |||
} | |||
// delete card | |||
handPosition = 1; | |||
for (int i=1; i<7; i++) { | |||
BasicCommands.deleteCard(out, i); | |||
try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} | |||
} | |||
//-------------------------------------------------------- | |||
// Test New Stuff from the 2024 Template | |||
//------------------------------------------------------- | |||
BasicCommands.addPlayer1Notification(out, "2024 Loader Check", 2); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
Loaders_2024_Check.test(out); // moved 2024 tests in here | |||
} | |||
} |
@@ -0,0 +1,149 @@ | |||
package demo; | |||
import java.io.File; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import akka.actor.ActorRef; | |||
import commands.BasicCommands; | |||
import structures.basic.Card; | |||
import structures.basic.EffectAnimation; | |||
import structures.basic.Tile; | |||
import structures.basic.Unit; | |||
import structures.basic.UnitAnimationType; | |||
import utils.BasicObjectBuilders; | |||
import utils.OrderedCardLoader; | |||
import utils.StaticConfFiles; | |||
public class Loaders_2024_Check { | |||
/** | |||
* This is a test of the loading and rendering for the 2024 unit | |||
* set. It exists as a convenient way for Richard to check that he | |||
* has not broken anything when he updated the template to add the | |||
* new 2024 decks. | |||
*/ | |||
public static void test(ActorRef out) { | |||
// drawTile | |||
Tile tile = BasicObjectBuilders.loadTile(3, 2); | |||
BasicCommands.drawTile(out, tile, 0); | |||
try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} // these cause processing to wait for a number of milliseconds. | |||
//-------------------------------------------------------- | |||
// Test Cards and their Units | |||
// ------------------------------------------------------- | |||
BasicCommands.addPlayer1Notification(out, "Test Cards / Units", 2); | |||
List<Card> cards = new ArrayList<Card>(); | |||
cards.addAll(OrderedCardLoader.getPlayer1Cards(1)); | |||
cards.addAll(OrderedCardLoader.getPlayer2Cards(1)); | |||
// Run test for all cards | |||
for (Card card : cards) { | |||
BasicCommands.addPlayer1Notification(out, card.getCardname(), 2); | |||
// drawCard [1] | |||
BasicCommands.drawCard(out, card, 1, 0); | |||
try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} | |||
// drawCard [1] Highlight | |||
BasicCommands.drawCard(out, card, 1, 1); | |||
try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} | |||
int unitID = 0; | |||
if (card.isCreature()) { | |||
Unit unit = BasicObjectBuilders.loadUnit(card.getUnitConfig(), unitID, Unit.class); | |||
unit.setPositionByTile(tile); | |||
BasicCommands.drawUnit(out, unit, tile); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
// playUnitAnimation [Move] and wait for a period until the animation does one cycle | |||
try {Thread.sleep(BasicCommands.playUnitAnimation(out, unit, UnitAnimationType.move));} catch (InterruptedException e) {e.printStackTrace();} | |||
// playUnitAnimation [Attack] and wait for a period until the animation does one cycle | |||
try {Thread.sleep(BasicCommands.playUnitAnimation(out, unit, UnitAnimationType.attack));} catch (InterruptedException e) {e.printStackTrace();} | |||
// playUnitAnimation [Attack] and wait for a period until the animation does one cycle | |||
try {Thread.sleep(BasicCommands.playUnitAnimation(out, unit, UnitAnimationType.hit));} catch (InterruptedException e) {e.printStackTrace();} | |||
// playUnitAnimation [Attack] and wait for a period until the animation does one cycle | |||
try {Thread.sleep(BasicCommands.playUnitAnimation(out, unit, UnitAnimationType.channel));} catch (InterruptedException e) {e.printStackTrace();} | |||
// playUnitAnimation [Death] and wait for a period until the animation does one cycle | |||
try {Thread.sleep(BasicCommands.playUnitAnimation(out, unit, UnitAnimationType.death));} catch (InterruptedException e) {e.printStackTrace();} | |||
// deleteUnit | |||
BasicCommands.deleteUnit(out, unit); | |||
try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} | |||
unitID++; | |||
} | |||
BasicCommands.deleteCard(out, 1); | |||
try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} | |||
} | |||
//-------------------------------------------------------- | |||
// Test Avatars and Tokens | |||
// ------------------------------------------------------- | |||
BasicCommands.addPlayer1Notification(out, "Test Avatars and Tokens", 1); | |||
try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} | |||
// As avatars and tokens do not have cards, we need to directly load the unit | |||
// StaticConfFiles tells us where the associated conf file is | |||
List<String> avatarsAndTokens = new ArrayList<String>(); | |||
avatarsAndTokens.add(StaticConfFiles.humanAvatar); | |||
avatarsAndTokens.add(StaticConfFiles.aiAvatar); | |||
avatarsAndTokens.add(StaticConfFiles.wraithling); | |||
for (String unitConf : avatarsAndTokens) { | |||
Unit unit = BasicObjectBuilders.loadUnit(unitConf, 1, Unit.class); | |||
unit.setPositionByTile(tile); | |||
BasicCommands.drawUnit(out, unit, tile); | |||
try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} | |||
// playUnitAnimation [Move] and wait for a period until the animation does one cycle | |||
try {Thread.sleep(BasicCommands.playUnitAnimation(out, unit, UnitAnimationType.move));} catch (InterruptedException e) {e.printStackTrace();} | |||
// playUnitAnimation [Attack] and wait for a period until the animation does one cycle | |||
try {Thread.sleep(BasicCommands.playUnitAnimation(out, unit, UnitAnimationType.attack));} catch (InterruptedException e) {e.printStackTrace();} | |||
// playUnitAnimation [Attack] and wait for a period until the animation does one cycle | |||
try {Thread.sleep(BasicCommands.playUnitAnimation(out, unit, UnitAnimationType.hit));} catch (InterruptedException e) {e.printStackTrace();} | |||
// playUnitAnimation [Attack] and wait for a period until the animation does one cycle | |||
try {Thread.sleep(BasicCommands.playUnitAnimation(out, unit, UnitAnimationType.channel));} catch (InterruptedException e) {e.printStackTrace();} | |||
// playUnitAnimation [Death] and wait for a period until the animation does one cycle | |||
try {Thread.sleep(BasicCommands.playUnitAnimation(out, unit, UnitAnimationType.death));} catch (InterruptedException e) {e.printStackTrace();} | |||
// deleteUnit | |||
BasicCommands.deleteUnit(out, unit); | |||
try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} | |||
} | |||
//-------------------------------------------------------- | |||
// Test Effects | |||
// ------------------------------------------------------- | |||
BasicCommands.addPlayer1Notification(out, "Test Effects", 1); | |||
try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} | |||
// Now check all of the loaded effects | |||
String effectsDIR = "conf/gameconfs/effects/"; | |||
for (String filename : new File(effectsDIR).list()) { | |||
EffectAnimation effect = BasicObjectBuilders.loadEffect(effectsDIR+filename); | |||
try {Thread.sleep(BasicCommands.playEffectAnimation(out, effect, tile));} catch (InterruptedException e) {e.printStackTrace();} | |||
} | |||
} | |||
} |
@@ -0,0 +1,31 @@ | |||
package events; | |||
import com.fasterxml.jackson.databind.JsonNode; | |||
import akka.actor.ActorRef; | |||
import structures.GameState; | |||
/** | |||
* Indicates that the user has clicked an object on the game canvas, in this case a card. | |||
* The event returns the position in the player's hand the card resides within. | |||
* | |||
* { | |||
* messageType = “cardClicked” | |||
* position = <hand index position [1-6]> | |||
* } | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class CardClicked implements EventProcessor{ | |||
@Override | |||
public void processEvent(ActorRef out, GameState gameState, JsonNode message) { | |||
int handPosition = message.get("position").asInt(); | |||
} | |||
} |
@@ -0,0 +1,26 @@ | |||
package events; | |||
import com.fasterxml.jackson.databind.JsonNode; | |||
import akka.actor.ActorRef; | |||
import structures.GameState; | |||
/** | |||
* Indicates that the user has clicked an object on the game canvas, in this case | |||
* the end-turn button. | |||
* | |||
* { | |||
* messageType = “endTurnClicked” | |||
* } | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class EndTurnClicked implements EventProcessor{ | |||
@Override | |||
public void processEvent(ActorRef out, GameState gameState, JsonNode message) { | |||
} | |||
} |
@@ -0,0 +1,27 @@ | |||
package events; | |||
import com.fasterxml.jackson.databind.JsonNode; | |||
import akka.actor.ActorRef; | |||
import structures.GameState; | |||
/** | |||
* A generic event processor interface, implemented by all classes that process events | |||
* sent from the user interface. | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public interface EventProcessor { | |||
/** | |||
* The processEvent method takes as input the contents of the event in the form of a | |||
* Jackson JsonNode object, which contains a set of key-value pairs (the information | |||
* about the event). It also takes in a copy of an ActorRef object, which can be used | |||
* to send commands back to the front-end, and a reference to the GameState class, | |||
* which as the name suggests can be used to hold game state information. | |||
* @param message | |||
* @return | |||
*/ | |||
public void processEvent(ActorRef out, GameState gameState, JsonNode message); | |||
} |
@@ -0,0 +1,28 @@ | |||
package events; | |||
import com.fasterxml.jackson.databind.JsonNode; | |||
import akka.actor.ActorRef; | |||
import structures.GameState; | |||
/** | |||
* In the user’s browser, the game is running in an infinite loop, where there is around a 1 second delay | |||
* between each loop. Its during each loop that the UI acts on the commands that have been sent to it. A | |||
* heartbeat event is fired at the end of each loop iteration. As with all events this is received by the Game | |||
* Actor, which you can use to trigger game logic. | |||
* | |||
* { | |||
* String messageType = “heartbeat” | |||
* } | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class Heartbeat implements EventProcessor{ | |||
@Override | |||
public void processEvent(ActorRef out, GameState gameState, JsonNode message) { | |||
} | |||
} |
@@ -0,0 +1,38 @@ | |||
package events; | |||
import com.fasterxml.jackson.databind.JsonNode; | |||
import akka.actor.ActorRef; | |||
import demo.CommandDemo; | |||
import demo.Loaders_2024_Check; | |||
import structures.GameState; | |||
/** | |||
* Indicates that both the core game loop in the browser is starting, meaning | |||
* that it is ready to recieve commands from the back-end. | |||
* | |||
* { | |||
* messageType = “initalize” | |||
* } | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class Initalize implements EventProcessor{ | |||
@Override | |||
public void processEvent(ActorRef out, GameState gameState, JsonNode message) { | |||
// hello this is a change | |||
gameState.gameInitalised = true; | |||
gameState.something = true; | |||
// User 1 makes a change | |||
CommandDemo.executeDemo(out); // this executes the command demo, comment out this when implementing your solution | |||
//Loaders_2024_Check.test(out); | |||
} | |||
} | |||
@@ -0,0 +1,29 @@ | |||
package events; | |||
import com.fasterxml.jackson.databind.JsonNode; | |||
import akka.actor.ActorRef; | |||
import structures.GameState; | |||
/** | |||
* Indicates that the user has clicked an object on the game canvas, in this case | |||
* somewhere that is not on a card tile or the end-turn button. | |||
* | |||
* { | |||
* messageType = “otherClicked” | |||
* } | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class OtherClicked implements EventProcessor{ | |||
@Override | |||
public void processEvent(ActorRef out, GameState gameState, JsonNode message) { | |||
} | |||
} | |||
@@ -0,0 +1,37 @@ | |||
package events; | |||
import com.fasterxml.jackson.databind.JsonNode; | |||
import akka.actor.ActorRef; | |||
import structures.GameState; | |||
/** | |||
* Indicates that the user has clicked an object on the game canvas, in this case a tile. | |||
* The event returns the x (horizontal) and y (vertical) indices of the tile that was | |||
* clicked. Tile indices start at 1. | |||
* | |||
* { | |||
* messageType = “tileClicked” | |||
* tilex = <x index of the tile> | |||
* tiley = <y index of the tile> | |||
* } | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class TileClicked implements EventProcessor{ | |||
@Override | |||
public void processEvent(ActorRef out, GameState gameState, JsonNode message) { | |||
int tilex = message.get("tilex").asInt(); | |||
int tiley = message.get("tiley").asInt(); | |||
if (gameState.something == true) { | |||
// do some logic | |||
} | |||
} | |||
} |
@@ -0,0 +1,29 @@ | |||
package events; | |||
import com.fasterxml.jackson.databind.JsonNode; | |||
import akka.actor.ActorRef; | |||
import structures.GameState; | |||
/** | |||
* Indicates that a unit instance has started a move. | |||
* The event reports the unique id of the unit. | |||
* | |||
* { | |||
* messageType = “unitMoving” | |||
* id = <unit id> | |||
* } | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class UnitMoving implements EventProcessor{ | |||
@Override | |||
public void processEvent(ActorRef out, GameState gameState, JsonNode message) { | |||
int unitid = message.get("id").asInt(); | |||
} | |||
} |
@@ -0,0 +1,30 @@ | |||
package events; | |||
import com.fasterxml.jackson.databind.JsonNode; | |||
import akka.actor.ActorRef; | |||
import structures.GameState; | |||
/** | |||
* Indicates that a unit instance has stopped moving. | |||
* The event reports the unique id of the unit. | |||
* | |||
* { | |||
* messageType = “unitStopped” | |||
* id = <unit id> | |||
* } | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class UnitStopped implements EventProcessor{ | |||
@Override | |||
public void processEvent(ActorRef out, GameState gameState, JsonNode message) { | |||
int unitid = message.get("id").asInt(); | |||
} | |||
} |
@@ -0,0 +1,17 @@ | |||
package structures; | |||
/** | |||
* This class can be used to hold information about the on-going game. | |||
* Its created with the GameActor. | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class GameState { | |||
public boolean gameInitalised = false; | |||
public boolean something = false; | |||
} |
@@ -0,0 +1,39 @@ | |||
package structures; | |||
/** | |||
* Unused | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class User { | |||
protected String username; | |||
protected String password; | |||
public User() {} | |||
public User(String username, String password) { | |||
super(); | |||
this.username = username; | |||
this.password = password; | |||
} | |||
public String getUsername() { | |||
return username; | |||
} | |||
public void setUsername(String username) { | |||
this.username = username; | |||
} | |||
public String getPassword() { | |||
return password; | |||
} | |||
public void setPassword(String password) { | |||
this.password = password; | |||
} | |||
} |
@@ -0,0 +1,39 @@ | |||
package structures.basic; | |||
import java.util.HashSet; | |||
import java.util.Set; | |||
import utils.BasicObjectBuilders; | |||
import utils.StaticConfFiles; | |||
public class BetterUnit extends Unit { | |||
Set<String> keywords; | |||
public BetterUnit() {} | |||
public BetterUnit(Set<String> keywords) { | |||
super(); | |||
this.keywords = keywords; | |||
} | |||
public Set<String> getKeywords() { | |||
return keywords; | |||
} | |||
public void setKeywords(Set<String> keywords) { | |||
this.keywords = keywords; | |||
}; | |||
public static void main(String[] args) { | |||
BetterUnit unit = (BetterUnit)BasicObjectBuilders.loadUnit(StaticConfFiles.humanAvatar, 0, BetterUnit.class); | |||
Set<String> keywords = new HashSet<String>(); | |||
keywords.add("MyKeyword"); | |||
unit.setKeywords(keywords); | |||
System.err.println(unit.getClass()); | |||
} | |||
} |
@@ -0,0 +1,62 @@ | |||
package structures.basic; | |||
/** | |||
* BigCard represents the expanded card version that that appears on mouse-over | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class BigCard { | |||
int attack; | |||
int health; | |||
String[] rulesTextRows; | |||
String[] cardTextures; | |||
public BigCard() {} | |||
public BigCard(int attack, int health, String[] rulesTextRows, String[] cardTextures) { | |||
super(); | |||
this.attack = attack; | |||
this.health = health; | |||
this.rulesTextRows = rulesTextRows; | |||
this.cardTextures = cardTextures; | |||
} | |||
public int getAttack() { | |||
return attack; | |||
} | |||
public void setAttack(int attack) { | |||
this.attack = attack; | |||
} | |||
public int getHealth() { | |||
return health; | |||
} | |||
public void setHealth(int health) { | |||
this.health = health; | |||
} | |||
public String[] getRulesTextRows() { | |||
return rulesTextRows; | |||
} | |||
public void setRulesTextRows(String[] rulesTextRows) { | |||
this.rulesTextRows = rulesTextRows; | |||
} | |||
public String[] getCardTextures() { | |||
return cardTextures; | |||
} | |||
public void setCardTextures(String[] cardTextures) { | |||
this.cardTextures = cardTextures; | |||
} | |||
} |
@@ -0,0 +1,89 @@ | |||
package structures.basic; | |||
/** | |||
* This is the base representation of a Card which is rendered in the player's hand. | |||
* A card has an id, a name (cardname) and a manacost. A card then has a large and mini | |||
* version. The mini version is what is rendered at the bottom of the screen. The big | |||
* version is what is rendered when the player clicks on a card in their hand. | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class Card { | |||
int id; | |||
String cardname; | |||
int manacost; | |||
MiniCard miniCard; | |||
BigCard bigCard; | |||
boolean isCreature; | |||
String unitConfig; | |||
public Card() {}; | |||
public Card(int id, String cardname, int manacost, MiniCard miniCard, BigCard bigCard, boolean isCreature, String unitConfig) { | |||
super(); | |||
this.id = id; | |||
this.cardname = cardname; | |||
this.manacost = manacost; | |||
this.miniCard = miniCard; | |||
this.bigCard = bigCard; | |||
this.isCreature = isCreature; | |||
this.unitConfig = unitConfig; | |||
} | |||
public int getId() { | |||
return id; | |||
} | |||
public void setId(int id) { | |||
this.id = id; | |||
} | |||
public String getCardname() { | |||
return cardname; | |||
} | |||
public void setCardname(String cardname) { | |||
this.cardname = cardname; | |||
} | |||
public int getManacost() { | |||
return manacost; | |||
} | |||
public void setManacost(int manacost) { | |||
this.manacost = manacost; | |||
} | |||
public MiniCard getMiniCard() { | |||
return miniCard; | |||
} | |||
public void setMiniCard(MiniCard miniCard) { | |||
this.miniCard = miniCard; | |||
} | |||
public BigCard getBigCard() { | |||
return bigCard; | |||
} | |||
public void setBigCard(BigCard bigCard) { | |||
this.bigCard = bigCard; | |||
} | |||
public boolean getIsCreature() { | |||
return isCreature; | |||
} | |||
public void setIsCreature(boolean isCreature) { | |||
this.isCreature = isCreature; | |||
} | |||
public void setCreature(boolean isCreature) { | |||
this.isCreature = isCreature; | |||
} | |||
public boolean isCreature() { | |||
return isCreature; | |||
} | |||
public String getUnitConfig() { | |||
return unitConfig; | |||
} | |||
public void setUnitConfig(String unitConfig) { | |||
this.unitConfig = unitConfig; | |||
} | |||
} |
@@ -0,0 +1,49 @@ | |||
package structures.basic; | |||
import java.util.List; | |||
/** | |||
* This class is the base for an effect that can be played on a game | |||
* tile. It has a list of animation frames (animationTextures), and | |||
* a correction object that has information about centering the frames | |||
* on the tile. It has has an fps value that specifies how quickly to | |||
* play the animation. | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class EffectAnimation { | |||
List<String> animationTextures; | |||
ImageCorrection correction; | |||
int fps; | |||
public EffectAnimation() {} | |||
public EffectAnimation(List<String> animationTextures, ImageCorrection correction, int fps) { | |||
super(); | |||
this.animationTextures = animationTextures; | |||
this.correction = correction; | |||
this.fps = fps; | |||
} | |||
public List<String> getAnimationTextures() { | |||
return animationTextures; | |||
} | |||
public void setAnimationTextures(List<String> animationTextures) { | |||
this.animationTextures = animationTextures; | |||
} | |||
public ImageCorrection getCorrection() { | |||
return correction; | |||
} | |||
public void setCorrection(ImageCorrection correction) { | |||
this.correction = correction; | |||
} | |||
public int getFps() { | |||
return fps; | |||
} | |||
public void setFps(int fps) { | |||
this.fps = fps; | |||
} | |||
} |
@@ -0,0 +1,115 @@ | |||
package structures.basic; | |||
import com.fasterxml.jackson.annotation.JsonIgnore; | |||
/** | |||
* Sprites when extracted are not full size (there is white space around the sprite). | |||
* We need to correct for this as well as centre the sprite on the tile. This class | |||
* contains information to do this. | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class ImageCorrection { | |||
double imgWidth; | |||
double imgHeight; | |||
double spriteTopLeftX; | |||
double spriteTopLeftY; | |||
double offsetX; | |||
double offsetY; | |||
double scale; | |||
boolean reflected; | |||
public ImageCorrection() {} | |||
public ImageCorrection(double imgWidth, double imgHeight, double spriteTopLeftX, double spriteTopLeftY, | |||
double offsetX, double offsetY, double scale, boolean reflected) { | |||
super(); | |||
this.imgWidth = imgWidth; | |||
this.imgHeight = imgHeight; | |||
this.spriteTopLeftX = spriteTopLeftX; | |||
this.spriteTopLeftY = spriteTopLeftY; | |||
this.offsetX = offsetX; | |||
this.offsetY = offsetY; | |||
this.scale = scale; | |||
this.reflected = reflected; | |||
} | |||
public double getImgWidth() { | |||
return imgWidth; | |||
} | |||
public void setImgWidth(double imgWidth) { | |||
this.imgWidth = imgWidth; | |||
} | |||
public double getImgHeight() { | |||
return imgHeight; | |||
} | |||
public void setImgHeight(double imgHeight) { | |||
this.imgHeight = imgHeight; | |||
} | |||
public double getSpriteTopLeftX() { | |||
return spriteTopLeftX; | |||
} | |||
public void setSpriteTopLeftX(double spriteTopLeftX) { | |||
this.spriteTopLeftX = spriteTopLeftX; | |||
} | |||
public double getSpriteTopLeftY() { | |||
return spriteTopLeftY; | |||
} | |||
public void setSpriteTopLeftY(double spriteTopLeftY) { | |||
this.spriteTopLeftY = spriteTopLeftY; | |||
} | |||
public double getOffsetX() { | |||
return offsetX; | |||
} | |||
public void setOffsetX(double offsetX) { | |||
this.offsetX = offsetX; | |||
} | |||
public double getOffsetY() { | |||
return offsetY; | |||
} | |||
public void setOffsetY(double offsetY) { | |||
this.offsetY = offsetY; | |||
} | |||
public double getScale() { | |||
return scale; | |||
} | |||
public void setScale(double scale) { | |||
this.scale = scale; | |||
} | |||
public boolean isReflected() { | |||
return reflected; | |||
} | |||
public void setReflected(boolean reflected) { | |||
this.reflected = reflected; | |||
} | |||
@JsonIgnore | |||
public double getCorrectedImgWidth() { | |||
return imgWidth*(1+(spriteTopLeftX/imgWidth)); | |||
} | |||
@JsonIgnore | |||
public double getCorrectedImgHeight() { | |||
return imgHeight*(1+(spriteTopLeftY/imgHeight)); | |||
} | |||
} |
@@ -0,0 +1,68 @@ | |||
package structures.basic; | |||
/** | |||
* A mini-card is a visualisation of the card in a small square form factor | |||
* in the player's hand. It has a series of components. cardTextures are the | |||
* 'backing' image behind the sprite animation. animationFrames are the frames | |||
* if the unit/spell animation. fps is the speed at which to play the unit/spell | |||
* animation. index is the frame index in animationFrames when wanting a 'still' | |||
* version (non-highlighted). | |||
* | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class MiniCard { | |||
String[] cardTextures; | |||
String[] animationFrames; | |||
int fps; | |||
int index; | |||
public MiniCard() {} | |||
public MiniCard(String[] cardTextures, String[] animationFrames, int fps, int index) { | |||
super(); | |||
this.cardTextures = cardTextures; | |||
this.animationFrames = animationFrames; | |||
this.fps = fps; | |||
this.index = index; | |||
} | |||
public String[] getCardTextures() { | |||
return cardTextures; | |||
} | |||
public void setCardTextures(String[] cardTextures) { | |||
this.cardTextures = cardTextures; | |||
} | |||
public String[] getAnimationFrames() { | |||
return animationFrames; | |||
} | |||
public void setAnimationFrames(String[] animationFrames) { | |||
this.animationFrames = animationFrames; | |||
} | |||
public int getFps() { | |||
return fps; | |||
} | |||
public void setFps(int fps) { | |||
this.fps = fps; | |||
} | |||
public int getIndex() { | |||
return index; | |||
} | |||
public void setIndex(int index) { | |||
this.index = index; | |||
} | |||
} |
@@ -0,0 +1,40 @@ | |||
package structures.basic; | |||
/** | |||
* A basic representation of of the Player. A player | |||
* has health and mana. | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class Player { | |||
int health; | |||
int mana; | |||
public Player() { | |||
super(); | |||
this.health = 20; | |||
this.mana = 0; | |||
} | |||
public Player(int health, int mana) { | |||
super(); | |||
this.health = health; | |||
this.mana = mana; | |||
} | |||
public int getHealth() { | |||
return health; | |||
} | |||
public void setHealth(int health) { | |||
this.health = health; | |||
} | |||
public int getMana() { | |||
return mana; | |||
} | |||
public void setMana(int mana) { | |||
this.mana = mana; | |||
} | |||
} |
@@ -0,0 +1,57 @@ | |||
package structures.basic; | |||
/** | |||
* This contains the positional information for a unit | |||
* that is sitting on a tile. tilex/y are the index position | |||
* of the tile the unit is sitting upon. x/ypos are the pixel | |||
* position of the unit. | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class Position { | |||
int xpos; | |||
int ypos; | |||
int tilex; | |||
int tiley; | |||
public Position() {} | |||
public Position(int xpos, int ypos, int tilex, int tilexy) { | |||
super(); | |||
this.xpos = xpos; | |||
this.ypos = ypos; | |||
this.tilex = tilex; | |||
this.tiley = tilexy; | |||
} | |||
public int getXpos() { | |||
return xpos; | |||
} | |||
public void setXpos(int xpos) { | |||
this.xpos = xpos; | |||
} | |||
public int getYpos() { | |||
return ypos; | |||
} | |||
public void setYpos(int ypos) { | |||
this.ypos = ypos; | |||
} | |||
public int getTilex() { | |||
return tilex; | |||
} | |||
public void setTilex(int tilex) { | |||
this.tilex = tilex; | |||
} | |||
public int getTiley() { | |||
return tiley; | |||
} | |||
public void setTiley(int tilexy) { | |||
this.tiley = tilexy; | |||
} | |||
} |
@@ -0,0 +1,119 @@ | |||
package structures.basic; | |||
import java.io.File; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import com.fasterxml.jackson.annotation.JsonIgnore; | |||
import com.fasterxml.jackson.databind.ObjectMapper; | |||
/** | |||
* A basic representation of a tile on the game board. Tiles have both a pixel position | |||
* and a grid position. Tiles also have a width and height in pixels and a series of urls | |||
* that point to the different renderable textures that a tile might have. | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class Tile { | |||
@JsonIgnore | |||
private static ObjectMapper mapper = new ObjectMapper(); // Jackson Java Object Serializer, is used to read java objects from a file | |||
List<String> tileTextures; | |||
int xpos; | |||
int ypos; | |||
int width; | |||
int height; | |||
int tilex; | |||
int tiley; | |||
public Tile() {} | |||
public Tile(String tileTexture, int xpos, int ypos, int width, int height, int tilex, int tiley) { | |||
super(); | |||
tileTextures = new ArrayList<String>(1); | |||
tileTextures.add(tileTexture); | |||
this.xpos = xpos; | |||
this.ypos = ypos; | |||
this.width = width; | |||
this.height = height; | |||
this.tilex = tilex; | |||
this.tiley = tiley; | |||
} | |||
public Tile(List<String> tileTextures, int xpos, int ypos, int width, int height, int tilex, int tiley) { | |||
super(); | |||
this.tileTextures = tileTextures; | |||
this.xpos = xpos; | |||
this.ypos = ypos; | |||
this.width = width; | |||
this.height = height; | |||
this.tilex = tilex; | |||
this.tiley = tiley; | |||
} | |||
public List<String> getTileTextures() { | |||
return tileTextures; | |||
} | |||
public void setTileTextures(List<String> tileTextures) { | |||
this.tileTextures = tileTextures; | |||
} | |||
public int getXpos() { | |||
return xpos; | |||
} | |||
public void setXpos(int xpos) { | |||
this.xpos = xpos; | |||
} | |||
public int getYpos() { | |||
return ypos; | |||
} | |||
public void setYpos(int ypos) { | |||
this.ypos = ypos; | |||
} | |||
public int getWidth() { | |||
return width; | |||
} | |||
public void setWidth(int width) { | |||
this.width = width; | |||
} | |||
public int getHeight() { | |||
return height; | |||
} | |||
public void setHeight(int height) { | |||
this.height = height; | |||
} | |||
public int getTilex() { | |||
return tilex; | |||
} | |||
public void setTilex(int tilex) { | |||
this.tilex = tilex; | |||
} | |||
public int getTiley() { | |||
return tiley; | |||
} | |||
public void setTiley(int tiley) { | |||
this.tiley = tiley; | |||
} | |||
/** | |||
* Loads a tile from a configuration file | |||
* parameters. | |||
* @param configFile | |||
* @return | |||
*/ | |||
public static Tile constructTile(String configFile) { | |||
try { | |||
Tile tile = mapper.readValue(new File(configFile), Tile.class); | |||
return tile; | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
return null; | |||
} | |||
} |
@@ -0,0 +1,111 @@ | |||
package structures.basic; | |||
import com.fasterxml.jackson.annotation.JsonIgnore; | |||
import com.fasterxml.jackson.databind.ObjectMapper; | |||
/** | |||
* This is a representation of a Unit on the game board. | |||
* A unit has a unique id (this is used by the front-end. | |||
* Each unit has a current UnitAnimationType, e.g. move, | |||
* or attack. The position is the physical position on the | |||
* board. UnitAnimationSet contains the underlying information | |||
* about the animation frames, while ImageCorrection has | |||
* information for centering the unit on the tile. | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class Unit { | |||
@JsonIgnore | |||
protected static ObjectMapper mapper = new ObjectMapper(); // Jackson Java Object Serializer, is used to read java objects from a file | |||
int id; | |||
UnitAnimationType animation; | |||
Position position; | |||
UnitAnimationSet animations; | |||
ImageCorrection correction; | |||
public Unit() {} | |||
public Unit(int id, UnitAnimationSet animations, ImageCorrection correction) { | |||
super(); | |||
this.id = id; | |||
this.animation = UnitAnimationType.idle; | |||
position = new Position(0,0,0,0); | |||
this.correction = correction; | |||
this.animations = animations; | |||
} | |||
public Unit(int id, UnitAnimationSet animations, ImageCorrection correction, Tile currentTile) { | |||
super(); | |||
this.id = id; | |||
this.animation = UnitAnimationType.idle; | |||
position = new Position(currentTile.getXpos(),currentTile.getYpos(),currentTile.getTilex(),currentTile.getTiley()); | |||
this.correction = correction; | |||
this.animations = animations; | |||
} | |||
public Unit(int id, UnitAnimationType animation, Position position, UnitAnimationSet animations, | |||
ImageCorrection correction) { | |||
super(); | |||
this.id = id; | |||
this.animation = animation; | |||
this.position = position; | |||
this.animations = animations; | |||
this.correction = correction; | |||
} | |||
public int getId() { | |||
return id; | |||
} | |||
public void setId(int id) { | |||
this.id = id; | |||
} | |||
public UnitAnimationType getAnimation() { | |||
return animation; | |||
} | |||
public void setAnimation(UnitAnimationType animation) { | |||
this.animation = animation; | |||
} | |||
public ImageCorrection getCorrection() { | |||
return correction; | |||
} | |||
public void setCorrection(ImageCorrection correction) { | |||
this.correction = correction; | |||
} | |||
public Position getPosition() { | |||
return position; | |||
} | |||
public void setPosition(Position position) { | |||
this.position = position; | |||
} | |||
public UnitAnimationSet getAnimations() { | |||
return animations; | |||
} | |||
public void setAnimations(UnitAnimationSet animations) { | |||
this.animations = animations; | |||
} | |||
/** | |||
* This command sets the position of the Unit to a specified | |||
* tile. | |||
* @param tile | |||
*/ | |||
@JsonIgnore | |||
public void setPositionByTile(Tile tile) { | |||
position = new Position(tile.getXpos(),tile.getYpos(),tile.getTilex(),tile.getTiley()); | |||
} | |||
} |
@@ -0,0 +1,57 @@ | |||
package structures.basic; | |||
/** | |||
* This contains information for playing a Unit's animation, e.g. | |||
* move, attack, or idle. One of these animations as a start and | |||
* end index in the animation frames array, an fps (indicating animation | |||
* speed) and whether that animation should loop (e.g. move does, attack | |||
* does not). | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class UnitAnimation { | |||
int[] frameStartEndIndices; | |||
int fps; | |||
boolean loop; | |||
public UnitAnimation() {} | |||
public UnitAnimation(int[] frameStartEndIndices, int fps, boolean loop) { | |||
super(); | |||
this.frameStartEndIndices = frameStartEndIndices; | |||
this.fps = fps; | |||
this.loop = loop; | |||
} | |||
public int[] getFrameStartEndIndices() { | |||
return frameStartEndIndices; | |||
} | |||
public void setFrameStartEndIndices(int[] frameStartEndIndices) { | |||
this.frameStartEndIndices = frameStartEndIndices; | |||
} | |||
public int getFps() { | |||
return fps; | |||
} | |||
public void setFps(int fps) { | |||
this.fps = fps; | |||
} | |||
public boolean isLoop() { | |||
return loop; | |||
} | |||
public void setLoop(boolean loop) { | |||
this.loop = loop; | |||
}; | |||
} |
@@ -0,0 +1,95 @@ | |||
package structures.basic; | |||
import java.util.List; | |||
/** | |||
* This is a storage structure for the different animations that a | |||
* Unit can perform. A Unit has 6 possible animation states: | |||
* - idle | |||
* - death | |||
* - attack | |||
* - move | |||
* - channel | |||
* - hit | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class UnitAnimationSet { | |||
List<String> allFrames; | |||
String frameDIR; | |||
UnitAnimation idle; | |||
UnitAnimation death; | |||
UnitAnimation attack; | |||
UnitAnimation move; | |||
UnitAnimation channel; | |||
UnitAnimation hit; | |||
public UnitAnimationSet() {} | |||
public UnitAnimationSet(List<String> allFrames, String frameDIR, UnitAnimation idle, UnitAnimation death, UnitAnimation attack, | |||
UnitAnimation move, UnitAnimation channel, UnitAnimation hit) { | |||
super(); | |||
this.allFrames = allFrames; | |||
this.frameDIR = frameDIR; | |||
this.idle = idle; | |||
this.death = death; | |||
this.attack = attack; | |||
this.move = move; | |||
this.channel = channel; | |||
this.hit = hit; | |||
} | |||
public List<String> getAllFrames() { | |||
return allFrames; | |||
} | |||
public void setAllFrames(List<String> allFrames) { | |||
this.allFrames = allFrames; | |||
} | |||
public String getFrameDIR() { | |||
return frameDIR; | |||
} | |||
public void setFrameDIR(String frameDIR) { | |||
this.frameDIR = frameDIR; | |||
} | |||
public UnitAnimation getIdle() { | |||
return idle; | |||
} | |||
public void setIdle(UnitAnimation idle) { | |||
this.idle = idle; | |||
} | |||
public UnitAnimation getDeath() { | |||
return death; | |||
} | |||
public void setDeath(UnitAnimation death) { | |||
this.death = death; | |||
} | |||
public UnitAnimation getAttack() { | |||
return attack; | |||
} | |||
public void setAttack(UnitAnimation attack) { | |||
this.attack = attack; | |||
} | |||
public UnitAnimation getMove() { | |||
return move; | |||
} | |||
public void setMove(UnitAnimation move) { | |||
this.move = move; | |||
} | |||
public UnitAnimation getChannel() { | |||
return channel; | |||
} | |||
public void setChannel(UnitAnimation channel) { | |||
this.channel = channel; | |||
} | |||
public UnitAnimation getHit() { | |||
return hit; | |||
} | |||
public void setHit(UnitAnimation hit) { | |||
this.hit = hit; | |||
} | |||
} |
@@ -0,0 +1,19 @@ | |||
package structures.basic; | |||
/** | |||
* This is an enumerate that simply holds the names | |||
* of the various unit animation states. | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public enum UnitAnimationType { | |||
idle, | |||
death, | |||
attack, | |||
move, | |||
channel, | |||
hit | |||
} |
@@ -0,0 +1,223 @@ | |||
package utils; | |||
import java.io.File; | |||
import java.util.List; | |||
import com.fasterxml.jackson.annotation.JsonIgnore; | |||
import com.fasterxml.jackson.databind.ObjectMapper; | |||
import structures.basic.Card; | |||
import structures.basic.EffectAnimation; | |||
import structures.basic.Tile; | |||
import structures.basic.Unit; | |||
/** | |||
* This class contains methods for producing basic objects from configuration files | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class BasicObjectBuilders { | |||
@JsonIgnore | |||
protected static ObjectMapper mapper = new ObjectMapper(); // Jackson Java Object Serializer, is used to read java objects from a file | |||
/** | |||
* This class produces a Card object (or anything that extends Card) given a configuration | |||
* file. Configuration files can be found in the conf/gameconfs directory. The card should | |||
* be given a unique id number. The classtype field specifies the type of Card to be | |||
* constructed, e.g. Card.class will create a default card object, but if you had a class | |||
* extending card, e.g. MyAwesomeCard that extends Card, you could also specify | |||
* MyAwesomeCard.class here. If using an extending class you will need to manually set any | |||
* new data fields. | |||
* @param configurationFile | |||
* @param id | |||
* @param classtype | |||
* @return | |||
*/ | |||
public static Card loadCard(String configurationFile, int id, Class<? extends Card> classtype) { | |||
try { | |||
Card card = mapper.readValue(new File(configurationFile), classtype); | |||
// If the card is a creature, add its idle animation as the card animation | |||
if (card.isCreature()) { | |||
Unit unit = loadUnit(card.getUnitConfig(), -1, Unit.class); | |||
List<String> idleAnimation = unit.getAnimations().getAllFrames().subList(unit.getAnimations().getIdle().getFrameStartEndIndices()[0], unit.getAnimations().getIdle().getFrameStartEndIndices()[1]); | |||
card.getMiniCard().setAnimationFrames(idleAnimation.toArray(new String[idleAnimation.size()])); | |||
} | |||
card.setId(id); | |||
return card; | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
return null; | |||
} | |||
/** | |||
* This class produces a EffectAnimation object given a configuration | |||
* file. Configuration files can be found in the conf/gameconfs directory. | |||
* @param configurationFile | |||
* @return | |||
*/ | |||
public static EffectAnimation loadEffect(String configurationFile) { | |||
try { | |||
EffectAnimation effect = mapper.readValue(new File(configurationFile), EffectAnimation.class); | |||
return effect; | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
return null; | |||
} | |||
/** | |||
* Loads a unit from a configuration file. Configuration files can be found | |||
* in the conf/gameconfs directory. The unit needs to be given a unique identifier | |||
* (id). This method requires a classtype argument that specifies what type of | |||
* unit to create. | |||
* @param configFile | |||
* @return | |||
*/ | |||
public static Unit loadUnit(String configFile, int id, Class<? extends Unit> classType) { | |||
try { | |||
Unit unit = mapper.readValue(new File(configFile), classType); | |||
// identify start and end frames automatically based on file names | |||
// IDLE | |||
{ | |||
int startframe = 0; int endframe = 0; int index = 0; boolean inAnimation = false; | |||
for (String framename: unit.getAnimations().getAllFrames()) { | |||
if (framename.contains("_idle_")) { | |||
if (startframe==0) { startframe=index; inAnimation=true;} | |||
} else { | |||
if (inAnimation) { endframe=index-1; break;} | |||
} | |||
index++; | |||
} | |||
if (endframe==0) endframe=index; | |||
int[] frameIndexes = {startframe, endframe}; | |||
if (inAnimation) unit.getAnimations().getIdle().setFrameStartEndIndices(frameIndexes); | |||
} | |||
// DEATH | |||
{ | |||
int startframe = 0; int endframe = 0; int index = 0; boolean inAnimation = false; | |||
for (String framename: unit.getAnimations().getAllFrames()) { | |||
if (framename.contains("_death_")) { | |||
if (startframe==0) { startframe=index; inAnimation=true;} | |||
} else { | |||
if (inAnimation) { endframe=index-1; break;} | |||
} | |||
index++; | |||
} | |||
if (endframe==0) endframe=index; | |||
int[] frameIndexes = {startframe, endframe}; | |||
if (inAnimation) unit.getAnimations().getDeath().setFrameStartEndIndices(frameIndexes); | |||
} | |||
// ATTACK | |||
{ | |||
int startframe = 0; int endframe = 0; int index = 0; boolean inAnimation = false; | |||
for (String framename: unit.getAnimations().getAllFrames()) { | |||
if (framename.contains("_attack_")) { | |||
if (startframe==0) { startframe=index; inAnimation=true;} | |||
} else { | |||
if (inAnimation) { endframe=index-1; break;} | |||
} | |||
index++; | |||
} | |||
if (endframe==0) endframe=index; | |||
int[] frameIndexes = {startframe, endframe}; | |||
if (inAnimation) unit.getAnimations().getAttack().setFrameStartEndIndices(frameIndexes); | |||
} | |||
// MOVE | |||
{ | |||
int startframe = 0; int endframe = 0; int index = 0; boolean inAnimation = false; | |||
for (String framename: unit.getAnimations().getAllFrames()) { | |||
if (framename.contains("_run_")) { | |||
if (startframe==0) { startframe=index; inAnimation=true;} | |||
} else { | |||
if (inAnimation) { endframe=index-1; break;} | |||
} | |||
index++; | |||
} | |||
if (endframe==0) endframe=index; | |||
int[] frameIndexes = {startframe, endframe}; | |||
if (inAnimation) unit.getAnimations().getMove().setFrameStartEndIndices(frameIndexes); | |||
} | |||
// CHANNEL | |||
{ | |||
int startframe = 0; int endframe = 0; int index = 0; boolean inAnimation = false; | |||
for (String framename: unit.getAnimations().getAllFrames()) { | |||
if (framename.contains("_castloop_")) { | |||
if (startframe==0) { startframe=index; inAnimation=true;} | |||
} else { | |||
if (inAnimation) { endframe=index-1; break;} | |||
} | |||
index++; | |||
} | |||
if (endframe==0) endframe=index; | |||
int[] frameIndexes = {startframe, endframe}; | |||
if (inAnimation) unit.getAnimations().getChannel().setFrameStartEndIndices(frameIndexes); | |||
} | |||
// HIT | |||
{ | |||
int startframe = 0; int endframe = 0; int index = 0; boolean inAnimation = false; | |||
for (String framename: unit.getAnimations().getAllFrames()) { | |||
if (framename.contains("_hit_")) { | |||
if (startframe==0) { startframe=index; inAnimation=true;} | |||
} else { | |||
if (inAnimation) { endframe=index-1; break;} | |||
} | |||
index++; | |||
} | |||
if (endframe==0) endframe=index; | |||
int[] frameIndexes = {startframe, endframe}; | |||
if (inAnimation) unit.getAnimations().getChannel().setFrameStartEndIndices(frameIndexes); | |||
} | |||
// add full address to animation frames | |||
for (int i =0; i<unit.getAnimations().getAllFrames().size(); i++) { | |||
unit.getAnimations().getAllFrames().set(i, unit.getAnimations().getFrameDIR()+unit.getAnimations().getAllFrames().get(i)); | |||
} | |||
unit.setId(id); | |||
return unit; | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
return null; | |||
} | |||
/** | |||
* Generates a tile object with x and y indices | |||
* @param x | |||
* @param y | |||
* @return | |||
*/ | |||
public static Tile loadTile(int x, int y) { | |||
int gridmargin = 5; | |||
int gridTopLeftx = 410; | |||
int gridTopLefty = 280; | |||
Tile tile = Tile.constructTile(StaticConfFiles.tileConf); | |||
tile.setXpos((tile.getWidth()*x)+(gridmargin*x)+gridTopLeftx); | |||
tile.setYpos((tile.getHeight()*y)+(gridmargin*y)+gridTopLefty); | |||
tile.setTilex(x); | |||
tile.setTiley(y); | |||
return tile; | |||
} | |||
} |
@@ -0,0 +1,85 @@ | |||
package utils; | |||
import java.io.File; | |||
import java.util.ArrayList; | |||
import java.util.HashSet; | |||
import java.util.List; | |||
import java.util.Set; | |||
import structures.basic.Card; | |||
import structures.basic.Tile; | |||
import structures.basic.Unit; | |||
/** | |||
* This is a utility class that builds a large set of image URLs | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class ImageListForPreLoad { | |||
/** | |||
* This method returns a very big list of relative locations of the different images | |||
* that are needed by the game. Pixi.js will cache these on game load. | |||
* @return | |||
*/ | |||
public static Set<String> getImageListForPreLoad() { | |||
Set<String> images = new HashSet<String>(); | |||
// UI Elements | |||
images.add("assets/game/extra/battlemap6_middleground.png"); | |||
images.add("assets/game/extra/AttackCircle.png"); | |||
images.add("assets/game/extra/HealthCircle.png"); | |||
images.add("assets/game/extra/GreyCircle.png"); | |||
images.add("assets/game/extra/ManaCircle.png"); | |||
images.add("assets/game/extra/ui/icon_mana.png"); | |||
images.add("assets/game/extra/ui/icon_mana_inactive.png"); | |||
images.add("assets/game/extra/ui/notification_quest_small.png"); | |||
images.add("assets/game/extra/ui/general_portrait_image_hex_f1-third@2x.png"); | |||
images.add("assets/game/extra/ui/general_portrait_image_hex_f4-third@2x.png"); | |||
images.add("assets/game/extra/ui/tooltip_left@2x.png"); | |||
images.add("assets/game/extra/ui/tooltip_right@2x.png"); | |||
images.add("assets/game/extra/ui/button_end_turn_enemy.png"); | |||
images.add("assets/game/extra/ui/button_primary.png"); | |||
// Tiles | |||
images.addAll(Tile.constructTile(StaticConfFiles.tileConf).getTileTextures()); | |||
// Avatars | |||
images.addAll(BasicObjectBuilders.loadUnit(StaticConfFiles.humanAvatar, -1, Unit.class).getAnimations().getAllFrames()); | |||
images.addAll(BasicObjectBuilders.loadUnit(StaticConfFiles.aiAvatar, -1, Unit.class).getAnimations().getAllFrames()); | |||
String cardsDIR = "conf/gameconfs/cards/"; | |||
for (String filename : new File(cardsDIR).list()) { | |||
images.addAll(getCardImagesForPreload(cardsDIR+filename)); | |||
} | |||
String unitsDIR = "conf/gameconfs/units/"; | |||
for (String filename : new File(unitsDIR).list()) { | |||
images.addAll(getUnitImagesForPreload(BasicObjectBuilders.loadUnit(unitsDIR+filename, -1, Unit.class))); | |||
} | |||
String effectsDIR = "conf/gameconfs/effects/"; | |||
for (String filename : new File(effectsDIR).list()) { | |||
images.addAll(BasicObjectBuilders.loadEffect(effectsDIR+filename).getAnimationTextures()); | |||
} | |||
return images; | |||
} | |||
public static List<String> getUnitImagesForPreload(Unit unit) { | |||
List<String> images = unit.getAnimations().getAllFrames(); | |||
return images; | |||
} | |||
public static List<String> getCardImagesForPreload(String configFile) { | |||
Card card = BasicObjectBuilders.loadCard(configFile, 0, Card.class); | |||
List<String> images = new ArrayList<String>(card.getMiniCard().getAnimationFrames().length+card.getMiniCard().getCardTextures().length+card.getBigCard().getCardTextures().length); | |||
for (String image : card.getMiniCard().getAnimationFrames()) images.add(image); | |||
for (String image : card.getMiniCard().getCardTextures()) images.add(image); | |||
for (String image :card.getBigCard().getCardTextures()) images.add(image); | |||
return images; | |||
} | |||
} |
@@ -0,0 +1,63 @@ | |||
package utils; | |||
import java.io.File; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import structures.basic.Card; | |||
/** | |||
* This is a utility class that provides methods for loading the decks for each | |||
* player, as the deck ordering is fixed. | |||
* @author Richard | |||
* | |||
*/ | |||
public class OrderedCardLoader { | |||
public static String cardsDIR = "conf/gameconfs/cards/"; | |||
/** | |||
* Returns all of the cards in the human player's deck in order | |||
* @return | |||
*/ | |||
public static List<Card> getPlayer1Cards(int copies) { | |||
List<Card> cardsInDeck = new ArrayList<Card>(20); | |||
int cardID = 1; | |||
for (int i =0; i<copies; i++) { | |||
for (String filename : new File(cardsDIR).list()) { | |||
if (filename.startsWith("1_")) { | |||
// this is a deck 1 card | |||
cardsInDeck.add(BasicObjectBuilders.loadCard(cardsDIR+filename, cardID, Card.class)); | |||
} | |||
} | |||
} | |||
return cardsInDeck; | |||
} | |||
/** | |||
* Returns all of the cards in the human player's deck in order | |||
* @return | |||
*/ | |||
public static List<Card> getPlayer2Cards(int copies) { | |||
List<Card> cardsInDeck = new ArrayList<Card>(20); | |||
int cardID = 1; | |||
for (int i =0; i<copies; i++) { | |||
for (String filename : new File(cardsDIR).list()) { | |||
if (filename.startsWith("2_")) { | |||
// this is a deck 2 card | |||
cardsInDeck.add(BasicObjectBuilders.loadCard(cardsDIR+filename, cardID, Card.class)); | |||
} | |||
} | |||
} | |||
return cardsInDeck; | |||
} | |||
} |
@@ -0,0 +1,30 @@ | |||
package utils; | |||
/** | |||
* This is a utility class that just has short-cuts to the location of various | |||
* config files. | |||
* | |||
* @author Dr. Richard McCreadie | |||
* | |||
*/ | |||
public class StaticConfFiles { | |||
// Board Pieces | |||
public final static String tileConf = "conf/gameconfs/tile.json"; | |||
public final static String gridConf = "conf/gameconfs/grid.json"; | |||
// Avatars | |||
public final static String humanAvatar = "conf/gameconfs/avatars/avatar1.json"; | |||
public final static String aiAvatar = "conf/gameconfs/avatars/avatar2.json"; | |||
// Tokens | |||
public final static String wraithling = "conf/gameconfs/units/wraithling.json"; | |||
// Effects | |||
public final static String f1_inmolation = "conf/gameconfs/effects/f1_inmolation.json"; | |||
public final static String f1_buff = "conf/gameconfs/effects/f1_buff.json"; | |||
public final static String f1_martyrdom = "conf/gameconfs/effects/f1_martyrdom.json"; | |||
public final static String f1_projectiles = "conf/gameconfs/effects/f1_projectiles.json"; | |||
public final static String f1_summon = "conf/gameconfs/effects/f1_summon.json"; | |||
} |
@@ -0,0 +1,161 @@ | |||
@(request: play.mvc.Http.Request, user: String) | |||
<!DOCTYPE html> | |||
<html> | |||
<head> | |||
<title>ITSD Card Game Main Screen</title> | |||
<meta charset="utf-8"> | |||
<meta name="viewport" content="width=device-width, initial-scale=1"> | |||
<link rel="stylesheet" href="@routes.Assets.at("css/uikit.css")" /> | |||
<script src="@routes.Assets.at("js/jquery.3.4.1.js")"></script> | |||
<script src="@routes.Assets.at("js/uikit.js")"></script> | |||
<script src="@routes.Assets.at("js/uikit-icons.js")"></script> | |||
<script src="@routes.Assets.at("js/hexi.min.js")"></script> | |||
</head> | |||
<body id="mainBody" wsdata="@routes.GameScreenController.socket.webSocketURL(request)" onload="init()"> | |||
<script src="@routes.Assets.at("js/cardgame.js")"></script> | |||
<script type="text/javascript"> | |||
// // Load them google fonts before starting...! | |||
window.WebFontConfig = { | |||
google: { | |||
families: ['Roboto'] | |||
}, | |||
active: function() { | |||
// do something | |||
init(); | |||
} | |||
}; | |||
let stageWidth = 1920; | |||
let stageHeight = 1080; | |||
let moveVelocity = 2; | |||
var ws; | |||
var userDataSession; | |||
var g; | |||
var gameActorInitalized = false; | |||
var gameStart = false; | |||
var sinceLastHeartbeat = 0; | |||
// game objects | |||
let boardTiles = new Map() | |||
let spriteContainers = new Map() | |||
let sprites = new Map() | |||
let attackLabels = new Map() | |||
let healthLabels = new Map() | |||
let handContainers = [null,null,null,null,null,null] | |||
let handSprites = [null,null,null,null,null,null]; | |||
let cardJSON = [null,null,null,null,null,null]; | |||
let cardPreview = null; | |||
let prevewCountdown = 0; | |||
let activeMoves = new Map() | |||
let activeProjectiles = []; | |||
let drawUnitQueue = []; | |||
let drawTileQueue = []; | |||
let player1ManaIcons = new Map() | |||
let player2ManaIcons = new Map() | |||
let player1Health = null; | |||
let player2Health = null; | |||
let player1Notification = null; | |||
let player2Notification = null; | |||
let player1NotificationText = null; | |||
let player2NotificationText = null; | |||
let playingEffects = []; | |||
function init() { | |||
openWebSocketConnection(); | |||
} | |||
function openWebSocketConnection() { | |||
var wsURL = document.getElementById("mainBody").getAttribute("wsdata"); | |||
//alert(wsURL); | |||
ws = new WebSocket(wsURL); | |||
ws.onmessage = function (event) { | |||
var message; | |||
message = JSON.parse(event.data); | |||
console.log(message); | |||
switch (message.messagetype) { | |||
case "actorReady": | |||
initHexi(message.preloadImages); | |||
gameActorInitalized = true; | |||
break; | |||
case "drawTile": | |||
//console.log(message); | |||
drawTileQueue.push(message); | |||
break; | |||
case "drawUnit": | |||
drawUnitQueue.push(message); | |||
break; | |||
case "moveUnit": | |||
moveUnit(message.unitID,message.tilex,message.tiley); | |||
break; | |||
case "moveUnitToTile": | |||
moveUnitToTile(message); | |||
break; | |||
case "setUnitHealth": | |||
setUnitHealth(message); | |||
break; | |||
case "setUnitAttack": | |||
setUnitAttack(message); | |||
break; | |||
case "setPlayer1Health": | |||
setPlayer1Health(message); | |||
break; | |||
case "setPlayer2Health": | |||
setPlayer2Health(message); | |||
break; | |||
case "setPlayer1Mana": | |||
setPlayer1Mana(message); | |||
break; | |||
case "setPlayer2Mana": | |||
setPlayer2Mana(message); | |||
break; | |||
case "addPlayer1Notification": | |||
addPlayer1Notification(message); | |||
break; | |||
case "addPlayer2Notification": | |||
addPlayer2Notification(message); | |||
break; | |||
case "playUnitAnimation": | |||
playUnitAnimation(message); | |||
break; | |||
case "drawCard": | |||
drawCard(message); | |||
break; | |||
case "deleteCard": | |||
deleteCard(message); | |||
break; | |||
case "playEffectAnimation": | |||
playEffectAnimation(message); | |||
break; | |||
case "deleteUnit": | |||
deleteUnit(message); | |||
break; | |||
case "drawProjectile": | |||
drawProjectile(message); | |||
break; | |||
default: | |||
return console.log(message); | |||
} | |||
}; | |||
} | |||
</script> | |||
</body> | |||
</html> |
@@ -0,0 +1,32 @@ | |||
lazy val root = (project in file(".")) | |||
.enablePlugins(PlayJava) | |||
.settings( | |||
name := "ITSD Card Game 23-24", | |||
version := "1.1", | |||
scalaVersion := "2.13.1", | |||
// https://github.com/sbt/junit-interface | |||
testOptions += Tests.Argument(TestFrameworks.JUnit, "-a", "-v"), | |||
libraryDependencies ++= Seq( | |||
guice, | |||
ws, | |||
"org.webjars" %% "webjars-play" % "2.8.0", | |||
"org.webjars" % "bootstrap" % "2.3.2", | |||
"org.webjars" % "flot" % "0.8.3", | |||
// Testing libraries for dealing with CompletionStage... | |||
"org.assertj" % "assertj-core" % "3.14.0" % Test, | |||
"org.awaitility" % "awaitility" % "4.0.1" % Test, | |||
), | |||
dependencyOverrides += "commons-codec" % "commons-codec" % "1.6", | |||
dependencyOverrides += "commons-io" % "commons-io" % "2.1", | |||
libraryDependencies += "com.fasterxml.jackson.core" % "jackson-databind" % "2.10.3", | |||
libraryDependencies += "com.fasterxml.jackson.dataformat" % "jackson-dataformat-yaml" % "2.10.3", | |||
libraryDependencies += "junit" % "junit" % "4.13.2", | |||
libraryDependencies += "com.novocode" % "junit-interface" % "0.11" % Test exclude("junit", "junit-dep"), | |||
LessKeys.compress := true, | |||
javacOptions ++= Seq( | |||
"-Xlint:unchecked", | |||
"-Xlint:deprecation", | |||
"-Werror" | |||
) | |||
) |
@@ -0,0 +1,38 @@ | |||
# This is the main configuration file for the application. | |||
# ~~~~~ | |||
# Uncomment this for the most verbose Akka debugging: | |||
akka { | |||
loggers = ["akka.event.slf4j.Slf4jLogger"] | |||
loglevel = "INFO" | |||
logging-filter = "akka.event.slf4j.Slf4jLoggingFilter" | |||
#actor { | |||
# debug { | |||
# receive = on | |||
# autoreceive = on | |||
# lifecycle = on | |||
# } | |||
#} | |||
} | |||
# https://www.playframework.com/documentation/latest/SecurityHeaders | |||
# Allow URLs from the same origin to be loaded by frames and scripts | |||
play.filters.headers { | |||
frameOptions = "SAMEORIGIN" | |||
} | |||
play.filters.csp.directives { | |||
connect-src = "'self'" | |||
default-src = "'self'" | |||
} | |||
# https://www.playframework.com/documentation/latest/AllowedHostsFilter | |||
# Allow requests to localhost:9000. | |||
play.filters.hosts { | |||
allowed = ["localhost:9000"] | |||
} | |||
play.filters.enabled += "play.filters.csrf.CSRFFilter" | |||
default.stocks=["GOOG", "AAPL", "ORCL"] | |||
@@ -0,0 +1 @@ | |||
{ "id" : 0, "animation" : "idle", "position" : { "xpos" : 0, "ypos" : 0, "tilex" : 0, "tiley" : 0 }, "animations" : { "allFrames" : [ "f4_3rdgeneral_attack_000.png", "f4_3rdgeneral_attack_001.png", "f4_3rdgeneral_attack_002.png", "f4_3rdgeneral_attack_003.png", "f4_3rdgeneral_attack_004.png", "f4_3rdgeneral_attack_005.png", "f4_3rdgeneral_attack_006.png", "f4_3rdgeneral_attack_007.png", "f4_3rdgeneral_attack_008.png", "f4_3rdgeneral_attack_009.png", "f4_3rdgeneral_attack_010.png", "f4_3rdgeneral_attack_011.png", "f4_3rdgeneral_attack_012.png", "f4_3rdgeneral_attack_013.png", "f4_3rdgeneral_attack_014.png", "f4_3rdgeneral_attack_015.png", "f4_3rdgeneral_attack_016.png", "f4_3rdgeneral_attack_017.png", "f4_3rdgeneral_attack_018.png", "f4_3rdgeneral_attack_019.png", "f4_3rdgeneral_attack_020.png", "f4_3rdgeneral_attack_021.png", "f4_3rdgeneral_attack_022.png", "f4_3rdgeneral_attack_023.png", "f4_3rdgeneral_attack_024.png", "f4_3rdgeneral_attack_025.png", "f4_3rdgeneral_attack_026.png", "f4_3rdgeneral_attack_027.png", "f4_3rdgeneral_attack_028.png", "f4_3rdgeneral_attack_029.png", "f4_3rdgeneral_attack_030.png", "f4_3rdgeneral_attack_031.png", "f4_3rdgeneral_attack_032.png", "f4_3rdgeneral_breathing_000.png", "f4_3rdgeneral_breathing_001.png", "f4_3rdgeneral_breathing_002.png", "f4_3rdgeneral_breathing_003.png", "f4_3rdgeneral_breathing_004.png", "f4_3rdgeneral_breathing_005.png", "f4_3rdgeneral_breathing_006.png", "f4_3rdgeneral_breathing_007.png", "f4_3rdgeneral_breathing_008.png", "f4_3rdgeneral_breathing_009.png", "f4_3rdgeneral_breathing_010.png", "f4_3rdgeneral_breathing_011.png", "f4_3rdgeneral_breathing_012.png", "f4_3rdgeneral_breathing_013.png", "f4_3rdgeneral_cast_000.png", "f4_3rdgeneral_cast_001.png", "f4_3rdgeneral_cast_002.png", "f4_3rdgeneral_cast_003.png", "f4_3rdgeneral_cast_004.png", "f4_3rdgeneral_cast_005.png", "f4_3rdgeneral_cast_006.png", "f4_3rdgeneral_cast_007.png", "f4_3rdgeneral_cast_008.png", "f4_3rdgeneral_cast_009.png", "f4_3rdgeneral_cast_010.png", "f4_3rdgeneral_cast_011.png", "f4_3rdgeneral_cast_012.png", "f4_3rdgeneral_cast_013.png", "f4_3rdgeneral_cast_014.png", "f4_3rdgeneral_cast_015.png", "f4_3rdgeneral_cast_016.png", "f4_3rdgeneral_castend_000.png", "f4_3rdgeneral_castend_001.png", "f4_3rdgeneral_castend_002.png", "f4_3rdgeneral_castend_003.png", "f4_3rdgeneral_castend_004.png", "f4_3rdgeneral_castloop_000.png", "f4_3rdgeneral_castloop_001.png", "f4_3rdgeneral_castloop_002.png", "f4_3rdgeneral_castloop_003.png", "f4_3rdgeneral_caststart_000.png", "f4_3rdgeneral_caststart_001.png", "f4_3rdgeneral_caststart_002.png", "f4_3rdgeneral_caststart_003.png", "f4_3rdgeneral_caststart_004.png", "f4_3rdgeneral_death_000.png", "f4_3rdgeneral_death_001.png", "f4_3rdgeneral_death_002.png", "f4_3rdgeneral_death_003.png", "f4_3rdgeneral_death_004.png", "f4_3rdgeneral_death_005.png", "f4_3rdgeneral_death_006.png", "f4_3rdgeneral_death_007.png", "f4_3rdgeneral_death_008.png", "f4_3rdgeneral_death_009.png", "f4_3rdgeneral_death_010.png", "f4_3rdgeneral_hit_000.png", "f4_3rdgeneral_hit_001.png", "f4_3rdgeneral_hit_002.png", "f4_3rdgeneral_idle_000.png", "f4_3rdgeneral_idle_001.png", "f4_3rdgeneral_idle_002.png", "f4_3rdgeneral_idle_003.png", "f4_3rdgeneral_idle_004.png", "f4_3rdgeneral_idle_005.png", "f4_3rdgeneral_idle_006.png", "f4_3rdgeneral_idle_007.png", "f4_3rdgeneral_idle_008.png", "f4_3rdgeneral_idle_009.png", "f4_3rdgeneral_idle_010.png", "f4_3rdgeneral_idle_011.png", "f4_3rdgeneral_idle_012.png", "f4_3rdgeneral_idle_013.png", "f4_3rdgeneral_idle_014.png", "f4_3rdgeneral_idle_015.png", "f4_3rdgeneral_run_000.png", "f4_3rdgeneral_run_001.png", "f4_3rdgeneral_run_002.png", "f4_3rdgeneral_run_003.png", "f4_3rdgeneral_run_004.png", "f4_3rdgeneral_run_005.png", "f4_3rdgeneral_run_006.png", "f4_3rdgeneral_run_007.png", "f4_3rdgeneral_run_008.png", "f4_3rdgeneral_run_009.png" ], "frameDIR": "assets/game/extra/units/f4_3rdgeneral/", "idle" : { "frameStartEndIndices" : [ 92, 107 ], "fps" : 8, "loop" : true }, "death" : { "frameStartEndIndices" : [ 78, 88 ], "fps" : 8, "loop" : false }, "attack" : { "frameStartEndIndices" : [ 0, 32 ], "fps" : 20, "loop" : false }, "move" : { "frameStartEndIndices" : [ 108, 117 ], "fps" : 8, "loop" : true }, "channel" : { "frameStartEndIndices" : [ 69, 72 ], "fps" : 8, "loop" : true }, "hit" : { "frameStartEndIndices" : [ 89, 90 ], "fps" : 8, "loop" : false } }, "correction" : { "imgWidth" : 130, "imgHeight" : 130, "scale": 1.5, "offsetX": -40, "offsetY": -60, "spriteTopLeftX" : 0, "spriteTopLeftY" : 0, "reflected" : false } } |
@@ -0,0 +1,28 @@ | |||
{ | |||
"id": 0, | |||
"cardname": "Bad Omen", | |||
"manacost": 0, | |||
"miniCard": { | |||
"cardTextures": [ | |||
"assets/game/extra/cards/card_background.png", | |||
"assets/game/extra/cards/card_background_highlight.png" | |||
], | |||
"animationFrames": [], | |||
"fps": 10, | |||
"index": 0 | |||
}, | |||
"bigCard": { | |||
"rulesTextRows": [ | |||
"Deathwatch (whenever a unit, friendly or", | |||
"enemy dies, trigger the following effect):", | |||
"This unit gains +1 attack permanently." | |||
], | |||
"cardTextures": [ | |||
"assets/game/extra/cards/neutral_unit_h.png" | |||
], | |||
"attack": 0, | |||
"health": 1 | |||
}, | |||
"isCreature": true, | |||
"unitConfig": "conf/gameconfs/units/bad_omen.json" | |||
} |
@@ -0,0 +1,46 @@ | |||
{ | |||
"id": 0, | |||
"cardname": "Horn of the Forsaken", | |||
"manacost": 1, | |||
"miniCard": { | |||
"cardTextures": [ | |||
"assets/game/extra/cards/card_background.png", | |||
"assets/game/extra/cards/card_background_highlight.png" | |||
], | |||
"animationFrames": [ | |||
"assets/game/extra/cards/minicards/artifact_f4_hornofforsaken/artifact_f4_hornofforsaken_active_000.png", | |||
"assets/game/extra/cards/minicards/artifact_f4_hornofforsaken/artifact_f4_hornofforsaken_active_001.png", | |||
"assets/game/extra/cards/minicards/artifact_f4_hornofforsaken/artifact_f4_hornofforsaken_active_002.png", | |||
"assets/game/extra/cards/minicards/artifact_f4_hornofforsaken/artifact_f4_hornofforsaken_active_003.png", | |||
"assets/game/extra/cards/minicards/artifact_f4_hornofforsaken/artifact_f4_hornofforsaken_active_004.png", | |||
"assets/game/extra/cards/minicards/artifact_f4_hornofforsaken/artifact_f4_hornofforsaken_active_005.png", | |||
"assets/game/extra/cards/minicards/artifact_f4_hornofforsaken/artifact_f4_hornofforsaken_active_006.png", | |||
"assets/game/extra/cards/minicards/artifact_f4_hornofforsaken/artifact_f4_hornofforsaken_active_007.png", | |||
"assets/game/extra/cards/minicards/artifact_f4_hornofforsaken/artifact_f4_hornofforsaken_active_008.png", | |||
"assets/game/extra/cards/minicards/artifact_f4_hornofforsaken/artifact_f4_hornofforsaken_active_009.png", | |||
"assets/game/extra/cards/minicards/artifact_f4_hornofforsaken/artifact_f4_hornofforsaken_active_010.png", | |||
"assets/game/extra/cards/minicards/artifact_f4_hornofforsaken/artifact_f4_hornofforsaken_active_011.png", | |||
"assets/game/extra/cards/minicards/artifact_f4_hornofforsaken/artifact_f4_hornofforsaken_active_012.png", | |||
"assets/game/extra/cards/minicards/artifact_f4_hornofforsaken/artifact_f4_hornofforsaken_active_013.png", | |||
"assets/game/extra/cards/minicards/artifact_f4_hornofforsaken/artifact_f4_hornofforsaken_active_014.png", | |||
"assets/game/extra/cards/minicards/artifact_f4_hornofforsaken/artifact_f4_hornofforsaken_active_015.png", | |||
"assets/game/extra/cards/minicards/artifact_f4_hornofforsaken/artifact_f4_hornofforsaken_active_016.png", | |||
"assets/game/extra/cards/minicards/artifact_f4_hornofforsaken/artifact_f4_hornofforsaken_active_017.png" | |||
], | |||
"fps": 10, | |||
"index": 18 | |||
}, | |||
"bigCard": { | |||
"rulesTextRows": [ | |||
"Artifact(3), On-hit summon", | |||
"a wraithling." | |||
], | |||
"cardTextures": [ | |||
"assets/game/extra/cards/neutral_spell.png" | |||
], | |||
"attack": -1, | |||
"health": -1 | |||
}, | |||
"isCreature": false, | |||
"unitConfig": null | |||
} |
@@ -0,0 +1,29 @@ | |||
{ | |||
"id": 0, | |||
"cardname": "Gloom Chaser", | |||
"manacost": 2, | |||
"miniCard": { | |||
"cardTextures": [ | |||
"assets/game/extra/cards/card_background.png", | |||
"assets/game/extra/cards/card_background_highlight.png" | |||
], | |||
"animationFrames": [], | |||
"fps": 10, | |||
"index": 0 | |||
}, | |||
"bigCard": { | |||
"rulesTextRows": [ | |||
"Opening Gambit (whenever a unit is summoned", | |||
"onto the battlefield, trigger the following", | |||
"effect): Summon a Wraithling directly behind", | |||
"this unit." | |||
], | |||
"cardTextures": [ | |||
"assets/game/extra/cards/neutral_unit_h.png" | |||
], | |||
"attack": 3, | |||
"health": 1 | |||
}, | |||
"isCreature": true, | |||
"unitConfig": "conf/gameconfs/units/gloom_chaser.json" | |||
} |
@@ -0,0 +1,28 @@ | |||
{ | |||
"id": 0, | |||
"cardname": "Shadow Watcher", | |||
"manacost": 3, | |||
"miniCard": { | |||
"cardTextures": [ | |||
"assets/game/extra/cards/card_background.png", | |||
"assets/game/extra/cards/card_background_highlight.png" | |||
], | |||
"animationFrames": [], | |||
"fps": 10, | |||
"index": 0 | |||
}, | |||
"bigCard": { | |||
"rulesTextRows": [ | |||
"Deathwatch (whenever a unit, friendly or enemy", | |||
"dies, trigger the following effect): This unit", | |||
"gains +1 attack and +1 health permanently." | |||
], | |||
"cardTextures": [ | |||
"assets/game/extra/cards/neutral_unit_h.png" | |||
], | |||
"attack": 3, | |||
"health": 2 | |||
}, | |||
"isCreature": true, | |||
"unitConfig": "conf/gameconfs/units/shadow_watcher.json" | |||
} |
@@ -0,0 +1,37 @@ | |||
{ | |||
"id": 0, | |||
"cardname": "Wraithling Swarm", | |||
"manacost": 3, | |||
"miniCard": { | |||
"cardTextures": [ | |||
"assets/game/extra/cards/card_background.png", | |||
"assets/game/extra/cards/card_background_highlight.png" | |||
], | |||
"animationFrames": [ | |||
"assets/game/extra/cards/minicards/icon_f4_wraithlingswarm/icon_f4_wraithlingswarm_active_000.png", | |||
"assets/game/extra/cards/minicards/icon_f4_wraithlingswarm/icon_f4_wraithlingswarm_active_001.png", | |||
"assets/game/extra/cards/minicards/icon_f4_wraithlingswarm/icon_f4_wraithlingswarm_active_002.png", | |||
"assets/game/extra/cards/minicards/icon_f4_wraithlingswarm/icon_f4_wraithlingswarm_active_003.png", | |||
"assets/game/extra/cards/minicards/icon_f4_wraithlingswarm/icon_f4_wraithlingswarm_active_004.png", | |||
"assets/game/extra/cards/minicards/icon_f4_wraithlingswarm/icon_f4_wraithlingswarm_active_005.png", | |||
"assets/game/extra/cards/minicards/icon_f4_wraithlingswarm/icon_f4_wraithlingswarm_active_006.png", | |||
"assets/game/extra/cards/minicards/icon_f4_wraithlingswarm/icon_f4_wraithlingswarm_active_007.png", | |||
"assets/game/extra/cards/minicards/icon_f4_wraithlingswarm/icon_f4_wraithlingswarm_active_008.png", | |||
"assets/game/extra/cards/minicards/icon_f4_wraithlingswarm/icon_f4_wraithlingswarm_active_009.png" | |||
], | |||
"fps": 10, | |||
"index": 18 | |||
}, | |||
"bigCard": { | |||
"rulesTextRows": [ | |||
"Summon three Wraithlings" | |||
], | |||
"cardTextures": [ | |||
"assets/game/extra/cards/neutral_spell.png" | |||
], | |||
"attack": -1, | |||
"health": -1 | |||
}, | |||
"isCreature": false, | |||
"unitConfig": null | |||
} |
@@ -0,0 +1,29 @@ | |||
{ | |||
"id": 0, | |||
"cardname": "Nightsorrow Assassin", | |||
"manacost": 3, | |||
"miniCard": { | |||
"cardTextures": [ | |||
"assets/game/extra/cards/card_background.png", | |||
"assets/game/extra/cards/card_background_highlight.png" | |||
], | |||
"animationFrames": [], | |||
"fps": 10, | |||
"index": 0 | |||
}, | |||
"bigCard": { | |||
"rulesTextRows": [ | |||
"Opening Gambit (whenever a unit is summoned onto", | |||
"the battlefield, trigger the following effect):", | |||
"Destroy an enemy unit in an adjacent square that", | |||
"that is below its maximum heath." | |||
], | |||
"cardTextures": [ | |||
"assets/game/extra/cards/neutral_unit_h.png" | |||
], | |||
"attack": 4, | |||
"health": 2 | |||
}, | |||
"isCreature": true, | |||
"unitConfig": "conf/gameconfs/units/nightsorrow_assassin.json" | |||
} |
@@ -0,0 +1,28 @@ | |||
{ | |||
"id": 0, | |||
"cardname": "Rock Pulveriser", | |||
"manacost": 2, | |||
"miniCard": { | |||
"cardTextures": [ | |||
"assets/game/extra/cards/card_background.png", | |||
"assets/game/extra/cards/card_background_highlight.png" | |||
], | |||
"animationFrames": [ | |||
"assets/game/extra/units/neutral_zyx/neutral_zyx_run_000.png", "assets/game/extra/units/neutral_zyx/neutral_zyx_run_001.png", "assets/game/extra/units/neutral_zyx/neutral_zyx_run_002.png", "assets/game/extra/units/neutral_zyx/neutral_zyx_run_003.png", "assets/game/extra/units/neutral_zyx/neutral_zyx_run_004.png", "assets/game/extra/units/neutral_zyx/neutral_zyx_run_005.png", "assets/game/extra/units/neutral_zyx/neutral_zyx_run_006.png", "assets/game/extra/units/neutral_zyx/neutral_zyx_run_007.png" | |||
], | |||
"fps": 10, | |||
"index": 0 | |||
}, | |||
"bigCard": { | |||
"rulesTextRows": [ | |||
"Provoke" | |||
], | |||
"cardTextures": [ | |||
"assets/game/extra/cards/neutral_unit_h.png" | |||
], | |||
"attack": 1, | |||
"health": 4 | |||
}, | |||
"isCreature": true, | |||
"unitConfig": "conf/gameconfs/units/rock_pulveriser.json" | |||
} |
@@ -0,0 +1,38 @@ | |||
{ | |||
"id": 0, | |||
"cardname": "Dark Terminus", | |||
"manacost": 4, | |||
"miniCard": { | |||
"cardTextures": [ | |||
"assets/game/extra/cards/card_background.png", | |||
"assets/game/extra/cards/card_background_highlight.png" | |||
], | |||
"animationFrames": [ | |||
"assets/game/extra/cards/minicards/icon_f4_curseofagony/icon_f4_curseofagony_active_000.png", | |||
"assets/game/extra/cards/minicards/icon_f4_curseofagony/icon_f4_curseofagony_active_001.png", | |||
"assets/game/extra/cards/minicards/icon_f4_curseofagony/icon_f4_curseofagony_active_002.png", | |||
"assets/game/extra/cards/minicards/icon_f4_curseofagony/icon_f4_curseofagony_active_003.png", | |||
"assets/game/extra/cards/minicards/icon_f4_curseofagony/icon_f4_curseofagony_active_004.png", | |||
"assets/game/extra/cards/minicards/icon_f4_curseofagony/icon_f4_curseofagony_active_005.png", | |||
"assets/game/extra/cards/minicards/icon_f4_curseofagony/icon_f4_curseofagony_active_006.png", | |||
"assets/game/extra/cards/minicards/icon_f4_curseofagony/icon_f4_curseofagony_active_007.png", | |||
"assets/game/extra/cards/minicards/icon_f4_curseofagony/icon_f4_curseofagony_active_008.png", | |||
"assets/game/extra/cards/minicards/icon_f4_curseofagony/icon_f4_curseofagony_active_009.png" | |||
], | |||
"fps": 10, | |||
"index": 18 | |||
}, | |||
"bigCard": { | |||
"rulesTextRows": [ | |||
"Destroy an enemy creature. Summon", | |||
"a wraithling in its place." | |||
], | |||
"cardTextures": [ | |||
"assets/game/extra/cards/neutral_spell.png" | |||
], | |||
"attack": -1, | |||
"health": -1 | |||
}, | |||
"isCreature": false, | |||
"unitConfig": null | |||
} |
@@ -0,0 +1,29 @@ | |||
{ | |||
"id": 0, | |||
"cardname": "Bloodmoon Priestess", | |||
"manacost": 4, | |||
"miniCard": { | |||
"cardTextures": [ | |||
"assets/game/extra/cards/card_background.png", | |||
"assets/game/extra/cards/card_background_highlight.png" | |||
], | |||
"animationFrames": [], | |||
"fps": 10, | |||
"index": 0 | |||
}, | |||
"bigCard": { | |||
"rulesTextRows": [ | |||
"Deathwatch (whenever a unit, friendly or enemy", | |||
"dies, trigger the following effect): Summon a", | |||
"Wraithling on a randomly selected unoccupied", | |||
"adjacent tile." | |||
], | |||
"cardTextures": [ | |||
"assets/game/extra/cards/neutral_unit_h.png" | |||
], | |||
"attack": 3, | |||
"health": 3 | |||
}, | |||
"isCreature": true, | |||
"unitConfig": "conf/gameconfs/units/bloodmoon_priestess.json" | |||
} |
@@ -0,0 +1,27 @@ | |||
{ | |||
"id": 2, | |||
"cardname": "Shadowdancer", | |||
"manacost": 5, | |||
"miniCard": { | |||
"cardTextures": [ | |||
"assets/game/extra/cards/card_background.png", | |||
"assets/game/extra/cards/card_background_highlight.png" | |||
], | |||
"animationFrames": [], | |||
"fps": 10, | |||
"index": 0 | |||
}, | |||
"bigCard": { | |||
"rulesTextRows": [ | |||
"Deathwatch: Deal 1 damage to the enemy", | |||
"avatar and heal yourself for 1" | |||
], | |||
"cardTextures": [ | |||
"assets/game/extra/cards/neutral_unit_h.png" | |||
], | |||
"attack": 5, | |||
"health": 4 | |||
}, | |||
"isCreature": true, | |||
"unitConfig": "conf/gameconfs/units/shadowdancer.json" | |||
} |
@@ -0,0 +1,24 @@ | |||
{ | |||
"id": 2, | |||
"cardname": "Skyrock Golem", | |||
"manacost": 2, | |||
"miniCard": { | |||
"cardTextures": [ | |||
"assets/game/extra/cards/card_background.png", | |||
"assets/game/extra/cards/card_background_highlight.png" | |||
], | |||
"animationFrames": [], | |||
"fps": 10, | |||
"index": 0 | |||
}, | |||
"bigCard": { | |||
"rulesTextRows": [], | |||
"cardTextures": [ | |||
"assets/game/extra/cards/neutral_unit_h.png" | |||
], | |||
"attack": 4, | |||
"health": 2 | |||
}, | |||
"isCreature": true, | |||
"unitConfig": "conf/gameconfs/units/skyrock_golem.json" | |||
} |
@@ -0,0 +1,26 @@ | |||
{ | |||
"id": 0, | |||
"cardname": "Swamp Entangler", | |||
"manacost": 1, | |||
"miniCard": { | |||
"cardTextures": [ | |||
"assets/game/extra/cards/card_background.png", | |||
"assets/game/extra/cards/card_background_highlight.png" | |||
], | |||
"animationFrames": [], | |||
"fps": 10, | |||
"index": 0 | |||
}, | |||
"bigCard": { | |||
"rulesTextRows": [ | |||
"Provoke" | |||
], | |||
"cardTextures": [ | |||
"assets/game/extra/cards/neutral_unit_h.png" | |||
], | |||
"attack": 0, | |||
"health": 3 | |||
}, | |||
"isCreature": true, | |||
"unitConfig": "conf/gameconfs/units/swamp_entangler.json" | |||
} |
@@ -0,0 +1,30 @@ | |||
{ | |||
"id": 0, | |||
"cardname": "Silverguard Knight", | |||
"manacost": 3, | |||
"miniCard": { | |||
"cardTextures": [ | |||
"assets/game/extra/cards/card_background.png", | |||
"assets/game/extra/cards/card_background_highlight.png" | |||
], | |||
"animationFrames": [ | |||
"assets/game/extra/units/f1_tank/f1_tank_run_000.png", "assets/game/extra/units/f1_tank/f1_tank_run_001.png", "assets/game/extra/units/f1_tank/f1_tank_run_002.png", "assets/game/extra/units/f1_tank/f1_tank_run_003.png", "assets/game/extra/units/f1_tank/f1_tank_run_004.png", "assets/game/extra/units/f1_tank/f1_tank_run_005.png", "assets/game/extra/units/f1_tank/f1_tank_run_006.png", "assets/game/extra/units/f1_tank/f1_tank_run_007.png" | |||
], | |||
"fps": 10, | |||
"index": 0 | |||
}, | |||
"bigCard": { | |||
"rulesTextRows": [ | |||
"Provoke,", | |||
"If your avatar is dealt damage this", | |||
"unit gains +2/+0" | |||
], | |||
"cardTextures": [ | |||
"assets/game/extra/cards/neutral_unit_h.png" | |||
], | |||
"attack": 1, | |||
"health": 5 | |||
}, | |||
"isCreature": true, | |||
"unitConfig": "conf/gameconfs/units/silverguard_knight.json" | |||
} |
@@ -0,0 +1,24 @@ | |||
{ | |||
"id": 2, | |||
"cardname": "Saberspine Tiger", | |||
"manacost": 3, | |||
"miniCard": { | |||
"cardTextures": [ | |||
"assets/game/extra/cards/card_background.png", | |||
"assets/game/extra/cards/card_background_highlight.png" | |||
], | |||
"animationFrames": [], | |||
"fps": 10, | |||
"index": 0 | |||
}, | |||
"bigCard": { | |||
"rulesTextRows": ["Rush"], | |||
"cardTextures": [ | |||
"assets/game/extra/cards/neutral_unit_h.png" | |||
], | |||
"attack": 3, | |||
"health": 2 | |||
}, | |||
"isCreature": true, | |||
"unitConfig": "conf/gameconfs/units/saberspine_tiger.json" | |||
} |
@@ -0,0 +1,36 @@ | |||
{ | |||
"id": 0, | |||
"cardname": "Beamshock", | |||
"manacost": 1, | |||
"miniCard": { | |||
"cardTextures": [ | |||
"assets/game/extra/cards/card_background.png", | |||
"assets/game/extra/cards/card_background_highlight.png" | |||
], | |||
"animationFrames": [ | |||
"assets/game/extra/cards/minicards/icon_f1_beamshock/icon_f1_beamshock_active_000.png", | |||
"assets/game/extra/cards/minicards/icon_f1_beamshock/icon_f1_beamshock_active_001.png", | |||
"assets/game/extra/cards/minicards/icon_f1_beamshock/icon_f1_beamshock_active_002.png", | |||
"assets/game/extra/cards/minicards/icon_f1_beamshock/icon_f1_beamshock_active_003.png", | |||
"assets/game/extra/cards/minicards/icon_f1_beamshock/icon_f1_beamshock_active_004.png", | |||
"assets/game/extra/cards/minicards/icon_f1_beamshock/icon_f1_beamshock_active_005.png", | |||
"assets/game/extra/cards/minicards/icon_f1_beamshock/icon_f1_beamshock_active_006.png", | |||
"assets/game/extra/cards/minicards/icon_f1_beamshock/icon_f1_beamshock_active_007.png", | |||
"assets/game/extra/cards/minicards/icon_f1_beamshock/icon_f1_beamshock_active_008.png" | |||
], | |||
"fps": 10, | |||
"index": 18 | |||
}, | |||
"bigCard": { | |||
"rulesTextRows": [ | |||
"Stun an enemy unit." | |||
], | |||
"cardTextures": [ | |||
"assets/game/extra/cards/neutral_spell.png" | |||
], | |||
"attack": -1, | |||
"health": -1 | |||
}, | |||
"isCreature": false, | |||
"unitConfig": null | |||
} |
@@ -0,0 +1,24 @@ | |||
{ | |||
"id": 2, | |||
"cardname": "Young Flamewing", | |||
"manacost": 4, | |||
"miniCard": { | |||
"cardTextures": [ | |||
"assets/game/extra/cards/card_background.png", | |||
"assets/game/extra/cards/card_background_highlight.png" | |||
], | |||
"animationFrames": [], | |||
"fps": 10, | |||
"index": 0 | |||
}, | |||
"bigCard": { | |||
"rulesTextRows": ["Flying"], | |||
"cardTextures": [ | |||
"assets/game/extra/cards/neutral_unit_h.png" | |||
], | |||
"attack": 5, | |||
"health": 4 | |||
}, | |||
"isCreature": true, | |||
"unitConfig": "conf/gameconfs/units/young_flamewing.json" | |||
} |
@@ -0,0 +1,27 @@ | |||
{ | |||
"id": 0, | |||
"cardname": "Silverguard Squire", | |||
"manacost": 1, | |||
"miniCard": { | |||
"cardTextures": [ | |||
"assets/game/extra/cards/card_background.png", | |||
"assets/game/extra/cards/card_background_highlight.png" | |||
], | |||
"animationFrames": [], | |||
"fps": 10, | |||
"index": 0 | |||
}, | |||
"bigCard": { | |||
"rulesTextRows": [ | |||
"Opening Gambit: Allied units in-front", | |||
"and behind you get +1/+1." | |||
], | |||
"cardTextures": [ | |||
"assets/game/extra/cards/neutral_unit_h.png" | |||
], | |||
"attack": 1, | |||
"health": 1 | |||
}, | |||
"isCreature": true, | |||
"unitConfig": "conf/gameconfs/units/silverguard_squire.json" | |||
} |
@@ -0,0 +1,28 @@ | |||
{ | |||
"id": 0, | |||
"cardname": "Ironcliff Guardian", | |||
"manacost": 5, | |||
"miniCard": { | |||
"cardTextures": [ | |||
"assets/game/extra/cards/card_background.png", | |||
"assets/game/extra/cards/card_background_highlight.png" | |||
], | |||
"animationFrames": [ | |||
"assets/game/extra/units/f1_ironcliffeguardian/f1_ironcliffeguardian_run_000.png", "assets/game/extra/units/f1_ironcliffeguardian/f1_ironcliffeguardian_run_001.png", "assets/game/extra/units/f1_ironcliffeguardian/f1_ironcliffeguardian_run_002.png", "assets/game/extra/units/f1_ironcliffeguardian/f1_ironcliffeguardian_run_003.png", "assets/game/extra/units/f1_ironcliffeguardian/f1_ironcliffeguardian_run_004.png", "assets/game/extra/units/f1_ironcliffeguardian/f1_ironcliffeguardian_run_005.png", "assets/game/extra/units/f1_ironcliffeguardian/f1_ironcliffeguardian_run_006.png", "assets/game/extra/units/f1_ironcliffeguardian/f1_ironcliffeguardian_run_007.png" | |||
], | |||
"fps": 10, | |||
"index": 0 | |||
}, | |||
"bigCard": { | |||
"rulesTextRows": [ | |||
"Provoke, Airdrop" | |||
], | |||
"cardTextures": [ | |||
"assets/game/extra/cards/neutral_unit_h.png" | |||
], | |||
"attack": 3, | |||
"health": 10 | |||
}, | |||
"isCreature": true, | |||
"unitConfig": "conf/gameconfs/units/ironcliff_guardian.json" | |||
} |
@@ -0,0 +1,33 @@ | |||
{ | |||
"id": 0, | |||
"cardname": "Sundrop Elixir", | |||
"manacost": 1, | |||
"miniCard": { | |||
"cardTextures": [ | |||
"assets/game/extra/cards/card_background.png", | |||
"assets/game/extra/cards/card_background_highlight.png" | |||
], | |||
"animationFrames": [ | |||
"assets/game/extra/cards/minicards/icon_f1_sundropelixir/icon_f1_sundropelixir_000.png", | |||
"assets/game/extra/cards/minicards/icon_f1_sundropelixir/icon_f1_sundropelixir_001.png", | |||
"assets/game/extra/cards/minicards/icon_f1_sundropelixir/icon_f1_sundropelixir_002.png", | |||
"assets/game/extra/cards/minicards/icon_f1_sundropelixir/icon_f1_sundropelixir_003.png" | |||
], | |||
"fps": 5, | |||
"index": 2 | |||
}, | |||
"bigCard": { | |||
"rulesTextRows": [ | |||
"Add 5 health to a target unit.", | |||
"This cannot take a unit over", | |||
"its starting health value." | |||
], | |||
"cardTextures": [ | |||
"assets/game/extra/cards/neutral_spell.png" | |||
], | |||
"attack": -1, | |||
"health": -1 | |||
}, | |||
"isCreature": false, | |||
"unitConfig": null | |||
} |
@@ -0,0 +1,46 @@ | |||
{ | |||
"id": 0, | |||
"cardname": "Truestrike", | |||
"manacost": 1, | |||
"miniCard": { | |||
"cardTextures": [ | |||
"assets/game/extra/cards/card_background.png", | |||
"assets/game/extra/cards/card_background_highlight.png" | |||
], | |||
"animationFrames": [ | |||
"assets/game/extra/cards/minicards/icon_f1_truestrike/icon_f1_truestrike_active_000.png", | |||
"assets/game/extra/cards/minicards/icon_f1_truestrike/icon_f1_truestrike_active_001.png", | |||
"assets/game/extra/cards/minicards/icon_f1_truestrike/icon_f1_truestrike_active_002.png", | |||
"assets/game/extra/cards/minicards/icon_f1_truestrike/icon_f1_truestrike_active_003.png", | |||
"assets/game/extra/cards/minicards/icon_f1_truestrike/icon_f1_truestrike_active_004.png", | |||
"assets/game/extra/cards/minicards/icon_f1_truestrike/icon_f1_truestrike_active_005.png", | |||
"assets/game/extra/cards/minicards/icon_f1_truestrike/icon_f1_truestrike_active_006.png", | |||
"assets/game/extra/cards/minicards/icon_f1_truestrike/icon_f1_truestrike_active_007.png", | |||
"assets/game/extra/cards/minicards/icon_f1_truestrike/icon_f1_truestrike_active_008.png", | |||
"assets/game/extra/cards/minicards/icon_f1_truestrike/icon_f1_truestrike_active_009.png", | |||
"assets/game/extra/cards/minicards/icon_f1_truestrike/icon_f1_truestrike_active_010.png", | |||
"assets/game/extra/cards/minicards/icon_f1_truestrike/icon_f1_truestrike_active_011.png", | |||
"assets/game/extra/cards/minicards/icon_f1_truestrike/icon_f1_truestrike_active_012.png", | |||
"assets/game/extra/cards/minicards/icon_f1_truestrike/icon_f1_truestrike_active_013.png", | |||
"assets/game/extra/cards/minicards/icon_f1_truestrike/icon_f1_truestrike_active_014.png", | |||
"assets/game/extra/cards/minicards/icon_f1_truestrike/icon_f1_truestrike_active_015.png", | |||
"assets/game/extra/cards/minicards/icon_f1_truestrike/icon_f1_truestrike_active_016.png", | |||
"assets/game/extra/cards/minicards/icon_f1_truestrike/icon_f1_truestrike_active_017.png", | |||
"assets/game/extra/cards/minicards/icon_f1_truestrike/icon_f1_truestrike_active_018.png" | |||
], | |||
"fps": 10, | |||
"index": 18 | |||
}, | |||
"bigCard": { | |||
"rulesTextRows": [ | |||
"Deal 2 damage to an enemy unit" | |||
], | |||
"cardTextures": [ | |||
"assets/game/extra/cards/neutral_spell.png" | |||
], | |||
"attack": -1, | |||
"health": -1 | |||
}, | |||
"isCreature": false, | |||
"unitConfig": null | |||
} |
@@ -0,0 +1,28 @@ | |||
{ | |||
"animationTextures": [ | |||
"assets/game/extra/cards/minicards/fx_buff/fx_buff_000.png", | |||
"assets/game/extra/cards/minicards/fx_buff/fx_buff_001.png", | |||
"assets/game/extra/cards/minicards/fx_buff/fx_buff_002.png", | |||
"assets/game/extra/cards/minicards/fx_buff/fx_buff_003.png", | |||
"assets/game/extra/cards/minicards/fx_buff/fx_buff_004.png", | |||
"assets/game/extra/cards/minicards/fx_buff/fx_buff_005.png", | |||
"assets/game/extra/cards/minicards/fx_buff/fx_buff_006.png", | |||
"assets/game/extra/cards/minicards/fx_buff/fx_buff_007.png", | |||
"assets/game/extra/cards/minicards/fx_buff/fx_buff_008.png", | |||
"assets/game/extra/cards/minicards/fx_buff/fx_buff_008.png", | |||
"assets/game/extra/cards/minicards/fx_buff/fx_buff_009.png", | |||
"assets/game/extra/cards/minicards/fx_buff/fx_buff_010.png", | |||
"assets/game/extra/cards/minicards/fx_buff/fx_buff_011.png" | |||
], | |||
"correction": { | |||
"imgWidth" : 100, | |||
"imgHeight" : 100, | |||
"scale": 1.0, | |||
"offsetX": 5, | |||
"offsetY": 5, | |||
"spriteTopLeftX" : 0, | |||
"spriteTopLeftY" : 0, | |||
"reflected": false | |||
}, | |||
"fps": 15 | |||
} |
@@ -0,0 +1,38 @@ | |||
{ | |||
"animationTextures": [ | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_000.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_001.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_002.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_003.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_004.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_005.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_006.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_007.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_008.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_008.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_009.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_010.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_011.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_012.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_013.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_014.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_015.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_016.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_017.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_018.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_019.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_020.png", | |||
"assets/game/extra/cards/minicards/fx_f1_inmolation/fx_f1_inmolation_021.png" | |||
], | |||
"correction": { | |||
"imgWidth" : 100, | |||
"imgHeight" : 100, | |||
"scale": 1.0, | |||
"offsetX": 5, | |||
"offsetY": 5, | |||
"spriteTopLeftX" : 0, | |||
"spriteTopLeftY" : 0, | |||
"reflected": false | |||
}, | |||
"fps": 15 | |||
} |
@@ -0,0 +1,34 @@ | |||
{ | |||
"animationTextures": [ | |||
"assets/game/extra/cards/minicards/fx_martyrdom/fx_martyrdom_001.png", | |||
"assets/game/extra/cards/minicards/fx_martyrdom/fx_martyrdom_002.png", | |||
"assets/game/extra/cards/minicards/fx_martyrdom/fx_martyrdom_003.png", | |||
"assets/game/extra/cards/minicards/fx_martyrdom/fx_martyrdom_004.png", | |||
"assets/game/extra/cards/minicards/fx_martyrdom/fx_martyrdom_005.png", | |||
"assets/game/extra/cards/minicards/fx_martyrdom/fx_martyrdom_006.png", | |||
"assets/game/extra/cards/minicards/fx_martyrdom/fx_martyrdom_007.png", | |||
"assets/game/extra/cards/minicards/fx_martyrdom/fx_martyrdom_008.png", | |||
"assets/game/extra/cards/minicards/fx_martyrdom/fx_martyrdom_008.png", | |||
"assets/game/extra/cards/minicards/fx_martyrdom/fx_martyrdom_009.png", | |||
"assets/game/extra/cards/minicards/fx_martyrdom/fx_martyrdom_010.png", | |||
"assets/game/extra/cards/minicards/fx_martyrdom/fx_martyrdom_011.png", | |||
"assets/game/extra/cards/minicards/fx_martyrdom/fx_martyrdom_012.png", | |||
"assets/game/extra/cards/minicards/fx_martyrdom/fx_martyrdom_013.png", | |||
"assets/game/extra/cards/minicards/fx_martyrdom/fx_martyrdom_014.png", | |||
"assets/game/extra/cards/minicards/fx_martyrdom/fx_martyrdom_015.png", | |||
"assets/game/extra/cards/minicards/fx_martyrdom/fx_martyrdom_016.png", | |||
"assets/game/extra/cards/minicards/fx_martyrdom/fx_martyrdom_017.png", | |||
"assets/game/extra/cards/minicards/fx_martyrdom/fx_martyrdom_018.png" | |||
], | |||
"correction": { | |||
"imgWidth" : 100, | |||
"imgHeight" : 100, | |||
"scale": 1.0, | |||
"offsetX": 5, | |||
"offsetY": 5, | |||
"spriteTopLeftX" : 0, | |||
"spriteTopLeftY" : 0, | |||
"reflected": false | |||
}, | |||
"fps": 15 | |||
} |
@@ -0,0 +1,29 @@ | |||
{ | |||
"animationTextures": [ | |||
"assets/game/extra/cards/minicards/fx_f1_casterprojectile/fx_f1casterprojectile_000.png", | |||
"assets/game/extra/cards/minicards/fx_f1_casterprojectile/fx_f1casterprojectile_001.png", | |||
"assets/game/extra/cards/minicards/fx_f1_casterprojectile/fx_f1casterprojectile_002.png", | |||
"assets/game/extra/cards/minicards/fx_f1_casterprojectile/fx_f1casterprojectile_003.png", | |||
"assets/game/extra/cards/minicards/fx_f1_casterprojectile/fx_f1casterprojectile_004.png", | |||
"assets/game/extra/cards/minicards/fx_f1_casterprojectile/fx_f1casterprojectile_005.png", | |||
"assets/game/extra/cards/minicards/fx_f1_casterprojectile/fx_f1casterprojectile_006.png", | |||
"assets/game/extra/cards/minicards/fx_f1_casterprojectile/fx_f1casterprojectile_007.png", | |||
"assets/game/extra/cards/minicards/fx_f1_casterprojectile/fx_f1casterprojectile_008.png", | |||
"assets/game/extra/cards/minicards/fx_f1_casterprojectile/fx_f1casterprojectile_009.png", | |||
"assets/game/extra/cards/minicards/fx_f1_casterprojectile/fx_f1casterprojectile_010.png", | |||
"assets/game/extra/cards/minicards/fx_f1_casterprojectile/fx_f1casterprojectile_011.png", | |||
"assets/game/extra/cards/minicards/fx_f1_casterprojectile/fx_f1casterprojectile_012.png", | |||
"assets/game/extra/cards/minicards/fx_f1_casterprojectile/fx_f1casterprojectile_013.png" | |||
], | |||
"correction": { | |||
"imgWidth" : 140, | |||
"imgHeight" : 32, | |||
"scale": 1.0, | |||
"offsetX": 45, | |||
"offsetY": 45, | |||
"spriteTopLeftX" : 0, | |||
"spriteTopLeftY" : 0, | |||
"reflected": false | |||
}, | |||
"fps": 15 | |||
} |
@@ -0,0 +1,36 @@ | |||
{ | |||
"animationTextures": [ | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_000.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_001.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_002.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_003.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_004.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_005.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_006.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_007.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_008.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_009.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_010.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_011.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_012.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_013.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_014.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_015.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_016.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_017.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_018.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_019.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_020.png" | |||
], | |||
"correction": { | |||
"imgWidth" : 80, | |||
"imgHeight" : 80, | |||
"scale": 2.0, | |||
"offsetX": -20, | |||
"offsetY": -20, | |||
"spriteTopLeftX" : 0, | |||
"spriteTopLeftY" : 0, | |||
"reflected": false | |||
}, | |||
"fps": 9 | |||
} |
@@ -0,0 +1,25 @@ | |||
{ | |||
"animationTextures": [ | |||
"assets/game/extra/cards/minicards/fx_explosionyellowelectrical/fx_explosionyellowelectrical_000.png", | |||
"assets/game/extra/cards/minicards/fx_explosionyellowelectrical/fx_explosionyellowelectrical_001.png", | |||
"assets/game/extra/cards/minicards/fx_explosionyellowelectrical/fx_explosionyellowelectrical_002.png", | |||
"assets/game/extra/cards/minicards/fx_explosionyellowelectrical/fx_explosionyellowelectrical_003.png", | |||
"assets/game/extra/cards/minicards/fx_explosionyellowelectrical/fx_explosionyellowelectrical_004.png", | |||
"assets/game/extra/cards/minicards/fx_explosionyellowelectrical/fx_explosionyellowelectrical_005.png", | |||
"assets/game/extra/cards/minicards/fx_explosionyellowelectrical/fx_explosionyellowelectrical_006.png", | |||
"assets/game/extra/cards/minicards/fx_explosionyellowelectrical/fx_explosionyellowelectrical_007.png", | |||
"assets/game/extra/cards/minicards/fx_explosionyellowelectrical/fx_explosionyellowelectrical_008.png", | |||
"assets/game/extra/cards/minicards/fx_explosionyellowelectrical/fx_explosionyellowelectrical_009.png" | |||
], | |||
"correction": { | |||
"imgWidth" : 52, | |||
"imgHeight" : 56, | |||
"scale": 1.3, | |||
"offsetX": 25, | |||
"offsetY": 25, | |||
"spriteTopLeftX" : 0, | |||
"spriteTopLeftY" : 0, | |||
"reflected": false | |||
}, | |||
"fps": 9 | |||
} |
@@ -0,0 +1,36 @@ | |||
{ | |||
"animationTextures": [ | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_000.png", | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_001.png", | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_002.png", | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_003.png", | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_004.png", | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_005.png", | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_006.png", | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_007.png", | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_008.png", | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_009.png", | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_010.png", | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_011.png", | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_012.png", | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_013.png", | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_014.png", | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_015.png", | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_016.png", | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_017.png", | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_018.png", | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_019.png", | |||
"assets/game/extra/cards/minicards/fx_f4_bbs_abyssalscar/fx_f4_bbs_abyssalscar_020.png" | |||
], | |||
"correction": { | |||
"imgWidth" : 52, | |||
"imgHeight" : 56, | |||
"scale": 2.5, | |||
"offsetX": -8, | |||
"offsetY": -30, | |||
"spriteTopLeftX" : 0, | |||
"spriteTopLeftY" : 0, | |||
"reflected": false | |||
}, | |||
"fps": 9 | |||
} |
@@ -0,0 +1,36 @@ | |||
{ | |||
"animationTextures": [ | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_000.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_001.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_002.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_003.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_004.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_005.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_006.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_007.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_008.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_009.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_010.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_011.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_012.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_013.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_014.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_015.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_016.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_017.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_018.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_019.png", | |||
"assets/game/extra/cards/minicards/fx_f4_soulshatterpact/fx_f4_soulshatterpact_020.png" | |||
], | |||
"correction": { | |||
"imgWidth" : 80, | |||
"imgHeight" : 80, | |||
"scale": 1.0, | |||
"offsetX": 25, | |||
"offsetY": 25, | |||
"spriteTopLeftX" : 0, | |||
"spriteTopLeftY" : 0, | |||
"reflected": false | |||
}, | |||
"fps": 9 | |||
} |
@@ -0,0 +1,8 @@ | |||
{ | |||
"boardTiles": null, | |||
"gridxsize": 9, | |||
"gridysize": 5, | |||
"gridmargin": 5, | |||
"gridTopLeftx": 410, | |||
"gridTopLefty": 280 | |||
} |
@@ -0,0 +1,13 @@ | |||
{ | |||
"tileTextures": [ | |||
"assets/game/extra/ui/tile_board.png", | |||
"assets/game/extra/ui/tile_grid.png", | |||
"assets/game/extra/ui/tile_grid_red.png" | |||
], | |||
"xpos": 0, | |||
"ypos": 0, | |||
"width": 115, | |||
"height": 115, | |||
"tilex": 0, | |||
"tiley": 0 | |||
} |
@@ -0,0 +1 @@ | |||
{ "id" : 0, "animation" : "idle", "position" : { "xpos" : 0, "ypos" : 0, "tilex" : 0, "tiley" : 0 }, "animations" : { "allFrames" : [ "f4_gor_attack_000.png", "f4_gor_attack_001.png", "f4_gor_attack_002.png", "f4_gor_attack_003.png", "f4_gor_attack_004.png", "f4_gor_attack_005.png", "f4_gor_attack_006.png", "f4_gor_attack_007.png", "f4_gor_attack_008.png", "f4_gor_attack_009.png", "f4_gor_attack_010.png", "f4_gor_attack_011.png", "f4_gor_attack_012.png", "f4_gor_attack_013.png", "f4_gor_attack_014.png", "f4_gor_attack_015.png", "f4_gor_attack_016.png", "f4_gor_attack_017.png", "f4_gor_attack_018.png", "f4_gor_breathing_000.png", "f4_gor_breathing_001.png", "f4_gor_breathing_002.png", "f4_gor_breathing_003.png", "f4_gor_breathing_004.png", "f4_gor_breathing_005.png", "f4_gor_breathing_006.png", "f4_gor_breathing_007.png", "f4_gor_breathing_008.png", "f4_gor_breathing_009.png", "f4_gor_breathing_010.png", "f4_gor_breathing_011.png", "f4_gor_death_000.png", "f4_gor_death_001.png", "f4_gor_death_002.png", "f4_gor_death_003.png", "f4_gor_death_004.png", "f4_gor_death_005.png", "f4_gor_death_006.png", "f4_gor_death_007.png", "f4_gor_death_008.png", "f4_gor_death_009.png", "f4_gor_hit_000.png", "f4_gor_hit_001.png", "f4_gor_hit_002.png", "f4_gor_idle_000.png", "f4_gor_idle_001.png", "f4_gor_idle_002.png", "f4_gor_idle_003.png", "f4_gor_idle_004.png", "f4_gor_idle_005.png", "f4_gor_idle_006.png", "f4_gor_idle_007.png", "f4_gor_idle_008.png", "f4_gor_idle_009.png", "f4_gor_idle_010.png", "f4_gor_idle_011.png", "f4_gor_run_000.png", "f4_gor_run_001.png", "f4_gor_run_002.png", "f4_gor_run_003.png", "f4_gor_run_004.png", "f4_gor_run_005.png", "f4_gor_run_006.png", "f4_gor_run_007.png" ], "frameDIR": "assets/game/extra/units/f4_gor/", "idle" : { "frameStartEndIndices" : [ 44, 55 ], "fps" : 8, "loop" : true }, "death" : { "frameStartEndIndices" : [ 31,40 ], "fps" : 8, "loop" : false }, "attack" : { "frameStartEndIndices" : [ 0, 18 ], "fps" : 8, "loop" : false }, "move" : { "frameStartEndIndices" : [ 56, 63 ], "fps" : 8, "loop" : true }, "channel" : { "frameStartEndIndices" : [ 19, 30 ], "fps" : 8, "loop" : true }, "hit" : { "frameStartEndIndices" : [ 41, 43 ], "fps" : 8, "loop" : false } }, "correction" : { "imgWidth" : 80, "imgHeight" : 80, "scale": 2, "offsetX": -30, "offsetY": -33, "spriteTopLeftX" : 0, "spriteTopLeftY" : 0, "reflected" : false } } |
@@ -0,0 +1 @@ | |||
{ "id" : 0, "animation" : "idle", "position" : { "xpos" : 0, "ypos" : 0, "tilex" : 0, "tiley" : 0 }, "animations" : { "allFrames" : [ "f4_bloodmoon_attack_000.png", "f4_bloodmoon_attack_001.png", "f4_bloodmoon_attack_002.png", "f4_bloodmoon_attack_003.png", "f4_bloodmoon_attack_004.png", "f4_bloodmoon_attack_005.png", "f4_bloodmoon_attack_006.png", "f4_bloodmoon_attack_007.png", "f4_bloodmoon_attack_008.png", "f4_bloodmoon_attack_009.png", "f4_bloodmoon_attack_010.png", "f4_bloodmoon_attack_011.png", "f4_bloodmoon_breathing_000.png", "f4_bloodmoon_breathing_001.png", "f4_bloodmoon_breathing_002.png", "f4_bloodmoon_breathing_003.png", "f4_bloodmoon_breathing_004.png", "f4_bloodmoon_breathing_005.png", "f4_bloodmoon_breathing_006.png", "f4_bloodmoon_breathing_007.png", "f4_bloodmoon_breathing_008.png", "f4_bloodmoon_breathing_009.png", "f4_bloodmoon_breathing_010.png", "f4_bloodmoon_breathing_011.png", "f4_bloodmoon_breathing_012.png", "f4_bloodmoon_breathing_013.png", "f4_bloodmoon_death_000.png", "f4_bloodmoon_death_001.png", "f4_bloodmoon_death_002.png", "f4_bloodmoon_death_003.png", "f4_bloodmoon_death_004.png", "f4_bloodmoon_death_005.png", "f4_bloodmoon_death_006.png", "f4_bloodmoon_death_007.png", "f4_bloodmoon_hit_000.png", "f4_bloodmoon_hit_001.png", "f4_bloodmoon_hit_002.png", "f4_bloodmoon_idle_000.png", "f4_bloodmoon_idle_001.png", "f4_bloodmoon_idle_002.png", "f4_bloodmoon_idle_003.png", "f4_bloodmoon_idle_004.png", "f4_bloodmoon_idle_005.png", "f4_bloodmoon_idle_006.png", "f4_bloodmoon_idle_007.png", "f4_bloodmoon_idle_008.png", "f4_bloodmoon_idle_009.png", "f4_bloodmoon_idle_010.png", "f4_bloodmoon_idle_011.png", "f4_bloodmoon_run_000.png", "f4_bloodmoon_run_001.png", "f4_bloodmoon_run_002.png", "f4_bloodmoon_run_003.png", "f4_bloodmoon_run_004.png", "f4_bloodmoon_run_005.png", "f4_bloodmoon_run_006.png", "f4_bloodmoon_run_007.png" ], "frameDIR": "assets/game/extra/units/f4_bloodmoon/", "idle" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "death" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false }, "attack" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false }, "move" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "channel" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "hit" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false } }, "correction" : { "imgWidth" : 80, "imgHeight" : 80, "scale": 1.5, "offsetX": 0, "offsetY": 10, "spriteTopLeftX" : 0, "spriteTopLeftY" : 0, "reflected" : false } } |
@@ -0,0 +1 @@ | |||
{ "id" : 0, "animation" : "idle", "position" : { "xpos" : 0, "ypos" : 0, "tilex" : 0, "tiley" : 0 }, "animations" : { "allFrames" : [ "f4_gloomchaser_attack_000.png", "f4_gloomchaser_attack_001.png", "f4_gloomchaser_attack_002.png", "f4_gloomchaser_attack_003.png", "f4_gloomchaser_attack_004.png", "f4_gloomchaser_attack_005.png", "f4_gloomchaser_attack_006.png", "f4_gloomchaser_attack_007.png", "f4_gloomchaser_attack_008.png", "f4_gloomchaser_attack_009.png", "f4_gloomchaser_attack_010.png", "f4_gloomchaser_attack_011.png", "f4_gloomchaser_breathing_000.png", "f4_gloomchaser_breathing_001.png", "f4_gloomchaser_breathing_002.png", "f4_gloomchaser_breathing_003.png", "f4_gloomchaser_breathing_004.png", "f4_gloomchaser_breathing_005.png", "f4_gloomchaser_breathing_006.png", "f4_gloomchaser_breathing_007.png", "f4_gloomchaser_breathing_008.png", "f4_gloomchaser_breathing_009.png", "f4_gloomchaser_breathing_010.png", "f4_gloomchaser_breathing_011.png", "f4_gloomchaser_breathing_012.png", "f4_gloomchaser_breathing_013.png", "f4_gloomchaser_damage_000.png", "f4_gloomchaser_damage_001.png", "f4_gloomchaser_damage_002.png", "f4_gloomchaser_death_000.png", "f4_gloomchaser_death_001.png", "f4_gloomchaser_death_002.png", "f4_gloomchaser_death_003.png", "f4_gloomchaser_death_004.png", "f4_gloomchaser_death_005.png", "f4_gloomchaser_death_006.png", "f4_gloomchaser_death_007.png", "f4_gloomchaser_death_008.png", "f4_gloomchaser_idle_000.png", "f4_gloomchaser_idle_001.png", "f4_gloomchaser_idle_002.png", "f4_gloomchaser_idle_003.png", "f4_gloomchaser_idle_004.png", "f4_gloomchaser_idle_005.png", "f4_gloomchaser_idle_006.png", "f4_gloomchaser_idle_007.png", "f4_gloomchaser_idle_008.png", "f4_gloomchaser_idle_009.png", "f4_gloomchaser_idle_010.png", "f4_gloomchaser_idle_011.png", "f4_gloomchaser_projectile_000.png", "f4_gloomchaser_projectile_001.png", "f4_gloomchaser_projectile_002.png", "f4_gloomchaser_projectile_003.png", "f4_gloomchaser_projectile_004.png", "f4_gloomchaser_run_000.png", "f4_gloomchaser_run_001.png", "f4_gloomchaser_run_002.png", "f4_gloomchaser_run_003.png", "f4_gloomchaser_run_004.png", "f4_gloomchaser_run_005.png", "f4_gloomchaser_run_006.png", "f4_gloomchaser_run_007.png", "f4_gloomchaser_run_008.png", "f4_gloomchaser_run_009.png", "f4_gloomchaser_run_010.png", "f4_gloomchaser_run_011.png" ], "frameDIR": "assets/game/extra/units/f4_gloomchaser/", "idle" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "death" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false }, "attack" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false }, "move" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "channel" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "hit" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false } }, "correction" : { "imgWidth" : 80, "imgHeight" : 80, "scale": 1.5, "offsetX": 0, "offsetY": 10, "spriteTopLeftX" : 0, "spriteTopLeftY" : 0, "reflected" : false } } |
@@ -0,0 +1 @@ | |||
{ "id" : 0, "animation" : "idle", "position" : { "xpos" : 0, "ypos" : 0, "tilex" : 0, "tiley" : 0 }, "animations" : { "allFrames" : [ "f1_ironcliffeguardian_attack_000.png", "f1_ironcliffeguardian_attack_001.png", "f1_ironcliffeguardian_attack_002.png", "f1_ironcliffeguardian_attack_003.png", "f1_ironcliffeguardian_attack_004.png", "f1_ironcliffeguardian_attack_005.png", "f1_ironcliffeguardian_attack_006.png", "f1_ironcliffeguardian_attack_007.png", "f1_ironcliffeguardian_attack_008.png", "f1_ironcliffeguardian_attack_009.png", "f1_ironcliffeguardian_attack_010.png", "f1_ironcliffeguardian_attack_011.png", "f1_ironcliffeguardian_attack_012.png", "f1_ironcliffeguardian_attack_013.png", "f1_ironcliffeguardian_attack_014.png", "f1_ironcliffeguardian_attack_015.png", "f1_ironcliffeguardian_attack_016.png", "f1_ironcliffeguardian_attack_017.png", "f1_ironcliffeguardian_breathing_000.png", "f1_ironcliffeguardian_breathing_001.png", "f1_ironcliffeguardian_breathing_002.png", "f1_ironcliffeguardian_breathing_003.png", "f1_ironcliffeguardian_breathing_004.png", "f1_ironcliffeguardian_breathing_005.png", "f1_ironcliffeguardian_breathing_006.png", "f1_ironcliffeguardian_breathing_007.png", "f1_ironcliffeguardian_breathing_008.png", "f1_ironcliffeguardian_breathing_009.png", "f1_ironcliffeguardian_breathing_010.png", "f1_ironcliffeguardian_breathing_011.png", "f1_ironcliffeguardian_breathing_012.png", "f1_ironcliffeguardian_breathing_013.png", "f1_ironcliffeguardian_death_000.png", "f1_ironcliffeguardian_death_001.png", "f1_ironcliffeguardian_death_002.png", "f1_ironcliffeguardian_death_003.png", "f1_ironcliffeguardian_death_004.png", "f1_ironcliffeguardian_death_005.png", "f1_ironcliffeguardian_death_006.png", "f1_ironcliffeguardian_death_007.png", "f1_ironcliffeguardian_death_008.png", "f1_ironcliffeguardian_hit_000.png", "f1_ironcliffeguardian_hit_001.png", "f1_ironcliffeguardian_hit_002.png", "f1_ironcliffeguardian_idle_000.png", "f1_ironcliffeguardian_idle_001.png", "f1_ironcliffeguardian_idle_002.png", "f1_ironcliffeguardian_idle_003.png", "f1_ironcliffeguardian_idle_004.png", "f1_ironcliffeguardian_idle_005.png", "f1_ironcliffeguardian_idle_006.png", "f1_ironcliffeguardian_idle_007.png", "f1_ironcliffeguardian_idle_008.png", "f1_ironcliffeguardian_idle_009.png", "f1_ironcliffeguardian_idle_010.png", "f1_ironcliffeguardian_idle_011.png", "f1_ironcliffeguardian_idle_012.png", "f1_ironcliffeguardian_idle_013.png", "f1_ironcliffeguardian_idle_014.png", "f1_ironcliffeguardian_idle_015.png", "f1_ironcliffeguardian_idle_016.png", "f1_ironcliffeguardian_idle_017.png", "f1_ironcliffeguardian_run_000.png", "f1_ironcliffeguardian_run_001.png", "f1_ironcliffeguardian_run_002.png", "f1_ironcliffeguardian_run_003.png", "f1_ironcliffeguardian_run_004.png", "f1_ironcliffeguardian_run_005.png", "f1_ironcliffeguardian_run_006.png", "f1_ironcliffeguardian_run_007.png" ], "frameDIR": "assets/game/extra/units/f1_ironcliffeguardian/", "idle" : { "frameStartEndIndices" : [ 44, 61 ], "fps" : 8, "loop" : true }, "death" : { "frameStartEndIndices" : [ 32, 40 ], "fps" : 8, "loop" : false }, "attack" : { "frameStartEndIndices" : [ 0, 17 ], "fps" : 8, "loop" : false }, "move" : { "frameStartEndIndices" : [ 62, 69 ], "fps" : 8, "loop" : true }, "channel" : { "frameStartEndIndices" : [ 18, 31 ], "fps" : 8, "loop" : true }, "hit" : { "frameStartEndIndices" : [ 41, 43 ], "fps" : 8, "loop" : false } }, "correction" : { "imgWidth" : 80, "imgHeight" : 80, "scale": 1.5, "offsetX": 0, "offsetY": 10, "spriteTopLeftX" : 0, "spriteTopLeftY" : 0, "reflected" : true } } |
@@ -0,0 +1 @@ | |||
{ "id" : 0, "animation" : "idle", "position" : { "xpos" : 0, "ypos" : 0, "tilex" : 0, "tiley" : 0 }, "animations" : { "allFrames" : [ "f4_nightsorrow_attack_000.png", "f4_nightsorrow_attack_001.png", "f4_nightsorrow_attack_002.png", "f4_nightsorrow_attack_003.png", "f4_nightsorrow_attack_004.png", "f4_nightsorrow_attack_005.png", "f4_nightsorrow_attack_006.png", "f4_nightsorrow_attack_007.png", "f4_nightsorrow_attack_008.png", "f4_nightsorrow_attack_009.png", "f4_nightsorrow_attack_010.png", "f4_nightsorrow_attack_011.png", "f4_nightsorrow_attack_012.png", "f4_nightsorrow_attack_013.png", "f4_nightsorrow_breathing_000.png", "f4_nightsorrow_breathing_001.png", "f4_nightsorrow_breathing_002.png", "f4_nightsorrow_breathing_003.png", "f4_nightsorrow_breathing_004.png", "f4_nightsorrow_breathing_005.png", "f4_nightsorrow_breathing_006.png", "f4_nightsorrow_breathing_007.png", "f4_nightsorrow_breathing_008.png", "f4_nightsorrow_breathing_009.png", "f4_nightsorrow_breathing_010.png", "f4_nightsorrow_breathing_011.png", "f4_nightsorrow_breathing_012.png", "f4_nightsorrow_breathing_013.png", "f4_nightsorrow_death_000.png", "f4_nightsorrow_death_001.png", "f4_nightsorrow_death_002.png", "f4_nightsorrow_death_003.png", "f4_nightsorrow_death_004.png", "f4_nightsorrow_death_005.png", "f4_nightsorrow_death_006.png", "f4_nightsorrow_death_007.png", "f4_nightsorrow_death_008.png", "f4_nightsorrow_death_009.png", "f4_nightsorrow_death_010.png", "f4_nightsorrow_hit_000.png", "f4_nightsorrow_hit_001.png", "f4_nightsorrow_hit_002.png", "f4_nightsorrow_idle_000.png", "f4_nightsorrow_idle_001.png", "f4_nightsorrow_idle_002.png", "f4_nightsorrow_idle_003.png", "f4_nightsorrow_idle_004.png", "f4_nightsorrow_idle_005.png", "f4_nightsorrow_idle_006.png", "f4_nightsorrow_idle_007.png", "f4_nightsorrow_idle_008.png", "f4_nightsorrow_idle_009.png", "f4_nightsorrow_idle_010.png", "f4_nightsorrow_idle_011.png", "f4_nightsorrow_run_000.png", "f4_nightsorrow_run_001.png", "f4_nightsorrow_run_002.png", "f4_nightsorrow_run_003.png", "f4_nightsorrow_run_004.png", "f4_nightsorrow_run_005.png", "f4_nightsorrow_run_006.png", "f4_nightsorrow_run_007.png" ], "frameDIR": "assets/game/extra/units/f4_nightsorrow/", "idle" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "death" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false }, "attack" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false }, "move" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "channel" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "hit" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false } }, "correction" : { "imgWidth" : 80, "imgHeight" : 80, "scale": 1.5, "offsetX": 0, "offsetY": 10, "spriteTopLeftX" : 0, "spriteTopLeftY" : 0, "reflected" : false } } |
@@ -0,0 +1 @@ | |||
{ "id" : 0, "animation" : "idle", "position" : { "xpos" : 0, "ypos" : 0, "tilex" : 0, "tiley" : 0 }, "animations" : { "allFrames" : [ "neutral_monster_explodingdemon_attack_000.png", "neutral_monster_explodingdemon_attack_001.png", "neutral_monster_explodingdemon_attack_002.png", "neutral_monster_explodingdemon_attack_003.png", "neutral_monster_explodingdemon_attack_004.png", "neutral_monster_explodingdemon_attack_005.png", "neutral_monster_explodingdemon_attack_006.png", "neutral_monster_explodingdemon_attack_007.png", "neutral_monster_explodingdemon_breathing_000.png", "neutral_monster_explodingdemon_breathing_001.png", "neutral_monster_explodingdemon_breathing_002.png", "neutral_monster_explodingdemon_breathing_003.png", "neutral_monster_explodingdemon_breathing_004.png", "neutral_monster_explodingdemon_breathing_005.png", "neutral_monster_explodingdemon_breathing_006.png", "neutral_monster_explodingdemon_breathing_007.png", "neutral_monster_explodingdemon_breathing_008.png", "neutral_monster_explodingdemon_breathing_009.png", "neutral_monster_explodingdemon_breathing_010.png", "neutral_monster_explodingdemon_breathing_011.png", "neutral_monster_explodingdemon_breathing_012.png", "neutral_monster_explodingdemon_breathing_013.png", "neutral_monster_explodingdemon_death_000.png", "neutral_monster_explodingdemon_death_001.png", "neutral_monster_explodingdemon_death_002.png", "neutral_monster_explodingdemon_death_003.png", "neutral_monster_explodingdemon_death_004.png", "neutral_monster_explodingdemon_death_005.png", "neutral_monster_explodingdemon_death_006.png", "neutral_monster_explodingdemon_explode_000.png", "neutral_monster_explodingdemon_explode_001.png", "neutral_monster_explodingdemon_explode_002.png", "neutral_monster_explodingdemon_explode_003.png", "neutral_monster_explodingdemon_explode_004.png", "neutral_monster_explodingdemon_explode_005.png", "neutral_monster_explodingdemon_explode_006.png", "neutral_monster_explodingdemon_explode_007.png", "neutral_monster_explodingdemon_explode_008.png", "neutral_monster_explodingdemon_explode_009.png", "neutral_monster_explodingdemon_explode_010.png", "neutral_monster_explodingdemon_explode_011.png", "neutral_monster_explodingdemon_explode_012.png", "neutral_monster_explodingdemon_explode_013.png", "neutral_monster_explodingdemon_explode_014.png", "neutral_monster_explodingdemon_explode_015.png", "neutral_monster_explodingdemon_explode_016.png", "neutral_monster_explodingdemon_explode_017.png", "neutral_monster_explodingdemon_explode_018.png", "neutral_monster_explodingdemon_hit_000.png", "neutral_monster_explodingdemon_hit_001.png", "neutral_monster_explodingdemon_hit_002.png", "neutral_monster_explodingdemon_idle_000.png", "neutral_monster_explodingdemon_idle_001.png", "neutral_monster_explodingdemon_idle_002.png", "neutral_monster_explodingdemon_idle_003.png", "neutral_monster_explodingdemon_idle_004.png", "neutral_monster_explodingdemon_idle_005.png", "neutral_monster_explodingdemon_idle_006.png", "neutral_monster_explodingdemon_idle_007.png", "neutral_monster_explodingdemon_idle_008.png", "neutral_monster_explodingdemon_idle_009.png", "neutral_monster_explodingdemon_idle_010.png", "neutral_monster_explodingdemon_idle_011.png", "neutral_monster_explodingdemon_run_000.png", "neutral_monster_explodingdemon_run_001.png", "neutral_monster_explodingdemon_run_002.png", "neutral_monster_explodingdemon_run_003.png", "neutral_monster_explodingdemon_run_004.png", "neutral_monster_explodingdemon_run_005.png", "neutral_monster_explodingdemon_run_006.png", "neutral_monster_explodingdemon_run_007.png" ], "frameDIR": "assets/game/extra/units/neutral_monster_explodingdemon/", "idle" : { "frameStartEndIndices" : [ 51, 62 ], "fps" : 8, "loop" : true }, "death" : { "frameStartEndIndices" : [ 22, 28 ], "fps" : 8, "loop" : false }, "attack" : { "frameStartEndIndices" : [ 0, 7 ], "fps" : 8, "loop" : false }, "move" : { "frameStartEndIndices" : [ 63, 70 ], "fps" : 8, "loop" : true }, "channel" : { "frameStartEndIndices" : [ 8, 21 ], "fps" : 8, "loop" : true }, "hit" : { "frameStartEndIndices" : [ 48, 50 ], "fps" : 8, "loop" : false } }, "correction" : { "imgWidth" : 80, "imgHeight" : 80, "scale": 1.5, "offsetX": 0, "offsetY": 10, "spriteTopLeftX" : 0, "spriteTopLeftY" : 0, "reflected" : false } } |
@@ -0,0 +1 @@ | |||
{ "id" : 0, "animation" : "idle", "position" : { "xpos" : 0, "ypos" : 0, "tilex" : 0, "tiley" : 0 }, "animations" : { "allFrames" : [ "neutral_saberspinemk2_attack_000.png", "neutral_saberspinemk2_attack_001.png", "neutral_saberspinemk2_attack_002.png", "neutral_saberspinemk2_attack_003.png", "neutral_saberspinemk2_attack_004.png", "neutral_saberspinemk2_attack_005.png", "neutral_saberspinemk2_attack_006.png", "neutral_saberspinemk2_attack_007.png", "neutral_saberspinemk2_attack_008.png", "neutral_saberspinemk2_attack_009.png", "neutral_saberspinemk2_breathing_000.png", "neutral_saberspinemk2_breathing_001.png", "neutral_saberspinemk2_breathing_002.png", "neutral_saberspinemk2_breathing_003.png", "neutral_saberspinemk2_breathing_004.png", "neutral_saberspinemk2_breathing_005.png", "neutral_saberspinemk2_breathing_006.png", "neutral_saberspinemk2_breathing_007.png", "neutral_saberspinemk2_breathing_008.png", "neutral_saberspinemk2_breathing_009.png", "neutral_saberspinemk2_death_000.png", "neutral_saberspinemk2_death_001.png", "neutral_saberspinemk2_death_002.png", "neutral_saberspinemk2_death_003.png", "neutral_saberspinemk2_death_004.png", "neutral_saberspinemk2_death_005.png", "neutral_saberspinemk2_death_006.png", "neutral_saberspinemk2_death_007.png", "neutral_saberspinemk2_hit_000.png", "neutral_saberspinemk2_hit_001.png", "neutral_saberspinemk2_hit_002.png", "neutral_saberspinemk2_idle_000.png", "neutral_saberspinemk2_idle_001.png", "neutral_saberspinemk2_idle_002.png", "neutral_saberspinemk2_idle_003.png", "neutral_saberspinemk2_idle_004.png", "neutral_saberspinemk2_idle_005.png", "neutral_saberspinemk2_idle_006.png", "neutral_saberspinemk2_idle_007.png", "neutral_saberspinemk2_idle_008.png", "neutral_saberspinemk2_idle_009.png", "neutral_saberspinemk2_run_000.png", "neutral_saberspinemk2_run_001.png", "neutral_saberspinemk2_run_002.png", "neutral_saberspinemk2_run_003.png", "neutral_saberspinemk2_run_004.png", "neutral_saberspinemk2_run_005.png", "neutral_saberspinemk2_run_006.png", "neutral_saberspinemk2_run_007.png" ], "frameDIR": "assets/game/extra/units/neutral_saberspinemk2/", "idle" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "death" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false }, "attack" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false }, "move" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "channel" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "hit" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false } }, "correction" : { "imgWidth" : 80, "imgHeight" : 80, "scale": 1.5, "offsetX": 15, "offsetY": -5, "spriteTopLeftX" : 0, "spriteTopLeftY" : 0, "reflected" : true } } |
@@ -0,0 +1 @@ | |||
{ "id" : 0, "animation" : "idle", "position" : { "xpos" : 0, "ypos" : 0, "tilex" : 0, "tiley" : 0 }, "animations" : { "allFrames" : [ "f4_engulfingshadow_attack_000.png", "f4_engulfingshadow_attack_001.png", "f4_engulfingshadow_attack_002.png", "f4_engulfingshadow_attack_003.png", "f4_engulfingshadow_attack_004.png", "f4_engulfingshadow_attack_005.png", "f4_engulfingshadow_attack_006.png", "f4_engulfingshadow_attack_007.png", "f4_engulfingshadow_attack_008.png", "f4_engulfingshadow_attack_009.png", "f4_engulfingshadow_attack_010.png", "f4_engulfingshadow_attack_011.png", "f4_engulfingshadow_attack_012.png", "f4_engulfingshadow_breathing_000.png", "f4_engulfingshadow_breathing_001.png", "f4_engulfingshadow_breathing_002.png", "f4_engulfingshadow_breathing_003.png", "f4_engulfingshadow_breathing_004.png", "f4_engulfingshadow_breathing_005.png", "f4_engulfingshadow_breathing_006.png", "f4_engulfingshadow_breathing_007.png", "f4_engulfingshadow_breathing_008.png", "f4_engulfingshadow_breathing_009.png", "f4_engulfingshadow_breathing_010.png", "f4_engulfingshadow_breathing_011.png", "f4_engulfingshadow_breathing_012.png", "f4_engulfingshadow_breathing_013.png", "f4_engulfingshadow_death_000.png", "f4_engulfingshadow_death_001.png", "f4_engulfingshadow_death_002.png", "f4_engulfingshadow_death_003.png", "f4_engulfingshadow_death_004.png", "f4_engulfingshadow_death_005.png", "f4_engulfingshadow_death_006.png", "f4_engulfingshadow_death_007.png", "f4_engulfingshadow_death_008.png", "f4_engulfingshadow_hit_000.png", "f4_engulfingshadow_hit_001.png", "f4_engulfingshadow_hit_002.png", "f4_engulfingshadow_idle_000.png", "f4_engulfingshadow_idle_001.png", "f4_engulfingshadow_idle_002.png", "f4_engulfingshadow_idle_003.png", "f4_engulfingshadow_idle_004.png", "f4_engulfingshadow_idle_005.png", "f4_engulfingshadow_idle_006.png", "f4_engulfingshadow_idle_007.png", "f4_engulfingshadow_idle_008.png", "f4_engulfingshadow_idle_009.png", "f4_engulfingshadow_idle_010.png", "f4_engulfingshadow_idle_011.png", "f4_engulfingshadow_idle_012.png", "f4_engulfingshadow_idle_013.png", "f4_engulfingshadow_run_000.png", "f4_engulfingshadow_run_001.png", "f4_engulfingshadow_run_002.png", "f4_engulfingshadow_run_003.png", "f4_engulfingshadow_run_004.png", "f4_engulfingshadow_run_005.png" ], "frameDIR": "assets/game/extra/units/f4_engulfingshadow/", "idle" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "death" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false }, "attack" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false }, "move" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "channel" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "hit" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false } }, "correction" : { "imgWidth" : 80, "imgHeight" : 80, "scale": 1.5, "offsetX": 0, "offsetY": 10, "spriteTopLeftX" : 0, "spriteTopLeftY" : 0, "reflected" : false } } |
@@ -0,0 +1 @@ | |||
{ "id" : 0, "animation" : "idle", "position" : { "xpos" : 0, "ypos" : 0, "tilex" : 0, "tiley" : 0 }, "animations" : { "allFrames" : [ "f4_shadowdancer_attack_000.png", "f4_shadowdancer_attack_001.png", "f4_shadowdancer_attack_002.png", "f4_shadowdancer_attack_003.png", "f4_shadowdancer_attack_004.png", "f4_shadowdancer_attack_005.png", "f4_shadowdancer_attack_006.png", "f4_shadowdancer_attack_007.png", "f4_shadowdancer_attack_008.png", "f4_shadowdancer_attack_009.png", "f4_shadowdancer_attack_010.png", "f4_shadowdancer_attack_011.png", "f4_shadowdancer_breathing_000.png", "f4_shadowdancer_breathing_001.png", "f4_shadowdancer_breathing_002.png", "f4_shadowdancer_breathing_003.png", "f4_shadowdancer_breathing_004.png", "f4_shadowdancer_breathing_005.png", "f4_shadowdancer_breathing_006.png", "f4_shadowdancer_breathing_007.png", "f4_shadowdancer_breathing_008.png", "f4_shadowdancer_breathing_009.png", "f4_shadowdancer_breathing_010.png", "f4_shadowdancer_breathing_011.png", "f4_shadowdancer_breathing_012.png", "f4_shadowdancer_breathing_013.png", "f4_shadowdancer_death_000.png", "f4_shadowdancer_death_001.png", "f4_shadowdancer_death_002.png", "f4_shadowdancer_death_003.png", "f4_shadowdancer_death_004.png", "f4_shadowdancer_death_005.png", "f4_shadowdancer_death_006.png", "f4_shadowdancer_death_007.png", "f4_shadowdancer_death_008.png", "f4_shadowdancer_hit_000.png", "f4_shadowdancer_hit_001.png", "f4_shadowdancer_hit_002.png", "f4_shadowdancer_idle_000.png", "f4_shadowdancer_idle_001.png", "f4_shadowdancer_idle_002.png", "f4_shadowdancer_idle_003.png", "f4_shadowdancer_idle_004.png", "f4_shadowdancer_idle_005.png", "f4_shadowdancer_idle_006.png", "f4_shadowdancer_idle_007.png", "f4_shadowdancer_idle_008.png", "f4_shadowdancer_idle_009.png", "f4_shadowdancer_idle_010.png", "f4_shadowdancer_idle_011.png", "f4_shadowdancer_run_000.png", "f4_shadowdancer_run_001.png", "f4_shadowdancer_run_002.png", "f4_shadowdancer_run_003.png", "f4_shadowdancer_run_004.png", "f4_shadowdancer_run_005.png", "f4_shadowdancer_run_006.png", "f4_shadowdancer_run_007.png" ], "frameDIR": "assets/game/extra/units/f4_shadowdancer/", "idle" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "death" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false }, "attack" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false }, "move" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "channel" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "hit" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false } }, "correction" : { "imgWidth" : 80, "imgHeight" : 80, "scale": 1.5, "offsetX": 0, "offsetY": 10, "spriteTopLeftX" : 0, "spriteTopLeftY" : 0, "reflected" : false } } |
@@ -0,0 +1 @@ | |||
{ "id" : 0, "animation" : "idle", "position" : { "xpos" : 0, "ypos" : 0, "tilex" : 0, "tiley" : 0 }, "animations" : { "allFrames" : [ "f1_tank_attack_000.png", "f1_tank_attack_001.png", "f1_tank_attack_002.png", "f1_tank_attack_003.png", "f1_tank_attack_004.png", "f1_tank_attack_005.png", "f1_tank_attack_006.png", "f1_tank_attack_007.png", "f1_tank_attack_008.png", "f1_tank_attack_009.png", "f1_tank_attack_010.png", "f1_tank_attack_011.png", "f1_tank_attack_012.png", "f1_tank_attack_013.png", "f1_tank_attack_014.png", "f1_tank_attack_015.png", "f1_tank_attack_016.png", "f1_tank_attack_017.png", "f1_tank_attack_018.png", "f1_tank_breathing_000.png", "f1_tank_breathing_001.png", "f1_tank_breathing_002.png", "f1_tank_breathing_003.png", "f1_tank_breathing_004.png", "f1_tank_breathing_005.png", "f1_tank_breathing_006.png", "f1_tank_breathing_007.png", "f1_tank_breathing_008.png", "f1_tank_breathing_009.png", "f1_tank_breathing_010.png", "f1_tank_breathing_011.png", "f1_tank_breathing_012.png", "f1_tank_breathing_013.png", "f1_tank_death_000.png", "f1_tank_death_001.png", "f1_tank_death_002.png", "f1_tank_death_003.png", "f1_tank_death_004.png", "f1_tank_death_005.png", "f1_tank_death_006.png", "f1_tank_death_007.png", "f1_tank_death_008.png", "f1_tank_death_009.png", "f1_tank_death_010.png", "f1_tank_death_011.png", "f1_tank_hit_000.png", "f1_tank_hit_001.png", "f1_tank_hit_002.png", "f1_tank_hit_003.png", "f1_tank_hit_004.png", "f1_tank_idle_000.png", "f1_tank_idle_001.png", "f1_tank_idle_002.png", "f1_tank_idle_003.png", "f1_tank_idle_004.png", "f1_tank_idle_005.png", "f1_tank_idle_006.png", "f1_tank_idle_007.png", "f1_tank_idle_008.png", "f1_tank_idle_009.png", "f1_tank_idle_010.png", "f1_tank_run_000.png", "f1_tank_run_001.png", "f1_tank_run_002.png", "f1_tank_run_003.png", "f1_tank_run_004.png", "f1_tank_run_005.png", "f1_tank_run_006.png", "f1_tank_run_007.png" ], "frameDIR": "assets/game/extra/units/f1_tank/", "idle" : { "frameStartEndIndices" : [ 50, 60 ], "fps" : 8, "loop" : true }, "death" : { "frameStartEndIndices" : [ 33, 44 ], "fps" : 8, "loop" : false }, "attack" : { "frameStartEndIndices" : [ 0, 18 ], "fps" : 8, "loop" : false }, "move" : { "frameStartEndIndices" : [ 61, 68 ], "fps" : 8, "loop" : true }, "channel" : { "frameStartEndIndices" : [ 19, 32 ], "fps" : 8, "loop" : true }, "hit" : { "frameStartEndIndices" : [ 45, 49 ], "fps" : 8, "loop" : false } }, "correction" : { "imgWidth" : 80, "imgHeight" : 80, "scale": 1.5, "offsetX": 0, "offsetY": 10, "spriteTopLeftX" : 0, "spriteTopLeftY" : 0, "reflected" : true } } |
@@ -0,0 +1 @@ | |||
{ "id" : 0, "animation" : "idle", "position" : { "xpos" : 0, "ypos" : 0, "tilex" : 0, "tiley" : 0 }, "animations" : { "allFrames" : [ "f1_silverguardsquire_attack_000.png", "f1_silverguardsquire_attack_001.png", "f1_silverguardsquire_attack_002.png", "f1_silverguardsquire_attack_003.png", "f1_silverguardsquire_attack_004.png", "f1_silverguardsquire_attack_005.png", "f1_silverguardsquire_attack_006.png", "f1_silverguardsquire_attack_007.png", "f1_silverguardsquire_attack_008.png", "f1_silverguardsquire_attack_009.png", "f1_silverguardsquire_attack_010.png", "f1_silverguardsquire_attack_011.png", "f1_silverguardsquire_attack_012.png", "f1_silverguardsquire_breathing_000.png", "f1_silverguardsquire_breathing_001.png", "f1_silverguardsquire_breathing_002.png", "f1_silverguardsquire_breathing_003.png", "f1_silverguardsquire_breathing_004.png", "f1_silverguardsquire_breathing_005.png", "f1_silverguardsquire_breathing_006.png", "f1_silverguardsquire_breathing_007.png", "f1_silverguardsquire_breathing_008.png", "f1_silverguardsquire_breathing_009.png", "f1_silverguardsquire_breathing_010.png", "f1_silverguardsquire_breathing_011.png", "f1_silverguardsquire_breathing_012.png", "f1_silverguardsquire_breathing_013.png", "f1_silverguardsquire_death_000.png", "f1_silverguardsquire_death_001.png", "f1_silverguardsquire_death_002.png", "f1_silverguardsquire_death_003.png", "f1_silverguardsquire_death_004.png", "f1_silverguardsquire_death_005.png", "f1_silverguardsquire_death_006.png", "f1_silverguardsquire_death_007.png", "f1_silverguardsquire_death_008.png", "f1_silverguardsquire_death_009.png", "f1_silverguardsquire_death_010.png", "f1_silverguardsquire_hit_000.png", "f1_silverguardsquire_hit_001.png", "f1_silverguardsquire_hit_002.png", "f1_silverguardsquire_idle_000.png", "f1_silverguardsquire_idle_001.png", "f1_silverguardsquire_idle_002.png", "f1_silverguardsquire_idle_003.png", "f1_silverguardsquire_idle_004.png", "f1_silverguardsquire_idle_005.png", "f1_silverguardsquire_idle_006.png", "f1_silverguardsquire_idle_007.png", "f1_silverguardsquire_idle_008.png", "f1_silverguardsquire_idle_009.png", "f1_silverguardsquire_run_000.png", "f1_silverguardsquire_run_001.png", "f1_silverguardsquire_run_002.png", "f1_silverguardsquire_run_003.png", "f1_silverguardsquire_run_004.png", "f1_silverguardsquire_run_005.png", "f1_silverguardsquire_run_006.png", "f1_silverguardsquire_run_007.png" ], "frameDIR": "assets/game/extra/units/f1_silverguardsquire/", "idle" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "death" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false }, "attack" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false }, "move" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "channel" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "hit" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false } }, "correction" : { "imgWidth" : 80, "imgHeight" : 80, "scale": 1.5, "offsetX": 0, "offsetY": 10, "spriteTopLeftX" : 0, "spriteTopLeftY" : 0, "reflected" : true } } |
@@ -0,0 +1 @@ | |||
{ "id" : 0, "animation" : "idle", "position" : { "xpos" : 0, "ypos" : 0, "tilex" : 0, "tiley" : 0 }, "animations" : { "allFrames" : [ "neutral_golemrunesand_attack_000.png", "neutral_golemrunesand_attack_001.png", "neutral_golemrunesand_attack_002.png", "neutral_golemrunesand_attack_003.png", "neutral_golemrunesand_attack_004.png", "neutral_golemrunesand_attack_005.png", "neutral_golemrunesand_attack_006.png", "neutral_golemrunesand_attack_007.png", "neutral_golemrunesand_attack_008.png", "neutral_golemrunesand_attack_009.png", "neutral_golemrunesand_attack_010.png", "neutral_golemrunesand_attack_011.png", "neutral_golemrunesand_breathing_000.png", "neutral_golemrunesand_breathing_001.png", "neutral_golemrunesand_breathing_002.png", "neutral_golemrunesand_breathing_003.png", "neutral_golemrunesand_breathing_004.png", "neutral_golemrunesand_breathing_005.png", "neutral_golemrunesand_breathing_006.png", "neutral_golemrunesand_breathing_007.png", "neutral_golemrunesand_breathing_008.png", "neutral_golemrunesand_breathing_009.png", "neutral_golemrunesand_breathing_010.png", "neutral_golemrunesand_breathing_011.png", "neutral_golemrunesand_breathing_012.png", "neutral_golemrunesand_breathing_013.png", "neutral_golemrunesand_death_000.png", "neutral_golemrunesand_death_001.png", "neutral_golemrunesand_death_002.png", "neutral_golemrunesand_death_003.png", "neutral_golemrunesand_death_004.png", "neutral_golemrunesand_death_005.png", "neutral_golemrunesand_death_006.png", "neutral_golemrunesand_death_007.png", "neutral_golemrunesand_death_008.png", "neutral_golemrunesand_hit_000.png", "neutral_golemrunesand_hit_001.png", "neutral_golemrunesand_hit_002.png", "neutral_golemrunesand_idle_000.png", "neutral_golemrunesand_idle_001.png", "neutral_golemrunesand_idle_002.png", "neutral_golemrunesand_idle_003.png", "neutral_golemrunesand_idle_004.png", "neutral_golemrunesand_idle_005.png", "neutral_golemrunesand_idle_006.png", "neutral_golemrunesand_idle_007.png", "neutral_golemrunesand_idle_008.png", "neutral_golemrunesand_idle_009.png", "neutral_golemrunesand_idle_010.png", "neutral_golemrunesand_idle_011.png", "neutral_golemrunesand_idle_012.png", "neutral_golemrunesand_idle_013.png", "neutral_golemrunesand_run_000.png", "neutral_golemrunesand_run_001.png", "neutral_golemrunesand_run_002.png", "neutral_golemrunesand_run_003.png", "neutral_golemrunesand_run_004.png", "neutral_golemrunesand_run_005.png", "neutral_golemrunesand_run_006.png", "neutral_golemrunesand_run_007.png" ], "frameDIR": "assets/game/extra/units/neutral_golemrunesand/", "idle" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "death" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false }, "attack" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false }, "move" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "channel" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "hit" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false } }, "correction" : { "imgWidth" : 80, "imgHeight" : 80, "scale": 1.5, "offsetX": 0, "offsetY": 10, "spriteTopLeftX" : 0, "spriteTopLeftY" : 0, "reflected" : true } } |
@@ -0,0 +1 @@ | |||
{ "id" : 0, "animation" : "idle", "position" : { "xpos" : 0, "ypos" : 0, "tilex" : 0, "tiley" : 0 }, "animations" : { "allFrames" : [ "neutral_beastswamp_attack_000.png", "neutral_beastswamp_attack_001.png", "neutral_beastswamp_attack_002.png", "neutral_beastswamp_attack_003.png", "neutral_beastswamp_attack_004.png", "neutral_beastswamp_attack_005.png", "neutral_beastswamp_attack_006.png", "neutral_beastswamp_attack_007.png", "neutral_beastswamp_attack_008.png", "neutral_beastswamp_attack_009.png", "neutral_beastswamp_attack_010.png", "neutral_beastswamp_attack_011.png", "neutral_beastswamp_breathing_000.png", "neutral_beastswamp_breathing_001.png", "neutral_beastswamp_breathing_002.png", "neutral_beastswamp_breathing_003.png", "neutral_beastswamp_breathing_004.png", "neutral_beastswamp_breathing_005.png", "neutral_beastswamp_breathing_006.png", "neutral_beastswamp_breathing_007.png", "neutral_beastswamp_breathing_008.png", "neutral_beastswamp_breathing_009.png", "neutral_beastswamp_breathing_010.png", "neutral_beastswamp_breathing_011.png", "neutral_beastswamp_breathing_012.png", "neutral_beastswamp_breathing_013.png", "neutral_beastswamp_death_000.png", "neutral_beastswamp_death_001.png", "neutral_beastswamp_death_002.png", "neutral_beastswamp_death_003.png", "neutral_beastswamp_death_004.png", "neutral_beastswamp_death_005.png", "neutral_beastswamp_death_006.png", "neutral_beastswamp_death_007.png", "neutral_beastswamp_hit_000.png", "neutral_beastswamp_hit_001.png", "neutral_beastswamp_hit_002.png", "neutral_beastswamp_idle_000.png", "neutral_beastswamp_idle_001.png", "neutral_beastswamp_idle_002.png", "neutral_beastswamp_idle_003.png", "neutral_beastswamp_idle_004.png", "neutral_beastswamp_idle_005.png", "neutral_beastswamp_idle_006.png", "neutral_beastswamp_idle_007.png", "neutral_beastswamp_idle_008.png", "neutral_beastswamp_idle_009.png", "neutral_beastswamp_idle_010.png", "neutral_beastswamp_idle_011.png", "neutral_beastswamp_run_000.png", "neutral_beastswamp_run_001.png", "neutral_beastswamp_run_002.png", "neutral_beastswamp_run_003.png", "neutral_beastswamp_run_004.png", "neutral_beastswamp_run_005.png", "neutral_beastswamp_run_006.png", "neutral_beastswamp_run_007.png", "neutral_beastswamp_run_008.png", "neutral_beastswamp_run_009.png" ], "frameDIR": "assets/game/extra/units/neutral_beastswamp/", "idle" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "death" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false }, "attack" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false }, "move" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "channel" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "hit" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false } }, "correction" : { "imgWidth" : 80, "imgHeight" : 80, "scale": 1.5, "offsetX": 0, "offsetY": 10, "spriteTopLeftX" : 0, "spriteTopLeftY" : 0, "reflected" : true } } |
@@ -0,0 +1 @@ | |||
{ "id" : 0, "animation" : "idle", "position" : { "xpos" : 0, "ypos" : 0, "tilex" : 0, "tiley" : 0 }, "animations" : { "allFrames" : [ "f4_crawler_attack_000.png", "f4_crawler_attack_001.png", "f4_crawler_attack_002.png", "f4_crawler_attack_003.png", "f4_crawler_attack_004.png", "f4_crawler_attack_005.png", "f4_crawler_attack_006.png", "f4_crawler_attack_007.png", "f4_crawler_attack_008.png", "f4_crawler_attack_009.png", "f4_crawler_breathing_000.png", "f4_crawler_breathing_001.png", "f4_crawler_breathing_002.png", "f4_crawler_breathing_003.png", "f4_crawler_breathing_004.png", "f4_crawler_breathing_005.png", "f4_crawler_breathing_006.png", "f4_crawler_breathing_007.png", "f4_crawler_breathing_008.png", "f4_crawler_breathing_009.png", "f4_crawler_breathing_010.png", "f4_crawler_breathing_011.png", "f4_crawler_breathing_012.png", "f4_crawler_breathing_013.png", "f4_crawler_damage_000.png", "f4_crawler_damage_001.png", "f4_crawler_damage_002.png", "f4_crawler_death_000.png", "f4_crawler_death_001.png", "f4_crawler_death_002.png", "f4_crawler_death_003.png", "f4_crawler_death_004.png", "f4_crawler_death_005.png", "f4_crawler_death_006.png", "f4_crawler_death_007.png", "f4_crawler_idle_000.png", "f4_crawler_idle_001.png", "f4_crawler_idle_002.png", "f4_crawler_idle_003.png", "f4_crawler_idle_004.png", "f4_crawler_idle_005.png", "f4_crawler_idle_006.png", "f4_crawler_idle_007.png", "f4_crawler_idle_008.png", "f4_crawler_idle_009.png", "f4_crawler_idle_010.png", "f4_crawler_idle_011.png", "f4_crawler_run_000.png", "f4_crawler_run_001.png", "f4_crawler_run_002.png", "f4_crawler_run_003.png", "f4_crawler_run_004.png", "f4_crawler_run_005.png" ], "frameDIR": "assets/game/extra/units/f4_crawler/", "idle" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "death" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false }, "attack" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false }, "move" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "channel" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : true }, "hit" : { "frameStartEndIndices" : [ 0, 0 ], "fps" : 8, "loop" : false } }, "correction" : { "imgWidth" : 80, "imgHeight" : 80, "scale": 1.5, "offsetX": 0, "offsetY": 10, "spriteTopLeftX" : 0, "spriteTopLeftY" : 0, "reflected" : false } } |