Update
* Most magic animations are now complete.
* Additional content added to Underdeep. It's now its own story arc.
* User and script-adjustable typewriter effect.
* Other things.
Demonstration of typewriter effect and some of the magic.
We have more down but I don't want to spoil too much.
(http://i.imgur.com/uj4yJkz.gif)
Notes
Battle animations would've/should've been done sooner, but some of these things take a while to animate in a way that satisfies the whole team. There's still a few things left to animate, but it won't be long now before it's all done. After that and a few visual/bug fixes we get to do...
Cutscenes! Geekboy1011 is hard at work at the moment putting all the cutscenes together between the time you choose the "New Game" option to the time you gain control of your character for the first time. When I finish the battle animations and find myself satisfied with the system as a whole, I'm going to be jumping in somewhere in the middle to get the game's story stitched together. Zera/Escheron mentioned that the cutscenes he's been working on as of late are encroaching into Golden Sun-length territory. This could be a good thing.
There's also now no way in hell we'll be able to fit this game onto a normal TI-83 Plus without modifications. There's just too much content we want to add and compression we have isn't doing a good enough job. I mean, it's doing a fantastic job so far, but we just have so much to put in. I'm entertaining the idea of creating a miniature OS that contains just the basic calc functions so I can reasonably distribute this game as an OS update instead of an app. Something that would, on the surface, look just like the TI-OS until you try digging into the menus and realize they're all empty. While I do want people to play this game, I also want their calculator be usable as ... a calculator. This is planned after a release for the TI-83+SE / 84+(SE) monochrome calcs.
The Underdeep will have static floors interspersed between randomly generated floors which will also be randomly, but not repeatably, chosen where fun events can trigger and backstory can be told. Yes. The Underdeep now has its own story to it which further enriches the world of Escheron. I'm not privy to all the details for the same reason I'm not looking too deeply into the scripts for the game: I want to be able to enjoy playing this thing without too many spoilers once we finish coding the game.
TODO
* Remaining skill/magic animations
* Cutscenes
* Specialized transitions
* Update the Underdeep mapgen scripts
Quick update on my end...
The game is now fully scripted. All of the character dialogs and cutscenes are written, but their actual incorporation into the project make take some time, since working with the cutscene engine is a nightmare in itself. (And luckily, that task falls upon Iambian and Geekboy1011 instead of me, since I'm not as technically oriented with the systems)
Identifier / pointer (to indicate which character)
Flag to indicate whether or not the character is in the active party
Level (value from 1 to 256)
Experience (value from 0 to 255)
Weapon slot 1
Weapon slot 2 / Shield slot
Armor slot
Accessory slot
Spell 1
Spell 2
Spell 3
Spell 4
Spell 5
Spell 6
Spell 7
Spell 8
Spell 9
Spell 10
Spell 11
Spell 12
Maximum HP
Current HP
Maximum MP
Current MP
(Base) Attack
(Base) Defense
(Base) Magic
(Base) Agility
[...]
What sort of limits should we have in regard to inventories? For instance, how many spells each character can learn, how many unique items can exist in the game's database, the number of total enemies, the number of enemy parties that can be formed, etc. I'll break down some of the figures (and estimates) I have at the moment:
[...]
My only groan with the walking into doors and having a menu pop up is it feels kinda cheap. We most definitely have the space to store shops and such and the screen realestate to make it look good. As for the selling items I like the idea of them saying "I can sell this for X"
In the previous Escheron thread when you proposed the item system you had it designed as such that items in dungeons would respawn and such like that. Would this iteration follow suit? ,Or is it going to be one only?
Under "OTHER NOTES," the "ITEM" flag indicates that a piece of equipment casts a spell if selected from the item inventory
and used in that manner.
SWORDS | AT | DF | MG | AG | HT | EV | Crit. | OTHER NOTES
—————————+————+————+————+————+————+————+———————+——————————————————————————————
Broad | 12 | .. | .. |-05 |+60 | .. | 1/32 | ..
Mythril | 18 | .. | .. | .. |+70 | .. | 8/32 | ..
Coral | 20 | .. | .. |-05 |+60 | .. | 1/32 | Thunder elemental
Ice | 22 | .. | .. |-05 |+60 | .. | 1/32 | Ice elemental
Flame | 28 | .. | .. |-05 |+60 | .. | 1/32 | Fire elemental
Ebony | 16 | .. | .. | .. |+60 | .. | 1/32 | Inflict Poison
Vorpal | 32 | .. | .. |-05 |+40 | .. | 8/32 | Inflict KO
Defense | 44 |+05 | .. |-05 |+60 |+08 | 1/32 | ITEM: Blink spell
Revenge | ** | .. | .. |-05 |+40 | .. | ** | (1) Revenge sword effect
Blood | 08 | .. | .. |-05 |+20 | .. | ** | (2) Drain effect
Ragnarok | 56 | .. |+08 |-05 |+60 | .. | 1/32 | Holy elemental
| | | | | | | | (3) Unleash Thunder spell
** The Revenge and Blood swords cannot score critical hits.
(1) The Revenge sword's damage is equal to its wielder's current / max HP
difference, and the damage output ignores its target's Defense power.
Potential bug foresight: Could the Revenge sword's non-conventional damage formula affect a second wind attack?
(2) The Blood sword "drains" HP from enemies. For all intents and purposes,
this simply means the weapon heals its wielder by an amount equal to the damage that the sword inflicted against its target.
If the target has the Undead flag, then the Blood sword's damage / heal effect is reversed.
(3) There's a 1/16 chance that physically attacking will cause this weapon to
cast Thunder on its target immediately afterward. The spell will function at full, regular efficiency.
STAVES | AT | DF | MG | AG | HT | EV | Crit. | OTHER NOTES
—————————+————+————+————+————+————+————+———————+——————————————————————————————
Staff | 06 | .. |+05 | .. |+70 | .. | 1/32 | ..
Serpent | 10 | .. |+10 | .. |+60 | .. | 1/32 | Inflict Poison
Hades | 14 | .. |+15 | .. |+70 | .. | 1/32 | Fire elemental
| | | | | | | | ITEM: Fire spell
Healing | 16 | .. |+15 | .. |+70 | .. | 1/32 | ITEM: Heal spell
Lilith | 22 | .. |+20 |+05 |+60 | .. | 1/32 | Inflict Sleep
Zeus | 28 | .. |+25 | .. |+60 | .. | 1/32 | Thunder elemental
| | | | | | | | ITEM: Tornado spell
Seraph | 32 |+05 |+30 | .. |+70 | .. | 1/32 | (4) HP regeneration effect
(4) At the end of each round, the staff's wielder automatically recovers 8% of
their maximum HP, unless they are KO'd.
SHIELDS | AT | DF | MG | AG | HT | EV | OTHER NOTES
—————————+————+————+————+————+————+————+——————————————————————————————————————
Buckler | .. |+02 | .. |-05 | .. |+08 | ..
Large | .. |+04 | .. |-10 | .. |+12 | ..
Ebony | .. | .. | .. |-10 | .. |+12 | Resist Ice
Mythril | .. |+06 | .. | .. | .. |+16 | ..
Kaiser |+08 |+06 | .. |-10 | .. |+12 | ITEM: Berserk
Aegis | .. |+08 | .. |-10 | .. |+24 | Resist KO
Sacri | .. |+12 | .. |-10 | .. |+20 | Resist Poison, Sleep and KO
MAIL | AT | DF | MG | AG | HT | EV | OTHER NOTES
—————————+————+————+————+————+————+————+——————————————————————————————————————
Plate | .. | 16 | .. |-20 | .. |-04 | ..
Mythril | .. | 22 | .. | .. | .. | .. | ..
Ebony | .. | .. | .. | .. | .. | .. | ..
Flame | .. | 24 | .. |-20 | .. |-04 | Resist Fire
| | | | | | | Weak to Ice
Ice | .. | 24 | .. |-20 | .. |-04 | Resist Ice
| | | | | | | Weak to Fire
Gaia | .. | 36 | .. |-20 | .. |-04 | Resist Poison
| | | | | | | (4) HP regeneration effect
Diamond | .. | 52 | .. |-30 | .. |-08 | Resist Lightning
Dragon | .. | 40 | .. |-20 | .. |-04 | Resist Fire, Ice and Lightning
Mirror | .. | 48 | .. |-20 | .. |-04 | Resist Lightning and Gravity
(4) This effect is identical to the effect already noted on the Seraph staff.
CLOTHING | AT | DF | MG | AG | HT | EV | OTHER NOTES
—————————+————+————+————+————+————+————+——————————————————————————————————————
Clothes | .. |+05 | .. | .. | .. | .. | ..
Wizard | .. |+08 |+10 | .. | .. | .. | ..
Blaze | .. |+10 | .. | .. | .. | .. | Resist Fire
Power |+12 |+12 | .. |+05 | .. | .. | ..
Mirage | .. |+12 | .. | .. | .. |+16 | ..
Minerva | .. |+16 |+15 |+05 | .. |+04 | Can be worn only by females
Spartan |+08 |+20 | .. |+08 |+10 |+04 | Can be worn only by males
RINGS | AT | DF | MG | AG | HT | EV | OTHER NOTES
—————————+————+————+————+————+————+————+——————————————————————————————————————
Bracer | .. |+02 | .. | .. | .. |+02 | ..
Mythril | .. |+05 | .. | .. | .. |+02 | ..
Fairy | .. | .. |+05 | .. | .. | .. | Resist Poison and Sleep
Thief | .. | .. | .. |+10 | .. |+02 | ..
Ebony | .. | .. | .. | .. | .. | .. | Resist Poison and Sleep
Titan |+10 | .. | .. |-02 | .. | .. | ..
Rune | .. | .. |+10 | .. | .. | .. | Resist Sleep
| | | | | | | ITEM: Life
Protect | .. |+08 | .. | .. | .. |+04 | Resist KO
Cursed |-05 |-05 |-05 |-05 | .. | .. | Weak to Fire, Ice and Lightning
Holy |+05 |+05 |+05 |+05 | .. | .. | Resist all properties
Is there any reason you aren't using smooth(er) scrolling? I imagine everything is still aligned, but it looks like you're shifting in blocks of 8, i imagine to make scrolling easier. But now that you've gone black and white smoother scrolling shouldn't be an issue. Scrolling 2 pixels at a time would be plenty fast and look much nicer in my opinion.We're doing that because we wanted an engine now and an RPG is so much more than just its tilemapper. I promise I'll work on smoother scrolling later but we're trying to pull together all of what makes an RPG and RPG in a fairly quick manner. The extra bells and whistles can come later.
Anyway, i'm really happy to see this being worked on again. And it's nice to see you back Zera/Escheron!
Is there any reason you aren't using smooth(er) scrolling? I imagine everything is still aligned, but it looks like you're shifting in blocks of 8, i imagine to make scrolling easier. But now that you've gone black and white smoother scrolling shouldn't be an issue. Scrolling 2 pixels at a time would be plenty fast and look much nicer in my opinion.We're doing that because we wanted an engine now and an RPG is so much more than just its tilemapper. I promise I'll work on smoother scrolling later but we're trying to pull together all of what makes an RPG and RPG in a fairly quick manner. The extra bells and whistles can come later.
Anyway, i'm really happy to see this being worked on again. And it's nice to see you back Zera/Escheron!
I found a nice tileset earlier that I think I'll incorporate into the game. The dithering works well for purely B&W detail. I would like a second opinion, though. Do you think the character sprites go well with these tiles? I didn't dither any of the sprites because I was afraid it would cause them to blend with the background too much. I figure having more pronounced white pixels will help keep the sprites apart from the background tiles.
Incidentally, this tileset seems like an improvement over the one I was using previously. Areas look much less... square?
What sort of upward limit is there on the number of tiles in the tileset, and the resolution of maps? I may be able to squeeze 128 tiles, but a limit of 256 would certainly be generous. Maps should be no greater than 128x128, but I may be able to squeeze 64x64.
The number of maps may be slightly smaller since I have a new idea for handling indoor areas such as shops. For the most part, walking into a door leading to a shop will just bring up a shop menu instead of having you explore a small room and having to walk up to the shopkeeper to initiate the shop window. Given the resolution of the screen, it's actually very difficult to create a room that has both counter space and a shopkeeper standing behind it, because part of the tiles gets cut off. I figure my approach makes a bit more sense. Some areas will still have explorable indoors though, such as taverns.
I found a nice tileset earlier that I think I'll incorporate into the game. The dithering works well for purely B&W detail. I would like a second opinion, though. Do you think the character sprites go well with these tiles? I didn't dither any of the sprites because I was afraid it would cause them to blend with the background too much. I figure having more pronounced white pixels will help keep the sprites apart from the background tiles.
Incidentally, this tileset seems like an improvement over the one I was using previously. Areas look much less... square?
What sort of upward limit is there on the number of tiles in the tileset, and the resolution of maps? I may be able to squeeze 128 tiles, but a limit of 256 would certainly be generous. Maps should be no greater than 128x128, but I may be able to squeeze 64x64.
The number of maps may be slightly smaller since I have a new idea for handling indoor areas such as shops. For the most part, walking into a door leading to a shop will just bring up a shop menu instead of having you explore a small room and having to walk up to the shopkeeper to initiate the shop window. Given the resolution of the screen, it's actually very difficult to create a room that has both counter space and a shopkeeper standing behind it, because part of the tiles gets cut off. I figure my approach makes a bit more sense. Some areas will still have explorable indoors though, such as taverns.
Fair enough, i look forward to seeing what's planned.On top of this we have some hidden plans in the works. Trust us this way is better for now ;)Is there any reason you aren't using smooth(er) scrolling? I imagine everything is still aligned, but it looks like you're shifting in blocks of 8, i imagine to make scrolling easier. But now that you've gone black and white smoother scrolling shouldn't be an issue. Scrolling 2 pixels at a time would be plenty fast and look much nicer in my opinion.We're doing that because we wanted an engine now and an RPG is so much more than just its tilemapper. I promise I'll work on smoother scrolling later but we're trying to pull together all of what makes an RPG and RPG in a fairly quick manner. The extra bells and whistles can come later.
Anyway, i'm really happy to see this being worked on again. And it's nice to see you back Zera/Escheron!
Does the topic name change mean it has a name now? Nice!
——————————————————————————————————————————————————————————————————————————————
Gremlin RANK 1 GP 00040 DROP: Potion [ 16/256]
—— PROPERTIES —— —— RESISTANCES —— —— COMMAND SEQUENCE —— HP 32
[ ] Fire [ ] Fire 1.) Attack MP 16
[ ] Ice [ ] Ice 2.) Attack
[ ] Poison [ ] Lightning 3.) Fire ATT 12
[ ] Sleep [ ] Gravity 4.) Sleep DEF 4
[ ] Undead [ ] Poison 5.) Attack MAG 8
[ ] Drain [ ] Sleep 6.) Attack AGI 16
[ ] HP regen [ ] KO 7.) Attack
[ ] Double attack [ ] Holy 8.) Attack CRIT. 32/256
——————————————————————————————————————————————————————————————————————————————
——————————————————————————————————————————————————————————————————————————————
Dragon RANK 4 GP 00900 DROP: Strength potion [ 16/256]
—— PROPERTIES —— —— RESISTANCES —— —— COMMAND SEQUENCE —— HP 600
[ ] Fire [O] Fire 1.) Breath MP 0
[ ] Ice [X] Ice 2.) Attack
[ ] Poison [ ] Lightning 3.) Attack ATT 60
[ ] Sleep [ ] Gravity 4.) Breath DEF 30
[ ] Undead [O] Poison 5.) Attack MAG 30
[ ] Drain [O] Sleep 6.) Attack AGI 60
[ ] HP regen [O] KO 7.) Attack
[O] Double attack [ ] Holy 8.) Attack CRIT. 64/256
——————————————————————————————————————————————————————————————————————————————
(http://i.imgur.com/kmBSRpT.gif)I lolled at this gif XD. But yea, RPGs are hard projects, hopefully I will be able to someday play a working version of this :)
So I was working on flag implementations (both permanent and temporary) and setting up what is needed to run cutscene scripts.Haahaa, the infinite circle walk!
Also, Urist McTesty drank far too many 5 Hour Energy drinks...
(http://i.imgur.com/K4erbiL.gif)
Geekboy suggested I shared this. It's his fault McTesty achieved Warp 10.
script_start()
res show_player_sprite,(iy+baseflags)
ld hl,xy(33,3)
ld (camera_pos),hl
ld a,%00000001
ld (camera_subxy),a
res camera_follows_player,(iy+baseflags)
ld a,ragnoth_mapid
rcall(LoadNewMapInA)
push_sstate()
ld a,:Maya_intro
ld de,Maya_intro
rcall(AddSpriteEntry)
find_sprite(Maya_intro_NPC)
script_delay(30)
sp_move_sprite(dsk_up)
script_delay(30)
sp_move_sprite(dsk_up)
script_delay(30)
sp_change_facing(sp_down)
script_delay(30)
sp_change_facing(sp_up)
script_delay(30)
sp_move_sprite(dsk_up)
script_delay(30)
sp_move_sprite(dsk_up)
script_delay(100)
sp_change_facing(sp_down)
script_delay(100)
sp_change_facing(sp_up)
script_delay(125)
ld hl,xy(9,6)
ld (camera_pos),hl
SET_FLAG(RAGNOTH_ON_FIRE) ; Needs to be before map load
ld a,ragnoth_mapid
rcall(LoadNewMapInA)
ld a,:Guard_1_dat
ld de,Guard_1_dat
rcall(AddSpriteEntry)
pop_sstate()
script_suspend(86)
push_sstate()
ld a,:Guard_Fire_1
ld de,Guard_Fire_1
rcall(AddSpriteEntry)
pop_sstate()
script_suspend(50)
push_sstate()
ld hl,xy(26,14)
ld (camera_pos),hl
ld a,%00000010
ld (camera_subxy),a
script_delay(1)
ld a,:Guard_2_dat
ld de,Guard_2_dat
rcall(AddSpriteEntry)
pop_sstate()
script_suspend(86)
push_sstate()
ld a,:Guard_Fire_2
ld de,Guard_Fire_2
rcall(AddSpriteEntry)
pop_sstate()
script_suspend(50)
;Pan around village on fire and fixate on shadow lord
ld a,17 ;rather long delay for Panning.
ld (panvariabledelay),a
push_sstate()
pan_camera_to_NPC(ShadowLord_NPC)
sp_change_facing(sp_down)
pop_sstate()
script_suspend(50)
ld hl,text_hive(h00_shadowlord_1)
call dispDialogAuto
push_sstate()
pan_camera_to_NPC(Guard_That_Runs)
pop_sstate()
script_suspend(25)
ld hl,text_hive(h00_Guard_That_Runs_1)
call dispDialogAuto
call panbackToplayer
RES_FLAG(RAGNOTH_ON_FIRE)
ld a,ragnoth_mapid
rcall(LoadNewMapInA)
set is_cutscene_done,(iy+stateflags)
set show_player_sprite,(iy+baseflags)
set camera_follows_player,(iy+baseflags)
xor a
ld (camera_subxy),a
SET_FLAG(NEW_GAME_INTRO_FINISHED) ;Quit we are done
script_end()
I have been forces by the evil serf lords @Geekboy1011 and @Sorunome to post a replay, so here I am :P ;D
The only thing I really have to say is about that code, I know it's asm code, couse I see it's asm code, yet with all the macros and stuff, it realy does not feal like assembly code :/
it's still great thou, no matter how you make this game, I still will want to play it :)
;New game cutscene script is here.
NEW_GAME_CUTSCENE:
script_start()
res show_player_sprite,(iy+baseflags) ;Hide player from View
ld hl,xy(33,3)
ld (camera_pos),hl
ld a,%00000001
ld (camera_subxy),a
res camera_follows_player,(iy+baseflags) ;Set Camera to Look cenetered on
;Graveyard
ld a,ragnoth_mapid
rcall(LoadNewMapInA) ;Load Ragnoth
push_sstate()
ld a,:Maya_intro
ld de,Maya_intro
rcall(AddSpriteEntry)
find_sprite(Maya_intro_NPC) ;Load a Maya Sprite
script_delay(30)
sp_move_sprite(dsk_up)
script_delay(30)
sp_move_sprite(dsk_up) ;Move her half way
script_delay(30)
sp_change_facing(sp_down) ;Make her turn around and "sigh"
script_delay(30)
sp_change_facing(sp_up)
script_delay(30)
sp_move_sprite(dsk_up)
script_delay(30)
sp_move_sprite(dsk_up) ;Have her stand by the grave Stone
script_delay(100)
sp_change_facing(sp_down)
script_delay(100)
sp_change_facing(sp_up)
script_delay(125) ;Do a jig for cinematics. (Turn around again)
ld hl,xy(9,6)
ld (camera_pos),hl ;Set Camera to First Guard
SET_FLAG(RAGNOTH_ON_FIRE) ;Light Ragnoth on fire.
ld a,ragnoth_mapid
rcall(LoadNewMapInA) ;Load map on fire.
ld a,:Guard_1_dat
ld de,Guard_1_dat
rcall(AddSpriteEntry) ;Add first guard.
pop_sstate()
script_suspend(86) ;Delay long enough for Guard Move
push_sstate()
ld a,:Guard_Fire_1
ld de,Guard_Fire_1
rcall(AddSpriteEntry) ;Have guard light a fire
pop_sstate()
script_suspend(65) ;Delay for effect.
push_sstate() ;Repeat above for second guard.
ld hl,xy(26,14) ;Literal copy paste with coordinates
ld (camera_pos),hl ;changed.
ld a,%00000010
ld (camera_subxy),a
script_delay(1)
ld a,:Guard_2_dat
ld de,Guard_2_dat
rcall(AddSpriteEntry)
pop_sstate()
script_suspend(86)
push_sstate()
ld a,:Guard_Fire_2
ld de,Guard_Fire_2
rcall(AddSpriteEntry)
pop_sstate()
script_suspend(65)
.asm
ld hl,xy(32,7)
ld (camera_pos),hl
ld a,%00000011
ld (camera_subxy),a
script_suspend(50) ;Set Camera shadow Lord and refresh
push_sstate()
find_sprite(ShadowLord_NPC)
sp_change_facing(sp_down) ;Turn to player
pop_sstate()
script_suspend(50)
ld hl,text_hive(h00_shadowlord_1) ;Have him order people
call dispDialogAuto
push_sstate()
pan_camera_to_NPC(Guard_That_Runs) ;Move to guard to Right
pop_sstate()
script_suspend(25)
ld hl,text_hive(h00_Guard_That_Runs_1)
call dispDialogAuto
push_sstate()
pan_camera_to_NPC(ShadowLord_NPC) ;Turn to guard
sp_change_facing(sp_left)
pop_sstate()
script_suspend(5)
ld hl,text_hive(h00_shadowlord_2)
call dispDialogAuto
push_sstate()
pan_camera_to_NPC(Guard_That_Runs)
pop_sstate()
script_suspend(5)
ld hl,text_hive(h00_Guard_That_Runs_2)
call dispDialogAuto
script_suspend(5)
push_sstate()
find_sprite(Guard_That_Runs)
sp_move_sprite(dsk_left) ;change this later to make guard run down
sp_change_facing(sp_right)
script_delay(20)
sp_move_sprite(dsk_left) ;change this later to make guard run down
sp_change_facing(sp_right)
script_delay(20)
sp_change_facing(sp_right)
setup_script_loop(6)
-:
sp_move_sprite(dsk_left) ;change this later to make guard run down
script_delay(6)
script_djnz({-})
pan_camera_to_NPC(ShadowLord_NPC)
script_delay(15)
sp_change_facing(sp_down)
pop_sstate()
script_suspend(30)
ld hl,text_hive(h00_shadowlord_3)
call dispDialogAuto
script_suspend(50)
ld hl,text_hive(h00_girl_1)
call dispDialogAuto
push_sstate()
pan_camera_continue(17,14)
script_delay(30) ;Pan camera to Maya's Mother
pop_sstate()
ld a,:Maya_Child
ld de,Maya_Child
rcall(AddSpriteEntry)
script_suspend(96) ;Delay for child maya to move
pan_camera_continue(17,15) ;Move so we can see text box
ld hl,text_hive(h00_girl_2)
call dispDialogAuto
push_sstate()
find_sprite(mayas_mother_npc)
script_delay(30)
sp_change_facing(sp_left)
script_delay(20)
sp_change_facing(sp_down)
script_delay(10)
sp_change_facing(sp_left)
script_delay(25)
pop_sstate()
ld hl,text_hive(h00_girl_3)
call dispDialogAuto
call panbackToplayer
RES_FLAG(RAGNOTH_ON_FIRE)
ld a,ragnoth_mapid
rcall(LoadNewMapInA)
set is_cutscene_done,(iy+stateflags)
set show_player_sprite,(iy+baseflags)
set camera_follows_player,(iy+baseflags)
xor a
ld (camera_subxy),a
SET_FLAG(NEW_GAME_INTRO_FINISHED) ;Quit we are done
script_end()
Guard_1_Move:
setup_script_loop(4)
-:
sp_move_sprite(dsk_left)
script_suspend(14)
script_djnz({-})
sp_change_facing(sp_up)
ret
Maya_Child_Move:
;need to move down 3 tiles
setup_script_loop(6)
-:
sp_move_sprite(dsk_down)
script_suspend(14)
script_djnz({-})
ret
Maya_intro:
sp_pos(33,4,sp_up,maya_sprbase,Maya_intro_NPC) sp_scr(doNothing,doNothing)
Guard_1_dat:
sp_pos(10,6,sp_down,guard_sprbase,guard_1) sp_scr(Guard_1_Move,doNothing)
Guard_Fire_1:
sp_pos(8,5,sp_down,flame_sprbase) sp_scr(FireAnimator,doNothing)
guard_2_dat:
sp_pos(27,14,sp_up,guard_sprbase,guard_2) sp_scr(Guard_1_Move,doNothing)
Guard_Fire_2:
sp_pos(25,13,sp_down,flame_sprbase) sp_scr(FireAnimator,doNothing)
Maya_Child:
sp_pos(17,11,sp_down,mayachild_sprbase,maya_child_NPC) sp_scr(Maya_Child_Move,doNothing)
;NOTE: these are comments in the main source
;setup: dx = 2*(x2 - x1) , dy= 2*(y2 - y1). Use (camera_pos) for x1y1 dir.
;do:
;if (acc >= dy) && (y1 <= y2):
; y++
; acc = acc - dy
; if acc < 0:
; acc = acc + dx
;elseif (acc >= dx) && (y1 <= y2):
; x++
; acc = acc - dx
; if acc < 0:
; acc = acc + dy
The wrapper looks like this: ld (camera_pos_goto),hl
scf
rl L
scf
rl H ;shift in 1's for each to extend to new mapping
ld (_end_yx),hl
ex de,hl ;DE=dest
ld hl,(camera_pos)
ld a,(camera_subxy)
rrca ;shift out x
rl L ;put X into low
rrca ;shift out Y
rl H ;put Y into low
ld (_cam_yx),hl ;CURRENT POSITION
push hl
push de
ld h,0 ;x1 = L
ld d,h ;x2 = E. High bytes zero.
or a
ex de,hl
sbc hl,de
add hl,hl ;dx=2*(x2-x1)
ld a,1
jr nc,{+}
call _negHL
ld a,-1 ;if carry, moving in negative direction
+: ld (_cam_mover+0),a
ld (_cam_dx),hl
pop de
pop hl
ld e,H
ld l,D ;quick exchange instead of having to do ex de,hl. set high to low.
ld H,0
ld d,H
or a
sbc hl,de
add hl,hl ;dy=2*(y2-y1)
ld a,1
jr nc,{+}
call _negHL
ld a,-1
+:
ld (_cam_mover+1),a
ld (_cam_dy),hl
ld hl,0
ld (_cam_acc),hl
-:
call _iterateBresenham
call key_input_mapper._test_variable_delay
ld hl,(_cam_yx)
push hl
xor a
rr h
rla
rr L
rla
ld (camera_pos),hl
ld (camera_subxy),a
call showMapFrameRoutine
pop hl
ld de,(_end_yx)
or a
sbc hl,de
jr nz,{-}
ret
Note: delta x and y are always positive. The increment/decrement is kept in _cam_mover high and low bytes (y an x respectively)_iterateBresenham:
ld hl,(_cam_acc)
ld de,(_cam_dx) ;handle (acc >=dy) condition
push hl
or a
sbc hl,de ;carry if condition doesn't hold up
pop hl
jr c,_iBr_skip_to_elseif
push hl
ld hl,(_cam_yx)
ld a,(_end_yx+1)
sub H ;handle (y2 >= y1). Carry if condition doesn't hold.
pop hl
jr c,_iBr_skip_to_elseif
push hl
ld hl,_cam_yx+1
ld a,(_cam_mover+1)
add a,(hl)
ld (hl),a ;y++ (or y-- if running negative y)
pop hl
ld de,(_cam_dy)
or a
sbc hl,de ;acc = acc-dy
jr nc,_iBr_collect
;if made it here, run if acc < 0
ld de,(_cam_dx)
add hl,de
jr _iBr_collect
_iBr_skip_to_elseif:
push hl
ld hl,(_cam_yx)
ld a,(_end_yx+0)
sub L ;handle (x2 >= x1). Carry if condition doesn't hold.
pop hl
jr c,_iBr_collect
push hl
ld hl,_cam_yx+0
ld a,(_cam_mover+0)
add a,(hl)
ld (hl),a ;x++ (or x-- if running negative x)
pop hl
ld de,(_cam_dx)
or a
sbc hl,de ;acc = acc-dx
jr nc,_iBr_collect
;if made it here, run if acc < 0
ld de,(_cam_dy)
add hl,de
_iBr_collect:
ld (_cam_acc),hl
ret
-snip-Your slang intrigues me. This is the first time I heard of "bresenhammering". And when you said "algos" the other night I had no idea what you meant so I made a joke in [grammaticly wrong] Latin telling you not to talk about grief ("Algo" is Greek for "sorrow" (the joke was that algos is Greek and I told you not to talk about grief in Latin lol))
If A>=0 and X!=R
Then
X+E->X ;X coord, E is 1 or -1 (or possibly 0, but we don't actually need that)
A-V->A
End
If A<0 and Z!=S
Then
Z+F->Z ;F is like E
A+U->A
End
Now the actual program. In this case, I just use the X,Z to draw pixels, you would use it to render the map.;;Input a list as any {X1,Y1,X2,Y2}, just make sure they are in bounds as my code doesn't check
Ans->L1
Ans(1->X
L1(2->Z
L1(3->R ;x2
L1(4->S ;y2
R-X->U ;deltax
S-Z->V ;deltay
(U>0)-(U<0->E ;sign(deltax)->xinc
(V>0)-(V<0->F ;sign(deltay)->yinc
abs(U->A
2Ans->U
2abs(V->V
Pxl-On(X,Z
Repeat getKey
prgmLINESUB
Pxl-On(X,Z
End
res did_it_bresenhamming,(iy+stateflags)
ld hl,(_cam_acc)
bit 7,h ;sign check
jr nz,_br_xfail ;skip if acc less than zero
ld a,(_cam_yx+0) ;xpos
ld c,a
ld a,(_end_yx+0)
cp c
jr z,_br_xfail ;skip if x1==x2
ld a,(_cam_mover+0)
add a,c
ld (_cam_yx+0),a
ld de,(_cam_dy)
or a
sbc hl,de ;acc-dy
set did_it_bresenhamming,(iy+stateflags)
_br_xfail:
bit 7,h ;sign check
jr z,_br_yfail ;skip if acc is non-negative.
ld a,(_cam_yx+1) ;ypos
ld c,a
ld a,(_end_yx+1)
cp c
jr z,_br_yfail ;skip if y1==y2
ld a,(_cam_mover+1)
add a,c
ld (_cam_yx+1),a
ld de,(_cam_dx)
add hl,de ;acc+dx
set did_it_bresenhamming,(iy+stateflags)
_br_yfail:
bit did_it_bresenhamming,(iy+stateflags)
jr nz,_br_nofail
ld a,h
xor $80 ;flip sign bit to force next iter to do something
ld h,a
ld (_cam_acc),hl
; call _cmp_cur_to_end_pos
jr nz,_iterateBresenham ;reiterate bresenhammer.
_br_nofail:
ld (_cam_acc),hl
ret
ld b,1 ;use this to check if we bresenhammed
ld hl,(_cam_acc)
bit 7,h ;sign check
jr nz,_br_xfail ;skip if acc less than zero
ld a,(_cam_yx+0) ;xpos
ld c,a
ld a,(_end_yx+0)
cp c
jr z,_br_xfail ;skip if x1==x2
ld a,(_cam_mover+0)
add a,c
ld (_cam_yx+0),a
ld de,(_cam_dy) ;negate this in the setup code
inc b
add hl,de
inc b
jr c,_br_yfail ;skip if acc is non-negative.
_br_xfail:
ld a,(_cam_yx+1) ;ypos
ld c,a
ld a,(_end_yx+1)
cp c
jr z,_br_yfail ;skip if y1==y2
ld a,(_cam_mover+1)
add a,c
ld (_cam_yx+1),a
ld de,(_cam_dx)
add hl,de ;acc+dx
inc b
_br_yfail:
ld (_cam_acc),hl
dec b
ret
br_setup:
;;(b,c) = (y1,x1)
;;(d,e) = (y2,x2)
ld (_cam_yx),bc
ld (_end_yx),de
ld hl,0
ld a,d
sub b
add a,a
jr nc,$+5
dec h ;yinc
neg
ld (_cam_dy),a
ld a,e
sub c
jr nc,$+5
dec l ;xinc
neg
ld (_cam_mover),hl
ld h,0
ld l,a
ld (_cam_acc),hl
add a,a
ld (_cam_dx),a
ret
br_iter:
;;return nc if br is finished
;;x1y1=x2y2 66
;;x1+ 211 or 220, save 24~33cc
;;y1+ 206 or 207, save 22~23cc
;;x1+, y1+ 265 or 266, save 83~84cc
ld hl,(_cam_end)
ld de,(_cam_yx)
or a
sbc hl,de
ret z
ld hl,(_cam_acc)
ld bc,(_cam_mover)
bit 7,h ;sign check
jr nz,_br_doy
ld a,c
add a,e
ld e,a
ld a,(_cam_dx)
ld c,a
ld a,l
sub c
ld l,a
jr nc,_br_done
dec h
jp p,_br_done
_br_doy:
ld a,b
add a,d
ld d,a
ld a,(_cam_dy)
add a,l
ld l,a
jr nc,$+3
inc h
_br_done:
ld (_cam_acc),hl
ld (_cam_yx),de
scf
ret
EDIT: There was an error in my latter code that should be ld (_cam_acc),hl as opposed to ld hl,(_cam_acc). The algo would still work, but this makes it work better.
Produced this result:Code: [Select]ld b,1 ;use this to check if we bresenhammed
ld hl,(_cam_acc)
bit 7,h ;sign check
jr nz,_br_xfail ;skip if acc less than zero
ld a,(_cam_yx+0) ;xpos
ld c,a
ld a,(_end_yx+0)
cp c
jr z,_br_xfail ;skip if x1==x2
ld a,(_cam_mover+0)
add a,c
ld (_cam_yx+0),a
ld de,(_cam_dy) ;negate this in the setup code
inc b
add hl,de
inc b
jr c,_br_yfail ;skip if acc is non-negative.
_br_xfail:
ld a,(_cam_yx+1) ;ypos
ld c,a
ld a,(_end_yx+1)
cp c
jr z,_br_yfail ;skip if y1==y2
ld a,(_cam_mover+1)
add a,c
ld (_cam_yx+1),a
ld de,(_cam_dx)
add hl,de ;acc+dx
inc b
_br_yfail:
ld (_cam_acc),hl
dec b
ret
It's moving so fast the water looks gray xDI suppose it does, though I think it's more of an illusion provided by how the water's dithered. Kudos to Escheron/Zera for that.
Anyhow, looking awesome as usual ^^
So what was the point with trying the bresenham technique versus the original one? The original one seems to pan much more smoothly than the new one.
Also I came upon Escheron.pdf on the interwebs. I don't know if you are still using the story line as found in that file, but hell, the first two paragraphs sounded like something from a Sumerian legend.
Quick question, can armour be weak to certain elements? So basically negative resist?Indeed, it can. It indicates that by showing a '0' under the element instead of a '+'
So, where are we now?
So, where are we now?Alpha is imminent.
So got a little board. Everyone likes color so we decided to slap mono2color support onto E:ToR. Mateo did a wonderful job with his software. The port to the CSE took less then an hour!Hey, like, gimme that.
(https://dl.dropboxusercontent.com/u/98196116/Esor/gbpal.png)
I choose the funny colors. I think it looks cool :P
That aside it runs about 75% speed as of now. But is definitely still playable. Nothing like adding another piece of hardware you can play this game on :P
So got a little board. Everyone likes color so we decided to slap mono2color support onto E:ToR. Mateo did a wonderful job with his software. The port to the CSE took less then an hour!
(https://dl.dropboxusercontent.com/u/98196116/Esor/gbpal.png)
I choose the funny colors. I think it looks cool :P
I would be lieing if i said the Ti-82 style color was not my original intention. We decided those colors look a lot like an original gameboy as well :PIf you decide to include this version in alpha testing then I'll send an application promptly.
I would be lieing if i said the Ti-82 style color was not my original intention. We decided those colors look a lot like an original gameboy as well :P
When it'll be published?
is Escheron still being worked on?
That version of Windows looks old.
is Escheron still being worked on?
As far as I know, there aren't plans for a CE port at the moment.There should be... :P
I thought there was already a CE prototype of this ???The one in this thread is for the CSE. I doubt something this complex could be in basic, so I doubt it's already compatible with the CE series, whether it uses libs or not.
Is this build on the secret build distribution website? I'd like to try this out :)
Sadface about the TI-83+ support for the moment. :'(
Could you try compressing some of the code/data? A big lag occasionally is probably better than not being able to run the game at all.You *should* read all the previous posts. Almost all the compressible data is already compressed. What isn't is either unworkable or we don't have the RAM for a destructible copy of it. As a point of reference as to what's compressed (as obtained from the build process):
(without reading the previous posts, I am assuming that size is the problem)
Brass Z80 Assembler 1.0.5.3 - Ben Ryves 2005-2006
-------------------------------------------------
Assembling...
Pass 1 complete. (3550ms).
Font Table Size: 928
Routine allocs: 12, total memory allocated: 14893 of 8811 max exec.
-------
Page 0 bytes 15934 used of 450 remaining.
Page 1 bytes 16172 used of 212 remaining.
Page 2 bytes 9056 used of 7328 remaining.
Page 3 bytes 15833 used of 551 remaining.
Page 4 bytes 15637 used of 747 remaining.
Page 5 bytes 15618 used of 766 remaining.
VERBOSE_OUTPUT not defined. To show more info, define it.
-------
Pass 2 complete. (3454ms).
Writing output file...
Errors: 0, Warnings: 0.
Writing list file...
Done!
"Yeah, yeah. That's nice. When the fuck is this game going to be released?!"
...Hmm, I don't seen that quote anywhere, or is it implicit in @c4ooo comments? Anyways, still plenty of time until next September, IIRC :PQuote"Yeah, yeah. That's nice. When the fuck is this game going to be released?!"...
So, is there any sincere interest in this project, guys? I keep pushing Iambian to post these updates so the community can be up to speed with our progress, but here we are with little to no community feedback. We practically had to beg for beta testers, and trying to solicit any bug reports was like kicking a dead horse. The whole ordeal only detracted from the game's development. I've since taken on the additional workload of handling all the testing myself.I'm definitely interested in this project. It looks amazing so far and it will continue to be. I have been very busy. Not even my own projects are getting much attention because I'm too wrapped up in life right now. If I can find time, I'll definitely text some more
It gets under my skin, really. Iambian (especially!) and Geekboy1011 have poured their hearts and souls into realizing this project, and very few people can be arsed to offer them any positive encouragement? A little lip service here and there isn't doing anyone any favors. We'd love to see some real feedback for a change.
In case it's not clear, we ain't churning out some BASIC + xLIB "Super Autism Quest!" shit - Escheron is a goddamn behemoth of an ASM app that was forged from the blood of dragons, and you better believe Iambian's busted his balls off to get this game where it is now.
Let me reiterate that this project has come a very long way. All the underlying groundwork is there, and now all we need to do is finish scripting cutscenes and balancing the game's difficulty level. I do apologize that the biggest delay has been finishing up the writing, but Escheron has a novel's length of character interactions. Unless I start dropping amphetamines, I can't type this shit up any faster than I already am. But rest assured that Iambian, Geekboy1011 and I are proactively working our asses off to get this game off the ground.
tl;dr - A little encouragement goes a long way toward boosting morale, especially when games of this magnitude demand such an extensive amount of time and energy that they practically consume your entire life. Also, let me impart a word of advice to other aspiring indie devs: Be prepared to sacrifice your soul in the name of whatever creative vision you may have, assuming you don't want to settle for anything less than a *good* game.
(Also, don't take my little tangents personally. I'm just tired from all this goddamn writing. And I really, really need some caffeine right now.)
So, is there any sincere interest in this project, guys? I keep pushing Iambian to post these updates so the community can be up to speed with our progress, but here we are with little to no community feedback. We practically had to beg for beta testers, and trying to solicit any bug reports was like kicking a dead horse. The whole ordeal only detracted from the game's development. I've since taken on the additional workload of handling all the testing myself.I've been in love with this project since it was Lost Legends, and I think you guys know how awesome you are for making this beast. It's amazing to see it have come this far. :D In regards to testers, people only have so much free time to volunteer. I know it sucks, but that's just how it is. I've mentioned it before to geekboy, but if you guys really need more testing done I am willing to help. Spoilers will suck, but if it's needed and will help with getting the game out, I'm here.
It gets under my skin, really. Iambian (especially!) and Geekboy1011 have poured their hearts and souls into realizing this project, and very few people can be arsed to offer them any positive encouragement? A little lip service here and there isn't doing anyone any favors. We'd love to see some real feedback for a change.
In case it's not clear, we ain't churning out some BASIC + xLIB "Super Autism Quest!" shit - Escheron is a goddamn behemoth of an ASM app that was forged from the blood of dragons, and you better believe Iambian's busted his balls off to get this game where it is now.
Let me reiterate that this project has come a very long way. All the underlying groundwork is there, and now all we need to do is finish scripting cutscenes and balancing the game's difficulty level. I do apologize that the biggest delay has been finishing up the writing, but Escheron has a novel's length of character interactions. Unless I start dropping amphetamines, I can't type this shit up any faster than I already am. But rest assured that Iambian, Geekboy1011 and I are proactively working our asses off to get this game off the ground.
tl;dr - A little encouragement goes a long way toward boosting morale, especially when games of this magnitude demand such an extensive amount of time and energy that they practically consume your entire life. Also, let me impart a word of advice to other aspiring indie devs: Be prepared to sacrifice your soul in the name of whatever creative vision you may have, assuming you don't want to settle for anything less than a *good* game.
(Also, don't take my little tangents personally. I'm just tired from all this goddamn writing. And I really, really need some caffeine right now.)
Quick update on my end...That's awesome! Another step, huh? And how recent is the new CSE build on le secret beta build distribution site?
The game is now fully scripted. All of the character dialogs and cutscenes are written, but their actual incorporation into the project make take some time, since working with the cutscene engine is a nightmare in itself. (And luckily, that task falls upon Iambian and Geekboy1011 instead of me, since I'm not as technically oriented with the systems)
Quick update on my end...That's awesome! Another step, huh? And how recent is the new CSE build on le secret beta build distribution site?
The game is now fully scripted. All of the character dialogs and cutscenes are written, but their actual incorporation into the project make take some time, since working with the cutscene engine is a nightmare in itself. (And luckily, that task falls upon Iambian and Geekboy1011 instead of me, since I'm not as technically oriented with the systems)
Ya'll keep up the good work! I've been watching this for about a year now, and I can't wait till its finished. It really looks amazing! It really is inspiring to see such a well thought out quality game unfold. The graphics are the best I've ever seen in a calc game. There's a lot of time spent on plot and character development. I wish I had half the talent ya'll have, I'd be programming all the time. This will very likely be the most advanced calculator game that will ever be made.
I do have a question though. I remember ya'll saying it will be too big for the TI-83+, but would it work for the 83+ Silver Edition? I presume it will work fine on the TI-84+. I have all three, I was just wondering.
I really hope this project isn't over, ya'll are so close to being done!From what I saw in the post it isn't. Just one member of the team is on hiatus.
[...] This screenshot is from the Dreadnought area. It appears that Maya should be able to walk through here, (It' wide enough) but she isn't aligned properly with the map in order to be able to do so. Not sure if it's an error with the map data, or if it's not intended to be walkable. If not, I'd probably block it of with some tiles.
Surely there is some non-walkable tile (that doesn't look walkable) that could be plopped in there? Or are maps limited where only certain tiles are loaded per area? If not, maybe a small redesign of that area could be done?
Looks awesome! I was wondering if ya'll were taking a summer break, but it looks like you've been pretty busy! It kindof reminds me of Unity, especially once when ya'll set up a viewport window to see what the player sees. This looks like an engine you could create Escheron sequels or other tilemap games with.
It fascinates me seeing what all goes into planning and programming a game. How do ya'll know what to include when programming a cutscene or map editor? Is there an online tutorial that you've been using as a guideline and then make it calculator/Escheron specific?
Looks awesome! I was wondering if ya'll were taking a summer break, but it looks like you've been pretty busy! It kindof reminds me of Unity, especially once when ya'll set up a viewport window to see what the player sees. This looks like an engine you could create Escheron sequels or other tilemap games with.
It fascinates me seeing what all goes into planning and programming a game. How do ya'll know what to include when programming a cutscene or map editor? Is there an online tutorial that you've been using as a guideline and then make it calculator/Escheron specific?
This is indeed something I could use to help build other games with, tho in all honesty, I'm probably going to just teach the other people in the dev team how to use this so they can make all the cutscenes that won't require special ASM magic to accomplish.
Aside from technical stuff answered by references or Stack Overflow, no tutorials were used in the creation of this project. Beyond PIL and Tkinter, all the project's logic was put together from scratch. The main things that are chosen to go into the editor are based on the following:
1. What can Escheron already do with its cutscene script engine?
2. What sort of interface looks like it would work?
3. How to manage everything in a clear, concise and coherent manner?
For (1) we have documentation that details exactly what is available for use. For (2), I thought a little bit about how CalcGS arranged things and I remembered some extremely fuzzy details about my experience with Macromedia Flash back some 15 years ago. Then I sketched some ideas on a sheet of paper, shared it with the dev team, and got some feedback. And we're still working on (3) based on the problems encountered in actually implementing scripts in Escheron and the overall reason why we needed the editor in the first place. That reason being that it's extremely difficult to have multiple sprite objects and the main cutscene run their own scripts independently from and concurrently with each other and still maintain some sort of cohesion.
I was going to say something else but I forgot what it was. I spent far too long trying to figure out what I'm posting about and now I'm going to give up. There's a reason why Geekboy gives me cherries everyday. It's because my DETERMINATION is all out.
Escheron Cutscene Editor GUI does look great but just out of curiosity how old is the windows version?:PHowever old Win7 is. I use the old theme for memory reasons.
I know someone's going to give me grief for this.
-- Manually code in the first few cutscenes and get people to test the game up to that point
If you want to track the progress of this rebuild, I do my best to make daily commits to this repository, even if it's "omg everything broke sadfaic".
It's been pretty long since the last update, but I just wanted to post my support; I looked through the source a little bit and it looks like progress is going good! I understand how much of a pain it is to rewrite a game engine, and then I understand I have to multiply that pain by 20 since you're dealing with ASM. If you have any progress to show, I'd love to see!^This. :D
I would be lieing if i said we have gotten distracted by other projects over the last few months. And motivation to return to this, At least onmy end is rather low. That being said. We left off re-implementing the battle system.That's ok, it happens to the best of us (everyone knows I got majorly sidetracked porting Sorcery Monochrome). If as a tester, you need my help, I'd be absolutely ready to test.
I kinda sorta maybe fell in love with C and developing on the CE so I'm thinking about just dropping the b/w version and working on a color edition. It's just much easier trying to code something that way. If anyone else wants to pick up the rebuild from where I left off (https://bitbucket.org/iambian/escheron-maegis), I'll be happy to provide support, but until I find my love for z80 and overly-overengineered script systems again, I'm not sure I'll pick this up again.
It would be nice programming on a device where I don't have to worry so much about memory or paging. Or making up languages to keep size down.
Hi Guys,I kinda sorta maybe fell in love with C and developing on the CE so I'm thinking about just dropping the b/w version and working on a color edition. It's just much easier trying to code something that way. If anyone else wants to pick up the rebuild from where I left off (https://bitbucket.org/iambian/escheron-maegis), I'll be happy to provide support, but until I find my love for z80 and overly-overengineered script systems again, I'm not sure I'll pick this up again.
It would be nice programming on a device where I don't have to worry so much about memory or paging. Or making up languages to keep size down.
And I may or may not be strongly suggesting/backing this. The development cycle is much nicer and one EZ80-LLVM is done and we can use c++ the whole thing will fall into place much much faster with much less headaches. Easier to add in cut scenes and such. Really just more likely to be finished >.>
I kinda sorta maybe fell in love with C and developing on the CE so I'm thinking about just dropping the b/w version and working on a color edition. It's just much easier trying to code something that way. If anyone else wants to pick up the rebuild from where I left off, I'll be happy to provide support, but until I find my love for z80 and overly-overengineered script systems again, I'm not sure I'll pick this up again.
It would be nice programming on a device where I don't have to worry so much about memory or paging. Or making up languages to keep size down.