Code Monkey home page Code Monkey logo

gebbdoom's People

Contributors

alexey-anufriev avatar arkadijs avatar david-westreicher avatar deluxe avatar fabiensanglard avatar fetzu avatar fragglet avatar gianlucag avatar gogoprog avatar jeanolivier avatar joefish avatar plasticle avatar sirocyl avatar tslug avatar wolruf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gebbdoom's Issues

pg 277 - Thinker Function Pointer Differs from Usage in Description

First off, thank you for this book!

Suggestion on pg 277 - it would be more correct to define think_t as typedef void (* think_t ) ( void* ) ; to match its usage on this page.

It is currently reads as follows:


typedef struct thinker_s {
  struct thinker_s * prev , * next ;
  think_t function ;
} thinker_t ;

but in the instance of floor, it points to a function with the signature:

void T_MoveFloor ( floormove_t * floor ) ;

[...]

floor->thinker.function = ( think_t ) T_MoveFloor ;

There has been some simplification made to actual source code - the think_t type describes a union of function pointers, and the signature for the simplified think_t does not match its usage here.

A.I fsunctions are called when entering a state. Not on every tic.

Reported by Raigan Burns via email:

On p.266 you mention that when the Imp is in the stand state, "A_Look is called each tic trying to locate the player" -- actually this isn't true, the action functions are only called on the first tick of each state/frame, which means A_Look will only be triggered every 10 tics (since the Imp's standing states/frames last 10 tics).

Initially I was really confused about this design, since it means all those monsters with 3-tic duration A_Chase movement states will have their positions crudely animated at only about 11hz, which you'd think would look too step-y, but I verified this on a couple Doom modding forums: action functions are only called on the initial frame of the state, and monsters really do only move around the world at ~11hz (demons have 2-tic durations for A_Chase so they're a bit smoother).

(Also, since the initial tic value of each mobj is randomized when they get placed on the map, this means that it's sort of a work-balancing system since this way every monster isn't calling A_Chase every frame, they get spread around.)

Jaguar RISC engines couldn't execute code from main memory

In the Game Engine Black Book v1.1, chapter 6.1.2, page 305, John Carmack is quoted stating this:

The little RISC engines were decent processors. I was surprised that they
didn’t use off the shelf designs, but they basically worked ok. They had some
design hazards (write after write) that didn’t get fixed, but the only thing truly
wrong with them was that they had scratchpad memory instead of caches, and
couldn’t execute code from main memory. I had to chunk the DOOM renderer
into nine sequentially loaded overlays to get it working (with hindsight, I would
have done it differently in about three...).

This is closely related to a previous paragraph on page 301/302:

gebbdoom_page_301_302

While not wrong per se, I think this could use some clarification. The Jaguar's RISC engines could in fact execute code from main memory (DRAM) and were designed/meant to do so, BUT another one of those design hazards prevented this in practice:

jaguar_technical_reference_manual_rev8_page_137

So code could indeed be executed from main memory, but jump instructions were unreliable. Since jumps are an essential part of almost every algorithm, this practically renders code execution from main memory useless.


I think this is worth pointing out since it further explains why the Jaguar was so hard to deal with for developers (which in turn highlights what a genius John Carmack was back then to be able to pull it off). This was not just another minor design hazard that could be easily worked around, but instead a major deal-breaker. Even though execution from the RISCs' local scratchpad memory was much faster and the preferred choice, being able to execute code from main memory would have made development A LOT easier (i.e. simply use main memory during development, then chunk the FINAL code for use in scratchpad memory as an optimization step late in the development cycle).

Delete duplicate file clip4:c

The file clip4:c located at /src/code is an exact duplicate of clip4.c and to my knowledge (after a thorough search) unused in any of the .tex files.

I have been working on a fork of this repository for quite some time and the file checked out under Windows 7 with no problem when I forked around a year ago. Since then, I've deleted it and forgot about this but a couple of days ago I cloned again this repository to a new computer (so that I could build a fresh copy of the original) and the cloning failed while trying to check out the file under Windows 10.

