import java.awt.Image;
import java.io.IOException;
import javax.imageio.*;

class Marisa extends Body implements java.io.Serializable {
    static final long serialVersionUID = 2L;
    public static final int type = 0;
    public static final String nameJ = "まりさ";
    public static final String nameE = "Marisa";

    private static Image[][][] images = new Image[ImgFlag.NUM_OF_CONDITION][2][3];

    public static void loadImages (ClassLoader loader) throws IOException {
	final String path = "images/marisa/";
	final String dir[] = {"left/", "right/"};

	for (int i=ImgFlag.LEFT; i <= ImgFlag.RIGHT; i++) {
	    images[ImgFlag.BODY][i][adultIndex] = ImageIO.read(loader.getResourceAsStream(path+dir[i]+"body.png"));
	    images[ImgFlag.LICK][i][adultIndex] = ImageIO.read(loader.getResourceAsStream(path+dir[i]+"lick.png"));
	    images[ImgFlag.BRAID][i][adultIndex] = ImageIO.read(loader.getResourceAsStream(path+dir[i]+"braid.png"));
	    images[ImgFlag.ACCESSORY][i][adultIndex] = ImageIO.read(loader.getResourceAsStream(path+dir[i]+"hat.png"));
	    images[ImgFlag.DAMAGED][i][adultIndex] = ImageIO.read(loader.getResourceAsStream(path+dir[i]+"damage.png"));
	    images[ImgFlag.SHIT][i][adultIndex] = ImageIO.read(loader.getResourceAsStream(path+"shit.png"));
	    images[ImgFlag.CRUSHED][i][adultIndex] = ImageIO.read(loader.getResourceAsStream(path+"crushed.png"));			
	    images[ImgFlag.NORMAL][i][adultIndex] = ImageIO.read(loader.getResourceAsStream(path+dir[i]+"faces/normal.png"));
	    images[ImgFlag.SLEEPING][i][adultIndex] = ImageIO.read(loader.getResourceAsStream(path+dir[i]+"faces/sleeping.png"));
	    images[ImgFlag.CHEER][i][adultIndex] = ImageIO.read(loader.getResourceAsStream(path+dir[i]+"faces/cheer.png"));
	    images[ImgFlag.SMILE][i][adultIndex] = ImageIO.read(loader.getResourceAsStream(path+dir[i]+"faces/smile.png"));
	    images[ImgFlag.TIRED][i][adultIndex] = ImageIO.read(loader.getResourceAsStream(path+dir[i]+"faces/tired.png"));
	    images[ImgFlag.PUFF][i][adultIndex] = ImageIO.read(loader.getResourceAsStream(path+dir[i]+"faces/puff.png"));
	    images[ImgFlag.CRYING][i][adultIndex] = ImageIO.read(loader.getResourceAsStream(path+dir[i]+"faces/crying.png"));
	    images[ImgFlag.EXCITING][i][adultIndex] = ImageIO.read(loader.getResourceAsStream(path+dir[i]+"faces/exciting.png"));
	    images[ImgFlag.REFRESHED][i][adultIndex] = ImageIO.read(loader.getResourceAsStream(path+dir[i]+"faces/refreshed.png"));
	    images[ImgFlag.DEAD][i][adultIndex] = ImageIO.read(loader.getResourceAsStream(path+dir[i]+"faces/dead.png"));
	    images[ImgFlag.RUDE][i][adultIndex] = ImageIO.read(loader.getResourceAsStream(path+dir[i]+"faces/rude.png"));
	}
	images[ImgFlag.ROLL][ImgFlag.LEFT][adultIndex] = ImageIO.read(loader.getResourceAsStream(path+"roll_left.png"));
	images[ImgFlag.ROLL][ImgFlag.RIGHT][adultIndex] = ImageIO.read(loader.getResourceAsStream(path+"roll_right.png"));

	for(Image[][] array2d : images) {	
	    for(Image[] array : array2d) {
		if(array[adultIndex] == null) {
		    continue;
		}
		// Scale larger images down
		array[adultIndex] = array[adultIndex].getScaledInstance(adultWidth, adultHeight, Image.SCALE_AREA_AVERAGING);
		array[childIndex] = array[adultIndex].getScaledInstance(childWidth, childHeight, Image.SCALE_AREA_AVERAGING);
		array[babyIndex] = array[adultIndex].getScaledInstance(babyWidth, babyHeight, Image.SCALE_AREA_AVERAGING);
	    }
	}
    }

