This will probably take a while, since we also have to translate all the
text of the base game - Naughty Dog never translated this game to
Hungarian. This PR will stay a draft until it is complete.
We realized that every letter in our alphabet was already working, apart
from two: Ő and Ű (they are unique sounds, so leaving their marks
wouldn't be okay).
Since I did not find that double accent thing in the jak font, I decided
to use ~ (see my change in FontUtils.cpp). It is good enough, and my
memory tells me that I already saw this exact same "solution"
(workaround) somewhere in the past. If anyone knows a better solution,
please let us know.
We chose ID 14 for the Hungarian language, as it was the lowest free ID.
**Progress tracker**
A tick here means that everything was translated. It does not mean that
everything is perfect yet. We will review everything multiple times, to
have the best translations possible.
Game text:
- [x] base game text
- [x] pc port text
- [ ] credits text ?
[Sziloyoo](https://github.com/Sziloyoo) helped with reviewing my
changes, and gave advice/suggestions for some complicated translations.
Subtitles will be done in the future, not in this PR.
This PR adds a feature to merc2 to update vertices. This will be needed
to efficient do effects like blerc/ripple/texture scroll. It's enabled
for blerc in jak 1 and jak 2, but with a few disclaimers:
- currently we still use the mips2c blerc implementation, which is slow
and has some "jittering" because of integer precision. When porting to
PC, there was an additional synchronization problem because blerc
overwrites the merc data as its being read by the renderers. I _think_
this wasn't an issue on PS2 because the blerc dma is higher priority
than the VIF1 DMA, but I'm not certain. Either way, I had to add a mutex
for this on PC to avoid very slight flickering/gaps. This isn't ideal
for performance, but still beats generic by a significant amount in
every place I tested. If you see merc taking 2ms to draw, it is likely
because it is stuck waiting on blerc to finish. This will go away once
blerc itself is ported to C++.
- in jak 1, we end up using generic in some cases where we could use
merc. In particular maia in village3 hut. This will be fixed later once
we can use merc in more places. I don't want to mess with the
merc/generic selection logic when we're hopefully going to get rid of it
soon.
- There is no support for ripple or texture scroll. These use generic on
jak 1, and remain broken on jak 2.
- Like with `emerc`, jak 1 has a toggle to go back to the old behavior
`*blerc-hack*`.
- In most cases, toggling this causes no visual differences. One
exception is Gol's teeth. I believe this is caused by texture coordinate
rounding issues, where generic has an additional float -> int -> float
compared to PC merc. It is very hard to notice so I'm not going to worry
about it.
This adds environment mapping support to `Merc2`, and turns it on for
Jak 1 and Jak 2.
- The performance is much better
- Jak 1 can be toggled back to the old behavior with `(set! *emerc-hack*
#f)`. The new environment mapping is identical to the old one everywhere
I checked.
- Jak 1 still falls back to generic for ripple/texscroll/blerc/eyes -
there's still no dynamic texture or vertex updating support. The eye
detection stuff will sometimes flag stuff as eyes which is not eyes,
which is fine, but means that generic will be used in some places where
emerc could be used. For example, the shiny plates on jak's arm will be
drawn with generic because jak has eyes.
- Jak 2 hasn't been checked super carefully against PCSX2 yet.
- Jak 2 still isn't technically using emerc, but instead putting emerc
models in the merc bucket.
- The interface to merc is a lot different now and totally custom
OpenGOAL DMA code. The original merc drawing asm doesn't run anymore.
- The FR3 format changed
- Something funky going on with foreground lighting in escape, but
doesn't seem to be related to this change?
Performance comparison, jak 1, in likely the most generic-merc heavy
spot:


And everything else needed for them!
A couple functions are bad currently.
- fixes#1929 - untested on linux
- fixes#1924 - now you need to type `,` before a lambda you want to put
in a pair.
- fix debugger symbol table in jak 2
- made the decompiler output `(meters 2)` instead of `(meters 2.0)`
- fixed a bug with the bitfield enum special -1 case
- made bad game text decomp not exit the decompiler
- added `editable-player` and `script`
Fixes#1886 which was introduced in #1756
Changed to only read the dpad inputs for hud toggle if L2/R2 were
considered held (they're not read during a pause buffer)
- decompile `subdivide`, `wind-work`, `tie-work`, `bsp`, `focus`
- support `ppacb` in compiler
- don't assert when bitfield stuff fails due to constant propgataion
weirdness
- finish up history
- div/mod unsigned assert fix in decompiler
- empty assert fix in decompiler for failed `add` type prop
- make jak 1 performance counters "work" (just measure time)
- fix cast/typos on pcgtb/vftoi15
Fixes https://github.com/open-goal/jak-project/issues/1821 by adding a
special case for `new` method calls where the argument with type
`symbol` is actually an address to uninitialized structure on the stack.
Fixes https://github.com/open-goal/jak-project/issues/1849 (or at least
the cause of the issue Vaser gave in chat, and one random one I found in
`debug-sphere`)
Fixes https://github.com/open-goal/jak-project/issues/1853
Fixes https://github.com/open-goal/jak-project/issues/1857 by moving the
cast into the cond if the body is a single form and the destination type
is a bitfield/enum which is likely to work well. Seems to work on the
examples we could find in jak 1 and jak 2.
Also fixes an issue with casts on the result of `handle->process` (a
common place to use casts)
the output of process->handle is a plain process. Most of the time, you
end up casting this to a more specific. If you add a cast on every use
of the variable, the decompiler will decide to change the type of that
variable to the more specific type, and this breaks the handle cast.
so previously it was impossible to get code like
```
(let* ((s2-0 (the-as swingpole (handle->process (-> self control hack))))
(gp-0 (-> s2-0 dir))
)
```
But now it will work
This shows the current settings needed to help provide information when
verifying a run, also it removes the two calls to show the version in
main.gc and instead does it within the speedrun/auto splitting scope.
- Shows Version
- Shows if Speedrunner mode is on (technically pointless since the text
only displays when it is enabled this more just serves to show that
there IS a speedrunner mode to viewers and stuff (josh) So hopefully it
may cut down on submissions with the mode off)
- Shows if cutscene skips is enabled/disabled.
Tested on 16x9 4x3 the really weird one and borderless/fullscreen
[](https://www.youtube.com/watch?v=qDC-beEg5Es)
Co-authored-by: Tyler Wilding <xtvaser@gmail.com>
* jak1: put common speedrunning code into it's own file
* jak1: enforce `60` fps while in speedrunning mode
* jak1: when speedrunning, display the version until you get the first powercell
* jak1: add an explicit option for skipping cutscenes
* jak1: extend `game-option` to allow any menu option to be disabled
* tests/jak1: allow whitelisting types to be redefined to satisfy typeconsistency checks
* jak1: add file headers
* jak1: cleanup bool checking
* test: delete the es substitle file
* test: add it back
* jak1: missed one cleanup spot related to bool comparisons
* Update default-menu.gc
* make fog hack slightly less aggressive
* add `reload-text` back but kinda fixed
* more unlocks for non-guaranteed musics
* smarter language save & load
* also save pc settings on autosave
* more special music log cases
* one more
* wip
* getting stuff set up so we can actually run test cases
* better handle block entry stuff
* types2 working on gstring
* comments
* math ref working
* up to first stack stuff
* stack fixes
* bounding box
* math stuff is working
* float fixes
* temp debug for (method 9 profile-array)
* stupid stupid bug
* debugging
* everything is broken
* some amount of type stuff works
* bitfield
* texture bitfields not working
* temp
* types
* more stuff
* type check
* temp
* float related fixes for light and res problems
* revisit broken files, fix bugs
* more types
* vector debug
* bug fixes for decompiler crashes in harder functions
* update goal_src
* game: add auto-splitter structs
* game/jak1: wire up auto-splitter updating to game when in SR mode
* game/jak1: add info to split on picking up white eco
* game/jak1: add another two tasks for fish and finalboss
* game/jak1: autosplitting code entirely in GOAL
* split some subtitles
* allow cutscene skipping in retail and fix softlock
* formatting
* make intro skipping work?
* citadel sagecage skipping
* finalboss sage skipping
* quicker quit to title
* uk text fixes
* fisher cutscene skipping
* fix test
* redo cheat encodings
* fix error
* add no texture cheat
* tiny cleanup + add sidekick stats button
* crappy implementation of big/small head mode
* more correct bone scaling
* redo bone manip code a bit
* jp text fixes
* improved matrix math!
* add big fist cheat, minor type cleanup, add some debug toggles
* move all this mess to a new file
* slightly rework joint scaling function
* add big head npc cheat
* subtitles typo
* WIP mirror mode
* fix mirrored hud sprites
* fix mirror mode sound pan
* add cheats to menu!
* split some subtitles
* hud - show total counters on dpad up, level counters on dpad down
* make views toggle-able, extend hud timeout on toggle, decompilation cleanup
* review feedback round 1
* refactor draw-hud methods
* scaled version of draw-string-xy working, need to adjust hud labels still
* adjust scale/position of hud counters
* remove unnecessary adjustments
* update comments
* dont crash on inline static value array
* [goalc] add support for non-static inline arrays of values
* add a kernel group to jak1
* move and cleanup pc debug code
* random cleanup in `hud-classes`
* pc port fix for gondola spools
* format
* address feedback (wow it was actually just changing 1 line all along...)
* minor decomp cleanup
* ref test
* fix invincibility cheat not working properly and fixed requirement
* typo
* added YMD for japan version of the game
* remove language cheat
* use language checks instead of territory checks in title logo
* forgot this call
* use `game-text-id->string` function here
* small cleanup to pc progress code
* better way to handle "locked" texts
* this is better
* fix potential incompatibilities with merc & ocean renderers
* show cheat requirements in menu + change requirements
* increase size of money starburst
* split some more subtitles
* potentially fix a vsync bug?
* change territory encoding logic
* pass game territory to compiler
* ugh LOL
* reduce max supersampling options in progress menu
* cleanup knuth rng file
* save & load cheats
* allow keyboard controls when cpad is connected
* ignore key presses when imgui is being used
* save settings when quitting game
* Add in-game option to switch fullscreen monitor
* mmm undefined memory :)
* Fix type consistency
* Optimize get_monitor and get_monitor_count since they're called often
* Address PR feedback
* Track fullscreen mode and minimized state to reduce GLFW calls per frame
* subtitles: add german subtitles for new progress menu options
* subtitles: add german subtitles for village1, beach
* missed some strings
* jungle, firecanyon, finalboss cutscenes
* add framrate options to progress menu
* fix samos line
* add citadel cutscenes
* add text version to subtitles
* add text version to text file
* `sidekick` hints
* fix up `mayor-introduction`
* oops
* `training` hints
* `village1` hints
* `lavatube` hints
* `snowy` and `spidercave` hints
* `finalboss` hints
* `firecanyon` hints and cutscenes
* `beach` hints
* update game text file
* finish up subtitles
* add german to progress menu sub setting
* split all bad lines and fix a few small errors
* remove test block
* Fix rat game camera speed > 60fps
* (Mostly) fix swamp balance platforms at high fps
I think there's other physics stuff factoring into this, but these changes should cover what's specific to the platforms.
* forgot notes
* Fix baby spider wiggling too fast on high fps
* Rat game camera now takes into account lag frames
* raise particles cap to 10x
* change a text line
* allow sound bank load during vag
* fix default settings and fps setting
* keep "auto save disabled" option in menu
* cheats menu!
* Update game_text_ja.gs
* fix battle hud crash
* add cheats menu to title
* update settings version
* Update all-types.gc
* disable envmap fade out with hires actor lod setting
* disable merc fadeout if not using ps2 actor lods
* dont update aspect ratio if game size is bad
* set vsync later
* increase memory for generic, sprite and dma.
* fix issues with aspect ratio not saving
* split forcing envmap to a separate toggle
* too slow, dont expose to users yet
* add secrets menu, music player and some more pc settings
* remove todos
* rename string funcs
* replace cases
* add `game-text-id->string` function, refactor player menu generation
* remove process check, `cons` -> `dcons`, `strncpy`