Under Linux and Mac this checked out ok, but since the file seems unused, I suggest to delete it so that the repository can be cloned under Windows.

Here is the output I get:

$ git clone https://github.com/fabiensanglard/gebbdoom.git gebbdoom
Cloning into 'gebbdoom'...
remote: Enumerating objects: 5933, done.
remote: Total 5933 (delta 0), reused 0 (delta 0), pack-reused 5933
Receiving objects: 100% (5933/5933), 810.87 MiB | 615.00 KiB/s, done.
Resolving deltas: 100% (3912/3912), done.
error: invalid path 'src/code/clip4:c'
fatal: unable to checkout working tree
warning: Clone succeeded, but checkout failed.
You can inspect what was checked out with 'git status'
and retry with 'git restore --source=HEAD :/'

Lost reference to a figure

The trick to fake more colors than available is to use an indirection "light table" where the other 255 colors are used to approximate a gradient for each of the 256 entries. The lightmap is 256 entries tall (one for each index) and 32 wide (one column for each shade). In figure \ref{COLORMAP.png} you can see how the original palette lines are unrolled vertically in the left-most column (notice the isolated white at the top and the pink at the bottom). Each row is a 32 value gradient toward black, using the same 256 colors. The right-most column is all black. The trick has its limits. It works well for red but not too well for crimson and yellow.\\

At In figure \ref{COLORMAP.png}.

This place is being displayed in v2020.11.26 (the currently available PDF here) as this (page 230):

image

EDIT: Oh, sorry, this was already reported as #33.

Possible mistake in internals.tex

It seems there is a mistake in internals.tex in the first line, which is:

'Then it took three months to proof-read it from October 2018 to November 2018'

That is at most two months, maybe some month is off or they really were two months.

svg -> png broken with newer inkscape version?

Hi,

I was not able to generate the PDF file with all images. All SVG images were missing. While investigating, I found that the inkscape command given somehow did not work.

Replacing it with the command scheme inkscape --export-filename=out.png --export-dpi=300 in.svg worked.

$ inkscape --version
Inkscape 1.0.2 (e86c870879, 2021-01-15)
    Pango version: 1.48.1

Not sure how to fix the version detection line in make.sh.

Jaguar port of DOOM lacks music due to ... ?

In the Game Engine Black Book v1.1, chapter 6.1.2, page 303, the reason for the Jaguar port of DOOM lacking music is explained as follows:

gebbdoom_page_303_lack_of_music

However, in AVGN's DOOM video that aired on 11/01, a rather different version of events is described (transcript of relevant section):

Shortly after that episode, I got a message from [level] designer Sandy Petersen, explaining the situation. I'll just summarize by saying it was a money issue. From what I was told, the contract with the composer meant having to pay him the same amount for the Jaguar version as the PC version, and clearly the Jaguar would sell far less copies. He ended by saying: "I know that's a shitty reason to leave out the music, but there you have it."

Video:
https://youtu.be/f5zyhC11hzQ?t=1120

Really interesting. Two entirely different reasons. Could it be that there were technical issues first (as described here), but THEN the financial issue came up, leading to simply disabling music and not bother with fixing the technical issues as it was no longer necessary?

Here's what I could find on the topic (probably what you used for the book in the first place):
https://forums.atariage.com/topic/69035-doom-music/
https://forums.atariage.com/topic/266578-why-no-music-on-jag-doom/
https://hackaday.com/2019/08/04/doing-what-id-couldnt-returning-music-to-jaguar-doom/
https://forums.atariage.com/topic/287323-enabling-music-sound-fx-mixing-within-jaguar-doom-source/page/2/#comment-4239037

?? reference to graphic

page 230: in figure ??

also on page 354 is a typo "required to coordinates 8 chips"

thanks for releasing these great books.

btw would it be possible to have additional smaller versions (like 150 dpi)? 300 dpi might be great to produce a physical book, but i don't think i can afford to keep a 160 MB pdf in my collection.

some more feedback: i had hoped the section dealing with the OPL2 in the wolf3d book would be a little bit more detailed. the doom book could illustrate a specific sbi instrument as an example and from what parameters it is composed of.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.