Skip to content

Commit 8d47991

Browse files
committed
Added Monsters and Mazes example. Needs documentation, possibly minor cleanup.
1 parent 12d9cf8 commit 8d47991

File tree

1 file changed

+132
-0
lines changed

1 file changed

+132
-0
lines changed

MonstersAndMazes.pl

+132
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
base_score(might, 11).
2+
base_score(skill, 12).
3+
base_score(wits, 16).
4+
base_score(luck, 16).
5+
base_score(will, 13).
6+
base_score(grace, 11).
7+
8+
% Begin defining derived Predicates.
9+
attribute(might).
10+
attribute(wits).
11+
attribute(skill).
12+
attribute(luck).
13+
attribute(will).
14+
attribute(grace).
15+
16+
modifier(Attribute, Out_Mod) :-
17+
attribute(Attribute),
18+
base_score(Attribute, Score),
19+
modifier2(Score, Out_Mod).
20+
modifier2(1, -4).
21+
modifier2(2, -4).
22+
modifier2(3, -3).
23+
modifier2(4, -3).
24+
modifier2(5, -2).
25+
modifier2(6, -2).
26+
modifier2(7, -1).
27+
modifier2(8, -1).
28+
modifier2(X, 0) :- X >= 9, X =< 12.
29+
modifier2(X, 1) :- X >= 13, X =< 14.
30+
modifier2(X, 2) :- X >= 15, X =< 16.
31+
modifier2(X, 3) :- X >=17, X =< 18.
32+
modifier2(X, 4) :- X >= 19, X =< 20.
33+
34+
:- discontiguous(score/2).
35+
score(melee_score, Score) :- melee_score(Score).
36+
melee_score(Score) :-
37+
modifier(might, X),
38+
modifier(skill, Y),
39+
modifier(luck, Z),
40+
Score is X + Y + Z, !.
41+
42+
score(missile_score, Score) :- missile_score(Score).
43+
missile_score(Score) :-
44+
modifier(skill, X),
45+
modifier(wits, Y),
46+
modifier(luck, Z),
47+
Score is X + Y + Z, !.
48+
49+
score(initiative_score, Score) :- initiative_score(Score).
50+
initiative_score(Score) :-
51+
modifier(skill, X),
52+
modifier(luck, Y),
53+
Score is 10 + X + Y, !.
54+
55+
score(defense_class, Score) :- defense_class(Score).
56+
defense_class(Score) :-
57+
modifier(luck, X),
58+
armor(Y),
59+
Score is 12 + X + Y.
60+
61+
score(hits_total, Score) :- hits_total(Score).
62+
hits_total(Score) :-
63+
modifier(skill, Y),
64+
Score is 10 + Y.
65+
66+
score(effective_defense, Score) :- effective_defense(Score).
67+
effective_defense(Score) :-
68+
armor(Armor),
69+
defense_class(Defense),
70+
modifier(wits, Wits),
71+
Score is Armor + Defense + Wits.
72+
73+
score(athletic_prowess, Score) :- athletic_prowess(Score).
74+
athletic_prowess(Score) :-
75+
modifier(might, Might),
76+
modifier(skill, Skill),
77+
modifier(luck, Luck),
78+
Score is Might + Skill + Luck.
79+
80+
score(danger_evasion, Score) :- danger_evasion(Score).
81+
danger_evasion(Score) :-
82+
modifier(wits, Wits),
83+
modifier(skill, Skill),
84+
modifier(luck, Luck),
85+
Score is Wits + Skill + Luck.
86+
87+
score(mystic_fort, Score) :- mystic_fort(Score).
88+
mystic_fort(Score) :-
89+
modifier(will, Will),
90+
modifier(wits, Wits),
91+
modifier(luck, Luck),
92+
Score is Will + Wits + Luck.
93+
94+
score(physical_vigor, Score) :- physical_vigor(Score).
95+
physical_vigor(Score) :-
96+
modifier(might, Might),
97+
modifier(will, Will),
98+
modifier(luck, Luck),
99+
Score is Might + Will + Luck.
100+
101+
score(charisma, Score) :- charisma(Score).
102+
charisma(Score) :-
103+
modifier(will, Will),
104+
modifier(grace, Grace),
105+
modifier(luck, Luck),
106+
Score is Will + Grace + Luck.
107+
108+
score(thievery, Score) :- thievery(Score).
109+
thievery(Score) :-
110+
modifier(wits, Wits),
111+
modifier(luck, Luck),
112+
Score is Wits + Luck.
113+
114+
score(armor, Score) :- armor(Score).
115+
armor(Score) :-
116+
Score is 0.
117+
118+
d20_check(Type, Result) :-
119+
score(Type, Score),
120+
random_between(1, 20, Die),
121+
Result is Score + Die,
122+
!,
123+
format("Result was ~p!", Result).
124+
125+
d20_check(Type, Result, Threshold) :-
126+
d20_check(Type, Result),
127+
(Threshold =< Result,
128+
format("~n Result successful."), !) |
129+
format("~n Roll failed."), !.
130+
131+
rollables(Bag) :-
132+
findall(X, score(X, _), Bag).

0 commit comments

Comments
 (0)