Skip to content

[lua] [yaml] Implement Get the Picture in IF - #11237

Open
Skold177 wants to merge 1 commit into
LandSandBoat:basefrom
Skold177:Get-the-Picture
Open

[lua] [yaml] Implement Get the Picture in IF#11237
Skold177 wants to merge 1 commit into
LandSandBoat:basefrom
Skold177:Get-the-Picture

Conversation

@Skold177

@Skold177 Skold177 commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

I affirm:

  • I understand that if I do not agree to the following points by completing the checkboxes my PR will be ignored.
  • I understand I should leave resolving conversations to the LandSandBoat team so that reviewers won't miss what was said.
  • I have read and understood the Contributing Guide and the Code of Conduct.
  • I have tested my code and the things my code has changed since the last commit in the PR and will test after any later commits.

What does this pull request do?

Implements the quest "Get the Picture" in IF

This is a super long quest chain that takes about 10 real-life days to complete (because of JST Midnight waits in between each step)

The player is offered a Image Recorder and instructed to take a picture at various locations by trading a light crystal or light cluster depending on which area it is. Each location has special conditions that must be met before the trade is accepted, some are weather, some are time, and Mamook requires both (if you count clear weather)

Once you trade the crystal you will be offered 3 different vistas in the event you can choose for your picture, there is only 1 correct vista per location. (Denoted in the table as correctChoice)

Players can also trade a Aurora Crystals at some locations for a joke cutscene where the picture is evaluated but your name appears in the corner - and they can also trade Light Clusters after they complete picture number 3 where they will get a cutscene that the picture is completely white if the area does not require a Light Cluster. Areas that require a light cluster will trigger an event where the picture is too dark if a light crystal is used.

After taking a picture, you bring the image recorder back to Balakaf, if the picture is good he will thank you and reward you with an Imperial Silver Piece - if the picture is bad (wrong vista chosen, wrong crystal/cluster used) you will get the appropriate failure event and he will tell you that he needs a Ahriman Lens to repair the camera - after trading the Ahriman Lens a JST midnight starts until it's repaired.

After completing one picture, you must wait a JST Midnight to get the next request

After taking all 8 pictures the quest is completed which begins a post-quest section where after waiting a JST midnight you are told about something gold they dropped at one of the locations. After ANOTHER JST Midnight, you can pick up a Goldpiece at a random picture location (minus Mount Zhayolm) - turning in the Goldpiece finishes up the post-quest section and allows you to flag the next quest.

Captures

Quests - Toau - Get The Picture Ending Part 2
https://youtu.be/nOnwkO-oh-c
https://1drv.ms/u/c/87e665e10555c452/IQA0CtvBBcVNTauNHWXbdNv3AaoojMtOxe4zecUMbUDtxd4?e=4IHmNc

Quests - Toau - Get The Picture Ending Cs + Optional Gold Piece
https://youtu.be/xUo4A0TtPnA
https://1drv.ms/u/c/87e665e10555c452/IQCONSjj81VHR66pc-Z_xYZjAQu2CrqAadtodEVpdF3RZCA?e=W7Z3a9

Quests - Toau - Get The Picture Part 8 Caedarva Correct Picture
https://youtu.be/fERFxdowHKk
https://1drv.ms/u/c/87e665e10555c452/IQDU1MKmyr3pQad4LUQ54YP6AZXXYACmw4iR3Erp8pXtoc4?e=Za26X0

Quests - Toau - Get The Picture Part 8 Caedarva Mire Failure (Also confirmed 04:00 at least for end time)
https://youtu.be/r0zbBtG48p0
https://1drv.ms/u/c/87e665e10555c452/IQAvnJ_zf4X7TJL8EeGxrqwFAYdd4PKgCrCO29UC3SpMPe8?e=xPZQKO

Quests - Toau - Get The Picture Part 7 Mamook
https://youtu.be/YD4KD9FIhfk
https://1drv.ms/u/c/87e665e10555c452/IQBgfbTMRY_yTa5WH-qGEn_cAUrEPa3LG-2WdF7dvpKlI9g?e=fmXr9T

