mirror of
https://github.com/horizon-rust/horizon.git
synced 2026-11-07 17:21:49 -10:00
Merge remote-tracking branch 'origin/main' into fix/8615-vibration-particles
This commit is contained in:
commit
a729b3cfe6
112 files changed
+1065
-213
No files matched your search
@@ -608,14 +608,11 @@ pub enum Item {
|
||||
/// The Extras page: headers (language keys) and items.
|
||||
pub fn rows() -> Vec<Result<Item, &'static str>> {
|
||||
use Item::*;
|
||||
// Fullbright, Dynamic lights and Hide block-break particles change the picture: they
|
||||
// are on the graphics screen's Quality page (`graphics_ui::rows`), not here.
|
||||
let mut rows = vec![
|
||||
Err("horizon.extras.header.lighting"),
|
||||
Ok(Fullbright),
|
||||
Ok(DynamicLights),
|
||||
Err("horizon.extras.header.third_person"),
|
||||
Ok(OwnNameTag),
|
||||
Err("horizon.extras.header.particles"),
|
||||
Ok(HideBlockParticles),
|
||||
Err("horizon.extras.header.inventory"),
|
||||
Ok(MouseTweaks),
|
||||
Ok(MouseTweaksWheel),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//! Horizon's graphics settings screen: every video setting, vanilla's and
|
||||
//! Horizon's, on one list of pages (General, Quality, Performance, Advanced,
|
||||
//! HDR) with a page list beside it, a search field over it and a description
|
||||
//! Horizon's, on one list of pages (General, Quality, Performance, Shaders,
|
||||
//! Advanced, HDR) with a page list beside it, a search field over it and a description
|
||||
//! of the hovered setting with its cost. Which settings it shows, in what
|
||||
//! pages, with what description and cost, and its input live here; how it
|
||||
//! looks comes from `graphics_style`.
|
||||
@@ -24,15 +24,18 @@ pub enum Page {
|
||||
General,
|
||||
Quality,
|
||||
Performance,
|
||||
/// Shader packs, either kind (`shader_pack_list`), and what they cost.
|
||||
Shaders,
|
||||
Advanced,
|
||||
/// HDR output's own settings.
|
||||
Hdr,
|
||||
}
|
||||
impl Page {
|
||||
pub const ALL: [Page; 5] = [
|
||||
pub const ALL: [Page; 6] = [
|
||||
Page::General,
|
||||
Page::Quality,
|
||||
Page::Performance,
|
||||
Page::Shaders,
|
||||
Page::Advanced,
|
||||
Page::Hdr,
|
||||
];
|
||||
@@ -41,6 +44,7 @@ impl Page {
|
||||
Page::General => "General",
|
||||
Page::Quality => "Quality",
|
||||
Page::Performance => "Performance",
|
||||
Page::Shaders => "Shaders",
|
||||
Page::Advanced => "Advanced",
|
||||
Page::Hdr => "HDR",
|
||||
}
|
||||
@@ -51,6 +55,7 @@ impl Page {
|
||||
Page::General => "How far you see, the window and the HUD.",
|
||||
Page::Quality => "The sky and weather, lighting, textures and the image.",
|
||||
Page::Performance => "Chunk loading, culling and power use.",
|
||||
Page::Shaders => "Shader packs, Horizon's and shaders/ folder ones, and their options.",
|
||||
Page::Advanced => "How frames reach the screen, and the performance overlay.",
|
||||
Page::Hdr => "Brighter-than-white output on an HDR display.",
|
||||
}
|
||||
@@ -106,6 +111,8 @@ pub enum H {
|
||||
HdrLighting,
|
||||
BatteryMode,
|
||||
ShadowCache,
|
||||
/// Opens the shader pack list (`options_ui::Page::ShaderPacks`).
|
||||
ShaderPacks,
|
||||
GraphicsApi,
|
||||
TranslucentBatching,
|
||||
HdrSmoothGradients,
|
||||
@@ -115,6 +122,8 @@ pub enum H {
|
||||
pub enum Item {
|
||||
Vanilla(Opt),
|
||||
Horizon(H),
|
||||
/// A Horizon extra that changes the picture (`extras::Item`, kept in `horizon-extras.txt`).
|
||||
Extra(crate::extras::Item),
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
@@ -137,6 +146,14 @@ fn h(opt: H, cost: Cost, text: &'static str) -> Setting {
|
||||
text,
|
||||
}
|
||||
}
|
||||
/// An extra's row: its description is its own language key.
|
||||
fn e(item: crate::extras::Item, cost: Cost) -> Setting {
|
||||
Setting {
|
||||
item: Item::Extra(item),
|
||||
cost,
|
||||
text: item.description_key(),
|
||||
}
|
||||
}
|
||||
|
||||
/// Every page's settings, in named groups of related rows.
|
||||
pub fn rows() -> Vec<(Page, Vec<(&'static str, Vec<Setting>)>)> {
|
||||
@@ -153,11 +170,18 @@ pub fn rows() -> Vec<(Page, Vec<(&'static str, Vec<Setting>)>)> {
|
||||
vec![
|
||||
(
|
||||
"Preset",
|
||||
vec![h(
|
||||
H::Preset,
|
||||
None,
|
||||
"Sets the options below together. Changing one makes it Custom.",
|
||||
)],
|
||||
vec![
|
||||
h(
|
||||
H::Preset,
|
||||
None,
|
||||
"Sets the options below together. Changing one makes it Custom.",
|
||||
),
|
||||
v(
|
||||
Opt::Preset,
|
||||
None,
|
||||
"Vanilla's own preset: sets only vanilla's options, as Minecraft does.",
|
||||
),
|
||||
],
|
||||
),
|
||||
(
|
||||
"Distance",
|
||||
@@ -196,6 +220,16 @@ pub fn rows() -> Vec<(Page, Vec<(&'static str, Vec<Setting>)>)> {
|
||||
vec![
|
||||
v(Opt::GuiScale, None, "Size of menus and the HUD."),
|
||||
v(Opt::Fullscreen, None, "Fills the screen (borderless)."),
|
||||
v(
|
||||
Opt::ExclusiveFullscreen,
|
||||
None,
|
||||
"Fullscreen takes the display over, at the mode below.",
|
||||
),
|
||||
v(
|
||||
Opt::ExclusiveMode,
|
||||
None,
|
||||
"The display mode exclusive fullscreen uses. Applies when you leave.",
|
||||
),
|
||||
v(
|
||||
Opt::Vsync,
|
||||
None,
|
||||
@@ -211,17 +245,12 @@ pub fn rows() -> Vec<(Page, Vec<(&'static str, Vec<Setting>)>)> {
|
||||
None,
|
||||
"Lowers the frame rate when minimised, or idle too.",
|
||||
),
|
||||
v(
|
||||
Opt::Fov,
|
||||
Low,
|
||||
"Field of view. Wider shows more terrain at once.",
|
||||
),
|
||||
],
|
||||
),
|
||||
(
|
||||
"Interface",
|
||||
vec![
|
||||
v(Opt::ViewBobbing, None, "Sways the view while walking."),
|
||||
v(Opt::MenuBlur, Low, "Blurs the world behind menus."),
|
||||
v(Opt::AttackIndicator, None, "Shows attack cooldown."),
|
||||
v(Opt::Autosave, None, "Shows when the world saves."),
|
||||
],
|
||||
@@ -253,6 +282,7 @@ pub fn rows() -> Vec<(Page, Vec<(&'static str, Vec<Setting>)>)> {
|
||||
"How far rain and snow fall around you.",
|
||||
),
|
||||
v(Opt::Particles, Medium, "How many particles effects spawn."),
|
||||
e(crate::extras::Item::HideBlockParticles, None),
|
||||
],
|
||||
),
|
||||
(
|
||||
@@ -280,6 +310,8 @@ pub fn rows() -> Vec<(Page, Vec<(&'static str, Vec<Setting>)>)> {
|
||||
),
|
||||
v(Opt::Vignette, None, "Darkens the screen's edges."),
|
||||
v(Opt::ChunkFade, None, "Fades newly loaded chunks in."),
|
||||
e(crate::extras::Item::DynamicLights, Low),
|
||||
e(crate::extras::Item::Fullbright, None),
|
||||
],
|
||||
),
|
||||
(
|
||||
@@ -290,6 +322,16 @@ pub fn rows() -> Vec<(Page, Vec<(&'static str, Vec<Setting>)>)> {
|
||||
None,
|
||||
"Smaller copies of block textures for distant terrain: less shimmer.",
|
||||
),
|
||||
v(
|
||||
Opt::TextureFiltering,
|
||||
Low,
|
||||
"How textures are sampled: sharper at a slant with Anisotropic.",
|
||||
),
|
||||
v(
|
||||
Opt::MaxAnisotropy,
|
||||
Low,
|
||||
"How far Anisotropic filtering goes. Higher is sharper at a slant.",
|
||||
),
|
||||
v(
|
||||
Opt::CutoutLeaves,
|
||||
Medium,
|
||||
@@ -405,11 +447,6 @@ pub fn rows() -> Vec<(Page, Vec<(&'static str, Vec<Setting>)>)> {
|
||||
Saves,
|
||||
"Draws or drops leaf faces inside canopies. Off keeps vanilla's fancy leaves.",
|
||||
),
|
||||
h(
|
||||
H::ShadowCache,
|
||||
Saves,
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.",
|
||||
),
|
||||
],
|
||||
),
|
||||
(
|
||||
@@ -462,6 +499,24 @@ pub fn rows() -> Vec<(Page, Vec<(&'static str, Vec<Setting>)>)> {
|
||||
),
|
||||
],
|
||||
),
|
||||
(
|
||||
Page::Shaders,
|
||||
vec![(
|
||||
"Shader packs",
|
||||
vec![
|
||||
h(
|
||||
H::ShaderPacks,
|
||||
High,
|
||||
"Picks a shader pack, Horizon's or a shaders/ folder one, and sets its options.",
|
||||
),
|
||||
h(
|
||||
H::ShadowCache,
|
||||
Saves,
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.",
|
||||
),
|
||||
],
|
||||
)],
|
||||
),
|
||||
(
|
||||
Page::Advanced,
|
||||
vec![
|
||||
@@ -865,6 +920,8 @@ impl H {
|
||||
}
|
||||
H::BatteryMode => labelled("Battery Mode", on_off(g.battery)),
|
||||
H::ShadowCache => labelled("Shadow Cache", on_off(g.shadow_cache)),
|
||||
// A press across the row, as Calibrate...: the list it opens shows the pick.
|
||||
H::ShaderPacks => Text::literal(lang::get("Shader Packs...")),
|
||||
H::GraphicsApi => labelled("Graphics API", g.api.label()),
|
||||
// These two are greyed out where the device can't (`Item::blocked`): Off, as
|
||||
// they are there, while the saved value waits for a device that can.
|
||||
@@ -1068,6 +1125,10 @@ impl Item {
|
||||
Some("Only applies to asynchronous entity culling.")
|
||||
}
|
||||
Item::Horizon(H::GpuCulling) => crate::graphics::gpu_culling_offer().reason(),
|
||||
// VideoSettingsScreen.tick: Max Anisotropy only works with Anisotropic filtering.
|
||||
Item::Vanilla(Opt::MaxAnisotropy) if s.file.int("textureFiltering") != 2 => {
|
||||
Some("Only with Anisotropic texture filtering.")
|
||||
}
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
@@ -1075,7 +1136,10 @@ impl Item {
|
||||
fn steps(self, s: &Settings) -> bool {
|
||||
self.switch(s).is_none()
|
||||
&& self.slider(s).is_none()
|
||||
&& !matches!(self, Item::Horizon(H::HdrKey | H::HdrCalibrate))
|
||||
&& !matches!(
|
||||
self,
|
||||
Item::Horizon(H::HdrKey | H::HdrCalibrate | H::ShaderPacks)
|
||||
)
|
||||
}
|
||||
/// On/off settings and their value.
|
||||
pub fn switch(self, s: &Settings) -> Option<bool> {
|
||||
@@ -1108,9 +1172,10 @@ impl Item {
|
||||
Item::Horizon(H::HdrSmoothGradients) => {
|
||||
g.hdr_smooth_gradients && crate::graphics::smooth_gradients_offered()
|
||||
}
|
||||
Item::Vanilla(Opt::ViewBobbing) => s.view_bobbing,
|
||||
Item::Vanilla(Opt::Vsync) => s.vsync,
|
||||
Item::Extra(e) => return e.switch(&s.extras),
|
||||
Item::Vanilla(Opt::Fullscreen) => s.fullscreen,
|
||||
Item::Vanilla(Opt::ExclusiveFullscreen) => s.file.bool("exclusiveFullscreen"),
|
||||
Item::Vanilla(Opt::SmoothLighting) => s.smooth_lighting,
|
||||
Item::Vanilla(Opt::EntityShadows) => s.entity_shadows,
|
||||
Item::Vanilla(Opt::Vignette) => s.vignette,
|
||||
@@ -1124,6 +1189,7 @@ impl Item {
|
||||
match self {
|
||||
Item::Vanilla(o) => o.slider_position(s),
|
||||
Item::Horizon(h) => h.slider(s),
|
||||
Item::Extra(_) => None,
|
||||
}
|
||||
}
|
||||
pub fn label(self, s: &Settings) -> Text {
|
||||
@@ -1134,6 +1200,10 @@ impl Item {
|
||||
),
|
||||
Item::Vanilla(o) => o.label(s),
|
||||
Item::Horizon(h) => h.label(s),
|
||||
Item::Extra(e) => Text::option_name_value(
|
||||
Text::literal(e.caption_text()),
|
||||
Text::literal(e.value(&s.extras)),
|
||||
),
|
||||
}
|
||||
}
|
||||
pub fn set_slider(self, s: &mut Settings, v: f32) {
|
||||
@@ -1141,8 +1211,10 @@ impl Item {
|
||||
return;
|
||||
}
|
||||
match self {
|
||||
Item::Vanilla(o) => o.set_slider(s, v),
|
||||
// Options.applyGraphicsPreset, as Video Settings' slider does it.
|
||||
Item::Vanilla(o) => crate::options_ui::set_slider(o, s, v),
|
||||
Item::Horizon(h) => h.set_slider(s, v),
|
||||
Item::Extra(_) => {}
|
||||
}
|
||||
self.touched(s);
|
||||
}
|
||||
@@ -1153,6 +1225,7 @@ impl Item {
|
||||
match self {
|
||||
Item::Vanilla(o) => o.cycle(s, back, framebuffer),
|
||||
Item::Horizon(h) => h.cycle(s, back),
|
||||
Item::Extra(e) => e.cycle(&mut s.extras, back),
|
||||
}
|
||||
self.touched(s);
|
||||
}
|
||||
@@ -1160,36 +1233,39 @@ impl Item {
|
||||
fn touched(self, s: &mut Settings) {
|
||||
let presetless = matches!(
|
||||
self,
|
||||
Item::Horizon(
|
||||
H::Preset
|
||||
| H::BlueMapAutoDetect
|
||||
| H::BlueMapRadius
|
||||
| H::Overlay
|
||||
| H::ScreenshotQuality
|
||||
| H::Pacing
|
||||
| H::PresentMode
|
||||
| H::Workers
|
||||
| H::FrameGeneration
|
||||
| H::BatteryMode
|
||||
| H::ShadowCache
|
||||
| H::GraphicsApi
|
||||
| H::TranslucentBatching
|
||||
| H::HdrSmoothGradients
|
||||
| H::GpuCulling
|
||||
) | Item::Vanilla(
|
||||
Opt::GuiScale
|
||||
| Opt::Fullscreen
|
||||
| Opt::Vsync
|
||||
| Opt::MaxFps
|
||||
| Opt::Fov
|
||||
| Opt::Gamma
|
||||
| Opt::InactivityFps
|
||||
| Opt::ViewBobbing
|
||||
| Opt::ChunkFade
|
||||
| Opt::Vignette
|
||||
| Opt::Autosave
|
||||
| Opt::AttackIndicator
|
||||
)
|
||||
Item::Extra(_)
|
||||
| Item::Horizon(
|
||||
H::Preset
|
||||
| H::BlueMapAutoDetect
|
||||
| H::BlueMapRadius
|
||||
| H::Overlay
|
||||
| H::ScreenshotQuality
|
||||
| H::Pacing
|
||||
| H::PresentMode
|
||||
| H::Workers
|
||||
| H::FrameGeneration
|
||||
| H::BatteryMode
|
||||
| H::ShadowCache
|
||||
| H::GraphicsApi
|
||||
| H::TranslucentBatching
|
||||
| H::HdrSmoothGradients
|
||||
| H::GpuCulling
|
||||
)
|
||||
| Item::Vanilla(
|
||||
Opt::GuiScale
|
||||
| Opt::Fullscreen
|
||||
| Opt::ExclusiveFullscreen
|
||||
| Opt::ExclusiveMode
|
||||
| Opt::Vsync
|
||||
| Opt::MaxFps
|
||||
| Opt::Gamma
|
||||
| Opt::InactivityFps
|
||||
| Opt::MenuBlur
|
||||
| Opt::ChunkFade
|
||||
| Opt::Vignette
|
||||
| Opt::Autosave
|
||||
| Opt::AttackIndicator
|
||||
)
|
||||
);
|
||||
if !presetless {
|
||||
s.horizon.preset = Preset::Custom;
|
||||
@@ -1199,6 +1275,7 @@ impl Item {
|
||||
match self {
|
||||
Item::Vanilla(o) => o.slider_steps(),
|
||||
Item::Horizon(h) => h.slider_steps(),
|
||||
Item::Extra(_) => None,
|
||||
}
|
||||
}
|
||||
pub fn step_slider(self, s: &mut Settings, forward: bool, width: f32) {
|
||||
@@ -1224,6 +1301,8 @@ pub enum Action {
|
||||
BindKey(&'static str),
|
||||
/// Start HDR calibration.
|
||||
Calibrate,
|
||||
/// Open the shader pack list.
|
||||
ShaderPacks,
|
||||
Done,
|
||||
}
|
||||
|
||||
@@ -1299,6 +1378,10 @@ impl GraphicsUi {
|
||||
pub(crate) fn scroll_amount(&self) -> f32 {
|
||||
self.scroll.amount
|
||||
}
|
||||
/// The page the plate shows while nothing is searched.
|
||||
pub fn page(&self) -> Page {
|
||||
self.page
|
||||
}
|
||||
/// The screen opens, at `page`.
|
||||
pub fn open(&mut self, page: Page) {
|
||||
*self = Self {
|
||||
@@ -1424,8 +1507,10 @@ impl GraphicsUi {
|
||||
s.vsync = b.vsync;
|
||||
s.max_fps = b.max_fps;
|
||||
s.inactivity_fps_limit = b.inactivity_fps_limit.clone();
|
||||
s.fov = b.fov;
|
||||
s.view_bobbing = b.view_bobbing;
|
||||
s.menu_blur = b.menu_blur;
|
||||
s.extras.fullbright = b.extras.fullbright;
|
||||
s.extras.dynamic_lights = b.extras.dynamic_lights;
|
||||
s.extras.hide_block_particles = b.extras.hide_block_particles;
|
||||
s.attack_indicator = b.attack_indicator;
|
||||
s.autosave_indicator = b.autosave_indicator;
|
||||
s.clouds = b.clouds.clone();
|
||||
@@ -1444,6 +1529,17 @@ impl GraphicsUi {
|
||||
s.prioritize_chunk_updates = b.prioritize_chunk_updates;
|
||||
// Presets set it beside the options above.
|
||||
s.graphics_preset = b.graphics_preset.clone();
|
||||
// The vanilla rows options.txt keeps as it read them.
|
||||
for key in [
|
||||
"exclusiveFullscreen",
|
||||
"textureFiltering",
|
||||
"maxAnisotropyBit",
|
||||
] {
|
||||
if let Some(value) = b.file.get(key) {
|
||||
s.file.set(key, value.clone());
|
||||
}
|
||||
}
|
||||
s.file.fullscreen_resolution = b.file.fullscreen_resolution.clone();
|
||||
self.changed = false;
|
||||
}
|
||||
|
||||
@@ -1713,6 +1809,7 @@ impl GraphicsUi {
|
||||
vec![Action::ButtonClick, Action::Changed]
|
||||
}
|
||||
Item::Horizon(H::HdrCalibrate) => vec![Action::ButtonClick, Action::Calibrate],
|
||||
Item::Horizon(H::ShaderPacks) => vec![Action::ButtonClick, Action::ShaderPacks],
|
||||
Item::Horizon(H::HdrKey) => {
|
||||
vec![
|
||||
Action::ButtonClick,
|
||||
@@ -2112,7 +2209,7 @@ mod tests {
|
||||
let mut ui = GraphicsUi::default();
|
||||
let cols = Columns::of(size.0, size.1);
|
||||
assert!((cols.bottom - cols.top) / style::ROW >= 5.0);
|
||||
let [x, y, w, h] = cols.page(4);
|
||||
let [x, y, w, h] = cols.page(Page::ALL.len() - 1);
|
||||
assert!(y >= 0.0 && x + w <= size.0);
|
||||
// Undo, over Done, stays clear of the page list.
|
||||
assert!(cols.button(1)[1] >= y + h);
|
||||
@@ -2170,7 +2267,7 @@ mod tests {
|
||||
.is_some_and(|r| r.item == Item::Vanilla(Opt::Vsync))
|
||||
}));
|
||||
ui.search.set_value("hdr");
|
||||
let [x, y, w, h] = cols.page(4);
|
||||
let [x, y, w, h] = cols.page(Page::ALL.len() - 1);
|
||||
press(&mut ui, &mut s, (x + w / 2.0, y + h / 2.0));
|
||||
assert_eq!(ui.current(&ui.lines(&s).0), Some(Page::Hdr));
|
||||
let [x, y, ..] = cols.clear();
|
||||
@@ -2370,19 +2467,58 @@ mod tests {
|
||||
assert!(!ui.scroll.held());
|
||||
}
|
||||
|
||||
/// The rows only vanilla's Video Settings had work here as they do there: its preset
|
||||
/// applies its distances (`Options.applyGraphicsPreset`), Max Anisotropy waits for
|
||||
/// Anisotropic filtering, Exclusive Fullscreen is a tick box of `options.txt`.
|
||||
#[test]
|
||||
fn vanilla_video_rows_work_on_the_graphics_screen() {
|
||||
let mut s = Settings::default();
|
||||
let preset = Item::Vanilla(Opt::Preset);
|
||||
preset.set_slider(&mut s, 0.0);
|
||||
assert_eq!(
|
||||
(s.graphics_preset.as_str(), s.render_distance, s.cloud_range),
|
||||
("fast", 8, 32)
|
||||
);
|
||||
preset.set_slider(&mut s, 2.0 / 3.0);
|
||||
assert_eq!(
|
||||
(s.graphics_preset.as_str(), s.render_distance, s.cloud_range),
|
||||
("fabulous", 32, 128)
|
||||
);
|
||||
let anisotropy = Item::Vanilla(Opt::MaxAnisotropy);
|
||||
let filtering = Item::Vanilla(Opt::TextureFiltering);
|
||||
while s.file.int("textureFiltering") == 2 {
|
||||
filtering.cycle(&mut s, false, FB);
|
||||
}
|
||||
assert!(anisotropy.blocked(&s).is_some());
|
||||
while s.file.int("textureFiltering") != 2 {
|
||||
filtering.cycle(&mut s, false, FB);
|
||||
}
|
||||
assert!(anisotropy.blocked(&s).is_none());
|
||||
let exclusive = Item::Vanilla(Opt::ExclusiveFullscreen);
|
||||
assert_eq!(exclusive.switch(&s), Some(false));
|
||||
exclusive.cycle(&mut s, false, FB);
|
||||
assert_eq!(exclusive.switch(&s), Some(true));
|
||||
assert!(s.file.bool("exclusiveFullscreen"));
|
||||
// The graphics extras switch their own setting.
|
||||
let lights = Item::Extra(crate::extras::Item::DynamicLights);
|
||||
lights.cycle(&mut s, false, FB);
|
||||
assert!(s.extras.dynamic_lights);
|
||||
assert_eq!(lights.switch(&s), Some(true));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn the_wheel_scrolls_and_stops_at_both_ends_without_changing_values() {
|
||||
let mut s = Settings::default();
|
||||
let mut ui = GraphicsUi::default();
|
||||
s.fov = 90.0;
|
||||
let fov = row(&mut ui, &s, Item::Vanilla(Opt::Fov));
|
||||
s.gamma = 0.25;
|
||||
let gamma = row(&mut ui, &s, Item::Vanilla(Opt::Gamma));
|
||||
// A slider being changed doesn't take the wheel either: a controller scrolls with it.
|
||||
press(&mut ui, &mut s, (fov[0] + 4.0, fov[1] + 4.0));
|
||||
press(&mut ui, &mut s, (gamma[0] + 4.0, gamma[1] + 4.0));
|
||||
assert!(ui.can_change_value);
|
||||
let before = ui.scroll.amount;
|
||||
ui.scroll(&s, SIZE, -1.0);
|
||||
assert_eq!(ui.scroll.amount, before + 18.0);
|
||||
assert_eq!(s.fov, 90.0);
|
||||
assert_eq!(s.gamma, 0.25);
|
||||
let (cols, _, content) = ui.layout(&s, SIZE.0, SIZE.1);
|
||||
ui.scroll(&s, SIZE, -1000.0);
|
||||
assert_eq!(ui.scroll.amount, content - (cols.bottom - cols.top));
|
||||
|
||||
@@ -2305,6 +2305,12 @@ impl OptionsUi {
|
||||
self.calibration = Some(crate::hdr_calibration::Calibration::new(s));
|
||||
self.push(Page::HdrCalibration);
|
||||
}
|
||||
// The Shaders page's Shader Packs...: the list of either kind, as the page
|
||||
// opens it from anywhere.
|
||||
Action::ShaderPacks => {
|
||||
events.push(Event::ListShaderPacks);
|
||||
self.push(Page::ShaderPacks);
|
||||
}
|
||||
Action::Done => events.extend(self.back(s)),
|
||||
}
|
||||
}
|
||||
@@ -2337,6 +2343,11 @@ impl OptionsUi {
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
/// Whether a video settings screen is open, Horizon's or vanilla's: the fullscreen mode
|
||||
/// waits for it to close, and Ctrl with the wheel steps the GUI scale.
|
||||
pub fn video_open(&self) -> bool {
|
||||
self.page() == Page::Video || Self::graphics_page(self.page()).is_some()
|
||||
}
|
||||
/// Whether the controller screen is open: a controller button pressed now may bind.
|
||||
pub fn controller_open(&self) -> bool {
|
||||
Self::controller_page(self.page()).is_some()
|
||||
@@ -2507,20 +2518,13 @@ impl OptionsUi {
|
||||
widget
|
||||
}
|
||||
};
|
||||
// The PvP preset first; on the Extras page beside the way to the PvP & HUD page.
|
||||
// PvP & HUD opens with its preset; Extras doesn't repeat it, nor the way there
|
||||
// (Horizon Settings has it).
|
||||
let preset = button(0.0, 0.0, 150.0, tr("horizon.pvp.preset"), Act::PvpPreset);
|
||||
let mut rows = vec![Row::Buttons(
|
||||
preset,
|
||||
(self.page() == Page::Extras).then(|| {
|
||||
button(
|
||||
0.0,
|
||||
0.0,
|
||||
150.0,
|
||||
tr("horizon.pages.open.pvp"),
|
||||
Act::Push(Page::Pvp),
|
||||
)
|
||||
}),
|
||||
)];
|
||||
let mut rows = Vec::new();
|
||||
if self.page() == Page::Pvp {
|
||||
rows.push(Row::Buttons(preset, None));
|
||||
}
|
||||
let mut section = Vec::new();
|
||||
let flush = |rows: &mut Vec<Row>, section: &mut Vec<crate::extras::Item>| {
|
||||
rows.extend(
|
||||
@@ -2551,24 +2555,15 @@ impl OptionsUi {
|
||||
}
|
||||
Page::Horizon => {
|
||||
// Two to a row, as vanilla's OptionsList.addSmall lays out
|
||||
// buttons; each opens one of Horizon's settings pages.
|
||||
// buttons; each opens one of Horizon's settings pages. Each page has
|
||||
// one way in: graphics and shader packs are Video Settings' (the graphics
|
||||
// screen), the controller is Controls', mods are the Options screen's.
|
||||
let open =
|
||||
|key: &str, page: Page| button(0.0, 0.0, 150.0, tr(key), Act::Push(page));
|
||||
vec![
|
||||
Row::Buttons(
|
||||
open("horizon.pages.open.graphics", Page::Graphics),
|
||||
Some(open(
|
||||
"horizon.pages.open.graphics_advanced",
|
||||
Page::GraphicsAdvanced,
|
||||
)),
|
||||
),
|
||||
Row::Buttons(
|
||||
open("horizon.pages.open.shader_packs", Page::ShaderPacks),
|
||||
Some(open("horizon.pages.open.controller", Page::Controller)),
|
||||
),
|
||||
Row::Buttons(
|
||||
open("horizon.pages.open.extras", Page::Extras),
|
||||
Some(open("horizon.pages.open.mods", Page::Mods)),
|
||||
Some(open("horizon.pages.open.pvp", Page::Pvp)),
|
||||
),
|
||||
Row::Buttons(
|
||||
open(
|
||||
@@ -2579,9 +2574,8 @@ impl OptionsUi {
|
||||
Page::SplitSetup
|
||||
},
|
||||
),
|
||||
Some(open("horizon.pages.open.pvp", Page::Pvp)),
|
||||
Some(open("horizon.pages.open.studio", Page::Studio)),
|
||||
),
|
||||
Row::Buttons(open("horizon.pages.open.studio", Page::Studio), None),
|
||||
// No AI hides the AI Agent page and everything AI.
|
||||
Row::Buttons(
|
||||
self.extra_button(s, crate::extras::Item::DiscordPresence),
|
||||
@@ -2639,24 +2633,10 @@ impl OptionsUi {
|
||||
rows
|
||||
}
|
||||
Page::Video => {
|
||||
// Horizon's graphics settings screen, at General and at Advanced.
|
||||
let mut rows = vec![Row::Buttons(
|
||||
button(
|
||||
0.0,
|
||||
0.0,
|
||||
150.0,
|
||||
tr("horizon.pages.open.horizon_graphics"),
|
||||
Act::Push(Page::Graphics),
|
||||
),
|
||||
Some(button(
|
||||
0.0,
|
||||
0.0,
|
||||
150.0,
|
||||
tr("horizon.pages.open.graphics_advanced"),
|
||||
Act::Push(Page::GraphicsAdvanced),
|
||||
)),
|
||||
)];
|
||||
rows.push(Row::Header("options.video.display.header"));
|
||||
// Vanilla's VideoSettingsScreen as vanilla lays it out. No menu opens it (Video
|
||||
// Settings... opens the graphics screen, which has all of it); it stays for
|
||||
// `horizon-ctl options video-vanilla` and the tests that pin vanilla's screen.
|
||||
let mut rows = vec![Row::Header("options.video.display.header")];
|
||||
rows.push(Row::Big(Opt::ExclusiveMode));
|
||||
rows.extend(pairs(&[
|
||||
Opt::MaxFps,
|
||||
@@ -3004,7 +2984,9 @@ impl OptionsUi {
|
||||
let entries = [
|
||||
("options.skinCustomisation", Some(Page::Skin)),
|
||||
("options.sounds", Some(Page::Sound)),
|
||||
("options.video", Some(Page::Video)),
|
||||
// Video Settings... opens Horizon's graphics screen, which holds every
|
||||
// video option, as Sodium's replaces vanilla's.
|
||||
("options.video", Some(Page::Graphics)),
|
||||
("options.controls", Some(Page::Controls)),
|
||||
(
|
||||
"options.language",
|
||||
@@ -5941,8 +5923,6 @@ mod tests {
|
||||
let (texts, missed) = page_texts("de_de", &[Page::Horizon, Page::Extras, Page::PadBinds]);
|
||||
for want in [
|
||||
"Splitscreen …",
|
||||
"Partikel",
|
||||
"Blockpartikel weg: Aus",
|
||||
"Weicher Chat: Aus",
|
||||
"Nachrichtenmarkierung: An",
|
||||
"Kanäle für UI-Töne: Aus",
|
||||
@@ -5961,7 +5941,7 @@ mod tests {
|
||||
assert_eq!(missed, Vec::<String>::new());
|
||||
let (texts, _) = page_texts("pl_pl", &[Page::Extras, Page::PadBinds]);
|
||||
for want in [
|
||||
"Ukryj cząstki bloków: Wył.",
|
||||
"Płynny czat: Wył.",
|
||||
"Pasek szybkiego wyboru: poprzednie pole",
|
||||
] {
|
||||
assert!(texts.iter().any(|t| t == want), "{want:?} not in {texts:?}");
|
||||
@@ -6584,12 +6564,11 @@ mod tests {
|
||||
Row::Pair(a, b) => *a == opt || *b == Some(opt),
|
||||
_ => false,
|
||||
}));
|
||||
assert!(rows.iter().any(|row| matches!(row, Row::Buttons(..))));
|
||||
}
|
||||
ui.settings_search.set_value("no matching video setting");
|
||||
let rows = ui.list_rows(&settings);
|
||||
assert!(headers(ui.list_rows(&settings)).is_empty());
|
||||
assert!(rows.iter().all(|row| matches!(row, Row::Buttons(..))));
|
||||
assert!(rows.is_empty(), "{}", rows.len());
|
||||
ui.settings_search.set_value("");
|
||||
assert_eq!(headers(ui.list_rows(&settings)), all_headers);
|
||||
}
|
||||
@@ -7567,6 +7546,172 @@ mod tests {
|
||||
assert_eq!(toggles(&mut ui, &s), [(0, false), (1, true)]);
|
||||
}
|
||||
|
||||
/// Every setting a player reaches, from the Options screen through every button that opens
|
||||
/// a page, is in one place, and every page has one way in. Vanilla's own repeats stay as
|
||||
/// vanilla has them; the graphics screen stands for Video Settings, so the vanilla video
|
||||
/// options it shows count as Video Settings' (Menu Background Blur is in both of
|
||||
/// vanilla's). Vanilla's Video Settings rows are all on the graphics screen.
|
||||
#[test]
|
||||
fn every_setting_and_page_is_reached_from_one_place() {
|
||||
use std::collections::{BTreeMap, BTreeSet};
|
||||
let mut s = Settings::default();
|
||||
// The Music page shows once its extra is on.
|
||||
s.extras.music_page = true;
|
||||
let mut ui = OptionsUi::default();
|
||||
let mut places: BTreeMap<String, BTreeSet<String>> = BTreeMap::new();
|
||||
let mut ways_in: BTreeMap<String, BTreeSet<String>> = BTreeMap::new();
|
||||
let mut put = |id: String, page: &str| {
|
||||
places.entry(id).or_default().insert(page.to_owned());
|
||||
};
|
||||
// The graphics screen, drawn by `graphics_ui`.
|
||||
let mut graphics_rows = BTreeSet::new();
|
||||
for (page, groups) in crate::graphics_ui::rows() {
|
||||
for row in groups.into_iter().flat_map(|(_, rows)| rows) {
|
||||
use crate::graphics_ui::{H, Item};
|
||||
let id = match row.item {
|
||||
// Vanilla's Graphics API button sets the same setting.
|
||||
Item::Horizon(H::GraphicsApi) => "graphics-api".to_owned(),
|
||||
Item::Horizon(H::ShaderPacks) => {
|
||||
ways_in
|
||||
.entry(format!("{:?}", Page::ShaderPacks))
|
||||
.or_default()
|
||||
.insert(format!("Graphics/{page:?}"));
|
||||
continue;
|
||||
}
|
||||
Item::Vanilla(o) => format!("{o:?}"),
|
||||
Item::Horizon(h) => format!("graphics:{h:?}"),
|
||||
Item::Extra(e) => format!("extra:{e:?}"),
|
||||
};
|
||||
graphics_rows.insert(id.clone());
|
||||
put(id, "Graphics");
|
||||
}
|
||||
}
|
||||
// Every page from the Options screen, through its buttons.
|
||||
let mut seen = BTreeSet::new();
|
||||
let mut todo = vec![Page::Main];
|
||||
while let Some(page) = todo.pop() {
|
||||
if !seen.insert(format!("{page:?}")) {
|
||||
continue;
|
||||
}
|
||||
ui.stack = vec![page];
|
||||
let (widgets, _, _, _) = ui.layout(&s, 427.0, 4000.0);
|
||||
let name = format!("{page:?}");
|
||||
for w in &widgets {
|
||||
let id = match &w.kind {
|
||||
WKind::Slider { opt, .. } => format!("{opt:?}"),
|
||||
WKind::Button { act, .. } => match act {
|
||||
Act::Cycle(Opt::GraphicsBackend) => "graphics-api".to_owned(),
|
||||
Act::Cycle(opt) => format!("{opt:?}"),
|
||||
Act::Extra(e) => format!("extra:{e:?}"),
|
||||
Act::PvpPreset => "pvp-preset".to_owned(),
|
||||
Act::Push(to) => {
|
||||
ways_in
|
||||
.entry(format!("{to:?}"))
|
||||
.or_default()
|
||||
.insert(name.clone());
|
||||
// The graphics screen's pages are one screen, listed above.
|
||||
if OptionsUi::graphics_page(*to).is_none() {
|
||||
todo.push(*to);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
_ => continue,
|
||||
},
|
||||
_ => continue,
|
||||
};
|
||||
put(id, &name);
|
||||
}
|
||||
}
|
||||
// Vanilla's own: the same option on two of its screens.
|
||||
let vanilla_repeats: BTreeMap<&str, &[&str]> = [
|
||||
("MenuBlur", &["Accessibility", "Graphics"][..]),
|
||||
("ShowSubtitles", &["Accessibility", "Sound"][..]),
|
||||
("Narrator", &["Accessibility", "Chat"][..]),
|
||||
("ChatOpacity", &["Accessibility", "Chat"][..]),
|
||||
("TextBackgroundOpacity", &["Accessibility", "Chat"][..]),
|
||||
("ChatLineSpacing", &["Accessibility", "Chat"][..]),
|
||||
]
|
||||
.into();
|
||||
for (id, pages) in &places {
|
||||
let pages: Vec<&str> = pages.iter().map(String::as_str).collect();
|
||||
match vanilla_repeats.get(id.as_str()) {
|
||||
Some(expected) => assert_eq!(&pages, expected, "{id}"),
|
||||
None => assert_eq!(pages.len(), 1, "{id} is on {pages:?}"),
|
||||
}
|
||||
}
|
||||
// AccessibilityOptionsScreen links Controls, as vanilla's does.
|
||||
for (page, from) in &ways_in {
|
||||
let from: Vec<&str> = from.iter().map(String::as_str).collect();
|
||||
match page.as_str() {
|
||||
"Controls" => assert_eq!(from, ["Accessibility", "Main"]),
|
||||
_ => assert_eq!(from.len(), 1, "{page} opens from {from:?}"),
|
||||
}
|
||||
}
|
||||
assert_eq!(
|
||||
ways_in.get("ShaderPacks").map(|f| f.len()),
|
||||
Some(1),
|
||||
"{ways_in:?}"
|
||||
);
|
||||
assert!(
|
||||
!seen.contains("Video"),
|
||||
"vanilla's own layout has no way in"
|
||||
);
|
||||
// Every row of vanilla's Video Settings is on the graphics screen.
|
||||
ui.stack = vec![Page::Video];
|
||||
for row in ui.list_rows(&s) {
|
||||
let opts = match row {
|
||||
Row::Big(o) => vec![o],
|
||||
Row::Pair(a, b) => std::iter::once(a).chain(b).collect(),
|
||||
_ => Vec::new(),
|
||||
};
|
||||
for o in opts {
|
||||
let id = match o {
|
||||
Opt::GraphicsBackend => "graphics-api".to_owned(),
|
||||
o => format!("{o:?}"),
|
||||
};
|
||||
// macOS has one graphics API: the graphics screen leaves the row out.
|
||||
if id == "graphics-api" && cfg!(target_os = "macos") {
|
||||
continue;
|
||||
}
|
||||
assert!(
|
||||
graphics_rows.contains(&id),
|
||||
"{id} is not on the graphics screen"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Shader packs, both kinds, are on the graphics screen's Shaders page: its Shader
|
||||
/// Packs... opens the pack list, listed afresh, and Done comes back to that page.
|
||||
#[test]
|
||||
fn the_graphics_shaders_page_opens_the_shader_pack_list() {
|
||||
use crate::graphics_ui::{H, Item, Target};
|
||||
use winit::keyboard::KeyCode;
|
||||
let atlas = atlas();
|
||||
let mut s = Settings::default();
|
||||
let mut ui = OptionsUi {
|
||||
size: (427.0, 240.0),
|
||||
..Default::default()
|
||||
};
|
||||
ui.show(Page::Graphics);
|
||||
ui.graphics.open(crate::graphics_ui::Page::Shaders);
|
||||
let packs = Target::Item(Item::Horizon(H::ShaderPacks));
|
||||
assert!(
|
||||
(0..40).any(|_| {
|
||||
ui.key(&mut s, &atlas, KeyCode::Tab, None);
|
||||
ui.graphics.focus == Some(packs)
|
||||
}),
|
||||
"{:?}",
|
||||
ui.graphics.focus
|
||||
);
|
||||
let events = ui.key(&mut s, &atlas, KeyCode::Enter, None);
|
||||
assert_eq!(ui.page(), Page::ShaderPacks);
|
||||
assert!(events.contains(&Event::ListShaderPacks), "{events:?}");
|
||||
ui.back(&mut s);
|
||||
assert_eq!(ui.page(), Page::Graphics);
|
||||
assert_eq!(ui.graphics.page(), crate::graphics_ui::Page::Shaders);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn horizon_settings_hang_off_options_and_reach_every_horizon_page() {
|
||||
let s = Settings::default();
|
||||
@@ -7592,18 +7737,15 @@ mod tests {
|
||||
&main[main.len() - 3..],
|
||||
[Page::Horizon, Page::Mods, Page::Credits]
|
||||
);
|
||||
// Video Settings... is the graphics screen, as Sodium's.
|
||||
assert!(main.contains(&Page::Graphics) && !main.contains(&Page::Video));
|
||||
ui.push(Page::Horizon);
|
||||
assert_eq!(
|
||||
pushes(&mut ui),
|
||||
[
|
||||
Page::Graphics,
|
||||
Page::GraphicsAdvanced,
|
||||
Page::ShaderPacks,
|
||||
Page::Controller,
|
||||
Page::Extras,
|
||||
Page::Mods,
|
||||
Page::SplitSetup,
|
||||
Page::Pvp,
|
||||
Page::SplitSetup,
|
||||
Page::Studio,
|
||||
Page::Agent,
|
||||
]
|
||||
@@ -7632,12 +7774,6 @@ mod tests {
|
||||
.collect();
|
||||
assert!(acts.contains(&&Act::Extra(crate::extras::Item::AgentControl)));
|
||||
assert!(acts.contains(&&Act::CopyAgentDetails));
|
||||
// Vanilla's own pages keep the Horizon pages they had.
|
||||
ui.stack = vec![Page::Main, Page::Video];
|
||||
let video = pushes(&mut ui);
|
||||
for page in [Page::Graphics, Page::GraphicsAdvanced] {
|
||||
assert!(video.contains(&page), "{page:?}");
|
||||
}
|
||||
ui.stack = vec![Page::Main, Page::Controls];
|
||||
assert!(pushes(&mut ui).contains(&Page::Controller));
|
||||
}
|
||||
|
||||
@@ -415,6 +415,7 @@
|
||||
"Frame Generation": "Raam Generasie",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Toon 'n opgemaakte raam tussen elke twee regte: gladder, 'n bietjie meer vertraging.",
|
||||
"Shadow Cache": "Skadu-kas",
|
||||
"Shader Packs...": "Shader-pakke...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Hergebruik die pakskadukaart wanneer son, uitsig en wêreld ooreenstem. Af by verstek.",
|
||||
"Find BlueMap": "Vind BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Op bedieners, vind hul BlueMap-webkaart vir ver terrein. Sluit volgende aan.",
|
||||
|
||||
@@ -432,6 +432,7 @@
|
||||
"Frame Generation": "جيل الإطار",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "يُظهر إطارًا مكوّنًا بين كل إطارين حقيقيين: أكثر سلاسة وتأخرًا قليلًا.",
|
||||
"Shadow Cache": "ذاكرة التخزين المؤقت الظل",
|
||||
"Shader Packs...": "حزم التظليل...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "يعيد استخدام خريطة ظل الحزمة عندما تتطابق الشمس والعرض والعالم. إيقاف بشكل افتراضي.",
|
||||
"Find BlueMap": "ابحث عن بلو ماب",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "على الخوادم، يتم العثور على خريطة الويب BlueMap الخاصة بهم للتضاريس البعيدة. الانضمام التالي.",
|
||||
|
||||
@@ -407,6 +407,7 @@
|
||||
"Frame Generation": "Çərçivə Yaradılması",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Hər iki real arasında düzəldilmiş çərçivəni göstərir: daha hamar, bir az daha gecikmə.",
|
||||
"Shadow Cache": "Kölgə önbelleği",
|
||||
"Shader Packs...": "Shader Paketləri...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Günəş, görünüş və dünya uyğunlaşdıqda paket kölgə xəritəsindən təkrar istifadə edir. Defolt olaraq söndürülür.",
|
||||
"Find BlueMap": "BlueMap tapın",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Serverlərdə uzaq ərazilər üçün BlueMap veb xəritəsini tapır. Növbəti qoşulun.",
|
||||
|
||||
@@ -427,6 +427,7 @@
|
||||
"Frame Generation": "Кадр быуын",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Һәр ике ысын араһында ҡоролған кадр күрһәтә: шымараҡ, бер аҙ күберәк лаг.",
|
||||
"Shadow Cache": "Күләгә кэш",
|
||||
"Shader Packs...": "Шейдер пакеттары...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Ҡояш, ҡараш һәм донъя тап килгәндә пакет күләгә картаһын ҡабаттан ҡуллана. Һүндерелгән по умолчанию.",
|
||||
"Find BlueMap": "Зәңгәр картаны табығыҙ",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Серверҙарҙа, алыҫ ерҙәр өсөн уларҙы BlueMap веб-картаһын таба. Киләһе ҡушылыу.",
|
||||
|
||||
@@ -417,6 +417,7 @@
|
||||
"Frame Generation": "Генерацыя фрэймаў",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Паказвае прыдуманую рамку паміж двума сапраўднымі: больш гладкая, з крыху большым адставаннем.",
|
||||
"Shadow Cache": "Ценявы кэш",
|
||||
"Shader Packs...": "Пакеты шэйдэраў...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Паўторна выкарыстоўвае карту ценяў зграі, калі сонца, выгляд і свет супадаюць. Выключана па змаўчанні.",
|
||||
"Find BlueMap": "Знайдзіце BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "На серверах знаходзіць вэб-карту BlueMap для далёкай мясцовасці. Далей далучыцца.",
|
||||
|
||||
@@ -474,5 +474,6 @@
|
||||
"horizon.extras.cosmetics_auras.tooltip": "Аури и пътеки, които другите играчи носят. Изключено по подразбиране.",
|
||||
"horizon.extras.cosmetics.shown": "Показано",
|
||||
"horizon.extras.cosmetics.hidden": "Скрити",
|
||||
"horizon.extras.cosmetics.name_tags": "Само етикети с имена"
|
||||
"horizon.extras.cosmetics.name_tags": "Само етикети с имена",
|
||||
"Shader Packs...": "Шейдър пакети..."
|
||||
}
|
||||
@@ -419,6 +419,7 @@
|
||||
"Frame Generation": "Krouiñ frammoù",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Diskouez a ra ur framm savet etre pep daou hini gwirion : eeunoc'h, un tamm muioc'h a zilez.",
|
||||
"Shadow Cache": "Grubuilh skeud",
|
||||
"Shader Packs...": "Pakadoù skeudennoù...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Adimplij ar gartenn skeud pakad pa glot an heol, ar gwel hag ar bed. Diweredekaet dre ziouer.",
|
||||
"Find BlueMap": "Kavout BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "War ar servijerioù e kaver o gartenn web BlueMap evit an tachennoù pell. Kemer perzh da heul.",
|
||||
|
||||
@@ -419,5 +419,6 @@
|
||||
"horizon.extras.cosmetics_auras.tooltip": "Aure i staze koje drugi igrači nose. Podrazumevano isključeno.",
|
||||
"horizon.extras.cosmetics.shown": "Prikazano",
|
||||
"horizon.extras.cosmetics.hidden": "Skriveno",
|
||||
"horizon.extras.cosmetics.name_tags": "Samo oznake sa imenom"
|
||||
"horizon.extras.cosmetics.name_tags": "Samo oznake sa imenom",
|
||||
"Shader Packs...": "Shader paketi..."
|
||||
}
|
||||
@@ -467,5 +467,6 @@
|
||||
"horizon.extras.cosmetics_auras.tooltip": "Aures i rastres que porten altres jugadors. Desactivat per defecte.",
|
||||
"horizon.extras.cosmetics.shown": "Es mostra",
|
||||
"horizon.extras.cosmetics.hidden": "Ocult",
|
||||
"horizon.extras.cosmetics.name_tags": "Només etiquetes de nom"
|
||||
"horizon.extras.cosmetics.name_tags": "Només etiquetes de nom",
|
||||
"Shader Packs...": "Paquets d'ombres..."
|
||||
}
|
||||
@@ -398,6 +398,7 @@
|
||||
"Frame Generation": "Generování snímků",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Zobrazuje vytvořený rám mezi každým dvěma skutečnými: hladší, trochu více zpoždění.",
|
||||
"Shadow Cache": "Stínová mezipaměť",
|
||||
"Shader Packs...": "Shader Pack...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Znovu použije mapu stínu balíčku, když se slunce, pohled a svět shodují. Ve výchozím nastavení vypnuto.",
|
||||
"Find BlueMap": "Najděte BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Na serverech najde jejich webovou mapu BlueMap pro vzdálený terén. Další připojení.",
|
||||
|
||||
@@ -423,6 +423,7 @@
|
||||
"Frame Generation": "Кадр генерацийӗ",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Кашни икӗ чӑн-чӑн хушшинче тунӑ кадра кӑтартать: тикӗсрех, кӑштах кая юлса.",
|
||||
"Shadow Cache": "Мӗлке кэшӗ",
|
||||
"Shader Packs...": "Шейдер пакетӗсем...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Хӗвел, курӑну тата тӗнче пӗр пек чухне мӗлке карттипе тепӗр хут усӑ курать. Выключен по умолчанию.",
|
||||
"Find BlueMap": "BlueMap тупӑр",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Серверсем ҫинче инҫетри ҫӗр ҫинчи BlueMap веб-карттине тупать. Тепӗр хут хутшӑнӑр.",
|
||||
|
||||
@@ -407,6 +407,7 @@
|
||||
"Frame Generation": "Cynhyrchu Ffrâm",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Yn dangos ffrâm wedi'i gwneud i fyny rhwng pob dau go iawn: llyfnach, ychydig yn fwy oedi.",
|
||||
"Shadow Cache": "Cache Cysgod",
|
||||
"Shader Packs...": "Pecynnau Shader...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Yn ailddefnyddio'r map cysgodion pecyn pan fydd yr haul, yr olygfa a'r byd yn cyd-fynd. Wedi'i ddiffodd yn ddiofyn.",
|
||||
"Find BlueMap": "Dewch o hyd i BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Ar weinyddion, yn dod o hyd i'w map gwe BlueMap ar gyfer tir pell. Ymunwch nesaf.",
|
||||
|
||||
@@ -444,5 +444,6 @@
|
||||
"horizon.extras.cosmetics_auras.tooltip": "Auraer og spor, som andre spillere bærer. Fra som standard.",
|
||||
"horizon.extras.cosmetics.shown": "Vist",
|
||||
"horizon.extras.cosmetics.hidden": "Skjult",
|
||||
"horizon.extras.cosmetics.name_tags": "Kun navneskilte"
|
||||
"horizon.extras.cosmetics.name_tags": "Kun navneskilte",
|
||||
"Shader Packs...": "Shader-pakker..."
|
||||
}
|
||||
@@ -301,6 +301,18 @@
|
||||
"Frame Generation": "Bildgenerierung",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Zeigt zwischen zwei echten Bildern ein errechnetes: flüssiger, etwas mehr Verzögerung.",
|
||||
"Shadow Cache": "Schatten-Cache",
|
||||
"Shaders": "Shader",
|
||||
"Shader packs, Horizon's and shaders/ folder ones, and their options.": "Shader-Pakete, die von Horizon und die aus shaders/-Ordnern, und ihre Optionen.",
|
||||
"Shader packs": "Shader-Pakete",
|
||||
"Vanilla's own preset: sets only vanilla's options, as Minecraft does.": "Das Preset von Vanilla: setzt nur die Optionen von Vanilla, wie Minecraft.",
|
||||
"Fullscreen takes the display over, at the mode below.": "Der Vollbildmodus übernimmt den Bildschirm, im Modus darunter.",
|
||||
"The display mode exclusive fullscreen uses. Applies when you leave.": "Der Anzeigemodus des exklusiven Vollbilds. Gilt, wenn du das Menü verlässt.",
|
||||
"Blurs the world behind menus.": "Verwischt die Welt hinter Menüs.",
|
||||
"How textures are sampled: sharper at a slant with Anisotropic.": "Wie Texturen abgetastet werden: mit Anisotrop schärfer im schrägen Blick.",
|
||||
"How far Anisotropic filtering goes. Higher is sharper at a slant.": "Wie weit der anisotrope Filter geht. Höher ist schärfer im schrägen Blick.",
|
||||
"Only with Anisotropic texture filtering.": "Nur mit anisotropem Texturfilter.",
|
||||
"Shader Packs...": "Shader-Pakete …",
|
||||
"Picks a shader pack, Horizon's or a shaders/ folder one, and sets its options.": "Wählt ein Shader-Paket, eines von Horizon oder einen shaders/-Ordner, und stellt seine Optionen ein.",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Verwendet die Schattenkarte des Pakets erneut, wenn Sonne, Blick und Welt gleich bleiben. Standardmäßig aus.",
|
||||
"Synchronous": "Synchron",
|
||||
"Asynchronous": "Asynchron",
|
||||
|
||||
@@ -466,5 +466,6 @@
|
||||
"horizon.extras.cosmetics_auras.tooltip": "Αύρες και μονοπάτια φορούν άλλοι παίκτες. Απενεργοποίηση από προεπιλογή.",
|
||||
"horizon.extras.cosmetics.shown": "Εμφανίζεται",
|
||||
"horizon.extras.cosmetics.hidden": "Κρυφό",
|
||||
"horizon.extras.cosmetics.name_tags": "Μόνο ετικέτες ονομάτων"
|
||||
"horizon.extras.cosmetics.name_tags": "Μόνο ετικέτες ονομάτων",
|
||||
"Shader Packs...": "Πακέτα Shader..."
|
||||
}
|
||||
@@ -469,6 +469,18 @@
|
||||
"Frame Generation": "Frame Generation",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Shows a made-up frame between each two real ones: smoother, a little more lag.",
|
||||
"Shadow Cache": "Shadow Cache",
|
||||
"Shaders": "Shaders",
|
||||
"Shader packs, Horizon's and shaders/ folder ones, and their options.": "Shader packs, Horizon's and shaders/ folder ones, and their options.",
|
||||
"Shader packs": "Shader packs",
|
||||
"Vanilla's own preset: sets only vanilla's options, as Minecraft does.": "Vanilla's own preset: sets only vanilla's options, as Minecraft does.",
|
||||
"Fullscreen takes the display over, at the mode below.": "Fullscreen takes the display over, at the mode below.",
|
||||
"The display mode exclusive fullscreen uses. Applies when you leave.": "The display mode exclusive fullscreen uses. Applies when you leave.",
|
||||
"Blurs the world behind menus.": "Blurs the world behind menus.",
|
||||
"How textures are sampled: sharper at a slant with Anisotropic.": "How textures are sampled: sharper at a slant with Anisotropic.",
|
||||
"How far Anisotropic filtering goes. Higher is sharper at a slant.": "How far Anisotropic filtering goes. Higher is sharper at a slant.",
|
||||
"Only with Anisotropic texture filtering.": "Only with Anisotropic texture filtering.",
|
||||
"Shader Packs...": "Shader Packs...",
|
||||
"Picks a shader pack, Horizon's or a shaders/ folder one, and sets its options.": "Picks a shader pack, Horizon's or a shaders/ folder one, and sets its options.",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Reuses the pack shadow map when sun, view and world match. Off by default.",
|
||||
"Find BlueMap": "Find BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "On servers, finds their BlueMap web map for far terrain. Next join.",
|
||||
|
||||
@@ -412,6 +412,7 @@
|
||||
"Frame Generation": "Frama Generacio",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Montras elfaritan kadron inter ĉiu du realaj: pli glata, iom pli da malfruo.",
|
||||
"Shadow Cache": "Ombra Deponejo",
|
||||
"Shader Packs...": "Shader-Pakoj...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Reuzas la pak-ombromapon kiam suno, vido kaj mondo kongruas. Malŝaltita defaŭlte.",
|
||||
"Find BlueMap": "Trovu BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Sur serviloj, trovas ilian BlueMap-retmapon por malproksima tereno. Poste aliĝu.",
|
||||
|
||||
@@ -255,5 +255,6 @@
|
||||
"horizon.tempban.success": "%1$s durante %2$s, hasta %3$s",
|
||||
"horizon.tempban.list.empty": "No hay baneos temporales",
|
||||
"horizon.tempban.list.count": "Hay %s baneo(s) temporal(es):",
|
||||
"horizon.tempban.list.entry": "%1$s fue baneado por %2$s %3$s (hasta %4$s)"
|
||||
"horizon.tempban.list.entry": "%1$s fue baneado por %2$s %3$s (hasta %4$s)",
|
||||
"Shader Packs...": "Paquetes de shaders..."
|
||||
}
|
||||
@@ -413,6 +413,7 @@
|
||||
"Frame Generation": "Frame Sorkuntza",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Bi erreal bakoitzaren artean osaturiko fotograma erakusten du: leunagoa, lag apur bat gehiago.",
|
||||
"Shadow Cache": "Itzalen cachea",
|
||||
"Shader Packs...": "Shader paketeak...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Berrerabili paketearen itzal-mapa eguzkia, ikuspegia eta mundua bat datozenean. Desaktibatuta lehenespenez.",
|
||||
"Find BlueMap": "Bilatu BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Zerbitzarietan, BlueMap web-mapa aurkitzen du urruneko lursailetarako. Hurrengoa sartu.",
|
||||
|
||||
@@ -413,6 +413,7 @@
|
||||
"Frame Generation": "نسل فریم",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "یک قاب ساخته شده را بین هر دو قاب واقعی نشان می دهد: صاف تر، کمی تاخیر بیشتر.",
|
||||
"Shadow Cache": "کش سایه",
|
||||
"Shader Packs...": "بسته های سایه زن...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "هنگامی که خورشید، نما و جهان مطابقت دارند، از نقشه سایه بسته دوباره استفاده می کند. به طور پیش فرض خاموش است.",
|
||||
"Find BlueMap": "BlueMap را پیدا کنید",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "در سرورها، نقشه وب BlueMap خود را برای مناطق دوردست پیدا می کند. عضویت بعدی",
|
||||
|
||||
@@ -453,5 +453,6 @@
|
||||
"horizon.extras.cosmetics_auras.tooltip": "Aurat ja jäljet, joita muut pelaajat käyttävät. Oletuksena pois päältä.",
|
||||
"horizon.extras.cosmetics.shown": "Näytetään",
|
||||
"horizon.extras.cosmetics.hidden": "Piilotettu",
|
||||
"horizon.extras.cosmetics.name_tags": "Vain nimilaput"
|
||||
"horizon.extras.cosmetics.name_tags": "Vain nimilaput",
|
||||
"Shader Packs...": "Shader Packit..."
|
||||
}
|
||||
@@ -425,5 +425,6 @@
|
||||
"horizon.extras.cosmetics_auras.tooltip": "Mga aura at trail na isinusuot ng ibang mga manlalaro. Naka-off bilang default.",
|
||||
"horizon.extras.cosmetics.shown": "Ipinakita",
|
||||
"horizon.extras.cosmetics.hidden": "Nakatago",
|
||||
"horizon.extras.cosmetics.name_tags": "Mga name tag lang"
|
||||
"horizon.extras.cosmetics.name_tags": "Mga name tag lang",
|
||||
"Shader Packs...": "Mga Shader Pack..."
|
||||
}
|
||||
@@ -412,6 +412,7 @@
|
||||
"Frame Generation": "Rammuættarlið",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Vísir eina gjørda rammu millum hvønn tveir veruligar: slættari, eitt sindur meira lag.",
|
||||
"Shadow Cache": "Skuggagoymsla",
|
||||
"Shader Packs...": "Skuggapakkar...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Endurnýtir pakka skuggakortið, tá sól, útsýni og heimur passa saman. Sløkt sum standard.",
|
||||
"Find BlueMap": "Finn Blákort",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Á ambætarum, finnur teirra BlueMap vevkort fyri fjart lendi. Næsta melda teg til.",
|
||||
|
||||
@@ -334,6 +334,18 @@
|
||||
"Frame Generation": "Génération d'images",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Insère une image calculée entre deux vraies : plus fluide, un peu plus de latence.",
|
||||
"Shadow Cache": "Cache des ombres",
|
||||
"Shaders": "Shaders",
|
||||
"Shader packs, Horizon's and shaders/ folder ones, and their options.": "Les packs de shaders, ceux de Horizon et ceux en dossier shaders/, et leurs options.",
|
||||
"Shader packs": "Packs de shaders",
|
||||
"Vanilla's own preset: sets only vanilla's options, as Minecraft does.": "Le préréglage de vanilla : il ne règle que les options de vanilla, comme Minecraft.",
|
||||
"Fullscreen takes the display over, at the mode below.": "Le plein écran prend tout l'écran, au mode ci-dessous.",
|
||||
"The display mode exclusive fullscreen uses. Applies when you leave.": "Le mode d'affichage du plein écran exclusif. S'applique en quittant.",
|
||||
"Blurs the world behind menus.": "Floute le monde derrière les menus.",
|
||||
"How textures are sampled: sharper at a slant with Anisotropic.": "Comment les textures sont échantillonnées : plus nettes de biais en anisotrope.",
|
||||
"How far Anisotropic filtering goes. Higher is sharper at a slant.": "Jusqu'où va le filtrage anisotrope. Plus haut est plus net de biais.",
|
||||
"Only with Anisotropic texture filtering.": "Seulement avec le filtrage de textures anisotrope.",
|
||||
"Shader Packs...": "Packs de shaders...",
|
||||
"Picks a shader pack, Horizon's or a shaders/ folder one, and sets its options.": "Choisit un pack de shaders, de Horizon ou en dossier shaders/, et règle ses options.",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Réutilise la carte d'ombres du pack si soleil, vue et monde sont identiques. Désactivé par défaut.",
|
||||
"Find BlueMap": "Trouver BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Sur les serveurs, trouve leur carte web BlueMap pour le terrain lointain. À la prochaine connexion.",
|
||||
|
||||
@@ -407,6 +407,7 @@
|
||||
"Frame Generation": "Gjenerazion di cuadri",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Al mostre un cuadri fat jenfri ognidun dai doi vêrs: plui lissîf, un pocje di plui di ritarts.",
|
||||
"Shadow Cache": "Cache ombre",
|
||||
"Shader Packs...": "Pachetis ombrenadôrs...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Riutilizâ la mape ombre dal grup cuant che il soreli, la viste e il mont a corispuindin. Disactivât par automatic.",
|
||||
"Find BlueMap": "Cjatâ la mape blu",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Sui servidôrs, al cjate la lôr mape web BlueMap par terens lontans. Prossime unîsi.",
|
||||
|
||||
@@ -409,6 +409,7 @@
|
||||
"Frame Generation": "Giniúint Fráma",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Taispeánann sé fráma comhdhéanta idir an dá fhíor: níos réidhe, beagán níos moille.",
|
||||
"Shadow Cache": "Scáth taisce",
|
||||
"Shader Packs...": "Pacaí scáthaithe...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Athúsáideann sé an scáthléarscáil paca nuair a mheaitseálann an ghrian, an radharc agus an domhan. Off de réir réamhshocraithe.",
|
||||
"Find BlueMap": "Aimsigh BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Ar fhreastalaithe, aimsíonn a léarscáil gréasáin BlueMap don tír-raon i bhfad. Ar Aghaidh páirt.",
|
||||
|
||||
@@ -409,6 +409,7 @@
|
||||
"Frame Generation": "Gineadh frèam",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "A’ sealltainn frèam dèanta eadar gach dà fhìor: nas socair, beagan a bharrachd lag.",
|
||||
"Shadow Cache": "Cache sgàile",
|
||||
"Shader Packs...": "Pacaidean Shader...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Ath-chleachdadh mapa sgàil a’ phasgan nuair a bhios grian, sealladh agus saoghal a’ maidseadh. Cuir dheth gu bunaiteach.",
|
||||
"Find BlueMap": "Lorg BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Air frithealaichean, lorg am mapa lìn BlueMap aca airson fearann fada. An ath cheangail.",
|
||||
|
||||
@@ -406,6 +406,7 @@
|
||||
"Frame Generation": "Xeración de cadros",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Mostra un marco feito entre cada dous reais: máis suave, un pouco máis de retraso.",
|
||||
"Shadow Cache": "Caché de sombras",
|
||||
"Shader Packs...": "Paquetes de sombreadores...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Reutiliza o mapa de sombras do paquete cando o sol, a vista e o mundo coinciden. Desactivado por defecto.",
|
||||
"Find BlueMap": "Busca BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Nos servidores, atopa o seu mapa web BlueMap para terreos afastados. A continuación únete.",
|
||||
|
||||
@@ -405,6 +405,7 @@
|
||||
"Frame Generation": "Hoʻokumu ʻana i ka pā",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Hōʻike i kahi kiʻi i hana ʻia ma waena o kēlā me kēia ʻelua mau mea maoli: ʻoi aku ka maʻalahi, ʻoi aku ka lag.",
|
||||
"Shadow Cache": "Kahu huna",
|
||||
"Shader Packs...": "Nā Pūʻolo Shader...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Hoʻohana hou i ka palapala ʻāina malu i ka wā e pāʻani ai ka lā, ka nānā a me ka honua. Paʻa ma ka paʻamau.",
|
||||
"Find BlueMap": "E ʻimi iā BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Ma nā kikowaena, ʻike lākou i kā lākou palapala pūnaewele BlueMap no ka ʻāina mamao. Hoʻohui aʻe.",
|
||||
|
||||
@@ -469,5 +469,6 @@
|
||||
"horizon.extras.cosmetics_auras.tooltip": "הילות ושבילים ששחקנים אחרים לובשים. כבוי כברירת מחדל.",
|
||||
"horizon.extras.cosmetics.shown": "מוצג",
|
||||
"horizon.extras.cosmetics.hidden": "מוסתר",
|
||||
"horizon.extras.cosmetics.name_tags": "תגי שם בלבד"
|
||||
"horizon.extras.cosmetics.name_tags": "תגי שם בלבד",
|
||||
"Shader Packs...": "חבילות Shader..."
|
||||
}
|
||||
@@ -402,6 +402,7 @@
|
||||
"Frame Generation": "फ्रेम जनरेशन",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "प्रत्येक दो वास्तविक फ़्रेमों के बीच एक काल्पनिक फ़्रेम दिखाता है: अधिक सुचारू, थोड़ा अधिक लैग।",
|
||||
"Shadow Cache": "शैडो कैश",
|
||||
"Shader Packs...": "शेडर पैक्स...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "जब सूरज, दृश्य और दुनिया मेल खाते हैं तो पैक शैडो मैप का पुन उपयोग करता है। डिफ़ॉल्ट रूप से बंद।",
|
||||
"Find BlueMap": "ब्लूमेप खोजें",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "सर्वर पर, दूर के भू-भाग के लिए उनका ब्लूमेप वेब मैप खोजता है। अगली शुरुआत पर।",
|
||||
|
||||
@@ -395,6 +395,7 @@
|
||||
"Frame Generation": "Generiranje sličica",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Prikazuje izmišljenu sličicu između svake dvije stvarne: glađe, malo veća latencija.",
|
||||
"Shadow Cache": "Predmemorija sjena",
|
||||
"Shader Packs...": "Paketi shadera...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Ponovno koristi mapu sjena paketa kada se sunce, pogled i svijet podudaraju. Zadano isključeno.",
|
||||
"Find BlueMap": "Pronađi BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Na poslužiteljima pronalazi njihov BlueMap web preglednik karata za udaljeni teren. Sljedeće pridruživanje.",
|
||||
|
||||
@@ -403,6 +403,7 @@
|
||||
"Frame Generation": "Keretgenerálás",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Egy-egy kitalált keretet mutat a két valódi között: simább, kicsit több késés.",
|
||||
"Shadow Cache": "Árnyék gyorsítótár",
|
||||
"Shader Packs...": "Shader csomagok...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Újra felhasználja a csomag árnyéktérképét, amikor a nap, a kilátás és a világ megegyezik. Alapértelmezés szerint ki.",
|
||||
"Find BlueMap": "Keresse meg a BlueMap-et",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "A szervereken megkeresi a BlueMap webtérképüket a távoli terepre. Következő csatlakozás.",
|
||||
|
||||
@@ -408,6 +408,7 @@
|
||||
"Frame Generation": "Շրջանակների սերունդ",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Ցույց է տալիս պատրաստված շրջանակը յուրաքանչյուր երկու իրականի միջև՝ ավելի հարթ, մի փոքր ավելի ուշացումով:",
|
||||
"Shadow Cache": "Ստվերային քեշ",
|
||||
"Shader Packs...": "Shader փաթեթներ...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Կրկին օգտագործում է փաթեթի ստվերային քարտեզը, երբ արևը, տեսարանը և աշխարհը համընկնում են: Լռելյայն անջատված է:",
|
||||
"Find BlueMap": "Գտեք BlueMap-ը",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Սերվերների վրա գտնում է իրենց BlueMap վեբ քարտեզը հեռավոր տեղանքի համար: Հաջորդ միանալ.",
|
||||
|
||||
@@ -389,6 +389,7 @@
|
||||
"Frame Generation": "Pembuatan Bingkai (Frame Generation)",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Menampilkan bingkai buatan di antara setiap dua bingkai nyata: lebih mulus, dengan sedikit tambahan lag.",
|
||||
"Shadow Cache": "Cache Bayangan",
|
||||
"Shader Packs...": "Paket Shader...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Menggunakan kembali peta bayangan paket saat posisi matahari, pandangan, dan dunia cocok. Nonaktif secara default.",
|
||||
"Find BlueMap": "Cari BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Pada server, mencari peta web BlueMap mereka untuk medan jauh. Pada saat bergabung berikutnya.",
|
||||
|
||||
@@ -405,6 +405,7 @@
|
||||
"Frame Generation": "Ọgbọ Frame",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Na-egosi etiti emebere n'etiti ezigbo abụọ nke ọ bụla: dị nro, ntakịrị lag.",
|
||||
"Shadow Cache": "Cache onyinyo",
|
||||
"Shader Packs...": "Ngwungwu Shader...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Na-ejigharị maapụ onyinyo mkpọ mgbe anwụ, nlele na egwuregwu ụwa. Gbanyụọ na ndabara.",
|
||||
"Find BlueMap": "Chọta BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Na sava, na-achọta maapụ weebụ BlueMap ha maka ebe dị anya. sonye ọzọ.",
|
||||
|
||||
@@ -469,5 +469,6 @@
|
||||
"horizon.extras.cosmetics_auras.tooltip": "Auras og slóðir sem aðrir leikmenn klæðast. Slökkt sjálfgefið.",
|
||||
"horizon.extras.cosmetics.shown": "Sýnd",
|
||||
"horizon.extras.cosmetics.hidden": "Falinn",
|
||||
"horizon.extras.cosmetics.name_tags": "Eingöngu nafnamerki"
|
||||
"horizon.extras.cosmetics.name_tags": "Eingöngu nafnamerki",
|
||||
"Shader Packs...": "Shader pakkar..."
|
||||
}
|
||||
@@ -421,6 +421,7 @@
|
||||
"Frame Generation": "Generazione di fotogrammi",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Mostra un fotogramma inventato tra ciascuno dei due fotogrammi reali: più fluido, con un po' più di ritardo.",
|
||||
"Shadow Cache": "Cassa dell'Ombra",
|
||||
"Shader Packs...": "Pacchetti Shader...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Riutilizza la mappa delle ombre del pacchetto quando sole, vista e mondo corrispondono. Disattivato per impostazione predefinita.",
|
||||
"Find BlueMap": "Trova BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Sui server, trova la mappa web BlueMap per terreni lontani. Prossima partecipazione.",
|
||||
|
||||
@@ -425,6 +425,7 @@
|
||||
"Frame Generation": "フレーム生成",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "2 つの実際のフレームの間に構成されたフレームを表示します。よりスムーズで、少し遅れが生じます。",
|
||||
"Shadow Cache": "シャドウキャッシュ",
|
||||
"Shader Packs...": "シェーダーパック...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "太陽、ビュー、ワールドが一致する場合、パック シャドウ マップを再利用します。デフォルトではオフです。",
|
||||
"Find BlueMap": "ブルーマップを探す",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "サーバー上で、遠方の地形用の BlueMap Web マップを検索します。次に参加します。",
|
||||
|
||||
@@ -415,6 +415,7 @@
|
||||
"Frame Generation": "ჩარჩოს თაობა",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "აჩვენებს შედგენილ ჩარჩოს თითოეულ ორ რეალურს შორის: უფრო გლუვი, ცოტა მეტი ჩამორჩენა.",
|
||||
"Shadow Cache": "ჩრდილების ქეში",
|
||||
"Shader Packs...": "შადერის პაკეტები...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "ხელახლა იყენებს პაკეტის ჩრდილის რუკას, როდესაც მზე, ხედი და სამყარო ემთხვევა. ნაგულისხმევად გამორთულია.",
|
||||
"Find BlueMap": "იპოვეთ BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "სერვერებზე პოულობს მათ BlueMap ვებ რუკას შორეული რელიეფისთვის. შემდეგი შეერთება.",
|
||||
|
||||
@@ -415,6 +415,7 @@
|
||||
"F2 screenshots at this many times the game's resolution. Higher takes longer.": "F2 скриншоттары ойынның ажыратымдылығын бірнеше есе арттырады. Жоғарырақ болу ұзағырақ уақыт алады.",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Әрбір екі нақты жақтаудың арасында жасалған жақтауды көрсетеді: тегіс, сәл кідіріс.",
|
||||
"Shadow Cache": "Көлеңкелік кэш",
|
||||
"Shader Packs...": "Шейдер бумалары...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Күн, көрініс және әлем сәйкес болған кезде пакеттің көлеңке картасын қайта пайдаланады. Әдепкі бойынша өшірулі.",
|
||||
"Find BlueMap": "BlueMap табыңыз",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Серверлерде алыс жерлерге арналған BlueMap веб-картасын табады. Келесі қосылу.",
|
||||
|
||||
@@ -422,6 +422,7 @@
|
||||
"Frame Generation": "ಫ್ರೇಮ್ ಜನರೇಷನ್",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "ಪ್ರತಿ ಎರಡು ನೈಜವಾದವುಗಳ ನಡುವೆ ಮಾಡಿದ ಚೌಕಟ್ಟನ್ನು ತೋರಿಸುತ್ತದೆ: ಸುಗಮ, ಸ್ವಲ್ಪ ಹೆಚ್ಚು ವಿಳಂಬ.",
|
||||
"Shadow Cache": "ನೆರಳು ಸಂಗ್ರಹ",
|
||||
"Shader Packs...": "ಶೇಡರ್ ಪ್ಯಾಕ್ಗಳು...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "ಸೂರ್ಯ, ವೀಕ್ಷಣೆ ಮತ್ತು ಪ್ರಪಂಚವು ಹೊಂದಿಕೆಯಾದಾಗ ಪ್ಯಾಕ್ ನೆರಳು ನಕ್ಷೆಯನ್ನು ಮರುಬಳಕೆ ಮಾಡುತ್ತದೆ. ಡೀಫಾಲ್ಟ್ ಆಗಿ ಆಫ್.",
|
||||
"Find BlueMap": "ಬ್ಲೂಮ್ಯಾಪ್ ಅನ್ನು ಹುಡುಕಿ",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "ಸರ್ವರ್ಗಳಲ್ಲಿ, ದೂರದ ಭೂಪ್ರದೇಶಕ್ಕಾಗಿ ಅವರ ಬ್ಲೂಮ್ಯಾಪ್ ವೆಬ್ ನಕ್ಷೆಯನ್ನು ಕಂಡುಕೊಳ್ಳುತ್ತದೆ. ಮುಂದೆ ಸೇರಿಕೊಳ್ಳಿ.",
|
||||
|
||||
@@ -398,6 +398,7 @@
|
||||
"Frame Generation": "프레임 생성",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "실제 프레임 사이에 가상의 프레임을 삽입합니다: 더 부드러워지지만 지연이 약간 증가합니다.",
|
||||
"Shadow Cache": "그림자 캐시",
|
||||
"Shader Packs...": "셰이더 팩...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "태양, 시점, 월드가 일치할 때 팩 그림자 맵을 재사용합니다. 기본값은 끔입니다.",
|
||||
"Find BlueMap": "BlueMap 찾기",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "서버 접속 시 원거리 지형을 위한 BlueMap 웹 맵을 찾습니다. 다음 참여 시 적용됩니다.",
|
||||
|
||||
@@ -390,6 +390,7 @@
|
||||
"F2 screenshots at this many times the game's resolution. Higher takes longer.": "F2 скриншоттору бул оюндун резолюциясына көп жолу. Жогорку көбүрөөк убакыт талап кылынат.",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Ар бир эки реалдуу кадрдын ортосунда жасалган кадрды көрсөтөт: жылмакай, бир аз артта калуу.",
|
||||
"Shadow Cache": "Shadow кэш",
|
||||
"Shader Packs...": "Шейдер топтомдору...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Күн, көрүнүш жана дүйнө дал келгенде, таңгак көлөкө картасын кайра колдонот. Демейки боюнча өчүк.",
|
||||
"Find BlueMap": "BlueMap тап",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Серверлерде алардын BlueMap веб картасын алыскы аймактар үчүн табат. Кийинки кошулуу.",
|
||||
|
||||
@@ -409,6 +409,7 @@
|
||||
"Frame Generation": "Generaziun di fotogramm",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Mustra un quader truà intra ognun di dü reai: püsee lisc, un pooch püsee ritardo.",
|
||||
"Shadow Cache": "Cache d'ombra",
|
||||
"Shader Packs...": "Pacchett de ombreggiatura...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Dupera ancamò la mapa del ombra del pachett quand el sul, la vista e el mund curispunden. Disattiva per predefiniziun.",
|
||||
"Find BlueMap": "Truva BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Süi server, truva luur mapa web BlueMap per terren luntan. Prossim uniment.",
|
||||
|
||||
@@ -468,5 +468,6 @@
|
||||
"horizon.extras.cosmetics_auras.tooltip": "Aura ແລະ trails ຜູ້ນອື່ນໆໃສ່. ປິດຕາມຄ່າເລີ່ມຕົ້ນ.",
|
||||
"horizon.extras.cosmetics.shown": "ສະແດງໃຫ້ເຫັນ",
|
||||
"horizon.extras.cosmetics.hidden": "ເຊື່ອງໄວ້",
|
||||
"horizon.extras.cosmetics.name_tags": "ປ້າຍຊື່ເທົ່ານັ້ນ"
|
||||
"horizon.extras.cosmetics.name_tags": "ປ້າຍຊື່ເທົ່ານັ້ນ",
|
||||
"Shader Packs...": "ຊອງ Shader..."
|
||||
}
|
||||
@@ -421,6 +421,7 @@
|
||||
"Frame Generation": "Генерација на рамки",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Покажува изработена рамка помеѓу секоја две реални: помазна, малку повеќе заостанување.",
|
||||
"Shadow Cache": "Кеш во сенка",
|
||||
"Shader Packs...": "Пакети за шејдер...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Повторно ја користи мапата на сенки на пакетот кога сонцето, погледот и светот се совпаѓаат. Исклучено стандардно.",
|
||||
"Find BlueMap": "Најдете BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "На серверите, ја наоѓа нивната веб-мапа BlueMap за далечен терен. Следно придружете се.",
|
||||
|
||||
@@ -417,6 +417,7 @@
|
||||
"F2 screenshots at this many times the game's resolution. Higher takes longer.": "F2 дэлгэцийн агшин нь тоглоомын нягтралаас хэд дахин их. Өндөр нь илүү урт хугацаа шаарддаг.",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Хоёр бодит хоёрын хооронд зохиосон хүрээг харуулна: илүү зөөлөн, бага зэрэг хоцрогдолтой.",
|
||||
"Shadow Cache": "Сүүдрийн кэш",
|
||||
"Shader Packs...": "Shader багцууд...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Нар, харагдац, ертөнц таарах үед сүүдрийн зургийг дахин ашигладаг. Өгөгдмөлөөр унтраа.",
|
||||
"Find BlueMap": "BlueMap-г олоорой",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Серверүүдээс хол газрын BlueMap вэб газрын зургийг олдог. Дараагийн нэгдэх.",
|
||||
|
||||
@@ -405,6 +405,7 @@
|
||||
"Frame Generation": "Penjanaan Bingkai",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Menunjukkan bingkai yang dibuat antara setiap dua bingkai sebenar: lebih lancar, sedikit ketinggalan.",
|
||||
"Shadow Cache": "Cache Bayangan",
|
||||
"Shader Packs...": "Pek Shader...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Menggunakan semula peta bayangan pek apabila matahari, paparan dan dunia sepadan. Mati secara lalai.",
|
||||
"Find BlueMap": "Cari BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Pada pelayan, temui peta web BlueMap mereka untuk rupa bumi yang jauh. Sertai seterusnya.",
|
||||
|
||||
@@ -436,5 +436,6 @@
|
||||
"horizon.extras.cosmetics_auras.tooltip": "Auras u trails plejers oħra jilbsu. Mitfi awtomatikament.",
|
||||
"horizon.extras.cosmetics.shown": "murija",
|
||||
"horizon.extras.cosmetics.hidden": "Moħbija",
|
||||
"horizon.extras.cosmetics.name_tags": "Tikketti tal-isem biss"
|
||||
"horizon.extras.cosmetics.name_tags": "Tikketti tal-isem biss",
|
||||
"Shader Packs...": "Pakketti Shader..."
|
||||
}
|
||||
@@ -411,6 +411,7 @@
|
||||
"Frame Generation": "Framegeneratie",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Toont een verzonnen frame tussen elke twee echte: vloeiender, iets meer vertraging.",
|
||||
"Shadow Cache": "Schaduwcache",
|
||||
"Shader Packs...": "Shader-pakketten...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Hergebruikt de roedelschaduwkaart wanneer zon, zicht en wereld overeenkomen. Standaard uitgeschakeld.",
|
||||
"Find BlueMap": "Zoek BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Vindt op servers hun BlueMap-webkaart voor ver terrein. Volgende meedoen.",
|
||||
|
||||
@@ -453,5 +453,6 @@
|
||||
"horizon.extras.cosmetics_auras.tooltip": "Auraer og stier andre spillere har på seg. Av som standard.",
|
||||
"horizon.extras.cosmetics.shown": "Vist",
|
||||
"horizon.extras.cosmetics.hidden": "Skjult",
|
||||
"horizon.extras.cosmetics.name_tags": "Kun navnelapper"
|
||||
"horizon.extras.cosmetics.name_tags": "Kun navnelapper",
|
||||
"Shader Packs...": "Shader-pakker..."
|
||||
}
|
||||
@@ -405,6 +405,7 @@
|
||||
"Frame Generation": "Generacion de quadres",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Mòstra un encastre fabricat entre cadun dos reals: mai doç, un pauc mai de retard.",
|
||||
"Shadow Cache": "Cache d'ombra",
|
||||
"Shader Packs...": "Paquets de Shader...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Reutiliza la mapa d'ombra del paquet quand solelh, vista e mond correspondon. Desactivat per defaut.",
|
||||
"Find BlueMap": "Trobar BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Sus de servidors, tròba lor mapa web BlueMap per de terrens luènhs. Seguent rejónher.",
|
||||
|
||||
@@ -316,6 +316,7 @@
|
||||
"Frame Generation": "Generowanie klatek",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Pokazuje wygenerowaną klatkę między każdymi dwiema prawdziwymi: płynniej, trochę większe opóźnienie.",
|
||||
"Shadow Cache": "Pamięć cieni",
|
||||
"Shader Packs...": "Paczki shaderów…",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Używa ponownie mapy cieni paczki, gdy słońce, widok i świat się zgadzają. Domyślnie wyłączone.",
|
||||
"Synchronous": "Synchroniczne",
|
||||
"Asynchronous": "Asynchroniczne",
|
||||
|
||||
@@ -425,6 +425,7 @@
|
||||
"Frame Generation": "Geração de quadros",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Mostra um quadro composto entre cada dois quadros reais: mais suave, um pouco mais de atraso.",
|
||||
"Shadow Cache": "Cache de sombra",
|
||||
"Shader Packs...": "Pacotes de sombreadores...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Reutiliza o mapa de sombras do pacote quando o sol, a visão e o mundo correspondem. Desativado por padrão.",
|
||||
"Find BlueMap": "Encontre o BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Nos servidores, encontra seu mapa da web BlueMap para terrenos distantes. Próxima adesão.",
|
||||
|
||||
@@ -381,6 +381,7 @@
|
||||
"Frame Generation": "Geração de fotogramas",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Mostra um fotograma gerado entre cada dois reais: maior fluidez, com uma ligeira latência adicional.",
|
||||
"Shadow Cache": "Cache de sombras",
|
||||
"Shader Packs...": "Pacotes de shaders...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Reutiliza o mapa de sombras do pacote quando o sol, a visão e o mundo coincidem. Desligado por predefinição.",
|
||||
"Find BlueMap": "Encontrar BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Em servidores, encontra o mapa web BlueMap para terreno distante. Na próxima entrada.",
|
||||
|
||||
@@ -457,5 +457,6 @@
|
||||
"horizon.extras.cosmetics_auras.tooltip": "Aurele și traseele pe care le poartă alți jucători. Oprit implicit.",
|
||||
"horizon.extras.cosmetics.shown": "Afisat",
|
||||
"horizon.extras.cosmetics.hidden": "Ascuns",
|
||||
"horizon.extras.cosmetics.name_tags": "Numai etichete de nume"
|
||||
"horizon.extras.cosmetics.name_tags": "Numai etichete de nume",
|
||||
"Shader Packs...": "Pachete de shader..."
|
||||
}
|
||||
@@ -226,5 +226,6 @@
|
||||
"How frames reach the screen, and the performance overlay.": "Как кадры попадают на экран, и оверлей производительности.",
|
||||
"Brighter-than-white output on an HDR display.": "Вывод ярче белого на HDR-дисплее.",
|
||||
"Results for \"%s\"": "Результаты для «%s»",
|
||||
"No settings match.": "Нет подходящих настроек."
|
||||
"No settings match.": "Нет подходящих настроек.",
|
||||
"Shader Packs...": "Шейдерпаки..."
|
||||
}
|
||||
@@ -423,6 +423,7 @@
|
||||
"Frame Generation": "Кадрдары оҥоруу",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Икки дьиҥнээх икки ардыгар оҥоһуллубут рамканы көрдөрөр: сымнаҕас, кыратык хойутаан.",
|
||||
"Shadow Cache": "Күлүк кэш",
|
||||
"Shader Packs...": "Шейдер пакеттара...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Күн, көрүү уонна аан дойду сөп түбэстэхтэринэ, пакет күлүк хаартыскатын хаттаан туһанар. По умолчанию выключено.",
|
||||
"Find BlueMap": "BlueMap бул",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Сервердарга ыраах сиргэ BlueMap веб-каарталарын булар. Салгыы холбоһуҥ.",
|
||||
|
||||
@@ -395,6 +395,7 @@
|
||||
"Frame Generation": "Generovanie rámu",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Zobrazuje vytvorený rám medzi každým z dvoch skutočných: hladší, trochu viac oneskorenia.",
|
||||
"Shadow Cache": "Tieňová vyrovnávacia pamäť",
|
||||
"Shader Packs...": "Shader Pack...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Opätovne použije tieňovú mapu balenia, keď sa slnko, výhľad a svet zhodujú. Predvolene vypnuté.",
|
||||
"Find BlueMap": "Nájdite BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Na serveroch nájde svoju webovú mapu BlueMap pre vzdialený terén. Ďalšie pripojenie.",
|
||||
|
||||
@@ -470,5 +470,6 @@
|
||||
"horizon.extras.cosmetics_auras.tooltip": "Avre in sledi, ki jih nosijo drugi igralci. Privzeto izklopljeno.",
|
||||
"horizon.extras.cosmetics.shown": "Prikazano",
|
||||
"horizon.extras.cosmetics.hidden": "Skrito",
|
||||
"horizon.extras.cosmetics.name_tags": "Samo imenske oznake"
|
||||
"horizon.extras.cosmetics.name_tags": "Samo imenske oznake",
|
||||
"Shader Packs...": "Shader paketi..."
|
||||
}
|
||||
@@ -455,5 +455,6 @@
|
||||
"horizon.extras.cosmetics_auras.tooltip": "Auras iyo raad-raacyo ciyaartoy kale xidhaan. Demin sida caadiga ah.",
|
||||
"horizon.extras.cosmetics.shown": "Muujiyay",
|
||||
"horizon.extras.cosmetics.hidden": "Qarsoon",
|
||||
"horizon.extras.cosmetics.name_tags": "Magac tags kaliya"
|
||||
"horizon.extras.cosmetics.name_tags": "Magac tags kaliya",
|
||||
"Shader Packs...": "Xirmooyinka Shader..."
|
||||
}
|
||||
@@ -408,6 +408,7 @@
|
||||
"Frame Generation": "Gjenerimi i kornizës",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Tregon një kornizë të krijuar midis secilës dy të vërteta: më e butë, pak më shumë vonesë.",
|
||||
"Shadow Cache": "Cache hije",
|
||||
"Shader Packs...": "Paketat Shader...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Ripërdor hartën e hijes së paketës kur dielli, pamja dhe bota përputhen. Joaktiv si parazgjedhje.",
|
||||
"Find BlueMap": "Gjeni BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Në serverë, gjen hartën e tyre të internetit BlueMap për terrene të largëta. Bashkohu tjetër.",
|
||||
|
||||
@@ -426,6 +426,7 @@
|
||||
"Frame Generation": "Generacija okvira",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Prikazuje napravljeni okvir između svaka dva stvarna: glatkiji, malo više zaostajanja.",
|
||||
"Shadow Cache": "Shadov Cache",
|
||||
"Shader Packs...": "Shader paketi...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Ponovo koristi mapu senki paketa kada se poklope sunce, pogled i svet. Podrazumevano isključeno.",
|
||||
"Find BlueMap": "Pronađite BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Na serverima pronalazi njihovu BlueMap veb mapu za daleki teren. Sledeće pridruživanje.",
|
||||
|
||||
@@ -426,6 +426,7 @@
|
||||
"Frame Generation": "Генерација оквира",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Приказује направљени оквир између свака два стварна: глаткији, мало више заостајања.",
|
||||
"Shadow Cache": "Схадов Цацхе",
|
||||
"Shader Packs...": "Схадер пакети...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Поново користи мапу сенки пакета када се поклопе сунце, поглед и свет. Подразумевано искључено.",
|
||||
"Find BlueMap": "Пронађите БлуеМап",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "На серверима проналази њихову БлуеМап веб мапу за далеки терен. Следеће придруживање.",
|
||||
|
||||
@@ -454,5 +454,6 @@
|
||||
"horizon.extras.cosmetics_auras.tooltip": "Auror och spår som andra spelare bär. Av som standard.",
|
||||
"horizon.extras.cosmetics.shown": "Visas",
|
||||
"horizon.extras.cosmetics.hidden": "Dold",
|
||||
"horizon.extras.cosmetics.name_tags": "Endast namnlappar"
|
||||
"horizon.extras.cosmetics.name_tags": "Endast namnlappar",
|
||||
"Shader Packs...": "Shader-paket..."
|
||||
}
|
||||
@@ -415,6 +415,7 @@
|
||||
"Frame Generation": "Gyneracyjo rōm",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Pokazuje stworzōny rōm miyndzy kożdymi dwōma prawdziwymi: gładkij, trocha wiyncyj ôdwłōczki.",
|
||||
"Shadow Cache": "Pamiyńć podrzōdkowo ciyni",
|
||||
"Shader Packs...": "Pakiety ciyniōw...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Zaś używo karty ciyni, kej słōńce, widok i świat sztimujōm. Wyłōnczōne domyślnie.",
|
||||
"Find BlueMap": "Znojdź BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Na serwerach znojdzie jejich karta internetowo BlueMap do dalekigo terynu. Dalszy prziłōnczynie sie.",
|
||||
|
||||
@@ -422,6 +422,7 @@
|
||||
"Frame Generation": "பிரேம் தலைமுறை",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "ஒவ்வொரு இரண்டு உண்மையானவற்றிற்கும் இடையே ஒரு தயாரிக்கப்பட்ட சட்டத்தைக் காட்டுகிறது: மென்மையானது, இன்னும் கொஞ்சம் தாமதம்.",
|
||||
"Shadow Cache": "நிழல் கேச்",
|
||||
"Shader Packs...": "ஷேடர் பேக்ஸ்...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "சூரியன், காட்சி மற்றும் உலகம் பொருந்தும்போது பேக் நிழல் வரைபடத்தை மீண்டும் பயன்படுத்துகிறது. இயல்பாக ஆஃப்.",
|
||||
"Find BlueMap": "BlueMap ஐக் கண்டறியவும்",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "சேவையகங்களில், தொலைதூர நிலப்பரப்பிற்கான அவர்களின் BlueMap வலை வரைபடத்தைக் கண்டறியும். அடுத்து சேரவும்.",
|
||||
|
||||
@@ -429,6 +429,7 @@
|
||||
"Frame Generation": "การสร้างเฟรม",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "แสดงเฟรมที่ถูกสร้างขึ้นระหว่างเฟรมจริงสองเฟรม: นุ่มนวลกว่า แลคกว่าเล็กน้อย",
|
||||
"Shadow Cache": "แคชเงา",
|
||||
"Shader Packs...": "เชเดอร์แพ็ค...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "ใช้แผนที่เงาแพ็คซ้ำเมื่อดวงอาทิตย์ มุมมอง และโลกตรงกัน ปิดโดยค่าเริ่มต้น",
|
||||
"Find BlueMap": "ค้นหาบลูแมป",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "บนเซิร์ฟเวอร์ ค้นหาแผนที่เว็บ BlueMap สำหรับภูมิประเทศที่ห่างไกล เข้าร่วมต่อไป.",
|
||||
|
||||
@@ -221,5 +221,6 @@
|
||||
"How frames reach the screen, and the performance overlay.": "Karelerin ekrana nasıl ulaştığı ve performans kaplaması.",
|
||||
"Brighter-than-white output on an HDR display.": "HDR ekranda beyazdan parlak çıkış.",
|
||||
"Results for \"%s\"": "\"%s\" için sonuçlar",
|
||||
"No settings match.": "Eşleşen ayar yok."
|
||||
"No settings match.": "Eşleşen ayar yok.",
|
||||
"Shader Packs...": "Gölgelendirici Paketleri..."
|
||||
}
|
||||
@@ -416,6 +416,7 @@
|
||||
"Frame Generation": "Рам буын",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Realәрбер реаль арада ясалган рамны күрсәтә: йомшак, бераз артта калу.",
|
||||
"Shadow Cache": "Күләгә Кэш",
|
||||
"Shader Packs...": "Шейдер пакетлар ...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Кояш, күренеш һәм дөнья туры килгәндә пакет күләгә картасын кабат куллана. Килешү буенча сүндерелгән.",
|
||||
"Find BlueMap": "BlueMap табыгыз",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Серверларда, аларның BlueMap веб картасын ерак җирләр өчен табалар. Киләсе кушылыгыз.",
|
||||
|
||||
@@ -316,6 +316,7 @@
|
||||
"Frame Generation": "Генерація кадрів",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Показує згенерований кадр між кожними двома справжніми: плавніше, трохи більша затримка.",
|
||||
"Shadow Cache": "Кеш тіней",
|
||||
"Shader Packs...": "Пакети шейдерів…",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Повторно використовує карту тіней пакета, коли сонце, вигляд і світ збігаються. Типово вимкнено.",
|
||||
"Synchronous": "Синхронно",
|
||||
"Asynchronous": "Асинхронно",
|
||||
|
||||
@@ -399,5 +399,6 @@
|
||||
"horizon.repro.bundle": "ریپرو بنڈل: %s",
|
||||
"horizon.repro.error": "ریپرو: %s",
|
||||
"horizon.repro.no_recording": "برآمد کرنے کے لیے ابھی تک کوئی ریکارڈنگ نہیں ہے۔",
|
||||
"horizon.repro.replay_started": "ری پلے شروع ہو گیا: %s"
|
||||
"horizon.repro.replay_started": "ری پلے شروع ہو گیا: %s",
|
||||
"Shader Packs...": "شیڈر پیکس..."
|
||||
}
|
||||
@@ -406,6 +406,7 @@
|
||||
"Frame Generation": "Ramka yaratish",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Har ikki haqiqiy ramka o'rtasida tuzilgan ramkani ko'rsatadi: silliqroq, biroz kechikish.",
|
||||
"Shadow Cache": "Soya keshi",
|
||||
"Shader Packs...": "Shader toʻplamlari...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Quyosh, ko'rinish va dunyo mos kelganda to'plam soya xaritasidan qayta foydalanadi. Sukut boʻyicha oʻchirilgan.",
|
||||
"Find BlueMap": "BlueMap-ni toping",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Serverlarda uzoq erlar uchun BlueMap veb-xaritasini topadi. Keyingi qo'shilish.",
|
||||
|
||||
@@ -468,5 +468,6 @@
|
||||
"horizon.extras.cosmetics_auras.tooltip": "Aure e sentieri che altri zugadori i ga. Spento par indebołimento.",
|
||||
"horizon.extras.cosmetics.shown": "Mostrà",
|
||||
"horizon.extras.cosmetics.hidden": "Sconto",
|
||||
"horizon.extras.cosmetics.name_tags": "Solo etichete de nome"
|
||||
"horizon.extras.cosmetics.name_tags": "Solo etichete de nome",
|
||||
"Shader Packs...": "Pachetti de Shader..."
|
||||
}
|
||||
@@ -420,6 +420,7 @@
|
||||
"Frame Generation": "Tạo khung",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Hiển thị khung hình tạo sẵn giữa hai khung hình thực: mượt mà hơn, độ trễ hơn một chút.",
|
||||
"Shadow Cache": "Bộ nhớ đệm bóng tối",
|
||||
"Shader Packs...": "Gói đổ bóng...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Tái sử dụng bản đồ bóng gói khi mặt trời, chế độ xem và thế giới khớp với nhau. Tắt theo mặc định.",
|
||||
"Find BlueMap": "Tìm BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Trên máy chủ, tìm bản đồ web BlueMap của họ cho địa hình xa. Tiếp theo tham gia.",
|
||||
|
||||
@@ -420,6 +420,7 @@
|
||||
"Frame Generation": "ראַם דור",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "ווייזט אַ געמאכט-אַרויף ראַם צווישן יעדער צוויי פאַקטיש אָנעס: סמודער, אַ ביסל מער אָפּשטיי.",
|
||||
"Shadow Cache": "שאָטן קאַש",
|
||||
"Shader Packs...": "שאַדער פּאַקס ...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "ריוזז די פּאַק שאָטן מאַפּע ווען זון, מיינונג און וועלט גלייַכן. אַוועק דורך פעליקייַט.",
|
||||
"Find BlueMap": "געפֿינען BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "אויף סערווערס, איר געפֿינען זייער BlueMap וועב מאַפּע פֿאַר ווייַט טעריין. ווייַטער פאַרבינדן.",
|
||||
|
||||
@@ -412,6 +412,7 @@
|
||||
"Frame Generation": "Fireemu Iran",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "Ṣe afihan fireemu ti a ṣe laarin ọkọọkan awọn gidi meji: didan, aisun diẹ sii.",
|
||||
"Shadow Cache": "Kaṣe ojiji",
|
||||
"Shader Packs...": "Awọn akopọ Shader...",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "Tun lo maapu ojiji idii nigbati oorun, wiwo ati ibaamu agbaye. Paa nipa aiyipada.",
|
||||
"Find BlueMap": "Wa BlueMap",
|
||||
"On servers, finds their BlueMap web map for far terrain. Next join.": "Lori awọn olupin, rii maapu wẹẹbu BlueMap wọn fun ilẹ jijin. Next da.",
|
||||
|
||||
@@ -333,6 +333,7 @@
|
||||
"Frame Generation": "帧生成",
|
||||
"Shows a made-up frame between each two real ones: smoother, a little more lag.": "在每两个真实帧之间插入一个生成帧:更流畅,延迟略增。",
|
||||
"Shadow Cache": "阴影缓存",
|
||||
"Shader Packs...": "光影包…",
|
||||
"Reuses the pack shadow map when sun, view and world match. Off by default.": "太阳、视角和世界不变时重复使用资源包的阴影贴图。默认关闭。",
|
||||
"Synchronous": "同步",
|
||||
"Asynchronous": "异步",
|
||||
|
||||
@@ -268,6 +268,7 @@ const PAGES: Ty = Ty::Enum(&[
|
||||
"extras",
|
||||
"horizon",
|
||||
"agent",
|
||||
"video-vanilla",
|
||||
]);
|
||||
|
||||
/// `--confirm`, required by destructive commands: the player agreed.
|
||||
|
||||
@@ -5932,7 +5932,15 @@ impl Game<'_> {
|
||||
// EnderChestBlock.useWithoutItem
|
||||
self.award_custom_stat("open_enderchest", 1);
|
||||
self.anger_piglins(true);
|
||||
// EnderChestBlockEntity.startOpen: the first opener's CONTAINER_OPEN
|
||||
// (ContainerOpenersCounter.incrementOpeners), as for chests below.
|
||||
if self.container_opener_event(key, true) {
|
||||
self.post_block_game_event(
|
||||
"minecraft:container_open",
|
||||
[key.0, key.1, key.2],
|
||||
Some(horizon_client::mobs::Who::Player),
|
||||
None,
|
||||
);
|
||||
self.container_edge_sound(key, true);
|
||||
}
|
||||
} else if &*name == "minecraft:beacon" && self.open_station(pos, &name) {
|
||||
|
||||
@@ -496,10 +496,18 @@ impl Game<'_> {
|
||||
if &*stack.item != "minecraft:armor_stand" {
|
||||
return false;
|
||||
}
|
||||
let Some((pos, stand)) = self.armor_stand_spawn(hit, stack) else {
|
||||
let Some((pos, mut stand)) = self.armor_stand_spawn(hit, stack) else {
|
||||
return false;
|
||||
};
|
||||
// EntityType.create(.., tryMoveDown, movedUp): the new stand falls onto what is under it,
|
||||
// up to two blocks (a bottom slab, the block under replaced grass).
|
||||
let drop = self.drop_offset_from(0.5, 1.975, (pos[0], pos[1], pos[2]), true);
|
||||
stand.position.y = f64::from(pos[1]) + drop;
|
||||
stand.previous = stand.position;
|
||||
let foot = stand.position;
|
||||
// EntityType.create's spawn yaw, `level.getRandom().nextFloat() * 360`, before
|
||||
// ArmorStandItem.useOn turns the stand to face the player.
|
||||
self.world.random.next_float();
|
||||
self.next_entity += 1;
|
||||
self.audio.play(
|
||||
"minecraft:entity.armor_stand.place",
|
||||
@@ -507,11 +515,16 @@ impl Game<'_> {
|
||||
0.75,
|
||||
0.8,
|
||||
);
|
||||
// ArmorStandItem.useOn: the stand's ENTITY_PLACE, by the player.
|
||||
let ctx = self.player_context(None);
|
||||
self.post_game_event("minecraft:entity_place", [foot.x, foot.y, foot.z], ctx);
|
||||
self.world.modified.insert((pos[0] >> 4, pos[2] >> 4));
|
||||
self.armor_stands.push(stand);
|
||||
if !self.creative {
|
||||
self.consume_held();
|
||||
}
|
||||
// ItemStack.useOn counts the use.
|
||||
self.award_stat("used", &stack.item, 1);
|
||||
// ArmorStandItem.useOn returns SUCCESS: the hand swings.
|
||||
self.swing_arm();
|
||||
true
|
||||
|
||||
@@ -55,7 +55,7 @@ const HELP: &[&str] = &[
|
||||
"chat TEXT send a chat line or /command as if typed",
|
||||
"type TEXT type into the open chat box (key enter tap sends)",
|
||||
"chat-log [N] the newest N chat messages (default 10)",
|
||||
"options [PAGE] open the options (video sound controls keybinds mouse chat accessibility language font packs mods graphics graphics-advanced graphics-hdr)",
|
||||
"options [PAGE] open the options (video sound controls keybinds mouse chat accessibility language font packs mods graphics graphics-advanced graphics-hdr video-vanilla)",
|
||||
"stats [reset] [raw] frame-time summary since the last reset (raw: every frame time too)",
|
||||
"narration the narrator's status and the last messages it was asked to say",
|
||||
"bench SECONDS reset stats, wait, then reply with the summary",
|
||||
@@ -984,7 +984,9 @@ impl Game<'_> {
|
||||
use horizon_client::options_ui::Page;
|
||||
let page = match words.get(1).copied().unwrap_or("main") {
|
||||
"main" => Page::Main,
|
||||
"video" => Page::Video,
|
||||
// What Video Settings... opens; vanilla's own layout, which no menu opens.
|
||||
"video" => Page::Graphics,
|
||||
"video-vanilla" => Page::Video,
|
||||
"sound" => Page::Sound,
|
||||
"controls" => Page::Controls,
|
||||
"keybinds" => Page::KeyBinds,
|
||||
|
||||
@@ -422,6 +422,12 @@ impl Game<'_> {
|
||||
/// persistent: the despawn rule holds it like any other mob, and only
|
||||
/// its NBT can make it persistent.
|
||||
pub(super) fn spawn_mob_spawned(&mut self, kind: &str, at: [f64; 3]) -> Option<u32> {
|
||||
// Ender Dragons have their own entity implementation rather than a
|
||||
// `Mob` entry. Spawn eggs still go through `SpawnEggItem.spawnMob`,
|
||||
// so route this special entity through the same spawned-entity path.
|
||||
if matches!(kind, "ender_dragon" | "minecraft:ender_dragon") {
|
||||
return self.spawn_dragon_spawned(at);
|
||||
}
|
||||
// The spawn is not a natural one (no jockeys, the patrol leader roll
|
||||
// stays), but the mob is not persistent.
|
||||
let id = self.spawn_mob_for(kind, at, true, false)?;
|
||||
|
||||
@@ -156,12 +156,16 @@ impl Game<'_> {
|
||||
self.tick_chunks.clear();
|
||||
self.sync_tick_chunks();
|
||||
self.mobs.clear();
|
||||
self.dragon = None;
|
||||
self.dropped.clear();
|
||||
self.creatures.projectiles.clear();
|
||||
self.tnts.clear();
|
||||
self.boats.clear();
|
||||
self.carts.clear();
|
||||
self.armor_stands.clear();
|
||||
self.crystals.clear();
|
||||
self.paintings.clear();
|
||||
self.item_frames.clear();
|
||||
self.rockets.clear();
|
||||
self.potions.clear_thrown();
|
||||
self.level_events.clear();
|
||||
@@ -1146,6 +1150,15 @@ impl Game<'_> {
|
||||
let (p, v) = (m.position, m.velocity);
|
||||
out.push(line(&m.kind.id, [p.x, p.y, p.z], [v.x, v.y, v.z], ""));
|
||||
}
|
||||
if let Some(d) = &self.dragon {
|
||||
let p = d.position;
|
||||
out.push(line(
|
||||
"minecraft:ender_dragon",
|
||||
[p.x, p.y, p.z],
|
||||
[0.0; 3],
|
||||
"",
|
||||
));
|
||||
}
|
||||
for s in self
|
||||
.armor_stands
|
||||
.iter()
|
||||
@@ -1226,5 +1239,23 @@ impl Game<'_> {
|
||||
let (p, v) = (c.position, c.velocity);
|
||||
out.push(line(c.kind.id(), [p.x, p.y, p.z], [v.x, v.y, v.z], ""));
|
||||
}
|
||||
for c in &self.crystals {
|
||||
let p = c.position;
|
||||
out.push(line("minecraft:end_crystal", [p.x, p.y, p.z], [0.0; 3], ""));
|
||||
}
|
||||
// A hanging entity's position is its box's centre (HangingEntity.recalculateBoundingBox).
|
||||
let centre =
|
||||
|(lo, hi): ([f64; 3], [f64; 3])| std::array::from_fn(|i| (lo[i] + hi[i]) / 2.0);
|
||||
for p in &self.paintings {
|
||||
out.push(line("minecraft:painting", centre(p.bounds()), [0.0; 3], ""));
|
||||
}
|
||||
for f in &self.item_frames {
|
||||
let kind = if f.glow {
|
||||
"minecraft:glow_item_frame"
|
||||
} else {
|
||||
"minecraft:item_frame"
|
||||
};
|
||||
out.push(line(kind, centre(f.bounds()), [0.0; 3], ""));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -767,10 +767,16 @@ impl Game<'_> {
|
||||
}
|
||||
out
|
||||
}
|
||||
/// `EntityType.getYOffset(level, pos, false, box)`: the entity box set on
|
||||
/// `EntityType.getYOffset(level, pos, false, box)`: [`Self::drop_offset_from`] without
|
||||
/// `movedUp`.
|
||||
pub(super) fn drop_offset(&self, width: f64, height: f64, p: Pos) -> f64 {
|
||||
self.drop_offset_from(width, height, p, false)
|
||||
}
|
||||
/// `EntityType.getYOffset(level, pos, movedUp, box)`: the entity box set on
|
||||
/// top of the block (`setPos(x + 0.5, y + 1, z + 0.5)`) falls one block
|
||||
/// against the collision shapes overlapping that block alone.
|
||||
fn drop_offset(&self, width: f64, height: f64, p: Pos) -> f64 {
|
||||
/// against the collision shapes overlapping that block, or, `moved_up`, two
|
||||
/// blocks against those of the block and the one under it.
|
||||
pub(super) fn drop_offset_from(&self, width: f64, height: f64, p: Pos, moved_up: bool) -> f64 {
|
||||
use horizon_world::{
|
||||
block_collision_scan::BlockCollisionScan, collision_context::CollisionContext,
|
||||
};
|
||||
@@ -782,7 +788,11 @@ impl Game<'_> {
|
||||
Vec3::new(x + h, y + height, z + h),
|
||||
);
|
||||
let cell = Aabb::new(
|
||||
Vec3::new(f64::from(p.0), f64::from(p.1), f64::from(p.2)),
|
||||
Vec3::new(
|
||||
f64::from(p.0),
|
||||
f64::from(p.1) - if moved_up { 1.0 } else { 0.0 },
|
||||
f64::from(p.2),
|
||||
),
|
||||
Vec3::new(
|
||||
f64::from(p.0) + 1.0,
|
||||
f64::from(p.1) + 1.0,
|
||||
@@ -794,7 +804,7 @@ impl Game<'_> {
|
||||
binding: self.collision,
|
||||
subject: None,
|
||||
};
|
||||
let mut amount = -1.0;
|
||||
let mut amount = if moved_up { -2.0 } else { -1.0 };
|
||||
// Level.getCollisions(null, aabb): CollisionContext.empty().
|
||||
if let Ok(scan) = BlockCollisionScan::new(
|
||||
&mut scene,
|
||||
@@ -818,6 +828,23 @@ impl Game<'_> {
|
||||
} else {
|
||||
format!("minecraft:{kind}")
|
||||
};
|
||||
// Ender Dragons are simulated separately from `Mob` and therefore do
|
||||
// not have a mob-type registry entry for the generic dispenser path.
|
||||
if name == "minecraft:ender_dragon" {
|
||||
// `EntityType.getYOffset` uses the created entity's full 16 by 8
|
||||
// bounding box when the dispenser asks to move it down.
|
||||
let y_off = if try_move_down {
|
||||
self.drop_offset(16.0, 8.0, p)
|
||||
} else {
|
||||
0.0
|
||||
};
|
||||
let at = [
|
||||
f64::from(p.0) + 0.5,
|
||||
f64::from(p.1) + y_off,
|
||||
f64::from(p.2) + 0.5,
|
||||
];
|
||||
return self.spawn_dragon_spawned(at);
|
||||
}
|
||||
let t = self.res.mob_types().get(&name)?.clone();
|
||||
let y_off = if try_move_down {
|
||||
self.drop_offset(t.width, t.height, p)
|
||||
@@ -956,6 +983,9 @@ impl Game<'_> {
|
||||
}
|
||||
/// After `EntityType.spawn` / `MobBucketItem.spawn`: `mob.playAmbientSound()`.
|
||||
fn mob_ambient(&mut self, id: u32) -> Result<()> {
|
||||
if self.dragon_spawn_ambient(id) {
|
||||
return Ok(());
|
||||
}
|
||||
let Some(i) = self.mobs.iter().position(|m| m.id == id) else {
|
||||
return Ok(());
|
||||
};
|
||||
|
||||
@@ -3658,7 +3658,10 @@ impl Game<'_> {
|
||||
if self.entity_in(room) {
|
||||
return false;
|
||||
}
|
||||
let time = self.world.random.next_int_bound(100_000).unwrap_or(0);
|
||||
// EndCrystal's constructor: `this.random.nextInt(100000)`, the crystal's own random.
|
||||
let time = super::dispenser::entity_random()
|
||||
.next_int_bound(100_000)
|
||||
.unwrap_or(0);
|
||||
// EndCrystal's constructor takes an id from the entity counter, so
|
||||
// the crystal is an entity a command can name (`@e[type=end_crystal]`).
|
||||
self.next_entity += 1;
|
||||
@@ -3670,6 +3673,8 @@ impl Game<'_> {
|
||||
beam: None,
|
||||
invulnerable: false,
|
||||
});
|
||||
// EndCrystalItem.useOn: ENTITY_PLACE at the block above, by the player.
|
||||
self.post_block_game_event("minecraft:entity_place", above, self.sculk_actor(), None);
|
||||
self.world.modified.insert((above[0] >> 4, above[2] >> 4));
|
||||
if self.dim == Dim::End {
|
||||
self.try_respawn();
|
||||
@@ -3677,6 +3682,8 @@ impl Game<'_> {
|
||||
if !self.creative {
|
||||
self.consume_held();
|
||||
}
|
||||
// ItemStack.useOn counts the use.
|
||||
self.award_stat("used", &stack.item, 1);
|
||||
self.swing_arm();
|
||||
true
|
||||
}
|
||||
@@ -4161,6 +4168,50 @@ impl Game<'_> {
|
||||
/// sends its moves, health and phase; the client flaps its wings, keeps
|
||||
/// its flight history and places its parts, so it can be drawn and hit.
|
||||
impl Game<'_> {
|
||||
/// `Mob.playAmbientSound` when EntityType.spawn places a dragon.
|
||||
pub(super) fn dragon_spawn_ambient(&mut self, id: u32) -> bool {
|
||||
let Some(d) = self.dragon.as_mut().filter(|d| d.id == id) else {
|
||||
return false;
|
||||
};
|
||||
let at = [d.position.x, d.position.y, d.position.z];
|
||||
let pitch = (d.random.next_float() - d.random.next_float()) * 0.2 + 1.0;
|
||||
self.audio.play(
|
||||
"minecraft:entity.ender_dragon.ambient",
|
||||
Some(at),
|
||||
5.0,
|
||||
pitch,
|
||||
);
|
||||
true
|
||||
}
|
||||
|
||||
/// `EntityType.create` for an Ender Dragon from a spawn egg, by hand or from a dispenser
|
||||
/// (`SpawnEggItem.spawnMob`, `SpawnEggItemBehavior`). Unlike the End fight's dragon, this
|
||||
/// one is not the fight's (`EnderDragon.aiStep` adopts it only when its UUID is the fight's),
|
||||
/// so it can be spawned in any dimension. Horizon keeps one dragon per level, as `/summon`
|
||||
/// and loading do: with one already there, nothing spawns and the egg stays.
|
||||
pub(super) fn spawn_dragon_spawned(&mut self, at: [f64; 3]) -> Option<u32> {
|
||||
if self.dragon.is_some() {
|
||||
return None;
|
||||
}
|
||||
let position = Vec3::new(at[0], at[1], at[2]);
|
||||
// EntityType.create: `snapTo(.., Mth.wrapDegrees(level.getRandom().nextFloat() * 360))`.
|
||||
let yaw = horizon_client::camera::wrap_degrees(self.world.random.next_float() * 360.0);
|
||||
// Mob.finalizeSpawn (EnderDragon keeps it): the follow range's
|
||||
// `random.triangle(0, 0.11485)`, then `setLeftHanded(nextFloat() < 0.05)`, from the
|
||||
// level's random. Neither changes how the dragon flies.
|
||||
let _ = self.world.random.triangle(0.0, 0.114_850_000_000_000_01);
|
||||
let _ = self.world.random.next_float();
|
||||
// The dragon's own random (`Entity.random`), not the level's.
|
||||
let seed = super::dispenser::entity_random().next_long();
|
||||
let mut dragon = Dragon::new(position, yaw, seed);
|
||||
dragon.id = self.next_entity + 1;
|
||||
self.next_entity += 9;
|
||||
let id = dragon.id;
|
||||
self.dragon = Some(dragon);
|
||||
self.place_dragon_parts();
|
||||
Some(id)
|
||||
}
|
||||
|
||||
/// `handleAddEntity` for `minecraft:ender_dragon`. Its constructor
|
||||
/// sets the full health and the hovering phase until the server's
|
||||
/// synched data says otherwise.
|
||||
|
||||
@@ -185,7 +185,9 @@ impl Game<'_> {
|
||||
..horizon_client::chunk::MIN_Y + horizon_client::chunk::HEIGHT)
|
||||
.contains(&pos[1])
|
||||
{
|
||||
return false;
|
||||
// ItemFrameItem.mayPlace's FAIL.
|
||||
self.use_failed = true;
|
||||
return true;
|
||||
}
|
||||
let frame = ItemFrame {
|
||||
id: self.next_entity + 1,
|
||||
@@ -200,8 +202,10 @@ impl Game<'_> {
|
||||
check_interval: 0,
|
||||
custom_name,
|
||||
};
|
||||
// HangingEntity.survives false: CONSUME, which ItemStack.useOn still counts as a use.
|
||||
if !self.frame_survives(&frame) {
|
||||
return false;
|
||||
self.award_stat("used", &stack.item, 1);
|
||||
return true;
|
||||
}
|
||||
let kind = if glow {
|
||||
"minecraft:glow_item_frame"
|
||||
@@ -214,11 +218,16 @@ impl Game<'_> {
|
||||
self.next_entity += 1;
|
||||
self.audio
|
||||
.play(&sound(&frame, "place"), Some(center(&frame)), 1.0, 1.0);
|
||||
// HangingEntityItem.useOn: ENTITY_PLACE at the frame, by the player, before it is
|
||||
// added; ItemStack.useOn then counts the use.
|
||||
let ctx = self.player_context(None);
|
||||
self.post_game_event("minecraft:entity_place", center(&frame), ctx);
|
||||
self.world.modified.insert((pos[0] >> 4, pos[2] >> 4));
|
||||
self.item_frames.push(frame);
|
||||
if !self.creative {
|
||||
self.consume_held();
|
||||
}
|
||||
self.award_stat("used", &stack.item, 1);
|
||||
true
|
||||
}
|
||||
/// The frame under the crosshair within reach and its distance.
|
||||
|
||||
@@ -2063,9 +2063,19 @@ impl Game<'_> {
|
||||
[cart.position.x, cart.position.y, cart.position.z],
|
||||
);
|
||||
}
|
||||
// MinecartItem.useOn: ENTITY_PLACE at the rail, by the player, with the block under it.
|
||||
let below = self.world.block(hit.pos[0], hit.pos[1] - 1, hit.pos[2]);
|
||||
self.post_block_game_event(
|
||||
"minecraft:entity_place",
|
||||
hit.pos,
|
||||
self.sculk_actor(),
|
||||
Some(below),
|
||||
);
|
||||
if !self.creative {
|
||||
self.consume_held();
|
||||
}
|
||||
// ItemStack.useOn counts the use.
|
||||
self.award_stat("used", &stack.item, 1);
|
||||
self.swing_arm();
|
||||
true
|
||||
}
|
||||
|
||||
@@ -317,7 +317,7 @@ impl Game<'_> {
|
||||
let framebuffer = self.renderer.as_ref().map_or([1280, 720], |r| {
|
||||
[r.config.width as i32, r.config.height as i32]
|
||||
});
|
||||
if self.ui.options.page() == Page::Video && self.has_control_down() {
|
||||
if self.ui.options.video_open() && self.has_control_down() {
|
||||
// VideoSettingsScreen.mouseScrolled: Ctrl with the wheel steps the GUI scale.
|
||||
let mut ui = std::mem::take(&mut self.ui.options);
|
||||
let events = ui.video_wheel_gui_scale(&mut self.settings, framebuffer, amount);
|
||||
@@ -485,8 +485,7 @@ impl Game<'_> {
|
||||
{
|
||||
self.settings.video_modes = modes;
|
||||
}
|
||||
let in_video_screen = self.screen == Screen::Options
|
||||
&& self.ui.options.page() == horizon_client::options_ui::Page::Video;
|
||||
let in_video_screen = self.screen == Screen::Options && self.ui.options.video_open();
|
||||
let wanted = self.settings.fullscreen;
|
||||
let exclusive = self.settings.file.bool("exclusiveFullscreen");
|
||||
let preferred = self
|
||||
|
||||
@@ -185,8 +185,10 @@ impl Game<'_> {
|
||||
if &*stack.item != "minecraft:painting" {
|
||||
return false;
|
||||
}
|
||||
// HangingEntityItem.mayPlace: never on a top or bottom face (FAIL).
|
||||
let Some(facing) = painting_facing(hit.face) else {
|
||||
return false;
|
||||
self.use_failed = true;
|
||||
return true;
|
||||
};
|
||||
let pos = [
|
||||
hit.pos[0] + hit.face[0],
|
||||
@@ -214,13 +216,14 @@ impl Game<'_> {
|
||||
fitting.push(v);
|
||||
}
|
||||
}
|
||||
// Nothing fits: CONSUME, which ItemStack.useOn still counts as a use.
|
||||
let Some(largest) = fitting.iter().map(|v| v.width * v.height).max() else {
|
||||
return false;
|
||||
self.award_stat("used", &stack.item, 1);
|
||||
return true;
|
||||
};
|
||||
fitting.retain(|v| v.width * v.height >= largest);
|
||||
let pick = self
|
||||
.world
|
||||
.random
|
||||
// Util.getRandomSafe(variants, candidate.random): the painting's own random.
|
||||
let pick = super::dispenser::entity_random()
|
||||
.next_int_bound(fitting.len() as i32)
|
||||
.unwrap_or(0) as usize;
|
||||
let v = &fitting[pick];
|
||||
@@ -231,7 +234,8 @@ impl Game<'_> {
|
||||
if let Some(v) = self.painting_variants.of_stack(stack).cloned() {
|
||||
(candidate.variant, candidate.width, candidate.height) = (v.id, v.width, v.height);
|
||||
if !self.painting_survives(&candidate) {
|
||||
return false;
|
||||
self.award_stat("used", &stack.item, 1);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if self.hanging_place_cancelled("minecraft:painting", pos) {
|
||||
@@ -245,11 +249,16 @@ impl Game<'_> {
|
||||
];
|
||||
self.audio
|
||||
.play("minecraft:entity.painting.place", Some(at), 1.0, 1.0);
|
||||
// HangingEntityItem.useOn: ENTITY_PLACE at the painting, by the player, before it is
|
||||
// added; ItemStack.useOn then counts the use.
|
||||
let ctx = self.player_context(None);
|
||||
self.post_game_event("minecraft:entity_place", at, ctx);
|
||||
self.paintings.push(candidate);
|
||||
self.world.modified.insert((pos[0] >> 4, pos[2] >> 4));
|
||||
if !self.creative {
|
||||
self.consume_held();
|
||||
}
|
||||
self.award_stat("used", &stack.item, 1);
|
||||
// HangingEntityItem.useOn returns SUCCESS: the hand swings.
|
||||
self.swing_arm();
|
||||
true
|
||||
|
||||
+1
-1
@@ -31,7 +31,7 @@ To play, use [the launcher](../launcher/README.md); the project site is [playhor
|
||||
- [Opt-in data collection](telemetry.md): the consent, exactly what is sent, how it is stored and sent.
|
||||
- [Benchmark report format](benchmark-report.md): the versioned JSON every benchmark writes (game, launcher, `tools/perf_bench.py`), the local log and, with consent, the upload.
|
||||
- [Horizon APIs](api/README.md): every surface other programs build on (mods, shaders, agent control, servers, the launcher, data formats), each with its guide, generated reference, stability and changelog, and the [stability and versioning policy](api/stability.md).
|
||||
- Menus: every screen is vanilla's (title, world list, create world, multiplayer, options, pause), except Horizon's graphics settings, drawn in the design system's Blocks palette. Horizon's own settings hang off vanilla's Options the way mods add theirs: **Horizon Settings...** and **Mods...** in the last two slots of the Options grid (Horizon Settings opens the graphics settings screen, at General or Advanced, the controller settings screen in the same style, and Extras and Mods, each a vanilla options list), with Horizon Graphics and Advanced Graphics also at the top of Video Settings and Controller Settings at the bottom of Controls. The title screen's and pause menu's Friends buttons open Join a Friend and Play with Friends ([play-with-friends.md](play-with-friends.md)).
|
||||
- Menus: every screen is vanilla's (title, world list, create world, multiplayer, options, pause), except Horizon's graphics settings, drawn in the design system's Blocks palette. Horizon's own settings hang off vanilla's Options the way mods add theirs, each in one place: **Video Settings...** opens Horizon's graphics settings screen (every video option, the graphics extras and the shader packs), **Controls → Controller Settings...** the controller settings screen in the same style, **Mods...** and **Horizon Settings...** take the last two slots of the Options grid (Horizon Settings opens Extras, PvP & HUD, Splitscreen, Replay Studio and AI Agent, each a vanilla options list). The title screen's and pause menu's Friends buttons open Join a Friend and Play with Friends ([play-with-friends.md](play-with-friends.md)).
|
||||
|
||||
## Parity
|
||||
|
||||
|
||||
@@ -130,7 +130,7 @@ passes on without checking it).
|
||||
| Open to LAN | Pause > Open to LAN | part | no | yes | yes | `lan open\|close\|status` |
|
||||
| Play with Friends: host, stop, status | Pause | part | no | yes | yes | `friends host\|stop\|status` |
|
||||
| Vanilla options, every page | Options | yes | part | yes | yes | `options-get`, `options-set` (all of options.txt, typed); `options PAGE` was socket-only |
|
||||
| Horizon Settings: Graphics, Controller, Extras, Mods, AI Agent | Horizon Settings | part | part | yes | yes | `options horizon\|graphics\|extras\|agent...`, then `ui`/`click`/`set` |
|
||||
| Horizon Settings: Extras, PvP & HUD, AI Agent; the graphics screen (Video Settings); Controller (Controls) | Horizon Settings, Video Settings, Controls | part | part | yes | yes | `options horizon\|graphics\|extras\|agent...`, then `ui`/`click`/`set` |
|
||||
| Agent control on or off, status, connection details | Horizon Settings > AI Agent | no | no | yes | yes | new page (#1353) |
|
||||
| Key binds | Controls > Key Binds | yes | yes | yes | yes | `options-set key_key.jump key.keyboard.j` |
|
||||
| Resource packs | Options > Resource Packs | part | part | yes | yes | `options packs`, then `ui` rows and `click`; `options-set resourcePacks` |
|
||||
|
||||
+1
-2
@@ -340,8 +340,7 @@ hints, "Press X to dismount") only while the pad is the last-used input.
|
||||
## Options and remapping
|
||||
|
||||
Controller settings are Horizon's own: **Options → Controls → Controller
|
||||
Settings...** (or **Options → Horizon Settings... → Controller Settings...**),
|
||||
a screen in the graphics settings' style with a search field and General, Bindings and Device pages. It
|
||||
Settings...**, a screen in the graphics settings' style with a search field and General, Bindings and Device pages. It
|
||||
names the player whose profile it edits and the controller the game sees; Device also shows its vendor and
|
||||
product ids, the detected glyph family and the override. Changes apply at once; **Undo** (X) is there only
|
||||
while something differs from when the screen opened, and **Done** (B) leaves. They live in
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ again restores vanilla's behaviour completely.
|
||||
| Sort order and its clicks | `crates/horizon-client/src/inv_sort.rs` (pure, unit tested) |
|
||||
| The music page's rows, and the pools it filters | `options_ui.rs` (`Page::Music`), `crates/horizon-client/src/music.rs` (`track_groups`, `MusicManager::set_off`), `sound_events.rs` (`sound_except`) |
|
||||
| Cosmetics (show mine, show others'), off with their flag | `extras.rs`, `crates/horizon-client/src/game/cosmetics.rs` ([cosmetics.md](cosmetics.md)) |
|
||||
| The settings page | `options_ui.rs` (`Page::Extras`): **Options → Horizon Settings... → Extras...** |
|
||||
| The settings page | `options_ui.rs` (`Page::Extras`): **Options → Horizon Settings... → Extras...**; fullbright, dynamic lights and hiding block-break particles change the picture, so they are on the graphics screen's Quality page instead (`graphics_ui.rs`, **Options → Video Settings...**) |
|
||||
|
||||
The settings are grouped by extra, under a header each, two buttons to a row as
|
||||
vanilla's options lists are, and each says what it does in its tooltip. An
|
||||
|
||||
+7
-6
@@ -2,11 +2,11 @@
|
||||
|
||||
## Settings
|
||||
|
||||
Horizon's graphics settings are one screen, opened from the top of **Video Settings** (**Horizon Graphics...** opens it at General, **Advanced Graphics...** at Advanced) or from **Options → Horizon Settings...**. Vanilla's Video Settings screen stays as vanilla draws it.
|
||||
Horizon's graphics settings are one screen, and **Options → Video Settings...** opens it, as Sodium's video screen replaces vanilla's: it holds every row of vanilla's Video Settings (with vanilla's names and values, kept in `options.txt` under vanilla's keys), Horizon's own graphics settings, the extras that change the picture (fullbright, dynamic lights, hiding block-break particles) and the shader packs. Each setting is in one place: FOV stays on the Options screen and View Bobbing in Accessibility, where vanilla has them; vanilla's Graphics API button is Advanced's Graphics API. The HDR shortcut key opens it at HDR. `horizon-ctl options video-vanilla` still shows vanilla's own Video Settings layout, which no menu opens.
|
||||
|
||||
The screen holds vanilla's video options and Horizon's own together, built from Minecraft's own screen patterns in the design system's Blocks palette (`docs/design-system.md`), on see-through panels so the world stays in view:
|
||||
|
||||
- Down the left, under the Horizon mark: the search field, the pages (General, Quality, Performance, Advanced and HDR) as a column of names, and **Undo** and **Done** at the foot.
|
||||
- Down the left, under the Horizon mark: the search field, the pages (General, Quality, Performance, Shaders, Advanced and HDR) as a column of names, and **Undo** and **Done** at the foot.
|
||||
- On the right, a plate shows the open page alone, under its name: its settings in titled groups (Distance, Display, Culling...), each group on a panel of its own. A row has the setting's name on the left and its control on the right: a tick box for on and off, a value between arrows that a press steps through, a value whose slider (a thin track under the value) shows while the row is pointed at or focused. A setting that can't be used now is greyed.
|
||||
- The search field shows the settings of every page whose name or description has the words typed, under their page's name; picking a page then scrolls to its matches.
|
||||
- A strip under the plate holds the hovered or focused setting's name, its cost in frame time (no cost, low, medium, high, or saves time for culling that makes frames faster) and what it does; with none, what the open page holds.
|
||||
@@ -16,17 +16,18 @@ Tab, the arrows, Enter and Space work it from the keyboard (Left and Right step
|
||||
|
||||
Every setting applies at once, except worker threads, the graphics API and translucent batching, which apply at the next start. A preset sets the quality settings together; changing one of them turns it into Custom. Display preferences (FOV, framerate, VSync, GUI scale, fullscreen, present mode, pacing) leave the preset as it is.
|
||||
|
||||

|
||||

|
||||
|
||||
| Page | Setting | Stored in |
|
||||
| --- | --- | --- |
|
||||
| General | render distance, simulation distance, brightness, GUI scale, fullscreen, VSync, max framerate, inactivity framerate, FOV, view bobbing, attack indicator, autosave indicator | `options.txt` (vanilla keys) |
|
||||
| General | vanilla's graphics preset, render distance, simulation distance, brightness, GUI scale, fullscreen, exclusive fullscreen and its mode, VSync, max framerate, inactivity framerate, menu background blur, attack indicator, autosave indicator | `options.txt` (vanilla keys) |
|
||||
| | preset, LOD distance, far detail, BlueMap finding and radius (on servers, at the next join) | `horizon-graphics.txt` |
|
||||
| Quality | clouds, cloud distance, weather radius, particles, smooth lighting, biome blend, entity distance, entity shadows, vignette, chunk fade, mipmap levels, cutout leaves, improved transparency | `options.txt` |
|
||||
| Quality | clouds, cloud distance, weather radius, particles, smooth lighting, biome blend, entity distance, entity shadows, vignette, chunk fade, mipmap levels, texture filtering, max anisotropy, cutout leaves, improved transparency | `options.txt` |
|
||||
| | hide block-break particles, dynamic lights, fullbright ([extras.md](extras.md)) | `horizon-extras.txt` |
|
||||
| | sky, fog, weather, animated textures, distant plant dither (`ditherCutoutMips`, off by default: cutouts from 64 texels up), resolution scale, anti-aliasing (FXAA or TAA), TAA upscaling, screenshot quality, frame generation | `horizon-graphics.txt` |
|
||||
| Performance | chunk builder | `options.txt` |
|
||||
| | chunk updates and upload budget per frame, worker threads, cave culling, GPU culling, entity and particle culling modes, leaf culling, shadow cache, battery mode, and the block-entity caches (shulker boxes, signs, decorated pots, bells, chests, banners, copper golem statues) | `horizon-graphics.txt` |
|
||||
| | chunk updates and upload budget per frame, worker threads, cave culling, GPU culling, entity and particle culling modes, leaf culling, battery mode, and the block-entity caches (shulker boxes, signs, decorated pots, bells, chests, banners, copper golem statues) | `horizon-graphics.txt` |
|
||||
| Shaders | **Shader Packs...**: the list of shader packs, Horizon's `.hshader` ones and `shaders/` folder ones ([shaders.md](shaders.md)), and the picked pack's options; shadow cache | `horizon-graphics.txt`, the pack's own options file |
|
||||
| Advanced | present mode, frame pacing, graphics API, translucent batching, performance overlay (FPS, frame/CPU/GPU times, frame-time graph) | `horizon-graphics.txt` |
|
||||
| HDR | HDR, calibration, black level, peak brightness, paper white, UI brightness, a shortcut key to the page | `horizon-graphics.txt` |
|
||||
|
||||
|
||||
@@ -98,7 +98,7 @@ Every command `horizon-ctl` takes, its MCP tool in `horizon-ctl mcp` (the launch
|
||||
| `respawn` | `respawn` | Respawn from the death screen | none |
|
||||
| `pause` | `pause` | Open the pause menu | none |
|
||||
| `resume` | `resume` | Leave the pause menu | none |
|
||||
| `options [PAGE]` | `options` | Open the options screen, or one of its pages (Horizon's too) | `page` (main, video, sound, controls, keybinds, controller, controller-binds, mouse, chat, accessibility, language, font, packs, mods, shader-packs, graphics, graphics-advanced, graphics-hdr, extras, horizon, agent): the page (default: the main options) |
|
||||
| `options [PAGE]` | `options` | Open the options screen, or one of its pages (Horizon's too) | `page` (main, video, sound, controls, keybinds, controller, controller-binds, mouse, chat, accessibility, language, font, packs, mods, shader-packs, graphics, graphics-advanced, graphics-hdr, extras, horizon, agent, video-vanilla): the page (default: the main options) |
|
||||
| `book [next\|back\|take\|done]` | `book` | The open book or lectern: its page text, or press one of its buttons | `action` (next, back, take, done): a button to press |
|
||||
| `signedit X Y Z [front\|back]` | `signedit` | Open the sign editor of the sign at X Y Z (then type and close) | `x` (integer, required): block X<br>`y` (integer, required): block Y<br>`z` (integer, required): block Z<br>`side` (front, back): which side |
|
||||
| `mount-menu` | `mount_menu` | Open the inventory of the horse, donkey, mule or llama being ridden | none |
|
||||
|
||||
Loaded 100 of 112 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user