Fixing dialogues

This commit is contained in:
Vladislav Khorev 2026-07-05 14:48:46 +03:00
parent 8a6366098c
commit 2d8f80b675
11 changed files with 3633 additions and 6454 deletions

View File

@ -1,5 +1,395 @@
{
"objects": [
{
"name": "WashingMachine002",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
"castShadowNight": false,
"castShadow": false,
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": 0.0,
"positionZ": 0.0,
"boundsMaxX": 7.432074069976807,
"boundsMaxY": 1.0,
"boundsMaxZ": -21.8901309967041,
"boundsMinX": 6.740968227386475,
"boundsMinY": 0.0,
"boundsMinZ": -22.65306282043457,
"interactionPositionX": 7.092249870300293,
"interactionPositionY": 0.0,
"interactionPositionZ": -21.688047409057617,
"approachRadius": 0.6,
"scale": 1.0,
"interactionRadius": 0.3,
"activateFunction": "on_washing_machine1_click"
},
{
"name": "Dryer002",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
"castShadowNight": false,
"castShadow": false,
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": 0.0,
"positionZ": 0.0,
"boundsMaxX": 8.28981876373291,
"boundsMaxY": 1.0,
"boundsMaxZ": -18.923171997070313,
"boundsMinX": 7.680607795715332,
"boundsMinY": 0.0,
"boundsMinZ": -20.80185890197754,
"interactionPositionX": 7.519911766052246,
"interactionPositionY": 0.0,
"interactionPositionZ": -19.9647274017334,
"approachRadius": 0.6,
"scale": 1.0,
"interactionRadius": 0.3,
"activateFunction": "on_dryer1_click"
},
{
"name": "Toilet001",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
"castShadowNight": false,
"castShadow": false,
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": 0.0,
"positionZ": 0.0,
"boundsMaxX": 4.4593305587768555,
"boundsMaxY": 1.0,
"boundsMaxZ": -11.48042106628418,
"boundsMinX": 3.2783970832824707,
"boundsMinY": 0.0,
"boundsMinZ": -12.36163330078125,
"interactionPositionX": 3.0549540519714355,
"interactionPositionY": 0.0,
"interactionPositionZ": -11.968530654907227,
"approachRadius": 0.6,
"scale": 1.0,
"interactionRadius": 0.3,
"activateFunction": "on_toilet_click"
},
{
"name": "Sink002",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
"castShadowNight": false,
"castShadow": false,
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": 0.0,
"positionZ": 0.0,
"boundsMaxX": 5.51751184463501,
"boundsMaxY": 1.0,
"boundsMaxZ": -17.208547592163086,
"boundsMinX": 4.764839172363281,
"boundsMinY": 0.0,
"boundsMinZ": -17.795103073120117,
"interactionPositionX": 5.151419639587402,
"interactionPositionY": 0.0,
"interactionPositionZ": -17.978452682495117,
"approachRadius": 0.6,
"scale": 1.0,
"interactionRadius": 0.3,
"activateFunction": "on_sink1_click"
},
{
"name": "Sink003",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
"castShadowNight": false,
"castShadow": false,
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": 0.0,
"positionZ": 0.0,
"boundsMaxX": 3.7351462841033936,
"boundsMaxY": 1.0,
"boundsMaxZ": -17.302574157714844,
"boundsMinX": 3.01029372215271,
"boundsMinY": 0.0,
"boundsMinZ": -17.781177520751953,
"interactionPositionX": 3.375365734100342,
"interactionPositionY": 0.0,
"interactionPositionZ": -17.981727600097656,
"approachRadius": 0.6,
"scale": 1.0,
"interactionRadius": 0.3,
"activateFunction": "on_sink1_click"
},
{
"name": "Sink004",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
"castShadowNight": false,
"castShadow": false,
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": 0.0,
"positionZ": 0.0,
"boundsMaxX": -2.2296533584594727,
"boundsMaxY": 1.0,
"boundsMaxZ": -17.227062225341797,
"boundsMinX": -2.9436182975769043,
"boundsMinY": 0.0,
"boundsMinZ": -17.77179527282715,
"interactionPositionX": -2.59865665435791,
"interactionPositionY": 0.0,
"interactionPositionZ": -17.93155860900879,
"approachRadius": 0.6,
"scale": 1.0,
"interactionRadius": 0.3,
"activateFunction": "on_sink1_click"
},
{
"name": "Sink005",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
"castShadowNight": false,
"castShadow": false,
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": 0.0,
"positionZ": 0.0,
"boundsMaxX": 4.416268825531006,
"boundsMaxY": 1.0,
"boundsMaxZ": -12.791759490966797,
"boundsMinX": 3.920942783355713,
"boundsMinY": 0.0,
"boundsMinZ": -13.564033508300781,
"interactionPositionX": 3.7146787643432617,
"interactionPositionY": 0.0,
"interactionPositionZ": -13.194132804870605,
"approachRadius": 0.6,
"scale": 1.0,
"interactionRadius": 0.3,
"activateFunction": "on_sink1_click"
},
{
"name": "Shower001",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
"castShadowNight": false,
"castShadow": false,
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": 0.0,
"positionZ": 0.0,
"boundsMaxX": 2.3768115043640137,
"boundsMaxY": 2.0,
"boundsMaxZ": -11.50362777709961,
"boundsMinX": 1.2427451610565186,
"boundsMinY": 0.0,
"boundsMinZ": -12.714797973632813,
"interactionPositionX": 2.584789991378784,
"interactionPositionY": 0.0,
"interactionPositionZ": -12.181373596191406,
"approachRadius": 0.6,
"scale": 1.0,
"interactionRadius": 0.3,
"activateFunction": "on_shower_click"
},
{
"name": "Freezer001",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
"castShadowNight": false,
"castShadow": false,
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": 0.0,
"positionZ": 0.0,
"boundsMaxX": 8.604349136352539,
"boundsMaxY": 2.0,
"boundsMaxZ": -11.518025398254395,
"boundsMinX": 7.797623634338379,
"boundsMinY": 0.0,
"boundsMinZ": -12.408218383789063,
"interactionPositionX": 8.222862243652344,
"interactionPositionY": 0.0,
"interactionPositionZ": -12.581172943115234,
"approachRadius": 0.6,
"scale": 1.0,
"interactionRadius": 0.3,
"activateFunction": "on_freezer_click"
},
{
"name": "Boombox001",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
"castShadowNight": false,
"castShadow": false,
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": 0.0,
"positionZ": 0.0,
"boundsMaxX": 5.2904534339904785,
"boundsMaxY": 1.1,
"boundsMaxZ": -11.849668502807617,
"boundsMinX": 4.911247253417969,
"boundsMinY": 0.5,
"boundsMinZ": -12.062947273254395,
"interactionPositionX": 5.848934173583984,
"interactionPositionY": 0.0,
"interactionPositionZ": -12.907997131347656,
"approachRadius": 0.6,
"scale": 1.0,
"interactionRadius": 0.3,
"activateFunction": "on_boombox_click"
},
{
"name": "WashingMachine001",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
"castShadowNight": false,
"castShadow": false,
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": 0.0,
"positionZ": 0.0,
"boundsMaxX": 3.410832643508911,
"boundsMaxY": 1.0,
"boundsMaxZ": -21.889999389648438,
"boundsMinX": 2.6974430084228516,
"boundsMinY": 0.0,
"boundsMinZ": -22.696657180786133,
"interactionPositionX": 3.0979061126708984,
"interactionPositionY": 0.0,
"interactionPositionZ": -21.774076461791992,
"approachRadius": 0.6,
"scale": 1.0,
"interactionRadius": 0.3,
"activateFunction": "on_washing_machine1_click"
},
{
"name": "Shelf001",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
"castShadowNight": false,
"castShadow": false,
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": 0.0,
"positionZ": 0.0,
"boundsMaxX": 5.773579120635986,
"boundsMaxY": 2.0,
"boundsMaxZ": -16.239931106567383,
"boundsMinX": 4.579720497131348,
"boundsMinY": 0.0,
"boundsMinZ": -16.925704956054688,
"interactionPositionX": 5.092929363250732,
"interactionPositionY": 0.0,
"interactionPositionZ": -16.110231399536133,
"approachRadius": 0.6,
"scale": 1.0,
"interactionRadius": 0.3,
"activateFunction": "on_shelf_click"
},
{
"name": "Stove001",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
"castShadowNight": false,
"castShadow": false,
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": 0.0,
"positionZ": 0.0,
"boundsMaxX": -4.006306171417236,
"boundsMaxY": 1.0,
"boundsMaxZ": -17.279170989990234,
"boundsMinX": -5.884621620178223,
"boundsMinY": 0.0,
"boundsMinZ": -17.987342834472656,
"interactionPositionX": -4.4686360359191895,
"interactionPositionY": 0.0,
"interactionPositionZ": -18.25413703918457,
"approachRadius": 0.6,
"scale": 1.0,
"interactionRadius": 0.3,
"activateFunction": "on_stove1_click"
},
{
"name": "Dryer001",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
"castShadowNight": false,
"castShadow": false,
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": 0.0,
"positionZ": 0.0,
"boundsMaxX": 6.05394983291626,
"boundsMaxY": 1.0,
"boundsMaxZ": -21.59303092956543,
"boundsMinX": 4.126986980438232,
"boundsMinY": 0.0,
"boundsMinZ": -22.24971580505371,
"interactionPositionX": 5.124067783355713,
"interactionPositionY": 0.0,
"interactionPositionZ": -21.41361427307129,
"approachRadius": 0.6,
"scale": 1.0,
"interactionRadius": 0.3,
"activateFunction": "on_dryer1_click"
},
{
"name": "Sink001",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
"castShadowNight": false,
"castShadow": false,
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": 0.0,
"positionZ": 0.0,
"boundsMaxX": 7.173610687255859,
"boundsMaxY": 1.0,
"boundsMaxZ": -17.20107650756836,
"boundsMinX": 6.502869606018066,
"boundsMinY": 0.0,
"boundsMinZ": -17.762712478637695,
"interactionPositionX": 6.807286262512207,
"interactionPositionY": 0.0,
"interactionPositionZ": -17.994768142700195,
"approachRadius": 0.6,
"scale": 1.0,
"interactionRadius": 0.3,
"activateFunction": "on_sink1_click"
},
{
"name": "Door_Room_1_1_0_Leaf_001",
"texturePath": "resources/w/dorm2/interior_door_tex003.png",

File diff suppressed because it is too large Load Diff

BIN
resources/dialogue/DialogChoicePortrait001.png (Stored with Git LFS) Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -14,6 +14,7 @@ journal_picked_up = false
function on_npc_interact(npc_index)
if npc_index == 0 then
--[[
local player_alik_aware = game_api.getIntValue("alik_aware")
local player_container_aware = game_api.getIntValue("player_container_aware")
if player_container_aware == 1 then
@ -23,7 +24,9 @@ function on_npc_interact(npc_index)
game_api.setIntValue("player_container_aware", 1)
else
game_api.start_dialogue("dialog_alik001")
end
end]]
game_api.start_dialogue("dialog_alik002")
end
end
@ -240,6 +243,43 @@ function on_aiperi_dialog_over()
game_api.close_phone()
end
function on_freezer_click()
game_api.start_dialogue("dialog_freezer001")
end
function on_boombox_click()
game_api.start_dialogue("dialog_boombox001")
end
function on_washing_machine1_click()
game_api.start_dialogue("dialog_washing_machine001")
end
function on_shelf_click()
game_api.start_dialogue("dialog_shelf001")
end
function on_stove1_click()
game_api.start_dialogue("dialog_stove001")
end
function on_dryer1_click()
game_api.start_dialogue("dialog_dryer001")
end
function on_sink1_click()
game_api.start_dialogue("dialog_wash001")
end
function on_shower_click()
game_api.start_dialogue("dialog_shower001")
end
function on_toilet_click()
game_api.start_dialogue("dialog_toilet001")
end
game_api.set_location_callbacks(
function()
print("Enter location dorm")

View File

@ -498,7 +498,7 @@ namespace ZL
params_dorm.gameObjectsJsonPath = "resources/config2/gameobjects_dorm_new_x.json";
params_dorm.npcsJsonPath = "resources/config2/npcs_dorm.json";
params_dorm.dialoguesJsonPath = "resources/dialogue/dorm_dialogues.json";
params_dorm.dialoguesJsonPath = "resources/dialogue/dorm_dialogues003.json";
/*
params_dorm.navigationJsonPaths = {
@ -519,7 +519,6 @@ namespace ZL
"resources/navigation/dorm3_all_open.txt", //5
};
/*
params_dorm.navigationJsonPaths = {
"resources/navigation/dorm0_large.json",
@ -536,7 +535,6 @@ namespace ZL
params_dorm.interactiveObjectsJsonPath = "resources/config2/interactive_objects_dorm_x.json";
params_dorm.playerPosition = Eigen::Vector3f(6.76345, 0, -14.6022);
gameState.locations["location_dorm"] = std::make_shared<Location>(renderer, gameState.inventory);
gameState.locations["location_dorm"]->setup(params_dorm, &gameState.questJournal);
gameState.locations["location_dorm"]->scriptEngine.setGlobalStore(&gameState.globalInts);

View File

@ -20,6 +20,7 @@ bool DialogueOverlay::init(Renderer& renderer, const std::string& zipFile) {
textboxTexture = renderer.textureManager.LoadFromPng("resources/dialogue/textbox_bg.png", zipFile);
textboxChoiceTexture = renderer.textureManager.LoadFromPng("resources/dialogue/DialogChoice001.png", zipFile);
textboxChoicePortraitTexture = renderer.textureManager.LoadFromPng("resources/dialogue/DialogChoicePortrait001.png", zipFile);
choiceMainTexture = renderer.textureManager.LoadFromPng("resources/dialogue/ChoiceNormal001.png", zipFile);
choiceOptionalTexture = renderer.textureManager.LoadFromPng("resources/dialogue/ChoiceNormal001.png", zipFile);
@ -156,10 +157,11 @@ void DialogueOverlay::drawLandscape(Renderer& renderer, const PresentationModel&
if (model.mode == PresentationMode::Choice) {
const float choiceStartY = 270.f-35;
const float choiceHeight = 121.f*0.9;
const float choiceSpacing = -30.f;
const float choiceWidth = 913.f * 0.9;
float choiceStartY = 400.f - (choiceHeight + choiceSpacing) * (model.choices.size());
if (choiceQuads.size() < model.choices.size()) {
choiceQuads.resize(model.choices.size());
@ -213,8 +215,8 @@ void DialogueOverlay::drawPortrait(Renderer& renderer, const PresentationModel&
const float H = Environment::projectionHeight;
// Panel: DialogChoice001.png scaled to full screen width, aspect ratio preserved.
const float texAspect = static_cast<float>(textboxChoiceTexture->getWidth())
/ static_cast<float>(textboxChoiceTexture->getHeight());
const float texAspect = static_cast<float>(textboxChoicePortraitTexture->getWidth())
/ static_cast<float>(textboxChoicePortraitTexture->getHeight());
const float panelW = W;
const float panelH = panelW / texAspect;
const float clipAtBottom = 18.f;
@ -259,7 +261,7 @@ void DialogueOverlay::drawPortrait(Renderer& renderer, const PresentationModel&
renderer.LoadIdentity();
renderer.RenderUniform1f("uAlpha", 1.0f);
glBindTexture(GL_TEXTURE_2D, textboxChoiceTexture->getTexID());
glBindTexture(GL_TEXTURE_2D, textboxChoicePortraitTexture->getTexID());
renderer.DrawVertexRenderStruct(portraitPanelQuad.mesh);
if (model.portraitPath != "resources/dialogue/portrait_phone.png")

View File

@ -28,6 +28,7 @@ private:
std::shared_ptr<Texture> textboxTexture;
std::shared_ptr<Texture> textboxChoiceTexture;
std::shared_ptr<Texture> textboxChoicePortraitTexture;
std::shared_ptr<Texture> choiceMainTexture;
std::shared_ptr<Texture> choiceOptionalTexture;