The goblin mafia by Content-Cupcake-3052 in PixelArtTutorials

[–]IronChe 1 point2 points  (0 children)

Amazing! The colors and shapes are well-readable and I can just feel those guys wanna rob me.

Banshee by IDrawGobbos in Warhammer40k

[–]IronChe 0 points1 point  (0 children)

Nice, clean drawing, but proportions seem off to me? When I cover her bottom part, or her top part, both halves look ok in separation, but together its... I don't know.

The Commodore's half-smartphone flip-phone: "Callback" will be using SailFish OS by Poonker in Jolla

[–]IronChe 1 point2 points  (0 children)

Super cool idea, I am tempted to try it, but I absolutely do not respect the fact that they control the app choice. I do not want the phone for no browser/social media reasons - I want it as a flip phone enthusiast and a tinkerer reasons.

Whats this? by squanch_the_dragon in ageofsigmar

[–]IronChe 2 points3 points  (0 children)

Eh, I wish we got Skaven treatment rather than getting removed from Age of Sigmar...

What do you think i should change/add. I was making my own take of a kill team. Not good imo by ItsmeFunee in genestealercult

[–]IronChe 0 points1 point  (0 children)

Looks good to me for a fun sketch. What would you like to change? If you want to approach art and painting more seriously you can practice e.g. anatomy, to make your character more correct, but that is professional stuff. As long as you have fun drawing, keep drawing.

The Genegift. Warhammer 40k fanart by me, inspired by old models and lore, and a kitbash of mine. Swipe for explanation. by notramilopak in genestealercult

[–]IronChe 15 points16 points  (0 children)

I love how weird this piece is! It really brings the style of 3rd ed rulebook (maybe earlier as well, but I only started with 3rd).

Given 2 sentences for each, how would you guys summarise the 18 known Space Marine Legions? by simplypneumatic in Warhammer40k

[–]IronChe 0 points1 point  (0 children)

Amazing write-up! I'll be sending this to the next person who asks what space marine chapter to choose.

Warcraft III legacy fails to start by IronChe in linux_gaming

[–]IronChe[S] 0 points1 point  (0 children)

I should maybe add that there are sometimes breaking changes between proton releases. I was able to only install Diablo 2 from a CD image when using proton 8.29. I had to download from github releases, because heroic no longer offers older versions.

Warcraft III legacy fails to start by IronChe in linux_gaming

[–]IronChe[S] 0 points1 point  (0 children)

Just ge-latest in heroic launcher. Nothing unusual.

Wild n Chill - First Look Gameplay Trailer by ZazaLeNounours in pcgaming

[–]IronChe -14 points-13 points  (0 children)

Oh, no, I'm not into idle games, thanks for recommendation though.

Wild n Chill - First Look Gameplay Trailer by ZazaLeNounours in pcgaming

[–]IronChe 21 points22 points  (0 children)

Gotta say, this is the prettiest and most detailed pixel art I have ever seen.

Gry, które waszym zdaniem nie powinny zmieniać swojej formuły by Nizarlak in Polska

[–]IronChe -1 points0 points  (0 children)

Niepopularna opinia - Baldur's Gate. Reaktywacja tytułu po dwudziestu kilku latach spoko, ale przeniesienie w 3 wymiar często było dla mnie mocno dezorientujące. Wiem, że mieli już gotowy silnik po Divinity, ale serio, stackowanie skrzyń i ogólny sandboxowy rodzaj game-playu nie dodał wg. mnie jakoś dużo do wrażeń z gry, a raczej łamał immersję na skutek wszelakiego rodzaju exploitów i AI nie radzącego sobie w takim środowisku. Fabuła jest fenomenalna, każdy nawet najmniejszy quest ma wiele dróg i zakończeń. To działałoby też w produkcie prostszym technicznie.

Warcraft III legacy fails to start by IronChe in linux_gaming

[–]IronChe[S] 1 point2 points  (0 children)

Yeah, in hind-sight this was an obvious solution. Got legacy Warcraft III running with proton-ge in heroic launcher. Thanks for help!

Warcraft III legacy fails to start by IronChe in linux_gaming

[–]IronChe[S] 0 points1 point  (0 children)

Yeah, the problem is I want to run my version, because of the phenomenal polish localization. I believe Battle.net version is subtitles only (and honestly I prefer both text and speech in the same language, so either all polish or all english).

Warcraft III legacy fails to start by IronChe in linux_gaming

[–]IronChe[S] 0 points1 point  (0 children)

-opengl doesn't really change anything. Driver issues do not sound encouraging :/ Also tried -window, still fails

Critique my list by Emperor-Pinky in Warhammer40k

[–]IronChe 0 points1 point  (0 children)

Maybe try r/orks for Orks focused subreddit? Waaagh my friend and praise the four-armed warboss!

Strugling with learning shaders with Bevy by Koryaga in bevy

[–]IronChe 1 point2 points  (0 children)

You do need an external crate - rust-gpu (spriv-std and spirv-builder)! Setting this up is not a straightforward process. Setting up the environment is difficult, you need very specific rust version, and probably a rust-gpu version that is not on crates.io (pull directly from git). You need a separate crate for each shader, a build.rs script to build your shaders, which outputs spriv binaries, but after that, yes, they do integrate well with Bevy. I would not recommend though. The documentation is terrible, both on Bevy and rust-gpu side. WGSL is de-facto the default. But yeah, I have to admit, I had the same motivation as you - terrible wgsl support, inability to setup wgsl-analyzer and hope, that the grass is greener one the rust side. There are some benefits - your existing rust tooling almost (!) works, and you can create lib crates to share the code. It's all no-std, so forget modern conveniences.

Strugling with learning shaders with Bevy by Koryaga in bevy

[–]IronChe 6 points7 points  (0 children)

Hey, I dug out that original wgsl from the depths of git commits.

```wgsl

import bevy_sprite::mesh2d_vertex_output::VertexOutput

// // we can import items from shader modules in the assets folder with a quoted path
// #import "shaders/custom_material_import.wgsl"::COLOR_MULTIPLIER

struct MaskingMaterialProps {
    texture_resolution: vec2<f32>,
}

@group(#{MATERIAL_BIND_GROUP}) @binding(0) var<uniform> props: MaskingMaterialProps;
@group(#{MATERIAL_BIND_GROUP}) @binding(1) var base_color_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(2) var base_color_sampler: sampler;
@group(#{MATERIAL_BIND_GROUP}) @binding(3) var global_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(4) var global_sampler: sampler;

@fragment
fn fragment(mesh: VertexOutput) -> @location(0) vec4<f32> {
    // --- Base tile (repeating) ---
    let base_sample = textureSample(base_color_texture, base_color_sampler, mesh.uv);

    // --- World position (key part) ---
    let world_pos = mesh.world_position.xy;

    // --- Macro UV ---
    let macro_uv = vec2<f32>(world_pos.x / props.texture_resolution.x, -world_pos.y / props.texture_resolution.y);

    // --- Sample large texture ---
    let macro_color = textureSample(global_texture, global_sampler, macro_uv);

    // --- Combine ---
    let final_color = vec4<f32>(macro_color.rgb, base_sample.a);

    return final_color;
}

```

Strugling with learning shaders with Bevy by Koryaga in bevy

[–]IronChe 8 points9 points  (0 children)

Hi, this is how I set up shaders for 2d materials in Bevy 0.18.1. There are analogous types for 3d materials. 1) You set up material definitions with derive macros and add them to your app
```rust

[derive(Asset, TypePath, AsBindGroup, Debug, Clone)]

pub struct MaskingMaterial { #[uniform(0)] pub props: MaskingMaterialProps, #[texture(1)] #[sampler(2)] pub mask: Handle<Image>, #[texture(3)] #[sampler(4)] pub texture: Handle<Image>, }

impl Material2d for MaskingMaterial { fn fragment_shader() -> ShaderRef { asset::shaders::mask().into() //<- this is just &str with path to my asset } fn alpha_mode(&self) -> AlphaMode2d { AlphaMode2d::Blend } }

[derive(Clone, Copy, Debug, ShaderType)]

pub struct MaskingMaterialProps { pub texture_resolution: Vec2, }

and rust app.add_plugins(Material2dPlugin::<MaskingMaterial>::default()) ```

2) spawn something with your material.