    public Image getImage(int type, int direction, AgeState age) {
	return images[type][direction][age.ordinal()];
    }

    @Override
    public int getType() {
	return type;
    }

    @Override
    public int getHybridType(int partnerType) {
	switch (partnerType) {
	case Reimu.type:
	    return ReimuMarisa.type;
	default:
	    return Marisa.type;
	}
    }

    @Override
    public String getNameJ() {
	return nameJ;
    }

    @Override
    public String getNameE() {
	return nameE;
    }

    @Override
    public Marisa clone() {
	return new Marisa(this);
    }

    @Override
    protected String msgWantFoodJ () {
	String[] output = {"ごはんしゃんのにおいがしゅりゅのじぇ", "ごはんしゃんのにおいがするのじぇ", "ごはんさんのにおいがするのぜ"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgWantFoodE () {
	String[] output = {"The shmell of mishder food, je!", "Smelled mishder food, je!", "It's the smell of mister food, ze!"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgNoFoodJ()
    {
	if (!isRude()) {
	    String[][] output = {{"ごはんしゃんにゃいよ！", "ごはんしゃんにゃいにょじぇ？", "ごはんさんがないのぜ？"},
		    {"ごはんしゃんかえちて、、、", "ごはんしゃんかえちて、、、", "ごはんさんがえぢでぐだざいぃ、、、"}};
	    return output[damageState.ordinal()][ageState.ordinal()];
	}
	else {
	    String[][] output = {{"ごはんしゃんにゃいよ！", "ごはんしゃんにゃいにょじぇ？ばきゃなの？しにゅの？", "ごはんさんないのぜ？ばかなの？しぬの？"},
		    {"ごはんしゃんかえちて、、、", "ごはんしゃんかえちて、、、", "ごはんさんがえぢでぐだざいぃ、、、"}};
	    return output[damageState.ordinal()][ageState.ordinal()];
	}
    }

    @Override
    protected String msgNoFoodE()
    {
	String[][] output = {{"Mishder food ish nod here!", "Mishder food ish nod here, je! Are you shtoopid?  Wand choo die?", "Mister food is not here, ze?  Are you stupid? Want to die?"},
		{"Gib back mishder food...", "Gib back mishder food...", "Pwease give back mister food..."}};
	return output[damageState.ordinal()][ageState.ordinal()];
    }

    @Override
    protected String msgExciteJ() {
	if (!isRude()) {
	    String output[] = {"ゆんやー!", "まりちゃのぺにぺにですっきちさせるのじぇ!", "まりさのぺにぺにですっきりさせてやるのぜ！"};
	    return output[ageState.ordinal()];
	}
	else {
	    String output[] = {"ゆんやー!", "まりちゃのびっぐまぐなむでひーひーいわせりゅのじぇ!", "まりささまのびっぐまぐなむでひーひーいわせるのぜ！"};
	    return output[ageState.ordinal()];
	}
    }
    
    @Override
    protected String msgExciteE() { return "Want to refresh, ze~!"; }

    @Override
    protected String msgRelaxE()
    {
	String output[] = {"Chake id eajy!", "Chake id eajy!", "Take it easy!"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgRelaxJ()
    {
	if (!isRude()) {
	    String output[] = {"ゆっきゅりしていっちぇね！", "ゆっきゅりしていっちぇね！", "ゆっくりしていってね！"};
	    return output[ageState.ordinal()];
	}
	else {
	    String output[] = {"くしょどれいはちね！", "あまあまよこしぇ！", "まりささまにあまあまをけんっじょうするのぜ！"};
	    return output[ageState.ordinal()];	    
	}
    }

    @Override
    protected String msgFuriFuriJ()
    {
	if (!isRude()) {
	    String output[] = {"ふーりふーり！ゆっくちー！", "まりちゃはさいっきょうにょじぇ！", "まりさはさいっきょうなのぜ！"};
	    return output[ageState.ordinal()];
	}
	else {
	    String output[] = {"ふーりふーり！ゆっくちー！", "まりちゃはさいっきょうなにょじぇ！", "まりささまはさいっきょうなのぜ！"};
	    return output[ageState.ordinal()];			
	}
    }

    @Override
    protected String msgFuriFuriE()
    {
	String output[] = {"Relax-relax~", "Mawisha ish da shdrongest, je!", "Marisa is the strongest, ze!"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgWakeupJ()
    {
	String output[] = {"ゆっきゅりしていっちぇね！", "ゆっきゅりしていっちぇね！", "ゆっくりしていってね！"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgWakeupE()
    {
	String output[] = {"Chake id eajy!", "Chake id eajy!", "Take it easy!"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgSleepJ() { return "すーやすーや"; }

    @Override
    protected String msgSleepE() { return "Sleep-Sleep---"; }

    @Override
    protected String msgScreamJ() {
	if (!isRude()) {
	    String[][] output = {{"ゆんやー！", "いちゃい！やめりゅのじぇ！", "いたい！やめるんだぜ！ぷくーだぜ！"},
		    {"ゆ、ゆ、ゆ、、、", "やめちぇねやめちぇね、、、", "おねがいじばず、やめでぐだざい、、、"}};
	    return output[damageState.ordinal()][ageState.ordinal()];
	}
	else {
	    String[][] output = {{"ゆんやー！", "いちゃい！ぷきゅーするのじぇ！", "いたい！まりささまになにをするのぜ！ぷくーだぜ！"},
		    {"ゆ、ゆ、ゆ、、、", "ごめんにゃちゃいやめちぇね、、、", "おねがいじばず、ごめんなさい、やめでぐだざい、、、"}};
	    return output[damageState.ordinal()][ageState.ordinal()];	    
	}
    }

    @Override
    protected String msgScreamE() {
	String[][] output = {{"YUNYA-!!", "ID HURD!  Going choo pyuff-pyuff, je!", "Stop it, ze!  Puff, ze!"},
		{"Shdop id, shdop id...", "Mawisha ish showwy sho pwease shdop id...", "Pwease, sdop id pwease..."}};
	return output[damageState.ordinal()][ageState.ordinal()];
    }

    @Override
    protected String msgScareJ () {
	String[][] output = {{"ゆんやー！", "ゆっくちできにゃいのじぇー！", "ゆっくりできないのぜ！"},
		{"やめちぇにぇやめちぇにぇ、、、", "ごめんにゃちゃいやめちぇね、、、", "おねがいじばず、やめでぐだざい、、、"}};
	return output[damageState.ordinal()][ageState.ordinal()];
    }

    @Override
    protected String msgScareE () {
	String[][] output = {{"YUNYA-!!", "I can'ch chake id eajy, je!", "I can't take it easy, ze!"},
		{"Shdop id, shdop id...", "Mawisha ish showwy sho pwease shdop id...", "Pwease, sdop id pwease..."}};
	return output[damageState.ordinal()][ageState.ordinal()];
    }

    @Override
    protected String msgAlarmJ () {
	if (!isRude()) {
	    String[][] output = {{"にゃんだかゆっくちできにゃいのじぇ！", "にゃんだかゆっくちできにゃいのじぇ！", "やめるんだぜ！ぷくーだぜ！"},
		    {"やめちぇにぇやめちぇにぇ、、、", "ごめんにゃちゃいやめちぇね、、、", "おねがいじばず、やめでぐだざい、、、"}};
	    return output[damageState.ordinal()][ageState.ordinal()];
	}
	else {
	    String[][] output = {{"やめりょくしょどれい！", "やめりょくしょどれい！しぇいしゃいしゅりゅよ！", "くそどれいはいますぐやめるんだぜ！せいっさいするのぜ！"},
		    {"やめちぇにぇやめちぇにぇ、、、", "ごめんにゃちゃいやめちぇね、、、", "おねがいじばず、やめでぐだざい、、、"}};
	    return output[damageState.ordinal()][ageState.ordinal()];
	}
    }

    @Override
    protected String msgAlarmE () {
	String[][] output = {{"I can'ch chake id eajy, je!", "I can'ch chake id eajy, je!", "Stop it, ze!  Puff, ze!"},
		{"Shdop id, shdop id...", "Mawisha ish showwy sho pwease shdop id...", "Pwease, sdop id pwease..."}};
	return output[damageState.ordinal()][ageState.ordinal()];
    }

    protected String msgDyingJ () {
	String[] output = {"ゆべっ！", "ゆ、ゆ、ゆ、、、", "ぶぼっ！"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgDyingE () {
	String[] output = {"Yubee!", "Puff!", "Blarf!"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgDeadJ () {
	String[] output = {"もっちょゆっくちしちゃかった、、、", "もっちょゆっくちしちゃかった、、、", "もっとゆっくりしたかった、、、"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgDeadE () {
	String[] output = {"Wanted choo chake id eajy more...", "Wanted choo chake id eajy more...", "Wanted to take it easy more..."};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgEatingJ () {
	if (!isRude()) {
	    String[][] output = {{"む〜ちゃむ〜ちゃ、ゆー", "むーちゃむーちゃ、ちあわちぇー！", "むーしゃむーしゃ、しあわせー！"},
		    {"むっちゃむっちゃ、ゆー！", "むちゃむちゃ、はふはふ！", "むーしゃむーしゃ、めっちゃうめぇ！"}};
	    return output[hungryState.ordinal()][ageState.ordinal()];
	}
	else {
	    String[][] output = {{"む〜ちゃむ〜ちゃ、ゆー", "むーちゃむーちゃ、それなりー！", "むーしゃむーしゃ、それなりー！"},
		    {"むっちゃむっちゃ、ゆー！", "むっちゃむっちゃ、はふはふ！", "むーしゃむーしゃ、これめっちゃうめぇ！"}};
	    return output[hungryState.ordinal()][ageState.ordinal()];
	}
    }

    @Override
    protected String msgEatingE () {
	String[][] output = {{"Myunch-Myunch, happinesh~", "Myunch~ Myunch~ Happinesh~", "Munch munch, Happiness~"},
		{"Myunch myunch...", "Myunch Myunch, nom nom", "Munch munch, this shit's good, ze!"}};
	return output[hungryState.ordinal()][ageState.ordinal()];
    }

    @Override
    protected String msgEatingShitJ () {
	String[] output = {"む〜ちゃむ〜ちゃ、げりょまじゅ、、、", "むーちゃむーちゃ、げろまじゅ、、、", "むーしゃむーしゃ、げろまず、、、"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgEatingShitE () {
	String[] output = {"Myunch-Myunch, disgusting,,,", "Myunch~ Myunch~ disgusting,,,", "Munch munch, disgusting,,,"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgFullJ () {
	String[] output = {"おにゃかいっぱい、、、", "おにゃかいっぱい、、、", "もうたべられないのぜ、、、"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgFullE () {
	String[] output = {"Tummy ish full...", "Tummy ish full...", "Can't eat anymore ze..."};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgHealingJ () {
	if (!isRude()) {
	    String[][] output = {{"あみゃあみゃ！", "あまあまおいちぃ！", "あまあまおいしいのぜ！"},
		    {"あみゃあみゃ！", "ふっきゃつしちゃのじぇ", "ふっかつしたのぜ"}};
	    return output[damageState.ordinal()][ageState.ordinal()];
	}
	else {
	    String[][] output = {{"あみゃあみゃ！", "あまあまもっちょよこしゅのじぇ！", "あまあまもっとよこすのぜ！"},
		    {"あみゃあみゃ！", "まりちゃはふっきゃつしちゃのじぇ！", "まりささまはかれいにふっかつしたのぜ！"}};
	    return output[damageState.ordinal()][ageState.ordinal()];
	}
    }

    @Override
    protected String msgHealingE () {
	String[][] output = {{"Shweet-shweet!", "Weally eajy, je!", "Can take it easy, ze!"},
		{"Shweet-shweet", "Can chake id eajy", "Can take it easy, ze."}};
	return output[damageState.ordinal()][ageState.ordinal()];
    }

    @Override
    protected String msgSukkiriJ () {
	String[] output = {"ちゅっきち！", "ちゅっきり！", "すっきり！"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgSukkiriE () {
	String[] output = {"Wefweshed!", "Wefeshed!", "Refreshed!"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgBirthJ () { return "ゆっくちちていっちぇね！"; }

    @Override
    protected String msgBirthE () { return "Chake id eajy!"; }

    @Override
    protected String msgShitJ () {
	if (!isRude()) {
	    String[] output = {"うんうんぢぇりゅ！", "まりちゃのすーぴゃーうんうんちゃいみゅにょじぇ！", "まりさのすーぱーうんうんたいむのぜ！"};
	    return output[ageState.ordinal()];
	}
	else {
	    String[] output = {"うんうんぢぇりゅ！", "くしょじょれいはまりちゃのうんうんくらうにょじぇ！", "くそどれいはまりささまのうんうんくらうのぜ！"};
	    return output[ageState.ordinal()];
	}
    }

    @Override
    protected String msgShitE () {
	String[] output = {"Poo-pooing!", "Id'sh Mawisha's shuupa poo-poo time je!!", "It's Marisa's super poo-poo time, ze!"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgShit2J () {
	String[] output = {"すっきち！", "すっきちー！", "すっきりー！"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgShit2E () {
	String[] output = {"Wefeshed!", "Wefeshed-!!", "Refreshed~!"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgSuriSuriJ () {
	String[] output = {"ちゅりちゅり", "ちゅーりちゅーり", "すーりすーり"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgSuriSuriE () {
	String[] output = {"Wub-wub", "Wub-wub", "Rub-rub"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgPeroPeroJ () {
	String[] output = {"ぺりょぺりょ", "ぺーりょぺーりょ", "ぺーろぺーろ"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgPeroPeroE () {
	String[] output = {"Wick-wick~", "Wick-wick~", "Lick-lick~"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgBreedJ () { return "う、おちびがうばれるのぜ、、、"; }

    @Override
    protected String msgBreedE () { return "B...Being born..."; }

    @Override
    protected String msgBreed2J () { return "ゆっくりしていってね！"; }

    @Override
    protected String msgBreed2E () { return "Take it easy!"; }

    @Override
    protected String msgHateShitJ () {
	if (!isRude()) {
	    String[][] output = {{"くちゃい〜！", "うんうんくちゃい！", "うんうんかたづけてね！"},
		    {"くちゃい、、、", "くちゃいよ、ゆっきゅりできにゃい、、、", "くさいよ、ゆっくりできないよ、、、"}};
	    return output[damageState.ordinal()][ageState.ordinal()];
	}
	else {
	    String[][] output = {{"くちゃい！", "しゅぎゅにうんうんしゅぎゅにかたじゅきぇるのじぇ！", "くそどれいはすぐにうんうんかたづけるのぜ！"},
		    {"くちゃい、、、", "くちゃいよ、ゆっきゅりできにゃい、、、", "くさいよ、ゆっくりできないよ、、、"}};
	    return output[damageState.ordinal()][ageState.ordinal()];
	}
    }

    @Override
    protected String msgHateShitE () {
	String[][] output = {{"Shmelly~!", "Poo-poo shdinky!!  Help eajy!!", "Hurry up and save me from poo-poo!! Right now is fine!"},
		{"Shmelly...", "Shmelly, can'ch chake id eajy...", "Smelly... can't take it easy..."}};
	return output[damageState.ordinal()][ageState.ordinal()];
    }

    @Override
    protected String msgHungryJ () {
	if (!isRude()) {
	    String[][] output = {{"あみゃあみゃちょうじゃい！", "ごはんしゃんまりしゃにちょうだいのじぇ！", "まりさはごはんさんほしいのぜ！"},
		    {"ごはんしゃんどきょ？", "おにゃきゃへっちゃのじぇ、、、", "ばりざにごはんぐだざいぃ"}};
	    return output[damageState.ordinal()][ageState.ordinal()];
	}
	else {
	    String[][] output = {{"あみゃあもっちぇこい！", "すぎゅにごはんしゃんもってきゅるのじぇ！", "くそどれいはごはんさんまりさによこすのぜ！たくさんでいいよ！"},
		    {"ごはんしゃんどきょ？", "おにゃきゃへっちゃのじぇ、、、", "ばりざにごはんぐだざいぃ"}};
	    return output[damageState.ordinal()][ageState.ordinal()];			
	}
    }

    @Override
    protected String msgHungryE () {
	String[][] output = {{"Gib up shweet-shweets!", "Bwing mishder munch-munch choo Mawisha, je!", "Give up the mister munch-munch to Marisa!  A lot is fine!"},
		{"Where ish mishder food?", "Mishder tummy ish hungwy, je...", "Please give Marisa mister food..."}};
	return output[damageState.ordinal()][ageState.ordinal()];
    }

    @Override
    protected String msgNoAccessoryJ () {
	String[] output = {"ゆぇーん！かえちてね？かえちてね？", "ゆぇーん！まりちゃのしゅてきなおぼうししゃんかえちてね？", "まりさのくろくそびえたつおぼうしさんはどこなのぜ？"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgNoAccessoryE () {
	String[] output = {"Yunn~! Where ish misder had?", "Yunn!! Where ish Mawisha's beaudiful mishder had, je?", "Where is Marisa's mister hat, ze?"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgHateYukkuriJ () {
	if (!isRude()) {
	    String[] output = {"ゆっくちできにゃいゆっくちがいりゅよ", "ゆっくちできにゃいゆっくちがいりゅのじぇ", "ゆっくりできないゆっくりがいるのぜ！"};
	    return output[ageState.ordinal()];
	}
	else {
	    String[] output = {"ゆっくちできにゃいゆっくちがいりゅよ", "ゆへへ、ゆっくちできにゃいゆっくちがいりゅのじぇ", "ゆへへ、ゆっくりできないゆっくりがいるのぜ！せいっさいするのぜ！"};
	    return output[ageState.ordinal()];	    
	}
    }

    @Override
    protected String msgHateYukkuriE () {
	String[] output = {"There'sh a yukkuri that can'ch chake id eajy", "A yukkuri that can'ch chake id eajy, je", "A yukkuri that can't take it easy, ze!  Punishment time, ze!"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgFlyingJ () {
	String[] output = {"おちょらをとんでりゅみちゃいのじぇ！", "まりちゃはおしょらをせいふくしたのじぇ！", "まりさはおそらをせいふくしたのぜ！"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgFlyingE () {
	String[] output = {"Ich feewsh wike fwying, je!", "Maricha conquered shky, je!", "Marisa conquered the sky, ze!"};
	return output[ageState.ordinal()];
    }

    @Override
    protected String msgSadnessForChildJ() {
	return "おちびしぬんじゃないのぜ！";
    }

    @Override
    protected String msgSadnessForChildE() {
	return "Don't die, my little one, ze!";
    }

    @Override
    protected String msgSadnessForPartnerJ(Body partner) {
	return partner.getNameJ() + "めをあけるのぜ！";
    }

    @Override
    protected String msgSadnessForPartnerE (Body partner) {
	return "Open your eyes," + partner.getNameE() + ", ze!";
    }

    // public methods
    public Marisa(int initX, int initY, int initZ, Body.AgeState initAgeState, Body p1, Body p2) {
	super(initX, initY, initZ, initAgeState, p1, p2);
    }

    protected Marisa (Marisa m) { super(m); }
}