File size: 3,062 Bytes
760ff9a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
const _ = require('lodash');

const features = [
	'Astrological Botany',
	'Astrological Chemistry',
	'Biochemical Sorcery',
	'Civil Alchemy',
	'Consecrated Biochemistry',
	'Demonic Anthropology',
	'Divinatory Mineralogy',
	'Genetic Banishing',
	'Hermetic Geography',
	'Immunological Incantations',
	'Nuclear Illusionism',
	'Ritual Astronomy',
	'Seismological Divination',
	'Spiritual Biochemistry',
	'Statistical Occultism',
	'Police Necromancer',
	'Sixgun Poisoner',
	'Pharmaceutical Gunslinger',
	'Infernal Banker',
	'Spell Analyst',
	'Gunslinger Corruptor',
	'Torque Interfacer',
	'Exo Interfacer',
	'Gunpowder Torturer',
	'Orbital Gravedigger',
	'Phased Linguist',
	'Mathematical Pharmacist',
	'Plasma Outlaw',
	'Malefic Chemist',
	'Police Cultist'
];

const classnames = ['Archivist', 'Fancyman', 'Linguist', 'Fletcher',
	'Notary', 'Berserker-Typist', 'Fishmongerer', 'Manicurist', 'Haberdasher', 'Concierge'];

const levels = ['1st', '2nd', '3rd', '4th', '5th', '6th', '7th', '8th', '9th', '10th', '11th', '12th', '13th', '14th', '15th', '16th', '17th', '18th', '19th', '20th'];

const profBonus = [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6];

const getFeature = (level)=>{
	let res = [];
	if(_.includes([4, 6, 8, 12, 14, 16, 19], level+1)){
		res = ['Ability Score Improvement'];
	}
	res = _.union(res, _.sampleSize(features, _.sample([0, 1, 1, 1, 1, 1])));
	if(!res.length) return '─';
	return res.join(', ');
};

module.exports = {
	full : function(){
		const classname = _.sample(classnames);

		const maxes = [4, 3, 3, 3, 3, 2, 2, 1, 1];
		const drawSlots = function(Slots){
			let slots = Number(Slots);
			return _.times(9, function(i){
				const max = maxes[i];
				if(slots < 1) return '—';
				const res = _.min([max, slots]);
				slots -= res;
				return res;
			}).join(' | ');
		};


		let cantrips = 3;
		let spells = 1;
		let slots = 2;
		return `<div class='classTable wide'>\n##### The ${classname}\n` +
		`| Level | Proficiency Bonus | Features | Cantrips Known | Spells Known | 1st | 2nd | 3rd | 4th | 5th | 6th | 7th | 8th | 9th |\n`+
		`|:---:|:---:|:---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|\n${
			_.map(levels, function(levelName, level){
				const res = [
					levelName,
					`+${profBonus[level]}`,
					getFeature(level),
					cantrips,
					spells,
					drawSlots(slots)
				].join(' | ');

				cantrips += _.random(0, 1);
				spells += _.random(0, 1);
				slots += _.random(0, 2);

				return `| ${res} |`;
			}).join('\n')}\n</div>\n\n`;
	},

	half : function(){
		const classname =  _.sample(classnames);

		let featureScore = 1;
		return `<div class='classTable'>\n##### The ${classname}\n` +
		`| Level | Proficiency Bonus | Features | ${_.sample(features)}|\n` +
		`|:---:|:---:|:---|:---:|\n${
			_.map(levels, function(levelName, level){
				const res = [
					levelName,
					`+${profBonus[level]}`,
					getFeature(level),
					`+${featureScore}`
				].join(' | ');

				featureScore += _.random(0, 1);

				return `| ${res} |`;
			}).join('\n')}\n</div>\n\n`;
	}
};