Page 1 of 1

Traveller: Mongoose 2nd Ed

Posted: Mon May 16, 2016 7:44 am
by allanimal
Does anyone use MapTool for Mongoose Traveller 2nd ed?
I do, and I'm working on some very basic macros for the game.
So far I have a skill check macro, that I have shared below.
It requires that the stats & skills are included in the token properties.
Stats need an entry for "stat" and "statCurrent" - such as "Endurance" and "EnduranceCurrent".
Skills should default at -3, which I have setup in my campaign properties. I'd gladly share that as well if anyone is interested, though it is quite basic at the moment.
In addition to the player tokens, I am working on star system token properties as well, so the players can easily reference the characteristics of the star systems they have visited (and others they happen to have information on). That's proving to require much more work, as my scripts to generate the star map from my data files are not working at the moment...

I hope this helps someone out there. I'm sure there's someone else playing traveller with MapTool.

Code: Select all

[H: skillList = "Admin , Advocate , Animals [Handling] , Animals [Veterinary] , Animals [Training] , Art [Performer] , Art [Holography] , Art [Instrument] , Art [Visual Media] , Art [Write] , Astrogation , Athletics [Dexterity] , Athletics [Endurance] , Athletics [Strength] , Broker , Carouse , Deception , Diplomat , Drive [Hovercraft] , Drive [Mole] , Drive [Track] , Drive [Walker] , Drive [Wheel] , Electronics [Comms] , Electronics [Computers] , Electronics [Remote Ops] , Electronics [Sensors] , Engineer [J-drive] , Engineer [Life Support] , Engineer [M-drive] , Engineer [Power] , Explosives , Flyer [Airship] , Flyer [Grav] , Flyer [Ornithopter] , Flyer [Rotor] , Flyer [Wing] , Gambler , Gun Combat [Archaic] , Gun Combat [Energy] , Gun Combat [Slug] , Gunner [Capital] , Gunner [Ortillery] , Gunner [Screen] , Gunner [Turret] , Heavy Weapons [Artillery] , Heavy Weapons [Man Portable] , Heavy Weapons [Vehicle] , Investigate , Jack-of-All-Trades , Language [Anglic] , Language [Aslan] , Language [Oynprith] , Language [Vargr] , Language [Vilani] , Language [Zdetl] , Leadership , Mechanic , Medic , Melee [Blade] , Melee [Bludgeon] , Melee [Natural] , Melee [Unarmed] , Navigation , Persuade , Pilot [Capital Ships] , Pilot [Small Craft] , Pilot [Spacecraft] , Profession [Belter] , Profession [Biologicals] , Profession [Civil Engineering] , Profession [Construction] , Profession [Hydroponics] , Profession [Merchant] , Profession [Polymers] , Recon , Science [Archaeology] , Science [Astronomy] , Science [Biology] , Science [Chemistry] , Science [Cosmology] , Science [Cybernetics] , Science [Economics] , Science [Genetics] , Science [History] , Science [Linguistics] , Science [Philosophy] , Science [Physics] , Science [Planetology] , Science [Psionicology] , Science [Psychology] , Science [Robotics] , Science [Sophontology] , Science [Xenology] , Seafarer [Ocean Ships] , Seafarer [Personal] , Seafarer [Sail] , Seafarer [Submarine] , Stealth , Steward , Streetwise , Survival , Tactics [Military] , Tactics [Naval] , Vacc Suit , Psionic [Awareness] , Psionic [Clairvoyance] , Psionic [Telekinesis] , Psionic [Telepathy] , Psionic [Teleportation]"]
[H: statList = "Strength,Dexterity,Endurance,Intelligence,Education,Social,Psionic"]
[H: rollTypeList = "Normal,Boon,Bane"]
[H: TimingList = "Seconds,Combat Rounds,Tens of seconds,Minutes,Tens of minutes,Hours,Four hours,Tens of hours,Days"]
[H: DifficultyList = "Formidable (14+), Very Difficult (12+), Difficult (10+), Average (8+), Routine (6+), Easy (4+), Simple (2+)"]
[H: abort(input(
   strformat("input.rolltype|%{rollTypeList}|Choose Roll Type|RADIO|ORIENT=H SELECT=0"),
   strformat("input.skill|%{skillList}|Pick a skill|LIST|VALUE=STRING SELECT=40"),
   strformat("input.stat|%{statList}|Pick a stat|RADIO|VALUE=STRING SELECT=1"),
   strformat("input.difficulty|%{DifficultyList}|Pick the Difficulty|RADIO|ORIENT=V SELECT=3"),
   "input.mod|0|Additional Modifier|TEXT",
   strformat("input.DefaultTiming|%{TimingList}|Enter Defualt Timeframe|RADIO|ORIENT=H SELECT=0"),
   "input.TimeFrameShift|0|Enter Timeframe Steps Shift (- for faster, + for slower)|TEXT"
))]
[H: statValue = getProperty(input.stat)]

