Finish military base story arc

This commit is contained in:
Jaidyn Ann 2023-07-15 04:25:29 -05:00
parent 97550af582
commit 72c49e3c89
2 changed files with 109 additions and 23 deletions

View File

@ -32,6 +32,11 @@ That is, into MAPs :ITEMS."
(removef-entity map entity-id)))) (removef-entity map entity-id))))
(defun remove-item (map item-id)
"Given an items id, remove it from the users inventory."
(:remove-from-alistf item-id (gethash :items map)))
(defun take-item-dialogue (item-plist) (defun take-item-dialogue (item-plist)
"Return some dialogue expressing surprise/dread or whatever at the collection "Return some dialogue expressing surprise/dread or whatever at the collection
of a new item. The attributes set for the entity item should be: of a new item. The attributes set for the entity item should be:
@ -234,7 +239,6 @@ run the :USE function of the nearest entity, if it has any."
:en "AIIII! Woe is me! The Devil has come!") :en "AIIII! Woe is me! The Devil has come!")
(💬:say 'player :eo "Kvincent, Kvincent! Trankviliĝu, trankviliĝu! Estas mi!" (💬:say 'player :eo "Kvincent, Kvincent! Trankviliĝu, trankviliĝu! Estas mi!"
:en "Kvincent, Kvincent! Calm down, it's just me!") :en "Kvincent, Kvincent! Calm down, it's just me!")
(💬:say 'kvincent :eo "... bedaŭron?" (💬:say 'kvincent :eo "... bedaŭron?"
:en "... pardon?") :en "... pardon?")
(💬:face 'kvincent "@w@" "@o@") (💬:face 'kvincent "@w@" "@o@")
@ -262,8 +266,14 @@ run the :USE function of the nearest entity, if it has any."
(💬:face 'player "` `" "`o`") (💬:face 'player "` `" "`o`")
(💬:say 'player :eo "Ĉu ĉio enordas, Kvincent?" (💬:say 'player :eo "Ĉu ĉio enordas, Kvincent?"
:en "Everything alright, Kvincent?") :en "Everything alright, Kvincent?")
(💬:say 'kvincent :eo "Mi apenaŭ trovas fungojn, hodiaŭ... la dioj malbenis min!" (💬:say 'kvincent :eo "Mi iom anksias, freŝe... mi aŭdas strangajn, metalajn sonojn proksime en la montoj!"
:en "I'm hardly finding any mushrooms... I've been cursed!") :en "I'm a bit anxious, lately... I hear strange, metalic noises nearby in the mountains!")
(💬:say 'kvincent :eo "Mi iom anksias, freŝe... mi aŭdas strangajn, metalajn sonojn proksime en la montoj!"
:en "I'm a bit anxious, lately... I hear strange, metalic noises nearby in the mountains!")
(💬:say 'kvincent :eo "Estas sendube diabloj!"
:en "Without a doubt, the sounds of devils!")
(💬:say 'kvincent :eo "Kaj ankaŭ mi apenaŭ trovas fungojn, hodiaŭ... la dioj malbenis min!"
:en "Not to mention that I'm hardly finding any mushrooms... I've been cursed!")
(💬:say 'player :eo "Nek mi povas trovi florojn! Kia malfacila tago." (💬:say 'player :eo "Nek mi povas trovi florojn! Kia malfacila tago."
:en "I can't find any flowers, either! Today sucks." :en "I can't find any flowers, either! Today sucks."
:face "vov\'")))) :face "vov\'"))))
@ -422,6 +432,20 @@ run the :USE function of the nearest entity, if it has any."
:en "(This is good enough for me!)"))) :en "(This is good enough for me!)")))
(defun childhood-friend-dialogue-edelweiss (sasha)
(start-dialogue
(say sasha :eo "Ĝi iom belas, mi supozas."
:en "It's pretty, I guess.")
(say 'player :eo "Saŝa, mi komprenas vin finfine."
:en "Sasha, I think I understand you now.")
(say 'player :eo "Vi fermiĝas en vi mem, timante ke aliuloj vin vundos kaj malaprobos."
:en "You close up in yourself, afraid that others will reject you.")
(say 'player :eo "Saŝa--! Vi bezonas pli kuraĝi!"
:en "Sasha... you need to be brave!")
(say sasha :eo "... Vi afektemas, laŭkutime."
:en "... You're pretentious, as per usual.")))
(defun childhood-friend-dialogue-bracelet (map sasha) (defun childhood-friend-dialogue-bracelet (map sasha)
(append (childhood-friend-dialogue-bracelet-intro sasha) (append (childhood-friend-dialogue-bracelet-intro sasha)
(if (getf-act map :sasha-flourish) (if (getf-act map :sasha-flourish)
@ -433,8 +457,10 @@ run the :USE function of the nearest entity, if it has any."
(let ((item-id (:string->symbol (getf item-plist :id)))) (let ((item-id (:string->symbol (getf item-plist :id))))
(cond ((eq item-id 'bracelet) (cond ((eq item-id 'bracelet)
(make-dialogue-state (make-dialogue-state
map map (childhood-friend-dialogue-bracelet map entity-id)))
(childhood-friend-dialogue-bracelet map entity-id))) ((eq item-id 'neĝfloro)
(remove-item map entity-id)
(make-dialogue-state map (childhood-friend-dialogue-edelweiss entity-id)))
('t ('t
(refusal-use map item-plist entity-id))))) (refusal-use map item-plist entity-id)))))
@ -538,18 +564,20 @@ avoid triggering this."
(defun flashback-childhood-friend-interact (map entity-id) (defun flashback-childhood-friend-interact (map entity-id)
(make-dialogue-state (make-dialogue-state
map map (flashback-childhood-friend-dialogue map entity-id)))
(flashback-childhood-friend-dialogue map entity-id)))
(defun flashback-childhood-friend-use (map item-plist &optional entity-id) (defun flashback-childhood-friend-use (map item-plist &optional entity-id)
(if (eq (:string->symbol (getf item-plist :id)) 'bracelet) (let ((item-id (:string->symbol (getf item-plist :id))))
(cond ((eq item-id 'bracelet))
;; If player gives her the special bracelet, skip the dialogue intro ;; If player gives her the special bracelet, skip the dialogue intro
(make-dialogue-state (make-dialogue-state
map map (flashback-childhood-friend-dialogue-bracelet map entity-id))
(flashback-childhood-friend-dialogue-bracelet map entity-id)) ((eq item-id 'neĝfloro)
(make-dialogue-state map (childhood-friend-dialogue-edelweiss entity-id)))
('t
;; Otherwise, have her politely refuse. =w= ;; Otherwise, have her politely refuse. =w=
(refusal-use map item-plist entity-id))) (refusal-use map item-plist entity-id)))))
@ -673,6 +701,42 @@ avoid triggering this."
(list :parameters (list :map map)))) (list :parameters (list :map map))))
(defun scientist-dialogue-edelweiss (scientist)
(start-dialogue
(say 'player :eo "Jen, por vi."
:en "Here, for you.")
(say scientist :eo "... he?"
:en "... huh?")
(say 'player :eo "Estas neĝfloro, ĉu vi konas ĝian signifon?"
:en "It's an Edelweiss. Do you know what it means?")
(say 'player :eo "Signifas kuraĝon kaj bravecon."
:en "It means courage and bravery.")
(say 'player :eo "La kuraĝo fidi je viaj juĝoj..."
:en "The courage to trust your judgement...")
(say 'player :eo "... kaj braveco por ilin esprimi."
:en "... and the bravery to speak your mind.")
(face scientist "8w8" "8v8")
(say scientist :eo "Dankon, staĝanto."
:en "Thanks, intern.")
(say scientist :eo "Ĉi tio fakte tre agrablas de vi, multan, multan dankon."
:en "This was actually very kind of you, thank you so much.")
(say scientist :eo "Mi pravas... mi scias, kion mi devas fari!"
:en "I'm in the right... I know now what I have to do!")
(say scientist :en "Farewell, intern."
:eo "Adiaŭ, S-ro staĝanto.")
(move scientist '(:x 145 :y 10))))
(defun scientist-use (map item-plist &optional entity-id)
(let ((item-id (:string->symbol (getf item-plist :id))))
(cond ((eq item-id 'neĝfloro)
(setf (getf-act map :encourage-scientist) 't)
(make-dialogue-state map (scientist-dialogue-edelweiss entity-id)))
('t
;; Otherwise, have her politely refuse. =w=
(refusal-use map item-plist entity-id)))))
;;; ——————————————————————————————————— ;;; ———————————————————————————————————
;;; Base prologue: Quiet scientist ;;; Base prologue: Quiet scientist
@ -1220,8 +1284,9 @@ Initializes the current instance of the game, and such."
(defparameter *flashback-casino-map* (🌍:plist->map (metacopy:copy-thing *flashback-casino-map-plist*))) (defparameter *flashback-casino-map* (🌍:plist->map (metacopy:copy-thing *flashback-casino-map-plist*)))
(defparameter *flashback-school-map* (🌍:plist->map (metacopy:copy-thing *flashback-school-map-plist*))) (defparameter *flashback-school-map* (🌍:plist->map (metacopy:copy-thing *flashback-school-map-plist*)))
(defparameter *outdoors-map* (🌍:plist->map (metacopy:copy-thing *outdoors-map-plist*))) (defparameter *outdoors-map* (🌍:plist->map (metacopy:copy-thing *outdoors-map-plist*)))
(take-item *base-map* 'neĝfloro)
;; (make-flashback-state (alexandria:random-elt (flashbacks))))) ;; (make-flashback-state (alexandria:random-elt (flashbacks)))))
(make-overworld-state *outdoors-map*))) (make-overworld-state *base-map*)))
(defun main-menu () (defun main-menu ()

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<map version="1.10" tiledversion="1.10.1" orientation="orthogonal" renderorder="left-down" width="144" height="20" tilewidth="11" tileheight="17" infinite="0" nextlayerid="14" nextobjectid="83"> <map version="1.10" tiledversion="1.10.1" orientation="orthogonal" renderorder="left-down" width="144" height="20" tilewidth="11" tileheight="17" infinite="0" nextlayerid="14" nextobjectid="84">
<tileset firstgid="1" source="font.tsx"/> <tileset firstgid="1" source="font.tsx"/>
<layer id="4" name="Background" width="144" height="20"> <layer id="4" name="Background" width="144" height="20">
<data encoding="csv"> <data encoding="csv">
@ -72,9 +72,9 @@
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</data> </data>
@ -200,7 +200,7 @@
</object> </object>
</objectgroup> </objectgroup>
<objectgroup id="3" name="People"> <objectgroup id="3" name="People">
<object id="1" name="Player" type="Person" x="61.2883" y="182.069"> <object id="1" name="Player" type="Person" x="60.2883" y="167.569">
<properties> <properties>
<property name="facing-right" type="bool" value="true"/> <property name="facing-right" type="bool" value="true"/>
<property name="id" value="✿:player"/> <property name="id" value="✿:player"/>
@ -376,16 +376,37 @@ Se vi prokrastas la kafliveron, mi devos mortpafi vin pro perfido kontraŭ via u
</properties> </properties>
<point/> <point/>
</object> </object>
<object id="72" name="Disgruntled scientist" type="Person" x="1534.5" y="215.667"> <object id="72" name="Disgruntled scientist" type="Person" x="1470" y="215.667">
<properties> <properties>
<property name="facing-right" type="bool" value="true"/> <property name="facing-right" type="bool" value="true"/>
<property name="id" value="✿:scientist"/> <property name="id" value="✿:scientist"/>
<property name="interact" value="✿:scientist-interact"/> <property name="interact" value="✿:random-monologue-interact"/>
<property name="item-default-en" value="Oh, why thank you, but you can hold onto that."/> <property name="item-default-en" value="Oh, why thank you, but you can hold onto that."/>
<property name="item-default-eo" value="Ho, altan dankon, sed ne zorgu; vi plutenu tion."/> <property name="item-default-eo" value="Ho, altan dankon, sed ne zorgu; vi plutenu tion."/>
<property name="normal-face" value="8~8"/> <property name="normal-face" value="8~8"/>
<property name="speech-en">Hey, new guy.
Hi, intern.
</property>
<property name="speech-eo">Sal', novulo.
Sal', staĝanto nova.
</property>
<property name="talking-face" value="8o8"/> <property name="talking-face" value="8o8"/>
<property name="use" value="✿:refusal-use"/> <property name="use" value="✿:scientist-use"/>
</properties>
<point/>
</object>
<object id="83" name="Leontopodium nivale" type="Item" x="969.333" y="293.333">
<properties>
<property name="adjective-en" value="invigorating"/>
<property name="adjective-eo" value="kuraĝige"/>
<property name="avatar" value="&lt;*&gt;"/>
<property name="desc-en" value="Leontopodium nivale: Courage, daring."/>
<property name="desc-eo" value="Leontopodium nivale: Kuraĝo, bravemo.r"/>
<property name="id" value="✿:neĝfloro"/>
<property name="interact" value="✿:TAKE-ITEM-INTERACT"/>
<property name="name-en" value="Edelweiss"/>
<property name="name-eo" value="Neĝfloro"/>
<property name="use" value="✿:to-person-use"/>
</properties> </properties>
<point/> <point/>
</object> </object>