Skip to content

Commit

Permalink
[Decompilation] [th04/th05] Handle subpixels at the C++ type level
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
nmlgc committed Sep 15, 2019
1 parent 0abf84f commit 9d121c7
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 17 deletions.
2 changes: 1 addition & 1 deletion Makefile.mak
Expand Up @@ -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 @&&|
$**
|
Expand Down
14 changes: 0 additions & 14 deletions th04/shared.h

This file was deleted.

53 changes: 53 additions & 0 deletions th04/shared.hpp
@@ -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);
/// -----
5 changes: 4 additions & 1 deletion th05/main_01.c → th05/main_01.cpp
Expand Up @@ -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)
Expand All @@ -12,3 +13,5 @@ void pascal score_delta_commit(void)
score_update_and_render();
}
}

}
3 changes: 2 additions & 1 deletion th05/th05.h → th05/th05.hpp
Expand Up @@ -4,4 +4,5 @@
*/

#include "ReC98.h"
#include "th04/shared.h"
#include "th04/shared.hpp"
/// ------

0 comments on commit 9d121c7

Please sign in to comment.