-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathoblivion.asl
124 lines (110 loc) · 3.32 KB
/
oblivion.asl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
state("Oblivion")
{
// TES 4: Oblivion, unknown version
}
state("Oblivion", "1.0")
{
// TES 4: Oblivion, original version
// version 1.0.228
// size 7704576
bool isLoadingScreen : 0x74F594;
bool notTalking : 0x6D25A0;
bool gamePaused : 0x7480BC;
bool midSpeech : 0x6E4C08;
bool isWaiting : 0x6BE410;
// uint spiesScroll : 0x6EA094;
// uint spiesScroll2 : 0x6DB898;
}
state("Oblivion", "1.2")
{
// TES 4: Oblivion, steam version
// version 1.2.0416
// size 8409088
// Puri's vars
bool isLoadingScreen : 0x3CD4B0, 0x8, 0xEC;
byte isWaiting : 0x172DCC, 0x10;
// byte startingPrompt : 0x73BD60, 0x48, 0xC8, 0xB8, 0xDC;
// TFC's vars
// bool isLoadingScreen : 0x742D54;
// bool notTalking : 0x72D91C;
// bool notPaused : 0x73341C;
// bool isWaiting : 0x712DE0;
}
init
{
version = modules.First().FileVersionInfo.FileVersion;
if (version == "1.0.228") {
version = "1.0";
} else if (version == "1.2.0416") {
version = "1.2";
} else {
version = "";
}
vars.prevPhase = timer.CurrentPhase;
vars.isLoading = false;
vars.dontLoad = false;
vars.mapTravel = false;
vars.guardWarp = false;
vars.guardWarp2 = false;
}
exit
{
timer.IsGameTimePaused = true;
}
update
{
if (version == "") {
// unsupported version
return;
}
if (timer.CurrentPhase == TimerPhase.Running && vars.prevPhase == TimerPhase.NotRunning) {
vars.dontLoad = false;
vars.mapTravel = false;
vars.guardWarp = false;
vars.guardWarp2 = false;
}
if (version == "1.0") {
vars.isLoading = (current.isLoadingScreen && current.notTalking && !vars.dontLoad) || current.isWaiting;
// load pointer breaks when you start a conversation
if (current.midSpeech) {
vars.dontLoad = true;
vars.mapTravel = false;
vars.guardWarp2 = false;
}
if (current.isLoadingScreen && current.gamePaused && vars.dontLoad) {
vars.mapTravel = true;
vars.guardWarp = true;
}
if ((!current.isLoadingScreen && !current.gamePaused) || (current.gamePaused && !current.isLoadingScreen && vars.mapTravel)) {
vars.dontLoad = false;
vars.guardWarp = false;
}
if (vars.guardWarp && !current.gamePaused) {
vars.guardWarp2 = true;
}
if (vars.guardWarp2 && current.isLoadingScreen && current.gamePaused) {
vars.dontLoad = false;
}
} else {
vars.isLoading = current.isLoadingScreen || current.isWaiting != 0;
// for TFC's vars
// if (current.isLoadingScreen && !current.notTalking) {
// vars.dontLoad = true;
// vars.mapTravel = false;
// }
// if (current.isLoadingScreen && !current.notPaused && vars.dontLoad && current.notTalking) {
// vars.mapTravel = true;
// }
// if (vars.mapTravel && !current.notPaused && !current.isLoadingScreen || (current.notTalking && !current.isLoadingScreen)) {
// vars.dontLoad = false;
// }
// if (!current.isLoadingScreen && current.notPaused) {
// vars.dontLoad = false;
// }
}
vars.prevPhase = timer.CurrentPhase;
}
isLoading
{
return vars.isLoading;
}