Decompile fn_17634 (LexiconBoundary::Matches)
Batch #834 by ragnarok-clanker: 0 byte-identical, 1 confirmed by peer review. - fn_17634 LexiconBoundary::Matches: logic confirmed by peer review Reviewed-by: ragnarok-clanker Adds to the build: Source/Utility/LexiconBoundary.cpp
This commit is contained in:
parent
e2351a9e3a
commit
f66874c19f
3 changed files with 52 additions and 0 deletions
38
Source/Utility/LexiconBoundary.cpp
Normal file
38
Source/Utility/LexiconBoundary.cpp
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
#include "Utility/LexiconBoundary.h"
|
||||
|
||||
// FUNCTION: fn_17634
|
||||
bool LexiconBoundary::Matches(unsigned char previous, unsigned char current, unsigned char options) const {
|
||||
if (previous == 0xDD) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ((this->flags[previous] & 1) != 0 && (this->flags[current] & 0x2100) != 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (current == 32) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (previous == 32) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const std::uint32_t before = this->flags[previous];
|
||||
const std::uint32_t after = this->flags[current];
|
||||
if ((options & 2) != 0) {
|
||||
return ((before & 0x470) != 0) == ((after & 0x470) != 0) &&
|
||||
(((before & 0x1000) != 0 && (after & 1) != 0) || ((before & 0x470) != 0 && (after & 0x470) != 0) ||
|
||||
((before & 2) != 0 && (after & 2) != 0));
|
||||
}
|
||||
|
||||
if ((after & 0x10) != 0 && (before & 0x10) == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((after & 0x60) != 0 || (before & 0x10) != 0 || ((before & 0x1000) != 0 && (after & 1) != 0)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return ((before & 0x400) != 0 && (after & 0x10002) != 0) || (after & 0x400) != 0;
|
||||
}
|
||||
13
Source/Utility/LexiconBoundary.h
Normal file
13
Source/Utility/LexiconBoundary.h
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
#ifndef RAGNAROK_SOURCE_UTILITY_LEXICONBOUNDARY_H
|
||||
#define RAGNAROK_SOURCE_UTILITY_LEXICONBOUNDARY_H
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
struct LexiconBoundary {
|
||||
/* 0000 */ std::uint32_t unknown_0000;
|
||||
/* 0004 */ std::uint32_t flags[256];
|
||||
|
||||
bool Matches(unsigned char previous, unsigned char current, unsigned char options) const;
|
||||
};
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue