NHacker Next
  • new
  • past
  • show
  • ask
  • show
  • jobs
  • submit
Show HN: Iron-Wolf – Wolfenstein 3D source port in Rust (github.com)
ninkendo 41 days ago [-]
Was this translated automatically from C? I picked a spot totally at random and saw in https://github.com/Ragnaroek/iron-wolf/blob/main/src/act1.rs in place_item_type:

    let mut found_info = None;
    for info in &STAT_INFO {
        if info.kind == item_type {
            found_info = Some(info);
            break;
        }
    }
When typically in rust this is just:

    let found_info = STAT_INFO.iter().find(|info| info.kind() == item_type);
Now I want to go through and feng shui all the code to look more like idiomatic rust just to waste some time on a saturday...
MaulingMonkey 40 days ago [-]
(equivalent C file: https://github.com/id-Software/wolf3d/blob/master/WOLFSRC/WL... )

> Was this translated automatically from C?

I'll note that when I convert code between languages, I often go out of my way to minimize on-the-fly refactoring, instead relying on a much more mechanical, 1:1 style. The result might not be idiomatic in the target language, but the bugs tend to be a bit fewer and shallower, and it assists with debugging the unfamiliar code when there are bugs - careful side-by-side comparison will make the mistakes clear even when I don't actually yet grok what the code is doing.

That's not to say that the code should be left in such a state permanently, but I'll note there's significantly more changes in function structure than I'd personally put into an initial C-to-Rust rewrite.

The author of this rewrite appears to be taking a different approach, understanding the codebase in detail and porting it bit by bit, refactoring at least some along the way. Here's the commit that introduced that fn, doesn't look like automatic translation to me: https://github.com/Ragnaroek/iron-wolf/commit/9014fcd6eb7b10...

yndoendo 40 days ago [-]
I actually find 1:1 to be helpful when learning a language.

How debug-able is the internals of the rust lambda version?

I will often write the code so I can simply insert a break point for debugging versus pure anonymous and flow-style functions.

C# example:

    #if DEBUG
    const string TestPoint = "xxxx";
    #endif

    var filtered = items.Where(x =>
    {
        #if DEBUG
        if (x.Name == TestPoint)
            x.ToString()
        #endif
        .....
    });
vs

    var filtered = items.Where(x => ....);
klaussilveira 40 days ago [-]
As a non-Rust guy, I keep writing the example above. I didn't even know about the second option!

If you do that, please share a link so I can learn from you! This is awesome!

DauntingPear7 40 days ago [-]
Look into rust iterators and their associated functions for rust specific implementation. Additionally look into functional programming à la lambda calculus and Haskell for the extreme end of this type of programming if you’d like to learn more about it
ragnaroekX 40 days ago [-]
Yes, the code is _very, very_ close to the C-Code. All over the place.
derwiki 40 days ago [-]
Sounds like something an LLM agent might be good at?
ragnaroekX 40 days ago [-]
It probably would. But this port was mostly done to understand Wolfenstein 3D in detail, not for the source port itself. I could have generated big parts of the code. But I would have learning by doing that.
amelius 41 days ago [-]
Wolfenstein is peanuts compared to writing your own doubly linked list.
teleforce 39 days ago [-]
Not sure about that, but these are an awesome tutorials on linked list and related exercise problems [1],[2].

It's an old website for C programming from Stanford Uni by Nick Parlante [3].

For full blown treatment on linked list and doubly linked list please check this an excellent book Pointers on C by Kenneth Reek (1998) [4].

[1] Linked List Basics

http://cslibrary.stanford.edu/103/

[2] Linked List Problems:

http://cslibrary.stanford.edu/105/

[3] Essential C:

http://cslibrary.stanford.edu/101/

[4] Pointers on C:

https://archive.org/details/pointersonc0000reek

cstrahan 34 days ago [-]
I think they are likely referring to doubly linked lists in Rust, specifically.

See, for example:

https://rust-unofficial.github.io/too-many-lists/

https://news.ycombinator.com/item?id=22390662

41 days ago [-]
yuppiepuppie 41 days ago [-]
This is cool! Wolfenstein will always have a place in my heart.

You should add it to https://hnarcade.com

hamza_q_ 41 days ago [-]
Cool! I did an incomplete version in Rust a while back as well. Not a source port, tried to recreate the game from scratch myself, without looking at the C src code

https://github.com/hamzaq2000/wolf3d-reimpl-rs

xeonmc 41 days ago [-]
Game would be considered too politically incendiary if released today.
yorwba 41 days ago [-]
Or the other way around. Wolfenstein 3D was first banned in Germany in 1994, but unbanned in 2018: https://arstechnica.com/gaming/2018/08/german-ratings-board-...
legitster 41 days ago [-]
Wolfenstein 3D was pretty squarely a WWII fantasy shooter. Only later does it get into the alternate history post-war stuff which does get somewhat more squarely political.

I think it cuts both ways. The Wolfenstein franchise has obviously relished in violence against Nazis, but also inadvertently is part of the trend of glorifying them.

TehCorwiz 41 days ago [-]
The first game has zombies with guns in their chest and a mecha hitler.
bombcar 40 days ago [-]
Someone's not up to date on the History Channel documentaries about WWII!
41 days ago [-]
klaussilveira 41 days ago [-]
karhuton 40 days ago [-]
Stein means rock. Wolfenstein is something like Wolf’s rock.

Eisen means Iron. You could name it Wolfeneisen?

vunderba 41 days ago [-]
Nice job. Couple notes for the web version:

- Once started the shareware game on Chromium browsers seems to flicker like crazy which displays the "B.J. Blazkowicz" face.

- You missed adding the classic code that everyone knows, M-L-I!

midzer 40 days ago [-]
Can confirm the flicker.

I did a WASM port of the shareware from https://github.com/fabiangreffrath/wolf4sdl playable at https://midzer.de/wasm/wolfenstein/

Freak_NL 41 days ago [-]
The flickering happens in Firefox too.
ragnaroekX 40 days ago [-]
Flickering is fixed now. It was introduced with the late feature of animating BJ face on the start...
Grimblewald 40 days ago [-]
Oh man for a second i though ironwolf, the vr game, was about to see some love.
iberator 40 days ago [-]
is it faster than original?

Port it to 286, and then claim RUST victory

beemboy 41 days ago [-]
Sweet memories...
hexo 41 days ago [-]
again?
Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact
Rendered at 09:00:43 GMT+0000 (UTC) with Wasmer Edge.