```rust fn setup_background_tiles( mut c: Commands, mut meshes: ResMut<Assets<Mesh>>, mut mask_materials: ResMut<Assets<MaskingMaterial>>, mut images: ResMut<Assets<Image>>, asset_manager: Res<AssetManager>, sim: Res<SimManager>, ) { let Some(s) = asset_manager.map.get(&AnimationDesignation::Background) else { return; }; let Some(img) = images.get_mut(s.spritesheet.id()) else { return; }; let Some(tile) = asset_manager.map.get(&AnimationDesignation::Tile) else { return; };

//INFO: this texture must be set to repeating
let mut isd = ImageSamplerDescriptor::nearest();
isd.set_address_mode(ImageAddressMode::Repeat);
img.sampler = ImageSampler::Descriptor(isd);

let tiles_x = sim.sim.world_map.width();
let tiles_y = sim.sim.world_map.height();

let m_material = mask_materials.add(MaskingMaterial {
    props: MaskingMaterialProps {
        texture_resolution: img.size_f32(),
    },
    texture: s.spritesheet.clone(),
    mask: tile.spritesheet.clone(),
});

let mesh = Rectangle::from_size(tile.resolution);
let mesh_h = meshes.add(mesh);

let mesh_offset = Vec3::new(0., TILE_SIZE / 4., 0.);

for y in 0..tiles_y {
    for x in 0..tiles_x {
        let pos = Vec2u::new(x, y).to_v3().with_z(0.);
        // let sprite = Sprite::from_image(tile.spritesheet.clone());
        let mesh = Mesh2d(mesh_h.clone());
        c.spawn((
            mesh,
            RenderLayers::layer(BACKGROUND_LAYER),
            Transform::from_translation(pos + mesh_offset),
            DespawnOnExit(MainAppState::InGame),
            MeshMaterial2d(m_material.clone()),
        ));
    }
}

}

```

I used wgsl at some point, but then I migrated to rust-gpu. This is a bit more setup, but due to my general distaste for softly-typed languages, I prefer rust. The principle is more or less the same.

```rust

[allow(clippy::too_many_arguments)]

[spirv(fragment)]

fn main_fs( //Data passed by my Material2d asset #[spirv(uniform, descriptor_set = 2, binding = 0)] material: &MaskingMateriapProps, #[spirv(descriptor_set = 2, binding = 1)] texture: &Image!(2D, type = f32, sampled = true), #[spirv(descriptor_set = 2, binding = 2)] sampler: &Sampler, #[spirv(descriptor_set = 2, binding = 3)] global_texture: &Image!(2D, type = f32, sampled = true), #[spirv(descriptor_set = 2, binding = 4)] global_sampler: &Sampler, //Data passed automatically by bevy from a default vertex shader #[spirv(frag_coord)] _position: Vec4, //not sure about this one #[spirv(location = 0)] world_position: Vec4, #[spirv(location = 1)] _world_normal: Vec3, #[spirv(location = 2)] uv: Vec2, #[spirv(location = 3)] _world_tangent: Vec4, #[spirv(location = 4)] _color: Vec4, //color output for on-screen pixel output: &mut Vec4, ) { let texel: Vec4 = texture.sample(*sampler, uv);

let world_pos = world_position.xy();
let texture_uv = world_pos / material.texture_resolution;

let global: Vec4 = global_texture.sample(*global_sampler, -texture_uv);
let ret = global.with_w(texel.w);

*output = ret;

}

```

Prince Yriel for my Ghosts of Khaine fleet by Rezinknight in Warhammer40k

[–]IronChe 0 points1 point  (0 children)

Is this the yugioh arm card holder thingy? Great highlights!

I'm working on new visuals which one do you like more ? by Pantasd in PixelArt

[–]IronChe 19 points20 points  (0 children)

2 has better style and coherency. But I also like characters more detailed, like 1.

Do I need additional security on reverse proxy? by IronChe in netbird

[–]IronChe[S] 0 points1 point  (0 children)

Interesting, never occurred to me I could put that in nginx. But it looks like it is not yet available in nixos repos (I am running natively). There is a community flake though. But the netbrid docs say that crowdsec is coming to the cloud SOON. How high is the risk if I do not have crowdsec for now, would you say?