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) -> 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, } }