mirror of https://github.com/nmlgc/ReC98.git
[Decompilation] [th04/th05] Handle subpixels at the C++ type level
I've had the idea to hide this implementation detail and improve code readability for some time now, but it obviously must still all inline, to be indistinguishable from a direct assignment of the correct value… … which, amazingly, it does! Even the static_cast from float to int. The latter allows us to exclusively implement this for float, since we do have to express the occasional value smaller than 16. Who needs macros anyway. Yay, C++ in TH04 and TH05 after all! Part of P0030, funded by zorg.
This commit is contained in:
parent
0abf84f450
commit
9d121c7cce
|
@ -73,7 +73,7 @@ bin\th04\op.exe: bin\th04\op.obj th04\op_02.c
|
|||
$**
|
||||
|
|
||||
|
||||
bin\th05\main.exe: bin\th05\main.obj th05\main_01.c
|
||||
bin\th05\main.exe: bin\th05\main.obj th05\main_01.cpp
|
||||
$(CC) $(CFLAGS) -ml -3 -DGAME=5 -nbin\th05\ -eMAIN.EXE @&&|
|
||||
$**
|
||||
|
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
/* ReC98
|
||||
* -----
|
||||
* Types shared between TH04 and TH05
|
||||
*/
|
||||
|
||||
/// Score
|
||||
/// -----
|
||||
extern unsigned long score_delta;
|
||||
|
||||
void pascal near score_update_and_render(void);
|
||||
|
||||
// Adds the entire score delta at once to the current score.
|
||||
void pascal score_delta_commit(void);
|
||||
/// -----
|
|
@ -0,0 +1,53 @@
|
|||
/* ReC98
|
||||
* -----
|
||||
* Types shared between TH04 and TH05
|
||||
*/
|
||||
|
||||
/// Math
|
||||
/// ----
|
||||
class Subpixel {
|
||||
private:
|
||||
int v;
|
||||
|
||||
public:
|
||||
Subpixel() {}
|
||||
Subpixel(float screen_v) { *this = screen_v; }
|
||||
|
||||
Subpixel& operator =(float screen_v) {
|
||||
v = static_cast<int>(screen_v * 16.0f);
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
||||
struct SPPoint {
|
||||
Subpixel x, y;
|
||||
|
||||
void set(float screen_x, float screen_y) {
|
||||
x = screen_x;
|
||||
y = screen_y;
|
||||
}
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
SPPoint cur;
|
||||
SPPoint prev;
|
||||
SPPoint velocity;
|
||||
|
||||
void init(float screen_x, float screen_y) {
|
||||
cur.x = screen_x;
|
||||
prev.x = screen_x;
|
||||
cur.y = screen_y;
|
||||
prev.y = screen_y;
|
||||
}
|
||||
} motion_t;
|
||||
/// ----
|
||||
|
||||
/// Score
|
||||
/// -----
|
||||
extern unsigned long score_delta;
|
||||
|
||||
void pascal near score_update_and_render(void);
|
||||
|
||||
// Adds the entire score delta at once to the current score.
|
||||
void pascal score_delta_commit(void);
|
||||
/// -----
|
|
@ -3,7 +3,8 @@
|
|||
* Code segment #1 of TH05's MAIN.EXE
|
||||
*/
|
||||
|
||||
#include "th05/th05.h"
|
||||
extern "C" {
|
||||
#include "th05/th05.hpp"
|
||||
|
||||
// Adds the entire score delta at once to the current score.
|
||||
void pascal score_delta_commit(void)
|
||||
|
@ -12,3 +13,5 @@ void pascal score_delta_commit(void)
|
|||
score_update_and_render();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -4,4 +4,5 @@
|
|||
*/
|
||||
|
||||
#include "ReC98.h"
|
||||
#include "th04/shared.h"
|
||||
#include "th04/shared.hpp"
|
||||
/// ------
|
Loading…
Reference in New Issue