So many questions... lol
1) is "alias_method" the same as "alias"?
Yes, it is. I use alias_method because of the SDK. The SDK has a alias log method, that aliases the alias_method, to auto-log methods. XD
2) Isn't "character_name" a property? (didn't know I could alias a property to a method)
You can alias a method, and...
class Game_Actor
attr_reader :character_name
Creates a method that returns the instance making it public by accessing the character_name method (hence, public instance variables).
3) why do we need the '.dup'? (we're not dealing with pointers, are we?)
Yeah, that's why we dup. I honestly can't say for sure if we need to do it (because I am too lazy to test 85% of the code I give out), but I believe we do, as the original method returns an instance, and modifying it modifies the pointers and all that jazz. I hate pointers. They always get me.
4) when does the new "character_name" method get called?
Anywhere. All Game_Actor objects are readable by accessing the $game_actor[actor_id], and because character_name is a method that returns the instance, any place in the game can read this instance. In our instance, Sprite_Character and Sprite_Battler read this method in their update methods. They set the bitmaps.
5)
I still need to call 'set_graphic' from the exp= or level= methods?
Or, we need a $game_player.refresh somewhere...
If you try this out, using an event to change the exp or level, it doesn't change the graphic of the current player sprite. If I go to the menu, which calls character_name, it changes the graphic in the menu. (same if you test it in battle)
You shouldn't have too, but I will look into it.