Permalink
Cannot retrieve contributors at this time
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
2388 lines (2183 sloc)
99.2 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| pico-8 cartridge // http://www.pico-8.com | |
| version 8 | |
| __lua__ | |
| -- heliopause | |
| -- by anthony digirolamo | |
| function split(s) | |
| local t,start_index,ti={},2,split_start or 0 | |
| local mode=sub(s,1,1) | |
| for i=2,#s do | |
| local c=sub(s,i,i) | |
| if mode=="x" then | |
| t[ti]=("0x"..c)+0 | |
| ti+=1 | |
| elseif c=="," then | |
| local sstr=sub(s,start_index,i-1) | |
| if mode=="a" then | |
| if sstr=="nil" then sstr=nil end | |
| t[ti]=sstr | |
| else | |
| t[ti]=sstr+0 | |
| end | |
| ti+=1 | |
| start_index=i+1 | |
| end | |
| end | |
| return t | |
| end | |
| function nsplit(s) | |
| local t,start_index,ti={},1,split_start or 0 | |
| for i=1,#s do | |
| if sub(s,i,i)=="|" then | |
| t[ti]=split(sub(s,start_index,i-1)) | |
| ti+=1 | |
| start_index=i+1 | |
| end | |
| end | |
| return t | |
| end | |
| v={} | |
| v.__index=v | |
| function v.new(x,y) | |
| return setmetatable({x=x or 0,y=y or 0},v)end | |
| function v:add(v) | |
| self.x+=v.x | |
| self.y+=v.y | |
| return self | |
| end | |
| function v.__add(a,b) | |
| return v.new(a.x+b.x,a.y+b.y)end | |
| function v.__sub(a,b) | |
| return v.new(a.x-b.x,a.y-b.y)end | |
| function v.__mul(a,b) | |
| return v.new(a.x*b,a.y*b)end | |
| function v.__div(a,b) | |
| return v.new(a.x/b,a.y/b)end | |
| function v:clone() | |
| return v.new(self.x,self.y)end | |
| function v:about_equals(v) | |
| return ro(v.x)==self.x and ro(v.y)==self.y end | |
| function v:angle() | |
| return atan2(self.x,self.y)end | |
| function v:length() | |
| return sqrt(self.x^2+self.y^2)end | |
| function v:scaled_length() | |
| return 182*sqrt((self.x/182)^2+(self.y/182)^2)end | |
| function scaled_dist(a,b) | |
| return (b-a):scaled_length()end | |
| function v:perpendicular() | |
| return v.new(-self.y,self.x)end | |
| function v:normalize() | |
| local l=self:length() | |
| self.x/=l | |
| self.y/=l | |
| return self end | |
| function v:rotate(phi) | |
| local c=cos(phi) | |
| local s=sin(phi) | |
| local x=self.x | |
| local y=self.y | |
| self.x=c*x-s*y | |
| self.y=s*x+c*y | |
| return self end | |
| function v:ro() | |
| self.x=ro(self.x) | |
| self.y=ro(self.y) | |
| return self end | |
| function v:draw_point(c) | |
| pset( | |
| ro(self.x), | |
| ro(self.y),c)end | |
| function v:draw_line(v,c) | |
| line( | |
| ro(self.x), | |
| ro(self.y), | |
| ro(v.x), | |
| ro(v.y),c)end | |
| function v:draw_circle(radius,c,fill) | |
| local method=circ | |
| if fill then method=circfill end | |
| method( | |
| ro(self.x), | |
| ro(self.y), | |
| ro(radius),c)end | |
| setmetatable(v,{__call=function(_,...) return v.new(...) end}) | |
| function ra(len) | |
| return rotatedv(rnd(),len)end | |
| function rotatedv(angle,x,y) | |
| return v(x or 1,y):rotate(angle)end | |
| function ro(i) | |
| return flr(i+.5)end | |
| function ceil(x) | |
| return -flr(-x)end | |
| function ri(n,minimum) | |
| local m=minimum or 0 | |
| return m+flr(rnd(32767))%(n-m)end | |
| function format(num) | |
| local n=flr(num*10+0.5)/10 | |
| return flr(n).."."..ro((n%1)*10)end | |
| ship={} | |
| ship.__index=ship | |
| function ship.new(h) | |
| local shp={ | |
| npc=false, | |
| hostile=h, | |
| scrp=screen_center, | |
| secp=v(), | |
| cur_deltav=0, | |
| cur_gees=0, | |
| angle=0, | |
| angle_radians=0, | |
| heading=90, | |
| velocity_angle=0, | |
| velocity_angle_opposite=180, | |
| velocity=0, | |
| velocity_vector=v(), | |
| orders={}, | |
| last_fire_time=-6 | |
| } | |
| setmetatable(shp,ship) | |
| return shp | |
| end | |
| function ship:buildship(seed,stype) | |
| self.stypei=stype or ri(#ship_types)+1 | |
| local seed_value=seed or ri(32767) | |
| srand(seed_value) | |
| self.seed_value=seed_value | |
| self.name=ship_names[self.stypei] | |
| local shape=ship_types[self.stypei] | |
| local scs=split"x6789abcdef" | |
| for i=1,6 do | |
| del(scs,scs[ri(#scs)+1]) | |
| end | |
| local hp=0 | |
| local ship_mask={} | |
| local rows=ri(shape[#shape]+1,shape[#shape-1]) | |
| local cols=flr(rows/2) | |
| for y=1,rows do | |
| add(ship_mask,{}) | |
| for x=1,cols do | |
| add(ship_mask[y],scs[4]) | |
| end | |
| end | |
| local slopei,slope=2,v(1,shape[1]) | |
| for y=2,rows-1 do | |
| for x=1,cols do | |
| local color=scs[1+flr((y+ri(3)-1)/rows*3)] | |
| if cols-x<max(0,flr(slope.y)) then | |
| if rnd()<.6 then | |
| ship_mask[y][x]=color | |
| hp+=1 | |
| if ship_mask[y-1][x]==scs[4] then | |
| ship_mask[y][x]=darkshipcolors[color] | |
| end | |
| end | |
| end | |
| end | |
| if y>=flr(shape[slopei+1]*rows) then | |
| slopei+=2 | |
| end | |
| slope=slope+v(1,shape[slopei]) | |
| if slope.y>0 and y>3 and y<rows-1 then | |
| for i=1,ri(ro(slope.y/4)+1) do | |
| ship_mask[y][cols-i]=5 | |
| hp+=2 | |
| end | |
| end | |
| end | |
| local odd_columns=ri(2) | |
| for y=rows,1,-1 do | |
| for x=cols-odd_columns,1,-1 do | |
| add(ship_mask[y],ship_mask[y][x]) | |
| end | |
| end | |
| if self.stypei==#ship_types then | |
| hp*=4 | |
| end | |
| self.hp=hp | |
| self.max_hp=hp | |
| self.hp_percent=1 | |
| self.deltav=max(hp*-0.0188+4.5647,1)*0.0326 | |
| local turn_factor=1 | |
| if self.stypei==4 then | |
| turn_factor*=.5 | |
| end | |
| self.turn_rate=ro(turn_factor*max(hp*-0.0470+11.4117,2)) | |
| self.sprite_rows=rows | |
| self.sprite_columns=#ship_mask[1] | |
| self.transparent_color=scs[4] | |
| self.sprite=ship_mask | |
| return self | |
| end | |
| function ship:set_position_near_object(obj) | |
| local radius=obj.radius or obj.sprite_rows | |
| self.secp=ra(1.2*radius)+obj.secp | |
| self:reset_velocity() | |
| end | |
| function ship:clear_target() | |
| self.target_index=nil | |
| self.target=nil | |
| end | |
| function ship:targeted_color() | |
| if self.hostile then | |
| return 8,2 | |
| else | |
| return 11,3 | |
| end | |
| end | |
| function ship:draw_sprite_rotated(offscreen_pos,angle) | |
| if self.dead then return end | |
| local scrp=offscreen_pos or self.scrp | |
| local a=angle or self.angle_radians | |
| local rows,cols=self.sprite_rows,self.sprite_columns | |
| local tcolor=self.transparent_color | |
| local projectile_hit_by | |
| local close_projectiles={} | |
| if self.targeted then | |
| local targetcircle_radius=ro(rows/2)+4 | |
| local circlecolor,circleshadow=self:targeted_color() | |
| if offscreen_pos then | |
| (scrp+v(1,1)):draw_circle(targetcircle_radius,circleshadow,true) | |
| scrp:draw_circle(targetcircle_radius,0,true) | |
| end | |
| scrp:draw_circle(targetcircle_radius,circlecolor) | |
| end | |
| for p in all(projectiles) do | |
| if p.firing_ship~=self then | |
| if (p.secp and offscreen_pos and (self.secp-p.secp):scaled_length()<=rows) or | |
| scaled_dist(p.scrp,scrp)<rows then | |
| add(close_projectiles,p) | |
| end | |
| end | |
| end | |
| for y=1,cols do | |
| for x=1,rows do | |
| local color=self.sprite[x][y] | |
| if color~=tcolor and color~=nil then | |
| local pixel1=v( | |
| rows-x-flr(rows/2), | |
| y-flr(cols/2)-1) | |
| local pixel2=v(pixel1.x+1,pixel1.y) | |
| pixel1:rotate(a):add(scrp):ro() | |
| pixel2:rotate(a):add(scrp):ro() | |
| if self.hp<1 and rnd()<.8 then | |
| add(particles,explosion.new(pixel1,rows/2,18,self.velocity_vector)) | |
| sfx(55,2) | |
| if not offscreen_pos then | |
| add(particles,spark.new(pixel1,ra(rnd(.25)+.25)+self.velocity_vector,color,128+ri(32))) | |
| end | |
| else | |
| for projectile in all(close_projectiles) do | |
| local impact=false | |
| if not offscreen_pos | |
| and (pixel1:about_equals(projectile.scrp) | |
| or (projectile.position2 | |
| and pixel1:about_equals(projectile.position2))) then | |
| impact=true | |
| elseif offscreen_pos | |
| and projectile.last_offscreen_pos | |
| and pixel1:about_equals(projectile.last_offscreen_pos) then | |
| impact=true | |
| end | |
| if impact then | |
| projectile_hit_by=projectile.firing_ship | |
| local damage=projectile.damage or 1 | |
| self.hp-=damage | |
| if damage>10 then | |
| add(particles,explosion.new(pixel1,8,12,self.velocity_vector)) | |
| sfx(57,1) | |
| else | |
| add(particles,explosion.new(pixel1,2,6,self.velocity_vector)) | |
| sfx(56,2) | |
| end | |
| local old_hp_percent=self.hp_percent | |
| self.hp_percent=self.hp/self.max_hp | |
| if not self.npc and old_hp_percent>.1 and self.hp_percent<=.1 then | |
| note_add("thruster malfunction") | |
| end | |
| if rnd()<.5 then | |
| add(particles,spark.new(pixel1,ra(rnd(2)+1)+self.velocity_vector,color,128)) | |
| end | |
| del(projectiles,projectile) | |
| self.sprite[x][y]=-5 | |
| color=-5 | |
| break | |
| end | |
| end | |
| if color<0 then color=5 end | |
| rectfill( | |
| pixel1.x,pixel1.y, | |
| pixel2.x,pixel2.y, | |
| color) | |
| end | |
| end | |
| end | |
| end | |
| if projectile_hit_by then | |
| self.last_hit_time=secondcount | |
| self.last_hit_attacking_ship=projectile_hit_by | |
| end | |
| end | |
| function ship:turn_left() | |
| self:rotate(self.turn_rate)end | |
| function ship:turn_right() | |
| self:rotate(-self.turn_rate)end | |
| function ship:rotate(signed_degrees) | |
| self.angle=(self.angle+signed_degrees)%360 | |
| self.angle_radians=self.angle/360 | |
| self.heading=(450-self.angle)%360 | |
| end | |
| function ship:draw() | |
| text(self:hp_string(),0,0,self:hp_color()) | |
| local o=nil | |
| local co=self.orders[#self.orders] | |
| if co==self.full_stop then | |
| o="stopping" | |
| elseif co==self.seek then | |
| o="following" | |
| elseif co==self.fly_towards_destination then | |
| o="flying to nearest planet" | |
| end | |
| if o then | |
| text(o,1,22,12,true) | |
| end | |
| if self.last_fire_time+5>=secondcount then | |
| text("reloading",1,31,10,true) | |
| end | |
| text("pixels/sec "..format(10*self.velocity),0,7) | |
| if self.accelerating then | |
| text(format(self.cur_gees).." g",0,14) | |
| end | |
| self:draw_sprite_rotated() | |
| end | |
| function ship:hp_color() | |
| return health_colormap[ceil(10*self.hp_percent)] | |
| end | |
| function ship:hp_string() | |
| return ""..ro(100*self.hp_percent).."% "..self.hp.."/"..self.max_hp | |
| end | |
| function ship:data(y) | |
| rectfill(0,y+34,127,y,0) | |
| rect(0,y+34,127,y,6) | |
| self:draw_sprite_rotated(v(104,y+17),0) | |
| text(self.name.."\nmodel "..self.seed_value.."\nmax hull "..self.max_hp.."\nmax thrust "..format(self.deltav*30.593514175).." g\nturn rate "..self.turn_rate.." deg/sec",3,y+3) | |
| end | |
| function ship:is_visible(player_ship_pos) | |
| local size=ro(self.sprite_rows/2) | |
| local scrp=(self.secp-player_ship_pos+screen_center):ro() | |
| self.scrp=scrp | |
| return scrp.x<128+size and | |
| scrp.x>0-size and | |
| scrp.y<128+size and | |
| scrp.y>0-size | |
| end | |
| function ship:update_location() | |
| if self.velocity>0 then | |
| self.secp:add(self.velocity_vector) | |
| end | |
| end | |
| function ship:reset_velocity() | |
| self.velocity_vector=v() | |
| self.velocity=0 | |
| end | |
| function ship:predict_sector_position() | |
| if self.velocity>0 then | |
| return self.secp+self.velocity_vector*4 | |
| else | |
| return self.secp | |
| end | |
| end | |
| function ship:set_destination(dest) | |
| self.destination=dest.secp | |
| self:update_steering_velocity() | |
| self.max_distance_to_destination=self.distance_to_destination | |
| end | |
| function ship:flee() | |
| self:set_destination(self.last_hit_attacking_ship) | |
| self:update_steering_velocity(1) | |
| local away_from_enemy=self.steer_vel:angle() | |
| local toward_enemy=(away_from_enemy+.5) % 1 | |
| if self.distance_to_destination<55 then | |
| self:rotate_towards_heading(away_from_enemy) | |
| self:apply_thrust() | |
| else | |
| self:full_stop() | |
| if self.hostile and | |
| self.angle_radians<toward_enemy+.1 and | |
| self.angle_radians>toward_enemy-.1 then | |
| self:fire_weapon() | |
| end | |
| end | |
| end | |
| function ship:update_steering_velocity(modifier) | |
| local desired_velocity=self.secp-self.destination | |
| self.distance_to_destination=desired_velocity:scaled_length() | |
| self.steer_vel=(desired_velocity-self.velocity_vector)*(modifier or -1) | |
| end | |
| function ship:seek() | |
| if self.seektime%20==0 then | |
| self:set_destination(self.target) | |
| end | |
| self.seektime+=1 | |
| local target_offset=self.destination-self.secp | |
| local distance=target_offset:scaled_length() | |
| self.distance_to_destination=distance | |
| local maxspeed=distance/50 | |
| local ramped_speed=(distance/(self.max_distance_to_destination*.7))*maxspeed | |
| local clipped_speed=min(ramped_speed,maxspeed) | |
| local desired_velocity=target_offset*(ramped_speed/distance) | |
| self.steer_vel=desired_velocity-self.velocity_vector | |
| if self:rotate_towards_heading(self.steer_vel:angle()) then | |
| self:apply_thrust(self.steer_vel:scaled_length()) | |
| end | |
| if self.hostile then | |
| if distance<128 then | |
| self:fire_weapon() | |
| self:fire_missile() | |
| end | |
| end | |
| end | |
| function ship:fly_towards_destination() | |
| self:update_steering_velocity() | |
| if self.distance_to_destination>self.max_distance_to_destination*.9 then | |
| if self:rotate_towards_heading(self.steer_vel:angle()) then | |
| self:apply_thrust() | |
| end | |
| else | |
| self.accelerating=false | |
| self:reverse_direction() | |
| if self.distance_to_destination<=self.max_distance_to_destination*.11 then | |
| self:order_done(self.full_stop) | |
| end | |
| end | |
| end | |
| function ship:approach_object(obj) | |
| local obj=obj or sect.planets[ri(#sect.planets)+1] | |
| self:set_destination(obj) | |
| self:reset_orders(self.fly_towards_destination) | |
| if self.velocity>0 then | |
| add(self.orders,self.full_stop) | |
| end | |
| end | |
| function ship:follow_cur_order() | |
| local order=self.orders[#self.orders] | |
| if order then order(self) end | |
| end | |
| function ship:order_done(new_order) | |
| self.orders[#self.orders]=new_order | |
| end | |
| function ship:reset_orders(new_order) | |
| self.orders={} | |
| if new_order then add(self.orders,new_order) end | |
| end | |
| function ship:cut_thrust() | |
| self.accelerating=false | |
| self.cur_deltav=0 | |
| end | |
| function ship:wait() | |
| if secondcount>self.wait_duration+self.wait_time then | |
| self:order_done() | |
| end | |
| end | |
| function ship:full_stop() | |
| if self.velocity>0 and self:reverse_direction() then | |
| self:apply_thrust() | |
| if self.velocity<1.2*self.deltav then | |
| self:reset_velocity() | |
| self:order_done() | |
| end | |
| end | |
| end | |
| function ship:fire_missile(weapon) | |
| if self.target and secondcount>5+self.last_fire_time then | |
| self.last_fire_time=secondcount | |
| add(projectiles,missile.new(self,self.target)) | |
| self:pilotsfx(54) | |
| end | |
| end | |
| function ship:pilotsfx(n,c) | |
| if self==pilot then sfx(n,c or 1) end | |
| end | |
| function ship:fire_weapon() | |
| local hardpoints={1,-1} | |
| if self.stypei~=2 then hardpoints={0} end | |
| local rate=3 | |
| if self.npc then rate=5 end | |
| if framecount%rate==0 then | |
| for y in all(hardpoints) do | |
| add(projectiles,cannon.new( | |
| rotatedv(self.angle_radians,self.sprite_rows/2-1,y*(self.sprite_columns/4))+self.scrp, | |
| rotatedv(self.angle_radians,6)+self.velocity_vector,12,self)) | |
| end | |
| self:pilotsfx(36) | |
| end | |
| end | |
| function ship:apply_thrust(max_velocity) | |
| self.accelerating=true | |
| if self.cur_deltav<self.deltav then | |
| self.cur_deltav+=self.deltav/30 | |
| else | |
| self.cur_deltav=self.deltav | |
| end | |
| local dv=self.cur_deltav | |
| self:pilotsfx(38+flr(12*dv/self.deltav),2) | |
| if max_velocity and dv>max_velocity then | |
| dv=max_velocity | |
| end | |
| if self.hp_percent<=rnd(.1) then | |
| dv=0 | |
| end | |
| self.cur_gees=dv*30.593514175 | |
| local a=self.angle_radians | |
| local additional_velocity_vector=v(cos(a)*dv,sin(a)*dv) | |
| local velocity_vector=self.velocity_vector | |
| local velocity | |
| local engine_location=rotatedv(a,self.sprite_rows*-.5)+self.scrp | |
| add(particles,thrustexhaust.new( | |
| engine_location, | |
| additional_velocity_vector*-1.3*self.sprite_rows)) | |
| velocity_vector:add(additional_velocity_vector) | |
| velocity=velocity_vector:length() | |
| self.velocity_angle=velocity_vector:angle() | |
| self.velocity_angle_opposite=(self.velocity_angle+0.5)%1 | |
| self.velocity=velocity | |
| self.velocity_vector=velocity_vector | |
| end | |
| function ship:reverse_direction() | |
| if self.velocity>0 then | |
| return self:rotate_towards_heading(self.velocity_angle_opposite) | |
| end | |
| end | |
| function ship:rotate_towards_heading(heading) | |
| local delta=(heading*360-self.angle+180)%360-180 | |
| if delta~=0 then | |
| local r=self.turn_rate*delta/abs(delta) | |
| if abs(delta)>abs(r) then delta=r end | |
| self:rotate(delta) | |
| end | |
| return delta<0.1 and delta>-.1 | |
| end | |
| function nearest_planet() | |
| local planet | |
| local dist=32767 | |
| for p in all(sect.planets) do | |
| if p.planet_type then | |
| local d=scaled_dist(pilot.secp,p.secp) | |
| if d<dist then | |
| dist=d | |
| planet=p | |
| end | |
| end | |
| end | |
| return planet,dist | |
| end | |
| function land_at_nearest_planet() | |
| local planet,dist=nearest_planet() | |
| if dist<planet.radius*1.4 then | |
| if pilot.velocity<.5 then | |
| sect:reset_planet_visibility() | |
| landed_front_rendered=false | |
| landed_back_rendered=false | |
| landed_planet=planet | |
| landed=true | |
| landed_menu() | |
| draw_rect(128,128,0) | |
| else | |
| note_add("moving too fast to land") | |
| end | |
| else | |
| note_add("too far to land") | |
| end | |
| return false | |
| end | |
| function takeoff() | |
| sect:reset_planet_visibility() | |
| pilot:set_position_near_object(landed_planet) | |
| landed=false | |
| return false | |
| end | |
| function clear_targeted_ship_flags() | |
| foreach(npcships, function(ship) ship.targeted=false end) | |
| end | |
| function next_hostile_target(ship) | |
| local targeting_ship=ship or pilot | |
| local hostile | |
| for i=1,#npcships do | |
| next_ship_target(ship) | |
| if targeting_ship.target.hostile then break end | |
| end | |
| return true | |
| end | |
| function next_ship_target(ship,random) | |
| local targeting_ship=ship or pilot | |
| if random then | |
| targeting_ship.target_index=ri(#npcships)+1 | |
| else | |
| targeting_ship.target_index=(targeting_ship.target_index or #npcships)%#npcships+1 | |
| end | |
| targeting_ship.target=npcships[targeting_ship.target_index] | |
| if targeting_ship==targeting_ship.target then | |
| targeting_ship.target=pilot | |
| end | |
| if not ship then | |
| clear_targeted_ship_flags() | |
| targeting_ship.target.targeted=true | |
| end | |
| return true | |
| end | |
| missile={} | |
| missile.__index=missile | |
| function missile.new(fship,t) | |
| return setmetatable({ | |
| secp=fship.secp:clone(), | |
| scrp=fship.scrp:clone(), | |
| velocity_vector=fship.velocity_vector:clone(), | |
| velocity=fship.velocity, | |
| target=t, | |
| sprite_rows=1, | |
| firing_ship=fship, | |
| cur_deltav=.1, | |
| deltav=.1, | |
| hp_percent=1, | |
| duration=512, | |
| damage=20 | |
| },missile)end | |
| function missile:update() | |
| self.destination=self.target:predict_sector_position() | |
| self:update_steering_velocity() | |
| self.angle_radians=self.steer_vel:angle() | |
| self:apply_thrust(self.steer_vel:scaled_length()) | |
| self.duration-=1 | |
| self:update_location() | |
| end | |
| function missile:draw(shipvel,offscreen_pos) | |
| local scrp=offscreen_pos or self.scrp | |
| self.last_offscreen_pos=offscreen_pos | |
| if self:is_visible(pilot.secp) or offscreen_pos then | |
| scrp:draw_line(scrp+rotatedv(self.angle_radians,4),6) | |
| end | |
| end | |
| setmetatable(missile,{__index=ship}) | |
| star={} | |
| star.__index=star | |
| function star.new() | |
| return setmetatable({ | |
| position=v(), | |
| color=7, | |
| speed=1 | |
| },star)end | |
| function star:reset(x,y) | |
| self.position=v(x or ri(128),y or ri(128)) | |
| self.color=ri(#star_colors[star_color_monochrome+star_color_index+1])+1 | |
| self.speed=rnd(0.75)+0.25 | |
| return self | |
| end | |
| sun={} | |
| sun.__index=sun | |
| function sun.new(radius,x,y) | |
| local r=radius or 64+ri(128) | |
| local c=ri(6,1) | |
| return setmetatable({ | |
| scrp=v(), | |
| radius=r, | |
| sun_color_index=c, | |
| color=sun_colors[c+5], | |
| secp=v(x or 0,y or 0), | |
| },sun)end | |
| function sun:draw(ship_pos) | |
| if stellar_object_is_visible(self,ship_pos) then | |
| for i=0,1 do | |
| self.scrp:draw_circle( | |
| self.radius-i*3, | |
| sun_colors[i*5+self.sun_color_index],true) | |
| end | |
| end | |
| end | |
| function stellar_object_is_visible(obj,ship_pos) | |
| obj.scrp=obj.secp-ship_pos+screen_center | |
| return | |
| obj.scrp.x<128+obj.radius and | |
| obj.scrp.x>0-obj.radius and | |
| obj.scrp.y<128+obj.radius and | |
| obj.scrp.y>0-obj.radius | |
| end | |
| starfield_count=40 | |
| sector={} | |
| sector.__index=sector | |
| function sector.new() | |
| local sec={ | |
| seed=ri(32767), | |
| planets={}, | |
| starfield={} | |
| } | |
| srand(sec.seed) | |
| for i=1,starfield_count do | |
| add(sec.starfield,star.new():reset()) | |
| end | |
| setmetatable(sec,sector) | |
| return sec | |
| end | |
| function sector:reset_planet_visibility() | |
| foreach(self.planets, function(p) | |
| p.rendered_circle=false | |
| p.rendered_terrain=false | |
| end) | |
| end | |
| function sector:new_planet_along_elipse() | |
| local x,y,sdist | |
| local planet_nearby=true | |
| while(planet_nearby) do | |
| x=rnd(150) | |
| y=sqrt((rnd(35)+40)^2*(1-x^2/(rnd(50)+100)^2)) | |
| if rnd()<.5 then x*=-1 end | |
| if rnd()<.75 then y*=-1 end | |
| if #self.planets==0 then break end | |
| sdist=32767 | |
| for p in all(self.planets) do | |
| sdist=min(sdist, | |
| scaled_dist(v(x,y),p.secp/33)) | |
| end | |
| planet_nearby=sdist<15 | |
| end | |
| return planet.new(x*33,y*33,((1-v(x,y):angle())-.25)%1) | |
| end | |
| function sector:draw_starfield(shipvel) | |
| local lstart,lend | |
| for star in all(self.starfield) do | |
| lstart=star.position+(shipvel*star.speed*-.5) | |
| lend=star.position+(shipvel*star.speed*.5) | |
| local i=star_color_monochrome+star_color_index+1 | |
| local star_color_count=#star_colors[i] | |
| local color_index=1+((star.color-1)%star_color_count) | |
| star.position:draw_line( | |
| lend, | |
| star_colors[i+1][color_index]) | |
| lstart:draw_line( | |
| star.position, | |
| star_colors[i][color_index]) | |
| end | |
| end | |
| function sector:scroll_starfield(shipvel) | |
| local diff=starfield_count-#self.starfield | |
| for i=1,diff do | |
| add(self.starfield,star.new():reset()) | |
| end | |
| for star in all(self.starfield) do | |
| star.position:add(shipvel*star.speed*-1) | |
| if diff<0 then | |
| del(self.starfield,star) | |
| diff+=1 | |
| elseif star.position.x>134 then | |
| star:reset(-6) | |
| elseif star.position.x<-6 then | |
| star:reset(134) | |
| elseif star.position.y>134 then | |
| star:reset(false,-6) | |
| elseif star.position.y<-6 then | |
| star:reset(false,134) | |
| end | |
| end | |
| end | |
| function is_offscreen(p,m) | |
| local margin=m or 0 | |
| local mincoord=0-margin | |
| local maxcoord=128+margin | |
| local x,y=p.scrp.x,p.scrp.y | |
| local duration_up=p.duration<0 | |
| if p.deltav then | |
| return duration_up | |
| else | |
| return duration_up or x>maxcoord or x<mincoord or y>maxcoord or y<mincoord | |
| end | |
| end | |
| spark={} | |
| spark.__index=spark | |
| function spark.new(p,pv,c,d) | |
| return setmetatable({ | |
| scrp=p, | |
| particle_velocity=pv, | |
| color=c, | |
| duration=d or ri(7,2) | |
| },spark)end | |
| function spark:update(shipvel) | |
| self.scrp:add(self.particle_velocity-shipvel) | |
| self.duration-=1 | |
| end | |
| function spark:draw(shipvel) | |
| pset(self.scrp.x,self.scrp.y,self.color) | |
| self:update(shipvel) | |
| end | |
| explosion={} | |
| explosion.__index=explosion | |
| function explosion.new(position,size,colorcount,shipvel) | |
| local explosion_size_factor=rnd() | |
| return setmetatable({ | |
| scrp=position:clone(), | |
| particle_velocity=shipvel:clone(), | |
| radius=explosion_size_factor*size, | |
| radius_delta=explosion_size_factor*rnd(.5), | |
| len=colorcount-3, | |
| duration=colorcount | |
| },explosion)end | |
| function explosion:draw(shipvel) | |
| local r=ro(self.radius) | |
| for i=r+3,r,-1 do | |
| local c=damage_colors[self.len-self.duration+i] | |
| if c then | |
| self.scrp:draw_circle(i,c,true) | |
| end | |
| end | |
| self:update(shipvel) | |
| self.radius-=self.radius_delta | |
| end | |
| setmetatable(explosion,{__index=spark}) | |
| cannon={} | |
| cannon.__index=cannon | |
| function cannon.new(p,pv,c,ship) | |
| return setmetatable({ | |
| scrp=p, | |
| position2=p:clone(), | |
| particle_velocity=pv+pv:perpendicular():normalize()*(rnd(2)-1), | |
| color=c, | |
| firing_ship=ship, | |
| duration=16 | |
| },cannon)end | |
| function cannon:update(shipvel) | |
| self.position2=self.scrp:clone() | |
| self.scrp:add(self.particle_velocity-shipvel) | |
| self.duration-=1 | |
| end | |
| function cannon:draw(shipvel) | |
| self.position2:draw_line(self.scrp,self.color) | |
| end | |
| thrustexhaust={} | |
| thrustexhaust.__index=thrustexhaust | |
| function thrustexhaust.new(p,pv) | |
| return setmetatable({ | |
| scrp=p, | |
| particle_velocity=pv, | |
| duration=0 | |
| },thrustexhaust)end | |
| function thrustexhaust:draw(shipvel) | |
| local c,pv=ri(11,9),self.particle_velocity | |
| local deflection,flicker=pv:perpendicular()*0.7,pv*(rnd(2)+2) | |
| flicker+=deflection*(rnd()-.5) | |
| local p0,p1a=self.scrp+flicker,self.scrp+pv | |
| for a in all{p1a+deflection,p1a+deflection*-1} do | |
| for b in all{p0,self.scrp} do | |
| a:draw_line(b,c) | |
| end | |
| end | |
| if rnd()>.4 then | |
| add(particles,spark.new(p0,shipvel+(flicker*.25),c)) | |
| end | |
| self.scrp:add(pv-shipvel) | |
| self.duration-=1 | |
| end | |
| function draw_rect(w,h,c) | |
| for x=0,w-1 do | |
| for y=0,h-1 do | |
| sset(x,y,c) | |
| end | |
| end | |
| end | |
| function draw_sprite_circle(xc,yc,radius,filled,c) | |
| local xvalues={} | |
| local fx,fy=0,0 | |
| local x,y=-radius,0 | |
| local err=2-2*radius | |
| while(x<0) do | |
| xvalues[1+x*-1]=y | |
| if not filled then | |
| fx,fy=x,y | |
| end | |
| for i=x,fx do | |
| sset(xc-i,yc+y,c) | |
| sset(xc+i,yc-y,c) | |
| end | |
| for i=fy,y do | |
| sset(xc-i,yc-x,c) | |
| sset(xc+i,yc+x,c) | |
| end | |
| radius=err | |
| if radius<=y then | |
| y+=1 | |
| err+=y*2+1 | |
| end | |
| if radius>x or err>y then | |
| x+=1 | |
| err+=x*2+1 | |
| end | |
| end | |
| xvalues[1]=xvalues[2] | |
| return xvalues | |
| end | |
| perms={} | |
| for i=0,255 do perms[i]=i end | |
| for i=0,255 do | |
| local r=ri(32767)%256 | |
| perms[i],perms[r]=perms[r],perms[i] | |
| end | |
| perms12={} | |
| for i=0,255 do | |
| local x=perms[i]%12 | |
| perms[i+256],perms12[i],perms12[i+256]=perms[i],x,x | |
| end | |
| function getn_3d(ix,iy,iz,x,y,z) | |
| local t=.6-x*x-y*y-z*z | |
| local index=perms12[ix+perms[iy+perms[iz]]] | |
| return max(0,(t*t)*(t*t))*(grads3[index][0]*x+grads3[index][1]*y+grads3[index][2]*z) | |
| end | |
| function simplex3d(x,y,z) | |
| local s=(x+y+z)*0.333333333 | |
| local ix,iy,iz=flr(x+s),flr(y+s),flr(z+s) | |
| local t=(ix+iy+iz)*0.166666667 | |
| local x0,y0,z0=x+t-ix,y+t-iy,z+t-iz | |
| ix,iy,iz=band(ix,255),band(iy,255),band(iz,255) | |
| local n0=getn_3d(ix,iy,iz,x0,y0,z0) | |
| local n3=getn_3d(ix+1,iy+1,iz+1,x0-0.5,y0-0.5,z0-0.5) | |
| local ijk | |
| if x0>=y0 then | |
| if y0>=z0 then | |
| ijk=ijks[1] | |
| elseif x0>=z0 then | |
| ijk=ijks[2] | |
| else | |
| ijk=ijks[3] | |
| end | |
| else | |
| if y0<z0 then | |
| ijk=ijks[4] | |
| elseif x0<z0 then | |
| ijk=ijks[5] | |
| else | |
| ijk=ijks[6] | |
| end | |
| end | |
| local n1=getn_3d(ix+ijk[1],iy+ijk[2],iz+ijk[3],x0+0.166666667-ijk[1],y0+0.166666667-ijk[2],z0+0.166666667-ijk[3]) | |
| local n2=getn_3d(ix+ijk[4],iy+ijk[5],iz+ijk[6],x0+0.333333333-ijk[4],y0+0.333333333-ijk[5],z0+0.333333333-ijk[6]) | |
| return 32*(n0+n1+n2+n3)end | |
| function new_planet(a) | |
| local p=nsplit(a) | |
| local args=p[2] | |
| return{ | |
| class_name=p[1][1], | |
| noise_octaves=args[1], | |
| noise_zoom=args[2], | |
| noise_persistance=args[3], | |
| mmap_color=args[4], | |
| full_shadow=args[5] or 1, | |
| transparent_color=args[6] or 14, | |
| minc=args[7] or 1, | |
| maxc=args[8] or 1, | |
| min_size=args[9] or 16, | |
| color_map=p[3] | |
| }end | |
| planet={} | |
| planet.__index=planet | |
| function planet.new(x,y,phase,r) | |
| local planet_type=planet_types[ri(#planet_types)+1] | |
| local radius=r or ri(65,planet_type.min_size) | |
| return setmetatable({ | |
| scrp=v(), | |
| radius=radius, | |
| secp=v(x,y), | |
| bottom_right_coord=2*radius-1, | |
| phase=phase, | |
| planet_type=planet_type, | |
| noise_factor_vert=ri(planet_type.maxc+1,planet_type.minc), | |
| noisedx=rnd(1024), | |
| noisedy=rnd(1024), | |
| noisedz=rnd(1024), | |
| rendered_circle=false, | |
| rendered_terrain=false, | |
| color=planet_type.mmap_color | |
| },planet)end | |
| function planet:draw(ship_pos) | |
| if stellar_object_is_visible(self,ship_pos) then | |
| self:render_planet() | |
| sspr( | |
| 0,0,self.bottom_right_coord,self.bottom_right_coord, | |
| self.scrp.x-self.radius, | |
| self.scrp.y-self.radius) | |
| end | |
| end | |
| function planet:render_planet(fullmap,renderback) | |
| local s=self | |
| local radius=s.radius-1 | |
| if fullmap then radius=47 end | |
| if not s.rendered_circle then | |
| s.width=s.radius*2 | |
| s.height=s.radius*2 | |
| s.x=0 | |
| s.yfromzero=0 | |
| s.y=radius-s.yfromzero | |
| s.phi=0 | |
| sect:reset_planet_visibility() | |
| pal() | |
| palt(0,false) | |
| palt(s.planet_type.transparent_color,true) | |
| if fullmap then | |
| s.width,s.height=114,96 | |
| draw_rect(s.width,s.height,0) | |
| else | |
| draw_rect(s.width,s.height,s.planet_type.transparent_color) | |
| s.xvalues=draw_sprite_circle(radius,radius,radius,true,0) | |
| draw_sprite_circle(radius,radius,radius,false,s.planet_type.mmap_color) | |
| end | |
| s.rendered_circle=true | |
| end | |
| if (not s.rendered_terrain) and s.rendered_circle then | |
| local theta_start,theta_end=0,.5 | |
| local theta_increment=theta_end/s.width | |
| if fullmap and renderback then | |
| theta_start=.5 | |
| theta_end=1 | |
| end | |
| if s.phi>.25 then | |
| s.rendered_terrain=true | |
| else | |
| local partialshadow=s.planet_type.full_shadow~=1 | |
| local phase_values,phase={},s.phase | |
| local x,doublex,x1,x2,i,c1,c2 | |
| local y=radius-s.y | |
| local xvalueindex=abs(y)+1 | |
| if xvalueindex<=#s.xvalues then | |
| x=flr(sqrt(radius*radius-y*y)) | |
| doublex=2*x | |
| if phase<.5 then | |
| x1=-s.xvalues[xvalueindex] | |
| x2=flr(doublex-2*phase*doublex-x) | |
| else | |
| x1=flr(x-2*phase*doublex+doublex) | |
| x2=s.xvalues[xvalueindex] | |
| end | |
| for i=x1,x2 do | |
| if partialshadow | |
| or (phase<.5 and i>x2-2) | |
| or (phase>=.5 and i<x1+2) then | |
| phase_values[radius+i] = 1 | |
| else | |
| phase_values[radius+i] = 0 | |
| end | |
| end | |
| end | |
| for theta=theta_start,theta_end-theta_increment,theta_increment do | |
| local phasevalue=phase_values[s.x] | |
| local c=0 | |
| if (fullmap or phasevalue~=0) and sget(s.x,s.y)~=s.planet_type.transparent_color then | |
| local freq=s.planet_type.noise_zoom | |
| local max_amp=0 | |
| local amp=1 | |
| local value=0 | |
| for n=1,s.planet_type.noise_octaves do | |
| value=value+simplex3d( | |
| s.noisedx+freq*cos(s.phi)*cos(theta), | |
| s.noisedy+freq*cos(s.phi)*sin(theta), | |
| s.noisedz+freq*sin(s.phi)*s.noise_factor_vert) | |
| max_amp+=amp | |
| amp*=s.planet_type.noise_persistance | |
| freq*=2 | |
| end | |
| value/=max_amp | |
| if value>1 then value=1 end | |
| if value<-1 then value=-1 end | |
| value+=1 | |
| value*=(#s.planet_type.color_map-1)/2 | |
| value=ro(value) | |
| c=s.planet_type.color_map[value+1] | |
| if not fullmap and phasevalue==1 then | |
| c=dark_planet_colors[c+1] | |
| end | |
| end | |
| sset(s.x,s.y,c) | |
| s.x+=1 | |
| end | |
| s.x=0 | |
| if s.phi>=0 then | |
| s.yfromzero+=1 | |
| s.y=radius+s.yfromzero | |
| s.phi+=.5/(s.height-1) | |
| else | |
| s.y=radius-s.yfromzero | |
| end | |
| s.phi*=-1 | |
| end | |
| end | |
| return s.rendered_terrain | |
| end | |
| function add_npc(pos,pirate) | |
| local t=ri(#ship_types)+1 | |
| if pirate or rnd()<.2 then | |
| t=ri(3,1) | |
| pirate=true | |
| pirates+=1 | |
| end | |
| local npc=ship.new(pirate):buildship(nil,t) | |
| npc:set_position_near_object(pos) | |
| npc:rotate(ri(360)) | |
| npc.npc=true | |
| add(npcships,npc) | |
| npc.index=#npcships | |
| end | |
| function load_sector() | |
| warpsize=pilot.sprite_rows | |
| sect=sector.new() | |
| note_add("arriving in system ngc "..sect.seed) | |
| add(sect.planets,sun.new()) | |
| for i=0,ri(12,1) do | |
| add(sect.planets,sect:new_planet_along_elipse()) | |
| end | |
| pilot:set_position_near_object(sect.planets[2]) | |
| pilot:clear_target() | |
| pirates=0 | |
| npcships={} | |
| shipyard={} | |
| projectiles={} | |
| for p in all(sect.planets) do | |
| for i=1,ri(4) do | |
| add_npc(p) | |
| end | |
| end | |
| if pirates==0 then | |
| add_npc(sect.planets[2],true) | |
| end | |
| return true | |
| end | |
| function _init() | |
| screen_center=v(63,63) | |
| grads3=nsplit"n1,1,0,|n-1,1,0,|n1,-1,0,|n-1,-1,0,|n1,0,1,|n-1,0,1,|n1,0,-1,|n-1,0,-1,|n0,1,1,|n0,-1,1,|n0,1,-1,|n0,-1,-1,|" | |
| mmap_sizes=split"n24,48,128,0," | |
| music_tracks=split"n13,0,-1," | |
| mousemodes=split"agamepad,two button mouse,stylus (pocketchip)," | |
| framecount,secondcount,mousemode,mmap_size_index,music_track=0,0,0,0,0 | |
| split_start=1 | |
| btnv=split"x2031" | |
| ijks=nsplit"n1,0,0,1,1,0,|n1,0,0,1,0,1,|n0,0,1,1,0,1,|n0,0,1,0,1,1,|n0,1,0,0,1,1,|n0,1,0,1,1,0,|" | |
| outlinedindex=split"n2,2,1,2,0,2,2,0,2,1,1,1,-1,-1,1,-1,-1,1,-1,0,1,0,0,-1,0,1," | |
| star_color_index=0 | |
| star_color_monochrome=0 | |
| star_colors=nsplit"xaecd76|x98d165|x421051|x767676|x656565|x515151|" | |
| darkshipcolors=split"x01221562493d189" | |
| dark_planet_colors=split"x0011055545531121" | |
| health_colormap=split"x8899aaabbb" | |
| damage_colors=split"x7a98507a98507a9850" | |
| sun_colors=split"x6ea9d789ac" | |
| ship_names=split"afighter,cruiser,freighter,superfreighter,station," | |
| ship_types=nsplit"n1.5,.25,.7,.75,.8,-2,1,14,18,|n3.5,.5,.583333,0,.8125,-1,1,18,24,|n3,2,.2125,0,.8125,-3,1,16,22,|n6,0,.7,-.25,.85,.25,1,32,45,|n4,1,.1667,-1,.3334,0,.6668,1,.8335,-1,1,30,40,|" | |
| planet_types={ | |
| new_planet("atundra,|n5,.5,.6,6,|x76545676543|"), | |
| new_planet("adesert,|n5,.35,.3,9,|x449944994499b1949949949949949|"), | |
| new_planet("abarren,|n5,.55,.35,5,|x565056765056|"), | |
| new_planet("alava,|n5,.55,.65,4,|x040504049840405040|"), | |
| new_planet("agas giant,|n1,.4,.75,2,1,14,4,20,50,|x76d121c|"), | |
| new_planet("agas giant,|n1,.4,.75,8,1,12,4,20,50,|x7fe21288|"), | |
| new_planet("agas giant,|n1,.7,.75,10,1,14,4,20,50,|xfa949a|"), | |
| new_planet("aterran,|n5,.3,.65,11,0,|x1111111dcfbb3334567|"), | |
| new_planet("aisland,|n5,.55,.65,12,0,|x11111111dcfb3|"), | |
| new_planet("arainbow giant,|n1,.7,.75,15,1,4,4,20,50,|x1dcba9e82|"), | |
| } | |
| poke(0x5f2d,1) | |
| note_text=nil | |
| note_display_time=4 | |
| paused=false | |
| landed=false | |
| particles={} | |
| pilot=ship.new() | |
| pilot:buildship(nil,1) | |
| load_sector() | |
| setup_mmap() | |
| music(13) | |
| local titlestarv=v(0,-3) | |
| while(not btnp(4)) do | |
| cls() | |
| sect:scroll_starfield(titlestarv) | |
| sect:draw_starfield(titlestarv) | |
| circfill(64,135,90,2) | |
| circfill(64,172,122,0) | |
| map(0,0,6,-15) | |
| map(16,0,0,70) | |
| flip() | |
| end | |
| end | |
| function setup_mmap() | |
| mmap_size=mmap_sizes[mmap_size_index] | |
| if mmap_size>0 then | |
| mmap_size_halved=mmap_size/2 | |
| mmap_offset=v(126-mmap_size_halved,mmap_size_halved+1) | |
| end | |
| end | |
| function draw_mmap_ship(obj) | |
| if obj.deltav then | |
| local p=(obj.secp/mmap_denominator):add(mmap_offset):ro() | |
| local x,y=p.x,p.y | |
| local c=obj:targeted_color() | |
| if obj.npc then | |
| p:draw_point(c) | |
| if obj.targeted then | |
| p:draw_circle(2,c) | |
| end | |
| else | |
| if obj.damage then | |
| p:draw_circle(1,9) | |
| else | |
| rect(x-1,y-1,x+1,y+1,7) | |
| end | |
| end | |
| end | |
| end | |
| function draw_mmap() | |
| local text_height=mmap_size | |
| if mmap_size>0 then | |
| if mmap_size<100 then | |
| text_height+=4 | |
| rectfill(125-mmap_size,0,127,mmap_size+2,1) | |
| else | |
| text_height=0 | |
| end | |
| local x,y=abs(pilot.secp.x),abs(pilot.secp.y) | |
| if y>x then x=y end | |
| mmap_denominator=min(6,ceil(x/5000))*5000/mmap_size_halved | |
| for obj in all(sect.planets) do | |
| local p=obj.secp+screen_center | |
| if obj.planet_type then p:add(v(-obj.radius,-obj.radius)) end | |
| p=p/mmap_denominator+mmap_offset | |
| if mmap_size>100 then | |
| p:draw_circle(ceil(obj.radius/32)+1,obj.color) | |
| else | |
| p:draw_point(obj.color) | |
| end | |
| end | |
| if framecount%3~=0 then | |
| foreach(projectiles, draw_mmap_ship) | |
| foreach(npcships, draw_mmap_ship) | |
| draw_mmap_ship(pilot) | |
| end | |
| end | |
| text(""..#npcships-pirates,112,text_height) | |
| text(""..pirates,112,text_height+7,8) | |
| end | |
| function text(text,x,y,textcolor,outline) | |
| local c=textcolor or 6 | |
| local s=darkshipcolors[c] | |
| if outline then | |
| for i=1,#outlinedindex,2 do | |
| if i>10 then s=c end | |
| print(text, | |
| x+outlinedindex[i], | |
| y+outlinedindex[i+1],s) | |
| end | |
| c=0 | |
| else | |
| print(text,x+1,y+1,s) | |
| end | |
| print(text,x,y,c) | |
| end | |
| function note_add(text) | |
| note_text=text | |
| note_display_time=4 | |
| end | |
| function note_draw() | |
| if note_display_time>0 then | |
| text(note_text,0,121) | |
| if framecount>=29 then | |
| note_display_time-=1 | |
| end | |
| end | |
| end | |
| function myship_menu() | |
| showyard=false | |
| shipinfo=true | |
| menu("x6b66|aback,repair,|", | |
| {landed_menu, | |
| function() | |
| pilot:buildship(pilot.seed_value,pilot.stypei) | |
| note_add("hull damage repaired") | |
| end | |
| }) | |
| end | |
| function addyardships() | |
| shipyard={} | |
| for i=1,2 do | |
| add(shipyard,ship.new():buildship(nil,ri(#ship_types,1))) | |
| end | |
| end | |
| function buyship(i) | |
| pilot:buildship(shipyard[i].seed_value,shipyard[i].stypei) | |
| shipyard[i]=nil | |
| note_add("purchased!") | |
| myship_menu() | |
| end | |
| function call_option(i) | |
| if cur_option_callbacks[i] then | |
| local return_value=cur_option_callbacks[i]() | |
| paused=false | |
| if return_value==nil then | |
| paused=true | |
| elseif return_value then | |
| if type(return_value)=="string" then | |
| note_add(return_value) | |
| end | |
| paused=true | |
| end | |
| end | |
| if paused then | |
| sfx(53,2) | |
| else | |
| sfx(52,2) | |
| end | |
| end | |
| function menu(coptions,callbacks) | |
| if coptions then | |
| local c=nsplit(coptions) | |
| cur_menu_colors=c[1] | |
| cur_options=c[2] | |
| cur_option_callbacks=callbacks | |
| end | |
| if shipinfo then | |
| pilot:data(0) | |
| elseif showyard then | |
| for i=0,1 do | |
| local s=shipyard[i+1] | |
| if s then s:data(i*36) end | |
| end | |
| end | |
| for a=.25,1,.25 do | |
| local i=a*4 | |
| local text_color=cur_menu_colors[i] | |
| if i==pressed then text_color=darkshipcolors[text_color] end | |
| if cur_options[i] then | |
| local p=rotatedv(a,15)+v(64,90) | |
| if a==.5 then | |
| p.x-=4*#cur_options[i] | |
| elseif a~=1 then | |
| p.x-=ro(4*(#cur_options[i]/2)) | |
| end | |
| text( | |
| cur_options[i], | |
| p.x,p.y,text_color,true) | |
| end | |
| end | |
| text(" \n \n ",52,84,6,true) | |
| end | |
| function main_menu() | |
| menu("xc8b7|aautopilot,fire missile,options,system,|", | |
| { | |
| function() | |
| menu("xcc6c|afull stop,near planet,back,follow,|", | |
| { | |
| function() | |
| if pilot.velocity>0 then | |
| pilot:reset_orders(pilot.full_stop) | |
| end | |
| return false | |
| end, | |
| function() | |
| local planet,dist=nearest_planet() | |
| pilot:approach_object(planet) | |
| return false | |
| end, | |
| main_menu, | |
| function() | |
| if pilot.target then | |
| pilot:reset_orders(pilot.seek) | |
| pilot.seektime=0 | |
| end | |
| return false | |
| end, | |
| }) | |
| end, | |
| function() | |
| pilot:fire_missile() | |
| return false | |
| end, | |
| function() | |
| menu("x6fba|aback,starfield,minimap size,mouse+,|", | |
| { | |
| main_menu, | |
| function() | |
| menu("x7f6a|amore stars,~dimming,less stars,~colors,|", | |
| { | |
| function() | |
| starfield_count+=5 | |
| return "star count: "..starfield_count | |
| end, | |
| function() | |
| star_color_index+=1 | |
| star_color_index%=2 | |
| return true | |
| end, | |
| function() | |
| starfield_count=max(0,starfield_count-5) | |
| return "star count: "..starfield_count | |
| end, | |
| function() | |
| star_color_monochrome+=1 | |
| star_color_monochrome%=2 | |
| star_color_monochrome*=3 | |
| return true | |
| end | |
| }) | |
| end, | |
| function() | |
| mmap_size_index+=1 | |
| mmap_size_index%=#mmap_sizes | |
| setup_mmap() | |
| return true | |
| end, | |
| function() | |
| menu("xc698|acontrol mode,back,music,|", | |
| { | |
| function() | |
| mousemode+=1 | |
| mousemode%=3 | |
| note_add(mousemodes[mousemode]) | |
| end, | |
| main_menu, | |
| function() | |
| music_track+=1 | |
| music_track%=3 | |
| music(music_tracks[music_track]) | |
| end | |
| }) | |
| end | |
| }) | |
| end, | |
| function() | |
| menu("x86cb|atarget next pirate,back,land,target next,|", | |
| { | |
| next_hostile_target, | |
| main_menu, | |
| land_at_nearest_planet, | |
| next_ship_target | |
| }) | |
| end | |
| }) | |
| end | |
| function landed_menu() | |
| shipinfo=false | |
| showyard=false | |
| menu("xc67a|atakeoff,nil,my ship,shipyard,|", | |
| { | |
| takeoff, | |
| nil, | |
| myship_menu, | |
| function() | |
| showyard=true | |
| if #shipyard==0 then addyardships() end | |
| menu("x767a|abuy top,back,buy bottom,more,|", | |
| { | |
| function() | |
| buyship(1) | |
| end, | |
| landed_menu, | |
| function() | |
| buyship(2) | |
| end, | |
| addyardships | |
| }) | |
| end | |
| }) | |
| end | |
| pos=0 | |
| mtbl={} | |
| for i=1,96 do | |
| mtbl[i]={flr(-sqrt(-sin(i/193))*48+64)} | |
| mtbl[i][2]=(64-mtbl[i][1])*2 | |
| end | |
| for i=0,95 do | |
| poke(64*i+56,peek(64*i+0x1800)) | |
| end | |
| cs={} | |
| for i=0,15 do | |
| cs[i]={(cos(0.5+0.5/16*i)+1)/2} | |
| cs[i][2]=(cos(0.5+0.5/16*(i+1))+1)/2-cs[i][1] | |
| end | |
| function shift_sprite_sheet() | |
| for i=0,95 do | |
| poke(64*i+0x1838,peek(64*i)) | |
| memcpy(64*i,64*i+1,56) | |
| memcpy(64*i+0x1800,64*i+0x1801,56) | |
| poke(64*i+56,peek(64*i+0x1800)) | |
| end | |
| end | |
| function landed_update() | |
| local p=landed_planet | |
| if not landed_front_rendered then | |
| landed_front_rendered=p:render_planet(true) | |
| if landed_front_rendered then | |
| p.rendered_circle=false | |
| p.rendered_terrain=false | |
| for j=1,56 do | |
| shift_sprite_sheet() | |
| end | |
| end | |
| else | |
| if not landed_back_rendered then | |
| landed_back_rendered=p:render_planet(true,true) | |
| else | |
| pos=1-pos | |
| if pos==0 then | |
| shift_sprite_sheet() | |
| end | |
| end | |
| end | |
| end | |
| function render_landed_screen() | |
| cls() | |
| if landed_front_rendered and landed_back_rendered then | |
| for i=1,96 do | |
| local a,b=mtbl[i][1],mtbl[i][2] | |
| pal() | |
| local lw=ceil(b*cs[15][2]) | |
| for j=15,0,-1 do | |
| if j==4 then | |
| for ci=0,#dark_planet_colors-1 do | |
| pal(ci,dark_planet_colors[ci+1]) | |
| end | |
| end | |
| if j<15 then lw=flr(a+b*cs[j+1][1])-flr(a+b*cs[j][1]) end | |
| sspr(pos+j*7,i-1,7,1,flr(a+b*cs[j][1]),i+16,lw,1) | |
| end | |
| end | |
| pal() | |
| text(landed_planet.planet_type.class_name,1,1) | |
| else | |
| sspr(0,0,127,127,0,0) | |
| text("scanning for a\nsuitable landing site...",1,1,6) | |
| end | |
| end | |
| function _update() | |
| framecount+=1 | |
| framecount%=30 | |
| if framecount==0 then | |
| secondcount+=1 | |
| end | |
| mbtn=stat(34) | |
| local m=v(stat(32),stat(33)) | |
| mv=m-screen_center | |
| if not landed and btnp(4,0) then | |
| paused=not paused | |
| if paused then | |
| sfx(51,2) | |
| main_menu() | |
| else | |
| sfx(52,2) | |
| end | |
| pressed=nil | |
| end | |
| if landed then | |
| landed_update() | |
| end | |
| if paused or landed then | |
| mi=m-v(64,90) | |
| mi.x*=.4 | |
| mi=mi:angle()-.375 | |
| mi=flr(4*mi)+1 | |
| mi%=4 | |
| for i=1,4 do | |
| if btn(btnv[i]) or (mousemode>0 and mbtn==1 and i==mi+1 and secondcount>msel) then | |
| pressed=i | |
| end | |
| if pressed then | |
| if pressed==i and not btn(btnv[i]) then | |
| pressed=nil | |
| msel=secondcount | |
| call_option(i) | |
| end | |
| end | |
| end | |
| else | |
| local no_orders=not pilot.orders[1] | |
| if no_orders and (mousemode==1 or (mousemode==2 and mbtn>0)) then | |
| pilot:rotate_towards_heading(mv:angle()) | |
| end | |
| if (mousemode==1 and mbtn>1) | |
| or (mousemode==2 and mbtn>0 and mv:length()>38) | |
| or btn(2,0) then | |
| pilot:apply_thrust() | |
| else | |
| if pilot.accelerating and no_orders then | |
| pilot:cut_thrust() | |
| end | |
| end | |
| if btn(0,0) then pilot:reset_orders()pilot:turn_left() end | |
| if btn(1,0) then pilot:reset_orders()pilot:turn_right() end | |
| if btn(3,0) then pilot:reset_orders()pilot:reverse_direction() end | |
| if btn(5,0) | |
| or (mousemode==1 and mbtn==1 or mbtn==3) then pilot:fire_weapon() end | |
| foreach(projectiles, function(p) | |
| p:update(pilot.velocity_vector) | |
| end) | |
| for s in all(npcships) do | |
| if s.stypei==#ship_types then | |
| s:rotate(.1) | |
| else | |
| if s.last_hit_time and s.last_hit_time+30>secondcount then | |
| s:reset_orders() | |
| s:flee() | |
| if s.hostile then | |
| s.target=s.last_hit_attacking_ship | |
| s.target_index=s.target.index | |
| end | |
| else | |
| if #s.orders==0 then | |
| if s.hostile then | |
| s.seektime=0 | |
| if not s.target then | |
| next_ship_target(s,true) | |
| end | |
| add(s.orders,s.seek) | |
| else | |
| s:approach_object() | |
| s.wait_duration=ri(46,10) | |
| s.wait_time=secondcount | |
| add(s.orders,s.wait) | |
| end | |
| end | |
| s:follow_cur_order() | |
| end | |
| end | |
| s:update_location() | |
| if s.hp<1 then | |
| if s.hostile then | |
| pirates-=1 | |
| if pirates<1 then | |
| note_add("sector cleared!") | |
| note_display_time=8 | |
| end | |
| end | |
| del(npcships,s) | |
| pilot:clear_target() | |
| end | |
| end | |
| pilot:follow_cur_order() | |
| pilot:update_location() | |
| if pirates<1 and note_display_time<=0 then | |
| note_add("fly to system edge for ftl jump") | |
| note_display_time=8 | |
| end | |
| if pilot.secp.x>32000 or pilot.secp.y>32000 then | |
| load_sector() | |
| end | |
| sect:scroll_starfield(pilot.velocity_vector) | |
| end | |
| end | |
| function render_game_screen() | |
| cls() | |
| sect:draw_starfield(pilot.velocity_vector) | |
| for p in all(sect.planets) do | |
| p:draw(pilot.secp) | |
| end | |
| for s in all(npcships) do | |
| if s:is_visible(pilot.secp) then | |
| s:draw_sprite_rotated() | |
| end | |
| end | |
| if pilot.target then | |
| last_offscreen_pos=nil | |
| local player_screen_position=pilot.scrp | |
| local targeted_ship=pilot.target | |
| if targeted_ship then | |
| if not targeted_ship:is_visible(pilot.secp) then | |
| local distance=""..flr((targeted_ship.scrp-player_screen_position):scaled_length()) | |
| local color,shadow=targeted_ship:targeted_color() | |
| local hr=flr(targeted_ship.sprite_rows*.5) | |
| local d=rotatedv((targeted_ship.scrp-player_screen_position):angle()) | |
| last_offscreen_pos=d*(60-hr)+screen_center | |
| local p2=last_offscreen_pos:clone():add(v(-4*(#distance/2))) | |
| targeted_ship:draw_sprite_rotated(last_offscreen_pos) | |
| if p2.y>63 then | |
| p2:add(v(1,-12-hr)) | |
| else | |
| p2:add(v(1,7+hr)) | |
| end | |
| text(distance,ro(p2.x),ro(p2.y),color) | |
| end | |
| text(targeted_ship.name..targeted_ship:hp_string(),0,114,targeted_ship:hp_color()) | |
| end | |
| end | |
| pilot:draw() | |
| if pilot.hp<1 then | |
| paused=true | |
| pilot.dead=true | |
| menu("x78bb|acontinue?,nil,yes,|", | |
| { | |
| nil, | |
| nil, | |
| function() | |
| pilot.dead=false | |
| pilot:buildship(pilot.seed_value,pilot.stypei) | |
| return false | |
| end | |
| }) | |
| end | |
| for p in all(particles) do | |
| if is_offscreen(p,32) then | |
| del(particles,p) | |
| else | |
| if paused then | |
| p:draw(v()) | |
| else | |
| p:draw(pilot.velocity_vector) | |
| end | |
| end | |
| end | |
| for p in all(projectiles) do | |
| if is_offscreen(p,63) then | |
| del(projectiles,p) | |
| else | |
| if last_offscreen_pos and p.secp and pilot.target and | |
| (pilot.target.secp-p.secp):scaled_length()<=pilot.target.sprite_rows then | |
| p:draw(nil,(p.secp-pilot.target.secp)+last_offscreen_pos) | |
| else | |
| p:draw(pilot.velocity_vector) | |
| end | |
| end | |
| end | |
| draw_mmap() | |
| if warpsize>0 then | |
| camera(ri(2)-1, ri(2)-1) | |
| circfill(63,63,warpsize,7) | |
| warpsize-=1 | |
| if warpsize==0 then camera() end | |
| end | |
| end | |
| function _draw() | |
| if landed then | |
| render_landed_screen() | |
| else | |
| render_game_screen() | |
| end | |
| if paused or landed then | |
| menu() | |
| end | |
| note_draw() | |
| if mousemode>0 then | |
| (mv+screen_center):draw_circle(1,8) | |
| end | |
| end | |
| __gfx__ | |
| 00000000000000000000000000000000000000007700070077700700777077700007700777070707770770007707770000000000000000000000000000000000 | |
| 00000000000000000000000000000000707070707570757057507570575075500007570755070707550757075507550000000000000000000000000000060000 | |
| 00000000000000000000000000000000000000007070707007007070070077000007070770070707700707057007700070007077707000700000000000060000 | |
| 00000000000000000000000000000000000000007750707007007770070075000007750750070707500775005707500077077075507700700000000000006000 | |
| 00000000000000000000000000000000000000007570575007007570070077700007570777057507770757077507770075757077007570700000000000000600 | |
| 00000000707070707070707070700000000000005050050005005050050055500005050555005005550505055005550070507075007057700000000070707060 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070007077707005700000000000000060 | |
| 00000000000000007000000000700000000000000000000000000000000000000000000000000000000000000000000050005055505000500000000000000060 | |
| 00000000000000000000000000000000000000000000055500000000000000000000000000000000000000000000000000000000000000000000700000000000 | |
| 00000000700000000000000000000000000000000006661666700000000000000000000000000000000000000000000000000000007000000000007000000000 | |
| 00000000000000000000000000000000000000000066661666600000000007770707077007070077077700007770707700777000000000000000000070700000 | |
| 00666666666666666666666666666660000000000666661666760000000005750707075707070755057500007550707570755000007000000000000070700000 | |
| 06666666c66666666666666666ddd666000000000666661666660000000000700777070707070570007000007700707070770000000000000000000070700000 | |
| 6666666ccc666666666666666ddddd66607070706666661666666000707070700757077507070057007070707500707750750070007000000000000070700000 | |
| 666666ccccc6666666666666dd7d7dd6600000006666661666666000000000700707075705770775007000007000707570777000000000000000000057700000 | |
| 66666611c116666666666666ddd7ddd6600000006661116111666000000000500505050500550550005000005000505050555000007000000000000005500000 | |
| 6666c6661666c66666666666dd7d7dd6600000006116666666116000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 666cc6666666cc66666ddd661ddddd16600000001666666666661000000000000000000700007700000000000000000000000000000000000000000000000000 | |
| 66cccc66666cccc666ddddd661ddd166600000006666666666666000000000000000007700076670000000000000000000000000000000000000000000000000 | |
| 661cc1666661cc166dd777dd66111666600000006666666666666000000000000000006700060070000000000000000000000000000000000000000000000000 | |
| 6661c6666666c1666dd7d7dd66666666600000006666666666666000070707070070700700000760000000000000000000000000000000000000000000000000 | |
| 66661666c66616666dd777dd67676767670707006666666666666000000000000070700700007600000000000000000000000000000000000000000000000000 | |
| 666666ccccc6667661ddddd166666666600000006666666666666000000000000067600707077770000000000000000000000000000000000000000000000000 | |
| 6666661ccc166666661ddd1666666666600000006666666666666000000000000006000606066660000000000000000000000000000000000000000000000000 | |
| 66666661c16666676661116666666666600000006666666666666000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| d6666666166666666666666666666666d0000000d66666766666d00000aaa0a000a0a000aa00a00aaa0aaa0a0000000000000000000000000000000000000000 | |
| 1d66666666666666766666666666666d100000001d666666666d100000a990a000a0a00a990a9a0a990a990a0000000000000000000000000000000000000000 | |
| 01dddddddddddddddd7dddddddddddd10000000001dddd7dddd1000000a000a000a0a009a00a0a0a000a000a0000000000000000000000000000000000000000 | |
| 0011111171111111111171111111111000000000001111111110000000aa00a0009a90009a0aaa0aa00aa00a0000000000000000000000000000000000000000 | |
| 0000000000000000000000700000000000000000000000700000000000a900a0000a00000a0a9a0a900a90090000000000000000000000000000000000000000 | |
| 0000000070000000000000007000000000000000000000000000000000a000aaa00a000aa90a0a0a000aaa0a0000000000000000000000000000000000000000 | |
| 00000000000000000000000000700000000000000000007000000000009000999009000990090909000999090000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000008880888099900000aaa0aaa00bbbbb00333330000ddddd00ccc0ccc0011111002220000000000000000000000000000000000000 | |
| 0000000000000000000000008880888099900000aaa0aaa0bbbbbbb033333300ddddddd0ccc0ccc0111111102220000000000000000000000000000000000000 | |
| 0000000000000000000000008880888077700000aaa0aaa0bbbbbbb033333330ddddddd0ccc0ccc0111111107770000000000000000000000000000000000000 | |
| 0000000000000000000000008880888099999990aaa0aaa0bbb0bbb033303330ddd0ddd0ccc0ccc0111011102222222000000000000000000000000000000000 | |
| 0000000000000000000000008880888099999990aaa0aaa0bbb0bbb033303330ddd0ddd0ccc0ccc0111011102222222000000000000000000000000000000000 | |
| 0000000000000000000000008880888099999990aaa0aaa0bbb0bbb033303330ddd0ddd0ccc0ccc0111011102222222000000000000000000000000000000000 | |
| 0000000000000000000000008880888099900000aaa0aaa0bbb0bbb033303330ddd0ddd0ccc0ccc0111011102220000000000000000000000000000000000000 | |
| 0000000000000000000000008880888099900000aaa0aaa0bbb0bbb033303330ddd0ddd0ccc0ccc0111011102220000000000000000000000000000000000000 | |
| 0000000000000000000000008880888099999990aaa0aaa0bbb0bbb033303330ddd0ddd0ccc0ccc0111000002222222000000000000000000000000000000000 | |
| 0000000000000000000000008880888099999990aaa0a000bbb0bbb033303330ddd0ddd0ccc0ccc0111000002222222000000000000000000000000000000000 | |
| 0000000000000000000000007770777099999990aaa00000bbb0bbb0333033307770777077707770777000002222222000000000000000000000000000000000 | |
| 0000000000000000000000008888888099900000aaa00aaabbb0bbb033303330ddddddd0ccc0ccc0111111002220000000000000000000000000000000000000 | |
| 0000000000000000000000008888888099900000aaaa9a9abbb0bbb033303330ddddddd0ccc0ccc0011111102220000000000000000000000000000000000000 | |
| 0000000000000000000000008888888099900000a9a9a900bbb0bbb033303330ddddddd0ccc0ccc0000011102220000000000000000000000000000000000000 | |
| 00000000000000000000000088808880999000009a9a0000bbb0bbb033303330ddd0ddd0ccc0ccc0000011102220000000000000000000000000000000000000 | |
| 0000000000000000000000008880888099900000a9000000bbb0bbb033303330ddd0ddd0ccc0ccc0111011102220000000000000000000000000000000000000 | |
| 0000000000000000000000008880888099900000aaa0aaa0bbbb3b3033303330ddd0ddd0ccc0ccc0111011102220000000000000000000000000000000000000 | |
| 0000000000000000000000008880888099900000aaa0aaa0b3b3b30033303330ddd0ddd0ccc0ccc0111011102220000000000000000000000000000000000000 | |
| 0000000000000000000000008880888099900000777077703b3b000077707770ddd0ddd0ccc0ccc0111011102220000000000000000000000000000000000000 | |
| 0000000000000000000000008880888099900000aaa0aaa00000000033333330ddd0ddd0ccc0ccc0111011102220000000000000000000000000000000000000 | |
| 0000000000000000000000008880888099900000aaa0aaa00000000033333300ddd0ddd0ccc0ccc0111011102220000000000000000000000000000000000000 | |
| 0000000000000000000000008880828099900000aaa0aaa00000000033333000ddd0ddd0dcdcccc0111011102220000000000000000000000000000000000000 | |
| 0000000000000000000000008820282099900000aaa0aaa00000000033300000ddd0ddd00dcdcdc0111011102220000000000000000000000000000000000000 | |
| 0000000000000000000000008280800099900000aaa0aaa00000000033300000ddd0ddd0000cdc00111011102220000000000000000000000000000000000000 | |
| 000000000000000000000000000000009990009000000000bbb0bbb033300000d1d0ddd000000000111011102220000000000000000000000000000000000000 | |
| 000000000000000000000000000000009990949400000000bbb0bbb0333000001d10ddd000000000515111102220000000000000000000000000000000000000 | |
| 000000000000000000000000000000009999494000000000777077703330000000d0d1d000000000051515102220000000000000000000000000000000000000 | |
| 000000000000000000000000000000009494900000000000bbb0bbb03330000000001d1000000000000151002220000000000000000000000000000000000000 | |
| 000000000000000000000000000000004940000000000000bbb0bbb033300000000000d000000000000000005220000000000000000000000000000000000000 | |
| 000000000000000000000000000000009000000000000000bbb0bbb0335000000000000000000000000000002522222200000000000000000000000000000000 | |
| 000000000000000000000000000000000000000000000000bbb0bbb0353000000000000000000000000000000252525200000000000000000000000000000000 | |
| 000000000000000000000000000000000000000000000000bbb0bbb0530000000000000000000000000000000005252500000000000000000000000000000000 | |
| __label__ | |
| 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888 | |
| 88888888888888888888888888888888888888888888888888888888888888888888888888888888888228228888228822888222822888888822888888ff8888 | |
| 88888888888888888888888888888888888888888888888888888888888888888888888888888888882288822888222222888222822888882282888888fff888 | |
| 88888888888888888888888888888888888888888888888888888888888888888888888888888888882288822888282282888222888888228882888888f88888 | |
| 888888888888888888888888888888888888888888888888888888888888888888888888888888888822888228882222228888882228882288828888fff88888 | |
| 88888888888888888888888888888888888888888888888888888888888888888888888888888888882288822888822228888228222888882282888ffff88888 | |
| 88888888888888888888888888888888888888888888888888888888888888888888888888888888888228228888828828888228222888888822888fff888888 | |
| 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888 | |
| 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 | |
| 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 | |
| 555555555555555555555555555555555555555558595a505555b595a505555c595a5055558595a505555d5e5f50555555555555555555555555555555555555 | |
| 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 | |
| 55555555555555555555555555555555555555556666666665566666666655666666666556666666665577777777755555555555555555555555555555555555 | |
| 555566656665666566656665666566555555e55565556555655655565556556555656565565556555655755575777555e5555555551555555555555555555555 | |
| 55556565656556555655655565656565555ee55565656665655656566656556565656565565656566655757575777555ee555555551155555155155511115555 | |
| 5555666566655655565566556655656555eee55565656555655656566556556565655565565656555655757575557555eee55551111115551155155511115555 | |
| 55556555656556555655655565656565555ee55565656566655656566656556565666565565656665655757575757555ee555551001105511111155511115555 | |
| 555565556565565556556665656565655555e55565556555655655565556556555666565565556555655755575557555e5555551551055501100055511115555 | |
| 55555555555555555555555555555555555555556666666665566666666655666666666556666666665577777777755555555550550555550155555500005555 | |
| 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555055555555555555 | |
| 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 | |
| 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 | |
| 55555555555500000000055555555555555555555550000000005555555555555555555555000000000555555555555555555555555555555555555555555555 | |
| 55555666665506660666055555555555555566666550666060005555555555555556666655066606660555555555555555666665555555555555555555555555 | |
| 55555655565506060600055555555555555565556550606060005555555555555556555655060600060555555555555555655565555555555555555555555555 | |
| 55555657565506060666055555555555555565756550606066605555555555555556575655060600060555555555555555655565555555555555555555555555 | |
| 55555655565506060006055555555555555565556550606060605555555555555556555655060600060555555555555555655565555555555555555555555555 | |
| 55555666665506660666055555555555555566666550666066605555555555555556666655066600060555555555555555666665555555555555555555555555 | |
| 55555555555500000000055555555555555555555550000000005555555555555555555555000000000555555555555555555555555555555555555555555555 | |
| 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005500000000000000000000000000000555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55507770000066600eee00c0c00ddd005507770707066600eee00c0c00ddd005507770707066000eee00c0c00ddd005505555555555555555555555555550555 | |
| 55507070000000600e0000c0c00d00005507000777000600e0000c0c00d00005507000777006000e0000c0c00d00005505555555555555555555555555550555 | |
| 55507700000066600eee00ccc00ddd005507700707066600eee00ccc00ddd005507700707006000eee00ccc00ddd005505555555555555555555555555550555 | |
| 5550707000006000000e0000c0000d00550700077706000000e0000c0000d00550700077700600000e0000c0000d005505555555555555555555555555550555 | |
| 55507770000066600eee0000c00ddd005507000707066600eee0000c00ddd005507000707066600eee0000c00ddd005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55507770000066000eee00c0c00ddd005500770707066600eee00c0c00ddd005507770707066600eee00c0c00ddd005505555555555555555555555555550555 | |
| 55507070000006000e0000c0c00d00005507000777000600e0000c0c00d00005507000777000600e0000c0c00d00005505555555555555555555555555550555 | |
| 55507700000006000eee00ccc00ddd005507000707006600eee00ccc00ddd005507700707006600eee00ccc00ddd005505555555555555555555555555550555 | |
| 5550707000000600000e0000c0000d00550700077700060000e0000c0000d00550700077700060000e0000c0000d005505555555555555555555555555550555 | |
| 55507770000066600eee0000c00ddd005500770707066600eee0000c00ddd005507000707066600eee0000c00ddd005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55507770000066600eee00c0c00ddd005507770000066600eee00c0c00ddd005507770000066000eee00c0c00ddd005505555555555555555555555555550555 | |
| 55507070000000600e0000c0c00d00005507000000000600e0000c0c00d00005507000000006000e0000c0c00d00005505555555555555555555555555550555 | |
| 55507700000066600eee00ccc00ddd005507700000066600eee00ccc00ddd005507700000006000eee00ccc00ddd005505555555555555555555555555550555 | |
| 5550707000006000000e0000c0000d00550700000006000000e0000c0000d00550700000000600000e0000c0000d005505555555555555555555555555550555 | |
| 55507770000066600eee0000c00ddd005507770000066600eee0000c00ddd005507770000066600eee0000c00ddd005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 555000000000000000000000000000005501111111aaaaa111111111111111055000000000000000000000000000005505555555555555555555555555550555 | |
| 55507770000066000eee00c0c00ddd005501771717a66611eee11c1c11ddd105507770000066600eee00c0c00ddd005505555555555555555555555555550555 | |
| 55507070000006000e0000c0c00d00005507111777aaa171e1111c1c11d11105507000000000600e0000c0c00d00005505555555555555555555555555550555 | |
| 55507700000006000eee00ccc00ddd005507111717aa61771ee11ccc11ddd105507700000066600eee00ccc00ddd005505555555555555555555555555550555 | |
| 5550707000000600000e0000c0000d005507171777aaa17771e1111c1111d10550700000006000000e0000c0000d005505555555555555555555555555550555 | |
| 55507770000066600eee0000c00ddd005507771717a661777711111c11ddd105507770000066600eee0000c00ddd005505555555555555555555555555550555 | |
| 555000000000000000000000000000005501111111aaa17711111111111111055000000000000000000000000000005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000001171000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55507770000066600eee00c0c00ddd005507700000066600eee00c0c00ddd005507700000066600eee00c0c00ddd005505555555555555555555555555550555 | |
| 55507070000000600e0000c0c00d00005507070000000600e0000c0c00d00005507070000000600e0000c0c00d00005505555555555555555555555555550555 | |
| 55507770000066600eee00ccc00ddd005507070000006600eee00ccc00ddd005507070000066600eee00ccc00ddd005505555555555555555555555555550555 | |
| 5550707000006000000e0000c0000d00550707000000060000e0000c0000d00550707000006000000e0000c0000d005505555555555555555555555555550555 | |
| 55507070000066600eee0000c00ddd005507770000066600eee0000c00ddd005507770000066600eee0000c00ddd005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55507770000066000eee00c0c00ddd005507770000066600eee00c0c00ddd005507700000066600eee00c0c00ddd005505555555555555555555555555550555 | |
| 55507070000006000e0000c0c00d00005507070000000600e0000c0c00d00005507070000000600e0000c0c00d00005505555555555555555555555555550555 | |
| 55507700000006000eee00ccc00ddd005507770000006600eee00ccc00ddd005507070000006600eee00ccc00ddd005505555555555555555555555555550555 | |
| 5550707000000600000e0000c0000d00550707000000060000e0000c0000d00550707000000060000e0000c0000d005505555555555555555555555555550555 | |
| 55507770000066600eee0000c00ddd005507070000066600eee0000c00ddd005507770000066600eee0000c00ddd005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55507770000066600eee00c0c00ddd005507770000066600eee00c0c00ddd005507770000066600eee00c0c00ddd005505555555555555555555555555550555 | |
| 55507070000000600e0000c0c00d00005507000000000600e0000c0c00d00005507000000000600e0000c0c00d00005505555555555555555555555555550555 | |
| 55507770000066600eee00ccc00ddd005507700000006600eee00ccc00ddd005507700000066600eee00ccc00ddd005505555555555555555555555555550555 | |
| 5550707000006000000e0000c0000d00550700000000060000e0000c0000d00550700000006000000e0000c0000d005505555555555555555555555555550555 | |
| 55507070000066600eee0000c00ddd005507770000066600eee0000c00ddd005507770000066600eee0000c00ddd005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55507770000066000eee00c0c00ddd005500770707066600eee00c0c00ddd005507770000066600eee00c0c00ddd005505555555555555555555555555550555 | |
| 55507070000006000e0000c0c00d00005507000777000600e0000c0c00d00005507000000000600e0000c0c00d00005505555555555555555555555555550555 | |
| 55507700000006000eee00ccc00ddd005507000707006600eee00ccc00ddd005507700000006600eee00ccc00ddd005505555555555555555555555555550555 | |
| 5550707000000600000e0000c0000d00550707077700060000e0000c0000d00550700000000060000e0000c0000d005505555555555555555555555555550555 | |
| 55507770000066600eee0000c00ddd005507770707066600eee0000c00ddd005507770000066600eee0000c00ddd005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55505050505050505050505050505050550505050505050505050505050505055050505050505050505050505050505505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55500770707066600eee00c0c00ddd00550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55507000777000600e0000c0c00d0000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55507000707066600eee00ccc00ddd00550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 5550707077706000000e0000c0000d00550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55507770707066600eee0000c00ddd00550020002000200002000020000200055002000200020000200002000020005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55507770000066000eee00c0c00ddd00550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55507070000006000e0000c0c00d0000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55507700000006000eee00ccc00ddd00550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 5550707000000600000e0000c0000d00550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55507770000066600eee0000c00ddd00550020002000200002000020000200055002000200020000200002000020005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55500770707066600eee00c0c00ddd00550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55507000777000600e0000c0c00d0000550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55507000707066600eee00ccc00ddd00550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 5550707077706000000e0000c0000d00550000000000000000000000000000055000000000000000000000000000005505555555555555555555555555550555 | |
| 55507770707066600eee0000c00ddd00550020002000200002000020000200055002000200020000200002000020005505555555555555555555555555550555 | |
| 55500000000000000000000000000000550000000000000000000000000000055000000000000000000000000000005500000000000000000000000000000555 | |
| 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 | |
| 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 | |
| 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 | |
| 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888 | |
| 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888 | |
| 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888 | |
| 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888 | |
| 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888 | |
| 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888 | |
| 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888 | |
| __gff__ | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| __map__ | |
| 00000000000000000000c0c20000c0c028290000021718191a0101010f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| d2c2c2c2c2000000000000000000c0c00000001011121314011b1c0115160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| d2c2c2c20000000000000000c2c2c0c000000020212223240c0d1f0025260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| d2c2c20000000000000000c2c2c2c00000000030313233340000000035360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| d2c2c2c3d4c5c6c7c8c9cadbc2c20000000008090a0b1e050607040404000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| d2c2c2c3e4c5d6d7e8c9eaebc2c2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| d2c2c2d3c4e5f6e7d8d9dacbc2c200c2c200000000003738393a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 000000c3e4c5d6f7e8c9eaebc2c200c2c2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 000000c3e4d5e600f8e9eaebc2c2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 000000e3f4c000000000fafbc200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| __sfx__ | |
| 011c0000235252f525235252f525235252f525235252f525235252f525235252f525235252f525235252f525235252f525235252f525235252f525235252f525235252f525235252f525235252e525235252e525 | |
| 01e000001e5251b525195251b525125050f5050d5050f5052450524505245050c5050050500505005050050500505005050050500505005050050500505005050050500505005050050500505005050050500505 | |
| 01e00000125250f5250d5250f5251e5051b505195051b505005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500 | |
| 011c0000235352f535235352f535215352f535215352f535205352f535205352f535215352f5352053521535235352f535235352f535215352f535215352f535205352f535205352f535215352f535215352f535 | |
| 011c0000235352f535235352f535215352f535215352f535205352f535205352f535215352f535205352d535235352f535235352f535265352f535265352f535255352f535255352f535215352f535215352f535 | |
| 011c00002f545235452f545235452d545235452d545235452c545235452c545235452d545235452c5452d5452f545235452f545235452d545235452d545235452c545235452c545235452d545235452d54523545 | |
| 017000001e545255451c545205451a545215451c54520545125052a505105051c5051a505265051c5052850500500005000050000500005000050000500005000050000500005000050000500005000050000500 | |
| 01700000125451e545105451c5450e5451a545105451c545005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500 | |
| 011c0000235352f535235352f535235352f535235352f535235352f535235352f535235352f535235352f535235352f535235352f535235352f535235352f535235352f535235352f535235352e535235352e535 | |
| 01e000001e5351b535195351b5351e5051b505195051b505000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 01e00000125350f5350d5350f535125050f5050d5050f505005050050500505005050050500505005050050500505005050050500505005050050500505005050050500505005050050500505005050050500505 | |
| 011c00002f545235452f545235453254526545325452654531545255453154525545325452654532545265452f545235452f5452354532545265453254526545315452554531545255452d545215452d54521545 | |
| 017000001e545255051c545205051a545215051c545205051e5052a5051c505285051a505265051c505285051e505255051c5052c505265052d505285052c505125052a505105051c5051a505265051c50528505 | |
| 01700000125451e545105451c5450e5451a545105451c5451e505255051c5052c505265052d505285052c505125052a505105051c5051a505265051c505285050000000000000000000000000000000000000000 | |
| 011c0000235152f515235152f515235152f515235152f515235152f515235152f515235152f515235152f515235152f515235152f515235152f515235152f515235152f515235152f515235152e515235152e515 | |
| 017000002f51532515315152d5152f51532515315152d515005050050500505005050050500505005050050500505005050050500505005050050500505005050050500505005050050500505005050050500505 | |
| 01e000001751500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 01e000002f51500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 011c0000183032b6052b6052b605183032b6052b60515303153032b6052b6052b6052b6052b6052b6052b605183032b6052b6252b625183232b6052b62515323153032b6152b6252b6352b6452b6552b6552b605 | |
| 011c00002b6352b63518333374052b6351833318333183032b6352b635183332b6052b63515333153331f2052b6352b63518333374052b6351833318333183032b6352b635183332b6052b635153331533315303 | |
| 011c00002b6352b63518333374052b6351833318333183032b6352b635183332b6052b63515333153331f2052b6352b63518333374052b6351833318333183032b6252b625183232b6052b625153231532315303 | |
| 011c00001752523525175252352517525235251752523525175252352517525235251752523525175252352517525235251752523525175252352517525235251752523525175252352517525225251752522525 | |
| 01e00000125250f5250d5250f525125050f5050d5050f5052450524505245050c5050050500505005050050500505005050050500505005050050500505005050050500505005050050500505005050050500505 | |
| 01e00000065250352501525035251e5051b505195051b505005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500 | |
| 011c00001753523535175352353515535235351553523535145352353514535235351553523535145351553517535235351753523535155352353515535235351453523535145352353515535235351553523535 | |
| 01e00000125350f5350d5350f5351e5051b505195051b505000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 01e0000006535035350153503535125050f5050d5050f505065050350501505035050050500505005050050500505005050050500505005050050500505005050050500505005050050500505005050050500505 | |
| 011c000017535235351753523535155352353515535235351453523535145352353515535235351453515535175352353517535235351a535235351a535235351953523535195352353515535235351553523535 | |
| 011c00001753523535175352353517535235351753523535175352353517535235351753523535175352353517535235351753523535175352353517535235351753523535175352353517535225351753522535 | |
| 011c00002354517545235451754521545175452154517545205451754520545175452154517545205452154523545175452354517545215451754521545175452054517545205451754521545175452154517545 | |
| 01700000125451954510545205451a545215451c54520545125052a505105051c5051a505265051c5052850500500005000050000500005000050000500005000050000500005000050000500005000050000500 | |
| 01700000065451e54504545105450e5451a545105451c545125050050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500 | |
| 011c000023545175452354517545265451a545265451a54525545195452554519545265451a545265451a54523545175452354517545265451a545265451a5452554519545255451954521545155452154515545 | |
| 017000001254525505105452c5051a5452d5051c5452c5051e5052a5051c505285051a505265051c505285051e505255051c5052c505265052d505285052c505125052a505105051c5051a505265051c50528505 | |
| 01700000065451e54504545105450e5451a545105451c5451e505255051c5052c505265052d505285052c505125052a505105051c5051a505265051c505285050000000000000000000000000000000000000000 | |
| 011c00001751523515175152351517515235151751523515175152351517515235151751523515175152351517515235151751523515175152351517515235151751523515175152351517515225151751522515 | |
| 011500000c6250c605016050160523605236050160501605256052560502605026052760527605046050460525605256050460504605246052460502605026052260522605016050160520605206050160501605 | |
| 01070000300333e033260032400337003390033b0033c0033e03330033160031700318003190031a0031b0031c0031d0031e0031f003200032100322003230030000300003000030000300003000030000300003 | |
| 011800000e6140e6100e61512600146001660017600186001a6001c6001e6002060022600236051a6001b6001c6001d6001e6001f600206002160022600236002360500600006000060000600006000060000600 | |
| 0118000010610106151c60512600146001660017600186001a6001c6001e6002060022600236051a6001b6001c6001d6001e6001f600206002160022600236002360500000000000000000000000000000000000 | |
| 0118000012610126151060012600146001660017600186001a6001c6001e6002060022600236051a6001b6001c6001d6001e6001f600206002160022600236002360500000000000000000000000000000000000 | |
| 0118000014610146151060012600146001660017600186001a6001c6001e6002060022600236051a6001b6001c6001d6001e6001f600206002160022600236002360500000000000000000000000000000000000 | |
| 0118000016610166151060012600146001660017600186001a6001c6001e6002060022600236051a6001b6001c6001d6001e6001f600206002160022600236002360500000000000000000000000000000000000 | |
| 0118000017610176151060012600146001660017600186001a6001c6001e6002060022600236051a6001b6001c6001d6001e6001f600206002160022600236002360500000000000000000000000000000000000 | |
| 0118000018610186151060012600146001660017600186001a6001c6001e6002060022600236051a6001b6001c6001d6001e6001f600206002160022600236002360500000000000000000000000000000000000 | |
| 011800001a6101a6151060012600146001660017600186001a6001c6001e6002060022600236051a6001b6001c6001d6001e6001f600206002160022600236002360500000000000000000000000000000000000 | |
| 011800001c6101c6151060012600146001660017600186001a6001c6001e6002060022600236051a6001b6001c6001d6001e6001f600206002160022600236002360500000000000000000000000000000000000 | |
| 011800001e6101e6151060012600146001660017600186001a6001c6001e6002060022600236051a6001b6001c6001d6001e6001f600206002160022600236002360500000000000000000000000000000000000 | |
| 0118000020610206152360512600146001660017600186001a6001c6001e6002060022600236051a6001b6001c6001d6001e6001f600206002160022600236002360500000000000000000000000000000000000 | |
| 0118000022610226152360512600146001660017600186001a6001c6001e6002060022600236051a6001b6001c6001d6001e6001f600206002160022600236002360500000000000000000000000000000000000 | |
| 0119000024610246151060012600146001660017600186001a6001c6001e6002060022600236051a6001b6001c6001d6001e6001f600206002160022600236002360500600006000060000600006000060000600 | |
| 01070000300333e033260032400337003390033b0033c0033e00330003160031700318003190031a0031b0031c6001d6001e6001f600206002160022600236002360500000000000000000000000000000000000 | |
| 000700003e03330033260032400337003390033b0033c0033e00330003160031700318003190031a0031b0031c6001d6001e6001f600206002160022600236002360500000000000000000000000000000000000 | |
| 010500003e03300203002030020300203002030020300203002030020300203002030020300203002030020300203002030020300203002030020300203002030020300203002030020300203002030020300203 | |
| 010a00003f7463f7563f7463f7463f7303f7303e7203e7203e7103d7103d71439700397042d7042c7042b704007040070400704007041330415304173040c3040d3040f3041230414304186010c0040c0040c104 | |
| 000400002367001610186600266008650056500465003640026400163001630016200162001610016100161001610016100161001610016100160000000000000000000000000000000000000000000000000000 | |
| 00030000166500f640036300162001610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 000200000b670026100b660086600a6500b6500d6500e640106401163012630136201362014610146101561015610146100f61008610066100160000000000000000000000000000000000000000000000000000 | |
| 001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| __music__ | |
| 01 00424344 | |
| 00 00014344 | |
| 00 00010244 | |
| 00 03090a44 | |
| 00 04090a44 | |
| 00 08090a52 | |
| 00 05060713 | |
| 00 05060713 | |
| 00 0b0c0d14 | |
| 00 03090a56 | |
| 00 00014344 | |
| 00 0e0f5144 | |
| 00 10114344 | |
| 00 15424344 | |
| 00 15164344 | |
| 00 15161744 | |
| 00 18191a44 | |
| 00 1b191a44 | |
| 00 1c191a52 | |
| 00 1d1e1f13 | |
| 00 1d1e1f13 | |
| 00 20212214 | |
| 00 1c191a44 | |
| 00 15164344 | |
| 00 230f5144 | |
| 02 10114344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 | |
| 00 41424344 |