Quests - Toau - Get the Picture Part 6 Wajaom Woodlands
https://youtu.be/-gMxR6Ndg1Q
https://1drv.ms/u/c/87e665e10555c452/IQBvvrxNJKnuQY0QQU9bR5jJAciR67mNrRMtW0YJxfC0rsw?e=KWd1AB

Quests - Toau - Get The Picture Part 4 Mt Zhayolm Correct Picture
https://youtu.be/tAAMnpnRigk
https://1drv.ms/u/c/87e665e10555c452/IQASnjQ9qnD-RJq3E9E90MeFATv4OhxAmLBY5TtYDkDzBzQ?e=UeWPw9

Quests - Toau - Get The Picture Part 5 Halvung
https://youtu.be/lVY91idMF0o
https://1drv.ms/u/c/87e665e10555c452/IQDRx4i4KCSTQKXiMBOL4n8vAWUMREfSpDpsmJqgLX8k8WE?e=iBlMH1

Quests - Toau - Get The Picture Part 4 Mt Zhayolm Incorrect Picture
https://youtu.be/mFK-PqZTofo
https://1drv.ms/u/c/87e665e10555c452/IQAkJI8VxvHhTZFyrKqZa9apAcQUoFoeWeg4X2kfsqlhDKU?e=tpOkYZ

Quests - Toau - Get The Picture Part 4 Mt Zhayolm Test Incorrect Crystal
https://youtu.be/DxWIDXqE95Q
https://1drv.ms/u/c/87e665e10555c452/IQDkM1F53H69RbwUaiXVdO5qAV7639_8t9NJRvNf4Z50-1o?e=BXqAPh

Quests - Toau - Get The Picture Part 3 Arrapago Reef
https://youtu.be/ZQ62BEbWES4
https://1drv.ms/u/c/87e665e10555c452/IQDtZQbBF-ndQ7SgpFolzJLCAcqk2hwA8pUzjwQCjfS44kw?e=gU6gCq

Quests - Toau - Get The Picture Part 2 Arrapago Reef
https://youtu.be/zVpVkipegBM
https://1drv.ms/u/c/87e665e10555c452/IQAQrdFQDMRaQLRoMY7IRxt6AcYEScBv9JPKETGQa5ZpC5E?e=l9dJqz

Quests - Toau - Get The Picture Part 1 Wajaom
https://youtu.be/5IS1gTaF0xQ
https://1drv.ms/u/c/87e665e10555c452/IQCMP0RdXPwfTZ4j4wwzvNm3AbcIXXNXGqS2ryuf3JonAhA?e=vfLk9s

Thanks to @siknoz for the captures!

Steps to test these changes

!pos 25.505 -5.999 126.478 50 - Pick up the quest from Balakaf
!pos -450.597 -26.218 414.071 51 - Check the QM, it should read " takes in the surrounding scenery. ... The view is breathtaking"
Trade the QM a Light Crystal during Cloudy Weather (Can use !setweather)
Get the event where it shows you 3 vistas to pick from, choose option 1
!pos 25.505 -5.999 126.478 50 - Turn in the picture, get a Silver Piece

You can reset your variables with :

!setquestvar 6 4 Wait 0
!setplayervar Quest[6][4]mustZone 0

Follow the same remaining pattern for the other 7 picture requests.

-- Arrapago qm5 | Picture 2 | Light Crystal | Scene 2 | Time: Any Weather: Snow | !pos 326.021 -0.711 244.903 54
-- Arrapago qm5 | Picture 3 | Light Cluster | Scene 2 | Time: Any Weather: Snow | !pos 326.021 -0.711 244.903 54
-- Zhayolm qm11 | Picture 4 | Light Crystal | Scene 3 | Time: 16:00-20:00 Weather: Any | !pos -608.573 -10.474 -183.494 61
-- Halvung qm5 | Picture 5 | Light Crystal | Scene 1 | Time: 4:00-10:00 Weather: Any | !pos 103.016 13.999 20.867 62
-- Aydeewa qm4 | Picture 6 | Light Cluster | Scene 3 | Time: Any Weather: Wind | !pos -376.456 13.001 -424.754 68
-- Mamook qm3 | Picture 7 | Light Crystal | Scene 3 | Time: 7:00-11:00 Weather: Clear | !pos -184.948 12.547 -184.718 65
-- Caedarva qm5 | Picture 8 | Light Cluster | Scene 1 | Time: 20:00-4:00 Weather: Any | !pos -389.084 6.343 -597.228 79