[H,switch(input.rolltype),code:
case 0: {
	[H: RolltypeText = "Normal Roll -"]
	[H: dieroll = 2d6]
	[H: BoonBaneExtraText = ""]
};
case 1: {
	[H: RolltypeText = "Boon Roll -"]
	[H: dieroll1 = 1d6]
	[H: dieroll2 = 1d6]
	[H: dieroll3 = 1d6]
	[H: dieroll = dieroll1+dieroll2]
	[H, if(dieroll1 < dieroll2 && dieroll1 < dieroll3) : dieroll = dieroll2+dieroll3]
	[H, if(dieroll2 < dieroll1 && dieroll2 < dieroll3) : dieroll = dieroll1+dieroll3]
	[H: BoonBaneExtraText = " || Boon Roll Dice Breakdown: " + dieroll1 + ", " + dieroll2 + ", " + dieroll3]
};
case 2: {
	[H: RolltypeText = "Bane Roll -"]
	[H: dieroll1 = 1d6]
	[H: dieroll2 = 1d6]
	[H: dieroll3 = 1d6]
	[H: dieroll = dieroll1+dieroll2]
	[H, if(dieroll1 > dieroll2 && dieroll1 > dieroll3) : dieroll = dieroll2+dieroll3]
	[H, if(dieroll2 > dieroll1 && dieroll2 > dieroll3) : dieroll = dieroll1+dieroll3]
	[H: BoonBaneExtraText = " || Bane Roll Dice Breakdown: " + dieroll1 + ", " + dieroll2 + ", " + dieroll3]
};
]

[H: skillDM = getProperty(input.skill)]
[H: CurrentStat = getProperty(input.stat+"Current")]
[H: statDM = floor((CurrentStat-6)/3)]
[H, if(CurrentStat > 0): statDM = floor((CurrentStat-6)/3) ; statDM = -3]

[H: finaltimeframe = input.DefaultTiming + input.TimeFrameShift]
<!-- deal with case where going out of bounds -->
[H, if(finaltimeframe < 0) : finaltimeframe = 0]
[H, if(finaltimeframe > 8) : finaltimeframe = 8]

[H: timingDM = 2*(finaltimeframe-input.DefaultTiming)]

[h,switch(finaltimeframe),code:
case 0: {	
	[h: timeRollMultiplier = 1]
	[h: timeFrameText = " Seconds"]
};
case 1: {	
	[h: timeRollMultiplier = 1]
	[h: timeFrameText = " Combat Rounds"]
};
case 2: {	
	[h: timeRollMultiplier = 10]
	[h: timeFrameText = " Seconds"]
};
case 3: {	
	[h: timeRollMultiplier = 1]
	[h: timeFrameText = " Minutes"]
};
case 4: {	
	[h: timeRollMultiplier = 10]
	[h: timeFrameText = " Minutes"]
};
case 5: {	
	[h: timeRollMultiplier = 1]
	[h: timeFrameText = " Hours"]
};
case 6: {	
	[h: timeRollMultiplier = 4]
	[h: timeFrameText = " Hours"]
};
case 7: {	
	[h: timeRollMultiplier = 10]
	[h: timeFrameText = " Hours"]
};
case 8: {	
	[h: timeRollMultiplier = 1]
	[h: timeFrameText = " Days"]
};
]
[H: timeroll = 1d6*timeRollMultiplier]


