diff --git a/starfield/main.asm b/starfield/main.asm index 09186e1..c85d5e8 100644 --- a/starfield/main.asm +++ b/starfield/main.asm @@ -85,23 +85,76 @@ main pop bc ret +PROC +; D = valor minimo +; E = valor maximo +Seed dw $fa + +get_rnd + push bc ; Guarda o valor de RET na stack + +get_rnd_loop + ld a, (Seed) + ld b, a + + rrca ; multiply by 32 + rrca + rrca + xor 0x1f + + add a, b + sbc a, 255 ; carry + + ld (Seed), a + + ld h, a ; Save A to H + + ld a, e ; Valor maximo em A + cp h + + jr z, get_rnd_ret ; É igual + jr c, get_rnd_loop ; Se for menor + + ld a, d + cp h + + jr z, get_rnd_ret + jr c, get_rnd_ret + + jr get_rnd_loop + +get_rnd_ret + ld a, h + pop bc ; Tira o valor de RET da stack + ret +ENDP + PROC ; Initialize stars X and Y with "random" values initStars push bc ld d, MAX_STARS ; Number of stars to process ld hl, STARS ; HL points to X of first start + initStars_loop + push de + push hl - call getRandomX ; Get a random value for X | 1 - 250 | TODO: 255? + ld d, 0 + ld e, 250 + call get_rnd ; Get a random value <= 255 pop hl + ld (hl), a ; Set X to random value - + inc hl ; points to Y push hl - call getRandomY ; Get a random value for Y | 1 - 191 | TODO : allow 0 + ld d, 0 + ld e, 191 + call get_rnd ; Get a random value <= 191 pop hl + ld (hl), a ; Set Y to random value inc hl ; points to Speed @@ -109,11 +162,19 @@ initStars_loop push hl call getRandomSpeed ; Get a random value for Speed | 1 - 4 pop hl + + ;push hl + ;ld d, 1 + ;ld e, 4 + ;call get_rnd + ;pop hl + ld (hl), a ; Set Speed to random value ld bc, $3 ; Jump to next star adc hl, bc ; Skip PrevX and PrevY + pop de dec d ; Decrement counter jr nz, initStars_loop ; If not zero, do it again @@ -121,46 +182,6 @@ initStars_loop ret ENDP -PROC -; Gets a value a from a list of pre-calculated values -; Returns to begin after 0 is found | TODO: change this -getRandomX - push hl -getRandomX_loop - ld hl, (xrandpos) - ld a, (hl) - cp $0 - jr z, getRandomX_reset - inc hl - ld (xrandpos), hl - pop hl - ret -getRandomX_reset - ld hl, xranddata - ld (xrandpos), hl - jr getRandomX_loop -ENDP - -PROC -; Gets a value a from a list of pre-calculated values -; Returns to begin after 0 is found | TODO: change this -getRandomY - push hl -getRandomY_loop - ld hl, (yrandpos) - ld a, (hl) - cp $0 - jr z, getRandomY_reset - inc hl - ld (yrandpos), hl - pop hl - ret -getRandomY_reset - ld hl, yranddata - ld (yrandpos), hl - jr getRandomY_loop -ENDP - PROC ; Gets a value a from a list of pre-calculated values ; Returns to begin after 0 is found | TODO: change this @@ -239,8 +260,11 @@ increment_x_zero inc hl ; point to Y push hl - call getRandomY ; Get a random Y value + ld d, 0 + ld e, 191 + call get_rnd ; Get a random value below 191 pop hl + ld (hl), a ; Set Y = getRandomY inc hl ; point to speed diff --git a/starfield/randomgen.py b/starfield/randomgen.py index 68bd9d9..39fa16f 100644 --- a/starfield/randomgen.py +++ b/starfield/randomgen.py @@ -3,49 +3,18 @@ import random -# Generate how many random values -MAX_STARS = 10 Generate = 100 -xrandom = [] -yrandom = [] speedrandom = [] random.seed() for idx in range(Generate): - x = random.randint(1,250) - while(x in xrandom): - x = random.randint(1,250) - xrandom.append(x) - speed = random.randint(1,4) speedrandom.append(speed) -for idx in range(0,191): - y = random.randint(1,191) - while(y in yrandom): - y = random.randint(1,191) - yrandom.append(y) - f = open('randomvalues.asm', 'w') -f.write("xrandpos dw xranddata\n") -f.write("yrandpos dw yranddata\n") f.write("speedrandpos dw speedranddata\n\n") -for idx in range(len(xrandom)): - if idx == 0: - f.write("xranddata\n") - f.write("\t\tdb %i\n" % (xrandom[idx])) - -f.write("\t\tdb 0\n\n") - -for idx in range(len(yrandom)): - if idx == 0: - f.write("yranddata\n") - f.write("\t\tdb %i\n" % (yrandom[idx])) - -f.write("\t\tdb 0\n\n") - for idx in range(len(speedrandom)): if idx == 0: f.write("speedranddata\n") diff --git a/starfield/randomvalues.asm b/starfield/randomvalues.asm index 6d37b08..350e1e4 100644 --- a/starfield/randomvalues.asm +++ b/starfield/randomvalues.asm @@ -1,403 +1,104 @@ -xrandpos dw xranddata -yrandpos dw yranddata speedrandpos dw speedranddata -xranddata - db 234 - db 92 - db 33 - db 90 - db 215 - db 236 - db 5 - db 53 - db 158 - db 39 - db 213 - db 247 - db 245 - db 24 - db 76 - db 153 - db 183 - db 54 - db 163 - db 118 - db 211 - db 75 - db 98 - db 102 - db 88 - db 186 - db 60 - db 176 - db 175 - db 167 - db 25 - db 73 - db 128 - db 221 - db 18 - db 212 - db 240 - db 10 - db 150 - db 83 - db 166 - db 26 - db 139 - db 8 - db 157 - db 209 - db 36 - db 111 - db 149 - db 120 - db 57 - db 117 - db 17 - db 44 - db 156 - db 69 - db 109 - db 1 - db 114 - db 165 - db 30 - db 72 - db 77 - db 203 - db 12 - db 32 - db 223 - db 227 - db 241 - db 27 - db 2 - db 174 - db 116 - db 7 - db 93 - db 199 - db 242 - db 225 - db 47 - db 105 - db 171 - db 182 - db 63 - db 246 - db 13 - db 155 - db 6 - db 94 - db 135 - db 217 - db 216 - db 210 - db 131 - db 35 - db 184 - db 181 - db 197 - db 89 - db 95 - db 237 - db 0 - -yranddata - db 142 - db 34 - db 67 - db 146 - db 12 - db 109 - db 125 - db 93 - db 175 - db 74 - db 86 - db 153 - db 41 - db 84 - db 16 - db 29 - db 182 - db 27 - db 119 - db 36 - db 10 - db 111 - db 40 - db 137 - db 62 - db 63 - db 90 - db 71 - db 147 - db 190 - db 114 - db 9 - db 176 - db 37 - db 5 - db 82 - db 152 - db 72 - db 75 - db 13 - db 187 - db 54 - db 169 - db 171 - db 3 - db 26 - db 42 - db 105 - db 56 - db 7 - db 120 - db 46 - db 163 - db 76 - db 129 - db 136 - db 58 - db 128 - db 79 - db 130 - db 132 - db 101 - db 100 - db 25 - db 185 - db 124 - db 89 - db 164 - db 188 - db 80 - db 150 - db 95 - db 184 - db 127 - db 91 - db 48 - db 99 - db 32 - db 172 - db 49 - db 6 - db 148 - db 14 - db 98 - db 1 - db 23 - db 138 - db 178 - db 97 - db 43 - db 70 - db 60 - db 83 - db 140 - db 189 - db 173 - db 61 - db 157 - db 108 - db 123 - db 57 - db 139 - db 106 - db 131 - db 156 - db 77 - db 94 - db 122 - db 2 - db 53 - db 55 - db 44 - db 133 - db 22 - db 78 - db 17 - db 11 - db 30 - db 51 - db 31 - db 154 - db 177 - db 64 - db 126 - db 85 - db 38 - db 159 - db 143 - db 47 - db 145 - db 183 - db 18 - db 191 - db 102 - db 81 - db 87 - db 112 - db 20 - db 121 - db 116 - db 161 - db 167 - db 162 - db 52 - db 144 - db 155 - db 115 - db 118 - db 66 - db 92 - db 134 - db 186 - db 104 - db 103 - db 117 - db 33 - db 160 - db 151 - db 19 - db 158 - db 21 - db 35 - db 39 - db 168 - db 65 - db 24 - db 28 - db 181 - db 110 - db 8 - db 135 - db 73 - db 180 - db 96 - db 50 - db 68 - db 45 - db 141 - db 149 - db 174 - db 113 - db 107 - db 88 - db 15 - db 69 - db 166 - db 4 - db 165 - db 179 - db 170 - db 59 - db 0 - speedranddata + db 3 + db 3 db 2 db 4 db 1 db 3 db 1 - db 2 - db 4 - db 4 - db 3 - db 1 - db 4 - db 1 - db 3 - db 4 - db 3 db 1 db 4 db 2 db 3 - db 3 - db 4 - db 4 - db 3 - db 4 - db 3 - db 3 - db 2 - db 2 db 1 db 3 + db 4 + db 2 + db 1 + db 2 + db 3 + db 2 + db 4 + db 1 + db 3 + db 4 + db 3 + db 3 + db 4 + db 2 db 1 db 1 db 2 - db 1 + db 2 + db 3 + db 3 + db 3 + db 3 db 4 db 3 db 4 + db 4 + db 4 + db 4 + db 3 + db 1 + db 2 + db 1 + db 2 + db 4 + db 3 + db 4 + db 2 + db 1 + db 4 + db 1 + db 4 + db 4 + db 3 db 3 db 1 db 4 db 2 db 3 db 1 + db 2 db 4 + db 4 + db 4 + db 4 + db 1 db 3 - db 2 - db 3 - db 3 - db 3 - db 4 - db 2 - db 4 - db 1 - db 2 - db 2 - db 1 - db 4 - db 4 - db 2 - db 4 - db 2 - db 3 - db 1 - db 4 - db 4 - db 4 - db 1 - db 1 - db 2 - db 1 - db 1 - db 1 - db 4 - db 2 - db 2 - db 4 - db 1 db 4 db 3 db 1 + db 1 db 4 db 2 db 4 + db 4 db 3 + db 4 + db 1 db 2 db 3 db 3 db 2 - db 4 + db 1 + db 1 + db 3 + db 3 + db 1 db 3 db 2 - db 2 + db 4 db 1 + db 1 + db 1 + db 3 db 2 db 2 db 2 db 3 - db 1 - db 4 - db 4 db 0