Reset your wait again, get the event for the gold piece
Skip the goldpiece wait with !setquestvar 6 4 GoldWait 0
Go find the gold piece at one of the previous picture locations (Minus Mount Zhayolm)
Turn it in for the final event

@Skold177
Skold177 force-pushed the Get-the-Picture branch 3 times, most recently from 99cf7d8 to 16cd373 Compare August 24, 2026 05:39
@Skold177
Skold177 marked this pull request as draft August 24, 2026 05:44
@Skold177
Skold177 force-pushed the Get-the-Picture branch 2 times, most recently from 8dd1dd8 to 2ac1070 Compare August 24, 2026 05:49
@Skold177
Skold177 marked this pull request as ready for review August 24, 2026 05:52
@Skold177
Skold177 force-pushed the Get-the-Picture branch 5 times, most recently from de27f7a to 689dfbb Compare August 24, 2026 15:20
@Xaver-DaRed Xaver-DaRed added the hold On hold, pending further action/info label Aug 24, 2026
Comment on lines +530 to +542
local waiting = quest:getVar(player, 'Wait') == 1 or quest:getMustZone(player)

if waiting then
return quest:event(559)
elseif
quest:getVar(player, 'GoldSpot') > 0 or
quest:getVar(player, 'GoldFound') == 1
then
return quest:event(560)
else
return quest:event(559)
end
end,

@Frankie-hz Frankie-hz Aug 31, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You have two conditions triggering the same event.

Correct me if I'm wrong here (I hate quests) but maybe this instead?

    onTrigger = function(player, npc)
        if
            quest:getVar(player, 'Wait') == 0 and
            not quest:getMustZone(player) and
            (quest:getVar(player, 'GoldSpot') > 0 or quest:getVar(player, 'GoldFound') == 1)
        then
            return quest:event(560)
        end

        return quest:event(559)
    end,

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup, this works, swapped to it

end
end

local goldLocation = goldLocations[math.random(1, #goldLocations)]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nitpick: local goldLocation = utils.randomEntry(goldLocations)

{
[561] = function(player, csid, option, npc)
quest:setVar(player, 'GoldFound', 0)
quest:setVar(player, 'Option', 1)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Setting var Option but I don't see a getVar anywhere

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reworked the post quest section, now uses 'Post' var which cleans once the last event is watched

end
end

return picture.validWeather == nil or utils.contains(player:getWeather(true), picture.validWeather)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Avoid using == nil checks you can just do not:
return not picture.validWeather or utils.contains(player:getWeather(true), picture.validWeather)

local picture = getCurrentPictureRequest(player)

if
picture == nil or

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same nil check here

end
end

if lightSource == nil then

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same nil check here


if
picture == nil or
picture.acceptedItems[lightSource] == nil or

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same nil check here

-- A photo is on the recorder, Balakaf checks it and decides if it is a good photo.
if photoChoice > 0 then
local lightSource = pictureRequested.acceptedItems[quest:getVar(player, 'LightSource')]
if lightSource == nil then

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same nil check here

if
option == utils.EVENT_CANCELLED_OPTION or
choiceSelected == 0 or
lightSourceUsed == nil

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same nil check here

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All six done

@Skold177
Skold177 force-pushed the Get-the-Picture branch 2 times, most recently from 6466dd5 to 43ccb8b Compare August 31, 2026 23:32
Implements "Get the Picture" in IF with captures from Siknoz

Co-Authored-By: siknoz <78240569+siknoz@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

hold On hold, pending further action/info

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants