71 lines
2.2 KiB
Rust
71 lines
2.2 KiB
Rust
use crate::ship::quests::{Quest, QuestList};
|
|
use crate::ship::ship::{QUEST_CATEGORY_MENU_ID, QUEST_SELECT_MENU_ID};
|
|
use libpso::packet::ship::*;
|
|
use libpso::{utf8_to_array, utf8_to_utf16_array};
|
|
|
|
|
|
pub fn quest_category_list(quests: &QuestList) -> QuestCategoryList {
|
|
let categories = quests.iter()
|
|
.enumerate()
|
|
.map(|(i, (category, _))| {
|
|
QuestCategory {
|
|
menu_id: QUEST_CATEGORY_MENU_ID,
|
|
option_id: i as u32,
|
|
name: utf8_to_utf16_array!(category.name, 32),
|
|
description: utf8_to_utf16_array!(category.description, 122),
|
|
// description: utf8_to_utf16_array!(category.description, 244),
|
|
}
|
|
})
|
|
.collect();
|
|
|
|
QuestCategoryList {
|
|
quest_categories: categories,
|
|
}
|
|
}
|
|
|
|
pub fn quest_list(category_id: u32, quests: &Vec<Quest>) -> QuestOptionList {
|
|
let quest_entries = quests.iter()
|
|
.map(|quest| {
|
|
QuestEntry {
|
|
menu_id: QUEST_SELECT_MENU_ID,
|
|
category_id: category_id as u16,
|
|
quest_id: quest.id,
|
|
name: utf8_to_utf16_array!(quest.name, 32),
|
|
description: utf8_to_utf16_array!(quest.description, 122),
|
|
// description: utf8_to_utf16_array!(quest.description, 244),
|
|
}
|
|
})
|
|
.collect();
|
|
|
|
QuestOptionList {
|
|
quests: quest_entries,
|
|
}
|
|
}
|
|
|
|
pub fn quest_detail(quest: &Quest) -> QuestDetail {
|
|
QuestDetail {
|
|
description: utf8_to_utf16_array!(quest.full_description, 288),
|
|
}
|
|
}
|
|
|
|
pub fn quest_header(quest_menu_select: &QuestMenuSelect, data_blob: &[u8], suffix: &str) -> QuestHeader {
|
|
let path = format!("{}-{}.{}", quest_menu_select.category, quest_menu_select.quest, suffix);
|
|
QuestHeader {
|
|
unknown1: [0; 0x24],
|
|
filename: utf8_to_array!(path, 16),
|
|
length: data_blob.len() as u32,
|
|
name: utf8_to_array!(path, 16),
|
|
unknown2: [0; 8],
|
|
}
|
|
}
|
|
|
|
pub fn quest_chunk(chunk_num: u32, filename: [u8; 16], blob: [u8; 0x400], blob_length: usize) -> QuestChunk {
|
|
QuestChunk {
|
|
chunk_num: chunk_num,
|
|
filename: filename,
|
|
blob: blob,
|
|
blob_length: blob_length as u32,
|
|
unknown: 0,
|
|
}
|
|
}
|