[h,switch(input.difficulty),code:
case 0: {	
	[h: targetRoll = 14]
	[h: difficultyText = " Formidable "]
};
case 1: {	
	[h: targetRoll = 12]
	[h: difficultyText = " Very Difficult "]
};
case 2: {	
	[h: targetRoll = 10]
	[h: difficultyText = " Difficult "]
};
case 3: {	
	[h: targetRoll = 8]
	[h: difficultyText = " Average "]
};
case 4: {	
	[h: targetRoll = 6]
	[h: difficultyText = " Routine "]
};
case 5: {	
	[h: targetRoll = 4]
	[h: difficultyText = " Easy "]
};
case 6: {	
	[h: targetRoll = 2]
	[h: difficultyText = " Simple "]
};
]

[H: sCheckTotal = dieroll+skillDM+statDM+timingDM+input.mod]
[H: effect = sCheckTotal - targetRoll]


[H: sCheck = "<b>Total: " + sCheckTotal + "</b> || <b>Effect: " + effect + "</b> || Die Roll: " + dieroll + ", Skill DM: " + skillDM + ", Stat DM: " + statDM + ", Time Shift DM: " + timingDM + ", Misc DMs: " + input.mod + " || Target: " + targetRoll + " || Time Required: " + timeroll + timeFrameText + BoonBaneExtraText]

[H: output = "<b>"+ token.name + "</b> -- <i> " + RolltypeText + difficultyText + input.skill + " (" + input.stat + ") Check</i>" + ":  " + sCheck]

[R, S, G: output ]

Re: Traveller: Mongoose 2nd Ed

Posted: Thu May 19, 2016 5:55 pm
by allanimal
I found a bug that comes up on boon/bane rolls.
Actually a player found it - rolled a boon and got 1,1,2 - due to the bug, it calculated 2 instead of the proper 3.
Even without the bug, that horrible roll ruined that character's day... :D

anyway... Here's the fix.
Swap out case 1 & 2 of this switch

Code: Select all

[H,switch(input.rolltype),code: ...
with:

Code: Select all

case 1: {
	[H: RolltypeText = "Boon Roll -"]
	[H: dieroll1 = 1d6]
	[H: dieroll2 = 1d6]
	[H: dieroll3 = 1d6]
	[H: dieroll = dieroll1+dieroll2]
	[H, if(dieroll1 <= dieroll2 && dieroll1 <= dieroll3) : dieroll = dieroll2+dieroll3]
	[H, if(dieroll2 <= dieroll1 && dieroll2 <= dieroll3) : dieroll = dieroll1+dieroll3]
	[H: BoonBaneExtraText = " || Boon Roll Dice Breakdown: " + dieroll1 + ", " + dieroll2 + ", " + dieroll3]
};
case 2: {
	[H: RolltypeText = "Bane Roll -"]
	[H: dieroll1 = 1d6]
	[H: dieroll2 = 1d6]
	[H: dieroll3 = 1d6]
	[H: dieroll = dieroll1+dieroll2]
	[H, if(dieroll1 >= dieroll2 && dieroll1 >= dieroll3) : dieroll = dieroll2+dieroll3]
	[H, if(dieroll2 >= dieroll1 && dieroll2 >= dieroll3) : dieroll = dieroll1+dieroll3]
	[H: BoonBaneExtraText = " || Bane Roll Dice Breakdown: " + dieroll1 + ", " + dieroll2 + ", " + dieroll3]
};
]

Re: Traveller: Mongoose 2nd Ed

Posted: Sat Aug 06, 2016 2:47 pm
by NoStick
Good job! Looking forward to more.

I am new to the RPToolset, but am willing to help out with Traveller related stuff!