Git Product home page Git Product logo

xwvassal's Introduction

XWVassal

(X-Wing Vassal module and Web page for the X-Wing Vassal league in /docs/)

Distance and geometry specs:

Plastic Bases

  • Small base ship: 113 px²
  • Large base ship: 226 px²
  • GR-75 / Gozanti / C-ROC Huge ship: 226 px by 551 px
  • CR90 / Raider / ? Huge ship: 226 px by 635 px

Ranges

  • Range 1 = 282.5 px
  • Range 2 = 565.0 px
  • Range 3 = 847.5 px
  • Range 4 = 1130.0 px
  • Range 5 = 1412.5 px

1st edition

Arc Angles:

  • Small ship forward arc: 80.90 degrees
  • Large ship forward arc: 84.05 degrees
  • Large ship stardboard/port mobile turret arc: 95.95 degrees

(to help locate the coordinates of the forward arc's intersection to the forward edge) The arc lines didn't quite go to the cardboard chit corner

  • Small ship corner to intersection of forward arc to front edge: 8.3296 px
  • Large ship corner to intersection of forward arc to front edge: 11.1650 px

2nd edition

basic assumption: plastic bases are perfect squares.

Total Sizes:

  • Small = 113 px / 40.00 mm
  • Medium = 171 px / 60.50 mm
  • Large = 226 px / 80.00 mm

Cardboard Base:

  • All Chit Height = Plastic Base Height
  • Small Chit Width = 85.77% of Plastic Width / 34.31 mm / 96.92 px
  • Medium Chit Width = 88.16 % of Plastic Width / 53.35 mm / 150.75 px
  • Large Chit Width = 89.29% of Plastic Width / 71.43 mm / 201.79 px

Bullseye Arc Width:

  • Small Bullseye Arc = 36.97% of Plastic Width / 14.79 mm / 41.78 px
  • Medium Bullseye Arc = 24.65% of Plastic Width / 14.79 mm / 41.78 px
  • Large Bullseye Arc = 18.49% of Plastic Width / 14.79 mm / 41.78 px

Bullseye Arc Position:

  • Small Plastic Base Corner to Bullseye Arc Start: ??% of Plastic Width / ?? mm / 35.61 px
  • Medium Plastic Base Corner to Bullseye Arc Start: ??% of Plastic Width / 18.64 mm / 64.61 px
  • Large Plastic Base Corner to Bullseye Arc Start: ??% of Plastic Width / ?? mm / 92.11 px

Arc Angle:

  • Small ship forward arc: 81.24 degrees
  • Medium ship forward arc: 82.80 degrees
  • Large ship forward arc: 83.52 degrees

Updating the module

The current way via the autoupdater is using this repository: https://github.com/Mu0n/XWVassalOTA

The following is via using the vassal editor

Adding pilot and upgrade cards

  1. Vassal editor
  2. gradlew unpackVmod
  3. gradlew downloadXwingData
  4. push

Adding new ships with dials

  1. Vassal editor, create a ship-specific Protytpe for its actions, await Radarman5's ship art and combine it in a deep-layered photoshop file (save as png), create a new ship-specific tab in the Pieces window, create its dial
  2. create ordered, open dial+strip for the new ship here: http://xwvassal.info/dialgen/dialgen
  3. gradlew unpackVmod
  4. gradlew downloadXwingData
  5. push

The following is via using intellij

Adding code

  1. Your IDE of choice
  2. gradlew downloadXwingData
  3. gradlew buildVmod
  4. push

Adding an importable class

  1. Add it to the XWCounterFactory
  2. gradlew buildVmod
  3. Import through the Vassal editor
  4. gradlew unpackVmod

xwvassal's People

Contributors

ajmath avatar alexraubach avatar antigrapist avatar guidokessels avatar haslo avatar kelrien avatar kevbelisle avatar lhayhurst avatar mrmurphm avatar mu0n avatar uckelman avatar winstromming avatar yanlyub avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xwvassal's Issues

Squad autoSpawn button name length and location

To what should it be shortened, and should we move it to the map window toolbar instead? It already needs a map to be toggleable anyway, so why not associate it to the area where the magic occurs?

Bomb Spawner only self-deletes for owner

When a bomb spawner is told to drop a bomb, the self-delete command (passing through CTRL-D) is only done for the player interacting with the spawner. The piece will still show up for the other player. It can be deleted by that player, but it should delete for both.

Gonna need a helper to test if a fix works or not

Condition icons will trigger reposition overlap detection

Reproduce by: put a stress on a ship with shift-s
barrel roll using a keystroke like ctrl-8
the stress icon will by itself trigger an overlap on an obstacle

must investigate all potential "ship base overflow indicators" including long text, condition icons, TL icon, etc in all the spots where overlaps are detected.

Nashtah Pup Autospawn

None of the supported List Builders send in the Nashtah Pup as a pilot/ship when the Hound's Tooth title is equipped. This is somewhat intentional, as the Hound's Tooth title completely describes the effect. So XWVassal should automatically spawn the Nashtah Pup when the Hound's Tooth title is equipped. Pilot Card (with same Pilot skill as the pilot equipped to the YV-666 with the HT Title), Z95 ship, Z95 Dial, Target Lock & Focus.

Overlap detection and chatlog alert

  1. Find out why a ship overlap a ship (or ships) did not reliably work every time
  2. Extend this to obstacle overlapping for a ahip's final position
  3. decide if we detect a maneuver's overlap on an obstacle only if you spawn the token with c, or if you do it all the time
  4. anounce which ship is in range of a bomb token range finder

Better detection for asteroid

Currently, only the first few characters of the piece.getState() is scanned to see if a piece is an asteroid or debris. There should be a dynamic property for these pieces with a unique string such as "this_is_an_asteroid" so other pieces aren't detected as obstacles by mistake

Craft ID/Big Tag weird behavior, offset when autospawned

Example: Spawning Fenn Rau from a squad builder will put its craft ID tag (aka big tag) too much to the left, overlapping space outside of the ship. If you drag select it manually from the Pieces window, the tag stays within the small base with no issues.

Maneuver keyboard shortcuts don't work for some people

Ship will still move with the right click menu, but no shortcut seems to work. Other players not plagued with the problem can move the ships spawned by those who have the problem.

Already ruled out
-it's not a java version issue (happened to someone with 1.8 u131)

Module addons?

Does the X-Wing module support addons? I noticed that I can install the universal map pack and that started me wondering.

I've been building and training a neural net for list viability predictability (because this is what I do for fun 😄 ) and I was thinking about collecting match data from Vassal in addition to the tedious manual entry from watching matches on YouTube. However, I'd rather not brute force a scraping tool to read the logs if there is already an easier way to get access to them.

So, is there some kind of mechanism for reading match logs (ie an addon system) from within the module? I am admittedly a newcomer to Vassal and completely unaware of the APIs it provides (though I'm reading through the documentation now).

Vassal server on-logging announcement fetch

When you log into vassal, it could fetch 1-3 lines of announcements for events, from a single spot somewhere on the web (that we can easily maintain). We could advertise ongoing signup dates for organized play (vassal league, RXT seasons, etc.) that we know of.

Full analysis for range finding

Calculate the range and write it in the chalog whenever a ahip activates a firing arc or a target lock range finder. Difficult case: a range can be different in-arc vs corner to corner, both must be announced for sotuations where a tactician can trigger but still give you a range 1 bonus to the attacker.

Make the module able to spawn unreleased ships

During autospawn, tries to find a local piece, detects that it can't.
Scans the xws-data for faction, size. Gets a generic token (gfx needed) of the right color, with full side actions (prototype needed), constructs a dial from scratch (will need to distribute movements from code from now on).

Might be tough to properly assign tokens with it (maybe mark as experimental)
Could try to fish it from github using conventional file names, so a user could totally play without having to wait for a new module version.

Cards would follow the same pattern. Local files should be saved so as to not explode a github account bandwidth?

punishers

Tie punishers black eights spawn with PS0 and tl's spawn with ? marks.

Advanced Collision detection & place marker in code

On the plate:

  1. fully code automate the spawning of Fwd 1, Fwd 2, Bank 1 templates for barrel rolls, normal decloaks and Lorir BR so that there's
  2. bomb spawning redone in code?

all in the name of eased detection:
type 'c' on these placed pieces so they can detect if there's a ship/obstacle/mine under them

Currently, either you have a perfectly placed marker (under regular vassal) but can't detect stuff with a custom java class

OR

you can detect stuff with your class but it breaks the automatic placement (rotations are problematic)

Sarco Plank

his ship spawn at ps0
and his dial doesn't have a name

Mouse interface when you left click on ships in the map.

Proposed: CTRL-left-click will spawn a modal rectangle with buttons for "controlling" the ship - maneuvers, rolls, decloaks, boosts. semi-inspired by the x-wing benchmark

ALT-left-click will spawn a modal rectangle for "altering" the ship - stats, stress, crit, ion, blue lock

Figure out how to know from which player our custom events are made

Potential problem: an observer can come inside a game lobby and spawn lots of lists on top of an ongoing game. The vassal editor can restrict triggers and commands to a list of allowed players (players 1 to 8 are always selected in most instances) and blocks it for every other user.

This could allow us to squad spawn inside your own player window and remove yet one more prep step.

Autospawn obstacles from XWS

Since obstacles are part of the spec there is no reason why we can't load them as part of autospawn. I know that YASB is now exporting these.

Autospawn into Player Area

We should be able to detect the current player and spawn their list into their play area instead of into the map. This would also fix the issue with observers being able to spawn lists.

Automated Testing

As the complexity of the module grows, maintaining quality will be a significant issue. We should start the process of getting a unit test framework in place and automated CI builds for pull request using Travis or CircleCI. We could also use this to publish snapshot builds of the master branch to get more folks in on the pre-release testing phase.

Acceptance criteria:

  • implement unit tests covering a non-trivial part of the module ( i.e. loading vassal pieces from an XWS list object)
  • setup continuous integration to run these automated tests against the module on push to GitHub and report status on pull requests.
  • publish snapshot releases based on master for pre-release testing

Cheat warning bad triggers

Triggers if a dial pixel-overlaps a ship
Triggers if only one pixel overlaps a pixel of another dial

Those 2 have been fixed in the next WIP version

Autobump issue (I think)

Here is the uncaught exception error that Vassal kicked out.
I've also attached a screen shot of the board state.
board state

TIE number 1 had just performed the maneuver causing the overlap. This was loaded from a saved game. I believe that 1 was copied from 2, then adjusted stats on the board.

2017-03-08 11:25:59,131 [0-main] INFO VASSAL.launch.StartUp - Starting
2017-03-08 11:25:59,715 [0-main] INFO VASSAL.launch.StartUp - OS Windows 10 10.0
2017-03-08 11:25:59,715 [0-main] INFO VASSAL.launch.StartUp - Java version 1.8.0_121
2017-03-08 11:25:59,715 [0-main] INFO VASSAL.launch.StartUp - VASSAL version 3.2.17
2017-03-08 11:26:32,833 [0-AWT-EventQueue-0] INFO VASSAL.launch.ModuleManager - Manager
2017-03-08 11:34:12,368 [0-SwingWorker-pool-1024425153-thread-1] INFO VASSAL.launch.AbstractLaunchAction - Loading module file C:\Users\Jessica\Downloads\Star_Wars_X-Wing_Miniatures_Game-6.5.0.vmod
2017-03-08 11:36:15,165 [0-SwingWorker-pool-1024425153-thread-1] INFO VASSAL.launch.TilingHandler - No images to tile.
2017-03-08 11:36:20,892 [0-SwingWorker-pool-1024425153-thread-1] INFO VASSAL.launch.TilingHandler - No images to tile.
2017-03-08 11:36:22,879 [0-SwingWorker-pool-1024425153-thread-1] INFO VASSAL.launch.TilingHandler - No images to tile.
2017-03-08 11:36:22,887 [0-SwingWorker-pool-1024425153-thread-1] INFO VASSAL.launch.AbstractLaunchAction - Loading module Star Wars X-Wing Miniatures Game
2017-03-08 11:36:23,092 [0-SwingWorker-pool-1024425153-thread-1] INFO VASSAL.tools.io.ProcessLauncher - launching C:\Program Files\Java\jre1.8.0_121\bin\java -Xms256M -Xmx512M -DVASSAL.id=1 -DVASSAL.port=52497 -Duser.home=C:\Users\Jessica -Duser.dir=C:\Program Files\VASSAL-3.2.17 -cp lib\Vengine.jar VASSAL.launch.Player --load -- C:\Users\Jessica\Downloads\Star_Wars_X-Wing_Miniatures_Game-6.5.0.vmod
2017-03-08 11:37:26,715 [1-main] INFO VASSAL.launch.StartUp - Starting
2017-03-08 11:37:27,503 [1-main] INFO VASSAL.launch.StartUp - OS Windows 10 10.0
2017-03-08 11:37:27,503 [1-main] INFO VASSAL.launch.StartUp - Java version 1.8.0_121
2017-03-08 11:37:27,503 [1-main] INFO VASSAL.launch.StartUp - VASSAL version 3.2.17
2017-03-08 11:37:27,503 [1-main] INFO VASSAL.launch.Launcher - Player
2017-03-08 11:37:48,989 [1-IconFactory-preload] INFO VASSAL.tools.icon.IconFactory - VASSAL images folder found at jar:file:/C:/Program%20Files/VASSAL-3.2.17/lib/Vengine.jar!/images/
2017-03-08 11:37:49,074 [1-IconFactory-preload] INFO VASSAL.tools.icon.IconFactory - Icon family network-server created for network-server.png
2017-03-08 11:37:49,074 [1-IconFactory-preload] INFO VASSAL.tools.icon.IconFactory - Icon family go-down created for go-down.png
2017-03-08 11:37:49,074 [1-IconFactory-preload] INFO VASSAL.tools.icon.IconFactory - Icon family network-idle created for network-idle.png
2017-03-08 11:37:49,074 [1-IconFactory-preload] INFO VASSAL.tools.icon.IconFactory - Icon family VASSAL created for VASSAL.png
2017-03-08 11:37:49,074 [1-IconFactory-preload] INFO VASSAL.tools.icon.IconFactory - Icon family calculator created for calculator.png
2017-03-08 11:37:49,074 [1-IconFactory-preload] INFO VASSAL.tools.icon.IconFactory - Icon family go-up created for go-up.png
2017-03-08 11:37:49,074 [1-IconFactory-preload] INFO VASSAL.tools.icon.IconFactory - Icon family VASSAL-jabber created for VASSAL-jabber.png
2017-03-08 11:37:49,074 [1-IconFactory-preload] INFO VASSAL.tools.icon.IconFactory - Icon family jabber created for jabber.png
2017-03-08 11:37:49,074 [1-IconFactory-preload] INFO VASSAL.tools.icon.IconFactory - Icon family bug created for bug.png
2017-03-08 11:37:49,074 [1-IconFactory-preload] INFO VASSAL.tools.icon.IconFactory - Icon family yes created for yes.svg
2017-03-08 11:37:49,074 [1-IconFactory-preload] INFO VASSAL.tools.icon.IconFactory - Icon family no created for no.svg
2017-03-08 11:38:26,400 [1-AWT-EventQueue-0] WARN VASSAL.launch.BasicModule - Star Wars X-Wing Miniatures Game version 6.5.0
2017-03-08 11:38:26,716 [1-AWT-EventQueue-0] INFO VASSAL.build.module.ExtensionsLoader - Loading extension C:\Users\Jessica\Downloads\Star_Wars_X-Wing_Miniatures_Game-6.5.0_ext\HotAC_Vassal_2.1.vmdx
2017-03-08 11:38:27,247 [1-AWT-EventQueue-0] INFO VASSAL.build.module.ExtensionsLoader - Extension HotAC_Vassal_2.1 v2.1 loaded
2017-03-08 11:38:27,247 [1-AWT-EventQueue-0] INFO VASSAL.build.module.ExtensionsLoader - Loading extension C:\Users\Jessica\Downloads\Star_Wars_X-Wing_Miniatures_Game-6.5.0_ext\Universal_Map_Pack_1.0.vmdx
2017-03-08 11:38:39,129 [1-AWT-EventQueue-0] INFO VASSAL.build.module.ExtensionsLoader - Extension Universal_Map_Pack_1.0 v1.0 loaded
2017-03-08 15:18:00,111 [1-AWT-EventQueue-0] INFO VASSAL.script.ExpressionInterpreter - Attempting to load /VASSAL/script/init_expression.bsh URI generated=jar:file:/C:/Program%20Files/VASSAL-3.2.17/lib/Vengine.jar!/VASSAL/script/init_expression.bsh
2017-03-08 15:23:42,572 [1-AWT-EventQueue-0] ERROR VASSAL.tools.ErrorDialog -
java.lang.NullPointerException: null
at mic.AutoBumpDecorator.getRawShape(AutoBumpDecorator.java:380) ~[na:na]
at mic.AutoBumpDecorator.getShipCompareShape(AutoBumpDecorator.java:391) ~[na:na]
at mic.AutoBumpDecorator.getOtherShipShapes(AutoBumpDecorator.java:342) ~[na:na]
at mic.AutoBumpDecorator.keyEvent(AutoBumpDecorator.java:131) ~[na:na]
at VASSAL.counters.Decorator.keyEvent(Decorator.java:287) ~[Vengine.jar:na]
at VASSAL.counters.ReportState.keyEvent(ReportState.java:115) ~[Vengine.jar:na]
at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:162) ~[Vengine.jar:na]
at VASSAL.counters.Decorator.keyEvent(Decorator.java:286) ~[Vengine.jar:na]
at VASSAL.counters.Decorator.keyEvent(Decorator.java:286) ~[Vengine.jar:na]
at VASSAL.counters.Decorator.keyEvent(Decorator.java:286) ~[Vengine.jar:na]
at VASSAL.counters.Decorator.keyEvent(Decorator.java:286) ~[Vengine.jar:na]
at VASSAL.counters.Restricted.keyEvent(Restricted.java:198) ~[Vengine.jar:na]
at VASSAL.counters.KeyBuffer.keyCommand(KeyBuffer.java:119) ~[Vengine.jar:na]
at VASSAL.build.module.map.ForwardToKeyBuffer.process(ForwardToKeyBuffer.java:87) ~[Vengine.jar:na]
at VASSAL.build.module.map.ForwardToKeyBuffer.keyPressed(ForwardToKeyBuffer.java:60) ~[Vengine.jar:na]
at java.awt.AWTEventMulticaster.keyPressed(Unknown Source) ~[na:1.8.0_121]
at java.awt.AWTEventMulticaster.keyPressed(Unknown Source) ~[na:1.8.0_121]
at java.awt.AWTEventMulticaster.keyPressed(Unknown Source) ~[na:1.8.0_121]
at java.awt.Component.processKeyEvent(Unknown Source) ~[na:1.8.0_121]
at javax.swing.JComponent.processKeyEvent(Unknown Source) ~[na:1.8.0_121]
at java.awt.Component.processEvent(Unknown Source) ~[na:1.8.0_121]
at java.awt.Container.processEvent(Unknown Source) ~[na:1.8.0_121]
at java.awt.Component.dispatchEventImpl(Unknown Source) ~[na:1.8.0_121]
at java.awt.Container.dispatchEventImpl(Unknown Source) ~[na:1.8.0_121]
at java.awt.Component.dispatchEvent(Unknown Source) ~[na:1.8.0_121]
at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source) ~[na:1.8.0_121]
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source) ~[na:1.8.0_121]
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source) ~[na:1.8.0_121]
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source) ~[na:1.8.0_121]
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source) ~[na:1.8.0_121]
at java.awt.Component.dispatchEventImpl(Unknown Source) ~[na:1.8.0_121]
at java.awt.Container.dispatchEventImpl(Unknown Source) ~[na:1.8.0_121]
at java.awt.Window.dispatchEventImpl(Unknown Source) ~[na:1.8.0_121]
at java.awt.Component.dispatchEvent(Unknown Source) ~[na:1.8.0_121]
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) ~[na:1.8.0_121]
at java.awt.EventQueue.access$500(Unknown Source) ~[na:1.8.0_121]
at java.awt.EventQueue$3.run(Unknown Source) ~[na:1.8.0_121]
at java.awt.EventQueue$3.run(Unknown Source) ~[na:1.8.0_121]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_121]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) ~[na:1.8.0_121]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) ~[na:1.8.0_121]
at java.awt.EventQueue$4.run(Unknown Source) ~[na:1.8.0_121]
at java.awt.EventQueue$4.run(Unknown Source) ~[na:1.8.0_121]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_121]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) ~[na:1.8.0_121]
at java.awt.EventQueue.dispatchEvent(Unknown Source) ~[na:1.8.0_121]
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) [na:1.8.0_121]
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) [na:1.8.0_121]
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) [na:1.8.0_121]
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) [na:1.8.0_121]
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) [na:1.8.0_121]
at java.awt.EventDispatchThread.run(Unknown Source) [na:1.8.0_121]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.